飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
: |* O- n6 P" r/ y! j0 l0 t% |5 _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 s; h* H! w+ k& ^( ?& e1 D/ d" t+ P  _/ q; N4 M5 m
struct sItem+ X# ?& B6 Z. B1 z$ k4 W
{
, o+ m% q  W7 H1 mDWORD dwId;: W% L; [- Y1 w: g( h0 C: t
DWORD dwKind2;" |9 x: Y5 p3 `5 t
DWORD dwItemId;
8 w2 X' K* E- Z( ]BYTE nIndex;
8 G- E* g% H" @2 K3 Y) {sItem(){
0 a4 x; e0 K- M' V' `! e8 P- E8 L  dwId = dwKind2 = dwItemId = nIndex = 0;
) x* C) U* y8 O7 w' E9 a+ x/ z}9 Z/ ?5 @' [9 @4 a; ~
bool operator < (const sItem p2)" x6 m! d5 H! d. E
{
  P( a# u) T9 t% z) W# [7 I  if (dwKind2 == p2.dwKind2)8 }! c6 @+ J/ u4 P8 C
  {5 z1 }. w$ s) C2 M2 ?! E0 c6 }
   return dwItemId < p2.dwItemId;+ X: x, e2 v7 n# Z. U
  }else{5 S; s- |- S& f0 n; H' _# q
   return dwKind2 < p2.dwKind2;
  L$ K6 ], `$ ?1 Q) `1 m+ u  }
' i0 J. D+ X% J. h}
5 K$ z4 y9 d0 D  C8 D* x; ?};
* o% I5 j* o( d3 Cclass CInventorySort. t$ N4 D/ A- f; J# }: K' K
{  `. l: l- {$ E; Q) c6 Q' O
public:# [' m4 _; B# t; U7 m& [- d+ D; J2 L* S
CInventorySort()
; N! l6 f, I( ]" h! R( _+ W0 T- A- }{) J' H$ `! _3 V3 [8 L* C7 N4 B# ?4 w
  m_dwPos = 0;6 K; }& i2 C0 n* l0 {$ b
}
2 M0 }! q- F8 M& X$ Y8 L& c~CInventorySort(){}: K$ W4 l; E# W
private:
) P& p& n  s2 N: nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& E8 W4 L+ k; f8 J8 \DWORD m_dwPos;% l; i# W: i7 R* N9 i: w$ j7 s
public:
7 k. i9 ?+ Y5 Bvoid Add(BYTE nIndex)3 ]1 }& O# N; H) p4 b6 v
{9 p3 ^& \% o6 ]5 o& l
  if (m_dwPos >= MAX_INVENTORY)
+ ~( R, k9 A( l2 x, ?* F' {  {: l* ^9 c" w9 _, Q$ w$ V7 x
   return;
4 Y( i# l% O# U, S6 {  }9 N! ?$ L6 D$ v% P/ k) |% K& X
  m_Item[m_dwPos].nIndex = nIndex;! ^! }5 t) H- o7 |- Q6 z5 \
  m_Item[m_dwPos].dwId = m_dwPos;* K7 b- K& p) Z  Z  g
  m_dwPos++;
