飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件2 F0 w! s  Q, [/ c2 d
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ H4 E4 L0 S' G" u5 x& C
" y* ^( y1 Z# ?, h7 T* z; Qstruct sItem% K6 ]# ^& q8 ~) m. O' @6 q
{# C# x" l! }/ G) u+ o* w  ?
DWORD dwId;
* K9 i2 y. h! {! D% ?DWORD dwKind2;- b% {6 k  ]7 u' a
DWORD dwItemId;* J- O0 @- `" ^! n+ C
BYTE nIndex;
' @: ]' `( m. psItem(){( @0 L% {7 U" j7 H8 q+ d
  dwId = dwKind2 = dwItemId = nIndex = 0;1 [( W; R( m5 P
}
! P) ^8 R) T6 Mbool operator < (const sItem p2)% u, X0 j# c. y+ T1 X
{( ^2 G% j& }# m: `8 w* m; `
  if (dwKind2 == p2.dwKind2)) {& ], E/ ]0 N0 ]
  {1 P' W6 w9 x8 i2 r  Q* P
   return dwItemId < p2.dwItemId;, J' E, b  G3 M/ `
  }else{  J8 z# C: v$ ^+ j& b8 V( I
   return dwKind2 < p2.dwKind2;
. d# O* d: a( p  }
' ]3 s$ w5 J3 ]0 _}
) x2 O, C' v3 h8 S8 \};! L+ \8 m& ]) k
class CInventorySort; f; S# n; Y' X% @- O! E0 M$ f, ]
{. q3 p$ A0 O: c
public:
- ?3 O- A$ d- {4 ~, {  rCInventorySort()6 `8 y8 ]0 z- J# h5 H( I$ C
{
! F  |' ]- b% _! L3 u  m_dwPos = 0;
% |/ y" Z: n2 ~% ]5 Q}
9 U; l2 f3 b& z0 P, @+ v& Y' I~CInventorySort(){}/ N# a9 e* B2 A- n8 ]! }
private:  Y5 [, Y0 X0 k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 u8 b) R  i% Y1 T; K8 e
DWORD m_dwPos;
* f- C& n" }' D* t! W: }" W5 ypublic:
. A. I$ B5 O: f" \void Add(BYTE nIndex)
+ y- z! e  m4 D7 _5 _" I{
6 L0 [( N" g6 q! H# `  if (m_dwPos >= MAX_INVENTORY)
0 |5 q) r$ |" g" k  {
) Y# N# m# a, U6 K- L  ~8 S   return;
) F9 ?# o" ~; I. h  }9 t* u$ [# Q6 S0 Q" d# J7 p) V& _9 k) T
  m_Item[m_dwPos].nIndex = nIndex;) z! p% Q$ |. Y7 [/ O! v
  m_Item[m_dwPos].dwId = m_dwPos;
4 u6 t3 a$ T5 ]$ z/ B  m_dwPos++;0 i: t- D* i9 |. @/ p1 j. i- W7 e% I' u
}
3 g( u/ p! V& n* {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: P  q  [- v- T8 ~0 g
{
& T& F3 L& p9 t. t! M# |! L& L  for (int i=0;i<MAX_INVENTORY;i++)
* F4 K) `% Z& x/ p7 s7 @- {/ C" W  {( L" V! M8 F" Q+ f! @
   if (m_Item.dwId == dwId)! \6 M; C6 T2 M( \3 F. A2 X7 ]" l
   {2 Y" R! W4 ?, H8 x
    return m_Item.nIndex;7 s) |; g; b: ~, T# S
   }
, A- L+ R9 ~, K4 i- M  }0 s! e! J, p3 i  k, P
  return 255;  ^) ~3 \2 ?  g/ X; v$ N
}
: a8 @- K( C: {. p; ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! M/ k. N' E- T0 |. {& Q
{4 c" t  \" b7 u: D& @" Z
  BYTE nTmp = 0;, e* q3 r# a5 R% f- M
  bool bDest = false,bSrc = false;% o5 B! C: v  I
  for (int i=0;i<MAX_INVENTORY;i++)7 h% H. M2 U: N6 V2 p6 J& @" Y
  {
1 O- k6 G/ y6 ?" @/ P1 V   if (dwSrcId == m_Item.dwId)
7 _) D) H  d8 T& R2 X   {
( O( d, q$ C+ `. Y6 p$ v    //id相等 则 改变对应的dest和src2 {  I8 B$ t: t) P3 s7 p
    nTmp = m_Item.nIndex;
6 B5 p0 @2 Y, [, g/ ]3 T& b    m_Item.nIndex = dest;
  o1 E: N( g, v* X$ n   }
+ W' G  v& B5 `) s/ e  }$ D, v, \" E1 X" D( D
  //临时数据保存完毕,交换开始
3 }0 l: u9 H0 l0 a. g* I' W  for (int i=0;i<MAX_INVENTORY;i++)% g4 Q- V0 c" l! l1 V
  {  K, D$ M4 ^3 q+ D
   if (dest == m_Item.nIndex)/ k8 @( {% T% O4 {! e, X
   {3 w- a% F6 }; N* x
    //id相等 则 改变对应的dest和src3 d  X2 n$ g' e4 z1 L
    m_Item.nIndex = nTmp;
8 Q) h. A0 ^: m! [4 j2 F" d   }
6 [6 {* l# x* h6 G9 v1 |  }
8 O! b$ J( f' \, x( {9 j* m. S}
$ O6 K. j; S; Z% Q};
. Z+ z% Q$ S8 C7 k( R-------------------------------------------------------------------------! a( c- R4 U6 Y% j: q# ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); C* `1 i, o( Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 G6 b; ~  k8 J% e; q
紧靠其上添加:
/ R. K$ C# q4 \4 iif( pWndBase == &m_wndMenu )
7 L- ?: E' R0 k1 d2 F1 y{, w, Y/ M9 z3 s2 P7 |8 I
  switch( nID )
% k$ m- }5 u7 U' |# N; X. x1 X1 @" a% J  {
0 W& ]( _/ C/ X  case 2:
- M% p7 ]/ w* J+ q$ v  p   {$ `, [3 q. {9 G+ L; }
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 v% T( w  X  k! @  r    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' x  J! K# Y3 A9 o    {" c! |. k+ B/ u. v" k. N0 z8 M$ t3 l  A
     break;( ~: X3 L0 r! \$ G; D& Z# O
    }
! Z! i! x. t- b9 f' B; l, _8 u    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; j) j7 B+ j! W% z5 r4 p    {0 y  N7 @9 c) x; {# C
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% n3 H5 F5 Y  ~
     if( !pItemElem )0 ~3 |, {# j- c4 t& k% J% D
      continue;
; Z1 N  @2 p6 ]& S# }8 r1 z5 `     if(pItemElem->GetExtra() > 0)
" j) n* \9 y0 h- c3 H      continue;
# L/ }, Z9 n; G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 u) d& D8 _8 \5 |: j2 a% x      continue;$ C, x+ y+ e/ Q* l! z: o- [
     if( g_pPlayer->IsUsing( pItemElem ) )  n4 g0 T' N6 n( }
      continue;
3 h" i4 ?% }& E9 l     if( pItemElem->IsUndestructable() == TRUE )
( x: t/ X+ D4 F5 Q     {) A: f% r0 w0 m' k! [" j/ o
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% N1 i( ~8 Q3 _: }: \0 V      continue;
7 ^% J; l/ _2 x. L& V( M     }0 F7 \( F# h2 P- c0 ~6 P# `
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) R/ U% b. k% P# v2 d6 `; \, J  p3 o
    }2 V% J, L2 U+ |, }/ m
    break;
& q% x) R1 i6 o8 z# l: C   }( S" ?: j- ?7 ], _: _7 {
  case 1:  }5 `% u* o% P' @/ w. g
   {# `0 t* o5 i5 U4 }  Y$ N8 t/ c9 @
    //整理背包
) s4 {/ x7 ^5 ~$ `; g: r    //////////////////////////////////////////////////////////////////////////
8 J2 q. T. p" U! n    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 n( {3 E# w/ i( o0 @
    //////////////////////////////////////////////////////////////////////////. C$ F8 Y* C6 c: v
    //////////////////////////////////////////////////////////////////////////
( X; r$ I' L3 E. E0 _+ W) q2 F    CInventorySort* pInvSort = new CInventorySort;# b& @3 V( U. A$ g% Q8 e
    vector <sItem> vItem;
+ D; s! w( I& d    vItem.resize(MAX_INVENTORY);//初始化大小
, i5 W4 @, @, N# C# V     //////////////////////////////////////////////////////////////////////////9 y; A" _9 L) _. Z
     //填充数据
, G2 }1 o, c+ X/ m     for (int i=0;i<MAX_INVENTORY;i++): h  {' k. U' P7 e1 W
     {# T! _' I/ r: }, c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* S" _* c* d6 S' g0 b8 g      if (!pItemElem)
3 c& @3 ^! z1 a) W. r      {! Z; Q, B5 f7 _" M: @
       vItem.dwKind2 = 0xffffffff;
+ W. a- U9 b) R. ?' S: e       vItem.dwItemId = 0xffffffff;3 S( Y4 U. m/ l% Y' ~4 ^9 o
       vItem.nIndex = i;1 X1 T9 ]0 o2 V, N2 Q8 z) N) e6 n4 S
      }else {3 q7 X  f: Y- h- f0 p1 }
       ItemProp* pProp = pItemElem->GetProp();7 P/ u1 j: x) y  t. X( ?
       vItem.dwKind2 = pProp->dwItemKind2;
7 Q. J0 [4 i: K, \       vItem.dwItemId = pItemElem->m_dwItemId;4 D1 X% C; d$ F
       vItem.nIndex = i;8 E& \0 ^! W2 h9 Z% A
      }
* Q2 b. v) J/ l8 W6 C) U      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 ~+ D5 o4 F6 j8 C- n
     }
+ J9 L  a8 S6 t! p# K     //////////////////////////////////////////////////////////////////////////( I! g+ Z4 V/ {/ T. v
     sort(vItem.begin(),vItem.end());//排序, M+ q9 E' U3 B7 r- G: D0 @
     /////////////////////////////////////////////////////////////////////////// X. f" n6 V( z8 [  n; Z* _2 }9 {4 O4 i
     //交换
% g' s4 W1 F4 K' J2 F% |     for (size_t i=0;i<vItem.size();i++)
# g% C4 ]1 \4 j. ^9 }: {     {
  W6 ~  H1 O5 U7 p, X5 X      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& f( O# F: [3 y: X4 T& E      pInvSort->Add(vItem.nIndex);/ r+ }. q9 Q, y) W
     }5 J+ I+ Y( r% L$ ]" y/ T
     BYTE nDestPos = 0;  R, U8 C' {4 Y; ~- X8 A
     for (int i=0;i<MAX_INVENTORY;i++); J6 e1 E1 Q* H$ ~  r
     {& e. p) O4 }' c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 }- B  B5 O/ s; e
      if (pItemElem)2 @, Y; ]% S! n- m
      {
' ~- G, M6 {/ y& [       if (IsUsingItem(pItemElem))0 K0 R$ i5 c- U: Q' \
       {
9 i: T& R. E! p; b+ D, Z        //这个位置无法放5 a. o+ F8 d# o7 K. ~# u
        nDestPos++;9 r' \; v; a/ U  r9 |! `
       }- Y: `3 a6 v6 R6 G1 N* J
      }5 Q5 g; {' ^/ h
      BYTE nSrc = pInvSort->GetItemSrc(i);" b% H/ _2 y) V. r2 _# e1 A" d4 R
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' V& b/ W5 K2 b% D! _/ i. X7 z
      if (pItemElem)
/ O; D9 r$ q% X# C9 m) [      {
# L2 y7 w% F" b, w% x! ~5 q       if (IsUsingItem(pItemElem))
" g' F8 f3 j0 n0 X0 e' T       {
1 K: u/ b5 c; h, T' M        //这个道具无法移动,跳过
7 R7 g' H6 b& Y! T$ w+ ^        continue;( \# j' `/ C7 Q. N1 B5 t
       }4 Q- A/ @! S  b
      }else{1 E0 I- l: t3 Z+ R, |- K. a. J& v* P
       //空位置 不用动
* |" i/ {$ {7 a+ K  N0 b       continue;" y" P! S& F4 ]5 y0 k5 k6 _) g; R# b
      }
& E+ j4 I# o* S% ^# M4 H3 @. f      //////////////////////////////////////////////////////////////////////////
) L7 P/ c) [6 i% r  ]! L      //开始移动& }7 f( p% @  [  I, k, P
      if (nSrc == nDestPos)
: f- S- M) `+ r: \- w# @      {
; i! _, A6 N5 Z' L5 j       //原地不动
7 @% R% e" a* B       nDestPos++;
2 K, f  b- \. ]2 ]4 i7 ~       continue;
" h2 T9 w7 }: l" Q      }# z5 E! r7 _( ]# ]1 A
      pInvSort->MoveItem(i,nDestPos);6 T" S: l3 o9 S  f
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);- G! ]5 P* s7 k( `/ i8 |
      Sleep(5);
( X* S: k7 ?0 m" F' R      //Error("移动 - %d->%d",nSrc,nDestPos);! x9 C- u/ A; _+ |9 q, O
      nDestPos++;5 v$ _: l' [: d4 p3 y
     }
3 |8 T& o; o2 E     //取第一个元素的信息: [  X1 L) C, I, ?$ a! z4 `
     /*
! N! f' i. _0 x# C- ^. A6 a4 D     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% {4 }8 t/ i( o# l     {2 A2 i! j4 i) ]8 M
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" n7 A' X8 z1 g$ Y: \7 T! W      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% k1 G* `3 B, H- A; b$ L+ u     }- A  Y! d4 A) q; L4 m
     */
( r2 A/ @( f+ @* y" s% z    //////////////////////////////////////////////////////////////////////////
+ e; z$ V% V! D! m" R    break;4 q% h* I  w3 r+ _5 r" [
   }# E$ _3 r' g# v. D5 L+ V
  } * G1 Q0 q5 x5 f2 U, u1 \, U
}: m2 r: \. e3 X! b# l
m_wndMenu.SetVisible(FALSE);" W% u. @( M- O$ C' c; p
) I: }! Y7 d) t7 B9 W
--------------------------------------------------------------------------------------------------------
. c4 _: b! D3 v2 _. D# _1 b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)  @- U/ b4 H6 L; }* M4 s
{+ l% e3 j5 i4 f$ U
BaseMouseCursor();
/ _9 _% Z' A, v: ]}5 Q) X, W  a$ J( v: r
在其下添加:0 @- E. C5 D2 g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 r5 b$ h2 [4 V0 i+ r6 w& c
{! k0 w( e; J0 Q/ A. {7 w
m_wndMenu.DeleteAllMenu();- N8 N3 o! r  G6 F4 V
m_wndMenu.CreateMenu(this);
8 w5 n4 y( l5 H$ }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- _/ J# E# c! v/ j

  v7 @  V# }% W# w  y! B/ kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# t; C/ b1 b. T, P6 I, |" f{
: Q" X% k) h7 G  //P以上级别才可以删除所有道具6 l4 X: A8 C" D* s3 x: R1 F
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( b0 L# G6 ]' K8 a6 M6 p2 \
}
8 j: p8 z& A$ Y, f  qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 {' t, z4 ~! \- t( q, x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% z" M! ?& L9 l7 V7 Km_wndMenu.SetFocus();
! z, `2 X1 [/ \7 }9 c* j}( n  ?8 f' a9 N9 a8 ]9 g2 Z/ K8 `, \
------------------------------------------------------------------------------------------------------------
& S9 v) u7 Y6 e- Z5 A) O  b) c6 s*************************
2 z, w1 N  @7 J1 l6 d8 p; D' r8 iWndField.h文件
* P2 m4 ]2 G% P4 Q*************************
! k; Y% J  d! P搜索:BOOL m_bReport;7 ^5 p" |5 _) p2 ?9 r' O
其后添加:
% _; ]8 `8 r$ H  m& E7 j/ X8 x* |CWndMenu m_wndMenu;* Y) s# V5 N' S& H/ p7 W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 d' Z! U) n0 M) [6 a其后添加:
# h( ?. l5 G7 B/ \) l$ Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ \; v& `! K1 F1 {. o
# v% j4 ]' Z+ {9 j. V' M9 r) D

+ ~3 v& N, Z3 C$ u' ^

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 04:28 , Processed in 0.069515 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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