飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件  h- N- c- F1 ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# Y8 O5 Z. N9 S& B5 |* O$ H

. K. @" t: v" m  f  U* J( c( m$ k. ustruct sItem
4 ?  P( Y+ y1 s+ U9 {+ V{" i5 u$ p' J' w/ ?) l$ I
DWORD dwId;, ?; A* j: X  P' r- a/ Z1 g
DWORD dwKind2;
" J* Y4 c. O2 m2 _# s- S/ Y2 P7 hDWORD dwItemId;, H9 Z; D; E# \0 A$ ?
BYTE nIndex;
# X+ `( y' k( ^! C' l; h2 qsItem(){% a8 c* f2 w: t9 z7 R4 N
  dwId = dwKind2 = dwItemId = nIndex = 0;7 H6 W( T+ B4 R: t. K7 X, k% K* B
}
8 @+ `, I$ c9 L' N$ v/ p% ~bool operator < (const sItem p2)$ }0 L4 u0 L3 o, E+ x
{; z' x; r) z. h5 }, q: d
  if (dwKind2 == p2.dwKind2)) g/ ~$ [/ @& Q# h, N
  {
/ o) ]7 d2 g$ q7 i- ^( U9 ^   return dwItemId < p2.dwItemId;
4 o0 I# W3 n+ g' v  }else{
* r$ R$ a( i: y0 H1 t6 v* n2 l: C: ^6 X   return dwKind2 < p2.dwKind2;/ A" W' F- y7 [0 ], S
  }
3 S6 ]  C6 {% T" M) R8 L3 @& Y2 j}& {/ `# q& x4 f9 b0 k, j' Z6 [: M
};$ y0 m* t% l3 I7 c$ f
class CInventorySort
1 i( {) M$ G0 e{  W  l5 a& G. R( t* R# l
public:) w0 p: g" O7 ^) o
CInventorySort()3 Z+ K, ?- G6 S# A
{
5 p6 s! H0 n& X3 z! M  m_dwPos = 0;# f, {% G! C0 m$ R3 f3 e9 ?1 f, H
}  ?% ]# R; s+ y& V4 E/ U2 T
~CInventorySort(){}, l! C: b7 n, z9 y0 u  h) k7 J
private:
/ X0 K9 h: B: ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ M1 v' [) y: S& t; V/ \! V
DWORD m_dwPos;
% m7 K* Y; |) V  i- ypublic:
+ x6 m% x$ V) J- N& Lvoid Add(BYTE nIndex)* B9 Y) z3 V+ ~  O3 `+ |9 U
{4 K7 P) ~/ u0 _: o+ A9 ~. h6 E
  if (m_dwPos >= MAX_INVENTORY)! S, C& k# l' ^# _. L; }0 E
  {+ U7 w$ W' r& p; W' t
   return;
- x$ Q. g/ N3 e  }- {5 ^1 u" _9 V7 x5 P
  m_Item[m_dwPos].nIndex = nIndex;2 z7 c( {4 X  W6 f" O; V: u
  m_Item[m_dwPos].dwId = m_dwPos;7 z- C8 k! j) J
  m_dwPos++;4 j. i' L4 b* A
}0 G+ ?, G% B4 X) Z! A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% \( r4 r. n! P0 m{
% V' g; Q" o. n/ v/ n" @  for (int i=0;i<MAX_INVENTORY;i++)
; s2 d; l' P3 {" \  {  B3 H$ B8 E" {. J
   if (m_Item.dwId == dwId)
1 B8 v6 c5 Z: K' ~   {
1 M/ J3 I- M' f    return m_Item.nIndex;
2 F- \. F# `0 r# ^" o, M   }* m. N/ S  P2 L5 r+ Z3 z6 V  o
  }/ b- U2 s$ y. @; Y$ c
  return 255;- M6 r. C, ^7 F# Z# q) k
}
% n& a' ~: f+ Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 _5 E9 o" Z: n$ n{" I2 G& x* w4 e' S+ |& c! H: Z
  BYTE nTmp = 0;, o' b! S, O6 N6 y, C! B
  bool bDest = false,bSrc = false;' W$ \6 Z! ^' A% z; D
  for (int i=0;i<MAX_INVENTORY;i++)
