飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; O  `% p# V' t2 {! f6 d- Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ i3 P3 @9 @1 V0 f. t7 y8 ^1 R; L! @
struct sItem
9 z& G' Q8 e! D{
  A8 j; B* b0 N! C) V# r( w0 UDWORD dwId;8 w0 Z+ ^* g0 J( s& t# v$ s
DWORD dwKind2;
9 W0 O) J9 B+ ^$ YDWORD dwItemId;
& M: o8 E2 @" R6 i+ @BYTE nIndex;8 z8 F  f# ~. A, A
sItem(){4 M8 Q$ k/ v. K- z% {( x
  dwId = dwKind2 = dwItemId = nIndex = 0;
# A8 {1 k: C% o}
* a' a' c+ Q. e0 E2 |1 ibool operator < (const sItem p2)1 x' o  c& F# @% H/ I$ V: w
{
( g( F5 J5 K% d2 q: Z! C% j& a  if (dwKind2 == p2.dwKind2)
" n- r' e5 h& b6 o+ {7 o$ b/ Y  {7 K6 N, s4 l; F& D  d% @2 c7 |
   return dwItemId < p2.dwItemId;
) p" L4 R( r0 c, n7 R) m. o  }else{: e' d) ?( _% h4 \) e7 t
   return dwKind2 < p2.dwKind2;) M0 k: r5 \7 x9 i9 Y& M
  }
: l0 w. H# E4 z}+ @2 c2 R) Z7 i3 n  X$ C7 ]4 J* _
};. q: t0 V, Y8 @
class CInventorySort: z; _8 k; l2 Q
{
) p/ y4 c3 H( v0 mpublic:- U9 s2 L( U/ l; h- n
CInventorySort()
* a* p$ E9 b+ r- _5 _{
! [) `; j, g6 F) T4 j  m_dwPos = 0;0 a4 _8 f& I! P+ P) Q6 b
}7 O" H% |8 d/ d: Q8 m
~CInventorySort(){}( Y9 d+ o4 z6 T; {+ S& ^/ D
private:5 f9 S/ H: _# W* y0 v1 ~5 n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ C/ W1 j7 S8 w- yDWORD m_dwPos;3 g; [0 w" U- q7 U3 {
public:) y/ K/ ~. z, _  D) O6 u3 W
void Add(BYTE nIndex)
7 {6 z. j0 N3 ^" ]7 P* ~. h' f{
) T; G- f& |0 `" X* ?  if (m_dwPos >= MAX_INVENTORY)
. I  i2 }6 R. z+ w. L% f' r  {  D# a$ b0 a* H) u0 Y6 D; o
   return;3 {5 l: \  D. B% D
  }2 M: o! d8 [9 e5 E, v
  m_Item[m_dwPos].nIndex = nIndex;
2 X6 b- c. Y4 o. I, d  m_Item[m_dwPos].dwId = m_dwPos;3 f+ e9 W+ g. L6 }$ I# X4 P5 B
  m_dwPos++;7 F5 J& u! S2 ?/ g, L: N
}* l3 U, F: @, p0 O1 J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 y8 R0 f$ q8 p& q{
* V- n6 Y+ g% s- l  for (int i=0;i<MAX_INVENTORY;i++)+ J4 Z! M  E& r, g  T( q. h1 k
  {! w* d; b, W7 G$ k! Y0 u8 w- y
   if (m_Item.dwId == dwId)3 o& w0 T2 W; `+ ^( `
   {
& S6 L4 h9 L' p    return m_Item.nIndex;* a: ~" T' p1 H; w3 o
   }$ W& P2 d! v; M* K- [0 u
  }
5 L% o7 t8 Y, n: `  return 255;
3 q$ ~+ W# ]9 a; n) d& R}
. }" ?& H5 }0 ?1 E* ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ j' z6 {4 k2 I2 d$ y{5 R! J, G  w- S4 Q' ^* }- Y4 _
  BYTE nTmp = 0;6 Q6 {# B1 V' X
  bool bDest = false,bSrc = false;
$ y! y2 f9 q: }) `* m  for (int i=0;i<MAX_INVENTORY;i++): S% ^4 Z6 L% L  u% j9 L
  {2 N, V2 {# X1 f
   if (dwSrcId == m_Item.dwId)3 r/ F3 @3 U$ r+ o/ }
   {
6 U9 C0 h5 d4 D0 K2 t1 o9 F9 ]    //id相等 则 改变对应的dest和src
+ |. ]# f1 g$ J9 ~4 E8 s# u8 h    nTmp = m_Item.nIndex;# E3 I8 j9 w* P- t7 E% u! V! t
    m_Item.nIndex = dest;
6 v! d) _8 l9 L7 ~   }
% k7 d* e. A" S* b# y  }" d, i6 H& `0 A5 i1 ^, n% k& R& o, s
  //临时数据保存完毕,交换开始
