飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件$ h0 g' s" I+ z' {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 I$ o7 ]1 }: t8 O& n. G6 R8 j! l8 ~% S4 |1 M0 d' e4 o: Z* i
struct sItem4 O- _! `4 I/ H+ X) s& _, c
{4 T, w! J- R" n8 N; {
DWORD dwId;7 m  y7 i4 [3 g4 b- s% E& \
DWORD dwKind2;
* h$ d) e- B* X$ tDWORD dwItemId;+ z! x* n8 C3 Q9 x! D
BYTE nIndex;
/ ~% Z& G, `9 i7 FsItem(){0 e" _; J4 u0 i8 b( [
  dwId = dwKind2 = dwItemId = nIndex = 0;
! N4 }8 u' v3 I# r# G3 J& a  P  t1 e}4 z# m: ?9 T  ^9 ~
bool operator < (const sItem p2)
! J6 i) ]0 X4 q% R3 e( S{
4 U. B$ u5 [+ o; w  if (dwKind2 == p2.dwKind2); z7 _! i7 a/ _# P0 i5 D
  {: W7 m( Y- ^' \8 Z
   return dwItemId < p2.dwItemId;
3 J, m9 V( L5 e  }else{* l; P7 J) Q% a8 v
   return dwKind2 < p2.dwKind2;
  |  Y, w3 ?* ]( D  }
; n; [- K8 t! w+ f}+ Y+ \$ O. j) i8 @7 p
};) S5 C9 G# v! U; @
class CInventorySort
+ v/ A  `* ?) `! M/ x4 h4 O{& T. i! U) B9 Q0 ?. w
public:) r1 ^# R8 N: A' N  C0 X
CInventorySort()' o8 M' `1 Y" l3 A
{- B" N6 W1 {3 \- U" p0 o
  m_dwPos = 0;
& X6 c' s' R8 Q& w% M7 G}- P6 y/ E1 q' x! K* c* ?' q; |
~CInventorySort(){}
. h. G9 v) j2 ~private:6 b5 ^& y+ v, V# F: P% u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 h. ?4 Y  o( ?' J( V( z2 \
DWORD m_dwPos;5 @4 h# |% h' H& c3 S
public:& u6 U! S+ L- _  b9 G8 E( g
void Add(BYTE nIndex)
, T  c) }1 f# x{
$ z* c3 X- F2 ~- [( w: P  if (m_dwPos >= MAX_INVENTORY)
) o* _' m: \( u( W8 V  {
4 _1 Y8 F6 T8 ?; q% L' l   return;
# J7 Y, }& V6 I( C" @9 e  w  }0 U- X+ {% J) n) \+ {
  m_Item[m_dwPos].nIndex = nIndex;! S6 X" F7 w2 i8 Y( F: v1 R  @
  m_Item[m_dwPos].dwId = m_dwPos;$ ]+ `8 y7 k: H* b8 f, B# S% l
  m_dwPos++;! H4 t% n' V6 t3 C  P' z. g
}" [+ L! q# D$ G  t! D' ^# U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 R1 |8 M# b+ @. Y1 O{
! Y# O# ]3 ?/ Y& e  for (int i=0;i<MAX_INVENTORY;i++)' K5 C1 a  d" K$ A, D
  {
9 n& Z, m* q3 \0 N' Y   if (m_Item.dwId == dwId)( z+ v, c+ o* k8 k' y; }1 E
   {7 W6 N, G" P8 ?" ^. Q) w
    return m_Item.nIndex;3 E, H) }* t1 Z5 [: J. [$ Z: E
   }6 f0 P6 D. b5 Q! x3 }! L
  }
. v% z) P, `3 @& m* W  return 255;
4 V1 s5 J# F* c6 [1 a4 Q% J}
% p2 f2 ?- z( S' Y& O8 svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* V, ^6 Z- G$ e# g
{' x" ^$ p" Z+ b2 g6 Z
  BYTE nTmp = 0;
0 I9 Z5 w% {# X! h* |4 l  bool bDest = false,bSrc = false;+ {1 }- Q+ I, M# E$ c
  for (int i=0;i<MAX_INVENTORY;i++)
: k4 i9 U5 e$ r  {' C- ^  X) b2 Q5 n" J3 Z
   if (dwSrcId == m_Item.dwId)' @8 \1 c# c  v- d
   {3 i, W$ \/ P& R7 R: `
    //id相等 则 改变对应的dest和src
