飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
, V- \7 K: b) s) L7 s2 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- o2 e$ Q& E! P/ O! q  c7 q8 g
9 D' Q: {' g  m$ p  x: S. Q2 Q$ D
struct sItem
; m; E$ O' E( M# F+ V, S, W* ~{
1 ^$ @0 G+ h2 Y5 z5 c% pDWORD dwId;
- }: G& k/ w) ~+ ?# g- a) [' EDWORD dwKind2;7 Y. E8 n& X; ?# y, i' O/ X
DWORD dwItemId;0 g( A9 X3 t9 s% d
BYTE nIndex;1 A- p9 g: k% V: o; \( `
sItem(){
% d: W$ g: h9 L& @$ G  dwId = dwKind2 = dwItemId = nIndex = 0;# S$ c! R2 N! E; }5 _
}
9 n8 Q$ g# W! ^; `1 U% Wbool operator < (const sItem p2)
6 E! S8 S, E6 u: ?{
% H" t; _7 M4 ]. o3 |  S  if (dwKind2 == p2.dwKind2)
9 C; c  W2 h* J1 M  {; C7 m9 I: V1 j3 |' J5 ^0 s0 f
   return dwItemId < p2.dwItemId;4 b7 @& |( S" D$ t
  }else{
( u, R, [4 j0 w/ {* C# Y+ g! C   return dwKind2 < p2.dwKind2;
( X: Y- s  |* G; T- A  }
7 h! A) u1 T9 B; y* n) O}+ ^# B, y9 @2 |. l
};
4 ^( {2 w4 @3 |! e6 Z' G; y( p1 Kclass CInventorySort' o3 g4 k# f& d/ c# f
{/ a7 n1 V7 q3 E- D# T
public:5 r- ?; x1 \9 t: V/ F) y! q
CInventorySort(), r/ P5 D0 T* b4 E( @
{
( O, q% ?  x1 h( }/ V  m_dwPos = 0;
6 N4 J! G3 W" e' k3 x}+ \! w% b) V* I; W9 a$ m0 r& F
~CInventorySort(){}" X6 d% Z0 |+ a% ^- q
private:
+ `: N& O% P" e0 y( u& W! QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 ~. x& b2 Y( G
DWORD m_dwPos;, ^1 W: [7 a3 H8 q* y$ `. W
public:4 a; \; P& E$ K0 h4 i; N) k
void Add(BYTE nIndex)7 a% {1 o3 |0 h+ l
{% G& n* ]" A3 @- P
  if (m_dwPos >= MAX_INVENTORY)6 C0 x; r1 B  L  ?
  {
! P/ v8 g% ?8 d; i1 e/ z   return;" w- x5 n/ G& g
  }& ^' u7 X( h. _; }% |* x! b
  m_Item[m_dwPos].nIndex = nIndex;
4 d. A3 a7 M$ n9 I" v4 E1 z% a  m_Item[m_dwPos].dwId = m_dwPos;
  o; H8 F8 A4 u7 ]5 F0 l  m_dwPos++;; p3 O- e1 k; d& U) ~
}( B* B$ ]" \2 A* }5 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 P! d' Q7 c/ k' k4 l$ W{: o/ C1 ^" f* [8 Q
  for (int i=0;i<MAX_INVENTORY;i++)% ^0 k1 _+ _* A  o
  {! B. o8 c" `; w* s. y
   if (m_Item.dwId == dwId)
& T/ j5 M5 Q( P: A* e6 S  u) Z* ^   {: H3 d4 E# N1 N; e/ v  u3 O3 _
    return m_Item.nIndex;  k' x' ^! P( V* k  E8 J8 `% {$ m, J
   }
& ~$ {- J1 Z7 D4 d  }+ C: _- q# l+ S: m3 n1 `+ G
  return 255;
) {- @, B4 c. q  Y8 |; A7 }# d}; `2 u& S. B. e) @  i7 B) x- O! N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 G" y7 e: N* W, L{- h. X- V) S- t9 Q! L! @
  BYTE nTmp = 0;
9 A# e, E* D8 f  bool bDest = false,bSrc = false;
$ s9 F5 [/ a3 W# w8 ^4 H  for (int i=0;i<MAX_INVENTORY;i++)- ]) N' C( C) F7 x
  {
) z( O4 w+ [9 R. v) x0 U9 c9 q. A   if (dwSrcId == m_Item.dwId)9 V) _0 W0 @" H' Z# C& I! l
   {& }( E. W: y* f; k: _" u1 I& {* W
    //id相等 则 改变对应的dest和src
/ C' J) Z6 `, ]( C* u8 N7 w    nTmp = m_Item.nIndex;! _5 m, j+ w- L! t- W
    m_Item.nIndex = dest;) e7 |* C+ O( T/ n7 w6 P
   }
+ I/ {% b: m+ ~  }/ b3 h& m! b0 H4 q+ Q) Z
  //临时数据保存完毕,交换开始
1 l3 G1 ^0 [8 \/ p% W  for (int i=0;i<MAX_INVENTORY;i++)7 B) T7 c9 r# e- f/ h" `  y+ A4 o/ F
  {
! c: t8 }0 r' ~1 w: |4 W" {5 Y   if (dest == m_Item.nIndex)
3 j9 r) a: N) A& i   {
% K; r# d9 U/ N    //id相等 则 改变对应的dest和src
' E  x1 I8 l- _    m_Item.nIndex = nTmp;
: ?! Y) A9 S" M, [   }
9 s- V4 b; m) @( P  }5 P& Q2 O* T6 j) {0 X4 ~/ P
}7 L! @! Z4 A! ^1 l+ y6 a
};
: _3 ?' x. C+ |8 w* P5 i, R4 a  B-------------------------------------------------------------------------/ ?; T5 D! g- r* v. \
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) Z9 o3 E" p" E7 b+ |0 \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 b) `  O( \, d& N2 [8 a/ L紧靠其上添加:2 V) k1 W9 r# ?; Q$ ~; A: D- Y
if( pWndBase == &m_wndMenu )) }& G  e0 ?' V/ P7 B
{( Y% c) O) n' P. n4 c. h
  switch( nID )
7 m+ J# i+ d3 K/ V% {  k# H9 C1 o  {
; T1 W' M$ u# T. i& U2 B  case 2:% A$ Z) r- B4 K, w- m
   {' Y, y# [1 f+ L/ |, M# |; r
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 c7 _7 W9 ]* H4 I6 w2 g    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! o" @& U. M7 l7 `7 v
    {2 i) ^3 l: }8 w/ ^. u
     break;
# |+ K, u$ ]- [2 R7 @    }$ f  ~/ |7 c: q; ~. j" i
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: F. [$ M: }$ q    {* s: h  T1 L' \" `  L* @, C
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 r$ q1 m: L% A  Z5 }1 `! d     if( !pItemElem )0 ]3 ?: k0 q0 d& m$ a  w; b
      continue;' c6 ^9 O# ]$ R
     if(pItemElem->GetExtra() > 0)7 ?* I$ Q4 m, u$ E6 s# ?6 P
      continue;" U# ]9 k. q4 v
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 C9 T" D  ?  F$ [      continue;% }5 _/ U/ ~3 S
     if( g_pPlayer->IsUsing( pItemElem ) )
' T6 t& ]( y+ f3 i  T" }      continue;! s# B1 ~) {+ q/ G6 K7 U
     if( pItemElem->IsUndestructable() == TRUE )
6 V4 ~$ Z2 z2 s( d" g$ a     {
' M& p4 O% s' a- p4 @      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% a! T9 T4 W7 t) q
      continue;
' G- }3 F/ w3 e2 |0 b# ]     }" m; s: m: h/ a9 E0 y5 |/ r$ f
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' L3 ^  n$ s5 H6 W' `
    }* I* M/ ?: P0 N- e2 |
    break;
