飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1082

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1082
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件% ^5 y# {( A5 ~; S. ]- h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; U5 A) i$ b+ W5 {; P9 L* t$ o  e7 i* F* S! \8 H
struct sItem
; O, @2 y0 {: G3 x$ {8 S& }{
6 n9 @0 f. ?' @5 ^' [. }$ A; _DWORD dwId;3 N# u, @( T2 {8 x& d( h6 z
DWORD dwKind2;
4 U* `: u. t1 C% PDWORD dwItemId;
! M& Q# k- T0 ~4 gBYTE nIndex;" R2 e; ^8 V8 J6 n% A, N
sItem(){. f8 S9 l/ j, {6 |. h
  dwId = dwKind2 = dwItemId = nIndex = 0;
$ w# V* F7 l8 _) R8 m}
" y7 q  k( n1 \2 z, @  r7 ibool operator < (const sItem p2)
8 g* X4 l  i* H{
- n, E) E2 m: b! p) s5 Y0 l5 z: m  if (dwKind2 == p2.dwKind2)
2 w' y' I* T4 o+ y- L" d  {4 X( |! z) \! H
   return dwItemId < p2.dwItemId;
+ m) O+ _/ V8 P6 {  }else{( N# E- J2 \6 K( n
   return dwKind2 < p2.dwKind2;
5 h% A) V9 o/ o+ ?$ f  }
) F- \+ a8 r  N}
6 l- z3 c! m! B1 G) X};% o5 y" r5 Y0 j- H. e% n6 G5 }9 ]
class CInventorySort
5 e/ D# s8 o7 y8 ^) ]{  G. D! V' ?! X2 O" ^6 ?
public:. j! O" E; |7 R7 K  ^
CInventorySort()
  R# K% K8 ~7 g5 A( F4 A) p{
. ^5 e  t4 k6 n! M  m_dwPos = 0;! K; ]( c2 ^: N3 ^' T" o
}8 n0 O0 x6 r8 |2 y8 C8 [
~CInventorySort(){}
% s! R% }3 P  k, m4 l4 \private:* @& _  i9 s) P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; y' N0 r# y9 x2 p. {
DWORD m_dwPos;
: l8 R) Y1 }: Opublic:
- O  J1 R$ T- V3 m: G6 ?void Add(BYTE nIndex)
! D4 U1 z3 Z0 P" R& o{. e& q3 N% m" x3 d: k+ s1 O. s
  if (m_dwPos >= MAX_INVENTORY)* |4 H* W  M9 B$ O
  {5 V$ {$ e3 T2 T: }
   return;
1 t9 }8 F  S" M' d+ Y$ Q! L0 I  }
. ^4 T2 N, J8 C& G$ V+ m! }  m_Item[m_dwPos].nIndex = nIndex;
  }& K4 j9 u( V  m_Item[m_dwPos].dwId = m_dwPos;  a( @/ N' I# z8 W: Z' F
  m_dwPos++;5 H. N- t, O4 o% S
}. R0 L; c. ~5 q. L: S: m4 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列  a( Z; S0 I7 H: O8 U/ o
{4 y% g9 {% w4 |+ y' f) W, @
  for (int i=0;i<MAX_INVENTORY;i++)
' ?+ f& E' T3 ]  {
9 C% n% ^/ m+ O, \: U. J: ?   if (m_Item.dwId == dwId)
0 ]9 F' g$ ], M# Q" _' c& e5 b   {
) W, O) Y5 {5 a8 i+ j' H+ J8 P; f    return m_Item.nIndex;4 h1 Q# t0 L9 v: Z9 k
   }
3 K) s, T) P: E) ]4 G% f  }
4 n7 ^) X8 j/ X2 {! G' P  return 255;+ m: l; T' k7 i2 b
}
  |/ X" X: c8 T5 F9 r9 f) d: [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 Y2 w  S2 i3 Q& M. W3 R2 g
{, a5 W, F& y( g( q7 u
  BYTE nTmp = 0;
& y* Z& o' i6 ~  bool bDest = false,bSrc = false;
% H9 A6 a$ V1 X2 R( L1 c( j  for (int i=0;i<MAX_INVENTORY;i++)
: I- c9 o) {$ I! C  {
  s! u. W; _( P3 _7 X   if (dwSrcId == m_Item.dwId)
+ F9 s+ \( a& M$ @/ S8 L   {
4 W  @# ?' g3 R! m    //id相等 则 改变对应的dest和src
8 U, w) U* d" R    nTmp = m_Item.nIndex;
6 I/ y, _( U+ |/ \0 \6 ?( u1 C    m_Item.nIndex = dest;
( q$ N3 W) @: b   }% N' D8 z3 W' l& {) w( N7 z" E4 b
  }
% T, E; ^" i( Y) F- b8 G  //临时数据保存完毕,交换开始2 L& P8 S% M$ j+ i; Z- |
  for (int i=0;i<MAX_INVENTORY;i++)* W% u" c7 |. L3 H- W: E1 L
  {
: o* D- t% r# j; [8 ]8 e6 l% q1 z   if (dest == m_Item.nIndex)
. [# W3 Q0 R9 |' q3 K( z   {* D+ U7 U' P6 h# d
    //id相等 则 改变对应的dest和src- c: [; k+ v( F7 h, E
    m_Item.nIndex = nTmp;7 f$ |, {8 y/ J+ e9 A
   }
; W. k* f9 h, E0 C7 K) Y' ^8 T  }
( C& m- S( q3 [}
- M& t* a" C0 y0 L};
$ U$ A! a3 q% I; C( C-------------------------------------------------------------------------
) @8 ^' X) M8 `/ y  v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ F; |& u3 f% Y1 }5 J* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# b# S( H$ Z4 B0 t
紧靠其上添加:+ z: R; L/ ]' y4 e
if( pWndBase == &m_wndMenu )$ Q; o5 ?* ~3 t4 E5 S* K
{
% P" x, h1 C7 u" ?  switch( nID ). I1 ?0 `$ m4 l; e9 z
  {; U" h/ d& z% g" W' @+ T# f
  case 2:& s/ u- `* C3 X* E- E
   {
" q& V8 n3 M: P, j3 b    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, d2 @- w* R4 f. i' T. y6 w    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); [9 A6 l% |! i% T
    {* Y+ H( ]* f; d6 Z0 ]! ~: I; |
     break;" u0 j7 K6 S, {
    }7 }  T  {* a7 j  n
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* X4 x: `' K6 ]4 z
    {+ P, T1 g& ~, s3 ]$ J: C5 z
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% w8 F0 i! l+ O; \7 o. K
     if( !pItemElem )
3 r+ P3 ]+ h7 |+ U, b. i$ L      continue;) @) E+ s8 i4 ]+ y- S, ^; o
     if(pItemElem->GetExtra() > 0)
, W$ ?* b. T# B0 Z6 f2 g      continue;
9 w6 M. S$ P0 Z; G7 b3 G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 ?8 M6 H9 J1 u, R9 o" D6 u/ A; L      continue;
3 q* Q/ A  a  b! _! v) l% F     if( g_pPlayer->IsUsing( pItemElem ) )0 ^/ H4 H/ W& Q
      continue;
4 `- C( D5 C( N6 I% s- r     if( pItemElem->IsUndestructable() == TRUE )
  [( [) w3 @  m& E# ]6 G     {0 `6 C- S5 a& r2 }6 s
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% P6 |& F- P, c1 f      continue;
% T% i5 S* M( H     }
; \: G" O3 f1 z7 k3 r* h     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& D" p+ Y$ q4 z/ g- v+ I7 x
    }
% v  c$ y& _0 S; e; \8 B1 y    break;( K2 V4 i2 ^* X0 `4 }8 T
   }  R* ?9 }" M  y( {- |5 ^4 Q
  case 1:: d! j) B# |% m
   {2 f/ i5 S1 Y' P9 ?0 I# _6 `' E0 f* _
    //整理背包3 z5 j3 Z4 M. E, [0 ]
    //////////////////////////////////////////////////////////////////////////! l6 I) i) R# G
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 y: x6 C5 d2 r# Y; j% J( D$ ]8 ~    //////////////////////////////////////////////////////////////////////////
& k6 k. m1 R, ~) `% H4 m  W& g    //////////////////////////////////////////////////////////////////////////
1 L" h6 N% R! A    CInventorySort* pInvSort = new CInventorySort;2 ?& b9 t, A, x' X1 m7 W
    vector <sItem> vItem;; d  Y  |2 B. F8 `3 n! y9 k2 Z- X
    vItem.resize(MAX_INVENTORY);//初始化大小' `# q& u, u. h, M& X# L+ l* P, {
     //////////////////////////////////////////////////////////////////////////
; w' ~) [( W! g) x8 V5 M0 ]     //填充数据
% \: n7 P/ Y; i     for (int i=0;i<MAX_INVENTORY;i++)
. r# O( L# r0 {0 a2 X, e" t4 r( X; ]2 R     {6 z8 z) E  Y. r. \
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" l) x; y' Q( J$ W) N  X
      if (!pItemElem): a+ C5 A, p0 y; Y$ ^# a
      {
% Q/ W$ A" C, d       vItem.dwKind2 = 0xffffffff;
! K: \. l; a+ u; ^' ?       vItem.dwItemId = 0xffffffff;: c# Y8 g- ?, W2 \+ B4 R! B+ @- C
       vItem.nIndex = i;8 H8 f; ^3 D8 H- B+ K
      }else {  Z" ?: C" k( ~
       ItemProp* pProp = pItemElem->GetProp();
7 V. W. V: b% ?       vItem.dwKind2 = pProp->dwItemKind2;
0 E/ I# ?4 q2 d$ Z7 w; J       vItem.dwItemId = pItemElem->m_dwItemId;9 m, M. m7 z1 n7 K$ w' w
       vItem.nIndex = i;7 w! z7 x4 e7 X6 Y8 J! I
      }
& W5 e) \' d- w4 y/ P# L      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- J. Y  l/ ?+ n
     }7 B2 I  n3 Y3 ~( h* v1 u
     //////////////////////////////////////////////////////////////////////////; y8 J. s) R) T: r5 z
     sort(vItem.begin(),vItem.end());//排序
+ k8 P4 l# O' `' Z     //////////////////////////////////////////////////////////////////////////% \; B% {- z& d
     //交换9 j; K3 B' n+ Z& N6 p; y
     for (size_t i=0;i<vItem.size();i++)
5 N! i; L* U& m" p2 p     {  O$ Q% T1 g6 J7 q9 a+ S- ^6 J& N
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 z2 ]. h& _# _# D
      pInvSort->Add(vItem.nIndex);# W; [: I* N% q1 R0 i
     }
% ~  l7 V; A4 s: D+ O( M     BYTE nDestPos = 0;
$ w& ]0 B3 ^3 H     for (int i=0;i<MAX_INVENTORY;i++)
. P1 C0 K4 U4 y     {# c3 ?6 u) U6 s$ B4 z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# X: [1 t) [' v: ]. b- _& p      if (pItemElem)' U# s2 |. [& {" ~# m
      {
2 b9 O$ b( g- B" [0 o       if (IsUsingItem(pItemElem)); i' F0 ^3 S2 }$ o  S1 e0 D; W
       {% L+ h: ~( N% ]' q
        //这个位置无法放
5 F- W& G9 O% `( V        nDestPos++;
# T3 z# N: b& [- G# Z       }
: b% u$ T5 G& H      }5 |) O+ p( l' _! V
      BYTE nSrc = pInvSort->GetItemSrc(i);$ M4 F+ v4 m$ j6 b) K* a1 |
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* i/ v2 f. Z4 m$ e) s4 ~9 V. W
      if (pItemElem)
( J, z& P0 k/ l3 u3 B- j% v      {% s0 `9 Q, }, D( F0 t
       if (IsUsingItem(pItemElem))
5 @3 [' O: k  G& G. F& \8 `       {! w+ i0 Z: _& d/ ~2 B
        //这个道具无法移动,跳过$ I1 S. B3 F1 T
        continue;8 I  }  H- P2 \) ]; Y
       }5 b- w: ^% s% B$ c. _! c
      }else{
: C6 `0 L5 r  N- z8 ^$ S: }       //空位置 不用动
1 u% ?: ^! U: a. t       continue;' ?9 }8 i, b2 H4 [# e* V* a
      }
6 h" x- @- D; E$ `9 E      //////////////////////////////////////////////////////////////////////////
3 T  W# W3 R# s$ |* S1 Y) ]      //开始移动, \; w9 C: Z* I( A: z) ^  \' \
      if (nSrc == nDestPos)7 Z: g% t% H5 d
      {
5 ^- J, V1 X/ P: E# X: l2 O       //原地不动5 C: X7 D6 M$ d/ s
       nDestPos++;" S  h9 D5 h/ p, }# @: a
       continue;
2 Q, V2 m6 Q: D1 j( f  F      }
. D# a& k; O6 g* W8 b      pInvSort->MoveItem(i,nDestPos);: i6 J* B5 ]; ~- V) }; {. N
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" z9 g0 o/ \- C, h5 Z0 N      Sleep(5);
) S' Y7 J0 L! F" [, T, Z1 l      //Error("移动 - %d->%d",nSrc,nDestPos);' `' _; X& ~* O# f/ [" X
      nDestPos++;
# w$ r6 i. E. x3 d% R8 s7 d     }
" e) O0 Y8 H3 e4 d     //取第一个元素的信息; t" R8 e8 [: c/ j* }: H; j# G
     /** ~' p8 B) ^* E  ~
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 n: S9 O6 k2 O' r
     {% k4 P3 ]/ Z- N/ p
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. {+ U( W5 o) R2 x3 B1 M      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 Z3 t. j4 b0 N/ X6 t, W+ W% ~     }
9 d  W6 b, T5 N4 b     */8 ?  C3 n2 L5 w, A6 \- k
    //////////////////////////////////////////////////////////////////////////
& ]3 P+ Q" M( k& Q7 g0 V    break;
5 P: S2 ?* w+ @' s   }1 S; I5 B5 M% c/ z" s' v" l
  }
4 |6 e5 l7 g  u4 j  ~/ R+ v}( ^$ j4 v3 L* Y
m_wndMenu.SetVisible(FALSE);
4 S8 }) O) D) M/ E( \
7 @' [5 V+ B$ }: {--------------------------------------------------------------------------------------------------------3 p7 ?$ Q, D' `, Y6 i) E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 E- c# R0 w- ~. i* t7 r
{0 {- d4 B+ W/ Q! i' n; b
BaseMouseCursor();
" D- P  G' G+ D! S; }# j}( b0 l% g5 N4 ]6 R4 I
在其下添加:" L3 D+ y+ a: D5 c3 s( N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% T9 l3 H. Z) ]3 x- ^0 {" M; j{- `1 h9 \/ d% Z; j3 y: G
m_wndMenu.DeleteAllMenu();6 @8 u% Q* c" [4 s, I/ T
m_wndMenu.CreateMenu(this);
% [2 E+ q" R, w, am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- b+ m! D" v0 ^
6 _  }) _( V; F! A/ ~, ]9 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  u8 d4 d) L5 a7 h% R) O
{5 ^: X2 {# j& L. Z0 g: R
  //P以上级别才可以删除所有道具
5 r7 `! j2 b0 g: D  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" E& b& I( l. z& ^0 G- n1 K8 l}- ?+ s2 B$ O0 d) c) [. U9 q) [, i
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# l0 I8 r4 _* q7 om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% X  N+ |+ t6 X* q3 q) C8 w
m_wndMenu.SetFocus();) x* v& a; B1 I8 P, I
}
" v# w/ {# m5 ?9 w5 F& c------------------------------------------------------------------------------------------------------------, D1 C' R  Q2 L  e. ~- p
*************************
8 |8 V/ Z' s: F. h5 p% L: R* Q- zWndField.h文件
1 ^' f+ l% r9 _8 b7 U- M  L*************************
) C* V- s9 {% {' q% P搜索:BOOL m_bReport;
  g5 ~% Q- l* \" ?5 w+ I其后添加:9 F$ _, L$ P6 f& e; M% M+ p( w
CWndMenu m_wndMenu;! ~3 R8 X* [" T/ i. _. d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" a7 e& O, P: b其后添加:
6 b1 w5 `) d* }& l; A6 xvirtual void OnRButtonUp(UINT nFlags, CPoint point);, z8 i6 H4 b/ U% r; M: a! P& A

# i! h0 r' N5 r+ d! x" J
- L! Q4 @! |: @& b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 16:55 , Processed in 0.074012 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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