|
|
源文件中_Interface文件夹下WndField.cpp文件
4 P1 F, \; [% a/ b+ J) w, v6 Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ^1 ?5 ?0 P3 u" c
" j! d `: |# h/ h# r& n6 _struct sItem( Z. M! M8 Z/ o/ [
{" J, I1 Y# t3 {) p
DWORD dwId;
2 U$ U" w, n4 w; v( R' y, hDWORD dwKind2;2 E7 y; Q& y0 q. f# @
DWORD dwItemId;; c/ ~& A! W) ~2 E; y
BYTE nIndex;
8 I% l$ H! X% p% @3 N% b2 d2 tsItem(){
' S3 N: p- E; S3 d! s0 C dwId = dwKind2 = dwItemId = nIndex = 0;
u T E3 G( x: X}$ B# \' y) A6 u$ G" D1 o+ U
bool operator < (const sItem p2)
) o/ y: Y" O- T4 s" h{
f5 h* ?3 m# q6 x, l0 k$ ~, L9 Z6 M if (dwKind2 == p2.dwKind2)4 g9 e5 E7 V0 C: d' f+ L
{! s: _# |3 k* {, j- ~* h5 m% }
return dwItemId < p2.dwItemId;
4 L2 Q2 H. P9 l }else{( Q. k. _4 f9 p5 \6 K
return dwKind2 < p2.dwKind2;
* g- r3 t! e" S3 G G }
% e% D9 q3 f- h E6 {" v/ w$ O}- [& ]+ z, ]( W% G6 C
};: f3 }! }; m( X5 ^4 I9 V- X
class CInventorySort) k" ?' C+ m' n4 R4 ?
{4 V$ y" j' f; r
public:
3 w$ _* ?# Y8 q% U) { A/ D; u, cCInventorySort(); V$ m5 \% t8 s, H7 ?: _
{
& J+ {9 n, E/ N7 j/ z m_dwPos = 0;
4 y6 n: Q' i. {. _8 j' w4 T9 z}
# }* \( o) D R }9 O~CInventorySort(){}
! i2 T! e4 ?6 }! o" F$ cprivate:6 i% b( v' }' _& }* s2 r/ n* I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; ]( t. C9 ?! X8 [9 l" E
DWORD m_dwPos;7 {. J& V. R7 O& z& J
public:9 e$ Z# I$ T: `* u; k
void Add(BYTE nIndex)# n/ f# h. V! b" K
{
; W8 h/ c9 i( k. [ `+ H% d if (m_dwPos >= MAX_INVENTORY)
6 Q4 X4 m. s: s7 Z9 P' A+ T+ C% _ {
* A+ S" T& K1 @- u4 Q4 k+ A2 K return;
' H$ J% X) G/ e }+ A, z% Z6 k$ U2 @4 x% o3 X' C
m_Item[m_dwPos].nIndex = nIndex;
0 w# I4 |2 {0 n' v' v) n m_Item[m_dwPos].dwId = m_dwPos;
3 K0 C: W# h2 L" B, O* V4 H m_dwPos++;7 [, O8 s7 w; z% l" b) k% E
}
% Q* x; S7 U S) d% i/ g! }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ L5 P" M# A( p5 S8 b+ g
{! V# J3 m/ D' x
for (int i=0;i<MAX_INVENTORY;i++)7 z, ~: J1 ]$ {8 I n s
{
; b% M; d8 x1 U9 t( O1 L if (m_Item.dwId == dwId)1 v! K! e& i7 S0 M9 f7 z) r
{
$ s `( T& s; s2 [% ^" Z return m_Item.nIndex;
: \0 n5 W ]& S, b( o9 | }* s/ Z; u' q* m8 H/ m
}
; [# h- {+ ~# t- _& j s return 255;
% }, W# d7 g7 o" S}
' O; w! Q: ~* H7 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. ~* R: L1 g/ ]" y- {1 j1 h7 E3 l& N) q{1 }. \9 ^/ U% ~& t' I$ y, J7 k6 e
BYTE nTmp = 0;
" j; f2 c$ h: a4 \. g bool bDest = false,bSrc = false;
( w9 P3 e% s- P$ v for (int i=0;i<MAX_INVENTORY;i++)
, d; ?1 C1 Z: ]5 ?- A2 Y* l {( X" @. X, q/ N! a: R5 Z+ t
if (dwSrcId == m_Item.dwId): F5 V ~3 _/ D) f2 r! L
{( {% o. Y( x5 I# n- A
//id相等 则 改变对应的dest和src* G/ D. s4 s( V; H! a8 p
nTmp = m_Item.nIndex;
( X5 e1 P0 o& H4 z0 J7 Q0 R' G m_Item.nIndex = dest;- j1 k$ |5 [; U
}
: }0 ~3 L. |2 Y8 m/ u0 } }! f1 F e6 z5 B7 ?& {' \) c2 Z3 K4 V
//临时数据保存完毕,交换开始
! Q- y& f# j: h for (int i=0;i<MAX_INVENTORY;i++)
8 ^; u* R; Z, K$ N {
5 G( F: l1 I; {+ K0 z7 T+ d if (dest == m_Item.nIndex)! I, X1 n( M+ v7 m% c2 y% o8 F
{ w9 _9 Y& T2 c3 b/ V5 c
//id相等 则 改变对应的dest和src0 a( W m, ^0 x: T
m_Item.nIndex = nTmp;
/ i! i D- I4 G& ~$ A% l# F6 L }+ Q2 ?$ v" V) S' l' d# B' |! G& h
}) [4 Z) x5 {; k$ q8 o$ v* e
}; e: ~, T1 u) g6 s
};. G! U' L4 ^$ g) B
-------------------------------------------------------------------------( Y/ c! f% ~6 ~5 ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 O9 a, z8 M$ m4 Z( I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) v. p0 O" o3 r+ ~% r4 r/ G @) M" H
紧靠其上添加:
' b9 b' c1 r' I* O& ~/ f% Sif( pWndBase == &m_wndMenu ): J( N7 }) @4 j: @9 z) p
{
' Z' f9 w- e* m5 \' r7 V switch( nID )
( f( s* _2 l# q g% } {
" ~" I6 \6 X0 K# s1 h" Q case 2:8 L" l: i6 i( E2 e; R; p
{
. d: W9 a: b R1 X9 v9 T. l# q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, Z, N$ g; h v% ~+ v5 z+ q$ H+ u1 S
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! H$ R+ u9 @, V# [3 U
{; v& B" I. h L3 T& z
break;
; B8 l- L0 k$ s; x3 ]& b }
- p2 f- l* C/ Y& D; Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ k9 M7 p- T( ]: s/ C2 I. C
{& @4 Z. W3 V5 x# y( S e0 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 [' R/ e9 w0 b$ s' k7 [& z7 V
if( !pItemElem )6 T3 y/ F7 F4 {9 r2 s1 a1 T, K
continue;8 ^2 N5 {: E) g* p# g. L) y
if(pItemElem->GetExtra() > 0)4 J1 F+ P( L ~
continue;- c0 W( ]" [4 N3 U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 {* z7 C, s1 @7 _
continue;. z, P* N. R: J6 T2 V2 o0 K
if( g_pPlayer->IsUsing( pItemElem ) )% l& ?3 j- U( M- H& p9 e
continue;, i: n# K/ p* b, C3 R6 m9 B7 R
if( pItemElem->IsUndestructable() == TRUE )2 x o* K* ^0 [* z
{5 h6 `( K8 f% l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& M b n2 l! L- D4 i1 p j" ~
continue;
6 M, g) t8 F4 T6 u; z }
2 E' }+ n- }7 t, l, B+ D' i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ }/ g9 U9 t2 W T3 L# d
}
) Q {3 S3 ]/ z. k0 m, S4 g break;4 ]) B5 N+ Y" R2 x4 a
}0 K( P" S" w0 i% S9 u
case 1:% c0 M8 N5 P* a* r3 M0 ]
{6 r6 h; \% E g z3 `2 R, t
//整理背包
# |3 X) `+ R+ P4 _2 l+ Z; m$ U/ k //////////////////////////////////////////////////////////////////////////
6 W& j$ Y# U5 e9 M8 n) N9 u+ t //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# I( a( H3 C% M //////////////////////////////////////////////////////////////////////////) m+ q# h# u/ r2 S3 W
//////////////////////////////////////////////////////////////////////////
0 L: Z9 b( i6 m1 B& A CInventorySort* pInvSort = new CInventorySort;
A( R: Y% w% B vector <sItem> vItem;! U% u/ G7 \& n _" |, f
vItem.resize(MAX_INVENTORY);//初始化大小 G1 y- H5 p- b$ S
//////////////////////////////////////////////////////////////////////////
y( ~5 p& H" c% p //填充数据: _9 C* z2 Y8 |- w
for (int i=0;i<MAX_INVENTORY;i++)+ l" H. @) F0 J0 w/ J& s
{ f3 \( S; y4 B1 [3 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& R3 v! G5 S9 u if (!pItemElem)" N- B# K0 W8 }# ]
{; v; `9 F1 c: M" M: w4 N; B( H# n
vItem.dwKind2 = 0xffffffff;+ M9 O J# t" e# G+ M
vItem.dwItemId = 0xffffffff;
! {' ]- n0 a) N n6 x vItem.nIndex = i;
/ W1 Z, Y7 {" ~ }else {
6 _* X" j. b+ T$ j ItemProp* pProp = pItemElem->GetProp();" b8 e" w Q; g
vItem.dwKind2 = pProp->dwItemKind2;
5 I u& X4 F' S3 E vItem.dwItemId = pItemElem->m_dwItemId;5 {: l. G/ Z! ~+ D5 G$ O
vItem.nIndex = i;
& W ^+ w2 A0 \: A& @ }4 j! ?5 n6 ~# a7 O6 z5 m8 i% V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
h5 P) t- v$ n8 f3 ?* Y$ R: P }
n% g- y7 W5 ?3 x' G /////////////////////////////////////////////////////////////////////////// W! H, ~9 ?- V# ~2 Z
sort(vItem.begin(),vItem.end());//排序' I2 I1 e! L; C
//////////////////////////////////////////////////////////////////////////0 f7 `' g2 R9 m$ t
//交换2 L, B8 Q9 i: _1 p- j/ G- v
for (size_t i=0;i<vItem.size();i++)" F+ i) p% H+ J' t3 g" H
{
8 k+ }7 Q$ m5 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ V* p: v! f) q) Q' o pInvSort->Add(vItem.nIndex);) g/ J& v. b0 C+ |
}. R; u% D/ Z( _7 U, X
BYTE nDestPos = 0;
! h3 P* W# G- _' r! h- D: _ for (int i=0;i<MAX_INVENTORY;i++)
7 H: W8 d D6 V T; n& v; V) c {
8 _, R. j6 P& S! ?4 z$ j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ M0 v$ m# i, o5 }% e
if (pItemElem)
( R/ \& w6 h/ b/ P# t. | {! W1 |, @' O) O
if (IsUsingItem(pItemElem))' \/ a) S) X7 A& @$ ?* K
{
g( ^* o' X& z8 ]+ x //这个位置无法放
& _- F0 x+ F4 a7 T& o nDestPos++;$ L; i" z- u. s% @% \8 _
}$ [5 }* u/ ^: F
}3 ~+ n2 G) T) H8 V" e
BYTE nSrc = pInvSort->GetItemSrc(i);4 n% S. A- g5 x( z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, S! n0 G3 n$ U, ?! e3 \; R if (pItemElem)
! z, P \/ S1 |) w {& A2 R8 g' E4 F0 g- R5 I# h( z" p
if (IsUsingItem(pItemElem))
) ^; w! e* `. g! V {
8 U: d6 z, ?: X: s. ?+ X //这个道具无法移动,跳过
( o8 n- o1 U* k2 n. { continue;
5 t+ e, @% E: q- G6 w }
( T5 X* p; y' H' X4 w8 R }else{& K% ~4 w' C/ O- b( Y$ O5 f% I
//空位置 不用动) ? w9 Y- J1 k- Q( d! Q0 U
continue;! r( d' Y8 C: Z0 z3 X( N
}
# z N: y4 e) U5 Q7 [; N/ d9 {0 \& h //////////////////////////////////////////////////////////////////////////+ s1 |7 i9 C3 s! f- P
//开始移动
n9 N1 t3 L! \ if (nSrc == nDestPos)
$ z5 v$ D( s; f& \/ B { X4 C$ s% ^/ a1 l; @* D
//原地不动
1 c: L5 ~, o4 _2 K; [9 v nDestPos++;+ t+ j* `; O! j( |; f! S
continue;2 ~5 x# v/ e* ?9 F
}+ i! E ]( N2 u: m
pInvSort->MoveItem(i,nDestPos);
6 U) e; |6 Q0 ]7 i7 S' v& q. O g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 @* l7 M+ x; ]8 z% o0 G; r Sleep(5);
3 n% _- z/ a' I9 P" ]+ | //Error("移动 - %d->%d",nSrc,nDestPos);
/ }: e6 V/ ^1 s9 ?3 Q o$ ]/ L* r nDestPos++;
9 _. `8 U+ ^6 O9 i# n! l }7 Z$ _2 y: ^0 \& j8 [; P) s/ I
//取第一个元素的信息
1 q2 A# D8 F. c5 n& x /*
* \$ D: |+ B$ }+ c3 p0 a9 [) Q6 w2 q' G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( W. W) F6 n0 g9 s+ S
{2 B( y% e) M- G- `2 F( H! d7 a- i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% b4 h9 I) L! i9 r3 a3 J' H g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ n4 e* B. G- D% a) f
}" X, p# f3 h X6 I4 Y; G8 Q" ?; P/ t
*/; ] `7 W4 W5 E: Y7 w* f
//////////////////////////////////////////////////////////////////////////, R+ y+ X: L+ c& y" f' O3 L& `
break;
9 ` E G: x! M; u8 o9 }' U6 q$ Q5 n }
% z/ t# d9 K, f }: J& r8 S8 W6 p } & S+ R5 l8 Y- C+ G
}
" Y/ L: e. Q; U* d4 U) Y* Am_wndMenu.SetVisible(FALSE);$ ?/ S8 W. ]* P
3 O; P3 O: C& S--------------------------------------------------------------------------------------------------------
3 o+ l6 @. q( c, O* b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 |, v/ p# @7 [$ U1 g
{+ r9 f; P/ \! ~1 J9 N; ~
BaseMouseCursor();
$ x4 F/ B% r, R}& j2 ^" z) v4 _- @
在其下添加:# T3 g# J/ ]0 q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 a9 E, N4 k9 r# B8 O
{/ n% d. ` M6 x4 a) Q
m_wndMenu.DeleteAllMenu();: Q% l% Y$ l p; r
m_wndMenu.CreateMenu(this);1 }/ x$ s( F/ Y @( ~. W3 v# d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: s J. O% ~; n+ d8 q% H
8 A; N, K0 L3 q0 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" s5 `' S. d& Y: s2 z0 s' X1 Y8 G{
* Q* Y0 z3 a% Q9 s! K/ d //P以上级别才可以删除所有道具. |& J' y* l% R! F3 [9 ^1 ~6 V: A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! Z- C0 G: J( o+ p- J9 A# s# l
}
# r) o9 v( \, h" T5 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 V! V h; l4 s. I( pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# j' M7 Z+ w; S0 E- Em_wndMenu.SetFocus();
- s( X% n- m2 [9 z; A$ K}' n# Z" D0 d& v3 w
------------------------------------------------------------------------------------------------------------* z% P+ ]/ s1 B r; H
*************************, n/ B8 i/ A" C" I8 Q3 i3 U2 L, K
WndField.h文件
" a1 W) X r0 Y/ {) ]*************************
5 k( Z+ ?& _, L2 G5 I7 r" Z搜索:BOOL m_bReport;
) a" ]0 X* ?$ [$ C* p6 ~! S( H( p其后添加:3 M5 `, P: N p9 w
CWndMenu m_wndMenu;
3 C" ~9 K' O. }9 J* v, o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* b2 x3 q$ Y7 \- t x5 R) r
其后添加:$ i) L' J/ i) F ]/ `3 Q2 K
virtual void OnRButtonUp(UINT nFlags, CPoint point);. @; ]9 s: R5 {, J
$ g" h: i' \/ M/ a; \5 V n8 {- J
( Z x. u/ Z! b$ z* G |
|