飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
# |- ^: O4 _/ I3 n: b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! T& J4 b; a( ]3 w* B9 S5 V7 Q( S# K
( m6 I0 K5 f( K) {* dstruct sItem7 D! r, `$ t0 K3 P
{& m3 T3 `0 O+ J7 Z
DWORD dwId;
( U) h; ?# p$ ?7 S+ |& d. \! i6 kDWORD dwKind2;4 m& P# X" w6 e0 p# u' z+ ~
DWORD dwItemId;* Z. g' `0 T9 a
BYTE nIndex;; b; l- {$ ~/ S8 A
sItem(){) m0 ~6 b; r: g2 ~  A" q& {, j
  dwId = dwKind2 = dwItemId = nIndex = 0;
+ k; o& y" G9 t( [" w}" m' K) j" r* c9 V: d
bool operator < (const sItem p2)
2 f, E, K# \& C# f{
4 ^* V, E% C: _  if (dwKind2 == p2.dwKind2)
% m* c0 |/ @& [% s0 p8 g% K/ o  {6 N* H7 i/ _4 Q
   return dwItemId < p2.dwItemId;7 L6 @( _4 d2 `$ c! D
  }else{
& |1 m5 V& \+ E1 r   return dwKind2 < p2.dwKind2;
$ {8 O/ t4 _, x. }  }
$ }. b3 |/ p. H+ o. h}
9 F3 v- c& i9 d};
- M; D3 K1 h. M. G2 uclass CInventorySort; _  J; s5 F" l8 E0 ~
{
4 e7 h4 l9 G- K) E. b2 H, _public:
* z4 N8 z) H( M! x7 kCInventorySort()
, J$ f- c4 E& @$ q{
5 n; ^5 |' W! c  m_dwPos = 0;6 u# N8 L$ g3 I( R7 h
}
; B: ^6 q: N! c2 {" L' r' {: I~CInventorySort(){}) {6 d: K: z% g( v0 e. N, h9 J
private:
+ Y8 a5 c& N1 bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  N+ `  `5 t: d( @1 P8 A4 I  qDWORD m_dwPos;. S# x/ Q& H# [  f" S0 F! {- o
public:
! B" R! z: k7 |" i2 D% @; `void Add(BYTE nIndex)8 `. |! M( y, D0 h
{
5 c- Z: G/ D8 G3 o, b/ C  if (m_dwPos >= MAX_INVENTORY)
/ `) b. Y1 Z' B* A, j$ w' k- p  {
+ U/ F$ c: }) B: ?4 `# G' f# b   return;
7 U3 v7 F0 W$ G- h4 V; U$ H) U# y  }
  A: }8 Y# k' n- {3 W3 f6 k  m_Item[m_dwPos].nIndex = nIndex;" K9 o: ~7 V7 G2 @* _) T
  m_Item[m_dwPos].dwId = m_dwPos;6 @- L- |& W7 ]5 |) E9 `2 w
  m_dwPos++;
- E- Q! r2 V# x  I" f9 k}' D: C2 Y, T! \6 a  ~4 H' X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) e9 X$ n; q1 ]3 B+ O{6 s, `( }$ D; S
  for (int i=0;i<MAX_INVENTORY;i++)- P6 O) A. m8 O; I: D
  {" F( x7 Y5 U/ z4 R8 N
   if (m_Item.dwId == dwId)
9 I: Y0 L$ m' y3 J2 L! m   {
  u: N1 R; t7 R: l3 I% v: I- B    return m_Item.nIndex;
& S- L$ m  }: ~8 ?, a% e  ^1 n   }* T+ m: `0 R% ~1 O0 \2 T& m
  }
2 g4 K" g6 Q% }! Z3 \  return 255;4 a3 D( s1 q1 ?& a6 M% j
}6 R" u; x: a; G& ~, X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ T8 r# R- {3 ^9 V" f  v
{  Z! C# I$ M" U; v" X% K% S% p, S) F
  BYTE nTmp = 0;/ t5 @5 r5 d% p$ v8 l$ h% _8 p
  bool bDest = false,bSrc = false;3 B" Y- U* e! P& ^& I* o; S! K
  for (int i=0;i<MAX_INVENTORY;i++)* B* S0 [: N( X+ M$ n, m, T1 x
  {2 L6 z8 ~3 P8 ?# i
   if (dwSrcId == m_Item.dwId)
: N: ~5 B7 A$ j   {1 R& ~3 F$ X8 J1 M! F
    //id相等 则 改变对应的dest和src& K3 v& P, {% h# I
    nTmp = m_Item.nIndex;
' A! l, v# ?* {! D8 W7 T/ a    m_Item.nIndex = dest;
% H5 s1 j9 _& k. N8 W( d0 s   }! q1 B; c6 I7 {5 ?# a  b$ _% g4 W
  }
7 |9 K0 `$ u! I6 S0 t  //临时数据保存完毕,交换开始. \; u* U# E7 B! \2 E" Q1 d1 i
  for (int i=0;i<MAX_INVENTORY;i++)# s, G! n9 [: t* D$ R) T. P: [
  {
( i6 f2 S% `6 t1 h   if (dest == m_Item.nIndex)
9 u! Z  X; f; f; H  h& i   {) z9 I7 G4 z$ K2 h8 j8 C) ^
    //id相等 则 改变对应的dest和src% R0 ?$ z1 Z- @8 h
    m_Item.nIndex = nTmp;
' S" _& b: ~4 I7 b; R+ d* @7 N   }
: k% _0 e+ _, N- N  }
3 h, f3 P* p( {6 O( h; ]+ \* V}% N8 v+ }. F1 N/ I6 q
};
# N% B( \5 B2 s: X+ G5 b9 A5 o5 t! _-------------------------------------------------------------------------
( `7 W' r' [2 l1 l  r/ s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! n! b. d# M( D. Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);  D# S- ]: t' S( \
紧靠其上添加:
- R5 L6 d' l' U2 Hif( pWndBase == &m_wndMenu )
4 R' k/ F: i- j& `* m{, z2 k2 u5 V* W1 \4 o* N
  switch( nID ); \$ Q. k+ r: s/ o0 p
  {
  |$ W4 o3 x$ G, ]& o4 b" B  case 2:+ z! a1 j; L. z4 X1 q9 P9 g2 R9 p
   {
: r7 j/ c4 ?# R) Z6 U; \    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, S% L7 H$ b1 j2 \9 j/ g8 u, R! X( I
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ W, p, l$ u- x% i    {5 a0 E) s0 Y9 |7 I8 t
     break;8 a, D% l5 o  n/ o+ o+ h% I
    }
$ A/ F; a" \0 q' M' E! }1 h5 [    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 \8 B: e) o8 |3 D2 G    {
2 x& @& b2 w1 M& u& w* y" Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. t; \: \$ X' q; ~  O. I5 [     if( !pItemElem )
2 s: a! D2 V2 s4 f      continue;+ Z  y- W. b7 h/ R3 e
     if(pItemElem->GetExtra() > 0)$ i2 H1 m. ?8 p! t% V
      continue;
& e, p% B% O4 H3 g     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 J) W/ j# Q. E& t, o, p, k
      continue;5 _' o& Z8 {9 w2 v6 x# ?" h& Q' [
     if( g_pPlayer->IsUsing( pItemElem ) )9 w4 D7 t* G: B: Q2 H5 f
      continue;
; R/ l9 e% Z. w1 G; o8 N8 c# X) v9 J4 n     if( pItemElem->IsUndestructable() == TRUE )
" [5 [, O7 }" n) B0 b: P% B8 |     {
$ _7 H+ Q% f1 i' y" i0 i' c      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* _6 [. U, ~( y" X4 {
      continue;+ I6 B7 F$ G' A: n& a+ Q
     }
7 d  v+ h+ `0 l( o0 J6 k' e     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 V$ {% d( X* ]( ^3 F6 P6 l    }
0 n+ o$ p: q( s9 b* ~' H" F    break;
  g* b% m. O  m. s: C4 t   }( w, B2 |7 {  m' |4 A% L
  case 1:
" ]: j) v$ C* K   {
- |+ s3 B: w) Y7 G- `  m    //整理背包) V: `9 @  z( a. \
    //////////////////////////////////////////////////////////////////////////
( D* X, g* g2 [6 `    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 I+ Q. X0 d) z! t" d' F$ J: p
    //////////////////////////////////////////////////////////////////////////* p) {" q5 K+ i" _" M. c% o
    //////////////////////////////////////////////////////////////////////////! I3 m. U7 r$ L' ?
    CInventorySort* pInvSort = new CInventorySort;1 E1 e- Y& C/ ]# E7 L( B4 J  _1 h, G
    vector <sItem> vItem;1 u' r/ q* j9 l3 x# I4 X; J/ Z
    vItem.resize(MAX_INVENTORY);//初始化大小, R) e; l5 L: f' E- y
     /////////////////////////////////////////////////////////////////////////// _1 D8 B' [  v5 b8 q: W, S  `
     //填充数据
) b+ R4 D# f1 R5 s     for (int i=0;i<MAX_INVENTORY;i++)
) n! \  z3 B/ C     {" a8 g2 R1 H" C6 k
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- @8 R  V/ ]9 s  o7 u: [      if (!pItemElem)
+ \8 q$ b- M% b9 a7 F      {
0 K' K& G  M! I$ }2 Q       vItem.dwKind2 = 0xffffffff;7 v4 P( M: E5 J0 f& G: `" ~
       vItem.dwItemId = 0xffffffff;
! u. h: L: l! O       vItem.nIndex = i;- a& N. B+ l8 }. T$ j% S- r; b9 \
      }else {) M: @. O- d8 f% l2 K
       ItemProp* pProp = pItemElem->GetProp();
# e1 O* n7 C" _& K6 E/ W. B       vItem.dwKind2 = pProp->dwItemKind2;
# B7 E! c5 @/ P& _, z/ t       vItem.dwItemId = pItemElem->m_dwItemId;( ^  H/ f6 ^  E, {7 o" Z
       vItem.nIndex = i;
! q0 y: n' ?; g3 ]6 V      }/ n- e  f+ i, V5 J* v4 r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 `% E1 F) E3 `- E7 C5 ^  g/ u2 J     }1 ^) X7 J1 v+ L8 C, L# ?
     //////////////////////////////////////////////////////////////////////////5 u5 W! N1 u& F9 ?( g; V
     sort(vItem.begin(),vItem.end());//排序: j( B$ ?' n3 U3 t' v. o
     //////////////////////////////////////////////////////////////////////////; F( ?6 U; ~. R2 v  C
     //交换
/ t6 n) n& h4 ]( c- b     for (size_t i=0;i<vItem.size();i++)
$ g8 T: y; K. o$ e& A1 }. {     {2 E% V0 r8 }2 J# [; S
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; ]- k7 ]& i" u, s4 L      pInvSort->Add(vItem.nIndex);; Q1 P: l+ `1 x. I4 V# {
     }9 K+ h/ @, `; H" ?
     BYTE nDestPos = 0;2 |) I' ?- A, {6 l- y! m" k2 B
     for (int i=0;i<MAX_INVENTORY;i++): C9 \+ ^6 F  [5 A( z
     {
+ I& z! D7 W, J* R      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 a, z3 s$ X$ ^+ r: c. a      if (pItemElem)* }2 b1 O# u3 ~1 N
      {
# p7 k& e! N8 ?) ?1 X$ K' K7 \- j       if (IsUsingItem(pItemElem))
9 l+ p5 z) p4 }, D: F       {" J9 I9 u& d( n6 C$ }
        //这个位置无法放, ^2 g9 l7 U( P, s2 ?& T, {
        nDestPos++;
4 t: H3 _3 Z  [4 v. J5 q5 K; s       }
: A4 r( p+ e+ V. `/ U) E+ I      }
0 A  }; Q2 ]) v* C/ [5 _8 }      BYTE nSrc = pInvSort->GetItemSrc(i);) }3 Q: B9 {5 Y
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);  B) |3 f4 e; X% q, y6 x
      if (pItemElem)
