飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
% y. i( l5 V! k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& D" A+ T4 P8 q0 y4 x/ _2 V0 D- S: B3 g
struct sItem( H; s3 [0 R: [0 s$ M/ M7 Y
{
1 [0 T, l  M* F9 s$ yDWORD dwId;
* ^7 B+ X5 f+ x# l1 V* TDWORD dwKind2;9 J6 t, _$ N7 y/ c) [$ m0 w
DWORD dwItemId;
" [1 `: n  E$ e( D/ L! CBYTE nIndex;
& r3 I1 O. h9 K, H' rsItem(){
5 C7 {# I5 N5 x+ y1 |  dwId = dwKind2 = dwItemId = nIndex = 0;
$ E5 T  a/ j2 a6 b* V- |+ A4 V}
1 J8 v& ^' C1 {4 R! {/ `bool operator < (const sItem p2)
0 z7 ~& q2 l$ G1 ^8 o' k/ e{9 g- X+ @7 d8 h8 b: e
  if (dwKind2 == p2.dwKind2)1 f  O$ I4 u# E
  {
3 g" o  ?0 y& ^; ?; w! g4 v   return dwItemId < p2.dwItemId;% d7 x+ p+ B; R5 W- ^
  }else{
5 o! s" R/ {% W. j1 S8 H   return dwKind2 < p2.dwKind2;9 L9 P  ]' U4 i; |; i" {0 t" `& z
  }; \- ~- }/ m- n# W- Q: G2 x8 s
}& [3 R8 o" }0 l- P$ Z
};" B4 `. r. q: d! J- M- y
class CInventorySort1 x0 \, R5 J0 C2 U& U0 C  r
{
; `7 |6 s, U% J, E& ^; t# |3 fpublic:6 R, w8 ]) o( g  F9 q
CInventorySort()0 ?. I0 H4 d+ L/ }, g
{7 D. d% l/ K% i5 \" j
  m_dwPos = 0;- f* L! o$ q. F0 p7 x
}4 L2 q( l/ I% p$ |2 w
~CInventorySort(){}
3 o( e( J# T7 c) O2 kprivate:' ]6 k" @  ]/ I4 x+ Z/ O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* G7 G' t/ G0 k6 L9 g
DWORD m_dwPos;8 B9 J- ]' z; G2 H: ?/ G3 _
public:1 o% i: i. n0 ^& j
void Add(BYTE nIndex)
0 c/ G5 o/ p% P# [{
* K! ]; _8 e0 i: `- g2 J  if (m_dwPos >= MAX_INVENTORY)
$ z  T7 o: \  e3 X9 H- k- v# k% S4 l  {
9 @: V5 L8 O# Q0 }   return;$ k" P1 A' r( _, s% k
  }
, |  D3 t3 |5 }- Q: U  m_Item[m_dwPos].nIndex = nIndex;
$ K- T! Z! J# M2 `7 \  m_Item[m_dwPos].dwId = m_dwPos;
! Q! ^+ G) [  o+ y9 ~: }  m_dwPos++;
3 c9 H$ }( H9 h+ n1 m/ V}8 P) ~' y8 [+ g8 d: w$ Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& Y& ~3 p# r) s, ^' Z
{
0 r4 {; V$ p; W2 x8 c  for (int i=0;i<MAX_INVENTORY;i++)
' u- ]" \+ n" y6 ^  {
' Q0 {- |: q; ~3 a: d   if (m_Item.dwId == dwId)' g8 H* E! v. t$ c- t# q0 j
   {
" x$ b8 a" a5 j5 S8 I    return m_Item.nIndex;
8 W  \6 H* G- _% O7 I   }+ |2 v2 U2 u4 Z2 K; a" g  m# N
  }# F& ^% J4 U5 w
  return 255;0 S3 Y0 @  v; P- D) I: }2 z4 {
}, h- \6 }, h; `0 ~" H8 k1 c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! f1 W/ g( f% c" e
{
0 f' A' r1 B( Y5 X1 O  BYTE nTmp = 0;. s5 N. \6 ?$ l% {2 a7 z8 x$ G+ v
  bool bDest = false,bSrc = false;/ U$ \" q) ~* @6 [
  for (int i=0;i<MAX_INVENTORY;i++)( A/ ?- ^4 \9 m1 ]: @2 Q
  {6 w, Y) f+ m" k5 q' K! Y
   if (dwSrcId == m_Item.dwId)0 j1 k8 ]. Z2 t
   {
3 Q( a7 W, u: a- F9 U* ^    //id相等 则 改变对应的dest和src- q+ K1 `, F9 ?. o) _7 q
    nTmp = m_Item.nIndex;
