飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件# k' p( t: T: z) c! B& g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  `! V: G- z$ v9 Y  q) n, g! a

2 g1 \, J& a$ T! @  [7 Qstruct sItem/ V$ Q% a' Y, W5 d) \
{
  ]$ l( X6 V; _3 v3 F7 z1 `4 h* hDWORD dwId;
- @6 M! p" j8 M6 e# e, v! ODWORD dwKind2;( J" ]& |4 \3 ^2 E# @. `& p
DWORD dwItemId;
5 \& P. c  d5 X( aBYTE nIndex;2 V- F, Q- I& W/ K: K; q" h' z# N
sItem(){8 P% d% c" N! ?& j$ h
  dwId = dwKind2 = dwItemId = nIndex = 0;
2 K" g( Q0 y$ A5 y" Y}
; r: g  g% ^# h3 r0 ]bool operator < (const sItem p2)- a4 U* n% p4 ]* r
{
1 d0 f8 i4 Q. H/ U: e$ v8 M, q- y9 g  if (dwKind2 == p2.dwKind2)
/ M- W5 v/ q8 _& z6 R  {8 [* T7 V! K* }; j9 y
   return dwItemId < p2.dwItemId;
1 T* B5 G5 ~5 k  c  }else{( P! ~' e2 }: K8 w: g
   return dwKind2 < p2.dwKind2;
/ e" V( _$ g4 d  }
) X% \5 x& g% s: V9 `: {! E# [}* c, e' A2 z# e6 o* V
};
. Z7 v* _. m" I7 y+ Oclass CInventorySort* y9 J8 f! L9 [$ t- ~, g# v
{7 A5 e5 Z, s1 J$ Q8 C
public:
+ f$ a# v4 A( ^; @& |0 MCInventorySort()
( j# I1 q$ z- G5 L, H{! U1 G' v+ ], `) m6 A) i) q
  m_dwPos = 0;
1 u5 n7 t; N  ~$ e6 n! k}6 h/ f- B7 ?4 W( x& h0 \+ M0 d
~CInventorySort(){}
! v' x, f5 X% B* Y8 Iprivate:
' M# Q8 R' S+ @; YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 F+ K1 }* O) @4 t% |2 W# XDWORD m_dwPos;
& N' u# ]5 x( P3 Y3 Qpublic:; p5 K5 s" D0 s" U2 T4 A+ i: v
void Add(BYTE nIndex)8 P/ m6 n: T2 T
{
9 i5 e7 W$ U, A" W8 t5 w  if (m_dwPos >= MAX_INVENTORY)
( x( q) K: b' X2 Y2 {: x2 W  {- g' G/ D, I+ h0 M& ]
   return;2 ~% O# ?1 f& m
  }
3 B' \7 e. U8 e2 Q: H7 `( p# V  m_Item[m_dwPos].nIndex = nIndex;4 Z0 {! _" F# s  O8 f/ R
  m_Item[m_dwPos].dwId = m_dwPos;% D3 E4 n# U6 o& Z4 O6 J. g6 [
  m_dwPos++;
; x) U/ X& g. P2 d+ N% N}
$ K2 L- [2 m" @6 Z3 g, @' M# W0 Q) K2 TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 [! R# }8 p+ B0 u
{  g; F# |5 Y" D- W- B1 ~( y
  for (int i=0;i<MAX_INVENTORY;i++)
8 e  K- p: G7 g! j0 h8 p8 P( x  {) [. D% y# F/ Z5 S
   if (m_Item.dwId == dwId)
/ d& T0 h8 T# W- v2 R   {
' z) k. v8 M9 H* G- p; ]    return m_Item.nIndex;
# X" E! g; o7 |: E: N3 n" G# W9 f   }
$ G/ f9 k- o* i- M1 A  }
1 A0 b' U0 a/ h. }' \* c. u  return 255;  x3 ~5 E7 _, L8 r7 E! U
}
! w% j- l8 Z* t0 q8 y; R; Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# w3 A% J& G: _  O+ O
{' j" V0 x' ]% j7 A3 ^
  BYTE nTmp = 0;
7 y  R2 b. {9 V8 n7 J5 l  bool bDest = false,bSrc = false;
3 d1 U4 Q+ I4 F, l) T& S  for (int i=0;i<MAX_INVENTORY;i++)
: a4 r8 e) k3 `* l  {+ Z+ o- p# R2 j* }3 C+ \2 v
   if (dwSrcId == m_Item.dwId)9 @/ D3 L" |. _+ r
   {4 o  Y' [, `4 q: t3 r7 e8 S
    //id相等 则 改变对应的dest和src; X/ H6 H, D8 q& \3 o
    nTmp = m_Item.nIndex;
& o/ z5 y* ~' g$ Y5 \: n- d    m_Item.nIndex = dest;3 G% k' h7 d6 ^% R. q0 i# Z7 k
   }1 r: b2 B6 C3 F4 Y9 d/ I
  }. z( e  \8 m% c' F% J
  //临时数据保存完毕,交换开始
+ I. h5 a0 M0 w. S) I+ p7 _  for (int i=0;i<MAX_INVENTORY;i++)
4 @# q/ d' ~' L3 M; ?  {2 K$ G4 e$ Y) z5 q$ v7 {
   if (dest == m_Item.nIndex)
