飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件- W. M" `. }; t: `+ a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). e9 D5 t. I9 Y

6 g8 m  C/ S  y" g, s6 ^$ z5 Lstruct sItem
. m" x3 K( M% T{
5 ?) L+ T3 m$ B/ I$ S2 v& qDWORD dwId;" M, r* D* c4 ^5 c, u6 B! s6 Q
DWORD dwKind2;" X: X1 U' Q. }- j; Y
DWORD dwItemId;
) V& J" S8 h" n2 cBYTE nIndex;* G7 O8 s' ?' S( ~7 N
sItem(){
; d) V' `7 \  E+ T  dwId = dwKind2 = dwItemId = nIndex = 0;( r6 J& K* N- }. U1 _1 `
}
. r1 B( ?) x( t' kbool operator < (const sItem p2)
7 ~( D) [2 T' `0 B, k& |$ V{% C) g/ U; D. U* J* U1 E( L
  if (dwKind2 == p2.dwKind2)
$ p0 @$ l/ O5 y. i  {
' s$ [4 X2 v0 {   return dwItemId < p2.dwItemId;
) `( m# d  H1 [7 _8 \7 Q! J  }else{& K+ x/ `3 |/ p# L5 l; u) |+ E
   return dwKind2 < p2.dwKind2;
# |- X& c7 W1 @" K6 u0 y$ D  }
8 J) u. S5 Z1 D8 ~8 [3 k/ h3 G! U7 D}9 \) o" j1 e* Z: R
};  z" o* B3 T- P! |# Q
class CInventorySort
9 E8 x  m. N9 s. {{3 X- C% ?- [, `1 l9 ?9 ^8 D" @# R
public:
( p* T3 r/ r2 \2 W0 bCInventorySort()
: ?9 D+ A' [" j& Y3 O( ?& u' g$ ?{4 l! k" S- r: F6 d- p0 B
  m_dwPos = 0;
7 `7 v( q0 Q* e9 R# w}0 K' R" U3 O$ ?9 r  E4 V
~CInventorySort(){}
* e: I7 ^8 R  v" M9 Z2 Lprivate:& G; C& b: J. ^( _5 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# f& I" A7 O2 m  _7 q) E) c
DWORD m_dwPos;# d/ g# b  {  J1 W
public:
# K( L1 _8 a+ k$ X8 f1 S1 E+ Evoid Add(BYTE nIndex)
7 ~2 [9 Z' Q% w{
: q* V8 [* H7 s' V  if (m_dwPos >= MAX_INVENTORY)  O4 e, j) X1 S# A$ X1 N) U$ j
  {
1 x, m+ p8 R$ x   return;
/ P9 p3 _+ `! c. \' \  ^0 v  }/ ^' H. n( i2 Z( w6 e. A
  m_Item[m_dwPos].nIndex = nIndex;
& o8 F0 B0 A6 ?8 q  m_Item[m_dwPos].dwId = m_dwPos;" y  d: ]" }4 ~) b& M2 K
  m_dwPos++;
1 e3 R3 y0 ?+ L7 o5 j}
  C" O; I, y3 _" a8 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 z' I% w9 l" B9 Y
{
7 [) d' K9 X, a  for (int i=0;i<MAX_INVENTORY;i++)
- N0 N, {+ o; ~7 p5 G* M# {3 Z  {
" k* c2 Y& L) P   if (m_Item.dwId == dwId)4 _/ p7 u) W4 k2 z9 [
   {% q3 a5 s1 c, S0 k( O6 U
    return m_Item.nIndex;
: U. x# |" Z/ M; T) S' u1 v" H   }" Z2 r6 p( `: G+ Q! Q4 ^9 K0 Z
  }+ `- g; Z6 J& U7 {/ A0 N! c
  return 255;! F' n! Q8 O7 Y" ^) ?" J
}
* N* M% x8 o9 d! Z' a- _  Q% i" [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 m! |6 T6 _! D1 M
{4 i% `# |) f2 A4 \% ]
  BYTE nTmp = 0;% a6 d- [  B5 S( U. T- E
  bool bDest = false,bSrc = false;8 [1 P1 H+ J# E* P
  for (int i=0;i<MAX_INVENTORY;i++)+ ~6 b# U  {% H4 n8 n' h" E9 u
  {: c$ [/ [8 O0 n
   if (dwSrcId == m_Item.dwId)
8 V" w5 O! t- y  |* H' S   {
+ _9 U  e+ p" C4 o! Y    //id相等 则 改变对应的dest和src, e+ X5 B9 ~- N7 v& ?
    nTmp = m_Item.nIndex;
. K* M- o% ?$ [# x    m_Item.nIndex = dest;
' _' \! e( {0 n+ N: a, @   }
; V3 F- F( d/ q  }
: q- A* |( g6 J  F  //临时数据保存完毕,交换开始
. @- y  p# \9 C  _  for (int i=0;i<MAX_INVENTORY;i++)
6 A' a9 J" t; Y  {
* z! v" g* u4 J2 t; k* L! b5 G   if (dest == m_Item.nIndex)
9 b- ^2 g5 f/ R8 l' @   {
: Y* y$ S, i7 u, R, A    //id相等 则 改变对应的dest和src
$ Z/ S4 f* V7 g6 N4 B2 u2 v- X! D    m_Item.nIndex = nTmp;* `+ L2 ?* J4 h  ]: N  Z' \
   }5 A4 O, p& B; v  S+ H' ?1 t- s8 }
  }" S$ Y7 R/ R7 k, n5 b
}) {* D* E' |, w$ f
};4 w; _$ r4 z$ d' U/ \/ D
-------------------------------------------------------------------------+ }% c! p0 F' j* I  F1 {9 ~/ d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* z  x5 j4 G+ ~" h, O. t+ @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 s% M# s3 W8 N; p- ?$ q
紧靠其上添加:4 e6 x, e. s, n5 D( `4 E1 a! J9 ]
if( pWndBase == &m_wndMenu )+ C: Y/ t, _5 D& A& ^
{' c" T& T. N0 ~- r2 F0 g0 D
  switch( nID )
1 d4 G1 z  O$ D) H, A, m# ~  {4 q& s* \; I2 O$ Z
  case 2:
6 D4 I/ |; o0 c" P1 w( E  D   {6 _! A: K/ r1 ^- t
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, ]- g; G% r( u8 N$ Z    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 Q* }! J% @6 O" R3 T9 r" m    {! o% W5 L6 J: G7 D: M
     break;& x+ H2 x; Z6 d5 @$ \
    }- C" p; v* q; j/ K- Q
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 a; f' W2 Q: q/ \+ }    {7 q6 n( h% A, ^6 u! l
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 _5 l+ l$ h& j' o
     if( !pItemElem ): V3 I7 d2 F3 s8 u  h+ W# H( w
      continue;* Z. g) [* l5 b+ T' D
     if(pItemElem->GetExtra() > 0)
! n# s# f- Z- v! o      continue;
4 J& }1 j$ L% e, o: {$ @; e. {     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 T/ i8 k7 ~! ~% X/ U5 s; Z
      continue;
( F: v" S- M' F7 [, a) I     if( g_pPlayer->IsUsing( pItemElem ) )( X% P2 @/ A* D, J  k1 ^
      continue;/ j' t: Y& y( |
     if( pItemElem->IsUndestructable() == TRUE )
" X: H) B. q* v( a/ b     {! c/ L+ t  ]3 x" P$ i4 W$ j
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! `3 ~; f& B$ w4 h      continue;4 V; R. d/ v2 }* L* B
     }2 D  u6 g$ i' `' V
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' S+ ?0 p6 i- t2 A/ j
    }
( V# z; g, c, w9 J; w+ r, l    break;2 n& A; o5 W+ d! H
   }1 x& o# a: B* e8 b
  case 1:5 \/ k' s! t2 I7 o  Y- Z2 ^2 x4 O
   {
( v; j$ n- t" l' J6 R    //整理背包
4 s) T  l& Y! E* L! x    //////////////////////////////////////////////////////////////////////////# S( E8 r+ N0 O; x+ m! g
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 |  j+ W0 l3 R5 o  U/ z    //////////////////////////////////////////////////////////////////////////  z- P' e, s" [$ B+ E$ T1 O1 f
    //////////////////////////////////////////////////////////////////////////5 X: y* c$ A0 s
    CInventorySort* pInvSort = new CInventorySort;
) i+ s1 H5 r1 i5 x2 M    vector <sItem> vItem;' J$ F, s" ^$ V) r. G; U- F
    vItem.resize(MAX_INVENTORY);//初始化大小) ?2 g& M+ I( j
     //////////////////////////////////////////////////////////////////////////
2 ^# _8 t, e, N! p2 E% s6 w6 M, G9 h& |     //填充数据: @, N) r) V; M: G2 d4 n  U' ?8 O
     for (int i=0;i<MAX_INVENTORY;i++)
4 F) g9 t  V- w$ l     {
1 O$ t1 V% A+ N# R# t5 N9 J      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 C8 |1 d) |% o
      if (!pItemElem)# n% h! B  M5 u. ~* f+ k& F4 t
      {3 E1 \- t3 u8 k8 ~1 V
       vItem.dwKind2 = 0xffffffff;
2 r" ^; b4 n" J+ F0 y       vItem.dwItemId = 0xffffffff;6 }, W! Z3 h+ [; c1 K9 Y
       vItem.nIndex = i;
9 t" f& Y# u+ z: K( l      }else {+ o8 ~: V* b, C" N! Q
       ItemProp* pProp = pItemElem->GetProp();
% a9 {8 p: _& Q       vItem.dwKind2 = pProp->dwItemKind2;
; w1 [! ^, ]1 M7 R/ {3 Z) r% \       vItem.dwItemId = pItemElem->m_dwItemId;
5 X$ t8 T2 _: H5 G- i: T       vItem.nIndex = i;/ S7 K! ]% Q! L" b" D/ i6 p
      }9 f% Q+ v9 l' _2 H
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 E+ {( \- V. w  h9 w/ u  E- I     }* U5 _, E9 @& c/ n! f
     //////////////////////////////////////////////////////////////////////////
* M3 B" p3 ]: R) a' W, u     sort(vItem.begin(),vItem.end());//排序
/ j( Y0 q9 H8 f/ y" ~- |     //////////////////////////////////////////////////////////////////////////; ]' I9 Q/ `1 j4 C& `
     //交换
% j$ N% o5 ~, ?0 V     for (size_t i=0;i<vItem.size();i++): y- u+ y% M- P  B8 {3 q
     {
1 G& c8 U5 |9 q! N- @      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 N% e: R% a  y8 Z  \' [; Q/ ~
      pInvSort->Add(vItem.nIndex);4 B. r5 B2 [, [7 }8 k# {
     }; z( t! f& D4 f
     BYTE nDestPos = 0;1 g9 u  Y: j; K" w7 [
     for (int i=0;i<MAX_INVENTORY;i++): }# t9 _6 i# P
     {
- R. z: ~$ R2 I( f; Z$ t      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' B/ H6 l% }$ x/ a      if (pItemElem)0 g) t- ~7 N8 K# F9 o1 }' t: u% j$ z( Z
      {1 T* Y& L/ e. t4 g
       if (IsUsingItem(pItemElem))
) H/ ^# F! c8 G9 b) S7 d" d       {
9 X- _4 w; F# b# V. E7 `* K3 a4 L1 J        //这个位置无法放1 s: h) P, G& K. b: |( h$ E
        nDestPos++;
& p2 `( j2 j. J. {5 F       }
0 G3 S6 N, Y' |2 v2 G      }
" J% b. W1 i$ `$ s( l/ x      BYTE nSrc = pInvSort->GetItemSrc(i);
, e' e' z( x: A      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 z! |- v- c& c/ e% [8 V8 ?! v      if (pItemElem)
' H! ]: p5 K4 p/ Y# n2 b- ?/ r4 X      {
# a, v+ G, B, B, g       if (IsUsingItem(pItemElem))
6 g, S% q4 N! A+ H7 `       {
! F! S, Z# z% l* k7 h; Q        //这个道具无法移动,跳过  d% g$ b! l/ ]9 Q, g
        continue;4 v# \8 {2 p5 Z0 P) Z( ?! V8 g3 u
       }  w, Z7 o# p, J0 D7 [- J
      }else{
3 B, y& R/ k6 \' x       //空位置 不用动
/ `% ?" w$ |$ p9 t& l: F0 G( o' D       continue;
  P+ E+ m9 W5 g, ^  ^+ L      }/ S. t8 K5 {% I! O0 r
      //////////////////////////////////////////////////////////////////////////- V' y) c( X6 C6 z2 u1 \. M) f
      //开始移动1 Q/ v/ p) [8 y; C, F( O( I5 M# ]
      if (nSrc == nDestPos)
9 M7 v1 [8 q% H      {
: O( ]* |5 {( ~$ U, c0 n       //原地不动; R4 {/ f" j! e
       nDestPos++;
  h4 t+ Y. z3 n% Y/ {% H       continue;2 v/ J: t$ C+ V8 `$ y. _
      }; H2 o) q0 e" S* Y# R+ x% S
      pInvSort->MoveItem(i,nDestPos);
, F8 d$ X. a# T      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  M0 L: G7 F' N: ]/ C0 @& [: u
      Sleep(5);0 Y" U, d3 P0 h8 R
      //Error("移动 - %d->%d",nSrc,nDestPos);
: ]/ M( K" t# d9 @) q      nDestPos++;9 v9 R* N0 o9 y7 U# b
     }
6 _+ m' Q0 O% P; A     //取第一个元素的信息
' O$ e+ ], }: W9 `1 M. _/ a* R     /*
% y( |( K2 i8 K( W     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 E0 s- O9 I5 [# u7 }& `. Y8 }
     {  o+ [1 h& q- k- o  ?; @( Z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; Y6 Z; U( q3 b( J      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 z: f1 c$ ]* Z
     }$ J" x, N! I2 M0 d
     */
4 i0 t$ k2 c! k6 B6 r, h! q7 a    //////////////////////////////////////////////////////////////////////////
4 o, B) h: w; y8 f8 [    break;
( @  h2 `1 r) \: T: L   }
' m2 @. Y1 P. c' o9 \8 q: j" @  }
' j. C2 A# k5 O; x3 D4 G3 z* p}
2 e; l7 O- t$ Em_wndMenu.SetVisible(FALSE);
9 Z- j0 s$ t4 L
# Q. I. ^  N, y- e--------------------------------------------------------------------------------------------------------8 ]& B0 V% |* D  ~" y1 K& s. Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 j# `) o( m5 Z7 F# G5 k{
, p% G/ o7 v# c' s+ u: g3 P+ i% ^BaseMouseCursor();# a" Z! z3 Q, ~1 e7 Z* [8 p: o
}' k6 I# E$ S2 d, r9 [0 w
在其下添加:$ [9 B0 K3 t2 b8 B* p* a8 U
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 e6 y' u. B' u, V, K6 o
{& e/ m$ D1 V2 J2 d8 d
m_wndMenu.DeleteAllMenu();! Q( Z! E" l7 T9 l# {3 Q# l
m_wndMenu.CreateMenu(this);
2 w- C/ l( N* X3 C7 @# Y2 vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 q4 g6 G6 N' d

/ ~# Q. ~; |' N) Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 i- O2 N8 b9 z/ N
{2 `2 N% D/ R* T6 R% W  T) G
  //P以上级别才可以删除所有道具
5 |  M$ F# d2 c% B2 M# T  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- X/ s" p; c4 ^# j
}
+ |' I) \1 S' }" d$ Mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* u3 E/ `7 L! q7 L
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* o* F8 K# h) w$ {m_wndMenu.SetFocus();; h( M$ j( \  q, I( r& p3 a0 i
}
+ z8 |" I( J& H+ Q( U------------------------------------------------------------------------------------------------------------
! \# h  U8 ]8 z*************************$ X1 i9 w$ x$ n% X: e) M
WndField.h文件
# D9 u" |7 e" a' h. Y*************************5 R4 t* l  `. R, ^5 X
搜索:BOOL m_bReport;
6 s( P9 e$ k5 w9 U1 _其后添加:& n! g( R5 W3 v
CWndMenu m_wndMenu;
( e  D2 H  G* v) k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) _# O8 R/ J: e; E# j
其后添加:, g$ w+ ?+ r1 ~+ s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 ^1 h2 c+ O2 A1 V: Z$ `) q; l+ h' r! d' Z: V1 ^

4 @( v6 V5 Q. w3 L+ \

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 22:16 , Processed in 0.063809 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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