飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件9 _. F  k$ J  g1 }& v  A: |) ]/ }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. G/ X$ T+ J: J$ M( L8 p
( H5 P: S4 K6 E' \struct sItem( u+ F" D' J8 E. I# a* N
{; F3 X$ w9 j( E, A0 ^" g
DWORD dwId;
. [! ]: g" n! V) w3 N+ vDWORD dwKind2;( n8 a2 S1 L- V3 p8 B
DWORD dwItemId;( K1 a6 w* o8 D+ V! I
BYTE nIndex;
$ i. O: U/ R7 w6 a/ hsItem(){) `4 A! c* P$ u' D
  dwId = dwKind2 = dwItemId = nIndex = 0;
4 B" J/ j. I( m- E+ V}
& q. f- @: ]; u6 A9 w( \bool operator < (const sItem p2)
3 ^6 D; l' _  u9 ]* B. G{
1 U3 K# H! O1 U6 }  if (dwKind2 == p2.dwKind2)
% ]5 g# ~$ D3 ?' \7 l  {
6 l& L, v3 b( C   return dwItemId < p2.dwItemId;* i0 y& T3 {8 [; L
  }else{
: E; D- Y5 ^9 C: n: o$ {5 H   return dwKind2 < p2.dwKind2;
8 m- q$ Z. ?% G, @4 B* d9 ~  }( I0 d# Z. O1 I: |3 ^, l+ r+ z
}$ t& x% z  l  M8 i/ G1 a/ f$ ^
};+ s+ w) A, d2 F7 m6 }* B! w
class CInventorySort
- i+ I% Z  y9 ^+ K4 G5 i8 w, S! a{
* e! P' w9 }& I; ^8 q* c$ ?5 C+ T7 Spublic:. C8 G( X7 I( A: h  v
CInventorySort()
! U+ l7 a- G) u8 e% y$ J{
* P3 m# \* A3 ^  m_dwPos = 0;) {6 R1 p5 G' |' k  v1 g  \2 c
}
7 T# t& G$ W( _  o~CInventorySort(){}
( ]4 {# h0 J! u4 Q4 u3 S, |private:* Y3 v2 |8 e5 y  G! I  \5 y5 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. X2 o. D: r+ N# L6 V$ Q
DWORD m_dwPos;
1 b6 f$ e; O' @: {4 c( I7 Rpublic:
* b! a+ X$ L- K% V: Dvoid Add(BYTE nIndex)
( Z: `% }( K5 i! r- s9 J/ \- Z{
9 d$ V: k+ a+ y  if (m_dwPos >= MAX_INVENTORY)
6 q) G( p0 f. m! l2 v  {2 h. M1 }- c, A8 p* }
   return;
) K7 @. ^& k) S* z3 {' u  }
1 V2 \- N. j6 d. l0 \. x& Y& I+ {  m_Item[m_dwPos].nIndex = nIndex;' s' B# c9 a  s' U# B# E+ [) e$ I
  m_Item[m_dwPos].dwId = m_dwPos;
% @# s. @* o6 d" u2 y# e, e7 @$ f8 Y+ V  m_dwPos++;
9 U8 O; q( L5 ^5 \}
7 F3 R& f+ k* x7 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  d0 H: k# Y8 K- G; J{! K- s* f1 H' b, T/ [9 `
  for (int i=0;i<MAX_INVENTORY;i++)
8 v/ X! n1 ?$ Y* W8 X$ Y  {
, _0 T0 ^8 q' ~% q8 {   if (m_Item.dwId == dwId)" S( C1 s. _8 B$ K1 p2 i$ h2 a
   {  P, h' {. X% t4 y/ f
    return m_Item.nIndex;
: k( M1 j# P+ p1 K   }3 W% k* D8 j# [. c  ]
  }& f2 {1 C+ \  {( I5 ~6 c/ P: z
  return 255;% e" o' }% H4 l. U7 k
}/ L# F8 R" K: }/ o+ Y5 f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 C% c  Z, G( |& \
{
* R9 E: Z( J, V  BYTE nTmp = 0;3 J, y. N/ T8 @0 r3 t; B
  bool bDest = false,bSrc = false;
5 j8 G4 C9 O. |; q9 @* S  for (int i=0;i<MAX_INVENTORY;i++)# V+ G( ?8 K% R
  {7 P$ ]1 ]6 P8 N' l4 d" R
   if (dwSrcId == m_Item.dwId)
! m0 K% N: m1 o% e. }7 A8 p   {
7 E* D/ Y* _- k. f$ l5 X    //id相等 则 改变对应的dest和src
( r4 `/ r. v! ?+ q9 G    nTmp = m_Item.nIndex;* l5 a& K' Q, Y9 x5 W
    m_Item.nIndex = dest;
5 ?( ^! ]' r# p   }+ W& l" B0 ^7 z! t4 S
  }% n4 d, n: y. r# l
  //临时数据保存完毕,交换开始
1 f4 ]$ ?) U' @+ b  for (int i=0;i<MAX_INVENTORY;i++)
* p) n( X6 O1 L" R- y% d* m% E  {
* `- ?6 M' Z& ?0 ~; q+ i1 U' i   if (dest == m_Item.nIndex)% M8 W/ i" M" n9 v5 ^
   {
: Y' v) V, {8 _  W$ E    //id相等 则 改变对应的dest和src+ c# k& ]" _: x$ U, b) D
    m_Item.nIndex = nTmp;  h8 V+ |: Q3 ]4 V' [: y
   }+ a: @9 q' x: _+ F0 E/ @* ]8 E
  }1 g: |/ `) v4 ~+ L. h+ i6 C
}
# {% j; k. Q+ p* ?};
: R" v! ~2 ]& U$ O-------------------------------------------------------------------------
* m) z: D3 e, i/ z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 h8 P% B0 P9 b- V9 f1 b: X% X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 h; s1 k3 N! ~1 ?5 e
紧靠其上添加:
0 A2 }$ U) D0 S- Xif( pWndBase == &m_wndMenu )
2 R7 y+ E' o  L{/ s/ V( ~- o6 t9 E6 ?( N
  switch( nID )
" ^/ K( N5 K# k+ ]  {
6 d* p! d+ o0 K  case 2:
. G3 G) j$ B7 y+ q3 q; H$ _6 y   {
6 }/ K+ B# F& [; H0 J+ ~    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 o+ C: V1 t! p; V/ D# M
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- O& H3 w. O, i  `    {
- ]2 j6 r; O+ C. f. X     break;- P# I; g" g# R% z! _1 v
    }
# C6 V$ \+ i2 L3 D  T. G! w  L    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 _4 K/ M: z$ V. {& F& K+ N1 ]    {
" w; p" O! b. b" X- f" d- Y; w3 J7 k     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 r  r" v8 q5 E. S* @% r" \* ~
     if( !pItemElem )
" K8 a+ ~8 Z; Z+ B/ S      continue;# |+ D$ m2 U! m/ _& \8 L
     if(pItemElem->GetExtra() > 0)
1 o  H7 w2 Y& O      continue;
/ f- C1 E+ X) P: X     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) u) [* }/ L( G
      continue;
/ Y& ]! I) s9 `' c; A9 V0 T     if( g_pPlayer->IsUsing( pItemElem ) ); U$ q+ I7 u/ B( J/ ?2 s
      continue;5 G: B$ _9 F, p$ F3 G1 U9 \
     if( pItemElem->IsUndestructable() == TRUE )5 o' y/ E7 f' a7 Z" v+ U9 }
     {
3 i9 o' [. O% Q0 \0 o9 N& b- o$ {5 D      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 ]9 Z) I6 Q/ }5 W/ ~. \$ s8 h      continue;1 w4 N$ K4 ?- |4 M- `
     }3 [5 n  X, k4 ^* b* I; S* {
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ ~9 o; I4 u( H3 G! }    }
+ I3 x! k8 V. S5 \. o    break;1 X( p% a( t+ l% s% e) h" T; Y
   }$ R! l5 |" M" {  F; I( ?. k4 H
  case 1:* G- J7 P: @8 z5 |- E1 m/ U
   {
% s( Z/ f& g  ]    //整理背包
( x& A# M# U# y% e    //////////////////////////////////////////////////////////////////////////) \) G6 _! T1 g5 R, {+ P) }
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# ?; _9 O- D# I' |5 V9 Q6 }
    //////////////////////////////////////////////////////////////////////////
0 B, n5 V3 h) \% B    //////////////////////////////////////////////////////////////////////////
5 Q& V4 O% N& g    CInventorySort* pInvSort = new CInventorySort;  f) s' b. [5 V' V, g6 g, V7 b: ~! N
    vector <sItem> vItem;
  s2 l  l* `" A; H    vItem.resize(MAX_INVENTORY);//初始化大小
, y2 w! r2 f9 F: k' c3 U     /////////////////////////////////////////////////////////////////////////// N4 I3 O/ U% \- p: v: I1 R) s) O7 x8 e
     //填充数据, A4 m: f/ y% x& D" W& Z
     for (int i=0;i<MAX_INVENTORY;i++)
) |9 o! G; E: s! x: w     {
' j1 |  w$ e% M8 L      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( o) ^; R( I( e8 l      if (!pItemElem)# P% X  F6 m5 j) \; k' T: y
      {3 {9 _9 O& {( h" H: D" [7 ~- ^9 o+ @
       vItem.dwKind2 = 0xffffffff;
5 S3 `- E5 r6 o, t% ]       vItem.dwItemId = 0xffffffff;
$ k6 ]/ p% n, ~# U7 h       vItem.nIndex = i;
# w) g% s- k% v6 k( B, k0 J      }else {3 O9 S) C, G: P$ X
       ItemProp* pProp = pItemElem->GetProp();
+ T5 V- V+ r) e8 u       vItem.dwKind2 = pProp->dwItemKind2;
- v- L6 V3 u' U       vItem.dwItemId = pItemElem->m_dwItemId;
* X1 k7 J; C* [" ]) z( q       vItem.nIndex = i;" X/ A& t# O+ H* `: m
      }$ o- _: @5 l% @4 O; k
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 l  m3 g3 i4 Y4 U1 I" o4 |' ]1 X
     }
5 R  E- ?  J* a' w6 G     //////////////////////////////////////////////////////////////////////////; |) |  G" a3 i
     sort(vItem.begin(),vItem.end());//排序0 ~% U* B3 D2 I" q' Q* }+ N
     //////////////////////////////////////////////////////////////////////////1 u! e9 n& t5 S0 o3 @
     //交换$ `' W) D/ l7 X+ [
     for (size_t i=0;i<vItem.size();i++)
& i+ G7 U( g' f# H* B2 ]! u7 N     {
* Q7 K6 C  R) I' P5 s$ g5 [0 U      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) C$ w; Z/ t% s
      pInvSort->Add(vItem.nIndex);9 a! N) Y, n2 C* A
     }& |# t! {1 S& k% v9 d
     BYTE nDestPos = 0;6 V! a$ a5 t% j+ C( m) u
     for (int i=0;i<MAX_INVENTORY;i++)" I  e  t  I% v+ ]0 M. }
     {
. Y% P  b2 Z; A) E: ]      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- Y4 j* K& q: A
      if (pItemElem)2 r( d9 Q/ z- s
      {
6 A& o4 H1 `' }       if (IsUsingItem(pItemElem))* m# N4 ~8 h8 e- P  x
       {7 O3 [! @1 I8 K' p
        //这个位置无法放5 J, o& D' q) a8 w5 P! _: G
        nDestPos++;
. d6 U/ E& u8 R4 j% m( r8 {       }
: u* N6 _2 f) n/ @" a" `1 P9 d      }- h8 `, D" c! J3 t( u. g+ h0 S8 l' y
      BYTE nSrc = pInvSort->GetItemSrc(i);. U  i6 Z' g3 B# ]+ ^
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) p# E2 S# Y$ Y1 O1 X
      if (pItemElem)% L% J( K0 N% I9 ~9 Q# D# x1 R
      {3 E* K$ R- i% Z6 X
       if (IsUsingItem(pItemElem)), ^# k; W$ O& Q! y7 X
       {' ]* k5 g/ E0 `+ J* O* l$ Y
        //这个道具无法移动,跳过
: G3 Z# V/ e" B  |5 i        continue;% R  [$ |# ?2 s& Z
       }  e7 P3 f4 A+ A" W
      }else{
: a" s" B1 P/ j6 b. Y       //空位置 不用动
" S0 G' D( `! a* K" h       continue;
9 U' M$ e: V0 q5 O0 E      }% o# ^$ L  \! i/ N7 v
      //////////////////////////////////////////////////////////////////////////( l4 v, P7 y& x1 Q; b% K$ }
      //开始移动' i0 e& C% u* ~8 x: d
      if (nSrc == nDestPos)! z3 ?$ }+ r. \- V
      {
4 V. L* v, x% U$ R, s0 D       //原地不动# F  x+ ?, k6 |7 c7 y
       nDestPos++;$ n! B- o2 d5 p0 W) l
       continue;9 n% e8 x2 C/ g3 r8 d0 j
      }! R/ y/ S; A; L8 m0 n
      pInvSort->MoveItem(i,nDestPos);