/ f5 O6 J; @( M* Q1 f    nTmp = m_Item.nIndex;/ T: c6 `- p% [: ]; u
    m_Item.nIndex = dest;+ a# u) d' U- m& O: b7 V* v8 q: `
   }
7 ~2 R: E# O7 {. A, X' }  }2 x! h# z! w, r  ?2 z/ F
  //临时数据保存完毕,交换开始
# X- T) b; @3 D: N  f+ t5 L  for (int i=0;i<MAX_INVENTORY;i++)
* b. j( W- \9 a. ]$ J: t6 u: T; Z  {, m5 A/ l  P3 o6 W* p! X
   if (dest == m_Item.nIndex)
, H: r, A$ L" `( F   {- g, {. a* Y: a' a3 t  g; l+ M
    //id相等 则 改变对应的dest和src+ ^* y( I2 c: w3 _1 y. o$ p! G
    m_Item.nIndex = nTmp;* E* c) E" j7 ?
   }) ^: Y1 w9 m' @8 C" a
  }' m# n# p1 O: u' C# b& F1 f4 N
}
! P/ v! v  D9 b; C' R* i};6 y7 K9 T% \7 Y! W) ~" e% B
-------------------------------------------------------------------------
. H" n+ ]! I* o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 [% s% v- N: @1 X) C3 D- d
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! o3 p& h* U* S. n; g! X
紧靠其上添加:/ _5 f/ J- v$ ^! f- l0 ?! E$ B) X
if( pWndBase == &m_wndMenu )5 w# \. J( q  s7 r. d
{1 Z  _6 O% a9 B1 f
  switch( nID )
; O- N4 ^; A3 x$ J) ^7 c  {
1 x  Q" x0 h- `/ V6 T. d+ p  case 2:
6 h' X  t  I4 T- q3 _3 {: P   {  O4 O  X7 N  t
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& ?# z. [' e* z; `# ~4 g' h    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) O" b# }9 Y, l% [: }
    {8 C) e0 C4 x- |
     break;: r: y5 r5 i8 Q+ A3 ?5 |* z
    }& o0 O1 s) }9 t% @0 Y
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* i4 |" |( N2 A( _( h/ Y# C4 f    {7 ]# G  w7 Y6 k: R& f
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 B( T. s/ Y9 L: A  `4 E     if( !pItemElem )1 D, l: e1 o4 m4 R) d7 b5 j. c
      continue;
/ U2 Y1 r$ ~3 k  t     if(pItemElem->GetExtra() > 0)
/ \5 L/ k, x8 K; o) Y      continue;$ q0 x2 C" V% ~7 Q! q- |9 w
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; {8 \' G9 @  t' E6 y
      continue;) y% a7 R% D3 o3 K
     if( g_pPlayer->IsUsing( pItemElem ) )
# |( J5 i. ?/ R# i$ M4 z      continue;4 N5 v" n$ H5 g. I" W# E
     if( pItemElem->IsUndestructable() == TRUE )# q8 q( o& W% T  V# j* j4 X
     {
5 m! B4 b+ Q" a" u      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, c$ J! P6 v' V+ f+ h3 ?      continue;/ N3 G, W7 P# k! c# q
     }, f* c5 E- u0 L8 _/ K0 `9 a
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 w3 B* r1 j- {" p/ Z1 t+ C6 S
    }
2 [% w7 G9 m0 f% X& u0 ?, x2 @    break;
  t; L8 n9 t; e7 l   }# D  k- r( u" [5 _
  case 1:8 t) g) D! E5 m7 D
   {
4 ~$ u; R2 X# J/ M; G* Z    //整理背包
! h8 L# \  D, u. m+ v. v1 c: V; `    //////////////////////////////////////////////////////////////////////////
& p! ]2 a  k3 g' V    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, |! r1 l. q" p. H1 L1 ?    //////////////////////////////////////////////////////////////////////////
$ O/ `* t! `8 z, O    //////////////////////////////////////////////////////////////////////////
9 g# j9 x, _0 b0 I) U6 ]0 T    CInventorySort* pInvSort = new CInventorySort;2 g# d& }) p+ Y0 y% ?
    vector <sItem> vItem;
