飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 ^. P& u5 s! a; V$ T* o% d8 r' a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 m3 Y& Z# b( |

, z* u2 ~7 u/ ^% X( gstruct sItem
3 a& c1 z$ S5 B. Y6 @{
+ i1 D+ N' ]9 r1 NDWORD dwId;/ W, k1 p7 q4 V
DWORD dwKind2;& N& [9 u; g5 x( m8 O( r- ^* y& e
DWORD dwItemId;
) Y9 f( u1 M9 aBYTE nIndex;% h! A% B8 t' m: Z) _! M5 f
sItem(){- [7 G+ Q, d+ h! e
  dwId = dwKind2 = dwItemId = nIndex = 0;5 M& r# L' t# b5 p
}( V% F6 k5 I) I( V# p2 `
bool operator < (const sItem p2)
, t& U! F# @, @! {+ `* ~{
1 k2 s+ X9 a, p7 W0 X' k% k" W  if (dwKind2 == p2.dwKind2)* K& p  S3 A9 T& H- I8 k
  {
0 O. ]3 g- W/ p1 @* Q   return dwItemId < p2.dwItemId;
6 c0 J! H1 `- L8 ~  }else{
: g7 o- |# \8 F" `5 k" D% T   return dwKind2 < p2.dwKind2;
; ]0 |+ L1 Q3 O# t: h4 p  }
6 k8 X# `: L5 y}
" ~* z( b7 A& U" l, s! h};
& w: e% f7 q$ ]  `* _8 }. K' Iclass CInventorySort
& F/ l  V+ }+ V9 E* Z{0 C% \7 J/ |7 g/ k2 h
public:
) u" k1 X, v4 J9 pCInventorySort()( U1 t0 r4 F2 P8 X9 A7 `
{
5 I4 O) s  S! J. O  m_dwPos = 0;5 G( a/ l  E" y9 |& q; L
}$ C9 c) w, N5 @, q. n+ q
~CInventorySort(){}
4 l6 H8 ^- y4 ~1 wprivate:; C( g3 `* ~2 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ [* C: a) F$ [( e3 LDWORD m_dwPos;# ^4 e1 J8 j1 ^3 d/ i& ]
public:; a4 x& y. g' h9 B6 O: F5 R5 Q* B
void Add(BYTE nIndex)( P2 l& S) i, k. ?; V
{
! m9 s) r* S# x. \  if (m_dwPos >= MAX_INVENTORY)
0 J6 ~- D/ f  f. a; q  {( n- N2 F- w9 a$ d! C& n
   return;
+ i  r6 x& N) d- Z" f  }
8 X8 K) v$ F- ^  m_Item[m_dwPos].nIndex = nIndex;2 _, J. E  y! `) g
  m_Item[m_dwPos].dwId = m_dwPos;
9 \) \. n7 T: A3 o% s  m_dwPos++;
6 A6 h- ^: e7 s9 V6 n}* e' n& u6 z& _" P+ o8 {! @* X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ z0 |! x; ^* ~9 Y5 q! o. I9 j% |* U
{
) N& h) D! ?4 v5 r: P  for (int i=0;i<MAX_INVENTORY;i++)
* T5 E( I5 b4 O8 t9 `1 C3 U  {* t. l" K4 `8 \/ o
   if (m_Item.dwId == dwId)
# T) Z9 P! u  f7 }8 x; P5 _' O   {
( T( R6 q; s, |    return m_Item.nIndex;. I2 O5 E9 {8 k6 F- L) {+ m. r3 o
   }4 G7 ^$ z/ o4 K, K# [
  }% l( i& _1 A9 w7 {# W
  return 255;; t; E$ I  _8 P1 w3 z% N
}# z" y0 w; b! L- H' j. W# T# g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" h0 I& g/ q) |" Y5 x- d+ N{
$ S2 U$ i) V! ?3 @) U  n$ U  BYTE nTmp = 0;8 C4 V" |) ^( K! X7 K- J
  bool bDest = false,bSrc = false;  M$ M7 `3 T% e- K  F: {. X+ n
  for (int i=0;i<MAX_INVENTORY;i++); z: M8 S. X( v+ Y
  {
+ Q. l- H- i" e# i2 Y/ I- n   if (dwSrcId == m_Item.dwId)
: ]' i" `( I( ~1 y* e   {
2 o; K. w4 ?) Q' z( i    //id相等 则 改变对应的dest和src
7 Q! }( w) m' S    nTmp = m_Item.nIndex;: }( x% u7 u1 {3 f& p
    m_Item.nIndex = dest;
& j! T! _$ Q, K; z( F& b; r   }$ b9 M  I: l: s8 Q; _2 ]
  }3 q; g" ~  R- f4 }0 @" N
  //临时数据保存完毕,交换开始
