飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1092

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1092
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
9 ]/ s1 X! F* H4 D7 e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ p- E" v* a! }0 k4 J/ k0 Q! W, u6 C, ?! @; u; J
struct sItem
, r1 f+ U+ S- D% O9 z+ R1 A{( |' M, b3 U3 K. t- z8 p0 ?
DWORD dwId;
9 l7 V. m; A7 D2 k! {DWORD dwKind2;
* c, \9 O7 J& Z) UDWORD dwItemId;
- \' H% K/ s" |8 \BYTE nIndex;6 g8 B/ g3 |8 ?- W1 ~1 h$ q
sItem(){7 k' |7 d" ~2 g2 X+ L) w4 z  K
  dwId = dwKind2 = dwItemId = nIndex = 0;
5 b7 s& F1 K& Z, W}' S8 [! R6 p$ h
bool operator < (const sItem p2)6 l1 U' J7 \; H, Z
{7 a& |% K# ~% o/ G! |: v
  if (dwKind2 == p2.dwKind2)$ e. J* m8 W% [: V5 k
  {! z4 h8 q' ^; ~% ?& c6 M
   return dwItemId < p2.dwItemId;
" x. l) a0 X3 c* }$ p1 U  }else{
, b# h- |# p/ i* g# }$ C   return dwKind2 < p2.dwKind2;) S3 Z2 D) X0 Y8 D1 R, K, w  V
  }* J  X4 j3 I3 n8 o/ {5 j7 e: `* @
}6 L1 v- Z6 C( |# y5 e7 _) D
};
! J% m' N( N1 s! zclass CInventorySort5 d/ }! g9 }. x- Q
{9 [- r- E1 @$ P
public:/ ]2 S- z. d- r) x# x1 z2 l& A
CInventorySort()9 [  S( J( U* C
{
. [: d- p# `1 a  m_dwPos = 0;0 K& }* O9 ?& d9 [- j
}
& {( l$ j1 |5 [9 O~CInventorySort(){}
0 ?1 z1 b0 P3 Sprivate:6 b( s% `7 h9 y5 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& d& I$ F+ t6 P  ?5 E$ L
DWORD m_dwPos;" S$ X* N- k+ k  h, F9 r5 m
public:0 J! Q4 X" ^% I& o+ H9 u2 G5 L
void Add(BYTE nIndex), c2 B. i# d: S& N5 l1 e/ o
{5 Z0 w. m. ~/ h* c8 [
  if (m_dwPos >= MAX_INVENTORY)
( Z/ z; v2 t4 A$ P4 w; `  {
& n6 o- V. F7 Y   return;
* L. y# W  b& |2 w  }
8 l$ y# _1 m' i  m_Item[m_dwPos].nIndex = nIndex;3 H/ M% h7 L# Y7 B8 z, ]% I
  m_Item[m_dwPos].dwId = m_dwPos;9 h) S6 Y: w6 M" `( d
  m_dwPos++;8 y! b, U8 x! z& @5 S, \+ R
}5 F$ h" u8 n: Q% t" `' |6 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: F, i3 ^5 q/ d8 |, ^6 ~5 _" o4 e
{% V) D+ W0 v6 X$ `- a
  for (int i=0;i<MAX_INVENTORY;i++)$ t+ p. z( z! p2 F0 |
  {( W' r& d9 }3 v/ A+ j1 U2 Y; C
   if (m_Item.dwId == dwId), v+ m* t# l' U- l
   {
* X( g$ S; J, U  u    return m_Item.nIndex;( v. {3 n. A3 W! L& E* ]
   }
# y& n  ~. u' p1 O2 Q  }
' b  Q  S* n* B* _  return 255;  }0 z  |- T( {6 b
}
+ z) E  D: e0 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 r+ K3 \; A' A* ?* B+ L
{5 U, D/ x0 a+ Z8 E- k/ I
  BYTE nTmp = 0;* g( T! z* V' ]  r2 c
  bool bDest = false,bSrc = false;
2 F5 h& o. |$ q3 T  }3 u" h  for (int i=0;i<MAX_INVENTORY;i++)
/ L3 A/ @/ ~: d4 i" t, l  {5 _; \3 m, p& ]; N3 B9 k( w" U( `
   if (dwSrcId == m_Item.dwId)( v# ]% Z) h! y& r* P6 }7 Z/ i3 h; Z
   {
7 b$ v% h" Y, R- w! }8 L8 z    //id相等 则 改变对应的dest和src$ b( Y) Y6 V' f2 Q; `
    nTmp = m_Item.nIndex;1 Z. C1 V" x( E
    m_Item.nIndex = dest;0 ~* X1 E5 D1 a. Z+ }4 ^/ B. W
   }
/ v; h! g' @* h" h# l  }
, L' f, P; z5 q6 z8 X* D  //临时数据保存完毕,交换开始3 Y: \7 q( V5 P- Q) k
  for (int i=0;i<MAX_INVENTORY;i++)* s* x% p) M9 f0 b
  {/ Y2 d& K& u. |# {  ~8 C
   if (dest == m_Item.nIndex)
5 K, D$ p1 V  F9 ]  `   {
! N& B0 Q0 m3 r    //id相等 则 改变对应的dest和src
* t2 E6 l, J$ z7 f, ?- m8 X    m_Item.nIndex = nTmp;0 M2 j% G0 `# S0 F5 L& m
   }
/ p6 j7 B; W* ?5 u7 }7 [* U  }$ O2 y/ M: f! f0 T
}
0 j6 T- C0 w- Q7 ^};
( _% G( e% K0 t-------------------------------------------------------------------------
; N4 Y# F+ p+ |/ O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 B% j2 |+ `  A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 w! `% {$ Z2 q& P3 B$ o; ~紧靠其上添加:
" O7 ]$ ~6 ?8 A. B6 U, Cif( pWndBase == &m_wndMenu )
( q" f; @$ F* a( k{
! J3 v4 c  Y5 E1 t2 Z4 V3 r, z5 q+ d  switch( nID ); o0 E& d: l& C2 y7 j
  {
' m, s4 J6 c3 B+ r( @  case 2:
) `! m' o2 ^# R: ?0 m  K   {2 q3 W( Q& ^8 k$ e
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, n5 \: R2 @1 V) [, e5 H( A    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- Y) }( ~2 D7 y, K    {; d+ V+ i, A. N& [+ [" ^0 S
     break;
% C; x/ a5 c1 Y7 h. E9 \0 |    }5 z0 x* L7 j) P: |; Y# T; ]
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. k# O3 w+ ?  g- d: K' ?    {+ w: z! M0 k4 L5 u4 R0 M
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 ^$ c" @0 U! d. M; N) s/ T2 J% n7 t
     if( !pItemElem )
7 `; `- M# e) T& ^' c- [* A' w' g      continue;
4 j3 B( S" E0 ^6 J: @: S5 h     if(pItemElem->GetExtra() > 0)5 l0 _( o. r. M
      continue;
" x% X" l. w" B8 N# C& f! L% J7 F8 ~     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: o/ b2 v! X! g      continue;
- m, }, G$ Q9 G( N* Q1 [1 \4 w- D     if( g_pPlayer->IsUsing( pItemElem ) )
7 ?8 C) J" K+ `& c1 O# C* s      continue;
0 D. U. |# z+ D$ }     if( pItemElem->IsUndestructable() == TRUE )5 i2 X+ D5 e$ F. [
     {% S# d- `# R* p
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ H# n' V/ k7 V" k# k, G
      continue;
5 e( |! O; t  F) o     }1 ]3 @: K8 P$ i9 a4 H
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
  L8 c+ R, X& N& a& ^  K# X    }% V1 k" ?9 k! n6 `* M7 }
    break;
0 K  e. N3 c5 U+ |8 ~1 f: U   }
& `; K4 v/ ]; l9 y  case 1:
, n2 G+ K& y0 G! T& P( ~/ O   {) X6 w: n+ y& x9 @; G
    //整理背包& g( G# f' k7 z
    //////////////////////////////////////////////////////////////////////////
5 W- C! w. x$ H    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; j* f7 C% s* ^( j. f    //////////////////////////////////////////////////////////////////////////- Q% [1 z5 i/ E+ ?6 Z' l8 C) f
    //////////////////////////////////////////////////////////////////////////
% e% H3 O' A( I* m    CInventorySort* pInvSort = new CInventorySort;$ \# Y& S& r2 Y
    vector <sItem> vItem;4 }. u( L; h: ^0 ^1 t  Q
    vItem.resize(MAX_INVENTORY);//初始化大小
: Q7 F+ z; o5 C; a     //////////////////////////////////////////////////////////////////////////+ {. c' S; M4 s3 x' Z  O( C
     //填充数据+ Q+ P" [8 R8 m& P! y. B$ \
     for (int i=0;i<MAX_INVENTORY;i++)
; ?" q( a* P9 P0 H( k     {
" D- F8 O* X4 ]  O: J      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ e0 W5 k/ C( T2 @      if (!pItemElem). X# `0 |( K$ ^9 }' e
      {
/ t* v( v# b; @# v  W( p       vItem.dwKind2 = 0xffffffff;4 q4 Y6 S. [2 z5 [
       vItem.dwItemId = 0xffffffff;
% N6 e$ E6 M* p       vItem.nIndex = i;' a7 s- Q; Y' K) l3 {2 X
      }else {" q  ~; ~9 Z& _  U4 l
       ItemProp* pProp = pItemElem->GetProp();- U% C$ [; G! ?
       vItem.dwKind2 = pProp->dwItemKind2;
: b8 K) F" b! O7 h9 A       vItem.dwItemId = pItemElem->m_dwItemId;3 k/ f% f9 d7 b& l! s% x
       vItem.nIndex = i;
3 P; l* @$ f2 W6 k$ O& W5 P      }
$ _/ e% Y9 r' ]; ?4 E9 H( u      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ A1 h3 S" `3 S
     }
- _, p8 k/ J1 Y     //////////////////////////////////////////////////////////////////////////- ~" u8 w( i. @
     sort(vItem.begin(),vItem.end());//排序
! j6 O  {$ ~2 m0 L7 W3 T     //////////////////////////////////////////////////////////////////////////
" L! H$ J8 R) L& Q1 m3 Q+ {     //交换
0 g( v3 J# `6 v6 B' a( ]/ E     for (size_t i=0;i<vItem.size();i++)
( P! P$ l( S: t" Q: E) e; V     {, J$ C& R! E: J0 G
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ?$ l! }( W' U7 a
      pInvSort->Add(vItem.nIndex);3 Q( n5 G3 k: A. _& ^9 A7 p* g
     }. y1 |, w( o8 G" |( L6 W3 d% `4 s9 V
     BYTE nDestPos = 0;2 S9 ~2 z5 m+ c& i4 B: }' l
     for (int i=0;i<MAX_INVENTORY;i++)3 _0 j: O6 ?3 q) u- M3 u
     {! M) h- V3 k1 L% U' S  I* C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& D1 ~; Q  g! J" }3 B6 t- i/ ^      if (pItemElem)1 ~0 x8 a; y; k( e# J
      {
7 P' R5 o, ~0 W       if (IsUsingItem(pItemElem))' k: _6 m* D! V) l  _
       {
; J& O1 |% H) c  A3 k2 z        //这个位置无法放
! c6 c  W6 n; E0 n9 n3 n  l3 s5 X        nDestPos++;% A# N: v4 k# q1 y1 G
       }) |  o; d1 i4 z0 }1 q
      }, u' g4 D! }6 s+ L
      BYTE nSrc = pInvSort->GetItemSrc(i);
1 |( q8 ]' p- k$ e  W! ]: `- V0 w      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 ?/ A( t- v/ s$ G: C1 L( T
      if (pItemElem)0 i- ?  S$ d( M- [2 C
      {
* B& ?( O7 F( d8 W       if (IsUsingItem(pItemElem))
) z2 Y  g; u+ y/ H0 z       {
/ ^4 H. G5 D/ R6 B& o& Z6 r% J( D        //这个道具无法移动,跳过: k' r# D& B8 e# V) I$ R! Y9 S
        continue;
8 a* P) y, G. ~2 \. `       }; M5 M2 b0 E: q% z+ R6 J
      }else{: d% H0 J3 n# b6 J9 G2 C! _6 @
       //空位置 不用动9 Q! [* x" n$ W7 Z
       continue;' R- S) Q: H7 z( Z
      }
5 p4 t! b1 k7 r      //////////////////////////////////////////////////////////////////////////0 n; i" w8 {) i( B1 T
      //开始移动' n: k1 M; D  ^4 Q! R8 t. p
      if (nSrc == nDestPos)
1 [3 s! u/ R- ~% y' U  X3 W      {1 H+ |1 ~# m3 m6 G  W
       //原地不动
4 W% y$ ~# p. z% j3 s       nDestPos++;$ M( h8 U8 H. X. E1 ]
       continue;; ^$ \( V: T6 w! N/ O& f
      }
$ s+ `: i7 M- L8 u- A  y      pInvSort->MoveItem(i,nDestPos);
. U  {) e" {3 d+ W: U      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. f, V3 R& R  C) A& a" ~      Sleep(5);
; O0 `$ V9 H4 O      //Error("移动 - %d->%d",nSrc,nDestPos);
5 `9 w% H1 a+ @8 T      nDestPos++;
- a- ^; X- @# }% h! Y     }
' q* Q  ?: _  s+ C  {# d* V     //取第一个元素的信息
. G$ D  I! y. y: L7 p     /*% B2 U0 F' H, b; j; O7 b
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); S/ A  Q9 p1 R+ D1 W" f3 G( Y+ C
     {
" \, n4 f$ _) t      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ a; G) S! S& {      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# P: U8 V' F! v
     }
( k/ J8 f: O" N: @" E# z: O     */- X1 Z( g7 h- ]
    //////////////////////////////////////////////////////////////////////////
, V0 y, w* t# r) v3 z    break;% d6 v: M! l$ Z  m% l7 w6 t
   }
+ a8 \0 ^2 P% y, [6 g8 S  S  } ! G( G, W, A$ P* v
}
! b) z7 a' T9 i' R% b* zm_wndMenu.SetVisible(FALSE);
1 _8 Z6 \$ ]) t2 J1 ]
% H  j7 S# c4 O* u. I--------------------------------------------------------------------------------------------------------# N! e1 G8 W4 \" V) B; X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" q- D5 _! P$ I3 ]( z
{4 \3 J/ x3 h7 T2 S
BaseMouseCursor();
- d. p0 W( ~" [& B}
7 R, U3 }0 s7 U在其下添加:2 W! Q- c7 G* T$ _9 J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- O! `$ e$ O9 q8 H6 B+ ~- x' I5 ~" m; v
{
$ s  f7 x" n9 d: Q, zm_wndMenu.DeleteAllMenu();
: d1 h' ~8 }9 N. Q8 wm_wndMenu.CreateMenu(this);
, r& J0 d* o5 `% P* f  ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( o9 U9 `3 W! i3 {* `* O- |( W) ]# f, h% C+ v2 P/ j2 W* [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* A! y. k: z1 p9 ~6 p{
5 _7 s- z! y; r7 h* p" N6 W( A+ i$ Z  //P以上级别才可以删除所有道具% c4 c7 F1 n0 n1 s1 A4 a7 L5 Y
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 C; Q$ U  u7 |$ u2 p}
! ?+ M7 ~* ~+ I4 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 a5 r; r/ Q! e' tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( t' P0 L6 C' B( y& o! Rm_wndMenu.SetFocus();
$ A+ ^$ E" a; Z9 a9 O" w}
0 p5 }7 ]% r( x, ^) {3 {9 }4 L+ R; f------------------------------------------------------------------------------------------------------------
  ?6 E$ T3 O9 k* s7 x  G*************************8 ~2 R& \+ @$ p- n/ @/ E7 w
WndField.h文件4 D' K8 q7 Z1 }
*************************+ H; H' o# e# E
搜索:BOOL m_bReport;+ J% G( W' K3 _8 p; }+ G
其后添加:9 v- @9 i6 ~: [& d$ T! p+ Z# Z5 K: x
CWndMenu m_wndMenu;
7 y1 J# {' G: r# j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ l% U: z  \# \) s4 |
其后添加:, }# q  |* K3 M# E+ m0 ?; P( e9 O7 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 Z" t' v2 Z5 o9 p+ V4 a. _( {
0 |/ h' B& l" H( e+ K, J9 p/ a# D; ~% E! z3 E7 [# C" `1 i

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-29 23:48 , Processed in 0.120527 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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