|
|
源文件中_Interface文件夹下WndField.cpp文件$ G- T$ {1 h: m3 J. h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( Q4 m& [3 K) `' d5 w# W! ^
0 f+ r- S k; i3 b3 O. i2 J8 u6 l7 P
struct sItem
/ o- Q5 T9 H1 }{
) \4 h; [( Z6 ^& H. Q0 IDWORD dwId;
9 q9 \: {" @6 U# nDWORD dwKind2;+ S) }$ C- b4 [. u
DWORD dwItemId;6 e, l: A2 a! Q
BYTE nIndex;
0 b2 F' V, x3 l* `. ]8 T2 y( KsItem(){0 o$ |; V+ {( |) U! ?; T p
dwId = dwKind2 = dwItemId = nIndex = 0;& S* Y* s4 B3 i ]) F! d: Z. P4 f
}& T1 {; g J, v/ }* u
bool operator < (const sItem p2)5 B1 g& E# U+ t# y1 I8 J
{
+ X# |( V0 c8 K4 y. P if (dwKind2 == p2.dwKind2)
0 ~; {, s+ M* _. a' c {
x$ N( d& e' p9 P+ [$ Z/ ? return dwItemId < p2.dwItemId;5 o$ j* z" J+ C+ G
}else{1 u7 y% f% X8 d7 @
return dwKind2 < p2.dwKind2;
3 f( W' N1 i7 I( @. X7 H5 V }
; {- e3 ]% h0 I6 E7 |}
' q, i' A- o# X. N4 t' G4 P};
\3 O; l0 ?. A& kclass CInventorySort
) y4 M& J# Q9 n0 S{6 Z5 l1 X% |$ Y U1 ]# J: P" c
public:3 B/ I' f6 ^ b
CInventorySort(); e) ~% x9 y* a+ A
{
$ l: B h$ o# Z. x% o6 F m_dwPos = 0;9 a3 W8 ^, n+ G
}
' A% O6 b: ?& d7 f" P' _! @+ ^~CInventorySort(){}1 ~+ E. c: k. \3 F8 q1 _* D# I$ N
private:. {! z s* S( R, ?5 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ y* m2 I* _1 H4 N8 T( W& S1 K2 aDWORD m_dwPos;- U3 |7 \% y6 \- J8 u$ P
public:
- Q9 h2 X( d$ d: {: |: V) ~void Add(BYTE nIndex)
7 R/ s: ]% ]1 h" d0 s{
8 H+ I6 H3 Y3 Z4 ^3 f4 g if (m_dwPos >= MAX_INVENTORY)
+ _1 D- W/ ?) ^% ^; A- F0 e+ P {
5 \0 r& [8 R- L3 Y return;2 D/ {; z' g6 z
}
" P, P2 R8 j( P m_Item[m_dwPos].nIndex = nIndex;
& O0 S0 T7 l* t% ~ m_Item[m_dwPos].dwId = m_dwPos;% s' v2 v3 y, L, B$ A! y- C
m_dwPos++;
& F# y9 G6 C- R: w3 |' S3 Q}
% \, g; C% j- @4 s% r0 Z3 [ XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* M$ m, t2 H+ K0 m" H, G{5 ~2 F6 c# x5 c7 y( h
for (int i=0;i<MAX_INVENTORY;i++)+ M, `5 d6 v. [1 d0 i- a- P
{
1 }, U5 U" C1 Y- |" ~# ]" }! T/ a if (m_Item.dwId == dwId)
0 B! x$ K Z/ I9 f, W5 V( y {
" |7 d- y- x7 H) ^( P" c return m_Item.nIndex;3 a6 \( C3 n3 l7 C
}
0 |$ P% X0 @8 F! w+ O }
! F. W2 q- }& | return 255;+ L& \6 X- c8 s, p* L6 C
}+ r* N( F& u, P/ Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# @2 z, q7 A: d7 B; P
{
; a1 V& o/ R: f2 |. T6 { BYTE nTmp = 0;
( l" d, n: _3 r4 j bool bDest = false,bSrc = false;
8 _3 {. R" D3 |+ i for (int i=0;i<MAX_INVENTORY;i++)6 t2 h; ~) [3 }" e; _
{
5 T9 ^4 J# K. |; O( w ` if (dwSrcId == m_Item.dwId)
1 X6 |, a+ h5 n0 \6 g {, X6 [! X5 t# H! @. X( Q: u6 e
//id相等 则 改变对应的dest和src7 K7 c2 |( Y, a' E" D, U2 H
nTmp = m_Item.nIndex;
# K2 a6 M. W* Y8 J7 n+ T m_Item.nIndex = dest;
% v* q& c7 ]4 V: I1 [! C) Y }
; ~ u! b- Q- C4 ? }
0 n% b! e5 c w% F //临时数据保存完毕,交换开始
! d$ _ a* C+ p$ q! V# o9 U5 [6 I( a for (int i=0;i<MAX_INVENTORY;i++)" K% Z" c0 v0 i. c, j
{
: ?/ ]% V+ I- y0 {& [* R0 p+ X if (dest == m_Item.nIndex)
3 L5 x5 G* z3 u {
# U/ N2 b3 o# w& \ //id相等 则 改变对应的dest和src
9 F `, K4 \1 z m_Item.nIndex = nTmp;
% |9 e7 A; O7 K( I& l8 E. I+ R/ Q }
% _7 n& P: M; B- v* a }
5 j; c9 a* U5 g: c& @4 }}% N: p+ Z0 J1 x8 e9 {: V
};
4 C0 w! m) _4 T; y& [7 f-------------------------------------------------------------------------! r ?3 d6 T6 p" e1 a" n/ }+ P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 l4 d# D* I8 s; y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 r" K# s/ k4 @- S
紧靠其上添加:
) _3 N z1 D# E5 u/ J7 Mif( pWndBase == &m_wndMenu )
/ ]9 x E+ I. j{5 H( Z9 f* H# h; z3 m
switch( nID )+ n8 B( S" }! K, Y
{
, p$ A- \0 L5 Y1 s case 2:
+ p) R1 n8 y# g! b% f) o7 S {( @ I" ]' ?; e. ]( [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- g. z W( n0 r/ P) @- ? if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 ?: h; ?7 x* `1 [3 M& w {
7 l/ q; `/ T$ A break;1 @3 S' D4 P' ~! i [# F
}
& R" U4 [. y; [! b for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); M: E7 Q3 F' M' P7 L' w+ B' A
{
j% ~3 ?! n; R* p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- w; B" L1 P+ J4 r$ x
if( !pItemElem )
[8 K! E' O! @ i" N; K8 G6 s continue;5 O$ X' U) y9 m7 V
if(pItemElem->GetExtra() > 0)
" `2 b+ U9 n# A) ~/ T continue;3 [0 u$ N1 @7 [& e' I4 v# }/ ]7 |$ g
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, r* o1 e4 A4 p& G3 p; m continue;" Q2 {1 ^8 X0 F" e
if( g_pPlayer->IsUsing( pItemElem ) )
7 j: `7 Q) h5 T' | continue;
( e& v: G* p/ |, E# ?( G if( pItemElem->IsUndestructable() == TRUE )/ N) Y4 j- Z1 D% y, ?
{
# ~5 q. h! w! u+ E/ y Y- X+ f, ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& V; h/ k8 r: A) ] continue;
% ?- S( _# }9 ?3 y! z }
8 A% u! S; [) U& `7 n g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! ^6 F, `& K0 E: {/ x }: c- s/ A; O9 H0 Y5 y+ r
break;5 _9 p, Z& l' g
}
/ z7 f! H2 g8 u6 U5 x3 }- O5 v case 1:
# X" u* g) T! Y o) ~2 `% y {. z5 e$ a* A# B. \# L! L$ W2 f
//整理背包# G; V) Y; ]- h o* ]' W c1 M' N
//////////////////////////////////////////////////////////////////////////; ?- f: ]; B) }9 d E* S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 o4 q o' s S. r+ |' B" s //////////////////////////////////////////////////////////////////////////
6 e: x0 a; f8 f //////////////////////////////////////////////////////////////////////////
, R e7 S# l. ]6 W CInventorySort* pInvSort = new CInventorySort;
( y ~: U5 y+ n+ i vector <sItem> vItem;3 u1 D0 h8 M: \, o3 ]* V
vItem.resize(MAX_INVENTORY);//初始化大小9 @1 G# c: o6 o/ B) | O
//////////////////////////////////////////////////////////////////////////
0 d) q/ T2 b% M0 o$ [3 ^( c/ k //填充数据+ t; b' }; i& ?3 ~. m
for (int i=0;i<MAX_INVENTORY;i++)
; @3 Q( u2 ~8 c2 ~( j6 t& D1 x. f {
, _2 S9 |* B" {) V. q6 [, Q# G$ z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 y5 O% D/ q8 K; c5 F0 z: d
if (!pItemElem)
: O/ h1 w G. T$ o0 I1 f3 [1 y {( E5 }& A/ p& W/ ~1 k- I
vItem.dwKind2 = 0xffffffff;
6 [0 O; H' z' S; u vItem.dwItemId = 0xffffffff;
* R( S/ c& \/ a4 i' C vItem.nIndex = i;
0 v( ?) {8 W" e9 } \4 z. E9 c% ]+ c }else {
& A" H u' E' b0 Q5 g- t! _ ItemProp* pProp = pItemElem->GetProp();8 N8 c# z" ]% C k
vItem.dwKind2 = pProp->dwItemKind2;
/ J' L4 S- X" c) ] vItem.dwItemId = pItemElem->m_dwItemId;
: W8 t# `: K, S2 G% x- v vItem.nIndex = i;: H! d& s% E4 D
}) V d z) N$ l8 B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 j8 s$ B: H4 l5 K( X8 P }
L* r" L1 \# f; c //////////////////////////////////////////////////////////////////////////3 V' e: N4 q+ n/ W, B9 {* W
sort(vItem.begin(),vItem.end());//排序" O" M" }2 t G; S M# @
//////////////////////////////////////////////////////////////////////////: _0 L$ S* d! N
//交换3 Q) l9 u0 Z0 a0 f
for (size_t i=0;i<vItem.size();i++): q6 q: b) G* S$ d2 W6 B
{' t3 i, c& c7 ^+ |6 @. }0 o/ O1 g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 S. U0 [1 E! O+ W5 q4 F9 ~3 \4 x
pInvSort->Add(vItem.nIndex);
" O) i6 g$ Z# R }7 u Q' K }
6 I2 G% _5 b* u* t' y BYTE nDestPos = 0;: {7 X/ j: d% b' F$ c: u6 I
for (int i=0;i<MAX_INVENTORY;i++)
2 {: q9 E1 g+ z {2 h8 t J$ V( w4 Q W- \% O, c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: Z3 B7 g: J0 Y' H
if (pItemElem)3 c! n* \+ V; u, w
{" @1 p" I _; `
if (IsUsingItem(pItemElem))& o! Y# O. ^/ e% r
{7 W( h" Y$ n9 i2 i; Q( z0 H" S* h2 K) j6 ^
//这个位置无法放% {/ G) Z$ G, V& s. G
nDestPos++;
' Y( x5 M% q- {0 o }
; [4 T! T5 j2 T% c `3 a }; ?0 D' K; I! _2 G
BYTE nSrc = pInvSort->GetItemSrc(i);
% D, D/ M0 p# o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ _5 w% B9 r, d; C: I1 W( W+ R if (pItemElem): v8 o# G& o: p( N( x; _
{/ u8 F# t h( _/ }% P
if (IsUsingItem(pItemElem))* q* ~6 ~, J" P
{ B$ L$ Y" G! V
//这个道具无法移动,跳过
: z! v4 q. I6 \- m1 x continue;3 a: l* l6 X* K5 P. I
}0 y0 ~6 S& U" C2 _9 ~ w
}else{6 ^/ @6 d! O5 _2 j5 O' e" _+ J
//空位置 不用动; ^: P' a1 E1 y: k
continue;
: |; q$ K1 Q4 }1 v4 P4 {1 Q" Y }& r) m. z0 l. x! r- }
//////////////////////////////////////////////////////////////////////////
4 x- t( ?! J6 n: P5 \ //开始移动
8 |! }1 \, P) t9 a9 r if (nSrc == nDestPos)# w8 S" u* D/ l% Q! g) F
{' C+ n6 Y, K8 t1 n- c# |& f3 T6 t
//原地不动8 j. ^8 c$ q4 E2 \; J" X$ l& i
nDestPos++;0 {, F7 H, B/ { T: S
continue;, I5 C9 d; y. c* _2 P+ T
}
" U0 ^) K- E/ i% u pInvSort->MoveItem(i,nDestPos);
. J! m0 T3 B! j1 G1 { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; R' R, m! z# l Sleep(5);
( y+ e( U$ x- d; M( I, S //Error("移动 - %d->%d",nSrc,nDestPos);
% }1 k6 _$ L+ T d* c- M" m2 X nDestPos++;
9 j5 e: I7 j) b- Z4 }3 K }& h8 n* s- I" O+ f# v
//取第一个元素的信息4 ~0 x3 D7 S! J" G; B$ L) e7 r
/*% T% ]0 `: A' R( f3 g# i/ Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 Z# n% W: ^( F+ Z/ R n {
c5 M" b! v! P1 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 o2 R4 U% |( V p) o# T8 J6 Q2 ? g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 r7 r$ w5 q1 i
}5 a+ S' A) @6 y
*/
5 d6 `; D6 x2 L0 z1 D //////////////////////////////////////////////////////////////////////////
5 t0 f/ T+ [3 }8 d3 k% a break;4 e* |2 O, p- K' m _
}, c- N' U' O- A' P. K+ ?
}
8 w0 G8 [6 f9 H. f}' x7 a6 I0 W1 c4 ^4 ?/ r
m_wndMenu.SetVisible(FALSE);: K) v h# J- l& y3 }
1 y" @5 m- D6 q! H/ O+ i--------------------------------------------------------------------------------------------------------
+ \- S: B4 @4 Y. e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 \( D+ h0 y) w) _$ G$ i
{
* ]0 A/ u: w+ v4 w& o( {, Q& `3 IBaseMouseCursor();
8 u) ~0 ^5 h- O b# `+ P" t3 i- q}
: C4 W* t/ S0 O! B在其下添加:
( p2 s( L. g" [5 N4 F* q3 E0 Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- n6 ]( |7 T+ O{
( z% c7 H1 R. k0 \8 Z9 ]6 E! vm_wndMenu.DeleteAllMenu();
& _, a6 X/ k( q' i# vm_wndMenu.CreateMenu(this);4 K+ o6 R- U x9 B B2 l1 S0 j) [: j: O
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ i- J4 n4 R8 t" P9 c
$ S0 h5 ^3 T% g# r( mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 j, O1 f. A B{
$ p9 O8 Y' j, \3 A9 t9 |' W //P以上级别才可以删除所有道具
3 I6 Z. z, E/ ~ m" v4 ]6 } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& g( o) L# f) @}
1 n: G5 G3 Z% h/ C1 y: Z2 Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 `9 `. \6 y" E2 V3 w0 f5 g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% C3 w6 m* ?6 {. S1 h( d' O1 }( X6 q9 vm_wndMenu.SetFocus();
) ^" L4 j' Q6 [: {* l7 o! \0 a}& ^; v) ]# U9 M3 v
------------------------------------------------------------------------------------------------------------5 h1 q) p" J- r
*************************
) D" s6 Q9 Q# T* S8 s: ]- E+ WWndField.h文件
" m% d9 d* ?) t* J# z/ h*************************
( ?0 D. e7 X, S& s. g* G搜索:BOOL m_bReport;
5 J0 Y2 K* g% N7 F其后添加:
* y V# {+ C- \. O+ e/ u) \1 pCWndMenu m_wndMenu;. q, q1 v2 p7 ]/ p9 t6 L+ D4 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 f& n! _+ ^+ W. B9 ?% n5 S+ d其后添加:' Q9 p- q! ]" c0 g/ y
virtual void OnRButtonUp(UINT nFlags, CPoint point);) W/ P9 N: A$ S* k- t
4 f. s3 ]1 x/ E
* d6 G0 Z) C5 J6 }' Z
|
|