飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
* r3 U/ Z2 r1 o/ n" R# M; d% h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' {. j  N- _- [9 s* u' j* V& a4 }' J" ?6 A% I! d
struct sItem( x# P  r, V) |3 p. }
{
& g7 u/ }4 G' |) r4 E8 DDWORD dwId;+ M0 `# k  M9 W, R+ Q7 O
DWORD dwKind2;' a, e! r9 C% h) `: F4 B
DWORD dwItemId;8 ]- g9 K7 \- s! }8 }7 z
BYTE nIndex;
4 S3 J5 D5 O1 ]. a' QsItem(){
! p; K" c* d) O  dwId = dwKind2 = dwItemId = nIndex = 0;
7 n9 }% J  v* ]3 a}
2 [2 r, T$ a* l$ c& ^% s* Sbool operator < (const sItem p2)
# e0 H- W" x* `{
/ w9 }  h" i8 Z  if (dwKind2 == p2.dwKind2)
5 v$ A7 R1 d8 T9 h5 y  {
/ H9 J8 ~8 H. y( M0 b   return dwItemId < p2.dwItemId;
' R: Y9 s; m$ B; m7 G# k) q9 q" N  }else{6 h/ I& h$ |4 b, ?, W% w$ w7 }
   return dwKind2 < p2.dwKind2;! \. z* ?/ M7 ]+ m* X$ w* N0 n
  }
7 B! s6 \- }2 ^( Z4 m$ X}
* L& V5 S2 `. M. \: W- O};% D+ y9 ~/ L) W0 D# X
class CInventorySort+ A- X$ T8 x5 F5 r$ a
{
1 N* n' J7 d: x' N, Qpublic:
# O+ i9 S5 Q. G5 d5 pCInventorySort()
% u' i. j: I  R0 }  L{
% M5 F9 J2 |% I) c( o  m_dwPos = 0;6 p6 J9 Q, A9 O! S+ L% W& |
}
" i( k8 X' O1 f& P( V, _* v~CInventorySort(){}" p: R1 U* |% T* D9 A
private:
$ L/ C2 o- Y1 `; QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" S9 R; c8 `8 x4 |, `5 X1 G" U
DWORD m_dwPos;
0 d; g! P  m3 Y& N6 O5 A; c2 M9 Cpublic:
. a5 U4 `& C) J) C+ ^void Add(BYTE nIndex)
) A+ t# W  J% S/ \, L" d/ [1 v3 p{9 Y3 f9 [  d, F! h7 s
  if (m_dwPos >= MAX_INVENTORY)
$ s0 V5 ^* d0 g  t6 i& Z  {
2 b5 W' n" q% d   return;
. l3 K9 M: {; r0 ?' h$ p  }
2 U6 M2 C9 Q& A( Z% ^' Q  m_Item[m_dwPos].nIndex = nIndex;* u9 C# X) d) C* f* v1 V* e: O& X( C
  m_Item[m_dwPos].dwId = m_dwPos;
/ e0 U4 q# s6 d7 V  m_dwPos++;
& C' z, k6 m' {/ K1 [}
3 N5 C+ d( d( Z- sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' B) L* \) h2 E2 R1 p! A8 ?7 v
{
* C, [( U# p3 B0 r) s! N9 h  for (int i=0;i<MAX_INVENTORY;i++)
9 _1 [" X2 N9 o3 \- l  {9 X0 N9 q" u3 \/ q6 U
   if (m_Item.dwId == dwId)
3 v! i' Y/ T8 V1 x   {% Q5 @$ [& A0 u# Q2 Z$ Y; `
    return m_Item.nIndex;
6 G4 Y: |, G6 _9 Y0 A9 V9 J& z   }
; A. _5 z  z5 m" B; n- C0 ^  }: Y2 W' u) n; ]) p/ w- X. H5 }/ N3 [
  return 255;
