飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( B6 h( x2 T) J8 h/ l* W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 \  s- U( m& _0 ~
/ N# y% a. [( ~0 l& rstruct sItem1 d  Z, y4 b# j0 @4 r" J8 Y
{% s5 b  ~( L- N: I# m
DWORD dwId;% x. b  }5 G2 H+ _/ @9 B9 ~7 @
DWORD dwKind2;
. D/ y: u5 C. F) ~DWORD dwItemId;
8 J" |+ U; t0 `# y1 V' Z/ s/ OBYTE nIndex;4 G$ i( G* [* p7 ?/ R8 I- T& T
sItem(){
, D4 J- h1 d. l" f3 P  dwId = dwKind2 = dwItemId = nIndex = 0;' A% h6 P8 h; X" ]3 x; b! }
}. G& }0 \& V  D) M9 y6 A$ C
bool operator < (const sItem p2)& c' G3 O. F, v4 A' X9 z
{
' j) P5 ?: L' z  V; [9 D  if (dwKind2 == p2.dwKind2)
5 r' I# j  P6 N) i! L- f: H1 `1 s  {5 K0 R/ q. ~% c/ q% D& m
   return dwItemId < p2.dwItemId;1 h6 L7 L7 {" c' ?$ H$ U$ F. }% @8 E
  }else{
% G+ R, v% q7 q   return dwKind2 < p2.dwKind2;
+ D) X, ]7 J$ e  }
6 O5 p. I; u9 e8 x}
8 Z3 F) D: e8 j" o. F: C- d};
5 S0 t- z( H7 Q2 g) U# Eclass CInventorySort
) O  R  Z7 S$ t8 T  \1 p) y" Z{
5 O! j5 T$ f6 l/ H/ y" ~( e1 `  D, Ypublic:
4 @- K8 s, {1 Q. f/ [; SCInventorySort()  c  _* q: }4 A. q9 n
{( e$ c9 |3 I: }8 A1 z& J: t6 {# m/ P
  m_dwPos = 0;4 z" o( t- s' y7 f  I
}1 Z8 [: s. m7 k; H
~CInventorySort(){}
' Y* w5 q; s+ {+ xprivate:
) d( q0 ~' ]: I# d$ S6 y6 ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 d9 S) }  d/ }0 n: n& b
DWORD m_dwPos;1 r' d" J1 J% N4 @, v  ^
public:
7 X& Y; r& a" Y# mvoid Add(BYTE nIndex)
' Q& H& O6 ]+ }: P( o! d{# f. R- F3 H8 L& _! J0 h0 ~( f
  if (m_dwPos >= MAX_INVENTORY)& b% U1 m8 S9 |
  {5 t' W3 [# G9 l0 Z  U7 r
   return;; d- r/ P# w( j; o& Q6 Y/ A; r0 G
  }+ D, u. Y+ O5 @5 W$ {6 n
  m_Item[m_dwPos].nIndex = nIndex;
: I9 Y; T6 J6 a- L/ V% _/ |  m_Item[m_dwPos].dwId = m_dwPos;
& w$ I6 v  `. O  g- h$ F: n  m_dwPos++;
5 \; V$ O* F" T; S! @}
' m- U1 e3 G! ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- o9 {6 q3 E4 e{
! H% }: ]) v/ ^' ]* B3 {. W: |  for (int i=0;i<MAX_INVENTORY;i++)
4 r, {3 D4 N) I# M- {  {8 Q- m8 V! {, i8 n: K
   if (m_Item.dwId == dwId)- r0 u- f& {' W5 k' U, b
   {
7 u0 X* [( x# o3 _# ]+ d    return m_Item.nIndex;
/ f" n( I" F( _4 U$ S3 p4 M   }- ?* C8 q) t( ?. D5 t
  }% C- C7 [' s/ z& R$ ~4 M: Z( \$ {
  return 255;6 m# h# g# Y9 |* J8 u
}
8 o9 H' a- S6 Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! }0 Q1 I" b) u+ H5 \4 m{
' e8 R) X' M7 f' ^" i  BYTE nTmp = 0;3 d4 D7 Y) L6 B! }! }
  bool bDest = false,bSrc = false;
) `& `7 j3 O3 S0 P/ f  for (int i=0;i<MAX_INVENTORY;i++)' e9 U( A9 K% ?
  {
( o' U9 q' G5 C$ V7 ^3 q& I# [   if (dwSrcId == m_Item.dwId)9 q* B$ \. ~# D9 B
   {! ~& e1 j4 w+ {' l( J  u2 M
    //id相等 则 改变对应的dest和src. M* E) [/ N; D; Y* P1 J
    nTmp = m_Item.nIndex;# ?+ z  C( |; F" \; T# {$ A
    m_Item.nIndex = dest;- q) ~2 F/ j) r0 O+ O/ V
   }
, M, W" _; A+ Y  B, g. r$ D  }8 _3 f5 \6 \- V9 [( w
  //临时数据保存完毕,交换开始
- P0 R, |2 Y8 A2 V( @) Y  for (int i=0;i<MAX_INVENTORY;i++)
2 U0 P# x; M5 L2 |  {
3 \+ ?) H2 R. k$ T# T   if (dest == m_Item.nIndex). f, }. d7 o: y, ~1 t+ s3 u
   {, ?& @4 e# l- ~) _$ [
    //id相等 则 改变对应的dest和src' ]/ h( k) ]8 N& s+ f
    m_Item.nIndex = nTmp;# j0 G8 S7 T" i; z2 Y$ D0 n' ]
   }
, }4 v0 A+ z% |. d/ B  }
5 ]2 Z* h5 `9 r- ~}/ b7 J5 f: a$ H1 U) _, }5 s
};
& s: ?* H0 b7 z1 Z4 z-------------------------------------------------------------------------5 ]' y7 i" m8 l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 J5 c- w- w1 n" o: N% ~9 @! O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
  a, N1 J3 K' _6 k9 [4 I紧靠其上添加:
  d# C3 ]5 p# ~# H! ]4 s0 }if( pWndBase == &m_wndMenu )
