|
|
源文件中_Interface文件夹下WndField.cpp文件 z# S% u$ A' }+ e& \3 {. }- `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& [6 j) q k, V4 T5 k, a
: p' S+ M( b0 ?, w1 c- }- Hstruct sItem
/ n0 f$ y0 o. S4 R' ]7 L{
0 f0 C5 M9 F* T; t4 [DWORD dwId;4 z: y8 I8 K# t% K8 N
DWORD dwKind2;+ J; y4 D C4 S9 i8 N1 L: d
DWORD dwItemId;
# u, ]6 b" q, TBYTE nIndex;. {' k) P( |1 f) E7 k
sItem(){
3 r4 _" V2 p& q6 v; Y dwId = dwKind2 = dwItemId = nIndex = 0;1 }' N( B: d, _0 |% j! Q
}
9 l/ |7 F, V; N9 dbool operator < (const sItem p2)" A! P( Z) b0 @/ ?% X# F3 e- W
{5 L$ l3 z( @- t* I
if (dwKind2 == p2.dwKind2)$ \/ y7 [0 v g
{
5 I0 n5 \# O6 W( t- W7 _9 V return dwItemId < p2.dwItemId;
* \9 e2 b6 O% g' d }else{
- q& D# m0 f. \3 F( F8 U return dwKind2 < p2.dwKind2;
* ^9 f; w+ t, y% M; F3 M* @ }0 t4 w4 S; W4 x& E; p
}
# b. S; a/ t8 |+ N7 K};
' V2 x7 M: H( oclass CInventorySort
& n* x, k. M7 B8 w) r E" _{4 e6 A4 L9 h$ k9 x+ ^
public:
# A, p, o- ~ K3 e! m* C9 \6 pCInventorySort()& Z' z9 ]) g" `* j7 |* ?
{
2 b0 t. F0 S0 R; F* P, h m_dwPos = 0;
7 r2 i) J. {/ J/ X}. x! r4 q" U1 L! ~0 e) u
~CInventorySort(){}
" A1 Q/ o" h3 P* wprivate:
) `6 q0 {7 e4 `sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* \. ]: _+ q+ ?: I- x2 g- F
DWORD m_dwPos;
& P0 j8 _* i9 Y: V4 q b( u) M# Z0 Xpublic:; Z0 \5 w5 ~* f% l4 D
void Add(BYTE nIndex)
2 F6 L0 R6 ] l{
- `6 {9 V+ w4 F. N! s/ [: @. A if (m_dwPos >= MAX_INVENTORY) R$ n, I- K( t6 q* |) h/ k' |
{
3 \$ o; J ]) @' V! G return;
3 ?" n3 v4 K' f+ T: `9 b }9 u3 M& }5 f6 P8 z( n* w4 L5 ~
m_Item[m_dwPos].nIndex = nIndex;
4 x6 B" S7 E) c& [; b7 d3 P m_Item[m_dwPos].dwId = m_dwPos;
& V1 j9 E. ]: Z% p/ l5 p6 r m_dwPos++;( g7 T9 v) x% O( }& g+ S
}
$ U; M7 {% o! c/ J2 ?* J. i7 Q% cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 a$ G, P8 R) ]3 ^
{
6 \& }, l' g8 B' c1 V1 g. s/ a for (int i=0;i<MAX_INVENTORY;i++)9 p% T5 q& C" Y I M& k2 d" z$ p
{
+ K. Q0 D$ k+ B5 Q if (m_Item.dwId == dwId)
% r5 g- I% q5 D: N6 N1 W( ^ {
2 m! \/ F7 V$ j3 I return m_Item.nIndex;
8 x$ _7 j7 K0 V+ A6 N) D( C9 u }5 S# n! l7 C, g$ T+ Q0 [
}0 U* q% R+ n/ c. B4 K
return 255;% D# X# G8 c6 z9 F& `) o6 W' k
}8 q4 ]" a& y' ~% I7 Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 |$ [# C+ P- L/ u/ U
{$ U, k1 f% u4 n: k6 A; n
BYTE nTmp = 0;
4 k, h! {/ k" w8 O bool bDest = false,bSrc = false;) o& A I3 K: y- z! s; Z5 _
for (int i=0;i<MAX_INVENTORY;i++)
4 Z" r0 E/ Z q, | {
, _5 ?2 o- o- y4 T! v% O if (dwSrcId == m_Item.dwId)! D) h6 ?: E/ O a
{6 U* o' k6 N! Z! a7 b
//id相等 则 改变对应的dest和src: h/ \) ^# @- V) A
nTmp = m_Item.nIndex;- D( Z: A& u/ A
m_Item.nIndex = dest;4 ?( m- t1 o% R4 p" m9 h# y
} i/ I" ?/ n9 x5 i$ M
}# h. y' q$ T v' E
//临时数据保存完毕,交换开始3 x1 L# N7 G; v1 o
for (int i=0;i<MAX_INVENTORY;i++)
; G O* p4 u3 H% G F D {
9 r8 \7 ]: o0 F, W2 F if (dest == m_Item.nIndex)
0 c9 I* S5 K8 n3 u$ c+ V8 X- t {/ Y4 e4 _3 @7 z Y. X8 p
//id相等 则 改变对应的dest和src0 }, e. N1 Y8 P+ {0 ]( P5 y
m_Item.nIndex = nTmp;$ T8 w3 b+ ?5 p5 u5 j5 E. B
}5 N/ Y8 q4 U, c* F, Q
}
2 r' e' E9 ^( J' i$ `& ?8 g1 v}
6 `, e' u# n+ M6 r5 l0 S};
% E0 R( O( U* S- }$ }8 B& h, y-------------------------------------------------------------------------1 {: R$ W) r @6 y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 x- m$ |$ _! U2 r/ M0 H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% Q8 t1 m! t/ g3 k紧靠其上添加:
' M3 J! H7 V! |" ]8 K( Nif( pWndBase == &m_wndMenu )
4 A' a5 B# R( } A x{; ^. K' @7 C3 g8 i4 w8 N z4 ~; Y
switch( nID )7 v$ h8 ^# A/ k+ P
{
6 m) f' C7 n- \9 W case 2:* Q" a p% h4 E# N( F1 h k; V, v2 K
{& [5 L% p5 b3 w1 f9 p. z# m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" m5 n$ `5 X' L2 R" N3 [! ~( m% { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 L3 w0 r! [- N! T8 s$ i# p$ M {
+ D9 y0 O0 s+ z9 D, p6 X; t+ p break;
: Q& J- O2 Z9 G& T. D- [ }7 m' v% h$ D3 u5 M$ v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 s a8 E% h6 _ {+ ?8 x* ~% {* Z" H! s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# k2 h$ O. f6 P7 E if( !pItemElem )
5 X% y* |& d2 q- p0 _9 D2 F5 G continue;* _, S }$ v) `& |' q2 ^
if(pItemElem->GetExtra() > 0)+ s% E3 @) `' O2 q4 k
continue;
u% r. H. ~+ V+ p' B' f5 t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
y" D1 ~, J7 S continue;% M: W9 M3 c1 R9 H, l# s" r
if( g_pPlayer->IsUsing( pItemElem ) ); W. J, L; g7 K a! I, \. C ]
continue;
* t# S. x! K% s$ A, ~ if( pItemElem->IsUndestructable() == TRUE )2 m+ f( x! ~$ N5 q% n3 i5 K
{
' l: ~* b4 R: c7 n( u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ s' |$ j+ o7 b( f$ L9 k* O
continue;
) |* R5 e+ Q- j7 |8 }- v }
% c8 R+ v$ r I; \9 A( U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 b1 x9 G$ @: D1 |; r }
5 Z6 \, H3 L: F# o" ?, R break;0 x5 m$ u9 n8 X( @( I: ^
}
6 S3 z" T& P3 E case 1:& f* A2 X6 w3 `4 Z
{
& }4 n* P$ _) k //整理背包7 U/ E; s9 R B* d" y2 v6 Q" d
//////////////////////////////////////////////////////////////////////////) e2 c2 j# G+ N2 p5 F3 R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. b2 }7 s0 A; b) k( Y: a5 W/ D6 D- y5 F5 T
//////////////////////////////////////////////////////////////////////////: m: l/ b& z+ K: U
//////////////////////////////////////////////////////////////////////////, e8 J/ L" O" |# q8 D
CInventorySort* pInvSort = new CInventorySort;, E5 R) l( v. ~: I1 W" W
vector <sItem> vItem;) I- H1 S8 X- E
vItem.resize(MAX_INVENTORY);//初始化大小& N/ f1 V9 q* ^( u+ Z4 y+ Y! c
//////////////////////////////////////////////////////////////////////////
; U+ R/ [$ [8 b7 D- ~0 U //填充数据* g, V4 v, ]0 B; H1 E+ Y* p
for (int i=0;i<MAX_INVENTORY;i++)5 A; _+ y. X7 g) ] f9 ?
{
5 i; _5 v l* \% E9 x* m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* Q& M+ {( D5 |4 T% g( H if (!pItemElem)
2 H, e" z6 [: z0 J: _ _; v {- _( [! `( S; I. A3 [6 u1 ]: e
vItem.dwKind2 = 0xffffffff;% \1 Z4 k3 N% X7 |" Y
vItem.dwItemId = 0xffffffff;7 F; S/ C+ H, b S0 ~
vItem.nIndex = i;' l7 z h0 u3 X6 ]( N3 U% @( p* b
}else {. t' f3 L" g! k$ { @2 F# C
ItemProp* pProp = pItemElem->GetProp();7 w* q- q+ q8 `
vItem.dwKind2 = pProp->dwItemKind2;
. I+ R q) e1 m3 S* o' O6 m* r8 [ vItem.dwItemId = pItemElem->m_dwItemId;1 g0 G( N4 U: K: G% d
vItem.nIndex = i;4 R: |7 B3 F$ W) I5 e& `8 G
}- m3 f3 M6 D+ R5 ^$ v3 s J+ v! n
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 X2 a, s" a" B3 A0 b }9 M) e2 F7 n, C, z
//////////////////////////////////////////////////////////////////////////7 Z% d! S) c1 D! `; d
sort(vItem.begin(),vItem.end());//排序5 t2 b& F! _$ ]) J3 N
//////////////////////////////////////////////////////////////////////////
8 [. Q% B, _# W+ p! Y //交换; x+ h/ a9 Q9 `
for (size_t i=0;i<vItem.size();i++)
4 n! H" s" T% \6 S" b8 z1 H {+ h) `: n+ l4 u( g% r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 ^$ q4 ]6 x$ _4 l pInvSort->Add(vItem.nIndex);) b8 w# C, J/ ]4 @& Z
}, ?& x6 P! O: J" v/ }2 z
BYTE nDestPos = 0;
' I7 ^! {4 T& s% e2 O; V for (int i=0;i<MAX_INVENTORY;i++): L, R o5 a1 s* r/ O9 _
{
: ~! [1 h0 c( q) M; v- y* \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ a* h0 s' P: n- i if (pItemElem)
6 D8 K W9 Q. F5 d {( U2 T/ I$ [7 v4 `: K
if (IsUsingItem(pItemElem))
) S: w6 K" P! |' W0 j1 e5 M/ ^, ? {7 w7 T; {2 Z! P9 ^
//这个位置无法放
9 ]: y P& ]6 O: Z nDestPos++;
+ f$ C3 j0 r6 ~ }/ e0 t1 e5 } D( ?8 p
}7 O s: v2 M0 u6 A6 p/ B" x, A }
BYTE nSrc = pInvSort->GetItemSrc(i);
) ~% T$ E2 {( a6 g- W7 V4 t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% G- G# {$ h! z9 S
if (pItemElem)( }$ z7 K8 }8 Q% ^
{- N9 I6 w% A6 O- F
if (IsUsingItem(pItemElem))& i3 y" J& J. F. u! G3 \$ K" l# F
{6 d) y: F. }: E
//这个道具无法移动,跳过
: W- N( N1 w3 C& c7 e% |' ]% o continue;
& n) A6 u* s/ @! c4 I" I }
4 E5 [0 h3 x" j# A }else{
8 t* j4 `, d! v8 b0 ^! ^" H //空位置 不用动3 f$ B0 O9 A# u. @1 Q7 n6 H+ L; ]. Y
continue;2 G" w4 {9 l; y4 C) V* V
}
b! r! N$ \1 N; C/ e //////////////////////////////////////////////////////////////////////////
, v6 V4 L1 D6 H# L. i* M //开始移动$ c6 L) T" ]' o9 \) s! F
if (nSrc == nDestPos)
( X. ~( ]# Y, G3 U2 u) o* @ {
1 x! {( A+ p. J9 v( l. c1 j //原地不动
+ [1 G( z3 y$ j nDestPos++;- y$ C( v& e: }& w
continue;5 f8 g4 b7 \: V8 G; W% E
}
- o) ^( f L2 n5 g3 w r3 P pInvSort->MoveItem(i,nDestPos);
& t" s. o: [# i8 { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 H D8 g/ M3 B Sleep(5);/ T1 Z* `4 Y- h/ U$ k: g
//Error("移动 - %d->%d",nSrc,nDestPos);5 a `6 w, @* q; n3 W& u
nDestPos++;* t' t `! s/ `2 b( e( Y* {
}
) }4 O* y4 {% H* w2 V //取第一个元素的信息( u* J* r6 r& `3 Z: O, k% ?2 |
/*
( K0 F# O9 @4 W, F( r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# z. Q, ~3 y/ l4 v0 k9 d: `" G {, Z0 ?; N( j8 L f* I. ^, ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' J& J# d' q7 L( v5 }1 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); g" {) H K; m' D6 k* ?' {
}- h! E- v9 w5 S6 ]- i# O
*/% R" j, j6 { Z, q. J- w
//////////////////////////////////////////////////////////////////////////$ n' J% Y( n3 }) C4 M) j
break;
9 d# ?+ F# p; k5 {7 { }
$ r; y+ M. w2 k4 \9 w2 b }
* a7 x/ W" t' m0 j% m}! J- y3 R' o9 E: T/ f* d3 @, z
m_wndMenu.SetVisible(FALSE);3 r' }) g4 m9 N+ `! s
# w# `9 F" ]: [1 K* @- u- W
--------------------------------------------------------------------------------------------------------1 e9 M& L9 O9 M6 s! V0 W0 ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 H0 ~( i" i0 _2 C4 }: _: e6 G+ f{ @2 ~, x, k4 j$ o" i
BaseMouseCursor();) d6 @3 i5 r5 H# R: k: `6 h6 b! f
}* x5 I: Y% ` T/ o6 w6 d9 X$ W
在其下添加:% m5 M+ s+ x7 B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 z, e a0 b8 m. H{& e* S. l# x0 Q2 x/ f: C1 @% }
m_wndMenu.DeleteAllMenu();6 N" R- I) W9 e1 j% w; J: ]3 T
m_wndMenu.CreateMenu(this);/ |. j% C/ @6 _( t% h6 j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); ~/ U# N) |/ K% z/ y3 S4 ?+ a
3 D( c% y) a( mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); K4 v9 }) ]- _2 ?# P% \! w+ i
{
0 P4 v& @$ S6 K. f; ^) T2 W //P以上级别才可以删除所有道具( h V* V+ x R! O' V3 j! o5 Q" Y i* {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 }- w- f1 f9 z( {}
+ U& Q& h& z) S! Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 F, r* _ @+ V& R# W- hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ e: ?4 y1 P" \
m_wndMenu.SetFocus();
% n0 m, r6 g N}
1 R; M3 p- s' w6 W( p4 K: y& Z------------------------------------------------------------------------------------------------------------ r7 P. y6 {0 H! `
************************** f( e8 z' ^. v2 O: _
WndField.h文件
3 ]& g( t2 Y& R. P*************************! o, _7 k5 J! o
搜索:BOOL m_bReport;
5 k# Q% q9 Y, e8 F& l( j) Y其后添加:
' [6 I; e5 X( G3 A" mCWndMenu m_wndMenu;% b& }# x$ u3 z e6 ^
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! Y; i. m$ ^; ~ W- o# `
其后添加:
2 D% c3 |6 {: j6 H9 x! {virtual void OnRButtonUp(UINT nFlags, CPoint point);
# ?% T7 d- ^ G. o* j7 l" ]# `& r+ D9 u
6 o( ]& b; Z0 p, } |
|