飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; ^  O/ _: L" w4 P) H  Z# _) l3 u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 F7 m1 E' `# {2 L7 ]( Z, e' H' q1 Q1 x$ _, L
struct sItem% t; n" ]$ O9 {% F7 s
{9 J7 ^! Y; p3 T$ B! }
DWORD dwId;+ J% p" }% E" F, J9 \9 Y" |
DWORD dwKind2;, n- J6 ?( B, B% M; Y8 }' G$ G
DWORD dwItemId;  e) X3 [% E+ Z7 j( `" m% j$ N
BYTE nIndex;
2 u5 l6 D7 J( B" ~% T" ksItem(){$ b/ H; i7 h% G* v2 e
  dwId = dwKind2 = dwItemId = nIndex = 0;
0 R) W% G# e. r# R}
1 `( G2 y9 v! @bool operator < (const sItem p2)
  r1 C. A" A* e; M( `{3 C6 Z. u) s) ^4 I0 g& `! k
  if (dwKind2 == p2.dwKind2)
5 U2 ^- V5 `) }: M$ w  {
  ^; S& Q& J  ^6 q   return dwItemId < p2.dwItemId;  h) _& J* d% c* X, Q0 l
  }else{9 }- U6 Q' e/ Z
   return dwKind2 < p2.dwKind2;4 u1 q% r2 b# _9 C( d6 J" ~
  }* _' L6 c# p( e5 X! C
}* S' s( a' s7 q- ?% K# [
};9 _  J- N0 f% }1 Y: o2 u9 V; D
class CInventorySort
2 U( x% r7 j9 }, }& j: p{( ~6 R* D: V) k$ E7 r) y
public:
4 g0 e; ?8 {+ d5 q& ~CInventorySort()
+ b* B1 A" z9 f: a, b0 s9 w$ h{
6 h) q% z# p! W! `' r2 q  m_dwPos = 0;) @' Z- l0 y6 m; T$ l" r
}' S& T6 H/ _/ a, m; i4 B$ F
~CInventorySort(){}
8 h( H% a' L- h6 u' c0 sprivate:) s" H5 c& s" Z# p! H+ w" X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ [( l- }+ E6 DDWORD m_dwPos;
! K% K* ?7 Q5 vpublic:
  Q' _2 @# Y6 `8 p- N. k* j7 ^void Add(BYTE nIndex)' f) J' D* p, q! T0 m: ^
{# V# b$ z; O) \( a
  if (m_dwPos >= MAX_INVENTORY)) p8 G. i3 i) Y" c. u  C: g
  {
7 q  N2 o, m. {3 x5 F* i0 s8 t1 V   return;8 |/ E, k  {$ [; m; r
  }
+ g0 x; Z$ X; z7 l  m_Item[m_dwPos].nIndex = nIndex;( k9 H7 d" T) W' Y( C* Y0 U
  m_Item[m_dwPos].dwId = m_dwPos;& Q, P5 I! E" ~6 _
  m_dwPos++;9 h. S) Z6 J' u2 t& ?8 D9 i' I
}+ O2 o. j2 D8 b. u; Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. M# r+ g5 i- F' N7 g8 C# X1 C{
: l; q- P+ Z% p4 c% H  for (int i=0;i<MAX_INVENTORY;i++)6 t4 C" G# z% F8 x$ R# _
  {" N, a, H0 O9 f+ w+ f$ w  |
   if (m_Item.dwId == dwId)
4 P  v1 P0 ]" U6 s5 K& X   {+ z" z7 P# J1 j0 i6 ]0 Q9 c
    return m_Item.nIndex;/ I8 d( R6 a' ]4 @6 X) K( }
   }
2 g% S# X& n" i8 E3 N  }' l3 f7 w0 N; @/ |0 F+ {! f$ l* L
  return 255;
$ d8 g! h  v$ E0 }+ h6 R  G* t}; k/ G  _. t" L7 I) B, G3 b6 P2 C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' E1 y8 P0 t% V
{* R4 Z7 C0 K& [+ j1 k3 Z" C
  BYTE nTmp = 0;0 a9 g" ?+ w# c  o9 N) }! Q. g% t
  bool bDest = false,bSrc = false;( ]) q2 Z7 A* B+ o
  for (int i=0;i<MAX_INVENTORY;i++)
3 }/ t# J" f9 ?1 s9 R# `  {4 L/ n; ?6 d4 d0 T- q
   if (dwSrcId == m_Item.dwId)
