飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1084

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1084
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
9 r: Q: }" S7 Z. v1 r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ D5 ?3 j0 Q+ {
8 Q9 C! D) P" {struct sItem) X, y* F* o1 }/ y; @7 \3 @, a% W
{
4 @; g( n5 o6 J* F& R$ nDWORD dwId;
) p- h! ~0 R! f* e! NDWORD dwKind2;; X$ u; P8 }2 C! E2 ^* R" V! j: z
DWORD dwItemId;& v3 Q2 c. W8 c( ~% [9 W
BYTE nIndex;- h0 M: m' D/ |% _/ M2 _
sItem(){1 V- T. s1 \8 M! u
  dwId = dwKind2 = dwItemId = nIndex = 0;
9 p; @. H% x0 M5 Z& ^" H) s}
! J" ?& Z1 C, W" n1 s5 s* {bool operator < (const sItem p2)
) P! y6 N' H" Q- M* T9 {{
0 b: ^7 w0 n9 K) A, c7 C9 U& v: c  if (dwKind2 == p2.dwKind2)
  p$ G3 C% E. u  {
" i8 w4 N, Y" M8 E  H# S   return dwItemId < p2.dwItemId;
! G$ c0 w! c8 r3 g  }else{
: @' A- ?- s" g/ U7 I   return dwKind2 < p2.dwKind2;/ S$ t& A) \) _$ Z2 t
  }& R0 t. u4 t9 x3 J* w
}1 {+ Y9 z1 _& D, G, A
};& [9 F/ Q, U. q& q7 ?
class CInventorySort
) r0 Z- R% a8 F6 Y% H  j{% u- l- h( D* \0 @3 v1 k/ p" E1 Z
public:8 I5 A$ H! r  M) A. ^0 Z
CInventorySort()
  i0 c* p3 n, U1 N$ k{
! T3 A% a6 k+ H9 J  m_dwPos = 0;
' e+ \4 @, K& K; M/ a! `# V5 f2 o}! t1 ^2 j7 R7 U; k
~CInventorySort(){}
2 S" u' w3 ~# x$ t: U/ V/ s1 ]private:' h/ ^! u) v' Y$ O6 u4 B' S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, \/ c/ S% k5 z* b: {5 \
DWORD m_dwPos;/ Z: q; I! F' y, k
public:% O4 E! B( Y9 H/ r% i' Q* F% B7 d
void Add(BYTE nIndex)
4 r7 w) h% P! d: x{
& U$ q& A) G: r2 t6 l0 J8 G  if (m_dwPos >= MAX_INVENTORY); L/ P& G* Y) _3 T. h5 M2 G0 _6 s
  {
: j2 G* ]' p& f( P1 x2 V. A   return;
; b/ c; m- s& ~  a. a0 z) K: \  }  E& e- A0 x1 x
  m_Item[m_dwPos].nIndex = nIndex;6 ~$ v- F7 j8 |6 G3 V0 I+ t
  m_Item[m_dwPos].dwId = m_dwPos;
1 W( u2 \; _$ m% G) h# h  m_dwPos++;8 M$ Z6 q0 C# I) ^  y/ t3 [6 L
}# r+ \1 N5 b8 W2 t( v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 g* ]1 a3 a6 w& k8 [
{- B( l: _. }( n
  for (int i=0;i<MAX_INVENTORY;i++)
* M& R4 W0 }* ]% a5 m  {
1 U+ `( l8 u+ _' x: m: H0 s   if (m_Item.dwId == dwId)3 W2 O8 q3 o: b$ [" F6 u5 y  D4 ?
   {
3 J; Q* Z' p5 W    return m_Item.nIndex;
0 x/ ^0 q$ ^: C, q: O   }
  {0 V  Q( e3 H  g$ [) S  |5 }' O  }) o$ P! f& {, N  U/ V' E& I
  return 255;
2 N" Y' h. S9 Y9 M7 G' n( }}; z# {& @, ?4 I* ^/ ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. R. h8 ?& ~1 ^4 U1 o1 f( j{
0 Y/ b# \1 `$ O8 m0 Y7 G1 a  BYTE nTmp = 0;7 S  s& P/ R/ r1 Y0 V* A
  bool bDest = false,bSrc = false;- k2 C/ {" J. k9 |8 m
  for (int i=0;i<MAX_INVENTORY;i++)
6 O9 _4 K0 A$ M: i5 L  {6 h6 W1 e, v/ V6 C2 x
   if (dwSrcId == m_Item.dwId)
  I$ K' O) {( L8 p( n$ K   {1 z' W" t2 X7 j
    //id相等 则 改变对应的dest和src  P, B! Q$ R/ X9 B: d5 K
    nTmp = m_Item.nIndex;0 Y" y" \' f) f# @
    m_Item.nIndex = dest;
! a; C" D8 t9 o# e5 Y  R+ C   }
& ], s2 C, [3 N8 a  }
+ z0 c! C) ?- G2 E  //临时数据保存完毕,交换开始
" o) n4 L5 i& F9 l' a  c  o' o, Y  for (int i=0;i<MAX_INVENTORY;i++)- c4 E% i" z- T4 b4 l# a7 T
  {: c9 Q/ k. S+ E8 ^% L5 |
   if (dest == m_Item.nIndex)0 d" x% M+ q# b
   {
6 r  |0 \8 @- ]. Y5 v    //id相等 则 改变对应的dest和src( {+ ?& ?3 p7 A
    m_Item.nIndex = nTmp;
5 G3 J! a) Q2 S1 ?   }
  _- x7 ?4 t/ F! h  }
