飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; p! G: [; A/ C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 T9 u1 `5 G2 {. Q5 w: _' A% s

- j9 c& f$ v7 E. Qstruct sItem" R7 X& Z/ Y' h  o; V8 z; o$ ?
{
& s5 o# Y3 B8 J* c6 G* xDWORD dwId;/ f  ^3 v7 y: W# D1 q* X7 C2 W
DWORD dwKind2;$ f5 X5 p+ k# ~, I3 L
DWORD dwItemId;0 c/ _/ M1 D# o9 C* u6 {$ C
BYTE nIndex;: Z# @( l; q1 m7 U6 i* i
sItem(){
+ f8 m1 L# X% H" x* U7 }% b4 k  dwId = dwKind2 = dwItemId = nIndex = 0;( O8 q( p3 U7 X3 d' s' \' X" E5 ?: E
}
* T8 o/ O( M4 pbool operator < (const sItem p2)7 ]- T4 `$ u9 C( x" c
{; H/ h+ ]5 r) l
  if (dwKind2 == p2.dwKind2)
$ G0 r  I) Y, c1 a9 k* X) t  {
: o% N7 r/ Y$ p% u2 j, x0 h& W   return dwItemId < p2.dwItemId;5 ]$ j0 j& K: s0 z4 w4 d" _
  }else{
! M: j- C" @# q+ d   return dwKind2 < p2.dwKind2;4 N2 @* u* r1 m: Q- }
  }
7 H7 E0 F" ^5 F}; o2 c9 l  G1 x( W: F
};
8 z7 j# |% R7 K9 [3 D; \class CInventorySort! h9 \" J' a( b% L; z
{
) M2 o) s" s/ m; c0 b- b" ?. }public:
+ ?* H( d* w- C; h6 xCInventorySort()- {: q2 m  R3 C$ C+ h: D
{; A5 l" H! E& [% F  _& d
  m_dwPos = 0;4 O/ L3 t+ N" O5 T
}( Q* z" ]# [( M$ s! z
~CInventorySort(){}
% W- o0 m* A6 M5 lprivate:& S7 ]+ }; Z9 u! Y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) H( @% U6 k% n; @
DWORD m_dwPos;: n! v6 s. G$ a" n2 V
public:  a9 h2 q( N2 y& o* c  u& _
void Add(BYTE nIndex)
( M! L0 f+ O; X  r7 Z- l7 Z0 K{
2 T) i8 l6 u1 m  P4 H  if (m_dwPos >= MAX_INVENTORY)
; ~  x$ q, K- j2 T; g  {
% F% \) Z, `7 p# U7 I: P   return;+ u& ~- d3 W, Z/ @6 u
  }
3 x$ w4 W" u! Y+ J1 A' [' F  m_Item[m_dwPos].nIndex = nIndex;! `! S' Q: G- F6 S9 P
  m_Item[m_dwPos].dwId = m_dwPos;
$ O% S, O/ v; w3 F; y! r8 O  m_dwPos++;& R* D5 A% L' h
}
3 _% S) o  ]0 ^9 p9 F8 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% L, e& m5 Y0 p  q% U) ~/ g& o{
* _5 `" Y" ?$ |7 F3 P  for (int i=0;i<MAX_INVENTORY;i++). E1 Y4 u' \. T  T. A, g$ n
  {7 N" M0 [1 X3 G4 Z3 m( k1 ?9 a
   if (m_Item.dwId == dwId)
* K0 N( W0 N4 v" ~2 f+ ~% P   {; D! ^$ D! i& w! P% ~8 q
    return m_Item.nIndex;
. ~8 y8 f$ A: B- ?8 D7 D   }2 c8 O/ t9 ~1 \4 b3 D+ U7 s& t! W/ }, f! a% ]
  }# p- m4 h9 D2 n( C$ s
  return 255;( f* B6 k, r, o0 j1 o3 r3 B
}& j' z! A2 \/ `* F4 D1 N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& v5 z; z" o2 A7 `9 E/ o, |{
3 I- k, X: G  t4 a  BYTE nTmp = 0;
! E  D5 p. l8 v  bool bDest = false,bSrc = false;
- D7 S6 }3 f% ^5 V8 B3 N0 w  for (int i=0;i<MAX_INVENTORY;i++)
4 O5 b4 l; A6 j# x  {' T8 m0 u3 m- b- Q# Q
   if (dwSrcId == m_Item.dwId)
