飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
2 y% d0 O7 U. q2 e$ _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 M3 N# C% b; k4 N
* ^# n5 u9 ~6 X4 Estruct sItem
. w2 l; `6 M/ G; A{
. o/ ?# v! J8 D7 ^- M( A1 F% t5 gDWORD dwId;
/ P. |7 K: {. uDWORD dwKind2;0 C: H) _8 Z' p9 _' U
DWORD dwItemId;
! V* c/ a& V, B* O8 c. tBYTE nIndex;% A$ ^8 v% l% ?; f1 q  f3 C
sItem(){
" L  _0 m& h- X" f' p* f  dwId = dwKind2 = dwItemId = nIndex = 0;: l6 _7 b) k! _0 k" |& ^7 ]( F
}! p% C! y" m& t1 S* c! _) o
bool operator < (const sItem p2)
# B5 l: i3 D3 r; U% B{; j* Y; U* `8 D4 y* h/ r: n
  if (dwKind2 == p2.dwKind2)4 h- h0 s6 P+ f0 E
  {5 g4 T: F% Q, x7 T  F
   return dwItemId < p2.dwItemId;2 {; J( v2 b2 D
  }else{  D6 ?  L( k1 e
   return dwKind2 < p2.dwKind2;) @( l+ R' w# n
  }3 ~9 R, m% V/ n6 k
}8 Z! \) K& d% @
};
4 @; A7 `% O! Q' }class CInventorySort0 E; T! v( Q# l
{: a" ~, r( w8 k/ v+ m$ v" m% t
public:
) m5 S& i- y9 G' cCInventorySort()
6 i2 Q2 J- L7 t3 M( S+ M{
; I+ j2 d! s. \- r4 J4 B  m_dwPos = 0;
& V; X0 p+ G- Q" k}8 o; L% w: |+ H( r3 @+ a3 @5 g/ b
~CInventorySort(){}. f$ G! C; f) |2 [9 X  d. C: O$ ~" H
private:# ~' ^7 k! ~5 h2 _9 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y# @. Y8 j: @# i  }: ?) @4 ZDWORD m_dwPos;
9 E8 z+ C# @; p# N1 I- R; tpublic:
! h2 k- K; S, u1 N! Mvoid Add(BYTE nIndex)
% a$ V$ ^1 c. _1 ^) U{7 H1 ~6 E- \# B( q. ?* O' r8 [! p; O
  if (m_dwPos >= MAX_INVENTORY). _$ Z' T# M7 n$ z: N5 s
  {' n7 P" k! `% _: |) ]% v) J1 P
   return;
; `! p7 t8 x$ S" t  }
6 X0 H2 c' ?. L: J' `) m& N9 _  m_Item[m_dwPos].nIndex = nIndex;% v1 A4 ^  O2 u7 ?9 f/ B
  m_Item[m_dwPos].dwId = m_dwPos;
3 `' q# q" o. j) s2 O" I" u  m_dwPos++;1 b" q+ q/ f' t5 t
}
/ N  `3 z8 h# ~1 p# dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( `3 A/ p6 d. T" G& Y
{* Q, A) M2 m$ Y
  for (int i=0;i<MAX_INVENTORY;i++)
! [7 K# ^! K* [) K1 @4 y  {
0 c; O0 t. X! W1 k9 ?; L: G   if (m_Item.dwId == dwId)
% X: A9 Z  j9 i  N" U2 P+ k3 E) ]9 ]   {
" R8 r+ U' Q0 z    return m_Item.nIndex;
) G8 i, w' t" Z1 Z2 x' t( d   }/ p5 k# g& c9 c* y' N7 K% P
  }
5 G6 S, @  p5 A# z' G+ a  return 255;
, S. x  @7 r7 v2 b( A. q}) q# k9 S5 X2 ~. c3 d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
  _/ {1 d7 n1 h! ~2 f{
- N9 z0 P6 A; t6 Q' K  BYTE nTmp = 0;
5 O) H  Y2 P8 ?! ~* q3 j  bool bDest = false,bSrc = false;
( C* w7 W- [' h& P! \7 ~5 x  for (int i=0;i<MAX_INVENTORY;i++)
, L( _8 s& M  E2 S5 {  {* C) g% G  [2 V$ e3 f; V6 q
   if (dwSrcId == m_Item.dwId)
  y' B) I+ R& ]) b/ r   {
! }& Z! H* A, C) j    //id相等 则 改变对应的dest和src
# z$ K& u+ c- U# m3 \    nTmp = m_Item.nIndex;: v3 Z$ b- v% y+ O4 d9 c
    m_Item.nIndex = dest;2 ?* \0 r* W2 f2 }
   }  ^% O3 T) r1 V/ W- m4 y5 P, N5 e
  }