& |5 n+ B4 d$ G4 V1 m+ {" a    vItem.resize(MAX_INVENTORY);//初始化大小
* I8 h) U+ n  X% o9 C+ S3 }5 h+ m     //////////////////////////////////////////////////////////////////////////
" [1 h8 a" }8 g$ Z     //填充数据2 u7 s2 [& Q* o4 X2 O# J
     for (int i=0;i<MAX_INVENTORY;i++)$ G; U$ d% B, c- o
     {
! ?. K: m* y6 z3 t! N1 j. W      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# }$ u2 f+ D( }9 \
      if (!pItemElem)
, E( Q2 K- l' V      {
, A- q/ u; J0 a6 x! l# L5 o! `       vItem.dwKind2 = 0xffffffff;
9 t' r* O7 T6 X6 `) o; o/ F- c9 R       vItem.dwItemId = 0xffffffff;
% ^0 T5 ~- t! U/ A8 g) K+ u$ [! ]       vItem.nIndex = i;9 I% P9 _$ G& i" c6 m% F
      }else {7 r) Y8 {$ t6 y8 p  G. B1 I/ O3 o
       ItemProp* pProp = pItemElem->GetProp();( b9 O( D+ b8 Z, g3 m  O2 P
       vItem.dwKind2 = pProp->dwItemKind2;
( @5 ?/ J( V. j! L7 y, J       vItem.dwItemId = pItemElem->m_dwItemId;1 T) L7 M& V) I, V; \% G& q: F: G' }
       vItem.nIndex = i;8 b" l% U9 C  m8 v0 I0 r
      }8 Y. ?  l+ K7 z# F) `
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% ]3 P* {2 z7 C( L% ^; K. x
     }
4 p+ W; o6 u/ q) y* T     //////////////////////////////////////////////////////////////////////////7 p1 S3 F6 Z; G. U$ d7 |* W
     sort(vItem.begin(),vItem.end());//排序
  B5 H6 b2 |. E& Z# A     //////////////////////////////////////////////////////////////////////////8 ?2 J0 u# |# [2 v
     //交换7 Q: V1 G9 U# l% u6 z' }
     for (size_t i=0;i<vItem.size();i++)
: [+ |, E5 O: p6 a6 v' Y     {
1 y) I4 [0 ~7 ?+ x      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) \* o6 u# w7 ]: k- T$ r, d. h      pInvSort->Add(vItem.nIndex);: r* H- R0 }, l6 g( d8 F
     }7 d4 a8 i' C9 v" H% W6 _
     BYTE nDestPos = 0;
  K7 m! Y/ F6 c( o" e% u0 T' F5 H# ^     for (int i=0;i<MAX_INVENTORY;i++)
6 T$ @1 y5 R( F8 f) }9 s! [     {* b8 C3 E; N# D" e
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);  y' T2 f/ i9 j3 ^6 k5 `+ N
      if (pItemElem)) |5 l+ `) _4 h
      {
* L2 M6 k8 [8 c. K( U+ ?       if (IsUsingItem(pItemElem))6 E" l! ^: R- r- G& g
       {
$ p% b9 u% b+ @  U        //这个位置无法放" h; T8 h* S! ~/ `
        nDestPos++;