" M% g6 i* a1 s9 F& R: m  for (int i=0;i<MAX_INVENTORY;i++)
' B+ Z# X; _2 v  {
7 G$ b% s- |+ u5 f9 R. p   if (dest == m_Item.nIndex)( L2 O: Q( |' _/ H7 f9 @- v
   {
  y9 `3 B( q+ ]9 j    //id相等 则 改变对应的dest和src
9 D- d$ [5 L$ W( s( W0 l    m_Item.nIndex = nTmp;
; k! E8 {3 x! t( `; a   }+ ~1 E/ [! x) v& j8 N% \$ e7 _( n, I
  }
1 ?0 F$ [0 I" @0 v7 o1 F! D2 g}
, u, M- |5 Y  J, n% y! r};. N% @2 K" {' s& P% w
-------------------------------------------------------------------------! o$ f, P* V/ e4 i* v3 Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 L$ y7 k, O1 z- Y) [" [! h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. C0 A" ^: M% ~  Q, k( b
紧靠其上添加:" b( O; a9 H1 D- K. I
if( pWndBase == &m_wndMenu )
9 J, z  x+ o, D# D' ~  G{' K2 j7 k' g( R5 h
  switch( nID )) [# Y4 K/ {4 {
  {; @. X( s$ a) o2 Y4 k. R0 V
  case 2:
8 D/ Z5 ~  ?% A* N   {1 ?6 v  c9 @% z! S7 x5 q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; H$ C3 f4 I5 {
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& y7 x  E. B  _7 k: [# D6 W    {
) Y% P! ~4 x; _. Q) h9 T; ?# p     break;! {) H* O, j2 i( P
    }
6 R) m: o. Q( I! B- f6 R3 t4 ~    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! @, v6 {0 q% K* J
    {3 b) l7 g; G" K0 s! B
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 L5 |/ R0 U. O+ {     if( !pItemElem )
7 R5 w/ D7 ?3 ]- N3 O9 I. J7 M6 q6 `      continue;. d! G/ H0 F. c. d* j
     if(pItemElem->GetExtra() > 0), t) [. E% f; h% R' e6 U
      continue;
6 ?$ H2 k& w+ O' A5 j2 X* R: ^     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* m% ]7 k. S! D1 `4 V      continue;
6 n! l! X- _; @* ~: _- z     if( g_pPlayer->IsUsing( pItemElem ) )) u4 A, A* d! k; Z9 |# p  V
      continue;
* \0 P0 U: M* {. m- w+ J& \     if( pItemElem->IsUndestructable() == TRUE )2 Z) A1 O9 z6 Z- C# l/ |
     {8 E1 g+ u- K5 N! m
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 d3 L; n' }; x4 g" s. u/ s& u      continue;7 Q: ^' O/ `2 i. a$ t: Y( ?% @. d
     }1 I1 x: B6 J' q& |3 E6 p5 V
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 q8 n4 t% M+ r: @% ^
    }, c. V. p8 ?+ C$ H; ~; Y* m' K, ~
    break;
# A9 i; ~  z5 E; r" Y   }. G/ o* Y$ R3 t4 N. v, }
  case 1:. v: U/ q3 T4 S' R; I5 K: R+ X, P
   {1 M: R6 E* q% d
    //整理背包3 X( ]1 V; o) i. d, O
    //////////////////////////////////////////////////////////////////////////
* f5 C2 Z% W! j  Y; Y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: O2 L0 S$ j2 T8 U4 \3 d2 s
    //////////////////////////////////////////////////////////////////////////
$ F. w/ o* \# y5 L    //////////////////////////////////////////////////////////////////////////! r8 Q# C5 {  Z( l0 c+ x
    CInventorySort* pInvSort = new CInventorySort;* U* ~4 r; E& K; ?9 ]
    vector <sItem> vItem;
) I9 ?8 g: \0 v1 X; Y, f9 s* o6 k    vItem.resize(MAX_INVENTORY);//初始化大小
% J2 W8 u! q' V5 |     //////////////////////////////////////////////////////////////////////////* S4 K% N. {2 @+ @- }
     //填充数据
: a' z- s, w0 v4 S" y& f     for (int i=0;i<MAX_INVENTORY;i++)
" K5 p* V& o# z5 Y% |; A     {+ i# m* T6 t! A
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 P5 K) T$ m) ~5 d1 a, G      if (!pItemElem)
" [. O0 ?# J; ~3 n1 O      {" _& f! N5 _7 [
       vItem.dwKind2 = 0xffffffff;
. o3 ]- D4 L0 s3 N       vItem.dwItemId = 0xffffffff;( s5 P* c3 m* V& Q
       vItem.nIndex = i;
& p: j" _* e; o      }else {
7 ?* v4 `# `% ]6 n5 f       ItemProp* pProp = pItemElem->GetProp();! v* j/ @0 z) A1 `0 p( F
       vItem.dwKind2 = pProp->dwItemKind2;, o, y. r/ r! m! x# Z
       vItem.dwItemId = pItemElem->m_dwItemId;
* t/ @- T7 \1 i' e$ j       vItem.nIndex = i;/ u; }, |$ x: b7 S% f
      }
& g, N+ V6 ]. z1 j1 L- v  I      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- r) y% c/ D0 x2 O  y     }1 T; l+ y# B$ c) u) t  h% W
     //////////////////////////////////////////////////////////////////////////
- t# G7 L7 L- ?  [     sort(vItem.begin(),vItem.end());//排序
6 b# h. _. f" @     //////////////////////////////////////////////////////////////////////////# o7 S! c& o+ k/ I5 Q
     //交换8 M% _3 O% b" M( R7 o
     for (size_t i=0;i<vItem.size();i++)
$ M- J$ Z1 K7 o( N     {# A: a- P" o0 x; [* N; k
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, ?7 n4 z0 I& k( e5 e# [      pInvSort->Add(vItem.nIndex);
+ @" \: z0 h$ _. a3 z# q     }6 u- X7 K* g: Z6 X) I* a
     BYTE nDestPos = 0;
# k7 P3 Z. J! J" r* o7 N     for (int i=0;i<MAX_INVENTORY;i++)' Z0 Z- S9 r8 E1 t8 r: O0 o& \) T
     {9 O% q# T$ r5 P% H4 v- ~
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( G. y" M; v2 Q5 ?; {% [      if (pItemElem)2 Q" u' M- U' T4 j* g
      {
3 M' D: d/ s, M. m  v       if (IsUsingItem(pItemElem))- }8 g# S& B3 O( D, m* |* v
       {
4 ]& D$ I  L/ T7 @; A; `! k( Q* q        //这个位置无法放
& S; Q+ G+ q, k6 O- U9 q        nDestPos++;0 {4 N. S% ?6 e  f+ `6 A4 p
       }
; u. V! A" h: T0 h      }
( }' N. b. i; w, ^2 ]7 E      BYTE nSrc = pInvSort->GetItemSrc(i);- B' X: N8 g' E8 `5 c+ k
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 {3 K$ X' u. b; _" l* Y) e2 h9 K      if (pItemElem)' I- r/ K; b# p/ P* }- x9 V
      {4 h5 c, b6 h( U
       if (IsUsingItem(pItemElem)): F0 I: `0 v' z* ~
       {
4 o/ [* m0 a9 w8 k8 p) m+ [7 ?- l        //这个道具无法移动,跳过2 W! F  @1 u/ Y; }
        continue;1 S5 f5 N- @* T3 P8 o4 o) S
       }7 [& }; I  y7 }" ?+ V
      }else{
9 M5 v3 l& `2 y       //空位置 不用动
7 w$ `6 o  ^# L9 b( W( u       continue;
8 M6 ^$ m4 k& _1 F, j" @8 l! c      }
' w! M( s, q; M$ E7 `! L' B      //////////////////////////////////////////////////////////////////////////3 R; S9 f9 I$ z: E* k
      //开始移动
8 Z5 q! l, F- S1 ?      if (nSrc == nDestPos)
$ P1 `$ @! h. ^- L3 `      {
5 v/ X% p1 \' b4 j# b       //原地不动' X, |# K- J% D, j4 l
       nDestPos++;* {) I3 g3 J+ p) i0 m$ z9 U! P
       continue;
& h6 I5 J! m/ w      }
* [- _& v8 b$ B      pInvSort->MoveItem(i,nDestPos);. M9 `0 W5 b8 N/ ~: l
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' f  C* r: _+ z+ D      Sleep(5);1 X3 }8 S; G' q' w- u
      //Error("移动 - %d->%d",nSrc,nDestPos);
( h) H8 P2 Q- B% ~2 }9 r  H& ^      nDestPos++;, e" ]1 K3 d8 S$ f8 G+ _' \- [  h
     }
' i2 W6 V( q7 [* J& ?     //取第一个元素的信息0 s* c2 w* N( l( n
     /*& }5 J, L9 J; Y% c0 y: u+ g
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ N: {% P7 F% a* D/ ]5 e     {" B0 z5 E+ H1 k% D3 I
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# M2 I/ z% u; L' E/ M6 w      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' U0 p4 ]7 I. A% G# c; W     }
! s7 T; N" P; P; H     */
! v( Z+ C5 g( e# p    //////////////////////////////////////////////////////////////////////////
' a4 B+ t% V( v8 Z1 o7 I5 l    break;3 Y- Y: a" F' Y2 z8 }8 a
   }) o6 ]% B: e' }' V3 O: e5 W* d- a
  }
, R/ y% p. N- R}
) G/ \2 F( J" s$ ^2 E# P0 ]m_wndMenu.SetVisible(FALSE);
$ C" n, T5 R! o1 U" w
* c9 X2 o% m5 \/ O- e4 h--------------------------------------------------------------------------------------------------------
8 E0 `- E2 e( J1 Z5 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' x$ Y" `5 C% O/ W4 g( ~7 m- E; J{
' G* V' h  A) [" \. m1 yBaseMouseCursor();
( `* F7 `  K; d; a3 g7 c}
  Z; n3 J% v8 w- w  o/ t* R在其下添加:
( f' Q% N& M; F. `/ A8 z8 ?& Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" x! d6 b; N  b/ P
{8 g. b: `- i- _" u
m_wndMenu.DeleteAllMenu();* {/ P1 o  [1 p! z% _" {% I4 v
m_wndMenu.CreateMenu(this);
( N  C/ j: d* g% v/ S0 P0 B* Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# W2 d2 H. A& z6 i6 h; F' B$ C9 N3 Q# Y- r+ C2 q$ M+ a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 x5 F  q  P8 \4 Z, t{+ ^! Q# R& l$ J# P
  //P以上级别才可以删除所有道具
  M+ _0 a5 F) w6 o0 m8 S/ `  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) w. U3 [6 i9 b1 s}& Q  B" v" w/ R! J/ L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 a. Q8 X! ]9 L2 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! I! j; G7 G8 @4 r6 g$ T7 e3 b
m_wndMenu.SetFocus();
1 t4 o3 d' A0 d: b" J4 |: s}
( |3 a! X* Q; B6 E# F9 m8 |/ `------------------------------------------------------------------------------------------------------------$ W( ?9 @. x+ d. {" M# a
*************************7 s- a1 M) ~5 {/ j
WndField.h文件7 L3 v: a& x' P# }% r+ K
*************************
( m  L1 C3 a6 X: A搜索:BOOL m_bReport;5 M+ K- y+ s; O, v
其后添加:' W6 W! R& m* T, e. ^1 e' ~
CWndMenu m_wndMenu;/ T# v( G! e. M0 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" A. }( f4 v" M* z4 a  `4 R3 Y
其后添加:
4 v9 b6 e5 [/ v" [  U# bvirtual void OnRButtonUp(UINT nFlags, CPoint point);! y+ {" D+ a' u7 ^( w. K  k
; \, ^) a/ Q5 m3 w
+ ~: s# R/ ~$ \; v- o7 R

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-20 07:56 , Processed in 0.065897 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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