3 j) l$ b% v) q  //临时数据保存完毕,交换开始
' t; D" _! t9 O  for (int i=0;i<MAX_INVENTORY;i++)1 S3 a. U0 v3 o' G  W1 M/ G3 s/ F
  {# h- e( k2 ?# c9 B) t( k
   if (dest == m_Item.nIndex)
) n/ {  r2 L( S9 r   {
3 a. R, c; z( ?3 c8 v7 W    //id相等 则 改变对应的dest和src7 a: Z* d% E% P2 y. v
    m_Item.nIndex = nTmp;
9 g+ ^: d% {- X; m1 Q   }
. L! I/ f5 \7 r0 U4 L  }& M/ E% o% n' x
}- R/ H0 u' m! P" H3 E& N0 }  ^% U
};3 x. H1 V4 M0 F1 o! o
-------------------------------------------------------------------------
. f7 m0 R$ c) H3 s* i9 \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); E  W3 A5 L. q9 V! Y2 y8 T2 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 a- K- Y6 L3 u* |4 S4 `1 X紧靠其上添加:' y: Z" K& [7 o$ C8 X4 L6 \
if( pWndBase == &m_wndMenu )( ~( {0 g: G8 L: V: w% N+ Z
{- C; C3 W( x: U. @# U# L( ~
  switch( nID )
  }) u8 O: X- @6 G- b' G; V+ I  l  {
  M# [& I& b& _0 d' V  case 2:0 I: P. s5 [; g7 c0 L
   {8 D1 F6 d: O/ L, c
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- a0 o; K5 b7 Z5 Z6 _    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# V  Y  D8 M& p7 P8 d, v3 ~
    {9 S0 s0 y# w6 t0 s: x2 Y
     break;
+ J, D" U* P* J4 Z2 m- @" b    }
% Y# n' f2 @" n$ ?0 b: q$ k4 X    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P& S2 x1 [4 @7 j, O8 X
    {
" Z3 C8 h8 M; d) d     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ A2 X& D' @3 l3 O/ O. p1 T     if( !pItemElem )$ _, q& B, F5 e
      continue;
. I% @  C* z/ B& ?* }" n     if(pItemElem->GetExtra() > 0)
+ f3 W5 ~; u' h9 D" n      continue;
  X, S) ~) U  E# x' g; p, }     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , |/ K- y, p% U# h  h) @5 T3 k* }
      continue;8 S3 z; `$ f! N- D  K2 _- `8 S
     if( g_pPlayer->IsUsing( pItemElem ) )1 W1 i7 ~* j  |6 J: V
      continue;
  g; c/ V! ~; I4 S" w0 I# i" r     if( pItemElem->IsUndestructable() == TRUE )
7 J# ~; Z4 ~2 v     {
' q; y1 y- b7 q3 s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ r% V! \( f7 }7 d      continue;
+ z6 h  ?5 R( C; R     }
0 h  c/ l0 L, ^# \) Q/ W     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 q# ^, y, n+ R) I- ]  o. e
    }
6 H9 n. k$ W# Z3 N, z2 j    break;$ A# B9 k+ B% e- ^; \
   }
2 @+ Q0 j. @. q: @5 }! @+ Q( [  case 1:6 {/ f5 L# `8 P" U, ]
   {4 K: f/ q( \  x
    //整理背包
  @" |$ C& V; X+ p6 o  p4 D3 K    //////////////////////////////////////////////////////////////////////////' a4 {; @7 H; c; r6 E  o. B$ J* p2 s
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ y* c  N- R2 u' C# {' z7 K    //////////////////////////////////////////////////////////////////////////# C# L- ~8 X! F: E( N
    //////////////////////////////////////////////////////////////////////////' C, ]' L  C3 D- @) I
    CInventorySort* pInvSort = new CInventorySort;- e4 R/ s0 M% P: @3 f4 P
    vector <sItem> vItem;
9 B" j" @# S  C- v3 b. X1 I    vItem.resize(MAX_INVENTORY);//初始化大小. T) d% [0 P' T
     //////////////////////////////////////////////////////////////////////////5 O7 q) A6 j2 z# @( P+ M
     //填充数据. C! f5 R0 A) f  p8 B6 R
     for (int i=0;i<MAX_INVENTORY;i++)
6 M& n; r3 A; ^0 F. c- |7 a' c     {
+ Z( t1 ]  a* U  e1 B, ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% m1 I) V) Z# z& b1 g
      if (!pItemElem)
