飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 Z1 x& t, E; |* G9 u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# ?- X7 v% }( X6 I; U8 {
9 P2 o: r" K. p) Dstruct sItem
. b" w$ S0 c% E( H" i0 p6 d% M9 D6 ]{
0 M% h7 r5 a$ U+ I: nDWORD dwId;
, E: p# O+ a& DDWORD dwKind2;
+ \+ |4 y, t4 j- b( m% h6 uDWORD dwItemId;
' f3 @/ w0 f* E( g  |BYTE nIndex;
& \' P' h! a) E4 E! {* csItem(){9 L% V3 R6 G7 y+ P! y! l( x$ b
  dwId = dwKind2 = dwItemId = nIndex = 0;+ i! _$ U4 C2 K2 D! f4 H
}+ {3 c7 |+ ~$ J
bool operator < (const sItem p2)
' k  x5 H1 i+ X* ^% ]5 p% Y{+ W$ s0 l5 p- ]
  if (dwKind2 == p2.dwKind2)
1 `- r8 m: z6 v* ~  {" h" b, }2 x, s* @8 u% e( ^
   return dwItemId < p2.dwItemId;+ _7 @& [/ X' F, g
  }else{) o: F5 ?" a+ g2 k
   return dwKind2 < p2.dwKind2;9 h: E# C% p# S- `
  }
% H8 o4 b& I2 y7 ^}: W) t: b- P" M
};! |7 ]* k! Z- U, V6 x3 N
class CInventorySort# m% Z4 K& e+ i6 z& M
{" Z' \" k  T; Z* }
public:- t* x/ w' `" r% \2 R& G4 N3 O) i
CInventorySort()7 L' L7 ^0 P' X; ~4 F9 x
{
9 D* n. t% v$ t+ T( L) p  m_dwPos = 0;9 I  o/ B$ Q' s  c! s0 ?
}0 e- G! ?7 b  }" _! Q
~CInventorySort(){}
  B! X# e# N! C3 {2 q) bprivate:3 K: L6 U# G; g0 ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" j$ c" s- J. ^/ T% G# y, U' ]DWORD m_dwPos;
) I  p) o, E9 g% N3 _public:
6 }+ e' h* M$ C, U: o2 cvoid Add(BYTE nIndex)
1 {$ c. |3 e2 Y{
0 O3 Q5 _3 P; F: l* m1 Z% j) l2 Z9 l  if (m_dwPos >= MAX_INVENTORY)
7 {' v, ]: B8 m9 Z2 A  j' E  {! Y5 s) J. h3 n# }' \
   return;
7 T* I" W+ _( u1 j! E  }5 E1 V" F1 x, ]5 Y4 Q7 L9 y
  m_Item[m_dwPos].nIndex = nIndex;
8 G: J( R* t/ s: D0 F% K  m_Item[m_dwPos].dwId = m_dwPos;$ n0 W" s- ?4 f8 H) O: ]5 p
  m_dwPos++;  w7 i& G7 E! ?1 B
}, ^) j7 C4 C9 h( x1 P+ b. R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 r) [4 R( M1 g8 X  ?{7 \0 b- q* ?+ V) O/ Q
  for (int i=0;i<MAX_INVENTORY;i++)+ n$ l( C; Y. o; C1 W9 Y! q/ F2 g
  {
3 Y+ b8 W* Q8 c- w4 k   if (m_Item.dwId == dwId)7 l) q- w: u# ~5 u
   {' s( {. B0 V+ {" {  E
    return m_Item.nIndex;) {) s5 U4 w- F2 t' C$ u3 B" L
   }) Q3 R; p- B" b1 K6 o" N( Z0 b
  }' K) e/ [. `7 {% {" L
  return 255;
2 @6 f! `: g$ v: L) D' B}5 X$ z5 A2 F: D- Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 w# n% g! ?, w7 `
{
9 V5 O( |1 {8 v$ z  BYTE nTmp = 0;
9 A/ y" C2 K6 H3 D7 ^  bool bDest = false,bSrc = false;
) D; ^8 B$ k/ n1 ?3 b  for (int i=0;i<MAX_INVENTORY;i++)
4 \5 ~+ p" `2 a  {& @" t" e  W4 P! D9 n6 ]
   if (dwSrcId == m_Item.dwId)
9 O3 B! x" O; o; j9 H/ z9 D   {
# W5 }. e) t' L    //id相等 则 改变对应的dest和src
; l- d8 E0 G8 Y1 C+ e) g: D$ P- l9 [    nTmp = m_Item.nIndex;
+ Z4 H1 j8 S* x3 v% ~/ w7 y7 Z    m_Item.nIndex = dest;  c& F) S& p3 i: Z$ r
   }3 J+ |' U1 v8 h. S; {8 @2 a
  }; q0 G# Q9 w# ]$ r) ^! Q% t
  //临时数据保存完毕,交换开始% V8 i9 o5 l$ H4 {4 ^
  for (int i=0;i<MAX_INVENTORY;i++)3 R# ?! h5 ^" U6 P# C% G% v, u' ?
  {
! k1 ~" G% o9 P# i0 c$ H; ?   if (dest == m_Item.nIndex)% v' z; W; z, d, K- E. B  I7 Y
   {- O' c! v& z3 v
    //id相等 则 改变对应的dest和src) N0 Y: l6 b! o1 f1 \. h" z0 M
    m_Item.nIndex = nTmp;
: m! \1 S: @3 x! o8 P) l0 ?   }8 p  o  p: I/ m. C
  }
