|
|
源文件中_Interface文件夹下WndField.cpp文件
8 A/ [8 N# f: t2 u0 D# U: ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 C2 Z% R) j/ k
; o0 z% J; D' Y* cstruct sItem
' A+ p3 w& g C8 ]: z{/ g3 B) a, X4 j! T3 R5 G
DWORD dwId;/ B6 B' t. J1 b4 X# a" K
DWORD dwKind2;/ [/ K+ m7 s& @8 u" X' h7 d; A
DWORD dwItemId;
2 q) N+ |3 T& ~$ C7 N; wBYTE nIndex;
6 f# n) C7 \2 E' HsItem(){) n* n6 X( {% o8 u c
dwId = dwKind2 = dwItemId = nIndex = 0;! C: `+ d( A ?) a$ ^
}
! Z$ x0 u( @/ C0 Pbool operator < (const sItem p2)
; U0 C3 t1 a: K* j4 n{
2 A) P% f7 S- _# |6 o" v: l6 w if (dwKind2 == p2.dwKind2) S/ Z* _; I6 y! V+ Y' S
{: h+ t$ T2 b( j
return dwItemId < p2.dwItemId;
; C2 l# `% N8 Z$ c1 S5 g3 x }else{1 V( `2 L1 e/ T \$ X
return dwKind2 < p2.dwKind2;
' `" {' E% C+ C, k/ w9 H }
5 G) j/ i8 b7 k/ \}- Q1 b; m; }7 X" b
};
$ ^& e: R( [; y& c1 gclass CInventorySort( i- u- \. v) Y4 x9 ?
{3 S0 V" C& L7 f: e
public:
9 Q1 c# R& u; F1 I q2 L8 q5 WCInventorySort()2 w! d, e9 d C8 W; k' W
{
7 ?. y8 l# @% Z! ]) `5 ^, f( I m_dwPos = 0;& u, b. M1 e: l- w0 T
}
! E2 T1 {! j, G6 p! S~CInventorySort(){}1 o! r# U( l5 e m; o+ b
private:
8 ^ Y* F* Y xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( L) q0 M- H4 x- X) BDWORD m_dwPos;- c6 o6 @/ i& r- `
public: K4 Z+ U$ j$ N2 K8 s- q& b4 ]
void Add(BYTE nIndex)* c" Y; h4 @: ^* s* \
{$ _/ T1 L N9 ^( X) {6 a
if (m_dwPos >= MAX_INVENTORY)
$ [& `8 ~/ f1 k+ _3 c, M {
5 U+ h7 W+ `% k$ x8 B+ H5 n return;! z1 d" G" U6 \' w" q6 L
}5 ~2 ~& x& x. P+ [- A) s
m_Item[m_dwPos].nIndex = nIndex;
. |/ j0 N# ?) { m_Item[m_dwPos].dwId = m_dwPos;. h5 R4 t' ]9 k+ I: i0 n6 r
m_dwPos++;
: D( `* d) _ K}9 m0 a' u. {, b4 k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ k! |4 `% \0 [' d
{6 O& z& g; ^ }0 n- P: x
for (int i=0;i<MAX_INVENTORY;i++)" S6 m3 H4 g! k" u' f; A
{! k8 N$ p2 L. ]
if (m_Item.dwId == dwId)
" s1 J# t( Y0 [* d& j {
( ]4 V5 u. P8 U return m_Item.nIndex;0 X" T/ N: p& U/ q% {; f
}
$ Y8 M+ q! P: m }
5 I9 A- B: [$ t; F5 ~: p return 255;8 ^- \) x* Z: m4 G0 v7 e
} R$ @5 z, Q2 N0 M2 v( G6 s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 z: \7 j# m& o# H+ j
{, l) `# O1 i$ u& v6 ?
BYTE nTmp = 0;
" H2 V, w' Z ]- W# t5 d bool bDest = false,bSrc = false;2 g9 ~( q% k& Q, {0 i0 h; d7 [1 {4 u
for (int i=0;i<MAX_INVENTORY;i++)1 l3 b) C; q" u6 ]5 y
{, x9 q2 d; Q# G* J' k2 M
if (dwSrcId == m_Item.dwId)
2 P% m4 a# ]8 R( R {
1 P0 g1 j4 b0 g0 Q //id相等 则 改变对应的dest和src; X. {% K" Z X
nTmp = m_Item.nIndex;' o9 ]! _9 v+ l( j7 v' K
m_Item.nIndex = dest;
+ y6 C& o/ g, f+ I) H }8 Y1 }; E( r$ _& W0 Q. W1 P4 Z# `
}
0 V- O! y5 t/ b: l //临时数据保存完毕,交换开始
$ M. R8 C8 ]% @: C0 T for (int i=0;i<MAX_INVENTORY;i++)
( u+ W/ j( V; j9 Y {" Q4 g3 Q$ \5 F" y
if (dest == m_Item.nIndex)
4 J6 G+ _# P% f# @5 I {# c) R0 L1 T3 {; }. ?- \
//id相等 则 改变对应的dest和src/ P; U/ L/ J+ H9 i% z% D& e
m_Item.nIndex = nTmp;
1 d4 q/ s# f$ h( w }0 ^* j8 o4 w5 Q- l& z
}. \" O. J! l& z/ P" R
}7 ^8 z2 Q$ o+ Y6 K& s$ S
};4 A) Y- k2 P0 r$ z1 l, N" v
-------------------------------------------------------------------------
- ?# ^- ^, d, D( x+ [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) v5 w+ I8 _* Z" S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; c" U- S2 J8 o6 f
紧靠其上添加:) M0 m Q k' o& g& d9 d) K0 X
if( pWndBase == &m_wndMenu )
6 A( j: c2 U q/ \* h6 }{
3 O- F M) `/ w! r: t8 O% G+ N( r switch( nID )
9 z' p/ v, H% i2 h3 j. ]) r( K- B {7 {7 j; N8 Y; X* o$ X; C1 w. U) v! _
case 2:; _4 b* j8 p5 p* n q
{1 O, F6 t4 h* d* U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! P! B, a) h' p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ {' l k& F1 Q( y* l- i9 u' v {
, ^7 R" }* }; `3 v7 k break;' r% l5 Q$ D3 t8 x- U9 p
}
9 H5 H- e* B0 c- i' u7 K) ~* D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 B" v, [4 L# M' C' P1 }
{2 \0 f- k. M0 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* c1 v! s1 e+ |; t if( !pItemElem )) ~0 {* y/ B- O. j% g/ e
continue;
& N% Q6 F! s: [' {& H( B5 t if(pItemElem->GetExtra() > 0)
+ o: v! V' U$ s2 ^! E' k9 P continue;% @" {) l8 q2 j$ t) ^
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- p6 R7 y5 ]/ s; A% W/ \ continue;
$ Q. g1 d: A0 [; q0 I o+ a if( g_pPlayer->IsUsing( pItemElem ) ). N* U9 V: k! j+ v0 a# e
continue;
5 G0 ^6 \8 A9 I( ? if( pItemElem->IsUndestructable() == TRUE )9 t+ C* n$ g. m$ w8 m/ G
{
: {) C" r0 |! H: h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 P: R) e# |5 g- \! `& X
continue;& }* P& R7 e$ m9 a* |) {/ {
}* f; A/ `: @* a9 c! R; C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 a1 O* ]6 n4 T3 y4 i$ P7 y4 y }
9 G; U# @3 i" T* J# B break;# t8 b* f, X! w# H6 w+ d
}
9 E# u" D3 F m case 1:
% V' e$ `6 q4 c. R% p% `/ m2 D" l- O {4 ]! |; V$ v3 o% `8 g
//整理背包/ L; L5 g3 V y# D+ s# u
//////////////////////////////////////////////////////////////////////////
% f M" f8 `" V7 m7 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 d+ B) q" `# \ b0 `
//////////////////////////////////////////////////////////////////////////! R( s( }( U6 [; C4 h
//////////////////////////////////////////////////////////////////////////
0 E' Z/ w0 V$ q2 u! Y CInventorySort* pInvSort = new CInventorySort;% \0 I( C% Z4 p# o# ]9 X
vector <sItem> vItem;
; q9 O& ]; w$ F; a$ h vItem.resize(MAX_INVENTORY);//初始化大小7 t- f2 W8 @( A: I/ c, ^1 {4 X
//////////////////////////////////////////////////////////////////////////
) B Z: T" |$ H. g- F F% b //填充数据7 {1 l+ ~2 s( @& m" d
for (int i=0;i<MAX_INVENTORY;i++)
2 X$ J- I, C* b2 @" i- L {
. D9 l3 Z. b, @& }& q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& J, l# ~: D1 L+ ?( o+ N if (!pItemElem)
" Z! ?6 P4 G+ u7 \; I/ ] {1 _# g0 y# r" E0 g0 u- [, M
vItem.dwKind2 = 0xffffffff;$ Q0 X& c4 S/ p- x$ h; y. H
vItem.dwItemId = 0xffffffff;& [3 W( w; E7 K0 j( \
vItem.nIndex = i;
6 S% B* P( J& x9 D }else {
* O3 G' B1 O$ k& F; ]. Z1 S" v. n ItemProp* pProp = pItemElem->GetProp();1 _( \" ^2 |8 a- W5 a8 F
vItem.dwKind2 = pProp->dwItemKind2;' m6 k7 k1 s, E H0 R) Z
vItem.dwItemId = pItemElem->m_dwItemId;% r) D4 N! w" S K' Z' M
vItem.nIndex = i;
* r: h: P, d' r }
0 Q5 ^* T& S0 |8 ]$ } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" d& j Q, B4 t {3 t* \" _
}! s. l7 Q, V8 l
//////////////////////////////////////////////////////////////////////////9 Q D/ k/ {( p8 \! @; x: h0 x
sort(vItem.begin(),vItem.end());//排序, D& J6 Z3 h, o5 r+ q
//////////////////////////////////////////////////////////////////////////& m3 E M" i0 b& ]1 `
//交换
! P% B5 ?' V* M3 | for (size_t i=0;i<vItem.size();i++)# w$ t" f) C# {" g5 ]" k0 t
{
: I5 ?- [& J0 b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 w% v' ^0 u) Q# J. U: `1 G) B" j
pInvSort->Add(vItem.nIndex);
( L9 o, y- t2 x N- J: Y+ l2 o }' z: V9 s- }+ @6 F4 j
BYTE nDestPos = 0;
5 \* t' z/ P) i+ @ for (int i=0;i<MAX_INVENTORY;i++)
. a; z( m" D' m I, y% Q2 a& I {( W8 i% @/ g' C) D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& ?2 N6 d% U0 n! Q# Z2 I5 z
if (pItemElem)/ M6 ^* O! y* {6 s# ], C) }
{) g% K2 y% O1 A" Y$ ?/ a
if (IsUsingItem(pItemElem))6 F4 I! N3 [, v# S( q
{# c1 f4 x; Y5 F' Q
//这个位置无法放: X5 H/ \3 }3 `4 e0 }4 X
nDestPos++;7 B6 t4 E& y% r! G6 v
}! E; D( E {8 F7 o# b, O4 Y
}2 n7 Y7 o5 P8 h4 m
BYTE nSrc = pInvSort->GetItemSrc(i);0 Q4 P$ P1 Y7 x. a i' ~. J/ D8 n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) I. t; s E7 ~7 n; N if (pItemElem)
. ^3 I/ v- Z4 k. T! @! N {9 Q/ W: V. Q7 r, J
if (IsUsingItem(pItemElem))
" q2 P- j- P, [; x% R. a {
& s! J. W' a/ x1 ?* g. h# } K# h //这个道具无法移动,跳过( I8 s9 i+ s- T/ y( B& z
continue;: B6 z+ K$ f; ^9 i8 N, ~. k
}
9 ~! ^4 r5 i" G/ W1 k5 ~0 r5 ^( u* C }else{) d! ~+ P; }3 C
//空位置 不用动! Z' }! @2 T6 k$ X, L
continue;8 ~# k7 Y' M$ A( _
}
. a6 e9 o& d, U. Y# |0 k! D2 J //////////////////////////////////////////////////////////////////////////' ]" J# N( M) c* N9 p
//开始移动5 f$ u7 p% J4 d7 X* l% z1 F6 s% G' a
if (nSrc == nDestPos)4 V. k. M. l! [5 F
{
i3 p P/ T/ L //原地不动 H% y$ u+ Z8 O& l/ e
nDestPos++;. U0 v; p# d1 L$ N8 S* ], e# t
continue;
) e( X6 L/ Q) c$ | }, M' b* [: B& b9 s% t# N' q% H+ M# ]
pInvSort->MoveItem(i,nDestPos);0 f( ?4 }7 d/ h$ m& A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% f: u, J5 \1 [) S4 d
Sleep(5);
X* E0 u1 H1 L8 h3 p$ K% R) r, Q //Error("移动 - %d->%d",nSrc,nDestPos);
* g# s" `; B7 s nDestPos++;$ r0 a# b, d( L7 m8 r
}
* \ T# T8 o( u4 c4 {; P6 w5 T //取第一个元素的信息
3 E' Z( v3 [' [7 O5 n /*
% h; O( c2 K% H4 L4 H6 r' r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 c; p: @/ t% C' y {+ u6 o7 b+ n, s5 L! I7 u7 ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 }; D: y3 [( `$ L. T* M* _& J g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( j- D" S1 E" Q, P1 T }- R6 C* F" J& Y q# B6 j1 _' u
*/
" e* H6 E' k$ ?: E //////////////////////////////////////////////////////////////////////////
# ]4 C& r. U9 k" ?8 u' L! s break;
* `8 [) W8 \/ u! c1 G }
" i' B) C9 P% |/ P" g$ I* I+ E }
7 N3 F" m3 L* L w* {6 e J5 B) B}. r: K! M% t* ^2 @) y( r; W2 u& P; _
m_wndMenu.SetVisible(FALSE);
; c7 c3 ^5 t8 c' K! T7 }, p# j1 r6 I5 z
--------------------------------------------------------------------------------------------------------2 n0 `. D3 P( A1 }3 w# G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" X1 |0 z! g. W! A
{, T* U8 v& [& u8 l/ P4 Q- [2 G3 t) G
BaseMouseCursor();
) g9 C* G7 j+ S, Z3 j! g}
4 A7 B) g1 i& Y% F0 W3 n7 r+ J i5 S' E在其下添加:0 |9 B, q% C8 T4 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 }5 u/ D! x$ ^& c{# g7 u5 Q3 C n7 C& j4 x4 h3 _
m_wndMenu.DeleteAllMenu();) s3 B& ?# \3 h% q# C# M; c
m_wndMenu.CreateMenu(this);) X/ _6 f# T3 U: o8 n6 I z3 u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 ~! x& l1 a& w8 ]6 ]
" R) H u, |* Q9 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* {0 d- k3 G; U$ H{
! i- c/ b( J& z! h8 k //P以上级别才可以删除所有道具# u, s6 I, O4 J6 b1 A6 n& G- ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 W: W ]' h E6 ~( u}
3 e% q0 N4 Y& I! g+ B4 B8 jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 R u6 F. {% ~* B Q5 Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 h5 [( ~% z2 ]
m_wndMenu.SetFocus();7 p$ n6 b; a" d3 M2 g! y
}
9 v3 H1 A; U4 d( y------------------------------------------------------------------------------------------------------------
! W( ^4 _2 t, U: f* v*************************
6 G$ z, T" U7 \( ^( f( T% |WndField.h文件
- P, {" M, }6 n2 B% e5 [*************************
. T; R( u" b, c. C3 z0 t搜索:BOOL m_bReport;' q2 G# d( M4 T1 n; P
其后添加:' f7 h+ n6 z" v: L S# r$ `
CWndMenu m_wndMenu;2 P, P/ s4 M* N* l. u
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! U2 O6 }! o9 b3 y N
其后添加:
) A% z/ n q! q" s. Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);# z% k: z( g4 _2 G4 O
: \, e) {- S6 G0 V9 d7 L
6 J9 l0 ? c6 N8 [5 A5 V |
|