|
|
源文件中_Interface文件夹下WndField.cpp文件
6 r: G3 `. p, P5 b/ |7 j- ]/ q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 L4 H/ R; N0 t0 b9 a( r; B7 H/ u* r# Z' ?
struct sItem+ L/ N9 P7 G x" W
{
$ n- n3 O+ a: K q3 iDWORD dwId;' k( j% a# w; T$ j; |) u
DWORD dwKind2;7 M8 V3 Q" x; v: b/ ? o
DWORD dwItemId;
! [/ `7 {, ^6 WBYTE nIndex;
* Y% X$ V3 t/ d( B2 M: Z- asItem(){
( c4 `3 F0 N* v. W5 @' N9 |0 _0 n. \ dwId = dwKind2 = dwItemId = nIndex = 0;
: y8 a* A8 @0 c. {}. Q" C0 \5 ~' r. V3 G4 s8 O8 u
bool operator < (const sItem p2)9 w/ |! k; v2 q7 n
{# t4 ~3 J. g! q. f3 n; h7 l- h
if (dwKind2 == p2.dwKind2)
# B( R+ g8 {& J) M8 g2 k+ P" K {$ p( ]5 z' b% c6 F. I
return dwItemId < p2.dwItemId;
& }2 S( [$ W0 v$ }; e) W$ X3 U- ^( K4 x }else{; ~$ o: j6 O" d8 s6 B4 n' Z
return dwKind2 < p2.dwKind2;; X2 C9 O9 j3 b2 m! }
}
* G, a/ P, ]6 E4 I! p}
' a9 W0 n! ]3 D ^) A) J};+ _2 E* B9 C2 v$ n
class CInventorySort) D5 h. M8 a% {9 W
{& @8 ]4 D. I3 S6 h$ C5 F: Z; Y
public:
_* Q! J: f" b* w- BCInventorySort()
6 _. |; a' o$ n# X& G3 |! a{7 W C7 b3 {9 g; L! {& [
m_dwPos = 0;
, `$ }! _0 t" N' X: i" G}
! i0 L9 k6 s5 Y( a0 G2 `& c) w~CInventorySort(){}
( K) N5 Z5 T- v- \0 pprivate:4 L5 B6 [& X: ^; k7 v4 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" M0 H: \* b; [$ b3 c( L
DWORD m_dwPos;
( {% m5 G$ O& I' wpublic:/ ~% C- C' _ i' N; M5 B8 K
void Add(BYTE nIndex)) f2 S2 V* I, @1 ?0 }8 ~
{
6 @8 |: z! k# u1 W r if (m_dwPos >= MAX_INVENTORY)5 V% J$ t$ `4 a" `; I+ [
{( t& ?' z/ w- _8 Z- o" a" N
return;
& h t+ y; V$ d% N2 N& ] }+ ^& @( e- f) R8 `. U' G6 u
m_Item[m_dwPos].nIndex = nIndex;
2 R0 D" h0 w2 y4 M! C" n2 R. M) ? m_Item[m_dwPos].dwId = m_dwPos;
+ \8 e$ z, J2 S z m_dwPos++;
; F% z5 n' Z& ]}- O$ X& ?7 i/ j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 y( i( L& B% F{1 ~) X9 X5 x* k8 b3 t- N( k. Z! `
for (int i=0;i<MAX_INVENTORY;i++)
! P: U8 I9 z8 y+ s. M0 L. @ {# l8 F9 _0 L, T9 D0 P0 I
if (m_Item.dwId == dwId)( D% |# X/ |3 G0 y) S! B
{& w2 k# y' A Y4 `1 i3 b( r, g
return m_Item.nIndex;
! k# B5 F' Q& c }* o+ O8 I2 S; v: k
}: W) n% V& Q1 ~* x( g3 m# i6 F
return 255;; l' G3 J& Y5 y, b1 n7 v) J" v
}
. \& H5 Z/ g+ I% ^" a$ H" L$ S- X5 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: M+ U0 N! c" ^' f{
, n \2 a) `) e; Z: r9 A' D8 K BYTE nTmp = 0;
* e5 H }" F7 G: R/ Q bool bDest = false,bSrc = false;# Q2 K1 h$ l& h2 a! P5 u! H
for (int i=0;i<MAX_INVENTORY;i++)( @4 u. x2 v/ W, v
{
7 G0 q) d7 U9 T r9 |1 [( `6 W if (dwSrcId == m_Item.dwId)- N- v: K6 [* f0 C9 `- L
{
* g1 Y8 c# |8 Q: C: y) f //id相等 则 改变对应的dest和src
0 r# U% G) S0 Q1 O/ ?% `/ H& G2 o4 \ nTmp = m_Item.nIndex;
! T7 c2 R& @) @' I m_Item.nIndex = dest;
7 \9 e" A( r, y* u+ y0 L }( l' o t* e- E; `, v* a2 e7 d" T
}
7 }/ I! f) J2 u8 c //临时数据保存完毕,交换开始
4 M6 i- l0 X1 J$ \& u/ {9 G ~ for (int i=0;i<MAX_INVENTORY;i++)
1 y9 @; Y e4 T2 H2 @ {9 r! L V3 c! E: i; M
if (dest == m_Item.nIndex)* q& m5 t8 L; n) P! b9 @
{
( U9 l1 P% t: |$ G/ s% e& x+ W //id相等 则 改变对应的dest和src- ?) ?- Z6 U+ ~1 E7 b" u
m_Item.nIndex = nTmp;) k; ?, l- y2 }7 L
}8 _9 N1 k' a! i3 R
}$ B S; x! k3 k; y! i- [1 F/ h
}! @4 i+ ?+ g, e8 V/ j, ]
};
" _. e! O! |! q% ]2 {-------------------------------------------------------------------------7 K6 @0 L" p) \+ ~6 z3 R# c, W8 V
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 w; B( G0 p7 c1 p* t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* u8 B7 n( F7 r: F+ \6 i紧靠其上添加:* u' s" c+ |& f( E5 i2 d3 h
if( pWndBase == &m_wndMenu )) n. l7 i" M6 S
{
" v* D: C; l5 h+ F; S7 f switch( nID ) S2 m1 u, ~% L
{
; w: ^! h1 J) U. i, p$ b case 2:* S7 M/ O8 n3 E: x7 J# ^0 F
{0 m! ^: W2 E2 F8 m4 s+ l% C! C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; Y: ^8 l2 [: @( q6 ]) a/ N if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 Z7 G1 E1 Q! N, \, u {2 S2 ]3 q% \9 M
break;
0 {. {% n( F4 A& }0 e6 f `. _* A }
* ]; w! M2 w2 g) o# S3 t/ `- |9 n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 ]: V$ s0 \ V2 j2 b {
# k! Y$ b+ B! Z, _# w x2 x2 b. f5 l' }9 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* R9 @# u" n4 }' d if( !pItemElem ). E+ v& B0 b( e, `) {; M
continue;
; A5 D& L; t2 Z$ r* E( ^ if(pItemElem->GetExtra() > 0)7 ^, }4 A) w# o8 V- \6 M
continue;
. H4 `& o* U0 {2 h8 t8 L; K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ D6 d: U! O, s9 [8 s1 T continue;$ \+ | N6 U& z: u# X' ^: v
if( g_pPlayer->IsUsing( pItemElem ) )
+ @3 ]9 I* ?5 }' B( f3 Z continue;' ^& R' M5 p1 w
if( pItemElem->IsUndestructable() == TRUE )
4 n( I% }' y4 s( X# y {
. S* r/ [# D" p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' `# w4 Z) M% k# o continue;$ u) f$ V7 n0 \# y. V+ ]0 \
}
' v/ m0 e5 e0 \1 ?9 v g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 ]/ G, e% |9 j/ [ }0 I; o1 j3 ^6 L+ N7 E# A. p
break;
2 q/ B# [8 m* \4 L. J& B$ q! X( n! i- c( y }
" {3 F4 b3 g4 B, p/ O! K! R* y6 a case 1:. E9 r \6 B7 l9 l# z. I: k
{7 z8 g* }3 _% W) L1 @
//整理背包) K& t& T! E8 H6 a- I
//////////////////////////////////////////////////////////////////////////* I9 P( D1 T& X+ h6 M2 g7 K; }, j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: r$ b8 x; c: c
//////////////////////////////////////////////////////////////////////////4 t4 @! M5 o+ R! x# z0 }
//////////////////////////////////////////////////////////////////////////8 p8 m* T, M) c1 S( }( m* g
CInventorySort* pInvSort = new CInventorySort;6 b% p4 W) O4 {! L3 _
vector <sItem> vItem;/ g! G; X6 G3 e2 F
vItem.resize(MAX_INVENTORY);//初始化大小
% W0 U) e( d6 Q2 h/ T# f' B' V" @5 o //////////////////////////////////////////////////////////////////////////
3 o. t3 I; S0 l( x, j //填充数据0 L: @* z) H) Q4 _
for (int i=0;i<MAX_INVENTORY;i++)
/ C( u! F0 I s/ U4 R3 M {
' z; x- u t m+ t8 G* z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' {- N6 y% r1 L5 `3 t: K
if (!pItemElem)8 C3 |3 M8 F* R7 J
{ J% A5 D9 L) v6 M9 l/ I
vItem.dwKind2 = 0xffffffff;
$ M: l$ U8 Q: P vItem.dwItemId = 0xffffffff;/ R4 J u* _' y* N. H& @
vItem.nIndex = i;
5 O* x. Q6 Y0 @, w }else {6 f; T/ @' h: ]) C1 a4 w! d
ItemProp* pProp = pItemElem->GetProp();5 N( X' n" M. C
vItem.dwKind2 = pProp->dwItemKind2;- b# R! Q2 n3 M% c- {! }0 K& N
vItem.dwItemId = pItemElem->m_dwItemId;! }8 z) o4 b9 v: S6 ?
vItem.nIndex = i;) t: X L# X6 {. Z9 W
}6 j% d# ?3 D; X2 d! S" ]+ e, q! p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% Y( Z8 L) b8 n8 r d0 A }
5 i# N! }9 `; U; p4 D. D; L7 }5 b //////////////////////////////////////////////////////////////////////////8 P% J, G% M2 `8 k9 o; a- B
sort(vItem.begin(),vItem.end());//排序" |* `1 M7 m2 j: i6 j
//////////////////////////////////////////////////////////////////////////
0 e( d6 M, E, W# c- y' `" H //交换7 G# }, S# a7 {* c, Q
for (size_t i=0;i<vItem.size();i++)% G0 P) J! |# ]2 u
{
) P* C, a% L4 X9 L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 y' ?+ N$ K. k1 F. v0 W
pInvSort->Add(vItem.nIndex);
) E2 M$ \/ l% W8 _! v }' Y& P) _- Y# r
BYTE nDestPos = 0;
2 p: q6 x8 _9 u! X for (int i=0;i<MAX_INVENTORY;i++)4 B7 _2 Q; }$ q; n. h! i5 i4 e
{! q' ^8 v) M6 x2 a% O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 @# y0 U' J1 i J" n9 X
if (pItemElem)
( S# r; p! Q& B3 f9 a$ W {
4 M0 ~2 o! R3 P6 V if (IsUsingItem(pItemElem))) Q4 x9 Q: G- b
{
! t1 B3 d) y2 i# W- v //这个位置无法放
2 W/ H0 h1 n( q" P7 {, T0 ] nDestPos++;8 M9 }" k2 ]0 C) h( h: C! Q' U" j
}
5 t5 n6 J) A! d8 B }% N! z/ z5 Z% S3 s8 G/ t: W- {
BYTE nSrc = pInvSort->GetItemSrc(i);; g2 l. j( y* E7 A
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! W5 @8 @" L" I0 x0 y8 ^4 ? if (pItemElem)
8 o" S2 ~& z0 c {
+ L5 |8 o7 r9 e# F. e if (IsUsingItem(pItemElem))
+ p1 ~! g* O' j; h2 v" X6 Z8 ~1 Y5 l {
- a4 k \5 f. h" q //这个道具无法移动,跳过
7 Q" }$ r' E3 e1 E% d continue;* ]; m: q/ x. w* n/ ~) N
}
3 l2 C" C! w% b9 G8 s) e7 ~ }else{
: s" C, v* Z+ ?) S //空位置 不用动
, y6 L6 R( l K continue;3 c9 G! z) ^' E) M% x
}
: ~0 ~( \- L+ w5 k' e //////////////////////////////////////////////////////////////////////////8 M6 x$ P2 K+ N n% t! u8 L3 g
//开始移动; I. k* n8 n% G$ f: R0 p0 E4 r
if (nSrc == nDestPos)( t3 r0 M7 P( H* p
{
5 X% E) ]1 z5 i* [7 S //原地不动: ]6 p& i4 {% ?
nDestPos++;
0 V9 S' ]: J- q2 n" h# I2 Y continue;' C" V9 Z8 C# e: c6 s- ]
}& L' k, y. L2 `; `' N& `
pInvSort->MoveItem(i,nDestPos);
* f. X7 C5 X+ R% S. W E! L5 Y2 p g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ ~% i+ U! f8 K5 D2 }: L
Sleep(5);" X" i! v4 s0 E9 J( o( K4 c8 H
//Error("移动 - %d->%d",nSrc,nDestPos);4 z% A/ n! ]; |9 U
nDestPos++;) V3 T' X7 f9 l. w! A- a7 P$ B" d
}% E* J$ `( x$ v5 o* L% ], H
//取第一个元素的信息% s% j9 [: o6 b3 w$ X# C n0 t: o
/*
1 o% O" g" t& @# g* B4 w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). K2 }8 h# H' O! {4 m$ \+ z
{
9 Y" D1 s1 t1 |' Y4 H$ \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ Q* q; K9 R! ~4 R( p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
H1 w9 }- k8 U# m- N3 F }
9 _6 A# U. @; ~& G" S$ `7 J */
7 ^- \5 ]* s6 W" c# m1 r //////////////////////////////////////////////////////////////////////////
7 \$ m# ~1 }* Z" S/ s break;, _! W& T6 V5 i: |3 q8 ~
}
* K7 K* W/ J- s+ U; f } & f2 I* n; M! F; Q2 C3 H7 w+ T N
}, x( L1 @: w1 N0 M
m_wndMenu.SetVisible(FALSE);
4 K n r: ~( n/ z7 p% @( t9 h4 D+ Q" ~
--------------------------------------------------------------------------------------------------------
9 d8 f* ~% Q6 ?9 D' }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 Y( ] d% z7 E8 [. c{
- @ h& s2 S3 K5 {BaseMouseCursor();
) }2 d, B( @" s9 I7 i3 A}: \2 N8 t1 F# n6 Z+ V
在其下添加:3 J! N3 z- A6 u" M* E# j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& ~" N ]& M3 c* S( n' a$ [ w{. q+ x% p! _# D; _- e4 @# k
m_wndMenu.DeleteAllMenu();
6 S3 b0 p! V' e, f% ^" hm_wndMenu.CreateMenu(this);
+ ?" I \# {5 {% j9 f3 Z! J0 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 H1 R5 \& s5 [4 {
' M v0 X1 x8 i1 {$ y8 n/ z; ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
@7 Q3 J( W/ U: X& q s9 k" ]+ r{$ `3 y' ^) s$ j# V* D: d( ~
//P以上级别才可以删除所有道具
3 @& S& o% H2 k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ W3 C) {2 Q* V" T, |$ e. u}3 F( Q7 t7 L% J6 A, ?* v, p! ?1 O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 V$ q, p' g* k. `- \: B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ ~3 t7 k1 Q& Om_wndMenu.SetFocus();9 P. t3 h1 B, d% H8 ^
}
g+ M' ^6 V, ]6 @------------------------------------------------------------------------------------------------------------
! Z2 Y/ _# O" ]0 s7 a# ~*************************% |* q+ F" x) O) L. j
WndField.h文件
! D0 u: u/ b3 Z*************************
% k$ |# N( h4 z2 W4 X% L搜索:BOOL m_bReport;
. N% J. D$ w, {% I4 V其后添加:
* ?0 o8 }1 e* Q$ H8 K6 wCWndMenu m_wndMenu;) u0 b' }/ K! n& Q, Y$ _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: U0 V' d8 d0 d7 w其后添加:
5 t) m0 C4 ?; S9 Q# x: vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ Q2 P. O8 _! l! s) E9 R
+ a. F0 b$ r8 ]9 K* K6 C5 m5 a7 k& D0 L8 Z
|
|