飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
+ e2 j8 D, A7 {. P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): T7 f+ M( O% h/ K6 a: Z5 `. W8 a

* V0 d% p2 L, Z& s  Pstruct sItem8 n8 r1 s3 {5 a3 q
{/ K) k$ G) {1 M" \, {
DWORD dwId;
* N2 g5 T. n9 g+ K8 dDWORD dwKind2;
) ]8 {  o, O; x0 B) UDWORD dwItemId;! I/ D: T, h+ G5 m0 K8 T1 w
BYTE nIndex;
% i9 K' \5 x' g) |+ W% \- |sItem(){4 O  n$ A, O, |$ E- M+ F# v
  dwId = dwKind2 = dwItemId = nIndex = 0;
  P5 w! @) ]& a1 d}
$ E7 `& ^, m2 _# g8 Q, x1 t, i( Sbool operator < (const sItem p2)
4 h$ a3 t4 W! \) W9 x# c6 q2 }  C{( Z# A! z2 M6 C8 d* e" v  \
  if (dwKind2 == p2.dwKind2)
  w$ R8 {3 U7 a8 B1 e  {
5 W( T- r. R* r9 [   return dwItemId < p2.dwItemId;/ e" s: P) W$ b! j
  }else{
. S2 Y, J  q& p* r8 q- g8 i   return dwKind2 < p2.dwKind2;6 R" }7 x3 `8 v% u& J
  }
; N* e; X. g6 {* ?}
6 b7 g- S: V) u2 p$ X* L};
5 a5 o2 z+ _: l1 N$ i/ {4 l0 iclass CInventorySort
% v+ f( O0 p) u3 j* p{
) n* ^% V9 E: bpublic:( G" f9 A0 o- H6 o2 |- }& v3 ~, a
CInventorySort()+ Z* e' l  ]; S% Q' J3 d
{3 g2 l0 G6 m) }- E1 B% ]9 r% p
  m_dwPos = 0;- d# H' U) {% H$ U, Z  @
}
' G/ @7 d* D( t8 K4 K~CInventorySort(){}- m$ M8 _& i/ f9 h: z9 [
private:- r  g( v8 c5 e; y" t2 n% N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! ?. D+ ]  T! L6 i2 |5 g8 u
DWORD m_dwPos;7 K! y7 {9 p8 X- L4 Q: ?
public:
; }5 ~; G# e- Pvoid Add(BYTE nIndex)4 e+ Q/ |+ v; m; Q! ^. b9 c* [) T
{
6 K" \3 _4 o+ X  h" X  ]  if (m_dwPos >= MAX_INVENTORY)
* q- w6 q" ~9 n# F) {  {
6 p9 V3 |/ X- r) u# t$ v) |' d3 }   return;
; {4 x2 D3 k+ W% H  }
6 b  k" g/ \; U8 M! ?3 M5 Z  m_Item[m_dwPos].nIndex = nIndex;
1 K0 ^, R7 |! Y# q  Y# f  m_Item[m_dwPos].dwId = m_dwPos;% e( G& ]/ u! a. s9 P% a3 C
  m_dwPos++;