: s9 T2 [! ~# E; v& ^   {" e# ]0 F' Y  f- O
    //id相等 则 改变对应的dest和src
$ }- I: s4 N9 I% e. n; h    nTmp = m_Item.nIndex;
+ Q  s$ z9 l' L9 |8 @2 B1 i, a0 l+ Z    m_Item.nIndex = dest;
! t8 B; q+ Q5 S, k   }3 h+ d7 |; ~% G5 v  E3 ]3 l6 I
  }
3 w% z$ b3 U1 G; ^9 T! P  //临时数据保存完毕,交换开始
" C+ I8 x% g: j1 Y3 {) I) |  for (int i=0;i<MAX_INVENTORY;i++); w+ w; }, c6 J8 s
  {
% T) ^# R* E) ~" H% j   if (dest == m_Item.nIndex)6 R: ]& B3 G% |$ g/ y( o/ p3 K' O- p
   {
0 {5 i: ^0 |1 @$ g& a    //id相等 则 改变对应的dest和src3 z# Z" q; d. W7 q, h1 J; b. y& G
    m_Item.nIndex = nTmp;
& ]; ?) T' C! c( ]3 S: K- [% T   }: }- }$ q  {. e
  }
/ k1 J0 s. G/ ^. H  U}: W* ?) ]; C. S3 |  t  H0 N7 P
};$ f. U4 b& Z) \# X2 G4 }
-------------------------------------------------------------------------5 }2 H$ R/ ?$ z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ^; Z4 m5 u7 Z7 n  e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" _6 P6 t* D$ F
紧靠其上添加:
; _; z+ R4 H( ]! X% G7 g' I6 Z( K/ Xif( pWndBase == &m_wndMenu ); R2 \" ^) L, e; c  `) r
{! G" p) Q  T) k' L
  switch( nID ): B1 v' Y$ e! s  d% m. q
  {
1 W$ B: e  a3 x4 y  case 2:
1 g$ k; x" D. y  q* k0 U0 g   {& R( F( _. G* G" r
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 z% m: K1 I# _2 O    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ v; c0 w; m, e5 P# g/ {) R
    {8 R, c$ R. S: t+ u+ i
     break;8 f  H. m  d' t' J7 q
    }4 x% L- {2 c5 K0 ?8 ^6 r
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 d0 s  \4 N9 Z5 A/ K; z, @3 m1 r1 ^    {
. ^& E  n& ?, `9 C     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, d8 E! J0 y8 Y+ L2 \9 D     if( !pItemElem )& Y3 J  T0 @, O* Q- R" i6 B9 o8 x  W
      continue;6 O4 C% P3 \. P5 {4 E! y" k& }' s
     if(pItemElem->GetExtra() > 0)
0 Q- `% R/ R% B0 z& F% U& m      continue;
4 V8 I3 q9 v' O% G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' [, i9 G& j/ [) ^) \7 h# u$ d- w$ u      continue;
$ f2 o! H. R5 y& a     if( g_pPlayer->IsUsing( pItemElem ) )1 @  c/ y' x0 g! ?# C; ?! s
      continue;
4 q1 [( |: t2 Z0 g- u     if( pItemElem->IsUndestructable() == TRUE )7 |; o! m$ }2 S9 x! }
     {
8 V& J! p- F- c6 K( V7 s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 ]% k2 y6 R  ]9 r1 w* m
      continue;  l0 z5 v( \. E$ [$ l9 ~8 i, Q% j
     }
' N! [% f9 w5 F" Z- [3 G& r: q     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, _: E/ D+ o7 _
    }. s, D$ _5 a+ e# k# ]# F6 }4 G
    break;
4 |! C$ s5 d0 a: [3 C$ N   }
' j' t0 Y9 D, b' n9 o& S- |  case 1:
6 T8 J6 J2 c5 D0 I* |: T   {* ~( z+ d" o% K) T
    //整理背包
$ T  B  E: w2 U1 p8 d/ ~    //////////////////////////////////////////////////////////////////////////) }% [  ]' @' j$ o
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 a' P2 r) }7 a    //////////////////////////////////////////////////////////////////////////
6 k9 z' |7 w. s) C* A2 L    //////////////////////////////////////////////////////////////////////////9 c  p- ]1 H9 L" `+ L' ]
    CInventorySort* pInvSort = new CInventorySort;
: u1 D" ?& [" {    vector <sItem> vItem;7 W! V8 S+ M# U2 |
    vItem.resize(MAX_INVENTORY);//初始化大小
% z, o7 c. V: y: b8 s, M     //////////////////////////////////////////////////////////////////////////
- H: n6 ^4 o- P5 l) |     //填充数据
- ^5 E4 E. v1 p, I! a  D) }2 l/ K     for (int i=0;i<MAX_INVENTORY;i++)5 E/ K2 {# G3 I
     {: N$ o" {; N. L- J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 C- \9 ~( P5 {$ {      if (!pItemElem)4 L  I; F% K: X, w! m
      {
  \. s: \0 K7 M       vItem.dwKind2 = 0xffffffff;
# N, G. A$ d. n6 `1 M6 A7 K" {3 q9 G$ q       vItem.dwItemId = 0xffffffff;
% [, O6 Z1 {4 c, [' X( `       vItem.nIndex = i;2 @: C+ _# @; R& s
      }else {' F6 l0 Z3 ~8 O; F3 B
       ItemProp* pProp = pItemElem->GetProp();4 D2 |2 I& m: o1 ?" a/ Y
       vItem.dwKind2 = pProp->dwItemKind2;
( q  q# Y- e% n0 ?' f& L       vItem.dwItemId = pItemElem->m_dwItemId;1 G8 F% T2 T1 ~4 Q9 F
       vItem.nIndex = i;& H" c1 F; F0 g  c) _5 i
      }
3 y: o3 Z9 k5 }1 p# [; f3 B  ~5 \      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 V0 a# `8 O" d     }5 X# N# ^1 ?1 S
     //////////////////////////////////////////////////////////////////////////
4 y8 I& q8 j/ ~5 Q  [8 `) e& L" M     sort(vItem.begin(),vItem.end());//排序
$ _+ o0 s) g6 e. i5 @% H8 b     //////////////////////////////////////////////////////////////////////////% B9 w( ~; O! o- o8 [! B
     //交换2 T: v; E. f) y/ f
     for (size_t i=0;i<vItem.size();i++)
# D1 H! }" @5 t1 S6 {! V/ k     {' y! ]" l1 G  p, r+ G
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ X+ x$ K9 n/ ^# p3 x8 c
      pInvSort->Add(vItem.nIndex);0 |/ e1 c5 W% M4 T$ z
     }
/ ]$ R3 q% n3 G3 V& t+ _     BYTE nDestPos = 0;
& c* s  O+ m0 g, N2 V0 r     for (int i=0;i<MAX_INVENTORY;i++)
, V; G# s6 Q+ T) e* y     {0 I$ w2 H; Y% F3 U; V6 o- V
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, O& e% A/ _  S% A" W2 F( h
      if (pItemElem)8 f: ~& l7 i, F- I9 F4 Y" u
      {2 B2 |" r3 }6 j( ?# B. V! Y
       if (IsUsingItem(pItemElem))$ B1 e! Y9 d; H1 W+ S& m# }
       {
- ]8 m7 d9 h% B" Q- N8 c. E. C        //这个位置无法放
4 b% M4 b1 j5 X6 D        nDestPos++;
' ]( ^6 ]. u5 t9 x: Y- L, c2 L       }
9 n8 z1 h7 a5 o: F: ]: ?7 p      }* x% n) {! O, T+ u2 z2 M/ S
      BYTE nSrc = pInvSort->GetItemSrc(i);% I- k' n1 n/ W* x2 ?, I3 A3 q6 X
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 P  I9 R, p% k5 [6 W  w! T5 v( ^
      if (pItemElem)
% G, w2 M) p( ?4 l5 J2 d6 Z% P      {- m9 D0 L5 G# R+ T$ w- r
       if (IsUsingItem(pItemElem))# Q' E0 W) K6 e- Y  Z
       {. Z+ H+ B4 r, G0 v  v
        //这个道具无法移动,跳过
/ v' M9 W$ w" z5 k; ~2 g# Z        continue;4 {+ a# c* ~( m. v1 o" C
       }7 k7 ]3 r7 Y5 P5 ^0 e. o
      }else{
! _& H8 x  x- y2 w& k  H, f       //空位置 不用动
9 Z9 C+ A* P' I$ p       continue;3 L. n9 R* T) ?- P5 Q0 T8 E
      }
  E! m/ v7 ~, U. U7 B9 y7 S      /////////////////////////////////////////////////////////////////////////// i& r  ?& V1 v$ _) O$ s! u
      //开始移动! R# F+ E) |/ `/ W& N/ T
      if (nSrc == nDestPos)
7 M/ }/ c4 Y$ [1 O) j% m      {9 ~3 X+ n4 X: O' z1 H& G
       //原地不动
) x9 N# c+ g" M' \* r% @       nDestPos++;
3 @0 e. {/ j& L4 R) }: b       continue;" k2 z1 r) x* a7 U6 y& \
      }
" ^, p; s) m2 b) _/ Y5 E! d      pInvSort->MoveItem(i,nDestPos);
- C7 x! x) L7 {2 B0 `3 b! G      g_DPlay.SendMoveItem(0,nSrc,nDestPos);( h! X) e  `) ]& L$ y
      Sleep(5);
/ e% t4 Y' y9 v" n1 W9 G# K5 r      //Error("移动 - %d->%d",nSrc,nDestPos);4 B0 R4 n" F1 o4 R' y- t
      nDestPos++;* R  B" T" }. N0 G: G* v! i
     }$ ^, o" U( u6 @1 Y
     //取第一个元素的信息, Z2 Q1 a, S3 ]; x4 d
     /*
- }3 I' W+ A1 }4 |$ x8 M     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) p- l7 Q) `4 W5 ^8 @% @# `( M     {
) W* p7 h4 ^% q4 a" R# E5 l4 F2 V      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 x$ |1 p: _5 K% p6 A
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% g1 a9 j" X6 Y     }0 W2 H2 J/ `7 g6 b5 v
     */
, S* |6 k  E3 U5 {    //////////////////////////////////////////////////////////////////////////
, _+ s  \1 p4 g3 V) Y    break;, j" [& i/ p4 c* \
   }
# a& J& G7 k  t- [$ L6 I: F, e  } " _: \! f; R& I# e
}; F  k# Q+ w4 ?. e- N* V8 s
m_wndMenu.SetVisible(FALSE);
' ~( ^3 Z) T( r$ n
8 @- I. S# L( U  p* C. v--------------------------------------------------------------------------------------------------------4 F; G1 c3 N% F* f. O7 h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& `6 h5 l' m3 W  S{8 X8 {+ C' ?9 O5 C/ j
BaseMouseCursor();
- J7 k7 E6 x3 t+ ^3 a! |}  @- a" H/ ^( ?2 P+ [/ j$ Z
在其下添加:
. A, ?, O4 f- s3 }# p# D! svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& ]* T  o2 E! X+ E{3 M3 R, d/ {# l2 M4 v' n6 \3 N: T5 C
m_wndMenu.DeleteAllMenu();
; g9 V1 {+ m8 }* |# o& i; vm_wndMenu.CreateMenu(this);
$ u* }$ ^! a, y( `- H4 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");  P7 Z! p9 u8 r: Y

" y' O/ F& N5 s. v' k) [( }/ [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 Z2 ]0 O8 A) }, f
{
; W- t$ D$ m4 R. m3 M5 h. `/ D/ E& W  //P以上级别才可以删除所有道具# e9 j  ?# F; l7 i: n
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# R, P/ r0 L- {
}( j2 j6 A+ R0 I% U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 W  @  z0 h) @" b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* x& z7 r$ B3 U$ x
m_wndMenu.SetFocus();/ g! k  j* q2 i
}
" x0 b8 f9 m3 N8 V7 Q# ~" {7 M! r4 p; ^------------------------------------------------------------------------------------------------------------% `3 G  b9 g3 U4 {% |1 a: i: q
************************** `- L" H5 H' `6 K0 Y! l1 S
WndField.h文件- I2 [- y( w) p% D- I$ v. A8 ~! p
*************************- C" g9 J( J3 A3 C4 l( u3 I
搜索:BOOL m_bReport;
( T  i5 o! U) i其后添加:/ X$ u' t) k! p
CWndMenu m_wndMenu;
! s4 D. r" e4 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# n5 ^* W- `- P$ b* X. Y
其后添加:! U4 }! u( T- a: P9 h  o4 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);! x+ ?9 l5 C' P/ I& M* A) o# [
6 [2 N$ }7 S# ?3 n) X
% }: X: _. L9 F+ w: z$ ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 00:20 , Processed in 0.070136 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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