飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
) R5 k) S7 W7 u, D: e. a; _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% f1 n1 a, g: I! p3 E7 v  ^
' j' z6 X' ?  `# r! r
struct sItem5 B" j8 J# u, V. `1 J
{6 I% r# S; j, v0 Y8 _$ E
DWORD dwId;8 i! S0 Y* V5 `* e2 i
DWORD dwKind2;; D: A" b1 G; b2 U. f
DWORD dwItemId;
( G! l4 [& R! |- l9 ^BYTE nIndex;
/ l0 A5 F% p: D' Y( usItem(){, B' E. @/ P- {0 U# s* z
  dwId = dwKind2 = dwItemId = nIndex = 0;
3 q! S+ t/ @) A' t3 P( o0 T}$ Z# o6 L! o8 v: y9 j- H( k
bool operator < (const sItem p2)
% ^; j) E$ f% [. y) G* l8 A{' `; F6 `" U9 Y( q. L' x
  if (dwKind2 == p2.dwKind2)
# F% m: f5 @( Q% F: ]  {
2 r/ S* W7 I% R; \* n   return dwItemId < p2.dwItemId;
5 t; F  |+ n6 M, w# c8 ^# N  }else{, O, C3 i8 `. \$ \0 E$ @
   return dwKind2 < p2.dwKind2;& P0 k6 u' A. i! S
  }/ {5 [8 _' e4 g- L6 x) }
}- T( y0 J( G2 D+ T* o* M" s
};
; `9 k3 V! Z2 x3 }class CInventorySort& h5 N  b5 E6 t( m3 b
{
' U) _7 u. @: m6 r4 Dpublic:
: f- O# z' a+ z) g' Y! nCInventorySort()5 L/ Y1 Y( j* Q6 Z- M- h( v
{
) s: u3 q2 e& c* s  S  m_dwPos = 0;' \1 u) D2 L2 S5 h) T7 T
}* Z: e% _& `" G) X3 o) P5 U) e
~CInventorySort(){}
0 w, l" @* u/ F1 }6 p$ oprivate:
: ]6 g1 G% p9 Z4 I# {5 Q8 R1 H; v. @7 O# usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 i' S1 b$ p/ h5 q" }# {DWORD m_dwPos;) W4 l9 I3 p0 U+ u* Z1 x
public:* ?' I' u& s% r7 ]# V
void Add(BYTE nIndex)
  i5 w- `6 S$ n+ I4 S{
! C, v* v6 V7 T/ F) ]( W  if (m_dwPos >= MAX_INVENTORY)
6 H9 w% Y6 d4 s  {3 s( i5 o4 B" n; V
   return;; [! \! p8 O# N  ]
  }
. C" B$ b: \: F2 v! F8 m  m_Item[m_dwPos].nIndex = nIndex;
/ k  r! g! {& B: w2 m  m_Item[m_dwPos].dwId = m_dwPos;
3 b' M1 l& h( c, w0 U, C  m_dwPos++;& \+ @# t8 A5 W
}9 T  t; {. R' e3 X9 T! V0 y4 b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: h9 b5 S; C, l# R  u6 J; o
{, _5 o3 ~8 e8 p3 g+ u
  for (int i=0;i<MAX_INVENTORY;i++)/ @( q  ~! O4 ?* ]7 k; s/ x8 K" o" Y
  {& I2 h  A1 `, z( U6 `
   if (m_Item.dwId == dwId)0 Z2 t: c& W5 y# N8 o! ]" b1 w
   {, g; x6 ~& S9 u% P9 h; b. W
    return m_Item.nIndex;
- C5 R2 F: F$ O   }
. V7 G5 `6 H. K6 T8 W' M$ s$ J- y  }1 S2 i9 c3 u8 ]5 L6 X
  return 255;/ r! u3 S  h# [9 X( i6 @. n
}3 `+ D( I8 |$ }- p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; [- a0 p' S& Q$ f8 T0 j  u) g) v{
& S" X- L/ D- P  `0 G  BYTE nTmp = 0;
' |( H, B7 b1 B4 H/ k! J4 g+ z- _  bool bDest = false,bSrc = false;
6 N+ P9 o# \9 Z0 B9 d0 V8 ?  for (int i=0;i<MAX_INVENTORY;i++)
% v* k1 m* n! ]$ H4 x! K6 ^  {
8 E' Y& r0 S- Q4 M9 S4 @   if (dwSrcId == m_Item.dwId)
* J; H# J+ Y) L% J. Q5 U2 s. h   {
0 E, O/ L4 x9 T1 p' ]/ Y    //id相等 则 改变对应的dest和src
- T  j9 n& c# S' `4 S& k    nTmp = m_Item.nIndex;
+ Q$ _' Y" |5 e8 H    m_Item.nIndex = dest;% V8 ~( |& n  s; B) w5 t
   }