& L3 q( b) {0 _% @8 `, s   {
2 a: l# S: b, ~3 S3 W" f    //id相等 则 改变对应的dest和src
7 x' F5 B, H+ l' d  t# e8 {    nTmp = m_Item.nIndex;' Y8 C. C4 j  Z# _1 z. H
    m_Item.nIndex = dest;! H1 L* C6 f, Q# `) W1 ~
   }
- P( @8 j. h) E7 A/ S  }
  T9 S* I$ t# O# e9 S" Q4 p- W  //临时数据保存完毕,交换开始4 y# ?$ [' m$ W4 M8 ~
  for (int i=0;i<MAX_INVENTORY;i++)6 |! ^3 L5 s  o* n7 a# D- u
  {
) `- C: U; [) x/ e) c/ x! q   if (dest == m_Item.nIndex), ]1 |+ x5 D# `1 k7 D
   {' W& ^, ^' W4 {  ?
    //id相等 则 改变对应的dest和src( w, |8 ^$ b' d
    m_Item.nIndex = nTmp;
" z, l! I* A+ A0 }6 q# O2 m   }5 |; U& O% S; B6 f0 G) `
  }
9 K/ O( k. b) X" u}
# |4 y! S) r* `& V  J) v# h};  T1 _* N5 i) {+ f
-------------------------------------------------------------------------" U2 C7 v$ m  Z% J$ h* p, q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), F  p; J# M- w! A4 a$ O+ j) `# D% G, I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 T9 K! W9 K! W& Y" w& r' p7 {( G% Z( u
紧靠其上添加:; s- E$ a) I5 \
if( pWndBase == &m_wndMenu )1 t  A7 f8 y1 d7 a& v" L" Y
{
* w" t+ d- W& M4 h! ]6 ^6 R" L  switch( nID )' f% z# w/ Y7 r! G! u: s" j4 i2 s
  {
5 S: U% U* h$ n% l, G3 K  case 2:
/ `0 O1 V6 f/ ^# F- E+ t" U   {0 K, b( W3 p  q8 V$ c/ p
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 @: i: n# i4 o$ c' o% }% n* O
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  B1 `9 v& ?2 S( `2 e
    {9 P# Y" P: ^" j4 _# t- [) R
     break;
% L% N7 f8 g; u$ ~    }$ W& g! V# F$ i) j) g: [: T, f% ^
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 l/ z# G) l* A1 x% M
    {3 f0 \- [# M# @
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& |6 Q/ |* z6 u" Q; v) v
     if( !pItemElem )
2 V  [$ l) a4 [5 N5 }      continue;
- @: V6 J- J" p1 E2 E2 I     if(pItemElem->GetExtra() > 0)5 p& E+ [) u) H0 J6 b
      continue;* _: n+ k, t1 ]( s
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* `9 c  U. @0 c0 `- Z5 s# X      continue;
* H! H, P, d, S1 I" f     if( g_pPlayer->IsUsing( pItemElem ) )
* e# l$ m  G) S3 m      continue;
) Y; j5 M/ @) x+ k; p     if( pItemElem->IsUndestructable() == TRUE )! P% @, N5 R6 x6 G' M
     {- {; Y9 J5 P+ R7 _
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( S2 c& x$ R  l) N6 C      continue;6 C& h! B" I( n# G0 G
     }1 U& c" y, d' U& i2 _
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 u6 e7 Y+ ^3 e* G. p    }
1 G) }; x5 o7 O2 z    break;
6 q0 B% x9 Y5 G" i5 `/ v! @5 v) }   }
: ]8 j- u+ h% P# F8 V- p8 E  case 1:+ u. Y2 I; p0 h" X4 L
   {
* i; L" I! u( ]' Z, g; a, z6 u9 Y    //整理背包1 c; o( Q+ H" t
    //////////////////////////////////////////////////////////////////////////; w9 u# @4 n) `* Z9 [( p
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 A4 E8 v# n2 M, e# @8 r    //////////////////////////////////////////////////////////////////////////
+ Z, Q8 K1 R; A% Y- y- j" l% C6 l    //////////////////////////////////////////////////////////////////////////
9 a) k4 w- C. I! L, q# \8 u4 Z6 P    CInventorySort* pInvSort = new CInventorySort;
' i# k4 k, ^! x% n  C    vector <sItem> vItem;
0 ?/ y  `; H  Z; r    vItem.resize(MAX_INVENTORY);//初始化大小8 n; A& l5 Q8 g  F/ E
     //////////////////////////////////////////////////////////////////////////- |+ ?- K9 J' o% Q. C9 ^
     //填充数据& [: D$ P% T7 q/ `; n6 t9 \
     for (int i=0;i<MAX_INVENTORY;i++)
