飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件( y! F3 H5 z8 }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ L0 W" Y$ n9 s3 {; l# T2 _5 i
' }* [- M+ ^( p/ C8 o% Kstruct sItem
7 F, p* e3 t$ V* J{
& M8 v6 D5 f: B8 g1 mDWORD dwId;
% N" k5 U# t" j% F! d" CDWORD dwKind2;- h; c+ l0 B' S( _( Y! G0 M
DWORD dwItemId;
) @, k! |7 W; i! l; c8 A7 u- [BYTE nIndex;7 y  f/ R2 U, J0 f; ^1 [; D" m
sItem(){
% \& `. w' ?+ ]9 z! c  dwId = dwKind2 = dwItemId = nIndex = 0;
! x5 x# o$ R3 L; \. N9 w. u}
4 O2 \0 r3 p7 F( k  Hbool operator < (const sItem p2)) }+ L( k$ v+ q) I6 d
{
+ D5 M; e% F' h4 G# u& Y5 J  if (dwKind2 == p2.dwKind2)* x. U9 C6 v* d- P
  {! @+ m: A6 r! ]6 c
   return dwItemId < p2.dwItemId;& y1 c$ q% g. j# E% @
  }else{
! u4 J2 S2 @) t3 z   return dwKind2 < p2.dwKind2;
) Y$ l  k+ z5 k6 h, ?1 p) z" @  }* c: E6 f" V! `! R) \$ ]2 Q
}
* W% ?& x# g, m. I) l) d. p};( q- [8 w- `* {" v1 D
class CInventorySort
: S" b( v  z7 V4 \! p+ }6 `2 g{
) F6 l+ w. G) U$ fpublic:
) q0 ?+ `4 Q/ Q# x1 R5 n6 `CInventorySort()9 N  u6 d) R# b# `* ?& Y1 j
{) o& V* Q0 ^: _+ G: w
  m_dwPos = 0;