9 K# s8 K# Z% z) S2 \: l7 I   {
5 ~$ X6 u/ l6 l8 j    //id相等 则 改变对应的dest和src' ?; s# }$ Q) D4 b( a
    m_Item.nIndex = nTmp;
/ A1 S% r% g4 B7 F+ V+ N/ O   }4 l; ]. H4 k7 Q7 L$ a
  }
( ^: k0 K# y# R" b  L7 ?9 |}4 Y* V- g4 u' e/ l4 e
};$ _# D* G7 p0 A! [
-------------------------------------------------------------------------
" N4 U% `& m3 a( l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# e) t9 X/ u6 q# U+ u' C9 A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ x8 ]! b* c6 P0 Y, @6 x+ w+ S紧靠其上添加:
+ B- m( t. D' E5 \8 j8 l: |/ yif( pWndBase == &m_wndMenu )
" Z/ _6 U$ i1 q( Q9 i{
+ O" `# Z8 [6 H- K5 s  switch( nID )
% n# k5 @7 \* o- W4 r" \3 p  {
) J: h, X7 x' }) V- k  case 2:* P, g5 d. }; z/ ?0 g3 s/ F
   {  |1 k0 ^, Q* X; ^! k
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" y" n) M) f  s" Q4 R' f    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# s  ?% Q) |! d; D& y: d    {
) f, z2 c, \# c5 N3 k     break;
, R5 u8 F. Q: Y, V/ x    }+ \1 T$ J4 u! x
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! ?  s4 i8 ^! y% H* b% @
    {
7 M2 `$ D4 `! U) ~6 T     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 d$ L# J7 q$ S! I5 a0 d     if( !pItemElem )7 I7 y. n4 y" E, f  h
      continue;4 L3 H: y/ m+ b. @% d; }  n6 U- v
     if(pItemElem->GetExtra() > 0)
