飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; u3 _5 ]" H9 s: E& h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% z/ s  @/ p) m3 C, Q* l& t
3 ?5 B8 n/ N+ s& Y
struct sItem
  r9 R& r5 a* [; P2 O{4 c1 N- Y# @/ E4 n. ?- H9 k
DWORD dwId;. i9 N  n$ m8 q, q: Z
DWORD dwKind2;' g/ L5 m8 p& m; W
DWORD dwItemId;& }  q7 V4 S) X% W/ Q) }1 f
BYTE nIndex;
, D/ J2 Z% H# c" l9 ~; g0 w, HsItem(){
$ F# e: ~+ V& A- L* x- Y  dwId = dwKind2 = dwItemId = nIndex = 0;  J/ C" V2 y/ i, r5 @0 Z
}
+ A* k% T0 U$ w3 p4 jbool operator < (const sItem p2)
0 N& a6 x: x  T* T{& X. {! @  f: W/ @8 k2 r$ u
  if (dwKind2 == p2.dwKind2)
- j' x. T# z: z& h( Z0 d3 v  {
/ B, D' E+ R. _5 C) f1 ?/ b   return dwItemId < p2.dwItemId;2 G6 [- i6 T) u# j6 W& k# u
  }else{8 |! H* [. l9 y/ e
   return dwKind2 < p2.dwKind2;, H+ N' |! M; O
  }
/ i8 X6 |! t6 [6 ~- T  v}
. ]: C& D6 F  d; ]};; r5 J& I( h3 |; e7 T
class CInventorySort$ _' v0 ], H3 D' P8 n  T
{
6 N0 Z; g% R; l/ j# \public:
! U7 w/ @# I0 e7 d& HCInventorySort()
7 @9 K) o, `* n  U0 B% V8 n{
5 B  ~7 E3 b+ ^  m_dwPos = 0;
; L* [5 f: h; r) j! r) ], T}
! X: ~$ I, Y, W% F, ^: B# ~' a~CInventorySort(){}# Z5 n4 C1 W% e* s3 D0 J
private:
: M4 |7 V, J1 @$ d: xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 D; J. G4 I% vDWORD m_dwPos;5 i. ~9 \$ _+ y$ T
public:' Z# L. M  \+ B5 k. m, }
void Add(BYTE nIndex)
0 D5 h5 @6 J3 a. v6 I{# j3 z& m0 d# }$ E/ |0 o/ O0 t0 \
  if (m_dwPos >= MAX_INVENTORY)+ ~: P8 y2 S) E  _$ G6 e! W; k
  {( x  l" F2 D9 Z; X% Y8 j
   return;9 E( L! @, E5 L3 @$ V3 W! n
  }
8 l( ~0 D7 T# o% s& |  m_Item[m_dwPos].nIndex = nIndex;
+ Z+ y+ ]: j2 Y" b2 d- P$ {* y7 j  m_Item[m_dwPos].dwId = m_dwPos;+ @' |1 D7 `  J5 P$ Z7 _
  m_dwPos++;
& l3 C2 y6 K, ], U8 Z}
" h( n4 K8 W, m$ F3 {1 zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列  }$ @$ U: F2 T( U5 }: m
{
% ]9 Q  ^/ R- s9 A' r. S  for (int i=0;i<MAX_INVENTORY;i++)/ y& t5 a4 k/ L$ F& n
  {7 G7 t. O# B4 n* |) N- i6 L+ o
   if (m_Item.dwId == dwId): N4 V& B' V3 g# Z# u0 F% v
   {
) h* i2 T0 z# S5 f: Z    return m_Item.nIndex;$ B: B6 o2 m; T# r- E
   }* k0 Q6 m2 R/ j
  }4 U% j  z$ l5 s* ]1 i$ z8 G
  return 255;8 {2 b/ k8 d% Z2 w
}
' G1 m3 J5 \3 b- b5 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. A0 x$ h# @% s9 C4 d{% r% _6 s8 R# j0 g( I: T8 ?, i
  BYTE nTmp = 0;( G( M6 c1 F6 Z" h4 r% v
  bool bDest = false,bSrc = false;
& G0 G9 H+ J' ]( M% O9 Y6 V7 {' t  for (int i=0;i<MAX_INVENTORY;i++)/ v- d5 d/ ?% H  O; ]
  {/ K9 P& |# a" U* Q: F' ^) w
   if (dwSrcId == m_Item.dwId)
9 u. s0 [/ A9 k   {4 s  `( c) D" y; [% v, e
    //id相等 则 改变对应的dest和src/ Q# l6 y: m( m( M' Y0 _
    nTmp = m_Item.nIndex;& x  x" Y3 k1 a) r. u% p
    m_Item.nIndex = dest;( Z1 B# I2 y# k& S; c0 _- }! O
   }- R' ^# T9 x8 `& S: Y1 H& T
  }0 i8 u/ W; X8 H3 W7 ]9 s* s! _
  //临时数据保存完毕,交换开始& ?" H# u# ?& Q% v( S4 J; t
  for (int i=0;i<MAX_INVENTORY;i++)
6 g% i$ e: `& I: i  {
/ q7 B  V& z4 N" q( j# F& j0 f$ v   if (dest == m_Item.nIndex)
+ @; g; B* B' D) O   {2 H% P2 w/ y3 H% Q$ E% L0 H$ w
    //id相等 则 改变对应的dest和src
* Q1 v- S" N6 y! r2 r% m    m_Item.nIndex = nTmp;
/ J" M% E% ?, U0 j   }4 n+ T# w: c" D' q
  }5 P- T) }6 P: t6 J% h3 S
}3 E9 @! [) M8 O( t+ Q7 l" x
};
8 V- y* _$ [, T! h2 G+ r# m-------------------------------------------------------------------------8 L7 U* A/ `! L) {7 s: v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: x' D; A$ _3 W! T+ }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ ]: \! ^4 s' C# w) `  D/ Q0 Q
紧靠其上添加:& q1 u; ~8 f$ K/ s  {  x
if( pWndBase == &m_wndMenu )
$ {& ~' U* ?7 x4 I) x{: y' m! Q: ~& B3 ^  j$ U/ Z
  switch( nID )
- d. K  D3 a& c$ M; z" Q  {" \$ q) J1 Z4 G, b) H+ Z- \
  case 2:
2 g9 d& h! O0 M1 ?/ @   {% w& f4 n# z4 R: e
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ c: O0 L- g! ~! `2 V    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 F) o5 `' |& Y/ D    {& V4 X7 ?2 C, Y; G  P
     break;
- c0 I5 X( q0 ?! Q    }0 r/ x# i9 t& u8 R2 K4 W
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 V' F" b$ d; G# w
    {) }: ]6 C1 L; K- G; x
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! S9 K* r  _0 f: f1 C     if( !pItemElem )
) E% I, a. F: j' v      continue;$ R, a: _0 X/ D* i
     if(pItemElem->GetExtra() > 0)
