飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
! ?) P1 C& w2 S) t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 m1 o+ O; A6 Y, s9 I# N& }& u

5 V- s' G# @3 Ystruct sItem- l6 N- [4 K" h! k. C1 K, I1 q
{& h9 C! L- d  F4 b
DWORD dwId;
3 X! t* j8 z, s5 {DWORD dwKind2;
; [) ]4 G! e9 p5 Z( c! iDWORD dwItemId;
7 u! i/ h8 l: E' B  a5 D8 ^1 PBYTE nIndex;
. \; C7 \) {3 p6 N; X! V: PsItem(){- [, T* J) O+ ~" D& K' y
  dwId = dwKind2 = dwItemId = nIndex = 0;  S2 I! |, _  W% o" C! C4 _) i5 ~
}
& M1 R9 Z$ h) x3 C4 wbool operator < (const sItem p2)
2 g7 }( o1 Z6 {( j8 \+ [{
/ E9 S  f  F+ [' m) |  if (dwKind2 == p2.dwKind2)# d" W% i- S* I
  {
$ A, I% l3 a% g  E) Z   return dwItemId < p2.dwItemId;
: v+ q( h1 V! i$ ]% v: W7 c; g  }else{
7 d. B8 u/ I7 r. b3 y   return dwKind2 < p2.dwKind2;6 n4 S8 Y/ h+ O3 b/ \
  }
1 W3 L% B% P. L8 e8 [}9 p3 H& w$ `( U3 h, H( z& s/ f3 W9 q
};
( S- X  N& E5 E' N3 V: hclass CInventorySort
5 z/ J) o0 Z9 k{8 s" c/ K: I" M. y! o! C
public:- N/ v+ |$ ~+ R7 |% w( z4 l( j% X
CInventorySort()
; I# E0 Q7 m! r) D% G" Z8 @{
0 X6 n( z, l4 }# o9 P+ ~# G$ ^  m_dwPos = 0;
$ E4 \' V! D- a; R9 X- \- Q}4 V6 j# \% e5 |5 p. F9 b  p. r6 K
~CInventorySort(){}
9 Y7 d: |$ k8 O" G9 yprivate:
0 j( e; d/ ]9 b+ r- s. isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) q9 K1 q" t& K, U
DWORD m_dwPos;. N3 v6 V! N9 F" Q
public:5 ]3 c+ G( h/ t; ^- K# d
void Add(BYTE nIndex)
# D: f: O! R3 [: ]0 c{
" N& m- K8 n! x7 {, P; E. b# J  if (m_dwPos >= MAX_INVENTORY)
0 a. ?9 a8 x. A( \& h) A  {
" y/ g5 S! ~. q+ t7 X   return;8 u1 K) n; p7 @( e
  }
2 S- P' S& G: R1 C  m_Item[m_dwPos].nIndex = nIndex;1 E6 N( |6 c7 \* m% A9 q
  m_Item[m_dwPos].dwId = m_dwPos;
& o' i/ c) |" r! S- `: W  m_dwPos++;1 }9 u9 t, Q, z# K
}& i1 ?1 f0 s2 V' u; ^* b. ]  S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 S& W8 s, W$ P* r{4 o" w1 Z( z2 F9 ^% [) g0 I
  for (int i=0;i<MAX_INVENTORY;i++). Q+ w) F1 ]* i2 L$ _/ Q7 A6 n$ \
  {6 k2 s7 }0 {" T" {+ q0 e
   if (m_Item.dwId == dwId)
; a. o: J. u' t8 l  U% ^   {) d' [: Z' I7 f7 b! F, N
    return m_Item.nIndex;
6 {' L4 |! |- ?4 ?( c   }; _' l7 S3 u; v3 _8 x
  }3 Q. R5 d& W# K  V* D
  return 255;3 t  p9 E& y. r& i# `% V) H' y
}# k# }5 c& `" s, Z, x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 }& i4 W& B5 g% `{
& O3 ~6 n; T& a6 P% c* @  BYTE nTmp = 0;& J2 G9 {0 Z- x/ L
  bool bDest = false,bSrc = false;* J( |$ {0 i! g& _$ ?3 B
  for (int i=0;i<MAX_INVENTORY;i++)4 I  u" _" K- q# q
  {
2 C0 A; R( ~9 t: h) E- B   if (dwSrcId == m_Item.dwId)- {6 w" m7 U3 G2 t+ F* b
   {
: N' ^# U. B7 J/ w) d. |; N    //id相等 则 改变对应的dest和src2 K. H* o' M# ?# s( K1 a
    nTmp = m_Item.nIndex;
6 f8 J( S, \$ _: Q( n. X    m_Item.nIndex = dest;
' p1 ^. {/ b# @  r, \9 S. U, l5 e, s   }0 V5 t% B$ F, {9 K
  }
$ J2 k% Y8 U, X+ l. X3 V8 l  //临时数据保存完毕,交换开始6 o8 b) N3 [4 U
  for (int i=0;i<MAX_INVENTORY;i++)
6 L& U% }  V2 j% C& q  {2 j2 i# a5 j6 x- H3 c6 c
   if (dest == m_Item.nIndex)
8 |8 H7 i8 R3 R, O/ Z' G& q: N0 ^( p   {
1 Y3 \* X. T* S# J& b( I1 R    //id相等 则 改变对应的dest和src
3 B7 p; x& C) n# u8 l) r/ F    m_Item.nIndex = nTmp;
0 ?/ W6 N3 J5 f& V6 V2 J0 e) ~   }
/ y3 p  V2 X- e7 k  }
( m' S( I" `) _}
8 a2 _. u. W* O  o# i" s8 @};
7 C  Z8 P- S( X/ O/ n-------------------------------------------------------------------------9 j# B* H& C$ r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" I+ i. \9 [9 e1 }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; N  l2 s. t8 i" \& E9 U; W3 |) i紧靠其上添加:$ U2 i1 @4 t# D  g3 Y) q4 v
if( pWndBase == &m_wndMenu )5 U# C0 q. d- X( N1 G2 x, c' V
{' k) G0 B3 n2 P+ D( Y$ V
  switch( nID )7 A% n% i: c6 @) o' H
  {
+ E1 I# T4 I( \8 q- C6 f  case 2:. p4 s7 G5 g" A( ^. p( B  k& S
   {
* }' Z: ?8 G5 F2 |+ y& b    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 U1 O7 F3 R, C' C' `6 n) Y* o
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ x3 i6 q, s- {0 o) M
    {
. r, E" p# J! i8 l! j     break;+ |4 n: s: V* H
    }# J9 B3 \, g$ T  U9 {2 X
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% M0 g2 U$ T! k: p% V    {5 o$ G/ |8 h! Z! P$ o) W. v
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( d$ m0 }8 z2 P2 I
     if( !pItemElem )
5 h; I; {: ~. x      continue;
6 }9 w; ]& }/ a8 T     if(pItemElem->GetExtra() > 0). S5 W  p" e( x6 j0 m# M# a( p
      continue;0 Z( T3 N8 N9 D0 Z7 r$ v
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* o! ?  K% _6 a! R% [1 h      continue;6 |. o  w2 a& O' C. c. C
     if( g_pPlayer->IsUsing( pItemElem ) )
3 d. M8 N& Y' \! y      continue;1 m" v! S* `# s3 v
     if( pItemElem->IsUndestructable() == TRUE )! X, s/ J; _" y
     {
: {% y7 Q& l9 k/ V" s      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, B4 Q! I  Y9 h6 y
      continue;6 `1 C0 d6 I8 e% z3 j
     }& ]( W  V6 Q/ `/ m
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ L8 L- y+ K- @. ^$ S/ E! U
    }
& U% `- U# z3 J) {    break;' Q' U6 Y( A% m
   }& h, o* ?6 p. M7 t0 i
  case 1:
' [" D9 X) B7 z$ H7 Q   {
: k7 U( G7 w3 ~1 v8 h) P, G+ P    //整理背包
$ l4 g5 r$ ]$ P. `    //////////////////////////////////////////////////////////////////////////
0 p7 Y  Y9 L5 Y  m* D  p    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ l# ^( B, }! J
    //////////////////////////////////////////////////////////////////////////; x" @( n6 N5 p0 o
    //////////////////////////////////////////////////////////////////////////
0 _& k3 M, e5 O/ {* W" c0 d    CInventorySort* pInvSort = new CInventorySort;, w7 g; H: O" l* r8 |  b; |. x
    vector <sItem> vItem;4 p( h: c9 f5 e& }
    vItem.resize(MAX_INVENTORY);//初始化大小) n! }' K- x& F( q3 x# T& `! S
     //////////////////////////////////////////////////////////////////////////$ i/ P5 n- I3 D
     //填充数据
. F2 N: p( B' T     for (int i=0;i<MAX_INVENTORY;i++)
1 S9 O1 p6 C0 c1 y" J+ @& J     {6 A" n) q' i$ P4 n' F; l' _  f
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 ^. K0 W: U, h+ x      if (!pItemElem)1 A: C9 P0 a5 A2 C1 m/ H
      {
5 `5 c& ~  {! [8 ]( V$ }       vItem.dwKind2 = 0xffffffff;
! I( j- h  ^- c& i; s/ g. X* |       vItem.dwItemId = 0xffffffff;( x( z6 A5 c" |
       vItem.nIndex = i;
% O6 ^" G/ I8 b      }else {% ~7 a; w7 o( w( t$ G
       ItemProp* pProp = pItemElem->GetProp();8 c4 B  m( P6 ~, n3 d$ k3 L
       vItem.dwKind2 = pProp->dwItemKind2;0 W$ a; D1 k) r9 N
       vItem.dwItemId = pItemElem->m_dwItemId;3 p* Z9 S4 C4 u
       vItem.nIndex = i;7 A8 T# L" \7 z3 q/ U  O/ D* i3 w$ S
      }
/ U" v& u. {. F; A+ g% e1 z% }      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ P7 N! z. @1 v  Q8 O1 Q/ X8 d; ~
     }; ~8 k. _3 s- V7 D7 Z" g
     //////////////////////////////////////////////////////////////////////////
* `7 j7 c1 C" h) w" s4 n     sort(vItem.begin(),vItem.end());//排序2 X$ g2 p: ^3 t, R7 l0 _0 L3 W
     //////////////////////////////////////////////////////////////////////////' }6 E; T' ~- f8 K) _3 d3 C! u
     //交换# _' ^% m# P- O$ M
     for (size_t i=0;i<vItem.size();i++); K. {; u. L* @. g+ D9 [+ }" `  c
     {
' D/ a  Z* q  t4 t* R      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% P3 b) `+ }+ b      pInvSort->Add(vItem.nIndex);5 ?4 v" V$ m+ H" H& v5 Y& ?& w1 T
     }
( q5 N6 O& s4 v! e! g+ \6 F     BYTE nDestPos = 0;7 ^# @9 r8 K: S* F7 s5 s# N: a( `
     for (int i=0;i<MAX_INVENTORY;i++)
6 ]5 V* H4 p. ~, w9 T0 d     {; |& |. h" a- G# \7 V
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 `+ p! m, u5 W2 F; Q9 X      if (pItemElem)! g5 H3 l4 K' z- F
      {
0 L5 R/ o6 D: ~" a2 A       if (IsUsingItem(pItemElem))
7 s5 [" d9 g$ o( P  X5 e9 R8 U2 T. Z       {
  T$ t! m& U: @, L& j  C        //这个位置无法放- u% r* X. `" G) w: @
        nDestPos++;2 \5 G  ]$ Q6 l
       }
2 j& J) {+ `( v4 P      }
3 E% S3 V2 M5 _2 S% K" z      BYTE nSrc = pInvSort->GetItemSrc(i);  J: C8 K* x7 \0 h5 D# e" j7 W$ R
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ H$ J- [8 d* U. L      if (pItemElem)
" h$ T! _4 g9 @. S      {
3 }4 z0 \; D$ k6 I       if (IsUsingItem(pItemElem))0 V. w6 F4 e& b9 p4 \
       {6 S% s/ {% e# g7 C' ?* j5 n
        //这个道具无法移动,跳过
% ^' D) [0 z% P! O  P/ f        continue;: q! l" f) z, y' s& G4 e
       }$ u, H0 m5 \6 V  Q5 m
      }else{8 _& y9 e0 r+ p9 _
       //空位置 不用动. ^2 E5 d$ x+ ~; F
       continue;- R' k5 M7 W! {2 J6 c( U( g; Q
      }
0 D& b' \; h: j% v/ ]: l0 l) Y      //////////////////////////////////////////////////////////////////////////* m* i& Q% ^) |0 R2 L) @9 X+ P
      //开始移动- }# U/ j* F, m3 ~7 D- j) n! k
      if (nSrc == nDestPos)/ ~. h1 ~  K5 p8 C" J, ^
      {7 t; k+ j, m9 F  P9 m
       //原地不动' Q$ L- p+ R1 u2 q; W
       nDestPos++;/ w* G) E% |2 C( K1 c' m/ a
       continue;
1 k- ^0 F. L7 \$ a, d      }! m. N5 w* y; I1 }& k8 G( K
      pInvSort->MoveItem(i,nDestPos);
" j; @3 O( O; W1 w0 ^. q7 x4 t      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 l- M4 m  z4 D5 Y- w      Sleep(5);
4 F4 q3 I0 O% R5 Q" B: Y) W1 n0 f      //Error("移动 - %d->%d",nSrc,nDestPos);
: ?/ o: l& z/ |% J$ j& {, ^; B# o# p      nDestPos++;. _6 f" P* G7 f1 V3 d1 U' N" l' F
     }6 o) a& z2 s9 `: m1 `8 C; r' ]
     //取第一个元素的信息. m8 p0 ]2 H# Z: _! X& L' M  E
     /*
( \6 r$ D! b5 A: C     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 X$ u$ q- j6 @/ X7 F8 p2 E
     {
; u2 H5 U+ \6 B6 A) M      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 q0 J6 B) Q( a, t' S0 E      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ Q! @) M% ~4 C     }/ p, z/ p2 q  ^# x, G$ }
     */
# X. B: H! ^# T5 ]    //////////////////////////////////////////////////////////////////////////
( H9 t  s9 l$ G4 F: V    break;$ m/ m( n# L$ f8 E- B0 z) S
   }
) i/ @! i: t! |( X$ U  }
4 e( d9 c! t/ p8 w}
, i  U# O8 ^, |7 t! D$ Wm_wndMenu.SetVisible(FALSE);2 a/ W" N* z7 B0 L* I# O
6 ]! N; z" X& t! W1 w& Z6 P  M* Q
--------------------------------------------------------------------------------------------------------
" @7 I0 `1 |$ l( o3 p% V6 H: E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% Z+ B4 F7 B+ p{
' E5 n5 Z5 `- l. _) N9 Y3 uBaseMouseCursor();
4 M2 ]7 ]7 y" U) p4 n, {/ {, J}
9 a3 f+ H" e& n& g3 P在其下添加:/ \( G8 g& G2 h) R# i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 `* P$ L. e* b+ f* v, O
{
2 s' r* n/ N7 N( ^& A0 p! Tm_wndMenu.DeleteAllMenu();
$ u6 m0 f* v. i3 O$ Gm_wndMenu.CreateMenu(this);
& `1 D5 ~, s. }+ J' `$ F7 f8 Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 A& U9 q$ L+ m( l  [) q/ Z9 n; S3 ]1 b; y4 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 [, y- v3 e' s  o6 Q{
/ r2 L( \5 H) |  //P以上级别才可以删除所有道具5 e& w4 h( i8 y0 u1 [! ~: @
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" N/ N/ V( f" B2 i6 \0 z}
* d: {. ]+ g1 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" i- g) v& _6 `, u  u
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( p' N- r. ?* O% i$ @5 y
m_wndMenu.SetFocus();% Z( t1 g9 g4 Q$ b
}
2 ^( M2 R6 a. |------------------------------------------------------------------------------------------------------------
( v+ ]; S1 _) Y( i( q2 o+ x* o*************************
' f- n4 A$ U+ u$ X. J6 q) pWndField.h文件0 I: ]: @2 B7 h4 {6 O* [
*************************' S" M8 C( {  a& p4 b2 ^+ A1 d
搜索:BOOL m_bReport;
4 ~7 {+ l$ g2 x# a) R# O其后添加:5 i$ u9 y2 {* _
CWndMenu m_wndMenu;
/ E$ J3 a$ c+ e& o+ l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ t* g' h+ t  y* {1 b, ~$ k其后添加:
" X" a7 R* M2 {3 J. [virtual void OnRButtonUp(UINT nFlags, CPoint point);+ T0 z( U/ a3 H  ~; ?  A
4 e. R8 k( ?. m8 L  T3 f2 Z

% `9 r' J+ h! M% H3 S

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 05:02 , Processed in 0.111381 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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