8 L- N% g5 N/ Q% \: U' e      continue;. F% M+ ?# R+ }# |6 G/ M
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( q7 |8 H+ \2 s; i3 D) k      continue;* w! e6 `. J% k
     if( g_pPlayer->IsUsing( pItemElem ) )5 ]( B- q. S  Y3 f
      continue;* e+ `, W' b" ?: ?3 T
     if( pItemElem->IsUndestructable() == TRUE )0 u- s4 _; l& E, p# H
     {7 z, F# L: m6 F/ d
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( n$ `; A4 }1 c# l, I
      continue;
/ D3 h; q+ q# K' Y; f4 \     }
% G3 F, Z# \1 f1 V! q     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. f6 o& q$ T4 K( h. Z5 |
    }; l$ z/ ]/ d8 z7 L4 G/ R4 J
    break;
2 M* i* l- E. \5 j   }6 c. l$ \, S: C9 s1 s5 z
  case 1:2 p1 q2 _$ T9 J3 Y( i* o* H
   {3 O8 p4 I9 B9 N
    //整理背包
( i* s$ g0 m: `( H5 t    //////////////////////////////////////////////////////////////////////////! e# W8 F, H! n4 Y  P
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 Y6 w' Y& n4 S0 ^, [( r4 O    //////////////////////////////////////////////////////////////////////////5 `2 Y- X! p. `) A1 a3 U! E
    //////////////////////////////////////////////////////////////////////////
) L9 o1 ~. C2 K/ X9 `    CInventorySort* pInvSort = new CInventorySort;
# F& l  p( U$ g3 @% h' x1 Q    vector <sItem> vItem;  c( A! T' l( \5 v
    vItem.resize(MAX_INVENTORY);//初始化大小
+ ]6 ?6 D5 X  {1 Z8 j3 q     //////////////////////////////////////////////////////////////////////////
- m4 e6 u- ]* T# G     //填充数据5 P% D7 g- ?0 e. ~% j
     for (int i=0;i<MAX_INVENTORY;i++)( |! W+ w; T1 m/ l
     {
! z3 w; }. X, s      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ k2 j  B2 n) Q( H/ m" I; d
      if (!pItemElem)" O3 S7 ~+ L8 T; P0 p
      {
9 r& V( c8 ^' \6 F; X+ [- y       vItem.dwKind2 = 0xffffffff;
' }( Q$ q1 g, D$ Y; @) D       vItem.dwItemId = 0xffffffff;
1 O) t7 y& W/ v8 m" g7 ^       vItem.nIndex = i;" f; X9 N; E3 m
      }else {
: h2 p% F8 D$ V2 [: E$ g( X! G$ N  @       ItemProp* pProp = pItemElem->GetProp();
- r0 H1 A9 v: @0 R, F       vItem.dwKind2 = pProp->dwItemKind2;& S3 G4 u  y$ b9 Y. y
       vItem.dwItemId = pItemElem->m_dwItemId;# E7 f% }2 S+ k0 P  l
       vItem.nIndex = i;0 U/ i" d& T5 Z& ^% w1 z' b
      }
# s1 f! G, a! H. u0 G      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 @# s  q% q$ C7 v2 v2 h( W     }
. h+ R0 ~4 F4 B* o7 ~2 \     //////////////////////////////////////////////////////////////////////////( I1 u( v- }3 b9 J6 _
     sort(vItem.begin(),vItem.end());//排序
5 [0 L1 h1 B: |1 m  x: y% p& s1 h     //////////////////////////////////////////////////////////////////////////% Y+ D. o# a* x
     //交换6 }$ k6 c0 t1 j5 w4 D8 B
     for (size_t i=0;i<vItem.size();i++)6 l8 t- S' y6 j9 E/ \# r5 O
     {
6 k' ?7 l  f2 v$ V) g      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ [, W! g& U7 Z: \5 {      pInvSort->Add(vItem.nIndex);/ E$ n4 l' R  o
     }# ^2 V' ~$ t8 i! `8 D; Q) H
     BYTE nDestPos = 0;+ L' \2 e5 C! s) q  W
     for (int i=0;i<MAX_INVENTORY;i++)
1 j' L" f! o) E% N% B+ ?9 X     {- V  c/ q  h& ^- n4 I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 m5 X; c/ |# q5 f# Y: }      if (pItemElem)
' H/ ]7 T0 Y; F      {" R7 h+ B; N! r- y4 ^
       if (IsUsingItem(pItemElem))
0 W3 `+ j, V6 s+ C% W       {
) F5 E. m/ b  s* ?5 g9 y        //这个位置无法放
* r% d& B7 h! h4 c8 f, h, D        nDestPos++;+ d. y7 o1 x. m$ H/ ~
       }
0 t7 k9 g& `- E( V: W      }
" J+ y% |2 F' v: w- t      BYTE nSrc = pInvSort->GetItemSrc(i);* B  K+ q) @- c  E
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. V& C3 X; l  q1 I: A. Y# I* T
      if (pItemElem); ]! y: N  H* r1 ]% E% W5 a, S
      {
; \- C0 t  {- F5 A( z; Q& r, L       if (IsUsingItem(pItemElem))8 h: d, F/ B8 _: `6 X/ {
       {! z  i0 A0 |  _5 p2 g4 ]
        //这个道具无法移动,跳过
% Y0 i# B, [3 ?- L+ J& G* m        continue;
3 |  c& I6 \! k5 Z       }% D4 @1 U8 f1 ]6 y  C; V, G
      }else{
8 B* E( F  d6 {& w! c( R0 r       //空位置 不用动
8 O2 i- U5 N8 k# O6 o       continue;
3 T& d8 q* t1 m7 D; N; \0 s      }
$ M4 h7 k% y8 ]. [1 m& V9 W      //////////////////////////////////////////////////////////////////////////( x; b1 }/ N0 F9 D
      //开始移动0 b0 B- g; j- [! h
      if (nSrc == nDestPos)
, e* Y' W- ~) m; U2 \      {
+ l( u& z' a! |% V( K/ S5 \0 a       //原地不动
& s9 R/ r8 A/ V# Q( q       nDestPos++;) j0 d5 I; v$ g2 f. B
       continue;
! x4 G6 ]( m. m# Y      }
8 Q) E) C  j4 ^( k% C  Y      pInvSort->MoveItem(i,nDestPos);
! J3 B: ]! s+ T      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- I, ~$ n; z% n0 [& j7 Z$ ]7 d; E+ |      Sleep(5);5 G( b5 s0 x' A/ f* F
      //Error("移动 - %d->%d",nSrc,nDestPos);
+ N, e& z7 l+ i9 j9 i: q& I9 l2 j      nDestPos++;: A% V2 a9 f) Y; o& M) p
     }
* n  n+ i3 P  L3 F3 F' `     //取第一个元素的信息
& H4 t9 \8 @+ p9 m     /*
' n" Q" Z1 Y* }* R     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( W4 s, }: r8 P, C: T+ f; x: R
     {1 ~8 ~6 S1 A) P; D8 \
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ G3 [; K% h( B. d" w  l
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ C& l; O3 r0 s0 z4 N- D     }
* L, D) Z. L; n( I$ e     */
) E1 b1 t1 w8 ~9 R1 I3 P+ r    //////////////////////////////////////////////////////////////////////////" {8 u2 }# z: u$ N& f6 w6 }
    break;3 ]1 p. M! }& }7 i
   }