9 j7 U/ G) J# g1 o( w& O% R) W}
- ~% m8 u4 P2 q* x8 ~% ^};
# y4 D3 q6 p4 q+ |-------------------------------------------------------------------------
# F! a: P  }* }& n) P$ g& l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* }# e- P: x3 }8 F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 ^8 W/ L# T: |/ G# d# J! S紧靠其上添加:
. z0 }. F7 b! C+ Y2 W. @if( pWndBase == &m_wndMenu )
" j2 J3 ~% F9 l' q4 V6 }{! _; k0 h+ w" Q3 `; x$ S
  switch( nID )4 i- G, J) q9 j6 W: }
  {
+ h3 \, k( x; U( W0 ?0 e/ Z  case 2:
+ {) [' ^9 i: R6 v- ]$ D3 ^) I, j6 ^   {
3 P2 q9 k: L/ V    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
  |  c9 a6 f: n    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 p. X2 t. `6 X3 R  ^* p1 R    {
8 E7 b! P4 t7 X4 {1 i& C6 A     break;& \( u1 k9 S$ r2 `" j
    }
7 x$ o; g! K2 N    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, s) c2 \. I" Y# ~* R" Q1 D* [5 B: n2 e    {
  t% ]9 N9 B! r3 K. E     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 q! {6 a9 \2 r- d2 B
     if( !pItemElem )
, S' K5 E# ^! q$ k      continue;1 o. \# w7 c, p6 A2 X
     if(pItemElem->GetExtra() > 0)
8 @0 N, ^8 W7 r5 A1 n8 ^0 ]2 d. A      continue;3 P- i# J: T- g1 ]; J/ }) n
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 X6 h7 W1 R5 B8 q2 e* U      continue;
* Z- b" ^) m. I$ Q# l6 S; t" X     if( g_pPlayer->IsUsing( pItemElem ) ), B, R" W. V- q
      continue;$ h6 W6 A  W& O/ Z3 A* d7 V9 J
     if( pItemElem->IsUndestructable() == TRUE ); s# V+ j# e' J7 w
     {% T. _' Y2 x" E0 j5 v% h
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* w# _9 y  m6 p% |+ B7 l      continue;
; u3 P# ]- i  j. H( p8 q# @     }3 r6 j+ \5 \, i1 `- X
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 b. ]* X* x5 f    }+ v* D) E1 s- U
    break;
' g: {. ^( `( Y+ z7 t& c  a( z+ Y   }( ]8 W/ x+ V! u% ]  g: ]
  case 1:
