飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件$ |" I- _8 J. ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 \; A# ]  m- b9 h% w! }# N

2 Y3 X, H9 w$ m' X* O+ X) b* T& c( Xstruct sItem) Y: H% n6 D# Q4 Y
{6 s! ]3 |+ q1 P- N0 S
DWORD dwId;- q6 Q/ B: K5 o! }" b+ S
DWORD dwKind2;
; B) V' d+ u& i8 b, DDWORD dwItemId;
2 M% g: ?: L# g* HBYTE nIndex;6 T  g; v0 F" B
sItem(){4 b2 ~  K/ t' Z
  dwId = dwKind2 = dwItemId = nIndex = 0;
# W% H( M& X7 `# w5 Z6 \}& c' {  w$ B+ n7 k5 A) y
bool operator < (const sItem p2)5 _; \1 e% Z8 y5 b+ ?0 X; B
{
* v/ t8 x* m; w2 l  D# p5 I3 E  if (dwKind2 == p2.dwKind2)
' w: U3 S+ W0 h1 H6 }% Q  {
2 G3 q' `  H, E# k2 K( b+ E   return dwItemId < p2.dwItemId;
& r4 E% N# q0 U% z/ `2 m  }else{7 T' l0 H) M/ T. [& r
   return dwKind2 < p2.dwKind2;
$ |2 _5 \/ x" u% ?( r; O& b  }( p. s) K- \0 Q' F. [
}; }& R5 I( R2 n# f' @
};
9 w: O) Y7 e1 bclass CInventorySort) K8 B+ W" X9 Z0 y
{
. C1 Z* f; Z9 tpublic:
8 u0 E/ ~# K* L" D. u" zCInventorySort()
$ ~: w$ Z* E4 V; T' X: I{
! i0 r5 ]2 [; j: _  m_dwPos = 0;1 b, ^0 [# ]) r, ?% G
}& x, @  L0 }' X' {4 V! _
~CInventorySort(){}9 O1 t1 R* p2 z% I  r( o2 o
private:
! P' ?( N. {. nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ ^7 V9 z5 P2 f, QDWORD m_dwPos;
0 J" D: G" |. C. b7 j" Y4 rpublic:# T$ `9 ]% f4 b/ Q" D) U9 i
void Add(BYTE nIndex)3 s1 Q& l/ ^( z; I3 N
{
4 u" D5 k' ?1 F% }5 F( C6 {8 c  if (m_dwPos >= MAX_INVENTORY)
6 y, i# `1 E0 o3 D, G$ {7 E  y5 F  {
  J1 O; P$ C  i' d   return;
: O) \/ @; `) N  }
, B# |# k) ]  c1 e- O  m_Item[m_dwPos].nIndex = nIndex;
5 I5 c3 Z: x( R5 I, K7 T  m_Item[m_dwPos].dwId = m_dwPos;! ~( c3 ~  x# _) d. S) k1 Q$ }* N
  m_dwPos++;5 ?' d2 _  W. K) C% W) m1 A
}* W6 G! f, u) F1 P/ Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) j2 }2 N3 {; Y, \2 V{- r- j8 f5 O5 I0 t7 l* |4 i
  for (int i=0;i<MAX_INVENTORY;i++)
6 ]4 L6 u. @2 }  {: M! O7 M- j+ e) e7 I: E
   if (m_Item.dwId == dwId)
& W' \% \( e# I% ^1 X# ~( Z1 ~   {
9 k8 u, ~7 I) ?8 ~    return m_Item.nIndex;$ w, b0 K+ {& E% Y* l
   }1 `( Q  O% |) A4 p7 b) r
  }