" ]# Q/ t2 ]1 A7 T; p7 Q{  n( P7 O7 g6 a$ O7 ]$ r. W
  switch( nID )
, b$ C" ~) E/ T0 m  {
0 f) s4 Z: W( y4 o  F  case 2:) v, D" g2 d% N1 K
   {
( ~; k' C5 I" |" y& s; t4 q    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. Z2 O8 I/ b1 E( e    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 B& ?0 ^, b3 k# I) F    {; U' V$ i! v5 G/ C
     break;
+ o0 S; h( ~+ j9 s6 |# c1 y  x8 f    }
: j5 v- M! w# V1 c    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ }, x0 g5 ~& _% `  Q    {. Y. @) c  s! W  T( M+ O! E
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 R3 X, J, \5 Q% q
     if( !pItemElem )% X3 r3 P; i2 s# p* K( w1 Y7 Z5 [& ^
      continue;( L3 g/ q9 _* v; |* u# U
     if(pItemElem->GetExtra() > 0)
* q2 C* c: O4 X2 D      continue;
0 L' }* w( M1 v, f$ v& l     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / |2 y# X- q' x! A* h
      continue;0 I: u; y3 Y* U: E) f; ?" S" D
     if( g_pPlayer->IsUsing( pItemElem ) )5 {# w  \3 B/ {' w2 u7 L  B
      continue;
& r  v9 F1 E4 c- W, m) |9 ?4 S     if( pItemElem->IsUndestructable() == TRUE )% @. F9 a0 E  c/ u$ U
     {
, }( r9 N* V0 L7 Z4 U3 l6 Z      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# i+ [! \% x! C/ T; {
      continue;1 }  N5 [/ g$ V; w; X
     }- E/ z7 V9 j3 Y( n. l( J
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 ]7 g5 ~; h6 s    }
3 ~& U/ I6 l! h9 c' i" n7 x    break;: z) G& F' Z* L4 R9 L* [
   }3 W; ^# j% |- V/ G* \
  case 1:
. A4 K+ _$ g  E$ O/ d3 [  l) w3 K( \   {
# L! a+ R4 ?$ {! o, F& O    //整理背包2 A: @0 K, V1 n- @3 f3 z' l( V. b, r
    //////////////////////////////////////////////////////////////////////////
; ]) z. N" E: @: E    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- C* J0 Z/ V9 u5 _8 ~& c6 }8 [- Z, e
    //////////////////////////////////////////////////////////////////////////5 C) C5 H* p! A* {
    //////////////////////////////////////////////////////////////////////////: Z, ^9 ^+ g( y" N
    CInventorySort* pInvSort = new CInventorySort;
  N4 A$ ]8 k' X9 @    vector <sItem> vItem;7 ~3 i$ C6 F" a" c% ]6 p- z
    vItem.resize(MAX_INVENTORY);//初始化大小2 K3 ^& Q6 `5 M2 ^; z* P
     //////////////////////////////////////////////////////////////////////////
; t5 U) K# T( j; z3 S) |- A     //填充数据
2 g4 H5 M, N4 P+ B; R) e. ~6 A7 X& E     for (int i=0;i<MAX_INVENTORY;i++)7 f" M5 ^, R$ |8 F6 Z5 c1 C
     {: I3 m- `. k; o- @5 h
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ^3 \% V- Z4 S) J# T. x, J3 I      if (!pItemElem)( i; e! A7 X  {6 m
      {
8 o3 u6 c# c7 {* W! H       vItem.dwKind2 = 0xffffffff;. R) p3 C4 [% O1 |; A( t) e! k$ ~6 Q
       vItem.dwItemId = 0xffffffff;- g; @9 T7 u1 D
       vItem.nIndex = i;% g, ?) j4 W7 `" T
      }else {. _0 _# A' e( B. o, t
       ItemProp* pProp = pItemElem->GetProp();
; m0 B5 A" _# ~       vItem.dwKind2 = pProp->dwItemKind2;4 t/ D0 {7 {+ y
       vItem.dwItemId = pItemElem->m_dwItemId;
" S& @" j( Y7 [5 e       vItem.nIndex = i;2 N7 ~3 Q2 e& h. [2 }
      }
- S1 s) T$ ~+ S" S0 |$ P; @      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' k) |6 y! |  }5 q5 O% H2 M* p9 S
     }
