飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1070
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件/ R# W3 [9 y: H' n  \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 y" m+ P5 p1 m" p2 k  U

5 ~9 O* W3 W" q4 c" d; @, h: Pstruct sItem3 L4 o" Z+ r+ f
{8 b# ]. L. x4 p4 Y
DWORD dwId;
0 g1 o: }8 `! A" N6 IDWORD dwKind2;
7 \/ ^4 }: B5 f$ ADWORD dwItemId;
8 r' t. z/ ?* H7 DBYTE nIndex;: O) D$ S' V/ n; G! l  u$ K
sItem(){0 d. `! _2 u, F& |7 f" u* D
  dwId = dwKind2 = dwItemId = nIndex = 0;
  _) Z7 l1 l9 l+ f}
8 W& D0 W- q0 D6 l. |! Hbool operator < (const sItem p2)+ u; N7 w: U) H
{
5 E0 k; M0 q, g8 I1 z) w5 X  if (dwKind2 == p2.dwKind2)
* o; p7 o$ ^% M% e9 u  {. F; o7 M4 C' b& I
   return dwItemId < p2.dwItemId;" L4 \& B; k) g" N1 S1 d
  }else{- j1 Z, G9 k, l' S. h
   return dwKind2 < p2.dwKind2;
  ^$ ~' a" t3 u) a  }! c& M+ d! [; _, G, D  `$ D
}( X- J5 L0 k1 |/ _
};
0 G& W; w% Z/ N4 i* @5 f% m0 _class CInventorySort
& F- N0 N9 z; O4 n" V/ K{6 n% U& L7 Z% H) y
public:% @1 h( W$ W# f$ \" f6 l
CInventorySort()' r6 p7 e+ w  V% I$ q( Q& Q! A
{: I' t4 ]' i6 @" y* q$ e
  m_dwPos = 0;
; c0 m+ b6 {' ^}
( o$ a: I' _9 c~CInventorySort(){}/ h/ m$ b6 o3 F! I" ^% M
private:9 D' _( j2 N8 D' H
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, _- I# R- ~' t9 zDWORD m_dwPos;' L+ F; n9 I) H) c& t
public:
4 n, g: L. k7 q# l" Cvoid Add(BYTE nIndex)
: r$ A; H8 F; X  R0 j2 _5 {$ C) c/ P{3 T& `/ E5 B; w3 h4 W# M& g1 ^
  if (m_dwPos >= MAX_INVENTORY)% s3 e/ U" q4 ^0 ^! P# o
  {
0 n( C% [+ l8 I  R4 o8 j  ~" d   return;# ^0 ~; C3 x  O7 i2 u0 S" L/ i
  }
% T! f* e& h% M- F( i9 h% q  m_Item[m_dwPos].nIndex = nIndex;0 U/ v+ W& x, T* t# b
  m_Item[m_dwPos].dwId = m_dwPos;
, U- \: j+ L: `$ @  m_dwPos++;
& C$ j9 C: p( e) V}4 `% O% \4 G2 \# O9 ~4 ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 l0 O1 v3 Z' ]' a8 k$ R' g: T{1 D! j1 F* l) _2 w% o5 p6 I
  for (int i=0;i<MAX_INVENTORY;i++)- v- s/ i4 `0 }1 j
  {9 g: r4 E' J, k  V3 |& j0 u
   if (m_Item.dwId == dwId)
6 v' i8 e3 S8 O$ o2 p8 k   {
: ~: L  F1 N+ |8 I4 r# ^6 y    return m_Item.nIndex;8 V) V8 A0 d& j5 U* k
   }# ?1 q" ]- P5 Z: j0 Z6 J
  }8 a9 X, I1 y" F3 ^2 H8 F. Z
  return 255;; n6 X6 x$ l. M
}
9 q* F6 W1 V( A) N8 V4 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 f  b1 g7 Q$ i) a5 x
{: Q) Q1 A0 {2 H) v1 g, a* ]5 b
  BYTE nTmp = 0;  i/ e4 @! u- r1 \
  bool bDest = false,bSrc = false;. i) N6 g3 `+ K* N0 a
  for (int i=0;i<MAX_INVENTORY;i++)
1 E9 _4 Q6 @! E5 L' K  {
; ^3 v- H# H+ n; h2 K, L6 m' X   if (dwSrcId == m_Item.dwId)
1 n4 R! |. N. \% Q; ]; u/ I4 L' Q& b   {
( |+ l$ Q- j( W    //id相等 则 改变对应的dest和src
/ i( Y% O, l0 n+ w- p    nTmp = m_Item.nIndex;
; X  D; `, I# a9 s7 ]% _    m_Item.nIndex = dest;
  P& j: _3 {3 Y6 |   }3 r6 V" b7 J5 B2 `! \% n5 `' a6 |6 I
  }/ Z( H( M  q6 }# e
  //临时数据保存完毕,交换开始( `5 \& a1 Y/ q
  for (int i=0;i<MAX_INVENTORY;i++)2 d# m" K3 @- W8 b! J/ y0 k& r
  {7 D  t9 h9 e- `8 b& q
   if (dest == m_Item.nIndex)
0 ~9 J/ \+ ~6 I, a   {
: P, l/ v( ]3 f& f    //id相等 则 改变对应的dest和src
4 X* m( z. e3 a' h2 t    m_Item.nIndex = nTmp;
  Y5 d- R, o, A# |  G$ }   }" ^- @: {# @. x8 o
  }) {. L( M+ a+ `( \* w& N1 P9 m5 [
}7 c3 E( J6 d1 K8 L2 e3 h: K/ E, v2 A
};  r) ^6 P* x9 C# n
-------------------------------------------------------------------------/ u; a7 j/ i* }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  n+ z  o* F0 v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: }! u( }$ O- ~3 |/ S! N: A紧靠其上添加:) d  p, R) D2 a$ J, d) j5 F
if( pWndBase == &m_wndMenu )
- Y2 N# D! S) m{
+ }& _2 P' u: n  switch( nID )- b' U& a5 T+ m) z1 u) \4 K' {0 O
  {
. c. \+ Z/ ^; D5 L5 b/ x$ }  case 2:5 Y4 P4 M. q3 T8 ]: Z2 V
   {
& ~7 r, I0 Q  b# h$ y    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 H  k7 F* M" X  J8 w
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& Y8 `* t$ U9 N5 {  M
    {) ~2 q7 K1 [0 _6 x
     break;
; Z/ l, j$ h" b: H6 i    }
6 j% u& ]7 k) D    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- P. [& A: r  C$ h
    {' i% w# D% t/ Y! b
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  @! n, p( i4 o     if( !pItemElem )
% [: G* ]! K9 y3 f      continue;1 \: u- [- w1 a  Z4 i$ J  n) h
     if(pItemElem->GetExtra() > 0)( `+ z/ ^! O4 v2 A  P0 p
      continue;
8 \* e' A) v+ x0 g8 ^     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 p$ p6 _3 v' W9 i      continue;
/ h& }6 B- `( m9 F4 x$ ~# h/ u$ I     if( g_pPlayer->IsUsing( pItemElem ) )
8 k# I4 f7 h6 _% A      continue;
# V% Q2 m& e- v5 |: F! B6 R! l     if( pItemElem->IsUndestructable() == TRUE )5 V& @8 U1 y+ e- A. D
     {1 K  f: _! u8 L, U! m& s
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; L% p: {% F# L$ t6 T9 M
      continue;
8 a, [4 Y$ L1 X* F     }# O; F/ W  O$ J+ ?; `1 \7 w' o
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);  u3 ]; U0 i+ t* Z# Q; J- u0 ?
    }
