|
|
源文件中_Interface文件夹下WndField.cpp文件
, }+ @- Y' Q. C# T# h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 \: s- ?. g. f% r) e" T
% o" R! f/ u; }" B/ \
struct sItem# h( R) x8 r8 z3 d5 }3 H5 R" Y
{; k9 M; f r3 _4 R5 d( J3 r
DWORD dwId;
) z: x: A0 a; t) H7 W1 L1 gDWORD dwKind2;
4 C/ K" e( S. X D# K4 ]DWORD dwItemId;
. x6 [1 _7 i- G6 m* h4 {/ p) |4 JBYTE nIndex;
) p0 O! w' o7 W9 O/ K! x* Q1 hsItem(){+ c9 N, ?9 X, c$ R' A" w( y! i
dwId = dwKind2 = dwItemId = nIndex = 0;+ b( @, s6 J# ^/ A+ ~8 [- O- z
}$ C4 W, s' f4 j D. Z
bool operator < (const sItem p2)
+ {' Z3 n* F/ E$ l5 Z. [{, x% o4 q) {$ k: ^
if (dwKind2 == p2.dwKind2)( Y" r! P8 j6 T! l L, q3 s
{0 N# [7 U: ~( m# l8 ?" c& b
return dwItemId < p2.dwItemId;
7 I* x3 ~3 o6 l" K t4 v }else{
) B# p% w6 U5 `, {: \ return dwKind2 < p2.dwKind2; s/ z1 A1 O) b5 e, X" f
}
* m* `0 I5 x G* d}
, z A& `1 j7 D+ {};, m& B( G+ p$ F5 T; W0 ?
class CInventorySort$ ^6 \: u7 X9 ?# J Q3 s3 u1 ]
{! [1 G7 _, u1 N7 b+ C' ?0 `2 ^
public:
9 l. Z6 m+ m/ l' ` x/ [/ P5 ~CInventorySort()
: [: u5 X: n0 o) `{" i1 n! _9 g# Q$ ]6 B" l! K. t4 t
m_dwPos = 0;
! \8 F, J+ v2 x8 _}
1 q2 a: c9 z+ i a5 m0 F~CInventorySort(){}' m; D7 T0 C0 C: t
private:
( i1 z, d& ^9 w* W1 N3 P7 zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& s( O2 \ ` b TDWORD m_dwPos;
) {& w1 U. P) F4 U) \" \5 Y, lpublic:5 A s( {' u! o
void Add(BYTE nIndex)
0 h e5 s8 c' u* I{+ Z% H, ?! V( l( n. ?8 @: n" |" \
if (m_dwPos >= MAX_INVENTORY)1 Z2 V; R5 ~, e& K8 r: A
{1 D% i4 I* h# i% ~: e! d1 |+ Y- @, s
return; W$ ?6 H" U4 R: e
}: I$ C" j, r7 u, H! |
m_Item[m_dwPos].nIndex = nIndex;6 D0 @+ {. \. C" J4 ]( ?
m_Item[m_dwPos].dwId = m_dwPos;
# p$ p# _: ]/ w, i R/ Q. E9 \: i m_dwPos++;% W. K- E+ S% ?" Z$ ?
}
1 r2 h+ @1 T" x' O/ c. A, b; {! G7 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. i; O! [6 a2 E0 s9 O) G$ E{) I1 j& ~, M! \3 u. _' W% @5 g* Z
for (int i=0;i<MAX_INVENTORY;i++)
# o$ }; L( F! i# @ {5 J; B# I1 r% B' M, e
if (m_Item.dwId == dwId)2 d: z o5 ^. M k M8 j2 G
{
7 K" u6 h9 M9 r return m_Item.nIndex;
4 |& r0 |9 X; g* j0 o8 _ }9 p% a$ H; F$ i4 C7 x
}7 t4 E* N( |5 Y& H+ z
return 255;
4 Y4 G4 b U. u% a}; `* j" l. M' m& c$ T( b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ |- M4 A* {3 H) S- p
{
) f$ ]5 P) P1 O* C% @1 o BYTE nTmp = 0;+ v8 d+ w( r: F X% ~ a9 Y# d: C
bool bDest = false,bSrc = false;
: {; b$ ^3 f1 D" f. X- n1 J8 J for (int i=0;i<MAX_INVENTORY;i++)
7 m, W) q) e k5 U4 O) W3 Z {. Z: D+ s$ L0 q8 z$ c
if (dwSrcId == m_Item.dwId)
$ L8 `0 B2 _" h% k# G2 M) ~# T {& f |+ p- u5 B. I, K0 t l
//id相等 则 改变对应的dest和src& }' k. y* l t7 h: ?
nTmp = m_Item.nIndex;
, Y! g" Q* B( y0 o' \ m_Item.nIndex = dest;1 U: f7 I- k7 ?8 |. i, r
}
, C t6 t8 R& j7 q }9 W& E) F$ ? `$ s+ q4 p9 D
//临时数据保存完毕,交换开始0 x0 F- ^- o8 w$ X- o/ J" ~
for (int i=0;i<MAX_INVENTORY;i++)
. `, g3 x1 W. c& b! l9 `1 o- _* t {8 a. w% c9 N$ X3 x. g. a- Z
if (dest == m_Item.nIndex)
! e* _' e' G; F {; C9 b. l6 a; ]! A& f2 Q: X: e* M
//id相等 则 改变对应的dest和src# G2 [" q1 N3 n: v$ u' X
m_Item.nIndex = nTmp;
+ ^! i! _0 ^' g( S$ Q/ Z8 u }, J& m, p4 n3 j5 j1 T* v/ f: e2 T
}
( U& b5 k, d6 [; [}1 O: _+ J; S% g6 \
};# D4 N6 v! k0 p5 G+ K
-------------------------------------------------------------------------
. m; K" `+ G( K- t) k* k1 k) ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): S' ^- W0 A+ j4 v2 m* b, ^* a8 w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' d9 M$ {( K K& N紧靠其上添加:: T! a! C$ G# x* i, e( H9 t6 l+ i n
if( pWndBase == &m_wndMenu )
7 Z5 b' T+ p8 X" T0 x{ p7 b" A4 w" t$ G0 z' k
switch( nID ) ]+ F: Z8 {0 e9 ], ]( ]- b6 y
{
0 q9 z' H! k# j" f! D case 2:
8 u6 r) y' h1 d T0 y {
A; U3 e% O0 l% P5 t. L% [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 b; F5 }5 ~) ?, \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. _- r! I, R# ^ {4 R% h- I; t0 j1 P& j0 \' j
break;+ U3 O% J1 s8 e. H6 d
}; Z; C1 y+ |3 v# C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' b" f( H# ~0 Y9 M* |( S) K {
% `. X2 x+ ^0 ]% ^2 f+ R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 K. {1 Y% a$ k if( !pItemElem )! I1 y. Q! z e" m
continue;. O* X' ~4 `; }
if(pItemElem->GetExtra() > 0)! ~! a7 o0 o. K, E5 Q4 r
continue;, r, F& o; w) j3 o& r( q! w! `; U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , b! Z! i6 j0 }1 W
continue;
- }: O; O0 _+ d. Y if( g_pPlayer->IsUsing( pItemElem ) )
# N4 ^# k" v0 ^1 m2 q% p* P6 { continue;
: f2 |( _5 [5 f5 j( H9 W if( pItemElem->IsUndestructable() == TRUE )( P' |" T/ o& R0 Y; E0 T% i
{ |2 t3 o: f4 a B, D- a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. u& g* c+ Y* m; A0 x continue;
" {+ u# h* I; T6 m6 r: E3 \ }
3 |# n7 h7 Q, Z3 E _& b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# E Y2 V) ]1 a( Q8 Q: N1 U
}% f, G% @+ u9 R j
break;
: Y6 K5 u% y( `2 Q6 q" w) _ }
7 x3 f/ ~( F. m' J case 1:& i$ P0 \) ~( n- m' @7 G, g; u
{
, C/ G" N4 c. r! \ //整理背包
4 i- w" A1 _1 i9 O //////////////////////////////////////////////////////////////////////////- Y& Z; l- o' r
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 t& T" Q7 x9 J0 h$ d //////////////////////////////////////////////////////////////////////////+ C# v* Z* K* q
//////////////////////////////////////////////////////////////////////////
# s" u: }7 S$ N' c( P8 W CInventorySort* pInvSort = new CInventorySort;
5 v. Q" p" V" X6 T' H; m vector <sItem> vItem;
; @9 n2 X- N' S$ W0 J vItem.resize(MAX_INVENTORY);//初始化大小1 o- [% K7 b+ t& U( Y( T
//////////////////////////////////////////////////////////////////////////& P" R8 F: C [ k# L/ V
//填充数据6 l. w$ ^+ Q E! x+ N- e
for (int i=0;i<MAX_INVENTORY;i++)
0 I5 {; G2 D# j9 |4 p9 n {
' x, h m5 l; `4 m, q, Q- I7 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 ^- Q) s" a9 }& o' n( e0 E0 R+ l1 h if (!pItemElem)
7 [+ T* ^ b8 C+ m3 ?/ ^0 A2 L {7 A1 k q" V0 v& u# `
vItem.dwKind2 = 0xffffffff;
( I$ m6 V0 s# s( h" D+ { vItem.dwItemId = 0xffffffff;$ {. f. g1 g( b: O; Z* |
vItem.nIndex = i;
5 t" `, [, q5 i3 _2 A& j }else {! ]" _! V3 |6 C% O1 \
ItemProp* pProp = pItemElem->GetProp();
7 S+ Q2 B8 @- d g8 v) _ vItem.dwKind2 = pProp->dwItemKind2;
; x( C" D% f9 \+ T& z5 X: t vItem.dwItemId = pItemElem->m_dwItemId;
" _0 u6 f# ]4 M6 L6 u } vItem.nIndex = i; c0 Q( v! ~7 H1 } C( y
}: O; S0 Z: K" p/ z+ n( Q+ r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 R: X0 M$ d |9 W }
. ]4 t6 `0 d8 k3 N //////////////////////////////////////////////////////////////////////////
s- `) \' C) b2 Q0 c9 d0 ^ sort(vItem.begin(),vItem.end());//排序
3 m9 t1 v2 e& F3 Q1 t6 O, D. g //////////////////////////////////////////////////////////////////////////
( M1 V! A7 i: U8 j+ v //交换
1 q4 r% F$ x N9 Y for (size_t i=0;i<vItem.size();i++)
: _9 r |" ~# z1 a1 G {
2 r! I( i5 w5 c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; s2 w% o1 \9 Z" b4 a
pInvSort->Add(vItem.nIndex);
7 Q) d0 M/ ^* H1 \& D }# i. Q. r7 I; J3 ?
BYTE nDestPos = 0;
1 ?/ v0 Y' |, w! l5 S2 b( y for (int i=0;i<MAX_INVENTORY;i++)1 W+ B! k! X/ D
{
( v1 d8 A8 K8 T$ t1 Y7 J& _4 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 z" r8 P% [8 V) c, u3 c3 Q: `% c if (pItemElem)9 ~0 p+ m& [/ W$ H! M( t+ y" F2 R
{, F! P+ _: a8 p& A/ A
if (IsUsingItem(pItemElem))! F) {9 q8 v( P9 |/ X
{
8 J4 A4 M6 d5 m //这个位置无法放
. I: _2 M) {3 X nDestPos++;
9 }7 Y0 j% [( ^* Z }( o5 b6 F1 p( i9 c' w( Q7 B
}
1 ]* C% v) Q2 L; A2 v BYTE nSrc = pInvSort->GetItemSrc(i);4 }+ U" y* }: h" f: @' t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 R' N' y6 t6 s( S4 S! g
if (pItemElem)) P& m- U- Q/ g6 |: c+ D
{+ ~8 Z7 |& f* A% Y; E
if (IsUsingItem(pItemElem))" U7 o. l: K& g/ i1 |+ r
{2 T! G; T9 H; {- q0 n6 n. i
//这个道具无法移动,跳过6 L6 g, ]4 B- e0 y! k9 w; R: U
continue;
# `0 O9 e4 T7 e4 y, b% J2 ~ }, `& G! Y, d- u Q; F
}else{
M/ u) |3 `0 E2 i8 d) r //空位置 不用动
; V2 V8 H% p8 B+ O" g! t continue;* `. M) c' ~; o! N" {" d
}% v( ~; Z' j, ]1 I C2 { _
//////////////////////////////////////////////////////////////////////////
1 Z' u6 F- z8 i& J' ^1 h8 Y) Z //开始移动
6 E. z; }+ u& B; y; V if (nSrc == nDestPos)
S1 n2 Z3 ~ R$ T0 K1 h G {
+ t' _4 F3 M) H9 ~# x) Z. A; ` //原地不动
) e f5 M, y' j v7 u. r, l7 Q7 B1 | nDestPos++;( e3 k Z; I/ O
continue;# c. b8 R; g1 m. ], |
}; t8 |, e/ b5 ~( S) { V) J3 V
pInvSort->MoveItem(i,nDestPos);
: Y# O/ O! H: m' i: ?4 Q2 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 @/ q% z. X" Q Sleep(5);
0 i+ O$ V9 p9 v //Error("移动 - %d->%d",nSrc,nDestPos); D* p: V! L8 g: y
nDestPos++;
( E& x( N& _+ A6 X: J7 [ }
$ d* J8 _3 q& z# j9 h" i* m //取第一个元素的信息) }6 A0 q& n* i# |$ \% |2 u M, Q. z+ e
/*
8 F1 o2 ?/ a( p8 B/ K; E% l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) t0 s0 |( F# {5 m
{
: Q6 v6 o9 ^& ]0 w; I7 z9 D% N/ S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 w2 Y* X+ t3 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 y1 Y, s0 X0 |6 y }$ x5 t" N3 `+ R2 ]
*/
8 v/ l% m) g- i //////////////////////////////////////////////////////////////////////////) O3 f/ M8 W0 }# P0 l- L- s% V0 }
break;$ u: C0 ]1 b6 D3 n/ |
}6 T3 d/ S3 w6 u7 X
}
4 u: H p) ~6 w" V$ G}) M. Z3 G( p; T: Y
m_wndMenu.SetVisible(FALSE);
. H0 q2 p: l0 ~% f) O4 G
4 W; h5 h/ G, M--------------------------------------------------------------------------------------------------------
6 Z9 Y9 D4 N5 |+ w: E( I% M/ |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
j1 y( Z+ p+ {- Y/ t# O' I6 ~{ [2 }5 [7 e8 B1 S; k0 i
BaseMouseCursor();% `8 @$ o `( a: ]& |+ }9 D
}
3 {# J3 x. ^! d2 M1 x0 ]( s在其下添加:8 V4 L5 @- a5 W0 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); ~+ y( X" ^) I
{6 z4 Z4 \/ G% C3 X
m_wndMenu.DeleteAllMenu();8 r, R2 |$ p2 c- w. s1 ^4 n6 a) C
m_wndMenu.CreateMenu(this);0 N7 x+ N0 L5 |& t4 T3 n5 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- _' O1 g6 F. B& ^. N0 l3 S* Z+ {
. i* g: {, i. c5 Q' z' Y: R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 \3 Q4 O) a9 Q! J3 N- a# q
{. A0 t$ F$ T% w) p1 q/ T
//P以上级别才可以删除所有道具7 s$ J8 l3 ^: S& Y2 Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); @1 p* N* W) B' V4 {, m
}- |( W7 j9 r P8 n- A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- r; f3 w1 k% v. w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% o1 R; O& u4 W
m_wndMenu.SetFocus();' X: c2 @1 Y6 X2 }/ U, A
}9 l$ R3 J! _- n2 a9 p# H
------------------------------------------------------------------------------------------------------------
/ F; N1 i1 I; k, |* D9 T*************************
7 R7 Z/ k: n$ X# @WndField.h文件
. V' T3 Z5 \6 t7 S) N c* R; b* C*************************
3 f9 T) T( b3 {- g/ `6 a" _搜索:BOOL m_bReport;
H6 g, ^/ C& v2 c& w. T. @- v7 f其后添加:
, G$ {: e! R: _CWndMenu m_wndMenu;
& N/ G0 g, l8 M2 L1 K9 A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) l7 {0 \( f, J8 o
其后添加:8 B6 }+ J' q1 d$ i, R3 S. A
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) x& M, H! F# }( B" ^6 }- ? f! x q0 I( t
A# h! x* v2 @% ]; j |
|