飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1064
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( B( V, M/ T+ q- H# h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ ^8 a+ ~/ Z  r7 o7 w9 ]6 q
) [$ V! O9 O8 ^) X" xstruct sItem9 ?0 [2 x% l2 v/ r8 ]5 L+ j
{* I3 g7 [  p2 X& ]7 L7 O
DWORD dwId;
! v% x! D; w: G4 S1 O1 JDWORD dwKind2;1 h7 _, \; J% Z6 b* e
DWORD dwItemId;
3 y' k7 a7 E+ z0 n1 PBYTE nIndex;+ H% H# A0 Z/ ~% m8 X; `
sItem(){3 ?" t9 b( o0 {- y9 S. b4 A- `
  dwId = dwKind2 = dwItemId = nIndex = 0;) @  S: ]2 g# v# y% U1 h9 Y5 F, i
}6 I% f+ ]3 E( c# ~0 }( Q. B
bool operator < (const sItem p2)+ Z. {0 |0 t4 t( O( Z5 y$ D
{5 Z- \$ m) k' A% `: Y9 Z
  if (dwKind2 == p2.dwKind2). p2 i2 g2 F# v7 `, [2 j
  {
: {" M. Z& A7 [, |% W   return dwItemId < p2.dwItemId;
4 f8 O+ I& n# Y% p* |, A  }else{
! [6 J0 r) d. i4 z3 `, O0 t   return dwKind2 < p2.dwKind2;
2 B5 u0 N) Y' s0 s- X6 j5 Y  }! W2 v% f4 W9 k
}( e' H6 x; n/ l. {# ^1 e
};) ?7 b4 N; X4 q/ j# R5 v% ^
class CInventorySort8 s+ e- ~6 Q$ T0 _% r, f
{/ t( q7 L; D" ]% V
public:
+ t' q  @) R5 T/ ]7 |CInventorySort()
5 _" A6 W6 x4 j7 k9 h{: u9 n( f( Y7 G$ F
  m_dwPos = 0;, p: P: q( u; u) {- ]7 {  e
}
- R/ K/ N; w  Q% p/ _7 B% O~CInventorySort(){}; {1 K' H3 Y' V! w. T3 |$ M
private:2 c! j2 |; _, x4 g% ^, o& u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; H8 A+ k0 C& K8 y; {1 J8 IDWORD m_dwPos;
6 B' e2 o' O  u/ V4 i1 ?( i6 R% n+ ]public:
4 d! J: Z8 j# C4 i* Hvoid Add(BYTE nIndex)9 P, C  n) k  L% j
{
, ~* J$ }. k1 z+ X+ r2 F2 [  if (m_dwPos >= MAX_INVENTORY)
+ i5 t6 y3 n& R+ k' w/ v( E  {/ ^' X* W! t( ^0 V
   return;
( x% j& K6 B! m* V  }) {' @' I+ {; v) l, r
  m_Item[m_dwPos].nIndex = nIndex;
  J8 X6 C/ w& y/ y; P7 \- \& [  m_Item[m_dwPos].dwId = m_dwPos;8 Q1 G5 t& x; ], Q
  m_dwPos++;' Y7 K6 E) y. w4 H: W9 c  h
}
& G. Y( @: _9 ^; F8 NBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 r3 b# q$ E  Y: X: c# h& T& A{
# T" q- Y  v0 W( K  for (int i=0;i<MAX_INVENTORY;i++)+ _7 g6 I  p) n9 k
  {
' B8 O1 z/ s  g4 _. w1 H5 J2 [1 U   if (m_Item.dwId == dwId), _5 C( R# I% N9 X0 K
   {, m+ t8 v2 H8 K9 d! y
    return m_Item.nIndex;
) u, Y5 o8 Q' e" C5 {. Z& I( H/ K   }5 s! T- A* v" }( r6 O
  }/ r9 \$ A) Q, Y6 L2 u
  return 255;* r& J) _& `* h. _# K
}
: T3 O0 g8 N/ d! N* Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 e7 a5 E5 ^$ H# _
{& ?; w4 F1 v0 y% T9 v. B+ H
  BYTE nTmp = 0;* C1 R0 M5 z  V2 D& N& t1 j2 C
  bool bDest = false,bSrc = false;9 N* e" k- L( I. T
  for (int i=0;i<MAX_INVENTORY;i++): _. U8 J# q- K0 O0 M0 B9 \
  {
/ p8 f2 T( V- y9 s) J   if (dwSrcId == m_Item.dwId)9 [: _+ w; R# z6 K) g3 p
   {$ v3 e2 c% q9 e9 k- ~
    //id相等 则 改变对应的dest和src
9 E" V; T8 L/ p- L+ f9 h    nTmp = m_Item.nIndex;
& ?1 [4 z* }$ c" w' x7 q    m_Item.nIndex = dest;
! `/ a- k+ c1 q: G6 o& r8 K* b   }4 O& A$ c3 @, e, e. x
  }/ u8 P2 \# O: I, W
  //临时数据保存完毕,交换开始
+ j; N8 s0 F/ i* n) b+ f; V  for (int i=0;i<MAX_INVENTORY;i++)
1 @5 O% I$ ?1 f" X3 J& `5 _2 {  {
( k+ |% w2 B1 r9 F   if (dest == m_Item.nIndex)9 ?1 `8 S& r+ G- m
   {  C; N' i9 E! S
    //id相等 则 改变对应的dest和src# a/ A$ p4 ~  c9 E
    m_Item.nIndex = nTmp;( c- P+ u7 s4 Q; n' ]- Q2 G+ }
   }
5 j* V4 e+ l  A, e  }
/ b9 V- n# T5 N! D}
6 r( S, L4 }) e( \$ s! B};: K) l' K% {+ `0 Y
-------------------------------------------------------------------------7 Y+ A5 S$ f) H6 B' Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 J; L4 g; ^; A% i0 Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! `8 H% N7 t  U+ ~, ~. a
紧靠其上添加:; M. m$ s: ^' @7 S4 _$ Z
if( pWndBase == &m_wndMenu )
/ q8 _) B+ ]! c5 V& F0 t5 w; O9 {" \{: B6 j- n4 s8 B% A6 j- ^
  switch( nID )
" l6 o( q/ d7 z( t  {3 l& H: e1 ~6 _+ M
  case 2:
( F; \6 S6 r, {* M! q0 }   {$ e3 P# @0 ~& t: ^8 b
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 }8 M, {  Q, n4 {2 ^
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); d8 ~; e% Z6 N
    {
4 Q1 F! n4 }$ ]8 q% Y4 X     break;, o; p3 g9 C# |: m3 J8 ^
    }
0 z0 ~4 y* i. d" B/ L    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 g" K/ ], x! L0 Y4 V2 V
    {# \4 K& K% M5 w: m2 O1 {
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ v- O9 p; @2 E" A. e" \: M     if( !pItemElem )
; _8 u* P% Z  A5 G' e& ]      continue;+ u' {, Q+ I7 H# p, j3 V
     if(pItemElem->GetExtra() > 0)" {1 R4 m! O2 X. f' S) K
      continue;
, f, K8 `! i- N1 |     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 `+ Q: M; }: j+ i7 s! g7 z2 m* V# ?      continue;6 M: @  S4 F8 m- Z/ V" h7 J" N( ^
     if( g_pPlayer->IsUsing( pItemElem ) )7 b3 y& o6 t3 T4 G# l/ U
      continue;4 N5 |4 r9 Z+ x! V; P
     if( pItemElem->IsUndestructable() == TRUE )% k; U' @0 F$ e% Y
     {
0 E% ]' X: H3 D- p6 C      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 o" V5 u0 p; T1 j- R! j9 r
      continue;3 H1 v  o* ~3 l; i0 J
     }3 u  D  v9 {6 W  H1 [
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" R: u& E' _. \
    }8 f! x# U: q2 C0 a4 q0 Q
    break;
9 N, F2 {! T8 I) v& V   }4 K; z( ?' ]) B7 C* N" G
  case 1:
" @! [) i% X8 p& e* P& ~! N   {
. P7 c+ p* i# E' _8 _    //整理背包
- G8 W- q  f' W2 E3 Z    //////////////////////////////////////////////////////////////////////////
: @7 Z7 m* E: t7 A" Q; I! g    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! c: x1 |0 g& t% j; w: v    //////////////////////////////////////////////////////////////////////////' y4 q8 d% M% [9 Y- b' S
    //////////////////////////////////////////////////////////////////////////1 O8 j) n* K# v' g
    CInventorySort* pInvSort = new CInventorySort;
8 [7 g, j( I# h) U9 E% I    vector <sItem> vItem;
4 Q5 o' U( }8 }: j0 F: t    vItem.resize(MAX_INVENTORY);//初始化大小3 `2 q; q% A* O: H+ O
     //////////////////////////////////////////////////////////////////////////
# @8 E8 k  G' c; K6 m9 I+ ~     //填充数据1 Y1 u1 K) b/ G0 F9 {
     for (int i=0;i<MAX_INVENTORY;i++)
9 y/ S- E2 h9 m8 T' f# f     {
: {8 F7 D) y1 G$ \2 Z! u5 x      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 r; c8 V5 j4 s$ V      if (!pItemElem)
* ~. P6 }' J) F9 E$ V      {! k# Z4 ~3 k: S& J! b
       vItem.dwKind2 = 0xffffffff;
% ]8 K: @5 y) @' L# p2 D* i       vItem.dwItemId = 0xffffffff;
" @& D6 f, I7 `       vItem.nIndex = i;
6 J+ z1 A$ j) i/ e0 D      }else {
) f! L( s. J4 o) ~: J       ItemProp* pProp = pItemElem->GetProp();
9 J" a. W3 x7 z       vItem.dwKind2 = pProp->dwItemKind2;
! F* @8 ?# Y; n% ]1 t7 P       vItem.dwItemId = pItemElem->m_dwItemId;
$ W" Q! e% {7 q       vItem.nIndex = i;
6 [+ h- e0 [, j; v  f      }* l& A9 N( |3 }7 B5 k, V  v! q# ^
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. X0 L5 h  ~1 b7 n) A2 S) }8 F     }
( B) z" p; C, |- \. {     //////////////////////////////////////////////////////////////////////////
7 H. v$ ^' U' i: q$ O+ V: V     sort(vItem.begin(),vItem.end());//排序
/ G/ ?1 A8 v. R- U0 |  s* K: q     //////////////////////////////////////////////////////////////////////////- P0 O# \! _, ^# X/ E
     //交换
% Q5 R: i) J! G" ?/ d4 _$ U     for (size_t i=0;i<vItem.size();i++)* J( d6 ]. E! O/ `
     {
- D; A+ O+ z8 C/ p5 h& [2 [      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 H0 I) h0 U: |+ P( x) d' S      pInvSort->Add(vItem.nIndex);
4 y' l5 i+ k" V  L9 }$ d     }9 g8 [$ f9 @" w5 Y/ f# g8 C5 u
     BYTE nDestPos = 0;
5 }5 }, S8 X7 N. [) P! H     for (int i=0;i<MAX_INVENTORY;i++)
) G/ T4 w: N  P6 M2 ~; X     {8 Q' S( _; I  l* o0 n# Q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ B2 ]4 T2 }3 x7 T$ u" l6 u
      if (pItemElem)5 T* s+ d3 G3 V* e% V; @) W
      {
* E6 {: H0 d5 _- u" R9 m9 [6 l5 S       if (IsUsingItem(pItemElem))
: R- Q0 m0 i/ a# J" G3 P       {
: G! A0 s2 L  W9 |) P& l        //这个位置无法放
8 ]5 }$ T! T) k4 E& v0 v        nDestPos++;) `+ Q( F; F- a
       }* b+ L2 S( p( x
      }
6 @3 H- w; @9 a4 b: [; ]4 @! i' c      BYTE nSrc = pInvSort->GetItemSrc(i);
9 d# Z  J8 E3 [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 g8 x) ?$ X9 O+ y6 S  k1 A      if (pItemElem). p7 l0 [# t) f: i
      {
! z( C; U4 [9 l+ a9 P2 e8 }& t       if (IsUsingItem(pItemElem))
' S( p. e& N$ i9 A5 _       {
) K+ W- p, U& P7 V( T6 U        //这个道具无法移动,跳过
2 [) ^+ ]- l" T( H        continue;1 }3 j0 d( M) d. n: s9 D
       }
- V  ]) Q$ d' ]1 |7 y3 N      }else{/ z1 T" X+ Q0 u) q7 ~" w1 V
       //空位置 不用动
6 U& h) p2 `7 c! e' k7 g; }: K       continue;- w  M% l& ]" k
      }
