飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
, n: ^$ H6 `: i& Z4 }& G& l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( A3 C- l0 |" \: ^+ _+ D$ n% f# k* O  B
struct sItem
0 n% l1 }0 L& X3 M7 s0 T8 [' |{4 {) b  K( u! e6 C  p% X
DWORD dwId;5 d% p1 r' D7 ^5 k
DWORD dwKind2;
; m6 L" P9 t' X) |4 fDWORD dwItemId;
, `0 k0 W$ T4 J' YBYTE nIndex;
/ _4 |- P' u0 I" n) CsItem(){
( e' e9 j1 I, h: t" E  dwId = dwKind2 = dwItemId = nIndex = 0;5 I' e7 a. j( X9 e3 O& T( Q% z
}& N6 d1 V) |9 [- ]3 }- Y. Q
bool operator < (const sItem p2)
; r* ]% D/ [. d{
3 k( f3 W# G$ v& }  if (dwKind2 == p2.dwKind2)
) Y9 Z2 D! H' x, ]8 \( \/ W  {
, @! z6 d. s( I( o& @3 Y   return dwItemId < p2.dwItemId;
( y0 J1 B( r7 u, n- F, S) _, V  }else{
  }. n( P* o& n- p7 B& F1 S% i; d   return dwKind2 < p2.dwKind2;
) e- M: n1 S. G5 r, F  }% h' C6 i$ ]" G9 [5 C
}
% @9 a+ ~1 G0 m2 s};
& b/ Z  E" }, Q, C2 {( Dclass CInventorySort8 p6 o% }* O$ A
{
; ^  Z) m% B* E0 Y5 Z$ o7 Npublic:
7 ~  W& \- V9 B0 W) P' [/ o; L, {6 XCInventorySort()$ G9 M) B( c! e+ {( `
{
' R# x1 n" ^* G: J2 X  m_dwPos = 0;- Y/ \* W% ?' k; H+ _- M( Q
}
* G( F- s5 F6 Z1 |& ]~CInventorySort(){}9 X/ ]' e0 b" v  N
private:' y4 e' K; M4 J' H7 w4 U2 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% z  h. _  [, Z6 ]DWORD m_dwPos;
) f8 R6 l% y6 h1 Z9 [public:' w! D0 [$ ]- P& R& {5 h5 m5 p; m$ j
void Add(BYTE nIndex)( n( [4 b3 F. I6 I1 e) J
{: }  X2 B4 M( t
  if (m_dwPos >= MAX_INVENTORY)
6 Y7 K5 F7 a  U, ^* L  C& m- s: x  {. U6 Q, d2 |) }* d- M: l' h$ O
   return;+ Z, t" T  ?7 Z  D2 x+ |/ F
  }# G& M2 y/ _  B! ?
  m_Item[m_dwPos].nIndex = nIndex;
. C" b* d( e) h3 F' H6 s2 @  m_Item[m_dwPos].dwId = m_dwPos;6 o4 j. Z% a; X1 r% Z
  m_dwPos++;
8 W& P% L0 E" v% U}
6 o1 k3 w! {0 VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 j8 n' {0 x2 t/ j! u{
1 m1 ?  C; d6 x1 b  for (int i=0;i<MAX_INVENTORY;i++)
  w8 K- T+ p7 h  {
0 x+ a; c" M( R1 e1 ]4 ]' x   if (m_Item.dwId == dwId)
( P" g2 c' L* R2 p. Y8 w$ Q. Q, U   {
% |- h" l" M- S1 }. O    return m_Item.nIndex;
9 |, m1 ]  e9 W" v- m/ k9 T; k  C   }
! F3 |6 b, Z+ N9 n8 Q% a0 L) o  }
: l" \5 N6 i: b' ~- {/ G$ d- S  return 255;
0 b3 q% q1 C+ W" l) y}
: r2 e/ N, l9 y2 Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" @) ^) _' R: W# J( a. h' a7 {9 i/ T{
2 u% O! W+ S/ H  BYTE nTmp = 0;6 }2 [1 i, s6 P! G2 i" m/ q
  bool bDest = false,bSrc = false;5 i6 v  w: y% j4 l( x8 n
  for (int i=0;i<MAX_INVENTORY;i++)* @* U- X2 k; T: I) l
  {* P# K. [' L: M0 m$ h1 \1 A
   if (dwSrcId == m_Item.dwId)
7 I+ T. r# q6 g1 d: z   {
' h, N8 o/ B( e' U/ ^    //id相等 则 改变对应的dest和src
: m1 U) p: {+ O2 d- h; S4 T    nTmp = m_Item.nIndex;
4 `: r; P5 F" _# S$ S2 K8 i7 d" M    m_Item.nIndex = dest;
' o" {2 {% @- M   }# Z4 R6 j5 _1 h
  }! w! F5 _6 W- c# w, z0 k% `
  //临时数据保存完毕,交换开始" O; W- a! ^$ Y- I/ j5 q4 m
  for (int i=0;i<MAX_INVENTORY;i++)
* a/ Z9 J6 e2 y# q  k  k+ u, g  {
- e% t: R5 R6 h, m+ r   if (dest == m_Item.nIndex). h3 ^5 z, P* L% e, O
   {7 S' B+ v8 k, L0 J* V! X
    //id相等 则 改变对应的dest和src
; d) Q. g; x2 m1 o! J5 H    m_Item.nIndex = nTmp;  g0 O3 E3 h1 X2 L4 q% R8 b" U
   }
+ S6 A: [( h/ Z  }
/ E  `! T' @1 K) Z}
; F* e9 f% q6 G+ K8 m8 `: w};
) R2 h# Q6 a: m-------------------------------------------------------------------------
: m, U% B8 Z" k5 }) x0 _! i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 o& D2 u. b/ A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ d" y! m2 n9 \' P5 i紧靠其上添加:. n' V: V& y) `) o0 M0 i& A2 X
if( pWndBase == &m_wndMenu )0 o4 S3 P" u5 O9 t1 K, T
{# D6 l! d: n7 v9 `
  switch( nID )& a. o1 b3 R" ^, S# s' h
  {
/ ]% P& E7 X) M0 x- T' O3 U* L  case 2:
* T7 _2 K- v% J5 k   {, t3 Z1 e+ c9 B  g7 n
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' Q' O6 L0 r4 N7 y    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ a2 k* |" I0 E& m% V7 O! N
    {3 A) |( q5 j, ]# S5 i3 G, d
     break;
$ A* |- y7 w6 V/ @- ?2 ?) ?    }
6 L2 ^$ _" s( g; @9 u+ K. \    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 u2 @/ }( S' ]: l& H$ W    {
. S6 r# M; x1 {+ h9 L9 y' p% F     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! F; R& ]+ |" t1 K     if( !pItemElem )3 Q8 u/ m/ o- L1 ~" x
      continue;- H- M0 {* n. L' \, Q0 I: g
     if(pItemElem->GetExtra() > 0)
/ D+ K0 a5 p" `6 @  j- K( V      continue;
" s! r  G: e1 Q5 i     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) K, z* l6 W( `' q4 e6 ?* ~% X      continue;+ j& Y; |1 ?/ E) q7 \% ~$ `! ?! m
     if( g_pPlayer->IsUsing( pItemElem ) )( p# h/ K; l9 V8 [
      continue;
: l. Z1 z' `0 C- s) F     if( pItemElem->IsUndestructable() == TRUE )
8 [1 s* O/ j$ [( ^' p     {
8 L- A3 w% z) W* _; i      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 Y! [  k+ Z" }+ w# x  ]      continue;
  B- d- o3 F& M     }  \$ R, P3 z3 M4 r% Z" R7 j- I
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ m' z* H! D* ^% u8 N- e; H    }: ~' B0 d# f7 R! o% Q- ^
    break;
! d5 Q) E  x' w   }$ r& N# u* D1 f, m
  case 1:9 R3 ^+ p9 u) q2 ]/ J/ ]
   {; J/ Z+ N. Y/ }$ x3 G4 S/ b5 b  C
    //整理背包
  z6 X9 w4 ?3 \' G    //////////////////////////////////////////////////////////////////////////