7 O( R+ t" T# h. P- [3 s  {: e9 S0 C) ?' g  R0 a$ ~
   if (dwSrcId == m_Item.dwId)" b$ b2 ]9 K  y5 N
   {; Z# u/ C1 D3 o
    //id相等 则 改变对应的dest和src
* e1 v/ l) j1 z- W2 m    nTmp = m_Item.nIndex;8 q# F; V1 p* r7 ~% U/ ^" J0 U
    m_Item.nIndex = dest;! i* |  J& @; c" D& v
   }
# ]7 B& c2 t' N5 w1 ]& r' d  }
6 }% b" i4 ~: Y' |: Z  //临时数据保存完毕,交换开始
/ E; s* O7 X; b  for (int i=0;i<MAX_INVENTORY;i++)
" I/ h' B# U+ F5 q8 v, m; C6 X3 H; v  {
: ?/ ~* K& V! n" e7 V4 H3 n   if (dest == m_Item.nIndex)
7 N5 y4 a3 O, z% M8 d& F   {# {& N2 o0 q8 M. l
    //id相等 则 改变对应的dest和src
+ Q3 x2 S8 P- V% {8 Q( l  T7 ^" s+ F& {    m_Item.nIndex = nTmp;2 o* v! t" J4 W7 k0 I& T3 m) J
   }6 C6 X+ Y- `8 U3 l) p8 u
  }5 b! q7 i( }! a4 o' q
}5 {6 A/ U, [8 \# n
};5 j& a& Q) y) x
-------------------------------------------------------------------------
* D1 ]2 U2 Y; d% E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( w  I1 j$ ]) s" _0 f搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' A# F: a% `" H紧靠其上添加:% X- [* e* N$ W  u
if( pWndBase == &m_wndMenu ): {$ G- V& E/ c3 k1 w) |
{
( l- d6 n* j: U- R; c- {% h* e% y  switch( nID )
& F5 Z8 E8 Z  r& R( P  {% n6 n% b/ I# `" ]& l0 t( ?- M0 [$ k
  case 2:+ C- E5 K$ k6 f
   {
% t* l& m! Y( W6 |! W8 @* }    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% {" l: w2 R" `" y' P# e1 \, P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 k6 N6 w$ i0 u* ]6 u* D# U* X4 R
    {
) R: Y6 e7 Z6 C* H8 Q     break;
# D6 S; l. w6 g! f9 Y% X/ A    }& D( L/ Y- m, v- o  J# z# |0 ?
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 @$ ^5 G0 s: E  e2 M0 p2 n9 Z9 C    {
  b- b- U0 z0 m+ _, Q! U     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 o, Q6 F9 L1 \, j3 K$ r- n2 n# x     if( !pItemElem )- A2 k3 ]1 p' B; q0 h" k
      continue;
+ E3 m( \2 w; h8 o     if(pItemElem->GetExtra() > 0). }. l* j3 T* k! L* A$ a
      continue;+ `) O+ ^& u" d/ |4 d7 I
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; e- O0 \8 a* f. I+ [6 V; u
      continue;' l! S7 t7 f" q( W7 E- ]
     if( g_pPlayer->IsUsing( pItemElem ) )
/ C& l, R0 ~& n$ ~) L' s( ~      continue;, s: x8 e3 k7 ?
     if( pItemElem->IsUndestructable() == TRUE )
( X, O8 {) w0 ]4 q) d     {
+ m" q  ?# Y  r* D      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( u/ c% J- B- ?8 W* x; W      continue;' R; T- c+ E3 {
     }
; w( r2 U1 h6 K$ q     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% n9 V+ b$ x6 N. w    }
- G5 T9 a; J. T. S+ r    break;2 b7 A1 L5 J/ G7 {, o! O2 w
   }
. V" ~& l: N3 H) |, s0 s" [1 c  case 1:
8 Z* _- a# A7 @5 J6 x0 d% o   {' |+ n5 D% E2 V5 E: Z$ K  Q' T. Y
    //整理背包
' h: o1 {: D  V3 {7 Y0 x  q4 {    //////////////////////////////////////////////////////////////////////////
8 K6 l- g6 {; {6 j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 s7 l( ~- q; i1 t# L0 z
    //////////////////////////////////////////////////////////////////////////
7 g2 a' N( v, Q( M3 R. c    //////////////////////////////////////////////////////////////////////////! Z) {; f& ^$ a0 Z4 I
    CInventorySort* pInvSort = new CInventorySort;
0 p- V* b+ A) P8 F    vector <sItem> vItem;
' q8 D+ |! q; _4 E- [* N- A    vItem.resize(MAX_INVENTORY);//初始化大小
" y; k6 r1 B7 m( a- I7 P     //////////////////////////////////////////////////////////////////////////
- M. ?& @  U- w( a  K# L     //填充数据
" ~! M% ~; n0 `0 o! W; F     for (int i=0;i<MAX_INVENTORY;i++)
3 C& T3 B; z( n5 H, D, ?; w6 |7 ], k     {
' B; d. b5 t' C7 u) ~& A  b/ P+ z      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* t. r% ]5 f- d# q7 a
      if (!pItemElem)! U, z& P0 S$ V( f3 |5 \
      {
# D3 A, v+ G& c$ K' ^; v6 J* _" s       vItem.dwKind2 = 0xffffffff;
9 s) G' f$ D4 j. p& e3 k! v0 z2 R5 ]       vItem.dwItemId = 0xffffffff;
/ }& y- ?, y+ a0 @- c) V7 j, O       vItem.nIndex = i;0 V2 ]0 Z6 a" f
      }else {
) J- w6 `( d2 Z" x+ b       ItemProp* pProp = pItemElem->GetProp();" O, L2 D5 Q, T7 [+ K  d9 T! I9 @
       vItem.dwKind2 = pProp->dwItemKind2;
; a/ ~! A1 e3 r       vItem.dwItemId = pItemElem->m_dwItemId;. d( U6 m7 r; N+ {
       vItem.nIndex = i;
3 l% T1 R* q, Y; E# f$ ^      }
; k3 F* p$ G9 A- H      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 t4 v7 i- t: S5 U8 u. P     }
( N1 x. T1 S. M1 ^+ [& Z6 l4 Y     //////////////////////////////////////////////////////////////////////////+ R3 a7 }/ D, e( I6 T
     sort(vItem.begin(),vItem.end());//排序
1 `4 g1 R- [- Z; ?     //////////////////////////////////////////////////////////////////////////8 e) w0 ^0 V- W) z) o
     //交换6 X) s  z5 v: f3 r$ U! N: Q
     for (size_t i=0;i<vItem.size();i++)
& {( w8 u- u. o! X6 v     {
% W) d5 v  ]% q5 s( D3 a1 g1 J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 `9 j( W, n- V$ h
      pInvSort->Add(vItem.nIndex);8 P' H/ j# v4 O
     }4 J' V' U# L% f
     BYTE nDestPos = 0;
& f+ x$ K  L9 f3 ^     for (int i=0;i<MAX_INVENTORY;i++)
/ t$ D; _9 ~( p     {
) ^2 O# J) H1 x; z5 ?0 H      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ V7 [, |. {& \8 \' s" H      if (pItemElem)# F( w1 g0 Q, a. x/ s) n* t7 h
      {! H- x9 V  W/ s" M, }* Z0 H
       if (IsUsingItem(pItemElem))
' l5 F, F& }* S3 R8 E       {- G. e7 V: l# a! ]1 h3 k
        //这个位置无法放& K" {- n: A6 T5 M! B: {; K9 P4 |
        nDestPos++;
6 F/ b  a* M" `" ]0 J9 Q       }+ g. V. z- ]/ d0 r) |
      }* h; Q* @1 t" S# G
      BYTE nSrc = pInvSort->GetItemSrc(i);7 ^3 w( Y3 y9 W8 y" I! Q. k( Z
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- N& ~% j8 O, d
      if (pItemElem)8 Y# l8 a3 S* _: _
      {  z! r3 `# \, m+ B
       if (IsUsingItem(pItemElem)); e! _2 o' D; P( [8 S
       {
9 F% }  u( a1 ^' S        //这个道具无法移动,跳过
8 [. C+ \! @) R/ H2 ~1 c        continue;
4 v8 y  c6 A4 h       }' ~8 r$ y& Y: Y, u! L# |4 u
      }else{
- Z4 d) Z4 g' q$ d1 a. |       //空位置 不用动/ {0 }7 K6 i! X" D; n
       continue;5 g) ?; v" C  ~$ p
      }
+ ~5 b# B, K5 j+ k5 N      //////////////////////////////////////////////////////////////////////////8 Z. u/ L6 f4 t* v6 k) B9 U* t! X" s5 \; J
      //开始移动: r+ Z* w/ Q/ w/ x# C
      if (nSrc == nDestPos), P% ?  ]  |* J' n) Z5 _
      {
2 L7 Y; g0 Z  s* W       //原地不动2 s& H0 \8 j( e6 q5 t
       nDestPos++;
" l; H  T6 O: j2 O0 z. F       continue;8 `4 P" e% [8 `! a1 S' ?% F3 T
      }
  f; x+ Q# j! H0 l% y9 x      pInvSort->MoveItem(i,nDestPos);
: w: _) y! M) {& r. P      g_DPlay.SendMoveItem(0,nSrc,nDestPos);, `# ^. a" R3 b& U
      Sleep(5);
* t: z: W: S/ \% S" c' Z      //Error("移动 - %d->%d",nSrc,nDestPos);! z$ i" Q  g5 ^' }2 f& N& H
      nDestPos++;
; M7 K6 P2 J7 @( u/ `     }+ t; d+ M! f6 Z" j- J& c, Q" y
     //取第一个元素的信息
1 M# d% n# T2 `- C. `" P' y; g" M     /*
; s! u) `. E6 X, D+ z* \     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 h' b# k  y' E% L, r6 N
     {' C/ }! {0 {) |! n) I# c
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 w( |; k) T5 n. ^0 w( i      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) E, r1 `! u3 b( @; D# ?     }
# ^. r* a( a1 H) j1 A     */4 q1 n. r, O. E! S+ [+ o7 v
    //////////////////////////////////////////////////////////////////////////6 f0 R6 I, q' V7 q7 V* K
    break;
5 w- @! I  n2 P6 G' ^* [   }
, H; a9 \, Y. U0 G- L1 |2 N* h0 ~  }
+ \" m, B$ K" r+ c# l}& y6 o# u& t# U  U
m_wndMenu.SetVisible(FALSE);$ W& q- c1 H. f+ t7 S
3 L! e1 Q2 v1 C
--------------------------------------------------------------------------------------------------------( I: S% e8 t9 R% }0 g% `7 E6 N3 O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! t2 `: v* @* h& f, Z* b- K
{
5 ~! h6 X( i1 n; FBaseMouseCursor();+ y' ?% [: _& r* @/ s3 _
}$ P# W+ b9 Y: R5 ]! K
在其下添加:
( @2 {, w  x; d) I/ V1 a! Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 ?: ?/ T# W# X1 G2 q6 z% {; @7 t{
0 l3 u; u* S* s: Hm_wndMenu.DeleteAllMenu();
$ w8 {6 a6 j- X1 B: U; cm_wndMenu.CreateMenu(this);
) [* A3 x' z' @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% ~/ ^/ m9 u$ f: `0 r2 i7 E" U( |- j8 E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 R+ Z8 K1 T, Z, k" m
{
6 f9 J8 @. E" k. x' v$ ^  //P以上级别才可以删除所有道具0 l! w4 A- ]: p4 w' J; C
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, _1 O$ G# G; s, z. j  C
}
: m7 G( K% s. k6 V9 C1 q! nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) ]( m; U" n7 \. p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ g1 b5 B9 G: O* G3 n- r
m_wndMenu.SetFocus();8 d: I5 B" D  }8 l3 m0 K* Y+ d2 k# X
}+ E: q7 x3 l* L0 c% K+ y
------------------------------------------------------------------------------------------------------------  B# d! O4 S7 u# g! w; x
*************************
0 e2 Z! ^! [0 b! j4 lWndField.h文件
; {- p* s, |  T9 {3 X*************************
1 ^* Z1 h$ c5 L搜索:BOOL m_bReport;
: f% X0 a& _5 a8 M) s其后添加:
. y% G5 z8 v5 {( @6 s: ?CWndMenu m_wndMenu;  C( K- r8 u8 U% U" {+ U% W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 b: v' r' F# h( J6 Y7 g
其后添加:
3 V- R% u. l3 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);# S9 n0 p. P2 F- ?  c

8 Y( j% R1 f2 H* M! K  |2 B# F& G5 X! n/ V# F0 b1 Q& _

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-14 10:56 , Processed in 0.080656 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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