8 N( s( M+ t' O% d}
) J% {3 |! D9 \+ h};
3 Z  }$ D0 ^7 B1 @* c# t) g-------------------------------------------------------------------------
% X. y0 D4 h, b1 J; P# k4 }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 K: y4 q" I6 ]0 u2 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' V9 l$ M3 f7 [% u
紧靠其上添加:. j+ c# r% e( Q. r" E- g; C
if( pWndBase == &m_wndMenu )
. i; q: o5 g) E" b* Z. M- u{
6 S; x7 q* K) J3 `' k8 _) u# C  switch( nID )* r* I* U: ]- ]2 q
  {; r9 X" Z$ Q8 ~  O% f
  case 2:' l, g$ ]9 i/ H! b# F
   {) N; v* Z( [) @
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) h+ d: ^0 J; p' o0 D0 L    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 ]. f7 H) y6 @
    {0 r* Z- R' e3 @7 }9 e" u: Q+ i
     break;7 U2 t! T+ {4 g' m
    }
  x. b. R7 W: z, Y( ~3 J    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! \! T/ _" h" Z6 c% H/ b1 C! W, ~    {
5 x+ x% a+ k. f9 i1 k1 B- ]     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 T) N; T& z9 w2 J
     if( !pItemElem )2 F; n$ p& S: ?0 L# V+ B
      continue;* D4 [8 m: p8 V6 O/ m' r; K
     if(pItemElem->GetExtra() > 0)
& t" j" ^4 B6 m' a      continue;
1 D4 s. [3 s9 v! S2 I# k     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; ~5 y- O* k' M+ G8 P      continue;& g8 M& c. d: `8 i
     if( g_pPlayer->IsUsing( pItemElem ) )5 o' Y" v0 z4 d" `( S9 h
      continue;5 c5 j! n3 }0 ]2 m; C# p" Q$ O
     if( pItemElem->IsUndestructable() == TRUE )
2 q5 y- a0 V" K# r" ~$ g     {
8 l$ b# k9 A+ b) p: x      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ E$ y: A2 E$ \% m3 c      continue;
, v8 v9 C$ H' o     }) }$ D6 f8 R0 m# i5 C, ^
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; P6 p$ K2 K/ `% x7 t
    }
/ {( R; X0 v% T$ h% A/ ?    break;
$ i/ }. i, J" ^( [, e2 {7 Q' w   }* @1 T4 a- w. C
  case 1:
& ~: t# u1 w6 ^   {
4 O- V3 e0 ]( @' n    //整理背包
& ^# l9 ~& n" E% D$ F    //////////////////////////////////////////////////////////////////////////7 j( F% r! A2 h& f+ ]
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, m( q+ f; h+ a/ C, T, _    //////////////////////////////////////////////////////////////////////////0 _; s( e/ @( }7 j# T
    /////////////////////////////////////////////////////////////////////////// R" ^& d; ]+ A4 B8 `3 V
    CInventorySort* pInvSort = new CInventorySort;
3 C- R/ R6 z8 D+ C. N    vector <sItem> vItem;: ?) l0 p$ k& a6 f9 o
    vItem.resize(MAX_INVENTORY);//初始化大小7 J' v, e4 T$ U0 ~6 E1 i# I& q5 a# `- J
     //////////////////////////////////////////////////////////////////////////9 {' W" h. g; k2 N
     //填充数据
