飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件* L$ x+ |/ l2 q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; w/ Y# f7 G4 X+ I
0 \' g; b, R5 r% r- @' J+ F- `struct sItem
  }  ~8 E  o; C$ ~{. ?% v3 ]7 K0 y9 A9 m; y4 ^" \
DWORD dwId;
" c7 ~0 Q) e# E. t/ G1 EDWORD dwKind2;
: h, T; Y8 ?3 L5 `2 K* U+ wDWORD dwItemId;! H2 B3 F* C; ]% e8 H4 F+ `
BYTE nIndex;
3 I9 y0 \* s/ `sItem(){7 X2 N5 b$ ~9 J+ p* [/ ^3 c) j
  dwId = dwKind2 = dwItemId = nIndex = 0;
7 ~$ K4 z# y- A- |( P0 p}
) U7 i. L' T: P$ X; E8 U1 p. l. Lbool operator < (const sItem p2)
: K3 c% Q7 i6 R5 k( D+ i{
0 \& J# I1 I2 K6 J' C. P$ }  if (dwKind2 == p2.dwKind2)1 r0 _- u7 i$ F
  {/ B! `  O8 o. `) h$ J  z3 `
   return dwItemId < p2.dwItemId;
$ e' Z  ]4 r- Q2 k/ x; U8 q  }else{; _8 O" X, x. s
   return dwKind2 < p2.dwKind2;
* W6 a$ j+ A/ h) N* ^7 k6 j8 W  H3 f- G  }5 Z, b% w4 c- B9 M- j
}
1 T6 V/ z! S6 L" L};( n% x9 m. `2 d) w* S* B
class CInventorySort
5 |& t7 C/ X9 a6 u8 a{# u, F. x9 h' W& D7 p& |6 }  J
public:
2 b, Y, n9 O, _. o+ I' D! s9 t2 HCInventorySort()
, f1 t$ x2 Z, ^0 w3 l+ h{. t$ p9 y& Y2 ]+ U" ^( n
  m_dwPos = 0;; w* t" l( x7 {6 B
}0 q& p% B( q$ S) O0 ~" F6 k
~CInventorySort(){}
0 n: M0 |) |: pprivate:
$ ^3 W1 f" [! a% R$ r% l  N+ c) `0 G4 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 K/ A8 A( D+ D( n" i( V
DWORD m_dwPos;6 i5 u2 n' m, t* A
public:  n7 g' p6 y& o  p8 d0 R0 r
void Add(BYTE nIndex)( l0 b" ?) K$ K# J! v
{3 J7 ]/ |9 h6 t" ~& ^" F
  if (m_dwPos >= MAX_INVENTORY)8 R  M+ P4 d) I7 k) M$ a# N1 B8 e
  {& g' l' V! B5 j8 M+ |; V
   return;
. n6 Q8 m6 z8 K6 j  }
8 I7 R4 x5 H  n* V( x  m_Item[m_dwPos].nIndex = nIndex;
3 M; N! _6 z( j! F! Z! v- f  m_Item[m_dwPos].dwId = m_dwPos;
* [! q# w- B- l1 O: a+ S  m_dwPos++;6 c" e. A, `9 }' t% H# b. Q
}
: c% Z  b; O/ }/ uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  }# K$ ^: I* R5 D$ k{
4 W4 F& k9 H7 r2 H/ s1 g  for (int i=0;i<MAX_INVENTORY;i++)
3 W- M/ L( K% W, h  {
: G7 i' |6 [& Y   if (m_Item.dwId == dwId): h, _: g6 ^' j/ I. Z
   {
, N) O3 J+ y- G4 v    return m_Item.nIndex;( ~5 q8 T) r/ q, S' x7 s% l+ `
   }- p2 w1 N# d& Q- K' ^* O( m
  }
  z/ q8 T$ F( I* K/ @" c  x5 O, q  return 255;% ]0 k& j. C/ g
}6 h& `7 u8 `/ K+ {4 V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ x- Q& k4 d" e* {4 \4 i
{
" Y  O( `0 O' ^# `! u" a% a2 }4 T  BYTE nTmp = 0;
6 H3 Y* L! o% g: E; z  bool bDest = false,bSrc = false;
4 x" v; |0 q+ \0 o- L! z/ X5 g  for (int i=0;i<MAX_INVENTORY;i++)
0 h& d2 U1 N& K# J3 A  {7 G8 ?  m2 i8 h* `5 i$ b  O
   if (dwSrcId == m_Item.dwId)
! E- T1 f3 b! P$ w1 d   {
: c! b9 W, o# O/ h3 t: `& _    //id相等 则 改变对应的dest和src
/ j- |2 s0 y9 c- Q    nTmp = m_Item.nIndex;
" k1 D4 [" d0 h4 j( K1 y    m_Item.nIndex = dest;" f+ c/ S% |8 t' h7 p* [
   }
; B9 C9 ^- L( Z! ?6 \2 A  }7 L& f, `, ?7 E& s+ l! U/ g$ M- N9 H
  //临时数据保存完毕,交换开始$ w6 }9 i& K2 b" P* ]$ [7 k
  for (int i=0;i<MAX_INVENTORY;i++)4 ~" B0 Y7 t1 I6 L
  {
  Y" |  }4 P' J/ r0 l0 z- }, v   if (dest == m_Item.nIndex)+ N' A7 j4 F/ m  b0 Y
   {, k. l$ Q1 @9 `1 D7 C8 p
    //id相等 则 改变对应的dest和src, S3 ?* h7 j; X" A. R& N
    m_Item.nIndex = nTmp;. {0 B8 j) I  I  f& x
   }/ u; W) ~8 y5 y( R0 z
  }' @& a% p8 \" p# L5 K/ k
}" B  ?5 c4 X/ M+ ~5 A# p
};- h3 H8 @* \2 v# [9 @" v* A  @
-------------------------------------------------------------------------
$ I7 N6 v& w. j2 x4 Q: H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 F& S7 B# v' ^7 r+ O9 X  R3 X7 a$ C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& `( B. b( d6 B: y
紧靠其上添加:- ~  D! G# A% ~3 I( r. B
if( pWndBase == &m_wndMenu )) A/ b+ w4 A+ D7 |2 H+ D' \
{, i2 D& q3 ], K1 H9 o* p
  switch( nID )/ }' n; {& D8 Z
  {
8 _- g2 T4 Q9 |% V/ [0 G1 B  case 2:
3 ]8 D4 d7 d# D9 E   {, f2 |6 }' l$ K& i, F' `8 N! g
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, q7 `; y4 v& W( i- p& L, v. g8 g
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 f. S! N# `9 I! C
    {! E$ d- D/ ]# s6 r7 |6 I
     break;3 R1 x2 `0 C2 i# O
    }% s# |. a0 V! `6 F7 v; ^
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 y' r; j0 s, k4 ]
    {
& I# D4 A' f: C3 t6 _! p0 g     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& K' D* U9 D" F+ F0 m
     if( !pItemElem )
! P0 g& N2 B2 B0 V* t# }5 W      continue;% r9 `/ @! g* R5 W+ t
     if(pItemElem->GetExtra() > 0)# H5 I: b9 s8 M8 K' K
      continue;
) K; P* c' ^% s3 m     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " c/ J) @4 a* \8 i
      continue;& \* z. \/ }, a" J, b
     if( g_pPlayer->IsUsing( pItemElem ) )