: b6 W1 t3 H# u9 i   }
: s* i( Q. `6 h  case 1:: f: n" ~* M* C; `$ n( O+ ?9 o+ [4 \
   {" L' Z0 E( b8 c# ~, F! B! B$ w
    //整理背包
2 p! H, G+ ^- B    //////////////////////////////////////////////////////////////////////////0 f) `7 G) v, u
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" }9 x( F: Q  s& l9 M: H    //////////////////////////////////////////////////////////////////////////
3 d: v& ]  D  Q0 }: L2 h    //////////////////////////////////////////////////////////////////////////5 z0 Q8 J7 q, y) d* D
    CInventorySort* pInvSort = new CInventorySort;- q  f! l) N7 Q7 L. E0 L# b
    vector <sItem> vItem;
6 y" l5 O! c5 W# Y    vItem.resize(MAX_INVENTORY);//初始化大小$ ~# _, [8 e  i) M* C% l4 Z
     //////////////////////////////////////////////////////////////////////////
( e  `' Z, o7 H! R& O2 v$ b4 G( |     //填充数据
, l$ d# k$ N& Y7 ]( @     for (int i=0;i<MAX_INVENTORY;i++): a& h- J" b$ D" y# r( x
     {
& n" i: K0 B$ N      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: F* _  M0 ?; \- Q. s4 `
      if (!pItemElem). k; l8 i$ ?# `- j% J9 a
      {2 Q1 d5 k* E' I/ Q: F# x6 s
       vItem.dwKind2 = 0xffffffff;. M+ V) p+ q: d! ]3 F
       vItem.dwItemId = 0xffffffff;
3 Q+ X1 F0 B& q: Q" d  _- _% V       vItem.nIndex = i;
% q) n3 z& D. L1 S% S8 B      }else {
$ [# u2 H1 Z. `/ a! I. l8 E       ItemProp* pProp = pItemElem->GetProp();. O/ P. Q) r1 d. @/ ~% o; x1 h
       vItem.dwKind2 = pProp->dwItemKind2;! ^. Z1 {1 y; ]0 a5 F. G1 E
       vItem.dwItemId = pItemElem->m_dwItemId;$ g$ E% a5 ^; e5 T2 r
       vItem.nIndex = i;5 ^' u, i8 h' O  v: u3 O2 B- S) i6 b
      }. v  J7 s0 K$ r3 D- c
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ j+ P1 R+ p1 P5 @     }+ I* u! J, [6 [8 R
     //////////////////////////////////////////////////////////////////////////
5 S- ?9 l+ c$ E) g) y" ?' H) [     sort(vItem.begin(),vItem.end());//排序! ]4 x7 S* s' W' P3 `
     //////////////////////////////////////////////////////////////////////////