8 W( ~2 c2 B2 D; l2 u( h. Y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. a' N. l$ M. t6 O8 V* y      Sleep(5);
# O+ G0 ^% t7 L6 w) s, O. {      //Error("移动 - %d->%d",nSrc,nDestPos);1 T0 ~: [& p+ F" |6 ~- W& |0 x
      nDestPos++;$ j: N2 Y& n6 o1 N( _% n5 s+ N
     }5 r& T% U* E) w$ m/ [; Y
     //取第一个元素的信息, I! ~" v  X: Q: l# x# l6 n* n$ W8 C
     /*- g5 \0 w! Z8 W+ z& M2 C
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& D5 k; F9 s+ l
     {
* |0 q9 \0 h9 A% J      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ t2 G7 k' V+ f$ O' Y9 G      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% r/ a, v6 L3 k
     }0 X. G; o- `  X8 |0 M+ t" I: a
     */
% z& E& V% P; B9 R0 q' F5 M0 {' I  k    //////////////////////////////////////////////////////////////////////////+ O8 `8 n/ y1 G" e
    break;
: a# Y# M# |7 ~9 ?, W   }1 m/ x* C, S& \1 Q
  } " a1 \7 I4 ]0 Z
}
" y( I; i. ]" rm_wndMenu.SetVisible(FALSE);
1 r9 o+ N2 P# J/ Q3 k
* Z; N" n& I, S0 \5 S--------------------------------------------------------------------------------------------------------
/ h1 O3 _# n5 I, G2 ]' @) x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 G) ?$ s2 K4 u3 E5 U) n9 n) l
{# d1 W" ?) I4 d* H8 A. K' C* O
BaseMouseCursor();
8 d% Z. N* \( ]. @# _}
. D+ M( {. r- X! \4 U7 H% X在其下添加:
5 X: |! \8 Q; ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' |, y: S9 w" M$ t$ l6 I{' b% m( i4 g- x; N  L
m_wndMenu.DeleteAllMenu();
0 k! u- _, a: ]m_wndMenu.CreateMenu(this);
$ `9 Z% u. _/ d8 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 {5 g; h' O: d4 L0 @5 H  }0 @
5 Y) C. Q+ Q; y) {8 T+ S9 t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" K3 [, w+ f( e$ t* p{$ U+ A( B% s+ U3 J
  //P以上级别才可以删除所有道具6 E' U; Z9 L2 c" P+ H
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 R& `* S  z! L}* H' {- q3 D( _, W7 |8 ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! @' x5 {: _6 X5 r- s# d, F- Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 K9 n; n6 W$ b
m_wndMenu.SetFocus();6 Q0 o/ d7 a  ]( n1 o9 M
}
6 H" D# [" P8 r# I1 _( e------------------------------------------------------------------------------------------------------------
" {8 E9 h7 y5 J. Y1 c*************************7 D" R% j8 R7 L& w% d
WndField.h文件
, y% J* b$ a/ }% M# B* B4 [*************************
* ^( ?: d1 r+ \0 _1 O! y" _5 c搜索:BOOL m_bReport;
$ J! l' ?" `0 @0 e# P0 }/ Y其后添加:
: P- b# h% z: a6 O" E. p! J7 lCWndMenu m_wndMenu;( B+ D: O+ k0 U) ?1 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 h& g3 f- u$ s. T. p! V  m; t
其后添加:
% R5 i- O& ^" p. X% v, vvirtual void OnRButtonUp(UINT nFlags, CPoint point);' t+ F/ U: k' B& o4 d
' Y& U' L! s  p
, I% D# G/ E% j$ M1 l4 |2 R6 s2 j

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 10:09 , Processed in 0.068950 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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