6 ?! [6 i7 q2 ?5 u2 I    break;
. Z# f8 A) v* ~+ ^- K   }
$ C' ]3 x9 H) I6 C2 ~  case 1:* i" Y9 ?. }* }, |& P9 I0 l
   {
# Y3 H' U5 I. {! S# u9 |. B1 d    //整理背包
- q; j* \% r& }2 J2 W# W    //////////////////////////////////////////////////////////////////////////0 T# n, H# O3 W, b9 t- n
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 \0 x/ ?# K3 Z5 v    //////////////////////////////////////////////////////////////////////////
9 r  t; E$ k4 `$ y    //////////////////////////////////////////////////////////////////////////+ A% `$ `6 r( L  I" m0 i
    CInventorySort* pInvSort = new CInventorySort;! r" B: \: A( [- x+ \) C. [" A* ~
    vector <sItem> vItem;; m7 ]4 L. ]0 Q7 m
    vItem.resize(MAX_INVENTORY);//初始化大小% E- n( U( Q( b
     //////////////////////////////////////////////////////////////////////////8 R: \4 [8 v0 s
     //填充数据
" [. ^' k% {1 h( X     for (int i=0;i<MAX_INVENTORY;i++)
9 g: u) P5 f* G+ N     {
3 v0 x0 j3 Y1 ~/ o& S      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 F( _& |% @2 k7 Q# ^      if (!pItemElem)
$ ]- n0 l) [# C3 V  I      {
9 M  {8 A9 j+ c/ Z       vItem.dwKind2 = 0xffffffff;  ]$ l' ~/ E1 G9 c8 T5 G9 p, G% q
       vItem.dwItemId = 0xffffffff;
$ o  q6 x% `, U0 |$ k- b; _* J       vItem.nIndex = i;
3 z3 l: J# P; ~+ X0 a, F/ p      }else {
) P9 S, @# D+ ~& q; f, k       ItemProp* pProp = pItemElem->GetProp();
: k' a: z6 t. g/ }       vItem.dwKind2 = pProp->dwItemKind2;% x. l! T7 k% |7 j" {# P1 C
       vItem.dwItemId = pItemElem->m_dwItemId;