; q- z0 t% H# v2 f  for (int i=0;i<MAX_INVENTORY;i++), @- i; w) r' v
  {
! J8 o, D. t7 ^- b  N; ~. h! Q3 r   if (dest == m_Item.nIndex)3 ?4 X& g. t. N, g% `. _% W+ D: M
   {
7 T/ J$ h# {. ]    //id相等 则 改变对应的dest和src
1 z& q) C: E( I* K% v; L5 y9 e    m_Item.nIndex = nTmp;
& q$ g& M/ v; S. K; T   }; H: x: V; R# _/ C9 V% f
  }
5 ]) r2 J8 b) b4 j! D}! T/ P- B1 q9 g( W% ]* }- Z( u
};
/ I( K' t3 h) x& M  l4 l# Y$ j-------------------------------------------------------------------------% [. n' N+ x% H- _' D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" a& W2 z$ ~1 n# i: G; f" }9 e2 S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ B0 v$ Y. N1 Z' b) e
紧靠其上添加:2 C' f4 }: L% I5 A
if( pWndBase == &m_wndMenu )
$ V+ x9 ?4 N' {7 ?9 ]% T{
/ _$ a5 K+ |) j1 |2 t2 \" i! {  switch( nID )/ `/ Z# }$ K" l% x4 i4 G) `7 S
  {
3 o- ^; R' S9 b: K1 G$ }  case 2:! o! T, X% Z8 P
   {
% ^: n$ X7 N6 `: a% m' X! y    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 Q* @. }6 ~/ u& x. _' M; \
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 }: D. E: `3 [* h
    {9 ^( v' l1 q5 P
     break;
0 }: ~7 {# P$ Z8 u! J    }7 B& E6 O1 h7 z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 O0 T7 Y6 a' _- R" s
    {3 f2 Z% p, f1 w! S7 g
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" B8 p9 R/ r3 r1 |% }* i
     if( !pItemElem ): @  x/ w+ m7 p2 }# ~
      continue;
! F! c' v# e1 O/ `: a3 I     if(pItemElem->GetExtra() > 0)
& w( d! n7 R5 }) _. t      continue;+ z7 j$ l2 b' v  F
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 c9 n# h' F) h0 d2 P      continue;+ ]' N( N; o$ ^. I7 n8 b
     if( g_pPlayer->IsUsing( pItemElem ) )4 K; _- V1 J- s2 ~$ {
      continue;
& C9 D6 {2 r0 k' ?     if( pItemElem->IsUndestructable() == TRUE )6 M) f  r5 O" l/ d2 n1 J
     {" B' `. u8 A# I" l, g- s
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ m/ M& O& p9 }, q7 x1 t6 R) `      continue;' \2 Q6 l- k% d9 m. m' `" N6 f* @
     }& k  k: _6 C# V+ h% }4 w
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ Z. f! ]- m* u  ]% L; t, W    }- H6 G9 g7 w7 f. m8 T
    break;
) D" b" u0 K+ h6 V  f8 f/ C   }, N* L+ ?1 {6 O1 ^. a* H. o
  case 1:; y6 u4 D3 u' b3 L3 s
   {
; F* E4 I4 H3 r: D/ a( s: W0 V7 T, m    //整理背包1 e! b' k# x/ G' Q7 \
    //////////////////////////////////////////////////////////////////////////
! P; H' \# i- q2 h' }    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ o6 k% X2 P: D    //////////////////////////////////////////////////////////////////////////+ o/ P% g& J4 @9 z' t4 _
    //////////////////////////////////////////////////////////////////////////
5 O' ]$ V4 G! k$ D    CInventorySort* pInvSort = new CInventorySort;
" S+ E1 B; O: D1 ?+ c" ]# x    vector <sItem> vItem;
! K& ~+ K& L* A1 a    vItem.resize(MAX_INVENTORY);//初始化大小! D! V9 o# v4 A+ W9 I1 u
     //////////////////////////////////////////////////////////////////////////
9 }3 T: P8 x5 d3 V     //填充数据
- m, r" E& M" s9 w     for (int i=0;i<MAX_INVENTORY;i++)6 m+ t: G: I# d: v: d' z5 N8 d
     {
- R! Q& ?2 N5 Z* C& S+ M      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 l' H1 u8 w- Z# M
      if (!pItemElem)
: U  ~) y, |' C2 R      {- ]+ J& n  S/ T4 Z! p; m3 L
       vItem.dwKind2 = 0xffffffff;, w& H7 n  X. @2 W/ @# |% I3 Q
       vItem.dwItemId = 0xffffffff;
