飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
4 t+ O7 K0 F+ K) Z+ @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, k( J  e+ \1 |4 B* V
8 I$ R) j/ [1 Y& qstruct sItem. q2 @' L' S( h+ j5 P4 _. T
{8 N2 y" o9 v) l* z1 _5 l( m
DWORD dwId;  ]' C* b1 _$ O8 y6 Y3 _7 r
DWORD dwKind2;
5 n6 W7 l8 X4 e, \% r. [% v8 PDWORD dwItemId;
1 @  ]  m1 U6 w  ?+ tBYTE nIndex;1 e% C, X7 M% _* [. O
sItem(){! J4 E: Z) p* h- U2 T1 \( g6 m
  dwId = dwKind2 = dwItemId = nIndex = 0;/ _+ `1 f/ H. ?
}5 K% m4 C9 Q4 l1 t6 i% Z' ]* A' [
bool operator < (const sItem p2)& m4 ~( ?6 H& x7 P1 J$ h, a6 [
{
: e1 g; z# e4 J9 n, {' |  if (dwKind2 == p2.dwKind2)$ X5 w8 z2 ~& c) o& ]8 G# @! T
  {
& K( _; B  b1 Z, n  O) s, ?   return dwItemId < p2.dwItemId;; x' z9 U  J, i
  }else{  s& g. o9 @5 W. M: m" T
   return dwKind2 < p2.dwKind2;
$ s3 P7 y$ U+ H' g2 M9 h0 H  }
2 z1 ]9 g8 N8 ]" N$ z}
+ @- ?3 P* i, V6 V8 o2 L4 N+ @};
8 k  i% _- ]% ^: r. `7 G- Sclass CInventorySort
) P6 h: _2 q7 l. {: V{" ^5 k* _6 C9 q" |6 c9 m
public:
( @/ r% [0 S7 P9 Y0 u" @" hCInventorySort()
0 r; \$ I+ f3 S/ I7 ~{
3 n: B& ]+ Y( W0 J' B4 p4 Y# U  m_dwPos = 0;
; V  t. P$ }4 f5 L}" W4 x; n5 v0 [1 G# {8 |6 B
~CInventorySort(){}+ X3 w0 N; V* Y1 ~2 d
private:. X/ J2 {  K$ b* U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 i4 a) O$ D& R; }DWORD m_dwPos;# b1 o- ~" H$ @0 j
public:
7 g1 ^- b* s$ I# D+ a  ?9 Qvoid Add(BYTE nIndex)
4 z) x; [* m2 F{% z/ h5 n: V6 o- z' [, f! S
  if (m_dwPos >= MAX_INVENTORY)- c" A0 |. e6 v' }8 N* l
  {! ^  {4 q7 L7 D6 U. Z9 N5 k' X2 G
   return;: t9 o8 J% l, M* x4 O' z' l
  }0 ?/ {$ z+ V% Y6 h* z3 t2 z
  m_Item[m_dwPos].nIndex = nIndex;1 E; v' x) i7 C1 \  n
  m_Item[m_dwPos].dwId = m_dwPos;8 K4 ]7 n& ~; l
  m_dwPos++;) k; ]) z* y% r3 X3 Z" D
}' _/ G, f* w- k8 q' g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列  d6 T0 y8 e5 e% J) T1 z/ u1 G  J
{
+ `( u( \8 u  j7 P! w4 P, T  for (int i=0;i<MAX_INVENTORY;i++)
  l& a! A* u' J) c+ [% s4 b  {
7 L; Y1 [* {$ @7 T9 o   if (m_Item.dwId == dwId)) c! b- z) S' h+ z+ w8 m
   {
3 s( P  ^( W% a9 }7 k1 {    return m_Item.nIndex;
' v0 g/ o. J2 p7 i   }( S3 c  ~$ E8 ]! u
  }
8 @* h. @7 p1 }4 Y/ V$ r1 _  return 255;9 a# |" g6 a9 X; v2 g- W& n- F$ t2 F6 X
}
1 N" g7 l" j8 Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 g( n% `: c5 |# y) T
{
* n/ W$ L$ Q* |. y  BYTE nTmp = 0;' A8 Q+ l. ~7 f! ?: f
  bool bDest = false,bSrc = false;
; s6 X* r2 B4 ?' `' s. f  for (int i=0;i<MAX_INVENTORY;i++)
! |6 r0 p0 i1 u- b  {
, o% U- T( w& M  ^  n# D   if (dwSrcId == m_Item.dwId)" e+ a1 c/ b5 h# D, U4 ]
   {
+ O- M" P8 A, u" i. w& H& _" l    //id相等 则 改变对应的dest和src5 r' `' K8 b# c9 v7 S6 ~
    nTmp = m_Item.nIndex;
# j$ R  P; V5 U/ }/ z    m_Item.nIndex = dest;4 z- m/ H+ m  k( j% J* @2 |) ?
   }0 c0 Y/ P) V* J" ]
  }5 @7 y3 s) t  t* k
  //临时数据保存完毕,交换开始4 K% H6 b/ O0 O
  for (int i=0;i<MAX_INVENTORY;i++)& q* T2 q/ ~8 Q1 G
  {
, T5 e6 n% a8 _, ^, J3 P   if (dest == m_Item.nIndex)
) e( K9 N8 b! u: n7 N( F  A2 x   {
) \8 Q; Y) f5 w5 H    //id相等 则 改变对应的dest和src
* Q* ~; U0 W: j9 P    m_Item.nIndex = nTmp;
* ~" t+ W; ^. `$ Q" z! i   }5 S1 h# ~8 e/ z, r- h7 K: O
  }: g9 A5 s  R8 a5 m  X' Q$ }: d
}; ]0 m6 Q1 X  i& H& z6 ^# I2 k
};
) x* s" @) @0 a5 ^, M6 S-------------------------------------------------------------------------, a" f+ V  d2 n$ D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): J7 P* b1 V+ M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" e* ^' Y: s- v3 J紧靠其上添加:
6 ~7 ^' x$ {4 L1 R1 Sif( pWndBase == &m_wndMenu )3 Z; p; J2 }2 c! `- |
{
4 g, E# {. ^4 Q; ?4 R  switch( nID )
+ P9 p& D& `+ B. H" S) E  {; d9 D( w. A( {! i5 ]! X3 n
  case 2:
) m! a5 N3 j& [/ d2 Q, Z, N3 U3 |   {
- j+ t8 z  c9 W. M8 o7 ^2 |    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( Z- o7 W* I' i( q3 m7 c
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" I, [7 R3 k2 B8 ~9 D& v    {
  x" j$ F) {* L8 P/ z     break;. G& z; n! K1 d# Z1 `
    }  x4 }& `% B+ A7 z2 t
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 D" G+ O* H1 \. I+ ]
    {: o$ k. v2 x9 N% e5 J
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& O1 u* Z. U& b" N+ U
     if( !pItemElem )1 ]: i3 z1 w% X/ S
      continue;
  R: I. S$ g- N% Y. T# }7 ^" n' J     if(pItemElem->GetExtra() > 0)
2 r# i5 r7 Q. O. @      continue;4 o5 m+ o/ w" z3 k" v$ A. H
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! j9 @8 O0 H& G' M
      continue;
  T" Y& ?1 `( d3 y. D     if( g_pPlayer->IsUsing( pItemElem ) )# U% D- [4 c& \3 e! v( W+ k" D, K0 ~
      continue;$ u( I* K) E6 s$ P9 M
     if( pItemElem->IsUndestructable() == TRUE )
* c' R$ Y  ^& |     {
8 J5 \. v. U% p$ v7 T$ l      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! ]; D/ H6 `9 }% {      continue;3 p% u" h/ ^+ u" L+ r5 h; B5 l9 W  h
     }
* d' u" }$ o3 y; K# y% a     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' z" _6 y( k6 F! R
    }* |( x" |% Y5 u7 t# {
    break;4 u- V! z* A+ F" B3 j) @1 z/ }7 F
   }9 s- r; h. |" i+ s$ L/ _2 J
  case 1:
9 ^" W% T& d# v/ [7 }0 U; o4 M   {# Y/ y! d1 w6 L, S9 V& v) D
    //整理背包! b# P0 U" v7 P5 k4 |" I; A# ?
    //////////////////////////////////////////////////////////////////////////! r! s% x% G* ]+ x2 I
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: X) K0 R+ T/ b& H    //////////////////////////////////////////////////////////////////////////3 W) E5 m0 U5 e, Q# f# H
    //////////////////////////////////////////////////////////////////////////
1 P. l) ?, ~' I6 R: f4 U    CInventorySort* pInvSort = new CInventorySort;' v' \0 f4 a7 ?6 k  N2 A3 J. s# y" r
    vector <sItem> vItem;
/ H# J# G# h' }    vItem.resize(MAX_INVENTORY);//初始化大小8 l$ s- g  ^+ D* s; I# w
     //////////////////////////////////////////////////////////////////////////% t$ M5 W5 v% B0 R% X2 X3 o- Q
     //填充数据
& S8 ?. o, t" Q$ N! ]% z     for (int i=0;i<MAX_INVENTORY;i++)& I8 i, G4 C$ w- k
     {
2 c, e; y" {+ A$ ?      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 V: `. _0 p7 D      if (!pItemElem)! |, }* M! ^. o+ [+ o
      {# J/ n+ N+ ~5 t  `
       vItem.dwKind2 = 0xffffffff;# l$ u9 s7 I$ v* {
       vItem.dwItemId = 0xffffffff;
$ w5 }8 ]! L, d5 \. N$ ^9 F       vItem.nIndex = i;6 l/ Z% d, f% p9 ^% b1 b
      }else {3 D7 x  W1 r! f# A: M
       ItemProp* pProp = pItemElem->GetProp();
, i. b. P* k1 X/ y8 f7 W5 a6 q       vItem.dwKind2 = pProp->dwItemKind2;
* T- X! W3 f9 x& G" [3 S6 V0 v' `& S       vItem.dwItemId = pItemElem->m_dwItemId;1 O( u' v% r( d% u1 V7 O) h/ V
       vItem.nIndex = i;
* f2 h4 z# n5 ~7 B      }
3 t' ^0 P9 ]& i/ K2 Y" V$ a- x      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. K5 }" i' p9 B& V     }
( M4 Z+ s# t! x; b5 L$ K     //////////////////////////////////////////////////////////////////////////
0 k8 x; n) h7 x( }0 C$ a# U) {     sort(vItem.begin(),vItem.end());//排序. u+ W% r% c. D$ b* @
     //////////////////////////////////////////////////////////////////////////4 r7 U7 R; f1 H' X9 v: ^
     //交换