7 M% w8 h/ J# d& z4 q) V      {! ~6 d5 f9 @7 P9 c9 M& b( O
       vItem.dwKind2 = 0xffffffff;
6 |) R! E  m% P! g4 ]* p       vItem.dwItemId = 0xffffffff;
. h; U7 O% Q2 \       vItem.nIndex = i;4 X3 H- u" t0 @* w( t1 {
      }else {9 @: g3 M1 ?  u0 B- ?4 L" C# G
       ItemProp* pProp = pItemElem->GetProp();- H! }1 G5 k  |5 F
       vItem.dwKind2 = pProp->dwItemKind2;
' L6 b: R  @$ ~% p       vItem.dwItemId = pItemElem->m_dwItemId;
) ^% P* E* h7 @: e1 Y, R, u       vItem.nIndex = i;% J4 f( q( H9 b% I: Y
      }
) x/ q+ }3 _. `' B& l8 N: s      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! @/ J  }9 S. J; {; e: d9 z
     }
: U( y" d) h* ^6 F6 j' o4 |/ ]7 v: X     //////////////////////////////////////////////////////////////////////////
% f- \) p/ G% L3 i; y& z1 P     sort(vItem.begin(),vItem.end());//排序
% i  W! [+ u2 U7 R; O     //////////////////////////////////////////////////////////////////////////
" V3 }! |' y6 C; ^# f, l& A     //交换- P/ u. P0 g; }$ {3 ]: r- F: ?4 c
     for (size_t i=0;i<vItem.size();i++)6 V) d; Y& w& R1 e0 y: J
     {
7 T0 K) k+ U, z      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) ?( O! G4 e3 u      pInvSort->Add(vItem.nIndex);4 R0 [) s) j3 N
     }
3 O- I7 a/ p0 P; l3 s     BYTE nDestPos = 0;) S' N% T4 E. C
     for (int i=0;i<MAX_INVENTORY;i++)
# _/ G* K% }+ ?3 |0 M5 F% m3 T     {; G5 ^1 I8 l. P- D
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% b; m7 ~& |# E7 _0 @+ x
      if (pItemElem)
' Q. O# ]; y, [      {
- }0 A' a4 n/ D/ @2 _5 z( g/ @       if (IsUsingItem(pItemElem))$ X& i- S& ]3 f% W6 h- ?
       {
3 F' J( X# E6 E2 F        //这个位置无法放
" ]: F" R5 ?/ v& I) H        nDestPos++;, F& b2 N% ~/ o
       }
0 o6 Q* C% z  e; F      }
( Z( e0 ~& J  }      BYTE nSrc = pInvSort->GetItemSrc(i);5 c4 B  D. i, }' V
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);  ~3 u* M5 B. @- K- o) g# j" o
      if (pItemElem)
/ a, x, L* f- ]1 P* X7 R      {
0 t7 m  u9 Y, G. Q       if (IsUsingItem(pItemElem))5 o( o9 P# b7 ~) Y3 I/ M
       {) {1 L) P. M) p5 O9 U3 d
        //这个道具无法移动,跳过
3 h* I& k% u" r7 ?. I+ c        continue;+ Y  p4 D+ O1 r  A$ B0 p
       }3 l6 g  U. w4 ?6 ]$ \
      }else{
. `8 K1 q' q1 N1 r4 ?6 ^# w       //空位置 不用动) p+ a- Y& K7 ^5 o# Y$ \
       continue;
" V4 j* W) S0 p# Z% b( U; d      }% T; J1 p9 O% ^2 n6 x
      //////////////////////////////////////////////////////////////////////////
