飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
+ G" \# u! t. H& u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' k5 c. ]8 \. w; p/ h. A- U( {# e/ s9 |
struct sItem
0 k# s1 ?3 S1 u! d7 g, _. ~{; o8 w% p# R( X# I
DWORD dwId;8 N2 ~+ W4 n9 y; _: V
DWORD dwKind2;
+ ?& {7 P0 {3 v2 P" ?* \) t  V6 uDWORD dwItemId;
* _3 p1 A7 \4 yBYTE nIndex;
! r! J* j9 d# o# U. ~$ A" ^sItem(){
: j/ A" U4 X4 G; j# V* a# D% i$ R  dwId = dwKind2 = dwItemId = nIndex = 0;
2 h( M# w# x% q- F}/ f8 p$ N  U* v! u' h, G. g5 U
bool operator < (const sItem p2)
/ V, \5 ?% Q" O; l{) v7 h! d+ r/ _0 Y" M- Y3 q
  if (dwKind2 == p2.dwKind2)
3 @" p* E+ E& i$ R; N1 M9 a! a" k% c, l  {
# @9 H, l8 G9 g, l. ?   return dwItemId < p2.dwItemId;- q& D" f" T  P* G+ Y% [8 |3 C
  }else{
: z3 W3 @0 Y8 }0 }1 p# k/ n* N   return dwKind2 < p2.dwKind2;7 C" u" V$ U) h1 _! {7 J, c
  }
; X" C' O" W( `}
" K& K. Z) _* F4 b};& X; c0 l9 B, g
class CInventorySort4 t( D( s0 V7 \/ d( A4 {
{
1 d: c' @* c- R3 h0 j4 {public:1 C3 q5 F6 c7 M) t7 o' |
CInventorySort()1 b0 ^6 h) u6 @) c% j' o* y" [
{5 X" g0 k0 |9 P- Z6 Q# T6 a2 R: B
  m_dwPos = 0;
* H6 U" Z  e+ i6 u}
/ r2 Q( ^3 y+ M~CInventorySort(){}
! @1 y2 ]4 p0 Sprivate:
- n6 ~6 k8 O( `2 x9 A& xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ g: i/ S! J3 ~8 J% F  vDWORD m_dwPos;  `4 D" Y  h2 E2 y5 i- v! C( y
public:
3 M6 I0 M' z# c6 yvoid Add(BYTE nIndex)3 G6 w0 @; s, B
{
$ ]: _" I% j- f; \5 x  if (m_dwPos >= MAX_INVENTORY)
  o6 c; W6 y4 P. d  {
3 W- \5 [% m  e   return;
$ W9 p  Z  S  m0 D4 L# E) m  X  }8 d0 _2 S0 P0 a0 g$ d
  m_Item[m_dwPos].nIndex = nIndex;2 g) R$ X# X4 [7 y) S3 Z/ M3 w  T( O' H
  m_Item[m_dwPos].dwId = m_dwPos;
& i- K. Y1 ?+ A/ ^7 v: @4 E  m_dwPos++;/ J4 ?; D* @4 k+ z
}
& u0 A6 z8 W; M2 T6 m. Y. _0 \# `$ PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 a# w6 F% S& H$ ]{" G4 ]$ |) k$ P9 q4 W  N
  for (int i=0;i<MAX_INVENTORY;i++)
# s( ~2 E! N) r6 U! i, l1 a( Z. B  {
2 x2 F  S! I! i# v/ _0 h4 o% {" E( e   if (m_Item.dwId == dwId)
, F" Y8 J* }8 ]7 u   {! k: E% F0 ?4 O4 f
    return m_Item.nIndex;
  g0 F& ?  k, [& f; e, I/ h; I- Z   }; ^2 J* c* y4 t
  }
% [. v3 v5 m- w+ Z  u  return 255;
2 M! V+ |7 U: W  {}
! ^$ I' c( Z5 K3 Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- ?9 {, m- q* x+ h- i{' k" X) B: m! x; i- j8 |% x# f
  BYTE nTmp = 0;
& U+ W# x  L" [% f  bool bDest = false,bSrc = false;% o; ?) _6 g" v; F3 o0 e- C
  for (int i=0;i<MAX_INVENTORY;i++)
& Q4 B7 p& y9 {* F0 n" U: J# s. v0 [  {
0 E$ _. E: t  r   if (dwSrcId == m_Item.dwId)0 O7 {: M  a% n* R2 c  u
   {! u0 P; I+ i$ o( q
    //id相等 则 改变对应的dest和src
; Y- h; z/ O. c: n0 _8 h6 z    nTmp = m_Item.nIndex;6 E# ?! u/ Q3 ~
    m_Item.nIndex = dest;& B6 c0 z$ E1 Z& Z8 }
   }
( ~! p1 U4 u& H8 c  }" b; B2 {- C- o* v+ m
  //临时数据保存完毕,交换开始2 N( ]. u0 M/ h
  for (int i=0;i<MAX_INVENTORY;i++)
% y2 r( J9 p7 d7 |2 L6 I. P5 D  {
7 O. i" t! Y. T6 |& _! d7 w   if (dest == m_Item.nIndex)3 D& `" E9 j; y& S
   {
* |1 M% k" _" Q9 Y" o, q, Y6 w( T1 f    //id相等 则 改变对应的dest和src) J; `* B6 n$ V+ K+ i: s
    m_Item.nIndex = nTmp;
4 P) e# b9 e* ]" L   }- K* j" j* c4 F# f% |0 Z# M
  }+ B+ J0 b2 [! r  @/ j
}
# u4 e" |2 i. B: R! C' a};
5 q: j  I; u+ }; J. j9 b; B* J2 _-------------------------------------------------------------------------
- h3 {- L  C& K5 a, M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' z& m8 b8 r$ `/ h: Q9 |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);  X2 y7 l0 d+ f- i3 V5 e
紧靠其上添加:
( Z' j( l  _. D" Dif( pWndBase == &m_wndMenu )) T5 V/ C0 W# H& y8 y% b0 i! f" O
{
7 u; ~( p7 D5 V6 @1 c  switch( nID )
8 R3 M  N' B& @$ ]% w, [8 A  {1 m. c5 @+ f' P  ], y4 o1 G
  case 2:
3 a+ [& S+ f% @; x  f' v   {
7 _/ G* j9 H, r8 I    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 H; L# b- s, S3 A8 I2 D2 A    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), v5 h+ U; \- _
    {
0 c' p( ^; p4 o3 {5 N: @( o6 Y( j     break;2 Y, ~: e  ~" |- V% U6 |0 a9 g
    }
& D% z, y3 P: d5 e6 p% T& a    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* f0 ]3 X, O! T    {
5 t  n$ L9 u" i: d     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( n) Q& J, x5 r     if( !pItemElem )2 O+ j* h1 q8 M8 Q1 {
      continue;" ]! J2 ?9 R2 M9 F, m
     if(pItemElem->GetExtra() > 0)9 S" n& O# D) J4 r9 s5 d  d7 O
      continue;2 w1 J& Q7 N$ t, u; F2 B3 C- v( u
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  F6 I  o' Y# E  U0 i      continue;
8 M  Q1 n. ~/ A; M; i     if( g_pPlayer->IsUsing( pItemElem ) )
& ~( N" s% [6 ]7 }; g      continue;
2 n$ y7 X- \9 K% x     if( pItemElem->IsUndestructable() == TRUE )
/ ?% q6 F3 k* _' O1 q, k     {
- A5 b' b& A  q% [% J% J. g7 Y  m      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, @% q; D4 O/ |/ k      continue;8 D: Z- V) a& C' Q  F, [
     }
, J% x# J, |$ S, G- @/ }/ Y     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ X6 i8 I6 K* \. f) A2 i. K
    }0 d- |7 E7 c' s' A
    break;3 j) A. g: `- J% N' e
   }
- j6 N% @% r# Q6 H) @$ G1 }  case 1:' A- d; d  k5 a$ ~1 c7 d& U
   {% ?- C' y. V9 n8 n6 i% Q
    //整理背包
2 p5 r( W) [+ f( `! @/ {    //////////////////////////////////////////////////////////////////////////  ]: ]: @3 J# D! q+ Y  X
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* K% n: e) P& f9 j2 n' v; Y    //////////////////////////////////////////////////////////////////////////
# e# J; Y& i. g& R7 R) E; x1 z% O) A    //////////////////////////////////////////////////////////////////////////  R+ Q+ S  c8 M4 A* |+ S8 G1 _
    CInventorySort* pInvSort = new CInventorySort;
/ _/ V  `$ D  ]: t) P! O/ S" b    vector <sItem> vItem;/ O2 T- X/ J' {2 h: C4 f. [
    vItem.resize(MAX_INVENTORY);//初始化大小
' Z2 x0 W9 p- \     //////////////////////////////////////////////////////////////////////////
; a, i/ J! ^3 u9 J2 p& [     //填充数据' w' x, j: q% I% t
     for (int i=0;i<MAX_INVENTORY;i++)
! t0 D: B/ w! Q8 v     {
; ?9 H/ R0 o2 B6 y7 [      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ V" Q- c9 p% M$ z9 V% v
      if (!pItemElem)
2 U5 z$ G8 Y! m% l7 S      {
, o1 Q6 b3 L) V' z& p       vItem.dwKind2 = 0xffffffff;' n7 A# A6 F7 S
       vItem.dwItemId = 0xffffffff;% K2 U( h1 ^$ ?
       vItem.nIndex = i;+ b: b1 l5 U5 ~
      }else {
3 u3 C0 P: ?6 f4 F2 y& d0 P       ItemProp* pProp = pItemElem->GetProp();
5 r& D; K# U/ ^  `/ v  j9 v       vItem.dwKind2 = pProp->dwItemKind2;
( u( ]2 w) t: l8 G6 @1 B2 |' @       vItem.dwItemId = pItemElem->m_dwItemId;. q0 D( A- M8 P; j4 `$ r# I8 O0 P
       vItem.nIndex = i;
! V5 Q! W, {+ E1 x* b( Q; ?! A      }
' u3 s, v8 x  g      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; s" k+ K- {: S: T0 q3 E
     }
1 m' z5 U2 J, O2 M1 p     //////////////////////////////////////////////////////////////////////////$ W8 b. m" p$ K6 t
     sort(vItem.begin(),vItem.end());//排序
9 j' F/ a! c  O& b# ~6 S     //////////////////////////////////////////////////////////////////////////# ]( }; z! _% F. ^, a2 I
     //交换
! [2 \, O, L9 p     for (size_t i=0;i<vItem.size();i++)
) F5 ]3 N9 G- ^0 W# u* s' H     {
$ d% H! U% W& X" P      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Y" o* _7 Y  i      pInvSort->Add(vItem.nIndex);
& t# d* Q0 {5 Y- P* I- n/ Z     }
& [5 o( [1 s& [2 N1 N     BYTE nDestPos = 0;. |; R0 A/ \8 l8 ^8 ]9 {
     for (int i=0;i<MAX_INVENTORY;i++)4 e4 z# I" a$ T6 P  n
     {0 I7 F, ^8 \6 s# f
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 @( a5 A) y7 @/ p  y% M      if (pItemElem)
$ Y/ s" G# e5 l2 G- U      {
: f1 r3 J* g/ v9 F+ h( O       if (IsUsingItem(pItemElem))
9 ^; L8 \0 _( X0 q' |' J" k       {
$ `4 F; P- n2 v% U: `0 L        //这个位置无法放& m, l+ d0 b7 j5 l
        nDestPos++;* l. G- M5 p  y
       }
" V/ G4 r% h# }' K$ W      }8 [7 F% g( w2 Z' I* l
      BYTE nSrc = pInvSort->GetItemSrc(i);
: Z2 q: ^# E2 V/ a7 i: O( W      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( z1 Z& B5 q2 U' }# |$ P6 A6 w7 H& G! O      if (pItemElem)
; b$ z. r, a6 R! \6 \3 }2 w# u      {
; ?( D7 k9 ?9 Y, s$ m       if (IsUsingItem(pItemElem))( w, h+ U2 j% z0 P$ ?; ~
       {# Z8 ^. a6 K) {4 T8 u' I# B
        //这个道具无法移动,跳过1 ]) \9 I/ P9 A% S& X4 b7 {. _/ K
        continue;
2 x4 @3 ]  R: y: F) w       }
, d. J$ b/ f! R  `0 j      }else{  e$ n% b8 o1 ]
       //空位置 不用动
, S) ^; L( _5 i2 y+ w+ g1 ^       continue;
8 U1 L" Y8 m# ~8 E      }1 I6 w' ]" a! G# k: ]6 G4 j
      //////////////////////////////////////////////////////////////////////////
) l% a+ n9 _% d3 c3 @      //开始移动
; T0 B3 m8 @4 h1 ~0 @! N      if (nSrc == nDestPos)
& K, P8 H- @7 ]9 c. P# g      {
: E3 E' q- C- K+ _$ b0 d       //原地不动% O( D; h. Q% C# `+ y* G# G
       nDestPos++;+ o8 x' N3 p! ]4 @: P. S( m
       continue;' p3 D: U$ Y' H4 s  n4 k' A
      }
& m0 t6 H! m: c5 Q! F! z" [- a      pInvSort->MoveItem(i,nDestPos);+ {+ i$ }7 W, m6 a. {, T8 c
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  t) e- X0 t: }: D/ W
      Sleep(5);% N" e! n2 ]7 X) _5 |. ?. c9 Y. N
      //Error("移动 - %d->%d",nSrc,nDestPos);  j3 `, M' o# d' M- `
      nDestPos++;, v$ P/ X" ~  v" M- P/ ~4 f
     }8 U4 f. e: e' v) c
     //取第一个元素的信息' g2 P  ?/ z" x
     /*) ]) d6 C3 W# U) C
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 @- W1 F( }  r6 u+ p     {
9 v. o$ n+ Q) b1 C% m4 l      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( p6 m; `7 L  ]( \3 o- W0 q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ H7 b% |; b( `9 \2 P6 ~# {' H
     }. `2 I$ d3 v; R) P2 W) k
     */
! ?) O# w) t6 _( R0 M" \- ?    //////////////////////////////////////////////////////////////////////////
: M$ ]7 x( @2 @6 h' a  D# W    break;# D3 u$ u& o1 `; {; Z2 C- s0 @
   }* E% h7 l' G( K9 V* Q( H! u: V3 G
  } , |) I: C1 S& h' w, y, O& @
}
- I1 \) g+ O; N$ M9 cm_wndMenu.SetVisible(FALSE);" t+ E- H. G: w

" G1 s$ F# X# n* ^  L% C- D--------------------------------------------------------------------------------------------------------# x+ z( Z; g  C# g5 s6 k) {1 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 j. A4 q& O! V5 M
{, ^3 ^! Q0 h4 s4 C
BaseMouseCursor();; \4 u6 ]0 Q3 Y* J
}" z' o% S  K! v$ ?8 ^, _( d! Y
在其下添加:$ u* B6 r2 z! j$ D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), C& h) y: R# j/ g3 U8 H) w
{
, F, f8 N! ?- Q# ym_wndMenu.DeleteAllMenu();
7 s2 i0 M- V; p3 Um_wndMenu.CreateMenu(this);& [8 t; X) T  D2 S2 h: q5 m6 ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: y+ l  I1 d2 \" g
' j: h! I1 d& L% w- j9 B& lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 u  G! E8 @6 e8 m. M
{
9 U3 v" c4 u0 Y% U  //P以上级别才可以删除所有道具
) _  S& s! }$ U  d' ?  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! Y0 I% ~3 D' h7 t; f
}
4 F2 U* j6 p2 }. I: q. z5 \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% Q- v9 H' g4 ]% y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- I7 u9 n; b+ g( v; z: |1 q
m_wndMenu.SetFocus();4 n9 Q8 d4 `2 Q) Q, D0 p
}( v/ t3 K: U8 i
------------------------------------------------------------------------------------------------------------5 f  Y1 t% U) f: c' V: m5 v
*************************& h1 i) ~" e* k0 u
WndField.h文件% o, R# ^. ~9 s7 a. a" j) U/ g
*************************, ?: V( {, o$ R& n
搜索:BOOL m_bReport;
" q$ G0 D( [/ c8 s/ N6 w: [其后添加:
- X4 G" `" O6 E, z5 O( O* B/ VCWndMenu m_wndMenu;
. B6 P4 |% M# L( w- g- ?+ _5 O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ^  ]# c  i$ ]其后添加:1 _! Z5 a( E: x: I9 k. R# b! ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 C( X6 Y" Q# m6 [! q9 o- x
+ }+ i( F$ B, h) W% K# n
; S( A  E' ?- J( G" A  r1 R

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 00:42 , Processed in 0.065366 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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