飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
4 x/ q, k7 |1 n& s6 d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Z7 R; b, Y. t0 k$ n4 N: p
+ D3 y6 u* q- ~& Lstruct sItem
  ~2 H9 V& _! a+ o. I& G{
5 E. X/ Z5 R# D# W0 `" H% R1 gDWORD dwId;
8 g5 P$ x6 b3 A& ~6 q0 A& E" \DWORD dwKind2;
; g# G0 r: K1 V. B: j) f. aDWORD dwItemId;
' \" ?1 E' H4 j& t: E* w+ s8 ZBYTE nIndex;% H6 ]3 h& U  d1 o& P: w! m
sItem(){8 A+ r1 ^3 p/ W
  dwId = dwKind2 = dwItemId = nIndex = 0;; a, Z0 G( b6 T# @% F
}- O2 S+ {, V; E+ o9 e* U3 P
bool operator < (const sItem p2)
; Q$ N& ~: \# ?/ Z$ H' S; q{
; ?3 l' S; a, B  if (dwKind2 == p2.dwKind2)
) _1 p+ _+ m; A0 u  {" V7 X. ^9 h1 @( h# E3 ~! e  ?
   return dwItemId < p2.dwItemId;
. w# V* N/ P; b3 n, X6 h- t  }else{
0 l; w5 n+ e  T) r$ d   return dwKind2 < p2.dwKind2;
  n  n: a" t, A. }9 ]) W  }
  V# p8 F1 u7 `/ [2 j" a}' ~7 g9 z9 S' A9 O
};8 ~3 o' n0 O$ O8 j/ M: S7 U" x0 j
class CInventorySort
/ D$ y- W& [4 `" D) N{& U: [8 s0 ?, F3 H" M+ Z
public:1 |6 R5 G, x7 H# R
CInventorySort()
' H0 t  r( {" w{
  s3 p* \- Q. p" K# Y; S( J2 G  m_dwPos = 0;
( z: a- V4 L1 O, u) m1 v, n$ J}9 D2 J& ], j$ A) D8 @8 t, q
~CInventorySort(){}
' B1 E) j. Y& `# Mprivate:
$ w# Q) B5 T4 k8 n, v* ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; {- F6 {! ?' V0 a+ oDWORD m_dwPos;, r; T2 a  d1 a
public:
& O! Z; n: T8 K/ ~void Add(BYTE nIndex)# a1 J8 b: S" E1 B8 \7 J+ Y
{1 w: |, u& ~# _. F% O# L
  if (m_dwPos >= MAX_INVENTORY); D5 `  W1 j: u' `) N) N
  {; r! R2 c  P% A( M
   return;
7 b9 t& a  L& a  |: ~  }9 I: w8 {0 c  H' F& [
  m_Item[m_dwPos].nIndex = nIndex;* P4 s  ]4 T4 [9 ^3 Z/ |' [/ s
  m_Item[m_dwPos].dwId = m_dwPos;
. a$ }& T3 b& T" N: o' B0 O  m_dwPos++;
/ O  D2 _( q: T6 E7 b. p}
0 Y$ K6 [, n9 a; f3 Z% dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- [* X- X" S/ b6 t9 q. z; B8 Z
{: z  \# r4 p1 q" Z* j3 _! i3 D
  for (int i=0;i<MAX_INVENTORY;i++)
! k, k/ c& E0 f  {
& H. v3 |+ P' Y% s  U2 Z$ a9 a* G   if (m_Item.dwId == dwId)
, ~" M% n( {( C2 ^  t4 s5 o  p- y   {: O- R  V$ Y+ V3 a6 G' T9 W
    return m_Item.nIndex;
8 _! j) V% \4 b7 `) G. x) j, R   }
8 A0 ~2 o% H& Z  }
' _" x" d1 S  V  return 255;! O4 A/ W4 _* n: X& s# l
}8 r% D4 F0 u$ {1 R' S- {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% ]* B# s; Z. E
{
& R7 ~( S% G9 w9 [. h  BYTE nTmp = 0;
" u% C$ e  C2 g+ _) p( [/ y0 L  bool bDest = false,bSrc = false;
" Y. G% S$ }: j* x3 i  for (int i=0;i<MAX_INVENTORY;i++)
& m- n' J+ }# A& J+ f. N+ H  {$ m$ F7 Z0 T5 O1 S" A. _% @" |9 C
   if (dwSrcId == m_Item.dwId)) F7 ]" Y$ f3 [: z/ V* j6 U
   {
+ [% [% ?2 ~$ P1 p: X    //id相等 则 改变对应的dest和src
0 ]( \: [5 S( w  A    nTmp = m_Item.nIndex;& b' z4 {, k) z" o: n
    m_Item.nIndex = dest;% i) ?" a3 u  a5 F
   }  `% f  A7 _9 E4 L* c; Z4 L3 V
  }
9 I- H2 E* j7 _) x( X0 C  //临时数据保存完毕,交换开始
  a$ J( D4 K2 y4 X: K  for (int i=0;i<MAX_INVENTORY;i++)& B0 r; _2 M, h* c9 _$ q
  {" `( N+ ^) c4 r  f( w
   if (dest == m_Item.nIndex)
  s* f1 a+ y- e   {. \1 q# [3 Q8 `9 ~2 j. P: c0 s
    //id相等 则 改变对应的dest和src
' T3 h5 p& P9 q1 J; J    m_Item.nIndex = nTmp;' s$ P, K8 z% {9 {1 R) ]
   }
4 |- ?1 D9 Y3 c7 b7 b  }
5 b1 q% d! a2 s6 o+ n}
0 `- v$ w" [2 ~. Z) F};
- Z# X- h7 |. S# ^) S-------------------------------------------------------------------------8 `! ~5 c) ]: v3 V" y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ]% I# }: p; G& ]/ ?+ a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 A8 K4 j0 C9 q5 ?: Y9 O9 y/ K  T紧靠其上添加:
" F8 z2 e0 \  U; L/ e( U: t0 Cif( pWndBase == &m_wndMenu )
5 _6 e& S/ V8 z9 r( i{. ?0 ]' Q& K' i' F9 B' p
  switch( nID )
; N. Q' A8 r" _  |. s* X8 {  {
; y  D7 `6 q( P+ u  case 2:6 E& v$ R1 _: g+ {7 S1 R4 r
   {7 }7 P6 f$ W- I+ f
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. b6 p, V* T1 r# D2 M    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ^" h. A# E& x  @# `" O    {  k" }( h: q. W# C$ x, M
     break;7 V+ r! {2 A0 ?: X: O
    }. w1 _, U: u% ?
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 B7 v% z, k- J) @    {
5 F$ O; U' j6 P0 s: t     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" @6 H; {# G" u% N' b
     if( !pItemElem )
1 B1 S2 e9 t; X' C" v      continue;
& d% ^  l8 q% {9 A1 Z1 ~     if(pItemElem->GetExtra() > 0)! @& Y; _+ ^  g  G2 Q' ?8 B
      continue;
& J+ t! W# s, S( Q; U4 G. k  R+ g% D     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # G1 e; y  |# L# \
      continue;
& D, i2 f5 Y( ^     if( g_pPlayer->IsUsing( pItemElem ) )5 x* ]  D! m! t1 u1 b! r
      continue;& Z1 N- w8 t6 q: ^
     if( pItemElem->IsUndestructable() == TRUE )
4 e6 Q5 x" A3 Z5 Z     {$ o: l% Z3 o( ~& f( h' f" A1 Q9 ?2 u
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ d0 B2 P: C2 i' p      continue;& B# {  G, O. N  ^5 S
     }
4 {, `2 Z' a; o     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) G: m+ |& ~. m( d. N% Q% y3 |1 f
    }
$ i9 b- \' o; R) x  c    break;4 Z  d3 o0 e; P$ _
   }/ T0 t( U8 Q/ p4 P2 e# u, q( Z
  case 1:- b  z! Z9 }( q
   {3 u2 H$ S- w) ~& Q, t
    //整理背包2 M5 \1 t1 `5 e" J( g4 q/ P
    //////////////////////////////////////////////////////////////////////////+ z/ \0 a6 E; A# P, S% R
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; R4 i9 y. b7 _2 ?" K- a& F    //////////////////////////////////////////////////////////////////////////
* m; n3 l% s* p+ M    //////////////////////////////////////////////////////////////////////////: ^9 m* M6 _( z
    CInventorySort* pInvSort = new CInventorySort;
0 W3 J( G, n9 ?% N  M8 y8 @9 P$ n/ \6 q    vector <sItem> vItem;% a0 n$ u+ g5 F: D( c
    vItem.resize(MAX_INVENTORY);//初始化大小
/ x/ b! I# F" K; _8 {     //////////////////////////////////////////////////////////////////////////
/ Z- ^  \* h- X. W2 @  _# s     //填充数据- q9 F# M% \: o4 F8 @5 I" H; q
     for (int i=0;i<MAX_INVENTORY;i++)
3 p. Q" j1 v1 A  T     {
  x0 y" r/ J6 W9 }/ q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);  H. @% Y! j: w5 H, [0 X0 f3 M
      if (!pItemElem)6 d% ]  P; n# Z* R. ?& d: @
      {8 p3 n, J3 m# I, Y9 [- n
       vItem.dwKind2 = 0xffffffff;% M4 ]1 Q; C1 s$ B8 b6 }7 |
       vItem.dwItemId = 0xffffffff;
4 Y  \; \# |- _, [# T3 r& X; z       vItem.nIndex = i;
( C. O7 W2 f$ r0 M/ y, A      }else {
9 B$ j8 @/ o' O" Q. i$ i       ItemProp* pProp = pItemElem->GetProp();, n; B+ P3 D( O* R  C: C1 D; X
       vItem.dwKind2 = pProp->dwItemKind2;4 G0 r% y, T7 A7 d# T! z& y7 k
       vItem.dwItemId = pItemElem->m_dwItemId;7 g3 ~  o* [5 V+ B
       vItem.nIndex = i;, J" n& ]$ a; _5 _; w# `* E
      }2 O" Q4 d, m0 F# Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& T  m6 d% R7 }+ k( D     }
# u. O/ U( V: H+ R, u% r# Z* W     //////////////////////////////////////////////////////////////////////////) Z3 z4 b- \) w8 H* J: M
     sort(vItem.begin(),vItem.end());//排序
* N5 Y$ f; r' D7 M/ C     //////////////////////////////////////////////////////////////////////////# V4 R6 D" K) L% q# u/ C
     //交换
3 U# \/ z$ P$ C7 z) w2 R     for (size_t i=0;i<vItem.size();i++)
2 ~% `1 K  s7 b7 k     {5 T; z6 ]1 g5 ?7 z
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ w: A# [4 Y9 P* N* }$ R) y/ |1 h- D' t
      pInvSort->Add(vItem.nIndex);
- r  \. g: k* t: }( G: q: ^. t     }, ^5 m! h6 }6 r) P6 I) x
     BYTE nDestPos = 0;
: x# _5 Q5 q8 F0 w/ Z9 R/ H     for (int i=0;i<MAX_INVENTORY;i++)- q6 a5 G9 q$ d& h1 |" x* ]
     {% w0 {- C. R& \, N
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, W8 d! Y! S8 O1 z      if (pItemElem)
0 e9 H  V$ o8 }' A* C      {1 x* V+ \( H* o6 ^$ V
       if (IsUsingItem(pItemElem))
/ E  [! z; e4 u       {* h/ w0 q8 k$ H" i% F* ?
        //这个位置无法放: N1 a* k- J6 C5 Y
        nDestPos++;) I- \8 V* U' \' F, u2 l4 K
       }
- T; }6 p; ~. z! j$ `      }6 L4 R' _, Q7 D+ p2 j
      BYTE nSrc = pInvSort->GetItemSrc(i);
- }/ g+ H9 D% o$ m+ _$ b/ _      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. d# o6 M; w6 W( [. l      if (pItemElem). ?8 a; a2 [9 G* o
      {
& Y0 l, k: C- A  b4 P, o- Z       if (IsUsingItem(pItemElem))
' M* A- J& @( U. J: C       {7 B% Q2 U' ^! I
        //这个道具无法移动,跳过8 {( A) |" }, {4 n. V- t
        continue;! G$ H; e0 B6 U" q: U
       }2 S) M- Z' R/ u" v- m
      }else{+ `3 m& x7 ^! V$ \
       //空位置 不用动
, V/ S( O3 I4 g1 M! F4 h2 ]3 B       continue;" q) i; J6 |7 s. F1 U
      }
: s* R4 v. [* h" |, {& b3 j! c      //////////////////////////////////////////////////////////////////////////
; V6 _1 P% W3 T: k+ F/ F2 m9 S- x; Z      //开始移动
4 R% N/ k* @$ p/ `      if (nSrc == nDestPos)
# H  ]+ l( p; H; \- J0 R      {
6 U0 P, w  w3 ^       //原地不动
9 i' ^/ I8 V0 W4 f       nDestPos++;1 d) P0 l( B) ^; {& C
       continue;
* k4 Z+ M1 |  l  `) ~      }" ~; G; C! M- |2 [3 g: ~" }
      pInvSort->MoveItem(i,nDestPos);/ ]& g: o- w+ p( h# y5 q
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# m. Y/ p) ~: d9 l% o# z      Sleep(5);  ^, K+ ]0 }8 v; \7 d: j
      //Error("移动 - %d->%d",nSrc,nDestPos);
4 @) h5 t  O7 G* @  ]      nDestPos++;
& m  z2 @6 m; ^2 t$ z8 v6 m     }( W" L% C' `7 J/ J) k: T: j1 E
     //取第一个元素的信息
