飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 j2 Y% O8 u9 Y, }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' g0 ?' @* U7 `6 Q  K
. `1 Y' ]# U$ H% c# g7 b* b& ostruct sItem# _& f5 u' u' e9 R9 ^
{
, u3 b. Y, h3 E1 y2 v% bDWORD dwId;+ M2 y2 D# i/ s+ k
DWORD dwKind2;6 V! _* Q$ b2 J& Q
DWORD dwItemId;9 O% g$ l' P5 X3 D5 y& O; s
BYTE nIndex;! E, _% @* c  M6 \# B- N" r) M
sItem(){& T  B2 \/ c2 T8 J5 J
  dwId = dwKind2 = dwItemId = nIndex = 0;. v3 g& h8 s- P& }2 T4 O
}# Q& Q  h9 ~/ O- I
bool operator < (const sItem p2): l9 {& D3 G7 _* t
{
2 A& }  o( p2 l* ^  if (dwKind2 == p2.dwKind2); }! D( Q% p9 c* h, O, L
  {! v- K$ L  x- P& y1 [0 U" z6 ], P
   return dwItemId < p2.dwItemId;6 x! l6 v( f3 A* [0 N
  }else{
2 L* `0 t2 s- P: M   return dwKind2 < p2.dwKind2;- w6 G# J( Z7 m+ b
  }
$ W  `! s7 m; ~  u) P8 g}
& ~3 r; I7 B" ]0 j  |. x};3 I6 `4 m! h' {+ f6 H1 r( J3 A3 U" c+ a
class CInventorySort
  }  d- V& H$ P0 ?4 A. V5 [0 N8 ~1 k{" K: F9 w5 N' @6 M3 c) v
public:
2 `% i" s9 |- I2 }CInventorySort()& J" N# d$ d2 D) ^+ N
{
* _/ L4 a' a& }# Q5 E  m_dwPos = 0;3 @, [$ _/ U( o! @- ]$ S3 `$ Q
}' |1 N2 u0 V4 |) \# b. S
~CInventorySort(){}
8 a6 }* N. U' ~! L! Dprivate:! h( m0 ~* l6 o; o' P4 d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# _& f2 e7 D4 TDWORD m_dwPos;
8 B  T+ t1 l1 v$ {public:6 q9 ?+ F3 g, o  R
void Add(BYTE nIndex)
1 j0 X' T4 n4 B. ?6 w! ^{( G+ e: F$ y* n4 t4 i
  if (m_dwPos >= MAX_INVENTORY)
/ P% r0 Y! G; E, G  {
: D" o9 p- s5 o1 X$ P( E7 J6 b" v$ J" w   return;
8 F  G3 T% M. z( _! k  }9 X9 [% p! h8 Z( [7 W
  m_Item[m_dwPos].nIndex = nIndex;. X/ p( G* {* F) W
  m_Item[m_dwPos].dwId = m_dwPos;
. ^2 V' A+ U  J1 S2 F4 m  m_dwPos++;
5 |0 r$ a+ b, b$ i+ t  p}: h  O* v; j2 R9 x( h, D# j9 j9 b4 j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ S: ~& D: p/ a
{
. x- j$ t4 f) C% W  for (int i=0;i<MAX_INVENTORY;i++)
5 c& J  V4 t/ Q- K( p% `  {
/ G+ E  b- c# J, k& A9 g  b   if (m_Item.dwId == dwId)
9 n# |0 d' E" ]1 @! w! A$ [   {
" q: M1 t5 @7 I& s* @: R    return m_Item.nIndex;
/ j. [. b4 i6 T; c   }) y6 S' `) g! X4 Y# T: [& n
  }' N0 F, L2 I: y" c. @2 T9 w
  return 255;
0 X/ Y4 I7 {7 m3 |}
3 s) w# B- c7 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; h) }" w  ]3 V# c. ^{/ x- ^& k, ]. P- A# \
  BYTE nTmp = 0;
9 _! P5 d5 X9 X. V  bool bDest = false,bSrc = false;
8 I& r0 z* I5 x  for (int i=0;i<MAX_INVENTORY;i++)$ M, q7 F5 r7 x0 @! `+ E
  {% ?4 J$ m! k! S8 U# k* K
   if (dwSrcId == m_Item.dwId)  i0 A2 q8 P9 K
   {# _2 A5 ?* I- Z, H: |
    //id相等 则 改变对应的dest和src. P2 X% v( y5 ]! u
    nTmp = m_Item.nIndex;
# u3 h2 p  ^& g% g4 I: z. ]    m_Item.nIndex = dest;
5 |1 z" d: |7 J  \- K% a- B   }5 r% k: Z2 F# ]
  }7 Y. Y: [6 y; X" N5 H* K
  //临时数据保存完毕,交换开始9 ~; x; G* h. u: n. `+ O
  for (int i=0;i<MAX_INVENTORY;i++)
0 x$ t- L( c5 e8 U  b  {
3 z6 d% L6 \2 H  f9 b   if (dest == m_Item.nIndex)9 s9 {) P% l' X# J
   {% O. D7 J+ X. a. ~( q6 p9 I' S
    //id相等 则 改变对应的dest和src
' l/ n; C! p. H: o. w0 X! n- \    m_Item.nIndex = nTmp;
1 y( L% f& G9 Z- x: ?5 N   }, X7 u% X2 \1 g/ e# ~. F, e' o
  }2 ~3 A2 }" j8 t( w. m9 B0 F
}# N6 w) K6 N, M1 m3 R
};. a, E7 y( }4 s- c) P
-------------------------------------------------------------------------; ?8 r! c1 ?: ^, W. x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' A5 H; o! Q$ H+ j4 S, _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- G+ L! {% w2 J4 k: u) |% e紧靠其上添加:6 V2 b0 Q- D- v$ V7 T, F
if( pWndBase == &m_wndMenu )
) B% I) }! }9 j. n+ o9 ~8 v/ w{
+ F5 W0 {& a' m! R0 ]+ L  switch( nID )- g2 u, u6 h+ N7 ]; ]
  {* y* P) q5 `/ n1 d. K  Y# S0 X
  case 2:; D$ j% `1 c  Y, c
   {3 Y+ Z- e6 j) w
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 a5 T7 K. G$ V" o9 w9 D
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 _8 M( i1 G$ V4 B6 q2 t
    {6 ~. @/ O. _  X6 K' l) \! z
     break;
& ^3 @2 R" b3 d0 @    }
3 r7 n5 z+ ^( @5 ]2 p& O    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 _8 h0 }3 o9 z! Q    {
( D& \( K# z3 u5 l2 J: D3 v     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* V% c. c( O" q' g6 `$ Y6 j. p     if( !pItemElem )- ^" ]7 F* M3 O
      continue;' c0 U; p5 t2 X3 x/ F5 B
     if(pItemElem->GetExtra() > 0)5 W( B5 B# _! T# V1 u9 |
      continue;# S, \' _" n+ |# `1 I4 e& e4 K( T
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; |  I' L* h) a7 G  x
      continue;
! K; ~# z3 K8 l+ }3 W7 u4 i$ d     if( g_pPlayer->IsUsing( pItemElem ) )2 \7 o. H( j& A1 X8 x/ x- K
      continue;
( t' F( J+ ~/ ]4 H- O     if( pItemElem->IsUndestructable() == TRUE )
' [" d9 q. k$ M     {+ e3 o9 n0 U+ S+ ^/ r0 i: d
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: u4 i7 o. p1 v/ C% x* F: w5 ~      continue;! W% Z6 W; E+ L; L8 o* ^: a# \0 x
     }% F+ I, y. G4 b: F- H/ _; k
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 S; v( ?% Q, v% y. I
    }1 e! p5 E2 ^9 Y" L# p" p
    break;2 ]6 Y" m7 A- G. p
   }/ o+ T5 P, R# p" c( K9 W" ?- n
  case 1:! g8 v" l+ O( Z5 k$ l5 n( T: Y
   {! S; n3 }; o' n; F% }* }$ `
    //整理背包
4 J% }8 }4 U: y2 r, v' @: s    //////////////////////////////////////////////////////////////////////////" o6 _9 h$ [6 i3 e2 {
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; m3 ^) p6 R3 r
    //////////////////////////////////////////////////////////////////////////8 G, T, m7 X4 B, d, D6 l4 v
    //////////////////////////////////////////////////////////////////////////
' V( P, y3 v+ ?. i3 r    CInventorySort* pInvSort = new CInventorySort;0 A: U! g/ O8 M& B: a& e, z
    vector <sItem> vItem;, q( z) s2 J) C8 M) g% o
    vItem.resize(MAX_INVENTORY);//初始化大小. A( h3 b  E) i; S5 I  N% S) j7 [
     //////////////////////////////////////////////////////////////////////////
' t0 @0 l* ]4 g- L8 _7 ]     //填充数据
2 |8 P/ s$ j, Q3 I     for (int i=0;i<MAX_INVENTORY;i++)7 ^; g, ?0 H- F% q2 }0 P& v
     {
& e  S2 L& n  E& ?" b' R+ N      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' o9 u1 R8 x" `& [      if (!pItemElem)
& H) c  u! z( G$ b% n' W      {5 m0 [! W( H% B. B* O! T4 X
       vItem.dwKind2 = 0xffffffff;
  Q0 y+ _0 Z; l7 `5 O       vItem.dwItemId = 0xffffffff;
! y; F* _- E0 i" a7 s       vItem.nIndex = i;; {1 M- U  A5 d* h5 w- e1 \" X+ h
      }else {
* |1 e4 [' ~6 Y  g       ItemProp* pProp = pItemElem->GetProp();& A! R0 F9 G: c0 v) l9 n* D
       vItem.dwKind2 = pProp->dwItemKind2;
, t8 {: a5 J* D: @1 L3 ]9 A; ^       vItem.dwItemId = pItemElem->m_dwItemId;  K0 Q! B" ~+ k" Q+ p: P: W4 S
       vItem.nIndex = i;
8 p1 I- C) Z5 l" n$ j  S      }5 l% T$ v4 s: h+ ]
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( M! W* S4 z( }: X$ E; ~6 |: u, s! d     }
& f: e! E2 [8 Z     //////////////////////////////////////////////////////////////////////////1 x& r. u; [/ A- W5 l
     sort(vItem.begin(),vItem.end());//排序
1 B8 H, t' A1 E8 W     //////////////////////////////////////////////////////////////////////////
5 K) f4 R8 Q* `; U% Z* S     //交换8 r. G& H& b/ ~: n
     for (size_t i=0;i<vItem.size();i++)' L. B  ]- Y9 n4 \$ H! c
     {( P7 }5 P6 `. A- j+ c
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, |0 H; H+ {7 @4 U( c/ g
      pInvSort->Add(vItem.nIndex);
0 G2 e" W7 B# y) p     }* Y+ p5 Z; W# U6 l3 M
     BYTE nDestPos = 0;
! N' [( `6 W+ ?8 `- C; o7 S     for (int i=0;i<MAX_INVENTORY;i++)
) i3 F6 A2 @# R     {4 s' Q" S) C. _4 U- ?
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 K. l/ d+ V0 u2 M% b; _
      if (pItemElem)$ q# x& g* C+ G6 s# _
      {! O& [% |& ?6 {9 G" f6 N  d: O$ t; o
       if (IsUsingItem(pItemElem))
% j- R" V% e, `; i9 ?& z3 V       {5 h9 t6 [, v8 w. _" k9 m; e
        //这个位置无法放
4 Z0 [9 j5 E& u" i" s, c        nDestPos++;
4 E* Q1 L6 e6 S4 R3 W       }
8 |  {$ g' x: n0 K' K      }
2 P: @& x% V8 u" f      BYTE nSrc = pInvSort->GetItemSrc(i);1 k0 J+ k, z, D- E
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; O' B" o/ ~* F; z0 P      if (pItemElem)% g3 X5 O# Q, n" ^; z; u
      {
& R6 [; G; `2 ]: H       if (IsUsingItem(pItemElem))
: f( c$ h- ~% n/ u0 ^       {9 }9 k" e; A% U; _6 v
        //这个道具无法移动,跳过6 e7 d1 ~3 p7 z0 E- q
        continue;
& `" G+ ?5 D9 S" @4 R& l  w5 x0 m       }' \8 j, b/ @& e2 l
      }else{
; r  X9 v/ C8 u6 \% D       //空位置 不用动
- T0 q4 E6 |$ ?+ ~: ]$ H  q       continue;
7 Y4 a) @: f. C6 d' @) ]+ d, k      }$ W. J0 `+ s6 T
      //////////////////////////////////////////////////////////////////////////" C7 l- f" |/ _2 V: Y* d4 V+ c
      //开始移动
: n! i; |& {& p% k# y5 D! z8 h      if (nSrc == nDestPos)
; j9 J! X# I/ d  q- U1 m      {
* n) t) _& _! j! Q* {7 Z       //原地不动4 x+ ~9 m. V! a& N2 o+ O8 i- x
       nDestPos++;2 l9 m! g, f5 R& h% u3 n
       continue;9 f, _9 w- g# f+ i+ i2 A/ d( o
      }
' u; J! G& }1 G. l" m5 ]      pInvSort->MoveItem(i,nDestPos);+ h! \* |, f$ S; {5 B
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 E0 |5 W0 j% |9 O6 A      Sleep(5);+ W4 I5 n) a  @; u8 B
      //Error("移动 - %d->%d",nSrc,nDestPos);! r4 w+ h" {" _  l1 @: G- o2 Y- ]
      nDestPos++;0 _1 W, B8 D' I1 |( q
     }$ o9 E  o* A# C
     //取第一个元素的信息
# K: ?3 Z6 A% G+ q8 P" s; G     /*
+ Y. M8 x$ }$ n) X4 X( p3 _' l     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); T& W9 @5 f$ \6 J
     {
$ U, \7 [  V4 i' e      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 f0 L/ P" o  P/ \* C1 }      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ q, T, u# X% C8 |+ m' |     }: r3 ?$ n$ a* M
     */9 W0 f# C4 |: N/ \4 _
    //////////////////////////////////////////////////////////////////////////
' M0 j% l5 Q: z, Y% S! i; I/ ^    break;
  L7 f8 G* X$ Q% G   }1 S# U: ]- b; A
  }
