飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 A/ [8 N# f: t2 u0 D# U: ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 C2 Z% R) j/ k
; o0 z% J; D' Y* cstruct sItem
' A+ p3 w& g  C8 ]: z{/ g3 B) a, X4 j! T3 R5 G
DWORD dwId;/ B6 B' t. J1 b4 X# a" K
DWORD dwKind2;/ [/ K+ m7 s& @8 u" X' h7 d; A
DWORD dwItemId;
2 q) N+ |3 T& ~$ C7 N; wBYTE nIndex;
6 f# n) C7 \2 E' HsItem(){) n* n6 X( {% o8 u  c
  dwId = dwKind2 = dwItemId = nIndex = 0;! C: `+ d( A  ?) a$ ^
}
! Z$ x0 u( @/ C0 Pbool operator < (const sItem p2)
; U0 C3 t1 a: K* j4 n{
2 A) P% f7 S- _# |6 o" v: l6 w  if (dwKind2 == p2.dwKind2)  S/ Z* _; I6 y! V+ Y' S
  {: h+ t$ T2 b( j
   return dwItemId < p2.dwItemId;
; C2 l# `% N8 Z$ c1 S5 g3 x  }else{1 V( `2 L1 e/ T  \$ X
   return dwKind2 < p2.dwKind2;
' `" {' E% C+ C, k/ w9 H  }
5 G) j/ i8 b7 k/ \}- Q1 b; m; }7 X" b
};
$ ^& e: R( [; y& c1 gclass CInventorySort( i- u- \. v) Y4 x9 ?
{3 S0 V" C& L7 f: e
public:
9 Q1 c# R& u; F1 I  q2 L8 q5 WCInventorySort()2 w! d, e9 d  C8 W; k' W
{
7 ?. y8 l# @% Z! ]) `5 ^, f( I  m_dwPos = 0;& u, b. M1 e: l- w0 T
}
! E2 T1 {! j, G6 p! S~CInventorySort(){}1 o! r# U( l5 e  m; o+ b
private:
8 ^  Y* F* Y  xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( L) q0 M- H4 x- X) BDWORD m_dwPos;- c6 o6 @/ i& r- `
public:  K4 Z+ U$ j$ N2 K8 s- q& b4 ]
void Add(BYTE nIndex)* c" Y; h4 @: ^* s* \
{$ _/ T1 L  N9 ^( X) {6 a
  if (m_dwPos >= MAX_INVENTORY)
$ [& `8 ~/ f1 k+ _3 c, M  {
5 U+ h7 W+ `% k$ x8 B+ H5 n   return;! z1 d" G" U6 \' w" q6 L
  }5 ~2 ~& x& x. P+ [- A) s
  m_Item[m_dwPos].nIndex = nIndex;
. |/ j0 N# ?) {  m_Item[m_dwPos].dwId = m_dwPos;. h5 R4 t' ]9 k+ I: i0 n6 r
  m_dwPos++;
: D( `* d) _  K}9 m0 a' u. {, b4 k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ k! |4 `% \0 [' d
{6 O& z& g; ^  }0 n- P: x
  for (int i=0;i<MAX_INVENTORY;i++)" S6 m3 H4 g! k" u' f; A
  {! k8 N$ p2 L. ]
   if (m_Item.dwId == dwId)
" s1 J# t( Y0 [* d& j   {
( ]4 V5 u. P8 U    return m_Item.nIndex;0 X" T/ N: p& U/ q% {; f
   }
$ Y8 M+ q! P: m  }
5 I9 A- B: [$ t; F5 ~: p  return 255;8 ^- \) x* Z: m4 G0 v7 e
}  R$ @5 z, Q2 N0 M2 v( G6 s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 z: \7 j# m& o# H+ j
{, l) `# O1 i$ u& v6 ?
  BYTE nTmp = 0;
" H2 V, w' Z  ]- W# t5 d  bool bDest = false,bSrc = false;2 g9 ~( q% k& Q, {0 i0 h; d7 [1 {4 u
  for (int i=0;i<MAX_INVENTORY;i++)1 l3 b) C; q" u6 ]5 y
  {, x9 q2 d; Q# G* J' k2 M
   if (dwSrcId == m_Item.dwId)
2 P% m4 a# ]8 R( R   {
1 P0 g1 j4 b0 g0 Q    //id相等 则 改变对应的dest和src; X. {% K" Z  X
    nTmp = m_Item.nIndex;' o9 ]! _9 v+ l( j7 v' K
    m_Item.nIndex = dest;
+ y6 C& o/ g, f+ I) H   }8 Y1 }; E( r$ _& W0 Q. W1 P4 Z# `
  }