/ r0 W$ |) R8 A% {( N3 t0 ]       }
; ?7 H! c' A; h  U" `4 ~% Z      }
, F5 |& t3 X% \$ y& d' G5 P      BYTE nSrc = pInvSort->GetItemSrc(i);" d( ?3 v! r$ u$ ~
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" _5 c, d4 g% d4 w: o! [) ]1 u, P8 L# w      if (pItemElem)% a! Z! \1 @+ V3 u: E/ b
      {$ E& v" Q: V- {5 z; M. q4 X
       if (IsUsingItem(pItemElem))5 w6 s* D+ J- s  r$ n8 G' p
       {& W2 k- h' A: N- I( X
        //这个道具无法移动,跳过
" S5 ~( B' R2 b. u, J0 O2 }        continue;
% q+ o* D3 C8 k1 S8 T& d       }; C3 I/ b8 |: {3 o: r( }
      }else{( G" i5 |, L7 b8 b4 R3 @+ E9 Z4 @; q
       //空位置 不用动
+ P7 V% H( b. a" l, m       continue;, v4 c5 f' V( [* M
      }
5 B7 Q$ p' y# N      //////////////////////////////////////////////////////////////////////////
2 p' R2 l3 L% p$ d* f      //开始移动
. K* R9 _. X! x+ _% S. w$ D, D' b      if (nSrc == nDestPos)& _, N3 [& m( x7 }0 c8 L
      {
5 b3 ?4 N8 [( }8 Z5 B       //原地不动
) ]3 O! p" H8 C& \1 |" {& y       nDestPos++;- `5 o+ z/ s. J. ^) a8 u
       continue;" i3 H5 n- m7 g& m% u8 A
      }" ^8 n  A) w' C4 {3 K. T: O
      pInvSort->MoveItem(i,nDestPos);. x1 W) E; F6 d$ C
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, e: ^! t5 W. ~, Y) |' C8 S* @      Sleep(5);% g5 |- Z; W* P8 B# ^6 D
      //Error("移动 - %d->%d",nSrc,nDestPos);  I/ `1 D. t! L" x
      nDestPos++;
9 |" R5 @4 Y5 p3 A/ S/ c     }& Z1 w7 }( k! l7 k# D8 w
     //取第一个元素的信息
7 G5 O: J4 b, h! v1 y+ e  R+ b     /*
+ j6 {) l, [% a+ H" k     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 }' X- R; U7 v
     {
) M! O, O" ?; |, Y0 j4 i5 A$ P      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ ~5 i. h9 c3 C- r. P4 s
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ h/ ]& k  F3 C
     }; V, D3 Y2 s8 J6 B- q
     */% `) R2 C. x+ S
    //////////////////////////////////////////////////////////////////////////
3 q2 u% [  E. {    break;; n& I' {9 j) }  `
   }
* V2 X. ?% Y. s# b9 Y  } " [0 C" N5 i: ]3 g5 Q# }& O4 f
}5 h3 o8 X/ `9 R" K; ?& ^
m_wndMenu.SetVisible(FALSE);
! }  E& B0 ]! S* R; x: n# T& B. J; l. G9 ]0 ]
--------------------------------------------------------------------------------------------------------
; @' J0 V8 N' N: Y6 C$ B: q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 P; U9 C* Y$ I7 X$ q" |% D
{
/ c3 `# T' a) l: T: qBaseMouseCursor();
5 c4 p% d4 K, k* b. o1 T}. I# l7 F+ C# w# v4 L
在其下添加:
6 ^$ N. \: J- g( X/ hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  i% f" j% {; P) W) M* ~* Z5 K6 F{
3 r3 V  C* r' O8 m" Um_wndMenu.DeleteAllMenu();$ {6 M/ B( A7 I  W" Y
m_wndMenu.CreateMenu(this);; i5 i0 [; \! y' w* H% x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, c9 t; K  b: a
4 ]2 y! i4 c/ fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( }2 `4 [! i1 G' }8 B0 r. f% n) L
{
9 L' o' Y+ p( C9 }' [  //P以上级别才可以删除所有道具
  |8 m' H- p+ [! |9 p- v  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# }% r' q, X/ ]( |% @+ i: [}9 d  [/ N" {8 V; T0 g- N! s, B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& H( V+ P$ T) T+ p& b& F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 k. j$ M+ ]0 i9 `) I7 A/ Mm_wndMenu.SetFocus();6 \% t) q7 X' }, a( k  }9 c
}
; c! r  U& k4 z& S' R5 ?4 w------------------------------------------------------------------------------------------------------------. W; M3 S8 L+ }, e2 w* x$ N
*************************
3 @6 w0 w; r  Q" dWndField.h文件
1 l6 H7 D) b5 ^& ^2 G6 z*************************1 F7 H! m+ s. D9 c+ N
搜索:BOOL m_bReport;
7 C$ H" @3 v0 L: N: ?+ x其后添加:* S( W4 s. n2 [* I1 [) ]
CWndMenu m_wndMenu;
5 T, ?. t7 w# g3 G/ o) P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# X4 s3 c, {5 x& a8 h, U! |
其后添加:# w4 ?3 }9 i3 I
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 B; s6 n9 A% G+ c3 c, I7 D, N0 w4 K+ V+ p# R6 D5 D
+ G' @" ~( v0 B6 f" [

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 04:24 , Processed in 0.069791 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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