|
|
源文件中_Interface文件夹下WndField.cpp文件- U5 D- W/ ^: Q0 ^( T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 c, Y% Z) c0 Y5 F
2 d. ?$ K4 B' Q& U" _2 v8 }& ystruct sItem
M0 A d p' L{. u. [- w9 a, A# Q
DWORD dwId;" y, ?, a M0 F! U$ L$ d
DWORD dwKind2;
3 U+ c1 O3 D7 ~3 |2 mDWORD dwItemId;
" t* x. B) r; o Y$ F1 fBYTE nIndex;- `% J, h8 j2 S4 T
sItem(){2 V0 l6 r$ ]' q( u8 H
dwId = dwKind2 = dwItemId = nIndex = 0;
9 C; i( P- N+ H! ~7 j}
( M' e F$ M4 ibool operator < (const sItem p2)' }& @3 q$ m% H3 l |
{; H: p& Q' g$ P; H# i7 ~
if (dwKind2 == p2.dwKind2)# h z' L5 A* P( m
{! ?& S& p7 s& y1 n2 a
return dwItemId < p2.dwItemId; y* s( v9 Y0 U
}else{
0 N- a2 U& t* `* D6 R return dwKind2 < p2.dwKind2;
; O4 o+ g( Z; M% P8 e0 q }6 }* f9 p7 B3 I/ s. P
}$ ^7 Q0 W- i% l. U+ c) _
};
+ m+ f) r8 H+ ?# fclass CInventorySort
2 G! `: V' I4 ~5 z$ O{
3 h" x6 l7 j% n; x; Gpublic:% I" u* I, u4 M( q& g" p
CInventorySort()
; j: W# V/ Z2 G% T& w{5 w2 I( |. Z& |! }0 X! ]
m_dwPos = 0;4 W* n. ?+ m' E% K* S) U
}
: i4 D+ B; W0 Z& ?1 U- b* M~CInventorySort(){}
: y+ b9 ^. H3 P) u& Hprivate:
! ^, c# O( c+ B9 k% |7 t3 d% i$ tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# o$ I6 z' m3 q/ t" F- f
DWORD m_dwPos;
. B$ w8 f" h8 @" ?public:
% _) F" V4 d6 Ovoid Add(BYTE nIndex)! |, a+ g% h& i/ T+ P
{7 s4 n) K! K: |( p* Q0 \+ g
if (m_dwPos >= MAX_INVENTORY)
; e2 i4 q: K7 u5 K1 C0 D {& D% N6 F0 Q$ S
return;
( ^* \. i4 {/ U7 _' _ }
- t* k5 r/ Y6 x! m6 { m_Item[m_dwPos].nIndex = nIndex;
" n% l* l, w! D) R! x: o3 T m_Item[m_dwPos].dwId = m_dwPos;
/ ^. u6 O, v9 Y4 W x m_dwPos++;' u: U4 S/ k- g- R$ L% I0 }+ O, x
}
9 ~1 V$ v: q7 PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. {# J$ A! n, {5 C
{* R! v' @, `$ c
for (int i=0;i<MAX_INVENTORY;i++)
8 F% N: _- J7 @+ x) z# a {2 x* }+ X& F8 U9 ^; T
if (m_Item.dwId == dwId)
. Q( Z: v5 H4 B7 y5 U' T {- b/ }1 r* N- J/ _; R3 e
return m_Item.nIndex;9 `, l+ w/ X. A$ j9 J
}
6 u* j& C- e/ T; c+ g }" _1 I2 y7 c; G! p
return 255;
0 c8 d/ |. K% A* _' J$ Q# c0 \) Z}
8 B; u2 ?; O3 R' H0 @% X7 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ p1 B- Z1 X; l; j{
6 m5 O0 X: m, _, a" l) `8 Y BYTE nTmp = 0;
) r) Z" K# w ^9 I& o1 J bool bDest = false,bSrc = false;1 y C+ L. ?& e. w8 _5 ^( Z
for (int i=0;i<MAX_INVENTORY;i++)
5 J& D% N: A" X u {8 i, h( p% Y1 l/ n
if (dwSrcId == m_Item.dwId)
4 G3 O9 {" p$ `- E {
$ H v) _8 o- A& J //id相等 则 改变对应的dest和src
3 s A; v4 z+ s& [ nTmp = m_Item.nIndex;
) n g( O' `& @8 c' \ m_Item.nIndex = dest;, D1 F9 c8 N2 |% n7 {6 X+ m( Y4 V
}3 D! A8 B5 ]3 p5 t/ p
}
: i) G# j* M/ k& k1 K //临时数据保存完毕,交换开始
7 |+ p" S! k$ O v5 r/ y for (int i=0;i<MAX_INVENTORY;i++)4 h" u C l G2 G- F# O8 P
{3 A3 l8 p; d/ t! u
if (dest == m_Item.nIndex)1 A' ~& b6 v/ G- D& z) i# \
{: J4 m- u$ i3 Y4 Z4 g
//id相等 则 改变对应的dest和src
`/ W, A$ i7 n m_Item.nIndex = nTmp;
P" b- O. {2 j }
) l# w" X5 y: v' ^$ Q }" c. B/ a9 f2 a6 I5 @' \
}5 F: ]. Q7 C; t
};( N2 U* J% l4 A; M! X3 W/ E. L
-------------------------------------------------------------------------
: K& i; l# f' L) j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 e5 D% \1 m& h. }! S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 {( \7 S v- G0 l/ y9 y紧靠其上添加:; L" D0 \# X2 g, E& e/ E4 a
if( pWndBase == &m_wndMenu )2 k( Y% Q8 u8 r7 p X9 X
{0 h/ v0 t m1 X2 K& C
switch( nID )
" n- O4 u& _% ] C {
: g. l/ _) s8 W' l6 h% ?1 X8 I case 2:4 I5 k1 @! k4 |: K0 k9 B
{
* N) ]# Z3 S5 o3 B9 g: d& r //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# p$ n4 `5 S" K1 k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# y7 u' [9 @! V# ~4 J) u1 | {. ^3 P* J5 ~; t; y e& f4 [
break;" S0 R5 ?; t+ c( x
}' {6 x5 M: T. ~; J8 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 G6 I; @, m5 T) I0 L5 }+ O7 h" K {
- j- M) U" S9 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! U0 c# |: T" @) ~
if( !pItemElem )
2 j+ f( Q5 C( V8 I# L continue;: X6 C3 r# Q F
if(pItemElem->GetExtra() > 0)9 B9 L5 i2 Q' a/ o$ p
continue;
! _$ @. x' R. n- j. j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , j/ N- Y2 \4 a
continue;
+ C: J) H* x1 W" v7 o1 T- B if( g_pPlayer->IsUsing( pItemElem ) )! W( ^8 r7 R w
continue;
/ A2 W$ U& U! `6 d- t if( pItemElem->IsUndestructable() == TRUE )
! `: t$ ~! I1 g5 F6 O8 z5 S) c) R- u {) U) c' l6 v+ n* c( C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# n ?$ b' P+ D8 F3 |1 m
continue;
( x% e5 K1 m2 Z! s2 O5 d }
# X* z0 I4 S" F7 ^ M" `+ I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ?+ x% C( X8 R z! R }) n- p5 @) L7 |5 p! t: N% ^
break;; e" b' z( E$ g/ J
}
6 j. v6 \: ]$ m* a) o, T. { case 1:7 S' G" p% R1 ?& E
{* \' [& X* F# K7 x
//整理背包
) o) Z% ]1 x+ Y* |' Z/ Q; s //////////////////////////////////////////////////////////////////////////
4 J0 m z+ r' A/ A5 j% o( W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. D, [3 G4 U) z$ i. h! C2 H //////////////////////////////////////////////////////////////////////////9 g* i: O8 d# `1 ~
//////////////////////////////////////////////////////////////////////////
6 h' U, q: A+ r CInventorySort* pInvSort = new CInventorySort;9 y. H7 M7 W% c9 t1 f
vector <sItem> vItem; L* |5 h9 C8 A4 ~3 L6 X- l7 @8 z r
vItem.resize(MAX_INVENTORY);//初始化大小
9 y, ~2 V" s& L: K //////////////////////////////////////////////////////////////////////////+ N A6 h e' V" Y, X
//填充数据
+ e7 b6 R6 u& [) W# c; X9 W for (int i=0;i<MAX_INVENTORY;i++)
$ |5 k% ?0 a9 C' q {
0 Q/ E, J; Y, s t0 Z. w2 G/ r, l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# }4 D. z, T! a3 J if (!pItemElem)
c ~5 v6 ` r' a {
. p3 E1 M) V8 s, ~1 ^ vItem.dwKind2 = 0xffffffff;, @- x$ b# ^4 n/ z
vItem.dwItemId = 0xffffffff;5 f# B4 T# \+ j% G, E" D
vItem.nIndex = i;
- r, s' _7 B, j$ v% M }else {
O+ Z5 g0 u( V$ }9 t9 m ItemProp* pProp = pItemElem->GetProp();* w s- l! K' |/ ]5 J7 q
vItem.dwKind2 = pProp->dwItemKind2;9 |# }2 G2 C3 T1 a& W, s
vItem.dwItemId = pItemElem->m_dwItemId;. t- J$ W7 O5 M) I
vItem.nIndex = i;. _4 [% Z, o- x5 H2 F
}
6 ^* j+ r: {. X3 } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. O& _0 B8 g* D. X2 D }2 B& T. H+ t l6 N% a* W/ P
//////////////////////////////////////////////////////////////////////////
2 \. [6 i. W) ? sort(vItem.begin(),vItem.end());//排序; z+ R. E2 G; H
//////////////////////////////////////////////////////////////////////////5 F7 M/ N1 o: t0 i4 A4 G( y7 I- x
//交换 k7 I) {* ?! {" a
for (size_t i=0;i<vItem.size();i++)9 M& T$ A0 ]8 y
{0 X; e1 V7 C- r" {7 Z! L! j8 f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 y* s4 t4 L% t) H, G! H) e, U5 M! t
pInvSort->Add(vItem.nIndex);9 J; I9 U* Q8 t) T/ h6 w! b/ L' D. c
}
5 n' i( E! K$ T' h BYTE nDestPos = 0;5 e9 M9 j8 B2 K! L4 k: J i) R" N
for (int i=0;i<MAX_INVENTORY;i++)1 o: t1 d1 o$ _% [) z* u0 \. u
{2 i) E" c# S8 M/ J: h+ F: y5 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; i. E( t+ w. N4 n0 ^ b
if (pItemElem)" J* X- h' f2 z# Y) z3 }# _
{
* ]9 l3 U9 A$ |" y# {7 o% X7 O if (IsUsingItem(pItemElem))" C1 |2 H0 d( o1 A3 [/ l* m0 _
{5 o2 D# `1 y- ?) L
//这个位置无法放. n7 q, G% `4 h/ _0 F t& ?
nDestPos++;
7 l6 J9 s) Y% G5 t& ] }: n+ E3 [. B7 ]8 B* e& k0 x q
} N& E# v; i. ?' @
BYTE nSrc = pInvSort->GetItemSrc(i);
; A' c& x# T+ p1 x, Z* s* E& B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) q, Q( Y: A1 d: B( Q
if (pItemElem)
7 [) `- ?; i( `5 x2 X+ Y3 q* p {
; M5 D4 m5 t+ f7 h+ r3 H* T+ f) Z* p) x W if (IsUsingItem(pItemElem))* ?, i4 B( P1 ^8 B9 M: j
{3 n0 M. u' K t' k4 W
//这个道具无法移动,跳过! ]+ h+ Z" q$ E7 W! F% H
continue;8 d5 v7 R& f; s' a8 Y
}
" Q7 @1 k y) Z2 U/ G }else{
! p: Y* {2 j- N4 ?, r7 t2 z //空位置 不用动
& Q2 f* \0 a6 \2 g continue;
8 w' E& r' ?# }$ ?; F }
/ f4 D0 E3 f0 ~5 U5 V0 _( m2 c //////////////////////////////////////////////////////////////////////////( c2 N2 Q2 b j9 W% ?4 X8 i
//开始移动4 j: u/ c0 s$ P- s5 \
if (nSrc == nDestPos)
0 `+ p& n0 h- R2 }5 D3 }- ^ {/ h2 D4 D8 x) {* f: @" M
//原地不动
: G+ O/ ^8 R# ], E7 U+ ?2 [ nDestPos++;4 r9 j- Q0 [, z8 G# g5 z* @
continue;
3 w' ~5 e6 x! O" Q$ z1 s! C }& x+ l6 r" T9 ^
pInvSort->MoveItem(i,nDestPos);2 l% p8 d9 v9 `9 U1 I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 G; J$ K5 K( b+ P
Sleep(5);( b; ?* i% l5 ^$ G+ ^# ~
//Error("移动 - %d->%d",nSrc,nDestPos);
3 C6 a2 E# o( E/ u1 @ nDestPos++;
$ P, X& y7 J9 }7 m' O; b, v }
1 y. n6 G1 _# P9 |, \7 x. d //取第一个元素的信息
- v5 q; _( M' l' c) P1 h /*
6 F; m) G( y* v c: h4 `5 k$ S2 I# x, I if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) f: Y7 b( }9 A% t* g4 p7 H8 h* O {0 g4 R9 U) ^# Z( S3 p
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ S* g9 w) W! H- |! z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% O% x9 t4 l# D8 }! m
}1 S3 |) o3 c: o5 p- t- j( s
*/; S' k: x; A) _
//////////////////////////////////////////////////////////////////////////
q4 j* g7 Q# h6 ~# Q* f/ x0 h break;
' V" U4 N+ ^/ H6 { }. m! b f; G/ \% o$ h
} 4 w( E3 z/ [0 Z$ _ W4 K9 L9 e
}
6 ]2 i1 a# ?& Km_wndMenu.SetVisible(FALSE);7 X ?; u8 v% s6 F. R X
; L+ w D6 z+ W% \9 T4 Q
--------------------------------------------------------------------------------------------------------
2 v$ [4 M7 t0 Y% R# h' {0 m3 `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 _4 ~ P" g& L6 q( r& f- `8 j
{ w# p6 m" \& ]
BaseMouseCursor();
2 N: @5 o- r, p: I4 k}
7 r( D, U2 W8 p+ g8 N' Q* V在其下添加:
2 G: R$ Z- ~$ V. W: s4 }+ t L' ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) e2 s$ _( E- A{
9 x5 B; ]" r* X/ Gm_wndMenu.DeleteAllMenu();6 W) r9 r' [9 O0 y, J# m) m$ S
m_wndMenu.CreateMenu(this);! l: z9 b+ s1 V! b6 G( A* M1 J. g. D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, `5 _# U) \/ O6 ?
) D! P- u9 i7 f# B1 {- u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* {. p* y- j; d' a |7 v{9 T/ A: b6 @- u& K) R# w8 t
//P以上级别才可以删除所有道具
: u! ~4 c# q2 M" Q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 D( z/ ~$ e* z* x9 I}8 R( }. W0 S9 E) s' r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* v/ ^3 Z( L* M: a$ P7 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 k7 [" l; d9 _8 e) F+ g; D6 N5 b* A8 d4 h
m_wndMenu.SetFocus();
8 p( i5 F1 t) z# Y( T. @}
" W% n5 R8 `0 ]5 t7 r/ a8 f4 n, m------------------------------------------------------------------------------------------------------------) ^5 [, ~. y* R, r8 ^. Y
*************************. ?3 P7 C( G& W
WndField.h文件# N) B9 g# G+ [5 z- S
*************************" |/ x% F3 a0 G6 k: x
搜索:BOOL m_bReport;& M7 c3 `, P" x
其后添加:; B- L. } j8 u; ?' D8 @+ U7 t& d6 e
CWndMenu m_wndMenu;% ]" L2 m& A& | ?( V
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; {7 W! B1 ~" C* a2 n# O
其后添加:
# h2 `! f9 j Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* u- m) N1 S. ?* P( F
4 K4 n' x0 Y2 b* n7 B" f. O2 i" V( ?! h2 `9 E
|
|