9 q5 t9 E' o/ V0 p- l( t}) Z! C( f  J4 G8 L/ v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ _) d/ `* x  ^" C0 H7 f2 A
{
/ q# o& L0 e. Y1 e! G# n  for (int i=0;i<MAX_INVENTORY;i++)
& ]3 T: \. L- R6 k8 p  {
5 j. ^/ P/ O( S  B   if (m_Item.dwId == dwId)
* h3 }& e& r3 F0 C- [   {% n& f& h" n1 }
    return m_Item.nIndex;
# M. Z3 ~1 r. [: b  f/ M0 S   }
( ?/ n' y( p2 y3 v! n  }% b* s" m$ y: ]$ W; b8 k
  return 255;& b: s; N# l& n. [9 ^
}+ P% {2 u% w( W% b& y4 q% Y0 u
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ n$ l0 v( r* u
{
! y7 R( F2 `; ^6 q& V& q3 I% J  BYTE nTmp = 0;$ P9 ^* N/ f7 }7 A* n. D  z4 r
  bool bDest = false,bSrc = false;
' H/ c6 I7 e2 ?  for (int i=0;i<MAX_INVENTORY;i++)
# q6 |5 D4 \7 W. A; _; Y5 X  {
" B% E; s' k0 z" p7 k/ w$ G4 j   if (dwSrcId == m_Item.dwId)
$ f& ?; O: Q& [   {
/ H: Q) e0 R3 m" S2 X& o( e    //id相等 则 改变对应的dest和src' r5 k5 D8 N9 e4 ^9 e: `
    nTmp = m_Item.nIndex;9 @9 Z' r/ A" j# w
    m_Item.nIndex = dest;
4 \& c2 ~" D: J   }4 g, m& j0 ^8 x5 K7 T; S: D' A
  }% J* a7 u1 S6 ^3 w% m
  //临时数据保存完毕,交换开始) @3 h' `4 [) x* y7 H; K
  for (int i=0;i<MAX_INVENTORY;i++)1 n- H; s- _; u0 S
  {
% C( G5 x) i0 A: V( I+ ~4 j7 \, o: t   if (dest == m_Item.nIndex)5 o# z6 f( O4 U( e* F
   {
+ n! d' s; d- H8 w' g2 ~    //id相等 则 改变对应的dest和src4 s) ], k# `8 q7 X0 X+ B
    m_Item.nIndex = nTmp;
! X; t0 [9 B9 _) e" h   }
0 k' J; `& m- t# _. @6 C! ]  }
. z- t& U1 c, K% d4 W}
) n4 V3 ]5 ]/ {3 T2 P; s. E};
+ n  J+ W1 U) x-------------------------------------------------------------------------) X9 a$ r# L0 x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* U" H8 g, u, t, a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# \  ~* h0 n- M; L! v7 M) |9 R
紧靠其上添加:
! ^4 r% s4 t& N2 Zif( pWndBase == &m_wndMenu )
2 [8 G3 q/ I5 f$ y( M. I{; e0 l* v1 ^& s3 V
  switch( nID )1 v  u) v8 v5 y
  {
7 ]& I- f# q" o  case 2:
# `3 J2 d: A8 L3 f4 F   {* s# I3 D1 z6 u& [' k6 d
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 k5 ?1 M9 X( z. Y7 w' r. k    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 @5 i( X4 b! j. {- G8 H' o* f    {
, w, e+ O# Q, y( d! O$ ^* y     break;
/ Z. K5 d1 ]) G3 }    }3 O8 Z9 A4 Y' n# g8 q; D1 P) X9 z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' x2 t: R+ A9 |* B/ L4 _
    {
8 b7 j1 o" A( d2 z2 [     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 @/ ?$ O. t( {3 }; j; e
     if( !pItemElem )) p5 k+ r* F" y2 y0 X" r
      continue;
# J/ s0 `" F4 B) x     if(pItemElem->GetExtra() > 0)5 |7 Z4 E  s2 \" U7 r
      continue;5 t3 C  M. ]: J6 v) `4 l
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' e. R1 d. W$ ?& q& n$ f4 |! X$ m0 n
      continue;5 d4 S3 d: ^6 C# E, ~
     if( g_pPlayer->IsUsing( pItemElem ) )) H8 U' t% }1 R: u/ P
      continue;  a4 Q' X. l) v0 `
     if( pItemElem->IsUndestructable() == TRUE )
: ~, X; i% O6 p7 N( S9 g     {
' R$ r; K" Z( B+ s; Q      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 ?, D& P! E' h+ w1 {7 k
      continue;! J" ?/ ]. e+ p; L) c+ ]
     }! w6 ]) ^7 m1 V7 M% o3 Z
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 y# G. Z; V' r
    }& p+ c3 u; b2 J6 q, I( q  o2 ?8 Y
    break;
, L% P# S" J  v% X( N! P2 N   }
) F% ?9 q8 h) a- z  case 1:
+ {  n8 Q& y7 K$ x- F; i# h- l   {
2 c3 W6 \. U$ ~' s! F8 N    //整理背包' s: W. q8 [) j3 j
    //////////////////////////////////////////////////////////////////////////% [$ D" f& T% Q) G- }. |0 N
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ W! @) N. p- i# k" V
    //////////////////////////////////////////////////////////////////////////