4 h  G1 r; T' ]: P+ r' V$ `       vItem.nIndex = i;6 w( l( ~2 T. Z' G5 ~
      }7 B9 j+ C  X1 V+ t' I' d
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 T9 C. T/ r! j
     }
- F2 q/ x& X5 e! B7 X& z0 r% B$ t" K     //////////////////////////////////////////////////////////////////////////# O* D5 j8 N/ ]: v
     sort(vItem.begin(),vItem.end());//排序% T* G* {6 ]$ `& Q" i
     //////////////////////////////////////////////////////////////////////////
1 k* P+ R% K5 s2 N, a4 {. T     //交换1 u- Q# x: R- U- I6 R
     for (size_t i=0;i<vItem.size();i++)
) Y- e/ Z! @& G     {
# H. D0 g+ ]4 N- k0 y4 f3 c      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. z  s% Z9 E. F" H      pInvSort->Add(vItem.nIndex);  @# ]! V8 m+ P. |4 L
     }, g" I) S) K# S0 p# L$ }% Q0 g
     BYTE nDestPos = 0;  j& f) F, H' e8 I9 @6 ~9 q4 W
     for (int i=0;i<MAX_INVENTORY;i++)
# p7 _8 M0 A- y8 |% }. @     {: m2 M$ I; @1 E) B) v
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! x7 A! o( Q4 R6 M  e' \8 ^
      if (pItemElem)
1 |4 L$ D. _+ |# z, H/ h; [9 k. q+ [" G      {
! w, f% d- h5 ?3 X% n2 v3 d       if (IsUsingItem(pItemElem))
# ]3 }4 H/ T7 d/ U: z+ k. D       {; L5 ^# F" V7 H% e
        //这个位置无法放
7 w) ]- f2 \+ i" ^* ^, W        nDestPos++;; k; [1 Y2 E4 A, ^  _
       }
: n+ }9 B5 V6 U8 q: H      }+ J; C! ~  e- \! n, `
      BYTE nSrc = pInvSort->GetItemSrc(i);
- q1 @) b0 ?7 v; F1 z      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 c$ t3 E& C0 k" l/ G/ J8 |4 N
      if (pItemElem)0 c  H; a4 f& i9 j9 I9 U
      {4 M8 ^1 e$ O& D) @8 [4 ?2 W& @
       if (IsUsingItem(pItemElem))* [# ]$ L+ G3 M" j6 R; C
       {
" J; G; E' ?2 P3 C( E0 r        //这个道具无法移动,跳过& P2 |$ v& M. `) K: J: z" a6 q8 I
        continue;