, M3 B& L+ @& x( H* H. U3 f    m_Item.nIndex = dest;
( w  G7 W) [9 F3 W5 t7 @: X- R   }4 r3 s) l# C$ a
  }& m9 q* f, o9 E
  //临时数据保存完毕,交换开始
. {1 g6 r* ^; V& E' Z  ]  for (int i=0;i<MAX_INVENTORY;i++)/ @; B+ \1 x1 B' T' o* Q
  {  u& o8 V8 ], i, ~
   if (dest == m_Item.nIndex)9 N' i4 Q" |! o$ N# C2 u* F% e8 U. {
   {  }' m* b8 I9 n8 y2 f- U
    //id相等 则 改变对应的dest和src
8 {7 w6 R; R1 U. F5 A% ]9 |4 _    m_Item.nIndex = nTmp;5 N- ^* H0 E& M6 z
   }
; t: T# E5 x7 ?, x" z+ s+ t) F  }
& G: e8 A+ P! p' ]2 z}
7 {# v& B3 n& g( h};. z! o) K" E1 Q  z( `
-------------------------------------------------------------------------4 j2 _( t& v5 o3 d6 }/ E, H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ]1 x% b/ H$ Y3 G* j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 N: C: t5 Z% k( R+ q1 b/ G  e
紧靠其上添加:% x6 u& a4 P6 [4 b" k) U
if( pWndBase == &m_wndMenu )
2 o# T5 c' S+ Z{2 w) S6 f9 s: ~, W
  switch( nID )
6 J( B. E  z0 A0 ~+ l9 m# N+ @  {4 |6 n: [0 s/ b9 x
  case 2:- ?& b8 O5 ^- T1 \9 [
   {! t6 p+ e6 v9 u9 J( t7 x. u
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, z1 q0 c& ]/ p    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ e, ^4 ~4 I0 m* l4 m5 x
    {
5 r. M' u0 @! f2 j     break;: @$ F- b  x4 @- z
    }
4 X+ k( g. J: h3 U4 h- p& r6 ]- L) I3 M4 h    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- N! o( y: r; [
    {2 F1 R5 B  B/ m' Q" ?
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: N' A0 E& F7 t# Y
     if( !pItemElem )
$ S9 ^$ L2 c/ k2 y0 V" r      continue;7 G! L/ j( ^( f7 W; _6 W
     if(pItemElem->GetExtra() > 0)
6 B; |2 C, ~' F1 @      continue;8 ]& \! e, L! Z* K
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 n7 l( j: M; J2 P  z$ w/ E7 k! [      continue;, T+ {, T) _2 b
     if( g_pPlayer->IsUsing( pItemElem ) )  ^# Z7 \4 ]/ h) M3 \! ?+ j* X
      continue;
: I1 Y' y1 g5 w! b     if( pItemElem->IsUndestructable() == TRUE )
+ m: O8 C0 d# f     {
5 f0 S) c1 z/ A# @9 R: U7 f      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- x' S% N$ l6 z, K# p! H& A7 m- {      continue;
+ u. G& Z/ i! z" t( x6 _* ~# @2 W     }: v+ h( G9 K, L# i
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 W$ c+ @# i$ F    }
, Z1 i" h. Q! D$ G' J3 v7 ^: H    break;
+ Q: Z# v& N2 c   }0 q6 v4 k& b& ^/ c# s
  case 1:) f6 V. ~- e  V6 e$ ]" u
   {
. N+ H. ~5 B0 [  h; u    //整理背包3 z; s+ k, K- n% L3 ^% g/ ~. a
    //////////////////////////////////////////////////////////////////////////
: l% u4 G0 ?6 W8 s( W3 |    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& }( \& Z6 @5 c4 q; d& F) R7 o
    //////////////////////////////////////////////////////////////////////////
% L% V0 K( x: U* |- c1 t: X    //////////////////////////////////////////////////////////////////////////
" H, D2 T2 \5 @# z- {    CInventorySort* pInvSort = new CInventorySort;+ X* \( i5 ^' P* Z* U
    vector <sItem> vItem;
, a8 l) Y8 _6 S, J    vItem.resize(MAX_INVENTORY);//初始化大小
1 P. O/ S' I& _5 k0 Y3 a     //////////////////////////////////////////////////////////////////////////" J) ^1 h: k9 B8 C: b7 d
     //填充数据1 K& G% j- g9 H4 o
     for (int i=0;i<MAX_INVENTORY;i++)/ @3 p' z/ s6 A. N% A- |$ K
     {- r% T, S. t( I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 Y6 }# _- d* R; a      if (!pItemElem)# E' l* ]3 U5 P% F
      {1 U  m/ {8 O+ }" \
       vItem.dwKind2 = 0xffffffff;8 m6 Y1 U9 w) r+ C7 m: J# G- U
       vItem.dwItemId = 0xffffffff;, @# ]: U& E% ?# u# K
       vItem.nIndex = i;
: g  R8 x. X1 p" x$ v8 x7 r      }else {
7 }8 Z: ^+ L, o6 @. `, B       ItemProp* pProp = pItemElem->GetProp();
8 d/ E" L) T- k7 C- V       vItem.dwKind2 = pProp->dwItemKind2;
3 i9 p3 h! `1 r; H& i       vItem.dwItemId = pItemElem->m_dwItemId;4 `! _3 l; K0 E7 g% B7 g0 C! R
       vItem.nIndex = i;% `* I0 T( i6 j4 \
      }
* q8 e, Q: H- {5 C) ]4 F: J9 K) l      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. I( e) C3 p8 d3 ?9 [# s     }
4 t$ s6 D$ x1 Y2 c# l% ~  `     //////////////////////////////////////////////////////////////////////////- n0 l. t+ u1 ?: \
     sort(vItem.begin(),vItem.end());//排序
0 E" l* K/ \9 K9 ~     //////////////////////////////////////////////////////////////////////////# t$ J3 N/ D& C3 D( s: [) A
     //交换
3 P. H. |$ \: g% J3 B5 m/ L     for (size_t i=0;i<vItem.size();i++)  m/ \% g! A' X' S: B6 C# [
     {- c' E7 h: A+ P! b
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) ]$ q% [" W* A, y" L' H
      pInvSort->Add(vItem.nIndex);
% \; a, z( k2 [/ n* }" w) {0 d     }- d: v4 L. _$ W$ q3 r( }; _
     BYTE nDestPos = 0;. v- n* [& s3 G9 [+ V
     for (int i=0;i<MAX_INVENTORY;i++)6 @* I/ {/ Y3 |/ ~4 [9 Z% S2 k" \
     {" `! V% _  `$ i  p) T
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' u9 y% w3 ~8 i) u* ?8 t, ^
      if (pItemElem)
9 w5 b- l7 E  j. m" U      {  ?- d0 K9 s) ]4 v" w$ L
       if (IsUsingItem(pItemElem))$ d/ Y% g7 c7 D( q
       {* |( U% a( f$ _7 h9 n- d( R
        //这个位置无法放
0 H% M; b9 M0 L' [4 p        nDestPos++;
# M4 d5 e) v/ a       }- Y# [" u) o6 L0 s9 ^% Z" O9 R
      }
! t8 e/ d+ U9 H7 S& w. [, _. H      BYTE nSrc = pInvSort->GetItemSrc(i);
$ d4 e1 U3 e! K2 r      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. _+ X. ~( `. C
      if (pItemElem)
% Q) G* Z& L. z3 L9 O      {7 M1 j: E& m- N
       if (IsUsingItem(pItemElem))
' T# @9 Z6 W- u) s2 k& D0 |/ E       {) X0 ^( u! P) O4 B3 j
        //这个道具无法移动,跳过
3 U6 K" h' i' ?+ A        continue;* R: N# I0 _) x" n4 w. s' X+ Y
       }
0 M3 m4 }# S) I      }else{
) E- ]& U' u  w' y& }, C       //空位置 不用动: C, A5 k' M6 P: V% j) x8 |
       continue;7 n5 W0 a9 I; ]0 a7 C; L
      }8 N' U5 K- N9 d3 H( F& H7 W
      //////////////////////////////////////////////////////////////////////////  X# V+ M# O* s
      //开始移动  ?) a- b9 V; c1 T9 y9 i
      if (nSrc == nDestPos)5 Z) t  O6 p. j4 o$ r; C+ s! W
      {5 b5 w6 i6 Y! O! P- |# N1 T
       //原地不动
/ M' L3 \% ^. _       nDestPos++;0 m3 [6 j8 B* ^; O; q, r$ x, u
       continue;4 F: p( Q0 x$ p! L
      }9 e  N9 {4 J7 W$ ?; }' ]3 V3 z
      pInvSort->MoveItem(i,nDestPos);7 k' @+ S% f  ?* h8 ^
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 O. q9 v5 Q! h$ @- L! ~      Sleep(5);; n  W, J. E# q) t5 d% p0 Z: q
      //Error("移动 - %d->%d",nSrc,nDestPos);: k0 X- I* h, j9 p, R9 @
      nDestPos++;& `" S8 r+ M  r, k
     }: B+ G- D( i* |9 `6 D! S
     //取第一个元素的信息
& y* ]+ z5 D1 c7 b! ?5 D     /** a# ]. w4 R1 Q+ s) Z
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  ?+ r* `+ p! S5 k, A
     {3 Z  H: l0 U8 x" k" e" I
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, y: D1 K, M/ l1 e$ }      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 P: [. k. }+ K+ o3 Q     }8 \" Y) w, z2 i
     */& C: V1 Q/ p8 y& y3 y  p
    //////////////////////////////////////////////////////////////////////////
2 f' |) V+ E) h- ~    break;
7 V+ I0 n1 R' O   }
9 j; W& S2 g" x  } / P6 z; l$ _! d' g+ l. k3 z3 e& \2 ~
}2 B9 ?/ t& ?9 p! y6 S9 q$ [- r5 L
m_wndMenu.SetVisible(FALSE);
# }: L: s9 A7 K0 d: m0 a8 ^& H7 L7 I: N2 `8 N2 k
--------------------------------------------------------------------------------------------------------) j! G9 r! B7 Z) E! G, w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! r0 C' f9 ]/ q  t# p{' F" ]; D: N8 ]( u
BaseMouseCursor();: Z/ E" d8 U. X4 N, a  K
}
; `3 e2 r2 K7 c) k' {在其下添加:; [& R0 d- |4 j' v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 `% F- ]0 j* Q; h* A% E( S* @" t6 n2 F
{
' O9 Z! p0 g: ]5 ?6 tm_wndMenu.DeleteAllMenu();
: [' J+ a1 S& s  x4 o1 Sm_wndMenu.CreateMenu(this);  y8 U; _/ V7 J  B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, @; S. Z: m7 {7 i
! e1 ^$ a; l* g1 ]+ t6 i- t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 J% k: X) G" o4 \! _{9 i. e* s  H2 K5 E2 r
  //P以上级别才可以删除所有道具  ?! ?( Q  @! V3 ?3 W+ w
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: \: E) K* x! }' J( g. q$ H
}
  K$ G) F  v3 m1 _6 Y1 w* j/ W9 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" D! o4 p& v3 \8 Y" r8 lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 G/ E9 |. x$ O/ ^, {2 jm_wndMenu.SetFocus();
  D  X  }0 U. `1 Q$ }9 g7 h}
& H* `7 J1 c+ D# c( V4 e6 M! p------------------------------------------------------------------------------------------------------------
5 s+ \( ]  C# s1 P" P3 ~5 D*************************
1 V- z- ^/ |# J9 sWndField.h文件$ R4 {5 r5 g( X( i# {/ L9 |
*************************' q: f+ O% k  b0 e5 t1 |! G) A
搜索:BOOL m_bReport;1 _9 m7 M/ e. m$ ~
其后添加:
/ K  E0 @6 m" p$ Q$ ]CWndMenu m_wndMenu;
: d  k) _; G( o- J( L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 L  g! y! n7 o$ ~- f8 X' k其后添加:4 b: b0 M& a  u' R
virtual void OnRButtonUp(UINT nFlags, CPoint point);, B0 u% }0 l' I6 H% _0 W

' _' O# i) v. F
9 O9 F( j/ Q/ D2 x8 @3 L! d

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 00:15 , Processed in 0.071428 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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