1 d; w/ T+ b) D, ~& v& ]$ [      {
1 n% j6 r# Y3 p) R: \8 o$ e       if (IsUsingItem(pItemElem))! @) Z2 X! y0 d5 Q
       {
6 @+ ~: T" g8 z# Y; f        //这个道具无法移动,跳过
0 \/ _* S, b$ S0 K9 e        continue;. C# C) \5 h) q
       }  N; e% ?$ ]' O/ [% o1 I
      }else{
% F2 S7 m1 u/ j* u1 _+ h% x8 c       //空位置 不用动
" y* V( d, K1 ~. d& p( q       continue;
* M0 c. a9 l7 C% i9 y: Z      }# s' u! A' K& T# `5 B6 g
      //////////////////////////////////////////////////////////////////////////
4 n) g- j: D! Z      //开始移动
/ V* t# L2 p5 p      if (nSrc == nDestPos)7 E; U6 U1 R' C7 A3 R. M
      {4 g  E7 u, R7 b1 G7 W7 X' \6 V- v
       //原地不动: Q* d  E) \* f) X& R
       nDestPos++;% s9 B! \  L7 t/ h' l& ~2 Y
       continue;
7 o; i$ e+ I1 B3 W  _      }4 ~+ P8 l; n! }
      pInvSort->MoveItem(i,nDestPos);