1 J5 o" b- c0 E4 j+ S; n' Y      continue;1 P4 ^" L, `: b: r1 w
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 j. B, D2 v6 v. x4 ~      continue;5 d% ?  d6 ]: K6 j# O$ W2 y0 o1 N
     if( g_pPlayer->IsUsing( pItemElem ) )
; G. x3 M/ @4 N; d0 [      continue;
8 P' H5 v# W. e- B) b4 H' ], {     if( pItemElem->IsUndestructable() == TRUE ), Z/ K7 k" ?6 u! M' a( I, w! ]* T
     {2 k) F4 c8 w+ O2 M8 N
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* o$ |8 U8 s/ H4 R, k) k      continue;
3 H4 H( ]. E, g6 T7 M     }* A4 A" w$ T/ a
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 t& E& {( _. a* v& m$ x    }
+ @1 s6 l9 f& t1 }7 i* _+ l    break;5 X! T+ h7 ?$ B7 p2 f5 N
   }* D/ I; H5 f6 R+ e7 ~. m' o
  case 1:4 i; r* E: t) C* G2 x
   {
! Q! g+ `1 Q* F+ i; i    //整理背包
5 f) r5 C5 E# {' x- p2 h% {2 X: z    //////////////////////////////////////////////////////////////////////////
5 u! `: ~. i! t$ c6 G% Z    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* k  R  y+ L: u1 a8 d9 e) Q6 `" w
    //////////////////////////////////////////////////////////////////////////
7 \1 Z5 E  L% u8 W: Z4 e: @+ A    //////////////////////////////////////////////////////////////////////////. [7 ^* K/ E0 c  M
    CInventorySort* pInvSort = new CInventorySort;