" A. S* X# W) h' j) S}) L) q! Z7 s) c: x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. s1 ]( Y# I' a  L  R# P2 p
{
, b2 P& @0 L6 y5 u  w) v  BYTE nTmp = 0;
, W6 |5 f; ?5 S) t& x  bool bDest = false,bSrc = false;4 I! N0 o1 P1 U8 d) ~
  for (int i=0;i<MAX_INVENTORY;i++)5 D6 L  ^. G) f' i
  {
2 ~9 y2 e1 F, i8 ]1 _- o7 N2 s   if (dwSrcId == m_Item.dwId)
( k- o6 [5 n: p% Z   {4 h+ j2 }6 T% T$ f% J+ G! H) V4 v
    //id相等 则 改变对应的dest和src, }6 p1 n* T) ]: r7 r* e
    nTmp = m_Item.nIndex;
: ^4 q' ~: L% i; V1 f    m_Item.nIndex = dest;
' P! `  x, S% L( J. {5 `3 O$ v   }# y( A) Z7 ~7 p
  }4 f9 `, F4 c6 S; I- z5 f
  //临时数据保存完毕,交换开始5 i" `: w4 `* h4 D
  for (int i=0;i<MAX_INVENTORY;i++)& d7 T& M4 L% l0 U
  {# B: v( B, P2 {7 m
   if (dest == m_Item.nIndex)( G) E2 l1 I; a8 R
   {- s' f& o7 b7 f0 q( @, p. N+ x
    //id相等 则 改变对应的dest和src8 C; F. |2 k5 F! O7 b  n* ?+ ~
    m_Item.nIndex = nTmp;
4 v/ x% j  ?# I) v8 w   }
7 @$ f+ a$ ?6 R  J! W! t  }) r, S5 ?+ V, z# e) J  K( y* }! i' K" ]
}* R% q3 q7 V$ z) Y
};0 A( j  b2 i9 c3 G
-------------------------------------------------------------------------
. l, X: ^* I$ j5 C  N5 f/ ?3 p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 p) C6 a: l1 i( p+ I2 e搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, O/ E9 O% b! r; y
紧靠其上添加:' z: R5 f/ x* C
if( pWndBase == &m_wndMenu )
) y' [9 `: R) Y. J% r# `: v: L{7 X  n* e; P, [
  switch( nID )6 q) J3 X" E/ G) |. K
  {3 ~& r3 I: ~) g$ \* O# u& w9 P
  case 2:( {% W" G8 \$ w
   {8 j: ?# @8 q- @9 V6 {5 d5 U9 {
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( |) ?* |  r. c% ~! Y7 C    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 r) o% C# e& h1 D! E6 G    {
- R  ^8 ^* I% h: ~% M  f     break;
' ?$ B* r9 K3 ^1 r0 S    }% c: }# m# l) C3 M* Q
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 |3 X: y$ I0 h% ~9 D* [0 g; ~+ b3 m    {
2 S" Y1 R9 S3 f, e  V+ e+ l3 [* n' Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 {9 V2 j  A: z# u0 r# _/ \* t
     if( !pItemElem )
' m4 }0 M: K% {# W7 b1 J4 ]( Z      continue;
5 j% _: Q5 J- _     if(pItemElem->GetExtra() > 0)
* L* {$ ^7 y- x) }2 ?      continue;+ u! y2 ]/ j8 P7 [! E" M2 U
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; d9 p. E) y& l9 k      continue;9 b; ?- s# O4 ?
     if( g_pPlayer->IsUsing( pItemElem ) )3 d$ H8 A+ n: K- f
      continue;
9 {$ u& P; }7 Y- `' }6 u& ?     if( pItemElem->IsUndestructable() == TRUE )
8 s5 Q: u: Z( c5 u, L     {
3 V! K0 q* N+ `7 w      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 ~0 ?9 [7 H6 r9 x! z
      continue;
# p* Q3 Z' r! W8 ~; h     }; p  m- W5 l6 t6 E. r! o+ h
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 o5 p* f3 ]  R" o    }* j+ V/ W6 E! p2 E
    break;
7 {9 w8 f- ?+ E) S) s' a, z   }
( n6 a& j) ^9 {7 H6 G4 t1 j  case 1:
* X7 o' r( @( Q6 F) R5 k: t3 G   {: t( h" F9 G# n8 z3 o3 o
    //整理背包8 I" |8 a' G2 m( k& }+ f
    //////////////////////////////////////////////////////////////////////////
* A6 T' F1 S  N5 E    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# a; c6 f+ a' H$ m$ t6 N) s    //////////////////////////////////////////////////////////////////////////
- k9 S5 o1 n% O+ o; c" i    //////////////////////////////////////////////////////////////////////////$ V$ l! c) x" U1 {/ ~: K
    CInventorySort* pInvSort = new CInventorySort;1 J, q- J3 @2 a% ?
    vector <sItem> vItem;
+ T! X3 Q6 B6 I$ O5 f# F    vItem.resize(MAX_INVENTORY);//初始化大小% N1 f; U3 Y7 g- ~0 ^$ ^
     //////////////////////////////////////////////////////////////////////////- N  B2 t0 X! i8 e8 w
     //填充数据
% L8 p* T- k; |* |' Q2 x  ?     for (int i=0;i<MAX_INVENTORY;i++)  x$ M2 z( ]" ^2 r
     {# h0 u9 Z# R6 C1 a# r
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 N4 b+ O3 B8 l      if (!pItemElem)+ m7 R! \$ u! u" G, C
      {
/ Y1 @0 a  j, O/ S/ z* G       vItem.dwKind2 = 0xffffffff;4 z+ j( @& c" R! A
       vItem.dwItemId = 0xffffffff;
; d) D6 g) B4 k- e) _1 y  t       vItem.nIndex = i;
* R6 _" D3 i2 _! p8 S& ?, X      }else {9 x1 J7 f% W! b
       ItemProp* pProp = pItemElem->GetProp();- |# Q  v/ [4 h% o3 G2 t$ U
       vItem.dwKind2 = pProp->dwItemKind2;
' Q. v! ^! S) K4 b6 v       vItem.dwItemId = pItemElem->m_dwItemId;  G2 w1 l) O2 A3 M% |' q4 r, n
       vItem.nIndex = i;) |9 d4 C$ G( t
      }) v# L" y+ ]8 g# E' K
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 z9 W( ?! N% G0 V1 |' t% z     }* r; a4 I2 W: p" s' v
     //////////////////////////////////////////////////////////////////////////2 q9 F- ~1 T) l; d' e
     sort(vItem.begin(),vItem.end());//排序
6 ]* U2 x  B5 u, X5 k     //////////////////////////////////////////////////////////////////////////; q) Q4 j2 t7 E* Z8 `
     //交换