5 O0 g. E' {$ N! c3 I' n     for (int i=0;i<MAX_INVENTORY;i++)( t: s5 O9 f9 V" S
     {! J2 v5 Z, R6 \, j
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 H+ I) O4 _0 E& c* ~. O      if (!pItemElem)
" d! E6 F) b7 D. g5 G, {0 x5 @      {
7 s* k' N$ B: V& |% B       vItem.dwKind2 = 0xffffffff;, ^. D" {# M. N* |' K4 E0 I
       vItem.dwItemId = 0xffffffff;
3 {1 |; f) t8 H4 v; r       vItem.nIndex = i;# b$ q/ @( c' v9 P# K1 F
      }else {
8 o& y3 a# U5 M, v       ItemProp* pProp = pItemElem->GetProp();8 v7 v+ _/ \0 S8 x
       vItem.dwKind2 = pProp->dwItemKind2;
& `9 Y+ A2 M; D; Z; ^2 U       vItem.dwItemId = pItemElem->m_dwItemId;# J) o, M6 S2 h
       vItem.nIndex = i;
1 g! U$ z: L9 Y* H) V0 T      }
5 V9 h# F$ D" O  u7 R' e      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 D7 y# v5 P) `4 ~
     }
- e9 ?) R: M! ]. m, }     //////////////////////////////////////////////////////////////////////////! v' j; r# i1 J! ]5 ?+ p
     sort(vItem.begin(),vItem.end());//排序! N1 R& V1 J9 Y$ G7 M( V
     //////////////////////////////////////////////////////////////////////////
6 v1 {8 l, F2 G0 p     //交换
5 C- H: Z% r7 D1 e1 A     for (size_t i=0;i<vItem.size();i++)( G' T0 i# E% h6 r2 Z& p
     {
: A5 e0 }7 ~+ Y( E7 r& b      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) _9 U+ C' _: r9 q+ m, Z      pInvSort->Add(vItem.nIndex);
* ~: ]% }( o0 v/ J     }
6 z9 j+ p/ A% k( T; `- ~5 D     BYTE nDestPos = 0;
; Z# |8 p( {5 q9 }! F0 I) ?     for (int i=0;i<MAX_INVENTORY;i++)3 v& K" `# A' H) u
     {
. f( ]  X7 d) y& m2 \! h      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 [/ c9 I% z( p
      if (pItemElem)* ^, Y) ~1 ], E: V4 W7 i
      {
3 V  z# I0 o4 O3 g  R       if (IsUsingItem(pItemElem))
; y" f6 M9 B/ c) w# _* W# R       {3 U; D% V& q! p
        //这个位置无法放: w& ], _0 Y4 I; z
        nDestPos++;
% C. O! N' ]9 p4 F4 ~$ s; `       }
5 \) [, G0 _" K; I) Q" L      }
4 H# _+ v; X  j# Q. ?      BYTE nSrc = pInvSort->GetItemSrc(i);( e5 J$ H! Z9 N7 q2 W
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 O5 F7 p: o& A+ m  Y. h4 T) |5 |      if (pItemElem)9 s8 P6 a7 _7 q
      {
  H0 ~' N- }- C2 p6 i# J4 K       if (IsUsingItem(pItemElem))
+ y+ G. {3 X5 X( D. k8 W' c2 u       {0 V+ _; \- H, J
        //这个道具无法移动,跳过
7 a3 M0 r% m- n$ p! I4 N        continue;
+ C  \4 E2 j/ Z/ x       }, y3 k' f7 d; N1 S2 t
      }else{
& p3 d" ^4 C6 }- L+ ~) F       //空位置 不用动3 F4 o* \6 |3 {2 F
       continue;' f; ^* ~) z+ n% g
      }6 P+ K7 ?* d& f4 _9 u. s7 g
      //////////////////////////////////////////////////////////////////////////
* S/ P, |) A3 i% _      //开始移动: c6 k& G6 T+ p) Q, Q* i
      if (nSrc == nDestPos)
  F$ M& Q1 @$ i4 ]* B. n3 P3 T& H& B      {& q$ M$ E& n9 i6 y! |5 X
       //原地不动
9 T4 S7 v6 i+ f: q# y3 c, f       nDestPos++;
5 X$ D- G) u1 A6 u! J% B       continue;$ P2 A3 X. c, ^
      }