; C1 ~2 X9 L: g9 y    vector <sItem> vItem;
2 U6 e: I, }" V1 C) y    vItem.resize(MAX_INVENTORY);//初始化大小
/ v* n; |  g! O7 v) p+ @. \1 B& p     //////////////////////////////////////////////////////////////////////////5 s# E5 k; y. B+ p! C2 O
     //填充数据$ O% a$ s" @( M$ r* m% O1 v9 `- U9 a& C
     for (int i=0;i<MAX_INVENTORY;i++)% U8 V/ x$ B  g, k+ M" H1 P
     {8 k8 {6 ]6 z, z8 v5 g
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( J4 ^5 G3 Y2 y/ E; I/ n      if (!pItemElem)
  Y! X  H6 Q( ]7 H      {! L0 G$ e( c( m. X+ k
       vItem.dwKind2 = 0xffffffff;
( l) W, p$ s3 N# {8 N! O       vItem.dwItemId = 0xffffffff;
$ Z" o6 Y0 B8 Q7 e% b+ j       vItem.nIndex = i;
' i$ }& x, j3 z+ Z" @0 Z      }else {
4 s" L5 M- |0 K0 ~- X       ItemProp* pProp = pItemElem->GetProp();
, `" X9 n$ C' C       vItem.dwKind2 = pProp->dwItemKind2;/ c0 P: j! L5 j& A+ t5 T
       vItem.dwItemId = pItemElem->m_dwItemId;0 `4 }: Y$ L9 G0 _# E6 G, U
       vItem.nIndex = i;. e  L* ?9 P. X
      }
$ a  e% X( c, y" w      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ F$ k3 S' p5 l" s" d, e: y; t
     }
" e+ ^7 I  v/ ^6 b5 s/ v     //////////////////////////////////////////////////////////////////////////4 {- v" ]7 p( Q. \" |
     sort(vItem.begin(),vItem.end());//排序
3 R, Z& F  Y+ ]% \% o9 {     //////////////////////////////////////////////////////////////////////////" F$ h4 U- C. A6 y6 s$ l
     //交换/ `. S3 i# A2 O
     for (size_t i=0;i<vItem.size();i++)% V! q% F" t& T/ C9 j  v5 ~
     {
- l: ^/ W/ V* J& @) \- Q: C* N      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 q- O: ]+ g7 r      pInvSort->Add(vItem.nIndex);; t% z( f# b( X' d
     }9 F/ a) }0 t6 v+ H  f1 j0 z
     BYTE nDestPos = 0;