4 a& V8 c, N, m' A     for (size_t i=0;i<vItem.size();i++)
, z4 S) s3 a; }: ^" B     {
( Q$ [% v& Z( l. u  ?      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 I) m( O' c3 N& i6 {% Y      pInvSort->Add(vItem.nIndex);3 q* U  |- `- l
     }
+ {/ }4 ^" `5 I5 q1 k7 f     BYTE nDestPos = 0;
! ]# `7 q* g5 h: g1 ~0 m     for (int i=0;i<MAX_INVENTORY;i++)' V9 n5 H5 k1 g4 }9 i  I3 O# b
     {
4 b# q& d1 [* z9 P& v: F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 h& [/ g% V! N      if (pItemElem)
4 m) n9 u; l$ p2 A* p6 y0 }8 ?) _      {
0 i8 L# k9 u: y  w' R; G       if (IsUsingItem(pItemElem))
# |8 G( e5 ~+ G8 ^       {
( C) E0 _  L# R, N4 |1 \        //这个位置无法放2 [3 O% h) p& J' t  h; h" O  i
        nDestPos++;
4 u9 g2 n" z+ M" E7 v8 e+ W- M       }- z2 f9 Q; N+ k
      }
4 n4 X; ~$ k7 D# h$ I  n      BYTE nSrc = pInvSort->GetItemSrc(i);6 Y' c$ Q7 g. i+ @
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 t+ _+ v2 l; d1 }3 z7 m      if (pItemElem)6 y9 D  M. E! l& L# W( _5 E4 w
      {
. c# R" e9 i* ]       if (IsUsingItem(pItemElem))  y# @  i8 A2 ^2 q  G. z
       {  ^! c8 R8 K0 R* |0 [& p. L
        //这个道具无法移动,跳过
' P$ x) k# @! _, Q. ~2 d. b& C2 s9 O" N        continue;2 L' U+ M& U" j- \- M- y! M
       }% Y' t9 [; ]* }( v
      }else{# B3 p7 J# u1 J5 s# Q
       //空位置 不用动& d2 [$ Q) l" K% |; [( Z( v
       continue;3 t3 [0 m# D# W* |# p  J- i
      }  V' W1 j' j5 c$ @
      //////////////////////////////////////////////////////////////////////////  d2 {' r5 k7 Y; @5 h
      //开始移动
8 F1 G  M& h1 j/ Z2 m3 }% }      if (nSrc == nDestPos)( A( y" f, v' r) m4 C
      {  ?9 E# q+ Z4 {2 D, R
       //原地不动
: n9 o+ r/ B3 Q3 S       nDestPos++;
+ T( l8 k- I3 ?( O$ [8 f       continue;  e# ~# i, j1 [# V- U/ r. [
      }% S) `  _$ B, g/ D% G% @7 M: u
      pInvSort->MoveItem(i,nDestPos);
5 `/ m; J* v# P; a9 J+ y- v      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. c* N+ ?) c/ ^" J6 k3 K      Sleep(5);
4 E+ u0 e4 T) V9 {      //Error("移动 - %d->%d",nSrc,nDestPos);+ V$ j( o* K0 V0 ]
      nDestPos++;  }$ }# f5 z) f6 I9 v! x
     }
' f3 c# }3 m; V5 H5 ?     //取第一个元素的信息# C% `( K# [9 n0 p& w  u
     /*
. e) \( T0 X& J. P     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 Q( k, P3 e& I
     {
$ B; G2 q- f: x4 b" d. f* {      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 L. P2 k  ]+ a7 R8 x; P      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! k* M2 ~9 R% A" j0 H; e     }
6 d3 Z0 R& e/ }& v8 u1 w: e% k7 `1 o     */
9 q; y) t) f! P  }    //////////////////////////////////////////////////////////////////////////$ h; E7 I5 [) V* P( `
    break;1 t, p# T0 g: V2 a: |& K+ I1 J; F  ^
   }
