|
|
源文件中_Interface文件夹下WndField.cpp文件
! {8 f7 M' P/ @2 v4 G) \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' l; C. y+ V ^( m+ s: g; X
; j3 d w1 u& n# ]# x/ n- `
struct sItem
& F+ H- T. i i{( R* z) a9 d7 G) x x+ y ~7 n9 H
DWORD dwId;+ g4 t: `4 J) W' [
DWORD dwKind2;
- |7 _7 a' s" M. S: r. E1 X7 n ZDWORD dwItemId;
. e9 |; `8 @8 K$ C* m$ QBYTE nIndex;
- \! F6 i7 b) v, ]sItem(){% [1 \. D4 s1 O Z" \6 e
dwId = dwKind2 = dwItemId = nIndex = 0;3 v* {8 S, v, q" c0 L8 T
}" n. d* b; O5 h$ C; q; U+ I' ]1 j
bool operator < (const sItem p2)
+ C- V9 v3 y+ B- }1 V( G, T9 d{
6 j' A! Z( @+ F' x. \8 Y if (dwKind2 == p2.dwKind2)
$ K( r; S" D. j# \- b- `( Q0 h E {
8 m+ v6 g* |. M return dwItemId < p2.dwItemId;# }& g8 s2 S1 r( t8 f) D
}else{, M/ s* ~" R* t" y/ x. {% T- L ~1 e$ S
return dwKind2 < p2.dwKind2;
F Z6 E ~ x% M }
% O8 a; h4 u2 ?8 Q}: \5 {9 P9 k5 ~4 _+ j+ Q% Z
};# [; b) |: r0 A3 D v$ U' C
class CInventorySort' s9 L) ?# R" r. W& n
{
0 o' p, k; c( L# ~* A8 Rpublic:
- h. e; Z, Q& G* J Q* N7 bCInventorySort()% z4 C- H1 [% {) Z5 R( H0 f
{3 `0 Y; N8 A( a7 T4 B6 O
m_dwPos = 0;
6 p9 L1 i0 o( s}: V* ]' q, W4 }' N$ J" @+ ^4 B2 }
~CInventorySort(){}
; M5 V" M% }0 [$ yprivate:
s) u7 B4 n7 }1 s- F) ~. QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 ]2 ~% D( V3 cDWORD m_dwPos;
+ h# z5 U9 z' L9 c3 i! ipublic:0 U; f& m. Q6 _: f- C$ {
void Add(BYTE nIndex)8 ~( a# z& b& d* B4 \- a6 Q
{
, |9 w1 D8 t r' p) M# h! E! \. K if (m_dwPos >= MAX_INVENTORY)4 E5 x) h- t; v( P( J+ M' y
{
5 i, ^* ~9 v+ Z! M- V% c1 { return;2 b( T4 ]. W" o' e
} a2 @6 x8 @# K: b" {* @8 b2 }* X+ g
m_Item[m_dwPos].nIndex = nIndex;& b5 y3 M! C$ J2 r7 e7 w
m_Item[m_dwPos].dwId = m_dwPos;4 y# r, U1 m# v+ l
m_dwPos++;
5 c6 d6 R5 R0 o}
/ C! b+ X4 F" y4 e0 i @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" R7 d; M& U |{
( `: C6 s7 A0 D0 U% Z# P/ { for (int i=0;i<MAX_INVENTORY;i++)) U- G4 X2 _' L: B: ]
{9 U: M$ Z7 m6 ~
if (m_Item.dwId == dwId)5 s# E+ I" c3 q2 q7 O5 r6 u( ~
{( g+ \5 t6 i+ A$ q7 m, k3 k& B
return m_Item.nIndex;# d2 C; P$ a2 l* u" o% A4 N
}
4 n: e! ~" E. k! L% r' ~- q }
: x( j, B- e8 i7 i return 255;
5 e" p9 u: I! r: ?, p}/ \- Z9 k4 R+ L: s& q. x1 P; G% D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 ~" B: r8 j) v: r; S( F{/ t0 {/ [$ N0 }, h- _0 K) P) A
BYTE nTmp = 0;
* b8 {0 S( ^- b4 s( Z) W- i6 I$ l4 L bool bDest = false,bSrc = false;8 l, r0 h8 ~- i0 |+ K
for (int i=0;i<MAX_INVENTORY;i++)0 n8 ~6 F0 l9 g( V
{- u4 \: J7 `! D9 n2 s% O
if (dwSrcId == m_Item.dwId)
" {. M8 |% [3 }& i3 T3 C8 T {
3 I2 F2 {0 a+ N" j* h //id相等 则 改变对应的dest和src: k% q/ t; K* R& a9 v' N0 ^
nTmp = m_Item.nIndex;' }0 {. H6 ^* b+ D2 N* H
m_Item.nIndex = dest;
7 w, M* v0 q! X$ u# R/ I' y }, A, o) I8 h- ]0 o5 c4 e( Z
}
- Q0 i0 t7 e# j4 Z( B N //临时数据保存完毕,交换开始
: H1 M& M# G' J' k A$ v for (int i=0;i<MAX_INVENTORY;i++)5 k a- J4 j5 t+ W1 _
{
Y0 r$ r6 U" t. [ s2 u if (dest == m_Item.nIndex)
& c9 b2 j. V1 k0 t' D0 H( c% n {# ?1 g* e. y' |* t
//id相等 则 改变对应的dest和src4 m- b6 Y( k! Y% V2 u0 L4 U* E( |
m_Item.nIndex = nTmp;% s' q+ v. ]6 u% W( h6 m( B+ s1 k
}
( U5 H1 n! I: E7 f }
$ c$ `: }( [: v7 }- @! |}. h* {9 z! t1 j7 k8 y8 z' j
};
6 o; o1 M1 U& J) V! o+ [+ V# R-------------------------------------------------------------------------. }! T5 J! G/ x6 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Q- F2 |* N- T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 R) [7 Z' S0 W( I' m' W1 v$ c
紧靠其上添加:
& u5 p" f% u: |' G7 t( _if( pWndBase == &m_wndMenu ), m* c t( B. P# ^( f- Z- I" F
{. Y3 e, t2 ~/ f1 i
switch( nID )
/ `# w- P% q( {" s3 o/ n s$ M m {$ b" I7 ^2 [. ^$ B! t3 ~
case 2:6 L& q) _$ d% M& e8 _- a& ~$ \
{% v- ? @7 P& m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, {3 t* ^+ U& I6 R* P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 _# Q. S* w# M7 _, a0 D7 n {- o' x! p m6 T- M5 y7 R
break;
, r5 a. U! |7 L' G! v, H }
, \* B% n8 i- A; U6 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P, A/ S: B8 T- _ s# L# v+ j
{
7 `0 N: h) v o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Q9 o! G- U1 \7 u if( !pItemElem ): K$ p6 `( p- y7 L
continue;: I8 s9 [/ k, n) ?+ i6 \
if(pItemElem->GetExtra() > 0)
& J6 L7 a7 O+ |$ M1 h continue;5 U' s- h I" N2 {- `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 L0 A5 E, p$ ^8 H n
continue;
/ B2 o3 ]# E! `3 ?3 b, F if( g_pPlayer->IsUsing( pItemElem ) )
0 o9 `( Z; w. |$ r* g' [- v6 K9 @ continue;
- L' Y6 Y. I( t6 C if( pItemElem->IsUndestructable() == TRUE )
) f1 A. H6 A! w/ M% k0 _' Q$ C {
6 ?. {: [. V4 @& J' [4 {- Y8 C) j g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( D3 z; h. B2 \$ _3 ^ continue;
8 P1 b ?8 Y: ]% n' j# I4 \ }
' O/ c8 T: m2 U+ E, @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( f" c# V1 ]' O' u
}
3 }. A% U. N1 \4 I# L* B5 d break;( W9 `8 f; ~$ N% i2 v! s& S0 f
}
( @' m! {9 v* c6 ~2 o case 1:) K0 ]/ P) e1 R ^" ?* J
{2 A5 ~4 g0 n6 [7 k' K
//整理背包1 _/ j6 a+ |+ R9 l. U
//////////////////////////////////////////////////////////////////////////
0 v ^3 f/ ~8 A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; J$ E5 h% W$ g( O //////////////////////////////////////////////////////////////////////////
B+ c! K+ R% B$ A' l# ? //////////////////////////////////////////////////////////////////////////
r: Y( h# G$ @4 x5 g CInventorySort* pInvSort = new CInventorySort;1 e7 _) w0 @$ g' p% V* L
vector <sItem> vItem;
- d6 G4 j/ r" R vItem.resize(MAX_INVENTORY);//初始化大小3 }9 F1 ^, i. M; W! X5 t* _
//////////////////////////////////////////////////////////////////////////
5 J& d; b' _' B$ ~ //填充数据3 t/ }3 E0 h* p6 M7 K; c
for (int i=0;i<MAX_INVENTORY;i++)
' z7 W. F& A6 N! F5 T& U B( d {$ Z' L" F n7 b- Q9 B$ i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ _. T J$ h+ V& D if (!pItemElem)
4 _- ? f( t8 N' g {4 s- g3 y9 o( f" n
vItem.dwKind2 = 0xffffffff;
+ N# t4 |3 T' C) Z. Q vItem.dwItemId = 0xffffffff;
; A }9 x, S. U- E4 t5 O. ` vItem.nIndex = i;0 t( c, H9 P8 I ^* E. H
}else {
4 j( w! \" S2 B: b/ A& h ItemProp* pProp = pItemElem->GetProp();
" `* C7 u5 X! Z( E9 o$ z vItem.dwKind2 = pProp->dwItemKind2;) u: r8 j* `* M6 J6 ]# b3 u3 X
vItem.dwItemId = pItemElem->m_dwItemId;
9 \5 H0 x. d k7 H7 w vItem.nIndex = i;/ [+ y1 i) V% A/ M: O& h
}: _1 }+ o D( ^ Y, U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' H, E2 h! j4 _
}
* q6 b3 z! s7 q; f9 a2 l! Z" S //////////////////////////////////////////////////////////////////////////
- j* L1 {: Q1 B' v$ J$ b sort(vItem.begin(),vItem.end());//排序
* a" c& o( [* |7 q# ]* t$ K //////////////////////////////////////////////////////////////////////////5 h" M. h* i) g7 p
//交换; ^+ K( u; A1 W8 o" r+ ~: Z
for (size_t i=0;i<vItem.size();i++)/ T9 W$ I8 w$ P0 V( c1 C
{
" w2 X% T+ F; @$ W; l7 H. D) g" \( g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% e; Y% _$ E! z. F
pInvSort->Add(vItem.nIndex);$ ^) N) \4 U2 m& P
}
: p8 B) d$ ?: |! u7 W BYTE nDestPos = 0; M% q/ u; p. v' ~: T4 p; ~* k% Q7 E* ~
for (int i=0;i<MAX_INVENTORY;i++), _+ r3 P/ b8 v4 O
{! N" I# Y* T! T1 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, \, f! V- A( n9 g8 c if (pItemElem)
& V% y9 m5 h6 J/ J5 z$ d' J {# P w2 R/ n! c: `. {
if (IsUsingItem(pItemElem))2 g5 O, H+ K" R, O8 v o6 K
{9 ?* D- p! B2 `- @1 y5 A" F6 U
//这个位置无法放, z& S% Z% i* t' K: g
nDestPos++;2 W9 H7 m% g% k F# {# v
}; q. M4 W7 E7 H/ q4 ~$ Y! h& J4 [" C
}
7 a" \+ R$ |% c6 |: }6 L4 X BYTE nSrc = pInvSort->GetItemSrc(i);
% @9 v- x/ P/ L% m% v) L8 X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 [ y: I5 H4 h7 P/ y7 R- Q if (pItemElem)! _8 l% f! N' B) N8 R1 a
{
) ?; [, B! T8 v if (IsUsingItem(pItemElem))& u5 X- I1 ^+ j% Z# n
{1 X. _* E4 v5 ~5 d
//这个道具无法移动,跳过3 ?/ Q' ?2 \" b8 {8 W$ i/ B! e
continue;
* Z+ T9 f- c. l }
$ K2 T; q; t7 a/ x4 f1 F }else{' W) z9 _! n& k' g
//空位置 不用动2 Z! f' I& c/ h: ~ ]' t2 Q x* ~
continue;
& H) r" `: W: ?; H) ~/ [ }/ t/ o- J7 o. c5 ]% \
//////////////////////////////////////////////////////////////////////////, u4 A& a% _. _! v' K, ^" X, c
//开始移动
# Z+ P7 o4 O, ?9 \; J1 G5 | if (nSrc == nDestPos). i& M- X' ~6 `+ U% q# Y' j* q
{
. u' u7 \7 x1 J //原地不动5 H( E& m4 x+ Z: ^. _0 n- H" K6 f
nDestPos++;
5 f' U* P% O+ Q2 r7 N continue;
0 d/ c0 a$ t: E3 ]7 d0 R }
0 Z( ~% l& b- \- w, G+ j pInvSort->MoveItem(i,nDestPos);
; E+ o3 A5 a4 b* C, i g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 m$ J% B9 b2 t
Sleep(5);
h5 S2 n) Z3 e! ~: _& _3 F0 V //Error("移动 - %d->%d",nSrc,nDestPos);) E! r) u _+ a% d& V
nDestPos++;
6 @+ ^: C5 u% J ]% J$ j }/ {; C3 g- a/ S; c/ w& }2 _
//取第一个元素的信息4 j1 k' T# i; G; a
/*
3 ^7 x3 K8 W9 U ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 h8 y6 f2 t `6 T {
3 w) }6 `- [' y4 T) u$ A7 \, g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 ~# o" y% c. j1 l' n6 D- `3 i2 M% u" Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. R9 N: `* d7 R5 G, _
}7 H; J2 E0 ~& t. M/ X
*/
4 n5 q) [) [, g2 [; M! O, U //////////////////////////////////////////////////////////////////////////3 \) m* M5 u3 d4 V* c& i6 G
break;, n7 V! q$ j+ w2 w& t
}
, m! Z7 h/ Z1 i1 L" }6 ] }
- `& Y8 [" {1 u; Z* Q k" l- d}6 E" ` [( W& R+ E
m_wndMenu.SetVisible(FALSE);3 z, z1 g+ H2 H/ w( {5 S
5 T4 P* l* r# [% s9 C) Q6 u: q
--------------------------------------------------------------------------------------------------------
% q. B1 D0 W* X( L: f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# L6 e" h% x/ O! C! p
{
- S, V) ?- i0 y$ P/ nBaseMouseCursor();* ^" k$ A4 _5 Y, [
}
2 B% F2 k) }, [2 {0 x7 u2 h3 a在其下添加:2 q; O# |1 w4 l! y7 \! _9 s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; ]# C: n* K, S$ Z{; h8 i; w: Y$ `! R9 g! q: J
m_wndMenu.DeleteAllMenu();$ V, m- A6 e$ }/ A4 `+ w$ ]
m_wndMenu.CreateMenu(this);+ u l1 Y6 q" F4 @. h7 v* f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! B# ]6 [/ g1 n* P6 t
- [2 T, J9 F8 l5 u1 x$ l7 e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; `& k6 N, U: o5 O) P. {{! }2 s- v% u% F# [
//P以上级别才可以删除所有道具! p9 C0 c* m- L S, G8 U
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# A. a% u! H7 O O5 h
}
; |3 l" ^: |$ Y S! Q$ X0 A3 ?6 Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 R2 w. f8 a& ]- [# r+ _" nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 D/ p$ D* V3 B8 u+ L0 jm_wndMenu.SetFocus();1 K- A& W* q# o( f+ `6 V9 ]+ m
}
. V" e& m+ G6 x3 X) h! F1 R------------------------------------------------------------------------------------------------------------% y! G9 p/ {; H: w8 a5 O3 |2 j
*************************7 U# i& x8 u& X* m* l
WndField.h文件8 |2 P+ w) [5 l" j; X
*************************4 N* i3 n# v$ j+ A9 K3 i8 G
搜索:BOOL m_bReport;0 b# |9 t% U: o: \
其后添加:3 V% Q! |1 S! ^4 V i+ r
CWndMenu m_wndMenu;
; J, Y" d' V9 t: A# t' H. s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. M1 e1 ?" V% L) n; M& F8 ^
其后添加:
2 _ R o7 b" `3 k% [6 uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) D. @# @# r- |2 f! L
2 X" m9 W( U+ s; T: D0 G6 r$ Z9 {. |5 F' ]
|
|