7 f3 \+ C! j. {# l2 b$ @7 u      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  u$ ^6 w) k/ @* r5 U4 {
      Sleep(5);& W# g1 O+ ]3 p1 p: @
      //Error("移动 - %d->%d",nSrc,nDestPos);
2 {  d; [8 ~$ H, a      nDestPos++;2 C7 D+ k6 f7 ]! A$ h& Y, Z
     }
& w1 G' g: o* o7 Y# d     //取第一个元素的信息5 |8 R8 x/ v& c4 l' ]
     /*4 Q1 R% N4 Q4 Q9 X9 X6 y9 u7 L
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 t5 _3 v0 X7 Q( Y2 I
     {% E5 d3 c6 a4 t/ o% \& y
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ @1 H# R; U6 ~4 S7 F7 b* D      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& w" O3 R8 Q7 }7 O. E- a8 ?     }
/ N/ Z# V( `% q/ Y     */3 J4 U; `# _: V$ {
    //////////////////////////////////////////////////////////////////////////2 P% A7 f. J0 E
    break;9 B0 ]* ?) v7 g2 B/ [7 m
   }
# m% W& a5 V" X; E8 Q' ?8 u2 A7 I  }
2 ~/ Z* r, H/ o% T$ x' {( ?0 G: v}! X9 D. @1 ^, i* Z( q3 u8 K
m_wndMenu.SetVisible(FALSE);
2 q8 f6 P! T  W$ T5 t, r
& l; |* o1 Z. m- C/ ]) r+ P7 E--------------------------------------------------------------------------------------------------------
4 h1 i+ i5 {  ?, D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! l3 L0 I2 H/ E; y  `. ~{' u2 {- Z1 F" U. v0 Y
BaseMouseCursor();
; j2 f! W  }* z- X}! i& D. j$ y, h2 w! h' K6 e
在其下添加:" H; I- T( w( Z  s9 C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ H6 r# i- o4 m: s; s% @+ ]& t{+ [! h- O6 ~  V5 W& Z# |
m_wndMenu.DeleteAllMenu();& Q: ~# O$ K8 j; i  ^
m_wndMenu.CreateMenu(this);
. L4 g+ o! c0 z% k2 B' [& ~2 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 j! v8 a( J- Y' Q. W$ _  y- @% @. p: u: l4 O# ^1 K
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( F; p- h% l( y) Q$ A. L{# `4 T. q: X& I5 U
  //P以上级别才可以删除所有道具& a9 Y. E7 F! R) c2 Z& A
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# r! Y4 l$ A. Q: d& Z
}$ _$ R# Y8 }0 y7 V) x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 X; X0 _* g/ R- t9 X% vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 D8 L9 Z0 |5 O: J0 a2 ^
m_wndMenu.SetFocus();  r7 ], k. L4 ^
}! p/ Y: X+ e# C; D2 u, g9 f
------------------------------------------------------------------------------------------------------------1 c7 ~& Y3 r$ u+ i3 a
*************************
/ X3 y( W7 q; t5 o7 \WndField.h文件
- c7 K# w4 `8 g. X: W' ]) @*************************
  j0 `+ ~  L9 [9 c1 Q# Y搜索:BOOL m_bReport;
/ N7 W% O- `. N3 z其后添加:: x' z$ n& c  s6 i8 s
CWndMenu m_wndMenu;
0 C" D% v8 A3 i0 V0 D  S# u# F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( K# q# W2 v- E: ]' R0 G
其后添加:
6 h* {/ B& G# ?! V) \- Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ L) ^+ O% x" I; e* z! y6 A

+ Y8 L. }! q, [0 v: g9 k- o; @2 [! b7 C, n7 _: G, A

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 12:39 , Processed in 0.062260 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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