|
|
源文件中_Interface文件夹下WndField.cpp文件
! Z0 B3 W0 f" k7 C+ L- H$ O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- \" W( f: B: M" F; x1 z
/ O+ U p; c; Jstruct sItem' _) r D. g3 T4 h* w2 D
{
( \; I( e a+ [$ _+ J4 p3 hDWORD dwId;. [0 H+ W6 [4 T
DWORD dwKind2;6 o4 @9 @* R+ w6 r! H
DWORD dwItemId;3 s& ?4 n1 \* F: L
BYTE nIndex;4 J6 l L8 N+ S2 @$ m$ y. z6 @
sItem(){& z" s. u8 h5 K2 K
dwId = dwKind2 = dwItemId = nIndex = 0;1 `. B) j* G5 c6 k4 ]) ?0 \: v
}
3 n4 y9 ]) B" q0 F8 Wbool operator < (const sItem p2)+ U: L% H) c& v6 E/ ^; L3 X
{ n( P& `' T! [* B D/ d
if (dwKind2 == p2.dwKind2)
! B0 n1 ~- a# K" y* j% V) J6 _ {8 s; g) y4 A2 \0 h6 H, g8 Q
return dwItemId < p2.dwItemId;
# ?0 S- M5 A1 G8 d) U& \) @: E }else{- J+ u" z0 \7 ^) o& z
return dwKind2 < p2.dwKind2; N9 e( i- B9 M
}
$ h5 i' T! e( K! K% u}9 u& C" O/ m& |5 j+ q1 \6 W& z0 B
};5 m/ g/ V8 s; ^! b: D1 a6 G
class CInventorySort7 z2 Z/ v, S% ^
{
7 ~$ d- r- f. ^0 D5 |* {public:
0 U4 {7 G' z x9 U( @* x4 \' n. qCInventorySort()# e/ U% s8 ^9 D. E: T& P
{
b6 I( u$ _0 H7 Z m_dwPos = 0;3 b2 e9 I3 q1 `1 P# ^; l+ S
}2 |1 w9 N X* F1 K Z9 a
~CInventorySort(){}4 e) p% U4 R; g+ m( U
private:
9 V! N7 {6 E4 p8 I+ [) ]% QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- f. j- Y3 V) E) @' iDWORD m_dwPos;
4 G7 @ x$ _+ G, |, |public:
5 {, c$ Z3 v$ h+ a0 e Bvoid Add(BYTE nIndex)
^9 i/ l6 t- r0 [* T i- I+ S* X{, C+ i/ r' j% k. }% w; Q
if (m_dwPos >= MAX_INVENTORY)2 H4 _, B5 A: l% h6 z3 p
{
5 l8 }5 {: F; Z" Z, `& t) }4 W return;
6 ~5 ^& n/ e9 Q: M3 S4 j } l4 k4 m* {4 u" ]
m_Item[m_dwPos].nIndex = nIndex;
$ B- j+ h7 F* s! H! v! s, ~6 w m_Item[m_dwPos].dwId = m_dwPos;
! r/ S7 g# e, ~# D& z. Y; y m_dwPos++;
2 T/ r7 I, \) W& Y. f* d1 f} @( ~/ S' p& E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 ]6 y5 H5 E6 W% j2 ~- U6 V& O
{
$ A. g$ U! I3 ]* r for (int i=0;i<MAX_INVENTORY;i++)* \5 ?' P2 t8 m% y$ Z
{
6 ^% P/ ~" n7 M* O5 U- ]& N; w* D: f if (m_Item.dwId == dwId)3 Y, B$ Q0 C$ a/ X% T7 o! ]" K1 r
{
, r, U8 w$ o4 F, | return m_Item.nIndex;/ i7 p( ?9 [/ l
}
# p+ R* [% m: k) q }# y- o* C; I8 Q7 A0 |: A* K/ f2 A7 X& P0 b
return 255;8 n w3 j, z6 t5 t1 k0 k: e4 w
}
% i8 o6 U0 S- G0 H x, z" svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, j4 R7 R" [/ ]. p{+ f8 q' ~3 G; p) H' T8 I$ H/ |
BYTE nTmp = 0;
+ s- l$ c! ]% ?% `/ ]# A( W1 N bool bDest = false,bSrc = false;
$ n: h$ |, S% n! Z. z7 n" [ for (int i=0;i<MAX_INVENTORY;i++)# j7 F+ a @/ z8 z7 k
{
# J' c& k! j m! f2 S+ j: s( r/ ?$ T if (dwSrcId == m_Item.dwId)' ]/ O( P) G. X0 a7 u8 m
{
7 a5 U. I7 P' W" B //id相等 则 改变对应的dest和src# l; I& y3 H1 l( b' a
nTmp = m_Item.nIndex;
' H& T1 d9 ^+ m- d9 W m_Item.nIndex = dest;
1 @. W$ ?: G% [: X1 e' C }
1 W& m& e* |9 R3 b. f3 f" J% t) j }
# w$ m9 O0 A" q8 J+ [ u% \. X2 a //临时数据保存完毕,交换开始
! `0 m7 V/ h Z for (int i=0;i<MAX_INVENTORY;i++)
8 U- K! u% o, S6 T8 N" R {
2 K6 j0 Z( Z- Z if (dest == m_Item.nIndex)6 M6 x& C: [4 T. @' @3 b8 q
{3 W9 B3 ` J3 j2 z, b; `' O
//id相等 则 改变对应的dest和src
% Z2 s$ a8 ]/ I$ N# |4 u# y m_Item.nIndex = nTmp; U; A5 c( P# [4 r* v: A
}3 i8 e. ^: Y- e5 I0 M% h6 t. ^2 ~
}
* |0 t6 U3 {2 y+ x2 r* ]- t7 M}0 B) }' R7 a. Y4 l* a; W" `$ ~* L
};
, _/ B, O: _6 k+ a% p-------------------------------------------------------------------------% j0 C- v7 p& v) E/ C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# R8 f2 D4 X' q# [. k% e- K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' M5 R3 w3 z5 r6 b紧靠其上添加:
- L0 A* [% n9 ~3 B9 Iif( pWndBase == &m_wndMenu )
* T; \5 R/ g& w: [{
$ o+ }* N9 e6 P, ]" ?& p switch( nID )+ z* g A8 m' w+ E5 h/ J
{3 X: P/ w9 n! `2 f) `: u. n
case 2:
3 r2 e3 C2 M& c5 k# R q' V8 } {- \! \# ?0 v2 _' C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) `6 u, Z. x/ N1 {- L if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# x9 d$ j- X: ^: X0 n& }5 S- R {& Q* S- R; i' f9 n& s( j3 _' |
break;3 d. G2 z8 Y5 t/ s
}% N4 v" @) @1 K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( R5 C9 p8 f8 S5 u+ k7 I9 x {
- _# M9 S' x; Z! U0 |) J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; D5 l# ]% m8 H' R if( !pItemElem )
5 ]$ b4 o4 T5 | R continue;
; G& e3 H4 J/ E$ P if(pItemElem->GetExtra() > 0)* w" i; u% F# F, L+ q" N/ ~) N
continue;/ a- c" B" [0 @& L( B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : G( a% t4 t) y, }" R) S" w
continue;
1 |* \0 e; \! e4 F8 ^7 k, M if( g_pPlayer->IsUsing( pItemElem ) )
, k. Y z& ~+ `* _6 c& h5 V continue;3 u' |7 R7 p( S7 F
if( pItemElem->IsUndestructable() == TRUE ): I: N8 U. F! w" W2 K: ]- _" p3 A
{. K+ p6 E& G6 \8 A! ^ ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 Z9 G1 n9 K) } h$ Z continue;2 H% j' b6 r' }
}; \6 {8 \% e: k9 ?; m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 I+ h0 G8 _# `3 u4 ?5 B }$ s1 [4 I @) T0 Q; v' i
break;
4 J. I: d ?: |% E }4 w7 i/ {3 [+ P% L* ^
case 1:
$ ~3 ]% a8 A( d {. k4 U! F/ X5 _- z
//整理背包& ^2 p) p9 z. b, B% Z
//////////////////////////////////////////////////////////////////////////5 ]8 y* U [7 e7 [
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, h$ f9 y! X2 {% @; z& e. C
//////////////////////////////////////////////////////////////////////////
* w& c. d6 Z: U //////////////////////////////////////////////////////////////////////////: W' V9 w% I' ^& s9 h& @1 O4 G6 r
CInventorySort* pInvSort = new CInventorySort;
: O, P! Q ]8 L- b vector <sItem> vItem;
5 g3 w; s" Z3 c; W' {/ o, n) z* h/ l. } vItem.resize(MAX_INVENTORY);//初始化大小
; v8 f* o8 B% r7 s9 j6 e //////////////////////////////////////////////////////////////////////////
6 z( r' y4 d1 Y0 j) W //填充数据7 _1 v y7 {7 I+ d: H$ I
for (int i=0;i<MAX_INVENTORY;i++)
( S7 B/ ~( E/ W8 e' ?' D9 D {+ D" ?! `) P- m6 Y3 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) Y' S" \9 _& D* V+ r+ U+ \ if (!pItemElem)2 h1 G3 q/ E7 C# s, R
{6 R3 M0 Z5 l" n. f7 a; h
vItem.dwKind2 = 0xffffffff;# m* G `# J8 Z, e
vItem.dwItemId = 0xffffffff;
1 v0 k1 F' E% o! h+ X- ] vItem.nIndex = i;6 N, `4 V# _4 S1 ?) |7 I3 h
}else {3 }' X; a3 ^. {' `9 B
ItemProp* pProp = pItemElem->GetProp();
* i0 Z/ J# k) g* N vItem.dwKind2 = pProp->dwItemKind2;
' o& e& s7 {/ I9 Q% E vItem.dwItemId = pItemElem->m_dwItemId;4 c! f2 T6 A* `. u& Y) I7 Q
vItem.nIndex = i;* x' E4 D! C y) L2 d0 A0 R: D
}
+ n: C W0 Q$ R) v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. Y, ^7 J2 Z7 J+ W' e: n }
$ }: {% g" w S& T3 ~. ?4 G) l" c //////////////////////////////////////////////////////////////////////////6 g/ z* a1 K: c7 z
sort(vItem.begin(),vItem.end());//排序4 S& ] |5 I# k) {# b
//////////////////////////////////////////////////////////////////////////
4 K, h% m" \$ ?6 a# O //交换( U! y6 d/ C3 [" F
for (size_t i=0;i<vItem.size();i++)
- y2 G$ i: o$ c, } {! d/ g: g" M/ _- _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 z5 q! ?; @1 [- x! t! a. `1 m pInvSort->Add(vItem.nIndex);) z. X9 \% k8 D: b' F- \
}' }# `$ p( t$ |1 s3 N& A8 B# w
BYTE nDestPos = 0;
0 r# q; ?& b: w) ` for (int i=0;i<MAX_INVENTORY;i++)/ i. T8 I4 I/ G& B
{0 O. l. k4 m2 C4 }4 F5 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ l1 H7 c% }3 h, V4 z0 o
if (pItemElem)
1 J# B' f" G6 l+ N$ c {1 v* Q9 p- y& @5 N% P! h$ I" P
if (IsUsingItem(pItemElem))
& e+ W/ l# R, C# i& X {/ z+ \+ H3 j: E9 q8 l
//这个位置无法放
6 e# V1 u: i8 {4 B! u4 v nDestPos++;
* Z2 K* L M1 L: l- S% V }% r6 D- _) g1 T3 e, p/ c: W& d* C
}
! I# v6 R( o5 v% ~/ V BYTE nSrc = pInvSort->GetItemSrc(i);
7 X" z) I1 q0 N. X% ?4 U" @+ l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 S4 d( Z3 F+ S2 J- L0 s if (pItemElem)
% w0 j3 n9 D+ y6 v( Q' x M+ D {
m! P& r3 C% s if (IsUsingItem(pItemElem))$ W& G7 r' P+ ]/ i2 l7 }
{* ?6 t6 a* b, Z! H& A
//这个道具无法移动,跳过
: ^( h) Q" ^% y+ g continue;
* v W2 w- L) S l }; ~- {8 S/ w% F0 S6 @
}else{- l' y8 R4 T. S: U7 l' C. @1 z
//空位置 不用动
+ G7 D6 r, O1 }+ l/ c. b! y continue;
- O6 B8 }2 I6 q9 j9 z1 i9 e }8 c* q1 ?( ^( I0 c2 r$ H Q
//////////////////////////////////////////////////////////////////////////7 k" N& \6 X( \$ c* [
//开始移动
; ~; c9 w5 o4 R- T D/ @ if (nSrc == nDestPos); [3 \! d1 Z2 O2 Z/ g; }/ V
{
0 }1 D7 M, j3 u% p8 [ //原地不动4 r5 {; f: L. M% k4 |& {
nDestPos++;
$ L& j5 d4 A2 X2 U% f9 | continue;
8 b2 C. z4 C0 k }1 v. L B& v* k# R; j7 ^: s
pInvSort->MoveItem(i,nDestPos);" O( Z) ^1 |( y" {: z. ?: H; h' }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 k2 Q* @4 O- Q Sleep(5);) K( }! K+ Q+ t$ s- g) N, f
//Error("移动 - %d->%d",nSrc,nDestPos);
! n! Y2 q) ?, T nDestPos++;
4 s3 n# Q) m5 c5 m% J" i; P+ s }
: ^& r; Q/ T2 }5 I) {2 x //取第一个元素的信息
$ I3 R/ j6 C% l6 ^" j0 x4 C /*9 o, m2 L' k5 F# j! G Z! G B. R8 _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# n: N: W$ b( d& D0 `
{
# U3 N( a" `& \3 R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ D n7 [+ G+ R+ {( ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); ~, d( |4 s. l2 A
}4 `2 `, U$ i- r6 g0 J( D/ O- F
*/- F7 _8 R' V1 `, y
//////////////////////////////////////////////////////////////////////////
, |5 p5 r/ z' u! U& S4 _. L$ j( r break;
2 n$ r7 j5 S( y( B" K" s0 [ }2 L H% U* U% ]: U) i! l; k
}
5 A7 u6 |- W* S6 o8 v1 C1 c% I}' A/ p! d5 J3 W& Z- a( F: l
m_wndMenu.SetVisible(FALSE);
; f0 q4 f) _( }- \4 o! D" q- l' \
" u9 h p" B; Y# v0 p& x+ D! D--------------------------------------------------------------------------------------------------------
: w" l- l3 h( c2 Q' M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 S- i: ]7 c% u+ U- ?1 \
{
% N, c. S( s3 ^, JBaseMouseCursor();
. z: e; w6 I, @}/ W6 M/ W* e5 j) @ O
在其下添加:
% y; j/ h% j0 s# q1 _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 A( z9 m, O2 S3 m, s
{
5 J4 b" {7 j4 ]m_wndMenu.DeleteAllMenu();
2 s& Q- F/ p& Z& v. um_wndMenu.CreateMenu(this);
* A3 Z8 k E$ Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 A) r. {1 ]( \1 C4 S; H+ q% D& {
4 w2 @6 ?% V& ~. R2 Z. zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 ~4 |6 Q# m9 M9 q& r4 ]$ z
{9 r) D0 x% I6 k9 b! e
//P以上级别才可以删除所有道具
6 t; T! [& C% C( p$ F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 C3 ^4 Z, N" P! e6 A}) b8 H; L5 t7 B( r3 t r, s" E) G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% q4 W% E' x( U& f3 F$ ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: k* S( n) t$ F: i2 S2 {; X% o; @m_wndMenu.SetFocus();
! c) b _- P7 b- M' |, [& ]}/ w- j; V) O4 v; z
------------------------------------------------------------------------------------------------------------9 U J& X4 t% `+ t* H" t- m
*************************9 M% n9 R* q# P# q, |: z
WndField.h文件
/ F" v3 P% Y7 y1 T$ i4 g*************************. ?6 L# b: f7 x( b4 U, ^- g) a! }& y
搜索:BOOL m_bReport;
. S0 X2 I& z" Z- n! E其后添加:
& [# P" ]3 v% z2 J* o0 [CWndMenu m_wndMenu;
6 _2 {, p5 M' R' C% p( Z0 I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! K1 m$ A: G# e$ V& r6 y8 A( t
其后添加:
2 w) C1 v0 W0 O5 _( l" _! Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);" ], L4 V3 Q4 c* n( P/ s
: \1 ]. {( S# y( n$ l" l- G, E4 x4 L* H% j
|
|