飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
, }+ @- Y' Q. C# T# h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 \: s- ?. g. f% r) e" T
% o" R! f/ u; }" B/ \
struct sItem# h( R) x8 r8 z3 d5 }3 H5 R" Y
{; k9 M; f  r3 _4 R5 d( J3 r
DWORD dwId;
) z: x: A0 a; t) H7 W1 L1 gDWORD dwKind2;
4 C/ K" e( S. X  D# K4 ]DWORD dwItemId;
. x6 [1 _7 i- G6 m* h4 {/ p) |4 JBYTE nIndex;
) p0 O! w' o7 W9 O/ K! x* Q1 hsItem(){+ c9 N, ?9 X, c$ R' A" w( y! i
  dwId = dwKind2 = dwItemId = nIndex = 0;+ b( @, s6 J# ^/ A+ ~8 [- O- z
}$ C4 W, s' f4 j  D. Z
bool operator < (const sItem p2)
+ {' Z3 n* F/ E$ l5 Z. [{, x% o4 q) {$ k: ^
  if (dwKind2 == p2.dwKind2)( Y" r! P8 j6 T! l  L, q3 s
  {0 N# [7 U: ~( m# l8 ?" c& b
   return dwItemId < p2.dwItemId;
7 I* x3 ~3 o6 l" K  t4 v  }else{
) B# p% w6 U5 `, {: \   return dwKind2 < p2.dwKind2;  s/ z1 A1 O) b5 e, X" f
  }
* m* `0 I5 x  G* d}
, z  A& `1 j7 D+ {};, m& B( G+ p$ F5 T; W0 ?
class CInventorySort$ ^6 \: u7 X9 ?# J  Q3 s3 u1 ]
{! [1 G7 _, u1 N7 b+ C' ?0 `2 ^
public:
9 l. Z6 m+ m/ l' `  x/ [/ P5 ~CInventorySort()
: [: u5 X: n0 o) `{" i1 n! _9 g# Q$ ]6 B" l! K. t4 t
  m_dwPos = 0;
! \8 F, J+ v2 x8 _}
1 q2 a: c9 z+ i  a5 m0 F~CInventorySort(){}' m; D7 T0 C0 C: t
private:
( i1 z, d& ^9 w* W1 N3 P7 zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& s( O2 \  `  b  TDWORD m_dwPos;
) {& w1 U. P) F4 U) \" \5 Y, lpublic:5 A  s( {' u! o
void Add(BYTE nIndex)
0 h  e5 s8 c' u* I{+ Z% H, ?! V( l( n. ?8 @: n" |" \
  if (m_dwPos >= MAX_INVENTORY)1 Z2 V; R5 ~, e& K8 r: A
  {1 D% i4 I* h# i% ~: e! d1 |+ Y- @, s
   return;  W$ ?6 H" U4 R: e
  }: I$ C" j, r7 u, H! |
  m_Item[m_dwPos].nIndex = nIndex;6 D0 @+ {. \. C" J4 ]( ?
  m_Item[m_dwPos].dwId = m_dwPos;
# p$ p# _: ]/ w, i  R/ Q. E9 \: i  m_dwPos++;% W. K- E+ S% ?" Z$ ?
}
1 r2 h+ @1 T" x' O/ c. A, b; {! G7 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. i; O! [6 a2 E0 s9 O) G$ E{) I1 j& ~, M! \3 u. _' W% @5 g* Z
  for (int i=0;i<MAX_INVENTORY;i++)
# o$ }; L( F! i# @  {5 J; B# I1 r% B' M, e
   if (m_Item.dwId == dwId)2 d: z  o5 ^. M  k  M8 j2 G
   {
7 K" u6 h9 M9 r    return m_Item.nIndex;
4 |& r0 |9 X; g* j0 o8 _   }9 p% a$ H; F$ i4 C7 x
  }7 t4 E* N( |5 Y& H+ z
  return 255;
4 Y4 G4 b  U. u% a}; `* j" l. M' m& c$ T( b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ |- M4 A* {3 H) S- p
{
) f$ ]5 P) P1 O* C% @1 o  BYTE nTmp = 0;+ v8 d+ w( r: F  X% ~  a9 Y# d: C
  bool bDest = false,bSrc = false;
: {; b$ ^3 f1 D" f. X- n1 J8 J  for (int i=0;i<MAX_INVENTORY;i++)
7 m, W) q) e  k5 U4 O) W3 Z  {. Z: D+ s$ L0 q8 z$ c
   if (dwSrcId == m_Item.dwId)
$ L8 `0 B2 _" h% k# G2 M) ~# T   {& f  |+ p- u5 B. I, K0 t  l
    //id相等 则 改变对应的dest和src& }' k. y* l  t7 h: ?
    nTmp = m_Item.nIndex;
, Y! g" Q* B( y0 o' \    m_Item.nIndex = dest;1 U: f7 I- k7 ?8 |. i, r
   }
