飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
  y, l; w8 h5 m( l& d, F( n& D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ d) M6 E4 Y. q( ~; b8 F

# z3 }! [* J( G' `struct sItem5 b- ~0 C1 i$ K3 Q% y7 Q
{  K' W( r! {; l$ J3 x% x1 F0 `
DWORD dwId;
( W0 L) s+ O" P$ o; \( ~4 ADWORD dwKind2;6 E! _! P! X: d8 {8 @. v; I& x
DWORD dwItemId;$ n: d  o( F$ b4 y3 i
BYTE nIndex;
2 V/ H( \  S2 v2 gsItem(){
: z' H  m* T0 G- ~  dwId = dwKind2 = dwItemId = nIndex = 0;% Q9 d) X+ P9 i, ?
}3 B7 V  w* w! J$ ~* Z
bool operator < (const sItem p2)' Y( R! n  W" C& y
{1 F3 |( i! r3 c- ~: I
  if (dwKind2 == p2.dwKind2)1 c: D" a" K' b+ t
  {
% p2 ^0 [/ ]- K) M   return dwItemId < p2.dwItemId;
# Q" v$ z& D3 ^& ]  }else{
3 C1 k# |  p& M* W   return dwKind2 < p2.dwKind2;
3 ?9 g$ T* C& G. a8 ]8 X/ w, H  }
$ ~2 c5 l& g$ f" M6 H}$ i7 U9 B' m5 {7 G/ }
};
1 I( I6 m. _  }4 ?/ p( x8 k& [! aclass CInventorySort
- h2 _8 K6 ^3 U! {5 L{& [) t- B# I. \" [8 f
public:
6 G. v/ g# a( S& S. q6 T9 p5 fCInventorySort()" \, I& ~' s* y" `! a
{; e# J& G- Q% @3 O9 k
  m_dwPos = 0;- q+ F& b8 [$ V) ]
}
' y8 e7 l* |' G7 K  g. Z~CInventorySort(){}$ {! @, [" m1 ]0 l
private:6 V7 s5 \9 E# b" k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 X1 f( @- V7 Q6 B' e4 Y
DWORD m_dwPos;$ l  b: O5 W7 C6 |8 z- _. Q
public:
! t, S( D& P2 ~0 D1 J5 Kvoid Add(BYTE nIndex)  X4 n0 V' [- h( _2 D3 I
{3 {# w$ ?9 ^: d/ T0 s& G: @
  if (m_dwPos >= MAX_INVENTORY)! c) @6 q* N1 t! \
  {. T" S! t! r' h5 @& I$ j1 @5 X
   return;
/ p& S! u1 x6 [2 s$ _- O3 b' p  }
( v4 J1 t* y# O; e  m_Item[m_dwPos].nIndex = nIndex;
' N* X) r/ |7 n: m' a3 o" f  m_Item[m_dwPos].dwId = m_dwPos;
- L; ]0 g9 \+ w5 }& Y+ N7 \( ]* R  m_dwPos++;2 k6 A! D- k" h* C# f
}1 Z9 C- j& `' h8 Z- B0 [: w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 X! X9 U: i$ C9 ]2 p3 Z5 d; C
{* I6 {6 t* t8 U+ g7 e
  for (int i=0;i<MAX_INVENTORY;i++)
2 t# }) j/ U5 @! g  {
% K2 v) @2 o, ]" ?6 y# f: p   if (m_Item.dwId == dwId)  i! D, }6 d" o# x- L- {: L: Q
   {
' b3 ?6 ~$ h% R/ b    return m_Item.nIndex;
2 j9 ]% K4 g  G! O0 O! P) V   }
7 M9 `9 n: n2 L+ F, R( b+ D5 Y* E  }
' A: q& [- j8 ~3 i  return 255;3 N$ V8 b. i0 x. t- V& l
}+ i( X+ A5 q: ~4 l
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; k0 j2 o1 n' P* n
{
. W1 p# N5 B# F3 ]6 ~: ^( \2 K  BYTE nTmp = 0;
3 \9 Q3 a- n# W  bool bDest = false,bSrc = false;. N5 U8 p' N" h& r8 C( B5 P: t5 X
  for (int i=0;i<MAX_INVENTORY;i++)
. U( H) S5 Q# B  {  j: {) ~! i! h0 {2 x! [
   if (dwSrcId == m_Item.dwId)
/ K# W* H- k; ^5 q- V5 s  J# ]1 n   {( k/ z/ F" Y7 e& l" i+ ^1 T
    //id相等 则 改变对应的dest和src
5 D1 @) c! |  q2 ?1 B9 g    nTmp = m_Item.nIndex;" X% t" i! _( ]( z. @# l
    m_Item.nIndex = dest;
6 r1 l. w' Y+ _* k( x   }
2 O2 H0 U- I! B3 H" ]  }
9 q* z) S9 M3 K5 S, e, B- }  //临时数据保存完毕,交换开始
2 g6 f1 K) q' O" i2 G  for (int i=0;i<MAX_INVENTORY;i++)! n% u( S- M0 u/ ~' h. q
  {, ]2 J8 q% g0 r6 A& Y
   if (dest == m_Item.nIndex). v" `$ g  f0 g6 D
   {/ Y' p: z: i$ n. Y. c$ m
    //id相等 则 改变对应的dest和src
0 [0 G# H1 m6 C    m_Item.nIndex = nTmp;# g- \! X* E2 h6 ^5 L
   }
0 Q4 e* w& n9 m- ~( ?) z  }
- y; D" Z0 r$ g9 g# k# o}
& R' U* Y2 r- u$ y: |* y};- c" t0 o) _9 t: Q
-------------------------------------------------------------------------1 @8 v+ W! R# _' C  G( t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 R9 Q) W9 Q% i0 E, P* J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. g( B* U4 \; l0 I2 r
紧靠其上添加:  d5 n: O4 ~6 ?9 K; O, N% ?5 N. A8 J
if( pWndBase == &m_wndMenu )" p1 [* R6 @- n9 V& F4 n* d
{
- l/ g' r3 @  F- D  switch( nID )
$ \7 v+ W6 m# p  u! l6 D7 l: `  {, W9 g1 D8 N, x7 F* _- S% Q. j7 C
  case 2:2 I  s0 `$ k3 X
   {. y& C  i; q0 ?4 n5 w
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ m" R4 |0 `4 R    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 j4 i: H0 F2 C0 X6 Q: \; H* q    {( o. M/ q! N% f- z0 U5 q
     break;$ _4 e  |# ~. N" _7 j
    }
5 P+ [8 M0 O2 L    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# G  Z' B  [3 S$ ], r
    {: A* M, z2 u: Y3 k$ @
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; R( o* O4 |8 c: F
     if( !pItemElem )
% r& X, z1 p* v& w  @" [- q. T& a      continue;3 X. _% n3 I3 I( v" Q
     if(pItemElem->GetExtra() > 0)6 C. P. ]2 v& P3 F3 X# a
      continue;
6 |5 |$ ~- n* w/ C' v; ~4 _: `6 o     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 T- h# Z0 k" k5 p$ u% X. [2 k      continue;
2 D# \0 e4 o" I( B* T: u     if( g_pPlayer->IsUsing( pItemElem ) )7 _8 |! r; ?% Z7 z; l% \- `7 h0 `
      continue;
2 J$ R4 I9 {- S( k  W( }     if( pItemElem->IsUndestructable() == TRUE )  T7 W) _  j' X$ P/ E4 B( j& A0 L& C
     {8 C; e) w2 _8 {
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' I! O& u" z- L: _* X( X: ~# h9 e      continue;% f9 {* J+ ^! F2 |
     }8 f; f6 g: ^0 f, r7 ?
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; f% w, t* K0 O8 k    }
# W4 w$ ]  u3 P. P, V+ H' @    break;, d8 A6 v" {# p, I' F. T
   }+ Z8 C( O7 z, d+ L* J$ w( S
  case 1:
* y  `$ y! ^% H1 {+ s. m% K, t   {
# o$ D2 Q9 {1 T$ k0 l/ C5 g7 O    //整理背包
' S0 ~- S% Q% |0 P' i- T, C6 L    //////////////////////////////////////////////////////////////////////////
$ U- W8 E' x: n# t6 t. `    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 F& ]) V2 ?' O8 @0 e    //////////////////////////////////////////////////////////////////////////: I) G% R6 I9 B$ D
    //////////////////////////////////////////////////////////////////////////$ F- }5 p5 C$ w+ h
    CInventorySort* pInvSort = new CInventorySort;, G% S3 _$ F' X4 n0 W$ V2 b
    vector <sItem> vItem;' E8 i" j) }9 N+ E4 J
    vItem.resize(MAX_INVENTORY);//初始化大小: v; ~( `: V7 n3 B% t7 k9 D) N5 b
     //////////////////////////////////////////////////////////////////////////- `: w4 |1 |' |1 ~6 e
     //填充数据
: J' Y; q6 b3 {1 p% J! U+ ?     for (int i=0;i<MAX_INVENTORY;i++)
" _+ ~0 V! v; m3 ]8 b     {7 ?; e2 C( m: D+ w; O5 L9 E) @
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# e- j, r% k5 I: \9 a8 D7 V  m
      if (!pItemElem)
" b% }5 p# w( x9 v6 d5 X      {( R, Q9 i9 C- ]4 @: Q/ i& K
       vItem.dwKind2 = 0xffffffff;  V8 I# ]! G6 ~/ ^' |5 R2 D
       vItem.dwItemId = 0xffffffff;/ [' q1 Q- I' j) e4 e& L% P
       vItem.nIndex = i;
3 e" W: k+ M5 D6 |; ?# c      }else {
! `- h7 Q  ]; ?! f( m( ], N: L       ItemProp* pProp = pItemElem->GetProp();, `4 K' R8 B# p7 G( V2 c( @) L1 _
       vItem.dwKind2 = pProp->dwItemKind2;
. ^2 C* I5 Y5 @: _' U- Z& ]0 s       vItem.dwItemId = pItemElem->m_dwItemId;. L: a4 y1 m2 }- H8 F& W
       vItem.nIndex = i;
" `/ m0 F* O  X$ M1 W6 M      }
7 K. r/ e5 x2 T- j" Y8 I" Y! O$ d      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 W4 z) }+ L+ F4 P  A     }  n* k+ C* j- O3 q7 F  R/ H
     //////////////////////////////////////////////////////////////////////////9 D5 i4 T2 K" J! x8 F
     sort(vItem.begin(),vItem.end());//排序
  f6 F. ^/ R3 y# @( s1 Y* z     //////////////////////////////////////////////////////////////////////////
' l' [- r  h# T6 {3 v. b     //交换. x/ B6 N; ^; p0 h7 f% G
     for (size_t i=0;i<vItem.size();i++)# Q$ b/ u% O' d% w+ ]$ f
     {; b" b; u) m$ f5 K  d
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: {$ R8 O- \+ K* U  D1 ]. |      pInvSort->Add(vItem.nIndex);
% P' W. f# n/ i     }' }5 u6 ^7 I  _8 ]" b* T6 W5 A
     BYTE nDestPos = 0;
0 S& r7 u1 ^! o: x& i0 ?     for (int i=0;i<MAX_INVENTORY;i++)
# G/ c) P9 g2 N+ B. H9 R0 ]/ p     {: o- [' C3 w- }2 |* s) b
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 g9 b/ t& w6 q( U$ a9 W- o      if (pItemElem)
* z, ?4 X1 r  U" C      {
- C8 _' |; o! b+ s6 k       if (IsUsingItem(pItemElem))9 R8 r9 e/ `% }# }4 u7 K
       {
1 k8 F7 x( Y5 Y4 F  Y5 s        //这个位置无法放/ s( t9 g4 J! w6 n' Z. _$ Q
        nDestPos++;
9 B# p" D# c1 L; n       }1 X9 L$ d, P) w( u+ Q1 L
      }% F* ?" P. i) o3 A7 X
      BYTE nSrc = pInvSort->GetItemSrc(i);
+ F1 P) c8 G0 v% O8 M! }6 A: m+ i      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% w5 ?3 ?  U. p$ K
      if (pItemElem)2 h8 j7 j$ l" x7 |5 _& u
      {
. d  n2 J) A0 W. _9 s       if (IsUsingItem(pItemElem))) n, d. `8 A) h7 m5 m! G
       {7 S0 Z1 m' Z: t6 ]/ `
        //这个道具无法移动,跳过/ f- c4 X* z1 p) p
        continue;
6 k' e% Z7 Q0 O' I# Q       }
1 w( ^; @0 Q+ y. A0 C      }else{
+ Y+ z( P; g& n) C       //空位置 不用动0 Z  x$ P/ n7 }, u& f
       continue;$ o9 v! M( d( }2 Y; ]8 U& }* N
      }/ b# f+ Q+ l: ?; J7 x
      //////////////////////////////////////////////////////////////////////////6 M# Q) c! u& X
      //开始移动  H! J# F6 J, t3 n! P
      if (nSrc == nDestPos)
: c$ |) S8 g) k& A# l/ O4 }1 K2 ^      {
) h; V2 r- L! t  l       //原地不动
2 l5 N  J# V" a$ _7 ~       nDestPos++;
3 S! V& R, x; \; z0 w& W5 W. C       continue;
8 j. D+ u! A( C  Y9 i5 ]      }
: |4 ~( I2 J7 P7 r8 Z. g      pInvSort->MoveItem(i,nDestPos);
3 R0 ~! K% S4 n0 _- q& Q- e( ~      g_DPlay.SendMoveItem(0,nSrc,nDestPos);& S5 v  s: H" v& Q
      Sleep(5);
/ I0 M! \  ^+ C      //Error("移动 - %d->%d",nSrc,nDestPos);
5 g" V" r2 A$ Z4 a; j( J" J      nDestPos++;' W) ~9 L* h% a+ I3 c+ O; p' g  j
     }
; T" s! R* r0 O% Q( p     //取第一个元素的信息
% x# K7 N; q$ N" b2 j     /*
! V. _/ R: P9 e& H  t     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' V3 U0 S0 |  W: Z- D; |     {
5 t; f9 i5 @6 m      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; \7 K! Q9 g1 A; _$ X  A1 t      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 i3 ~+ Y; j) [5 ]5 f4 x     }
& _9 s' o/ N& l9 R1 G% G! t1 M     */
: M3 {) n) A' r3 c9 P+ b% {    //////////////////////////////////////////////////////////////////////////
. {- c9 P6 z6 u, G5 |4 F    break;
, \( ^4 k. d+ Y1 M   }
  o: ^: v' e( f! E* v0 v: R; J  }
% g1 j+ S4 }6 K}3 ?) i4 e0 q% f$ M0 \2 l) |% Y5 u
m_wndMenu.SetVisible(FALSE);
, W5 h, N0 q2 ^/ y; l; X, ?/ s$ i. z7 J, f0 @
--------------------------------------------------------------------------------------------------------
- t- W# ?& c1 I0 x" M7 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! v5 A4 B5 U6 F5 D
{1 _, \2 o+ p0 ?" l3 s/ k
BaseMouseCursor();
. O, E& P# n* V  Q( d}3 S3 d& X5 z0 t0 E- b7 R1 @& e# K& t
在其下添加:
) f( }( Y3 e& J5 t- t7 i# mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 ], s9 ~; I5 M  v
{7 Y! O* [, W2 n& ]
m_wndMenu.DeleteAllMenu();
! J0 U8 ^2 D" x7 _# k. xm_wndMenu.CreateMenu(this);; y5 g+ u* b. U5 X8 S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
  h8 R/ V+ z  f" g2 L" @. Q
* \& e. S; d7 [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), R4 k% K0 A4 G1 t+ e
{
; Y* a& [. X, C7 \& J7 V8 j  //P以上级别才可以删除所有道具' t, C. ^. o& o) K" [
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& O, b! }% e# w& w! |9 z+ @- e
}
. m( c2 V6 B( {5 I! Z+ dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 @8 d& c6 R+ J
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* X/ @( F2 ?4 y2 G" S' n
m_wndMenu.SetFocus();
/ F7 j2 w5 J/ d3 O6 m8 u3 x}+ i, M6 b. _+ z& J( s
------------------------------------------------------------------------------------------------------------
& T2 V& D; U: e*************************
5 p/ c8 X1 c4 {7 `4 B' D0 K* rWndField.h文件
- N" a, }# S7 d  F1 G4 w/ x5 C6 X*************************
5 i. Z( Q& E4 F* x" F搜索:BOOL m_bReport;
+ k# y' q$ E; Z其后添加:$ B( ~5 p/ ]6 m0 u0 w
CWndMenu m_wndMenu;6 |' z) t+ `7 E  w4 L& D3 ?  U* U, W  Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" w/ H! o/ b0 T+ `: G7 [% P
其后添加:) p2 s1 M" b# u% l5 H
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, Y& F6 B  F+ {$ n3 H
0 v% q2 v7 ^" B# P8 r0 L8 G
* X& P- S( g$ q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 06:16 , Processed in 0.062967 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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