飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 z& j* `+ g3 R) w7 X) n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ M9 o' `: M) |9 A: I/ j9 R
, t0 {7 C+ k$ m) k( f% N* L; k& Qstruct sItem
# q9 ~7 `% Z5 D8 ]6 N# R{
) `5 I! C3 i: xDWORD dwId;
7 j6 x. o7 O( ]DWORD dwKind2;; J/ M) M) r3 L" i  U2 ]. z  X
DWORD dwItemId;1 e+ C- s* S& _6 Z- A- A
BYTE nIndex;
- c: Q# J! f+ c- }# ~sItem(){( }; D; Z  x1 A5 D- G/ }4 ^- M
  dwId = dwKind2 = dwItemId = nIndex = 0;: s. t- K  r$ ~1 }- }: t% U
}/ p7 r' ?# ]+ N; k# X% O& i
bool operator < (const sItem p2)6 v7 k& Z" h. s7 a; \; Z/ ?0 ]2 Y
{7 t; w# D/ Z5 d/ R4 R4 A# o
  if (dwKind2 == p2.dwKind2)
: \5 e5 f0 a% i* C0 h8 i  {
1 x7 _: L3 w( o+ C   return dwItemId < p2.dwItemId;$ u* o0 ]  p  b, u2 @2 M4 O
  }else{
3 ]3 ~0 q8 E; R4 G* @6 }   return dwKind2 < p2.dwKind2;
1 r, N5 }4 _: }8 U1 P  B. Z  }2 x- ^7 d6 L  \! r
}
( g2 a/ m  P( m! p: l( S8 S; {};' w- a" h1 u! y! Y. O" k
class CInventorySort( {0 O! e) h5 s/ V6 O
{
! D( c& k; T# M- d( Tpublic:5 Y& j2 g0 {6 b$ U+ j
CInventorySort()
. ]( @" f" q* r: S* o% P" B: A{0 w/ c8 c, A% W2 p% E, |' u  j* w, i
  m_dwPos = 0;' \; n" k& f+ X- s: x
}) H/ q% |0 k! A: B- Z: r. v: _
~CInventorySort(){}2 T: E( M( ^- o- I  }; S- s9 m% t
private:9 d" N. l0 n6 z) y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- H- U6 S" Z- b. V/ f) xDWORD m_dwPos;9 i2 [( l) W) x+ C5 v9 n! {
public:
8 V, ^( r0 ], {void Add(BYTE nIndex)$ q. x1 V( Y( c4 v+ P: J
{
( x* y& g( k. @/ e. l+ i* z5 e  if (m_dwPos >= MAX_INVENTORY)
4 ^: a: V; @  Q& M: W  {8 |0 k5 B' y% |8 c; G6 d
   return;
' c' J/ f- H8 H- Q- o3 J0 g. O  }
, `5 K8 w- f7 `* V6 u  m_Item[m_dwPos].nIndex = nIndex;
' m7 w4 c5 y- X/ B# }' e  m_Item[m_dwPos].dwId = m_dwPos;
, U9 D+ _' i7 P6 |* \( J  m_dwPos++;
1 v' B' @& o# ?. P) D}% g5 N, O0 H9 @" ]. s$ I" l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 c5 V. Q4 U  Q, Q7 N( U
{) C8 J. e8 ]4 H* L1 {1 |
  for (int i=0;i<MAX_INVENTORY;i++)
/ O8 ~/ V, t9 E, }  {; N/ Y9 D9 ]% F# F" o* X
   if (m_Item.dwId == dwId)
& R  c# ]- ]: Y, |; N8 }   {1 }# p1 }0 M/ t6 ]0 H" V! W/ w, U( |
    return m_Item.nIndex;
; F8 J: n/ S3 k   }3 Z9 B% d% N: \, o
  }
# Y* }7 m1 S: `% c; s  return 255;
# N$ }9 `" }! t( U) N: N+ ]  K}
- f7 s. T  J9 U9 g' \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 f$ h' n( w0 L+ n  v3 s. X
{& w- y& ?4 o, \: O8 r5 y- c" k
  BYTE nTmp = 0;7 ?# e$ C3 I& x9 o3 P, x5 }
  bool bDest = false,bSrc = false;" m  N$ C6 ~3 z1 V2 c
  for (int i=0;i<MAX_INVENTORY;i++)" c7 a  n; W% W  G! _9 G
  {
' P2 {# `3 n" z+ u; }5 I   if (dwSrcId == m_Item.dwId)+ t  y/ Q1 j5 d. d7 k& b7 A2 ?
   {
" S( x. a; A% Y# K' S    //id相等 则 改变对应的dest和src1 t. Q* M$ S, l2 c. t, ?
    nTmp = m_Item.nIndex;
( T. A% ?& z7 C% A, n    m_Item.nIndex = dest;  L  g, J; P+ v8 e
   }
& a, a' n% ?5 l. ~  }$ F$ y* x3 G5 r; O7 u: U  _6 R% Z% |
  //临时数据保存完毕,交换开始! F* c8 q" @( f' F$ r
  for (int i=0;i<MAX_INVENTORY;i++)! f- f* b& i: l  ^' C6 w2 R
  {& V" v8 w# C. E  ^: n: i+ Q% y( g
   if (dest == m_Item.nIndex)1 I  d; m  N/ R
   {7 u" ?+ \$ U5 }$ d1 A8 u
    //id相等 则 改变对应的dest和src
. d/ l# b' x$ B# c, I0 i    m_Item.nIndex = nTmp;
& a8 v4 ]( t4 F& W$ p* P7 b   }
. p: D+ q. a7 u1 P  }& t4 w( h2 y1 V6 N' m6 A! U
}
( V/ B& q, \. z% w};+ i6 J, F9 j0 ~, ]/ W6 m( M
-------------------------------------------------------------------------
: w# ?" O9 ?! `# K. C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ l8 [# x5 l1 x2 z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; Y% j: L6 D* _* d# O8 s8 y; B% M紧靠其上添加:- B; V% ~, e8 ?# a, h
if( pWndBase == &m_wndMenu )
1 u! i4 S# ~6 E9 |{8 E0 n; ?1 X, A& V! \
  switch( nID )) f* K0 F; K* o+ ~2 J5 K
  {
/ R7 E6 C/ C1 _! k& w. c  case 2:+ H7 ]1 e- M. j3 j" _5 p
   {) K$ c$ t" D& ^, {8 l# I+ ]3 W1 Q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 G* [0 P% K# F/ l1 b    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 z4 K4 h( B8 r" U* r
    {
2 O. }& y9 i. ?+ T7 {     break;  X' w$ C9 D3 f0 x2 M2 ^
    }
7 R* N$ I& b* o. i: f7 X    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, X9 K' K) F1 h/ b5 Y% c$ b    {
4 q- i3 b; w7 g) a     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 s" ]8 _" W1 U4 o4 H
     if( !pItemElem )
: H% ]9 g9 ~, C$ I9 w2 x      continue;
3 w  U$ z" K" i! |, V     if(pItemElem->GetExtra() > 0)$ `, K  `# W. B2 J
      continue;
) l3 j5 z3 ~) d3 r     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 R% u* x- i7 Z+ @& A; R2 A+ s/ ^5 ^      continue;
5 e) p5 Q7 y7 c: l# g4 o3 s     if( g_pPlayer->IsUsing( pItemElem ) )
* z! M' O% c# R; ~: x      continue;
/ n5 ?' J+ H& F7 c  F+ o% `7 j/ X4 t     if( pItemElem->IsUndestructable() == TRUE ): O; C; m0 l3 x* z, t7 w% O
     {
7 }, e; \8 K: u3 V      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 K/ ?3 F7 N1 j! c7 m( ~0 R      continue;: ]$ }+ }7 Z  A, H7 s3 T
     }3 f1 S7 E( d6 b& [( G
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; A6 F3 F, D* {5 V) k; D    }. P, m% n4 m* j
    break;( i% |: s/ d! c
   }
4 ~$ E0 k  L  \: X2 z; Q  case 1:5 V5 l, C7 e/ u4 N. v" M8 J
   {7 W% N9 ?# P% F. W
    //整理背包7 G) S$ v1 Q+ r) }' g! U
    //////////////////////////////////////////////////////////////////////////) g% H" Q" h( ^: S" w8 M
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' x. ?. \# W2 M! X  F    //////////////////////////////////////////////////////////////////////////
7 ~+ }  N& i8 C) \    //////////////////////////////////////////////////////////////////////////
+ x# L0 S+ x* M. m# z: F2 M    CInventorySort* pInvSort = new CInventorySort;
& v& K0 J! |$ R9 Q2 {- U$ ?    vector <sItem> vItem;7 A& ]. O# H1 I% K7 W9 s  E
    vItem.resize(MAX_INVENTORY);//初始化大小
8 K/ X- c( N  n' u" ]     /////////////////////////////////////////////////////////////////////////// ?: y, i$ S0 B& \  s
     //填充数据
2 i8 y7 d" G; N0 C- g: N2 m. Y     for (int i=0;i<MAX_INVENTORY;i++)3 P" ]+ g4 r) Q3 t/ I  K
     {
  J+ [/ Q. m3 i8 Q. x      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ]& y! @  Y7 S* _  ]      if (!pItemElem)
