飞飞世界论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 17905|回复: 0
打印 上一主题 下一主题

一键整理背包

[复制链接]

197

主题

203

帖子

1084

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1084
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件# B4 @0 E$ t% K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: U/ l9 b) |4 M( v' x7 b/ I6 ?( ]
$ o3 P) c) ^% ?: fstruct sItem9 C# D% c' a2 ~( x' L: q
{
6 j% `9 \% h9 }% z/ l# [DWORD dwId;1 ^; ]  S3 G; a- ^% A
DWORD dwKind2;# Q9 a, E3 B+ \' y% e# ?
DWORD dwItemId;2 x. m; p' b' B
BYTE nIndex;$ s, O/ \5 C) l& H$ W% e0 b, ]
sItem(){. o$ h; ^  B! @$ f$ B; ?- ^
  dwId = dwKind2 = dwItemId = nIndex = 0;/ ~# S/ T! Y' R0 R9 H
}
  E0 e9 [/ I) w* L& d: ~bool operator < (const sItem p2), p! t3 i% O+ Z4 I  T
{
8 g9 o# e# i% B) S  if (dwKind2 == p2.dwKind2)
- K0 j5 y0 P- m+ Z  {
' z+ A8 m, a1 h! a( a   return dwItemId < p2.dwItemId;
# E! N1 T3 Q% a; _2 k  C  }else{
5 N4 q' k7 V8 U0 N1 O' u8 d   return dwKind2 < p2.dwKind2;
# g+ h0 V% A8 ^+ C  }
" D2 K1 V4 n# W' n# M- _}
2 H. t/ k9 X0 x- }; k};
1 e) [( ?8 X* S9 N* o$ C* tclass CInventorySort' w* q0 M0 d- F" O, j
{
. w! n- E7 T3 E1 l+ \public:
9 W8 b9 ^, G) k/ Q- t" h# A! CCInventorySort()
0 C) S. g& [! i* i+ A( J{
( a( b1 [/ e! ^! z- v  H! P  m_dwPos = 0;
( T+ J1 o3 I: |/ T3 u; I- M( |}
, J7 @+ C+ Y6 b9 }! S1 ^~CInventorySort(){}
! z% T' x+ L& ^/ m  l% Tprivate:- L8 k2 f* U1 T( n# b( Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  x3 s) D% s; x' S' C* I( ~' ^. W$ zDWORD m_dwPos;5 t- c  e6 [$ u2 s7 X
public:, k3 H) O( n4 a8 r
void Add(BYTE nIndex)! A7 }1 R- b$ R
{: k5 N# H* \  `1 o7 [' y
  if (m_dwPos >= MAX_INVENTORY)1 r( s  z0 K2 X7 S- d+ o
  {
  {: F# p  t" a8 n/ }   return;9 ^" F& X6 L& ]$ ^: y
  }
) h3 m9 X* Y( r( M5 l  m_Item[m_dwPos].nIndex = nIndex;( n; l- j0 p7 z# g6 }2 W6 q
  m_Item[m_dwPos].dwId = m_dwPos;
2 S  \) z/ f' b9 z  m_dwPos++;+ l; N1 W+ e- ]8 {9 ?
}
. H9 Y8 c+ }! {. P3 e9 tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 |( j  Y6 n; n  r1 N. P{
. ?$ t: w$ U' m* D6 F  for (int i=0;i<MAX_INVENTORY;i++)
& y4 L, c! _; c9 d  [  {
  m$ w% E, m& V/ U! I0 [   if (m_Item.dwId == dwId)
2 x8 B+ c1 [* p$ ?0 M1 ]" ?   {
# e8 @' P# J' t/ i! ^    return m_Item.nIndex;% f) V( [2 n! s4 \9 y, o) S
   }
2 w. R" @2 O, k" r! U2 S+ f) z  }
- O& A2 S8 e3 |+ K  return 255;& \/ v  S- @6 g- h. u( ]! P( W6 H
}
; H) B$ z4 N4 U# Q+ K% j1 svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 `8 z1 o) Y% v# K# B
{. ~( @4 C- a. p) |! z
  BYTE nTmp = 0;
4 F  n) T) f6 \$ o0 l/ D& H  bool bDest = false,bSrc = false;; {6 U: \. v# \# Q/ D0 ^
  for (int i=0;i<MAX_INVENTORY;i++)3 q3 l4 S; g% V) M  T
  {
! ?. T/ x; T# t6 ~- Y   if (dwSrcId == m_Item.dwId)7 q2 Y- w" L/ P0 o$ M, O
   {, p& w) d& B7 k' i+ l9 W3 J
    //id相等 则 改变对应的dest和src8 S, {& n  r- A- t. C9 o2 W
    nTmp = m_Item.nIndex;
5 c7 O& E/ ?9 {$ t    m_Item.nIndex = dest;8 [+ Z* A/ l# O. @  H+ }. J. x
   }
4 i3 U6 u. e: O/ m5 S0 ~" g- E- _  }5 T' G0 c0 c2 U
  //临时数据保存完毕,交换开始- {0 |7 b* l2 ~$ u+ m
  for (int i=0;i<MAX_INVENTORY;i++)
) _3 A  y5 G( @( l) D; L% s  {8 X6 G% j) t* `, d
   if (dest == m_Item.nIndex)0 }4 h- {, V2 \2 R  [
   {$ r  R% i) G3 Q3 N8 ^7 r" s# k1 T
    //id相等 则 改变对应的dest和src
( G; E' j0 Y0 o    m_Item.nIndex = nTmp;
0 E+ I) c2 X1 g2 H" d   }
6 Y0 p1 K  }3 w5 a  }
) E7 w0 ^& V3 s. v8 w' t}! z$ O; @3 D6 S
};0 K. _& m1 Y2 e  v( Y
-------------------------------------------------------------------------# M# d' L$ ]' W, U+ W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 U' }, K5 B  z% x6 F( t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 L! _5 s3 l( B紧靠其上添加:2 Z" L# v* K+ y6 M3 I
if( pWndBase == &m_wndMenu )
  S3 m! C; F- F) d/ ?$ G{
+ G3 b' b9 ~; M, m( t3 L* K  t: R6 u  switch( nID )7 ]( v7 E6 `, }. T% ?4 R) h; ~7 o
  {, d1 H% \4 f) u( U* i
  case 2:
& j; _( w+ g, d* H+ m' ^; U   {' U. y6 @" K2 H& [$ Q" V4 [
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! W3 U. t0 C& D" [) ?
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 b6 T7 {# ]: W* a
    {
5 B, k5 M- e4 p" l& s( ^     break;) q4 \3 B: T- P4 ~3 _
    }) G- w- F! C- G2 t  Q
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* \3 f' I# B' F' e+ R    {
6 m0 B' b8 `) x$ T, {7 T5 O6 ]. F     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 W! s0 m( M  @- z# @" q0 m9 e) k     if( !pItemElem )
2 E# e% u: \* W  _  `      continue;& J3 g. U, H9 U4 y9 @
     if(pItemElem->GetExtra() > 0)
, N% {, Z% J. c4 Z$ [      continue;0 Z! k. Q7 e/ o. L# r* {8 c, B
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! v+ a  g- B! p$ Z% i
      continue;8 y3 Q0 X5 C& c; n3 {. ?, z
     if( g_pPlayer->IsUsing( pItemElem ) )
: H  }5 b" H4 O2 D4 z( a, c      continue;) F/ Q0 H5 u" C& b$ |) F6 ]% j
     if( pItemElem->IsUndestructable() == TRUE )
1 J. z8 Y8 V" V/ F; Q4 c     {7 @, ]0 J+ S. B
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 n- F- G, M5 v4 y3 c7 Z      continue;
2 c8 ~; c  J2 _) ?* D6 y     }4 y$ Q$ Z( Z, K/ g$ o( }* w7 g
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" U7 O/ m5 [$ K5 k/ M    }
: a2 o$ E% W' R  o# y5 }( U5 b: J. G    break;! z# r2 c5 w! Z- ]8 ~! g
   }! |1 F0 W2 B+ d+ i  W# w
  case 1:4 k. B, R! u* E3 R, B
   {& {- i6 f* j2 t7 I4 F6 ]
    //整理背包; F2 p6 c6 D9 ]# v' U5 `" U
    //////////////////////////////////////////////////////////////////////////
# w  ?$ w& B4 I" t( @% X    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. G+ d* `$ L3 L% N2 h8 E0 v
    //////////////////////////////////////////////////////////////////////////% o6 t; _6 P) F3 O( u
    //////////////////////////////////////////////////////////////////////////
* f' _3 I! J" F* {: L    CInventorySort* pInvSort = new CInventorySort;2 |: x- f; M8 U  U0 P) W
    vector <sItem> vItem;6 o+ b9 i$ |7 Y7 i' [- \; [, n
    vItem.resize(MAX_INVENTORY);//初始化大小
$ k! E! t* n6 ]- W2 Q9 Q/ \  M* s$ o     //////////////////////////////////////////////////////////////////////////
* x) q( h' q" \! I     //填充数据
5 x8 A. r- E& h     for (int i=0;i<MAX_INVENTORY;i++)
' ~. E7 {0 [$ H. M# h! `. D# b     {0 a( `8 L% z. K2 F  N- h' Q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 I/ u, K- I& q" S
      if (!pItemElem)$ p/ F' E/ A& f: n$ K8 `
      {
  y  a! q3 H$ {0 Z9 _- u       vItem.dwKind2 = 0xffffffff;
  O& b6 Y3 h5 q; J* a' ?  n+ O6 X       vItem.dwItemId = 0xffffffff;
5 N% E. t+ w7 N: e7 c% ]: C" f       vItem.nIndex = i;
- E' h# E# d9 k4 W! }: O$ P5 J      }else {
5 W" {& t7 [& a  J6 J" a% L3 J       ItemProp* pProp = pItemElem->GetProp();
5 Y: @% d  d- |# b       vItem.dwKind2 = pProp->dwItemKind2;! t# c( s/ s& t& A+ g% P
       vItem.dwItemId = pItemElem->m_dwItemId;
( k6 b9 c/ Z1 @       vItem.nIndex = i;: ~, h7 i2 {, q6 P' v2 Y2 m: a7 D% `
      }7 u$ C/ K! R8 n4 O, m5 U' J% W; O) Y
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* P: m4 I/ H3 j3 K# u& {# A" K
     }
) p; L6 ?9 j! g* h     //////////////////////////////////////////////////////////////////////////' `' c+ Q) U( Z" }2 D  t
     sort(vItem.begin(),vItem.end());//排序" V/ `% p6 X! ], c( y; {
     //////////////////////////////////////////////////////////////////////////
7 W1 B5 q+ [4 H- v* I+ v     //交换9 |6 ~# D  Y, e( t/ _
     for (size_t i=0;i<vItem.size();i++)
1 U! @% ?) H( K) j# e# ]& Z     {& X- B9 B' S2 L6 f: E6 P
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" z* F2 ~$ r  {. m- N$ U
      pInvSort->Add(vItem.nIndex);
- C0 G" l, `! U9 C" }     }
7 Z, ?6 l- l3 p7 u     BYTE nDestPos = 0;
9 z  {4 S( w/ ^- W: D     for (int i=0;i<MAX_INVENTORY;i++)/ q7 D" p- `9 e) J0 X. Q
     {
2 o) D/ F4 U5 ]5 ~4 I8 x7 N, W      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" B+ g7 w9 ^$ e3 g+ P. u$ e5 V) |
      if (pItemElem)
: K: z  K! [) C2 C: l      {
$ q5 X3 R2 Q) z  q# M       if (IsUsingItem(pItemElem))
( A# T3 V$ W* a& Q( ?# s7 H       {
9 a0 M0 ~  X1 y# G. x5 \        //这个位置无法放
& d! V: h! i$ l) F& H        nDestPos++;
5 Z5 ~3 l# ?7 O, V       }6 Y/ D' {) g7 r; `
      }
% o' B: L; U$ }$ h% \      BYTE nSrc = pInvSort->GetItemSrc(i);
0 q' c' p; ?3 |0 s      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 ^8 @4 Z# d* D8 I0 F9 D# P9 Z4 T6 x
      if (pItemElem)9 E2 K. Q5 q% F: P& K# f) T1 ]/ {
      {
$ j) }. W) C& c" |3 C+ O! t$ o       if (IsUsingItem(pItemElem))% @' R6 Y5 Y, u4 y% _0 u# B
       {
$ A5 K5 z- _/ B! b$ F% k8 a# Y        //这个道具无法移动,跳过
+ M% f- _4 J, p- w/ ~# v) I        continue;, N! J2 e3 q! e: [# Y
       }3 Y8 y, e; p8 x4 Y: y. D  }7 I+ V
      }else{- t. M. d1 e. e9 _1 y, R8 J
       //空位置 不用动& s% x, r1 E& [9 C/ T
       continue;
& t. M6 A  R  c5 q* p* C& J- r2 Q      }2 C3 i& J1 K  r* e
      //////////////////////////////////////////////////////////////////////////