" d! U! N9 [2 s- v) w' i    //////////////////////////////////////////////////////////////////////////6 F7 H$ H8 p: J( @
    CInventorySort* pInvSort = new CInventorySort;: Y3 H: }/ y; D- D* p
    vector <sItem> vItem;# H7 |. c$ P0 l; z9 \& z
    vItem.resize(MAX_INVENTORY);//初始化大小
% r6 C, k8 \! X, s- y3 m) v0 z4 d     //////////////////////////////////////////////////////////////////////////5 C6 x- f1 O4 e4 y3 v- ?
     //填充数据
! T* o$ _+ j( [     for (int i=0;i<MAX_INVENTORY;i++)
% p) L1 N$ v! H1 K2 e! ]6 s+ A     {& Z1 A4 }: I, [. s4 V$ j
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ^& A, U, {& U: ]0 s, V$ D" {0 I4 p      if (!pItemElem)
* S: m% t- L; V6 T$ V0 e      {
+ V0 n# m& P4 U# C* M       vItem.dwKind2 = 0xffffffff;9 `3 ~7 y( w" l5 z+ t3 p* K4 X
       vItem.dwItemId = 0xffffffff;
! j4 u: H+ m. P( m7 H% L7 q: m8 t: {9 D       vItem.nIndex = i;' I+ G1 s9 ?+ S) q
      }else {
& q; C' a5 R3 H* ^( `       ItemProp* pProp = pItemElem->GetProp();
: t. J) l$ p; O/ H8 A       vItem.dwKind2 = pProp->dwItemKind2;
& I- j, P1 F$ V% |+ D       vItem.dwItemId = pItemElem->m_dwItemId;
7 ]) Z3 {- g4 w5 o6 }) K       vItem.nIndex = i;3 [) B( H9 j% C2 p
      }& C4 m6 r0 F* J" C5 G1 ?$ A
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 U: J5 g" C: c8 Q& }. ]1 T" m, |9 [6 m     }
( ?3 I. \" j% G     //////////////////////////////////////////////////////////////////////////& [/ Z4 N7 P3 K+ d$ n' W
     sort(vItem.begin(),vItem.end());//排序
& L3 a8 V, H  Y" [7 C$ y, n  G     //////////////////////////////////////////////////////////////////////////
8 u# D- Q# a, X* @' y     //交换! m8 f, P! F) _. |% y2 Q) U
     for (size_t i=0;i<vItem.size();i++)! Q$ t3 C. G$ j' T! \
     {8 M" a$ U, u! k9 e3 n  |
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' ?. I. `; }+ ^- o7 C      pInvSort->Add(vItem.nIndex);0 X6 N9 I. C1 ]% o' a
     }: D, Y7 m5 j8 {' y
     BYTE nDestPos = 0;
3 B# F0 b+ e" r! [6 H     for (int i=0;i<MAX_INVENTORY;i++)/ h! n# Z1 d+ Q! X) j
     {
, W, R) Z! \5 W; J4 \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 t$ e9 w5 S. x2 T
      if (pItemElem)
5 i( M# I% [9 B$ |, w      {
6 T1 r' S) _4 H. E/ x       if (IsUsingItem(pItemElem))6 l2 O7 j- h% r' T4 s; c& \
       {8 J8 O$ [+ ~5 v1 V: z
        //这个位置无法放8 K7 d( P# x( Q1 J
        nDestPos++;
6 s/ z( T7 |7 p# J. Z; F" B       }# ]/ `+ a4 r; q6 j
      }; [; W3 m: \" s, _
      BYTE nSrc = pInvSort->GetItemSrc(i);' n+ ?6 X( F$ m& k& P
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, R1 ?$ K7 I# x      if (pItemElem)
; V* e9 \" E0 J! g$ Z      {
% P0 U- _0 `! H/ p5 u       if (IsUsingItem(pItemElem))
& f% W/ o* [* i( K       {
/ B' _9 \7 S% l        //这个道具无法移动,跳过
* R" o8 N& p! l' `: a        continue;
# x+ D/ q: P& l( s       }4 h+ g& r- R3 K% o
      }else{
, h) w( J. g# F, v9 `/ b       //空位置 不用动( ^3 G% T% J+ f" n
       continue;
+ n( t7 ?. B; ]0 O; s      }$ i/ q& Q, f/ Q5 {3 R
      //////////////////////////////////////////////////////////////////////////* @1 o: Y3 J; s, U$ a3 S5 L; I' I
      //开始移动
4 f; v1 t/ S1 u% T$ R      if (nSrc == nDestPos); A( K$ Y& `  t( K" @/ h  j
      {) \  T5 }: d0 X8 d3 H
       //原地不动
0 ~; p# f7 r) t3 L       nDestPos++;
. H. J" Z/ Z% C5 S1 `5 C       continue;& ^$ f; k) }, \9 A9 ]
      }' w  ?8 z) l8 ~3 Y* q. b. j1 f0 G
      pInvSort->MoveItem(i,nDestPos);
& o0 L+ F6 V5 \# i+ O6 L      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 K; y8 N% C  H" q  Y+ d      Sleep(5);& a( z! d, D' ~" u/ o
      //Error("移动 - %d->%d",nSrc,nDestPos);
! }8 @" {) h/ d      nDestPos++;) a8 _) v- V$ E- y# ~0 V, @
     }
