飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
: }0 y# n) {# u- e( O: o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 f3 d- i0 f4 T- s) A
& K& O( I  \" }1 h8 x: I2 nstruct sItem
( e! f5 t, b! h{) d( N$ [$ T$ {. V6 F6 d7 |
DWORD dwId;
6 f2 b- V% Q$ w3 B6 Z/ Q0 zDWORD dwKind2;
& {0 q) [' {$ Y- v* ]DWORD dwItemId;! c- V. _4 i% m' e1 b& g
BYTE nIndex;
; }3 r& Z# h. g, H1 l; nsItem(){
- S% x2 Y( `% w+ {" e8 f  dwId = dwKind2 = dwItemId = nIndex = 0;: g: \2 o- f: I
}
$ P2 k/ }5 R$ d9 a  Z( z3 ibool operator < (const sItem p2)0 l; n  n( u7 x% ]
{9 f! U$ V+ Z4 Y- m! o' ]! P
  if (dwKind2 == p2.dwKind2)
8 s0 A* E' z2 g2 G6 X! x  {
& x- W  D5 |7 \; H   return dwItemId < p2.dwItemId;% n- a, ]5 F2 t; f( j* [2 J6 X  v
  }else{
8 Y/ M5 e: I2 ], _6 }   return dwKind2 < p2.dwKind2;: I  L1 K, o! x1 ?. s$ `" C
  }' Y, s5 Q! d' X: ~9 _" j4 V( U
}
  |7 h) x: D/ X$ c: P: V" i9 V};2 B! X* o& j, u# ^
class CInventorySort( {$ k; j5 l" \: f1 W
{+ Z! G' p7 }, D8 z6 `0 K0 L
public:$ ^+ y6 t+ O; e, g* z0 v4 w+ S
CInventorySort()
( l9 x) _; Z  }# O6 `- I{
2 s& |+ T' m5 v2 o6 r$ P  m_dwPos = 0;
7 ?  h6 D6 |  V2 F6 M, `$ `}: _5 K* G# a- l/ v8 \$ t! m
~CInventorySort(){}& }1 Y4 r) I9 ~' {
private:" C7 W7 ]' w! Y1 x' r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' Q+ G- L2 H. W* t/ e* N
DWORD m_dwPos;# y. u# m" r; g8 e( e
public:1 U% \8 {2 Y* O. ^
void Add(BYTE nIndex)
+ f. C, a2 K9 n' W+ E{2 a8 B; Y, o% H* Y/ a
  if (m_dwPos >= MAX_INVENTORY)
* C  l& X9 {3 `  {7 z5 P3 X& C  b% j) L. B1 K
   return;
0 _3 X% |5 _  N( }7 O  w  }
7 m$ {! G4 ^7 a* `# t: T+ {  m_Item[m_dwPos].nIndex = nIndex;2 @+ N$ Y) \6 C/ C( i
  m_Item[m_dwPos].dwId = m_dwPos;
+ }9 x, A. a9 @0 j  m_dwPos++;
7 S- T8 R) \1 \/ Q( J6 u( ^9 C}
, J; i5 @0 v- ]7 i1 K: P! JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- @' k3 }: K( q) J5 f{
1 k% m. C6 Y7 ]. y! U$ N. W4 g  for (int i=0;i<MAX_INVENTORY;i++)" y! h; d+ j( Z+ `5 [& C& S8 j
  {% D: m- `8 ~/ [, K% x
   if (m_Item.dwId == dwId)
& v* n: r* X9 a4 m. u+ [7 E3 N5 Y   {
$ I  \( o  T) }  u0 i( [1 W    return m_Item.nIndex;
" N' l  c1 z: Y! V, m   }, `7 s5 |5 S0 e* e9 |
  }# e0 I! z. _- T0 r, h' H8 \: k
  return 255;/ q2 V% U8 G5 b  h+ c
}+ u- U: K& G+ U' h  J- _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# y- e8 b2 @4 w- s5 E" P  ]1 z
{
0 _6 g  `' ]0 x; b1 M- o1 a  BYTE nTmp = 0;* X, b3 ^4 q4 O9 B- w/ P4 I/ [  k
  bool bDest = false,bSrc = false;6 |  V/ y& h5 X3 b7 m: V. c2 W
  for (int i=0;i<MAX_INVENTORY;i++)
0 u! A# @! @0 m; o0 G7 h  {2 x5 o! N: H4 V4 o% J6 t1 `# c
   if (dwSrcId == m_Item.dwId)( p3 J; H! [" _9 r. Y
   {
; L. d, k2 K6 s9 m6 L6 n2 F1 J/ ]  t    //id相等 则 改变对应的dest和src, b* \: ]* W7 N4 m$ k" u
    nTmp = m_Item.nIndex;, z9 ?7 {# l* W# B2 R
    m_Item.nIndex = dest;" I4 n( l9 T6 s* I5 ]( z
   }
% j6 V4 R; \, ^  W& e4 |5 Z) g/ F  }
/ \+ j) \& f& |8 s( k4 l  //临时数据保存完毕,交换开始* E( T; @7 z5 L8 z# v
  for (int i=0;i<MAX_INVENTORY;i++)" H) _" ~/ u. I; S1 E+ }' r
  {* L  k+ `8 C6 f8 f( ?/ m
   if (dest == m_Item.nIndex)9 |" R0 h7 l- z
   {
, z" g' G9 @) ~5 i9 e    //id相等 则 改变对应的dest和src4 ^8 H) a" ^& `) u8 p2 E
    m_Item.nIndex = nTmp;/ b3 C8 g; m2 I# |0 W
   }
