飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
% r+ K7 ~4 c+ Z+ ?; {( Z- N( ?5 a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Q- P, Z8 U: {1 v  D

9 X  t& [, M% Xstruct sItem
# t- P/ j! v+ Q. [; a6 h1 ?{+ x: b4 A$ C* E
DWORD dwId;/ I- a3 Q/ ?3 O/ t
DWORD dwKind2;% A2 y, F( V$ G4 k
DWORD dwItemId;
9 n9 m3 s+ ~1 w2 I6 b9 `/ vBYTE nIndex;
. B! V& j" D  D" |3 k2 g9 V& GsItem(){
+ b! J& }: @6 z, T) w  dwId = dwKind2 = dwItemId = nIndex = 0;; a, w' s8 G$ B$ _8 F$ l
}" U  s( d6 e6 d9 e
bool operator < (const sItem p2)7 B: w+ ]2 h) N/ S6 \2 ~
{$ R. u; @! T! j: m
  if (dwKind2 == p2.dwKind2)
5 `* l3 M2 B  ^0 q4 l7 x( d; C  P  {) c# W% r4 [3 z, N
   return dwItemId < p2.dwItemId;' V4 s, v5 _4 F; l, k
  }else{' F& c) m. ^0 d+ H4 I
   return dwKind2 < p2.dwKind2;
2 T  Z7 b2 r4 `/ s7 ?  }' i& b4 ?# [2 T5 K
}
$ I  t: W& H# f: M7 i};" `$ m0 J+ v7 m4 ?
class CInventorySort& e1 `+ ?- |3 I. A
{
7 ]$ Z$ n1 Q" j" I+ w- b' H2 Bpublic:
. o7 k9 v/ `9 k+ h' b9 vCInventorySort()$ E- l" y% A" @* p! E8 U4 h4 f4 s
{
- e9 y+ d' k; K% Y* ]  m_dwPos = 0;+ U6 G1 h& k5 P
}
! I  o2 q# n! M- c/ e$ e~CInventorySort(){}
9 s/ k" S  L+ ^/ `* F9 H! xprivate:
# e" W- R7 @7 L8 T( i$ U" b+ J9 E& QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 ^1 I5 l6 l- a5 U% J' v; R) r' G
DWORD m_dwPos;0 n4 ]# u* l1 {4 h- Z
public:' A5 d2 \5 d' G- V) R
void Add(BYTE nIndex)3 l4 X  @' j1 c6 T$ i  U; I" a; X+ N
{: A4 z( Q# ?% i& a, W+ B$ ^% }
  if (m_dwPos >= MAX_INVENTORY)% f% a# O  B5 O2 V, J
  {2 d0 U5 ]0 B! k$ Z$ P- K
   return;2 x1 s* i/ I; ~! `, g1 |
  }
( y) Q+ q7 V) m' _/ \2 T! W  m_Item[m_dwPos].nIndex = nIndex;
: ~* t, m  R# j' ]" T& k1 x3 A  m_Item[m_dwPos].dwId = m_dwPos;
/ w  o, [2 t! P, i' `  m_dwPos++;; O. |. J1 K8 G& D5 ^, |7 M
}0 B7 h( p; c! W* k! }( G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 I9 U0 t; K  R! s- o
{
% l( L- [1 u6 C, G. @! c8 |  for (int i=0;i<MAX_INVENTORY;i++)) y* X5 p: v1 ]- _6 Y
  {! y: w8 G3 i7 y( Y0 x
   if (m_Item.dwId == dwId)
/ R/ z# s3 Z. i+ ^/ I   {! C5 k; i' }0 |& E
    return m_Item.nIndex;
0 }0 Y  O- z# u& i: F3 D9 D   }
! _" U8 z2 f( z0 t# G  m* Z" l6 a  }) C# a8 S5 G; U! U! h1 t. ?9 X
  return 255;
% h. X0 a4 w5 X/ f, K}
1 G  r9 n6 _3 H' \3 v# Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 ~- P" V' y% `{
# I9 g/ G3 ~: A  BYTE nTmp = 0;
4 l) ?1 t7 |# B6 s- S  bool bDest = false,bSrc = false;
; t* Q4 w7 ?6 b2 n4 i  for (int i=0;i<MAX_INVENTORY;i++)2 @" k* w: c% S3 m* N
  {
8 v4 |9 S& H5 D* l2 z+ Y8 l) i. W   if (dwSrcId == m_Item.dwId)
% M/ u$ l% u3 C1 N0 L- J( L) H# R9 |   {
* F9 L8 Y" ^- w- Q% q    //id相等 则 改变对应的dest和src8 M; v' o: w6 _0 x% H
    nTmp = m_Item.nIndex;
- j3 E, g4 t  ~$ s* r# R4 s* o' p3 y    m_Item.nIndex = dest;7 Y9 [! L2 h' s1 N6 ~7 U% H" ]
   }
1 v% n) _1 U' v& C% [6 _* G  }# I$ y( d; Z1 g. w# l+ V
  //临时数据保存完毕,交换开始
, ^: N+ C2 O0 }3 a0 j4 p! g  for (int i=0;i<MAX_INVENTORY;i++)$ u4 c4 V! q* X
  {
" p. F2 T( K! T4 q& J   if (dest == m_Item.nIndex)
% P8 [7 R, J2 R# M   {
+ ?, m; z/ j$ \2 D& d) `    //id相等 则 改变对应的dest和src8 r; u% `% k& T3 z, p
    m_Item.nIndex = nTmp;
9 I/ q! z7 M6 P% K   }
3 e# H% Z4 I. l  }+ B, k$ i1 Z1 e; @  K
}
. ]- [; \$ m  S& ?2 ?};# a3 T2 @5 _% a
-------------------------------------------------------------------------" K+ M  j8 Z, p# O8 y$ j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 X: t7 X4 e8 ]2 Z0 p. r$ n. y- G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: j! }  W; [& W. {, ?& j紧靠其上添加:3 `7 R$ A" y4 F0 v' A' T
if( pWndBase == &m_wndMenu )
! M) Z5 z9 M2 e5 y{
% I0 J$ }( l) Y* {2 u* @  switch( nID )( r6 n* i! t5 f' F
  {
' ~8 A/ F! A; {. h! E+ ]" S5 a# R& P  case 2:& R$ O/ {$ ?* L% s& g' z9 n9 p
   {6 H- G& n; t& G& l& }8 D
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 o$ R* r! J  Z) |    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! o6 B$ x; r1 u/ e' @: x; m3 \6 h    {
! a. I( Z+ I, U) z( J& M6 E     break;
7 ]' K+ K) b5 K/ V& {% a3 u" x    }1 Y+ K) D5 w- v2 r2 s5 J7 ?" r
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 M# g/ @; u  H7 G1 U# ]0 w5 q
    {) A7 @2 x2 _$ E0 R6 }( T
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ u3 C9 V1 |. F     if( !pItemElem )! w, Q3 r$ |2 e; M5 U3 J
      continue;6 i, U9 w5 x) J$ p
     if(pItemElem->GetExtra() > 0)
2 h, G1 y1 c. g5 e      continue;
( {) B0 b+ A' R3 c3 ?8 N% m     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. M) V( M+ u) V      continue;$ j) G3 \# j. ], P0 j4 l8 r
     if( g_pPlayer->IsUsing( pItemElem ) )% B! w9 ~. T% k3 p% [; M
      continue;
+ u# R- K- v! w     if( pItemElem->IsUndestructable() == TRUE )
. y& f! Y. f' @  P: M; c$ p& @" V/ l     {$ a% K9 f, s1 Z8 ?( Z
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 j3 @& ?6 N1 c+ i      continue;$ e5 X- B5 d' [* p
     }9 O' }# Y  B) N0 _2 E8 H6 ~+ p+ x
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 k# r: {, t- r( X
    }* i* F; i( {( V. ~
    break;1 T0 Q" e! `. Y8 i& g7 ~. D" ?
   }
% e% @, C/ \% ?6 v. U  case 1:
5 D1 e% t1 E  |4 z$ r* l9 N   {
+ X7 W, v) V1 M9 O- E    //整理背包1 I/ q" Z5 O" W- q  i* B1 z
    //////////////////////////////////////////////////////////////////////////
" i, }* h) s! q2 k# S1 ]' V    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 }2 `& c: G* P  @
    //////////////////////////////////////////////////////////////////////////: _1 ^" [  d  ]5 D" b" M
    //////////////////////////////////////////////////////////////////////////
) C2 u/ ]; ]; P& n; M* r7 P- l  J    CInventorySort* pInvSort = new CInventorySort;$ w0 O7 e, N9 o- U3 g$ e
    vector <sItem> vItem;. V7 t/ i0 A6 |; Y6 |" _, ~: j# T
    vItem.resize(MAX_INVENTORY);//初始化大小
2 t, u8 T0 b8 E; @     //////////////////////////////////////////////////////////////////////////
8 j2 I. Z) s# U- {5 T) L: o$ M) X     //填充数据1 O$ R/ q/ \+ y  ]
     for (int i=0;i<MAX_INVENTORY;i++)0 b  ?" ]/ F$ p* Y7 z) [) d
     {4 S8 J! ~6 o% \" b0 D9 d
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* Z* c/ r8 V& ~  {7 N  P6 `; b      if (!pItemElem)
2 {/ T! ^; u4 T6 N      {
  j) o" k' `7 z) S$ x       vItem.dwKind2 = 0xffffffff;
, \8 A! U. v; {  M* y, |$ z       vItem.dwItemId = 0xffffffff;
  G+ d* G: s0 y8 h3 m* h4 a       vItem.nIndex = i;
4 R  L3 e4 T' G4 e, Q% c8 L3 V      }else {
9 O$ K' d' s9 G! b. m       ItemProp* pProp = pItemElem->GetProp();& p3 Y9 I; i' R& ]
       vItem.dwKind2 = pProp->dwItemKind2;
0 _; x4 ^8 j: D- J5 m5 e. d       vItem.dwItemId = pItemElem->m_dwItemId;
( K- C/ ~% w: U) d: d5 l6 @       vItem.nIndex = i;
' w5 U$ v: K# X* p% N" z      }+ I+ Z1 y/ E; o" V' L2 v
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 E- L: S  ]4 \  m: |" A6 T     }7 g% U7 T' ~( O7 J: B* [2 Y& O
     //////////////////////////////////////////////////////////////////////////. q: Q6 Y3 o, I0 q: A, Y/ q
     sort(vItem.begin(),vItem.end());//排序
$ v8 ?% G% w+ X* m, f7 G     //////////////////////////////////////////////////////////////////////////7 u( B6 q6 X/ I
     //交换
; a2 i" {) |8 X! s     for (size_t i=0;i<vItem.size();i++)
* d. H( L; w/ }! F; D     {! H! C% h0 F, y- f! Y* R
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, t* C$ n8 \' x4 e
      pInvSort->Add(vItem.nIndex);
7 B8 I( U* b7 w- `     }
) r  g' T& _# z! Q/ l! F9 Y     BYTE nDestPos = 0;
$ o2 N. J6 e1 f4 W0 G' e1 A$ r     for (int i=0;i<MAX_INVENTORY;i++)! C; ?+ M( F# E. e  E' |0 R4 ?
     {3 J# U: X+ f, j; _5 G% r
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, S# ~6 i6 j4 m5 y      if (pItemElem)3 Q% F+ F; [( j% S, i* ?
      {7 S- a1 W" k7 n2 Z8 @; D4 s4 P
       if (IsUsingItem(pItemElem))! l6 z! v5 X8 j4 h: |1 g# J3 Q; V
       {
% I: b9 b# ]0 x- t% K6 h' ?        //这个位置无法放3 o  e  M& U; f: ?$ ]: x3 r' c
        nDestPos++;7 Q0 C' p2 {$ Z) ]
       }
( V9 ]% j& J5 _+ M# Q1 a      }
# o, J, p. W8 Q& w: n; F6 @      BYTE nSrc = pInvSort->GetItemSrc(i);
( v+ w$ T! Q" K$ |      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# S7 R5 f* @( N& k2 e% h
      if (pItemElem)' s" k* F/ [7 m5 O
      {. a0 ~, D" r2 V+ Z4 k
       if (IsUsingItem(pItemElem)); m0 F3 E& a. z- l6 W) j# `7 Y) f( b
       {
/ p0 `( E$ |; h& R        //这个道具无法移动,跳过$ Z& T% k" l4 k2 i$ D) }% F
        continue;# T9 U  i; v5 E5 {
       }" B& f+ E* j) k0 A& a. ]3 D% K
      }else{0 n/ e# W0 O+ l% B
       //空位置 不用动5 ~# J% b- E/ |0 k2 T- d3 X4 n! g
       continue;
9 H) X2 k  ^' G& O8 X% t4 \      }
7 Z/ J4 f/ x& W$ U7 O3 [      //////////////////////////////////////////////////////////////////////////
! i# b9 W- _) t' G) r% ]7 n+ }      //开始移动
, P0 k  a# V* P      if (nSrc == nDestPos)! r# w" L% j+ `! S* `) H% ^; |
      {
/ c) J8 i3 E( K: `, C7 ]( G+ G       //原地不动% B$ _) O: g* X" ^) z2 V
       nDestPos++;$ u4 B% f# Q* \( _5 Z' p
       continue;  B) q/ b+ P- D5 [) O# h
      }
) o! q) U) j' E2 p! K2 J$ V      pInvSort->MoveItem(i,nDestPos);
# f9 {1 f+ q9 `3 F      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 f0 b$ G* g7 a5 P; Z      Sleep(5);
; @$ X3 k: Y( n1 m- ^3 y      //Error("移动 - %d->%d",nSrc,nDestPos);- Y7 ?& z8 V5 [% f5 ^( l
      nDestPos++;$ H8 T% K7 W' j# n
     }. n0 P! I- _9 Y
     //取第一个元素的信息