0 Z8 y+ [+ ^+ b# L/ L  } : i. K, \9 P) `& w+ M' v
}
+ k' G7 x9 N6 R( z/ C& Vm_wndMenu.SetVisible(FALSE);9 L- o( K+ R2 I( Q+ A
) H4 P/ A* r! B) ~7 i
--------------------------------------------------------------------------------------------------------: `- n! t5 s+ c7 E; u" q+ `2 ?) t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 k9 V' T# Z+ ]/ T{4 v& J5 V/ S) E; a( t
BaseMouseCursor();0 ?- g. a! ]# D9 f* Q5 J
}
6 V" P7 Z9 h5 u, J$ I在其下添加:) c( L* k1 i8 f. p% {( u& K- L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 D: h6 K; A" K. J( R/ Q
{) P5 X! [# k+ [/ o# S3 {
m_wndMenu.DeleteAllMenu();
/ R' |' J  S% \3 p$ ~7 r- F, dm_wndMenu.CreateMenu(this);; t4 j/ V  y% F% Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 g4 P! O: w- t9 u# B

  q) S/ Q7 T) z2 ]1 rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): w% f: X' c, u- e1 A& ~
{
# y3 {" g( u- `! S$ L  //P以上级别才可以删除所有道具
' {2 m0 V. P* x) Z. t/ _" D" R  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 e' M& i9 O) N. n4 q
}1 R' J7 A" X: @  ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 R# G2 L5 B7 m! d2 b* N( S
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; g7 n$ {" K: W" Om_wndMenu.SetFocus();
  p8 F/ }2 }, S, q4 T5 _}
5 ^1 Y* @. k9 w! ?! T------------------------------------------------------------------------------------------------------------
2 ^  A7 _2 _% D& F- B: V, Q*************************
, n( x9 x: S7 r- oWndField.h文件
6 Y% a( V. t6 Y# y*************************) H: K5 e3 X: K. W9 x8 D. v) v6 i( x
搜索:BOOL m_bReport;$ }. m; n6 p% V6 ]( l6 x% k
其后添加:
9 c$ C2 x% d$ f" R0 I( G* Q8 j1 f  _CWndMenu m_wndMenu;
* {  `8 M: Q5 C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! z0 P) G9 t9 {7 Y. H4 s/ b/ o
其后添加:; y6 }6 h& T  |! D% G0 I' v
virtual void OnRButtonUp(UINT nFlags, CPoint point);& S4 ]9 p6 c: ]  d

) V' _4 F# m$ l  D& @; c. i' i1 i$ U, j) y; c

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-14 04:48 , Processed in 0.067685 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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