|
|
源文件中_Interface文件夹下WndField.cpp文件5 w/ n/ F. V$ A4 j; ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
K5 Z, d+ u7 n) g$ r
5 `: l1 [" H+ K! u, gstruct sItem" ~" F5 L7 w9 E( x6 E' e
{
5 s9 [: V ^, Y: WDWORD dwId;
9 c2 p9 }# N# z; U! B% h- EDWORD dwKind2;
) c8 w6 M5 D n/ [' W% pDWORD dwItemId;6 I5 a" T6 [8 c6 S
BYTE nIndex;$ m) F" ^' h! |) @9 [; b1 @2 f5 _3 f
sItem(){
1 h6 y0 D0 y% r: k6 A- Q. ^; P- t dwId = dwKind2 = dwItemId = nIndex = 0;( y8 C+ X/ e" V* k5 ?& \5 h
} G5 D f+ a+ m% `
bool operator < (const sItem p2)% X4 W) C) j. j* G8 G
{
9 ]5 K5 X3 {$ I5 M- u& L* @9 Q if (dwKind2 == p2.dwKind2), B( b1 R, F- f7 P% Z% o1 J
{
@' |3 e/ e. D) A return dwItemId < p2.dwItemId;2 M! {2 S3 D$ K- v l
}else{
8 i8 X- K' i1 l t; E4 a return dwKind2 < p2.dwKind2;
3 H. _0 s; Q5 k* m) [ }! K/ P4 Z- a- j/ J; n) ~
}4 S8 O" x" U/ Q0 a1 g% t
};
t- g9 w2 C9 @' uclass CInventorySort
6 `( y/ ?0 Z3 h/ C, U, P2 J. v{" b( z8 v/ y1 A& e( R' N
public:) u/ x# o4 z/ E
CInventorySort()
( O' a. A7 E4 M( T{
+ b- z/ U8 p& Y m_dwPos = 0;
% y+ K/ I. Z7 N+ @* `6 W}! E& i' I6 x+ n3 k7 x4 k9 r! ]
~CInventorySort(){}# T' b5 H6 [% x" W! E; U; @
private:
$ @; p' O4 j4 B6 vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 [! S# q2 ^: D) A4 G
DWORD m_dwPos;
2 L5 R6 Z- W7 d5 [* \public:
' e+ P. J; g3 Qvoid Add(BYTE nIndex)
; B; ?6 @( m& B8 }{
: Q( E# q2 L5 ^/ s" ]+ P( {! n# T if (m_dwPos >= MAX_INVENTORY)) o/ S1 y- l2 E8 h$ C6 ]) D
{. y/ ]- w- E) X2 z! c/ C' t: g
return;
8 {1 e0 Q; ]$ b& b: r }2 D, V( e M2 _ H: C$ Z( Y
m_Item[m_dwPos].nIndex = nIndex;
& b( f. S4 }+ D# N. { m_Item[m_dwPos].dwId = m_dwPos;: ^" s* a: a8 E; n; N, C
m_dwPos++;
/ g8 Z* Q8 c; i0 I0 H8 g: e7 s}* y* T4 |$ J4 q' d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ N' B( E8 r" ^% D( E{! Y5 }4 [& [8 K
for (int i=0;i<MAX_INVENTORY;i++)+ k! |1 r& d/ C2 b# X5 S( z$ R
{
- E& n) n4 i- b$ Q( b! G% B A% A if (m_Item.dwId == dwId)
0 E/ y5 `# v! v _ {
$ H5 r5 D2 a" a return m_Item.nIndex;9 y: X+ y' f8 F1 w" u5 l; f
}
9 O: [& l! Z' ^" M0 V% p& n }
( f, R4 k* U" p return 255;
9 M4 }% j* r1 S/ f( Y}% P6 K/ q9 u# P0 a: y, s! a" f9 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 I1 r: N0 u( L+ ?
{
; h/ S& t1 _. [6 p- m BYTE nTmp = 0;
9 |/ H& t! x" V$ T+ \& v bool bDest = false,bSrc = false;% f8 T; ~' {* P/ d) i
for (int i=0;i<MAX_INVENTORY;i++)
, ?6 b8 i; a, g j {
% F/ K1 ]- `2 d& j! ^6 S" s1 _! A if (dwSrcId == m_Item.dwId)
, Q6 ]8 e3 j8 R {; j* `3 Y& H- w- j# o$ m
//id相等 则 改变对应的dest和src
" O8 o% O7 r* Y& _- C7 _8 B nTmp = m_Item.nIndex;0 s; J. q# o- ]( `
m_Item.nIndex = dest;& A/ q# Z K- D9 `" ~7 ^1 _
}
( [/ R) w7 K( m4 w }
5 a; {. h% q* ]) I: Z. k( P //临时数据保存完毕,交换开始; X! h' ^; G/ D7 Z0 M9 x
for (int i=0;i<MAX_INVENTORY;i++)( ]4 Z& e( E: X: d' D7 Z
{; \- E/ l3 z8 E; ]9 d; m
if (dest == m_Item.nIndex)
+ S- X# L n! @! |, h2 V- F8 J {
. ^' V- w9 o8 m7 [( y //id相等 则 改变对应的dest和src
+ S, H$ R% Z8 _( B m_Item.nIndex = nTmp;
5 _$ \4 y% E7 }: |- U+ @ }1 q0 K% ]3 ^% p) q7 ^. T5 z
}
* k# k9 z) Z V! r" k& ]}, q. g: D/ u& h, r0 a0 G. z9 B
};$ e: {; c9 \ r7 r9 [2 U9 z7 _3 M
-------------------------------------------------------------------------
1 Z0 B! [* {; ~& x( `* C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% e: ^# i& g# ~* J$ J( D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 m" n# t" {5 Z# }! X8 q8 f
紧靠其上添加:
; l2 ]+ M2 k9 C4 p6 `9 Xif( pWndBase == &m_wndMenu )
" @+ E' a* l+ N4 i0 d3 E{
6 J) ]: u1 B- g7 b4 b switch( nID )
1 x& W0 B& l7 e) a. m {( c; {* e$ m# m: ]4 n
case 2:
2 R+ F% U8 t" @ {/ F1 I& ^) O9 k0 ]5 j5 N; e& E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. `& _3 y: n. I. c% m- k3 k8 r/ o& C5 T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 F+ b. `) O& t) S& | u! k {
- g6 }- n5 b) z break;
, w- a d1 n8 ~( N1 w/ W }$ r- }' U) \: p6 J9 Y* ]% e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). r0 t1 w4 u7 a @
{
4 r7 Q8 m1 K" b' n- G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. k0 z9 \/ k, ^6 F if( !pItemElem )
Q0 _; K$ v' x- U4 k continue; M" a# g/ c5 B% N
if(pItemElem->GetExtra() > 0)) \3 h( O9 }# |9 c1 q
continue;4 k* ~8 N8 N9 M2 f3 c) n6 }6 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : i' W. Y6 P0 F; k' h& m
continue;
2 K9 ^2 M$ o9 I U) h$ O if( g_pPlayer->IsUsing( pItemElem ) )+ l. B6 ~! G6 h; j8 {: K
continue;! s4 Q2 Z% c; U* E# A; X
if( pItemElem->IsUndestructable() == TRUE )
2 |: w6 [8 O* H: H3 D( C {8 u! N5 W6 n; K U( M: l1 e4 k$ T
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- F2 {# |+ J; j: ~; T- l& P
continue;
6 a5 \. |2 L7 Y; |! b }
) g0 I9 A( ^8 a4 H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 y5 a( k( k, b* ~* ` }/ ~5 K6 H9 f! p x- ?$ @* } m
break;
+ ]) E' H6 s$ |, b7 t5 h) S }
6 G, z+ @! ]3 _ case 1:
/ Y3 \8 Z" h* y+ H* { A4 p! L {5 ^7 ^* H8 x" h) H, R' ^) z0 ?+ H
//整理背包
9 q u' T" D% i //////////////////////////////////////////////////////////////////////////7 V1 S4 K Q& x/ x, u# o2 P/ L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 b5 ?* Y/ P a+ S /////////////////////////////////////////////////////////////////////////// Q- b! u5 p6 {' K; f
//////////////////////////////////////////////////////////////////////////
& M2 r* E, ^' c' P CInventorySort* pInvSort = new CInventorySort;% Q# `7 q3 i, `/ c) D: G# T$ g
vector <sItem> vItem;" M3 q) w' h# i% M4 I4 p- Q2 u
vItem.resize(MAX_INVENTORY);//初始化大小& k' q7 j/ O8 `5 J+ h' ?) @. M
//////////////////////////////////////////////////////////////////////////
' _- R D! g$ j {& f //填充数据4 S; v- {+ P- j, x% w. f
for (int i=0;i<MAX_INVENTORY;i++)3 E" g- Z' t$ y9 n4 X6 H4 z
{
! ~; l3 Z8 w& c) A8 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); S6 D! e! C# _) j: W4 Y
if (!pItemElem)
# {! u7 ]! f s& N- t {
4 ^9 F( n7 L8 n9 B5 f9 _( t vItem.dwKind2 = 0xffffffff;7 o# x7 t* g. P
vItem.dwItemId = 0xffffffff;
% ?5 `9 R* B: D H/ I- n2 @' ?! o vItem.nIndex = i; H, s# i* W8 {( Y- z
}else {/ K# C! d) _. F% w& I# e' p
ItemProp* pProp = pItemElem->GetProp();
( x/ o; e, A) k0 P* h) z vItem.dwKind2 = pProp->dwItemKind2;
8 I! C" m8 S; x2 T% J( y8 Y& s# F vItem.dwItemId = pItemElem->m_dwItemId;) @6 I9 t7 w2 v! E2 l9 v' J* Z
vItem.nIndex = i;5 a" Y1 j7 \, Z) S& x+ X
}
! K* c2 }3 ^, ^; u8 o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 b# {( D" d* J2 C C6 B
}
+ a3 C! J2 ?/ U, _: u //////////////////////////////////////////////////////////////////////////
) Y/ c D K+ q7 Q; m4 i sort(vItem.begin(),vItem.end());//排序0 r/ q j5 V2 ?3 P
//////////////////////////////////////////////////////////////////////////9 u- ]) O& ]. ?8 c. @( d- L
//交换
$ a6 V2 K# P" i- d for (size_t i=0;i<vItem.size();i++)2 g% P& Y0 w# Y. J5 p" L; n
{
* R! z' F0 V& D$ o& w- o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 r7 k5 |! B T# Q
pInvSort->Add(vItem.nIndex);
9 S" j8 A2 Q) T6 s* X* ] }
( _$ e7 O& q" T. I8 R BYTE nDestPos = 0;: F0 k) J7 k" m
for (int i=0;i<MAX_INVENTORY;i++)' t# z) t4 @- {/ M {
{
% n( a; I& a$ ]- r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& q: q' K4 f3 R/ N* B
if (pItemElem)
3 D/ V* b9 w; G" ~5 x {6 @, `! z |# u3 k, T$ R) A# r
if (IsUsingItem(pItemElem))8 k4 T; [& i& J2 M
{# }( c D; ^6 y7 X4 M5 ]
//这个位置无法放
* S! W% z5 x- E) N. B nDestPos++;6 Z6 D# D* [" O7 l1 X
}
! H' V" w4 @/ j" Q }7 S+ H) _. P7 k" ?3 w
BYTE nSrc = pInvSort->GetItemSrc(i);( @0 R( h& p! n F3 c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ b. @3 o$ i7 g( [+ @' a
if (pItemElem)
. r# M2 A% d% n) ?. w- \" \% D4 B {9 Z( Z8 u0 X7 g1 }6 X
if (IsUsingItem(pItemElem))5 o3 q% O8 S+ B" X, m' Y" }
{, ~( U6 B& B/ u8 A' R. q8 _5 h
//这个道具无法移动,跳过
& M! q! O, q. ]6 y; N continue;
+ T+ k/ ]' M/ N4 O) C }
0 w) N, l5 f) S, g3 @ }else{
% g; E* u. i' k1 b1 e2 l, @ //空位置 不用动
& i! \; |5 R, f continue;; d; z( _. d) D! ~! M1 U- `
}
& s# @9 c. R) s$ s: a( P2 T* v6 V W //////////////////////////////////////////////////////////////////////////
( Z, U3 P5 e( {; z% e //开始移动
! S+ n7 Q5 y2 L7 x if (nSrc == nDestPos)5 h+ {" b* w; t2 m! J' H
{+ s' G' P- m& ]& M
//原地不动6 i5 V# y8 d, r: _0 B) j. ?
nDestPos++;/ T; f" Y' L' [+ [5 J" f
continue;8 g2 Y( t' _6 }
}
* K4 q0 X# Y F& H+ a8 b+ z# m5 }* S pInvSort->MoveItem(i,nDestPos);
) |- Q+ _5 {) x1 Z8 A" N K g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 F4 i4 F0 I5 ~8 T2 K4 p Sleep(5);8 _. v- y+ @' E9 B. c! p( \
//Error("移动 - %d->%d",nSrc,nDestPos);
% A2 X9 Z7 R3 @$ @2 @3 X nDestPos++;9 G# j8 _: p% h3 O4 V% ^
}& B8 T# s1 H" g# n# M% u
//取第一个元素的信息
1 e) P- X) k9 z1 S* K/ v& k /*
2 F1 M, n/ u; D B: w# w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! H- B& C1 `+ S: M. f* a1 S" C {
' o/ G7 X8 Z8 ]# f$ j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 y2 }" G& z6 T' }1 m: @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. h% l2 }0 r3 m }
; C: H4 f7 h( M$ c/ T */
& m/ i/ u3 b% c; ^* O //////////////////////////////////////////////////////////////////////////
5 q# X' D( _4 w break;
! c( U: O+ j& k& H5 K; t* V }
1 u7 j1 {! |- k' p% j- [& @ } ) ~) a! I0 p! e
}
1 f$ t' T+ v7 p* m/ o: ]m_wndMenu.SetVisible(FALSE);7 q8 }- N9 E4 ?2 T
% I. G# K- K& T+ t- G--------------------------------------------------------------------------------------------------------
. c. G1 q( M4 c% [: p, w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 F0 X ~; |5 l# m( j! R9 t' {/ v{
2 {: Y t0 u, X1 FBaseMouseCursor();: h/ s6 z0 x) p9 q
}1 D7 A7 q$ Y, }5 r- }3 s# J
在其下添加:
- k0 ?1 m) G8 t: Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 t" n( p" `/ a# M{
( Y- h4 ]* a3 m6 y* w$ G4 V8 g/ x* u! Gm_wndMenu.DeleteAllMenu();. M( [" z* _: N( k, `! T
m_wndMenu.CreateMenu(this);
; N d6 f- d vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 B- y1 \9 S7 J8 v: _9 _/ b1 Q6 I- B P, @. d( V9 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 t1 o+ D: { t4 w/ m ~
{0 Q [5 I9 ~% [3 R
//P以上级别才可以删除所有道具
) z# q" N* n$ H$ I! g2 G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 Z6 X" {: r) W. M( S+ u0 O! [" U}
* _, b8 l0 |$ C- sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ |0 ?% M9 K# Am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 z1 \% f0 O I
m_wndMenu.SetFocus();
% X5 N# b) X) k: }. C}' u$ Q5 a8 H' L6 g
------------------------------------------------------------------------------------------------------------+ h5 q: ^. K2 c! B* O
*************************3 v# L: P h) D& j* L# t
WndField.h文件* d% }- P7 n; g) |
*************************
) |9 [8 m% @2 ?1 ]" S4 y0 e/ G搜索:BOOL m_bReport;
5 [2 F$ y9 D% |( `, K. K: \其后添加:% c6 X1 v% X9 p' ]
CWndMenu m_wndMenu;
4 \2 _& `( t9 k6 \7 {$ y j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, _& j) z4 x7 l4 S# I
其后添加:
) d; s, K# K8 l7 Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 S2 {* c% @) `4 f# a! e
. X/ c- V, i" Q% q6 @* A, j
! @- `5 E. [) W |
|