8 l, m% t3 V3 w4 t' |      //开始移动- Q8 `1 s: n5 v7 Z5 k
      if (nSrc == nDestPos)- m! ?! f8 v: J
      {1 i: Q. W8 T$ I! D& J6 o4 E
       //原地不动
+ k: Z  {/ z+ ?: I       nDestPos++;7 ]3 m/ _" q' j
       continue;, ]+ B% `( g; ^( ~1 T' `# m7 e
      }: r2 U( s5 B2 b7 J9 P! Z
      pInvSort->MoveItem(i,nDestPos);1 A3 b6 r& k! g) R7 j4 A& O
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 Z* I# g' U6 H& }% S- C      Sleep(5);7 w! S3 n1 D; k/ o
      //Error("移动 - %d->%d",nSrc,nDestPos);
9 j+ O% z0 M  T3 C3 Y      nDestPos++;5 q- f' c3 k4 [2 |1 ]
     }
- O# J- |+ l% b# V     //取第一个元素的信息
7 H  Z+ s, \9 q9 i& w     /*+ r0 I7 @" r- c3 G% B! ^5 O
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 ~3 D2 j4 P# Y" i; ~6 j2 @! p
     {+ a% b( z- V( ~) ]" l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 ]8 z! d/ Y+ L2 n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% ?$ Q4 t% b% v9 P9 W' B
     }
1 W3 b8 I1 L/ h6 n     */
* q/ J  o9 n" x    //////////////////////////////////////////////////////////////////////////
& K& P( |8 c/ o' k    break;/ W8 V2 C% w; W' G1 f( b
   }/ m7 e& d# P. p- l* Z7 x5 S
  }