0 V- O! y5 t/ b: l  //临时数据保存完毕,交换开始
$ M. R8 C8 ]% @: C0 T  for (int i=0;i<MAX_INVENTORY;i++)
( u+ W/ j( V; j9 Y  {" Q4 g3 Q$ \5 F" y
   if (dest == m_Item.nIndex)
4 J6 G+ _# P% f# @5 I   {# c) R0 L1 T3 {; }. ?- \
    //id相等 则 改变对应的dest和src/ P; U/ L/ J+ H9 i% z% D& e
    m_Item.nIndex = nTmp;
1 d4 q/ s# f$ h( w   }0 ^* j8 o4 w5 Q- l& z
  }. \" O. J! l& z/ P" R
}7 ^8 z2 Q$ o+ Y6 K& s$ S
};4 A) Y- k2 P0 r$ z1 l, N" v
-------------------------------------------------------------------------
- ?# ^- ^, d, D( x+ [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) v5 w+ I8 _* Z" S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; c" U- S2 J8 o6 f
紧靠其上添加:) M0 m  Q  k' o& g& d9 d) K0 X
if( pWndBase == &m_wndMenu )
6 A( j: c2 U  q/ \* h6 }{
3 O- F  M) `/ w! r: t8 O% G+ N( r  switch( nID )
9 z' p/ v, H% i2 h3 j. ]) r( K- B  {7 {7 j; N8 Y; X* o$ X; C1 w. U) v! _
  case 2:; _4 b* j8 p5 p* n  q
   {1 O, F6 t4 h* d* U
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! P! B, a) h' p
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ {' l  k& F1 Q( y* l- i9 u' v    {
, ^7 R" }* }; `3 v7 k     break;' r% l5 Q$ D3 t8 x- U9 p
    }
9 H5 H- e* B0 c- i' u7 K) ~* D    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 B" v, [4 L# M' C' P1 }
    {2 \0 f- k. M0 T
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* c1 v! s1 e+ |; t     if( !pItemElem )) ~0 {* y/ B- O. j% g/ e
      continue;
& N% Q6 F! s: [' {& H( B5 t     if(pItemElem->GetExtra() > 0)
+ o: v! V' U$ s2 ^! E' k9 P      continue;% @" {) l8 q2 j$ t) ^
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- p6 R7 y5 ]/ s; A% W/ \      continue;
$ Q. g1 d: A0 [; q0 I  o+ a     if( g_pPlayer->IsUsing( pItemElem ) ). N* U9 V: k! j+ v0 a# e
      continue;
5 G0 ^6 \8 A9 I( ?     if( pItemElem->IsUndestructable() == TRUE )9 t+ C* n$ g. m$ w8 m/ G
     {
: {) C" r0 |! H: h      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 P: R) e# |5 g- \! `& X
      continue;& }* P& R7 e$ m9 a* |) {/ {
     }* f; A/ `: @* a9 c! R; C
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 a1 O* ]6 n4 T3 y4 i$ P7 y4 y    }
9 G; U# @3 i" T* J# B    break;# t8 b* f, X! w# H6 w+ d
   }
9 E# u" D3 F  m  case 1:
% V' e$ `6 q4 c. R% p% `/ m2 D" l- O   {4 ]! |; V$ v3 o% `8 g
    //整理背包/ L; L5 g3 V  y# D+ s# u
    //////////////////////////////////////////////////////////////////////////
% f  M" f8 `" V7 m7 j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 d+ B) q" `# \  b0 `
    //////////////////////////////////////////////////////////////////////////! R( s( }( U6 [; C4 h
    //////////////////////////////////////////////////////////////////////////
0 E' Z/ w0 V$ q2 u! Y    CInventorySort* pInvSort = new CInventorySort;% \0 I( C% Z4 p# o# ]9 X
    vector <sItem> vItem;
; q9 O& ]; w$ F; a$ h    vItem.resize(MAX_INVENTORY);//初始化大小7 t- f2 W8 @( A: I/ c, ^1 {4 X
     //////////////////////////////////////////////////////////////////////////
) B  Z: T" |$ H. g- F  F% b     //填充数据7 {1 l+ ~2 s( @& m" d
     for (int i=0;i<MAX_INVENTORY;i++)
