飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
# g6 B; Z' w6 F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ [1 n4 h' q( ~0 P
. x  ~1 a5 q- p3 Z! Y3 U1 }9 @
struct sItem
" W/ q, j! I: D$ U( U; b8 q8 ?{
* \* y0 U. U& D/ \DWORD dwId;3 w- J' K( h) _( O$ e
DWORD dwKind2;
6 R. ]# [1 t1 y, m# M% s, w  cDWORD dwItemId;5 S! v) }/ r6 U( d
BYTE nIndex;# w; R) O4 L6 J( j* P
sItem(){
9 L4 t3 h" u( R& S: `  dwId = dwKind2 = dwItemId = nIndex = 0;* K( p$ K3 @' b9 Z9 |7 ^
}% M& b8 M" m' K( V% |8 \3 p. Y' |
bool operator < (const sItem p2)8 @/ i- l' D: |: F
{
. i# U( `& _0 `# {3 I2 w% M( `  if (dwKind2 == p2.dwKind2)! E! t& z( i  A) n, L$ t  t: R
  {
! e% Q* P4 \0 y( s   return dwItemId < p2.dwItemId;1 ~! }8 q, \5 E0 M7 @$ ^
  }else{
4 h# a8 n4 `! w   return dwKind2 < p2.dwKind2;
6 E; D% ~1 N' S  }4 G( V5 Z; Y; D. a3 A
}* J0 ~! x! s; F$ o
};% ?6 y* I0 b/ Q. y
class CInventorySort
$ x' r# p3 ?# b{. d' M6 d: e8 R, L8 |6 T
public:
- `3 ]4 _  i& ^/ F+ k: @3 xCInventorySort()
$ g" x; @$ R$ C7 a{
3 t6 N5 j( q9 D) Q+ w! H- ]  m_dwPos = 0;: c' Y0 G  r! Q% d
}  `; `$ C3 l$ x" g9 W/ Y' e' w
~CInventorySort(){}
3 y  a& X( i6 ?' J6 Eprivate:# f- i8 S) M8 k8 K9 j* f: V* W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, K: w8 i) A) m" e4 b
DWORD m_dwPos;  R0 e6 V& ~" o% `
public:2 h7 ^4 i0 r" h1 e- v; r/ x- ~9 N
void Add(BYTE nIndex)
( A* n. z: E1 N: m{7 A8 J" K. @+ o. P  k4 o( N! k
  if (m_dwPos >= MAX_INVENTORY)
$ N( [" Q+ J" l  {$ R- y; v* q3 o4 y/ B8 J
   return;, _: m5 V. ?  Q! e; v
  }
. e- o1 o" d2 H3 }  m_Item[m_dwPos].nIndex = nIndex;
6 p3 P8 K$ K. C9 ^: g  m_Item[m_dwPos].dwId = m_dwPos;! n% {" x; J) `
  m_dwPos++;
# I1 E8 W9 m6 n}
4 [5 J9 R& Y5 s5 S  X  H( WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 X$ u: n/ k% y- Q0 L1 ~{
: f+ x0 y% |' o& K2 m6 t  for (int i=0;i<MAX_INVENTORY;i++)
1 T8 u3 U$ X; a/ `2 G  {
1 t7 v+ ?: m# P5 X. k+ p; K# U   if (m_Item.dwId == dwId)! B" K  u5 z: _
   {) Z3 r, ?# @! Z# Q4 `
    return m_Item.nIndex;
* n5 e0 O6 x  _& H5 S3 _) L   }
6 d. e% }- A* @/ ?: D) Z  }" Z" Z, W3 B3 B( A* G
  return 255;
7 |( k+ N1 @9 C}
5 d5 q) o9 j! Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 T: Q; J+ b& ]{5 J, ]  M& u; q4 T! t% ~5 y
  BYTE nTmp = 0;( e3 x( N9 {4 |+ t" A- J- m% p
  bool bDest = false,bSrc = false;
  J  b" H/ B! C. u* ^, N# w  for (int i=0;i<MAX_INVENTORY;i++)1 u" Y  W. Q8 U8 `& P$ N
  {
2 w3 B. z  ^  e$ d# Z3 q  P0 }8 ?. o   if (dwSrcId == m_Item.dwId)* I5 A/ P# q5 O8 T
   {
; [$ {* n' f" w) Y, ]) _0 m4 D    //id相等 则 改变对应的dest和src
3 O7 ]9 L9 g, T0 l  g    nTmp = m_Item.nIndex;
* I3 W: m6 U9 h) n& z9 a* ^    m_Item.nIndex = dest;
- w- G; T! e  r# T4 n- v   }
1 M. |3 V% \8 h, L& c& t$ T  }
9 V3 Y" P7 P& j2 N  //临时数据保存完毕,交换开始
* e, g8 R" l2 Y  L1 c3 w+ l9 Y/ k  for (int i=0;i<MAX_INVENTORY;i++)# d% F* T7 _+ x& E- ~7 `
  {4 d8 V/ s2 G6 e) x8 ^& V" j4 Y2 f
   if (dest == m_Item.nIndex)
1 e3 X& B* H( v) [7 k5 J   {
, p& b1 w7 d+ J3 w$ |: q    //id相等 则 改变对应的dest和src6 i, O) _) X+ l) K. y( y2 z
    m_Item.nIndex = nTmp;
. Y* Y/ d$ p% h   }
5 ]/ }. s( u, f7 A- L! w$ L; {  }
; E( z3 K( E% I! _}0 v$ b# Z* ]* F6 k/ ]5 d* x
};6 _: [  _8 X0 s
-------------------------------------------------------------------------
5 Z. R1 n% M4 J! o  u$ G) [. s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, D' K. Y/ j* y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( I' S& ]3 g5 R  u紧靠其上添加:8 `" J$ Z; ]. `$ {$ |
if( pWndBase == &m_wndMenu )) B! n* B7 m0 a' A+ Z: t( ^$ i
{' e# B% L# T2 w
  switch( nID )! Z8 ?' Y  P9 I& L* ^/ c5 y
  {
% H8 J9 m" K/ w  case 2:; R! ^& d* k. t1 c* ~" D0 S" _) U% q  V
   {, K0 M% E7 s8 k- b, B- K2 C9 X
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);  Q& m5 j3 F* I9 N- ?6 h2 s0 s
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 J) M) c% y& L, G  M" M( r! e
    {) i5 [& D1 T& F
     break;* z' ^; I, c8 t4 V
    }
+ C) w4 @( C+ b  u    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# I( N3 x5 F& N    {
" u0 Q4 b7 _) N     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 b% H4 \' [- H* }$ c+ x: X
     if( !pItemElem )3 j7 q0 ]) l' X2 i5 i' T
      continue;! h1 i$ o3 }* x* @, K
     if(pItemElem->GetExtra() > 0)
$ ~. n# Z5 h6 l$ M7 a      continue;# C- L: |' L( k
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 t, v3 S: L4 Y, z
      continue;; F5 x/ k" L% M4 c  B
     if( g_pPlayer->IsUsing( pItemElem ) )9 _" X# T# N& Z& F4 m% H
      continue;# [0 ^. r0 y9 p0 f3 ^* c  S' i
     if( pItemElem->IsUndestructable() == TRUE )
: V( D; n! G6 l     {% \7 S: m9 i& ~8 |' m
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; r9 \, J, k& }8 i; y0 s      continue;8 d3 ^' n9 c! C0 _: R2 ]
     }! E$ R; m  g) _3 U2 A, Z% \. O" {
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 ?/ ]3 J0 P* J' p    }
; f! X) v& a8 \. R/ [* a8 T' ~; P    break;0 M: y- p2 ~5 O# i0 s9 |& y! @6 v
   }
