|
|
源文件中_Interface文件夹下WndField.cpp文件
8 z& j* `+ g3 R) w7 X) n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ M9 o' `: M) |9 A: I/ j9 R
, t0 {7 C+ k$ m) k( f% N* L; k& Qstruct sItem
# q9 ~7 `% Z5 D8 ]6 N# R{
) `5 I! C3 i: xDWORD dwId;
7 j6 x. o7 O( ]DWORD dwKind2;; J/ M) M) r3 L" i U2 ]. z X
DWORD dwItemId;1 e+ C- s* S& _6 Z- A- A
BYTE nIndex;
- c: Q# J! f+ c- }# ~sItem(){( }; D; Z x1 A5 D- G/ }4 ^- M
dwId = dwKind2 = dwItemId = nIndex = 0;: s. t- K r$ ~1 }- }: t% U
}/ p7 r' ?# ]+ N; k# X% O& i
bool operator < (const sItem p2)6 v7 k& Z" h. s7 a; \; Z/ ?0 ]2 Y
{7 t; w# D/ Z5 d/ R4 R4 A# o
if (dwKind2 == p2.dwKind2)
: \5 e5 f0 a% i* C0 h8 i {
1 x7 _: L3 w( o+ C return dwItemId < p2.dwItemId;$ u* o0 ] p b, u2 @2 M4 O
}else{
3 ]3 ~0 q8 E; R4 G* @6 } return dwKind2 < p2.dwKind2;
1 r, N5 }4 _: }8 U1 P B. Z }2 x- ^7 d6 L \! r
}
( g2 a/ m P( m! p: l( S8 S; {};' w- a" h1 u! y! Y. O" k
class CInventorySort( {0 O! e) h5 s/ V6 O
{
! D( c& k; T# M- d( Tpublic:5 Y& j2 g0 {6 b$ U+ j
CInventorySort()
. ]( @" f" q* r: S* o% P" B: A{0 w/ c8 c, A% W2 p% E, |' u j* w, i
m_dwPos = 0;' \; n" k& f+ X- s: x
}) H/ q% |0 k! A: B- Z: r. v: _
~CInventorySort(){}2 T: E( M( ^- o- I }; S- s9 m% t
private:9 d" N. l0 n6 z) y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- H- U6 S" Z- b. V/ f) xDWORD m_dwPos;9 i2 [( l) W) x+ C5 v9 n! {
public:
8 V, ^( r0 ], {void Add(BYTE nIndex)$ q. x1 V( Y( c4 v+ P: J
{
( x* y& g( k. @/ e. l+ i* z5 e if (m_dwPos >= MAX_INVENTORY)
4 ^: a: V; @ Q& M: W {8 |0 k5 B' y% |8 c; G6 d
return;
' c' J/ f- H8 H- Q- o3 J0 g. O }
, `5 K8 w- f7 `* V6 u m_Item[m_dwPos].nIndex = nIndex;
' m7 w4 c5 y- X/ B# }' e m_Item[m_dwPos].dwId = m_dwPos;
, U9 D+ _' i7 P6 |* \( J m_dwPos++;
1 v' B' @& o# ?. P) D}% g5 N, O0 H9 @" ]. s$ I" l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 c5 V. Q4 U Q, Q7 N( U
{) C8 J. e8 ]4 H* L1 {1 |
for (int i=0;i<MAX_INVENTORY;i++)
/ O8 ~/ V, t9 E, } {; N/ Y9 D9 ]% F# F" o* X
if (m_Item.dwId == dwId)
& R c# ]- ]: Y, |; N8 } {1 }# p1 }0 M/ t6 ]0 H" V! W/ w, U( |
return m_Item.nIndex;
; F8 J: n/ S3 k }3 Z9 B% d% N: \, o
}
# Y* }7 m1 S: `% c; s return 255;
# N$ }9 `" }! t( U) N: N+ ] K}
- f7 s. T J9 U9 g' \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 f$ h' n( w0 L+ n v3 s. X
{& w- y& ?4 o, \: O8 r5 y- c" k
BYTE nTmp = 0;7 ?# e$ C3 I& x9 o3 P, x5 }
bool bDest = false,bSrc = false;" m N$ C6 ~3 z1 V2 c
for (int i=0;i<MAX_INVENTORY;i++)" c7 a n; W% W G! _9 G
{
' P2 {# `3 n" z+ u; }5 I if (dwSrcId == m_Item.dwId)+ t y/ Q1 j5 d. d7 k& b7 A2 ?
{
" S( x. a; A% Y# K' S //id相等 则 改变对应的dest和src1 t. Q* M$ S, l2 c. t, ?
nTmp = m_Item.nIndex;
( T. A% ?& z7 C% A, n m_Item.nIndex = dest; L g, J; P+ v8 e
}
& a, a' n% ?5 l. ~ }$ F$ y* x3 G5 r; O7 u: U _6 R% Z% |
//临时数据保存完毕,交换开始! F* c8 q" @( f' F$ r
for (int i=0;i<MAX_INVENTORY;i++)! f- f* b& i: l ^' C6 w2 R
{& V" v8 w# C. E ^: n: i+ Q% y( g
if (dest == m_Item.nIndex)1 I d; m N/ R
{7 u" ?+ \$ U5 }$ d1 A8 u
//id相等 则 改变对应的dest和src
. d/ l# b' x$ B# c, I0 i m_Item.nIndex = nTmp;
& a8 v4 ]( t4 F& W$ p* P7 b }
. p: D+ q. a7 u1 P }& t4 w( h2 y1 V6 N' m6 A! U
}
( V/ B& q, \. z% w};+ i6 J, F9 j0 ~, ]/ W6 m( M
-------------------------------------------------------------------------
: w# ?" O9 ?! `# K. C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ l8 [# x5 l1 x2 z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; Y% j: L6 D* _* d# O8 s8 y; B% M紧靠其上添加:- B; V% ~, e8 ?# a, h
if( pWndBase == &m_wndMenu )
1 u! i4 S# ~6 E9 |{8 E0 n; ?1 X, A& V! \
switch( nID )) f* K0 F; K* o+ ~2 J5 K
{
/ R7 E6 C/ C1 _! k& w. c case 2:+ H7 ]1 e- M. j3 j" _5 p
{) K$ c$ t" D& ^, {8 l# I+ ]3 W1 Q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 G* [0 P% K# F/ l1 b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 z4 K4 h( B8 r" U* r
{
2 O. }& y9 i. ?+ T7 { break; X' w$ C9 D3 f0 x2 M2 ^
}
7 R* N$ I& b* o. i: f7 X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, X9 K' K) F1 h/ b5 Y% c$ b {
4 q- i3 b; w7 g) a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 s" ]8 _" W1 U4 o4 H
if( !pItemElem )
: H% ]9 g9 ~, C$ I9 w2 x continue;
3 w U$ z" K" i! |, V if(pItemElem->GetExtra() > 0)$ `, K `# W. B2 J
continue;
) l3 j5 z3 ~) d3 r if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 R% u* x- i7 Z+ @& A; R2 A+ s/ ^5 ^ continue;
5 e) p5 Q7 y7 c: l# g4 o3 s if( g_pPlayer->IsUsing( pItemElem ) )
* z! M' O% c# R; ~: x continue;
/ n5 ?' J+ H& F7 c F+ o% `7 j/ X4 t if( pItemElem->IsUndestructable() == TRUE ): O; C; m0 l3 x* z, t7 w% O
{
7 }, e; \8 K: u3 V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 K/ ?3 F7 N1 j! c7 m( ~0 R continue;: ]$ }+ }7 Z A, H7 s3 T
}3 f1 S7 E( d6 b& [( G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; A6 F3 F, D* {5 V) k; D }. P, m% n4 m* j
break;( i% |: s/ d! c
}
4 ~$ E0 k L \: X2 z; Q case 1:5 V5 l, C7 e/ u4 N. v" M8 J
{7 W% N9 ?# P% F. W
//整理背包7 G) S$ v1 Q+ r) }' g! U
//////////////////////////////////////////////////////////////////////////) g% H" Q" h( ^: S" w8 M
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' x. ?. \# W2 M! X F //////////////////////////////////////////////////////////////////////////
7 ~+ } N& i8 C) \ //////////////////////////////////////////////////////////////////////////
+ x# L0 S+ x* M. m# z: F2 M CInventorySort* pInvSort = new CInventorySort;
& v& K0 J! |$ R9 Q2 {- U$ ? vector <sItem> vItem;7 A& ]. O# H1 I% K7 W9 s E
vItem.resize(MAX_INVENTORY);//初始化大小
8 K/ X- c( N n' u" ] /////////////////////////////////////////////////////////////////////////// ?: y, i$ S0 B& \ s
//填充数据
2 i8 y7 d" G; N0 C- g: N2 m. Y for (int i=0;i<MAX_INVENTORY;i++)3 P" ]+ g4 r) Q3 t/ I K
{
J+ [/ Q. m3 i8 Q. x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ]& y! @ Y7 S* _ ] if (!pItemElem)
5 D; m2 z3 A! S+ t {
3 A# Z# V/ R& |; G L vItem.dwKind2 = 0xffffffff;
( b3 a" I7 K0 `: M1 q" }3 K4 o vItem.dwItemId = 0xffffffff;
2 F" X8 w5 U [4 P vItem.nIndex = i;
1 P9 S. N8 E/ p }else {
* K$ R4 p. k6 |* Z+ d0 q% m- @4 C ItemProp* pProp = pItemElem->GetProp();
4 [% d. E3 N9 E4 B9 O vItem.dwKind2 = pProp->dwItemKind2;+ A4 l+ _9 b2 L+ _' a+ U7 R
vItem.dwItemId = pItemElem->m_dwItemId;
0 V* y4 W0 A- a' e/ n. O vItem.nIndex = i;
9 t+ I- b/ f- f5 S" H$ [' \ }. t/ b2 o# u, R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 Y- ?" n1 l2 m/ c3 k }& N# O: T E) K) U8 x- u" r* P
//////////////////////////////////////////////////////////////////////////
! O1 z9 _8 E8 i; A* U! Q sort(vItem.begin(),vItem.end());//排序# F) T, M9 L O
//////////////////////////////////////////////////////////////////////////& w; a+ C1 n J; j8 D# R
//交换, u8 v5 z% k+ ? T2 z
for (size_t i=0;i<vItem.size();i++)
" N5 r0 H* l& [# Z Z {
8 m' u A2 O' Q7 H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; Z1 B( L% A! c I
pInvSort->Add(vItem.nIndex);
8 h& [/ m5 T: M3 U }% I6 h' c, L" F n5 N; w4 U$ e
BYTE nDestPos = 0;
- ?" a6 y( J( [8 `% T# G for (int i=0;i<MAX_INVENTORY;i++)& M& Y& W# E X3 \1 I( P
{
) U1 x2 g: `4 |2 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ p+ R/ F3 `9 G. w0 a: w if (pItemElem)* \5 x' T/ |! g, n
{
! L! \+ V I* _' n1 q1 _" k if (IsUsingItem(pItemElem))7 D3 I% W& c6 F7 F1 ^
{
: k) ]& ?+ U- C2 w //这个位置无法放
, ^( s g- c, T( o nDestPos++;" o$ J- M' q$ ]9 O# R$ n
}3 U# X# i, C0 Z0 U8 V6 d3 t
}
4 H8 O: u) s3 ` c t* S* r0 E BYTE nSrc = pInvSort->GetItemSrc(i);
# |/ z* i# b( [- \3 @/ H y& B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 b# c4 i% v7 ?9 k' c4 q, i* T6 p6 ] if (pItemElem)
$ {; Q- [0 Q4 N5 t9 ], ` {
9 F/ h' a+ K* ] n if (IsUsingItem(pItemElem))0 i$ H( X' i+ T# s2 x1 y& f
{
b) `1 s" `$ e //这个道具无法移动,跳过
) b/ q' v" ]+ |( s continue;% [3 }* h) b. u8 p* t
}
' m" A2 ?& S8 ~ }else{8 b2 ?8 u0 r7 Y( \
//空位置 不用动
" ?) A: B5 t& }( L- v: ?& ^ continue;
% N8 R1 A( t+ e0 g+ o" q }
0 q$ l1 M' E: R7 D# G //////////////////////////////////////////////////////////////////////////( H( B$ [$ k1 [9 y
//开始移动0 p( J& L2 {1 Y' d
if (nSrc == nDestPos)/ J* |3 S" [ J7 Q1 [ C! B( W
{
3 k+ k% \" a# C0 u) \5 |0 q //原地不动5 {& r) i& g7 J" [ ?0 r- y
nDestPos++;, e6 i3 `2 N6 p9 x/ Q6 J6 v" d/ r
continue;
1 j* G& W( F1 g4 B/ t2 _ }
# b; m' y5 w7 q2 P6 T pInvSort->MoveItem(i,nDestPos);
5 }* J8 I3 ?5 y& a3 G+ F3 } g_DPlay.SendMoveItem(0,nSrc,nDestPos);# I D0 ^2 R) L: [
Sleep(5);
, d- ` n& Z, L //Error("移动 - %d->%d",nSrc,nDestPos);
7 z3 r, f. s& l! G5 O, V' L8 _ nDestPos++;. S, w( J( w$ r$ C" t
}- k& U) ?( r$ ?0 g; Z% A6 Z
//取第一个元素的信息
5 b7 j! [- J8 j( k /*1 J8 ?- |& A; P0 e5 }. L7 s2 i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). K, A' y8 S. g
{
; e9 F2 Z% S M: U9 t Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ N; M+ S) }" p* N k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ i5 @# H" H6 M7 d }- b% R% ^! s: ]* u% W7 ~5 z- C
*/
- z5 u5 X V$ P) J: g5 ] //////////////////////////////////////////////////////////////////////////! \2 o7 a7 @1 F
break;" N. o% d% O, s% n( w
}
- u2 B2 ], y0 }4 x; S }
9 T1 G% P$ B4 C9 |}
$ X0 e8 _% t8 r- r; d7 km_wndMenu.SetVisible(FALSE);( u$ x' u/ e# m* x7 D
" J1 C3 T7 P( W( p4 a
--------------------------------------------------------------------------------------------------------
; e5 m( h5 m* o" S+ M/ O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 ]1 w" z. M9 {; r; D
{/ x. |1 U% O% L8 f9 m* T0 a+ x
BaseMouseCursor();8 r, F2 e. z) C% \! @- h
}! I& H o1 @9 y- Q7 T& h* k
在其下添加:
: z& L: z$ ]' ?7 M0 ]; _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' v/ U. Z2 B8 z{- I* D y- o+ F: t/ v' ]2 E% `
m_wndMenu.DeleteAllMenu();9 N: q5 v3 R- e( S4 q- k6 {& F
m_wndMenu.CreateMenu(this);
/ Y, T4 x& E6 i8 [6 R) a2 p# ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. ?5 {* A5 r2 @
- O Y, f7 z: @3 q- lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, k* m0 n4 A5 ^( {, R+ U3 J6 J! y8 x9 R{$ ]: _2 b; H6 l' u/ `! U; ~
//P以上级别才可以删除所有道具" {% c- q# }. l& B' a- X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& q( N5 q) v! \2 e4 f7 S' c3 Q}
0 z: C) h8 o' `8 s1 G3 Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ i( Z S' d6 g E/ h" k- Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; ^ i9 z% U% X3 x X2 z
m_wndMenu.SetFocus();
: H- N5 s3 |% }4 N+ K2 Y6 z* G}
4 ]- h6 p$ D# B5 U9 K/ Q o/ q. [ X------------------------------------------------------------------------------------------------------------1 D/ H5 i$ K/ Q$ t/ _! \5 h
*************************
" k. _$ y5 }1 _ ?3 O% D7 bWndField.h文件
1 N7 S( o3 P( a6 ?*************************
- O1 f' D7 F! g5 D, U搜索:BOOL m_bReport;
: `' X j* K* t! X% a; {9 i. N其后添加:
n, u, f i. @CWndMenu m_wndMenu;( q, ^& u" c$ @' J$ I9 m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 U/ n) d8 j0 n/ x. S. C! t2 G& C2 T其后添加:. c4 |. H! b2 G% v! w
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 W* P/ Z8 L* z: n& n6 @. m# o
5 }. X; i5 K* K# Z$ v! t2 P X, n8 Y7 g
|
|