|
源文件中_Interface文件夹下WndField.cpp文件- S; |# Y3 D( f, g7 @% Z7 \# H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) @9 X$ x- ~% y
4 s2 r, n- J" d: \6 [
struct sItem: d* H( E4 O) c
{. E, j E# m4 D! Q
DWORD dwId;8 o* v9 F5 h: c4 {4 M x
DWORD dwKind2;
& s$ j# S7 H- q9 M# r+ |$ LDWORD dwItemId;9 O2 T/ o: o% T- \+ ?) {
BYTE nIndex;1 O9 Z7 Z& K, d+ x! Q* I
sItem(){
4 G" d: ^- T8 e" Y% ^+ G dwId = dwKind2 = dwItemId = nIndex = 0; n5 j+ w" J! H$ u/ q
}
3 g3 Y4 ?( p. ?bool operator < (const sItem p2), G) C) T5 F0 Z# ^3 I4 r' W
{5 e" R% _0 f3 R" w" _
if (dwKind2 == p2.dwKind2)
% h) c5 A6 `, K {4 I+ j( f1 h c2 Q
return dwItemId < p2.dwItemId;
! N) s6 d% n0 a! r }else{; V- L0 m1 e b
return dwKind2 < p2.dwKind2; F- r! q) n! e1 E3 b% T' i
}5 _+ p+ f( y( N1 i+ ^: U' r! K6 G
}
M- A: o: {( @0 ]};6 A F: J0 l- G4 {: T4 v' B
class CInventorySort
# u- l$ d4 a B$ D{
$ e; r3 s: a! q7 ]' c4 Apublic:
7 E7 M7 b3 K# Q& w7 rCInventorySort()
& Y9 o2 F# X/ l1 T3 U{
T' i/ V. G# W m_dwPos = 0;7 H% I) q; l6 j2 ?$ y& u
}( ]; w: r/ O( _ @; D5 r1 w8 O
~CInventorySort(){}
& A1 @4 r- y3 N5 ^private:
4 Z% Z# G% j& B" n. p+ ]- t# bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# X3 J2 u7 | G2 u) Y) I- [DWORD m_dwPos;1 B5 s; W; [. _7 G; ^( ~! Q
public:! O4 g( Q* y% B! s' n
void Add(BYTE nIndex)' l) U6 |- t9 k' H4 ?) i
{# Q, F4 _( ~) W+ f |; o5 `
if (m_dwPos >= MAX_INVENTORY)) A1 {, T& j8 S d
{
8 I7 B" `8 p L L' C# n4 \ return;
6 e f2 \; H& O, N }; P4 q& _& W" A) q0 x
m_Item[m_dwPos].nIndex = nIndex;% t: d$ _" X" Z; ~. L: v7 Y7 s
m_Item[m_dwPos].dwId = m_dwPos;
2 j7 R, l, C) Y* M6 ^9 H" b+ P m_dwPos++;
9 ?) T' V0 a- p S9 z1 e}( H/ r. P5 H/ @1 { Q* Y- L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' E" w( e$ Z. X' ]3 P$ k2 X
{; M( Q, O7 W5 w9 |3 A5 y2 b' z
for (int i=0;i<MAX_INVENTORY;i++)2 ^5 L t2 W$ r* d. ]) K: }2 u6 O
{) s x3 Z+ Z" _
if (m_Item.dwId == dwId)
. G0 J5 u6 s- j& U3 z {6 {6 H/ S4 Q: T; C& \
return m_Item.nIndex;
- i2 i& V4 H( @! {2 i7 v7 c4 X/ f L }
: R/ c4 X1 I6 ]9 G& m7 l6 ?# I" @ }
3 |( @) v3 {9 O7 V# j) p- H return 255;7 R3 D$ i" c$ u
}
( g( c2 p+ k! p" h$ D8 b% W J) Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 u" v! g* d- b
{
4 b0 s! y3 }! t. Z$ [) Y9 ^/ | BYTE nTmp = 0;/ l. ?! v3 i' }, e, M
bool bDest = false,bSrc = false;# b `; k6 _! P2 V# [: z" j
for (int i=0;i<MAX_INVENTORY;i++)
- f6 c9 B- T7 L1 l- S5 }% Y { b: O5 ?$ k) `, i; B
if (dwSrcId == m_Item.dwId)
2 D9 G8 G0 F) t {
4 ~: g, p1 \. n' o/ o! _( M# o //id相等 则 改变对应的dest和src$ _0 C8 ]4 ]! ?- ]3 x3 Q9 `
nTmp = m_Item.nIndex;
" u: `1 O8 d# k" u9 g- U m_Item.nIndex = dest;
3 M1 _9 s; F. x) j7 [3 {( B; {6 t1 p }$ H+ p* p1 M/ O3 j
}5 }4 v5 ~3 [& V
//临时数据保存完毕,交换开始, }' d2 f) U4 k: p3 M& a
for (int i=0;i<MAX_INVENTORY;i++)
; g* H3 E6 N0 R5 p {
. Q9 V/ ~7 ]) S% Q; N if (dest == m_Item.nIndex)
6 P1 j/ }# S) c$ W {
n' J6 S" X) A; S1 j- p //id相等 则 改变对应的dest和src: V/ t1 T0 N; R2 K: f' b8 x
m_Item.nIndex = nTmp;
! [) W3 K# C5 Z" M* {5 a2 ~+ q, r }
) Z# B8 E. n3 \; v }
- ~& k2 h6 G1 C7 K6 K% W- l}: x! [* _, n8 s( g2 a% d
};
6 f$ X7 ~8 {. \8 P8 U, ` B-------------------------------------------------------------------------
0 _8 o1 b2 Q) z1 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# W% U }7 l! B5 [& B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); H3 b3 Q9 P9 a9 U+ t& ]
紧靠其上添加:
% @# r$ k( Z }if( pWndBase == &m_wndMenu )
6 `& D, e! M3 x1 M3 Q9 U# A{
# J1 y) W j7 D switch( nID )
0 u' @; Z1 l6 D% _ {
8 G u' Y. g2 Z8 p case 2:
, i! A6 j/ O7 h% X% e- o s( J+ J: S0 k" t {
; a# I) M V7 u \3 o2 K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' ?1 W' l7 R3 f/ Z9 j( O, r# u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 X3 k! G7 v. w: [1 H0 G0 h {
. r/ X" z5 g8 O( b break;
. C8 j$ T! [( t$ c4 B }/ h; y; D6 J! q" n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, s V, R& T( K+ J {% t/ ^7 F2 x8 T, }/ B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ Z0 v" ^: r$ h9 i) ^% M8 Y0 B
if( !pItemElem )
' y0 J& X: u# Q0 h continue;
+ C" p9 y0 d+ I' T$ ]' }. w- n if(pItemElem->GetExtra() > 0)' w6 }% @5 ?. \9 S1 p* q9 L1 T
continue;& R" z$ R" l) y" k/ j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 |& Y9 D# b9 t# s1 {! e continue;' [# i% ?# k/ o$ h. m, m0 x; n' E
if( g_pPlayer->IsUsing( pItemElem ) ), Q, Z, @1 i1 j) ^8 D
continue;4 M) \8 w- f6 M/ m
if( pItemElem->IsUndestructable() == TRUE )- o; M$ @& J3 P# N0 R
{
8 ^0 A( {: r- Z& P; } s4 f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 a* X" U- I6 J. o! q" H continue;! n( A Q6 q- K4 g9 q) q0 R
}* e% O6 X F, O/ {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- g) D' m h: i, g2 ?
}
) O$ v9 \" ^& B3 H break;
2 D3 O$ T& H$ u( v" G% S }4 I' O6 _+ w7 R3 F9 h8 C
case 1:) L! H! K! N9 X# f
{( W( r% K8 X2 s) D
//整理背包
! y1 B% C, \' z z- s v/ f9 b0 | //////////////////////////////////////////////////////////////////////////1 f9 i+ W8 ?8 f( o/ e
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) {# Z! b" q# c$ E //////////////////////////////////////////////////////////////////////////& K& m. C3 U# f3 u' l5 |
//////////////////////////////////////////////////////////////////////////( g3 O! k( S: b; p9 ?
CInventorySort* pInvSort = new CInventorySort;
7 K4 B2 e, H' S& h1 v, e0 O vector <sItem> vItem;
3 w% g: E+ T, }& r6 |# h vItem.resize(MAX_INVENTORY);//初始化大小2 |3 I/ r) {/ l; Y Q
//////////////////////////////////////////////////////////////////////////
* @/ _+ \( ~; ]0 B0 d0 E) M8 w //填充数据" D! Y3 ]1 Q6 J6 N
for (int i=0;i<MAX_INVENTORY;i++) W5 i7 W+ |$ f/ B7 y
{
: H7 T" g4 S2 S+ y9 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
F E3 n+ c) V9 b- L& o- S5 t8 {) B; b1 a if (!pItemElem)
7 Y! B0 S2 h S {
5 [( B0 g5 ^5 {4 L8 P3 p vItem.dwKind2 = 0xffffffff;1 h1 h# x5 K& [
vItem.dwItemId = 0xffffffff;0 F$ q' }& z% [- l* D
vItem.nIndex = i;
6 P+ b V4 n0 `. J" Q* N }else {
- B2 m; B \# n, O- J- [" s ItemProp* pProp = pItemElem->GetProp();4 X7 G" [; N1 B- Y, U* N
vItem.dwKind2 = pProp->dwItemKind2;
1 Y: V( R+ ~$ |: t3 E+ @ vItem.dwItemId = pItemElem->m_dwItemId;
2 E( p% L" l; h2 q8 ^3 T vItem.nIndex = i;
0 S* o9 h4 C& u' X0 R& | }
; O7 u& f' }7 Y7 t* w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ y3 ]2 x2 e' n. i* L4 O2 Q1 h2 O. i }9 u9 b' k6 T' J: X
//////////////////////////////////////////////////////////////////////////; k0 X; o9 ]8 T+ N
sort(vItem.begin(),vItem.end());//排序
9 f! R$ ^# j( D2 ?- O //////////////////////////////////////////////////////////////////////////; B8 Y q( V& j+ c i1 M
//交换
; a- c& Z) p4 t. a; a; P for (size_t i=0;i<vItem.size();i++)
: B! D, m9 A4 p# |* H: B {+ J) x% D) C3 C) B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 \# O) A! m% m X# t
pInvSort->Add(vItem.nIndex);/ e2 Z3 h( U+ H8 m! d
}+ @6 f/ |" u/ ?8 F% A
BYTE nDestPos = 0;8 ~1 J1 w& ]4 K7 z. H ~* K
for (int i=0;i<MAX_INVENTORY;i++)
R0 [/ Y' O x% i {# l$ E: T# U/ W/ Q4 X" K2 L5 `- d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ ]# y+ N5 k5 {2 ?9 Z2 {) {* Q if (pItemElem)# i8 C* z; l3 h+ n; C5 E1 d4 t
{( Z i" n) h7 i: R8 l
if (IsUsingItem(pItemElem)), d; C5 X6 b3 [2 ]) v! z6 Y6 n4 ~
{
: c, I, s7 } J' N# T1 |- j //这个位置无法放+ B) L% `4 @- c, U: H
nDestPos++;( G5 g8 o& R( }
}
( a4 h; `/ n# [3 X# f, z }& |) h/ w! t2 m9 }# e4 C
BYTE nSrc = pInvSort->GetItemSrc(i);/ Y& U' R! K' y8 X5 L' K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 ^& n+ W7 q: f" V: t2 c
if (pItemElem)
; {! e2 ~/ n6 M; J. h& r8 R4 L {& e7 A3 o f& Y% y% }& f0 c3 f
if (IsUsingItem(pItemElem))5 N. y; I5 e) H* g7 A
{; g3 n& @6 k4 i
//这个道具无法移动,跳过% w. y" v+ x! V$ K+ l6 b
continue;
: ~: c1 c# R% `/ z# M }
) ]5 t0 y$ y2 e6 g/ ] }else{
( p1 H' ^6 D8 z7 H" c //空位置 不用动
6 p: b# F2 n3 a# l% h continue;
' T# e, q5 T5 Z8 m! D2 Q }+ o) b: z3 U( M- u! l2 |
//////////////////////////////////////////////////////////////////////////
3 K1 |! A1 D. K5 l0 P( f% z //开始移动
, B4 C+ } b& u0 M9 {, M if (nSrc == nDestPos)9 w! G! x" `1 ^6 O) I
{
: z4 s9 i g; z+ h3 {( J //原地不动/ ~: k+ H& f! T! _
nDestPos++;5 j0 F J( B2 S) ~0 | W1 N/ j
continue;
* r. L/ q- C& ^/ Q6 v1 e& x j4 ]6 u. N }% K1 K. A8 W* f0 @; I
pInvSort->MoveItem(i,nDestPos);7 J/ [ s I9 v5 }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 Z1 W: P" S, b' N* S( F
Sleep(5);% G5 W$ L8 m- {( b8 y/ H
//Error("移动 - %d->%d",nSrc,nDestPos);% S1 k# g4 d, r% q2 W& J$ s: y
nDestPos++;
. M: R7 l$ c K) @ }. s" n! t; ^0 ?8 d' O) ?
//取第一个元素的信息. Y# V# P' w' s I2 @# @4 A- T2 K1 z
/*6 C! y2 A" r4 I% ?! n2 Q( \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ E$ s3 L' R% Z% p4 o: M
{
6 c( v6 R* k+ r1 q. A7 e2 R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) g0 y6 I+ y: Q p% B6 ^ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 x" |7 X2 J% N6 z) ]3 v
}) B' N6 k- Q/ Z! o
*/4 C" b0 B! H$ i( F h0 n1 O
//////////////////////////////////////////////////////////////////////////& l( P# q& f$ ?' m1 ?% ]% M9 G
break;) J' T9 G t! }8 q9 }
}) v5 ?; b( i: F) C/ t
} 4 y5 ~3 a$ S7 s X
}
3 u7 c& E Y5 @+ e+ ]m_wndMenu.SetVisible(FALSE);
* z. D1 o0 v# ?; K2 K) f3 e
! @3 \" D5 Y3 C" E--------------------------------------------------------------------------------------------------------
- h3 ~) a) C% C: r+ L搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 z( |0 Z, u% U6 v1 g{7 V) b+ U& H8 I) j8 {4 V
BaseMouseCursor();* h) @9 H# Z# U6 ?2 n. m7 l
}/ Z4 t& \' g. n$ Y
在其下添加:
2 E6 K: X8 s8 z& s; ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% K/ _1 \: I# g{( b3 b5 L4 i1 A
m_wndMenu.DeleteAllMenu();0 A2 u% O: K$ c
m_wndMenu.CreateMenu(this);3 s: N3 V! j# Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" E, A# m" L0 V' ]5 q6 B7 T: h$ h1 q' q& L: u( b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 m+ M4 B: {+ O3 J" e; A{- H9 J' `4 B& G6 x; |, u* R: ^- ?4 O$ z
//P以上级别才可以删除所有道具
) K$ A7 R4 f% v2 W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& p4 C+ {5 i. o+ Q}
6 L; M# K! a: r0 j. w0 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' c+ x4 O9 }% P2 i% i8 q/ ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ L9 s T+ V$ L" N+ k: p
m_wndMenu.SetFocus();0 N5 {0 E; k/ X8 ^/ v1 j2 a
}5 u( X5 g; d7 ~
------------------------------------------------------------------------------------------------------------! Z* H* R$ V' F0 F+ y* f; @
*************************
' e( G1 s" ]7 @# xWndField.h文件
2 p9 t; C( ~+ b6 ~/ p: o1 G2 J*************************
/ f" J9 Q9 k' h( O4 X搜索:BOOL m_bReport;
7 W5 U9 T o2 [5 I. u$ P其后添加:4 Z' S& M& Y- S" s
CWndMenu m_wndMenu;
$ A0 T* A2 h- ^0 C% }0 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- V# T7 I1 N" z2 p
其后添加:4 k/ h/ r, O6 N" Y- h
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: F5 j H% P) ^6 `; h3 c/ d4 Q/ H5 _" x* x6 U6 i
* U/ ^. a& D" b: O |
|