|
|
源文件中_Interface文件夹下WndField.cpp文件
$ f G$ ?0 _7 U, F* N1 |. H# r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% w- }2 ^% L' M! E/ E- s8 ^ R1 R8 h3 O, y0 a& x6 ]& k
struct sItem
& F3 _0 _, f: M/ H" i{3 y9 T+ S0 S2 U
DWORD dwId;
+ s' W: g# a( H" jDWORD dwKind2;( S! v7 I8 O* i# b3 F1 r1 V
DWORD dwItemId;
# q7 [0 H) o3 u/ \BYTE nIndex;
" A" a9 i0 {( E2 LsItem(){
; d, T0 C' l1 Q% ?, z dwId = dwKind2 = dwItemId = nIndex = 0;& r) i$ Q# }" |( J: t+ a9 ~* C5 V
}
3 y$ H9 y8 a) w, A2 d5 @5 C# vbool operator < (const sItem p2)3 z! A- p k0 m& w! t( f
{
+ t* }, l1 f: u+ X2 q if (dwKind2 == p2.dwKind2)
. w/ r* n% W% @+ f! y {
+ U" O( k1 Q+ L, z return dwItemId < p2.dwItemId;' I# { W! g2 x4 K" b& n$ Z. C1 ~
}else{/ y8 ~* k9 b' [: O
return dwKind2 < p2.dwKind2;
8 X& T6 j9 G2 n* t6 `3 k4 n! g }5 q1 k, B/ j: B
}1 |2 X h( A/ |6 c$ z L
};
+ e$ Y" L) I1 e `1 p lclass CInventorySort- I! J* S# g4 f
{6 J8 K( E' R# m- z
public:
1 S9 Y$ I' B2 k4 } |: _2 V6 @CInventorySort()$ b5 f- e; [, ^3 T& ^
{' H& o" ~0 s) F- H! K# d& x/ l
m_dwPos = 0;% @3 w0 }! x0 K) y7 \( G* N
}
; z$ v, R! |4 r! b~CInventorySort(){}
; }/ a. d5 n @+ Sprivate:: y1 n4 K' |) E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! B3 n0 j( u( s! ]5 N9 \
DWORD m_dwPos;
* R; C, C/ U4 I! x5 o" Gpublic:
& {* j/ S& m6 g1 O5 kvoid Add(BYTE nIndex)
! Q1 h7 `6 F% m! E{
/ H3 m K. m% v( Y# O if (m_dwPos >= MAX_INVENTORY); _6 i' h6 ?3 x4 m: P0 T" f
{5 f5 V* R8 T* J# Y. N. q: ~
return;
2 [( R: l2 r5 _/ o- x( A }8 w1 C# u; I( T$ j) m
m_Item[m_dwPos].nIndex = nIndex;
3 B0 J: L; W6 s) a- j m_Item[m_dwPos].dwId = m_dwPos;
' u2 c; y2 z2 F& S( c* f m_dwPos++;
! e1 N/ x3 t9 ?4 `0 K |1 D6 J}' H) d, N/ d1 F2 V1 a. l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 N2 v p! r. Y# ^, p5 \
{" N- i# A% o, @
for (int i=0;i<MAX_INVENTORY;i++)
9 a( m8 ?6 W' n- M0 L+ c) E' { {8 {# X: ?. x# P6 k% b
if (m_Item.dwId == dwId)
. x8 Q1 ]/ w/ M0 ~% R {' d5 D% U, ]( w7 g$ p0 A2 U5 Q% @
return m_Item.nIndex;5 @* W) `& I$ j) n& j" O; m
}
3 p6 z: K8 R3 F5 S4 l# \ }
8 F$ f. u4 e! i3 h) P0 u6 P: r return 255;1 |; a' Q5 }; H$ W! U) ^3 J! E
}5 f+ n. o2 X) p! ~8 W; q6 @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' ]& ?* f( V. o9 r
{
( n* R% F9 ]& p4 f( r+ ?+ ?! L BYTE nTmp = 0; B7 r. x# c% G7 F
bool bDest = false,bSrc = false;) [2 V! A) N# R5 J5 ]- T6 f
for (int i=0;i<MAX_INVENTORY;i++)+ C5 |- v6 L) b7 d( d& A, c
{
/ b1 A9 d, Z; l% a if (dwSrcId == m_Item.dwId)
4 |6 L# L( v( I; Z { i6 h# {. w/ l3 a9 I
//id相等 则 改变对应的dest和src3 E/ }$ n/ R. \: B& s0 q" V+ ]
nTmp = m_Item.nIndex;
# I# B" y* R; A- \0 | m_Item.nIndex = dest;" N$ v7 M' F& {/ P
}
, b7 Q0 ^8 M8 d' _ }
! a# ~- I) g) t) c! W/ O1 y //临时数据保存完毕,交换开始
0 ~& m% h4 e- ` for (int i=0;i<MAX_INVENTORY;i++)
; v+ r/ b2 K" Z0 D' ~& V$ ]+ q) R3 X8 a {
f8 t1 X# @/ _# p3 T0 F } if (dest == m_Item.nIndex)
& X. r- ?" r8 ^' | {
# B# E) @4 ]/ H+ d! Y/ @1 S //id相等 则 改变对应的dest和src
% Z; S! E) N5 x5 x4 V( _ m_Item.nIndex = nTmp;4 z2 u' T5 T7 G8 t R: y
}
, Z. u6 @" v3 c }8 A3 {$ T0 Z; ~" G* p
}
: O" j; w4 \+ m$ [- z& @$ L};
/ }5 W" G$ X1 P# V) D; Z8 E+ N. X-------------------------------------------------------------------------
* |% N+ I/ {6 X6 p* L+ g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' o3 ^+ Z" a M3 @$ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 b+ l7 }5 [- U) X: X0 K; r3 }
紧靠其上添加:! s% I9 Q. u. R% q& |8 w
if( pWndBase == &m_wndMenu )- }# o6 D! h) R. W# P! v9 \# c. q
{
) Z& y0 f9 A& |" R" D d: r9 i3 Z Y switch( nID )
) a" Q9 W- H2 A" B/ u- H! H, x% E {% k$ A0 `* F2 `5 {% H
case 2:2 G) L9 l# I K3 w- a* I
{
0 R: P, p7 @3 v: B9 u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 E" q- n9 z! l8 a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) \& ~' `& H( @2 ^ {7 x% j$ o9 x, {: L! t9 x" I
break;
: O4 {' f* R; @+ J" O }
( ]8 w4 K( i% Y p1 s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 S! P4 H+ x( U1 [3 D7 B6 x
{
4 p2 i! Q0 w" { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' [0 O) r4 D9 Z1 N if( !pItemElem )
4 q* @% y$ e3 ~2 ^2 ~6 v7 s continue;; e0 P6 C j) w7 @
if(pItemElem->GetExtra() > 0), e# Y* p0 d" v2 S, R3 w; d" E$ l
continue;; ^- a5 q- }" B& y8 f
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( m2 O8 ^' u6 C
continue;
/ `9 K! V* b$ F. H2 b9 b if( g_pPlayer->IsUsing( pItemElem ) )% T, d4 P9 A, o/ @! k; V/ t3 h5 `
continue;
* ?0 s+ R4 |# l( n9 e* S0 j$ Z6 h if( pItemElem->IsUndestructable() == TRUE )
9 {, t! ], o3 n' }" M F {$ W" s( }$ f+ V+ q& A2 g! ?( N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 U) `% C& _6 C+ C% L continue;
3 s6 x* m6 m+ \ }
2 U/ R" ^0 n7 B7 i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: }2 a6 e V+ A) j6 G( m
}
5 K0 Y& j7 j, U( D break;
/ r( n1 l! d/ Z4 W. t }% E& G( b, z: q& e+ y+ ^
case 1:( [9 e6 I( A( L" U
{ H+ a# f# `* C& M+ A) E7 `
//整理背包$ B" `: j4 Z* J$ r6 Z% n( x3 @
//////////////////////////////////////////////////////////////////////////
" ^, y0 `4 H' X" o" J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' y- u. M1 d4 I/ P //////////////////////////////////////////////////////////////////////////
5 _7 E* Q1 M! `( U% b //////////////////////////////////////////////////////////////////////////9 O0 w, C! X' I1 [7 T
CInventorySort* pInvSort = new CInventorySort; s) k7 P7 M8 L3 y- v/ l
vector <sItem> vItem;
% @7 J- {2 N( Y! ]% _, P( B vItem.resize(MAX_INVENTORY);//初始化大小$ S/ e2 i r* {$ a6 w1 Z& y& D: F2 V+ b6 O
//////////////////////////////////////////////////////////////////////////
$ E( d2 D! ~! G+ d$ M //填充数据! L7 a2 T2 V2 U$ {
for (int i=0;i<MAX_INVENTORY;i++), R- E5 _' o! l. k
{& [- ~( r' q3 k5 d; L( t( ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 Q9 ` G9 }( {9 ~, P; i" e/ W if (!pItemElem), a9 |1 _! y3 F9 Y
{
7 t: q* [8 L0 E& |% [ vItem.dwKind2 = 0xffffffff;& @# Q! w5 K( j4 d2 z& N1 R
vItem.dwItemId = 0xffffffff;: a9 @$ k8 H, q \2 a* ^& ]
vItem.nIndex = i;
4 K: s, P& B- v& G }else {
4 L( ^% @' l# A* Y/ x$ Y3 M( y# }) \& I ItemProp* pProp = pItemElem->GetProp();
) ?* I- L5 M K) x3 R# n( Y vItem.dwKind2 = pProp->dwItemKind2;
2 N' O8 o4 G7 L# K* W; B vItem.dwItemId = pItemElem->m_dwItemId;. p2 m! y% A4 `# {9 E
vItem.nIndex = i;% W; p# M5 \( A: ` c: `1 t; A* |
}* R+ @% `' ?9 ~! y, v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- z2 |3 E$ R8 N! V8 s1 K* ?1 ] }! Q5 ?2 N" \; j0 q" H" t' M( E
//////////////////////////////////////////////////////////////////////////8 m2 U: `4 T3 m2 D5 z: p
sort(vItem.begin(),vItem.end());//排序* y- n( V" }' D4 Z
//////////////////////////////////////////////////////////////////////////: p$ W! z! [( ]" G! V) @
//交换
6 n2 H H: g' n0 y* E for (size_t i=0;i<vItem.size();i++)
% |4 U# Y6 Q0 C4 p( ?1 o, Z {
+ ^9 E- \( m, l: h" G //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) S* c" l7 V! x- g P/ p, G
pInvSort->Add(vItem.nIndex);! }1 ?& [* e" @( i. m6 Y
}
( `% w% R4 r! B; l0 j y BYTE nDestPos = 0;
* E. K8 W A' g# @: g2 }, } for (int i=0;i<MAX_INVENTORY;i++)
: L' `3 J, {- P {& A) ?/ t: W) _& s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 j0 s9 o2 S5 }
if (pItemElem)
2 A' N9 E* ~9 W) Q9 M* U& ?2 o5 P3 L {7 }6 [- f! @- Z# u
if (IsUsingItem(pItemElem))
9 X& e5 ?4 O- Q0 ~) _ {' C R; g5 ?/ @. } N
//这个位置无法放- _$ N0 S6 W$ T9 u
nDestPos++;1 T9 o$ ]- b3 d; v; ]
}
2 d: E8 S! m# a/ e/ M0 z2 [ }$ L2 i, v A" K" J- _: s" ]
BYTE nSrc = pInvSort->GetItemSrc(i);3 H6 g% c& k- s( d: n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 V% F$ O9 y& o' m if (pItemElem)
9 {! a t. s4 k. i& R9 y {) T& M: c$ w+ ?* {
if (IsUsingItem(pItemElem))
3 `% s2 K4 L! T* y. `. q) j4 ]8 @ {3 P1 y6 z' U5 }; x5 C7 l3 V* d ]
//这个道具无法移动,跳过% L$ `, H7 K: \4 [
continue;
: y4 Y5 @" D b$ I" c- N4 i }* `0 s' X h- ?# I" z$ z% q6 }
}else{# s4 W8 q1 ]: x% L* @* \
//空位置 不用动+ F+ p2 m. [* ~; t3 y# v3 g
continue;0 W4 P8 ], I7 |3 c% G2 F& f5 s
}
- O5 W8 F7 F- E //////////////////////////////////////////////////////////////////////////
) I. l3 W) Y8 V7 G' G //开始移动
. F# m7 N" Z' x/ y G6 _0 e if (nSrc == nDestPos)
" n1 U. B& \* g4 @6 D" h; h {
2 a% x# Z+ y$ Y //原地不动+ w8 }" Z2 Y; p5 j9 d
nDestPos++;
/ {/ ~) Y$ a" E, ~; f continue;
" D" _% F, K/ w& H; A }
) T' ^2 F. N3 L, T: W pInvSort->MoveItem(i,nDestPos);
8 x. O ^4 v9 J, ^- C3 {! i) F w g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 j Q4 {5 ]) d9 P; }
Sleep(5);9 v+ Q2 J5 [7 s8 D. Y- z% a
//Error("移动 - %d->%d",nSrc,nDestPos);
% p4 p M: F# V k& D3 \ nDestPos++;4 y I, {8 ~1 l% W: r( F
}
; e: G; B: z2 ~9 h7 e8 E //取第一个元素的信息" c) t7 Y3 B9 i+ D
/*
* b. g6 S; h! J4 } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 e* y6 j- H$ D% m* |7 E
{& Q4 c# {/ O& a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* H7 M7 E3 I3 X1 i4 J: L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) w6 E8 E. v8 W/ j$ J+ D5 W5 D }) p4 g9 _8 ^* a3 @8 i
*/( m2 h. x; T% U- m9 w' |; M' i
//////////////////////////////////////////////////////////////////////////) J( i0 k" o* d, e4 R, x
break;
6 `3 A: V/ T/ S4 A0 {* @% Y }2 ? u8 u7 O! O3 i
} % i4 D) N% f. ?9 C" T" M2 k
}
% D2 ]3 R9 H- s( ?m_wndMenu.SetVisible(FALSE);$ j" D! B! y2 U
* X6 U) E; s9 r* n9 D! v5 B% H3 K--------------------------------------------------------------------------------------------------------
( q0 t: m% q/ l% u$ o4 r; N# L& V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& N1 k# P* n7 l6 C/ d{
! |* w% m; i8 \+ A+ C! C" Q. ^BaseMouseCursor();) V4 G1 T! R$ e+ T4 l
}$ P( b2 y" L% _( Q
在其下添加:5 X7 g4 N" M7 y* x% |" }9 R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): F9 o7 l2 k: W
{" C' o+ Z0 G ]! l
m_wndMenu.DeleteAllMenu();
* P5 P2 t7 p6 e7 lm_wndMenu.CreateMenu(this);
2 q# v: ?6 m8 Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% o" l- Y1 L: f$ ^8 _; Y) u5 [8 ^) n5 o* n3 y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) g6 O# u0 T! N; p{) W, r5 ~+ d; m: y- R: ]# L
//P以上级别才可以删除所有道具( e' i; X" a" ?& `3 N2 Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: y" c6 x2 L: Q. l: M0 Q, o}
; H3 N% O6 l" a: Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! {) U3 A) A2 p c3 A" Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. I; h- y% N- Mm_wndMenu.SetFocus();
5 U# ]; t d- Z' Q) s}# D; x. B/ ^. v
------------------------------------------------------------------------------------------------------------
/ `8 \. N' q: C- ]5 @/ C*************************
' u; T( w* K7 B& y# r) [: FWndField.h文件
" ]& h4 u0 C) S7 |; V* H% f0 X*************************
6 h! R' O& I" a8 P( G+ U! [搜索:BOOL m_bReport; o" b! Z: i0 m9 {+ Z
其后添加:
) E1 U; x4 Y, A" B* hCWndMenu m_wndMenu;
( e* D1 J* a9 {. C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, b! a" u3 [ h6 m6 J. n" i其后添加:" _( z" w3 y# P+ i9 L Z( j& _
virtual void OnRButtonUp(UINT nFlags, CPoint point);! d2 b& ?4 Y& Q& y% f
1 J$ Z @4 ?+ v% m
. a, O+ ?7 a8 o% }$ x4 _ |
|