2 \; l8 h5 \9 v& R4 ~}
3 V2 N/ O, n- q; {4 ?m_wndMenu.SetVisible(FALSE);
: g5 f! W5 ^% I( {# |$ K4 b
, t  O8 D8 V4 G& V--------------------------------------------------------------------------------------------------------
6 C" k9 R4 R* \6 R6 l  p. g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 B8 h/ o0 E6 c# b% o* x
{
" o3 T, F3 V5 w: |3 Q4 L( wBaseMouseCursor();
4 T/ B5 T; E% ?}
/ V: L) C9 b2 Z# u  t+ R; M8 W在其下添加:1 a% I$ W) ?9 B, C! Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 r3 ]- j; z6 Y  i# \1 a3 [5 d2 {{, B- ^; Y9 Q* X! b4 k
m_wndMenu.DeleteAllMenu();# y; `4 B$ F7 f, G% [
m_wndMenu.CreateMenu(this);
; w! @$ W9 c& `' [9 {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 D4 O4 q# N( b0 F
) H) m2 n' L6 J2 T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), _- D" i  i' D$ G# o
{& M# A* O1 a; J& x' e$ b1 \
  //P以上级别才可以删除所有道具
: z3 j; X4 ^6 n3 N/ U  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& N! c) M9 B: d/ D
}
5 c) w& ], R: e7 d, d% lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% C1 a% Y5 B& F9 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, l% T0 c; A, g9 V6 ]
m_wndMenu.SetFocus();
+ V  X+ j- ~8 G; F. ~& u  s  A  @- ]}7 h% a; h, A, k/ Z
------------------------------------------------------------------------------------------------------------  r4 v. B9 b/ g4 ?
*************************5 k: t& }# D8 M
WndField.h文件
8 U, r. N# I" a* u  u) n*************************
" q0 \7 M! T/ ]" m& W; i8 I) U7 P搜索:BOOL m_bReport;
3 M1 _4 N1 N' t; l+ Z其后添加:! {& s5 K+ i2 Y0 F8 c
CWndMenu m_wndMenu;8 x& U; c5 p3 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- \! l+ m( T8 @6 `/ Y, i
其后添加:' \& o# {2 d2 a9 y5 F, E: b
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 E7 a' ^; u. s1 }

; l) l5 l0 c. H1 X: }4 C# s& k" x$ D0 K; S

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 22:25 , Processed in 0.063719 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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