' K6 ~  k9 V( W! o- Q1 D      //开始移动! T- G% C$ K! |4 }
      if (nSrc == nDestPos)
+ R( ~$ z1 P9 g  K- C( \      {
- I. g0 ]  R  l1 z; t" W       //原地不动* i  d- Y4 V1 @8 N
       nDestPos++;
( ^/ I. a) T: a7 L       continue;, T" ^$ m. H9 I) Z, a6 b. J
      }
, k1 B- S* {6 P- ]      pInvSort->MoveItem(i,nDestPos);
! R% F0 n2 i+ O7 P% g& _4 @      g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 X0 {) `3 }$ q, o2 X/ g# p6 g
      Sleep(5);- E- @" b9 t- e; ^/ F  f& ]
      //Error("移动 - %d->%d",nSrc,nDestPos);$ Z% I1 ^5 S0 K! a
      nDestPos++;
, S7 F4 m! e+ h) [/ p5 ]     }
* |: Z8 V: O3 \! F% {     //取第一个元素的信息( Z) a. T7 X* j$ H$ E% Y& b
     /*
1 l. B+ S# e, U! k7 _9 X     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), V$ I4 Q+ U$ i9 A5 a9 W$ {
     {
" r2 x. I* S, O8 O  Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ |4 c7 k0 a3 E) r0 B4 r      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);  T' a' h' e2 P/ g$ M& j+ u
     }
' W6 ^; b- S9 W; v2 L     */
5 |4 U9 A# x0 [( H; b+ q    //////////////////////////////////////////////////////////////////////////$ N' n; D5 t% o) {8 N
    break;
" H; m: P: s- }5 ^4 v   }
- n! x4 T$ ?: H' S7 Z) D) T9 V! L  }
; E4 n- y, J- l1 f}; B/ m$ ]# F. Y* v
m_wndMenu.SetVisible(FALSE);8 `* j; {, F3 ]8 e% C$ |

* F4 j" d% N8 F! O. i2 T, e' ~--------------------------------------------------------------------------------------------------------9 g: Y7 _( H2 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ G$ ]8 t. R0 `6 _6 B* Z5 _, G' e
{. E, [* L0 r$ w, i8 i- u. A" u
BaseMouseCursor();
6 M/ o6 m4 X0 W" R4 M" j! p}
9 K+ d# k# y4 S, S% z在其下添加:% G& C) \7 Q. M& \4 [( ^! l. ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ t- V6 X1 F7 P, z9 ?: Z2 J{$ v5 y/ g0 r. |7 ?6 u/ J
m_wndMenu.DeleteAllMenu();
0 l- H  I7 i( b/ ^% K1 mm_wndMenu.CreateMenu(this);  n; R$ E  Y  w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. m0 v4 Q8 x; M6 ]1 c0 j
8 B5 C3 X/ J: S- w/ g+ z. i; R1 S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 b6 D& O, j# w7 z3 B{
& J" d5 |4 ]4 Y, I3 Z  //P以上级别才可以删除所有道具% R) A- \! r, _4 d% m
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: g9 s0 B* M- x  z0 A}* ^! _) q( R6 Z, m3 Q" S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 Q: Z; m) V3 ~: P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, U7 R& f6 j9 g: d1 Zm_wndMenu.SetFocus();) k. M; [. g4 d0 E; U
}* P7 k  ?1 z6 l4 {7 P
------------------------------------------------------------------------------------------------------------( g' o! f$ k' I9 s9 _: C0 Z7 \0 I
*************************2 [2 A& J# P1 T# N# A) s3 |/ h/ `/ d
WndField.h文件
- r; Y8 H; n( e2 ], K, G0 b*************************8 |3 }5 z! W; R7 a( H( S/ d
搜索:BOOL m_bReport;
) R2 U( t8 H" k7 l; e; G其后添加:/ D2 L7 z9 ?/ n
CWndMenu m_wndMenu;
9 O: w) F2 }. l0 J) Z. R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, f& \7 |" ], [$ r8 Y" f9 I. V
其后添加:1 ?0 R2 d; P$ w
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* M  g5 |+ y% e* `: c/ A2 {/ l, r& i' K( e$ C2 q9 z

! h6 V/ H+ I" g( M6 G

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 15:30 , Processed in 0.064049 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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