" \. J. u7 Q/ V/ u9 [  Q0 f  case 1:& U8 D: E% h! x; O: A" V7 N( J
   {; w. t" N" T) G- N  ?7 W4 p
    //整理背包
+ o: s- p" T: ~    //////////////////////////////////////////////////////////////////////////% R1 Y1 O; t: I
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% [3 l9 G* n. s/ b% Q5 [, H9 e. f1 c
    //////////////////////////////////////////////////////////////////////////" B0 m& }$ _8 f
    //////////////////////////////////////////////////////////////////////////
9 h. i. x9 R6 z6 g1 W    CInventorySort* pInvSort = new CInventorySort;  u) |9 g; P3 f! W  R& F$ M. a  a
    vector <sItem> vItem;. u& g. B* x% _" i7 |) q8 L
    vItem.resize(MAX_INVENTORY);//初始化大小
; A+ R* W8 R! w- K- s$ _/ k     //////////////////////////////////////////////////////////////////////////8 `* U' c& J% R: {+ }
     //填充数据
0 M- y2 H. T5 w  ]% N' F5 }     for (int i=0;i<MAX_INVENTORY;i++)# J# {+ S9 ~( ^
     {5 _; `. Z& P* Q% e2 _5 {
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ Z5 I7 U  e) r$ b: O, A- Z
      if (!pItemElem)
8 e: X) w; s- y- \0 d( d; @      {
" H2 \2 O3 v, \* @" q4 g  F. F       vItem.dwKind2 = 0xffffffff;
1 ~! ?% V! g: ^8 M: x$ O       vItem.dwItemId = 0xffffffff;
! @# R7 @* \0 j4 v- Z$ ]       vItem.nIndex = i;' v1 K4 P2 W" n% [  i3 x$ ^
      }else {; g0 I6 U. S6 n: x  g2 r* |+ `
       ItemProp* pProp = pItemElem->GetProp();9 ^- G) Y2 \0 q3 t: \
       vItem.dwKind2 = pProp->dwItemKind2;+ t# R: T* _1 @* u
       vItem.dwItemId = pItemElem->m_dwItemId;
0 r. M, D6 S& ]9 H( Z       vItem.nIndex = i;
  o% ?6 _+ a5 l; U+ a      }( V/ `% Q' b5 X3 \' l8 D
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! c' ]6 h$ a" Y0 d8 f
     }
3 U, K$ O6 Y9 P0 E8 o+ Z9 k     //////////////////////////////////////////////////////////////////////////
. L6 i3 _! @* d, D( ^) ?) `& d     sort(vItem.begin(),vItem.end());//排序( c8 s: N% X7 B2 r& d
     //////////////////////////////////////////////////////////////////////////
4 q, ~& Z& B/ s! Y0 C8 u% M     //交换
1 s/ D4 j' g! v5 x     for (size_t i=0;i<vItem.size();i++)+ u* E$ n& P/ ?* }2 C9 P0 {
     {
5 |& U/ w3 p7 n+ H: N: ^      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 L2 q3 L8 \% O' G8 {# c& Z6 U      pInvSort->Add(vItem.nIndex);) r, |- P; e# s2 z9 t* \
     }. H3 R  z# g8 a! K8 V! w
     BYTE nDestPos = 0;
8 _- B% x, T2 Y     for (int i=0;i<MAX_INVENTORY;i++)
0 X; q" K9 y  Y& M1 K' g     {& _0 v9 m7 G; z; Y- z, ~+ @3 D
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- ~5 a1 T5 n: ]3 V5 _      if (pItemElem)
4 Q6 P7 a' D: S1 W' R9 k      {
0 _& L7 F' ^( c0 i& r) C, E9 b7 u       if (IsUsingItem(pItemElem))0 j5 ?: ?8 ^/ m5 f- k6 g
       {0 K! f0 y% w2 W
        //这个位置无法放
# w! }/ j6 C; ^5 Z        nDestPos++;
' b. M; [7 r4 u       }
/ M0 g; b2 v5 p) L$ {& _      }, }% t4 h7 P2 {6 X! s; C
      BYTE nSrc = pInvSort->GetItemSrc(i);& g0 r) Z: Y9 D) }: V# r8 B3 S
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" M2 F% Y8 o% Z" c9 p, f  \
      if (pItemElem)
