飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 S' A3 I1 N2 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# E! Y- {( |+ X. e/ K

4 @: \" y4 ^1 |2 V: d& H/ kstruct sItem2 Y* i' H/ C3 w
{" V. P& a" S" Z
DWORD dwId;  y; j, \" [! y# A$ |5 V
DWORD dwKind2;$ s. e; q( O3 N# N
DWORD dwItemId;
: C% j' |% M' vBYTE nIndex;8 z! \) q5 e: }/ f! n! j( u
sItem(){
* w: D! |8 u6 c) _8 ^) _$ i+ o  dwId = dwKind2 = dwItemId = nIndex = 0;2 x# l( Y2 `2 D* R; N. |
}, W0 _& S% z1 c) j
bool operator < (const sItem p2), z& l) S) i3 G" ?& M6 b% |
{
4 E9 s$ P* u2 m* [2 U  Q  if (dwKind2 == p2.dwKind2)
  h3 p2 f! D4 _# H% E  {
! o. I# L3 C1 i. v8 f' A3 Y   return dwItemId < p2.dwItemId;% b4 x( L5 s7 |5 o9 }5 \
  }else{) V# C% {% K& q
   return dwKind2 < p2.dwKind2;
6 c  L$ O* z! Q  }- P  S& _( G7 v; g
}3 ~. z& L+ u# l3 V/ X( a
};# S2 `$ t8 y! M3 j% b: Q% |) k
class CInventorySort: k! T9 l9 s% ^  r$ s6 a
{
% [+ ^% ~! J$ e; q0 Z, gpublic:
) e2 N8 S! U# \# sCInventorySort()# }7 D- i9 h- x* |
{- E$ j5 |: g) a
  m_dwPos = 0;
/ _8 _3 f' S- L}
: M( @; D' D8 t& ?3 Y~CInventorySort(){}
8 n# C0 N& Y/ r  t' Xprivate:
5 ~# l$ A9 h7 r) J* GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 V5 D# c5 ^  t. }* v6 PDWORD m_dwPos;! ]5 L$ e7 a) u0 }% z
public:
. z9 J  o& d5 b  \void Add(BYTE nIndex)
5 ^/ a5 q. }. D$ G" Z+ n( y- i{9 N& I, d& H9 Y, b: u% ?) |% N
  if (m_dwPos >= MAX_INVENTORY)5 G5 t5 E2 N0 v9 [
  {6 E! Q9 p; ^, g% J2 q
   return;
3 ?5 L5 J# x5 }4 f# Y1 D  }) ]- w7 x! @; W9 \
  m_Item[m_dwPos].nIndex = nIndex;
: F" X: v2 v% j( u  m_Item[m_dwPos].dwId = m_dwPos;3 R5 j$ x# I9 e* c( }
  m_dwPos++;
" R( N# m# z1 E  E2 [3 Z7 [# L}
6 U+ |8 Z; Y. u# MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ e5 Q, z$ `3 ^  U1 ^! S3 C1 ?, I{
( N' H, D  V# @3 T" C  for (int i=0;i<MAX_INVENTORY;i++)- \) p- X' i4 m6 b
  {; Q2 ]) H& Q1 {- ]
   if (m_Item.dwId == dwId)" x, [) y) K% ]
   {+ K( J3 [, p& L3 i9 H" Z( B: g
    return m_Item.nIndex;) H' Y3 x; u2 ~9 Q9 Z
   }
7 G2 W. k. v/ ?  }
% p9 H; \+ u- }  return 255;" z  k" A$ l. \7 }
}
+ f# b7 t* W/ u' d" ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! S# \& E  t' ?{
0 o& }# j' R; P$ C4 R( L% }" i' Z  BYTE nTmp = 0;
. X0 w! `$ U9 L3 l0 Z% v, j  bool bDest = false,bSrc = false;5 y6 V: n7 i% W) i0 M7 c
  for (int i=0;i<MAX_INVENTORY;i++)
7 I0 R' H/ c* E! D0 @6 Q! l  {
' V) x* m% @, O2 O   if (dwSrcId == m_Item.dwId)' ?3 J( u$ e5 ^5 s0 d8 `, f4 ?
   {
" E% [3 m+ K  b) d! D+ v6 S" S    //id相等 则 改变对应的dest和src
1 O, u( x/ T# q9 I9 w8 d( |    nTmp = m_Item.nIndex;
+ E' h7 T/ g% }- Y( D    m_Item.nIndex = dest;* h" D" r) i* z+ g, s: _- h6 v7 X
   }
4 e4 j# q. n4 Z) j7 W% K8 R  }  ^' Q1 K1 G5 y
  //临时数据保存完毕,交换开始8 e- z: X7 g+ _/ j
  for (int i=0;i<MAX_INVENTORY;i++): t  q# f$ D$ V) K' A
  {
5 o) d( A# j; p- c5 O   if (dest == m_Item.nIndex)
; H. @  Z4 E0 ~( j$ }& b8 l   {
- r4 l# B1 n1 C( R2 c- u3 X    //id相等 则 改变对应的dest和src4 x, U. T" @/ Z' J# m0 ?" t% a
    m_Item.nIndex = nTmp;
- e7 I& `* b3 [& o3 H$ V' F   }
" r+ k  r* F( g5 @' @. X2 h1 T  t8 ]  }) g: z$ v2 @% _2 N5 ^! z" U- z1 b
}8 \! y2 [, G5 E7 E
};2 f5 k2 L# ~% a) a
-------------------------------------------------------------------------
5 B! ?% [  A. Y& @0 i3 P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 Y! a3 p3 a  ~7 i) P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# `, f  M. U" x5 a" y1 l紧靠其上添加:( X/ J2 r- T# l! D) k" x
if( pWndBase == &m_wndMenu )
- I4 W- J. C/ G, e! x1 f{
2 E9 ]) X# Y3 r6 o  switch( nID )% W0 V* R2 B" d& Q$ B4 ?5 M& n2 w
  {3 h+ C3 w; |6 c! H5 i
  case 2:
* b: u1 `% Y2 i* P$ U7 @   {+ V% p; I  R1 R; S" a$ F/ l  G6 \
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 p- J/ ~' k3 L8 y/ s    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. n1 s$ p" L& T' A1 Y& T    {
: m% B9 a6 `5 A6 p  }7 X( C! }3 m     break;
  I; u( J2 L+ Y* Q) ?2 L    }
5 B6 A* p2 J# l" L% a! ?    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 `+ R$ n6 J8 h' K# b
    {7 I  F: R7 k0 F7 J4 l6 g1 O* |# f# q
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; \. b3 w4 Z/ |; {( p& s9 }# H- R
     if( !pItemElem )
( \7 E( p; B* S4 t3 q      continue;9 m9 s4 G' C( Q! p8 L% R
     if(pItemElem->GetExtra() > 0)$ I( N, ]. `% S) I" H) L
      continue;! x4 ~# a" \) U
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 k% d. p& t% K) w( D' u      continue;
% \; i2 b) n) o9 ]7 u' c     if( g_pPlayer->IsUsing( pItemElem ) )1 ]8 F" r/ p( c4 \) D% v5 z, u# u
      continue;
+ E9 A/ I5 j) s) m7 q; Z     if( pItemElem->IsUndestructable() == TRUE )) k2 ]' ^" t. y# T+ P  U
     {
! A8 {) X. S" _! e      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( f* U6 i6 Q! P0 D      continue;
' h2 t' F3 ?% \+ X8 h( r     }
& v6 Y$ U8 r( c1 ]: r+ g; w     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ j0 H- d: Z) T7 z2 n' D
    }' J. Y2 r/ C) \# d
    break;
8 Y8 b9 y* ]4 Y7 O6 b! b) _   }
, x0 T! i  q0 X1 O+ H. |9 ^  case 1:
( Q; m) t; ?) a& }7 W) C   {
, I0 m, Z" q& i. Z7 g: ~6 e    //整理背包
, M) j& K7 d& Y" p    //////////////////////////////////////////////////////////////////////////7 c% X5 j8 E/ j8 c
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! J, R- p3 Z! S+ ?( U6 W1 T& R' {" l
    //////////////////////////////////////////////////////////////////////////% i' T; B) F/ C+ _# j2 F. h
    //////////////////////////////////////////////////////////////////////////( l. b& P( x& _5 K7 T) F
    CInventorySort* pInvSort = new CInventorySort;
. h, h. X! Q- B    vector <sItem> vItem;
! `5 i$ F* D) g; e3 m    vItem.resize(MAX_INVENTORY);//初始化大小3 p6 `$ j/ e' M  {6 t
     //////////////////////////////////////////////////////////////////////////+ o- p6 I0 S# W: v; R: Y; i7 p1 |8 F
     //填充数据
( J; p) ^% P4 {3 _     for (int i=0;i<MAX_INVENTORY;i++)
# ]" N5 D& \2 F% c     {5 q8 Y2 V' v7 Q! [
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% e$ |* z" H  n$ z8 b/ I
      if (!pItemElem)
; u  }4 P+ Z+ r      {9 {  f; b4 A/ a1 _% @
       vItem.dwKind2 = 0xffffffff;
0 x6 f: w' o+ r) |9 b* e       vItem.dwItemId = 0xffffffff;( |- v9 u: A$ A3 L7 T% A
       vItem.nIndex = i;
1 C" ]: b  r2 @7 t2 t      }else {# F- P* Y2 d# a# `9 s6 m+ Y) u
       ItemProp* pProp = pItemElem->GetProp();
# X4 H4 K3 u$ X7 R5 D; ?$ C       vItem.dwKind2 = pProp->dwItemKind2;
* p3 |4 F# b8 h, m( ?       vItem.dwItemId = pItemElem->m_dwItemId;
  `; o2 G$ a/ M! m       vItem.nIndex = i;$ R( x) S6 |" p9 E  F6 U
      }
: ]! N) S9 C  ]      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ U6 L% z0 E" Q. r     }
; S& ]9 v: C( k( D2 v1 `6 G0 L1 ^- E( c     //////////////////////////////////////////////////////////////////////////
% P$ d% O9 f, J" _     sort(vItem.begin(),vItem.end());//排序
5 X$ I  i0 X" A, K) b  g1 ]$ c     //////////////////////////////////////////////////////////////////////////
! m4 ?# [6 i9 w8 i+ z     //交换
$ i% Q4 ]0 m. A4 S7 c3 k. \     for (size_t i=0;i<vItem.size();i++)$ C- t" M0 g. I* ?% `( b/ s
     {. g/ y8 F# w2 W2 _
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- u5 W. y" G8 Q& j, e2 {# r      pInvSort->Add(vItem.nIndex);
$ M. |: ]) q* ^" {3 r0 k. k9 ]     }5 S! J# @* R% z! v
     BYTE nDestPos = 0;
: `& V' j' i- }$ F6 T* y' M* d, q8 a     for (int i=0;i<MAX_INVENTORY;i++)
' ^) K6 [. O+ d, i) J5 [! ~" L* Q     {. S/ m: l1 I% k2 v2 J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 [; M( u1 b' Y. k, S
      if (pItemElem)
7 @- p+ D, ~4 o" y" Y      {
8 ?) R) D" p. ]" }3 }       if (IsUsingItem(pItemElem))
4 ]7 z7 t  y" j+ X       {4 f: E% N4 M, U* B: b5 ~
        //这个位置无法放" j6 o! k8 n  K' ]: ]; N8 [
        nDestPos++;
" w) ^- `) v3 ~5 a2 a       }! _* q4 F9 a, g4 M* x% _8 H
      }1 U* X' i: o$ _" O
      BYTE nSrc = pInvSort->GetItemSrc(i);
3 X! n7 B& @9 K      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) o2 J& i4 u. G) S2 ]      if (pItemElem)
: f4 o! h0 H: i' C4 j      {7 W+ c6 h' h) q, F6 k) S
       if (IsUsingItem(pItemElem))
