飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1064
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件7 m, I' _5 ?' e: F% R5 v& L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& x  S) s3 p* J" h6 P
' J2 C4 X  f" o  e$ {struct sItem
& y1 W2 h' j, z6 c6 z1 {# R{7 y. G8 d) F, a! q; j$ E+ k
DWORD dwId;, b, \2 @, S# O4 t" @  N9 Q! l; G
DWORD dwKind2;2 j' B. v" m3 x  Y
DWORD dwItemId;; w4 }) r/ x1 i
BYTE nIndex;% j$ Z. u7 u. _8 K
sItem(){
$ O% o- n# R5 ^/ S8 j) X7 H  dwId = dwKind2 = dwItemId = nIndex = 0;/ P1 X; u  W! T4 F, @+ v* m# G% {4 M
}, J' y' q4 I( ?; I3 T$ i
bool operator < (const sItem p2)
* b- K2 _0 {1 d) A7 L: N{
5 S0 ^- H) n, `/ G  if (dwKind2 == p2.dwKind2)
  J1 W9 \% \4 }3 |  {
8 y8 a1 }2 p$ p/ c% r   return dwItemId < p2.dwItemId;. H) S9 s+ ~* T. b% g
  }else{% }* g' I6 ^( A8 w' A( x
   return dwKind2 < p2.dwKind2;) h  Y; ^6 r( M6 g
  }
( |: r; O% W- a# M3 T4 d}& N2 y" c+ B! F! i# n# w' y
};( P6 o: Y5 ~% y. R- A' r
class CInventorySort' Q' I7 k' d: s% g2 m8 G- C
{
; R1 X. F+ @2 y. U5 ?$ dpublic:- t; ]) Q& d: L
CInventorySort()
9 F) U+ |/ H4 U. }7 @{
& ~- S1 _4 w5 E9 G0 W: [& U  d  m_dwPos = 0;
% v$ T( ~( F8 T' P9 }3 R}
0 D8 [) [$ v; u# ~7 B5 Q~CInventorySort(){}
- k4 q/ D% |$ E( H( \private:4 i$ |- m$ d, v+ H3 U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ I' |0 E5 W1 w5 f5 ^7 Z5 d
DWORD m_dwPos;8 p3 d, d5 y2 n8 U3 G7 n6 r7 ^
public:, n3 O% A5 h: V* X4 |% l! S8 A/ d  O
void Add(BYTE nIndex)
& [7 ]1 G6 w( O! s. C2 t3 W{
/ ^% t) d2 M) K' N$ r  if (m_dwPos >= MAX_INVENTORY)5 m' V; }. O3 @6 Q: G1 f
  {. j0 F# Y$ a/ f6 x$ ]
   return;0 f6 f5 {* `' w+ }" Y
  }
. b- L* g  q# {% L9 r( Q" l2 `& O  m_Item[m_dwPos].nIndex = nIndex;
& f7 e9 {5 X! r, K' H- p  m_Item[m_dwPos].dwId = m_dwPos;0 q( }# j- S' k
  m_dwPos++;# _' B9 n& a3 V1 a
}& w1 t; }8 `( U' Y, M, T1 Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* b7 j, ?8 T) W& Z9 {
{* A. `( }# L$ @! B. N. `. s) |
  for (int i=0;i<MAX_INVENTORY;i++)" M) @% y/ L; W4 q8 N
  {2 G' L# E6 ~0 Q& B- v! w. I
   if (m_Item.dwId == dwId)
/ a; E9 [- h, {& d" }/ y; ?   {( j# ^9 k' e0 k& J& b6 L
    return m_Item.nIndex;, ]  b- R, Q' e& L- H" Y$ b+ ?
   }
6 S7 B* ^) a: ?+ `% F; N* K5 C  }
. w) h/ z" q$ J  return 255;
2 D' P0 g" R0 X! K4 o  d1 l; _}
2 z7 y6 M& _; Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, t1 K! a/ L  E5 K{* z. b) p- ~% o8 l, A) t
  BYTE nTmp = 0;* ?4 o. ~) w8 i+ _
  bool bDest = false,bSrc = false;
- E: {0 a- v: J* _+ j; ?  for (int i=0;i<MAX_INVENTORY;i++)) D1 Y3 l0 V* |
  {% }- Y3 v7 r6 \
   if (dwSrcId == m_Item.dwId)
: l9 z% z7 z5 X" Q* B   {
- ]- f6 W! s  u- O    //id相等 则 改变对应的dest和src
% Q/ l; k- Y" b/ [2 B4 X    nTmp = m_Item.nIndex;
( c6 h8 k  ?0 L; a    m_Item.nIndex = dest;
3 J( z5 n; H( M# X9 m+ g" R   }
$ O9 a  P3 J# h2 o0 ^, {! c% O  }
9 z" o2 k4 T* _1 C  //临时数据保存完毕,交换开始
/ Q1 Z) C8 b, A) B0 V. w! Z: n" [  for (int i=0;i<MAX_INVENTORY;i++)$ M. t2 G$ k; }! k+ s9 R. z& b* \
  {: C5 i% ?) g# {" @# `0 U, f5 A
   if (dest == m_Item.nIndex)
