飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 \/ E" s; X) a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* k+ C! ~+ l6 U% i

8 i2 [  y. ?+ `6 @3 z! F- Bstruct sItem
+ s4 V/ m/ i" ^7 _, |2 G{
0 L0 A( I7 W9 N6 xDWORD dwId;7 |7 E5 d: v6 Y- ^
DWORD dwKind2;
0 L/ y7 G, T$ v6 {DWORD dwItemId;
& K! e6 s! s& eBYTE nIndex;. ?; u( y0 p) e/ C" [+ g, Q
sItem(){
% ]6 Q  e0 E- `* u2 d# E: F2 S  dwId = dwKind2 = dwItemId = nIndex = 0;: ~1 e4 D4 e/ z9 I" }
}
" }: L0 t6 E% s; Mbool operator < (const sItem p2)( m5 S8 x2 H* K' c3 W9 L
{$ w4 x5 r* x8 f8 w- V
  if (dwKind2 == p2.dwKind2), ]/ ^1 A- m' b
  {, j" \# T9 ^3 M/ r) R+ o
   return dwItemId < p2.dwItemId;
, s6 q0 n% ~$ |0 L7 D2 Z  }else{5 l6 C  o9 @+ w
   return dwKind2 < p2.dwKind2;
4 j5 W3 M: \1 f+ w/ g6 k7 X  }1 {# P6 U0 K* d& E. G8 S, E
}9 T3 H3 s1 l4 \2 }* o
};0 O) B6 ?2 i. l- L+ v
class CInventorySort7 K- O& }2 _& I  B* l: [3 \
{
0 A0 U2 C, e, s8 V' l/ ]public:, }+ [; r  P9 n, p( a5 Y
CInventorySort(): g. X: q0 \2 P3 Y1 j) V: {: M
{1 G' j. j7 N. C& k7 R: ~
  m_dwPos = 0;
. r6 ~. e! I1 v- X! ?0 G6 @# v}+ B% x9 a* r) R4 \9 f
~CInventorySort(){}
, b% U8 g4 X5 P- f4 v" iprivate:
! {" o* I8 h) U% m0 e9 a/ gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 L1 i* Q2 J9 q6 u  z& U* u
DWORD m_dwPos;
6 y- j7 I6 H2 tpublic:6 d7 Q+ K& O2 a9 y4 D
void Add(BYTE nIndex)! n1 U' [) I" r; n6 j- y" O
{4 [: X  p/ c$ ~  [0 u
  if (m_dwPos >= MAX_INVENTORY)3 j% D5 D+ e6 K" s, {3 F
  {3 W2 D3 p; G# I
   return;
' k& K, G1 E& P9 T' C, e  }
9 d' J- k. Q/ G) O4 g  m_Item[m_dwPos].nIndex = nIndex;/ Y% z$ d2 L. T! B* [
  m_Item[m_dwPos].dwId = m_dwPos;
5 `; K0 M$ T1 c. u' r5 L  m_dwPos++;  f! u7 W  ~) h& b* R
}5 k* q( B% U. l0 q$ a5 }- y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 H2 k+ @$ T8 F9 ^* v" m
{/ {: k0 e$ m* t8 s: y( E5 _
  for (int i=0;i<MAX_INVENTORY;i++)
/ G+ T6 Z5 |! J4 B/ f3 b  {
& H' L2 p; O9 W1 V. K1 x( t( f3 O" a   if (m_Item.dwId == dwId)+ p$ f, Q& S$ A4 d2 X
   {
7 o* ?7 ?" a4 e& O* y( n* i    return m_Item.nIndex;
; s. C, g! I" o   }
9 {; Z( W* u+ b7 U% I  }
: H/ ^; s2 |% E& a! }' V  f+ k  return 255;
. f$ }" F; c# y9 C7 g}: O- _% M" y7 _' M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# n* N4 m) p* C/ o. i
{. @* T; a0 T) U8 s: s
  BYTE nTmp = 0;- d' H3 W2 ?" n: _, i$ ~& H5 c
  bool bDest = false,bSrc = false;
- i( a+ S+ Q5 W# q/ A  for (int i=0;i<MAX_INVENTORY;i++)
% d% X/ L1 m% v  Q, ^( s" m  {$ s' @) D# @+ d7 m( P
   if (dwSrcId == m_Item.dwId)3 n8 e; {, b$ r
   {
# h9 Y# B- G) U! ~    //id相等 则 改变对应的dest和src  i) ?/ m/ T4 a/ L
    nTmp = m_Item.nIndex;
3 n7 K+ n, q6 g4 i* G    m_Item.nIndex = dest;& ^' \5 u2 S! Y: Y8 C- V. b  f
   }6 ~' z9 j4 w3 C/ W. X
  }& n( H' ~1 A. L$ M2 \/ X. i# z8 s! S9 g
  //临时数据保存完毕,交换开始; ?& K/ ~. b# `1 E8 U
  for (int i=0;i<MAX_INVENTORY;i++)
% n( z+ c" d' t: S* G$ t  {- s8 e* M) W: `6 q7 ?+ B1 y
   if (dest == m_Item.nIndex)
3 k; i, S9 F; V/ a7 _) c   {4 E) ]  `: m7 o$ D6 ~) M  P# s
    //id相等 则 改变对应的dest和src' M+ ?* f* \0 f  Z: |
    m_Item.nIndex = nTmp;
8 y& `7 x* D0 Y0 _, M/ |   }( N1 D% R  w& E! u0 j# E4 R
  }4 H4 M, M0 c% o/ |. n, f  F
}
# V* B- J! X  Y  |( w};$ _2 A, f% ]( Z6 Y3 Q
-------------------------------------------------------------------------
( Y  z9 ]/ e3 K  k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 C! z# P) ^$ h1 d& |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% ^6 W- d6 G- Z$ M1 L! |7 O2 ^+ k
紧靠其上添加:
3 a3 j0 z- K8 m" ]7 t6 b1 }# Jif( pWndBase == &m_wndMenu )
9 P$ c2 z2 \( A& d3 E- }{
' @9 |3 c* D: S7 ~) [  switch( nID )7 P' }3 C9 [0 \$ ^2 a- y4 _
  {6 R- h$ V9 C( b& q/ n" }
  case 2:
7 u& f, `6 w  j8 K! X; g: d. v   {/ n! a- z% y7 v! N4 }( u5 i
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 K. U9 q( n* T
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 L' c; l+ d- x' M4 }    {2 _2 k  ]4 v3 E8 i9 W# c, B- M1 Z: s2 D
     break;
% V* K: U, r* n( m0 q    }
1 s  t; N8 N6 }; W% L    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 k% _! o0 ]8 g% L: i5 ^    {3 V/ I. [$ V' }, Y+ r2 x" S
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 W, a( ]: j0 ^, ~     if( !pItemElem )
; T/ g! w+ V0 ^3 E: |      continue;
8 |+ D$ E  O0 u     if(pItemElem->GetExtra() > 0)4 R' b. r3 e% S3 v( t3 \
      continue;; q4 ^- ]4 B; V7 [6 _
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- F1 T) T6 W* W( P      continue;9 z2 M% V" ]6 M
     if( g_pPlayer->IsUsing( pItemElem ) )3 q  W9 R; J# y( a7 T) @! }
      continue;
3 K6 u. w* d4 ^/ i4 A     if( pItemElem->IsUndestructable() == TRUE )8 s2 T) I' u/ \9 }
     {/ Q& N( N) b4 ]6 e6 C3 t* N8 o
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ O  ^8 d4 ?; X1 H      continue;
: L6 e6 C- Z2 v3 E1 M$ P  V     }
3 i  p% u$ N1 w$ |( Z     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 @* ]- j0 n% p: s
    }3 @: c1 l7 m8 o& F4 f
    break;
- X- V' J; J4 F7 k; p$ g$ t5 ?" F   }
$ F' b5 l9 v3 S8 H: T4 k; l  case 1:, z2 s6 `; W- g
   {+ T2 @4 Z% r# Q+ w
    //整理背包
4 z4 M1 e0 X7 W" E+ ], ^" V% V    //////////////////////////////////////////////////////////////////////////
( y0 M; I( S4 o" ]# I    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ E- i5 a& c: p* K1 f$ n    //////////////////////////////////////////////////////////////////////////  P  W/ ?# W7 r
    //////////////////////////////////////////////////////////////////////////
& h. D: Z, f$ Z# r" e$ I% e    CInventorySort* pInvSort = new CInventorySort;: v5 R* G! M6 W& j
    vector <sItem> vItem;3 C5 g7 z) c1 c& C% `# F
    vItem.resize(MAX_INVENTORY);//初始化大小
0 ]- Y1 q5 B& D! G9 `) f     //////////////////////////////////////////////////////////////////////////' X& c+ M! C, \4 [) K% J' Y) U
     //填充数据& F& Z( q1 G& h# v" ~" j
     for (int i=0;i<MAX_INVENTORY;i++)3 _% S: u/ Y: N% V  m
     {! ^4 r9 d( o. T9 l* H6 v" B+ y; m6 ~
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! e8 v# D2 ?  M- L" a! y. Q  k      if (!pItemElem)
5 ?; N) ]& T5 G      {
5 H! |1 s( ]! @4 |$ K4 r1 a" X       vItem.dwKind2 = 0xffffffff;
0 e! @% x4 k* V! _' j+ F3 t       vItem.dwItemId = 0xffffffff;7 X' B+ Q9 w: s3 _1 Y
       vItem.nIndex = i;
" o/ d1 T7 z3 V# }% W& g) z      }else {
: J4 t' x' N7 L$ M& d       ItemProp* pProp = pItemElem->GetProp();
4 V, g) `0 Y5 H) Z+ H       vItem.dwKind2 = pProp->dwItemKind2;) p$ C3 J5 A% \! g% ]3 e
       vItem.dwItemId = pItemElem->m_dwItemId;' p2 \  l& [* {6 U8 U
       vItem.nIndex = i;
4 b( ~; [6 J6 U: V5 b3 M      }
4 _( A( P  C$ y/ o+ b5 _/ U      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, Z1 `0 n. K/ K* c: R% @, R  m  u     }
. v6 I1 ~. v. j     //////////////////////////////////////////////////////////////////////////
+ H9 t9 O" {& k4 u" j, q5 N/ ~     sort(vItem.begin(),vItem.end());//排序% D- k) H3 @5 I' U
     //////////////////////////////////////////////////////////////////////////+ ?+ H+ ]/ P, f$ `
     //交换
; j" C. h% u. @4 c) w3 t     for (size_t i=0;i<vItem.size();i++)4 H, j& E- @+ U& }) q# M
     {8 Z5 E2 c1 I% u5 j
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( z0 ]3 \) N' s0 e4 l" v' B/ x      pInvSort->Add(vItem.nIndex);
; @2 k* K& h/ j% F0 s     }7 c5 x- {, w- I9 w$ c0 x
     BYTE nDestPos = 0;' O# E0 ^( G: e. [/ d& @* M* M$ A
     for (int i=0;i<MAX_INVENTORY;i++)
3 z3 @2 W. c+ H% k1 `     {
3 @5 \" t3 m1 d8 r. O( W      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, t0 Q' @; U6 q- c      if (pItemElem)
, I& T, d$ k- i1 X. {      {2 Y( Q, p" u& V  u
       if (IsUsingItem(pItemElem))
# M/ r  Q8 m6 v9 {- d       {2 s) y  E: G/ ^, J) Q
        //这个位置无法放+ F" X- [2 _' x, Q
        nDestPos++;* L6 F; i9 ]: ?2 D* R
       }
6 ~  ]! |& [6 _% \      }
, q; `$ H4 z+ j+ E( O* d+ K; z      BYTE nSrc = pInvSort->GetItemSrc(i);
3 L; E) |- @2 _      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, X; Y1 w3 j6 R) N
      if (pItemElem)
: d1 X4 G2 `$ ]- V  Y      {
6 {7 @: n- R" M8 I& u* N       if (IsUsingItem(pItemElem))
+ J! D; {. r) l       {
) g( B: h$ p: ^        //这个道具无法移动,跳过
/ n% C) G$ {" G) z, b+ f; z        continue;
9 c3 D8 l" S  Y1 A& j; r       }
0 Q* _, b$ f) ]1 f* S      }else{
  x2 v9 w9 w+ _       //空位置 不用动
, o1 P: [6 m' ?1 a; r9 T! B& {       continue;6 m* |2 @  g- T- |% c4 J
      }
: o4 J" E6 y7 `, o- a: U+ i      //////////////////////////////////////////////////////////////////////////$ |. O' \( A, y, W: q) Y5 X
      //开始移动
  B& m, \6 a  X, M5 l9 P, i0 D      if (nSrc == nDestPos)
$ ]) X$ E5 c) c0 z      {2 G' ^; S+ o% D0 d- a
       //原地不动' }4 o, R2 N' l- d
       nDestPos++;& P4 ~" n, g4 q4 L
       continue;
6 N) @$ e0 f- h8 h: O      }
% u: {, G) R( y3 a, }      pInvSort->MoveItem(i,nDestPos);
$ l1 i- N  D. Z3 t5 S3 t6 ?+ B      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 k1 L+ j! h2 q) z$ k      Sleep(5);% C' D( g( d0 R- W) U
      //Error("移动 - %d->%d",nSrc,nDestPos);
8 n* K1 k2 O. `+ N2 A2 w      nDestPos++;# h! z* U- G. _9 {! q( n% ^
     }
& V; Z4 f: I* b5 e5 }     //取第一个元素的信息; k. o" a+ i8 W  L  n* z
     /*/ N9 U4 V/ D- w9 i& q. [
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ S4 ]7 {  _/ z$ J  c/ L
     {- Q( g5 Z1 D/ v# d
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) |# B2 S: e; m; B" W      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, a0 a5 x; U6 t) g( y
     }
! Z/ i: Q$ W) B3 w9 G2 d5 p     */! n- o  N6 n: m. C* X+ L/ w
    //////////////////////////////////////////////////////////////////////////
2 ]0 N3 P- D' L* n    break;- {1 Q1 C8 U1 x. M! p
   }
3 j) h/ s. H. r0 u3 K2 \4 B  }
- G& k8 p7 X/ `& T1 p}0 p3 d# q( J  ]
m_wndMenu.SetVisible(FALSE);
4 P+ w% ?' ^2 A4 }5 ~# |9 W3 h* Z8 ?- G2 _2 x" `6 V6 g$ _2 c( o
--------------------------------------------------------------------------------------------------------
& H9 E6 L8 d7 m2 i! B搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 S  I2 a' n. I, r& S{( k  x8 w7 Y" \, x) a4 H
BaseMouseCursor();; m! @* g0 w, Y
}
% q# x3 L& P2 h+ U( ]在其下添加:) X% n* G! M' L; C% O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! w$ O4 e1 o! r0 C' M; g  r; E1 i3 a$ [
{7 X6 H5 v/ O& G& E
m_wndMenu.DeleteAllMenu();
1 h* {1 X: i8 \# I' i- Hm_wndMenu.CreateMenu(this);
$ \7 b- z9 i) k2 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, y0 l- X1 ?' B8 Q" S# m+ h4 k
8 |& e5 N7 G5 b, `, k5 ]9 oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 u. x' a, @. W0 k9 W6 ~{
1 K( E) G8 h* }. c! j  //P以上级别才可以删除所有道具, Y( X8 N& P2 G5 N
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 n0 z. W! s0 e}) [! n' V: c( ]1 \! c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ Y; g! k9 @0 ^" W4 r$ a! U" E' b1 c& gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 K( t; s  I! _) E0 {! Em_wndMenu.SetFocus();2 V- j  l! {5 i. K
}0 l. B0 E+ t2 l+ C- @! U% X
------------------------------------------------------------------------------------------------------------
0 L! O( D# w& E4 n. @: t5 ?*************************
  K" d  B) a' y( W  o! UWndField.h文件; @9 [$ w; k# _9 T
*************************  k: H9 o8 V) o
搜索:BOOL m_bReport;+ F0 P6 `3 x9 k% M( P& q% f+ b
其后添加:
5 @- ^/ C  I, zCWndMenu m_wndMenu;
  L# M) w2 n: g6 x1 w/ E. B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 H5 i$ q" ~" R# j
其后添加:
" m1 o; V2 M3 C5 @0 V, z7 I3 Y( Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 D6 ?0 H; B  \1 @
9 @1 B0 _& u# d3 b& o: B1 i

7 H7 v: r; j" }: J6 j; b* N: Q$ n

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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