8 m! N+ N. l! e, {/ P7 T  }
7 U7 V0 y$ M: l  //临时数据保存完毕,交换开始( i. Q- f% N9 m1 g. D4 n
  for (int i=0;i<MAX_INVENTORY;i++)
+ t% f/ g: j5 R; c! d: \  {
, s. Q! ^# i& w6 q# p   if (dest == m_Item.nIndex)
# j% B) W8 G- y4 k   {" Y! O# C0 ^% T/ j, P2 {) u
    //id相等 则 改变对应的dest和src3 \0 a4 k4 p2 ?# `: Z. G
    m_Item.nIndex = nTmp;
( F$ V) t/ u5 k  L# `   }
3 ?+ u6 u+ R/ T2 E  U$ |  }
& Q2 l1 w) E+ X) ]+ K& q}/ E2 N. H2 I( ]
};6 i+ o! U3 \0 V; V8 k
-------------------------------------------------------------------------
: k: `& N( a# z- T" i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* z% k! G& s$ |+ P6 R# q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ w. z1 A! m) E
紧靠其上添加:
% U. H( o1 n7 X; Mif( pWndBase == &m_wndMenu )- E& N5 v; X& v; G9 x2 J/ a
{5 z7 C$ q, r7 Q  ]0 O) e
  switch( nID )( M, ]3 K! R& N% W. h, I8 D
  {5 R; y, ?5 R. ?) W) j' x
  case 2:
2 S( W- K: @9 J0 _   {% S3 t) U7 q8 g3 x6 M; g
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" A% d2 f2 U# `6 z    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 M' J. h+ q- q; L- N0 g    {
4 g& D( K: ~2 D$ p$ T     break;! r: a$ t9 m5 e/ Q& Y0 u* \! M
    }! I* K! {: o8 B% h" E  F. B+ z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
  |( }5 `9 W1 n) Y    {
3 |* M$ t, l+ }2 ~     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);  e3 o% k0 s5 N3 m( j0 e2 ]
     if( !pItemElem )
3 M  M* {, l+ y, d2 b! t) g# K) A( R. K      continue;
8 m5 m: `7 {' P% N( s' l- r' V2 p     if(pItemElem->GetExtra() > 0)
( o. O$ M2 x" Q$ K      continue;- l0 J  O& Q" R$ e
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * U' \0 Y4 t% \6 I' i* H4 o( v
      continue;/ Q: W) k: y0 r
     if( g_pPlayer->IsUsing( pItemElem ) )+ P( e! ^0 ?/ D2 _
      continue;
2 C4 [: w. r7 M" Y7 i* k: v     if( pItemElem->IsUndestructable() == TRUE )
+ }" S+ q. h( W/ y% T: b9 t     {5 j( Q& S: ~# K! ]6 V4 c
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( _: h& }7 m/ v5 c' B3 M( k; T
      continue;
% @1 Y1 m! z' y- w+ s& h/ o+ m$ R     }
$ R* u7 p& P4 w0 x6 K, V     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. Z" A! E) @! n6 {1 \7 p    }
! l' m1 f6 m6 V6 k( \5 H    break;3 A2 T5 C2 m" S" r& }# K
   }
$ P1 o  ?! O# ]' v8 p, W. `' q7 W  case 1:8 ?  l: K) C( T* m3 ?) R+ ]3 @
   {3 u5 i  r: V$ w6 D3 y% G+ m  j
    //整理背包5 Y  u8 O7 _" `. `$ B+ Y* U3 V
    //////////////////////////////////////////////////////////////////////////. R, H3 g9 ?6 b% G
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% q1 q$ z0 @* V' u& y5 Q
    //////////////////////////////////////////////////////////////////////////
- b# A+ N9 ]0 y" S    //////////////////////////////////////////////////////////////////////////2 g! I2 s. J9 y! j8 }* B. K
    CInventorySort* pInvSort = new CInventorySort;
4 ?- P+ w- A" N8 _# c1 o5 ]    vector <sItem> vItem;
( ~6 A' U- G0 G: H1 t" }" g    vItem.resize(MAX_INVENTORY);//初始化大小
2 H4 q; }, _' i     //////////////////////////////////////////////////////////////////////////
4 }) A* |7 x6 B6 H& o% n     //填充数据
! ]( J6 d6 P: v  L' }! c# y9 A- Z     for (int i=0;i<MAX_INVENTORY;i++)1 e& ?/ M  F" y- Z1 j
     {
: c' @& y/ e& g( i. |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. ?/ S- ^  u; ~8 w      if (!pItemElem)6 q* z. e8 _1 }" C: z
      {$ p# c; k9 m3 ]- \9 k3 f
       vItem.dwKind2 = 0xffffffff;5 M2 ?! ?) g* }1 `8 a' z% q
       vItem.dwItemId = 0xffffffff;
3 z: w* }+ K6 M8 T       vItem.nIndex = i;. x+ U" q$ F: p  F. E, h9 L9 q
      }else {
5 F- B3 W% X2 n9 f& J       ItemProp* pProp = pItemElem->GetProp();
4 D5 M9 `- q& N( G2 d  u" {& j: t. y; F       vItem.dwKind2 = pProp->dwItemKind2;
5 u) |8 q: j( L1 R. Q5 r       vItem.dwItemId = pItemElem->m_dwItemId;/ b3 U  T/ E6 N" ]- @
       vItem.nIndex = i;
8 I, `# q& g- a0 {      }7 V$ V' C# {. P; ~! n- Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 S5 ?$ U4 `; x
     }
& q: @7 }) b3 ]9 y     //////////////////////////////////////////////////////////////////////////3 F% A% U. @1 }! ?5 ?3 n' T2 }; A% U
     sort(vItem.begin(),vItem.end());//排序/ a+ q" {% J/ I/ ^
     //////////////////////////////////////////////////////////////////////////7 u- A( C) G( W, D
     //交换