7 c1 G$ i+ j+ c# t      continue;
3 z  g- ^  ^6 J2 X2 _1 c, G     if( pItemElem->IsUndestructable() == TRUE ). f/ I. K8 U! R( x4 T5 @6 d  \, x
     {
0 V& c( ?- b- E2 O9 Z  [& B      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) z/ ^5 S9 l) ?$ ?/ j! n      continue;
5 ?! p6 Q: p' I6 c8 K) h" A+ ?     }8 n/ G5 L: W- R! O
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, b% z, p% W/ G    }
* f  F, o3 G7 A& q4 L    break;, [" E/ W- e4 ?3 Q5 ~3 L& `) t* {& v
   }
- g7 `, m8 k  i, O  case 1:( Q- i- F# Y4 B" o3 W* f" b9 H
   {+ d; n6 C  @+ Y
    //整理背包& K5 m# K+ i3 b  ?
    //////////////////////////////////////////////////////////////////////////* T1 _" i6 @0 B" \) f' ^# x
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# i7 C# @3 R, v. Y    //////////////////////////////////////////////////////////////////////////
/ _5 I' Y8 |3 l( a5 `; Y. }! R3 T    //////////////////////////////////////////////////////////////////////////
8 z& h" s2 L; L- p    CInventorySort* pInvSort = new CInventorySort;
4 s1 E4 Z! `! O, @    vector <sItem> vItem;3 B# n, n5 ^# _9 C8 ^! E: C. e
    vItem.resize(MAX_INVENTORY);//初始化大小
1 p0 ]7 a9 T( M8 G( a) {7 F( L+ m     //////////////////////////////////////////////////////////////////////////
; R. H6 e& F3 n5 S/ V+ O3 q4 u     //填充数据
4 H0 m0 T( K9 R% H     for (int i=0;i<MAX_INVENTORY;i++)
5 S/ g  A8 o+ f( Z* `" |     {
( o1 B4 s5 y3 }4 Z( j: E      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  |9 |  D# q  y, P. v5 R( t      if (!pItemElem)
( A* ^. V& g/ o7 H; M. v# u* X      {1 \7 p! k5 z, e* w
       vItem.dwKind2 = 0xffffffff;
0 D) L/ j& i4 A& e/ p, j+ @       vItem.dwItemId = 0xffffffff;
' T- ]3 F9 c, E; g7 B) W  Q1 S       vItem.nIndex = i;
8 [/ t* Q7 ^2 E$ C- Y      }else {. D! r# w$ H- h& r2 Y9 v7 p! l
       ItemProp* pProp = pItemElem->GetProp();/ C& ^# q& U! q
       vItem.dwKind2 = pProp->dwItemKind2;
; M- P3 d1 i0 `, \) T& y+ K1 x       vItem.dwItemId = pItemElem->m_dwItemId;
5 q$ R+ w' e, h& {  K       vItem.nIndex = i;
6 g" W# o, v1 c; e' w      }
2 ^; j0 y( A$ f- F  O, c      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) ?6 |( m7 q$ o& j( q5 Z     }' i, w" N* `& }1 ]# g8 x
     //////////////////////////////////////////////////////////////////////////: X0 d* z5 \- V/ C
     sort(vItem.begin(),vItem.end());//排序, x5 r' Z+ s& }1 [. q
     //////////////////////////////////////////////////////////////////////////
  B1 q. z& H; e7 ?( V) C0 ]     //交换