/ Z# s- s* E! U8 }% t5 M) ]       {
3 J, w- k; f- s: V4 c8 C  m5 j        //这个道具无法移动,跳过, K. |& ]# n+ w+ O
        continue;0 i4 R1 H' G) Z6 w
       }
! T, F- K6 r( [  K1 N      }else{4 P) T3 g2 ~  d* {: A3 W1 [
       //空位置 不用动
( g! ]0 a$ C+ D: Y9 O       continue;
$ z3 e4 ~: l$ F/ |. h/ M7 Z) A      }; n: r# g! `( v4 Y. c) l
      //////////////////////////////////////////////////////////////////////////
* C( @. }# Q) d4 _      //开始移动/ s) |8 t5 e1 x. \. E: e! ?
      if (nSrc == nDestPos)  B. O, g* O- f2 ~' L- J0 b
      {* A  k/ t+ D, c
       //原地不动" _* v% D3 e) s
       nDestPos++;' ~* Q: J6 J4 T" ^# v1 M. `7 F, A
       continue;1 F, X0 i. D, q: w+ c
      }6 y" t! w, a# [; z5 e
      pInvSort->MoveItem(i,nDestPos);
; `. w/ X: T& L- D/ I      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ a/ Q) l# F9 e, H$ |( I! j  b      Sleep(5);
- E8 h: w5 K3 Z      //Error("移动 - %d->%d",nSrc,nDestPos);
  }) x! o" k  P( u! U. M) S- [! |, q      nDestPos++;9 f$ w; `, K# O7 M  K
     }
