|
|
源文件中_Interface文件夹下WndField.cpp文件
+ }: B$ y! i3 _2 D4 H7 ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 t7 k; c! K2 K, d3 _% A
}( a4 d% d8 j& wstruct sItem
9 C9 k$ \4 f! C) Y{
5 E1 W. ?* b7 t2 `- WDWORD dwId;
6 c2 A. h' m6 L7 h/ g O, LDWORD dwKind2;
! ^0 |& D! d5 }" b( jDWORD dwItemId;
3 c; k& V" i8 T' CBYTE nIndex;
6 A' N2 P" P, q; C+ {9 KsItem(){
% H& `2 [$ p! X$ ]; T dwId = dwKind2 = dwItemId = nIndex = 0;# _' t7 H+ ]9 }+ b" G" A- `
}. p1 _! T, l) E/ U* ]% l) o0 _
bool operator < (const sItem p2)
. [3 W5 t( ?0 \- a! F' F; w1 w$ _& }{- \/ b& r) U7 J7 o$ C$ D
if (dwKind2 == p2.dwKind2)5 y R4 ^2 O2 Q2 t2 s! \
{7 [# v7 S* X y
return dwItemId < p2.dwItemId;8 P/ M* z0 A2 H5 ~
}else{
* _, P+ {4 d* P6 c% e& R( G" V return dwKind2 < p2.dwKind2;
& c' P# Q7 y" c4 j }" a6 ?, ^; F, W
}! ]. d5 J+ ^ x9 c
};* y5 Q% H5 [: f8 {$ `0 \7 `2 X0 d; f
class CInventorySort5 V4 i4 Y1 V: z
{4 p e+ }5 \" P+ x- r/ V* ?* k: j
public:( P* e; {) f, G* J6 ~, s+ q$ g5 E$ Q- e
CInventorySort()
6 \: o! L+ h- ?0 @{
8 O# x; H/ j7 a, Z/ G/ o: z8 g# W m_dwPos = 0;
. }8 x* ?6 g. l+ `: N}
; L- A8 U+ G7 p' l~CInventorySort(){}
" k2 D4 x( P7 S' [$ T- ]private:
- S) c- W) d# F5 t$ PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 k% _$ m* ]( j$ TDWORD m_dwPos;
" M7 G4 t" U! E) _public:
' n Q6 u3 X6 H$ yvoid Add(BYTE nIndex)
6 [: F q7 v; `' {/ z- {) X4 J3 j{- Q4 O2 ?; R J; c* i+ L6 L" A
if (m_dwPos >= MAX_INVENTORY)* v# w2 ]. F9 W/ i# i. I ~0 n
{9 c0 e& s1 m2 l
return;" G" e J0 O3 c+ ~7 q
}) d0 h; u, }! w) s* s( F
m_Item[m_dwPos].nIndex = nIndex;' A# }+ |8 o/ M4 ~
m_Item[m_dwPos].dwId = m_dwPos;
h* `$ q% c1 t; [3 B m_dwPos++;
3 P$ W" A+ p K$ B}$ t% \1 Y! j8 M/ | i2 s. L( B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: H! s$ q2 O6 Q{
L: V5 P- `/ G for (int i=0;i<MAX_INVENTORY;i++)/ P& O" t1 A( ]) @5 \, E- Y
{5 P# ^5 L% e7 q. ~' k7 A+ {& f0 v
if (m_Item.dwId == dwId)
, C0 v c8 t0 z. u" v {
" a! p5 `. O8 _ return m_Item.nIndex;
5 e/ A& a7 S" L$ Q9 s }
$ ^ s; H& J: q9 }+ Z }
+ s$ M2 T8 V; o; u return 255;! t: ^6 Z7 M( u, `- |
}
* ]* k3 j2 t$ T {; C) D$ uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. j: W! O3 ~! Y
{
+ e- q% u# `0 o+ Z) E# ~ M BYTE nTmp = 0; {& [; a/ j/ w- Q2 @+ k
bool bDest = false,bSrc = false;( i" q; u: Z9 q
for (int i=0;i<MAX_INVENTORY;i++)
1 F# b: @2 g0 |# [ {
0 ]8 R0 }" D9 f8 t- I: |1 L if (dwSrcId == m_Item.dwId)" c& R4 ^) a8 W
{
# }! j$ s- h3 L0 Q1 J, s //id相等 则 改变对应的dest和src$ C# g4 O Z8 z4 e9 k, M1 s' H g
nTmp = m_Item.nIndex;
! z: U% w/ H- \) m$ _" C6 v2 Z; F m_Item.nIndex = dest;' {; ]8 y( B, a% g/ e, F5 N
}# b3 o/ a" `. A, Z) y. G
}! k0 B; ^1 X9 g5 H9 n
//临时数据保存完毕,交换开始
8 W( A; M: K% [ for (int i=0;i<MAX_INVENTORY;i++): G4 Z+ x6 v2 W. |! g) p3 ~
{5 F2 [+ J# B; B: a
if (dest == m_Item.nIndex)
3 f3 [( e2 a3 _) _/ f ? {; `1 I% G) {) m
//id相等 则 改变对应的dest和src: b, w, t1 j' U- n9 V# [9 f( d2 E3 O
m_Item.nIndex = nTmp;
$ E* A% ^* j0 _# l$ Q) a }- V+ z1 m5 e& g
}
! [1 w% @; i1 n}) s* R1 p( [7 y) H8 u( G; D) B
};6 r7 ~+ |" t9 V$ K
-------------------------------------------------------------------------
: n/ k; V& e6 G: H/ X6 I8 M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" X' D% S- q& |, I# W* Q& m9 {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( m0 |- i X$ }+ `) n, {( z紧靠其上添加:
, j n$ s; z( u' _) Qif( pWndBase == &m_wndMenu )
) m+ f% ?* F/ G{
8 Q; f0 f) m$ @0 t$ p! `6 {6 V2 M. `- h switch( nID )( g9 e! D3 O0 Y) p2 X
{
2 p6 ]5 Z- x0 P% l/ j8 O case 2:
. J i; k/ `, `. u0 U% j {
* p; Z- `0 k+ {8 o& v/ ^$ D/ x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 Y' b$ m' X t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) ]( b$ {4 w8 S$ r2 |. Q3 J
{
3 i- J/ X( g" x7 y. |& f3 g break;! u* `" p( b( t- D# `, F
}
, g5 [# v/ |9 Q& U6 b" t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' I3 z: c8 I9 N( l0 l h4 U
{. z3 A) }; b( I- E A, W( M+ G% u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& b- \$ [& X! Q0 J
if( !pItemElem )
1 U8 W4 j1 M3 M1 f6 n: j( J+ \ continue;8 i; e% P4 N7 Z5 L; c, J A' I' x( ]
if(pItemElem->GetExtra() > 0)# n7 h; |+ G" V c
continue;
9 ]' \( z' s6 q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + w* g6 C2 V, q2 r
continue;0 \, p* u7 |/ C
if( g_pPlayer->IsUsing( pItemElem ) ), e. M) F3 m1 c3 A! ]- [
continue;
& V5 }+ P" Y* m: ^ if( pItemElem->IsUndestructable() == TRUE )
/ j+ {, w {, l {
7 q# u$ v- E5 f+ S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ R4 n# l9 j: N! U- Y% Q
continue;8 c1 Z" X6 d O' c! a& ^* ]; o
}
( L) O g7 J# g0 r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% T5 G, q' J2 t" I! }
}- n2 @2 C8 }# g2 V5 |
break;( y9 n' j" C* ]4 n& [
}+ g. u6 t% @$ |( G3 F X
case 1:& H( {5 ~0 l# l7 V: K$ t3 r1 f
{8 ?2 ~' b K5 s+ i5 @% ?
//整理背包7 g" t H$ F t% ^# e' E
//////////////////////////////////////////////////////////////////////////' F" M0 X; J9 t, r$ Y1 Q; E
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- p6 T; O) g6 D- }! N //////////////////////////////////////////////////////////////////////////
8 V' z/ ^& l) `0 {4 F, u- ] //////////////////////////////////////////////////////////////////////////& c$ B2 j3 g. `9 O- u% \1 Y& N
CInventorySort* pInvSort = new CInventorySort;) B8 a/ z/ n. N' v5 |. l$ l1 I
vector <sItem> vItem;
l6 j8 Q4 a: |2 P, X vItem.resize(MAX_INVENTORY);//初始化大小. \* J, K' A' S
//////////////////////////////////////////////////////////////////////////
/ K/ [7 H8 c9 p5 ?0 G //填充数据
9 k4 g y7 D3 n. @" Z$ J' | for (int i=0;i<MAX_INVENTORY;i++)
4 y4 ]5 _+ x/ o5 }5 k r" U {
* s5 J; l/ K: v4 o0 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% ]; T. U. a6 r$ M2 o
if (!pItemElem)
/ k$ q" X" M8 p3 ^9 l, J {2 R8 I/ K/ g2 e* P- t2 ~4 z
vItem.dwKind2 = 0xffffffff;
: P! k% E1 W4 F3 U5 ~ vItem.dwItemId = 0xffffffff;5 X: d" v# m! P0 B
vItem.nIndex = i;$ n ]; r. W0 O& a: Y
}else {, N2 h8 q/ T6 z9 n
ItemProp* pProp = pItemElem->GetProp();
" L) W/ k) D( Z3 E2 E vItem.dwKind2 = pProp->dwItemKind2;
) `; S/ j! [/ z5 ` vItem.dwItemId = pItemElem->m_dwItemId;% T9 Z( P$ |& Y, Y6 T3 X
vItem.nIndex = i;7 S* _4 V! _$ |# I* Z8 p/ c- T
}; [' Z M4 |: r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& F7 g# M; F, l, j* c* d
}7 E' d4 T7 I8 E
//////////////////////////////////////////////////////////////////////////
+ y6 \8 j, ~6 Y1 g! Z' W sort(vItem.begin(),vItem.end());//排序
* I" s& `5 ?# l: D" [ //////////////////////////////////////////////////////////////////////////
1 ?1 Y: |# ]% Z$ \& ?0 Z# G @+ O4 ` //交换
+ r. x; u" p; y& M# H for (size_t i=0;i<vItem.size();i++)# @: }2 c$ M/ S9 j
{
S, Y- R" W* X0 R/ R1 t //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ c2 j& D. m" m. G' k2 [* S, r pInvSort->Add(vItem.nIndex);- u( K, e& G$ K& |* V5 o) b
}
) \6 F) U6 {) h. l( z* o2 O% j BYTE nDestPos = 0;
2 y* ^" L! ^# B, V- @! C for (int i=0;i<MAX_INVENTORY;i++)
& d7 S' v( p: P! x {0 _! q1 B- m7 T* e& E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
j. N# ~" \# | if (pItemElem)4 M, X0 R# l8 X& R" @. l
{5 \5 I4 K. C, t3 C( _+ z& j+ ^9 J; N
if (IsUsingItem(pItemElem))
}' ]" S' I/ l8 V {
- P0 ]$ H: k {1 P5 N5 P8 O //这个位置无法放. t+ ~0 J# u5 l2 e6 O
nDestPos++;
, w0 o& E' b2 A }: A4 \& o4 L2 f$ A0 z) z* o& n
}
# [1 S9 J3 Q( Z1 l3 [ BYTE nSrc = pInvSort->GetItemSrc(i);- R- ?0 {% X7 J3 o, |; M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! R2 W, X. l% h, |2 I" a3 a" U if (pItemElem)
: r" T4 [) r* P8 u7 n" A {. x, m+ i" m3 j9 \
if (IsUsingItem(pItemElem))8 }% K$ T+ U+ D
{ X$ b3 N7 ^3 c o
//这个道具无法移动,跳过4 {9 C- K; X7 r( }% p
continue;3 N A' T7 h: R9 O
}# s4 _7 g r: H9 ^. X
}else{! M: _( J* X; ~1 U6 b4 q
//空位置 不用动9 b+ X& D, Q7 Q0 n: H0 O
continue;. J2 f( w, Z2 F5 t* r2 a( P
}! q5 O/ m+ y n1 ]8 D; z6 A
//////////////////////////////////////////////////////////////////////////
3 ?2 G6 `. p+ z% S //开始移动+ d4 l( ~) I1 D, w1 z
if (nSrc == nDestPos)5 I6 O7 {; R" t0 X% Q1 P1 [0 R
{
- w$ W% r8 g0 p. ~ G& V5 C //原地不动! j8 m7 ^8 u* U8 ?+ E( z- E1 y
nDestPos++;
* d) D+ c! K; U" u continue;8 f) P, n1 L5 p+ F2 g* [$ Y
}
. a0 O& n3 Z1 ^" B4 f pInvSort->MoveItem(i,nDestPos);# F, s/ {2 M s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* n, M/ f: R" u/ U" |* R4 N
Sleep(5);3 u6 L) n: f, j, q3 F0 B: L
//Error("移动 - %d->%d",nSrc,nDestPos);" C. o" b/ j/ p' o* J
nDestPos++;+ o. \! ~/ i4 Q9 E( F
}
7 X( F# X6 f5 Y5 b- I9 b, T' G //取第一个元素的信息2 B* X8 o. Y: D' b
/*! F3 E1 I; G% U, q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) b0 ^1 b8 j5 Z5 E, n" V2 i# i$ @
{
, b3 @( U, B/ Q0 j4 \% F4 u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 t* K6 m2 t$ y5 @& B
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 E' d2 G/ l5 D$ `& ?$ K+ m' V
}
3 w! x' S- }5 i- Z C- ~/ \ */* m3 J" c5 x0 c# L- c* o2 I. O
//////////////////////////////////////////////////////////////////////////
( I; X/ Z/ P, v break;3 @ H- G6 c3 g. |2 T
}* L; V* A- b3 H5 @
}
: I* c2 I6 K: h6 U}
3 i# Z" r8 i5 Z9 e( N2 om_wndMenu.SetVisible(FALSE); f) c$ t) }' S, P9 n2 I6 `$ q
' Q. ]: V0 P8 I) k1 l--------------------------------------------------------------------------------------------------------
+ m% o' m$ b9 E1 m6 c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! f2 Z/ k5 n+ i8 _6 G{' r4 q& L/ j9 s+ b y' J
BaseMouseCursor();
* z. U3 H5 q* a}
9 U( E' Q# D' Z. M在其下添加:
: M0 K: f* N1 l H, J4 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& n! r4 j4 h8 K# z& H{
+ g! r& d* h3 E6 d/ n9 Jm_wndMenu.DeleteAllMenu();4 O5 y1 T, B: ^1 H" f/ T" ^5 T! A
m_wndMenu.CreateMenu(this);0 x8 A2 f' f$ F1 r3 E: S# a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: j" a/ F0 k' I @
7 s% i1 ~7 j# a6 aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* E+ R# L/ q2 D- k
{
; X7 I% k$ M1 \+ l( w //P以上级别才可以删除所有道具- e5 Q7 M9 M3 G7 ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; X7 R" A+ R( V" P% o! M}
5 p. t7 x7 T7 [) ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" ~! [& A1 J* p& N1 o7 D; ?0 h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 U7 I/ S; E( A& Y* q0 r8 e$ vm_wndMenu.SetFocus();
) n& Q. w$ ^, Z}
' Q% Y0 `0 Q9 n# D. O2 w7 J------------------------------------------------------------------------------------------------------------+ x+ w' b1 k, V" f, ]
*************************+ d! M0 U! f1 m' N. V, T
WndField.h文件
* w0 I$ P/ ^, C7 O) h$ l' t*************************
6 X9 u! G3 F3 {3 y搜索:BOOL m_bReport;
$ C' k% s/ ?) P9 [6 X/ k其后添加:
; `' w; M3 n" c: W: y! u4 e- I: nCWndMenu m_wndMenu;
* Y4 {8 D# ~( v) z- C5 ~! ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( k& \" h% B% C1 Y/ ]其后添加:$ L# L! r" T4 x' n
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ F& I' ^# {# ^; `) a& g
6 h6 ?9 T) }8 p+ S! c2 n9 [# ]" Z _7 h. {% h- O
|
|