飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
- I. m% Z* c5 b  h" E  j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ?- s+ N. a$ h4 O

. }/ r9 Q* M% q7 n2 _( ]; Gstruct sItem
% g0 {: J3 S' M) l" U; ~, Y{
7 }/ ]# `  q8 r  Q3 A- o; jDWORD dwId;
/ J. K1 t5 c& V) m8 eDWORD dwKind2;8 V2 z8 E% j2 R( z
DWORD dwItemId;* X9 t# V- {. S
BYTE nIndex;1 v4 ]- e8 N. @; N7 z
sItem(){
$ g4 N1 \; a# A6 C, m  dwId = dwKind2 = dwItemId = nIndex = 0;
7 M4 y0 u' z  H7 z$ U  B}
& k; H( N$ y& l2 ?bool operator < (const sItem p2)6 ~* R4 V( g  y5 b$ t
{# v: ]: T/ s; x5 n: K2 s2 Q
  if (dwKind2 == p2.dwKind2)
6 ~$ p9 |: a$ R& _. g+ A  {
9 H  S& G: {5 ?) f   return dwItemId < p2.dwItemId;
1 g( R" H( }$ e" g5 l+ H7 h  }else{
8 U. c2 }' L+ z3 R$ I" i' ?   return dwKind2 < p2.dwKind2;
; x# @0 A* G0 q# H  }
+ q0 E7 Y& T. d6 t}
1 X1 R# o3 Q% }9 W/ c, A) l};5 g8 M2 w8 S; Y8 ?
class CInventorySort
- S) f2 i8 ?+ E3 t' Y2 t{
/ ]$ _- P5 s) Apublic:
4 f; B6 f+ v* kCInventorySort()
0 l4 \9 K% S/ F$ m, R# r{: ?- C7 B* G( ~* _. M; V: h
  m_dwPos = 0;$ Z# {  _! A& ?' B+ D0 \
}& s! j3 O( _4 R% {' _0 G. L1 b
~CInventorySort(){}
& Z# s! N. X1 c5 i6 }private:
1 f9 E- d- S/ O0 tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; w3 I' a' s! Z$ @DWORD m_dwPos;4 h7 H  [9 U3 X! q& s
public:
$ o9 q3 o: C8 C# k2 Z- cvoid Add(BYTE nIndex)( t: J* K7 x1 A) W% H( |( r1 w
{
; O, t8 o: _4 A, y* i' U9 N  if (m_dwPos >= MAX_INVENTORY)
* B( T0 f5 h" L* K7 U  {% G8 Z9 I" j9 p& L0 L+ r8 N
   return;
5 r: b9 @# N% e7 ?8 h  }
  z7 g; W% _& t/ ?/ a. n, f6 ]  m_Item[m_dwPos].nIndex = nIndex;. H* a" l4 b( ?' r9 K* y) Z, C" A
  m_Item[m_dwPos].dwId = m_dwPos;) `  _; ^. O! G# A
  m_dwPos++;! g& J3 P! L0 h- G- F2 ~
}) P9 }$ S. R: M0 v  m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& b' p9 t  Z# ^" \. X5 l# u  m
{  m' J$ X9 `; `! L* `
  for (int i=0;i<MAX_INVENTORY;i++). `' H3 q7 e% ?8 @
  {* P5 M2 s& Q0 {7 P- l7 B7 `; B9 w- b
   if (m_Item.dwId == dwId)# y* ?. r% y8 S' t  k, _% ?
   {, s$ ?9 Y: D" S' n& n
    return m_Item.nIndex;1 l2 y. [* Z. u: G+ u8 d
   }: j0 _) J/ J/ _8 ]4 Q
  }
4 e; P+ d% F8 o  return 255;0 v) W. X% A4 ]: ?5 K
}
3 X; ~( Z( h6 j; W4 ^- [. xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! W% ]- j( j) k1 [8 E, @, M; m
{8 |, H) E' b" H
  BYTE nTmp = 0;5 c$ y5 ~* I6 Q# `& Q! }$ K' K
  bool bDest = false,bSrc = false;
3 f+ k! m8 G1 Q/ c" U) }  for (int i=0;i<MAX_INVENTORY;i++)6 e. X- L# ?- k' b
  {
* p& b9 y0 Z! s& Y% R' S   if (dwSrcId == m_Item.dwId)
: U' a, p6 q2 K; A/ d   {) `! S+ P6 b6 R" r" \/ m: a$ i
    //id相等 则 改变对应的dest和src
! ]" ?" I5 k" ~4 h' o; q    nTmp = m_Item.nIndex;
" p0 ]. s* E( K. o, f) \: L    m_Item.nIndex = dest;3 x6 ?# N9 d0 @: @
   }
" y% Y# o% `: n1 ]) `  }9 g3 k6 [' ]# Q! {$ k
  //临时数据保存完毕,交换开始
- K) ?8 U& W6 |, K2 W" m  for (int i=0;i<MAX_INVENTORY;i++)
3 G' Z4 U* d. _# @6 u1 p  {" H8 K7 A0 }+ \$ _0 z2 A4 V. `0 o
   if (dest == m_Item.nIndex)5 ^! L; h, Y: W* `! Y: j
   {
% c  W' C3 j% W) {    //id相等 则 改变对应的dest和src
1 i: E+ Y; |! G  W0 M' {' {    m_Item.nIndex = nTmp;5 h( Y; ~7 Y- C# ]
   }
2 R# k( O) j& B$ P0 N: e. X  }
  J2 B! n. C& |+ z$ \5 D0 M}+ f9 ^/ ~6 B& n+ c; T4 G
};  r$ G" X, O/ D- K: o
-------------------------------------------------------------------------
/ q, y# k2 N9 ^- Y4 R' w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. ^  a3 D2 Y' H' P' j) @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 B6 s, ^8 N* U; f- Q8 e5 ~/ G" S紧靠其上添加:: D! j2 M1 R: M  n0 v: p- i! D
if( pWndBase == &m_wndMenu )
& q4 w8 h; n6 b" ~; {/ ?{. F% v2 ], _8 n5 [" x) z8 ^
  switch( nID )
( Y9 y1 g, n/ h7 H: {0 C( ?$ M& p, G  {- x$ r& |: ~8 I9 j4 z0 @
  case 2:$ c4 y8 w1 ?# u
   {! f9 j$ \- ^+ g: s2 c! x- O) B8 j
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ l0 Y7 m9 }8 c; s    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! k0 A; |" O5 b, r2 R
    {0 a) o' [& i0 l
     break;% u/ U: q2 C6 S( Y, F) e
    }& g5 m" z; ~5 r1 ]3 |( Q( H0 W+ G% w
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, j# ]$ p* @* `4 d8 l    {) q4 S. G9 Z8 [5 O
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 T' ]/ J6 F8 \0 P% v" g     if( !pItemElem ): l5 E# w8 l" C% X) |3 G7 F
      continue;. m) g% m/ i+ `2 e
     if(pItemElem->GetExtra() > 0)7 Z# h* K3 C! F1 H
      continue;. ~3 g! F+ {9 @% R8 F1 Y  m
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 H3 @( S7 b0 U
      continue;
6 y! j8 N3 }2 ]) ]! V- G  B     if( g_pPlayer->IsUsing( pItemElem ) )
- x0 G5 e& q' A0 L  k- c      continue;
' \% c5 {7 t) K& t+ U     if( pItemElem->IsUndestructable() == TRUE )6 {& q% Z% a" K3 T4 `/ ^8 @
     {
8 Z) E$ h+ V. W+ e( |, Z4 {7 w$ h      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 }  p( W3 O& S/ {, a5 o* b# ~
      continue;
/ e% v5 j/ n# B3 D5 W     }4 |2 c4 P6 l9 ]' }
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& R( w% G/ ~: k3 L: B: y
    }
* t9 ~" n* ]8 }* ?- E    break;
; W7 g( p2 l8 q' N, Z0 ?2 }  ]   }; S; R5 z1 P4 h- ~
  case 1:
+ u6 f1 Q# t% m: _' \' n; D   {0 _, v3 Y1 x' k
    //整理背包5 ~) Z1 s# Y$ D0 x
    //////////////////////////////////////////////////////////////////////////) W9 {; C5 ], o( a0 Y! I* c( y% r
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" D$ ^* p0 e0 O- R
    //////////////////////////////////////////////////////////////////////////
9 T" f2 B: @. }3 c! |1 H$ M1 q    //////////////////////////////////////////////////////////////////////////
7 A' h5 L& `$ b+ n3 P    CInventorySort* pInvSort = new CInventorySort;+ |" y, t2 u* C$ b  N/ v
    vector <sItem> vItem;! g% _' v) x# |1 C! R; _6 G( P
    vItem.resize(MAX_INVENTORY);//初始化大小$ P/ j% ~' ]4 f& V0 b& u
     //////////////////////////////////////////////////////////////////////////
9 g/ E7 R3 J/ y7 T     //填充数据( }7 _* [1 V# q0 n+ j- r5 |
     for (int i=0;i<MAX_INVENTORY;i++)! v& o: {' g! Z6 C2 X
     {
; H. {; p* a2 o5 ^0 M$ y      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* A$ Q9 }# Q; N6 p- R; L4 N  g- o) T      if (!pItemElem)7 K! V& }4 C, ^  B7 w- b$ t
      {3 z: X6 @' H. M4 O* l! ^, d
       vItem.dwKind2 = 0xffffffff;
9 ^* X, Z  {: K& ?# r/ ]       vItem.dwItemId = 0xffffffff;, x" E) F& b7 c# F
       vItem.nIndex = i;
% W) d7 [% z: a7 {4 [      }else {
+ x3 z2 p/ k/ o' \" M       ItemProp* pProp = pItemElem->GetProp();5 U8 F  A+ j% b, {# y( v* w. y
       vItem.dwKind2 = pProp->dwItemKind2;
& o& Z# Y" m8 j% s7 B* j' b       vItem.dwItemId = pItemElem->m_dwItemId;8 p1 k! j2 Y2 p4 Q6 u
       vItem.nIndex = i;' I5 H2 z; V  r
      }% Q5 K$ z7 H; J. E5 L9 s+ T# h
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& w. }4 l! a' y, j
     }
4 Z) ~8 f. V8 |" K- a     //////////////////////////////////////////////////////////////////////////
9 c8 m) Q5 G+ w( Q& c     sort(vItem.begin(),vItem.end());//排序
% y6 i% ]5 ?& Y4 u     //////////////////////////////////////////////////////////////////////////
  h) e' [; @! e: b: p     //交换
% S# L$ {, t; C$ [( T: A6 O$ k     for (size_t i=0;i<vItem.size();i++)
4 E* c5 y3 ^/ Z: m  v; v     {0 Y7 p5 k3 R% A: y( \& X
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* Y9 c4 a! z1 @0 d" F
      pInvSort->Add(vItem.nIndex);
' H6 r) w+ T  n; F, C0 M6 H     }
. z& I8 S+ l/ F  E/ ^- ?     BYTE nDestPos = 0;; c+ a9 u5 g1 i5 t* j5 t% m
     for (int i=0;i<MAX_INVENTORY;i++)
6 s( ?& H& I, r! Z5 L     {# i2 {8 I8 e( |) x2 l1 g- [$ P
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 M8 i$ |9 m: R8 e* [  d. @
      if (pItemElem), m& P' q' C" ~) [, N# m7 T2 }
      {
: [: w4 Y: |8 a" a! L# U       if (IsUsingItem(pItemElem))
3 n4 ?  B) J+ _) r       {* q9 C5 A/ D  b0 ]6 K& f
        //这个位置无法放, n& V  @+ `. l1 A
        nDestPos++;- a( S5 ]! g4 c* g$ y! \, z; ^
       }: {8 l" \: Q* k6 O2 E3 X* s
      }
5 I. l. ?9 O3 F. t! C* i# o      BYTE nSrc = pInvSort->GetItemSrc(i);+ `2 d8 c& D  I& |: B) c
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 L! `1 N- Q" h7 h: N) s& q7 R0 ^! l
      if (pItemElem)  D1 d4 ~4 |' }3 ^+ x- n+ u
      {4 I4 E2 E2 S1 @! [, o1 p
       if (IsUsingItem(pItemElem))  m4 p3 q' y9 P6 C( @4 Q
       {4 C0 q( @) n$ g( ~5 H3 T; S1 @9 ]
        //这个道具无法移动,跳过
$ A% y4 I) N' h4 V5 N        continue;- r" H) @- t: \* R, E- V4 w
       }
5 k$ _2 M* n% `9 P) N' u      }else{
. `/ `7 ?: P  }! n  D* l; @& @' y       //空位置 不用动; x% c6 Q  T$ c$ F
       continue;
" c% B* R& m0 N0 y" n* _$ R, U" |      }+ {8 |5 P' U" r% [
      //////////////////////////////////////////////////////////////////////////; ^) {* n/ @9 d; d
      //开始移动
* f) |. V" a! }1 m/ O$ L' r3 V      if (nSrc == nDestPos)
( V, M/ d. f) x: c) P- S* o* f      {
, [" c/ a* \! O: I' w       //原地不动
" w, `5 `9 i1 a* `       nDestPos++;
" v0 n% @( T: T% l       continue;
6 S  s8 S1 Q3 [1 u9 B      }
7 Q: _$ P* n) H6 K/ K" }+ \4 W      pInvSort->MoveItem(i,nDestPos);
+ P" }: u% f' J$ ~: c+ w+ r      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* O3 L4 p3 H1 ]6 v$ P5 i      Sleep(5);
' ?; y1 A5 \4 j$ ~, V, O      //Error("移动 - %d->%d",nSrc,nDestPos);5 E! }  Q3 Q  d% u$ B2 \, L
      nDestPos++;
2 C+ X. h2 l" R4 ^: A     }& |6 |. d4 h1 o
     //取第一个元素的信息6 U# W3 G6 f% p0 t
     /*) {$ A. ]3 ?' L
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ Y- T3 x. Y4 q8 u9 e9 C
     {; R% p. d  V. W; M. `: z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);  d3 R) T! C9 \; t* Q" W! L
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% e- T' q- ^  H4 q     }* f$ i* U. N9 s5 ]& |. P
     */) u% G  V1 ~- ^, X& T, J, [
    //////////////////////////////////////////////////////////////////////////; m! H3 E& L3 [) P" n
    break;
% W5 S$ a1 k* `  y( S3 X   }* M9 Z# _7 |: o
  } 9 d$ x. z' W2 D. L5 `5 B, j$ Z/ o
}, u( u8 F1 R. q
m_wndMenu.SetVisible(FALSE);* v+ T9 s- J# S2 c' O2 U9 t! d

4 Z  x- `+ C! e6 i7 O$ U4 y& f8 K--------------------------------------------------------------------------------------------------------3 m* x: z! Q5 y% b  }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, K6 m- ?. k. `, @; _! G. _! }* Y{9 ~3 \6 H% Y5 I
BaseMouseCursor();
. s& ?) M% l- r3 p$ ^% ~}
, v$ h: T8 E* C/ X6 h1 c在其下添加:
3 d; c0 }# g" H5 uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ z9 p: n% `0 x/ |; P) D. ?{/ K7 u# w$ R% I; d7 Y
m_wndMenu.DeleteAllMenu();7 t1 h9 \$ o$ M) s" B. C5 {6 r
m_wndMenu.CreateMenu(this);# X% `5 s1 D; ?2 s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 v) J: D+ _) V; \: j: N5 _

: I8 Q5 }+ n! o/ Q- J4 Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ R( C0 z8 L; w. B
{1 c: y  G/ ?* C+ Z; ~! L
  //P以上级别才可以删除所有道具
# ]$ w9 L: E, }+ P# B/ B6 s  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 A* d3 G& J0 j% M0 t* s9 M
}) @4 G5 G- Z$ d: Q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, R8 q5 t3 j' dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 ^3 j5 b6 \! {/ P% a. K. \
m_wndMenu.SetFocus();3 I7 Q' T+ y0 a* ]! b
}
  k# s( w2 P0 k" Q* S; J* H------------------------------------------------------------------------------------------------------------2 k5 L9 K  W8 D
*************************
5 V+ a1 M  U0 u+ ]WndField.h文件: n  W7 ?# }3 j
*************************
+ @( Z6 [9 L  ~搜索:BOOL m_bReport;) M3 \+ @  y8 z' v0 k
其后添加:
: t- g, E! A, L/ `- SCWndMenu m_wndMenu;! G* U# ?6 S! t  }6 {( n  b5 u" \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) c, B% G, S3 b0 [) f6 g其后添加:
( |' e$ H9 V6 o( b; c  Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);& @8 ^) D# M# H2 o, N2 x

" [/ u/ n) U" F- Z  o$ }5 P0 v8 @1 W  I% Y' m1 {

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 04:51 , Processed in 0.060479 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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