% Z0 B7 {. O" I  return 255;1 b8 K3 H; Q& Y/ g. P: a& ?
}
9 @7 l+ ~% K0 N# ?1 p+ {  Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 B/ k9 m$ \: v5 d7 D  b8 `
{( m/ r- i! H( F$ M+ n
  BYTE nTmp = 0;9 Z3 P, V' E& c  i# v) S+ s
  bool bDest = false,bSrc = false;' Y+ s! Q$ V+ w# U$ g
  for (int i=0;i<MAX_INVENTORY;i++)
8 j* P3 O$ [9 f; w  {
7 I- z; ^" L4 F2 F0 [   if (dwSrcId == m_Item.dwId)* J( `0 X1 b2 o& w- [+ Z4 h
   {
& Q5 l' E8 e) ?% h0 y4 ?    //id相等 则 改变对应的dest和src
( P# W4 F. Z: {$ z3 L! w    nTmp = m_Item.nIndex;
' S2 h4 o. T$ b$ s& r. x    m_Item.nIndex = dest;5 g( N- ~7 n6 ?! ]/ j/ K" j" {( G
   }: R: S& h+ k+ g& @* U
  }
' a6 [7 ~' e! M! h7 M5 g# a, x* \/ V9 R  //临时数据保存完毕,交换开始) @$ @4 ^6 l! d7 q+ d
  for (int i=0;i<MAX_INVENTORY;i++)! r* B# E- b0 X# X- G- i0 b
  {* w3 M) M9 Q5 n+ }
   if (dest == m_Item.nIndex)! d7 u. Y; o8 @" a# R0 c
   {
5 T1 @9 d4 o1 v- p$ r+ n/ l2 k    //id相等 则 改变对应的dest和src. {4 p+ o- M$ \; L6 |2 f, j
    m_Item.nIndex = nTmp;
6 C# W5 f8 |  N# n1 B6 n+ E0 N   }
1 X1 N4 j* W' m' a" D8 K  }* A% A% L8 d5 V0 Q
}
# Y+ k- T1 J9 s3 c1 O* U; ?};
8 l5 \2 c  c1 I2 K/ Y, ~7 S, t$ Y-------------------------------------------------------------------------7 D  o) I3 r( b9 l7 C) m& [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 C3 x1 }0 U9 }3 `+ C" A3 S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ a; p4 y* L) K
紧靠其上添加:
6 F* o; |- B" Nif( pWndBase == &m_wndMenu )5 K! [; O+ I# h- }) Z' f8 e+ E
{+ p! A# q. l4 }9 ~
  switch( nID )+ O& o4 X+ x2 a3 r  |
  {5 f) S# F4 Y+ S- M$ R8 j5 W3 C; L
  case 2:
2 `: y9 o# x  y+ f  A" |, R0 }   {
4 u$ U  |+ I& o; R& y    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 F# j; E: s, A, F3 J    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 q) Q' \4 Y3 V9 E. [, @$ Q" h    {
' m% r7 ]; F% {     break;
0 Y5 D, m; V0 O  z9 o9 u8 B    }
* x8 o3 A4 u% ?! L1 w    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. G6 m% q4 Q, [& \  ~    {
/ |4 M* h2 u: B6 B) k     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- B# Q5 J2 A# S7 K" Z
     if( !pItemElem )
& d7 b" |/ T3 _4 ]      continue;
. ^  g/ P) P3 |1 j: I/ q: b  J     if(pItemElem->GetExtra() > 0), w! a8 u6 X5 l
      continue;* b$ z: u# F7 R9 K6 `' O0 G3 k
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / j. O9 k0 m5 h$ g$ P$ z
      continue;' L5 |1 v! ~6 P2 J% T) G4 b# J# F6 L
     if( g_pPlayer->IsUsing( pItemElem ) ): v$ R2 x% [2 C+ {( @3 Q0 e
      continue;
6 b+ H  y% Z& D' W' h8 ^5 j# b     if( pItemElem->IsUndestructable() == TRUE )
- ^) u% a& X: g2 ^* _+ `* D$ Z     {! y0 c% A6 j0 U! `
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: O7 Q0 y; F1 }( d9 T  G8 z      continue;
$ P' L% F2 ^9 j! a/ B     }) H6 I4 j( G8 v
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* `. G, f) r5 D, C$ w/ q9 k    }( i9 r5 z% o1 B6 n4 p
    break;
2 F" |5 L+ u8 J  F   }
2 P$ `7 n1 G" `  case 1:) M4 B5 ~& c1 |$ B. s
   {
+ h5 ~% E5 Q7 `! i, M2 u1 S    //整理背包
% O* ^/ [5 h" Q7 I& O9 E. x8 a3 s    //////////////////////////////////////////////////////////////////////////
9 ^7 J6 U2 R, `0 B( a% s    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 x* _5 p7 L3 v; W( w
    //////////////////////////////////////////////////////////////////////////* m1 f  u: C* d8 O* N
    //////////////////////////////////////////////////////////////////////////
+ Y% ^3 E+ h/ i( D: \4 R    CInventorySort* pInvSort = new CInventorySort;
: M. _8 T+ f3 T+ ]% E' F    vector <sItem> vItem;- o6 Q% C6 s/ G9 J9 I
    vItem.resize(MAX_INVENTORY);//初始化大小2 o4 \  S5 L  l: R1 c2 T: [6 s
     //////////////////////////////////////////////////////////////////////////
: Z% b' g9 H# D. p" H6 H3 I: m  ]     //填充数据
" H; G9 z/ R+ \- _6 I) s& e: h# G7 `# J     for (int i=0;i<MAX_INVENTORY;i++)
* P9 z5 [' q0 _5 S3 W     {1 S- I5 d5 C0 Q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 L* \9 K/ S+ `; C! Y% u3 L; T4 A1 s
      if (!pItemElem)
# V) X: g- o6 C! Q      {
. U) m9 b+ H7 V9 [& A" K; I) ?6 l       vItem.dwKind2 = 0xffffffff;
0 U$ F7 O& Y% z$ f       vItem.dwItemId = 0xffffffff;
0 c- G; l% @5 q) x       vItem.nIndex = i;
; s- }" S$ K' K* q' O" y- z& g  u      }else {
$ u$ I- f7 T) {6 M, U       ItemProp* pProp = pItemElem->GetProp();
9 F- p: Q( \( D& q$ D; q# D       vItem.dwKind2 = pProp->dwItemKind2;2 ?1 N3 M- |3 l
       vItem.dwItemId = pItemElem->m_dwItemId;
$ K* }; h5 ^( n7 Y& H. F       vItem.nIndex = i;
& m  T( h/ a5 S- D0 w8 y/ z( {' n      }( k3 r6 M& D. u" B& Y
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. o/ _8 y( X$ I% l" [$ b( i8 w     }7 E; q: K& m/ T! l5 g. ~
     //////////////////////////////////////////////////////////////////////////
! s% f0 A: _0 R. S     sort(vItem.begin(),vItem.end());//排序
. }  D# ?# h5 u6 ?+ c) B: B     //////////////////////////////////////////////////////////////////////////
/ u6 p# l/ w. H! a2 c; z3 s4 z     //交换* C0 \& j5 u! t  l! t9 A
     for (size_t i=0;i<vItem.size();i++)
1 y6 s- C. ?3 h; S+ D) f5 N; `     {
! T+ s4 u9 X, d# U/ c. [5 B      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ ?9 H2 {( q# n* g8 y1 E
      pInvSort->Add(vItem.nIndex);
  l1 p$ H. Z7 R2 |6 g; o2 o; s     }/ }0 D- y. n6 u! l1 R# a- @# Y
     BYTE nDestPos = 0;. u: z0 d6 b: p
     for (int i=0;i<MAX_INVENTORY;i++)
2 F3 {5 ^' e+ `1 g# X5 J3 f     {# a* B* ?% W( P" }/ k5 I% b
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) l; d7 R1 j2 W( Y/ ^, {  E- V" M" u
      if (pItemElem)
* k5 P$ T) B' k) k0 _/ m/ E      {, c3 X+ K/ I/ M& P) V" n) X
       if (IsUsingItem(pItemElem)). {) R4 t4 n$ [% L
       {) z+ s. X! p/ I9 _6 a
        //这个位置无法放
( G, R4 k7 S. _( }% J! z$ C4 x        nDestPos++;9 f, d$ B$ N" @  f- d+ W
       }
/ l( @' h- B1 c3 z      }
  y. J4 s3 v$ d& s& Q      BYTE nSrc = pInvSort->GetItemSrc(i);
* r% H9 x7 c: W7 V      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! {9 n! t$ q+ |" O
      if (pItemElem)4 H  j, r1 I, a- D
      {/ }7 g6 k7 P2 T2 M6 ^; J5 A
       if (IsUsingItem(pItemElem))1 R2 m3 R9 Y7 W# [7 N$ |: A% C; w
       {
- F. H  D& H7 q# a7 f2 Q% _        //这个道具无法移动,跳过0 I, E; S0 {+ \5 u/ T! t7 r
        continue;
! S9 r9 t* |+ u! ]/ U9 N       }
  b) A! b' t- F8 l      }else{
5 @7 g( F% C1 k* v1 p0 B       //空位置 不用动% c2 f" m0 h  P0 C7 G6 R
       continue;; \6 |9 I$ W4 {2 J
      }8 \0 ]3 J0 [" S
      //////////////////////////////////////////////////////////////////////////$ q8 d9 b& {. I, \
      //开始移动
$ a( g" G, A% c# Q( W' ]! I      if (nSrc == nDestPos)
% q; e+ X5 g' ?- X      {
; m- }( y/ S( O       //原地不动! z5 `; K6 C. \& u( n) z$ i
       nDestPos++;6 N3 Y/ m' @  u% G$ i) K
       continue;! F5 I1 a- Z: @  I+ J
      }4 J) }& ?7 b' E# a9 f) U- }8 U" S
      pInvSort->MoveItem(i,nDestPos);
1 B) j8 c' \' Z, I) ?& X      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) o, T4 C# x$ Y, f* h& ^+ e! C2 |      Sleep(5);
6 W7 z* Z! J  l! N2 B      //Error("移动 - %d->%d",nSrc,nDestPos);7 s7 C4 V7 w. R& s$ _* H* {5 ~/ A/ K
      nDestPos++;
, x7 N' R% A) f3 F* e, H; T     }9 |% f, Y; w3 u. z; W
     //取第一个元素的信息  L$ ~1 |5 Q5 W) D( n
     /*6 N2 B: b0 g9 x9 C0 g4 @% N
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): f$ i8 s( k5 V0 |
     {) U8 {; w; H7 X5 d% |
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' F! [) ^6 d3 V1 F0 O5 p7 @
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 ~2 n) P* k$ e9 a( l8 c8 @) p     }
. i4 h% L% x. N- }: _     */, T7 ~# t( [5 A) Q, v7 G1 V- u& T
    //////////////////////////////////////////////////////////////////////////- n& C& J3 q5 k0 l4 ?& s; y( V
    break;
$ B1 X' B1 S) ^7 a$ Z+ K   }
/ y9 y1 w/ ?/ D6 {/ k; |  }
+ a. Y, c4 C$ ?, I; o$ `  D, k8 \6 l}4 \1 I! H6 u! O, Q5 P7 w
m_wndMenu.SetVisible(FALSE);
8 X. m- E7 P1 \' x( i1 U
  L6 X- e6 m% E, [--------------------------------------------------------------------------------------------------------
& u' z6 v0 ?7 w) d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# R2 p( c' G- P5 ]9 {
{# e1 o' n! x. f5 Z
BaseMouseCursor();' }! k: E% S3 n2 I5 O( ?+ t0 l
}9 S4 J1 F0 g0 S. y* g  @
在其下添加:& x; m: }& P+ y7 v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ]" G2 X1 S* y6 d9 W7 j; C
{
  W# q- J  S) zm_wndMenu.DeleteAllMenu();
" m& h7 l( H* s1 i' nm_wndMenu.CreateMenu(this);
6 i; K2 X( L) j. @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 i- d1 \! K2 n! O" s4 B% a' w
  O7 ^4 M- C! |1 i0 B' [) I; Q% a; E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 j) f# a& L9 p
{
% f0 ]' n4 _9 Q6 ~" {, A, ^9 v& v  //P以上级别才可以删除所有道具$ s% E0 _' F/ m  @7 R- U0 V; d$ V( ^
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ p/ [; X. l* }: i: O}$ w8 k& c, g2 a# G  j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 G3 X# A& F: C. Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 R/ v( Y% n" Fm_wndMenu.SetFocus();# y* f! _8 r! ~: g- Q/ u8 T. v
}
% b. a5 @! y+ U* J7 ~; S- z* v& D------------------------------------------------------------------------------------------------------------
$ ]" t. _1 X. A9 z' Q! B% l1 c8 d9 B*************************
2 a1 V% L/ a5 WWndField.h文件2 j: c4 ^, i# ]4 \
*************************6 B- ?( l1 X' ~3 F$ n' x
搜索:BOOL m_bReport;/ U9 t6 k* L6 e6 N# g+ e
其后添加:8 n3 j% u5 L8 M% M+ n6 u7 X
CWndMenu m_wndMenu;3 b1 \5 {6 V- @2 u& K8 m8 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 d: e% r' U; k" ~7 Y% v其后添加:, D4 P" ]  M- W' ^: q& C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ P9 C5 w0 [+ ~7 |1 @* ?
6 B: G* q" p7 @5 Y) }- V- V8 z, _( m( B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 01:07 , Processed in 0.065817 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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