& M" b! i/ s1 M+ Z6 n# v1 C      pInvSort->MoveItem(i,nDestPos);# v+ _$ k4 g# z1 A. {! }) G8 F) O
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ E& K4 H+ V/ ]* F, S" t      Sleep(5);4 C3 C( y' Y3 o" u1 ?# s* x8 Y
      //Error("移动 - %d->%d",nSrc,nDestPos);  i* r( t0 L/ D8 A" J3 ]  |. G8 j
      nDestPos++;
2 A  H2 [5 A% u; Y7 _3 g. h  ~8 x     }
& @1 B& ?# f5 l2 M8 M, C0 m# V6 }     //取第一个元素的信息5 ~0 [8 B8 o8 U
     /*
( H8 Z% C& ], r  k& y+ M     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& L1 z( Z9 @9 k* x8 o; P" M3 R/ X/ g& {
     {
  J2 |% K7 j% e      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ r+ N  s% B' M6 }3 Y
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 h/ r" u1 A7 j" C" T6 H5 [     }
: @9 ^/ _: `8 v+ E9 k3 m     */4 I3 w+ I- ]% E9 G1 w
    //////////////////////////////////////////////////////////////////////////$ ^& P3 W- [0 l
    break;
6 f% G3 ^4 a* u8 v& i/ T$ o  P4 F) ~   }- r3 x! p- `3 S% g; _
  }
7 q6 w: G6 r" a- D# ?5 K; F; T}+ }9 \3 {+ t1 r+ S3 y5 a# }
m_wndMenu.SetVisible(FALSE);
3 p4 B; u) \% m; K# N. G/ A& l# b2 h
--------------------------------------------------------------------------------------------------------7 q5 U3 K5 H5 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# Q5 x* W+ Q& S
{/ j$ f3 P$ |- U5 {
BaseMouseCursor();/ b- e/ k+ \: [
}3 r& @0 `3 w$ [& S: j) V) @$ d
在其下添加:+ l% H# B' z9 F" i6 C* i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 }) I6 e* \% T8 r9 s+ E! x{
/ T+ v% Z- k0 C9 ?# b0 sm_wndMenu.DeleteAllMenu();/ C1 E( _+ j, `
m_wndMenu.CreateMenu(this);7 L+ B7 }8 S5 V& X. b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. X# S" m" t( {7 r: I
) H: {8 e; F: v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 v, v! X9 c) K- \9 F, }* W
{. n! O0 a8 N* [* A- K, V+ p; m
  //P以上级别才可以删除所有道具
# ~* j# x* b- s8 Q  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. }' Y2 @5 ?- a. G/ A}
' L& z8 e$ K+ X6 L( Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) u( n& _* s8 q  k$ I' r! l6 U' f
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& Q+ K' @8 e5 a5 tm_wndMenu.SetFocus();0 n; }# Y6 @; o$ a1 N
}
8 M# B" U) l  i" C: Y0 w------------------------------------------------------------------------------------------------------------
0 h7 e! U) c# w7 Y' N0 \************************** b0 Y1 j( t1 v; K' _/ D# M4 a
WndField.h文件6 V0 O5 [- S- W* f4 c9 |  s
*************************4 d& i5 m$ t* n0 I: i0 s
搜索:BOOL m_bReport;! U2 b1 b4 e+ F& P0 x$ x- m
其后添加:
1 P( w& J* A8 C$ s7 O+ H: j$ V  RCWndMenu m_wndMenu;
7 j$ X2 b8 [/ B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 r' ^# {4 I# S; n0 B" m
其后添加:
, O# ^7 n% g- xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 n$ F& ^6 a3 D5 z. J5 l4 y7 \8 f% s% X9 q$ P8 v

: r/ Z. i+ z. q+ J* t

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 07:02 , Processed in 0.068099 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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