飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
3 W  k7 h8 y3 Z  m+ v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 C1 c) B! T& S% h% g) b  v" c% Z; s- H. C% ]( ^  ~
struct sItem
& q$ Q0 g. M2 {1 w{
% j( B/ P( A9 M3 i/ }DWORD dwId;
3 ]) |- O6 N) s! j- R% ?DWORD dwKind2;. C% \3 o6 C6 |& A
DWORD dwItemId;5 u2 m  `9 W6 V3 s7 X
BYTE nIndex;
0 F  j- \3 x5 c& b* EsItem(){+ q% ~: Q! Z4 Z9 G
  dwId = dwKind2 = dwItemId = nIndex = 0;
! a0 Z4 j: [6 |/ _  w3 v! E1 P}
( b4 v; m+ Q1 D, l/ |1 |6 @bool operator < (const sItem p2)
- y5 ~- v4 c& |6 N; {: `  b4 X{: P* L% M: n9 ~0 n$ M6 p+ E* Z, |
  if (dwKind2 == p2.dwKind2)
; t1 p9 L& P8 C) |6 S* m  {
. L/ p9 w/ p( G# L- T! @. `9 n   return dwItemId < p2.dwItemId;
; b) O8 w+ G2 y$ r  }else{+ E8 U  _$ p, P/ ]$ t
   return dwKind2 < p2.dwKind2;
7 `% s( _5 a9 D# B( R  }; W/ R+ v( f2 t7 C& p# s7 Z) E/ Q
}* t: M/ g5 S9 X0 l/ \: e" b' U
};
# p: ?" W- n" C9 o  `% K9 W/ @class CInventorySort
) }/ a# G) t! {/ |{
+ L, x0 o' O+ U- @6 Wpublic:9 E- ~2 r2 f) |9 q, D8 ]
CInventorySort()7 W' {  m. x; r4 o
{. {; s5 {5 n+ }& k' q+ A( I( N) v
  m_dwPos = 0;
- @, ~# v" t+ l5 _+ y6 I6 Y$ @}' E: A9 H& c% j5 P7 w
~CInventorySort(){}% n3 U1 f. x) \  ?. ]5 b
private:
: P4 \; q) o1 n+ }7 GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y- |! H4 k; Z' {3 F( s5 VDWORD m_dwPos;3 O7 ~, d* `5 f0 ~6 R! S
public:
. h& \  O# K* R/ c2 @& ?void Add(BYTE nIndex)+ x) C1 t0 ~6 b+ M
{
; Q( C- ]0 ~1 c% i+ H5 w  if (m_dwPos >= MAX_INVENTORY)
8 q& r+ M9 V$ P: H9 M  {+ i+ C- s+ P& i% ^  M1 E, A
   return;
% B- g9 t( }- `1 K4 @  \1 T& y  }
. [- |- |8 o( ]/ ^  m_Item[m_dwPos].nIndex = nIndex;+ Y! u& _9 E5 u' D' I
  m_Item[m_dwPos].dwId = m_dwPos;
' Q; \# y, E  h$ {1 s  G2 s+ T  m_dwPos++;" K( ]/ r) e/ e8 g2 d  ]' e1 a$ p
}
9 q' S. w& W6 x. s* }; Q6 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 S- S1 g* [! X: _, R{% G0 O& K  H* w) A6 f- R1 O
  for (int i=0;i<MAX_INVENTORY;i++)" ^# o% R& {- h2 Z/ t4 g. t" j
  {0 F: Y- a" j' j1 _% u; T
   if (m_Item.dwId == dwId)9 [4 s- \% v, C3 q
   {/ n" n" s1 W& `, j
    return m_Item.nIndex;
- X- Q& T- U4 }  d4 h+ X3 f5 m3 T! S2 j   }
2 N: D2 X$ Z* J" x! Q# W  }8 b+ z( B% I5 h6 _( K/ m+ ]- V
  return 255;
0 I( X5 h8 ?) d}6 f& v& ^% B0 s. E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" {; F& x1 f  d0 N6 I0 B
{
" O$ H* K& p: O: K' J9 e; S# D# o  BYTE nTmp = 0;( E: }  X, p5 s  l$ x3 ]* O
  bool bDest = false,bSrc = false;
8 l) w0 i; ^9 }" A9 o  for (int i=0;i<MAX_INVENTORY;i++)
" K5 u2 l, u' L3 C  {/ c0 T: M2 O: f, w8 f8 e
   if (dwSrcId == m_Item.dwId)2 p) @( }4 @5 B. ]7 \1 k% c- i/ i/ @
   {& ]  r# [% Z4 ?% n- W' I' S
    //id相等 则 改变对应的dest和src