5 D; m2 z3 A! S+ t      {
3 A# Z# V/ R& |; G  L       vItem.dwKind2 = 0xffffffff;
( b3 a" I7 K0 `: M1 q" }3 K4 o       vItem.dwItemId = 0xffffffff;
2 F" X8 w5 U  [4 P       vItem.nIndex = i;
1 P9 S. N8 E/ p      }else {
* K$ R4 p. k6 |* Z+ d0 q% m- @4 C       ItemProp* pProp = pItemElem->GetProp();
4 [% d. E3 N9 E4 B9 O       vItem.dwKind2 = pProp->dwItemKind2;+ A4 l+ _9 b2 L+ _' a+ U7 R
       vItem.dwItemId = pItemElem->m_dwItemId;
0 V* y4 W0 A- a' e/ n. O       vItem.nIndex = i;
9 t+ I- b/ f- f5 S" H$ [' \      }. t/ b2 o# u, R
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 Y- ?" n1 l2 m/ c3 k     }& N# O: T  E) K) U8 x- u" r* P
     //////////////////////////////////////////////////////////////////////////
! O1 z9 _8 E8 i; A* U! Q     sort(vItem.begin(),vItem.end());//排序# F) T, M9 L  O
     //////////////////////////////////////////////////////////////////////////& w; a+ C1 n  J; j8 D# R
     //交换, u8 v5 z% k+ ?  T2 z
     for (size_t i=0;i<vItem.size();i++)
" N5 r0 H* l& [# Z  Z     {
8 m' u  A2 O' Q7 H      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; Z1 B( L% A! c  I
      pInvSort->Add(vItem.nIndex);
8 h& [/ m5 T: M3 U     }% I6 h' c, L" F  n5 N; w4 U$ e
     BYTE nDestPos = 0;
- ?" a6 y( J( [8 `% T# G     for (int i=0;i<MAX_INVENTORY;i++)& M& Y& W# E  X3 \1 I( P
     {
) U1 x2 g: `4 |2 o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ p+ R/ F3 `9 G. w0 a: w      if (pItemElem)* \5 x' T/ |! g, n
      {
! L! \+ V  I* _' n1 q1 _" k       if (IsUsingItem(pItemElem))7 D3 I% W& c6 F7 F1 ^
       {
: k) ]& ?+ U- C2 w        //这个位置无法放
, ^( s  g- c, T( o        nDestPos++;" o$ J- M' q$ ]9 O# R$ n
       }3 U# X# i, C0 Z0 U8 V6 d3 t
      }
4 H8 O: u) s3 `  c  t* S* r0 E      BYTE nSrc = pInvSort->GetItemSrc(i);
# |/ z* i# b( [- \3 @/ H  y& B      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 b# c4 i% v7 ?9 k' c4 q, i* T6 p6 ]      if (pItemElem)
$ {; Q- [0 Q4 N5 t9 ], `      {
9 F/ h' a+ K* ]  n       if (IsUsingItem(pItemElem))0 i$ H( X' i+ T# s2 x1 y& f
       {
  b) `1 s" `$ e        //这个道具无法移动,跳过
) b/ q' v" ]+ |( s        continue;% [3 }* h) b. u8 p* t
       }
' m" A2 ?& S8 ~      }else{8 b2 ?8 u0 r7 Y( \
       //空位置 不用动
" ?) A: B5 t& }( L- v: ?& ^       continue;
% N8 R1 A( t+ e0 g+ o" q      }
0 q$ l1 M' E: R7 D# G      //////////////////////////////////////////////////////////////////////////( H( B$ [$ k1 [9 y
      //开始移动0 p( J& L2 {1 Y' d
      if (nSrc == nDestPos)/ J* |3 S" [  J7 Q1 [  C! B( W
      {
3 k+ k% \" a# C0 u) \5 |0 q       //原地不动5 {& r) i& g7 J" [  ?0 r- y
       nDestPos++;, e6 i3 `2 N6 p9 x/ Q6 J6 v" d/ r
       continue;
1 j* G& W( F1 g4 B/ t2 _      }
# b; m' y5 w7 q2 P6 T      pInvSort->MoveItem(i,nDestPos);
5 }* J8 I3 ?5 y& a3 G+ F3 }      g_DPlay.SendMoveItem(0,nSrc,nDestPos);# I  D0 ^2 R) L: [
      Sleep(5);
, d- `  n& Z, L      //Error("移动 - %d->%d",nSrc,nDestPos);
7 z3 r, f. s& l! G5 O, V' L8 _      nDestPos++;. S, w( J( w$ r$ C" t
     }- k& U) ?( r$ ?0 g; Z% A6 Z
     //取第一个元素的信息
5 b7 j! [- J8 j( k     /*1 J8 ?- |& A; P0 e5 }. L7 s2 i
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). K, A' y8 S. g
     {
; e9 F2 Z% S  M: U9 t      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ N; M+ S) }" p* N  k
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ i5 @# H" H6 M7 d     }- b% R% ^! s: ]* u% W7 ~5 z- C
     */
- z5 u5 X  V$ P) J: g5 ]    //////////////////////////////////////////////////////////////////////////! \2 o7 a7 @1 F
    break;" N. o% d% O, s% n( w
   }
- u2 B2 ], y0 }4 x; S  }
9 T1 G% P$ B4 C9 |}
$ X0 e8 _% t8 r- r; d7 km_wndMenu.SetVisible(FALSE);( u$ x' u/ e# m* x7 D
" J1 C3 T7 P( W( p4 a
--------------------------------------------------------------------------------------------------------
; e5 m( h5 m* o" S+ M/ O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 ]1 w" z. M9 {; r; D
{/ x. |1 U% O% L8 f9 m* T0 a+ x
BaseMouseCursor();8 r, F2 e. z) C% \! @- h
}! I& H  o1 @9 y- Q7 T& h* k
在其下添加:
: z& L: z$ ]' ?7 M0 ]; _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' v/ U. Z2 B8 z{- I* D  y- o+ F: t/ v' ]2 E% `
m_wndMenu.DeleteAllMenu();9 N: q5 v3 R- e( S4 q- k6 {& F
m_wndMenu.CreateMenu(this);
/ Y, T4 x& E6 i8 [6 R) a2 p# ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. ?5 {* A5 r2 @

- O  Y, f7 z: @3 q- lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, k* m0 n4 A5 ^( {, R+ U3 J6 J! y8 x9 R{$ ]: _2 b; H6 l' u/ `! U; ~
  //P以上级别才可以删除所有道具" {% c- q# }. l& B' a- X
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& q( N5 q) v! \2 e4 f7 S' c3 Q}
0 z: C) h8 o' `8 s1 G3 Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ i( Z  S' d6 g  E/ h" k- Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; ^  i9 z% U% X3 x  X2 z
m_wndMenu.SetFocus();
: H- N5 s3 |% }4 N+ K2 Y6 z* G}
4 ]- h6 p$ D# B5 U9 K/ Q  o/ q. [  X------------------------------------------------------------------------------------------------------------1 D/ H5 i$ K/ Q$ t/ _! \5 h
*************************
" k. _$ y5 }1 _  ?3 O% D7 bWndField.h文件
1 N7 S( o3 P( a6 ?*************************
- O1 f' D7 F! g5 D, U搜索:BOOL m_bReport;
: `' X  j* K* t! X% a; {9 i. N其后添加:
  n, u, f  i. @CWndMenu m_wndMenu;( q, ^& u" c$ @' J$ I9 m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 U/ n) d8 j0 n/ x. S. C! t2 G& C2 T其后添加:. c4 |. H! b2 G% v! w
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 W* P/ Z8 L* z: n& n6 @. m# o

5 }. X; i5 K* K# Z$ v! t2 P  X, n8 Y7 g

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 13:53 , Processed in 0.063964 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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