飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' z6 i2 n9 r8 D/ o) }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). o9 j' m$ F, {( Z) d' `
8 X% [2 p) J# O% v4 b% m- h
struct sItem/ G# r! {: n' s5 X) l; ^
{% a! I9 C$ q& B' L1 h' I! s
DWORD dwId;3 V* t0 P6 n. O0 Y1 J
DWORD dwKind2;9 x& [2 M! q0 Q% {* E. G
DWORD dwItemId;; X: e  N' x( g2 @. Q+ [( V0 g0 t
BYTE nIndex;2 n1 T* u# J) _% X, c6 V" x
sItem(){+ Q; _7 E* \9 `/ b
  dwId = dwKind2 = dwItemId = nIndex = 0;
* m7 Y0 t# Q; Q- X0 \, S' J6 x: G}1 d7 r, r6 h) S  o# i4 \
bool operator < (const sItem p2)
6 ?6 ^' j5 O: D& N. t3 i( A{/ K' K, W8 k- x( w+ j8 h1 Y; ?
  if (dwKind2 == p2.dwKind2)
& H' i/ a+ y4 L; d  {# X/ O) Y# K7 B5 j
   return dwItemId < p2.dwItemId;% ]9 L; ]9 c+ u3 J- E3 V* v
  }else{
9 @8 Y: c5 @' ?! _, n' U   return dwKind2 < p2.dwKind2;
; `6 w+ S; b6 z! u  }4 D9 w4 {( s6 B# K3 c
}
# x3 }; J7 a- f4 ]4 g};3 p, U2 Q" S5 r: A$ X
class CInventorySort
; J! g% q# K$ ]% U% g9 ]5 {6 {* k{5 h" n3 i5 L2 l& i
public:7 k8 e! a0 X3 i+ W- G
CInventorySort()
; W6 L2 b8 _$ a/ w{" ~* q7 [3 X+ d8 H) ]2 o
  m_dwPos = 0;( E8 N0 o! B+ F" V
}* T! O( y2 k/ M' H5 i7 V  _$ u5 L. c
~CInventorySort(){}
. P' u( d+ e5 I2 e0 v) {/ `private:, x  m# B4 n" V( W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) q, l! r8 h3 o6 Z. E
DWORD m_dwPos;
  ?$ S! o$ C4 P5 wpublic:
. J9 W& T7 ?3 g( uvoid Add(BYTE nIndex)* ?1 S7 D8 @  F# l% K& u
{
3 L9 r. G$ `. s1 V  if (m_dwPos >= MAX_INVENTORY)
. \& a; ^  s" y, \  {) H2 _' y" i6 a( H0 i  G
   return;1 u# Q1 N2 N1 N6 n7 z; N
  }
. H7 A6 i* |! B) `  o0 A  m_Item[m_dwPos].nIndex = nIndex;
& ^( G# j2 @: J  m_Item[m_dwPos].dwId = m_dwPos;- T. v; [) r1 h
  m_dwPos++;
  G- t, S7 p* B, R/ G: m6 o' p}9 A& B- Q/ L; r5 M5 f: w$ Z: d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 k/ ~1 h$ a) g+ u( M+ T" C* u. ]{
4 g, q7 a% a9 k9 G/ o7 V$ P  for (int i=0;i<MAX_INVENTORY;i++)
% _+ B7 |8 J) J; V! d: D, F: R  {: k, w3 @% E$ O4 a% l# j
   if (m_Item.dwId == dwId)- M- J$ f& \# o. x* X! D
   {" i: {  i1 W! x% \
    return m_Item.nIndex;9 b4 |! v7 S7 |$ c3 o' c: X0 x
   }5 X9 X2 v! m. B' [! E
  }
0 B' A7 s$ H2 d. x- v$ W  return 255;
- [0 A0 ~" H) m. G9 V6 l}$ }* F  p' d' ?  o' |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) ~. P; r1 \5 t+ J2 M0 Y0 y{
+ f' V; o9 Y- B$ p% _% G  BYTE nTmp = 0;
3 E% l$ g, L; N- z7 }  bool bDest = false,bSrc = false;/ c, R' r! [: C4 t, U+ T- O
  for (int i=0;i<MAX_INVENTORY;i++)/ Q" R, W7 W. ]/ |9 [
  {, l5 L- Y3 v9 b5 z$ T
   if (dwSrcId == m_Item.dwId)5 j3 J& x* w) c7 J0 O8 L/ p
   {: P% C) C+ P* {3 T0 g
    //id相等 则 改变对应的dest和src" h; r( N5 \, R- E! L: }9 C, ]
    nTmp = m_Item.nIndex;" ^9 w9 }2 h. k( }
    m_Item.nIndex = dest;4 O; o5 J% P3 A
   }6 t" {3 o# Z: i" J$ `( _4 ^
  }
$ }4 b+ N$ C8 x, t9 c  //临时数据保存完毕,交换开始8 \4 ?+ T& o0 J& i3 T
  for (int i=0;i<MAX_INVENTORY;i++)
7 b! F2 S9 }5 q  {
- b$ N. ^. o/ d* ?$ ^: p$ P& o7 k- k   if (dest == m_Item.nIndex)
4 K( X1 r' F6 j) ?8 ^/ G5 Z   {
# ]# G6 i1 R8 F, K5 H    //id相等 则 改变对应的dest和src1 P) E$ `( J! E7 I, O/ b* z; l- _
    m_Item.nIndex = nTmp;) F% D  M# ]% e* U6 @) u) s3 R' K/ C
   }
9 w% z* n/ ^/ q) {( U, a  }2 T1 }, V, Q5 U' Y! @
}  ^5 w! \$ l( |1 f" a. J3 b
};2 {6 L1 O! ~5 ^  [
-------------------------------------------------------------------------
' H! ~( [+ {8 Y0 x$ {依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 g: n9 a0 R8 @+ A6 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 K3 ]+ {" {& e0 \* x: Y7 E紧靠其上添加:
! x, j/ H1 }5 G! ?9 e4 yif( pWndBase == &m_wndMenu )4 q" M% e" t' G
{, F' h7 M5 ^: F+ L) D
  switch( nID )
9 K; b! R, G' a8 G* W) d& S/ {  {& F4 w; h0 o0 S8 W* e- D/ c
  case 2:6 M! C" ~( U" E9 y; y
   {# J2 s7 [! n' R7 t' [( l7 H
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) C& v' u1 q* W
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ G6 P% p$ {. M8 `" ~0 j    {" ]* W% f* |. Y- {, }
     break;
( |5 @  b& [4 j9 X    }
) L; L; D' ~' [    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 o6 B2 f4 v' D: X# z# i    {0 ]. T, _' w! G1 X1 ~5 T! L1 w3 N
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. Z- d1 N6 ?! w: q) x, N     if( !pItemElem )
! D' a9 I) W1 o  R. s8 X/ Q      continue;. r  w. k  L! K) [+ ~
     if(pItemElem->GetExtra() > 0)
. J% R2 Y1 V* J, {: T/ T9 ?6 a      continue;& X+ b- `; I+ v" O$ ~# }) S
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 ]# Z8 N5 [9 C7 P2 o* L. C/ s* d      continue;. l  ^' _& }$ |8 }
     if( g_pPlayer->IsUsing( pItemElem ) )6 N( v( K5 @1 ~# r* j$ w4 O
      continue;! \* j3 N6 J+ a! B( P
     if( pItemElem->IsUndestructable() == TRUE )! d" y/ n$ F7 n- I7 S
     {
: A9 b. r( g! Z      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 t; c- T0 Q6 j1 ^* z5 m+ u      continue;
( u, a8 E" J4 q5 }+ N; X% k* N; o     }/ }4 X# h, ^3 `5 R
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* k! }- B: ^! s+ D. }8 k    }
0 i# u) n% Q3 R- x7 W9 ^. [    break;& f. |6 c5 f+ c7 S# S2 Y2 S
   }5 L- S! ?. T' {- ^, f3 H- w
  case 1:
5 \+ U. d: @6 I( s   {
& Y4 J( O% l; F9 t! H) S- i3 ~5 {' O    //整理背包' E5 ?- B; i2 c3 o
    //////////////////////////////////////////////////////////////////////////4 Y+ u& H! H. ]3 F
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 b# _3 L* C, O; s
    //////////////////////////////////////////////////////////////////////////
  _2 b' t2 V. N9 A8 }# P; F    /////////////////////////////////////////////////////////////////////////// G, V( z, ]( _* y- Z, n
    CInventorySort* pInvSort = new CInventorySort;
: N. d0 @  R" k# J8 P( [    vector <sItem> vItem;
8 D  Y4 T) P5 a. U' j    vItem.resize(MAX_INVENTORY);//初始化大小
0 O* a1 O; T1 n6 @+ O0 ?7 V( k     //////////////////////////////////////////////////////////////////////////2 ?" h9 `3 G+ z0 e. O' E" e
     //填充数据% ~  p& B+ \0 U) l4 L" B* e1 P
     for (int i=0;i<MAX_INVENTORY;i++)
6 S3 l8 X! l( o5 ]     {
  v' A& ?% K, O      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  I5 z: Z$ a( k  C2 _* h4 U      if (!pItemElem)
# k9 D! H5 B3 g% W# m* f2 C      {
" |% f# |) n  C% I% Q* I, m       vItem.dwKind2 = 0xffffffff;
' \% n! a5 R- B5 k7 G1 i       vItem.dwItemId = 0xffffffff;  H' R( ^3 R+ L1 T( f1 b
       vItem.nIndex = i;
) Y& G9 Y- y+ K' @! R  e; b      }else {7 B& t1 F- t, R6 H! `
       ItemProp* pProp = pItemElem->GetProp();) h9 [' K2 z; T/ U  l1 g
       vItem.dwKind2 = pProp->dwItemKind2;
7 T% P$ {0 h9 n! @       vItem.dwItemId = pItemElem->m_dwItemId;
" ~6 ~( U" P0 g; y       vItem.nIndex = i;) m1 i" x) U# b+ R* o- X+ H; B: d
      }
+ ~% p3 v5 L% C, D! B9 s: e      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 {' j  Y& H7 G: g1 G# }
     }
& h6 }6 }( i" A& i4 q0 y. t     //////////////////////////////////////////////////////////////////////////
7 E! Z9 c& J8 E6 q     sort(vItem.begin(),vItem.end());//排序. f- p5 J# m, W; Y7 I, Z1 j$ t6 j& Y  E
     //////////////////////////////////////////////////////////////////////////
5 ?* A7 L1 w9 E& N, Y     //交换
8 b. b. q% q" N6 r$ k9 o     for (size_t i=0;i<vItem.size();i++)  k* K% b0 ~' i1 O/ o
     {
8 O5 q. A6 m4 {( l$ R( j- Y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, _: Y1 d$ }) g5 C4 _0 ~0 d
      pInvSort->Add(vItem.nIndex);
3 A- d/ W+ @. M9 W) n  v     }! b' }& `2 S% v9 q% t
     BYTE nDestPos = 0;8 N( t; I9 j2 I3 p9 d
     for (int i=0;i<MAX_INVENTORY;i++), ]- o3 A; m1 b3 ?% L8 x- z
     {
8 W* K( }4 r2 {2 V3 K/ Y3 P, P      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( w6 w. {; d  c  h3 F* Z
      if (pItemElem)
; F% @3 N  n" E& _3 ~! t' w: q      {8 i- U, K: M* w. {" t& g
       if (IsUsingItem(pItemElem))  e: W, ?; o+ S6 F2 ?% d
       {1 Y" v: ?# m9 u5 m, e1 K
        //这个位置无法放
: q5 F9 h4 O7 b        nDestPos++;& X. M+ J- o6 Z
       }
+ b- J+ J0 ~! g: T$ |, F( `      }3 q+ r7 H& t+ P' H6 s5 p: V
      BYTE nSrc = pInvSort->GetItemSrc(i);
2 c, X! o# K# e9 R      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 K$ y9 c' h% C2 ~5 ]      if (pItemElem)
- ^% @0 h) t; W2 L0 ?' n      {
/ ]( R+ M9 V$ d% s       if (IsUsingItem(pItemElem))( s0 Q$ J+ s1 w+ C
       {7 n: u! Q$ \0 ]; z
        //这个道具无法移动,跳过2 _6 N' ~  ]' i. c, _
        continue;9 Y. P1 _; @! I2 E2 w
       }' P" N, y. z4 L4 {9 |
      }else{
' }$ k5 g7 ^4 ]7 J' }4 y; y! W       //空位置 不用动  y0 z) C6 r* N3 |
       continue;! f' W3 i& S& H4 T
      }
/ m* _$ I+ Y" I      //////////////////////////////////////////////////////////////////////////- p6 D  H4 U0 r$ @+ _* \; _% @
      //开始移动
+ L: x- s* t% g      if (nSrc == nDestPos)0 e6 I; H5 \" p4 {& Z9 `
      {- g; p& t8 x' Z* V& j- _
       //原地不动
+ H! T. b+ Z5 G: @       nDestPos++;1 n! U3 L% A" M
       continue;
7 v9 W4 P3 F: D( t. H  k" Z! N      }
- h$ L: O8 _$ o1 x      pInvSort->MoveItem(i,nDestPos);
- D9 o% R8 x# h: I( r      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 F! v+ {7 s" |( Q" g7 o      Sleep(5);/ s* ?% `) _5 K8 d
      //Error("移动 - %d->%d",nSrc,nDestPos);8 ~8 J7 O) e4 b; l# f
      nDestPos++;3 Y7 T7 {+ _3 Y# _! E
     }
% J) a. n7 k5 X' C     //取第一个元素的信息
9 \. B1 f+ G) |3 X: \$ C% }% B     /*) C* F8 P7 k& \3 T
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 b1 l. G% ^' D6 r% S     {
5 H+ {; x5 W3 g3 w$ ~& J      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 t& m) W5 ?. T$ ^. [7 S5 b# S
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( @0 j( w; D9 D* x# p! `) _
     }. c8 D5 m8 T: B1 r; E4 z% g! u
     */
8 E  x% |6 D* T, U. d1 v    //////////////////////////////////////////////////////////////////////////
5 V; R" T; @( b    break;
) O. c9 a$ I4 K# V% ^5 r7 }   }
* ~2 I6 S0 N* ]) x- V$ T  }
$ u/ O/ a" U, }& c% d}6 v% Y: i7 y! L& R6 `
m_wndMenu.SetVisible(FALSE);
/ m! n  A. C# e$ F1 _- H6 x. e! S% v+ b
--------------------------------------------------------------------------------------------------------# q* b9 Y. ]3 ]/ x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% R. V# x4 ^$ K) ]3 }1 d/ E: H7 |
{* M. d8 b( V0 K2 s2 Q" ]$ g
BaseMouseCursor();
0 M$ F7 B9 I$ ]1 B0 R3 n}9 a5 ]; G% E  t7 D$ P
在其下添加:
8 N4 K& G; v8 I5 U4 hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# s# `, A, S: U/ a+ d+ x' Y+ ?, m{8 t' Z! [" S( O: e5 H* T8 n8 u
m_wndMenu.DeleteAllMenu();
2 K. J9 {' i! N  Hm_wndMenu.CreateMenu(this);
( P+ ?' D' y( G: k' t: j6 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- e/ O/ I& T+ Z6 s" T$ N; X1 d) Z$ s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# Q6 y6 k- H+ ?/ ?3 G/ q9 u
{
  e' j2 p% I+ x3 u* F: ?  //P以上级别才可以删除所有道具
, {1 J& K9 q8 t5 N2 S  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- T! h2 p. `  k2 i" D}1 g. \# K" F1 k) C0 C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );  G5 Y. e" g1 f& Q' h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 N. C4 X3 W9 u0 y% j5 m. p5 }" A
m_wndMenu.SetFocus();
0 X/ _. Z9 U( |}
& ]: R) a6 L0 n  e% a------------------------------------------------------------------------------------------------------------+ P: b  Z; k! c) w7 \& q) t# L
*************************, z5 V/ |8 C: b" H8 ]
WndField.h文件+ [( b5 H( v" b- p
*************************
. y7 \7 Z; D$ w" b5 B8 i) r搜索:BOOL m_bReport;, t! Q( Z. g  B" m0 A/ E
其后添加:3 o' f8 H2 S; l1 ^9 l  x; H
CWndMenu m_wndMenu;$ w% q9 O/ C: s: j9 I
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, B: m) d; m1 a4 I. I+ F
其后添加:
6 _) g3 `7 _$ z) I: C) @virtual void OnRButtonUp(UINT nFlags, CPoint point);- b% @& q2 b2 }" M/ ?

8 K" d8 Q9 e6 m
& K% h3 ]& V0 m2 h; ?: D' r

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-4 04:47 , Processed in 0.073049 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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