& r$ r/ e2 `6 F3 Z     for (int i=0;i<MAX_INVENTORY;i++)
8 n$ O$ H# d1 i9 q! U0 [0 ~     {
# n( z. \/ X! H      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);  @# v/ k% |( w0 k
      if (pItemElem)
. A  S6 T" c8 H: `+ j8 p  n3 w  e( t      {; G1 g# M- X1 Q# n
       if (IsUsingItem(pItemElem))
/ U+ E2 C) O- p       {/ O2 @7 A2 K% ~% \: u2 {; ?: @
        //这个位置无法放
; o3 `# ]3 L/ ]: G        nDestPos++;
7 b* j+ b8 A- G- _. f       }
- Z4 l+ ]9 R, ~- p9 i4 G" W* t      }* G2 T) ]5 @/ g6 d
      BYTE nSrc = pInvSort->GetItemSrc(i);) S" h( E* ~, V- A7 D2 j  b
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) S8 h9 k- x# t, m* m$ @8 [
      if (pItemElem), g# o  E; r( _8 M0 P# G; R
      {+ O1 J7 }. Q0 {( Z/ q2 c9 j
       if (IsUsingItem(pItemElem))5 F8 i6 a2 _! W; @4 K0 H8 ^7 e. c
       {
% Y& O- D7 |$ o3 N7 b# e4 E1 D, |        //这个道具无法移动,跳过6 }, I: [( R# O) }
        continue;
+ R; ?3 ?! f! s, v# U       }% x6 t5 c/ S8 f1 }
      }else{
. \, {6 W, q" |* X' z       //空位置 不用动
  m- h: S) L! x& a, a. C9 c( Z9 [       continue;' i! k) v6 f. k! [/ d: F% M
      }/ P5 l, A$ b5 c6 v- y
      //////////////////////////////////////////////////////////////////////////( h/ F  N# G4 r$ i3 q- Q, C
      //开始移动
  c4 T& Y. X; t% c3 I      if (nSrc == nDestPos)
1 V) |' x2 {0 n      {5 P  D1 ]: \" t7 G2 @! ]
       //原地不动9 A6 }  g0 G7 e( W5 T
       nDestPos++;& Y% {  e1 j3 y$ i( h
       continue;
  _( q# T" i1 g6 D- P      }
+ j# G) @5 D, r2 L: i6 f0 ^$ P8 R- O8 b      pInvSort->MoveItem(i,nDestPos);1 F' e8 m$ |1 U
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  j3 I2 c  u; v* l' d
      Sleep(5);! m+ l6 o; b$ P9 N+ a
      //Error("移动 - %d->%d",nSrc,nDestPos);
( g  B# E3 W% h* S      nDestPos++;3 f, K3 d% v& \& G( A! S  T4 p& [" T/ p
     }
9 w# l& K: Z$ K4 q     //取第一个元素的信息
8 u6 B0 C1 a$ {, m     /*
5 u+ A. y; j2 f     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  ]% X5 ?* ]0 o
     {; V: E' E9 J, O' H3 Z, D3 x6 I
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* k  F: ]( z' K
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" L# `$ [  g8 n4 R0 _& }! b3 _     }
# O0 h/ M/ W+ K$ w     */
# x* l: Z4 k2 S/ w. i( [    //////////////////////////////////////////////////////////////////////////
3 I; q, L: o5 m6 ^' `  i  \    break;0 H% q7 O' |( g3 {( t
   }
) s  L: e+ ?% s/ ]9 l  } * k, L/ q9 t' j+ K2 S8 D
}
0 X) W/ e4 D& V5 t. l5 e+ K8 Bm_wndMenu.SetVisible(FALSE);& @6 ?- S4 [9 w& l$ A
7 e7 C: n1 n1 p' b$ D
--------------------------------------------------------------------------------------------------------
, O; U1 k6 @, M9 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ G! O6 b+ F* {" f5 I5 _& D
{
4 B5 q% {) E7 p* {" r* Z) R5 o' L" PBaseMouseCursor();% u0 i( r$ ?) o9 R" l* D1 f$ Y
}, T2 u) b7 V# D- {; ^- x% M) c
在其下添加:# a1 x- K$ N) ^. J5 J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 b; Y$ n4 k: ?7 n7 |7 d1 M* c8 ^{
4 I1 J) \# X5 L# Nm_wndMenu.DeleteAllMenu();& s" w" |' W" |* _
m_wndMenu.CreateMenu(this);3 I/ p" w; Z0 B+ i* R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% N! Y" s  |* }
5 |  q0 v/ K1 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& s$ l0 q+ R7 v$ t3 J- Y8 a{" d9 O2 A3 r0 K8 K' l
  //P以上级别才可以删除所有道具
( q1 E" z! A# I& p0 c) N5 h: s  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ `/ ^" d* K& ~1 o- M9 R}
' W4 \* W+ r5 c/ p$ q$ d+ Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ D' \! J! |) p& b1 ]# ?$ c' Y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 ]$ L, K4 F9 J9 I
m_wndMenu.SetFocus();) p: S: y. r- M
}( @- P2 x* z+ `5 P" f+ V4 G
------------------------------------------------------------------------------------------------------------) [% H* `3 ^0 ~+ i
*************************
5 ]+ }) [! W8 s9 _- P" pWndField.h文件
) N1 `  u) @6 ]*************************, ?& Q% r) l- }) D$ ^/ ]' K
搜索:BOOL m_bReport;
$ N7 a% n) o" X$ l9 ~其后添加:# Q" B* r$ \, Y9 s! m
CWndMenu m_wndMenu;
. @6 j" P/ A! @6 ~( {8 j7 |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 X" J' g  A1 Z0 Y
其后添加:
+ U  z* v5 A( d' J) p' {* T: gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
  z7 a: n. J+ I7 f4 v$ F. F0 }) r% |" d1 }$ |
( R- k6 [. e3 Z! w! S# M/ F1 G

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 03:59 , Processed in 0.062531 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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