! `5 x8 L- a3 P4 t& F. O     for (size_t i=0;i<vItem.size();i++)
4 M% g$ {7 M8 L5 Y     {
5 {' }, h. k  K& U      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: `0 _' p+ I9 t8 \" y+ j9 g      pInvSort->Add(vItem.nIndex);" @& @( a3 t+ }- B; l% D8 W  {+ ^0 P; z
     }+ R* A! K) k# q0 y
     BYTE nDestPos = 0;; u6 D# Y+ j$ X' \5 I0 D# o
     for (int i=0;i<MAX_INVENTORY;i++)
; l, j9 N+ E' I+ n4 M     {" w+ @. }$ w! I- }
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 [$ J2 }& X  n0 Q, g% x  E6 h
      if (pItemElem)
8 i' ?1 H( L7 C( W& k      {5 [' D# j. ?/ h% g, U
       if (IsUsingItem(pItemElem))
( k' d6 |" J5 e! j( ^* h' A* M# A       {, ^% K$ z- }3 B; M) [
        //这个位置无法放% z6 ?  c2 U8 I( f7 \" |% _
        nDestPos++;. n+ m- r6 K  J
       }
3 b. n: Y$ M. c6 F/ j      }
* v; y. q3 c" f      BYTE nSrc = pInvSort->GetItemSrc(i);
, r2 c0 B+ F" P8 m" m' E      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' I& f' h8 ]8 v/ y( u5 J2 G$ J      if (pItemElem)2 q8 m- G' v. r* t
      {- u- P, ]$ L% z* s* I& Z
       if (IsUsingItem(pItemElem))5 e( r# @% j, g
       {
& `: Q( Q) ~/ x2 U$ W- d' t        //这个道具无法移动,跳过
5 Q: y4 A, E% W3 k9 M- ]        continue;
! m! K% J" q+ }' C) o. N% B% Q3 [       }
6 g2 M, {; c( j6 m- e+ D' N4 Q      }else{
  W8 Y- O4 [( e* i, z. Q       //空位置 不用动: X! G2 n; u$ G: n/ \0 Z2 w
       continue;, m% c2 A$ `6 H6 L
      }: O; v* o) N4 Y! y) l7 X
      //////////////////////////////////////////////////////////////////////////# d/ u+ C/ h, l0 ~
      //开始移动5 D1 N; ~1 v9 ], R. `+ d* a
      if (nSrc == nDestPos)& }  L/ g1 m  E) d  @9 p' p
      {8 h, Z/ B# V- R9 i  _
       //原地不动
* H- I, f- [( @4 P7 R       nDestPos++;
" z3 p; F' D7 o3 K& I! i       continue;7 U: F* z7 V0 ?. L7 T: v3 y& o  P& p8 j
      }0 C: N" y7 @6 q6 s4 b: D
      pInvSort->MoveItem(i,nDestPos);
1 n  Q- J$ n8 V: \* [* Q" k      g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 j+ Q+ y! g0 A6 ]2 y
      Sleep(5);% V9 [& m) x/ ~* n$ N
      //Error("移动 - %d->%d",nSrc,nDestPos);% a: d7 d6 k* K) e
      nDestPos++;
. P. M! A' W) ~# a, U, Z     }
$ A8 v0 g/ p+ o* R4 N# X( i     //取第一个元素的信息+ \" j* d0 b" }4 N& M
     /*
5 _, G& A3 z' F     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- b4 [9 m3 |) u$ X  _) e" i* B     {
) d8 `+ j$ F, P, v7 k4 Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) ^$ N) O& Y6 Y$ L  n" g5 {) r
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);  }4 R0 z7 O2 a  a/ k- l- ?
     }0 s4 W" d& u% c+ n. r- ]/ m$ u
     */9 H% d  p7 m$ c4 J( o( U
    //////////////////////////////////////////////////////////////////////////! p# n2 L, J) Z
    break;! l  `( l1 H& N% P$ p
   }3 Z; ~' O, X- C
  }
& e( B5 d5 \/ b1 E7 w}
3 h$ `* v) B" e  z, l: ~: W1 Um_wndMenu.SetVisible(FALSE);
% n& [4 e4 V5 g8 h6 |+ ]4 z
) U# f7 Y7 Z% l) v$ r--------------------------------------------------------------------------------------------------------( q$ ~. o% d! E( i3 }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 G0 U* p) B8 d! S! S
{, I$ G9 k  G6 s6 o' B- r2 F
BaseMouseCursor();2 t4 P; e% Q0 v* t5 e$ ~9 \: V
}" g% ^+ D( o. X6 X
在其下添加:
& J- Y0 U1 m- b, m) T; A( Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 y5 \1 h& g  z! u$ t+ \
{$ H( ~4 n$ T4 \6 ]1 g4 v( d7 D1 C
m_wndMenu.DeleteAllMenu();
( r8 ]9 W% s- F0 U% U0 u! a9 U1 c2 zm_wndMenu.CreateMenu(this);5 [# H3 V4 G* [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: j( y5 U  \3 m) Q& o
9 K( H& C* Z% x3 p3 Z0 c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) T* Y8 \# w. Z0 ~1 y+ p9 i$ X# F; N5 J
{# Q, E3 G8 [8 W, c% ?( b
  //P以上级别才可以删除所有道具/ @& v- r# a' \0 L' E; O
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 K5 }% M+ ~; b5 v& `; i. u
}
$ B' N8 u. L& A! T& F7 ^0 o. H0 a- ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 x0 M8 h% ?" j$ |) F4 Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' @/ r5 n5 g$ L3 g
m_wndMenu.SetFocus();: {  f/ h7 V9 U3 E$ R. X, C5 ~
}8 m* E8 J6 e$ r
------------------------------------------------------------------------------------------------------------
! ]! o0 \9 E: q& j0 o: w! C*************************
2 b0 I4 d9 G6 b& j% W* VWndField.h文件( s7 o0 ]. ]8 G! I6 z# A
*************************  @# O# [9 _+ Q. q: M; Z
搜索:BOOL m_bReport;0 D- w# r5 `9 f# Z2 R$ B* O. ]
其后添加:
7 M/ r2 g% |3 X) H  D6 LCWndMenu m_wndMenu;* Y7 l" ]# U3 d( k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& S8 i6 O! ~, ~# R/ y7 ?其后添加:
" ?! }9 N8 w  w( d& g3 avirtual void OnRButtonUp(UINT nFlags, CPoint point);
( p- b4 Q$ o/ ]( Y1 Y7 u: Z; z% p, x/ v5 Q  w

% T1 I! n  f; R% @" t& P

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 13:24 , Processed in 0.061989 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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