/ C: h' z# ]) a6 P% V4 d/ C. P! y}
7 c( e" w, a$ ?8 ^- e3 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 U! ^! Q  K, M9 \{( T% [+ J: O+ N7 J( A. p; W, ?
  for (int i=0;i<MAX_INVENTORY;i++)
. k/ @  m* k8 i, D$ |  {+ [. }7 W5 `2 Y# ^
   if (m_Item.dwId == dwId)+ l8 I4 _+ ~+ X! q" V
   {' x. n# O0 ]7 j0 L
    return m_Item.nIndex;% h6 c, Q% C* f" _. L" |4 n
   }
/ ]+ C1 O7 j( }  }
) X4 @5 u! ?9 u1 A  return 255;
. O" s* ?% [  c" I}3 k+ ~& P$ n8 u& Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 O2 H7 m/ C3 p/ {# w) J
{
8 l. f, V1 o8 L! `  v; v9 O$ u" [) K  BYTE nTmp = 0;! L- o4 @- c* Z" M, L
  bool bDest = false,bSrc = false;
& ^. T3 \+ d8 k; @# e1 E9 O* \  for (int i=0;i<MAX_INVENTORY;i++)
; O) v, R9 m. B  ]- @& @3 `  {
  L& p# j/ x$ ?1 ?7 l* P   if (dwSrcId == m_Item.dwId)
! T3 `, @/ \4 k( p( P   {
+ {" G' I4 s7 z+ ^    //id相等 则 改变对应的dest和src
* W( J& |' Y1 r    nTmp = m_Item.nIndex;! y5 h% t' j# j- I& ^$ v2 a
    m_Item.nIndex = dest;
- i6 K+ x! z4 w! Y- B8 ?  H$ [   }7 m8 l" ]; ?. [+ {) T2 l
  }
( }. y6 }3 }3 Z2 B  l: M  //临时数据保存完毕,交换开始
1 H( T6 n; n% n, T  for (int i=0;i<MAX_INVENTORY;i++)
+ ]4 p" e% J: h/ d, R  {
# D5 v8 M' D9 z   if (dest == m_Item.nIndex)
2 c1 D$ a0 M6 @0 \$ }% G: j   {" L- y3 {" e* s' ]+ p  `6 R- f# s
    //id相等 则 改变对应的dest和src, }! k3 Q7 N* `9 M0 g
    m_Item.nIndex = nTmp;
( B. m/ s: o% A- T1 e# o4 o   }0 d, b& N: H1 t: l! Z
  }
+ V) Y8 W" W3 r4 d* k9 I}
& b7 E8 ~9 t; v7 T2 J};" v, N8 `, }- [7 L) k
-------------------------------------------------------------------------3 x/ n" b& L3 x0 w- C  u1 ]6 N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% b9 S5 F- t% {2 k0 S4 r* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, N5 l$ e1 y* k1 }& T3 O紧靠其上添加:- L9 I' k1 Z9 C. V) Q& P
if( pWndBase == &m_wndMenu )& `+ d8 g# T  h2 I; c5 X2 ~
{
$ I- s- O3 \/ Q- b7 v  switch( nID )
  B/ a$ W  A" K# C1 Q5 b$ [. J  {
' j$ X: r# B: V$ Z7 D: V- b2 H  case 2:
; c* W. _) \1 D   {
( k) c# K; P& c    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# Y' H1 d8 [& Y. l3 m, t    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 x3 k/ b% j( ]; E9 B/ _
    {$ J4 a) [& d, h9 M, E
     break;4 e+ c# e$ F8 s$ r$ N/ {
    }
) S" a  |: G0 S  u# d$ ^$ S    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 Z1 t# g, ?3 x/ x
    {
2 ^* s% }' [) G' ]# G     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" b  D( t& Y# @8 ~- I! u     if( !pItemElem )6 @1 F2 @. F; X; x9 k- Z
      continue;
+ r' ^3 Z7 O/ x5 o- l. M9 V* r: j. I     if(pItemElem->GetExtra() > 0)4 ~/ Z4 y+ f; i# A# l* t1 `
      continue;
: N; e9 {6 @( h8 a, c& [8 P5 L: D     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & f& N2 Y& g* ^; o2 C
      continue;" q" t5 e3 F$ K+ r/ q
     if( g_pPlayer->IsUsing( pItemElem ) )! B) Q( f; R" @2 F3 O
      continue;6 S0 q1 _) V, c+ n, t  X) j
     if( pItemElem->IsUndestructable() == TRUE )4 k1 Y  w: ^8 W$ H
     {
( p7 W* p3 o2 v. X      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% A, Z$ n% p. n8 V3 Z5 n0 q3 D      continue;
# `6 P2 ^; ~2 ~& U% i8 i/ s7 F0 G     }
1 V9 l& j9 ?% I1 c  ]5 ^     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- D& u) l5 ~5 U9 K
    }
# J' c5 L7 Y1 ?6 H+ |    break;
+ A3 B0 S: a) ]8 y6 ^) l! Y6 z   }; o' v3 f( s8 U* z
  case 1:
1 T/ z* u* ^3 M$ L) h5 U3 K# k2 O   {
% o$ ]" ~' N/ ~) a, N, c4 \/ n    //整理背包: N1 Y$ k4 g* `$ R: v
    //////////////////////////////////////////////////////////////////////////
0 O% [! I; m2 g    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
  I8 G3 Q9 L% t8 W7 X+ }; k7 r+ n    //////////////////////////////////////////////////////////////////////////