6 o1 [# i3 b" F8 E& J1 ^* k, Q}0 c+ D% M' H) |4 P: A) d6 Q$ X8 W
~CInventorySort(){}) ~0 ]. Z$ A9 U* [' W3 n/ V+ b& y0 O1 |
private:
! u; G, \4 M0 Z( ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 {, w/ w* o3 x3 R; g
DWORD m_dwPos;
7 T- T2 k& U# a# I7 ~1 z  fpublic:
; l: G+ ^+ _; r5 Jvoid Add(BYTE nIndex)5 D/ D1 H* l. E
{* D6 {4 ~1 ^3 I3 u/ L' x+ C
  if (m_dwPos >= MAX_INVENTORY)9 T$ X2 b$ C5 ]+ m( S9 w, E
  {
2 O2 A5 R; J: i   return;
; `" L% Q1 D2 b6 \& M  }9 I6 \3 r0 G% H! u/ x
  m_Item[m_dwPos].nIndex = nIndex;
/ z$ v" J# M# A/ X- k  m_Item[m_dwPos].dwId = m_dwPos;
  ~$ d( j6 {3 E& X2 l: v0 l6 s  m_dwPos++;# l+ ~4 Q6 n5 l/ h% L3 x
}, T/ T# f0 ^% q1 ^$ j' u! p( `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" u% {5 Z9 b. r2 w+ M; {$ v{4 U# I! H* B7 r2 k$ s, e7 e
  for (int i=0;i<MAX_INVENTORY;i++)0 }% I* D, Q; c% A5 k
  {+ }! A" o9 O# k5 H
   if (m_Item.dwId == dwId)) L+ x0 W, ~. I& _
   {
2 y2 _9 s" N9 T! m0 W  h    return m_Item.nIndex;
- v& i- U. l4 R/ r   }
/ f* b% W& o5 V) N, E. O  }
' }- \1 V, a9 V! K  return 255;: y8 u$ _1 V) Y* \) o9 Y, x
}
6 y8 ?0 Q  a, _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. Z% d0 R4 a; c; w4 B/ q9 f
{& ?. `# j% T8 K) c4 k( s
  BYTE nTmp = 0;
& A; p8 G! q4 ^+ B5 K  bool bDest = false,bSrc = false;# j2 ?; q1 Z  f6 p6 k
  for (int i=0;i<MAX_INVENTORY;i++)
3 N" a4 \- f3 ]) p4 w0 }) p6 M9 x  {
" x/ ^" k+ J2 M   if (dwSrcId == m_Item.dwId)
% V/ A/ ]  d2 _& W   {
3 `/ v" E- @: K* G: \3 Z: M1 O& ~    //id相等 则 改变对应的dest和src
# c! L- a  {2 `3 R% L2 R    nTmp = m_Item.nIndex;
/ ]* @; ?. L% ^    m_Item.nIndex = dest;
2 o* v# _6 p9 O   }
' y9 J% M9 R+ n! O( h* D; c5 ~: u9 a  }* }) T: G# a8 R) ?) J5 P2 T/ \
  //临时数据保存完毕,交换开始; O" l( e( u2 C: V5 l8 o# j+ t
  for (int i=0;i<MAX_INVENTORY;i++)
4 X. s0 c) g8 R/ C+ r9 G: S4 J  {
2 u9 B- t+ b1 K- U: t, N; m' I9 _   if (dest == m_Item.nIndex)
3 e* o  x* r2 U: r3 i% K7 n   {( [1 b: a5 `8 q+ }+ j
    //id相等 则 改变对应的dest和src' G! o" R6 l/ l
    m_Item.nIndex = nTmp;
7 |% m8 k$ g( L1 N0 F   }( P6 Q4 l" Y* I: [7 n
  }3 Z+ ]- p# z& D
}
4 h* K! J* K0 c4 Z  Q' j5 e2 I};
& e8 M) f2 V3 d-------------------------------------------------------------------------/ N# k1 d# G) B5 w/ H0 A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 s1 ?2 c9 u  E* q+ J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) N+ V6 O* A  @& o1 }3 J3 k
紧靠其上添加:! z% Y$ ]" ^# x
if( pWndBase == &m_wndMenu )* y7 c; i& l4 N: q
{" u; I3 j/ g* O( g
  switch( nID )7 q- _, Z6 O9 _# Y2 l
  {1 C8 T( E" {' Y( O/ q% C8 M3 S$ @
  case 2:
/ R7 x4 E' J7 R$ p3 r. P   {( J. [( f" W6 s- [) {
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 B( m6 m& p) u9 \: y8 ]# r    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& t$ z4 ^$ ~! D# M- ]
    {. |6 V; I) e$ }1 R9 c1 U6 K% f
     break;
% }. i8 P& L  |) d    }  _; C# R1 c5 n, `% B
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ n. n: s' u! B2 x2 g# F
    {, K' V6 H/ b9 X8 X% g5 Q) U  `; u
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. c( w/ O0 V$ `3 X2 u
     if( !pItemElem )
+ Z+ c& t& z/ v; a1 ~      continue;
: a& e$ s& G# ]( o& x; h1 }0 P     if(pItemElem->GetExtra() > 0)& N* J# o0 a# `; i( b/ E
      continue;9 ~' u( d& @9 c- I( V+ b
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ ?7 f- F; [$ r/ d      continue;
; Q: [1 E! p8 b+ L+ r     if( g_pPlayer->IsUsing( pItemElem ) )
3 ]1 a/ Y+ S- \9 c/ e2 O( B      continue;
4 C/ }4 u8 ~9 W' L$ h  N     if( pItemElem->IsUndestructable() == TRUE )
$ F" J% o( _1 X! @     {
* P" Z: s- I# Q2 p* {      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( V; L+ h# H8 s5 U  T$ ~5 B      continue;
- Q; `  D# W# _" V5 p1 `; ^     }9 Y6 p# `. p! n. q! }/ H
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 V$ ^" O% S8 a! B# D3 M+ A
    }
9 J9 A9 L  D9 t- S/ S% q    break;
$ I. C' |1 D( d7 O/ [5 ]+ O7 K9 c. }1 k   }, E- Z  _" u. p; w1 [0 Q
  case 1:, \- {' G7 o0 U6 l- t) N4 @0 E
   {
! J8 ^0 V* ^1 r. N    //整理背包
" S$ t7 U" }* O5 X    //////////////////////////////////////////////////////////////////////////
' A: o4 @5 K$ |' C    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 w  ~: T  m; o8 Z% x' G    //////////////////////////////////////////////////////////////////////////
% t) l9 e# W- ^, y. c    //////////////////////////////////////////////////////////////////////////. }% V  f: ]& V  k
    CInventorySort* pInvSort = new CInventorySort;% K: Z: l- J0 R7 \" u0 v
    vector <sItem> vItem;$ [$ G: {% G$ }% p9 \5 D
    vItem.resize(MAX_INVENTORY);//初始化大小
5 F6 P+ I. R5 k* b6 G& z     //////////////////////////////////////////////////////////////////////////
' D2 F+ B) E" c, h2 Y1 l     //填充数据8 j6 V6 |; O2 P0 I$ h
     for (int i=0;i<MAX_INVENTORY;i++)
. d( d/ @& D$ V7 ?: N     {
6 x( n- e/ t- C6 R' a; d      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 N& K- ^9 ?5 L9 ]1 ?8 |. {* ]1 Y
      if (!pItemElem)- U0 N# b$ ]3 u3 W! X
      {
  H+ u) @; C0 o2 K" s/ x/ E       vItem.dwKind2 = 0xffffffff;
# P; p6 K& o' v6 S       vItem.dwItemId = 0xffffffff;
! R$ i, j/ ?  {& Y# t       vItem.nIndex = i;
  d7 _) @0 Q) a) a      }else {
8 b, ~: _2 ?5 i+ ?2 ~       ItemProp* pProp = pItemElem->GetProp();
  {, A2 `: [: `4 L- i6 V/ {       vItem.dwKind2 = pProp->dwItemKind2;; Y8 e- m$ S* [! w/ r, p, ?1 a& V
       vItem.dwItemId = pItemElem->m_dwItemId;
* l' D* ^7 Z* s: s) W0 [7 @4 i       vItem.nIndex = i;( m3 `3 d7 A% V# B9 |
      }* s1 |0 ^* m. U1 R5 H6 w
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: o7 s% O$ R0 p     }, Z2 V) M+ R/ T% n3 c  T5 \
     //////////////////////////////////////////////////////////////////////////$ ~+ a. X0 _8 ^* d/ V( q8 Z
     sort(vItem.begin(),vItem.end());//排序
$ M. w  e6 n: B( C9 P4 m  H     //////////////////////////////////////////////////////////////////////////8 d  t+ a" L( g5 U9 G
     //交换. W" k0 N& V) z, ^: m
     for (size_t i=0;i<vItem.size();i++)
' L; r" _( \7 @. N     {
- }9 z. H9 D0 u- `' i4 [6 J; O      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; L+ ^8 W2 I% Z9 ^- {      pInvSort->Add(vItem.nIndex);9 ?. e4 e& \, H  L8 u
     }
2 J  q( w+ o- c9 N$ W     BYTE nDestPos = 0;
8 @( j) t, m) k; k     for (int i=0;i<MAX_INVENTORY;i++)
5 @+ j3 ^2 C* e9 q8 B; O/ L     {
4 D7 C& A3 ?% B$ ?. g4 v! b2 Q; M* `) |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 P: E, v4 U4 C: S# a: L9 R8 a      if (pItemElem)4 t: _. o, C- L$ H6 I! o) \
      {+ [/ i( z! Z* l% h( [) K. a0 h+ N
       if (IsUsingItem(pItemElem))& p! L; w4 D$ ^& B" n+ A7 _( f8 m
       {- p7 \7 X7 p5 }; y! k
        //这个位置无法放
+ Y7 ?$ m* C, w& _        nDestPos++;' f5 o5 V, N$ `* A# B5 f0 z
       }
/ m3 h0 [$ s* s( r: N9 E      }# n" l" u8 B1 Y- \, U1 q1 N) s- A
      BYTE nSrc = pInvSort->GetItemSrc(i);
1 ]7 p& h' V6 X& n2 i/ K4 a' n5 [: g      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 [; f& ?: D  z9 C: a0 _
      if (pItemElem)7 I% S/ m/ K  ~
      {" @$ [0 Y& z$ X7 N  k/ L
       if (IsUsingItem(pItemElem))
5 l1 b7 V! l8 T3 F" N       {! W) _) y* H( D1 Y9 ^4 |& Q" J
        //这个道具无法移动,跳过
! p8 b6 Z! L" d8 |$ Y        continue;4 C7 w" H0 }- ~! |3 e- y: N
       }( {' ^' ~" R" b, h& s0 [' ~1 u
      }else{
" Y3 i6 a" s( e) b- x" w! T       //空位置 不用动# g( s) X2 p9 _" _1 j* e6 q
       continue;0 c' e5 K& I) z4 b
      }
; O! v/ d$ Q- N, ^9 G) ~      //////////////////////////////////////////////////////////////////////////
( Q: p0 _0 f$ V) ~" d      //开始移动
8 `7 t! G! z) l8 M: J      if (nSrc == nDestPos)/ o( Y7 Z. A- ?3 o* b% E% b
      {" [0 X* K, s7 z2 u( i
       //原地不动
8 E, N# u) q1 a. V1 Q       nDestPos++;* a' K6 V% [4 U' Q
       continue;5 D# C5 s: H' ~% ?
      }7 O& S$ C% c( W4 L
      pInvSort->MoveItem(i,nDestPos);
% w, u% E' S' [: ?0 l- ]) H      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 D2 Q2 J$ u" w! z1 j( d0 ]4 s      Sleep(5);
5 O% d0 l/ e7 {  X' J2 K+ [      //Error("移动 - %d->%d",nSrc,nDestPos);% u3 t7 I/ d: L( w! c; \: Q
      nDestPos++;
' u0 k9 H/ R/ c+ i: }9 L+ e1 V# \     }$ f4 k* k6 y# H: N: S
     //取第一个元素的信息, t: D+ Y8 k, k6 }
     /*: R7 l0 [9 j, c1 V$ f+ p+ }3 r& [3 f* W% ^
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 I: t9 Z+ k  v* E
     {
( ~) {7 s; F* `" z0 u      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 F# Y9 V* p; y0 h9 }" y
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: h  Z7 R3 M2 Q% A( d% [& Q8 r     }
" ^/ Z  _. X9 ]; g+ u  Z     */
' U8 K% t+ G$ g" f! P4 ], T6 I    //////////////////////////////////////////////////////////////////////////
+ a. S( {0 b! ^$ j4 {    break;+ ?1 ]+ o1 S8 u# G0 U0 d9 T
   }0 k  I2 ^/ W0 F3 F5 H9 c
  } 9 H8 W7 W" D# _; Z- I; \+ Z
}; E+ m/ T4 T5 S
m_wndMenu.SetVisible(FALSE);
3 Q! ~6 z  h# r& s7 S7 t+ e
" Y6 k1 F" e* i  G1 `) K--------------------------------------------------------------------------------------------------------
4 V: \# c& _1 O+ ~7 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- J$ R; M7 ]8 z$ l" \! A{) D+ C  y8 n9 F4 F% W9 N& E
BaseMouseCursor();  E1 S) [# V  X: t
}
5 f; R1 u3 r0 @, a7 Z( H  J. D在其下添加:- i) Z6 L/ c# l9 [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. a, `# `- Q4 w4 k{) `. T) X( x* `" a; R
m_wndMenu.DeleteAllMenu();; ?, z9 O* l2 n
m_wndMenu.CreateMenu(this);$ k4 h# Z8 c( D; B0 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* c) l: P6 O* Q) ^* e9 m3 r- k6 w" W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  g" \" i8 K. \+ ^" l  z5 s
{: Q& C8 ^- w) y) R: |$ \  d
  //P以上级别才可以删除所有道具. l) S$ \% o) l8 \- g6 h
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% U7 e  j: k) t: e) w% |* N
}
- d) l+ r* g0 I, E- j, @+ H( W' em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 |: G) V1 P& h4 A8 }. g; N( Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% L5 o+ w) y" K" W3 ]
m_wndMenu.SetFocus();
7 r. ~7 F3 a* H( F}
8 I6 V8 F! b1 r$ t% z1 k: O, r% A, G------------------------------------------------------------------------------------------------------------" m9 B: z8 W; ~0 w% `: k- d
*************************
& L0 P6 K% p# `! CWndField.h文件7 z: T1 b; m: I, \* z2 g* W
*************************
+ M* |# R& j9 \, V. M% B* D搜索:BOOL m_bReport;
6 I3 e% Z. ?* _- t8 `6 i其后添加:
3 s( V; F$ {  t$ F: ~% SCWndMenu m_wndMenu;
/ u. F) i: e& }2 c. J% E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ N/ H9 P* w* B4 u9 B7 Q
其后添加:4 {, p1 @" B2 P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) Z7 G3 e! Q& T$ Z! G- S
% o/ P% R( G9 w. T  F3 P5 U' F9 [: j  x1 D

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-28 21:19 , Processed in 0.069843 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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