0 \1 l1 u7 P* R9 S+ Q/ `& O& [     for (size_t i=0;i<vItem.size();i++)' k8 [# V! \, U: \/ Q6 W3 d
     {
$ r5 Y4 x3 y' K      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. y, l" ], v. m- W- A" E( m7 Z
      pInvSort->Add(vItem.nIndex);
) R6 a7 z1 R: P     }
* A$ k* B" I/ Y- s     BYTE nDestPos = 0;6 B& @; L. q. E" E6 V3 w; q
     for (int i=0;i<MAX_INVENTORY;i++): J9 U' t, B" B* ]4 b
     {  r0 c3 p, ]3 W7 z; T# `% R, c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; A) W& j( B5 h1 z% W      if (pItemElem)3 [+ i" L% h" u+ }; z
      {
0 Y+ s  b1 M( d/ P: X' O       if (IsUsingItem(pItemElem)); R9 q" u+ Q5 V
       {
: J3 ^6 V: c0 J* N3 m        //这个位置无法放$ s5 O: x) [4 d" }& F& W
        nDestPos++;
! ~; e/ s" e9 X3 h4 L6 @- p       }
: D& Q1 c7 x0 V1 S0 H* V9 H      }% Q9 }6 j+ X( X
      BYTE nSrc = pInvSort->GetItemSrc(i);
; ^. j* P" ^. Q' Y  i      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. ^2 ?5 |1 ~- Y1 G2 T' X; c      if (pItemElem): G% v- Q& N; L& a! d# Z6 f7 M* C" ?
      {
1 Z+ J; h: u" H$ G% Y       if (IsUsingItem(pItemElem))
2 K" w3 l& \4 j' t' Q, v1 t) @/ c       {
& v. a% t7 M0 X; z# F, q  c        //这个道具无法移动,跳过
3 j* w" W% b! R9 U# c& x        continue;% w: m9 f. W$ Z
       }
) A, H, s5 Q. i3 {$ Y1 p$ w      }else{" Y6 M6 z6 v* B9 \/ J( t" e
       //空位置 不用动
" D+ O6 E- R% d' |2 m% z) s! v       continue;+ ]1 g, f4 X7 C+ p4 z
      }
9 p- U8 }, S; l, G  I6 k' L3 b. O      //////////////////////////////////////////////////////////////////////////. V. h8 D& d, w# m9 j: ^8 h. |
      //开始移动
; m4 j/ y  c3 Z/ Q      if (nSrc == nDestPos)
5 Q, w/ A# n* X: K8 _      {$ m5 O+ M# u7 Y- [6 _
       //原地不动, F7 z5 [6 p$ ^; e7 h6 I# \
       nDestPos++;1 [: _4 h' G' a1 o' m8 `, j( E9 r
       continue;
7 D! a; t/ r. U: ^0 Q1 B      }$ Y* y' A1 K7 i' O% z
      pInvSort->MoveItem(i,nDestPos);
$ ~* c/ Y6 [6 T% \      g_DPlay.SendMoveItem(0,nSrc,nDestPos);# e  M7 t1 F/ j: o
      Sleep(5);
- @  [( h5 c- e/ H      //Error("移动 - %d->%d",nSrc,nDestPos);. S$ `' a+ j% z, G9 _; {* z) q
      nDestPos++;" U3 ~0 G2 H% O: [# }1 e6 [8 q- d
     }
- Q5 ^' J: l9 P5 O     //取第一个元素的信息
4 B- B# ]" w: I$ m0 i     /*
* O/ q2 s5 D3 ?+ x* e- ^5 `8 N& [     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 f8 ^: J' v# f$ {     {" K+ Y0 ~1 U0 Z; [1 B( Y2 A& ?6 Z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 S1 b9 I9 Q5 n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 X0 m; `4 Q. f- x1 m     }2 T+ C' A1 \: d& H' w
     */
2 {3 R+ X  Q, I8 O" k    //////////////////////////////////////////////////////////////////////////3 r0 G% O& e6 ~5 T9 d
    break;
) K1 b( c0 }9 h. a6 X' J   }: Y- j- y" T6 i: {
  } 0 U4 A" N3 [2 J. D+ S! L! f( h6 i
}$ a3 ]3 n# {, t6 S! ?
m_wndMenu.SetVisible(FALSE);
2 g4 @9 {8 v( F# R
. S. ^/ q, E; j: q--------------------------------------------------------------------------------------------------------3 d- j% d8 g4 a; L/ _% D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, R/ T: M- c  \2 G! B' j4 y/ s{. P5 g( {- f' q- d/ R/ F
BaseMouseCursor();
1 M. s- I/ l$ T% T0 E/ x, Y( u}& o% b3 Z. h6 N
在其下添加:
1 j5 @- D( o% G% t1 J; l5 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ Z+ ^$ [% d  |- F/ N/ W
{  _) }* _: B+ l! V2 I# a0 L
m_wndMenu.DeleteAllMenu();$ @# Y( {- B8 z
m_wndMenu.CreateMenu(this);
7 I( n( K  z) i% p( vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Y. M, [& H" U# B

: e7 S  W$ Q2 q$ \, r; p+ Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ L6 f$ d5 i/ v6 q{
! `8 Y6 b! a' i* ?  //P以上级别才可以删除所有道具5 h( K3 `& o& X6 s
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) i5 h0 p; N. I$ f; t0 N7 v0 U$ @
}
4 T+ J: F, P: y% g6 e* V; zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 s  P8 h/ V' X/ J1 R: D8 pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. @4 h  z( J% \' D8 r; r: R" V
m_wndMenu.SetFocus();/ o! e) s9 f: `9 k. ]
}, g, {$ i, k8 y8 v/ n
------------------------------------------------------------------------------------------------------------
8 j9 y; O% v3 g/ y3 F/ h* u0 ]*************************1 y( E  h' h6 m8 l  A( H) ?
WndField.h文件# m- H3 N1 {' J7 C3 @9 q
*************************
2 C" x  ]9 }- G: e; t& l/ C搜索:BOOL m_bReport;7 x# O" n9 a1 J- Q. W
其后添加:+ d& S* p" x6 a- x1 e" v: p( p
CWndMenu m_wndMenu;
" [5 E0 j9 J3 n& K; \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 q' x! @7 i' `# B其后添加:
- ~! g) H0 E. }+ qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: z9 i% i! \" I; m8 U: c% |+ s2 R  v( `/ h3 _" r  ~0 k& o6 o( Y
# \+ x% d0 z8 I# O! |7 t  \4 l

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 20:46 , Processed in 0.064630 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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