飞飞世界论坛

标题: 一键整理背包 [打印本页]

作者: admin    时间: 2016-1-10 03:44
标题: 一键整理背包
源文件中_Interface文件夹下WndField.cpp文件
3 C: U. f  `2 M% j1 v9 e+ s/ j8 _& ?! D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 t. }5 B6 e0 x* \. E- N3 h( }2 V4 q  C

2 {% k/ ]( G/ M! r$ F7 E1 q2 d; s# cstruct sItem7 g6 S* ~) o  Q4 s
{( D) L6 ^2 j& Y& d% _4 R* r" U
DWORD dwId;' N- B. F$ ?7 W; R( i+ }
DWORD dwKind2;
) y7 z) ]' q; h: U1 MDWORD dwItemId;: q$ u9 g5 f" a0 V
BYTE nIndex;
3 K8 h9 L6 y/ G. u+ P* k$ ksItem(){5 ?: i1 V  g0 P
  dwId = dwKind2 = dwItemId = nIndex = 0;
" Q- i0 v- ^- f; j}
4 R4 |- y+ x, M& w% hbool operator < (const sItem p2)4 N& [: M- J; s* l% d9 g
{
0 M! n9 ?+ G# t5 ]  if (dwKind2 == p2.dwKind2)
# x4 `* R1 c' _' }6 i  {# D2 j6 x, V  ?$ i" p$ D
   return dwItemId < p2.dwItemId;" a. r) ^7 K3 \$ C! {5 V
  }else{
7 J5 G) a. H  v/ F   return dwKind2 < p2.dwKind2;5 [9 o) H( ?$ i: Z* P( Q
  }. ?, ~9 t5 b3 n* U. D
}, Q2 ?3 y, e' I2 t
};
/ ^; I4 e! e! W1 w& gclass CInventorySort4 R) T" a; Q) m1 ?8 T6 Y3 {
{+ v1 W) ^8 O, ~6 i! p1 `
public:
$ _1 i* V$ Q  f  J: g) j* ACInventorySort()+ O9 B0 `: J" ^6 z5 q, A
{
, G9 _0 \: E5 U, V  ]7 N, q  m_dwPos = 0;, l3 v$ m' d4 G% e) E' Q( K& Z
}5 o. [' [& f2 ~4 J: p& T  S
~CInventorySort(){}( ~! F* r; m( N
private:& ~$ P2 j  K5 w5 V- ~* m5 \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, d* r/ G  E: ?7 u8 g& t+ ]1 N  C
DWORD m_dwPos;
. l- a' `( q- s: P& Lpublic:
$ d0 L* A6 h9 w9 qvoid Add(BYTE nIndex)
" A5 t, f8 \2 E- \8 s{0 N$ N/ k3 A& e0 N6 i
  if (m_dwPos >= MAX_INVENTORY)
  p& X: l. ?% G! E. ^  {& O9 D7 K* ?! t8 B( Q' H9 b
   return;$ V5 E, K+ I- H, k' X+ v3 [. |+ V: {% b
  }+ d: Y% ?! L7 h5 h
  m_Item[m_dwPos].nIndex = nIndex;
" \, Q( r' q2 S  n  m_Item[m_dwPos].dwId = m_dwPos;
. o9 y; \  t4 Q( X4 z  m_dwPos++;: Z# D* W, O6 R6 g  a; @# y$ p
}" [$ B! F0 N$ H+ M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, \1 v; j& M/ W, V# ]- f
{& z; q+ k* m- @4 T2 v
  for (int i=0;i<MAX_INVENTORY;i++)) i$ Z# Y# M/ c" @6 U0 p7 V
  {
, A% Z& O& X$ g6 x8 Z5 o   if (m_Item.dwId == dwId)7 R' g2 X  ?* n. m; C6 T% L% {! o
   {
  j" d& {! u4 _2 {" g; m    return m_Item.nIndex;
: ]) D3 }5 X0 j' t; H: @" {   }
8 w$ y6 j9 n& M  ~$ ^5 w$ J  }
: V8 q) e6 ~) t! a% S9 N- y9 u  return 255;1 }3 j* [- q5 X) D' u% Y, R; ~
}
: j3 Z) I" p1 |$ A5 a7 P/ N- K; Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ P: D$ K, D7 C; p
{
2 U8 a) L) }. X" o2 i6 h6 Y  BYTE nTmp = 0;" o9 h" {. a" _: q5 S
  bool bDest = false,bSrc = false;. L! G" @7 y" G' D
  for (int i=0;i<MAX_INVENTORY;i++)/ D0 w( x* S7 w9 D! J; V. ^
  {
% I& u& k6 \  _- _   if (dwSrcId == m_Item.dwId)
' e% s  g( R) r: q' f) A' E   {+ M0 G; `: }' G5 Q4 o
    //id相等 则 改变对应的dest和src
! a0 P, F6 H2 g# J( J    nTmp = m_Item.nIndex;
9 y2 K8 ~; r4 n; c    m_Item.nIndex = dest;! y3 g7 n2 D4 c' ]! j/ m2 v; d
   }