# `& s! y4 x# R7 h- d5 |$ q     {
0 t) K) B& A) V$ X. x      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 ?. @- N# w- n8 s2 e      if (!pItemElem)  Q3 K) H5 p6 W" V7 Y( Z- q
      {
3 y6 x& `7 T, ~       vItem.dwKind2 = 0xffffffff;
/ ^7 d' B$ A* m4 Z* i4 Y, h! s       vItem.dwItemId = 0xffffffff;( S" Y6 r2 X% ^; d
       vItem.nIndex = i;5 b7 N; u/ Q5 H+ @# j+ \/ b
      }else {/ \' a7 r) X; D0 [. Y, x
       ItemProp* pProp = pItemElem->GetProp();
7 E& \, T! F% z3 r       vItem.dwKind2 = pProp->dwItemKind2;
- Z7 [* l- Q3 L/ V       vItem.dwItemId = pItemElem->m_dwItemId;' t7 ]7 ~7 ?$ h: u1 j& s' f3 \
       vItem.nIndex = i;6 R9 J0 L9 V3 Q2 \
      }9 o6 l# X+ Z/ G0 X
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 s1 P* b2 w9 g: `. N# N" J: I- l! f
     }& ?$ v5 t4 O5 w& k  i5 W# u
     //////////////////////////////////////////////////////////////////////////
( r; c- |7 z% q1 M9 n  u     sort(vItem.begin(),vItem.end());//排序
/ I8 N; {% H1 K" i0 ~8 F     //////////////////////////////////////////////////////////////////////////: p0 X2 e+ Q/ A3 k/ `- x
     //交换" w1 A# t/ p  X( s( j
     for (size_t i=0;i<vItem.size();i++)$ L: O; f5 F2 n7 s, e' |0 B' R& m
     {1 l3 A; U& e- J$ J
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 M! p9 P9 B) `0 v% C% Y6 n( F( ?; J      pInvSort->Add(vItem.nIndex);
( V# h0 W1 |0 E1 l! T/ p7 m3 X     }
& B, Y( A' T, a8 Q- b% e) ^! a5 ?     BYTE nDestPos = 0;! J* V4 Q  I# J' O! M
     for (int i=0;i<MAX_INVENTORY;i++)4 s) {+ d7 I% c7 U
     {" [* B) g4 t4 v0 J; H
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! S9 I- [/ b" ?, n      if (pItemElem)3 j8 O. c" l4 b# J/ F
      {
# T7 W; ~' T9 R5 h' U9 d  y       if (IsUsingItem(pItemElem))3 w* R) X4 O/ l" Y- g  B: Y
       {
7 C3 J7 ^$ Y9 d/ `0 S7 k        //这个位置无法放+ U  g6 w. C8 v2 r9 s
        nDestPos++;
6 ]8 j/ |  Q2 i2 Q! w       }% C6 H5 ~. [+ ]0 X  ~
      }, B- z# l) Q, p; Z7 t
      BYTE nSrc = pInvSort->GetItemSrc(i);
% {. i7 c; F7 W5 ]2 h: s      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 @- X2 v+ T  A1 {0 |6 S      if (pItemElem)) w! w% Q5 |/ D4 H' o1 t4 U, i9 y
      {
6 `/ {: }, y3 ?  J       if (IsUsingItem(pItemElem))
9 [0 ~: s5 e9 ?. ^       {
3 p4 l! T/ ?9 h7 G3 O* G        //这个道具无法移动,跳过$ S' Z" `+ U6 ~4 ~
        continue;
  i0 P8 |/ W: P# a4 ?. Q- n       }% Y, s( U# ~/ Q5 x! f$ F
      }else{0 z; l) k5 n: k7 q- _
       //空位置 不用动  w" r; j; {; p+ {8 m! h+ K2 m+ s
       continue;" f  |4 T  t2 k0 x" N% N  B0 E& G
      }! p8 E- s9 R- J. ]3 @
      /////////////////////////////////////////////////////////////////////////// ]2 |3 {. J3 n; m4 k
      //开始移动+ B* I3 A: [9 w
      if (nSrc == nDestPos)