, C  t6 t8 R& j7 q  }9 W& E) F$ ?  `$ s+ q4 p9 D
  //临时数据保存完毕,交换开始0 x0 F- ^- o8 w$ X- o/ J" ~
  for (int i=0;i<MAX_INVENTORY;i++)
. `, g3 x1 W. c& b! l9 `1 o- _* t  {8 a. w% c9 N$ X3 x. g. a- Z
   if (dest == m_Item.nIndex)
! e* _' e' G; F   {; C9 b. l6 a; ]! A& f2 Q: X: e* M
    //id相等 则 改变对应的dest和src# G2 [" q1 N3 n: v$ u' X
    m_Item.nIndex = nTmp;
+ ^! i! _0 ^' g( S$ Q/ Z8 u   }, J& m, p4 n3 j5 j1 T* v/ f: e2 T
  }
( U& b5 k, d6 [; [}1 O: _+ J; S% g6 \
};# D4 N6 v! k0 p5 G+ K
-------------------------------------------------------------------------
. m; K" `+ G( K- t) k* k1 k) ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): S' ^- W0 A+ j4 v2 m* b, ^* a8 w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' d9 M$ {( K  K& N紧靠其上添加:: T! a! C$ G# x* i, e( H9 t6 l+ i  n
if( pWndBase == &m_wndMenu )
7 Z5 b' T+ p8 X" T0 x{  p7 b" A4 w" t$ G0 z' k
  switch( nID )  ]+ F: Z8 {0 e9 ], ]( ]- b6 y
  {
0 q9 z' H! k# j" f! D  case 2:
8 u6 r) y' h1 d  T0 y   {
  A; U3 e% O0 l% P5 t. L% [    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 b; F5 }5 ~) ?, \    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. _- r! I, R# ^    {4 R% h- I; t0 j1 P& j0 \' j
     break;+ U3 O% J1 s8 e. H6 d
    }; Z; C1 y+ |3 v# C
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' b" f( H# ~0 Y9 M* |( S) K    {
% `. X2 x+ ^0 ]% ^2 f+ R     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 K. {1 Y% a$ k     if( !pItemElem )! I1 y. Q! z  e" m
      continue;. O* X' ~4 `; }
     if(pItemElem->GetExtra() > 0)! ~! a7 o0 o. K, E5 Q4 r
      continue;, r, F& o; w) j3 o& r( q! w! `; U
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , b! Z! i6 j0 }1 W
      continue;
- }: O; O0 _+ d. Y     if( g_pPlayer->IsUsing( pItemElem ) )
# N4 ^# k" v0 ^1 m2 q% p* P6 {      continue;
: f2 |( _5 [5 f5 j( H9 W     if( pItemElem->IsUndestructable() == TRUE )( P' |" T/ o& R0 Y; E0 T% i
     {  |2 t3 o: f4 a  B, D- a
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. u& g* c+ Y* m; A0 x      continue;
" {+ u# h* I; T6 m6 r: E3 \     }
3 |# n7 h7 Q, Z3 E  _& b     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# E  Y2 V) ]1 a( Q8 Q: N1 U
    }% f, G% @+ u9 R  j
    break;
: Y6 K5 u% y( `2 Q6 q" w) _   }
7 x3 f/ ~( F. m' J  case 1:& i$ P0 \) ~( n- m' @7 G, g; u
   {
, C/ G" N4 c. r! \    //整理背包
4 i- w" A1 _1 i9 O    //////////////////////////////////////////////////////////////////////////- Y& Z; l- o' r
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 t& T" Q7 x9 J0 h$ d    //////////////////////////////////////////////////////////////////////////+ C# v* Z* K* q
    //////////////////////////////////////////////////////////////////////////
# s" u: }7 S$ N' c( P8 W    CInventorySort* pInvSort = new CInventorySort;
5 v. Q" p" V" X6 T' H; m    vector <sItem> vItem;
; @9 n2 X- N' S$ W0 J    vItem.resize(MAX_INVENTORY);//初始化大小1 o- [% K7 b+ t& U( Y( T
     //////////////////////////////////////////////////////////////////////////& P" R8 F: C  [  k# L/ V
     //填充数据6 l. w$ ^+ Q  E! x+ N- e
     for (int i=0;i<MAX_INVENTORY;i++)
0 I5 {; G2 D# j9 |4 p9 n     {
' x, h  m5 l; `4 m, q, Q- I7 ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 ^- Q) s" a9 }& o' n( e0 E0 R+ l1 h      if (!pItemElem)
7 [+ T* ^  b8 C+ m3 ?/ ^0 A2 L      {7 A1 k  q" V0 v& u# `
       vItem.dwKind2 = 0xffffffff;
( I$ m6 V0 s# s( h" D+ {       vItem.dwItemId = 0xffffffff;$ {. f. g1 g( b: O; Z* |
       vItem.nIndex = i;
5 t" `, [, q5 i3 _2 A& j      }else {! ]" _! V3 |6 C% O1 \
       ItemProp* pProp = pItemElem->GetProp();
7 S+ Q2 B8 @- d  g8 v) _       vItem.dwKind2 = pProp->dwItemKind2;
; x( C" D% f9 \+ T& z5 X: t       vItem.dwItemId = pItemElem->m_dwItemId;
" _0 u6 f# ]4 M6 L6 u  }       vItem.nIndex = i;  c0 Q( v! ~7 H1 }  C( y
      }: O; S0 Z: K" p/ z+ n( Q+ r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 R: X0 M$ d  |9 W     }
. ]4 t6 `0 d8 k3 N     //////////////////////////////////////////////////////////////////////////
  s- `) \' C) b2 Q0 c9 d0 ^     sort(vItem.begin(),vItem.end());//排序
3 m9 t1 v2 e& F3 Q1 t6 O, D. g     //////////////////////////////////////////////////////////////////////////
( M1 V! A7 i: U8 j+ v     //交换
1 q4 r% F$ x  N9 Y     for (size_t i=0;i<vItem.size();i++)
: _9 r  |" ~# z1 a1 G     {
2 r! I( i5 w5 c      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; s2 w% o1 \9 Z" b4 a
      pInvSort->Add(vItem.nIndex);
7 Q) d0 M/ ^* H1 \& D     }# i. Q. r7 I; J3 ?
     BYTE nDestPos = 0;
1 ?/ v0 Y' |, w! l5 S2 b( y     for (int i=0;i<MAX_INVENTORY;i++)1 W+ B! k! X/ D
     {
( v1 d8 A8 K8 T$ t1 Y7 J& _4 _      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 z" r8 P% [8 V) c, u3 c3 Q: `% c      if (pItemElem)9 ~0 p+ m& [/ W$ H! M( t+ y" F2 R
      {, F! P+ _: a8 p& A/ A
       if (IsUsingItem(pItemElem))! F) {9 q8 v( P9 |/ X
       {
8 J4 A4 M6 d5 m        //这个位置无法放
. I: _2 M) {3 X        nDestPos++;
9 }7 Y0 j% [( ^* Z       }( o5 b6 F1 p( i9 c' w( Q7 B
      }
1 ]* C% v) Q2 L; A2 v      BYTE nSrc = pInvSort->GetItemSrc(i);4 }+ U" y* }: h" f: @' t
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 R' N' y6 t6 s( S4 S! g
      if (pItemElem)) P& m- U- Q/ g6 |: c+ D
      {+ ~8 Z7 |& f* A% Y; E
       if (IsUsingItem(pItemElem))" U7 o. l: K& g/ i1 |+ r
       {2 T! G; T9 H; {- q0 n6 n. i
        //这个道具无法移动,跳过6 L6 g, ]4 B- e0 y! k9 w; R: U
        continue;
# `0 O9 e4 T7 e4 y, b% J2 ~       }, `& G! Y, d- u  Q; F
      }else{
  M/ u) |3 `0 E2 i8 d) r       //空位置 不用动
; V2 V8 H% p8 B+ O" g! t       continue;* `. M) c' ~; o! N" {" d
      }% v( ~; Z' j, ]1 I  C2 {  _
      //////////////////////////////////////////////////////////////////////////
1 Z' u6 F- z8 i& J' ^1 h8 Y) Z      //开始移动
6 E. z; }+ u& B; y; V      if (nSrc == nDestPos)
  S1 n2 Z3 ~  R$ T0 K1 h  G      {
+ t' _4 F3 M) H9 ~# x) Z. A; `       //原地不动
) e  f5 M, y' j  v7 u. r, l7 Q7 B1 |       nDestPos++;( e3 k  Z; I/ O
       continue;# c. b8 R; g1 m. ], |
      }; t8 |, e/ b5 ~( S) {  V) J3 V
      pInvSort->MoveItem(i,nDestPos);
: Y# O/ O! H: m' i: ?4 Q2 n      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 @/ q% z. X" Q      Sleep(5);
0 i+ O$ V9 p9 v      //Error("移动 - %d->%d",nSrc,nDestPos);  D* p: V! L8 g: y
      nDestPos++;
( E& x( N& _+ A6 X: J7 [     }
$ d* J8 _3 q& z# j9 h" i* m     //取第一个元素的信息) }6 A0 q& n* i# |$ \% |2 u  M, Q. z+ e
     /*
8 F1 o2 ?/ a( p8 B/ K; E% l     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  t0 s0 |( F# {5 m
     {
: Q6 v6 o9 ^& ]0 w; I7 z9 D% N/ S      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 w2 Y* X+ t3 q
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 y1 Y, s0 X0 |6 y     }$ x5 t" N3 `+ R2 ]
     */
8 v/ l% m) g- i    //////////////////////////////////////////////////////////////////////////) O3 f/ M8 W0 }# P0 l- L- s% V0 }
    break;$ u: C0 ]1 b6 D3 n/ |
   }6 T3 d/ S3 w6 u7 X
  }
4 u: H  p) ~6 w" V$ G}) M. Z3 G( p; T: Y
m_wndMenu.SetVisible(FALSE);
. H0 q2 p: l0 ~% f) O4 G
4 W; h5 h/ G, M--------------------------------------------------------------------------------------------------------
6 Z9 Y9 D4 N5 |+ w: E( I% M/ |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
  j1 y( Z+ p+ {- Y/ t# O' I6 ~{  [2 }5 [7 e8 B1 S; k0 i
BaseMouseCursor();% `8 @$ o  `( a: ]& |+ }9 D
}
3 {# J3 x. ^! d2 M1 x0 ]( s在其下添加:8 V4 L5 @- a5 W0 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); ~+ y( X" ^) I
{6 z4 Z4 \/ G% C3 X
m_wndMenu.DeleteAllMenu();8 r, R2 |$ p2 c- w. s1 ^4 n6 a) C
m_wndMenu.CreateMenu(this);0 N7 x+ N0 L5 |& t4 T3 n5 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- _' O1 g6 F. B& ^. N0 l3 S* Z+ {
. i* g: {, i. c5 Q' z' Y: R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 \3 Q4 O) a9 Q! J3 N- a# q
{. A0 t$ F$ T% w) p1 q/ T
  //P以上级别才可以删除所有道具7 s$ J8 l3 ^: S& Y2 Z
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  @1 p* N* W) B' V4 {, m
}- |( W7 j9 r  P8 n- A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- r; f3 w1 k% v. w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% o1 R; O& u4 W
m_wndMenu.SetFocus();' X: c2 @1 Y6 X2 }/ U, A
}9 l$ R3 J! _- n2 a9 p# H
------------------------------------------------------------------------------------------------------------
/ F; N1 i1 I; k, |* D9 T*************************
7 R7 Z/ k: n$ X# @WndField.h文件
. V' T3 Z5 \6 t7 S) N  c* R; b* C*************************
3 f9 T) T( b3 {- g/ `6 a" _搜索:BOOL m_bReport;
  H6 g, ^/ C& v2 c& w. T. @- v7 f其后添加:
, G$ {: e! R: _CWndMenu m_wndMenu;
& N/ G0 g, l8 M2 L1 K9 A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) l7 {0 \( f, J8 o
其后添加:8 B6 }+ J' q1 d$ i, R3 S. A
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) x& M, H! F# }( B" ^6 }- ?  f! x  q0 I( t

  A# h! x* v2 @% ]; j

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 08:28 , Processed in 0.065840 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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