- W' K" H: T/ j4 J3 E  H, X     //交换' b& O; {9 c3 V. `
     for (size_t i=0;i<vItem.size();i++), O" r1 l2 c8 v4 h5 K
     {
$ _+ a! Q$ J* r$ T2 P8 F2 p# \      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ C- M+ Z1 a$ F- A      pInvSort->Add(vItem.nIndex);
- m5 |* c- g, i  {' l4 ?     }
2 x6 d; {1 y5 f! {; W' c* |8 H     BYTE nDestPos = 0;: F7 m; `% r$ ?3 H
     for (int i=0;i<MAX_INVENTORY;i++)
; `5 q3 x. x' q     {
8 E! c2 ^; X; |3 D      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 r( @, c* D7 Q! ]- T7 v9 p3 D# M9 b      if (pItemElem)* r$ Y3 E- V3 U9 P5 E% F
      {
1 b$ X7 [3 R! J1 C7 p4 U% Z       if (IsUsingItem(pItemElem))' _; X# m6 S  A& a( m- c
       {
, U- a" x1 K# W( Q# @- B        //这个位置无法放2 K4 o. _. h% `
        nDestPos++;9 p4 v' b% L6 j5 e1 ]* i- m/ p
       }
( m- Z$ s6 s$ R- _/ Z! d      }
4 U- h# w: [* n$ K      BYTE nSrc = pInvSort->GetItemSrc(i);
$ @1 n5 H' Q' F2 n* ?0 l& T      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. ]) a  D$ j: y4 ~' N" v! `      if (pItemElem)
9 e, a1 m# B; y$ A* d      {+ Z9 o$ s5 J, y% q- f
       if (IsUsingItem(pItemElem))