3 `+ B1 g0 H" w+ e* T   {# g% k- i' ?3 f" m
    //id相等 则 改变对应的dest和src+ c% A3 Z# b2 Z; L- _" P: s: e0 d
    m_Item.nIndex = nTmp;
% `% s& M7 y6 p0 B% Z6 I. D& k3 |   }& P; v  Z+ _6 }' F) W
  }% Q7 A# H! b1 B9 E# G
}
8 X: b( t9 T+ {* y9 H- J};
: ], m# ?9 x3 w% k7 ?1 h0 |-------------------------------------------------------------------------
+ a( E0 a8 g" l8 `6 l1 |& a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; p! Y  s- y3 J0 n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ b5 h& b0 @3 ^7 U
紧靠其上添加:
9 C- M5 n* ?* aif( pWndBase == &m_wndMenu )
/ H# ~' e+ y5 Y{$ ?' n7 S- ^" g
  switch( nID )
4 S3 t6 e- n% f) Y8 a! S  {
  ]- i4 x/ y/ ?/ P7 V  case 2:% X; s9 j' ?6 X
   {0 g9 [$ }* z% m8 g6 X
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" e7 U( Z! o4 R* F$ c5 y
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* [2 R$ [- P+ V" m$ \+ i! c* F+ z0 k
    {
6 X6 h! P% J' E, g     break;% ?% J2 n& O- Q4 K3 B- {9 d
    }
" K7 D# j$ X( c, c4 K    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 r; t; P2 x% T% ~, l$ j/ S2 C
    {6 b5 j% Y2 H# x  y
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 I) b! K1 G- z# Z( X     if( !pItemElem )8 s4 y' o. u& |4 b0 C5 V$ {
      continue;
) }6 e- W/ @! h/ T- U/ @; H, A     if(pItemElem->GetExtra() > 0)
8 c! N9 ?8 r% f$ O      continue;( a7 L3 ]7 E9 a5 Y/ `
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 @3 l# ~* V* D  ~0 a9 k
      continue;8 |7 e- ^* q1 c" j  @7 x/ D2 {
     if( g_pPlayer->IsUsing( pItemElem ) ): B7 b! E4 y- G& d
      continue;$ J4 z) Y% }/ I5 s; y% Z+ m
     if( pItemElem->IsUndestructable() == TRUE )
% X2 h7 q4 C* x     {
8 y1 m8 {* L, ]/ `  w      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% a6 k) G( l! N6 b; l- O      continue;- R& s  Q, K1 k4 h( s3 y
     }9 w( C: a2 V' x. D( P, Y9 {5 ^+ u
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 b& V) W( k8 [& ~3 I  b    }% W/ B. R% Q* x$ T
    break;7 X6 t, u0 [, u) t9 D' b$ p
   }# N1 x  h7 c, i
  case 1:1 v! \5 v: b$ g5 {/ W
   {# f# ^& q( y0 t
    //整理背包
& s. F9 R* n8 O/ B7 E    //////////////////////////////////////////////////////////////////////////
# B% e) d7 ?  f5 |5 [    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );  _' O1 t: Y) ~) D  T% B
    //////////////////////////////////////////////////////////////////////////
3 l/ O7 e' d- ?* R1 D    //////////////////////////////////////////////////////////////////////////1 S2 c/ L7 V6 @) z
    CInventorySort* pInvSort = new CInventorySort;
! u% j4 w; L& `, P# H" H    vector <sItem> vItem;4 u- I" i: ^5 C9 H5 W. O  V
    vItem.resize(MAX_INVENTORY);//初始化大小) _2 i, w# M2 Q+ r
     //////////////////////////////////////////////////////////////////////////# c7 j5 y2 T& o1 |$ K* N% i% G
     //填充数据9 M1 c& y! y: y3 v$ R$ ~( Y5 P
     for (int i=0;i<MAX_INVENTORY;i++)
! W2 F: ?0 n+ X! s     {
7 E4 p5 @4 e7 I% S- H- l" g      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% |' |* g- a! Z1 }: j% o      if (!pItemElem). c- n1 x& O5 I. z( l. w/ \" f
      {
; V" O9 D; w8 }4 o" S       vItem.dwKind2 = 0xffffffff;
9 H4 I' r2 g" w7 h  {, p( w" c1 D       vItem.dwItemId = 0xffffffff;
! ~4 Y; [3 v- }6 M5 ?       vItem.nIndex = i;& n! i% [' @$ n6 ~9 i
      }else {' h- I/ q  a) N- T0 Q% A
       ItemProp* pProp = pItemElem->GetProp();
3 Y9 P1 {4 x) z$ Q       vItem.dwKind2 = pProp->dwItemKind2;4 Y9 y9 U8 n" [3 Z' g7 c: f5 B
       vItem.dwItemId = pItemElem->m_dwItemId;: y5 K# a: d  }. i
       vItem.nIndex = i;
! f- a' G, @; u% z3 c  R      }
2 N/ g3 _3 g3 y8 ]3 W( }      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 W8 D8 y9 {2 P
     }, A4 Q0 L  O0 f
     //////////////////////////////////////////////////////////////////////////' F; u, `( c& P& G7 s8 T
     sort(vItem.begin(),vItem.end());//排序
) O0 G3 _8 _, W* O" _. c( `( Q     //////////////////////////////////////////////////////////////////////////
8 s$ E. ^6 h& n# K% N  }     //交换) W$ m# a9 Z7 W6 }1 t6 |
     for (size_t i=0;i<vItem.size();i++)9 T2 y; F  |  E" F1 x
     {, C9 E! U2 N# n8 X7 e, y
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; a) {' a! r8 i) z$ L
      pInvSort->Add(vItem.nIndex);5 Q3 e, Z- @9 p3 `! p
     }& V2 I6 s1 D) _4 o
     BYTE nDestPos = 0;
& ?2 r3 D2 V+ F: I/ Q     for (int i=0;i<MAX_INVENTORY;i++)- E- b  J" r. n% x  d
     {
8 @2 A% f& ~' @7 y      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 g6 V: g  j! d0 B  V& x1 F( j0 A3 J" Q      if (pItemElem)8 N) W5 T8 z% ^% i' }" m6 U8 s
      {; T. @% W0 a$ e5 b  t
       if (IsUsingItem(pItemElem))
5 y6 [3 X3 _3 }. h- L$ `% n       {
& m0 Y+ `0 _7 @/ X, W        //这个位置无法放2 B* e, A( L+ _
        nDestPos++;
3 R! c, [& ~( n2 |       }
; M% d1 `# Z3 d7 i      }0 h) G* Z2 o+ }# j9 e( E
      BYTE nSrc = pInvSort->GetItemSrc(i);& o* c9 S7 h8 s' r$ v! s0 m1 R( K
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 \0 d  u8 E& v# j2 T      if (pItemElem)6 M3 @% I  k7 d1 h$ @' v; D; A) S
      {: w0 ?; `; G! m6 F  |  O
       if (IsUsingItem(pItemElem))9 q* M! a* C# V) _1 ?; U
       {
, c9 {% `& l5 o) f6 m3 Y        //这个道具无法移动,跳过6 ?7 M% V  R2 p3 Q4 J1 g9 t# m
        continue;
+ Y" Y; ^" U& ?9 t( W       }# `- \- a7 s6 Q8 R
      }else{
- N( ?  k3 n! z5 e3 D2 R       //空位置 不用动* C( Y3 l0 n& `4 s; ?. m& l
       continue;! `: A# b# \4 k: y( x- K
      }; v3 ?2 n1 u7 x+ a9 E
      //////////////////////////////////////////////////////////////////////////# C- Z# ?4 ~! o( S1 ^9 J( e3 F
      //开始移动
5 W3 A# k6 P9 ~      if (nSrc == nDestPos)7 V' q; m: C: p) M; ~2 ~- @# U
      {
' Y/ Y7 y  M3 w$ |- L7 D       //原地不动
3 B* p9 c' A2 i) }. j8 G7 q! ~       nDestPos++;
5 [9 L( K/ B; W7 C" ^' i       continue;
( t4 C" E" H0 I( {/ A      }
  `! U4 D' H  `1 J      pInvSort->MoveItem(i,nDestPos);6 I. R1 B  Y8 \- t) o- p$ O
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 I0 M; y/ M( `* Z# J. u      Sleep(5);$ z* V& v: d; Z) a9 J
      //Error("移动 - %d->%d",nSrc,nDestPos);
2 `8 u( c/ |( O" R* }% ~      nDestPos++;
& V; l+ `+ U, o. J     }
  J6 w; p* v! N7 r     //取第一个元素的信息
  [: h# c" l& M  t+ I; u     /*" B+ }; M- C- j8 e- B$ X
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), {2 Q" c3 ]' B6 t! g2 z
     {
9 P4 ?3 f& m, v2 L( l      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& j$ p* w- Z, m0 `# z
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 M2 L) V6 e9 b& I6 n) x; ~# }# ^7 V     }
  Q5 j$ l) o7 ?: C2 f7 `     */; |& K, N" {6 O* e- B
    //////////////////////////////////////////////////////////////////////////
% i# s1 p. W% d! h    break;3 N+ D( M, d% \4 W7 a
   }& `* X8 D3 p( e# Q: ]7 d0 T
  }
* M. A/ s' V9 B}
2 g5 T, u% i( ]% G0 |3 M: ~m_wndMenu.SetVisible(FALSE);
/ g  u1 Y; j8 p; a! j
6 @6 r* I! @( L) T$ ]# }) b) ]--------------------------------------------------------------------------------------------------------
4 H: G! H" j8 I9 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" e2 D- i" Y; E{. ^( L! n" T* F/ N/ c
BaseMouseCursor();
1 G( V. U, Z, y* M# m+ T}8 [( j" [3 D4 J4 B( p- p
在其下添加:# k/ G' o% \% l* h% l1 X& T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 s7 d# k, }4 }8 ?5 M& X  o/ J{* r2 k& T3 _6 u
m_wndMenu.DeleteAllMenu();
; O( c2 r5 I( w6 V4 H0 pm_wndMenu.CreateMenu(this);5 R3 a& O* t) {3 j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");  @9 [9 c7 @! _" P7 T1 W9 r7 \1 ?
( C6 E4 V* T: i; R+ q3 Q0 M3 O4 X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 _& z/ f7 N7 K{
. a; ~! \9 U$ A4 G1 P/ S  //P以上级别才可以删除所有道具2 z/ ?) l  Q0 i8 I
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. }' C  P% x2 g0 {! M, I- o# G}
) O: S3 }4 I5 c) L) z1 l3 ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: B# i) s2 p4 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 P5 h2 o$ _5 J/ i* N( H6 w! r& l6 Im_wndMenu.SetFocus();
1 D7 F& G. x: o2 J* Q, o) R+ P8 [}2 R/ c/ }6 P# v; @
------------------------------------------------------------------------------------------------------------
$ A9 a* [8 N2 Z  s*************************# m* M2 `0 k2 b! y, E
WndField.h文件
/ r/ g" L+ j5 c" R! S  ^4 `*************************
5 x' e/ W  h3 t. {( c7 A# C" p搜索:BOOL m_bReport;% o  _+ f% n! |$ W
其后添加:) Q: R! b# S: i
CWndMenu m_wndMenu;
" [' B. o6 X4 j- d' p* d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" }7 F  Z2 w1 W' s! V3 a# o( c4 r其后添加:/ D+ u3 x7 @% O6 M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
  U4 K5 j) `8 _3 u( `5 Q6 @; y+ B$ X/ N& U4 b' M" \
5 _; D* Y5 Z2 {: V

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 00:33 , Processed in 0.064569 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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