( T* e# W- C3 f3 h3 S  }& Y. g: Z2 D5 O: a; }( Y! \
  //临时数据保存完毕,交换开始$ W+ `: p6 w9 s' t# U# X! B  D  f
  for (int i=0;i<MAX_INVENTORY;i++)) h3 N, L6 O7 K- d" Z
  {3 K4 P6 \% l; G, Z9 Z0 z
   if (dest == m_Item.nIndex); U7 G( h+ F. ]
   {
0 q6 J6 @& B( B8 k" K4 I    //id相等 则 改变对应的dest和src; a4 l5 w+ h4 u5 x
    m_Item.nIndex = nTmp;
  x  ?* v! m3 {% d+ B9 |: j' Y   }
9 N" U; g& x$ m- w* J8 x  U7 X' s  }( W' R- @, Y$ e6 Z4 c- U
}
& i& t2 h3 `* t( o! W};
  S3 B. [; F: a-------------------------------------------------------------------------  P( s% e4 K6 P7 |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ O+ V; {9 X* v6 j; R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ Y6 Z4 r  `, e; n0 X7 r
紧靠其上添加:% n5 a( Z. E, g
if( pWndBase == &m_wndMenu )+ M; {2 N6 a) x$ E) z/ u% a# u
{
4 P4 Q9 l4 u5 N  switch( nID )
; N; r; s6 m8 N- h* [  {6 n* P6 b& v# v0 d8 a4 U! r& h5 x
  case 2:
4 S7 I  e, Q* L   {
3 f1 C$ L  [+ k    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 e+ P% Q( f* G4 U9 y4 ^7 P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 K0 Z/ C$ i& b    {+ J/ d% V) Q( D8 r( k# ^6 o
     break;
/ K7 m9 W- i4 b# t3 S    }0 X7 b: q7 H2 e: u4 s4 R
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 u  ~! J2 e# a9 j3 _) Q- n
    {- ?; u' ]" F0 y
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ]2 A& x2 `5 a7 Q% E. T
     if( !pItemElem )
' @' d8 n5 A+ r) k      continue;
. |/ Z0 S5 B  y6 o1 {2 u     if(pItemElem->GetExtra() > 0)
  V% F- m) a: H, X# o      continue;* h  @" y7 A- J) P7 K) f0 h" a, r. ]: O
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! L( X" G, Q! h2 @
      continue;% w/ D; j; c0 Q5 D  _; Q2 B
     if( g_pPlayer->IsUsing( pItemElem ) )
! N2 [7 M! ]/ N9 R* k      continue;
0 c7 H/ E6 ]  k6 X7 {$ T     if( pItemElem->IsUndestructable() == TRUE )5 Z+ O/ D% {/ q+ t" m
     {2 s! `( Q: P6 o# ^% [
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) k, U9 L% f, d. x      continue;
  T% U5 @- m4 @4 Z) k     }
4 Q  N9 |" ^, {+ c     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( B( I0 X3 V7 x% x8 B6 N4 R) O! s
    }4 n6 l1 L  V9 H+ [# o* p, G; U
    break;# [. R* h: }% I' z
   }& L+ \' _( p' T* M5 q+ t; Z2 Y- O
  case 1:+ i! j! U; S1 Q' t/ e
   {: C5 R3 Z$ {& n: a# r" C
    //整理背包+ c: w. n% W/ \, d8 T1 b7 w
    //////////////////////////////////////////////////////////////////////////
+ l3 h, }  G5 U4 A% ]# B* {8 O    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" _* ?0 x5 l: C- }: b
    //////////////////////////////////////////////////////////////////////////
2 ^4 ?& |# W7 p- b3 D0 t) p# W, |    //////////////////////////////////////////////////////////////////////////
) d+ [6 `0 F/ x/ @5 V    CInventorySort* pInvSort = new CInventorySort;9 k* P/ W2 {: H( [7 R$ r
    vector <sItem> vItem;6 ^$ P+ \$ w& y0 a4 H
    vItem.resize(MAX_INVENTORY);//初始化大小) g" C4 _: H  @" a7 W% a! M, D
     //////////////////////////////////////////////////////////////////////////2 l' w& Y+ t4 h& Y1 S( D9 D
     //填充数据
! p* x% I( f8 L" ^     for (int i=0;i<MAX_INVENTORY;i++)
" x6 a. c2 i' ^+ K     {7 D5 A! E' Q1 S. L; @; x
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 n) e3 n9 F4 ?
      if (!pItemElem)+ u9 C# i8 X/ p6 r$ B/ E" F- y
      {
& B) ~/ C; n* x1 L       vItem.dwKind2 = 0xffffffff;+ ]% o( A6 ]8 ]. I/ D2 x0 j0 A
       vItem.dwItemId = 0xffffffff;
; W' R. w3 p% K- R, I8 e       vItem.nIndex = i;( a5 O. t' R$ g
      }else {
0 z$ `% x4 _% \3 _' i/ d       ItemProp* pProp = pItemElem->GetProp();
% G  Q# O3 X  ?, x       vItem.dwKind2 = pProp->dwItemKind2;5 d1 P6 L3 ?+ a, e
       vItem.dwItemId = pItemElem->m_dwItemId;
1 g- I2 ~( A- f, O       vItem.nIndex = i;7 S) T% F3 Z* u( `# ]
      }6 D& e( a- u) P+ C$ O& V
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 L& m& U9 l, O8 D
     }: G! G. B" e2 i, W0 f( D$ F6 z$ r
     //////////////////////////////////////////////////////////////////////////8 u/ I$ N, ^; N+ a& c
     sort(vItem.begin(),vItem.end());//排序5 Y. M5 M2 j) g% x% n; l0 b
     //////////////////////////////////////////////////////////////////////////
- c; |. {2 T+ d8 T! A     //交换
+ m5 N+ p8 I+ s     for (size_t i=0;i<vItem.size();i++). f+ P+ B) {; ?3 K( B
     {
6 U# @7 H! F8 B' D, S8 p& b* s      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 _! n% I6 ^0 y      pInvSort->Add(vItem.nIndex);
0 l4 N0 T) a$ X% \1 N" i     }
7 i# A  q) k3 F3 A4 k/ }; r     BYTE nDestPos = 0;
! V1 b5 P# r$ ?/ {7 q9 f     for (int i=0;i<MAX_INVENTORY;i++)
9 E3 w9 Q4 H( W/ N     {
. }/ @( ]0 U# ]+ T0 X      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 Y( ?2 W) d1 n" n- k! \      if (pItemElem)- f) i( w5 Q. f  y
      {
7 y( n: H4 _% Z  d  t       if (IsUsingItem(pItemElem))0 ^) B) s& {) e: z/ [9 [6 L
       {2 |5 @5 l! U- y" S$ {$ d# D; I3 V
        //这个位置无法放
  S4 Y$ ?+ i# H$ J        nDestPos++;
$ u+ E5 N9 ^& U# i       }
) k0 y* F; B" O( k      }1 A, d1 T* Y( ?4 X0 m
      BYTE nSrc = pInvSort->GetItemSrc(i);
# \+ _8 l" }- U9 m- r' m      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' r" {, L3 Z; R' {& M! |      if (pItemElem)' q) o7 _" L3 S' x
      {
4 b, E# G* ]& W1 M3 |       if (IsUsingItem(pItemElem))' d" o5 a8 ~$ z/ `7 P. H- |
       {' Z9 e4 A0 F8 l( i% c2 }
        //这个道具无法移动,跳过% r( \1 |: _4 d( k3 ^! X
        continue;% S* t* y* m0 m. Z
       }$ o3 d; Q( z) `3 E/ l5 D& {/ z. C& X
      }else{" a8 \3 o( w* ^! }9 s' a8 j. _
       //空位置 不用动$ F; x! J( C$ M, n8 [% D6 N
       continue;) ^9 W+ O! ?" I* @6 P5 R1 w
      }
  f- O7 r: p  ?! z; t      //////////////////////////////////////////////////////////////////////////
: ]% [; s# i: P      //开始移动
! R- F% W/ m! ~' k      if (nSrc == nDestPos)
9 d$ O3 s/ E! e5 [- Z9 ^      {
5 G5 H; Y8 H: X# `- N! M, @6 z3 M       //原地不动
. d2 E8 `* F5 @9 i4 H8 P# r4 u       nDestPos++;. q* T$ F0 Q' e; j" I5 b/ {4 |
       continue;
' `6 k. ]  G; B7 Q. O! E8 G. M      }
: \. Z2 m6 s; X" \+ x5 V      pInvSort->MoveItem(i,nDestPos);  f: T8 {, H5 H' x. y6 ^' f: ]# w: D
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  h# r& @' m, g! |
      Sleep(5);2 w9 ?3 T- R% M
      //Error("移动 - %d->%d",nSrc,nDestPos);
' d  u& w& }3 [      nDestPos++;
6 U) M6 H: b8 l( I     }# q. T$ m- E" F. z
     //取第一个元素的信息
# ~7 _7 A! Q% f( B& @7 @     /*! S3 q7 s' ^! J" q
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 m" @' ^+ X/ U( ^
     {+ o- I" F& c; x; T( Z, e' I
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 u  c" p9 _* G( b& ^8 @      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 }1 d/ N: ?: _" M5 A% Q' f     }% C) R% P6 h; Z8 f. B
     */
7 y0 G! q2 Q. U, q5 a+ r$ j# E    //////////////////////////////////////////////////////////////////////////1 e( E6 s( y7 s
    break;
$ F1 \* w2 y  a) D- a* q' c; L   }' {' |+ V' g4 M4 n3 I+ S# g
  }
; T+ e2 ]1 p  k4 j' R}0 p# x* U4 H  a$ p1 `& Q" A# _9 Q
m_wndMenu.SetVisible(FALSE);
" A3 Y1 G5 H5 r* o& @+ ~( s
+ t  `$ R2 a2 o/ M2 k' }9 ^--------------------------------------------------------------------------------------------------------
  @  C7 H9 Z8 o$ z: g0 O! ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 U$ s6 f+ J" ]8 {; q8 F{
8 r/ G$ n9 N' O- d4 }BaseMouseCursor();  p, B1 J  d. X
}( p" a3 K1 }9 l+ X' l
在其下添加:3 @0 O1 W* D' ]+ r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); y( I" K" d& `0 s
{$ X! `: p; K- r9 V, ^/ R& }
m_wndMenu.DeleteAllMenu();7 y- q' J* X% v8 z: C2 d
m_wndMenu.CreateMenu(this);
: u0 N8 t- s! w/ ?/ Q! Z& {, pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 Z# ]# ~  @! |8 I6 U! f1 Q) ]+ S4 Y# I3 J0 R: G4 X8 h. Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) v% |+ Y8 v# T- [, ~4 e) R: M5 q{/ I7 r6 n2 x" O$ H+ q
  //P以上级别才可以删除所有道具
" q: D/ A1 v9 t- P7 \1 f! @  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, [; o' G' }( q2 Z2 d; x' h}
4 [/ }  Z7 m! a( w! ^4 Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 V8 e3 B! B; P/ v0 ^/ A% G0 D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: r0 [/ x, Q9 a( z, \m_wndMenu.SetFocus();
( J, Y$ _' `1 z/ q9 ]8 @& S}
3 |7 p, q% y! u0 H% o1 E+ E* \------------------------------------------------------------------------------------------------------------: \; Q" A; {1 s- X! U$ }
*************************+ F# `" k5 z+ z" r/ L2 u
WndField.h文件
/ }2 \2 W# {( F! J, O*************************
. P1 R2 R, `3 s0 M搜索:BOOL m_bReport;; B5 |& t0 _! l5 l8 ^
其后添加:8 `* Y& T# C% k% I
CWndMenu m_wndMenu;
9 a9 N) f) f! ?' N搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# I) R, B% U: U) Y  F; j
其后添加:
( w  l$ K! V) Z3 ]; l& Y6 Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 t2 Q0 b' M- P! x: k
! z0 U8 @, l- w2 l: b9 c  Y$ ^- n3 q





欢迎光临 飞飞世界论坛 (http://ffwold.com/) Powered by Discuz! X3.2