飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' y& O% _5 u+ J1 a% o- c* f. J搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 e0 Z$ d- f' Q7 n

# x5 s+ Y0 S+ {8 f7 t# x$ @struct sItem
. L' T7 K) D" y1 m) w{
0 y- X4 _1 P. B. q8 _DWORD dwId;7 I9 K3 R2 g5 i% m
DWORD dwKind2;
' p' r3 i& ?' hDWORD dwItemId;/ E# ~2 r+ ~7 _( b+ N( }. m; k9 u
BYTE nIndex;
; [$ M4 u' y/ x# L" H6 T) `sItem(){# k( z( m9 q; o* ~
  dwId = dwKind2 = dwItemId = nIndex = 0;& k% O1 c# Z" ~% P* g' K. D( b
}) k" n( `0 M- E
bool operator < (const sItem p2)
" G' ^) \  a( [& P* ]{5 _6 Q! f4 L) ^' T
  if (dwKind2 == p2.dwKind2)
9 R& v3 c1 w2 \, d+ ?  {* y" y$ s& F$ h2 t
   return dwItemId < p2.dwItemId;
, x, o) X/ s% S" u& M: M0 E" t+ H( y1 y* H  }else{7 W8 a7 t9 \: g$ w$ R- d4 S- J, d0 F* a$ z
   return dwKind2 < p2.dwKind2;* Q# `9 h- d" q9 n* `
  }& ?/ N; ~6 r9 f
}
' V+ b- @3 }* h6 n7 T1 ~8 s; m! T};
2 R. n3 Q! E- zclass CInventorySort
. C$ @; ~2 e% ]  N$ T# x! `{
& R, t: `' i4 o3 f+ g0 ^6 H! P7 m' M0 m: {public:* S& f8 ]6 Q% H/ F+ R9 S
CInventorySort()" q+ M8 x' l% U% z
{
$ D" b' i3 U/ C/ ]  m_dwPos = 0;. U# r6 J% g" W+ a' p( J# T
}) l# b3 o0 r5 x# s0 o& S
~CInventorySort(){}: L& C. D# y! O1 T3 b9 ^/ e
private:' J+ A0 p, {, P* {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ M$ H! _# ]. ]1 J; u
DWORD m_dwPos;
$ X  S7 m1 \& x/ N2 g( x" ~public:
, B* u* U/ X0 x  n. {! i/ \) t2 P  kvoid Add(BYTE nIndex)
8 g7 w: s2 z4 p. R{
: r+ |& ^* h6 M  if (m_dwPos >= MAX_INVENTORY)
3 L* |& R0 ^1 C4 d, H5 G& y# B  X  {2 z& V/ L' _- x. l1 }. s
   return;
' D2 x9 D5 Q- f* I% _" Q& Y  }
& ^0 K' }6 U% z  q& P4 _- f  m_Item[m_dwPos].nIndex = nIndex;! g9 e5 ~: s! A) m
  m_Item[m_dwPos].dwId = m_dwPos;) E! D( H( f* B3 M9 b/ A
  m_dwPos++;& d! x. g# i2 c) k* B+ d
}
1 `2 B$ z. ]3 e0 DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 a# F; P2 r% Y" }
{# ^; X: d( [- v( l
  for (int i=0;i<MAX_INVENTORY;i++)* [7 s7 g: c2 h1 v  K9 H/ y* N
  {7 i* _, x3 o. e2 ], y
   if (m_Item.dwId == dwId)8 Y* ^) ?! t8 u- o% K
   {
+ \* F- w- e3 b1 B8 ]; h- N) F    return m_Item.nIndex;
# n  m. @2 J! d& d/ j7 e   }
' v" n8 t7 D# o1 I" b! J  }
# Q4 B7 n, [0 y  return 255;
3 a/ u6 ?0 f+ I$ A) t: `}
- n) I3 D7 m) \1 {0 qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! N0 I: @9 B% ]) `1 S& B  o, i- a3 q
{& a6 E- w/ r7 J. F
  BYTE nTmp = 0;
+ f7 }/ }1 x9 @  bool bDest = false,bSrc = false;6 }  ~/ s$ R1 Q- M7 j) H( s
  for (int i=0;i<MAX_INVENTORY;i++)( R& v+ E! ]. x
  {
4 z0 t5 i, U1 X" @# X   if (dwSrcId == m_Item.dwId)# [* b0 y: s8 Z
   {7 c# h, e. A5 K  m; M/ k
    //id相等 则 改变对应的dest和src
7 |9 W! C% g7 e  F4 b    nTmp = m_Item.nIndex;0 @/ P! Z- s- H
    m_Item.nIndex = dest;) o2 S* ]! U% }" j
   }: D: R1 O5 d& ~; M
  }0 t! A- E1 ^3 A/ V' E
  //临时数据保存完毕,交换开始! n5 {* `# R0 p4 u' P
  for (int i=0;i<MAX_INVENTORY;i++)