4 @: p  n& b" g  Q" C) B      {
/ P" O. |) c: u2 D) Q$ q  A       if (IsUsingItem(pItemElem))
* Y; G' x; R3 s9 U+ O, m       {
7 g2 J1 N$ D  o        //这个道具无法移动,跳过! Z3 @9 N" o+ U( x7 x! t
        continue;
& A" m) U) Z& G: N       }
" M/ _- l5 Q+ J0 r' \      }else{
6 t1 \: h& B4 b6 a% o% ?# k       //空位置 不用动
: p; i: ^5 k, X, ?3 Q       continue;, t( ]8 W+ X" V: |, |) t- ?
      }- d- @4 _2 j( k* P  R
      //////////////////////////////////////////////////////////////////////////
' I4 v% z- ?  \  l% Y' h3 \, x0 j      //开始移动
, e% ?6 R5 K2 o+ q" {3 P  [4 q      if (nSrc == nDestPos)
% j3 e1 _' ~  h  m0 Z      {+ ?! A* v* z5 T1 X* u7 u4 F
       //原地不动5 U; c0 |: _: P  r
       nDestPos++;! r6 y6 N0 I1 W3 l7 r0 K' D
       continue;# Q* H% M0 F6 i2 u8 I3 X3 ?% }; T
      }
