飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
* B# k- |4 E3 |! p5 Z0 `: Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  D* ~8 x  H6 l. U, k! W3 ^; i3 v" U
struct sItem: |8 _* {1 [! i; t  ?
{
5 D. D2 P: b" m% I9 dDWORD dwId;% R4 U& s0 k6 e- t( x$ L
DWORD dwKind2;5 e5 b: u' r; Y" g2 v! u
DWORD dwItemId;) j- e9 o( y4 |
BYTE nIndex;' k% L1 r% C5 Z; n8 P) M
sItem(){
- n5 G, `: T0 s8 i7 J4 F  dwId = dwKind2 = dwItemId = nIndex = 0;
) i/ `0 w1 Z5 Q; n3 M3 e* W0 y4 |}
. j7 b/ h! |: k2 h6 ubool operator < (const sItem p2)4 P2 [4 E( ~4 g! a
{
- `- J( ^9 L4 ~* y1 ?5 K) \  if (dwKind2 == p2.dwKind2)
4 m: z3 P7 M+ p! o" o  {
  P! h1 v, T9 c. O" k   return dwItemId < p2.dwItemId;* z+ m$ t1 e: s6 v" R1 u* b! d
  }else{
  w# {" L* y; K! m   return dwKind2 < p2.dwKind2;5 h/ O/ U! ^! s- W2 Y& ~- c
  }# b( Z- H- B* T" Y4 K: g
}
! v8 n4 B/ A( p9 D% O! N};# T/ p, J' g$ C% K$ g2 M8 n6 e
class CInventorySort: o6 [# ]0 Q' y* o
{
- ?* @: N' h1 q2 P- S! fpublic:
# J4 B# p+ |* VCInventorySort()
9 P# X; O& {$ O1 e. e{( `5 K3 U* O( i+ l
  m_dwPos = 0;$ c5 y2 \4 S& _
}
/ b- @# e2 X7 e~CInventorySort(){}
& a9 z6 s; B# b! ~1 v1 V4 W) M" Xprivate:
% o2 C1 L: x( X( G3 V& C! LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* t) S6 d" x4 n$ D* `0 h% zDWORD m_dwPos;
' ~0 U5 ?( A) ^* o3 Opublic:8 _% {0 D1 Y7 v. R1 m
void Add(BYTE nIndex)
5 |: w' l# T, e- o. a/ O{
; `9 Q& D& H0 ~2 U  T9 h+ f  if (m_dwPos >= MAX_INVENTORY)3 ~. ^9 [7 Q! e6 ^) q/ T) t& [; y
  {
3 r, u7 r1 g8 e/ Y9 B   return;
% y/ ~( g8 Z; @$ N$ j$ W  }' w- u; |' d" x1 Q# `
  m_Item[m_dwPos].nIndex = nIndex;: ^' \; s0 J9 v. G2 Q
  m_Item[m_dwPos].dwId = m_dwPos;8 B% D4 ?( V1 E- q
  m_dwPos++;
+ m6 f: S+ m  G}
3 ~. p/ g( i1 q8 o3 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  M& f; b+ [; o" Y, ?{
: Q% Q: b% W* l/ y8 a5 Y  for (int i=0;i<MAX_INVENTORY;i++)7 t/ }7 v3 \# B4 G" @
  {
1 D9 }5 N* s6 E- r, d( v   if (m_Item.dwId == dwId)8 s/ \+ q. Q" H; d8 [+ E7 L
   {
% R# c% v9 M& g; I) L: C' V& O    return m_Item.nIndex;) j8 T# c6 |6 w( k6 ]0 d4 D3 q
   }
) ]) |0 l# L. N4 Z4 [, ]  }( r) }$ e0 ^) [: A( w
  return 255;
2 O! H' s, h# G8 ]}7 V7 F+ l3 R9 |! n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* ~) }% F- s- B4 z( l{8 o  u# I$ O1 f3 c7 Y
  BYTE nTmp = 0;
% _. F4 n9 k7 u# M# `' l7 }  bool bDest = false,bSrc = false;1 M/ U% D2 n( I# Z
  for (int i=0;i<MAX_INVENTORY;i++)
- A( S: u4 a, m* y, R6 @. L. \  {: C: d  o6 W! k: }: c8 q+ T: k
   if (dwSrcId == m_Item.dwId)
) d4 p" a7 L+ r$ ]   {
( P: r- U: W" o# ^6 k* c    //id相等 则 改变对应的dest和src3 O* ?7 h  |8 \' b; I2 g
    nTmp = m_Item.nIndex;1 }  S# b, U' Z& i0 ~% [2 H1 n
    m_Item.nIndex = dest;
4 G' I1 J5 O( @! @+ w  |/ |   }* o5 R; I4 S% j  \! J
  }. ^" g. \4 U9 }* P# ]: T
  //临时数据保存完毕,交换开始  ~4 a% g, W* o( I
  for (int i=0;i<MAX_INVENTORY;i++)) _. O) `1 I, W/ k" M
  {* v& j7 T1 v# b7 R
   if (dest == m_Item.nIndex)  Q) R/ g+ @$ S! n- E
   {
+ |7 J3 X5 D% |$ V) W& |    //id相等 则 改变对应的dest和src* t0 C! @* j0 Q+ V: ?5 O
    m_Item.nIndex = nTmp;
2 I: |; m& ~' [6 D   }/ `) \+ Y6 h4 e" m
  }
$ A2 f& f9 @' w  y! H6 n/ d+ m}; ~$ M- t, }" Y. c$ B7 J
};
1 p0 c" U  ?4 i( O-------------------------------------------------------------------------1 V- N8 p5 j7 ]$ c  o5 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. X- [8 o# q% m0 x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ E# _% \  E8 ?! g
紧靠其上添加:
* X  T8 B) B2 n7 x) tif( pWndBase == &m_wndMenu )! E. R% {/ \# q" y
{5 I  g8 y! o; k" }2 T3 `& U
  switch( nID )
7 m: w  a' `% t) V. w+ s  {: A/ R# M/ m' ^' W8 s
  case 2:
! J: s; o0 I. r! j, _3 O! f( k   {' C- ^) K" l% I; j1 x
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- P# J- P2 d4 ^) G6 p) Q$ t4 s    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* g+ }- v& S! f3 P+ t    {
9 T' {* n3 s3 s8 F     break;# {" S: N; U3 n# J9 E/ W
    }' B9 [- D# A7 b% V: G
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 Q% g+ K1 C/ H" ]9 [4 @% C! V    {& x% U: b  S: o
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( g7 |2 T% h0 d9 ~
     if( !pItemElem )
* q/ \! j4 i% o5 g      continue;4 R+ p6 i9 T, ^  _6 d  F0 C3 T
     if(pItemElem->GetExtra() > 0)* D0 _$ j& M5 h" b0 r
      continue;- |8 R" a' R) s1 D: k, Y8 {5 [/ V/ R
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) }1 a9 k2 l8 N; `9 Y      continue;
, C! h9 [: o* a     if( g_pPlayer->IsUsing( pItemElem ) )
4 |% T2 P5 J! A( q# r      continue;( b) K9 O; T$ O5 B, J+ L
     if( pItemElem->IsUndestructable() == TRUE )3 M. |' f# M9 }8 P+ q
     {
/ A& V: ^- b/ Z3 c9 v% ~0 O9 s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% S2 G; F% S4 B- d8 x      continue;
. b. o: u- z: }& |     }$ e2 r/ e" {% ^. t3 u
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( L/ {* W6 m4 g. a* F% g
    }: E! i; p3 u$ ?. [7 `! j5 U
    break;
1 s( f8 W- k( y# G   }
1 S' M6 A% _4 D2 v  case 1:& ^" o! T! T$ U4 o
   {
& E- l& j2 G% ]- x, V4 F1 ~    //整理背包( h: d6 e" _5 f! L0 T- ~
    //////////////////////////////////////////////////////////////////////////
0 x  Y* p4 C; ^' q- i8 G    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' _( V$ i4 p! P! P- N6 q" i    //////////////////////////////////////////////////////////////////////////! G( c8 o: J: g& }: F& V8 ]8 H
    //////////////////////////////////////////////////////////////////////////8 L# K+ f1 V: |* E; f2 g0 L
    CInventorySort* pInvSort = new CInventorySort;1 m4 t+ _3 S6 r, a
    vector <sItem> vItem;* m6 h& x& H- Q$ g' s
    vItem.resize(MAX_INVENTORY);//初始化大小
) }; B5 j% [6 Z) \9 c     //////////////////////////////////////////////////////////////////////////
: @, p6 `; C7 d. o  R, R; A- c2 z: y0 R     //填充数据, j- h" j; ]( ]2 N/ s" F: D
     for (int i=0;i<MAX_INVENTORY;i++)7 p; D) D3 E! a! B; D+ D  p
     {
4 ^9 Y* ]. _0 X. Q% v      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- N) P$ [* i7 O6 U; f2 H      if (!pItemElem)! n; r( J8 \( a& o9 @7 ~. A! Z) ^
      {
$ w. u) ~/ n8 w2 D' o9 s9 p+ z       vItem.dwKind2 = 0xffffffff;
; P# s% h; ^7 P; M+ d% y2 V5 r       vItem.dwItemId = 0xffffffff;+ ^/ g1 C! a- U: b
       vItem.nIndex = i;
) {7 R6 r. B$ |) ]+ e7 W; t      }else {: c: ~# Z3 U) g9 V; M, A8 B: m
       ItemProp* pProp = pItemElem->GetProp();
$ w7 P: z6 G: b# e       vItem.dwKind2 = pProp->dwItemKind2;
. G2 W5 S+ P/ Z8 E2 ^8 k( N$ f       vItem.dwItemId = pItemElem->m_dwItemId;) ^% q0 g" u0 H; q! Y! S
       vItem.nIndex = i;& W7 R$ `' S* a3 k% K( P% H
      }; M  E3 }7 O7 C0 H3 p* y: |
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ R" z4 i! h; S  v- T# Z: j     }
3 T& t4 s5 s2 w$ Q4 [     //////////////////////////////////////////////////////////////////////////+ {3 u+ `" m+ X0 p
     sort(vItem.begin(),vItem.end());//排序
! E; |( Q! @1 T7 J/ F* f     //////////////////////////////////////////////////////////////////////////
- t$ P' S3 q  c4 w* @  ]; @2 K     //交换* D* d6 s# D/ Z' k" q: `
     for (size_t i=0;i<vItem.size();i++); q$ |0 l4 W- \0 R1 h* h/ Z8 Z
     {
5 w- s% W3 S1 J, t; L/ a% v9 H      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! u4 R+ o0 e) b) h3 T1 D8 X      pInvSort->Add(vItem.nIndex);
- W( b! s4 S( y$ D3 q; o( y8 N1 d7 Y     }
1 \8 |9 Q2 `6 E, V6 ^$ B0 b     BYTE nDestPos = 0;: K! `" G. x4 f% @' W; A
     for (int i=0;i<MAX_INVENTORY;i++)! ~  }' r) s( Z: F3 q2 m, S
     {; Q0 q9 j* V' F' O. ?0 U( C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 M+ x' g6 I, ?      if (pItemElem)' K. b# G6 S4 D) Y5 n1 T
      {
2 n5 ~' a2 n3 @9 d# [       if (IsUsingItem(pItemElem))
$ m0 C4 q0 F  @5 f       {
8 @5 C3 L& |5 r- I        //这个位置无法放
7 ^0 x3 D1 ~$ z! h        nDestPos++;
" @$ L: I3 p, T+ }% `- |: A' i0 o       }* h6 g! R! b* J/ q: S1 X3 b& O
      }: m  m  Z# n4 g' K
      BYTE nSrc = pInvSort->GetItemSrc(i);
4 t' G0 R! r9 n1 _' j      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# _3 t" h. N, {+ p/ q
      if (pItemElem)8 e& K+ [3 `9 G' ]
      {, ^3 g7 S" h+ L* Z/ x# \
       if (IsUsingItem(pItemElem))3 N( h/ K# B( `" y! Z: S' g
       {7 Y5 `1 _( [% s+ p9 q, o$ B/ R
        //这个道具无法移动,跳过% R" b" ?- N9 M' ~- X( g# d' a( }
        continue;5 ~0 p+ p6 L$ A9 a" |! X  C
       }
; y5 L: G# ~' x% G; [+ N! S      }else{/ k7 ~6 j$ ^; X0 n1 g
       //空位置 不用动
0 T6 e; |0 i6 v1 ?# O       continue;
3 }+ e& S# H. L. c% w# S$ m      }) ~  \2 n2 N. }0 @/ @
      //////////////////////////////////////////////////////////////////////////
- p0 s( s8 R% o. m; q      //开始移动
: H. @& N  X# {! v      if (nSrc == nDestPos)
2 L& }% B8 e( q/ `0 D8 P! a3 u4 Q      {( w3 \- m3 f8 y' U, H
       //原地不动
5 Q. I* Q" j7 x* U- Z% r       nDestPos++;
: f5 V$ b4 S$ i. p+ C( X; }       continue;9 D  s- J1 u7 a
      }
* P6 q* E: w/ C5 f      pInvSort->MoveItem(i,nDestPos);1 s* j* d, D  |4 m8 [2 q  Z- W
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);# \+ ?- \0 q0 x' d5 A$ a. {5 B
      Sleep(5);. @1 Z; q! \# s+ Y0 n
      //Error("移动 - %d->%d",nSrc,nDestPos);
8 c% T% m3 z8 o1 E      nDestPos++;
- k8 R. \6 @: `) S( i3 N  e     }
0 s; L9 ]1 \( ?* E8 Z1 |2 {9 @8 Y/ x  i     //取第一个元素的信息) Z9 v& B/ L) E  {4 \; P! ?
     /*
3 h6 j( M- b% G; @3 n3 n% C1 x     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 ]7 ]6 O! T4 f1 t* A
     {4 V) E& {* |. O. A, m: w* K0 u, O
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' {8 R8 ^1 z, \2 I      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( Z! _3 }% w: t
     }
" s( J' J; F* O( y) v1 z     */
6 F( l2 [# R; _0 N7 M: _    //////////////////////////////////////////////////////////////////////////
) W" e1 m; h0 }, F9 l    break;( L! z" X+ u  x. n
   }' c3 c! m' H) S. g
  }
/ w, s5 ]( J' r! G}1 j* B7 l- j; ?* ^8 O* h
m_wndMenu.SetVisible(FALSE);3 K/ I9 Z0 c9 P6 r  b4 u

# e+ B: W% K9 w* k; R7 i--------------------------------------------------------------------------------------------------------% Y" Q/ h8 w0 |; p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* n0 W) B2 g; a{
: U4 r) Z  u5 B4 E" f" ?! n0 qBaseMouseCursor();
! I% Z- O( K7 i5 T7 y" @}
$ s! q$ @7 J8 U( J# b+ l在其下添加:
8 h6 `3 n* f# V) ]; Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ^& Q& E% H" ^, S2 q1 F; @{' L9 `' L! v' Q3 `2 r6 [
m_wndMenu.DeleteAllMenu();
+ F) l* x, }( i3 _# lm_wndMenu.CreateMenu(this);, Z. t% z( T, X" [. d( X+ B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 l2 C. ]7 x  a% U5 J* O
/ \1 s% I- Z, R. t/ qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 n2 x" s5 @# e5 A% J8 L$ Q{* W* V, X. V0 k7 C7 U! f
  //P以上级别才可以删除所有道具; J( H# L; l5 _" E7 l' {& {  O
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' _3 N6 ]+ \9 `9 Q* f7 }1 }
}3 W$ i; C: k$ b3 j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 J* V- l* n- w8 F5 `/ _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 `: ]1 K( [6 U# ]$ `m_wndMenu.SetFocus();
$ J, o* s$ l0 J}
% h$ r1 L) Z, T------------------------------------------------------------------------------------------------------------
  R  }3 u& z: G& [" z) ^) w% q, v$ C*************************
* @7 ?: }# [$ x, IWndField.h文件
! O4 c* d1 V/ K; z1 ^1 k*************************: e9 d1 }0 ^9 Q4 }/ ]
搜索:BOOL m_bReport;
; c# b* h& G3 E其后添加:3 z6 s' q: [$ L
CWndMenu m_wndMenu;) z' g0 D- ^) Y  i5 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) p( q0 h/ `! r* \其后添加:' m( {% D$ Q: o
virtual void OnRButtonUp(UINT nFlags, CPoint point);) F8 }) a) ]# D' @# k. F; z

+ d, ~6 Q0 T+ J5 N! X
3 D0 t+ `- X/ x& l% w9 [; ^

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 09:12 , Processed in 0.121121 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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