飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 D  C6 n" o4 L: `% h  I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 K/ X. l5 D9 H, b! E
7 t3 b+ K+ |8 _2 [struct sItem
2 i8 }1 C1 Y6 Q/ Z" x8 S  ]{0 t( W3 h; K+ ~" I* {1 b6 t
DWORD dwId;
) Z3 W0 ~0 b& y7 SDWORD dwKind2;& o+ s7 Z, F: x9 t! @
DWORD dwItemId;3 E/ t4 d/ }; C
BYTE nIndex;  \5 L- r; K$ f' B6 \" V8 l4 k
sItem(){4 I5 w  |" B' Y/ |; f
  dwId = dwKind2 = dwItemId = nIndex = 0;
: Q! a* C. b) k* y8 M}' H' \# ?5 v9 y& q5 ?4 x4 s; W% G5 y4 G
bool operator < (const sItem p2)# o0 J2 N+ E+ z3 S; `7 ~
{& F: C8 E- N: s8 d. Y
  if (dwKind2 == p2.dwKind2)' H$ W0 c! y$ x6 O, U6 a
  {
* W0 {5 b) B, E) ^  }0 U   return dwItemId < p2.dwItemId;+ C# E" B9 e" _; G0 e- i; m* [5 w
  }else{5 ~/ V- K1 M/ U, e
   return dwKind2 < p2.dwKind2;4 w) E2 p+ v: a" t1 ?* C
  }