2 X$ J- I, C* b2 @" i- L     {
. D9 l3 Z. b, @& }& q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& J, l# ~: D1 L+ ?( o+ N      if (!pItemElem)
" Z! ?6 P4 G+ u7 \; I/ ]      {1 _# g0 y# r" E0 g0 u- [, M
       vItem.dwKind2 = 0xffffffff;$ Q0 X& c4 S/ p- x$ h; y. H
       vItem.dwItemId = 0xffffffff;& [3 W( w; E7 K0 j( \
       vItem.nIndex = i;
6 S% B* P( J& x9 D      }else {
* O3 G' B1 O$ k& F; ]. Z1 S" v. n       ItemProp* pProp = pItemElem->GetProp();1 _( \" ^2 |8 a- W5 a8 F
       vItem.dwKind2 = pProp->dwItemKind2;' m6 k7 k1 s, E  H0 R) Z
       vItem.dwItemId = pItemElem->m_dwItemId;% r) D4 N! w" S  K' Z' M
       vItem.nIndex = i;
* r: h: P, d' r      }
0 Q5 ^* T& S0 |8 ]$ }      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" d& j  Q, B4 t  {3 t* \" _
     }! s. l7 Q, V8 l
     //////////////////////////////////////////////////////////////////////////9 Q  D/ k/ {( p8 \! @; x: h0 x
     sort(vItem.begin(),vItem.end());//排序, D& J6 Z3 h, o5 r+ q
     //////////////////////////////////////////////////////////////////////////& m3 E  M" i0 b& ]1 `
     //交换
! P% B5 ?' V* M3 |     for (size_t i=0;i<vItem.size();i++)# w$ t" f) C# {" g5 ]" k0 t
     {
: I5 ?- [& J0 b      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 w% v' ^0 u) Q# J. U: `1 G) B" j
      pInvSort->Add(vItem.nIndex);
( L9 o, y- t2 x  N- J: Y+ l2 o     }' z: V9 s- }+ @6 F4 j
     BYTE nDestPos = 0;
5 \* t' z/ P) i+ @     for (int i=0;i<MAX_INVENTORY;i++)
. a; z( m" D' m  I, y% Q2 a& I     {( W8 i% @/ g' C) D
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& ?2 N6 d% U0 n! Q# Z2 I5 z
      if (pItemElem)/ M6 ^* O! y* {6 s# ], C) }
      {) g% K2 y% O1 A" Y$ ?/ a
       if (IsUsingItem(pItemElem))6 F4 I! N3 [, v# S( q
       {# c1 f4 x; Y5 F' Q
        //这个位置无法放: X5 H/ \3 }3 `4 e0 }4 X
        nDestPos++;7 B6 t4 E& y% r! G6 v
       }! E; D( E  {8 F7 o# b, O4 Y
      }2 n7 Y7 o5 P8 h4 m
      BYTE nSrc = pInvSort->GetItemSrc(i);0 Q4 P$ P1 Y7 x. a  i' ~. J/ D8 n
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) I. t; s  E7 ~7 n; N      if (pItemElem)
. ^3 I/ v- Z4 k. T! @! N      {9 Q/ W: V. Q7 r, J
       if (IsUsingItem(pItemElem))
" q2 P- j- P, [; x% R. a       {
& s! J. W' a/ x1 ?* g. h# }  K# h        //这个道具无法移动,跳过( I8 s9 i+ s- T/ y( B& z
        continue;: B6 z+ K$ f; ^9 i8 N, ~. k
       }
9 ~! ^4 r5 i" G/ W1 k5 ~0 r5 ^( u* C      }else{) d! ~+ P; }3 C
       //空位置 不用动! Z' }! @2 T6 k$ X, L
       continue;8 ~# k7 Y' M$ A( _
      }
. a6 e9 o& d, U. Y# |0 k! D2 J      //////////////////////////////////////////////////////////////////////////' ]" J# N( M) c* N9 p
      //开始移动5 f$ u7 p% J4 d7 X* l% z1 F6 s% G' a
      if (nSrc == nDestPos)4 V. k. M. l! [5 F
      {
  i3 p  P/ T/ L       //原地不动  H% y$ u+ Z8 O& l/ e
       nDestPos++;. U0 v; p# d1 L$ N8 S* ], e# t
       continue;
) e( X6 L/ Q) c$ |      }, M' b* [: B& b9 s% t# N' q% H+ M# ]
      pInvSort->MoveItem(i,nDestPos);0 f( ?4 }7 d/ h$ m& A
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% f: u, J5 \1 [) S4 d
      Sleep(5);
  X* E0 u1 H1 L8 h3 p$ K% R) r, Q      //Error("移动 - %d->%d",nSrc,nDestPos);
* g# s" `; B7 s      nDestPos++;$ r0 a# b, d( L7 m8 r
     }
* \  T# T8 o( u4 c4 {; P6 w5 T     //取第一个元素的信息
3 E' Z( v3 [' [7 O5 n     /*
% h; O( c2 K% H4 L4 H6 r' r     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 c; p: @/ t% C' y     {+ u6 o7 b+ n, s5 L! I7 u7 ]
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 }; D: y3 [( `$ L. T* M* _& J      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( j- D" S1 E" Q, P1 T     }- R6 C* F" J& Y  q# B6 j1 _' u
     */
" e* H6 E' k$ ?: E    //////////////////////////////////////////////////////////////////////////
# ]4 C& r. U9 k" ?8 u' L! s    break;
* `8 [) W8 \/ u! c1 G   }
" i' B) C9 P% |/ P" g$ I* I+ E  }
7 N3 F" m3 L* L  w* {6 e  J5 B) B}. r: K! M% t* ^2 @) y( r; W2 u& P; _
m_wndMenu.SetVisible(FALSE);
; c7 c3 ^5 t8 c' K! T7 }, p# j1 r6 I5 z
--------------------------------------------------------------------------------------------------------2 n0 `. D3 P( A1 }3 w# G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" X1 |0 z! g. W! A
{, T* U8 v& [& u8 l/ P4 Q- [2 G3 t) G
BaseMouseCursor();
) g9 C* G7 j+ S, Z3 j! g}
4 A7 B) g1 i& Y% F0 W3 n7 r+ J  i5 S' E在其下添加:0 |9 B, q% C8 T4 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 }5 u/ D! x$ ^& c{# g7 u5 Q3 C  n7 C& j4 x4 h3 _
m_wndMenu.DeleteAllMenu();) s3 B& ?# \3 h% q# C# M; c
m_wndMenu.CreateMenu(this);) X/ _6 f# T3 U: o8 n6 I  z3 u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 ~! x& l1 a& w8 ]6 ]

" R) H  u, |* Q9 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* {0 d- k3 G; U$ H{
! i- c/ b( J& z! h8 k  //P以上级别才可以删除所有道具# u, s6 I, O4 J6 b1 A6 n& G- ?
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 W: W  ]' h  E6 ~( u}
3 e% q0 N4 Y& I! g+ B4 B8 jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 R  u6 F. {% ~* B  Q5 Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 h5 [( ~% z2 ]
m_wndMenu.SetFocus();7 p$ n6 b; a" d3 M2 g! y
}
9 v3 H1 A; U4 d( y------------------------------------------------------------------------------------------------------------
! W( ^4 _2 t, U: f* v*************************
6 G$ z, T" U7 \( ^( f( T% |WndField.h文件
- P, {" M, }6 n2 B% e5 [*************************
. T; R( u" b, c. C3 z0 t搜索:BOOL m_bReport;' q2 G# d( M4 T1 n; P
其后添加:' f7 h+ n6 z" v: L  S# r$ `
CWndMenu m_wndMenu;2 P, P/ s4 M* N* l. u
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! U2 O6 }! o9 b3 y  N
其后添加:
) A% z/ n  q! q" s. Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);# z% k: z( g4 _2 G4 O
: \, e) {- S6 G0 V9 d7 L

6 J9 l0 ?  c6 N8 [5 A5 V

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 03:13 , Processed in 0.064096 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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