7 z: J0 n8 ^; Y  {
& K/ d' G/ e0 _   if (dest == m_Item.nIndex)0 ?4 L7 a8 i! I7 \2 L3 f/ T
   {
1 M. ]9 e2 o1 H9 \( R2 q$ }    //id相等 则 改变对应的dest和src
( S) `% ?1 ~/ j" |8 }  M8 t    m_Item.nIndex = nTmp;% @$ J. |* a, F
   }
* K1 R. ?: O  Y7 B! K6 L; l  }8 N% |1 r, Z: a6 P/ q
}1 V: \" o. g% D
};# F( H" w% k  D8 c9 T) ^
-------------------------------------------------------------------------
5 L4 |" t1 r; [+ X1 Z& y, n7 [7 s2 Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 j, ~5 o4 @8 [: Q) g  T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& g% [+ Z. `2 L8 ]: ~
紧靠其上添加:
% ~7 s3 O# w. O4 cif( pWndBase == &m_wndMenu )
5 s( Z8 c5 p0 W, C* J& J{* y& O: N9 u' `+ N" d) K! ^  o2 g
  switch( nID )6 r. P: D& k6 |2 E
  {
3 g- G. d. e5 G( n+ ~4 x  case 2:& b9 d3 G  }% k( o
   {
7 s# f  K' j1 i    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" @0 ?9 x' O' n" U' _- N) d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 c$ ?4 s1 s/ i* l! e. x. Q* V    {
- ^" e& g; @' y6 e     break;0 r. G* Q7 y. c
    }/ E! B6 l* ^- d/ O
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ W# A7 w3 D6 j! r+ X6 |9 [
    {
( U5 I1 F& j0 y$ ]# `& P  Y5 I     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 r7 z0 A$ z, C! ]; k     if( !pItemElem )  ]( R( S$ a- l/ q# u1 h
      continue;$ B: Y- Q# ~' h9 b
     if(pItemElem->GetExtra() > 0)
- K" k( T8 H6 M- H9 B      continue;
8 d% ~  u4 u& f: j2 Q     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 I7 Q. z/ g  v( `; F      continue;
' t$ F% H! K0 B4 F" @     if( g_pPlayer->IsUsing( pItemElem ) ). E2 f. j/ i7 E. W0 k; i
      continue;
: H: g2 _7 r6 N  T) U     if( pItemElem->IsUndestructable() == TRUE )
' X. G8 `5 x; y8 R6 O' d     {
# r. ^- b+ \; t9 d1 A7 N4 G/ e8 Y      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ ^. Q; o+ q" ~9 Y5 e1 L
      continue;; o3 u  J+ I- n' ?# _- K  h
     }
( ^, H) m9 x& U# @     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ `  b, {6 o4 q) x
    }, p$ a/ r9 S# o+ M3 P
    break;
7 ~% ]( @7 G! q& K6 \# {0 H! }" X   }: q8 P/ M- V4 m( _" L, ^
  case 1:
! L7 k: Q$ B( Z0 h2 C! t/ W& n   {/ b% Q6 C( J0 p
    //整理背包# P" x3 s5 w3 j# K, C
    //////////////////////////////////////////////////////////////////////////
6 Y" R+ y) M. i* ]4 w8 |7 \4 A    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 Y1 F# [3 h* M0 t( V    //////////////////////////////////////////////////////////////////////////
6 |3 H, y, M. S) U, D! N! g    //////////////////////////////////////////////////////////////////////////
" o$ ?; ^4 z; O! X+ J    CInventorySort* pInvSort = new CInventorySort;
- i  j/ G2 G2 U$ m0 x: m7 a, a    vector <sItem> vItem;7 y& u6 V6 Y3 F  X9 Y
    vItem.resize(MAX_INVENTORY);//初始化大小: m& f/ x6 _0 A' a0 I/ m. L! `2 V
     //////////////////////////////////////////////////////////////////////////8 X  v' A- m; a3 M  }9 ?1 V
     //填充数据
' u* y' O( B; W8 S* }: |     for (int i=0;i<MAX_INVENTORY;i++)) S" D* r! z% E6 g- a/ Z
     {
7 n& L- [% v4 L: g0 l9 c      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ c$ o4 K5 U7 q* V: ^
      if (!pItemElem)
6 Z/ B2 ~1 C7 B& m! x9 k. m      {( k7 W6 I) J9 [1 O% x
       vItem.dwKind2 = 0xffffffff;
$ m$ v- q% P2 z( D- v, H' t/ B       vItem.dwItemId = 0xffffffff;8 H0 a, \6 D6 [" ]: M$ j4 t# I
       vItem.nIndex = i;, ?# @& _' O1 R3 w) ?! y8 G
      }else {: |, p  [2 H9 U" n) E1 n% b& l( V
       ItemProp* pProp = pItemElem->GetProp();9 _8 O9 W0 a% [* x
       vItem.dwKind2 = pProp->dwItemKind2;4 Y5 a8 k, h8 b6 T3 `6 B/ e* y
       vItem.dwItemId = pItemElem->m_dwItemId;4 s& }7 t& M3 S% e8 T+ e3 a' p5 f
       vItem.nIndex = i;; E5 l4 R2 }8 ^) H1 A
      }
+ B; K( y1 H* [      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 s" a# x4 w1 n4 M; G& X( Y; N
     }# \" J; Z; f/ i8 _# A7 c
     //////////////////////////////////////////////////////////////////////////$ P- R$ G: t  _6 B7 @( s# R
     sort(vItem.begin(),vItem.end());//排序
- ~- f) S- E  ]4 r3 I7 f, ^. p  N     //////////////////////////////////////////////////////////////////////////
# Q: y" g( i" o( Y     //交换
% @) ~! @( R& T  [     for (size_t i=0;i<vItem.size();i++)
& _/ R' S8 X2 ~2 @  W6 C8 U. L     {4 R3 V5 @% x5 G" k  ^
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 [; X9 Q( ^5 p$ Y1 m; _2 ?
      pInvSort->Add(vItem.nIndex);
- Z5 [! a  y: w0 c8 E1 Y     }
8 y; m6 `4 v1 ^0 x' L     BYTE nDestPos = 0;3 x' ?1 y5 _! f
     for (int i=0;i<MAX_INVENTORY;i++)# T7 i) |9 N) t6 r7 @: w3 a7 a4 F
     {
' @+ R3 N, d2 V2 I4 L      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, m  z5 F& F* d! _) Y3 ^1 K      if (pItemElem)1 z5 Q. U; W3 B2 M/ v1 P
      {
) C. b  q  z; c6 a7 @       if (IsUsingItem(pItemElem))
1 N( X. q* i0 _) U" n       {
$ G* P/ f: }& x$ p# ?" n  z/ u        //这个位置无法放
* ?' p5 n* @8 a$ e6 g( q        nDestPos++;
0 @+ b8 V7 Z# a3 X       }
" x6 E9 F3 u- }' I5 n      }
, `0 X5 L7 K! g" G; z0 R1 d      BYTE nSrc = pInvSort->GetItemSrc(i);
: U) v' F! Q  O/ x2 F      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# A  v" M! G0 u( Y) j4 [
      if (pItemElem)
, n9 ^1 _$ h0 X: J5 c4 n8 V      {
. E2 ~8 y6 r; h  j. ?* s$ a4 T       if (IsUsingItem(pItemElem))4 R5 v0 w, Y3 R: \3 a) q2 o
       {8 O( T, b5 s5 I7 X
        //这个道具无法移动,跳过
4 W( K' f8 |& K5 g        continue;/ k# {" i+ e+ W
       }8 i6 ]$ X" j: a2 v0 h5 u
      }else{
* h: w$ }- Q) f( {6 |3 B       //空位置 不用动+ j1 K9 i: u* N* r/ N6 Y- ^' Z
       continue;6 O7 }" I5 N3 x# l: W! U/ E
      }
( {2 t0 S2 K) P+ Q- `  @# ]; Y      //////////////////////////////////////////////////////////////////////////- K# E6 C7 B1 R9 N4 I" u3 R7 @
      //开始移动
! t$ V% j' k7 f8 k) Q  r      if (nSrc == nDestPos)( k; b! e5 z* y$ Z
      {4 z& |# g7 v' W
       //原地不动
1 \" |0 Z7 P, M* h       nDestPos++;2 N8 i& U$ s. P7 X+ f# N
       continue;& x( ?1 v8 ^) U; D
      }; R9 ?5 p2 k- K0 D, U
      pInvSort->MoveItem(i,nDestPos);' R8 i8 c- T2 j8 D+ e
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 c) H% N$ R8 D# Y2 F      Sleep(5);
4 a( r0 A, x( `6 Y+ Y6 C/ T      //Error("移动 - %d->%d",nSrc,nDestPos);
# m' J0 W/ X: x4 R6 s      nDestPos++;
0 P# ]% W' i( O( v( X2 u8 G) l     }
& C, g+ V8 T9 K; b     //取第一个元素的信息
, g9 c/ C0 C) y# \& T     /*
5 n  y5 [3 g5 x3 ^     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& U/ w  f9 b1 Z- G     {
8 P! f! r4 h* p3 C, b      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 `9 `& m. `$ ?4 q- [      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ a) m) `( E4 M$ O3 ?* }$ w
     }5 ~! P  c5 c5 n0 j
     */$ o! x) ~) p5 u4 k9 s. B* v
    //////////////////////////////////////////////////////////////////////////) a# B0 ~: N- {* B; y
    break;
9 n$ H5 o5 R% ]% b- h4 X9 ^( i   }! I+ w; Q. S3 T0 q/ d, r5 n; Z
  }
' n& @# j. d# F* j6 ?}
! n1 i- h$ z8 {m_wndMenu.SetVisible(FALSE);
" v/ ^' F  @8 Z. W: f6 H
; A+ k& F' u/ H( X--------------------------------------------------------------------------------------------------------" V) H" o6 ?% t4 d8 x' U4 Y# r  V4 X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 Q3 K, `+ H. t# G- W. b' E' L
{6 Y6 v5 ?5 W! X' l" A( \
BaseMouseCursor();% j6 }- r3 O4 s" p
}, G# |- E( z! g& e+ B- ]% s  A
在其下添加:
4 _7 o* @( z( `/ qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 i8 U8 A# g1 w3 U{. _4 [$ e7 j* \, l
m_wndMenu.DeleteAllMenu();; V1 ]$ S9 j8 R, f; Q
m_wndMenu.CreateMenu(this);
: n9 ]" A- G; y3 i; M2 P* s7 Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; q& n2 J) V% W% ]5 n# G% L1 Q) b6 r5 B/ Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
  u5 j5 M" p' @{% `6 N* _. `. ?, @
  //P以上级别才可以删除所有道具0 T: V3 L; w: a* V& C
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' b/ p2 c" j3 k/ |6 z! b}$ a" w6 {% P  l3 \& t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 e3 ]) c0 |8 s* F9 s3 ^/ \/ x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 e1 S( T2 `0 ?1 j0 sm_wndMenu.SetFocus();
/ [+ B& B' N6 j}
' s, d& `) Z* f6 z------------------------------------------------------------------------------------------------------------0 Q8 L& c: p# }2 f
*************************: }5 O' p! r" {
WndField.h文件$ X) L0 ~1 _* {# t+ a4 B
*************************
! [: u0 a9 S* {' f; O搜索:BOOL m_bReport;
% b% J  a# V; \' C其后添加:0 ~1 x6 t. p0 F* Y( g7 r  J
CWndMenu m_wndMenu;
% I& C1 J# r2 K6 c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* f/ y) a# z" G- U其后添加:
6 B2 a; \- E) q% l% Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) x! K( }# C2 `, I$ h4 A
! J5 `0 j+ W0 `& h
  u+ X, J/ o4 j. _2 T. V) A

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-20 06:50 , Processed in 0.164110 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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