4 y. o! m' S) H}
/ Z0 s, Q; v7 N$ Q0 c4 J};
8 o+ l; K. T0 y3 k; x; ~$ L3 B9 ~! Tclass CInventorySort& s  ~1 y7 s2 R: j
{
) Z- c- G2 y& ]: \public:/ }- P% f. D7 s$ S" J- D
CInventorySort()
" O& k. L6 B2 M{
8 n0 G9 y% Z% i. i/ e. y) O  m_dwPos = 0;6 Z8 ^' R0 t/ O1 p* E2 }2 K% ^
}+ ^$ [1 d0 F6 z- t! A5 n
~CInventorySort(){}' C& I) w) j5 J4 [
private:
$ {/ ?' z% t/ p" LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' [' G8 X. g: K" ~3 |DWORD m_dwPos;
+ f$ E. E& R7 Ppublic:
9 Y5 ]* d. r. Y: A5 p6 Hvoid Add(BYTE nIndex)2 L8 \  W5 S' g5 G% @, q8 N% g
{0 q6 u- E, u; X% E: C4 q
  if (m_dwPos >= MAX_INVENTORY)' K1 j3 p+ s  c3 V2 h
  {! i8 B4 E# K6 v
   return;
% f+ N8 \/ R$ `8 R* q% W  }0 `- p  {' q4 f0 a0 A- [
  m_Item[m_dwPos].nIndex = nIndex;! v: v5 J& u) q
  m_Item[m_dwPos].dwId = m_dwPos;) G* `8 g, ~5 v; d
  m_dwPos++;8 J/ }& ~6 w0 E3 E' v
}. h% U$ z. _7 g/ U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 G: \/ u- Y3 f! {5 z{
/ C! V. \+ H# C  T  for (int i=0;i<MAX_INVENTORY;i++)
% t( s4 w) W7 x3 R  {
; j: \: Y* H1 n  {, R3 Z8 y' y   if (m_Item.dwId == dwId)' |* _- Q  }4 M5 G( i* [$ j
   {
5 a+ \& K$ I. w    return m_Item.nIndex;
. V1 o- _) U- A" C) s* R   }
  T6 n( Q( Z7 `9 i* J. ^: ^" K! D  }- e% M( V& U5 i4 ?8 U; b
  return 255;* i1 v) k8 V4 L& m$ I
}/ C/ Q: U0 T' y( t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 E; N, T  n: m{
4 t, ~) }( Y* f+ k/ {3 J! }0 ]( _  BYTE nTmp = 0;7 o% ^; F8 t9 k: l, Q' y0 R# e
  bool bDest = false,bSrc = false;; P1 I4 W7 E, H7 t
  for (int i=0;i<MAX_INVENTORY;i++)
: w: @8 j9 N2 c# p1 n8 b  {
4 d0 ^& U0 p, h  \6 I8 R% ~( Q+ b   if (dwSrcId == m_Item.dwId), r1 `0 ~. W' t% T4 j
   {: j" h4 X2 O( q7 T  k# Z" I
    //id相等 则 改变对应的dest和src
( K9 T) T# e. z' d) J* J! {+ a    nTmp = m_Item.nIndex;3 n# l8 A, L- Y1 P3 B' |
    m_Item.nIndex = dest;
$ h9 T! n5 x, H4 |$ F$ Y   }+ d8 q0 k+ E" J, V
  }: n) E8 p) `: B6 r! F8 D5 x
  //临时数据保存完毕,交换开始) D2 c0 X# J/ R& A) J, |9 m
  for (int i=0;i<MAX_INVENTORY;i++); A/ D' [. V3 P5 _
  {
8 p. g9 m8 @. [! c   if (dest == m_Item.nIndex)* Q2 H9 Z3 x$ T$ a
   {( F7 h$ |8 ?0 g, b
    //id相等 则 改变对应的dest和src
3 J9 A/ [( K9 u2 b3 v    m_Item.nIndex = nTmp;
/ Y. v0 S. g; z3 a/ B* Z   }: E- [' K" l  U# D+ t9 g/ N
  }# I! y( h( W+ l8 E1 Z2 M. Z
}) _; I$ h* B, O
};$ _& x. L6 @; w# R. k: t2 C
-------------------------------------------------------------------------
& s" [& B* R( g1 V0 N, |0 t! \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 w" a( n" O/ u% c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ _6 i3 h- M9 s
紧靠其上添加:
4 W& I9 ^  @0 l. Z5 G! Vif( pWndBase == &m_wndMenu ), M) ]7 Z$ B0 t, \0 W/ g
{" `  m$ h' L, h
  switch( nID )
+ m2 j, a  l# u$ k1 |* B  {
7 u; {- O1 d$ q  case 2:' e) G4 U4 Z& @+ K6 o
   {) s0 l/ p( A$ @! ]& {2 r' D
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ B6 y: b/ R7 g6 z7 t; i( d    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' W6 C6 v. l$ g( ~
    {/ `# d) {3 t# F) a
     break;
% k/ |# Y# @  F7 O: y    }& U! ^" h% |3 Z+ z5 R6 v  m
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, ]# u1 F" b5 @! V- ~1 J0 r    {
" P* d; J/ B+ e/ R6 p1 x8 z     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ b7 o- w6 a  I; c" F9 G
     if( !pItemElem )
" F5 r5 x2 @# ^8 q0 @      continue;7 d4 [: S4 t/ X( ]- k% ~
     if(pItemElem->GetExtra() > 0)
! Z# X( s. U+ `6 a      continue;
! X8 Z2 D9 }9 e+ r8 W" s$ V# h     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. u1 {, U' W) Q2 e      continue;
: ?$ e- e8 L  U" u, P     if( g_pPlayer->IsUsing( pItemElem ) ): s6 H( T, |+ T) C5 y6 s( y
      continue;  ~4 Y2 G3 r" x$ d
     if( pItemElem->IsUndestructable() == TRUE )0 A1 a* K9 {* e5 V- O
     {
; ^/ H1 w% k9 F      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ?3 t& {) y5 x2 W      continue;! O. t& Y5 i: p0 {8 Z0 i5 z, Q1 X
     }
7 X. L$ u6 @+ ]  ]  X* r     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 M* Q6 G1 R5 f$ C8 N9 c
    }
+ }" w) m& }4 ^# Z! ]0 |* g    break;
3 O( S1 x' r) X7 B   }: Q, U; a; a& U: d* J. Q6 _
  case 1:
/ g" C; J1 L# W6 q7 O9 V   {8 Z$ ^* m0 s2 o
    //整理背包
7 d$ F4 ^9 n) z3 m, n    //////////////////////////////////////////////////////////////////////////
2 x1 }- Q: r& j8 ^1 Z    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% Z& D& m. \" L
    //////////////////////////////////////////////////////////////////////////9 J% o6 e8 y5 B
    //////////////////////////////////////////////////////////////////////////) h0 P. n2 a( |/ ]$ \
    CInventorySort* pInvSort = new CInventorySort;8 H1 a  B, n. }0 B$ \  E7 o
    vector <sItem> vItem;
2 g+ t' ^9 A' Y% i& x4 P7 [" [1 m    vItem.resize(MAX_INVENTORY);//初始化大小0 e6 L, t4 R$ x/ e/ n$ y
     //////////////////////////////////////////////////////////////////////////5 G4 {! v. A- Z& l- ~) ^& k
     //填充数据
) ~1 T& S3 W, x     for (int i=0;i<MAX_INVENTORY;i++)
: y7 Z4 ]0 }! y     {
( ~! r% L* Z% _6 N( p      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 S1 l/ r; M. d6 P6 B! E
      if (!pItemElem)
& w# `8 @( z$ F. b6 F. v; m      {
% c" C# F* c& q" G% [# z2 B( Z, L2 Z       vItem.dwKind2 = 0xffffffff;! T+ P' ^' x* F/ B8 n
       vItem.dwItemId = 0xffffffff;+ @: n  |) ~) s# M7 h+ Y
       vItem.nIndex = i;
# i: k- Z3 H6 y7 a      }else {. X7 Z0 D9 ?# E7 P
       ItemProp* pProp = pItemElem->GetProp();" g- s( c. P6 k4 n
       vItem.dwKind2 = pProp->dwItemKind2;
8 K0 U% s( `; \' a; {* l9 ~1 d       vItem.dwItemId = pItemElem->m_dwItemId;. h+ r! |3 m3 j. _- H. A* z
       vItem.nIndex = i;
# [# u2 U$ J1 F' F2 {- X      }
9 o1 u0 H% P4 ]5 k% A+ E# y/ K      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. a0 S, `4 r: P
     }) [5 t+ ]3 D# l0 p7 A9 _' x. `
     //////////////////////////////////////////////////////////////////////////
4 X# `8 j, h. S+ R     sort(vItem.begin(),vItem.end());//排序' Z: w+ A) w5 A, N' b
     //////////////////////////////////////////////////////////////////////////0 h  T1 F+ s5 Q# J6 [' X! O
     //交换
+ [# ^" I" h! O/ ]5 c     for (size_t i=0;i<vItem.size();i++)# {8 z8 z2 |* x5 B7 X  a
     {
, q4 X* {& W% u2 y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# z$ A4 Q' X* g1 G
      pInvSort->Add(vItem.nIndex);
/ }& n7 V; o& n6 K! E     }
9 l0 g) |2 \9 v' i; O* u     BYTE nDestPos = 0;
. W2 n$ ~& `' N  L% x     for (int i=0;i<MAX_INVENTORY;i++): V$ I$ M3 t1 u7 B) ~" O# s
     {' P  p0 _8 F/ i( l! ~. A
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* ]0 [" [& V- r# W4 p, v      if (pItemElem)
% [7 ?3 ^. @& o3 ^) ?- `      {* `* i! z/ _  I
       if (IsUsingItem(pItemElem))) W3 p& P0 n. r/ j+ d
       {6 J* `1 P3 X  I8 u7 t9 n9 m
        //这个位置无法放, p6 }& ?, S3 i6 J% P8 c8 S
        nDestPos++;7 ~' l( F" Z& K
       }
! W' c# O) Z- q9 V% W      }$ e( @6 r' Y( I! @
      BYTE nSrc = pInvSort->GetItemSrc(i);! v5 i" |5 |( L6 t
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, E4 g2 ]5 k# \2 @: i7 N      if (pItemElem)
* H# Q9 ?( f0 n" b% J9 z# ^      {* E* {. Q/ f8 ~5 S
       if (IsUsingItem(pItemElem))1 ?/ ^* m' ~& z& ?# @) H
       {
' J" Y2 O$ }) Q: M4 }9 H  k        //这个道具无法移动,跳过1 P) O6 Q1 a+ i5 K
        continue;6 A( B) K, a; _8 |) A- M
       }( n( _3 t+ h- @' v4 Y( [) d2 o( w4 ]- Y
      }else{
9 N: \8 r8 L# `- b       //空位置 不用动
$ R  ?/ W( I6 s1 R0 w; f. H1 b) G       continue;
" Q9 |/ |3 o. I      }
0 G; o9 u; E9 G- \: F9 O! P6 L4 [      //////////////////////////////////////////////////////////////////////////
2 q( ^! o/ F, r  Y) S      //开始移动2 i9 m# M/ N3 A5 e
      if (nSrc == nDestPos)
3 x* U4 D6 c2 I; A- s' O      {
5 P( Z( n6 k( P  c6 J0 t       //原地不动, }. ?- }5 I- K0 o, [/ C: E
       nDestPos++;4 i  B, w3 S, C
       continue;
& i# x! K$ H+ H. z# q      }+ T# z* N2 J+ S2 p6 S
      pInvSort->MoveItem(i,nDestPos);
8 p6 r% k% X! F& p4 ~# I  |      g_DPlay.SendMoveItem(0,nSrc,nDestPos);' T( ?. B7 e, ~
      Sleep(5);
1 g8 K) f2 w0 k. E% x      //Error("移动 - %d->%d",nSrc,nDestPos);, r) {; x. ?* @- P! Y/ O$ Y
      nDestPos++;- R3 f/ o' \  S# R
     }
/ k! l4 d5 M& I6 C, \     //取第一个元素的信息0 J4 c4 p. e" a
     /*
/ }# e: M0 L0 Q9 s  g4 S     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), f' P; ^; g% m* x; T8 i
     {
% B8 Y# r1 t! M- A      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; b8 e! i$ Q  W- y5 D4 [- K9 Q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 a5 I  V6 Q( a; |4 V& o7 N; b
     }1 Y. t7 T2 Q! L1 E) ^/ H) B
     */
2 u  \( \! p6 w$ c3 c# h$ A0 `    //////////////////////////////////////////////////////////////////////////
  H* a  A- ^; f/ y# G3 @! |    break;+ [: f' c* h/ j" @
   }/ q7 ^  _; a) a. @0 d, a
  } $ O& m3 N) u4 n
}0 q' C$ v1 |7 i' z5 `+ e: X
m_wndMenu.SetVisible(FALSE);
3 x, x) K" i0 [2 c1 T2 @- r) S
$ S, O. _6 W. {) v3 d--------------------------------------------------------------------------------------------------------/ a  Z' v7 q: t% i" D# L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 R1 o1 y  W0 K{
$ g# S; m$ F" W1 @- d' N; BBaseMouseCursor();
0 W( v; w4 t, @, H7 p}# W: s$ d9 _1 v4 }' s1 o
在其下添加:; a2 D. z' d3 z8 s8 K+ ?* B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 W& J$ v/ @, ]8 q' N! ^- V{
( v# _: \, S0 d; e9 s( f8 ?m_wndMenu.DeleteAllMenu();
* n) l3 e, G6 f; Km_wndMenu.CreateMenu(this);
; [! w2 {' k2 x7 j1 p0 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. W1 [  M2 b/ j, F* v. z8 `

) R9 c) G# V* S$ \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ Q3 r% n6 n1 B( ?! r
{# y7 |6 \. U( k+ [
  //P以上级别才可以删除所有道具. P$ P# B, t$ l/ Q' ]
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, o4 J' W3 S! w1 q
}
; J$ o2 O, q4 Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ g& l. O$ T* L$ S3 o* s- u- s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' Q# j2 l5 d7 Bm_wndMenu.SetFocus();$ F, D+ d8 v2 e& c( n
}" T) I% t4 _) q- v3 \& }$ U
------------------------------------------------------------------------------------------------------------) z7 e, }% h3 {
*************************
8 O1 n: c% G  d+ nWndField.h文件% x) Y! k3 u( H1 c6 A* [
*************************  O. \" _! k0 [( A
搜索:BOOL m_bReport;$ ^. X, L3 p& e' i) q% Q# S$ t6 M
其后添加:
* X$ ~# a4 Z9 ?6 X) }8 q) j/ ^CWndMenu m_wndMenu;
6 ~& Y! N8 F) r# a* U; O$ }2 n1 Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. ^' p% @" C9 D* p2 V
其后添加:; k5 A/ q3 E& g& d9 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);; J& u1 m$ H4 y/ s; t, Q% r$ x

9 h' y, o, `( i( Y$ A3 ~* Q3 f* C- o% G8 ~: e

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 04:16 , Processed in 0.064500 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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