- l1 P5 c" ?$ t( I     for (size_t i=0;i<vItem.size();i++)
& R& L' V7 c+ y' ?     {
9 r+ _; U1 r; _2 m8 H7 H( A: w  {      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" h! `# K3 C0 o4 l$ y& L
      pInvSort->Add(vItem.nIndex);
3 `1 H$ l; f' g% t: p& N" I3 c     }6 Y# _& k5 V8 z5 A; Y
     BYTE nDestPos = 0;/ y7 {7 N# T* t& W9 M) ^
     for (int i=0;i<MAX_INVENTORY;i++)1 i# B& l! O6 X  n8 L/ [" m
     {, z; k# C2 ~! t6 \
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 p3 {) P2 E, H4 b" n* J      if (pItemElem)
' ~- q% D; y- ]; ^      {: f* \$ _% ^  o2 q
       if (IsUsingItem(pItemElem))4 R0 q3 u  P4 [! }/ d6 u* I" i- D
       {, l& e" M% f' J& g  H
        //这个位置无法放+ z9 X9 u% w$ |9 D4 _8 d4 {
        nDestPos++;& L7 ?0 Q7 [& v1 a4 d* S2 Z/ ]( M, Z
       }
. f1 w" ]3 B  m9 D      }
5 W2 R( H8 Z1 o9 ?      BYTE nSrc = pInvSort->GetItemSrc(i);
0 Z7 ^7 j% \5 s# W$ i      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ [9 l/ ^+ `3 N" p8 r" C      if (pItemElem)
8 M6 j- [5 C2 f      {
# g8 ~' I2 R; K" b6 D1 q3 P( @       if (IsUsingItem(pItemElem))) r0 V7 ]% ?- h- Y2 X; }9 _& O! s( N1 p
       {
$ a. @" \" P* v! D- W        //这个道具无法移动,跳过
& G. j9 K% i) F+ P2 @% c        continue;
+ h* X' R3 U9 d' m+ ^       }
6 j! i3 R7 [' z8 s( Q' I8 P      }else{. z# B& \3 `# L4 Y; S
       //空位置 不用动/ S7 C* \- z0 Q+ w7 O3 o
       continue;  G/ d% x* z4 j4 h
      }- V4 n) r$ S8 m5 M
      /////////////////////////////////////////////////////////////////////////// h4 u$ L( j; C- }
      //开始移动* t- h' _9 K- I; ~( K0 a: [* D7 k
      if (nSrc == nDestPos)
; p1 Q4 @( Y5 a      {
0 J2 z% C: [/ b  z2 P       //原地不动- a) N* G$ r+ ]' W
       nDestPos++;7 W* u6 ]% t. p. ?( `' p  b
       continue;2 v3 o. O7 {7 M' G) @0 q" ?
      }3 t, F2 m  p. F/ z
      pInvSort->MoveItem(i,nDestPos);
% l5 Q% l7 n. r+ u0 l  ?      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  j5 Y% l& b  C! r! {* Z
      Sleep(5);
# V6 `5 e6 t* ^# Q      //Error("移动 - %d->%d",nSrc,nDestPos);
# T5 J* V; e7 x; `6 T. I9 j      nDestPos++;
- e, T; u% d/ R# }* i7 g8 u     }
+ ^1 B- ?( z7 c2 n0 F6 x     //取第一个元素的信息- X- {4 Q6 i( w' K% k
     /*
0 P& X. [, _: m! v4 Q# T  {+ U     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! V+ q. s' a$ I# O  q" N     {
. ?. O/ f( a& [7 A- f      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 `. w2 C2 A4 E) ^% [. C. U$ I1 L      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 ^" S. a+ p- R( T% b3 X  H/ r     }
# ~# T4 r& F! E2 }2 N$ n     */
7 a: C( J- f* ]7 {4 [- r; ]5 z( R    //////////////////////////////////////////////////////////////////////////
) ?% r7 Q4 X0 P+ l( h    break;- X5 l: d# p9 \& M+ v; v+ `
   }
" }7 B' Z& }6 x) x# F. B  } $ B2 D. k8 T* p" i8 H0 ]
}' \8 ?& D/ U3 E. ?: M& |
m_wndMenu.SetVisible(FALSE);+ P9 v; q1 Z: p- ?% C" x
: U. j6 r) p) u& E5 l  o2 @
--------------------------------------------------------------------------------------------------------" o0 m) ]& K$ W- |6 O+ j  _; `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 p$ L. F, _/ n2 S+ r9 R{& |+ ~, G$ j* G4 Y2 X
BaseMouseCursor();
: n6 M) w7 i5 Q% p- g7 F, d0 k}5 l6 A1 {8 g- r! b1 n7 g3 l9 B! q7 j+ H
在其下添加:+ K# j( K3 x  u8 F! ~) }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! N7 U; C1 R) ~$ J( `  {( z
{
' ~3 M3 Y/ V5 d- C, _/ Tm_wndMenu.DeleteAllMenu();( V. P- D" a: L# T+ |. H6 C5 s
m_wndMenu.CreateMenu(this);
2 D$ R* E! w2 H5 q  S4 h# g. Q+ d9 Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' n6 K9 S2 m% u4 B' x4 F' W2 X( x/ K! ?3 H! h' Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( w5 R$ J$ h% Q: I9 S
{' G0 _3 n& k0 q- n0 W
  //P以上级别才可以删除所有道具  M/ Q- [; o% s9 m+ z* T
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: v7 `; R5 ]  S* ?* [}- Q( L6 g6 d: {0 r5 r# C% Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 R& S* \, i7 G" C5 B, f4 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );  x) h- S  H. L0 U4 l$ A0 i8 e
m_wndMenu.SetFocus();* M0 Q2 {+ N' w
}( l8 n0 u8 }2 H& ~/ V+ B% T3 G
------------------------------------------------------------------------------------------------------------! w, p! V6 {( {1 \- s2 h; V
*************************
; {% C! `2 a- v9 X. V7 IWndField.h文件
8 A' [4 A$ p( R6 |" d  J*************************
8 d3 a/ Y, p3 A& ~: `3 s0 _搜索:BOOL m_bReport;
8 v4 J6 G: r6 ^3 G7 K9 R其后添加:: F7 j0 T! X% b2 g: T: \* S
CWndMenu m_wndMenu;) }* X' h. @' a! ?: M, e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# C" T+ D" |+ Z" R, k; y5 i其后添加:( r+ k$ H- C# S- l7 b- L
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& v" d/ ]* t8 P$ ?- K* Y& G. q/ v
# G* X, @  Z, ?1 x9 P  i2 Q% Y* ]/ k/ }6 P. m$ ]: B7 \

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 09:47 , Processed in 0.065266 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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