飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1064
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件0 V; ~# i$ v( m2 m) R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 w$ }  S  l! m; B( V2 v* L" a) P7 P4 D5 Q
struct sItem
3 I3 N* P+ q- E{
$ S: e+ A! j# u. q8 G/ ^# r0 u, ~DWORD dwId;5 b( H! W; B* e% S1 O5 w' k
DWORD dwKind2;
6 u; Y0 w3 C1 t( @DWORD dwItemId;
7 }9 q4 ~  c" p6 l2 i  JBYTE nIndex;
* e  U# \! Q4 O; Y( XsItem(){+ \2 P  U$ w. S) B9 @- N1 x1 `
  dwId = dwKind2 = dwItemId = nIndex = 0;; F+ G% ^% G7 h* R! E
}9 X0 O2 T6 \3 R' g: o% y
bool operator < (const sItem p2)' I; b# W3 H  [' I6 u: \' Z  k2 a9 U
{( e7 K. ?) V& d
  if (dwKind2 == p2.dwKind2)
$ C" Q6 }1 S% X2 ]8 n# m  {1 ]7 D- ]2 a; W6 S7 x& A( V
   return dwItemId < p2.dwItemId;
" [# P; B# k  T( X3 g7 z  }else{
, V1 E! r, Q0 s7 Y0 A. I   return dwKind2 < p2.dwKind2;- h0 P( G6 ], N0 t0 k
  }