% g9 O) |6 d8 p$ I) H; f: A1 @  } ! B- k/ S" W5 w1 i
}
; a- r0 _( c) zm_wndMenu.SetVisible(FALSE);: A' i, Q# e9 {7 z5 F- Q. S/ j1 ~
, H- M% p: |. K/ U; o2 W
--------------------------------------------------------------------------------------------------------. A( R* M9 h# R8 ]& ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ O" @# P" V6 O5 {
{
+ U! n0 c& J  l8 VBaseMouseCursor();
" ^' j5 p& i% s2 Q}. k) r6 W' I8 {1 e0 L/ }
在其下添加:+ x, Y" X/ a) Q2 S( ?3 ^
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% |$ z: K( C2 E6 G3 A
{5 V3 R# G% A- X5 p* t5 Y+ Q. o0 }0 m
m_wndMenu.DeleteAllMenu();
* k2 g! a! S- _m_wndMenu.CreateMenu(this);
1 [6 k; g0 W+ _% D1 r* X3 ?# O3 q  Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 x- t) y/ n) W1 H8 k! M  N

5 e* C# ~4 V/ ]( c$ l8 Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 u6 B# ^2 T$ z( ~+ u( H% k
{: S6 p( z" A0 n
  //P以上级别才可以删除所有道具. s5 s0 V  M3 q% Q! ?8 m" G
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  U3 Y' A* ~5 M' z* @+ C
}  t: R$ G/ ^. `  p! k" I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 T( x5 x  c  m3 l( D! [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& T3 z& U# m% ]& ~' `
m_wndMenu.SetFocus();& u% U; y" ?( W
}$ Y* }3 h2 Z6 T1 \. [5 E! a
------------------------------------------------------------------------------------------------------------5 f, f  x) ~" p
*************************& l) ]6 g3 y* N  i6 }& L
WndField.h文件
' g7 |: d+ e: A6 h. D7 D, c*************************
$ f! |6 o2 A0 v- t6 g! O搜索:BOOL m_bReport;
/ X6 k! t4 |, ]" M2 M9 m/ i其后添加:' j# W9 Z. {8 M/ V( ]: S7 T$ @
CWndMenu m_wndMenu;. u. M' T  q. `" a. n9 g: K, H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% O; o! o  |; q9 p* M其后添加:& w8 C5 ?6 p/ @
virtual void OnRButtonUp(UINT nFlags, CPoint point);, M$ o7 B7 ?* Z( f8 {

2 N! ]9 ?! M, D; u- r, |
$ B; e' {! @8 K% ~

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 12:21 , Processed in 0.066188 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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