! i' o! r! R- R: B- r     //////////////////////////////////////////////////////////////////////////7 x+ F9 a! O4 p0 t
     sort(vItem.begin(),vItem.end());//排序
9 ^8 a1 L' j" j1 z% o/ E, H     //////////////////////////////////////////////////////////////////////////2 q, Q! {; X. I
     //交换
. O8 F" z" K% |     for (size_t i=0;i<vItem.size();i++)  P4 F+ M( C& u* |! E& ]
     {3 T/ M8 h7 p% t- ~
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Z. A8 `* V- f: `; a
      pInvSort->Add(vItem.nIndex);) d6 d2 @" C! A- J
     }
: x6 O, x  e0 a% P- @  d" I9 T     BYTE nDestPos = 0;6 Z% Q' }3 P9 n; R  {# j
     for (int i=0;i<MAX_INVENTORY;i++)
9 `3 t. |2 |5 ~7 ]; b) R. ?) B5 v% Z     {
* q% ~! K2 q  F* f      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ r2 q2 a( v6 B& G1 y; h7 |
      if (pItemElem)$ F0 \; y! c5 t7 H
      {- i& [' u* H7 c
       if (IsUsingItem(pItemElem))' C* x( d* m% B, m) I% |
       {
! i+ X1 i" ]5 ?. P6 S5 R( R        //这个位置无法放  `- `4 d. T$ I  y# o
        nDestPos++;! W$ c: ~. `! L1 f& v$ m
       }# N4 e" Y% h% B0 c7 E
      }1 g6 e- _: Q  ]0 d" O! T! H! A2 {
      BYTE nSrc = pInvSort->GetItemSrc(i);
4 j' I4 R1 @( H9 \0 v7 J( D4 C      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; [; C0 R& c) K  b" y- y      if (pItemElem)
0 o8 S& r$ S1 m' M1 ?2 d  Z5 b# y      {# C- [2 f3 ^. W
       if (IsUsingItem(pItemElem))
  k" B, A" t# y% z9 ~       {
' y2 c* x3 }0 j* a4 _5 H2 u2 S. |7 [! i        //这个道具无法移动,跳过1 ?+ @3 a  _1 y" n# o( O/ i- H$ }
        continue;
