飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' W0 o- l5 H3 _, Y3 U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 X% @& p7 K) Q4 t( [8 `2 C4 \/ T" w) S) S
struct sItem
1 p0 P7 ]$ j0 |) i1 A4 E3 B{
+ r0 X8 i; V" o1 TDWORD dwId;
$ g! P: N7 c8 ^  BDWORD dwKind2;  C& d  f! A0 }6 ^+ M0 B
DWORD dwItemId;$ g; V5 @, J  B* O" S
BYTE nIndex;4 e! Z0 [" g# [+ G, n
sItem(){
: L: z1 c5 ]/ T/ E1 [( j2 K3 x. W1 A  dwId = dwKind2 = dwItemId = nIndex = 0;
" @  n/ P" S! @( s4 A! V' @, k}
& C/ b! J. J& K3 Z% B0 m2 y& k' F7 C* ybool operator < (const sItem p2)
0 J# F( W% n7 Q- u{$ ?; D0 a/ v, E0 [3 r& X* r
  if (dwKind2 == p2.dwKind2)& P0 S% n4 F$ h: |6 Y8 [) ^
  {
' Y* j5 P( n2 Y) Z# \; f8 _) D   return dwItemId < p2.dwItemId;
4 E% t& j3 x& b6 G4 [4 b% o& L  }else{
* @# @' s% X% }7 W7 p9 h! C   return dwKind2 < p2.dwKind2;  c9 @! a0 l& |( w' O6 m8 z: G
  }* j3 \: E$ N& r+ R: ~
}7 I8 A' {- _1 [. L
};: I! o- G/ u1 k& C9 s+ b! B& R
class CInventorySort
3 ?# b3 `/ u$ S+ ?2 s+ P8 E{1 Q* J8 \* O# Z2 S
public:" s3 a& e' n: e$ m6 @# C
CInventorySort(): E* b' [) |4 D/ w- c9 j
{
3 p1 L) n3 l! H9 U; d/ I  m_dwPos = 0;
7 {# j3 N! z4 ^. P4 R: g1 H- h}
! T- i4 T: i+ Y~CInventorySort(){}
0 l  Q) m0 x* n+ g0 p( j' g8 k" y7 zprivate:( K/ r) R; h6 @) c  B  f. D- M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  c7 g& E! ~/ e6 k$ A+ t+ J9 DDWORD m_dwPos;# n7 q- r; b$ F. I4 {
public:. Z+ [8 P& x( t/ D& o- N
void Add(BYTE nIndex)& ^" U8 F) \" L& [9 t; H
{; O2 \8 T0 G8 u$ p7 K. x, t
  if (m_dwPos >= MAX_INVENTORY)
7 Y$ ~! b$ x5 C- e( Z# g  {
8 b* c, b  B, S" u; B/ I# ?" {9 l   return;5 S+ |5 [6 b2 P8 y3 G
  }& M6 W& ?* U' B# ~
  m_Item[m_dwPos].nIndex = nIndex;" v& ~  M4 E3 O0 _9 h; e5 e4 [+ P
  m_Item[m_dwPos].dwId = m_dwPos;
% c0 F5 w5 |" F  m_dwPos++;8 {. U% _% S" d% |: d: ]$ O$ h
}& D" W. ?5 Y0 {; @# t6 t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" O9 E: c/ P6 H+ m( A7 O0 s{
* h4 a5 \+ N) z  for (int i=0;i<MAX_INVENTORY;i++)
* x# I# S" O9 d  {
  }. p) J% Y* N* J9 _* Q* l! k   if (m_Item.dwId == dwId)+ j9 O  J5 e  J/ V" X
   {
: t( u3 W% f! h( C! H; w( j    return m_Item.nIndex;4 O2 F9 w4 h2 u0 I$ [
   }
; [2 c6 G) n  w0 ~1 K  }
8 W8 b1 K4 b7 P# T- O  return 255;
/ A& k- |5 `6 V; Y- @}1 S2 ?! |; K0 o. f: a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; J( I; }+ X# h3 M- c4 K  E9 Q{
4 B, Z! _0 v1 H# H6 c  BYTE nTmp = 0;- r& d& B  N) |7 k
  bool bDest = false,bSrc = false;
; [/ M% C! Q8 p8 U1 x0 h  for (int i=0;i<MAX_INVENTORY;i++)2 a% |5 W' G, I! z
  {' o! H' m/ ~7 ^" d
   if (dwSrcId == m_Item.dwId)
& R* n1 Q  D6 J5 e, Z( L   {+ J/ k# X& G7 r5 P( Y. p8 N8 U9 N
    //id相等 则 改变对应的dest和src
1 d% |& A! z0 \- x& ]! M% W! L1 ]    nTmp = m_Item.nIndex;; q0 E6 ~9 q* q5 L! K; H. H
    m_Item.nIndex = dest;
, z# v" }/ x' U4 g   }0 ]' ]; |5 @2 S
  }
3 ~9 x- z# y: M2 Z4 Z6 y& u/ ], x  //临时数据保存完毕,交换开始3 S' o5 C4 T8 k  B) \% y5 U5 ?) ]
  for (int i=0;i<MAX_INVENTORY;i++)
# i; j* [& Z# S  {% Y) B# B  x2 [3 B2 e
   if (dest == m_Item.nIndex)0 L6 D1 L( W& x5 j! ^: J
   {
0 E/ c/ E* N1 @' M& f3 [    //id相等 则 改变对应的dest和src' o# y6 L& Q; g
    m_Item.nIndex = nTmp;
) W0 p3 l- N$ D+ X  E; g! e$ ~   }
8 Z5 e) @1 h9 T  }0 H; E# b# o6 ^9 C# \( d6 e- [, P4 t
}
6 s" j' [8 n! t% h$ {& f& j% k};
& H( F( x$ o7 b' D8 J-------------------------------------------------------------------------' x" t1 Y! @6 z8 L+ Z% D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 f6 M; E5 t- A! j1 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- R! ]) {/ O/ Z# ^紧靠其上添加:
7 z  L* P" ?: F7 S4 ~7 l3 tif( pWndBase == &m_wndMenu )
9 I+ a: ~; j. \5 h( {7 Z9 [{2 P5 a& F0 e6 d" c8 [4 {( K
  switch( nID ): W8 g& |4 ]9 X+ t
  {
* {+ I( v7 H; ~  case 2:
8 w" F9 ~! R  n* b1 p! w   {
* k) y+ @7 R. c1 t* L    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; w8 B& a: R5 ]( B; B9 \
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 f  Q- ^9 I# c. [5 q: k) Q- ]    {  v; J4 f/ F  I
     break;, b$ [# W0 I: U: R
    }
4 `, K4 h) A& \7 [    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! Q. Z4 a& b  [2 g+ v0 \4 J
    {
4 z: M6 H  `+ ~3 T     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ f/ L3 W7 I, J: H, Q# \     if( !pItemElem )
' N+ l- F" j6 z% E: p9 w& a3 U      continue;
- e( q: |: L8 X     if(pItemElem->GetExtra() > 0); w4 L) }' L9 h) {& h
      continue;
! V3 r! \2 W7 f+ V; v# R7 Y     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . k* G5 W6 }6 I8 ?" _6 U; D
      continue;/ B7 u0 }+ e* C. Q- {
     if( g_pPlayer->IsUsing( pItemElem ) )
9 I1 O' C: d) m  l% ~" x: L      continue;  h! _5 p# O, d/ t, V" x
     if( pItemElem->IsUndestructable() == TRUE )2 D- k( n. Z7 A+ W3 g
     {
8 I8 }3 `) h. q. P      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* p9 G, Z1 v" w  g, N* i  p# y      continue;
9 {  t5 Y- u1 o     }
; N) i2 u' I# I$ H7 m: b     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. s, P  _5 y1 O  S* z8 |    }
4 Q5 k0 t9 J4 C! T! K    break;6 z( b1 b; `5 e* A8 b
   }+ d( A5 [  l# S) Q+ J' w3 P6 Z) x
  case 1:8 V* d" v# ~, A5 J* b
   {
! C/ C0 w+ D3 }, e    //整理背包' T4 ]: I; H; p% }3 [, T' r
    //////////////////////////////////////////////////////////////////////////
: x# z0 Z  {) ]    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 ?) Y* h! C; ]    //////////////////////////////////////////////////////////////////////////- m: j7 ^. f( l, E) C) C% C- z
    //////////////////////////////////////////////////////////////////////////
8 t% I/ @$ }. n% M. x3 W4 t    CInventorySort* pInvSort = new CInventorySort;" ?7 Q1 u, A' ?' q
    vector <sItem> vItem;
7 [2 O  |  J6 ~$ O9 s/ X! b2 L, K    vItem.resize(MAX_INVENTORY);//初始化大小
, S6 n7 T2 K0 i# @+ o     //////////////////////////////////////////////////////////////////////////+ N9 N( {# O: G$ r" d
     //填充数据
% X% S4 Q8 H' }+ b9 C5 G     for (int i=0;i<MAX_INVENTORY;i++)3 k5 ?  v7 _& n7 I# P" X3 t5 B
     {) v% Z( M0 c( \6 |# ^* |
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: J9 z# H+ l. P0 h* P; f      if (!pItemElem)) Z- j) I% D9 E* N* k
      {2 ], j: |. ?! @4 e2 Y9 J
       vItem.dwKind2 = 0xffffffff;) ?4 f0 Y* ^" j! z' w+ Y/ A- x
       vItem.dwItemId = 0xffffffff;$ e) G2 G  P9 r4 c1 B+ I; @7 R
       vItem.nIndex = i;
" W  k$ n% V0 }2 l      }else {( V) d7 {  Y! V( a' P
       ItemProp* pProp = pItemElem->GetProp();
. {7 Y# Z+ n6 @! T" ^8 k2 C) c       vItem.dwKind2 = pProp->dwItemKind2;
3 q1 V! r/ y" d8 Q5 ^% [. V       vItem.dwItemId = pItemElem->m_dwItemId;0 @9 z# {6 O+ V0 T$ J0 M4 G( _
       vItem.nIndex = i;+ ?6 _/ ~3 C' r6 W! Y% R; M
      }6 K: X2 q- ]5 _3 P4 g# P2 l: a3 M
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ s# D. E' v3 M) @. u9 |! I
     }
" i+ X. ~  e2 D5 ?     //////////////////////////////////////////////////////////////////////////
) w3 S6 b% S9 ^) n$ j/ `     sort(vItem.begin(),vItem.end());//排序2 L. I2 K7 N% Q  k; _( u# C
     //////////////////////////////////////////////////////////////////////////5 ?$ z9 M0 @( H; @+ q: Y
     //交换
; r2 W# p3 ~: p7 [% s% ?! X; F9 K     for (size_t i=0;i<vItem.size();i++)
2 e5 r! z2 D8 V+ [/ U# v, u     {
0 H7 r% o  B) r( t) r" v      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 P* q$ M* A# Z$ F6 p      pInvSort->Add(vItem.nIndex);
& H+ q9 J& T) P" ?4 L) p     }
0 e5 j' x; L3 [     BYTE nDestPos = 0;
; u3 t2 C3 q4 r1 G# @     for (int i=0;i<MAX_INVENTORY;i++)
  Z4 K! s  M8 t" Y     {
9 k0 T9 W9 u  e1 e9 Q' \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! g( S' m! u' n" I# W7 S      if (pItemElem)4 ]( _! a. R, z8 O
      {( V5 [; P$ k9 ]0 S. b6 R
       if (IsUsingItem(pItemElem))
2 p' X. E5 c' Z: d3 @' G       {, r2 C! Q4 U, F; c* Z/ l: k
        //这个位置无法放, P. ]" N( \+ T6 h  g, i
        nDestPos++;
& Y  l( C! ]9 v( r. X; y; M  h       }
+ _; }6 g7 X2 A# P: b" ^      }% ~0 x& w& R! v- b" N" N
      BYTE nSrc = pInvSort->GetItemSrc(i);% u/ Z: t$ g9 q5 Q4 B9 q: k* O
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);  H$ S" ^% t, {4 w
      if (pItemElem)
/ _- f* d( d# f4 z      {( C5 g8 [9 c  V1 Z* z- M
       if (IsUsingItem(pItemElem))
1 i# f* M4 X- z( O. \4 b       {1 u8 G/ y  F; j' w9 x& `0 n
        //这个道具无法移动,跳过
* _$ U6 ?* y# X3 L2 h* O        continue;2 k; w* m2 Y4 ]1 n5 A# o4 b* N
       }6 Z/ K+ N$ ^* I( G
      }else{
! ]/ T* ~( v3 l' ^       //空位置 不用动5 y# a5 p5 U$ ]$ b2 \( p
       continue;  j# g. B" o5 }& g
      }
% l1 Q( Z3 P9 C- J) Y( V      //////////////////////////////////////////////////////////////////////////" a. N, w5 k- ~& V
      //开始移动
! r* ~" H- T$ O! b- t" H1 D      if (nSrc == nDestPos)1 I: o% a, u/ G3 w: ^6 o! t
      {6 F0 w2 ~. K1 c, U
       //原地不动* N2 R, ]: Q, c
       nDestPos++;* }: {9 [# s* k* v
       continue;
( h; x. v+ f2 @, _5 Y      }
4 Q3 N" w; i1 R! \4 G0 G6 l      pInvSort->MoveItem(i,nDestPos);
( W( P! C% ^5 Q! ^      g_DPlay.SendMoveItem(0,nSrc,nDestPos);: T2 y; z9 t3 a1 d1 W% k
      Sleep(5);
" ~( A% W5 V+ {* F& b" A& L, d: y      //Error("移动 - %d->%d",nSrc,nDestPos);( |8 Z  ?/ E( D
      nDestPos++;. N# Q" b6 b, u4 s: z; P3 [; M
     }, I" Z# O! x4 \0 b
     //取第一个元素的信息
2 M: _/ |8 d% I# l# G9 O     /*, C9 ?% W$ J9 W1 v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% J+ q% j1 X+ }& H- c+ |7 l     {
) U. r2 d! U+ a9 s  u2 s      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, \" |- m+ n, [* K0 {9 w5 J8 Y
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: Q, {' o3 W1 ?4 t; ]! {' V     }
5 l% m# Y0 C6 {" W. p  a     */% a# Q8 b+ y1 s1 |2 l3 |
    //////////////////////////////////////////////////////////////////////////5 Y9 S0 Y6 {8 o- K1 J0 G% k
    break;
1 a/ A. R  ^3 Z; Y9 p3 F* J   }
" X3 N* q5 n$ [) \  } 8 g- c' i: o4 |5 `. C# |
}; n* {2 A. G+ u
m_wndMenu.SetVisible(FALSE);* F4 O! ^6 j# h* y
9 |* Z2 S" V$ o1 i
--------------------------------------------------------------------------------------------------------" _1 P6 V+ u! x* q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ t& k; h2 E* _: Q' g* [{
1 R# E/ u7 n- e0 D- }9 V9 GBaseMouseCursor();" U* u: j6 s7 ]* [
}* h& [3 a- q# C) t, b
在其下添加:
9 r: [# i8 e+ [% G3 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 }$ ^7 X4 S% |, p$ I6 r& I6 ~6 p
{- Z6 X1 Q! c7 w7 a4 z) l' X
m_wndMenu.DeleteAllMenu();
( H! d, Z0 I3 h' Nm_wndMenu.CreateMenu(this);% t# u/ D1 ?; `8 D4 O  R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 K- h  V$ ?+ l2 Z) N) z3 R7 O3 Z6 ]: M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H" Q& x8 `/ \
{
& B" B2 J" o( {2 w# U  //P以上级别才可以删除所有道具: O5 |9 ]' E3 V1 }6 [& @
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 G/ ~! F! w6 c5 {
}, X2 J, p$ m4 t. G. O4 q9 x& U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( K2 A. g8 w5 B5 a: _7 o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' A* w2 J2 ]5 D" a
m_wndMenu.SetFocus();
  ?7 o, c* e. ^0 L: m6 a0 }9 Z}
6 v' V/ \: o: F3 @2 F! G------------------------------------------------------------------------------------------------------------  X9 `7 v/ p" ?9 i  H2 L- n
*************************& v! \  L) t. ?, b4 [. w
WndField.h文件7 Z% S0 f. m4 y" o+ X# D+ |0 ^; R
*************************
3 B: ~0 y1 \, A8 X+ ~搜索:BOOL m_bReport;
5 [6 d* ]" v# S- I其后添加:
) ~0 N  U( i3 O! ?6 J% u+ Y7 i" aCWndMenu m_wndMenu;# ~, E# c& M2 v3 U5 }) ~7 b0 m+ G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* \, T$ {+ Z- {  o# ^9 e% }& |
其后添加:8 {7 J- Q- t* k2 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 H6 Y4 x7 O; R1 W, P3 ]+ S6 |7 @& J+ ~, T

6 i* m7 G+ E# l$ e8 G& Y( q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-24 16:54 , Processed in 0.089134 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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