( J+ y- }5 R  l; L# u# Y  g      pInvSort->MoveItem(i,nDestPos);. }* \/ Q0 z5 q2 w
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* ^3 q  F8 H/ m      Sleep(5);
; |7 B; ]/ a7 U& T: Z! d% ~* V      //Error("移动 - %d->%d",nSrc,nDestPos);
6 ~- ~' l$ a5 T# P      nDestPos++;
1 q) R; b, z# Z7 _     }! ^. {2 O) r2 t! Y! S
     //取第一个元素的信息
& z  n3 W( k6 Z* G. c& x' `; d     /*3 x' O% K1 E8 C
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* h; {7 F+ i$ K8 s% V, I& ~, K     {
5 t' Q# V5 l) [9 T      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 e3 A; g3 J4 Q% R6 I! r' }3 c0 H. c4 [      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! w  x& b  ?, N7 h4 g
     }4 N0 X& Q' |/ i$ r: p7 Y
     */
# }  m1 y) b; ^+ l+ |    //////////////////////////////////////////////////////////////////////////: m2 H" T+ {" [4 F) c0 J. O
    break;
( q. n1 j- w9 f  d1 }1 q* L   }
& |: d* b, z) J3 J* v  }
9 Q& S% V, h6 U}
; ], L; u, b+ |% Z# O" X- I, zm_wndMenu.SetVisible(FALSE);* e7 b# h6 K0 {

4 [' e; L. Z9 _3 J( H4 X5 x/ i: O--------------------------------------------------------------------------------------------------------% {. q7 ^$ Y6 B0 W$ w& B4 b% G5 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* }' c2 Z) Y6 g& n* F' R0 E4 h
{* W5 F) q/ f3 k' c/ J
BaseMouseCursor();
0 P& Q' n$ W$ s* j) G}0 O% E  W. C) G( D
在其下添加:
, Q$ B9 p$ t1 a# j6 D4 @8 f' svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 ~" D0 o7 `; \) ^0 F{0 L/ |+ o. R' x, {# q- Y% q
m_wndMenu.DeleteAllMenu();
2 q! L" t# A: u6 i' zm_wndMenu.CreateMenu(this);
( T9 [9 u( H! @# x5 K3 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");  i8 c4 h  c; I8 W5 ~, g

: J' o) X; }; _! y" O, E! Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% r9 I' P& D( t7 s
{5 o. M4 k' C* M& ^( g# O4 q
  //P以上级别才可以删除所有道具9 x7 f: ^: m  p. B
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 U& x& j) f+ `  G' p4 X}
) p7 ~  e; S4 T# k/ z2 Z$ M3 g! Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 q- x8 N+ z4 U' m7 W6 cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- Q; o" O) h5 |
m_wndMenu.SetFocus();
5 I2 g: c3 O) l8 S2 V  G}; r) l* j6 k) h* w
------------------------------------------------------------------------------------------------------------1 v) G; v6 g# N, \
*************************$ V  i% j2 E! ]9 r9 p* ?
WndField.h文件' R' q0 ?7 Y' m+ i4 m! W
*************************
% `1 s& l: }7 h" `% s搜索:BOOL m_bReport;  X% r) n' r0 v
其后添加:( V- ?  @7 V% H* K* P
CWndMenu m_wndMenu;6 i# R5 S- T$ K8 G: x$ W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ ?. z! @6 E1 W( d) _2 [4 z( E其后添加:
) z( e; z, q7 }7 m- m& t5 x! pvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 e6 X$ q3 p/ K( D+ r. F% j: a

! Y+ D" \* G. {* k, ]4 t! D* L0 h  x# M) b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 22:06 , Processed in 0.062502 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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