: ^1 u) j" u) U6 K7 j: h       }
. c4 e: @/ q1 q+ }2 U. [      }else{
" }- ?. F' J4 J. B5 \- @       //空位置 不用动
. n9 r6 V: t2 {# S3 \       continue;
$ S) j8 U1 x; P9 _; a2 b* I6 Y      }
' y) i% q/ M& k( P) i      //////////////////////////////////////////////////////////////////////////
0 E' M8 A( j2 }8 @) [& w3 z      //开始移动
: F# W$ Z! ]: g( J      if (nSrc == nDestPos)* H+ z& o! p! S/ W: F3 r8 Q
      {' X. p. R& L# {; w
       //原地不动
. @- P: m+ |5 v9 @       nDestPos++;5 ~% F' x& B$ c# U& b6 \+ K
       continue;$ Z# c2 |8 e- W2 R" p
      }# W" Q$ `2 l1 ]; W& }
      pInvSort->MoveItem(i,nDestPos);6 t. S+ E/ e2 W# _: G
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);! I  b" T. W6 A4 A6 W8 T
      Sleep(5);
5 D) \% \  \3 @5 |% [. g      //Error("移动 - %d->%d",nSrc,nDestPos);
' {: F1 c" I0 W! T- x8 \5 U      nDestPos++;
  ^3 o* X9 O) `+ T1 C; _     }" l8 q; G' q# N1 f, @4 y5 e
     //取第一个元素的信息
+ f5 u! w% a# ~) V' L, b     /*3 ]) ?9 f" P. O0 i6 Y+ _0 A5 v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); {0 g% O1 T1 i) y, H$ b/ m( j
     {! s4 |: M$ V2 ?
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% g6 [; U! B) `( j1 p6 W! j
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& @: m  h8 g3 s, W, j; d     }
6 }! K# s" ~% Y. `5 [" g     */
1 J* D+ N+ y3 k; ?3 x    //////////////////////////////////////////////////////////////////////////4 M- y3 I" I. Y. M* Z7 {4 r
    break;
  U2 ~, F) N7 x( }9 o2 ~# l   }
  Y& |$ ^% x6 t% K! }  }
( k  z/ G7 Z  W8 r9 L}- b6 `  ?; Q1 R: a( k
m_wndMenu.SetVisible(FALSE);. I8 b' {) M  e9 Y# i: c3 M8 j; x

! x: j0 T* S4 M0 |--------------------------------------------------------------------------------------------------------
+ ~% {. [- x( n9 c5 _0 s- H% ~  y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 O8 @5 V6 c! z
{# j# v7 R" w$ s. [& v4 \
BaseMouseCursor();2 ^: z7 Y5 u4 [: J
}$ k% t& H6 T$ Z+ z5 c* A  M: X2 W
在其下添加:/ ~. R& e! {# C* W3 K& d- \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): r9 n) {7 y" m) y
{* t+ h9 q! ~& p: i3 g) m
m_wndMenu.DeleteAllMenu();. a  _/ e- c* u) {0 d& l
m_wndMenu.CreateMenu(this);+ a0 Z% G' B% u# I+ R5 p+ s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 X1 G- p. M4 B1 [. m6 q, r  I3 ?7 L1 \. P2 p/ T4 i9 l  n$ D6 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 p7 Y5 {& i; h$ N{  y. o5 G$ u. V; `; A
  //P以上级别才可以删除所有道具
* W3 B- f+ Q# N2 @  i& O/ K  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' ^4 D3 z3 J! i2 K; D}! q0 _! J$ w' A  _, K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& {9 n/ a7 g* b- ^6 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, |% g% g; `; v2 D; Wm_wndMenu.SetFocus();1 `* `3 S. V. Y4 C- T1 x! S
}
3 O% v* X% J1 Y0 B' I------------------------------------------------------------------------------------------------------------- M3 i- Z, d5 Q" `9 m
*************************
/ z% G" m- m# qWndField.h文件
/ Z4 a9 A9 ^' j+ N- i*************************' R3 M9 y7 Q, R! t- k
搜索:BOOL m_bReport;
. y5 A. {1 u- \7 R其后添加:
0 _/ T2 ^$ v! a, q$ f0 A; E& YCWndMenu m_wndMenu;4 N7 s1 X6 S4 _- ]5 k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 g" f5 \% f6 R3 Z- H( o1 a其后添加:
2 Z+ w% Q. ~! K) yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 r! R$ X( Z: S/ V& ?9 h# X. G7 r8 q4 r& S
% r; l& w3 ^& h2 F( y4 N( c

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-26 19:27 , Processed in 0.104774 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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