8 z  B4 D% U3 }, R" n( C" C     /*5 u; S' f9 _0 ~. J; ^0 l1 q6 S
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ F. u1 ^7 {8 ?* K& Z
     {6 y# i; J0 [  ~; @1 u# x
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 N* y! e) q8 n1 ?! X- d0 b# M
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- x3 S+ K2 |9 ^+ ?+ {  z  u
     }
" f, S2 v; s; y. V4 Z, E0 K     */  D0 \/ ~; O3 q2 H
    //////////////////////////////////////////////////////////////////////////
, f1 Z/ I* Y& g. r& Y    break;, \0 H+ ~# L- `% S5 W0 G2 k7 J
   }
- Z5 O+ }$ I- w5 ]! D" ^  } # o; `5 a9 _: d3 a6 }
}
0 p/ g5 M1 l) ^m_wndMenu.SetVisible(FALSE);
2 u  Y; ^, V5 {- `, `; o
* H6 ^; Y, x  O5 z--------------------------------------------------------------------------------------------------------
" g  W" n8 C$ W0 }2 c) j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 a- ^( m# J0 h# Z: I, {& `{7 E# n! _( F7 b
BaseMouseCursor();* b7 @. I- {' @5 t, K& c% K
}' R; ?  F7 v0 f. a" @
在其下添加:
, k' [+ q4 I8 p: ?, Q0 H) qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: ~' f! `7 A7 q. [, C% `3 ]( d{; }. m2 X1 a; f4 k/ v& ?$ z8 i
m_wndMenu.DeleteAllMenu();. O- K' j8 K( m
m_wndMenu.CreateMenu(this);: }) _4 E2 K! ^4 K) k) I  M8 X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 r' ^' d& g" y9 s- D, t  ~5 n! [6 m" j+ V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 I* g4 Q$ D, I( I$ O5 e( E; x' s( |6 ?{
0 L. H' q( J0 R  B, }  //P以上级别才可以删除所有道具
2 P/ W7 d/ s( a  C6 l# M8 m- c1 X* r  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ p; K. V, w1 I% M
}
" d0 L( O1 b7 t4 S6 C) G* Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& W+ M% |; Z# Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 U. k& D1 J, j: D0 ]: l1 p* W2 `- t0 J
m_wndMenu.SetFocus();
5 z; S  z4 g" `1 B. [$ L}( b) l6 {. D8 M7 r6 P
------------------------------------------------------------------------------------------------------------
4 A/ l: L4 b- X/ S*************************
1 n, h3 B9 ?+ r* LWndField.h文件0 ^# F! E0 p) o: \1 A
*************************% y, V( m  K/ j$ j& S) N
搜索:BOOL m_bReport;
0 f, c* r) k( S2 ^2 u- s: S- @其后添加:
' e( \0 `2 F+ vCWndMenu m_wndMenu;! e% `- i$ k* [8 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" l: O7 ]8 C) v5 t! M% Q4 N, N
其后添加:: h4 Q2 \# \; o7 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 W. o/ Y6 Y5 A% K* l! l6 }
" d/ C" F3 c0 M% ~/ L2 e
3 V  X  c9 t( b4 k0 y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 08:49 , Processed in 0.068409 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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