1 e$ z. \8 c! c, |9 c}% p8 y) o+ x  r
};
! W8 J( K" W; X: X- x9 k$ O. `class CInventorySort+ p3 M2 Y  t& E
{. }& E  m+ N7 h# A% ~4 Q
public:
0 \6 q! A, K% JCInventorySort()
# t5 b$ {. w9 j7 R& @6 J" s( e{
9 c5 @; D, n; ], l  m_dwPos = 0;5 i' i: }5 D1 g. {5 @1 D
}
' ], `0 I+ z8 e~CInventorySort(){}
* E1 H8 Y! u8 E' C. _, j& U1 Tprivate:9 f* p, r' v2 i$ e) ]0 \7 F4 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: [6 Q; x. x# g/ b* C8 h" A
DWORD m_dwPos;
- @) y7 N2 U; G0 R" C  Cpublic:1 S" c# L1 ?5 t- d# i
void Add(BYTE nIndex)' ?% R+ ^$ m+ I; d! V/ `
{
  y9 W: k# G( G" @; U7 w  if (m_dwPos >= MAX_INVENTORY)
# D9 E  s1 T# j3 q3 i- n5 m  {# K/ C* Y/ F$ O# @+ l
   return;" Z' j3 _, `: Y
  }. u6 ~! R. m8 y! H! ?- ~
  m_Item[m_dwPos].nIndex = nIndex;/ x  i( s+ w% h9 l$ {& b  L! X2 G, e
  m_Item[m_dwPos].dwId = m_dwPos;
' t/ w7 D9 j0 @* }; B/ V  m_dwPos++;
' b9 E/ m9 E2 Z' F: v) p9 k}5 W: R: Q9 e7 y2 b- X& g2 s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 U- l) @$ {& n# s1 w. o{
( w4 y& h  u0 s- {  for (int i=0;i<MAX_INVENTORY;i++)
. C# c6 I8 p  P+ H. o  {
' n* [' [1 k7 K8 [- @6 l   if (m_Item.dwId == dwId)9 I* ~. n( e  O6 Z
   {
4 d, w7 [: K7 L/ B6 N    return m_Item.nIndex;7 V8 y" ~, M% t6 C2 Q2 y
   }
/ @& k- L! w9 w1 p9 l5 h) C# U  }
2 [: f8 b) {6 t) k1 _  return 255;( J. Y5 B+ s$ S  `
}
% I7 c: B; w9 W! v* ]0 D4 ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 J2 J. ^2 ?# q4 U
{- ]9 V# H# x# o1 s5 _/ l! H2 p: t) P
  BYTE nTmp = 0;9 O& t  y3 }' p$ j
  bool bDest = false,bSrc = false;* }( y( M% Y# O  [! n. L0 X. @
  for (int i=0;i<MAX_INVENTORY;i++)
; C! ]0 F6 m; z  {. j/ X1 Q& Z1 l0 q8 r1 j0 K
   if (dwSrcId == m_Item.dwId)$ S. L" ]4 [% q& {8 r
   {
; J' b& h' U( @( L! V    //id相等 则 改变对应的dest和src
- M: ^$ m% @; N: u    nTmp = m_Item.nIndex;: @/ l$ {4 Z" ~1 F  Y
    m_Item.nIndex = dest;
: v; J" n/ \3 j9 Y+ u   }. q4 j5 q5 y) T3 w
  }+ K0 H5 R- ]9 W; K+ O; B
  //临时数据保存完毕,交换开始
5 O9 A$ \/ T9 k( m/ s, c' c  for (int i=0;i<MAX_INVENTORY;i++)) D: H5 b5 u' ?. C2 A3 T
  {
0 P; w2 b5 M' {% A3 t; {5 L   if (dest == m_Item.nIndex); N& u. m9 t8 S+ v, i" z: M
   {
7 B! V0 O( B$ Y9 ?$ f# X) L) X    //id相等 则 改变对应的dest和src: S8 ^4 O7 c0 |2 r, p' |
    m_Item.nIndex = nTmp;
0 Y$ H$ d, Z4 Z8 `+ J1 o* g   }
0 w+ R* [* n9 b6 Y) p# y( b" L  }
: \, x; V7 ^3 u1 D}) m! S, ^1 n2 B& m# n3 q- k7 @  f
};
6 E3 A' z6 w2 \" t3 m-------------------------------------------------------------------------
+ A. w: _, [1 ~, c/ f5 S! b0 c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" o8 x7 D9 v; l: X; N/ R2 C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);  c: f6 x5 ~. Q" a
紧靠其上添加:
* h3 ^# |8 J  w# D/ @* Uif( pWndBase == &m_wndMenu )
5 O5 E5 f& I0 D' g/ W{
( V4 m, @/ {+ A4 Q  switch( nID )
4 b2 d! V/ c0 p- u" Z; r2 E  {
0 c7 v6 H, c  t- H- f; o  case 2:
4 v7 s6 h& a& ^# `8 S# n   {' z7 |% y% y# J
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* x0 h, u! O9 Y, @0 j/ H5 z/ M    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ], a9 G( k; E+ U( }; F
    {
) ]- D- ~% d( n4 R2 j5 U     break;# P/ A% c. F& A
    }5 c% Y- x- Y4 n3 d* E) ~3 Q
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& `! U! \& C; \0 D& e: `5 B; p    {% P1 N+ N/ f# c2 j4 H3 S; A
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; h+ N' L$ V" s. A8 M7 l( |     if( !pItemElem )& Z0 _# d+ G; O4 T" w
      continue;
1 l1 I( }6 ~5 T0 X7 b     if(pItemElem->GetExtra() > 0)- K0 S8 Q& o! x( H" T
      continue;
& M* ~6 B/ `7 c- X5 D5 s     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  y! g/ F/ r, J5 j- |' c      continue;- f4 Z/ k6 O. [, `
     if( g_pPlayer->IsUsing( pItemElem ) )% }; v5 q/ [& \$ j4 r1 i1 ]: r2 ~3 ^
      continue;
0 S$ Z! a' M% y     if( pItemElem->IsUndestructable() == TRUE ), T. l5 I4 `2 C
     {5 E: Z7 R/ x. K2 t
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ S& d6 q8 q5 M. D5 `; A* P      continue;1 V- q! C" Z1 h" U: w, q
     }! y  R+ ~6 T4 J, m2 g
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! g0 h. w1 [2 B7 B: |9 g, F    }
6 F8 M% l2 l" _0 I. m  C. F5 g    break;$ L6 C; Z! M% M% }
   }
$ _+ {7 Q+ M5 x0 p; z" T  case 1:  D4 x. i- A) G; o9 G7 w9 {
   {
  M) t3 w8 z' g, U$ D9 F' v    //整理背包$ T4 Q3 P2 h3 i1 ^. {/ g
    //////////////////////////////////////////////////////////////////////////
5 q, J. j! ]2 d) i! g7 q    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 W7 r, y5 N5 M/ r8 \  u* j& x    //////////////////////////////////////////////////////////////////////////
4 A: e' C4 z' W9 u9 p  |    //////////////////////////////////////////////////////////////////////////
% b: H+ L  W4 Y. _    CInventorySort* pInvSort = new CInventorySort;
- \, ]( r2 Q+ ]- F2 X6 _7 \    vector <sItem> vItem;
. b/ X, e- b  _4 }/ E    vItem.resize(MAX_INVENTORY);//初始化大小7 d) `" ]5 a4 O1 _
     //////////////////////////////////////////////////////////////////////////  g: O8 Z- K- h6 A# ~. ^* _
     //填充数据
+ R9 e0 O9 J* e; K- U  m! s* K     for (int i=0;i<MAX_INVENTORY;i++)
+ b( {; D, `' M0 \5 r/ @& ]     {( b# |/ q" m) D; g/ r' |
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 \* U3 H" o, f: X" U' t
      if (!pItemElem)
8 v. T/ z7 X; K0 n3 i$ r" A      {
: I& l6 K' R9 ^) r- R% F/ O       vItem.dwKind2 = 0xffffffff;
. J% p2 k$ i1 ?1 E       vItem.dwItemId = 0xffffffff;
  \6 S1 |8 Y7 H% p$ I       vItem.nIndex = i;# o7 H7 B# U5 T( W3 {5 z
      }else {
* A% i6 N0 S. h/ M       ItemProp* pProp = pItemElem->GetProp();4 c: g  u. z; a) a/ ?# m/ y4 A
       vItem.dwKind2 = pProp->dwItemKind2;
. v. A* ~6 w" x2 C& W/ A       vItem.dwItemId = pItemElem->m_dwItemId;9 W" u0 r3 K- H
       vItem.nIndex = i;" b- R8 [3 w) x6 R) _
      }
8 s' q2 u# Z% p, C9 I& g% N      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( m& m8 i2 E, r# x$ ?! ]& s- N     }
( j% o& D- j9 i  B2 w. `1 z     //////////////////////////////////////////////////////////////////////////0 w% j2 r7 |$ N& F- [. b
     sort(vItem.begin(),vItem.end());//排序
: {* S' a% V; c. J; |3 O) }     //////////////////////////////////////////////////////////////////////////
0 o1 x/ \  C* N     //交换
$ Y0 G0 b: K/ v4 V- h  P+ |     for (size_t i=0;i<vItem.size();i++)5 C4 J- \& \4 J$ E1 ?
     {
4 T' ?4 {0 u) D- v' o- h+ X      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( F  K8 c& I/ D      pInvSort->Add(vItem.nIndex);
% Y5 x$ `5 M0 m  _9 N     }
  D2 j  K2 J4 {  Q% z3 `     BYTE nDestPos = 0;
! {4 z  F. g4 q5 l. U     for (int i=0;i<MAX_INVENTORY;i++)
8 f: M8 {" K: R1 X+ K/ h     {4 L( V- Q+ u7 f( \+ Q! ^
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' h- k' ?$ k0 B/ v  C2 d% v4 i
      if (pItemElem)3 `2 b8 Z: b% n" x* F6 Q; E2 v
      {
- I. n6 X- }& c7 s8 ^' t4 O" d       if (IsUsingItem(pItemElem))
' h* k. _2 n- Y: X  t6 V: E# m       {
6 \* v/ S, r9 ^        //这个位置无法放" f6 R! N$ }! \- f0 T
        nDestPos++;
4 k* X8 L% _( S0 O* M( `0 x       }/ q4 f! y6 m$ W, y4 S9 M+ r( b8 h
      }
$ y# m) N0 k5 h' H8 A      BYTE nSrc = pInvSort->GetItemSrc(i);  q; u8 u5 @( S7 W4 c! P9 t! ^8 s
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" e5 t( y% ~8 ]! l* l: ]# g
      if (pItemElem), {( E9 {# r0 b) {# M# I
      {
0 z2 O$ R2 w1 t9 R       if (IsUsingItem(pItemElem))" q0 O4 n; R/ S/ d. {6 q, N' ~
       {7 Z4 P$ L! A: S; R8 g7 N! T
        //这个道具无法移动,跳过
' b/ B1 A8 g4 M, n2 t+ ]! \        continue;
) _& O# K$ q7 p3 Y, I       }
" Q5 y# Q  _8 ~$ {, @; r      }else{6 r& r& [4 E3 v, z1 b+ N
       //空位置 不用动
- I' N# L1 R0 x1 Z2 B       continue;
6 z8 N% @- o1 b      }
5 h9 x2 @$ s- c/ H      //////////////////////////////////////////////////////////////////////////$ Q0 F- c2 P* q7 Z- `" R8 j* `; h
      //开始移动
8 g: b% _- X3 O3 p      if (nSrc == nDestPos): u$ B5 n$ d' u- F8 ~8 Z& f
      {: I5 H  @$ x: i0 o+ N6 m+ K
       //原地不动
$ H$ ?' J( ?2 r3 w0 B1 D, h       nDestPos++;  C' s- |- `7 P  y
       continue;
( k' t$ G3 y, ^      }) ^! }8 _0 }; d; ^9 W, G8 P
      pInvSort->MoveItem(i,nDestPos);4 C/ v! X, q) `
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 ~) J5 N- @2 _/ K& X+ s6 |
      Sleep(5);
% C7 m( v* h9 C  B5 U      //Error("移动 - %d->%d",nSrc,nDestPos);
1 t& U5 B: d3 [& |9 @& E, A& c      nDestPos++;
/ i: I2 {$ f) l0 U% d1 U     }
1 v5 m4 r- E7 f. `$ Y( H3 O4 ^8 ~     //取第一个元素的信息( @" Q* N# ?+ u+ x1 p: I
     /*
# K& T3 R6 C# x. k" _% }2 T     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  }6 N8 j/ `* X. V
     {
! a5 S  t. B) e% [      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( s7 b) n7 T& ^: j3 H! \) O/ L
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 O2 Q3 G! P5 R: D& o9 C3 m2 u
     }1 {" D5 l6 c1 ]" H+ v" j& \" o! z
     */" {( F7 h  G8 Z( T( \5 s
    //////////////////////////////////////////////////////////////////////////
" {; J% G8 H5 x9 k" F" w, l    break;
6 L' {# x+ O) q9 y4 W   }
8 }4 k8 R- R) L9 @' ?8 g9 h  }
) ~  K/ h, e, o' t8 D) r( o}; f/ \' x2 t& Q# W3 d7 e. j; b
m_wndMenu.SetVisible(FALSE);
& N; X" c# J  ]0 k7 z* `% T* _3 v+ N7 @3 V
--------------------------------------------------------------------------------------------------------
: _1 H5 i/ K* T4 K+ X1 ~6 P+ O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 u. Z: m' I' T. ?# q% }1 H( t{
2 {8 {8 K/ g  C# u  BBaseMouseCursor();
+ Q  M" c* S! n; c( Z. I7 \  ]}0 s0 w& e3 t" [; l
在其下添加:5 T1 w, d* Q  ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 y9 y5 W0 s+ t2 E* ^3 t' V) E{
1 B1 n. Y( f  \m_wndMenu.DeleteAllMenu();/ r: Q& w8 f8 y* A7 P! ~
m_wndMenu.CreateMenu(this);4 n9 ~# `% {+ Q8 P! [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" r6 [" l- _8 e% E5 K
2 L4 g/ r/ e1 c+ M8 W. o! q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 j- J8 f7 a0 W+ c) ~( F8 _
{
6 b  O8 y0 s. \  [  //P以上级别才可以删除所有道具2 j0 _7 L8 Y% R1 q
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. U, Q2 |  F1 \1 |$ M+ e}
, A1 b6 X& c# |1 L1 vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 Q) O# {  z( _" |- Z+ em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( _! _5 ]) z' l, ?* w; u& V1 ^% P" wm_wndMenu.SetFocus();+ N9 q; e( K& q, ]; g) C
}2 [5 v" q7 ~3 H" y% ^' `  U
------------------------------------------------------------------------------------------------------------
8 S& C) J+ i' B8 Q: P4 C' p*************************
; ?4 Y' ]; S8 R$ n0 T! n+ \$ T- I+ VWndField.h文件/ a+ L, v  c" _$ T! Q, v
*************************
8 M! x' z7 H  `7 R4 q搜索:BOOL m_bReport;
% N; c* P% C8 I# r* y; t7 [3 p0 i- O其后添加:
7 @4 @: [% l* jCWndMenu m_wndMenu;8 O! x5 x$ a+ A6 C1 _/ c* I
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 y2 E& t$ s8 Z# r, N  z其后添加:. Z7 c  N  m7 x( M8 D' I( I( }
virtual void OnRButtonUp(UINT nFlags, CPoint point);" w8 }) R4 c4 Z# V; c- I. `

. b; h3 D4 l! R. x- b1 P7 N6 T, W( G
( U% W" L: i* t4 [

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 03:16 , Processed in 0.064780 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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