飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件& }2 Z" n6 @, {, Q: c% I4 l6 R+ Z2 ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ z: }# n# x/ l1 c$ W
- k% R. y  L' x
struct sItem- P' I4 R# g! p
{
* M' F5 M7 @& l  S8 r7 K8 h) g) ZDWORD dwId;# ^. m. `6 L# _
DWORD dwKind2;
  K/ c6 A! a" N, r, ^8 x0 ~1 ZDWORD dwItemId;
1 G9 J1 s- R! {4 h5 b5 xBYTE nIndex;
9 _3 G' P1 E# C$ JsItem(){) K# ~) |" S- T8 _4 W1 B8 u) c
  dwId = dwKind2 = dwItemId = nIndex = 0;
' l1 M6 N9 i( J}
6 {' l$ e) O% Xbool operator < (const sItem p2), @9 U1 Y7 k. D& `( U
{
; W& g0 ?6 C. K' p7 a/ ]$ e  if (dwKind2 == p2.dwKind2)1 N7 G8 B" D" S4 _) h
  {
8 F4 a: x" R, p. k, a& h1 S; }1 |   return dwItemId < p2.dwItemId;! Q; ?6 N2 D8 L, m# b( {% Q
  }else{
% X& s0 D6 a9 x0 M& A; x! R# p0 N' T9 E   return dwKind2 < p2.dwKind2;
2 r; P$ Z5 F7 R4 m) F  }
; V% U' n/ ?; @/ c}
8 O- m' f8 l  M};) h  F& G' Q/ h6 |4 x' B! Z
class CInventorySort! P- M- o9 d8 K9 ^9 j
{- L$ J( V( j, @& m% k2 |
public:
$ x* H; o# Y. V: hCInventorySort()
* k7 O8 E1 Z8 t3 [+ B{
7 C/ g/ D/ Q7 _8 R! K" n$ k* i0 C  m_dwPos = 0;% n5 ?2 n4 g: L; Y# r# U
}; n' V3 n; H3 H4 Y; O8 w* B$ j* K9 N
~CInventorySort(){}
& U7 C, t9 j8 @0 R5 jprivate:# i8 {, N- ~$ K; e0 M3 [# u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; A) Q  J; d3 }, }( E, I' Y, o
DWORD m_dwPos;
; ~# q/ p7 _- C% w* O8 {, X: D7 Qpublic:
: ]- U0 L- ~0 e3 Q/ {  Ovoid Add(BYTE nIndex)& n) B" N+ o. m
{6 s; d! Y. ?' }/ N, R8 v& c9 f1 V- f6 }' {
  if (m_dwPos >= MAX_INVENTORY)
# D8 {/ _& j( G0 S" ~( O8 {. }  {$ x+ q; V/ G- j- A6 ?5 Z
   return;/ M/ W( ]6 H- a  A7 p
  }
; J5 e2 z) k$ X3 `6 I  m_Item[m_dwPos].nIndex = nIndex;
* Q6 a6 S& V6 T4 K1 k  m_Item[m_dwPos].dwId = m_dwPos;
9 A2 t" K% o/ h& z( R' j6 F0 J  m_dwPos++;
# W: T' V: ^" m5 s: Y}
" C) t$ U" ~; n3 ]3 L6 a" a& cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 B6 I$ I7 y% o  N7 _: ~; O{
! i" Y/ z7 f9 u5 j) ^  for (int i=0;i<MAX_INVENTORY;i++)
! E9 J, y* ?) X6 x8 B8 Z+ ^- \$ z  {
/ H( i0 k" M4 L, U& \! [0 r   if (m_Item.dwId == dwId)' u* j- F; C4 y3 v$ w- q/ q
   {
3 T/ Y$ ]! R" `8 c7 L- M5 r# A" v    return m_Item.nIndex;
& k+ X; H, u! R/ s   }! p  M! @' j: [5 l
  }
& L, W7 |; c) y" n4 j* ]  return 255;7 `4 Q6 K/ K: Z' [1 I+ Z
}5 a! d( r+ Y' h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; w8 Y* g0 P% a9 G5 y6 Q{  _+ h* O  D- }3 R) [
  BYTE nTmp = 0;. B' b/ k5 f) j* b+ v& y8 j
  bool bDest = false,bSrc = false;% g5 L# N7 M0 p) z# f
  for (int i=0;i<MAX_INVENTORY;i++)
" K- n& K& n# G5 p/ o! U! {  D' b  {" E4 s; a  {4 I' R
   if (dwSrcId == m_Item.dwId)
8 T* j4 {6 {5 V. v7 E. V: N+ M, d   {
# D% |/ k3 ~. `( s0 X# ]- t7 c    //id相等 则 改变对应的dest和src
8 M- ]/ u% v" d- i7 X2 C    nTmp = m_Item.nIndex;
+ f; I8 N9 T5 l5 R0 t% C! `# v    m_Item.nIndex = dest;
$ C0 R" g& H0 `/ M2 A   }
" I# e+ X. M6 b, Q. p9 W6 p  }# o) z* i& g# _& z
  //临时数据保存完毕,交换开始
2 {$ S5 C, \# q4 X) ?/ |) o  for (int i=0;i<MAX_INVENTORY;i++)* E9 D  r) I8 q8 {
  {
4 f9 g! G) t9 K# U/ R+ [   if (dest == m_Item.nIndex)# L, c3 `. \, i; M+ A  ~
   {
) N6 K" ^* h. R% ?- w    //id相等 则 改变对应的dest和src
, s8 X, s. b- T- N6 M    m_Item.nIndex = nTmp;
: k) @. S  j2 X  q  m" z' \   }/ _: r! N3 K9 x# ^* G9 @) L
  }7 h7 f1 I  Z4 k$ p. R8 n
}
* k) w. p1 k: Z0 p1 i4 v};& ]2 R: h9 a* G! `
-------------------------------------------------------------------------
% l% F# u1 f" z6 u' h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ~5 |7 R+ ~2 z1 `: S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. Y: C9 {3 ~6 O
紧靠其上添加:) {% h* b: b& F
if( pWndBase == &m_wndMenu )5 }% T! k8 V& t( V$ S
{
! y/ i3 T, \- r% M" H  switch( nID )
  v, k1 M) {0 U5 a  {
; D( S: a" ]0 |  case 2:
& F  m+ [" L3 P! ]( I+ o   {
0 W1 t8 s5 ?0 k$ m' g9 k3 Z    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! {4 x; H6 s/ ^7 y; n
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 O- K& _8 O( Q$ L# @# `    {
/ m' ?; r$ X2 m  }     break;
9 y- d- M# ]' B1 K$ |    }6 `) y$ b+ N2 D1 f1 v/ C* g% g8 P
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ R3 o+ |- B) V5 c
    {; C, T8 z7 o* t- u! Q& Y. Q9 g5 ?. f: \
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 w' q, Q1 u- H
     if( !pItemElem )
" D6 u/ Y* B) m& C& H! Z8 S      continue;' i5 m; D; W. U0 Q: F
     if(pItemElem->GetExtra() > 0)
7 [# q4 Z. C  i! B/ w      continue;# m  M6 q6 n: P: l4 o' |' x, v
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( r( G8 X; A; O1 Z. c      continue;
7 ?" {" E6 W; ?     if( g_pPlayer->IsUsing( pItemElem ) )
5 @8 i6 |& m' U      continue;
5 f% [/ k2 X4 i: |& N     if( pItemElem->IsUndestructable() == TRUE )2 ?, R, `& y7 a2 F& d# [- |: y) V
     {
4 N6 A6 c- _9 M2 o8 E      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; J# ]# f' ^1 z/ j" n      continue;) e/ L, v2 ~# U
     }
+ R1 E" {! O- d8 F  j     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. Z( J' ^, ]! f    }
& E6 t3 R  E/ V8 C: O3 n2 V    break;: H, N6 {! T" Q
   }* D3 {" Q+ Q1 S7 y% [# f( i
  case 1:8 R/ N; e$ F9 l$ _2 m2 L- z/ s
   {
( B2 ~/ Z7 x4 C% E2 k+ \$ I& g4 q    //整理背包
8 `9 O% H" Y# N+ D    //////////////////////////////////////////////////////////////////////////# b! _9 N$ W2 h+ Z9 t# g2 v6 ^
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 [6 E( z* t; i9 Z; }8 R    //////////////////////////////////////////////////////////////////////////- _8 D# {; l+ H" i
    //////////////////////////////////////////////////////////////////////////) G/ D0 j% x. E5 t0 Q
    CInventorySort* pInvSort = new CInventorySort;2 ]5 b* t, @' ^4 `0 U
    vector <sItem> vItem;
! `5 d* ]: g, z+ d* I    vItem.resize(MAX_INVENTORY);//初始化大小
: K2 Y/ C5 e( O! }8 p7 k     //////////////////////////////////////////////////////////////////////////  o9 ^* c$ [+ W8 A! e" E
     //填充数据
# V# ~% K# ]" t+ D. }& J3 f& g& u     for (int i=0;i<MAX_INVENTORY;i++)4 j9 y! N8 g. K% O, |9 e, x
     {
. n8 S0 n' f, k4 I& d/ F1 @# E      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% M$ ?$ T% U  o! X
      if (!pItemElem)2 m  c! e& P% j3 b! Y2 j
      {
" E2 W* M! o5 h' A       vItem.dwKind2 = 0xffffffff;9 R2 h; G- J; }/ s" \4 q
       vItem.dwItemId = 0xffffffff;
% J3 I, ?3 [  l# O       vItem.nIndex = i;: D! w7 W7 j! j
      }else {
% {1 f3 f) X% i       ItemProp* pProp = pItemElem->GetProp();
2 Q- G% ~! X$ w       vItem.dwKind2 = pProp->dwItemKind2;
8 Q# `- j9 T' O- y/ M3 H( I       vItem.dwItemId = pItemElem->m_dwItemId;- G3 O" L, d6 r/ F
       vItem.nIndex = i;5 B- g& V8 ?$ g( U6 `) v
      }
0 d0 w  f" l( E) V: j      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) `. s; F- i) ?2 C# F( _1 m2 K; D
     }
( e" w! g; f2 R7 e+ {  H+ u     //////////////////////////////////////////////////////////////////////////
0 H) h# b' Q0 L+ Z* s+ r6 ^     sort(vItem.begin(),vItem.end());//排序
) R; m6 A& C* z0 \9 ]% R% x  s3 D     //////////////////////////////////////////////////////////////////////////' S8 a8 G8 y; p+ I4 j
     //交换) U8 W4 _! e, f/ e, W; s
     for (size_t i=0;i<vItem.size();i++)# p+ a) J4 n* o- K+ [
     {
% W$ c/ A& \! {/ e' |1 D; q; _2 M* R      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- ~3 j& n9 W" }9 A4 d% d5 t  M      pInvSort->Add(vItem.nIndex);% }9 k+ x3 ?1 Z- k  s
     }. t1 w# G8 \' V) W3 h2 z  w! i& F
     BYTE nDestPos = 0;+ L1 Z& v* v5 e7 A! X2 J7 ~1 M
     for (int i=0;i<MAX_INVENTORY;i++)
+ W, {8 D1 G8 Y( z     {
3 L' J- f& j1 l' r& x( S# }      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! W3 |& D% n' `4 y0 v      if (pItemElem)6 Q6 f4 Z% d9 p# B5 @
      {1 G( }) I5 J9 Q6 L$ W2 q
       if (IsUsingItem(pItemElem))
0 Z: O* n7 O$ G( N% Z       {$ P5 o, U2 |  O# k
        //这个位置无法放* X- h( W, V8 f
        nDestPos++;
' @  }' X% c8 b' z2 B" u1 Z- D       }$ x6 r1 m# A( f* U# m
      }
% n% C& b: `: Q8 {      BYTE nSrc = pInvSort->GetItemSrc(i);
9 t4 _, x) C; ?2 u$ G7 s      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 y. C/ T- U$ h: _* S
      if (pItemElem)0 P- _1 h6 B1 B" V1 X
      {5 w$ n% f; d+ ?5 C+ K
       if (IsUsingItem(pItemElem))
! H' p! o" R5 K1 _7 i/ f  n2 E       {0 X; u$ ?5 d* ]* t) @# B" O0 r( \
        //这个道具无法移动,跳过
. O0 ~- ]- e7 D2 b5 |6 D* A: E* Y# R        continue;4 h8 A: R3 B# k5 ]
       }
' A  m( k( M2 _; X4 e      }else{- ?! X: c! u3 p) @% V1 G& E* l. a
       //空位置 不用动
; n$ g5 O) X8 ~9 D6 R" Z       continue;" J. ?1 T8 q# y- S" |) [5 ~
      }
- X3 q% v8 T; R4 G- [& D  d- X7 K6 y      //////////////////////////////////////////////////////////////////////////
. i$ C: K) m6 M$ D5 ]      //开始移动
9 T. e2 }' z8 I# J) A+ U9 v      if (nSrc == nDestPos)7 P# e6 W+ w8 J( G) @; m
      {
% S' z2 Z) ]; P5 a3 D% ~$ y       //原地不动
9 s% {! J3 ?5 W% r# @       nDestPos++;1 e) M& h  U9 c1 s, i3 b+ ?, K
       continue;/ M! C, z7 c* C
      }: y- s: v% U2 A( d( @% S  z: }6 ?
      pInvSort->MoveItem(i,nDestPos);0 n7 G, U; f; p, _3 A6 D- W# D
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);# ]  p) `; g  h* ~4 }1 f
      Sleep(5);) s) p' N! X) j( \6 z- A" Z; C! U
      //Error("移动 - %d->%d",nSrc,nDestPos);
4 z. q# Q- d: n; h5 S0 P3 t      nDestPos++;# U4 k( O! v8 z: x( q; s
     }
4 D8 h  H2 Y) _! ^" T$ z     //取第一个元素的信息/ m4 P4 G, s9 F+ ~
     /*
+ `4 c# v( N! X4 a     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! L5 a2 h2 }; P$ l, Q+ V
     {
. z- v# R0 v" }0 [9 F      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- O) ?6 i& X( S2 `# ^
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 R. c' ^; {" I7 T& C) x$ Q
     }
7 j8 G* }& t) [6 Z8 g" ]     */1 f9 o- s0 @9 n' B/ R
    //////////////////////////////////////////////////////////////////////////  s: b" Y, o6 a4 V  K
    break;4 c! [$ k. y+ u) i) K" }: K
   }; m8 }/ S1 ~4 Q" a6 C( y* l
  }
  ]- e: b/ T: X}
- w- ]1 E! o$ m5 a1 q: v. |+ sm_wndMenu.SetVisible(FALSE);/ e5 {% J# n) L' L/ c/ X

, J2 ]1 n- v* s. A0 p5 D7 {: M--------------------------------------------------------------------------------------------------------
' @" C. ~, U- s8 F8 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& W. u8 T$ M+ B
{; E9 C) H' i7 b* j3 z
BaseMouseCursor();
/ U1 T2 A5 L& k$ v0 d# d}
: Q# A% M/ U& t7 c! D* |在其下添加:. h6 q3 b- y  ~( N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)  x3 `- o/ z( w, M
{
2 n0 @9 B) m. e. _8 cm_wndMenu.DeleteAllMenu();
. L9 D' o- \% b3 d& C& u7 um_wndMenu.CreateMenu(this);
4 Q" k% g+ k* I' i  _: h1 p3 k( ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 [0 S% Y# f9 r! l* X8 |3 _
) w1 h- O- g0 l! J) z# P, c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- k6 Z( Y) h6 l+ q
{9 H3 C5 m  `! }, O7 E) l
  //P以上级别才可以删除所有道具
9 {" X9 X% x; C1 ~6 }; f) y, ~9 a4 ]4 H  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 F3 P2 G9 h" g# e" A}
6 j& {. E/ N. p( n' L) ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; y! F9 r* x5 J7 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ G% V8 j4 B) H5 c
m_wndMenu.SetFocus();
+ P& b% N) A- h$ P}: ^/ J7 H9 c% a  W# j% N; ~3 Z* R
------------------------------------------------------------------------------------------------------------
) z! y( h( C* m; T*************************- Q2 V& \; {. u0 }& R( o
WndField.h文件+ H5 t- ~! n7 p4 @3 V3 R1 h
*************************
9 A4 |  [# e7 z- U. ]* \3 o* V. T搜索:BOOL m_bReport;4 u: S. I' U5 m. |3 n
其后添加:
# |+ s' Q% d) F! CCWndMenu m_wndMenu;  n& f% J+ R8 C/ V* ^& z0 n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 [6 D) ^, g$ F( \; b3 I其后添加:) D) k) g8 `7 ^2 q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& ^9 O/ d- U/ m  n/ ?% j
6 a& q# S/ b4 q4 y; n
! ?, X- I: _  ^) @, X

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-11 09:45 , Processed in 0.063473 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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