& R  |) L  D  f0 ^9 W# d       vItem.nIndex = i;
9 a' O- [2 R) Q      }else {2 U" @; Z3 ~$ D! Y4 Q; G
       ItemProp* pProp = pItemElem->GetProp();, M; X* z) u2 }3 i- A9 R
       vItem.dwKind2 = pProp->dwItemKind2;' D# d, A9 m9 F$ j) K
       vItem.dwItemId = pItemElem->m_dwItemId;
4 Z% H* W( P4 Y& {5 C% g0 t       vItem.nIndex = i;8 Y4 P$ I6 q1 f) ^
      }: p+ V) B0 C/ Z* k) \$ e  p# g" V
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 Z$ L' ?. X9 W. v, j, M
     }
8 y3 E" r/ f# t2 P) A     //////////////////////////////////////////////////////////////////////////# C4 l5 ]! d% K4 _
     sort(vItem.begin(),vItem.end());//排序; G7 Y" d9 N8 s' C) n' W; h
     //////////////////////////////////////////////////////////////////////////; ?) |( N5 O0 L/ D: `
     //交换/ B0 u3 w- T" ]  Z0 g6 k5 r$ ]2 V
     for (size_t i=0;i<vItem.size();i++). e* W; S  j4 h
     {$ ?  r$ ~& v+ _7 L
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# [7 V5 |. @0 A2 V      pInvSort->Add(vItem.nIndex);" ]1 x5 E. M1 H  S+ e+ r
     }' ~9 |, q$ t5 a  z5 C5 J$ u
     BYTE nDestPos = 0;
1 T5 |' B! n- ?! \- V# [: V' j; M; h     for (int i=0;i<MAX_INVENTORY;i++)+ S3 t: \% _9 n' \$ f3 v/ k! s
     {
$ @2 z0 X+ s2 D& v      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 x; E; m) J1 ^* [2 G      if (pItemElem)3 D* r- ^7 K+ Q6 E& q  Z1 L+ E
      {
) `% {0 r3 H8 u& Q       if (IsUsingItem(pItemElem))1 ^+ w3 h; Q# ]  G; e. }
       {6 }5 n$ L/ m& y6 q
        //这个位置无法放( m- M  n% l8 E% w) [
        nDestPos++;' x: Q/ [# R8 U
       }9 M" m8 C( Y) m6 O. ]
      }8 n6 r: Y' i3 N( w* p% |
      BYTE nSrc = pInvSort->GetItemSrc(i);
9 d3 a& L, N$ F3 u5 L9 l4 p9 M( v  T      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) f% X% ?; M# |& l. j4 x2 j2 m      if (pItemElem)
0 }; {. h5 W+ |+ T: [* W2 G      {
9 Z8 }( s, @& s6 `5 R  Y3 `4 g       if (IsUsingItem(pItemElem))
. V- p% T8 v0 p9 o       {
. f6 T* J7 N6 o% ?; r        //这个道具无法移动,跳过
; E. l! K/ I' h4 A; w' H        continue;
( m$ r- G+ d, F, W' ~       }
1 c) Z5 s: {; U' D      }else{! w% |! ]* J& Y+ n, l
       //空位置 不用动4 [  A) D6 t0 e& _2 L5 J; c/ e) ~
       continue;0 A/ t+ _  S' @3 z/ F7 N
      }
' u0 i. x9 R4 s( |: I& G# u      //////////////////////////////////////////////////////////////////////////
1 V- e& S) S" ~( k! d$ L4 R      //开始移动1 S/ B3 |# Q3 @; i/ r
      if (nSrc == nDestPos)2 l0 G5 t/ D/ p9 ~
      {
/ d" c/ |/ _0 j       //原地不动
7 p9 V! J# a8 h0 v5 T6 `# v       nDestPos++;7 |5 V8 _! }% f; R( N; t) Y% _
       continue;3 g5 I7 C, |1 M1 [1 Y9 F. U: r1 ^! S
      }
& p  [( o) f) r: D  }      pInvSort->MoveItem(i,nDestPos);1 v' _) D- b+ d% W
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 v" y( f7 ~- G8 x4 t      Sleep(5);  L3 p( E& N  N
      //Error("移动 - %d->%d",nSrc,nDestPos);) O% V" i  @) w, p  N+ [+ b
      nDestPos++;1 D/ R0 t, o2 A& v& }
     }