% C+ }* \. l$ s0 ^6 V) O  }
: f9 h. e. T; O- X$ d! o; K! Y. S}
+ \  W3 `/ k, u+ f, \& A7 J6 b};; [* X5 a3 e/ {# A/ u; o
-------------------------------------------------------------------------
- ~; T' A2 i8 C! R8 ^6 D  J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 z5 {' F) c9 n7 {, k/ N/ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; S$ z; Q. n+ C* B* D# M: {3 d紧靠其上添加:
8 S* V2 o6 M: [- tif( pWndBase == &m_wndMenu )
  h5 [$ \- ^* `8 Y1 d{) I9 c4 @- R$ y
  switch( nID )6 u8 x! J. G2 [* }
  {
6 p# `3 [" I( m  f3 p  case 2:
( j  j% n: e2 q5 L; K6 H   {
# x! \9 l& E& B; z; G. V8 ]    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ n5 |6 Q' c# ]8 p$ c    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" v" U6 h3 o0 P5 A9 X% ]& }    {
' O; n6 i0 n( o7 l     break;
  E- P! t) O+ p$ C  n; C1 ]8 e' I    }
3 o/ m5 C, J, |% f" b$ s- B    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# }, |8 b# e4 K    {( c, H! x2 p8 y' o1 b  P1 O
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( R. R2 J; a8 ^
     if( !pItemElem )- S  q- k9 M, Q6 U% @/ i
      continue;; ^: d5 _( u( s2 K) A3 \/ l. `
     if(pItemElem->GetExtra() > 0)
! w6 }8 `# t6 Z+ S3 J      continue;
7 S. C3 b7 i5 o  m2 H     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , d' r2 |/ S+ @# d$ V
      continue;
; [. O  Z( d+ p0 j; K. a     if( g_pPlayer->IsUsing( pItemElem ) )' q/ K2 T7 t6 w
      continue;
  g# M- i& w% V  ?! E     if( pItemElem->IsUndestructable() == TRUE )
% I2 _- L" q7 L/ G     {
9 m$ ^8 ^; B( K$ w1 V      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( C. W. M% ?- e4 x+ x1 d      continue;( g4 E& |) ?- h3 b* o
     }
5 N) Y, Y$ e+ S+ n% C+ ^$ j6 K     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: N* f6 C6 k6 `9 d2 G/ t
    }
) @: H; F) F- g    break;# P% x. K0 D/ E9 Z# J
   }+ M/ A0 V4 q* J: k. u: u* Y& U; a, U
  case 1:. o+ D7 U$ j# u
   {  b- y. B- r! U8 u9 V4 @- w7 b
    //整理背包$ Z" e% l0 r# _5 K
    //////////////////////////////////////////////////////////////////////////
4 I. I" M/ p$ I5 b2 T* Z, U8 g    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 f/ P5 @0 N1 b" A& @& U: }  t2 ^) `    //////////////////////////////////////////////////////////////////////////
- C0 Q! I; E( O    //////////////////////////////////////////////////////////////////////////
0 x( p9 ?+ I% ~    CInventorySort* pInvSort = new CInventorySort;
( j, T4 R; E" ]( E! b4 h! o* l    vector <sItem> vItem;2 X/ w% I6 \5 B3 y1 O8 I* j' v# x
    vItem.resize(MAX_INVENTORY);//初始化大小
% F2 y. Z7 r5 F     //////////////////////////////////////////////////////////////////////////* M/ B4 Q% G2 z0 i. W- L
     //填充数据
5 T% a- x4 k/ T# I     for (int i=0;i<MAX_INVENTORY;i++)3 O4 v3 P: m7 K# l1 {; T
     {( {4 `- @9 l5 H0 P- @( d  {
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& j0 W) e3 {6 d7 o* d* Y
      if (!pItemElem)* s, n# i+ Q- _2 G3 f$ n# h/ D$ @$ R
      {/ [3 ?$ g$ |# B. t7 z
       vItem.dwKind2 = 0xffffffff;; X2 z: P" Y' @2 M: n& v
       vItem.dwItemId = 0xffffffff;2 K# ]  x+ Y' g& \$ [) y
       vItem.nIndex = i;3 E2 X1 h1 |$ r/ V7 D# w
      }else {' b; N5 A% H8 O( }! `: C4 ^  V
       ItemProp* pProp = pItemElem->GetProp();
( f- q9 O; [: L5 ?! ]( n" J6 M# f       vItem.dwKind2 = pProp->dwItemKind2;
. [) N; |4 t* }4 Y8 X* Y5 d       vItem.dwItemId = pItemElem->m_dwItemId;
: y; r, P+ A2 x1 R) E: c/ j9 Q       vItem.nIndex = i;
9 x6 K* N+ U. r- h      }& N* m/ u' _$ F8 a* r" e
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, g2 c+ z8 h1 C1 m     }
6 e/ Y! o+ i% l$ l0 p" G' y     //////////////////////////////////////////////////////////////////////////
( w% \. v: G& A5 @, G     sort(vItem.begin(),vItem.end());//排序
( W; ~# f' W4 y/ B     //////////////////////////////////////////////////////////////////////////
+ D0 }/ [( `1 N     //交换
) w1 v1 ^, E" h7 M( M) e     for (size_t i=0;i<vItem.size();i++)7 s4 |1 `6 k: U; }+ u1 ^
     {
7 F, S  l: T! O6 W      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ x" W# t$ l, T. D3 U2 w5 F      pInvSort->Add(vItem.nIndex);6 w5 T% I( F0 e( Y6 d- {5 E# h9 v
     }2 J2 f  y4 p0 Z6 Q. U
     BYTE nDestPos = 0;
5 A, T3 @! R. V' A     for (int i=0;i<MAX_INVENTORY;i++)* `# `% a* e% c; i0 S4 U- p
     {
6 y& f- }) ^7 ~# U! c5 q7 G! G      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ {8 k! a' W" `1 Z+ e4 L0 y
      if (pItemElem)$ t% z# f8 k; W- d2 P) m
      {
5 r: j: B: h* ~/ F& y; K% h9 B       if (IsUsingItem(pItemElem))* K* _( t+ v, q) I+ }
       {4 f/ ^/ x- N, v$ Y; Z+ \
        //这个位置无法放
- o# v# j2 c0 K9 a6 T& t! p& K' x2 e        nDestPos++;
* O0 U2 Z1 q7 Q1 b3 C       }
- [. L7 U" q2 D# A9 G0 V      }
) S0 N1 j4 S, e* z. B5 O) r8 h5 {      BYTE nSrc = pInvSort->GetItemSrc(i);: g+ z& N+ k0 ?) a7 N# r
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 d* Z. q! l7 ~
      if (pItemElem)
7 K% P: a. B0 ^, l      {
6 k2 z0 H6 Z6 s+ C       if (IsUsingItem(pItemElem))7 Y7 h# ?2 v) z
       {- C& V! S/ O  }2 k
        //这个道具无法移动,跳过" t0 R3 [* x2 N! f* R& z# Z$ y
        continue;; L% |! B# |: G5 o& X! O
       }
- `. j- P& a3 N  }" E5 r8 p      }else{) j) P& i7 }1 Q" C- E& `
       //空位置 不用动! R% M! c" z4 h8 P
       continue;! u9 @( F/ [8 P1 A7 z- R
      }5 T4 p9 N: j5 p/ a$ f
      //////////////////////////////////////////////////////////////////////////. N2 b+ l6 a/ E/ l( G
      //开始移动
0 K3 T9 |7 o7 z9 V8 e+ z      if (nSrc == nDestPos)
; Q! h. m" j; G* v' h      {
; H- n$ D& e0 t" `       //原地不动
" e% I* k( b+ ~3 B       nDestPos++;
. X. ?/ U  s$ q, Y/ J       continue;+ s3 n7 L7 y, P6 ]0 |9 @! B5 j
      }
, w3 M8 }0 H. @      pInvSort->MoveItem(i,nDestPos);
, j) `" a9 R: x( V8 b      g_DPlay.SendMoveItem(0,nSrc,nDestPos);, i2 n# d7 y$ v! U
      Sleep(5);, w% Z4 r2 \9 l% L6 u! N' r% O4 U
      //Error("移动 - %d->%d",nSrc,nDestPos);
& s2 r) \" e! t9 f/ x5 |      nDestPos++;0 m4 D1 D* A, B, n6 F
     }0 k7 u6 f: z. f- l
     //取第一个元素的信息
1 i% T3 E5 y9 j0 _     /*  ^' [2 C7 w: }2 N7 r! s
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. h: |( s( X2 }1 L     {
' z: u+ Y/ D  [( q7 r. c      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Y& M0 f1 Q: {  J# F: q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ P- u. ^, q( E1 [
     }
  m# |1 g6 {% N9 L- |+ w     */
% Q5 M& h; x" G$ M* d    //////////////////////////////////////////////////////////////////////////
$ T$ {+ H( [* T/ X    break;0 I9 G. D& |! m+ \3 ~+ P) Q8 v2 g
   }0 |9 g, }( U+ n  q* ]/ F. l& l
  }
! {+ G( y/ P- P0 S3 [6 Y}, S: t9 x% T; l
m_wndMenu.SetVisible(FALSE);
/ n- I0 [% |& }2 m
" s3 S9 A& c( B) I--------------------------------------------------------------------------------------------------------% u& h4 F; `/ N' G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 C2 p8 c8 L  }2 I: U6 S{
# e4 ~: o' ~6 `+ E0 N0 aBaseMouseCursor();
4 ~$ s7 M# b; B  Q# ?}
3 l- u+ ^$ _6 a& K0 y在其下添加:
2 T/ w9 e5 O: ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 ]+ ]% x+ e7 ^: x5 a! O7 k
{. a3 ]2 \2 A' w& A1 J
m_wndMenu.DeleteAllMenu();! j1 U. H: N- p' A4 y0 ]
m_wndMenu.CreateMenu(this);+ ^, {' |# A( j6 t+ {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 s, y, o. s; q- S
4 y% h* |1 }* g2 `if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 M/ l6 h, |; u  \$ ~8 N: c' T9 f* X$ G{
' T  @& t1 [' ~  x  //P以上级别才可以删除所有道具
; ^, S! n; B) m* A3 W0 f- p( b  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; l& g7 _6 n7 r9 {1 {" h- e+ M}
; F; y" y" K8 F5 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; D! X* a# M, `& H) jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( ~/ N# O' w/ q, pm_wndMenu.SetFocus();  Q) k: J4 @7 R, P! i( U
}
" l2 T! f6 @+ F/ c/ x: \------------------------------------------------------------------------------------------------------------1 Q6 S$ `' t0 d, j( L
*************************
; C# v& t- k, z0 m5 g& IWndField.h文件6 L% I; e5 w* K+ J; ~
*************************/ C/ J4 a0 f) ]/ ]
搜索:BOOL m_bReport;
/ K# Y) f& N8 A" G其后添加:
- h3 I9 g# V3 {. e+ P5 `+ J9 UCWndMenu m_wndMenu;
5 e! I! A7 j6 K6 X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 C4 B% |4 O9 s: p  r" r8 \; W/ d
其后添加:4 t, W( {/ `0 `% x- N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; R9 J- Q$ e& |, a
- X: R2 g% j) o# G9 S* q; ?8 `* P- a. o3 d: F

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 08:13 , Processed in 0.065225 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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