飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' s8 {; W, }3 l" I2 l8 l- C6 }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 l( z7 T- }' w2 ~+ @
1 n0 `; F$ o5 V6 F" ?# o! k
struct sItem% F: G& ?# C! Y
{
* Y. j. n7 H; r+ I7 `, v9 E% bDWORD dwId;+ L8 a' A( [( g" b
DWORD dwKind2;
1 w4 p  O; t$ p* i/ zDWORD dwItemId;: T% Y0 y2 G4 ]: p/ `0 S
BYTE nIndex;
! K9 C* ^# t: G6 P* E* LsItem(){
% ^0 j: O, p% s  dwId = dwKind2 = dwItemId = nIndex = 0;" k8 S6 j( f( l$ d( i& I! ]
}
! w' \5 C  m+ e' H1 M7 ]bool operator < (const sItem p2)
1 `/ w& _! z/ h1 H8 b{
- f* b5 V" C4 @. g6 ?* ]$ o  if (dwKind2 == p2.dwKind2)
1 f1 T0 g$ Q) f0 {  {5 u1 y& @0 |8 a1 E8 Y
   return dwItemId < p2.dwItemId;
8 M+ N$ _8 X# L- X9 @6 N, p& v  }else{
6 ~# p" F& ^5 l   return dwKind2 < p2.dwKind2;
5 G- f* Y' |8 k6 ?  S. B/ ~  }$ |. {" w. Y* q2 }) O  t2 O
}0 s. ]& x- y( S, W6 i/ ]* O6 @
};
7 Q. S8 V' M; Dclass CInventorySort2 c3 i1 _8 Q) T1 j6 p2 p; I8 N
{3 O: C% ]: B; B2 F2 n7 S* A
public:# Q3 V. n( t5 o
CInventorySort()
" H. v* @, C7 U{
; P2 {% `+ a. }5 s6 y  v! J  m_dwPos = 0;7 H/ Z) _/ }5 F. g( Z
}
0 [" f+ F9 T7 L) j7 F~CInventorySort(){}5 W+ S* Q; v: e
private:1 x# _5 K, m/ Q8 E' ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 K$ L; W+ R! M9 g1 |; b/ t) z
DWORD m_dwPos;" |% @& G. l  W5 p
public:5 u) u+ |* v  F2 X
void Add(BYTE nIndex)
) s: J; e. l- K! T9 a" q{. s7 t$ E: L  b, B+ ^3 U
  if (m_dwPos >= MAX_INVENTORY)
7 \- b, u, H! a  |% W) @  {% w# G$ ^/ s5 k! r$ H) H: @5 Y
   return;, g) b* v, j8 j, J/ G
  }
+ |- q; O0 E9 K& |* ^" `# F  m_Item[m_dwPos].nIndex = nIndex;
: u& [! Y$ `! _  m_Item[m_dwPos].dwId = m_dwPos;
! r/ X& d" Y; E7 a' v  m_dwPos++;1 k$ V5 |; H1 j* K  U; V. }/ g
}
& h. a, [6 n. I4 a+ kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 K4 o7 f8 k$ ^% K{, @1 k5 t( L; Q8 i
  for (int i=0;i<MAX_INVENTORY;i++)
4 [- @% U7 O" x9 r4 z  {
8 _% D3 r8 \! h- J   if (m_Item.dwId == dwId)1 `% q7 \! @9 ~' N7 H  Z9 M
   {
: q0 Y6 E4 M9 e! k    return m_Item.nIndex;6 {! W. t" H: m; Z) s; m
   }
5 @2 c0 ?* ~6 ?! _" H& ~; J6 b1 x  }9 o( h; M% B0 C2 w9 g
  return 255;
0 t' r& R/ `. |! X/ v3 R! X. J8 Y}6 j0 ], W+ n/ F6 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 b/ V! K( z9 \. C+ S
{+ @9 E/ x+ g" r2 }: _& Q. Y# g
  BYTE nTmp = 0;
2 N% d8 a9 d% Z, X" _& I  bool bDest = false,bSrc = false;
6 O0 \9 r: z- |  for (int i=0;i<MAX_INVENTORY;i++)
$ w0 j, d( j( x. I" Q  {
0 \0 U$ F1 d# B* ?   if (dwSrcId == m_Item.dwId)0 m' `' w" p# O! {1 M' I1 a
   {
9 ^9 ?3 r, Z# k: ?    //id相等 则 改变对应的dest和src3 P! }, u+ d8 F4 z% i# G
    nTmp = m_Item.nIndex;
! N, H* G* M# x! ^. A. d) X    m_Item.nIndex = dest;" m7 }7 E" D+ O: c; _5 T- z
   }
+ W' V' y" y( S+ l: S, R  }
: s: N9 ?9 u: ?" i# Z5 ?0 _8 j% S0 ?  //临时数据保存完毕,交换开始5 N! h- k, p7 b, t# q3 J8 @
  for (int i=0;i<MAX_INVENTORY;i++)
  N9 {  C3 Q6 R  {
1 M5 Z) w& {2 I6 M   if (dest == m_Item.nIndex)! f9 c  y2 E6 S0 Y$ U, z, E& a
   {
- W! x, F8 s- I9 q& x) j- F& U    //id相等 则 改变对应的dest和src- f3 h: B/ `: k) z* P8 v0 i3 x  X  K
    m_Item.nIndex = nTmp;
4 x/ M1 x  o- D3 O( i- h   }+ H4 m% D7 x( D1 `/ z
  }
9 V; B" P" {4 F- p- V}" [% V+ B5 l, q* ^. {5 ~
};
/ G$ g" ~. |1 c& j-------------------------------------------------------------------------
2 b6 u; q9 F4 v0 x0 F% `' M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 C/ Q! o* \' n/ E) l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; A# B8 u. Q9 O1 T% K
紧靠其上添加:
" G  H+ m& j- ^if( pWndBase == &m_wndMenu )8 k1 |, |5 h5 d, O$ p$ N
{5 g0 v# |# }* m/ S7 u# W; l
  switch( nID )
* g" z2 z; F2 f  {2 U$ h, D+ P, I
  case 2:
8 f' r: t) O- p) {8 A/ G   {8 @& k- C3 b$ l4 _4 F
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ d0 G- L2 y1 c6 v  g( T9 D4 S
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. V0 @2 e4 a8 [* u& R( n    {1 N7 X$ G4 c( Q9 s1 k& n
     break;
/ i, D+ B  s: ^$ |    }1 z7 w5 d; q; A4 Q' K
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ n" g3 j% M* \3 C6 \7 y9 g! j
    {' K7 d2 d6 ^' J- G3 J/ y: d
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) E% u1 N& Z9 A4 X" q$ _     if( !pItemElem )' i1 ]& M. n9 \- c
      continue;
/ P/ T+ [4 ^" f2 B2 k& \6 R     if(pItemElem->GetExtra() > 0)# E2 X8 ]0 A/ J& D
      continue;
9 B- T% ?4 h- R  k     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: ^1 t& s; _1 }5 `+ K4 o      continue;  U/ `( \& P9 m; Q, s% {
     if( g_pPlayer->IsUsing( pItemElem ) )6 ^+ \) z. G, d- X
      continue;- E3 Y( l. w, v, N/ R
     if( pItemElem->IsUndestructable() == TRUE )
. p. x  k6 m, i* {# ]; d     {( C7 f2 E  [( g% A2 p4 i; v
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 x" H0 I% c9 L  Y4 J. i      continue;! a. D+ @7 x) l" {% z% I
     }/ G) R5 }0 S6 e
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 m8 Z! \2 y% R( x+ z
    }
. [3 Q) ^; b0 G3 n& c    break;! N" ?2 j) K1 S6 k! E
   }
# ]! r- A4 Z. C/ x3 a  _9 t  case 1:
- F* V4 F) W4 \% J* ~' m   {
8 L4 u  n* Z/ o3 X+ ~/ B    //整理背包
) t' B; ?. ?7 V# W( N+ _    //////////////////////////////////////////////////////////////////////////
) c5 J, W4 \7 d+ B& u+ c* _( k    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 T7 S( T& Q$ B" \1 O( z# Y- a  x
    //////////////////////////////////////////////////////////////////////////6 b: L" W$ n  J
    //////////////////////////////////////////////////////////////////////////3 U; `9 i  u4 T5 t; ~
    CInventorySort* pInvSort = new CInventorySort;+ f/ T0 u' ^- J" P; z. Z8 [
    vector <sItem> vItem;
2 F5 b; K7 j$ @% L0 u& @/ E    vItem.resize(MAX_INVENTORY);//初始化大小
, ?2 i/ Q5 Z" I, a     //////////////////////////////////////////////////////////////////////////
5 M( o' l, k0 T3 B5 z; H     //填充数据
9 r1 B9 p0 B+ T2 i, G. @2 K1 k( p     for (int i=0;i<MAX_INVENTORY;i++)& M  K) \0 [+ y) t' d
     {
- s5 \. w$ e  f& `& k& N      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ l# U, V* B# N# w      if (!pItemElem)) U4 ~$ A4 z+ N9 k0 p
      {
+ Y; B. y2 Q0 s- J       vItem.dwKind2 = 0xffffffff;
5 s! x7 {& j- d5 \% M; }; t1 L       vItem.dwItemId = 0xffffffff;1 [5 Q: a* U4 U! K0 h
       vItem.nIndex = i;
+ k  ?5 V6 r' n  X) D5 C2 [      }else {2 V! ?7 M4 t  f9 ~
       ItemProp* pProp = pItemElem->GetProp();
- q$ G  U) C1 ], q& C       vItem.dwKind2 = pProp->dwItemKind2;+ B9 F5 k6 z2 Z
       vItem.dwItemId = pItemElem->m_dwItemId;  n  s& N2 W" U: \, m0 f
       vItem.nIndex = i;  {/ z6 O7 z: x! }2 l7 S
      }# }/ Z$ c8 q: W; B
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( f' K; A+ j* c& b. l$ R     }
% W+ V& c) I' U8 P. I     //////////////////////////////////////////////////////////////////////////
" U! f% \" |7 ?% m* e9 Q5 _     sort(vItem.begin(),vItem.end());//排序
; T" z/ c% s! v" e2 J1 A  i. Z! a     //////////////////////////////////////////////////////////////////////////
5 ?% R) b  ~4 ^7 S, k) l9 R     //交换
& D4 Z* z7 L0 G  ?; L! e     for (size_t i=0;i<vItem.size();i++)7 @+ T3 d+ K5 h8 ?. ]* Q8 H# |
     {
: j' X5 @1 L% w- u      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' l5 v9 U/ u0 f- |+ {" }      pInvSort->Add(vItem.nIndex);
! }* u7 C2 H; G1 O( L     }
: J$ i0 @, ^: h+ R' K/ ~! r     BYTE nDestPos = 0;6 l2 i  z' Y' c5 X5 M, w; V
     for (int i=0;i<MAX_INVENTORY;i++)
1 f  G$ C: n' ^6 Y8 z- }     {
! B+ l8 O! h9 X  R& i2 E: ?: x) e      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; L( m: N0 B2 E# \5 T# Y! o      if (pItemElem)
# q0 F* N  e+ m; ^. M9 L      {
' l' n, W6 g9 b' [9 s       if (IsUsingItem(pItemElem))
/ q; v: x" _" w2 E5 E       {* ]: d  d% z  n! S8 K
        //这个位置无法放" P$ f; w$ s% T$ q" m
        nDestPos++;
/ j$ g4 R5 U) L. r       }
! U4 q' f4 K* |  O      }5 ]- h& l  H# M" g% P5 I' l
      BYTE nSrc = pInvSort->GetItemSrc(i);
/ }( t- H3 i, `8 o1 G. M3 V# {/ M7 c      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 a  ]. l* A/ ]$ x9 C+ R
      if (pItemElem). ?8 H9 x1 Z- L
      {
& r& J  v# y# R& T1 A$ X1 G       if (IsUsingItem(pItemElem))) a7 s5 @* @9 w
       {( {( a& m+ ~9 ?1 ^7 }& U# W
        //这个道具无法移动,跳过
+ e; E, N/ s1 b- v& E  d        continue;9 E0 k; W; i/ c4 x! C
       }- i5 y' G+ p: y3 }' L' z$ Y2 x" k
      }else{; [! U  i, E" W
       //空位置 不用动
# ^; {# F6 s$ v1 R/ L7 W       continue;' P2 C8 z/ Z. u8 @
      }
9 j' U$ c8 b! N0 |      //////////////////////////////////////////////////////////////////////////# o1 m8 t5 }8 U% R# K9 \9 X* C
      //开始移动3 K$ N- T! h; U7 e
      if (nSrc == nDestPos)
: o! R3 L) `; o! C0 P      {. e/ m$ s" P: d* ?2 m/ {
       //原地不动1 z- [# X; f4 r9 u6 q$ B
       nDestPos++;
9 a1 Z' V2 X$ ~+ e1 P$ b8 K6 g* d0 y! D       continue;
) H  |% u+ E( n& Z- P      }  I* o' U; V* I7 K/ h& R9 |
      pInvSort->MoveItem(i,nDestPos);
4 |4 P) r7 b1 L# y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# l! N7 P! C0 r3 F      Sleep(5);0 Q% a3 h" J- g5 J3 k
      //Error("移动 - %d->%d",nSrc,nDestPos);, R0 L% M1 s" x; i6 {' b
      nDestPos++;8 F; y- p2 R+ |9 F" P6 p' n
     }# @0 W1 |! L/ i/ o2 K- _5 J( D5 X
     //取第一个元素的信息
3 x& m! r5 ]/ s0 L  h     /*
! Z, Z2 P0 R/ p% |4 t5 T7 s     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% g' w/ D( l" W9 O( I     {
3 D( H" E. D/ ^" C      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* a) ^( g- F8 i/ n9 D* G) ]      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 u! r6 y' {3 m: f/ {* X2 {     }6 A" w2 N( P. V! `, @) z4 @: A
     */
7 L% ?% k% s! {+ j/ T; X# z    //////////////////////////////////////////////////////////////////////////
5 o  k2 Z$ g1 s: ]    break;
' G! |( {% g; y  D: a   }: y& ]1 |. K9 s8 z' e
  }
& `; i7 m$ ^9 g}( b' r2 ?1 g# I1 ^" s$ T7 d: b5 Q
m_wndMenu.SetVisible(FALSE);
! i! h' @" u; X+ O% _1 S/ `7 z: ]4 M  O: o( I
--------------------------------------------------------------------------------------------------------- S& D5 e: x  X; A  P. X/ {: G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), K4 S' F; I% ]1 D, ], R6 c  |* ~
{
0 L3 c( @5 h. U3 |2 ]6 dBaseMouseCursor();! w; x, B- C+ Q# Z
}
( o  `0 D) R+ j4 W在其下添加:
! N2 j, E+ u1 n1 ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 r2 y) p( [$ @* v( q: `1 @, U{" l; q* y' s, O' x" Y- I4 y
m_wndMenu.DeleteAllMenu();0 E6 D% s1 v1 b  L0 B8 k, ]% t
m_wndMenu.CreateMenu(this);0 ~* b7 z* H' X$ @1 ^# e1 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 A" {# W. ?1 L; a- N( m- N, G

9 D! b  g% C: g, e$ M' lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# a1 ?$ I8 A& u{  O  x3 `9 q( l! V- ]
  //P以上级别才可以删除所有道具& O5 u: s. H  f% H' H) b
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 D+ e7 j# l5 w6 t1 u% l" P$ p
}
% f& A3 g7 K: p! O1 }( km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: o! ~6 C4 T. M, R4 o, Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 [8 b' S/ O/ c1 o" gm_wndMenu.SetFocus();
, E" o6 e5 c8 o, A}$ X6 a( V& [# p8 M1 D
------------------------------------------------------------------------------------------------------------; Q4 f: w3 W/ Q) N0 i9 b+ V
*************************. v- g& z& i, H8 M
WndField.h文件
' B- Z& |1 {6 X4 e*************************( ~+ l; c: q# w5 N$ ?
搜索:BOOL m_bReport;
2 M1 r' E% G( t  W2 J其后添加:* L) J* `7 G# ]9 x4 e
CWndMenu m_wndMenu;* Q3 b3 [2 @" G0 _* p/ R6 f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. Z4 r& H6 W& b0 S
其后添加:
: ^0 o6 n; Y0 Vvirtual void OnRButtonUp(UINT nFlags, CPoint point);' z4 s. C# O7 T4 e9 P3 }

) Q: S9 r) E1 W; |. n6 k+ e5 w' B+ B! ?! {# Z" z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-27 06:05 , Processed in 0.067089 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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