: r2 _. @( R. o5 f$ I    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 {& _9 I! X- R3 ~1 K/ u; @
    //////////////////////////////////////////////////////////////////////////& B" o* |9 y, l1 k9 X
    //////////////////////////////////////////////////////////////////////////- t% {) [8 d6 l& ]& N
    CInventorySort* pInvSort = new CInventorySort;
3 Y' t& N! R: k6 Z    vector <sItem> vItem;
% }6 y$ G6 H* [% Y5 V' q    vItem.resize(MAX_INVENTORY);//初始化大小
5 L5 ~7 d; x% [4 u% e     //////////////////////////////////////////////////////////////////////////& y0 X0 S$ E0 e7 I/ p! D1 @
     //填充数据
# l% j  ]! F; r- O0 V6 ~  c     for (int i=0;i<MAX_INVENTORY;i++)9 _/ N" w! L% O
     {0 A# {+ M) s  b; _6 j$ \* e
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- L5 J, ~4 l6 j# f) Y- N* D
      if (!pItemElem)
# r% s& A. R6 Q' a0 y! `7 |      {
: j) O2 f* n. K$ G+ G: C' D       vItem.dwKind2 = 0xffffffff;, A0 O1 a4 v4 f
       vItem.dwItemId = 0xffffffff;
% ~. h* w8 u4 ~! s5 e       vItem.nIndex = i;
9 a$ }- t; d. q2 g  {7 \1 i2 z7 q' s) I      }else {
' z# [7 k6 [& f8 a; m8 h+ K( g       ItemProp* pProp = pItemElem->GetProp();/ t) A  }- M9 z' H- N
       vItem.dwKind2 = pProp->dwItemKind2;  K6 m" O$ a: M1 K2 n8 m; C8 S
       vItem.dwItemId = pItemElem->m_dwItemId;6 |, B4 K! \; [7 G9 G* e: s6 ?: b
       vItem.nIndex = i;
. z8 O! f! L( i% N9 ~% g. W      }8 [/ o8 Y* O( P. r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# |/ z3 X; l, T+ q9 g/ r: u
     }
/ u9 R1 f, m6 R, E& R& }8 [" T     //////////////////////////////////////////////////////////////////////////
  d- d7 q$ |+ x0 i7 k" F2 r& i     sort(vItem.begin(),vItem.end());//排序/ |) W, A: C( K$ T5 ~
     //////////////////////////////////////////////////////////////////////////$ W, l6 _4 t7 n' T3 j8 V0 v7 M
     //交换2 [, q, s+ `. S5 j9 J4 G
     for (size_t i=0;i<vItem.size();i++)+ M& M; s5 |2 _  O: L; O7 I2 x
     {
0 }- w. y6 J+ L# D( [( R3 E      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% m/ R% p% Q2 ?3 H0 u
      pInvSort->Add(vItem.nIndex);) x' `7 C% B$ x
     }  ?1 X/ O" o- V3 L# `
     BYTE nDestPos = 0;: v2 m% E* o. e
     for (int i=0;i<MAX_INVENTORY;i++)
3 p) {4 `. c* d7 l# w2 _; ?     {
/ H  b# X& O1 u; ]( I7 X6 T      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ r! w2 y" u  |5 z; e
      if (pItemElem)
& c! o, D' X+ ]7 h8 r      {
* r2 N% }$ w  Z$ ^# Q9 v6 ?; I       if (IsUsingItem(pItemElem))
2 q; W4 o) i# z6 G: g& E' L; F% @$ B       {
( U( @9 [5 [2 [4 x. j        //这个位置无法放+ F( H5 p6 A# U. p" I
        nDestPos++;9 T2 _! l# |. u! n4 I
       }
& m! b/ ]6 a0 L( O7 h' v6 M      }1 V+ ^* h# s0 V: i
      BYTE nSrc = pInvSort->GetItemSrc(i);
9 j" V) z0 G  |1 K, l6 V7 q' q      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, S* U8 p& U, f5 y/ E  z2 d6 ~( r
      if (pItemElem)! \! i  O0 {, ]
      {: M; W- ?, ]" E3 K1 t, w' b
       if (IsUsingItem(pItemElem))4 W2 k5 a: f/ k5 A8 n  O. ~+ J2 L
       {
: x& F" Z1 c7 R- ^9 }7 _        //这个道具无法移动,跳过; ~* P, ?1 e% O: `8 B
        continue;
0 w6 C# {- {( X' o# P       }
; H5 Z( |6 d" {, T      }else{
& x4 {: x  @) b$ `7 d       //空位置 不用动
- N( `8 a5 C- O( N( z3 A# O4 V5 A       continue;
* V1 @* @2 j2 Q; K# j2 n/ x/ \( V) W$ J      }* H# L8 f$ H! H4 F! i; Q# s
      //////////////////////////////////////////////////////////////////////////
8 a2 f9 p, B6 ^& d# Y      //开始移动( B* P3 V% _) a* x/ N/ t. A! ]
      if (nSrc == nDestPos)$ T% q# i! R2 P
      {* @! l  v2 n. b) A0 M1 t
       //原地不动9 @& Z$ _3 J2 A. y
       nDestPos++;4 v# n- `+ U# D# f$ {9 k4 C
       continue;
3 R- L: \. n! @9 h" Q; s* ~      }
( ^/ Y/ ~* V) G      pInvSort->MoveItem(i,nDestPos);
' g) t! f7 `# Z5 j+ l/ `, S& E# k$ U/ K$ V      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% j" U$ }, T% N5 E, K& g! [      Sleep(5);
0 |) P) Q* p% O4 E. K7 w      //Error("移动 - %d->%d",nSrc,nDestPos);
, ~: J! J  E# e; b8 @! l; p      nDestPos++;
. V8 J- q( Z0 u# j1 Y2 x0 G* `+ F' \# t     }  z: I1 h2 g0 `/ U; f; m* H
     //取第一个元素的信息9 @. L/ Q% ^9 e- e; ]- |+ U
     /*6 H; Y( ^- [, n" h
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 V; P1 T* q! p& U! W
     {6 X! u' m$ f" \" f& i; a0 T8 X7 {. B
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) c2 H4 m8 b9 w
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; g0 g8 n& S3 E# Q
     }- R* r# d. p3 `3 K3 l, y
     */  L. Z! k4 z8 ]3 `' M& W
    //////////////////////////////////////////////////////////////////////////2 h) [* m4 Z' @! a
    break;2 ^" b+ S2 Z: n
   }
/ p- r: ^/ Q# _, \) T  D  } 1 u4 h) u" M& B) @* [) d) w0 \
}! F2 J# w1 z8 f. b- s! M
m_wndMenu.SetVisible(FALSE);# ]4 b% E! L% z2 {+ q6 v

+ L0 a) @/ j3 ^4 |2 j! M$ E--------------------------------------------------------------------------------------------------------
6 g, s  J5 O8 U2 y+ c6 |0 N' ^: o( i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- u( h& A1 P4 E2 u2 K& X
{
! i, U5 m2 I1 B- HBaseMouseCursor();% Y% @$ ^0 S4 D; P
}& E. }7 R7 L  Q* J' y5 _* F
在其下添加:
5 W8 L4 a- Q8 v! h$ ~$ tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ c4 ]( Z# s" \1 |7 J& j3 X{
9 g: w: o. ~2 z" R. e" Sm_wndMenu.DeleteAllMenu();+ ~! C* D" h9 J; N$ S5 _. ~5 ?. Z
m_wndMenu.CreateMenu(this);9 R; H" s, E4 G' O# @/ L* B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 s  C' s1 {* M1 w. T% c: r

% b$ B! k9 ~5 l2 p8 |! `- B: J5 _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). T# _  V" H5 Y3 `- @1 v% N
{
9 k" ?- F* d6 i" c  //P以上级别才可以删除所有道具
+ p7 Z# t$ E( w- t0 N3 W  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 k! B/ y0 }1 F" d
}
! q9 V6 M& E- h" o2 pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) x( d! Y, d9 n/ {& e% P7 Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# s# T! [, g$ G8 k# X
m_wndMenu.SetFocus();
2 H) G5 t$ ?* ^+ x* u}" @2 d% \  U; X  q8 ~3 A+ j/ d
------------------------------------------------------------------------------------------------------------
: R  O, L2 c. j, X! O! H*************************- _& Z: _6 Q; \' s! T
WndField.h文件
9 {# l/ G% ]2 T$ h*************************
  x) ?% ]: b, }- t# \搜索:BOOL m_bReport;
3 g* _( ~4 c3 E. ]" p$ C其后添加:
' w3 @$ w& H5 m1 GCWndMenu m_wndMenu;9 H" I3 W4 h2 r* E0 Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 J2 J) M1 S! ]3 E+ K7 e其后添加:- V% B" D6 N) X" B2 N' j/ C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 W4 o$ ]# M, u5 x% |2 c/ v8 L% {+ P4 c8 h$ R3 k

3 y: k( x0 J6 R' @7 z9 r0 f

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-11 04:41 , Processed in 0.066382 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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