# S  r8 f1 @9 Q5 w( D! F9 G     //取第一个元素的信息4 J8 ^" O- P% l1 @
     /*( J1 v8 V# |! a+ ~
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" Q3 b) @7 d+ w  k( t4 y' y; B  D     {  O; a% Q1 |+ o
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 k% o, h. M3 \
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 P8 ~3 [3 y+ O, i3 w; J8 [     }
5 l! f7 f" J& }/ k0 `3 K1 D2 Z     */' D$ B5 V: o  v0 R
    //////////////////////////////////////////////////////////////////////////
! I( y1 k. f8 A: o  K    break;
7 A* r! ]5 A" A( q   }8 W- {  ^6 E& O8 \
  }
5 q- ^! E: _0 J: w8 Q}
# ~- v. @' p3 ]m_wndMenu.SetVisible(FALSE);
8 n. z0 f0 L# D% w
( \3 T( `2 O) m* o* R' Y+ Q--------------------------------------------------------------------------------------------------------' c$ P' O9 U0 s: y1 r1 C1 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 t; u6 B% j2 D$ S) v7 z{- v6 ?  m5 F1 H
BaseMouseCursor();5 Y7 f" b3 ?( t, V% Y
}
, K8 d! v  I# K1 j! p在其下添加:& T) T8 @- j) D( X: T" S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). R* x! F  @/ A7 C0 F) P
{
- C1 k: o! }% ?/ t$ Cm_wndMenu.DeleteAllMenu();# C* m) G* O! E8 a* s( v) f* B
m_wndMenu.CreateMenu(this);
" h$ O, m5 b; \% \# g: D. b8 q0 f. Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ p) `& X3 A! z$ b! m

8 O) T: S4 R1 q+ X7 q* y, Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ d: ^" q6 x; u8 i1 v8 D{8 Q( {- [8 W# g
  //P以上级别才可以删除所有道具
) @' Z: d- k) T0 I  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& Q( X- f, n" j& j! n
}& {1 l5 v8 a$ K* z9 A" z* J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 R/ Z4 H+ i5 R& zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) _. T/ V" |( g
m_wndMenu.SetFocus();' ?: M; p6 j) J3 ~  S: x$ `
}
4 t. y: C6 c; x, u( p7 D------------------------------------------------------------------------------------------------------------' f0 M% ]4 [" n$ p3 ~
*************************! J3 {% H0 t) z1 O% `# j& I# ^
WndField.h文件' O$ K) i2 H! n6 B( f4 i
*************************
1 K8 v: [$ F; A# ]- i" y' K! Z- |搜索:BOOL m_bReport;
9 z# k1 e. W( X1 l: J其后添加:
" e) }7 w- O7 aCWndMenu m_wndMenu;
/ i5 y' {3 ~8 c! x2 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 g8 I9 p; s5 E; H/ C: Y其后添加:
" c& Y7 c% b2 d& K: [+ e8 j0 \- Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 e$ G/ b" ~/ e1 L/ N
4 {- I5 ~5 n' V# c$ Y* n
) w- @$ G% O% s3 h

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 03:04 , Processed in 0.067174 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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