8 T0 ^% Y. ]3 L$ V  U; g, {/ v    //////////////////////////////////////////////////////////////////////////
$ B7 W, ]( @1 _) b7 C! F  k    CInventorySort* pInvSort = new CInventorySort;
+ U: M% E+ W, G( X    vector <sItem> vItem;
# T% C1 \# P/ Z' o    vItem.resize(MAX_INVENTORY);//初始化大小& {' \7 n! |6 b
     //////////////////////////////////////////////////////////////////////////
3 a7 ^3 n5 B! x2 P3 @( i% A0 b# |     //填充数据: l1 u+ e$ M2 [
     for (int i=0;i<MAX_INVENTORY;i++)
1 ?! h  F$ ?# f  _     {
+ s) v3 E3 a2 |/ H. k0 H4 w      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. |8 C  @+ ~& U, f: |5 |1 v0 ?
      if (!pItemElem)
; m; a3 W' S9 M4 s4 v2 h      {- o4 O$ C6 I% Z/ J
       vItem.dwKind2 = 0xffffffff;# d) t2 ^! |" E2 o& [
       vItem.dwItemId = 0xffffffff;
7 @3 A) G4 D% P/ {+ q       vItem.nIndex = i;
- P: h; _' e) m5 N) x8 d      }else {. c4 H# c0 R9 U6 A
       ItemProp* pProp = pItemElem->GetProp();6 N; n( u5 Y6 I5 ?
       vItem.dwKind2 = pProp->dwItemKind2;
) V! q- f6 R% m6 ^       vItem.dwItemId = pItemElem->m_dwItemId;
  U( W, E  B. I; o$ A0 R       vItem.nIndex = i;8 s1 u# Q+ |0 T* ]7 \' H& |. ]
      }
% D9 i$ K! s* W  D9 a( W, g! i      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 Z5 w) t$ I2 C$ v4 p     }7 t' W( g# M9 F% Q2 Q: Y
     //////////////////////////////////////////////////////////////////////////+ k. K: X8 a" a0 e% }: {- e
     sort(vItem.begin(),vItem.end());//排序3 S. ]/ p& M+ a2 \; ~
     //////////////////////////////////////////////////////////////////////////* l0 q! H, `% @/ O
     //交换
4 N2 V0 ~, Y0 N4 d* m     for (size_t i=0;i<vItem.size();i++)
4 `" \$ \" _- C+ d     {. P  ~$ J# r$ a" [
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" \2 \: |  k% N1 _! |
      pInvSort->Add(vItem.nIndex);
- B! w. I4 A6 u- B# y9 l5 t     }5 q* v# |. N6 {- V
     BYTE nDestPos = 0;
& o/ \2 E  \# q4 \+ l# @' i0 q0 s     for (int i=0;i<MAX_INVENTORY;i++)
1 D: Y  a( ^6 m$ Z     {) j% S( c  K; |5 m- R
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' p3 |# W3 _2 t- J
      if (pItemElem)
" u3 g9 U; O! q$ A) M      {
2 H3 ?5 x0 _$ A  f6 \, T- p9 X. _% x       if (IsUsingItem(pItemElem))5 a0 c/ _, n. Z4 M
       {6 k9 Z0 q2 F) E5 P
        //这个位置无法放, F+ {; i6 _0 A
        nDestPos++;7 h3 {, [  N3 C6 G
       }# ?  ~( F9 Q. d9 E2 E& c
      }) ?5 V4 Q) c2 z  N. M
      BYTE nSrc = pInvSort->GetItemSrc(i);
1 i& Q/ ?# Y' b4 r      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, }9 ~  G/ {/ ^) T- l      if (pItemElem)- ]; V2 ]/ ^  c& j
      {6 z( v4 z, p# w, D2 |8 v! _9 w8 u
       if (IsUsingItem(pItemElem)); J8 Y4 b, P8 O# W- t4 U( w) K( ^4 t( T0 h
       {
3 V0 o  q2 k/ `7 \% r* e# p% z        //这个道具无法移动,跳过. W  v0 l1 Z9 D$ _+ }; R
        continue;- H1 n& b6 V0 N) J4 Q! g! `2 C% ~
       }
* ~$ y! Y9 v( [9 x' q      }else{1 H3 ~4 ?0 C9 l# T8 t
       //空位置 不用动
- D  M; u  ]9 [       continue;
8 X5 k, e+ Q) {0 T      }
4 a3 W7 I$ }5 G4 a4 I" f* O' A      //////////////////////////////////////////////////////////////////////////, b! D1 k- b6 c! n7 Z
      //开始移动+ E, K0 N! V9 i! |% z: t) Q! H
      if (nSrc == nDestPos)
! K7 O% P( A" q# N5 D      {
4 N; s- x  {: m, ~. x       //原地不动
9 n2 F7 V- g+ B* S. A6 L# K% [       nDestPos++;
$ u2 q; d% `# v. m6 M# o+ }, M       continue;
0 y$ y; w1 z+ {      }" N9 _: R1 M1 }0 W
      pInvSort->MoveItem(i,nDestPos);9 W7 a6 m7 b4 n1 h1 e6 ~
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 f$ a# i- ^3 ~% g8 Z      Sleep(5);. u- U& r% j! f) b0 C" A
      //Error("移动 - %d->%d",nSrc,nDestPos);# c9 D0 A8 u+ T6 @9 M5 Y
      nDestPos++;; P( U) n3 i, Q6 k2 @
     }  m0 I/ }% P4 p# H
     //取第一个元素的信息