9 G( J9 L" N: T7 c% F$ k: I       {
* g' n; Z( O/ D8 h; w        //这个道具无法移动,跳过6 ?: K9 `8 H6 ^3 K/ t! M7 ^
        continue;0 d, `0 ~3 o$ V' C, ?% q
       }
+ j1 m; }2 m- E9 r0 V      }else{
, {% h& k1 S/ A2 g+ G  Z% M       //空位置 不用动
1 v1 G* u; j# ]; R       continue;3 i: C6 V4 N4 S  `" T1 e+ _7 H( k
      }  W& V  S6 V5 d2 X# d
      //////////////////////////////////////////////////////////////////////////* ?2 o+ @$ V$ Y$ w  E; A. E; A
      //开始移动. g) R) ]1 Y" @$ F8 \6 r
      if (nSrc == nDestPos), n" B! q3 Q2 ]9 u
      {! N; c6 M  w# D& |9 m) Y
       //原地不动5 }2 n6 P% f( A6 e2 I3 ?4 s$ D% g
       nDestPos++;' L  [+ R5 Y$ L8 g* M
       continue;
) B8 l8 w1 a: c5 n* _8 j* g9 B      }
: H) t' a7 H* Z" t      pInvSort->MoveItem(i,nDestPos);3 ~7 j; U. k4 [* F0 W5 c; B% a
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ ]$ H2 m! y6 t5 T  }% |4 _      Sleep(5);
/ t. D+ n; ~9 b4 o% |. f      //Error("移动 - %d->%d",nSrc,nDestPos);9 u0 l$ L* m& V8 E/ Y% G
      nDestPos++;
$ m- \& w, c" q( k: V( ~     }
! c; ^8 W. e/ h' V6 `     //取第一个元素的信息
: }# L0 X# ]7 E$ E     /*
: W; V0 r# S9 I4 E- V     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), w1 X8 b) {. V2 i* I
     {; P8 S8 I1 }( j
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; A8 Z5 ]4 M; Z' Q6 a
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);  E$ L1 `4 [/ n$ P: W
     }# t+ o; s* |0 z# l
     */
9 V. B3 i$ ~+ u& j! C    //////////////////////////////////////////////////////////////////////////
: d! I, l- z" E6 g% q! ^2 z1 a. ]3 a    break;
- n! ~, Q9 E  E1 D3 [& J   }) Q# t% M; v4 ~3 }! L3 [0 k
  } - d' y# Q: r( _  x& _3 x1 h% J2 U  a1 M
}9 y4 z* [6 G& y2 L& m% f# |( F% m
m_wndMenu.SetVisible(FALSE);
& @: l+ H; i2 L$ i( w9 ^+ K( L1 ~- T' A. ?5 O
--------------------------------------------------------------------------------------------------------
, y) A# N5 ]; j+ ^3 T$ X; a) X4 x& k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 d8 G7 G2 W# N7 n9 S
{9 _. R. \: L" H1 `( q* Y) W. D
BaseMouseCursor();, {3 y- [, c: m# d
}
$ S, Y- P; |$ g! {; h在其下添加:
2 ^  K, [% I6 h  Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 _  @6 m$ ~) |8 n  X* s4 n+ m$ g{
& q2 r* ?! F' jm_wndMenu.DeleteAllMenu();
. b# q% g& U0 G7 k- `& xm_wndMenu.CreateMenu(this);( r6 J+ a9 A) W" J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ E' z* w+ J' [* K: @2 m4 s) t0 M
6 E; ]  V' I' g9 fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! w$ R- Q6 D0 C; f4 Q* @1 K{
0 C& V: u2 H3 I- C' J6 i' z2 e7 h  //P以上级别才可以删除所有道具4 k  X- D* ]" Q4 \
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- Y  U9 K1 C4 W$ X+ {; p}3 w  m# T& V4 ~& m# b' N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 m0 c' U3 g, h' \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 V) W; B( w- o7 y; _) q- vm_wndMenu.SetFocus();3 @& d8 Q& ~" X6 p5 L, l  h- {3 t
}* m) A( [! {8 e2 Q5 n" P6 Q% g; N2 \
------------------------------------------------------------------------------------------------------------( P1 i2 j: d4 ~: y% [; b7 R
*************************3 @$ y; Y1 v) ?9 P
WndField.h文件1 {( p9 t' U6 b
*************************
* |4 k) r* f, C3 b- X6 p& ~搜索:BOOL m_bReport;/ P& i1 J" O8 V7 v% E' c# g, `/ G! l
其后添加:6 d5 t" J! M( b6 B7 u
CWndMenu m_wndMenu;% p8 k/ s0 H) h9 _2 }; t  v& m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 x0 a4 O, V6 F1 n) y$ O( I9 o
其后添加:2 x/ n# b4 _: m- f
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 _8 x, s. z( f+ @$ |
! O  g; N& ]  B4 E) Z% T( }! |

* X6 |6 t* r8 l. W; Z" i. A

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 08:56 , Processed in 0.068192 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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