6 p# N; C5 t& v, H! O, R       }
* D6 J8 ^9 k, t5 Z9 ^      }else{1 h, {+ T; @3 A6 Q/ ?& ?! d
       //空位置 不用动$ ]( Z; H: F. p( C* \, M
       continue;
, Q+ `) t: e2 W) @8 V2 Q      }: e) O' S) |/ Y' U; ~7 |5 [/ f
      //////////////////////////////////////////////////////////////////////////
1 @* e7 M1 R+ z( Y5 m      //开始移动
/ d' j- b1 h" N2 C0 k      if (nSrc == nDestPos)
/ ]$ ?2 p7 e5 C  C& Z      {
6 S4 ^/ f3 {/ b2 H* K: _       //原地不动; |# r# j5 m8 a1 S- G
       nDestPos++;; _8 l& ?) _* d1 l
       continue;, `$ O7 D3 O$ h( c
      }9 n4 M  K* U% L7 j0 W
      pInvSort->MoveItem(i,nDestPos);, p. a8 X1 h. J1 o5 Z: G8 X. |9 g
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& K- |% w% _. \! e; Q( e. T      Sleep(5);9 ^- e& k/ [4 j' `, q3 J/ n+ H
      //Error("移动 - %d->%d",nSrc,nDestPos);8 ~9 q$ \# v: i
      nDestPos++;/ }/ w# I7 z6 i' k8 F& s
     }
) W( [5 k0 ~$ U1 w     //取第一个元素的信息
" M7 y. r+ x* Y     /*) j2 v1 \$ @; |1 k4 s  b, t
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' ^, h) Z# q; f- n     {7 ^% Y2 ]. g! n7 H% t: q: v8 `+ ~
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ S9 W9 r) d$ @) v/ g2 x      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. M" {9 G* g8 }' S% [2 |( Z     }
; h4 {, H' k* f0 [: z     */+ v0 \6 [6 V0 ^0 G( u
    //////////////////////////////////////////////////////////////////////////
0 q0 M! A  @3 x. K    break;
9 @! y* x" Z2 j& D   }- U- O. q& |! O6 ^1 h- p0 O" o4 c
  } $ ^3 L) L, F. [8 A- a1 o/ D
}* m# X# x" Z, v$ U
m_wndMenu.SetVisible(FALSE);# y& S& i& D$ |+ P& H
+ D, X0 t  {1 K9 d- R3 r" b: h
--------------------------------------------------------------------------------------------------------
* p. J1 B% ?+ w6 N7 Y* [2 B' l* s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- Q7 K! c: G8 Y; r/ n& i7 F
{( z" [: u& @3 r% h/ A) [- z" R! g; }6 C
BaseMouseCursor();
4 _; ?) }: @* K8 O7 ?9 a0 C}
- p5 R; v6 I7 O在其下添加:( A5 F; r9 E3 }9 Y, O. S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 p% W$ k" @- x2 T
{
0 R9 q. m  b% Z( J5 M$ Pm_wndMenu.DeleteAllMenu();3 z* z- V. y, r/ f+ h  ~
m_wndMenu.CreateMenu(this);
2 c' ]  f- A( d9 L# d: Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 M2 ~! @$ I: F* o6 l7 i! B# O

+ K  _4 j2 r# G! R/ Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ r* G2 X( {  Y! y$ q2 l2 w* q{, e6 j8 |9 D# C0 K8 B
  //P以上级别才可以删除所有道具" t4 ^; M; G' O6 X
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 L  T& L2 t4 Q3 V' j# ]( ~0 ~* y}
: B; A4 \& ?' C  bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- \9 O+ E+ L' ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 J8 `1 }- ]- l1 y7 Om_wndMenu.SetFocus();! |1 i- w' y/ J! P: b  Z: Y& u
}0 d" X# ~/ P/ X+ Y8 a5 `
------------------------------------------------------------------------------------------------------------$ k; T" K( @3 i+ ^' o. x
*************************) t, r4 R- ?$ b% R& W
WndField.h文件
' M1 t3 w( g. ~1 @+ u& j*************************. v: ]/ C% `1 L$ y& D; i9 i( }
搜索:BOOL m_bReport;* }* m7 c8 c  v5 j+ m- @
其后添加:  P% p( y& t6 A: ^4 ?$ P
CWndMenu m_wndMenu;1 K1 M" D6 O& W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: U8 ~* J0 f7 u! [
其后添加:
- G  g0 r1 u& E  `virtual void OnRButtonUp(UINT nFlags, CPoint point);
, Q- C! M* G$ |$ r0 T1 U* _$ Z) I  o. J3 K

) W- Y' o1 W. b6 c4 Q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 01:54 , Processed in 0.102931 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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