飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件  k+ i, ]9 l  s1 O. r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 z& V7 N0 R) s, F# d$ z2 ]5 V6 T) v
9 b; Q0 n. x& T3 d4 L8 e" ]# K
struct sItem$ n0 \: G. p1 F5 h
{
+ L) W" L1 r7 YDWORD dwId;
! E4 r3 M. k0 H( J% U, @1 oDWORD dwKind2;! F. Z9 L8 u. k; Z: x' I7 u* ~" f8 |
DWORD dwItemId;9 `4 h4 w0 n9 |+ B
BYTE nIndex;  a9 h( p9 q9 P
sItem(){
1 x* k4 F6 d. g/ Q  dwId = dwKind2 = dwItemId = nIndex = 0;
; @4 P! U5 a* F3 d! g& x3 U7 C- ?. C9 m}
' ^3 L6 ?+ k$ }# H- s7 gbool operator < (const sItem p2)
# H+ s  r& E$ V  V{( F' X: `, ]7 T0 X; Q
  if (dwKind2 == p2.dwKind2)3 _" \( l$ x. h. ^; F
  {0 y/ Z8 |; L& i6 E/ ~2 S9 o# k
   return dwItemId < p2.dwItemId;
0 E! Q1 B7 K8 Y% z; j* w0 t  }else{+ \% E; C: B# C' V. a
   return dwKind2 < p2.dwKind2;) Y% A( Q2 p1 g. V4 W; l7 R
  }3 u8 {" b* B/ I( K( W2 a( ~4 Z: d
}! Q4 o* T. O- U; K
};! V! ?1 D7 N+ S" j" p) w+ v6 p
class CInventorySort* ~! i$ }* D5 P8 R
{
2 E' T% K1 u& g1 c1 Fpublic:
! N, q  |( T9 G6 s2 B, H1 sCInventorySort()
! W% a+ v8 V% Z9 u; E{2 x% P% m/ |3 d% L
  m_dwPos = 0;. F# }0 r6 h: v/ N
}
$ P6 s0 N: Z: G8 M& v~CInventorySort(){}- Z# V: s" o2 }$ O( I, J+ \9 h
private:# b: {( {; ^. P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; {4 j7 \0 Z3 A9 \. s  w$ gDWORD m_dwPos;
$ i% q+ f1 V6 I' _/ u* npublic:4 C$ y& B4 }+ c, ?- e( f
void Add(BYTE nIndex)
6 T5 s' i4 ^, X. Z$ |  Z+ m5 _{
1 P7 l; K$ e* q  if (m_dwPos >= MAX_INVENTORY)! q, k7 A0 D3 g/ d* b4 ]
  {
$ R0 }" x0 L) \4 w- X1 w   return;
9 H4 [2 _% |6 {# `* p) h, b. q  }- o. |3 x& M2 J- J$ P8 d
  m_Item[m_dwPos].nIndex = nIndex;6 y) J0 P& j2 ?
  m_Item[m_dwPos].dwId = m_dwPos;
+ K" h( B3 F3 s8 K, d% k9 ~( h  m_dwPos++;# B2 K1 e& s+ P( Y) L: P) p3 ^
}; x! {- r8 w' m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! M8 G9 h8 ^+ y8 J1 R1 e{
' C- c! r( j% t7 c  for (int i=0;i<MAX_INVENTORY;i++)1 q/ k2 O# O) P. o+ p
  {; K7 b- z( u4 H
   if (m_Item.dwId == dwId)
( D" N- I! w* B9 s   {, O+ Q: Q" w8 Y; _& j3 W* d
    return m_Item.nIndex;
& E0 X8 s' g& `   }4 R  ?: J$ R' M8 r) a
  }$ O) h9 C) c0 `# E1 t+ K
  return 255;  g$ g$ l1 e! C6 d% W, j
}# Q/ x: [2 C1 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 W) J0 E: [2 \) y& N- l9 d! W
{
' O8 j( Y( z4 v* y0 m  BYTE nTmp = 0;
3 U  N0 T9 ?8 f6 ]  bool bDest = false,bSrc = false;
* p( l/ n. P5 g- {& P1 W! n( k  for (int i=0;i<MAX_INVENTORY;i++)1 s8 ?$ o8 C& q6 v; c+ Y
  {( U8 ~" K' f+ d8 r& k
   if (dwSrcId == m_Item.dwId)( e$ w* @8 K: T# P
   {
0 w% z! R" D  _, y& ~  P    //id相等 则 改变对应的dest和src, C1 H$ [- h4 o$ |
    nTmp = m_Item.nIndex;6 u! h( I1 I7 N& s. I: R% Q) A
    m_Item.nIndex = dest;6 a; ^8 h: l! Q& G! Q
   }4 ~# ~0 p: g  O" Q7 z, Z
  }
. `( a1 r3 t1 Q- X$ \/ n- _  //临时数据保存完毕,交换开始
) X* e) f9 ~4 l9 g! W  for (int i=0;i<MAX_INVENTORY;i++)2 [' O) j( ^- g' W, ]3 a
  {
3 ~6 L4 s# @8 P5 p( A& ]2 D* D   if (dest == m_Item.nIndex)
5 d% f4 e  E5 Y5 r   {* A0 @: r! t2 Y" O) G. y
    //id相等 则 改变对应的dest和src
( G+ S# i# f( Q4 K. e    m_Item.nIndex = nTmp;
- w( T- i" J: [2 @5 f   }
8 D2 h5 {. r( x' W4 g( f7 A  D  }
9 t% c$ c- s3 q6 v}1 F5 V% a; n# [, L) S6 C' A
};1 t5 C4 b) E1 H3 g8 @
-------------------------------------------------------------------------. c; A  F2 v- T  M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, n9 K1 V  C9 a, W* e. r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 N2 \( e* [2 O/ E' O3 R
紧靠其上添加:
) h2 y# O* u, |if( pWndBase == &m_wndMenu )
4 u7 ~" ]- W- E+ ~1 y3 j, m  A{" V0 A6 E& U) [! [4 L9 s
  switch( nID )
( y# p1 T4 y  w2 f& w( y  {
2 G1 v; B; z7 K$ V  case 2:% o- R$ y1 J: D$ Y' K, _) j
   {
0 y+ T7 o1 K& E) E1 @- o    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
  L5 c. S6 w, |; Z& ]2 o    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 b( x2 U) B, m3 M" j    {
, @9 S; l6 X2 r) z/ ]5 ~  v     break;2 W1 `' |9 Z; h5 N
    }
# Z" }) @7 ~! m, N    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( ]- N, Y" d  M5 H- B    {
1 r# K7 X, `! B! b5 J+ I, C4 Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ m1 L& ^; i& l2 G. o7 ^5 x     if( !pItemElem )' A4 ?7 J1 G: G
      continue;/ E& t+ k3 g! G9 `4 z, N
     if(pItemElem->GetExtra() > 0)1 h4 |# V" B! b7 A4 P) D4 c
      continue;7 t% i0 L- E* M) t
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 [1 d, M% U4 f" K$ n! }      continue;$ {+ f- b  |8 O2 U5 i+ x# t! L( l
     if( g_pPlayer->IsUsing( pItemElem ) )
; F* B. K# L5 _! j! J: h9 Q      continue;6 e; P$ d5 o, E& s0 z
     if( pItemElem->IsUndestructable() == TRUE ): w  \, F$ O' Z) h9 u* u  x
     {
# e: c; W" D* j6 m      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 b, J) L& I9 G" e      continue;
! o+ Y  r2 ~8 e     }! ]) V0 o/ R$ n! w
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. L: ]3 e: F- X6 f0 g    }
6 Z, L5 i) R3 `# ?9 A    break;2 V; d$ x0 d" [2 t
   }. M& C# ^4 K+ H4 r# V6 F9 Z
  case 1:) U" {! o. w, |; P1 N. J
   {! T1 B5 H; \; e$ j! x$ V+ r
    //整理背包
7 v* h( v. v  Y$ o& u- G    //////////////////////////////////////////////////////////////////////////. f) D- |2 C3 Y. P
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ E2 f( r) H# r; g    //////////////////////////////////////////////////////////////////////////' t5 t1 i0 e' J9 b* o3 v6 X; N- u
    //////////////////////////////////////////////////////////////////////////
  l* Q% ~3 K2 M    CInventorySort* pInvSort = new CInventorySort;1 P" o, q. P' E6 V) a: \6 e
    vector <sItem> vItem;- _4 j4 T1 {  o1 `
    vItem.resize(MAX_INVENTORY);//初始化大小' O3 T, y  m6 D
     //////////////////////////////////////////////////////////////////////////
2 k% x, u+ P; `  n+ i. b% t     //填充数据
7 Q7 }9 N; E/ J% U7 Y     for (int i=0;i<MAX_INVENTORY;i++)
+ N7 e" Z. M' \     {
4 n& t, K3 i3 |2 X7 j, i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 i0 ~! X; d% b% w9 l      if (!pItemElem)* ^4 [5 x/ D8 e# A) |
      {
3 j# |* q3 U. I9 X0 a. U1 g3 B& G       vItem.dwKind2 = 0xffffffff;6 D4 U3 f- A% A5 `& g% d+ \
       vItem.dwItemId = 0xffffffff;
& R2 S& @  [' H& T2 L       vItem.nIndex = i;
+ t# |2 J1 G3 q5 c0 A, m      }else {1 c; d" q7 f3 E( o; l! N3 |6 p/ h
       ItemProp* pProp = pItemElem->GetProp();9 P% N* y- X8 O* i
       vItem.dwKind2 = pProp->dwItemKind2;
% y; |4 q( |  T2 u2 U       vItem.dwItemId = pItemElem->m_dwItemId;
( D  o  S, k$ A* w7 f. p9 Q       vItem.nIndex = i;) |/ S. ^* \- X
      }  B! K& N/ b) j1 [4 q; {+ r' U
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ]# l9 d$ M/ \+ M. E9 L5 \2 A     }. N4 u4 |, I/ @+ ]) R( [6 D/ M
     //////////////////////////////////////////////////////////////////////////; Z8 a% }& l7 T6 c/ A8 X  B
     sort(vItem.begin(),vItem.end());//排序7 E1 ^' N" I* e  i2 Y, s
     //////////////////////////////////////////////////////////////////////////
! D% U$ H/ A3 ]* I2 H+ ?$ _     //交换
! k4 t& n) E8 Z/ C+ U: b  p  O! d     for (size_t i=0;i<vItem.size();i++)
) [7 D1 g( I2 Y3 f9 ?     {
0 Z! b2 `0 v) t! w$ s$ ?7 z      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 q7 E/ _* r) X6 ]7 X, |. ]
      pInvSort->Add(vItem.nIndex);
4 C: V/ I; H* u& G, l0 o     }
- |( p, c8 a5 w1 T' \     BYTE nDestPos = 0;
( j' R$ Y# g( X& T% ^/ F     for (int i=0;i<MAX_INVENTORY;i++)0 d+ r* `& i9 z+ U/ ?
     {
2 ?- a6 w& k3 r% c  n- V      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ Y# T# L6 X% A& o' c" [" p      if (pItemElem), E  Z$ |- b+ ^; p8 r: }, G" [
      {' O3 \- u9 s2 S$ `
       if (IsUsingItem(pItemElem))! F& V! u7 [9 V7 l$ i
       {, ^& p' q, `" K
        //这个位置无法放
2 W0 v; i* P* Y+ i0 q) D        nDestPos++;
- h( j- l( s" B, ?, N6 x" L* R7 Q; n       }5 U; k  r: i0 s
      }" Q$ W. u0 e5 m/ @. \
      BYTE nSrc = pInvSort->GetItemSrc(i);8 d8 R, C! J5 P; A6 w+ o! b$ O
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 P$ M4 T6 C+ I: H# h      if (pItemElem)
$ I/ G) v1 ~7 F  |" H4 y      {/ |. h4 x9 p9 T* y8 X% ]3 z
       if (IsUsingItem(pItemElem))
3 Z  G# m5 z' k3 f6 i; H; Y% ^  Y       {  U; W! \7 \" ~/ {: a
        //这个道具无法移动,跳过% h: L1 Y1 t( O7 D# Q9 |
        continue;- M6 v8 f; b" O; J/ c- }$ C' f
       }
0 D0 W' }6 }5 A# H" q      }else{3 r. C4 h, }8 V* }! T1 J
       //空位置 不用动3 F; Q9 G+ T6 C3 G+ h) }1 [6 F1 g
       continue;+ r5 A. d$ A6 P  j; q
      }9 ?% ?1 _/ E6 z- [3 y% @( P
      //////////////////////////////////////////////////////////////////////////" g% H: h8 F; |9 S
      //开始移动
% a. N5 F4 U: h" F      if (nSrc == nDestPos)( _" M4 J/ t; ^9 a- m, K2 ^
      {
9 M8 W6 c( }# `. Y: Y8 G+ Z       //原地不动
2 I7 T% t. v. b       nDestPos++;
! {* D6 U* x! l       continue;8 Q" ]4 [% }  Q9 }! h6 f# d
      }& k. R8 x  n0 j& h& J* d
      pInvSort->MoveItem(i,nDestPos);  C. J0 q% K3 X- g6 c6 }
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: w# t9 K$ C& Z0 X1 c      Sleep(5);
  y) e; D7 }- t      //Error("移动 - %d->%d",nSrc,nDestPos);
7 ]) J/ |2 V/ |( E8 A  J! w- Z) U      nDestPos++;
# u+ L, }, k( q& E- N( a     }
' Q( S0 ?! z: v9 U( M$ x     //取第一个元素的信息
% w1 O5 Y/ H' w) y     /*
2 H6 v' C, S0 e- d: d2 f5 C     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 G0 y+ o' Y; |3 d) P8 D( r6 p
     {
- K( q" R; d6 m, p7 e      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 T4 ]9 |; s0 G9 F
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ {, u) `. F% J: k. E
     }9 F+ ?. E7 \# W6 n3 A" M
     */- m4 P# `% O8 T. }
    //////////////////////////////////////////////////////////////////////////
( S' ~# Z5 v; X2 O0 f' e8 M    break;; {* X$ E; M4 n% `! D8 s- b1 e3 g6 a
   }4 v8 d* a+ p6 [6 k  }& T4 H
  }
" e5 ~3 ~: O9 ^4 ^: v2 I0 d}% o% ~3 n) S; ^
m_wndMenu.SetVisible(FALSE);9 {: l2 \9 }% _; a# r

# U! l7 j. p+ I4 O, _2 S--------------------------------------------------------------------------------------------------------
4 c8 L1 A+ |  m' [+ n. l- K& j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 h8 l* b& S7 P, H& H{+ O5 G  E+ R! [  D" l8 k3 Z& U$ T+ d
BaseMouseCursor();/ A& M4 v# H9 r, w& x/ O' w
}: T- B8 s: J& _( ]3 t# f; r
在其下添加:' E$ H; a- ~5 |$ P' H" _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) c9 u6 J# V' r' U/ W  B5 M. _
{2 p' l0 S& |8 L
m_wndMenu.DeleteAllMenu();
* h" \( I" F7 Rm_wndMenu.CreateMenu(this);
8 ~+ G, @  _! Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ `" I3 a0 `: ^6 T3 w2 z% ?# a- i# n( [- ^: |- D' S' L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ {; F; C+ K9 Y( p+ @1 {5 g6 U
{) k/ f7 ^5 F( N/ S9 ~' W
  //P以上级别才可以删除所有道具
# o( `7 G+ y! w# ]& W  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 W& o! A0 L+ r6 W5 H5 J. z
}
8 R9 j4 G: C+ U) Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 F, z5 d! V& ^7 m# _' N/ o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% ]! W0 J8 ]# U, d) ~: ?/ A$ h& Lm_wndMenu.SetFocus();( n/ s) V8 L' H  T
}
' q4 n, ~6 ]5 R9 m------------------------------------------------------------------------------------------------------------) U  g( S# Y+ v5 |8 x0 ?
*************************
  X: H; V8 _! T( z2 k. }WndField.h文件' {5 M# v  c0 ?. c
*************************/ F8 z2 F. D% g1 Z# ]: X% L6 n+ Z' L
搜索:BOOL m_bReport;
% A. t/ @2 p# ]$ a% |$ [其后添加:
2 j, D/ }9 Q. o/ C; X  wCWndMenu m_wndMenu;+ K2 H7 t! @( {4 p' C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 D, q' r% O" @: \! `! N+ T: o: |
其后添加:4 K, p$ f7 G* C- i: _( k4 n
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 _. U' R/ ~9 Z% t" m& \6 C0 Q! K7 [" Q* b

4 f& d# t9 s& g$ e9 d1 k- G% t

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 22:53 , Processed in 0.068633 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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