, i8 Z/ f  j$ {  V- p' C9 N      //////////////////////////////////////////////////////////////////////////
) W+ h7 k5 F; L7 a      //开始移动5 T$ }4 T' P7 b+ R" {
      if (nSrc == nDestPos)
1 m# Y, e" O2 G2 P& U, }* q      {" f8 M+ T. N" k
       //原地不动* B% B- f* Q2 u% r8 m
       nDestPos++;6 ~* U- Y5 e& d  ^* u; E+ l* g
       continue;
# R* f  m5 T1 y/ K0 k$ t& P      }7 R/ T! m/ ]+ O( ^# G8 |
      pInvSort->MoveItem(i,nDestPos);, v: p1 V% }! @4 Z
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 y2 S4 }% |  G5 c# m0 }+ z      Sleep(5);  `0 e3 {! I  t8 E
      //Error("移动 - %d->%d",nSrc,nDestPos);
7 d1 ^4 [$ j$ R6 ^$ T4 e      nDestPos++;
9 I" A) s; Y. u0 U1 T2 o     }
1 x! W+ \) T. c     //取第一个元素的信息
. i: ^4 a! {/ u+ Y- ~     /** w- d+ {* E3 ^" b) D; K/ E. b& S
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 K2 r9 z; X  a6 M! ?: H# ]! R     {+ @5 O( Y- g7 u: C
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 I1 d6 B0 l! t- ?  g
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 J: i1 d; d$ y8 L8 o
     }
, _7 z  e9 p" X4 Q     */
/ e* ~0 Q! f4 [" l  D1 f. T    //////////////////////////////////////////////////////////////////////////
( u1 X6 U6 Q, Z6 ?    break;- e8 `8 h' t# l# r( ]
   }
! \/ w, ~/ \- P8 t; b  } 4 Y0 I& T# e: M" I* N3 g
}
3 X3 Y8 h; I: h2 ^7 q6 @7 Tm_wndMenu.SetVisible(FALSE);
0 \. w, v  j5 v) C- B5 q1 ^5 H" D0 H/ H9 K/ b
--------------------------------------------------------------------------------------------------------
9 E8 [/ `% W) R7 M% i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 j8 w' @( D" x! [, `6 g
{
- t/ C! w- n; t/ W% lBaseMouseCursor();1 F* J2 F! C9 `, J( i7 |
}+ I' ]* ], x9 h, r% }
在其下添加:, v- z! M$ M: [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) `5 c; Q) m' w/ B* N( I, C* ]; s( M{
8 W6 e9 O. [+ g0 g& Cm_wndMenu.DeleteAllMenu();
/ q" ]& u0 X, Z% \, e+ \& pm_wndMenu.CreateMenu(this);  J: g* O9 \0 M: |. |! _( @2 V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% R4 Q( O5 `( d4 q7 r# s
6 }1 I. y# d! }$ b, Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 M( K1 {* n( f0 h: n- o{" t. Y$ t/ I" Y$ C7 }
  //P以上级别才可以删除所有道具# W7 }! u6 I: Z! T  f- B8 m
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- c5 Q2 k$ y2 |
}* M1 [; ?( [  H: z, Q7 Q8 }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) C# m# R, ?7 D6 M$ r% e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 C) i; o4 g- F1 I4 Im_wndMenu.SetFocus();0 h4 N5 A. u  G' p- E
}% E) b8 v6 k! f# B( i! @. {; j( g
------------------------------------------------------------------------------------------------------------. {% S  r6 X2 l; s" r, b# F
*************************' q  I& p( e( z! c
WndField.h文件
  _+ L% E  g; ]*************************  Q3 J! q' @3 h) A
搜索:BOOL m_bReport;
( Q6 D( w4 v$ s2 X$ _其后添加:
) L$ C6 `# }3 N/ W+ xCWndMenu m_wndMenu;
4 Y  K, Q/ y% v8 T; ~# f2 d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& `: R7 w$ d0 T其后添加:
! ~. u: e/ o' t+ x% s$ j# v5 zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
  S& R& c* w7 x6 O& s6 a0 F8 n* w
( n2 X5 b$ j' L* [8 I& `5 x

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 04:42 , Processed in 0.081624 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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