9 t+ L: r9 m1 S; V, _9 C0 _}
: I$ I6 n" H& |- am_wndMenu.SetVisible(FALSE);
- R0 ?3 {2 I% Y1 G  y0 C% O  w% {
0 G) A( X$ H) J9 Y  E, L--------------------------------------------------------------------------------------------------------
6 e* e* J: m% G3 V  C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: F' l. h8 u( }. f{% o; r, V0 Q, e9 C
BaseMouseCursor();7 u9 t9 k& L3 o% S# G' `' Z
}2 G, a) \. _; ^9 ]
在其下添加:
- I6 A9 W; O/ H! B' pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 O% B9 Y4 H9 i8 [3 Y( L8 J
{
, l2 t* o8 c& dm_wndMenu.DeleteAllMenu();# W3 c5 F4 q% i5 \! X
m_wndMenu.CreateMenu(this);
1 ], F  r/ K" G0 @, n( sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ O$ \' F! H  Z, P, @
( s- ]/ Z1 G* d9 R; nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- R5 o% z7 t" l7 U2 M' M4 p1 c7 X
{1 y. A% n  P* ^1 f" D
  //P以上级别才可以删除所有道具# ~" V3 T; k* }. z5 @
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 C8 y' E4 H3 G/ n1 A3 r
}7 s# a7 |9 x' \0 [: R  F; U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 R! f, N) i6 r/ C/ ]% \7 ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' D3 b4 h! d3 C+ ^8 |m_wndMenu.SetFocus();
7 b6 q5 M4 g- `. {}% W- O1 r6 |/ K! X( b
------------------------------------------------------------------------------------------------------------
$ J. f5 M- u0 i*************************
: T& P5 g* z5 J! i$ lWndField.h文件. v1 C/ M) W6 |  |( N: z
*************************
$ k( l1 N6 G/ R2 k) Y5 y搜索:BOOL m_bReport;, q0 l' F# `, Q
其后添加:3 o2 J9 F9 [# Q9 U) b: \
CWndMenu m_wndMenu;
% z1 L# q  O( k* B$ U" }, L, p: K+ f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- W% g. R; @0 R' p
其后添加:
6 Q/ e, g2 r( Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 O# K2 {. j8 c
6 y' _" q" s5 i* c8 d6 o  O% S; I8 q

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|飞飞世界技术论坛  

GMT+8, 2025-11-19 01:22 , Processed in 0.068205 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表