|
|
源文件中_Interface文件夹下WndField.cpp文件; f0 t& v4 x! W: i" C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 h( c. P, s# c2 r9 u" `
+ u$ ^+ |3 |& K: K; T% M/ r; s2 h- [: [struct sItem
4 H" A S* r& n% k{
3 w8 K) R9 Z9 B. ]2 t+ NDWORD dwId;5 Z; p N( O, W' ~/ \7 F9 s
DWORD dwKind2;
( ?* d* K+ y. v7 m/ z; gDWORD dwItemId;9 [/ Z. Y) H' J# n) P' i* O' x
BYTE nIndex;- e# x6 r; ]; K: M$ d
sItem(){
5 s% l* Q! [5 `! N2 _ dwId = dwKind2 = dwItemId = nIndex = 0;% Y; T% w) b7 m- t9 Z9 J
}
5 z, v9 @' L% m. lbool operator < (const sItem p2)+ U8 E0 m6 `$ W: o0 \. b
{3 l, I d+ X( [7 F ~
if (dwKind2 == p2.dwKind2)
5 C. {6 g7 q. R9 ~ {7 M& B v; K/ Y* B1 Y; c
return dwItemId < p2.dwItemId;8 U" Q( F# S: X- L* b% g9 L
}else{
: I3 j/ W0 A/ E. Q) t+ g return dwKind2 < p2.dwKind2;
( B0 J _$ }' `" ?7 p }
4 c* h. W$ {; z' V, P$ f$ o}& y0 ? b4 F5 [$ B$ J
};+ J+ ?6 g" `; w* L, M& w8 A
class CInventorySort; V) B/ N7 U$ r8 J7 h- U/ j7 \
{
- Q7 F" }& k/ r/ Z* vpublic:
3 C, V0 z9 c8 \/ N8 ^7 S/ G) pCInventorySort()* P( Z3 A4 X. ]# J% e. y* M: c
{6 c. g/ M$ N% ~; Z3 T! t1 A5 O. C
m_dwPos = 0;/ Z8 |( y" d8 \2 T1 O A9 B
}
$ K" d' Q0 @4 D" f z~CInventorySort(){}: G# \ |2 y# `' P: v6 b5 \' Z
private:
" t8 B0 ?. h+ a4 }1 R2 ?# X, v. P; U. ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 z1 r+ a3 {7 i @DWORD m_dwPos;
- s" _% m: z( ~6 X8 U! O2 }5 U% A/ @public:
( P* y( q- `9 \/ gvoid Add(BYTE nIndex)
1 B' x: ~' h2 s& H. @# H3 f5 Q{
$ c3 B( s, y+ L! q if (m_dwPos >= MAX_INVENTORY)5 @' u, F! j5 ?0 Z
{8 H% M: F( D, {8 i/ W& g
return;1 c+ ]+ l4 Y8 i. M) o
}
1 f3 o1 `/ g5 t: v' c+ ^3 u m_Item[m_dwPos].nIndex = nIndex;4 A% X( o6 r- |1 S; ]8 \
m_Item[m_dwPos].dwId = m_dwPos;
* J, e8 p: D; h8 [ m_dwPos++;
8 h6 y8 O. u5 P2 U, b7 Z7 ]}3 K" x% S4 M' t6 p' t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! @3 J; X' ~6 P! R! u e
{' Q) Z! v: x) U7 `! G; b' D4 }4 K+ ^
for (int i=0;i<MAX_INVENTORY;i++)9 m8 f. M+ y0 N ^- N k
{
6 w& m' z# r' @ if (m_Item.dwId == dwId)
$ j7 V2 S$ J3 _/ W3 j# u& x4 F {
6 v u2 o) W$ m7 R$ x& \. g return m_Item.nIndex;) I6 ~2 Y2 _& X# j
}3 X9 |/ Q" r. a9 U3 ^* r# d
}8 y3 O$ X$ x& D4 [4 j M
return 255;& w9 P$ Z, J$ f4 }! g
}
% _6 E9 k+ @8 S. U5 S/ G3 hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) _) {! o, c3 v1 x8 a; E
{/ q; D1 h2 }# u. m `
BYTE nTmp = 0;
) P! H1 g( Z4 Y7 o! P bool bDest = false,bSrc = false;1 \+ F6 e& n' W/ x. s: m! q3 Q
for (int i=0;i<MAX_INVENTORY;i++)+ _* Y1 k0 y9 }* u- {9 N: ]' l
{
W5 j I5 @3 g0 y6 U if (dwSrcId == m_Item.dwId)9 m+ k$ M5 D3 r. H
{/ [& V. {: D/ b
//id相等 则 改变对应的dest和src/ S3 V0 K* w% k4 j6 Z1 U. ]& b
nTmp = m_Item.nIndex;
- a3 P* \4 F% [* S. b m_Item.nIndex = dest;
, Y U/ \% E; b- M! f4 T5 w }# G) a+ M' t2 P! D
}
* p* @7 z# i+ l! f& \- z //临时数据保存完毕,交换开始
) V, H- o# r! d4 j2 _6 _ for (int i=0;i<MAX_INVENTORY;i++)
/ @4 [$ U% v: M, D8 x0 |: U* Y {
; X+ [9 o8 T1 `3 T3 e if (dest == m_Item.nIndex); X) O+ N: |2 ?
{ Q1 ~+ u3 j, ^* {. f1 \
//id相等 则 改变对应的dest和src$ i3 Z8 F( d8 M7 J. ~
m_Item.nIndex = nTmp;! U2 o! C, m8 j0 k) V$ H
}) G7 s$ j+ i3 M- H
}
4 m. J& \9 C; _. G}5 y1 W7 H) Z. c, D) r8 N7 }
};9 t+ N ^# l) j3 W; O! g8 U5 \
-------------------------------------------------------------------------
9 [1 n- n6 x1 `/ ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ {1 g# ]% a4 O* I搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 a% O) o. L# O4 Z
紧靠其上添加:6 p% V, s; E1 u+ R8 C- R
if( pWndBase == &m_wndMenu )
" ~* Z/ \! ]/ [' f{7 P' S1 v- M) F; x6 v9 a
switch( nID )
7 p9 J+ s2 C( l0 \! N" ` { H$ u( n, W" ^; `/ E6 p
case 2:
5 X6 m% F9 E3 c5 U2 }5 k* D; V {- i. z/ D: U6 z8 j: `' n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ D9 \$ l; D; `1 P' ]7 ~$ ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ g7 F4 C: W; u6 v
{
- E; W1 N2 p& O. Y/ ? break;
0 ? B+ Y6 `7 b+ D$ O6 o' P" D }
- O2 a5 L3 g' K% c W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 m- ]* G4 }4 ?& e; h8 B# g6 i% m {
# j+ {! J. k2 w6 R5 c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 i8 I" O. Y. R2 ]8 i if( !pItemElem )
+ R+ e+ B, L2 }7 U+ ^5 L continue;
# B6 d& E; u! R if(pItemElem->GetExtra() > 0)3 [2 c) b1 M* M! g# [' z% W
continue;9 A) `- j$ o3 u1 G8 L7 I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 g! S7 e$ b$ |: ^7 l1 s& W: B% V, u% Q continue;
6 I+ L0 j2 j6 D, e* d if( g_pPlayer->IsUsing( pItemElem ) )
( a9 B+ |! S' y( o- i% ` continue;8 }$ B3 l; P% f7 p; F
if( pItemElem->IsUndestructable() == TRUE )7 p8 H3 m6 T" \. v7 \! Y
{" D/ w+ u5 p' z9 N) P( j, G0 O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. {" v% V* ?$ t% v( K* H4 e continue;: ^3 {& o# i5 h
}8 ]( [ o6 q. G; c7 Y/ Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 P) J3 C, z- w& V
}8 g. p. w; Y% R: \4 f j
break;" |1 P! a% e! v* ]( L3 i" g+ E
}
x1 N4 _" U* C' Q7 x# j- w8 k5 r case 1:
" h: l7 B$ q% K+ @ e {$ g' F4 Q6 s3 O: D i; h2 L2 n! q: `
//整理背包
5 V# T @& n# E0 T( x* j G4 U8 b //////////////////////////////////////////////////////////////////////////
& i: L0 |5 T" x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& ]8 G) Q0 N* D0 v4 b
//////////////////////////////////////////////////////////////////////////
, \# }' M$ Z2 f$ U //////////////////////////////////////////////////////////////////////////& Q5 I1 E8 u+ J8 u
CInventorySort* pInvSort = new CInventorySort;
# N; h! S. S/ v9 C vector <sItem> vItem;) S& E, h/ Z9 c7 h3 p
vItem.resize(MAX_INVENTORY);//初始化大小# _! s. f3 o: B) K9 c I
//////////////////////////////////////////////////////////////////////////
* z* a! Z9 y/ I7 T, A //填充数据3 g* ?$ A( U9 ?4 Y8 h
for (int i=0;i<MAX_INVENTORY;i++)! v- G0 A8 z& q* i# }
{
& G* f7 S1 @$ Q8 o6 m; D8 s' ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) x1 J, E" ]! G+ k8 e if (!pItemElem)$ f9 U' Z. k4 X; {4 g9 y8 m9 y
{
3 L6 u( l! p6 O2 Q' h) m vItem.dwKind2 = 0xffffffff;- D& g* [$ o3 B# X" f: e
vItem.dwItemId = 0xffffffff;
# w! u' F0 _ Z vItem.nIndex = i;3 G. E9 `9 Q9 T& J/ s) \, Q
}else {+ O& I7 f Q' \# b X! D* V
ItemProp* pProp = pItemElem->GetProp();
4 _, r; J; q- V4 M' @ vItem.dwKind2 = pProp->dwItemKind2;1 U; i6 f+ N/ W+ E- A. B8 d1 i
vItem.dwItemId = pItemElem->m_dwItemId;
$ b; H6 y/ U' l2 ~( B2 E vItem.nIndex = i;% S! v, }" t) k- h9 p
}
5 M! O6 T$ X! @9 h( ~2 K //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( t3 _8 N0 R8 R, C9 P) W$ l }
' }" Q- l- b5 v //////////////////////////////////////////////////////////////////////////, }& h" r& [" w
sort(vItem.begin(),vItem.end());//排序3 k" f; P4 J" B/ \* L1 l, }% |
//////////////////////////////////////////////////////////////////////////
6 ]3 |' b2 Y N- G0 F) Y. _ //交换
* C; X w8 N% D* d* m& G3 B( I7 P% j for (size_t i=0;i<vItem.size();i++)
8 C# U2 X# a0 i* x8 N2 F8 O( N {0 h* L! Q/ n2 X+ z$ c8 @
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 p9 h: e. [0 Y; e- h
pInvSort->Add(vItem.nIndex);
1 ^$ y7 G8 H( p6 t6 q, w! n }3 }) e$ o: c9 e4 k9 u7 ~% s+ p# p
BYTE nDestPos = 0;
$ j2 c- }8 x0 T7 g for (int i=0;i<MAX_INVENTORY;i++)/ h7 M& {: M( f0 s) @+ ^% O- t
{0 T) E0 ]$ G W; U2 R7 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, f8 E5 L# [/ z: Y% K- ?1 q( _ if (pItemElem)& J3 t7 N4 Z' a3 ]! C# E' T
{/ I: S. X/ L& `& J' P) m
if (IsUsingItem(pItemElem))
. _$ @' M) P4 a: ^3 J0 h {
0 k' u8 ?% }, M. F( x //这个位置无法放2 A6 ?# F- ?; s) ]
nDestPos++;
3 \2 n8 D7 G: B8 v# T4 u( x9 ?# R& [ }
1 V& _- D" @9 h1 d- K: [( { }
5 f7 g, M+ ]4 D BYTE nSrc = pInvSort->GetItemSrc(i);
* E# o% n% r4 w6 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; ^. K4 W2 N. S( L! S
if (pItemElem)2 K: w1 D4 `/ B. I
{& V4 a* L6 w. Q. T- b/ N8 p
if (IsUsingItem(pItemElem))5 @1 a# h3 J% k* a c, K8 O+ n; n4 \
{
4 M% Z6 F- F) ^% g //这个道具无法移动,跳过3 B2 |, }0 b# j+ H/ B
continue;
& B3 a. o+ N4 i' `. J; I, F }
# g7 a+ f* t6 n }else{
. |- Z9 v) F [* U //空位置 不用动
: ~1 ~8 E3 {5 x1 D$ y+ G% ?4 ~* e continue;
0 k: I# T7 T8 X8 D9 u# M: r3 Y }2 l+ x; R# g1 C
//////////////////////////////////////////////////////////////////////////
" W. b# n7 Q/ g( h3 \& D //开始移动
2 t7 j2 G8 j+ m if (nSrc == nDestPos)0 v, e% Y% R' H5 O
{1 ~: T; I+ I5 @6 U3 A
//原地不动
% W7 G8 p, z) S- L& D nDestPos++;
; n- _+ f$ h* y3 e continue;
; q0 B" Q# \- L$ ^' D8 C+ S, Q }
8 [/ u% s0 H: A& z: Z5 Q, m pInvSort->MoveItem(i,nDestPos);
5 ~, g' U! W# l9 E% B g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" ^% J6 @' s; t Sleep(5);
! [+ f t! G$ t' y4 |# Z //Error("移动 - %d->%d",nSrc,nDestPos);
; ^' U' [( T7 Q* }+ b nDestPos++;! O$ ]) M' v0 T; h
}- ?) J$ \# H9 ~! @1 h" A' D f
//取第一个元素的信息
+ N% K8 W0 W" b4 j* x /*
! W/ w3 O# T( I2 ?- O if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 q7 i4 T9 b( H; H! Z {
3 K, s, y6 @0 V8 J' L" s8 N# F" o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 R3 {9 r9 Q v J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; X& H- b3 w: @" S: d7 X }: K$ }/ u) | U( S2 C
*/
" @0 T$ |5 v' M; M" M' | //////////////////////////////////////////////////////////////////////////* D! @1 u3 o$ u% f
break;, P9 ?) C/ Q! d+ T" U$ R
}
$ a1 g+ Z$ G0 z, k: U } / G0 ~7 \) k! q* z9 I6 \
}3 N/ m, k$ f. F) y7 z
m_wndMenu.SetVisible(FALSE);
) h1 m. e" D. m
( }2 \: y9 E1 h# X( `( \--------------------------------------------------------------------------------------------------------! Y* y7 Q4 a7 ]7 X+ Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 U' P3 Y: m4 t. k J
{- D1 Y% u4 T, z. c+ @. o
BaseMouseCursor();1 d4 M' I2 d a2 h) B$ }
}
- O$ N8 v; ^5 b- p4 h在其下添加:
! }0 l* U% l3 Q) dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! U; N& F9 F5 B{
$ n- a3 C% w( {4 n# E6 V. C) E7 l3 g) Jm_wndMenu.DeleteAllMenu();1 K3 G9 I; \7 \& u9 q
m_wndMenu.CreateMenu(this);4 c" D6 P5 S* U" B; W% K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 n. D' Y: x; m
0 _6 }: a5 {/ U& G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& J& i* Y. ~6 x" }4 c; j/ L. y% P{" U: L- |# O2 ?# G- A
//P以上级别才可以删除所有道具) _# M) ?9 E# {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 r# U* t4 D/ E2 @3 a7 D* X
}* a0 Z4 |" g: a! S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) z9 M; e; O j! { a$ @& e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: H$ R; x4 q1 P1 { F% W( x) R7 E
m_wndMenu.SetFocus();( y* k7 K }6 R3 w) O
}/ u0 }% g# \ C. j$ ~& G, `
------------------------------------------------------------------------------------------------------------
& R- T$ H3 @. u$ v7 `*************************
; Y) _: B0 U" Q P% KWndField.h文件% `0 c9 s+ V- U! u, D \* H
*************************, H1 d" T; x# h; r& ?1 k
搜索:BOOL m_bReport;
- U R$ ^) _; u其后添加:6 b/ I/ a5 e% P
CWndMenu m_wndMenu;
) B8 h) p$ s$ v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( s0 H* G8 w( ?8 x6 k: n
其后添加:$ F0 m9 W1 ]# P6 u0 D; W
virtual void OnRButtonUp(UINT nFlags, CPoint point);; ^' T0 z# P$ s
) W+ |3 T Q' Y# }6 @
4 n" f5 _" V+ P9 ]; i1 e2 ^ |
|