3 ~) w% Y+ @; I; b1 L1 f) l     //取第一个元素的信息
4 i4 X+ Y; R$ v     /*
0 d$ [7 I, ]+ R/ b& @5 N     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 F; `3 u- F0 V1 Y2 a6 H
     {3 i+ y; t6 x% @0 g! M. i7 O$ z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& ~* ^2 z5 w5 V4 Q$ T
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- k$ P! m% O: g4 A5 A+ x$ d
     }
& c; N- ]5 d" r2 w     */+ J8 H  D9 c# e3 p3 L
    //////////////////////////////////////////////////////////////////////////
3 B! e7 u; N7 ~+ U$ P6 _  k    break;4 |& K8 \# D3 Q9 |. U
   }
2 G8 Z+ ~+ s) d0 t: u. ~  }
7 G2 B( \' g" }: G}. g; _. @0 N6 o6 a1 }* g/ O- ]% m
m_wndMenu.SetVisible(FALSE);
, w+ O4 C: U  n- Y. \
6 }- d! C9 V; K& N--------------------------------------------------------------------------------------------------------
; G/ d/ X8 k2 z7 x. F( E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, G) F! ]' B* p! a: w{
( f9 T+ @* z! t+ M& d1 b7 QBaseMouseCursor();4 k# Q7 C6 u' @7 J- n5 m
}% q1 X, F" w6 K3 ]
在其下添加:  }- g9 h+ v! b/ G% ~1 D' {( b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). s1 D- k1 f3 ?
{/ Z* J6 m& {" J- G
m_wndMenu.DeleteAllMenu();7 Q+ q2 h$ h# q! Y9 E$ I+ L1 d; \# l+ |
m_wndMenu.CreateMenu(this);
0 j& l9 x. x. g3 N' L' zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 x( w3 D- z# N  {7 P% v& l7 B

9 \  `# t! W$ U. b0 x; T- m  c* Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H+ c/ f- @5 Z) Z" W9 W; K
{
3 e: V; Q) u6 a% J1 H8 b, b  //P以上级别才可以删除所有道具3 ^8 p1 @) X: W# s" l
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 d0 w2 B. E- |4 ~4 L+ T9 d
}
" B0 z: r2 g% O& u" x8 L- tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' H5 k  i! A/ N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ u  A9 H4 N$ @  f' Em_wndMenu.SetFocus();) F& ?6 E1 A% s& m$ T
}
0 c6 x1 C# b& e4 [( K& z------------------------------------------------------------------------------------------------------------
# x) |& n( R- L$ D8 N' o$ K*************************
6 [! o* [+ C: EWndField.h文件/ U+ j; C9 n  t* P* O* B
*************************6 R4 E) ^4 U$ ^: W' T+ u
搜索:BOOL m_bReport;* P5 [  y) G9 p8 M  n+ t1 b1 g
其后添加:
+ M$ K2 F. q/ O/ H" M! U$ dCWndMenu m_wndMenu;. h3 P7 ]( d* }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! c' u& t! D* ^/ w0 s# h
其后添加:
& ?$ m8 k2 G1 x/ j$ w* @7 ?$ ]- yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) |" l6 e8 ~% v6 t
( L  w$ c% n$ A/ F
6 R% Z% f! a3 O( `6 y& F

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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