( i8 q0 l% J4 X4 `/ i2 D+ e   {/ Y" `4 n3 c5 S" Y4 D+ X, y  L
    //整理背包
+ ~4 m6 \' L  C, z6 U4 U; ~    //////////////////////////////////////////////////////////////////////////
& j$ y8 p' X9 C- F* d. y: j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 x8 ~4 J; {+ E/ w2 l    //////////////////////////////////////////////////////////////////////////
1 f2 t+ Y" R5 z8 e7 m0 T  n    //////////////////////////////////////////////////////////////////////////
  [5 w( v2 N% `3 T, t5 ], _9 B    CInventorySort* pInvSort = new CInventorySort;; s( K  `2 l3 R* I2 n
    vector <sItem> vItem;
6 a7 o) w4 Q3 L% v, m0 L    vItem.resize(MAX_INVENTORY);//初始化大小
; V* Z3 _0 Q; ^& g5 U' ]$ Q: _+ |     //////////////////////////////////////////////////////////////////////////
* z* [& {; T/ ^     //填充数据1 n; d; ]4 U, \  g# w5 D
     for (int i=0;i<MAX_INVENTORY;i++)
8 V. d' x. x. x% m     {
' J$ u  A' [  }8 u# [      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 ?2 |% ^" U0 J# I# X" Z) R4 r  X5 [
      if (!pItemElem)# e9 t7 S. L1 @2 W8 ?& k. G. f
      {
, B' N- z1 j' @$ v2 j       vItem.dwKind2 = 0xffffffff;5 B& Y" Y5 v* [+ k7 M
       vItem.dwItemId = 0xffffffff;
3 I+ q- A' C* u. E# A* o# ^+ a       vItem.nIndex = i;+ P' C  V) _/ i2 u7 w3 M; e, ^
      }else {" F- ]$ B9 s1 U9 d1 w9 ~! f
       ItemProp* pProp = pItemElem->GetProp();
1 u5 f) W9 o- K" _       vItem.dwKind2 = pProp->dwItemKind2;
, J9 Z5 D  L0 @- Y8 K8 f       vItem.dwItemId = pItemElem->m_dwItemId;! R7 t2 }  B6 S8 S
       vItem.nIndex = i;1 e0 A  ~8 o, ~8 r" u9 |; Q- v. {
      }2 h( B' d4 i) H  g& l* D
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 v! o" `) T, `- ?3 e     }1 e% V4 \6 [! q% k! X/ z
     //////////////////////////////////////////////////////////////////////////2 w* W- v5 E  e" }" f! E
     sort(vItem.begin(),vItem.end());//排序% Y  r5 x8 F  t/ z
     //////////////////////////////////////////////////////////////////////////7 e+ x1 s6 c4 I2 U) O+ x
     //交换
2 A) |7 B2 ?* f3 y5 Q3 h     for (size_t i=0;i<vItem.size();i++)/ o: ?4 t: j8 J4 H* I0 u9 ~
     {6 `9 F2 ]5 o4 {
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: [/ P& w# X6 ~. \# R      pInvSort->Add(vItem.nIndex);
) ]& T* n/ }4 ~! S3 F2 J& ]     }* F3 g4 L# n6 L& ]/ ~% h
     BYTE nDestPos = 0;
" T! X9 j2 v+ ~( a     for (int i=0;i<MAX_INVENTORY;i++)# k+ B% _8 g# U' z: D
     {/ O0 Q. A8 R4 E/ F& g' {
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* [1 ?! _# Y, o, N# H
      if (pItemElem)8 y6 T' K- _5 I; `0 v4 p7 ^! y; k& P6 ]
      {
0 `8 g. C. @! J& v. s       if (IsUsingItem(pItemElem))
- |" }! I. \0 u2 r) P       {
. ]  p& N4 ~5 {. v2 `        //这个位置无法放
. R2 n- i6 m. I; P) `        nDestPos++;
8 d# ~' J" V/ C5 u- M. j3 S       }  w5 d+ v8 {" H
      }
( N. r0 A  z' U0 E  N5 A. n" s1 y      BYTE nSrc = pInvSort->GetItemSrc(i);
7 n; `  ^3 O# l& P! x( `1 u      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" }, J0 }) ~/ o5 N- w7 c
      if (pItemElem)# e+ X/ Z/ z5 r: R4 B8 v# i
      {
: T% v' d' S. c" `& A       if (IsUsingItem(pItemElem))
/ j6 |1 v9 M7 s! e1 N- N! Y       {0 P. B9 n% R$ Z" @+ @& ]
        //这个道具无法移动,跳过
, T( {2 e% G' f+ S; m) G3 d        continue;
* f  n' j& y' t7 o       }
  w4 w; p& r# x; N: q' D+ P      }else{& B* j( e. H$ A) Y5 K* o
       //空位置 不用动% c) r! C* i( M1 L3 w1 \
       continue;0 P' E: ?: I* W# }& w
      }* V) v. U9 e. f& Y  ~$ s6 f0 \
      //////////////////////////////////////////////////////////////////////////
6 z2 O0 L; Y( N3 P+ b! J      //开始移动8 o9 ?" |. m5 d1 `5 c2 w
      if (nSrc == nDestPos)
) u, \; Y4 l& ?      {! {& e: c& y# `8 g8 E
       //原地不动! ]! Y. I8 M& @1 B: [2 e  Y
       nDestPos++;6 n/ \, f/ ^; D
       continue;+ r! q+ v& {5 [) j! ]3 b' E
      }7 F: q/ N/ [7 W- A, H6 a
      pInvSort->MoveItem(i,nDestPos);4 }" ?$ M3 E9 \# L1 }$ s& w
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);* ?6 f3 l" e9 \& ^6 V% r4 Q
      Sleep(5);1 q3 o# n$ w: ^; C
      //Error("移动 - %d->%d",nSrc,nDestPos);
& z, M$ u# R' z) ^      nDestPos++;
5 q8 `5 w, L! t     }
+ I* U9 n& u7 k1 `+ c     //取第一个元素的信息3 z5 R2 `) b6 h$ Z) y% V7 j. Z) s
     /*
6 d4 g0 F9 R% I' N9 I6 k     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 G( w, w+ F" }: J" e# K
     {, S) `8 ~; F$ ~. i5 y
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 `6 b3 F4 z% c9 P0 ]      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; D) S, E( G, M) R
     }+ g* e- W6 e4 E  D) e
     */
& k, o6 _, S5 g2 `# M4 y$ T    //////////////////////////////////////////////////////////////////////////8 b( J+ K  f( G6 O7 h6 t
    break;; ~# x5 p3 M. _" I# ~
   }- _4 o2 b( T. D; b3 I) z0 V
  } 9 O4 k( O8 B" s) U/ x" G* T2 p
}
. H" ]8 W( K( o, A( mm_wndMenu.SetVisible(FALSE);
$ R% o$ @+ }3 X1 O4 Z
3 e6 v. q0 ?; p--------------------------------------------------------------------------------------------------------
9 S# c% G' L1 w# h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); H2 S, g2 T9 C
{
2 {3 Q: _0 u; B" Q. }BaseMouseCursor();
: n/ q4 @0 W' ^( a# H1 Q0 t}7 a* o1 Z0 m7 _. R. m0 l& X
在其下添加:
+ ~7 h" @% w5 @6 xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 Q  P- S. p, v. w
{' r, G. d3 ?5 X: @1 _
m_wndMenu.DeleteAllMenu();( d! y5 z* E  j- s3 E
m_wndMenu.CreateMenu(this);1 I0 Z+ j  E. Y& Z# ]/ M  \; ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 P0 ~/ G  `) j, @6 `* M8 L1 f
1 X+ r; y! D2 g4 p# }; [# j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- B1 X+ N8 ~: v2 \4 u5 {{
; A2 {% q# s* Q1 U5 }) h2 }! L2 D  //P以上级别才可以删除所有道具
3 R6 i2 [1 h( a+ D! c2 ?" S9 `  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 G9 e( z  [0 f2 C/ t/ m) B. Q5 Y; t
}
+ Y' n. i! C9 ]2 j8 x9 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( N, \' O6 m  z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& r3 z( {3 i* H$ S* }7 {: j% K( Jm_wndMenu.SetFocus();
3 f2 t3 \# n9 _- @8 g$ f}  W3 n: y" ]9 \; q1 c
------------------------------------------------------------------------------------------------------------
+ O9 v) U  H6 ^*************************( D0 H; F8 i6 l" U- l; B4 _
WndField.h文件2 a& v5 Y0 |9 Y# ^
*************************2 ]; J/ d6 n7 }8 W1 r8 @
搜索:BOOL m_bReport;
  T5 b0 r! N! H2 `其后添加:, o+ m6 _  Z& @# ^
CWndMenu m_wndMenu;
8 f* P4 |3 u0 n8 w# N( L7 x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" ?( C) n% u8 ~$ s7 M) N/ n其后添加:8 a7 ]" H% k" g# b  p/ v
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ \  O) A# R+ n1 q/ I! |6 z+ `, h
' x  g5 a- A# S

+ w  @. Y4 ^9 j- W2 ?) X

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-18 12:10 , Processed in 0.069856 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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