|
|
源文件中_Interface文件夹下WndField.cpp文件
7 D C6 n" o4 L: `% h I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 K/ X. l5 D9 H, b! E
7 t3 b+ K+ |8 _2 [struct sItem
2 i8 }1 C1 Y6 Q/ Z" x8 S ]{0 t( W3 h; K+ ~" I* {1 b6 t
DWORD dwId;
) Z3 W0 ~0 b& y7 SDWORD dwKind2;& o+ s7 Z, F: x9 t! @
DWORD dwItemId;3 E/ t4 d/ }; C
BYTE nIndex; \5 L- r; K$ f' B6 \" V8 l4 k
sItem(){4 I5 w |" B' Y/ |; f
dwId = dwKind2 = dwItemId = nIndex = 0;
: Q! a* C. b) k* y8 M}' H' \# ?5 v9 y& q5 ?4 x4 s; W% G5 y4 G
bool operator < (const sItem p2)# o0 J2 N+ E+ z3 S; `7 ~
{& F: C8 E- N: s8 d. Y
if (dwKind2 == p2.dwKind2)' H$ W0 c! y$ x6 O, U6 a
{
* W0 {5 b) B, E) ^ }0 U return dwItemId < p2.dwItemId;+ C# E" B9 e" _; G0 e- i; m* [5 w
}else{5 ~/ V- K1 M/ U, e
return dwKind2 < p2.dwKind2;4 w) E2 p+ v: a" t1 ?* C
}
4 y. o! m' S) H}
/ Z0 s, Q; v7 N$ Q0 c4 J};
8 o+ l; K. T0 y3 k; x; ~$ L3 B9 ~! Tclass CInventorySort& s ~1 y7 s2 R: j
{
) Z- c- G2 y& ]: \public:/ }- P% f. D7 s$ S" J- D
CInventorySort()
" O& k. L6 B2 M{
8 n0 G9 y% Z% i. i/ e. y) O m_dwPos = 0;6 Z8 ^' R0 t/ O1 p* E2 }2 K% ^
}+ ^$ [1 d0 F6 z- t! A5 n
~CInventorySort(){}' C& I) w) j5 J4 [
private:
$ {/ ?' z% t/ p" LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' [' G8 X. g: K" ~3 |DWORD m_dwPos;
+ f$ E. E& R7 Ppublic:
9 Y5 ]* d. r. Y: A5 p6 Hvoid Add(BYTE nIndex)2 L8 \ W5 S' g5 G% @, q8 N% g
{0 q6 u- E, u; X% E: C4 q
if (m_dwPos >= MAX_INVENTORY)' K1 j3 p+ s c3 V2 h
{! i8 B4 E# K6 v
return;
% f+ N8 \/ R$ `8 R* q% W }0 `- p {' q4 f0 a0 A- [
m_Item[m_dwPos].nIndex = nIndex;! v: v5 J& u) q
m_Item[m_dwPos].dwId = m_dwPos;) G* `8 g, ~5 v; d
m_dwPos++;8 J/ }& ~6 w0 E3 E' v
}. h% U$ z. _7 g/ U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 G: \/ u- Y3 f! {5 z{
/ C! V. \+ H# C T for (int i=0;i<MAX_INVENTORY;i++)
% t( s4 w) W7 x3 R {
; j: \: Y* H1 n {, R3 Z8 y' y if (m_Item.dwId == dwId)' |* _- Q }4 M5 G( i* [$ j
{
5 a+ \& K$ I. w return m_Item.nIndex;
. V1 o- _) U- A" C) s* R }
T6 n( Q( Z7 `9 i* J. ^: ^" K! D }- e% M( V& U5 i4 ?8 U; b
return 255;* i1 v) k8 V4 L& m$ I
}/ C/ Q: U0 T' y( t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 E; N, T n: m{
4 t, ~) }( Y* f+ k/ {3 J! }0 ]( _ BYTE nTmp = 0;7 o% ^; F8 t9 k: l, Q' y0 R# e
bool bDest = false,bSrc = false;; P1 I4 W7 E, H7 t
for (int i=0;i<MAX_INVENTORY;i++)
: w: @8 j9 N2 c# p1 n8 b {
4 d0 ^& U0 p, h \6 I8 R% ~( Q+ b if (dwSrcId == m_Item.dwId), r1 `0 ~. W' t% T4 j
{: j" h4 X2 O( q7 T k# Z" I
//id相等 则 改变对应的dest和src
( K9 T) T# e. z' d) J* J! {+ a nTmp = m_Item.nIndex;3 n# l8 A, L- Y1 P3 B' |
m_Item.nIndex = dest;
$ h9 T! n5 x, H4 |$ F$ Y }+ d8 q0 k+ E" J, V
}: n) E8 p) `: B6 r! F8 D5 x
//临时数据保存完毕,交换开始) D2 c0 X# J/ R& A) J, |9 m
for (int i=0;i<MAX_INVENTORY;i++); A/ D' [. V3 P5 _
{
8 p. g9 m8 @. [! c if (dest == m_Item.nIndex)* Q2 H9 Z3 x$ T$ a
{( F7 h$ |8 ?0 g, b
//id相等 则 改变对应的dest和src
3 J9 A/ [( K9 u2 b3 v m_Item.nIndex = nTmp;
/ Y. v0 S. g; z3 a/ B* Z }: E- [' K" l U# D+ t9 g/ N
}# I! y( h( W+ l8 E1 Z2 M. Z
}) _; I$ h* B, O
};$ _& x. L6 @; w# R. k: t2 C
-------------------------------------------------------------------------
& s" [& B* R( g1 V0 N, |0 t! \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 w" a( n" O/ u% c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ _6 i3 h- M9 s
紧靠其上添加:
4 W& I9 ^ @0 l. Z5 G! Vif( pWndBase == &m_wndMenu ), M) ]7 Z$ B0 t, \0 W/ g
{" ` m$ h' L, h
switch( nID )
+ m2 j, a l# u$ k1 |* B {
7 u; {- O1 d$ q case 2:' e) G4 U4 Z& @+ K6 o
{) s0 l/ p( A$ @! ]& {2 r' D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ B6 y: b/ R7 g6 z7 t; i( d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' W6 C6 v. l$ g( ~
{/ `# d) {3 t# F) a
break;
% k/ |# Y# @ F7 O: y }& U! ^" h% |3 Z+ z5 R6 v m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, ]# u1 F" b5 @! V- ~1 J0 r {
" P* d; J/ B+ e/ R6 p1 x8 z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ b7 o- w6 a I; c" F9 G
if( !pItemElem )
" F5 r5 x2 @# ^8 q0 @ continue;7 d4 [: S4 t/ X( ]- k% ~
if(pItemElem->GetExtra() > 0)
! Z# X( s. U+ `6 a continue;
! X8 Z2 D9 }9 e+ r8 W" s$ V# h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. u1 {, U' W) Q2 e continue;
: ?$ e- e8 L U" u, P if( g_pPlayer->IsUsing( pItemElem ) ): s6 H( T, |+ T) C5 y6 s( y
continue; ~4 Y2 G3 r" x$ d
if( pItemElem->IsUndestructable() == TRUE )0 A1 a* K9 {* e5 V- O
{
; ^/ H1 w% k9 F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ?3 t& {) y5 x2 W continue;! O. t& Y5 i: p0 {8 Z0 i5 z, Q1 X
}
7 X. L$ u6 @+ ] ] X* r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 M* Q6 G1 R5 f$ C8 N9 c
}
+ }" w) m& }4 ^# Z! ]0 |* g break;
3 O( S1 x' r) X7 B }: Q, U; a; a& U: d* J. Q6 _
case 1:
/ g" C; J1 L# W6 q7 O9 V {8 Z$ ^* m0 s2 o
//整理背包
7 d$ F4 ^9 n) z3 m, n //////////////////////////////////////////////////////////////////////////
2 x1 }- Q: r& j8 ^1 Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% Z& D& m. \" L
//////////////////////////////////////////////////////////////////////////9 J% o6 e8 y5 B
//////////////////////////////////////////////////////////////////////////) h0 P. n2 a( |/ ]$ \
CInventorySort* pInvSort = new CInventorySort;8 H1 a B, n. }0 B$ \ E7 o
vector <sItem> vItem;
2 g+ t' ^9 A' Y% i& x4 P7 [" [1 m vItem.resize(MAX_INVENTORY);//初始化大小0 e6 L, t4 R$ x/ e/ n$ y
//////////////////////////////////////////////////////////////////////////5 G4 {! v. A- Z& l- ~) ^& k
//填充数据
) ~1 T& S3 W, x for (int i=0;i<MAX_INVENTORY;i++)
: y7 Z4 ]0 }! y {
( ~! r% L* Z% _6 N( p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 S1 l/ r; M. d6 P6 B! E
if (!pItemElem)
& w# `8 @( z$ F. b6 F. v; m {
% c" C# F* c& q" G% [# z2 B( Z, L2 Z vItem.dwKind2 = 0xffffffff;! T+ P' ^' x* F/ B8 n
vItem.dwItemId = 0xffffffff;+ @: n |) ~) s# M7 h+ Y
vItem.nIndex = i;
# i: k- Z3 H6 y7 a }else {. X7 Z0 D9 ?# E7 P
ItemProp* pProp = pItemElem->GetProp();" g- s( c. P6 k4 n
vItem.dwKind2 = pProp->dwItemKind2;
8 K0 U% s( `; \' a; {* l9 ~1 d vItem.dwItemId = pItemElem->m_dwItemId;. h+ r! |3 m3 j. _- H. A* z
vItem.nIndex = i;
# [# u2 U$ J1 F' F2 {- X }
9 o1 u0 H% P4 ]5 k% A+ E# y/ K //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. a0 S, `4 r: P
}) [5 t+ ]3 D# l0 p7 A9 _' x. `
//////////////////////////////////////////////////////////////////////////
4 X# `8 j, h. S+ R sort(vItem.begin(),vItem.end());//排序' Z: w+ A) w5 A, N' b
//////////////////////////////////////////////////////////////////////////0 h T1 F+ s5 Q# J6 [' X! O
//交换
+ [# ^" I" h! O/ ]5 c for (size_t i=0;i<vItem.size();i++)# {8 z8 z2 |* x5 B7 X a
{
, q4 X* {& W% u2 y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# z$ A4 Q' X* g1 G
pInvSort->Add(vItem.nIndex);
/ }& n7 V; o& n6 K! E }
9 l0 g) |2 \9 v' i; O* u BYTE nDestPos = 0;
. W2 n$ ~& `' N L% x for (int i=0;i<MAX_INVENTORY;i++): V$ I$ M3 t1 u7 B) ~" O# s
{' P p0 _8 F/ i( l! ~. A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* ]0 [" [& V- r# W4 p, v if (pItemElem)
% [7 ?3 ^. @& o3 ^) ?- ` {* `* i! z/ _ I
if (IsUsingItem(pItemElem))) W3 p& P0 n. r/ j+ d
{6 J* `1 P3 X I8 u7 t9 n9 m
//这个位置无法放, p6 }& ?, S3 i6 J% P8 c8 S
nDestPos++;7 ~' l( F" Z& K
}
! W' c# O) Z- q9 V% W }$ e( @6 r' Y( I! @
BYTE nSrc = pInvSort->GetItemSrc(i);! v5 i" |5 |( L6 t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, E4 g2 ]5 k# \2 @: i7 N if (pItemElem)
* H# Q9 ?( f0 n" b% J9 z# ^ {* E* {. Q/ f8 ~5 S
if (IsUsingItem(pItemElem))1 ?/ ^* m' ~& z& ?# @) H
{
' J" Y2 O$ }) Q: M4 }9 H k //这个道具无法移动,跳过1 P) O6 Q1 a+ i5 K
continue;6 A( B) K, a; _8 |) A- M
}( n( _3 t+ h- @' v4 Y( [) d2 o( w4 ]- Y
}else{
9 N: \8 r8 L# `- b //空位置 不用动
$ R ?/ W( I6 s1 R0 w; f. H1 b) G continue;
" Q9 |/ |3 o. I }
0 G; o9 u; E9 G- \: F9 O! P6 L4 [ //////////////////////////////////////////////////////////////////////////
2 q( ^! o/ F, r Y) S //开始移动2 i9 m# M/ N3 A5 e
if (nSrc == nDestPos)
3 x* U4 D6 c2 I; A- s' O {
5 P( Z( n6 k( P c6 J0 t //原地不动, }. ?- }5 I- K0 o, [/ C: E
nDestPos++;4 i B, w3 S, C
continue;
& i# x! K$ H+ H. z# q }+ T# z* N2 J+ S2 p6 S
pInvSort->MoveItem(i,nDestPos);
8 p6 r% k% X! F& p4 ~# I | g_DPlay.SendMoveItem(0,nSrc,nDestPos);' T( ?. B7 e, ~
Sleep(5);
1 g8 K) f2 w0 k. E% x //Error("移动 - %d->%d",nSrc,nDestPos);, r) {; x. ?* @- P! Y/ O$ Y
nDestPos++;- R3 f/ o' \ S# R
}
/ k! l4 d5 M& I6 C, \ //取第一个元素的信息0 J4 c4 p. e" a
/*
/ }# e: M0 L0 Q9 s g4 S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), f' P; ^; g% m* x; T8 i
{
% B8 Y# r1 t! M- A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; b8 e! i$ Q W- y5 D4 [- K9 Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 a5 I V6 Q( a; |4 V& o7 N; b
}1 Y. t7 T2 Q! L1 E) ^/ H) B
*/
2 u \( \! p6 w$ c3 c# h$ A0 ` //////////////////////////////////////////////////////////////////////////
H* a A- ^; f/ y# G3 @! | break;+ [: f' c* h/ j" @
}/ q7 ^ _; a) a. @0 d, a
} $ O& m3 N) u4 n
}0 q' C$ v1 |7 i' z5 `+ e: X
m_wndMenu.SetVisible(FALSE);
3 x, x) K" i0 [2 c1 T2 @- r) S
$ S, O. _6 W. {) v3 d--------------------------------------------------------------------------------------------------------/ a Z' v7 q: t% i" D# L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 R1 o1 y W0 K{
$ g# S; m$ F" W1 @- d' N; BBaseMouseCursor();
0 W( v; w4 t, @, H7 p}# W: s$ d9 _1 v4 }' s1 o
在其下添加:; a2 D. z' d3 z8 s8 K+ ?* B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 W& J$ v/ @, ]8 q' N! ^- V{
( v# _: \, S0 d; e9 s( f8 ?m_wndMenu.DeleteAllMenu();
* n) l3 e, G6 f; Km_wndMenu.CreateMenu(this);
; [! w2 {' k2 x7 j1 p0 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. W1 [ M2 b/ j, F* v. z8 `
) R9 c) G# V* S$ \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ Q3 r% n6 n1 B( ?! r
{# y7 |6 \. U( k+ [
//P以上级别才可以删除所有道具. P$ P# B, t$ l/ Q' ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, o4 J' W3 S! w1 q
}
; J$ o2 O, q4 Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ g& l. O$ T* L$ S3 o* s- u- s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' Q# j2 l5 d7 Bm_wndMenu.SetFocus();$ F, D+ d8 v2 e& c( n
}" T) I% t4 _) q- v3 \& }$ U
------------------------------------------------------------------------------------------------------------) z7 e, }% h3 {
*************************
8 O1 n: c% G d+ nWndField.h文件% x) Y! k3 u( H1 c6 A* [
************************* O. \" _! k0 [( A
搜索:BOOL m_bReport;$ ^. X, L3 p& e' i) q% Q# S$ t6 M
其后添加:
* X$ ~# a4 Z9 ?6 X) }8 q) j/ ^CWndMenu m_wndMenu;
6 ~& Y! N8 F) r# a* U; O$ }2 n1 Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. ^' p% @" C9 D* p2 V
其后添加:; k5 A/ q3 E& g& d9 \
virtual void OnRButtonUp(UINT nFlags, CPoint point);; J& u1 m$ H4 y/ s; t, Q% r$ x
9 h' y, o, `( i( Y$ A3 ~* Q3 f* C- o% G8 ~: e
|
|