/ Y. M/ t2 ]- o( ]& e/ o     /*! G  J0 y' L4 v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( c) c" L8 c1 X/ D) b/ n/ a     {
! N- g4 V$ F1 |. e- M      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 D  y. l' T2 l5 q$ W+ ]. ~' d      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' p, ]8 p. y% D1 T* I3 Y
     }
4 N7 c5 S7 V/ t6 m9 ^     */9 Z( }/ A. O  K9 G
    //////////////////////////////////////////////////////////////////////////
: X- T2 T$ F  q6 P. M) `/ X    break;( N/ m* _5 z# B4 s& q
   }
4 `/ B/ o# `+ i3 X3 F/ n  }
8 T; c# S/ X# t}
- G# a  O7 ?" }! M# s3 Om_wndMenu.SetVisible(FALSE);
# o7 x; O3 j9 E  i: N! C
  h) @+ M2 Y* c: D--------------------------------------------------------------------------------------------------------
' J: r# A. S% m3 B, \. @$ ]1 M1 l% M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" R+ p2 I1 t+ `, q4 U, W
{
/ \+ K. u! Y* e. C0 [BaseMouseCursor();
& X* P; j; f+ ~5 S}! q# k1 D' O/ x7 |9 H$ x
在其下添加:, M; @: m# ?& `; {( g! s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  |8 ^! ]9 z! a6 X{0 W8 o4 Q  H& h# f3 ?3 A
m_wndMenu.DeleteAllMenu();. n5 s: P- `/ F/ R: y8 D) f
m_wndMenu.CreateMenu(this);
2 k8 R/ H0 z% xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ p$ a6 _0 J+ Y& T, h% F
3 A6 W* _* Z4 ]0 q) [0 w. o+ u5 d, U/ g0 xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 X' Q6 p  P2 J2 Y7 o$ Y9 r
{
. w% \8 T7 V! ^: j* m  //P以上级别才可以删除所有道具% o3 r+ [& J' t
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! ^5 S" W9 A# }& m- G2 {0 V. o}- l4 W. [" l/ G  M8 l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 s+ m( b1 N* c* W, v+ W7 w4 v3 _4 nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 k1 {8 @5 M+ Q0 |% D' J$ ]! t
m_wndMenu.SetFocus();
1 o6 f* V+ _; \% L}
& `2 ~9 R7 a2 ?/ W5 @$ J------------------------------------------------------------------------------------------------------------) m8 u4 B+ d% A+ J& d
*************************
& C  X0 [1 d# L% A( ~WndField.h文件; S7 l4 i  C( `; z8 g
*************************( M9 w0 h( W! H2 G2 r3 k' Z' T
搜索:BOOL m_bReport;6 G) J! D! j( K. v, ~8 Z
其后添加:
+ _+ X' n! _2 x; _  M* NCWndMenu m_wndMenu;* N5 N" u: ^% c. V
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 ^6 g# g2 }+ e# T
其后添加:4 B! k: i9 @5 N  ]! K$ X4 `
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& U! H  Z) S1 a7 B+ [' [9 V" H8 t+ J3 v$ h$ X. n& ]& b

: s% w+ X6 [. k

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 22:02 , Processed in 0.068596 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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