|
|
源文件中_Interface文件夹下WndField.cpp文件
, n: ^$ H6 `: i& Z4 }& G& l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( A3 C- l0 |" \: ^+ _+ D$ n% f# k* O B
struct sItem
0 n% l1 }0 L& X3 M7 s0 T8 [' |{4 {) b K( u! e6 C p% X
DWORD dwId;5 d% p1 r' D7 ^5 k
DWORD dwKind2;
; m6 L" P9 t' X) |4 fDWORD dwItemId;
, `0 k0 W$ T4 J' YBYTE nIndex;
/ _4 |- P' u0 I" n) CsItem(){
( e' e9 j1 I, h: t" E dwId = dwKind2 = dwItemId = nIndex = 0;5 I' e7 a. j( X9 e3 O& T( Q% z
}& N6 d1 V) |9 [- ]3 }- Y. Q
bool operator < (const sItem p2)
; r* ]% D/ [. d{
3 k( f3 W# G$ v& } if (dwKind2 == p2.dwKind2)
) Y9 Z2 D! H' x, ]8 \( \/ W {
, @! z6 d. s( I( o& @3 Y return dwItemId < p2.dwItemId;
( y0 J1 B( r7 u, n- F, S) _, V }else{
}. n( P* o& n- p7 B& F1 S% i; d return dwKind2 < p2.dwKind2;
) e- M: n1 S. G5 r, F }% h' C6 i$ ]" G9 [5 C
}
% @9 a+ ~1 G0 m2 s};
& b/ Z E" }, Q, C2 {( Dclass CInventorySort8 p6 o% }* O$ A
{
; ^ Z) m% B* E0 Y5 Z$ o7 Npublic:
7 ~ W& \- V9 B0 W) P' [/ o; L, {6 XCInventorySort()$ G9 M) B( c! e+ {( `
{
' R# x1 n" ^* G: J2 X m_dwPos = 0;- Y/ \* W% ?' k; H+ _- M( Q
}
* G( F- s5 F6 Z1 |& ]~CInventorySort(){}9 X/ ]' e0 b" v N
private:' y4 e' K; M4 J' H7 w4 U2 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% z h. _ [, Z6 ]DWORD m_dwPos;
) f8 R6 l% y6 h1 Z9 [public:' w! D0 [$ ]- P& R& {5 h5 m5 p; m$ j
void Add(BYTE nIndex)( n( [4 b3 F. I6 I1 e) J
{: } X2 B4 M( t
if (m_dwPos >= MAX_INVENTORY)
6 Y7 K5 F7 a U, ^* L C& m- s: x {. U6 Q, d2 |) }* d- M: l' h$ O
return;+ Z, t" T ?7 Z D2 x+ |/ F
}# G& M2 y/ _ B! ?
m_Item[m_dwPos].nIndex = nIndex;
. C" b* d( e) h3 F' H6 s2 @ m_Item[m_dwPos].dwId = m_dwPos;6 o4 j. Z% a; X1 r% Z
m_dwPos++;
8 W& P% L0 E" v% U}
6 o1 k3 w! {0 VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 j8 n' {0 x2 t/ j! u{
1 m1 ? C; d6 x1 b for (int i=0;i<MAX_INVENTORY;i++)
w8 K- T+ p7 h {
0 x+ a; c" M( R1 e1 ]4 ]' x if (m_Item.dwId == dwId)
( P" g2 c' L* R2 p. Y8 w$ Q. Q, U {
% |- h" l" M- S1 }. O return m_Item.nIndex;
9 |, m1 ] e9 W" v- m/ k9 T; k C }
! F3 |6 b, Z+ N9 n8 Q% a0 L) o }
: l" \5 N6 i: b' ~- {/ G$ d- S return 255;
0 b3 q% q1 C+ W" l) y}
: r2 e/ N, l9 y2 Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" @) ^) _' R: W# J( a. h' a7 {9 i/ T{
2 u% O! W+ S/ H BYTE nTmp = 0;6 }2 [1 i, s6 P! G2 i" m/ q
bool bDest = false,bSrc = false;5 i6 v w: y% j4 l( x8 n
for (int i=0;i<MAX_INVENTORY;i++)* @* U- X2 k; T: I) l
{* P# K. [' L: M0 m$ h1 \1 A
if (dwSrcId == m_Item.dwId)
7 I+ T. r# q6 g1 d: z {
' h, N8 o/ B( e' U/ ^ //id相等 则 改变对应的dest和src
: m1 U) p: {+ O2 d- h; S4 T nTmp = m_Item.nIndex;
4 `: r; P5 F" _# S$ S2 K8 i7 d" M m_Item.nIndex = dest;
' o" {2 {% @- M }# Z4 R6 j5 _1 h
}! w! F5 _6 W- c# w, z0 k% `
//临时数据保存完毕,交换开始" O; W- a! ^$ Y- I/ j5 q4 m
for (int i=0;i<MAX_INVENTORY;i++)
* a/ Z9 J6 e2 y# q k k+ u, g {
- e% t: R5 R6 h, m+ r if (dest == m_Item.nIndex). h3 ^5 z, P* L% e, O
{7 S' B+ v8 k, L0 J* V! X
//id相等 则 改变对应的dest和src
; d) Q. g; x2 m1 o! J5 H m_Item.nIndex = nTmp; g0 O3 E3 h1 X2 L4 q% R8 b" U
}
+ S6 A: [( h/ Z }
/ E `! T' @1 K) Z}
; F* e9 f% q6 G+ K8 m8 `: w};
) R2 h# Q6 a: m-------------------------------------------------------------------------
: m, U% B8 Z" k5 }) x0 _! i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 o& D2 u. b/ A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ d" y! m2 n9 \' P5 i紧靠其上添加:. n' V: V& y) `) o0 M0 i& A2 X
if( pWndBase == &m_wndMenu )0 o4 S3 P" u5 O9 t1 K, T
{# D6 l! d: n7 v9 `
switch( nID )& a. o1 b3 R" ^, S# s' h
{
/ ]% P& E7 X) M0 x- T' O3 U* L case 2:
* T7 _2 K- v% J5 k {, t3 Z1 e+ c9 B g7 n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' Q' O6 L0 r4 N7 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ a2 k* |" I0 E& m% V7 O! N
{3 A) |( q5 j, ]# S5 i3 G, d
break;
$ A* |- y7 w6 V/ @- ?2 ?) ? }
6 L2 ^$ _" s( g; @9 u+ K. \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 u2 @/ }( S' ]: l& H$ W {
. S6 r# M; x1 {+ h9 L9 y' p% F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! F; R& ]+ |" t1 K if( !pItemElem )3 Q8 u/ m/ o- L1 ~" x
continue;- H- M0 {* n. L' \, Q0 I: g
if(pItemElem->GetExtra() > 0)
/ D+ K0 a5 p" `6 @ j- K( V continue;
" s! r G: e1 Q5 i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) K, z* l6 W( `' q4 e6 ?* ~% X continue;+ j& Y; |1 ?/ E) q7 \% ~$ `! ?! m
if( g_pPlayer->IsUsing( pItemElem ) )( p# h/ K; l9 V8 [
continue;
: l. Z1 z' `0 C- s) F if( pItemElem->IsUndestructable() == TRUE )
8 [1 s* O/ j$ [( ^' p {
8 L- A3 w% z) W* _; i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 Y! [ k+ Z" }+ w# x ] continue;
B- d- o3 F& M } \$ R, P3 z3 M4 r% Z" R7 j- I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ m' z* H! D* ^% u8 N- e; H }: ~' B0 d# f7 R! o% Q- ^
break;
! d5 Q) E x' w }$ r& N# u* D1 f, m
case 1:9 R3 ^+ p9 u) q2 ]/ J/ ]
{; J/ Z+ N. Y/ }$ x3 G4 S/ b5 b C
//整理背包
z6 X9 w4 ?3 \' G //////////////////////////////////////////////////////////////////////////
: r2 _. @( R. o5 f$ I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 {& _9 I! X- R3 ~1 K/ u; @
//////////////////////////////////////////////////////////////////////////& B" o* |9 y, l1 k9 X
//////////////////////////////////////////////////////////////////////////- t% {) [8 d6 l& ]& N
CInventorySort* pInvSort = new CInventorySort;
3 Y' t& N! R: k6 Z vector <sItem> vItem;
% }6 y$ G6 H* [% Y5 V' q vItem.resize(MAX_INVENTORY);//初始化大小
5 L5 ~7 d; x% [4 u% e //////////////////////////////////////////////////////////////////////////& y0 X0 S$ E0 e7 I/ p! D1 @
//填充数据
# l% j ]! F; r- O0 V6 ~ c for (int i=0;i<MAX_INVENTORY;i++)9 _/ N" w! L% O
{0 A# {+ M) s b; _6 j$ \* e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- L5 J, ~4 l6 j# f) Y- N* D
if (!pItemElem)
# r% s& A. R6 Q' a0 y! `7 | {
: j) O2 f* n. K$ G+ G: C' D vItem.dwKind2 = 0xffffffff;, A0 O1 a4 v4 f
vItem.dwItemId = 0xffffffff;
% ~. h* w8 u4 ~! s5 e vItem.nIndex = i;
9 a$ }- t; d. q2 g {7 \1 i2 z7 q' s) I }else {
' z# [7 k6 [& f8 a; m8 h+ K( g ItemProp* pProp = pItemElem->GetProp();/ t) A }- M9 z' H- N
vItem.dwKind2 = pProp->dwItemKind2; K6 m" O$ a: M1 K2 n8 m; C8 S
vItem.dwItemId = pItemElem->m_dwItemId;6 |, B4 K! \; [7 G9 G* e: s6 ?: b
vItem.nIndex = i;
. z8 O! f! L( i% N9 ~% g. W }8 [/ o8 Y* O( P. r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# |/ z3 X; l, T+ q9 g/ r: u
}
/ u9 R1 f, m6 R, E& R& }8 [" T //////////////////////////////////////////////////////////////////////////
d- d7 q$ |+ x0 i7 k" F2 r& i sort(vItem.begin(),vItem.end());//排序/ |) W, A: C( K$ T5 ~
//////////////////////////////////////////////////////////////////////////$ W, l6 _4 t7 n' T3 j8 V0 v7 M
//交换2 [, q, s+ `. S5 j9 J4 G
for (size_t i=0;i<vItem.size();i++)+ M& M; s5 |2 _ O: L; O7 I2 x
{
0 }- w. y6 J+ L# D( [( R3 E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% m/ R% p% Q2 ?3 H0 u
pInvSort->Add(vItem.nIndex);) x' `7 C% B$ x
} ?1 X/ O" o- V3 L# `
BYTE nDestPos = 0;: v2 m% E* o. e
for (int i=0;i<MAX_INVENTORY;i++)
3 p) {4 `. c* d7 l# w2 _; ? {
/ H b# X& O1 u; ]( I7 X6 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ r! w2 y" u |5 z; e
if (pItemElem)
& c! o, D' X+ ]7 h8 r {
* r2 N% }$ w Z$ ^# Q9 v6 ?; I if (IsUsingItem(pItemElem))
2 q; W4 o) i# z6 G: g& E' L; F% @$ B {
( U( @9 [5 [2 [4 x. j //这个位置无法放+ F( H5 p6 A# U. p" I
nDestPos++;9 T2 _! l# |. u! n4 I
}
& m! b/ ]6 a0 L( O7 h' v6 M }1 V+ ^* h# s0 V: i
BYTE nSrc = pInvSort->GetItemSrc(i);
9 j" V) z0 G |1 K, l6 V7 q' q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, S* U8 p& U, f5 y/ E z2 d6 ~( r
if (pItemElem)! \! i O0 {, ]
{: M; W- ?, ]" E3 K1 t, w' b
if (IsUsingItem(pItemElem))4 W2 k5 a: f/ k5 A8 n O. ~+ J2 L
{
: x& F" Z1 c7 R- ^9 }7 _ //这个道具无法移动,跳过; ~* P, ?1 e% O: `8 B
continue;
0 w6 C# {- {( X' o# P }
; H5 Z( |6 d" {, T }else{
& x4 {: x @) b$ `7 d //空位置 不用动
- N( `8 a5 C- O( N( z3 A# O4 V5 A continue;
* V1 @* @2 j2 Q; K# j2 n/ x/ \( V) W$ J }* H# L8 f$ H! H4 F! i; Q# s
//////////////////////////////////////////////////////////////////////////
8 a2 f9 p, B6 ^& d# Y //开始移动( B* P3 V% _) a* x/ N/ t. A! ]
if (nSrc == nDestPos)$ T% q# i! R2 P
{* @! l v2 n. b) A0 M1 t
//原地不动9 @& Z$ _3 J2 A. y
nDestPos++;4 v# n- `+ U# D# f$ {9 k4 C
continue;
3 R- L: \. n! @9 h" Q; s* ~ }
( ^/ Y/ ~* V) G pInvSort->MoveItem(i,nDestPos);
' g) t! f7 `# Z5 j+ l/ `, S& E# k$ U/ K$ V g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% j" U$ }, T% N5 E, K& g! [ Sleep(5);
0 |) P) Q* p% O4 E. K7 w //Error("移动 - %d->%d",nSrc,nDestPos);
, ~: J! J E# e; b8 @! l; p nDestPos++;
. V8 J- q( Z0 u# j1 Y2 x0 G* `+ F' \# t } z: I1 h2 g0 `/ U; f; m* H
//取第一个元素的信息9 @. L/ Q% ^9 e- e; ]- |+ U
/*6 H; Y( ^- [, n" h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 V; P1 T* q! p& U! W
{6 X! u' m$ f" \" f& i; a0 T8 X7 {. B
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) c2 H4 m8 b9 w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; g0 g8 n& S3 E# Q
}- R* r# d. p3 `3 K3 l, y
*/ L. Z! k4 z8 ]3 `' M& W
//////////////////////////////////////////////////////////////////////////2 h) [* m4 Z' @! a
break;2 ^" b+ S2 Z: n
}
/ p- r: ^/ Q# _, \) T D } 1 u4 h) u" M& B) @* [) d) w0 \
}! F2 J# w1 z8 f. b- s! M
m_wndMenu.SetVisible(FALSE);# ]4 b% E! L% z2 {+ q6 v
+ L0 a) @/ j3 ^4 |2 j! M$ E--------------------------------------------------------------------------------------------------------
6 g, s J5 O8 U2 y+ c6 |0 N' ^: o( i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- u( h& A1 P4 E2 u2 K& X
{
! i, U5 m2 I1 B- HBaseMouseCursor();% Y% @$ ^0 S4 D; P
}& E. }7 R7 L Q* J' y5 _* F
在其下添加:
5 W8 L4 a- Q8 v! h$ ~$ tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ c4 ]( Z# s" \1 |7 J& j3 X{
9 g: w: o. ~2 z" R. e" Sm_wndMenu.DeleteAllMenu();+ ~! C* D" h9 J; N$ S5 _. ~5 ?. Z
m_wndMenu.CreateMenu(this);9 R; H" s, E4 G' O# @/ L* B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 s C' s1 {* M1 w. T% c: r
% b$ B! k9 ~5 l2 p8 |! `- B: J5 _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). T# _ V" H5 Y3 `- @1 v% N
{
9 k" ?- F* d6 i" c //P以上级别才可以删除所有道具
+ p7 Z# t$ E( w- t0 N3 W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 k! B/ y0 }1 F" d
}
! q9 V6 M& E- h" o2 pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) x( d! Y, d9 n/ {& e% P7 Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# s# T! [, g$ G8 k# X
m_wndMenu.SetFocus();
2 H) G5 t$ ?* ^+ x* u}" @2 d% \ U; X q8 ~3 A+ j/ d
------------------------------------------------------------------------------------------------------------
: R O, L2 c. j, X! O! H*************************- _& Z: _6 Q; \' s! T
WndField.h文件
9 {# l/ G% ]2 T$ h*************************
x) ?% ]: b, }- t# \搜索:BOOL m_bReport;
3 g* _( ~4 c3 E. ]" p$ C其后添加:
' w3 @$ w& H5 m1 GCWndMenu m_wndMenu;9 H" I3 W4 h2 r* E0 Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 J2 J) M1 S! ]3 E+ K7 e其后添加:- V% B" D6 N) X" B2 N' j/ C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 W4 o$ ]# M, u5 x% |2 c/ v8 L% {+ P4 c8 h$ R3 k
3 y: k( x0 J6 R' @7 z9 r0 f |
|