* V0 T  Q) b, @6 H) W( o' @    nTmp = m_Item.nIndex;# O6 U5 n7 n7 X; ~+ i
    m_Item.nIndex = dest;) o. d, ]4 c# C  I% z
   }% `# M$ T6 d3 P7 t: L
  }; c/ t4 H6 M% t9 P! {* u
  //临时数据保存完毕,交换开始3 N$ M3 _- \, s" N! T) H* A
  for (int i=0;i<MAX_INVENTORY;i++)
7 s0 }9 I$ t/ z0 M8 X  {
. @$ D! Y% b9 L" o   if (dest == m_Item.nIndex)
1 R6 {: E3 @& s( K   {
# G: U/ s) I6 \5 W    //id相等 则 改变对应的dest和src' ]0 p; I$ ^- S* m
    m_Item.nIndex = nTmp;) c$ s. \2 R1 f6 \
   }
; I( [( W1 k" v: ?  }# k* B5 w. n: |' b& w; B
}/ n2 W$ }5 H/ O% ]& e. f" k5 ^
};
$ c5 T/ q+ G1 a/ A" q-------------------------------------------------------------------------
4 T! {9 P" Z/ l9 n) |9 L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 r/ f% J" T; _; J
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; M) V  a2 [+ s
紧靠其上添加:: y" V0 @* u$ ^8 w5 R
if( pWndBase == &m_wndMenu ), f& Q1 g- q/ f  D& Y
{( H" U2 `) u! ?9 e7 W6 s) Q
  switch( nID )9 g8 p! ]9 K8 F. @& z, Z( l. C
  {
- V4 Z: j; J7 K$ e6 R, O# o  case 2:0 q+ R  ~; N; P' `9 Z
   {
: a$ M- V5 x$ W1 Z/ K8 |. K1 k5 B    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! U* {6 @0 {+ v6 m7 q2 b    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ?) g1 j/ H- `  s  ?0 Y. r8 y
    {& @3 ^; c# n! j- k
     break;: D7 r8 k/ M" c, y) A* m4 R
    }
9 c" }" ~. o) g/ P; z) x( W    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): M; t2 N* W5 g# j* G; m
    {
0 o7 {4 R# a8 q+ M7 _9 C     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ^) Q) a  a2 M+ z
     if( !pItemElem )6 S0 g; a5 z+ z8 I
      continue;+ e2 O! y6 V; y2 m; W5 ]$ b: T$ t
     if(pItemElem->GetExtra() > 0)  _. Q) `+ H5 s
      continue;
: }! r' R1 [1 k: }     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. l* |8 j1 H6 E3 m6 \      continue;4 \. c, C! Z9 l  \
     if( g_pPlayer->IsUsing( pItemElem ) )
, V7 e, M7 `) Q3 O8 ?      continue;  k! y% h2 ?  L7 c+ e
     if( pItemElem->IsUndestructable() == TRUE )
0 q4 q& S/ p, x' y     {; g- f$ B6 N% [% t; h
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" w3 A% E4 P7 m      continue;
3 j1 f8 v, G4 ]( D     }7 ~* }7 J5 V" A  ~& M
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 ]8 S& j" w0 R3 l    }4 S0 [2 T! r2 }9 j( s
    break;
6 ~8 P9 e- f2 w5 l6 k   }$ C. ]# c: S  S& C+ b
  case 1:2 m+ x6 f, i% j% m. B/ j+ x
   {
" l% G, ]9 X" o+ d/ d    //整理背包( {+ k8 _; a1 n: T/ N* \  N0 R
    //////////////////////////////////////////////////////////////////////////
6 b7 D! h& r* r, g2 v- O/ s- V& A; U    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 [0 f7 J. }1 _2 e( M: O# X5 M8 _- A    //////////////////////////////////////////////////////////////////////////
' K6 g: S; c5 m" M: c+ a) f    //////////////////////////////////////////////////////////////////////////
7 v  v+ J' M: b. O    CInventorySort* pInvSort = new CInventorySort;' X) }9 o2 S; p' q$ d
    vector <sItem> vItem;% l, I. O3 @9 e; u
    vItem.resize(MAX_INVENTORY);//初始化大小, E2 i4 S% Z1 B# L, a
     //////////////////////////////////////////////////////////////////////////9 ?+ L3 d7 y: C; p
     //填充数据- B1 t$ e0 f* z( m
     for (int i=0;i<MAX_INVENTORY;i++)
& M$ g+ s9 t# N4 O+ V6 K     {, h* m% r9 ?; Y1 v
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. E5 u* `0 g: s0 r% w
      if (!pItemElem)  t: U4 j% E3 z% W
      {( M3 w- O. X/ U& [. x
       vItem.dwKind2 = 0xffffffff;
+ {1 J5 X& W6 I5 N! A! {$ L. Q       vItem.dwItemId = 0xffffffff;4 z& V- D7 t1 v. v. J3 A/ g
       vItem.nIndex = i;
5 ]3 V, [: I% p+ A; K4 h' C3 Q      }else {
  p5 C) m  ?) z# x" ]       ItemProp* pProp = pItemElem->GetProp();
; K* ?" n5 e( i+ x       vItem.dwKind2 = pProp->dwItemKind2;
' x* W/ \0 K; K, \       vItem.dwItemId = pItemElem->m_dwItemId;) T, w% f* M& D6 G& @( f7 P
       vItem.nIndex = i;2 h' G, V" ]6 |
      }/ Q. w# \! N0 u( l8 v
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& W/ g0 L+ W5 W" G  K6 c1 \
     }- ^4 C! y. K) Q) X6 k. |( s
     //////////////////////////////////////////////////////////////////////////
3 w% b9 f- r9 p% u     sort(vItem.begin(),vItem.end());//排序# o# P3 l7 X+ m' A3 H
     /////////////////////////////////////////////////////////////////////////// H, \8 V) a1 P2 O8 n& x
     //交换$ |& K3 m% Z  C% `, N- P
     for (size_t i=0;i<vItem.size();i++)' s. x; N' V+ w- u6 _3 B% x- u6 S
     {
; l, ?% v+ W0 x- D. J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 T4 ^3 Q5 I2 Y8 ~7 m
      pInvSort->Add(vItem.nIndex);6 D# S  ~* w  p+ N4 I" p; q( a9 m
     }3 [; I! l, Y& J# t# ^
     BYTE nDestPos = 0;
2 t4 c; W$ l! S) K$ L4 F     for (int i=0;i<MAX_INVENTORY;i++)
" d* w! o' K+ S! y  s; h# q     {
/ N/ x# M; A  |9 F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, [% t9 P' o$ E: M! ?* T- G; V, g
      if (pItemElem)) ?% f/ F7 B9 i5 C+ I
      {0 g3 H$ b7 \/ Q: ~$ P, P
       if (IsUsingItem(pItemElem))
. ?  R3 O( C, E0 q; D       {! D7 X- j$ _3 X6 l1 L" W" S* J
        //这个位置无法放4 T* K5 l* Z  Q4 }- A
        nDestPos++;" A1 F& q! c0 g4 z$ k
       }
5 [* y/ C1 z3 @0 u0 Z$ A( x; U      }
) C  T, D, L$ \      BYTE nSrc = pInvSort->GetItemSrc(i);$ F" c1 ^" L$ S: r; q3 x" E
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 T6 g3 T( u3 Q3 s# Y      if (pItemElem), B( |: T) T  j/ W! w" _6 p
      {
! N9 W, s; Q6 {+ S2 k3 |       if (IsUsingItem(pItemElem))  s. {: q( b( _  l6 D
       {$ x2 y4 s6 r# b) u. |( [5 u
        //这个道具无法移动,跳过
7 V# J: {8 e( b8 Z7 f        continue;% W4 l) b' x8 T: ^# I
       }2 S+ w7 e2 T8 d8 Z+ P! d; B1 G, E% X
      }else{1 h: a/ }1 j3 a0 L6 ]+ n
       //空位置 不用动
( H3 g( r  i+ x  c/ [6 N       continue;6 [" a  H( @3 [4 S! W
      }- L$ q* @3 [! w/ g& Z
      //////////////////////////////////////////////////////////////////////////# w3 W9 f! Q) B" G4 w4 I9 v+ ?
      //开始移动  G- P, X9 S: M& {4 g
      if (nSrc == nDestPos)  l7 i! c6 q7 W7 D/ @0 X4 O
      {2 }0 |0 T. P0 X" v0 n1 j
       //原地不动! m0 t8 I- T+ ^+ Z- a% r/ e# _0 R8 q
       nDestPos++;
' T5 q) R$ H* M. ?% |       continue;( ~: g$ i: L. w9 {% ^) b
      }
0 I+ v- }& I; s+ [      pInvSort->MoveItem(i,nDestPos);& Y/ `  y7 p/ c% V. x4 \
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  M  p& b8 @" w  H3 W
      Sleep(5);. [  S4 p. K7 K
      //Error("移动 - %d->%d",nSrc,nDestPos);
& T, ^2 e) l& m% S+ v. N# D% Y      nDestPos++;% C+ Z, Z- ?! i8 ]  g
     }
0 x! U8 f4 r% G2 g) _8 C6 j5 a     //取第一个元素的信息
7 r6 d0 J, Q% f& R! @6 U4 |5 e     /*4 W8 Q9 `  d* z4 C' f
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); w# p# z6 Q7 ?+ K6 Y/ s
     {6 c0 K6 m9 Q) s! ~
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* o; h* o, a8 H5 v7 C      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 R% A, m, G0 ?     }' d9 C* Z2 T9 V2 x9 D7 ~& s. A
     */7 i  K$ U6 g- k8 Y
    //////////////////////////////////////////////////////////////////////////$ `4 A( U% p+ x& U1 `4 Z. _
    break;5 p  {6 A; R6 L4 }" D
   }
8 p" l, d. O7 `6 M  }
8 Z3 V1 O5 s4 M& _/ G3 X  w% ^}( g% I. d! \& c7 Q: B5 `
m_wndMenu.SetVisible(FALSE);* P+ s8 H. D" A5 c

5 w1 S% U3 W5 v& j; ?7 K/ S% u--------------------------------------------------------------------------------------------------------9 e: P7 V/ [) O# q8 m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 e1 Q9 _3 \. W' i
{1 ?- q6 S7 K" P* P7 n  h$ L
BaseMouseCursor();$ M2 z7 x. z; m, K  z
}; G3 A) x  X% \7 ]" V
在其下添加:2 R4 T8 T) A2 J, A# L! K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 \3 f+ E/ _  g& g; A: ?
{# B9 \7 M/ z8 R0 }9 w4 y! R+ i
m_wndMenu.DeleteAllMenu();9 G; C4 q8 n* X
m_wndMenu.CreateMenu(this);
: W8 ^4 q8 r; O  K4 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' f) v  J& b+ o0 N3 h! b' C6 J

5 c$ }1 `+ ^, ~: y4 Z3 pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* O! m: Q; r( g" ]. M( J+ P{" u4 |8 V: S0 I* S
  //P以上级别才可以删除所有道具
1 Y' @" R# O, P0 I9 r  b: M, Y  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% x, V3 p3 o0 z1 _' o  e% _0 ^1 [}
8 P$ x6 @1 `8 n0 X- g/ fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 _3 }/ ]( Y6 t- l: t1 `5 J+ q  Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 a* W' A/ N4 Bm_wndMenu.SetFocus();  c5 l5 p9 ?( _& d- S8 g6 d
}- t$ H8 V0 J( N' E9 U' T
------------------------------------------------------------------------------------------------------------6 X- _/ j. n5 z9 E
*************************
/ o3 D3 f2 b1 u$ i- ?2 {# IWndField.h文件
1 o/ A! t& X4 j8 s  q3 ]*************************, ?1 l3 B' R/ J& D( r. A
搜索:BOOL m_bReport;% I( G( m7 j+ O  y/ s
其后添加:
1 x7 s  G* A  I: L: {4 e& W9 zCWndMenu m_wndMenu;( w7 Z* M( F8 c" F) c; H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 q- I" T5 c4 f, y2 X' z! x
其后添加:
6 e- I; g3 z& C- y4 H8 p' Svirtual void OnRButtonUp(UINT nFlags, CPoint point);  A5 x0 o" V' K2 F. w, p

. O$ P: z! y" A9 c9 g, G: W' e& q$ N. ^2 w

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 13:15 , Processed in 0.123655 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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