9 V* _5 [$ t# K/ y) B# G     //取第一个元素的信息
2 m. W5 y5 P! Q8 s8 u! f' l0 l     /*
7 ~+ L, d/ W, j- D9 x0 @, K     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) Z/ A5 o! t* C/ }. J     {
& J+ L' H$ i( g      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 F* L9 B5 ?7 p$ h9 ]' c( W      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 d; b7 N) e) z6 K, B
     }
7 o) q: V. ~. ~! e     */$ V! S, s( g( A. N0 t  w3 d4 Q
    //////////////////////////////////////////////////////////////////////////1 w' X, G* h9 S1 a4 J6 L
    break;
5 R* V, }$ Q1 \$ j   }
& S, }) k9 p4 a! C* v  } ; X% B5 j2 Z* _9 v9 I+ ]) R# a3 P
}' Y# @3 B: \& G: |; i
m_wndMenu.SetVisible(FALSE);
4 r" D3 G4 l! J) X$ X/ Z! d2 o9 [2 J& H- b+ f
--------------------------------------------------------------------------------------------------------- W6 a5 h2 a3 i% G1 q. s& Z3 ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: d, @. t) G6 Y, f5 v  U{- y' T: z8 p- R' H% q" w4 V
BaseMouseCursor();
' J1 K( P6 x5 t. Y" ?}
* q0 o0 |, @" k# j) }4 T在其下添加:  R3 h" M; L5 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% `! }8 D2 _; J" {, _6 L, ^$ U3 f
{. X2 @8 N2 M. b8 E
m_wndMenu.DeleteAllMenu();" g& j0 _) y( q$ l+ I) Q
m_wndMenu.CreateMenu(this);0 @; d' a% {) E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! G  M+ W4 L4 u/ p5 v8 {
* w6 K$ }  K6 w1 _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 g$ W( V# `- _4 z: L4 t* A& h* K{
% H9 u4 ~$ T( o. M- u. o1 ]1 g  //P以上级别才可以删除所有道具
3 Z/ O" w4 F- ^# y6 E0 m  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- U; p6 t' i9 k( f2 n) e3 I}
" B! Z! }& ^+ dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' ~  [7 }' t6 b. g. y$ E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 u' e9 C* |1 O: D2 R& l& \% t, v; pm_wndMenu.SetFocus();
/ L& R/ `+ j# U9 z}- d% I9 Y: M8 Y0 S
------------------------------------------------------------------------------------------------------------. y* _6 L6 t# x3 l' i/ b8 v+ z1 D
*************************, v) a0 ^; `# t' G8 V, J  c
WndField.h文件
, S; m" j0 G0 G' ?9 f: e*************************9 B9 p* T; @7 r& Y" a
搜索:BOOL m_bReport;
+ V# P* \+ z& S# k* g其后添加:
7 g1 c( }# ^, j! V1 q7 F0 pCWndMenu m_wndMenu;; X  E: B- r1 \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 U1 u* `' h5 r其后添加:
% ]- }6 Q, s( X3 |0 qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
, j- d3 p0 f' e7 R# C: i, g" M9 Y8 s! h3 s; G/ |. K$ p

- C& Z* E" K# _% l0 T4 u

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 00:54 , Processed in 0.078093 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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