& E" B. g4 q2 Z% ]6 R3 S- x      {9 P& Q. K" |( n5 y8 w0 W  s
       //原地不动1 {4 c! e& x- d& W2 l1 o- R% w2 m: K& P
       nDestPos++;
  G4 [% r3 \/ J/ D       continue;. s0 h  o! A9 K3 C
      }, r8 A* |1 D9 U0 ]4 m( D7 k3 ]5 @
      pInvSort->MoveItem(i,nDestPos);
: m/ d: t, p0 {0 \( q" W      g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 o( b/ p4 W$ d6 X5 l
      Sleep(5);# R. u6 n! i# k! e! ^
      //Error("移动 - %d->%d",nSrc,nDestPos);! v# n; p3 Y. T: M' s; O* Y
      nDestPos++;
% v6 i9 S+ X1 Z% A     }" r7 j4 p: z. v! h
     //取第一个元素的信息2 B; g' \! o$ {0 Z7 S. ^
     /*
, }. _0 o0 Z' a+ S% S     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. |0 x& f9 H- ?/ {1 g  {; T7 N     {, \" d8 O% y2 v- `" l9 Y) r
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* L* H; ?, |7 j1 ^      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- v) Y( i: F9 u% n* |     }  Y5 e; i& A% p2 G3 A
     */0 |4 t8 v2 l5 {3 S/ B, Z
    //////////////////////////////////////////////////////////////////////////. d/ p$ g1 i$ m3 Q- L, x7 Z
    break;
. D" T/ Q- j$ R   }
/ p5 ~( g  B4 C0 H9 h  } * w7 v9 F# b' L
}8 B. I- D+ g) [/ F8 T; ]4 l
m_wndMenu.SetVisible(FALSE);
' U/ U# C' `2 M( \% m* X8 @. v) k1 P1 ~7 U# ]
--------------------------------------------------------------------------------------------------------
( D( k/ \. F* u& X  A; b( W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 p3 O) l( B+ _7 W{5 x% X4 G8 K- O* v4 T! |
BaseMouseCursor();
8 w  X! C# T8 z6 r* @}# g! y) n0 V4 \  Z
在其下添加:
2 l  ]+ b3 [/ X) |) evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 P6 @7 u* Y) F" J{
+ k; n- X9 U# cm_wndMenu.DeleteAllMenu();3 V( Z7 w3 l9 @. U2 X, E8 I
m_wndMenu.CreateMenu(this);& s7 F' P. @. ]: B; A/ e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 j" V8 g. ]* l1 \: _# Z1 {
  T- U( ^3 ]* D. |* n1 Q2 G+ aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' E2 G+ r" ?! Q$ {2 i{' [7 M0 ?- i  i8 N( ]7 x8 d
  //P以上级别才可以删除所有道具
6 \% u/ j" c, a, o/ g* w4 i  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: c" d5 U* b4 r}. `4 k/ G' ?- z# o# H% X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( k: ?4 O1 u8 P+ b: F# ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: w5 J: h- Y0 Q! q! H' l
m_wndMenu.SetFocus();$ c  l7 T4 r3 N/ U
}' \" q2 e! l8 C* Y1 O' `# c
------------------------------------------------------------------------------------------------------------
2 v! C# h6 d" E) {4 f; Z*************************
) ?) I- G0 D& y6 H: G$ ?3 Y$ d1 ]WndField.h文件
, v  v' \" G- l5 w. b3 K4 d4 Q*************************" u7 a3 M* F* A- J
搜索:BOOL m_bReport;0 F4 j7 ~2 l, j
其后添加:" e" Q6 `5 d4 J9 S' V
CWndMenu m_wndMenu;4 O7 q1 m9 M( ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 q0 B. j7 _, K" Q. N
其后添加:0 @9 W9 G, u5 x$ [7 Q, i& U$ F
virtual void OnRButtonUp(UINT nFlags, CPoint point);
+ j* H& U2 [- s6 r/ s7 g  q) M( q3 J6 V+ |$ @) Z: |$ ~

$ S, H% l2 f7 n3 ^) N$ M; ^

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 17:24 , Processed in 0.068719 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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