5 ]& N6 Y4 j* e- u     /*
) \8 d3 o: R4 n" _9 O; o     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ e, j( d" b1 v# e0 G4 B0 O     {/ Q% `' G* e  }7 {1 M+ ~
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* o  B1 |; \9 d' m! j' X
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ }- R- m  U- s0 L- [2 a1 I) |     }4 x3 G3 B, r0 `- h# f0 k
     */
' h  F/ w5 v! @, {    //////////////////////////////////////////////////////////////////////////
8 k( Y  ]" k  B. s; ^' L* e    break;
6 B. m' x4 q* p$ d% ]7 V% j) w+ Y   }
7 [) e! }% {+ ^+ ]6 |  }
; t, b0 f- n0 s7 g7 q}
5 Y% L. V' i( p# T; U) b1 o0 ?m_wndMenu.SetVisible(FALSE);
* y  u9 }5 W2 ?" [0 \' ?8 L( S0 p' t' Z  \3 V: j# S& v4 ?! E
--------------------------------------------------------------------------------------------------------- v5 r  A# v: X3 b" [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ l  K5 b) p  J9 S* B) K7 w& R
{
; n0 T! `& n' {( m1 k, ~( j1 tBaseMouseCursor();; R, w8 r7 r+ V% l6 B  e; s
}% ~, U5 j6 f- \! l& n. Q0 i
在其下添加:4 f- t( B3 U1 ]* y( L' N7 o+ s6 t- [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ E; ?3 V' e1 j: ~$ k{
7 |/ Z9 y# W; i8 M" \+ }m_wndMenu.DeleteAllMenu();  f; y0 A3 {4 j' h9 h. o' z5 {
m_wndMenu.CreateMenu(this);* u1 V3 M, k2 I3 K& U# h% g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 H( V1 T4 G) S/ s  v! e/ }3 n# `8 S& \" Q5 C- }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Y" ^5 j! J- `" l; |7 d) I{, @% r: n  Y- V- W0 L3 R5 |& d9 H
  //P以上级别才可以删除所有道具3 u; n7 x  P8 B0 w! M
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 d; H$ S4 j- R; t2 R. R
}/ A, z' y) `3 w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 {. A* q; c  m2 D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 v. Q% ~5 x# Q! ?m_wndMenu.SetFocus();% Z3 w4 w. j' k9 f1 W+ F
}  o1 l9 }# m7 @/ i: v2 s% b# _
------------------------------------------------------------------------------------------------------------- K. i, |/ b' R. h' t' F( x! O
*************************+ S6 o9 Y0 ?1 m/ p+ O9 R4 g. n
WndField.h文件
* k; n/ Y6 ?1 k6 d*************************; w0 K$ V, V+ L& I
搜索:BOOL m_bReport;
3 W8 V3 {# \* `5 M其后添加:4 G% P" f1 ^! B8 Z
CWndMenu m_wndMenu;
" Q, I7 C. z* {3 k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ?9 k* w5 Q( ~( `其后添加:
; T6 w, j3 z% M# Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);: Q8 A3 L" x) b& i5 c% {& \3 C

5 c2 H- I0 }0 W2 h' J& L% ?: G; l
4 ~0 A7 y$ _2 \  A  L  F

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 23:10 , Processed in 0.074526 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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