|
|
源文件中_Interface文件夹下WndField.cpp文件* |( e0 V r' x9 n) K8 K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 V+ Z5 e' ]9 }! @7 M( ?
% Z. J" `- V6 q( b; \! g0 Xstruct sItem
2 [& e2 V$ m; {& T8 h# O{: N1 [! l" F" x- j0 V- ~; n8 ^9 H
DWORD dwId;2 _% S3 I/ a$ t3 V+ S! {: L6 @; b% J
DWORD dwKind2;
! b: u7 g3 o8 T: X a C, YDWORD dwItemId;
. {! w% `. v% Z+ s' ]9 B/ jBYTE nIndex;
4 b1 c" i7 d3 ?9 \$ z: DsItem(){" p; l6 i; `4 g1 \" ?9 c
dwId = dwKind2 = dwItemId = nIndex = 0;0 \! |* P0 D# u" L
}
. e1 o) A. T: y" H) a+ b* o+ x! Sbool operator < (const sItem p2)) T2 }! v. I& F4 R
{2 m) P6 q% o& f! ~+ Z6 @
if (dwKind2 == p2.dwKind2)# J! S( T( E: i2 D. K
{
$ Z5 c R5 e! Q0 R. e return dwItemId < p2.dwItemId;/ s2 R { F3 d# S0 S; z" g4 A( p
}else{
" a5 D9 Y- d& A" u: _5 q0 N7 A/ s return dwKind2 < p2.dwKind2;% `% N! {5 x, [ K
}
: j# Y* K! Y0 y7 G$ q}
$ w d3 J- C6 h" S};
: p& ~ ^! \, S7 ~* _2 oclass CInventorySort
% R, q+ t& ?& b( k9 x{
0 c/ l" q# M6 M$ Kpublic:
( R) r) P4 n* BCInventorySort(), p. P. o1 r& u% ^* p% s
{
% T* d' d* `1 N) k r1 V# I" S0 Z m_dwPos = 0;1 I0 l& C5 {" W+ X; K; f
}
) ]" n+ W9 }/ B. v7 v~CInventorySort(){}* a9 r- }* v5 v7 X' u3 c7 I
private:
! K) W6 [( s) \sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" [4 _- O/ u1 Q0 W% `3 IDWORD m_dwPos;" g( j+ b' l5 X9 M$ W
public:
6 ~5 R! ~3 V, D8 L) Qvoid Add(BYTE nIndex)' k7 Y J, r6 c
{$ F9 n. G5 I$ U
if (m_dwPos >= MAX_INVENTORY)
6 _$ ?# u$ X0 ^. }: T9 [ {
1 \$ I4 R$ Z6 v6 J k return;, M0 A6 k: V7 }& O, Y1 {& v
}
8 Q8 O* w- u8 N7 N0 ^2 Z; C m_Item[m_dwPos].nIndex = nIndex;2 E* x3 R m R* U0 g3 H9 z) t
m_Item[m_dwPos].dwId = m_dwPos;' j9 M4 S2 {. T% D+ \% e2 b
m_dwPos++;
5 Y" _: q0 b4 `# k}; v# @) f% }2 S( C# C! ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* v2 Z6 J3 @3 Q5 a9 r% r- w7 o9 G+ z
{
* e% t6 i$ s8 [ q/ R" H- p for (int i=0;i<MAX_INVENTORY;i++)4 \' P, G. \; d. m, |8 n/ F
{
( a' a! i% j# Z; G* Z R' S if (m_Item.dwId == dwId)
6 u; l' `: m) _ {8 |1 c' _7 |4 V1 Q/ ~: l: i
return m_Item.nIndex;
' ^: ?- ]4 y- |. C }
5 ?2 h5 W3 ?" U) C }
& ~2 P- a2 | h7 o: Z return 255;
2 z1 s. i; F8 q% U}# ~! [5 h; L: }- _5 t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ ~7 n, V% p! ^5 N7 _{1 v, @4 n% J0 m* x. ~
BYTE nTmp = 0;
! ~3 S/ h- q( `/ o8 I8 p bool bDest = false,bSrc = false;# @* k' }% U1 ~; W
for (int i=0;i<MAX_INVENTORY;i++); ?" k' k% T# a0 ~/ s
{9 a2 U# C% S+ L3 `3 |9 A" D
if (dwSrcId == m_Item.dwId)
* E v$ k. \+ w% P5 {$ l( { {+ k( f6 A- p% R8 f$ C7 F
//id相等 则 改变对应的dest和src- Y% m0 H" g- S
nTmp = m_Item.nIndex;
* t& X& P# y4 B$ k7 ` m_Item.nIndex = dest;5 |( A; C" @/ k4 R. Q
}
# v2 O3 {8 x, C% w# q, R }
6 Z _) y0 Z1 @/ a //临时数据保存完毕,交换开始: Q0 F5 x# e2 z$ _# x
for (int i=0;i<MAX_INVENTORY;i++)
9 n! @6 |6 l5 W; Q {9 A. d2 [, ` H9 c6 j) i4 Z
if (dest == m_Item.nIndex)8 h: {% q0 b/ C! B+ r( j
{
1 t; r4 H$ O+ c5 Q8 W* u //id相等 则 改变对应的dest和src
% q/ L Z7 n4 j; Z4 g$ H: k; E. N m_Item.nIndex = nTmp;
$ {3 e% n+ c6 [2 c }
! [$ q7 j8 Z$ s1 ?- }$ j: o }
! I/ o4 K6 f+ ^, d}8 ]& p/ f8 [$ j$ a
};
7 L; W( I- M( ?6 C! j9 U+ W-------------------------------------------------------------------------+ N S: P! A: {# L# K) _8 W4 ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 X* {0 g" m- I3 _ M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 h) X5 L6 M4 a; R+ J. A" _
紧靠其上添加:- h+ |' u9 ^) j
if( pWndBase == &m_wndMenu )% Y6 D0 B% N) H
{
8 ]0 j8 R3 F# _! i/ @ switch( nID )
' a) {" L. D P7 r3 Z W {
; g4 v* z5 x0 W' p, K, j case 2:, L. n5 n4 x8 {( T
{
* ^; y ?+ T: d9 ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# m4 y2 N i0 _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( u' E3 ]7 Q+ H }1 ?3 x2 f {; E' b) I( ]) n7 R+ z/ S- e6 O
break;/ U" E1 V+ l& o/ g7 u" V# S. O: D
}
- l5 p) p; U8 _6 K$ {. n( h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 c- Q+ L# c3 t3 ~+ m, o% U {
% M1 y8 Z( T; k h ^1 f: I) W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" [( o* n4 i) _3 n! f7 X
if( !pItemElem )3 i3 R' ]. c, z2 E' p0 n
continue;- M) S& c k+ @4 j4 \* R* d
if(pItemElem->GetExtra() > 0)
5 W0 O8 i" W2 a# a continue;, R: _; _$ ]" y& H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 S7 h1 N8 h$ f2 K' P continue;% D* t' i: @( o) y* t' \7 Q1 E# X
if( g_pPlayer->IsUsing( pItemElem ) )
( h# |7 Q* ] R T continue;0 m6 S* d" y2 j) A) L' I5 n
if( pItemElem->IsUndestructable() == TRUE )) _9 u& C D6 z9 S" B
{8 Z7 @2 @ p: H; v/ S+ \+ O& t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# B( @$ j2 U5 k4 m% m6 n continue;" n2 a% C, ?) v' p# j F. Z
}, `( i! D3 a" \7 B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- q. U4 \& |: X/ h
}5 \ ~% g+ v( p
break;
4 r @9 `+ h: t, ]+ R, n/ |1 r }, X" U& O' M: o" N3 m Y
case 1:
' a5 H1 T; p* v# |0 M0 p {9 b. W& S. L$ M- D$ Q
//整理背包
1 @, {: z; f ~7 ^, Z$ k //////////////////////////////////////////////////////////////////////////! x4 z' |( W1 U0 L8 g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" }% N- c; P/ o0 R3 b/ E
//////////////////////////////////////////////////////////////////////////
$ ]! l' I+ D: g4 b4 ` //////////////////////////////////////////////////////////////////////////
; T2 l. k& s! g- v CInventorySort* pInvSort = new CInventorySort;
& h: @6 k. }: s4 Q6 c vector <sItem> vItem;. K$ z8 b2 X1 g, ]" H1 e
vItem.resize(MAX_INVENTORY);//初始化大小6 N& l% b8 ?4 J& `# q# G5 `) a
//////////////////////////////////////////////////////////////////////////+ |7 ]1 z6 k4 f
//填充数据- C1 t1 L( |% p+ j/ i. g; y
for (int i=0;i<MAX_INVENTORY;i++)6 B! y7 V" B, Y. ]- v
{3 m2 H% O" ]! Z" p1 Z& t! N/ |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) b* I, p8 P$ d- S# u
if (!pItemElem)
) T) J. r0 k1 E4 V/ E7 ` {
+ v9 y3 O" E! ~ vItem.dwKind2 = 0xffffffff;+ c! D3 m6 {2 t. p, |! s# Y) d
vItem.dwItemId = 0xffffffff;
`" E A$ Z+ _( O$ I4 W vItem.nIndex = i;) E( u1 k& O; H ~2 q$ y6 j
}else {8 Q O$ V& `; T& T+ K' ?
ItemProp* pProp = pItemElem->GetProp();- |6 B: D8 H3 W M1 Y
vItem.dwKind2 = pProp->dwItemKind2;
! T* ?0 d$ I$ G& f+ h# b$ U- T vItem.dwItemId = pItemElem->m_dwItemId;6 r# i' o( }* s L- ^# j
vItem.nIndex = i;
0 A9 ?1 I) d2 | }- r6 X5 G7 y- Y3 t2 P" h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ J: v1 [$ j( O- i( Q }4 t7 I, S, t# c; R8 V' e4 }8 ]3 f; @
//////////////////////////////////////////////////////////////////////////4 M/ ^9 f5 g& @1 x
sort(vItem.begin(),vItem.end());//排序/ O4 I- S' J2 V) A
//////////////////////////////////////////////////////////////////////////
% V! ]- b2 k- A //交换" _( l( u: g& R: m/ R( i$ J( z
for (size_t i=0;i<vItem.size();i++)
: B' t1 }+ k5 g {$ k7 g; [' H; F. M5 U+ X( G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( C3 N. x0 {6 v6 F) m. _ pInvSort->Add(vItem.nIndex);$ ~$ Y* @! \$ M7 I* q, {
}
# K w0 I1 T0 x! f) p- J BYTE nDestPos = 0;; _$ I/ ~% H8 P3 V
for (int i=0;i<MAX_INVENTORY;i++) h! r7 I/ p; `9 r. h$ ?
{) ~! B4 m n9 g5 Y7 }- ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) h$ a# P, B6 t4 D; {% n( l+ |" E if (pItemElem)
0 x7 U# ~6 U6 M" I7 g7 T0 Z {8 l3 h1 S3 K+ h! a6 r
if (IsUsingItem(pItemElem))
3 u) a, f* i: T8 G. B {
6 T+ s& h+ C5 Z3 K6 B8 x% m //这个位置无法放
/ \& E* `+ Y: K# X# m nDestPos++;
: K8 l0 ^; Q, t; Y& F+ _ }( B ?% g4 E8 L! t
}5 u3 n/ l# X' Z4 N9 @6 X$ h
BYTE nSrc = pInvSort->GetItemSrc(i);2 B8 c2 M* M x( D. N7 O. c, U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- z/ p0 ?0 x5 {# U; A0 w if (pItemElem)- u/ V$ S0 T. x8 [$ I5 V" P- D' F
{+ x' x3 Z v6 H, K4 t+ g
if (IsUsingItem(pItemElem))
- |& P0 N5 b7 p# O6 s {6 k3 Q8 g/ a# s2 o& }' J
//这个道具无法移动,跳过2 m$ Z1 w q# t' _) N! [* q2 b. Y) l5 _
continue;1 M) Q! Q$ `9 s
}
2 I$ U. a: X7 @ }else{
' D9 w5 E' T E% h //空位置 不用动% f2 t7 U' V/ y/ U* p# A# S" J
continue;1 W B3 u- T. b: @5 V6 P6 b6 }
}
! A/ D5 }4 ^5 [4 I! |& @; Q1 W //////////////////////////////////////////////////////////////////////////0 R2 j* R+ h% ?
//开始移动
- P/ q8 U; C. C2 n if (nSrc == nDestPos)1 s8 x* ~# j: t+ d0 Z
{
+ c* u, I# l) Q, I C //原地不动 o6 w$ Y/ S7 _4 X( o8 M0 w `9 p
nDestPos++;) d% F p0 r/ P! m9 A- l' Z* n
continue;
2 E7 i/ @% }5 x( z }" [% K4 T9 ?8 L$ H+ q E
pInvSort->MoveItem(i,nDestPos);2 C/ G+ K7 A7 P4 }; Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: v" O+ r7 y4 p2 ]0 I# m) n# O. C Sleep(5);( a5 q( v3 O4 _( s6 ~3 t
//Error("移动 - %d->%d",nSrc,nDestPos);
' ^. p' ]/ c6 ]3 t3 T nDestPos++;
; \' e0 x' I, {7 f+ Y5 W }. C. b: Q# w) a& M
//取第一个元素的信息
: u. u/ a: Y' b5 B# A, C% J( P: j% v7 C" G /** w: r& g3 f B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 j/ L- o: b0 ~) z* l$ W/ ?4 T {5 ^$ \! L# D4 ^2 E# D
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 z- S X, {3 e+ }8 P! X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# D# x, K; @& d4 t% C }3 E; G8 g+ z% Q/ O! B9 O
*/
9 T3 U1 h3 H/ M0 y( ?+ h //////////////////////////////////////////////////////////////////////////; _) h. u/ m; V9 h% Q- S
break;
9 Z2 O0 c+ @& u, T }# k0 F" g7 N0 s- P
} 1 |+ B/ b( W& z i% K
}' k. z8 Z3 q8 B# Q, v
m_wndMenu.SetVisible(FALSE);
' ?9 w. E+ u3 x" y# Q; _. p' _0 D$ M6 }0 S: Q+ E9 {; ]
--------------------------------------------------------------------------------------------------------+ H5 h0 Q5 {7 a3 ?- P2 }! z/ n- a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! d, \ y: k. b
{) T/ Q, X+ M$ N+ m& ]4 U+ b
BaseMouseCursor();2 I; n0 a4 U. B. j7 `
}
; P X3 u4 _5 R6 l: q在其下添加:
2 ^" M, }+ V$ n8 Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 V# u( i- q$ ~/ H
{9 K9 Y7 C7 I. I. E( k, H4 ~
m_wndMenu.DeleteAllMenu();* C1 r+ y6 a* ^8 S" x
m_wndMenu.CreateMenu(this); l2 J1 z8 j5 E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 t3 I& S- C% A7 Z6 k
; z& l! U+ b6 ?: B$ [ Q1 cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& f% T: g1 q; L" R3 @5 I% |
{; T$ l* m$ T& @! W' A1 N
//P以上级别才可以删除所有道具
. r7 r9 h- `0 ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' [) N; J R. Y
}
% }" r5 }* K/ Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 ?9 `6 b8 f8 I" Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 S& C$ ^% ]& V0 j" |2 F" _! ]
m_wndMenu.SetFocus();
0 C `; ?! l' `) t, |" H; x3 K}
! P. X K6 Q, Y( Y------------------------------------------------------------------------------------------------------------
2 V& U' j# y2 X% R9 h- U) `1 f*************************1 M9 w1 q2 j& e) |9 Y& r8 Q! }
WndField.h文件. j, ~$ ]8 K: {; v7 a* L. ^5 ~
*************************
/ p$ h3 O" e# v搜索:BOOL m_bReport;
0 i$ C- \ \9 }6 _, p9 b其后添加:: o: H9 n' }+ S. W" o
CWndMenu m_wndMenu;" u( h/ t/ b9 r: r) z6 B) M8 w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 |8 V* \7 S d5 S8 @其后添加:! Q$ z# l5 k. _7 ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);! e7 [* J* d- D4 {9 N! I
7 b. R6 t$ z( g; |% V9 z+ _2 L
2 n7 \0 V+ x5 i+ b* o4 D% c
|
|