|
|
源文件中_Interface文件夹下WndField.cpp文件
1 J5 k. h' V/ e( h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( c9 \# \6 _4 e* E* Q+ F3 q
, B) A/ U/ X$ b1 Cstruct sItem' H) [* C7 ]# n E, O k$ M, r x
{
?% N+ _1 M1 u/ {DWORD dwId;' K& F6 N: @# A3 W4 x( R8 F
DWORD dwKind2;
) G8 c& |2 B9 ]: _, l$ eDWORD dwItemId;
, E* R% e6 e" nBYTE nIndex;) N5 Z5 d4 c6 W# U/ |& _
sItem(){
& F7 F+ N6 |2 r dwId = dwKind2 = dwItemId = nIndex = 0;: \- G& F+ h; ~& x
}
$ K2 E" D0 u# k3 ] l; Ibool operator < (const sItem p2)
) }9 X5 N% ]& M, E2 g; A{2 b6 I5 O7 r8 [
if (dwKind2 == p2.dwKind2)
9 N& ]8 x2 ?# L0 g {7 ~$ F3 Q ^- P1 K: P- L
return dwItemId < p2.dwItemId;2 D: l" J( }* _' O
}else{
) k* Q6 {: y4 K/ y8 j return dwKind2 < p2.dwKind2;
( q* v! H' }7 ]; [! C/ M }
, Q- H( ? |) |) t8 X1 |3 e}' Z- q& n7 X1 w
};
+ u$ c8 f) h: N9 kclass CInventorySort
5 f9 w p' t# |2 _0 p{ x ]. @" r& U4 m% l
public:) h+ M7 r6 @" F
CInventorySort()
5 o/ L5 w9 D' e: y+ h{' i( y$ U/ Y3 }
m_dwPos = 0;
~7 l7 ~) h) |# Z1 A4 W}6 X2 X# y9 X& d3 k; c% U6 b
~CInventorySort(){}
9 b2 }% ]. K3 Q9 r1 E. j; Z+ i+ lprivate:
" N/ O) \0 E: m9 e0 [8 OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& b8 x6 @" Q+ TDWORD m_dwPos;
3 w8 Y0 F) E+ _$ |8 vpublic:
- Q2 H7 d5 t. ^5 G! c0 a& q8 wvoid Add(BYTE nIndex) V/ K3 d2 F$ n* Z$ W
{
* {* b& M2 J" F! Q if (m_dwPos >= MAX_INVENTORY)" D7 [# y; I$ X$ G l
{
: s# F4 r& v, l( `/ R; f' u return;
% \9 B% L) [" g2 G \% u: E }
5 j5 {; C; S- v' s m_Item[m_dwPos].nIndex = nIndex;3 v% r: `2 ]3 R4 o( a: N
m_Item[m_dwPos].dwId = m_dwPos;
- W. X( t u/ S) _8 Z4 K5 S m_dwPos++;
) a# a: V$ ?- U& ^. F7 f}
8 R8 L8 w; C x" j9 \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. b, O% F4 N. ?8 E- q& [1 X{
6 u7 z* l6 g6 a) L2 Q for (int i=0;i<MAX_INVENTORY;i++)
5 F" B3 V5 W% q {
; E1 e6 U: O" ?2 t, z# L d if (m_Item.dwId == dwId)5 A! r2 Z5 G) Y' f
{6 a9 ]9 a' m& w/ E3 V2 S
return m_Item.nIndex;
* `2 N/ f! |, k/ ?, J- W }
4 o9 a7 ?+ T, h: P% i9 @% u }( [ Q) B" D, D" \/ [# \- U) e
return 255;
% j% j; w9 n' o Z: X" d4 z}
$ c* w( {2 B) ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& H7 q4 P# ~9 M1 ?{
5 \$ `4 }2 O0 M: V: Y- B4 D BYTE nTmp = 0;
7 `+ D! E& A2 Z bool bDest = false,bSrc = false;
- d8 X( I" P, w for (int i=0;i<MAX_INVENTORY;i++)" |2 Q+ W" u3 F' I/ g; Q. _6 s: [
{8 Y/ E4 Y$ x3 W. P* I) D
if (dwSrcId == m_Item.dwId); B5 I: t/ D9 h; a2 n6 R! f% z$ Q
{; z) E0 Z0 j V9 ]$ ?
//id相等 则 改变对应的dest和src/ Q' F3 n0 Z3 B7 V* _6 h* z$ v+ p
nTmp = m_Item.nIndex;# R( H- O- b( y8 T/ C+ K; Z7 l e
m_Item.nIndex = dest;$ \/ P ~7 d, ]1 a5 U& K
}
: R$ A* E3 r1 u# k( N }3 O9 e1 L- t: E7 K" ?
//临时数据保存完毕,交换开始9 [- L& i* n( U G) R, {
for (int i=0;i<MAX_INVENTORY;i++)$ p5 a7 o0 B7 H
{
4 g) M6 b- `9 L$ o if (dest == m_Item.nIndex)$ r9 W( I& K4 p: n% x; D* k& D
{
& ?7 v* B! }" v8 u0 n //id相等 则 改变对应的dest和src! G( A# v5 M% `
m_Item.nIndex = nTmp;
! X+ J9 W9 z. ^3 w. S' C }8 w/ ~. e" h- U( U3 `9 ^" n
}
% C# N3 }4 ^5 F* b}
: ]' M" k. e; d- _1 E};
0 \2 ?9 d f7 V& y4 f- N& m0 _# q q" a-------------------------------------------------------------------------
) M1 {% |, N& M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): x0 T' R# V# {! l6 S! n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) E# x/ w1 e/ J( G* {; S5 _! ]% o- q紧靠其上添加:
& m' D8 t6 S2 X6 `if( pWndBase == &m_wndMenu )0 d! K$ B5 ~; t, R b
{/ T) z5 @5 D8 ]1 f4 \
switch( nID )" o" J( \. ? p+ r L0 ]: Y
{
0 Z# L; {7 P3 k3 O9 _9 E case 2:
" G5 n7 W3 I* M# k+ _! K0 c$ _ {
7 i* Y. D O+ I! p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* w: T9 q) k3 z( ?2 m9 Z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ R6 O. W- n9 Q {
2 i _1 U3 r) u, \ break;7 \0 q0 ?) K3 N$ O: g- ?2 H
}- i9 q i. x1 l2 l5 m2 k* a; ^" b0 S5 j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! ]& i0 }& D* Q% ` {
6 r. n* ^! d- r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" g' Z! K' o' P% S2 @* h6 p5 O* x
if( !pItemElem )! ^& P7 h8 P- ~/ a. E! C) q/ a7 Z* S
continue;8 f. `8 l! y& j+ }, _/ L
if(pItemElem->GetExtra() > 0)
# l$ P& Z$ w9 t. _2 k continue;
7 D! J# P5 R7 s0 Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 n+ D6 s* s, l
continue;+ w3 a, _9 V: m. t) [. n y* D
if( g_pPlayer->IsUsing( pItemElem ) ), i2 P, E$ E% t# g* A
continue;
( K. c0 a* k% u7 m6 Z3 t* x0 E* P if( pItemElem->IsUndestructable() == TRUE )" v3 j, y) k/ `8 W: k0 E+ D
{- k/ Q( W( u( K: U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! K+ R# a% o5 K) S: V
continue; M3 S+ e" \6 A; p
}
v4 R+ h/ s" f0 I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 D* _% C* }) j! s5 @
}
# \8 @& `) k& t' ? break;
8 F* J M/ [: \7 r8 l }* P% @+ C* c+ n
case 1:6 a3 V7 f5 V; j% @+ c+ O* R
{
( g* j) k2 q. [( u+ ?, K //整理背包- }) F7 X) ?$ Y/ A4 W+ w2 z6 E. d+ M
//////////////////////////////////////////////////////////////////////////- p$ Z( t7 m' X6 R- e* |) }1 ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; j5 W" ?8 k) U+ H/ Y0 ~! P& E //////////////////////////////////////////////////////////////////////////* j9 {. S. r3 ~$ f# m
/////////////////////////////////////////////////////////////////////////// V# R, v$ n+ q- c( h8 M4 I' n
CInventorySort* pInvSort = new CInventorySort;
( z2 j6 B3 e5 {8 A( N9 g: V vector <sItem> vItem;* B& b2 s8 J7 k, Y4 y, U. m; }2 C
vItem.resize(MAX_INVENTORY);//初始化大小1 v5 ~3 ~9 F3 E1 G6 C
//////////////////////////////////////////////////////////////////////////
" Z( v$ e6 t0 q" Z7 L4 N+ y1 N5 ~ //填充数据* S/ L5 X3 ?& e4 N
for (int i=0;i<MAX_INVENTORY;i++)+ s; \- z; v' Z. x. @! R
{( \7 N( K1 M$ R) g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 F+ C" r) d7 y! y9 C# U) C' x
if (!pItemElem)
0 \8 R9 v- V) m5 B {
2 {, x1 K" p! @2 z vItem.dwKind2 = 0xffffffff;# R: W$ D1 R1 e
vItem.dwItemId = 0xffffffff;% ^6 L" ~) \, x) G
vItem.nIndex = i;/ {8 D7 z4 r0 D
}else {+ q- D6 m# B; }( l, _$ g
ItemProp* pProp = pItemElem->GetProp();
$ h" n2 E5 L/ U' G# p: J- y1 ~# B vItem.dwKind2 = pProp->dwItemKind2;
6 p0 w: r, a4 o2 Q2 G vItem.dwItemId = pItemElem->m_dwItemId;
V3 h- N% g" r4 q" I/ M- ^) g8 B0 V vItem.nIndex = i;
# {$ Q+ u, C+ w8 n) `7 u }
3 S& Z! K; D7 s, F1 q. i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 d4 V4 u' y# V6 m7 d( s, z
}# P; W3 q* G$ m
//////////////////////////////////////////////////////////////////////////
+ m0 L" }9 f n' R$ S( l* T sort(vItem.begin(),vItem.end());//排序5 |# n# Y' n1 i- c. W
/////////////////////////////////////////////////////////////////////////// y2 o7 j6 Q' w" H) i/ `9 N
//交换7 L; I+ G0 O3 ~) `
for (size_t i=0;i<vItem.size();i++)
3 |$ N6 s( h9 n# ^2 c2 [# d$ m' V {$ A% q! z$ v) f9 V$ K. R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 S+ d; P9 o! S/ L4 b; d pInvSort->Add(vItem.nIndex);
( J1 x! U$ x% H+ O6 r }) _9 v9 ?3 ]4 ]6 @" a2 M. t
BYTE nDestPos = 0;9 s! f C/ d: K
for (int i=0;i<MAX_INVENTORY;i++)
( Y! Y: J* q8 O# A6 u3 L0 L+ f {0 x( A, w+ F0 s4 f) p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" J T+ b" g' Z1 @) ^
if (pItemElem)
# V2 I p8 m# x4 Y1 ` {3 q2 i2 `% O2 J0 J8 F7 X
if (IsUsingItem(pItemElem))
' [/ S4 p2 K; u' D( ?) l6 L {
( f: k4 V, g$ m3 G1 O' J0 O //这个位置无法放! c; s: F' m+ C
nDestPos++;+ f5 w0 r3 u+ v# ~
}( Q) l% D& Z& q
}1 D8 ?; i4 A( J5 p: V
BYTE nSrc = pInvSort->GetItemSrc(i);
6 J9 ~ F6 `) k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% a5 p& p% Y2 K1 Z3 p4 D5 x$ D if (pItemElem)# l$ J% [. Q/ b% N
{7 t+ A o" [, B& q
if (IsUsingItem(pItemElem))" w' o; G+ z! l0 U A
{
! Q$ Y: p8 z1 f: H7 x( ] //这个道具无法移动,跳过; m r1 V! }- C) w' p1 I$ R
continue;
8 I& ^4 R7 ]9 z }4 }. Z8 j! j3 ~- W
}else{
* `3 h6 z+ `$ C4 ~0 M5 v5 b4 B //空位置 不用动7 W5 E, _6 I' S- e/ F4 z" M9 p
continue;6 T$ m/ @) g( d3 D* X
}
& u* U. ^5 z: s* _; E1 K1 A! o //////////////////////////////////////////////////////////////////////////+ U4 v6 o& j- {: C
//开始移动
e. M4 l1 C# i- c if (nSrc == nDestPos)5 B1 s3 e( z9 I- i. F
{
3 Q& X5 `" y: g7 U/ B0 g //原地不动% \2 {5 c3 w6 Y8 A/ J
nDestPos++;
6 N8 q) m ?1 \ continue;
( O. H" r: H" m6 Z, @; T* F }
5 Z4 [! x: E) B6 r- l! @ pInvSort->MoveItem(i,nDestPos);
: _5 e( C8 `9 O/ ^% s, {. S g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 a7 W( b, Q. [6 p0 o
Sleep(5);
' g. T- r( m: F) W6 U0 W/ V7 d //Error("移动 - %d->%d",nSrc,nDestPos);
1 D6 n) M6 O, I7 @2 F9 ~- S nDestPos++;# k5 k- w$ n2 N5 ~+ {+ T! V# ~
}6 p; }+ ]" z- F0 d R
//取第一个元素的信息
2 w% Z& R4 T! G5 m3 d: E: q /*
P) L, a( P# M. X k, o* w6 z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# _7 h7 U5 B9 x K/ R* I: X! @" J
{8 P; H7 M( |6 [' _- w( z, \4 l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. l8 \0 k( P( h5 v9 i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: Q9 D J8 Q+ T- v. ~ }
9 W) o' |9 @+ V, f7 a: h */! z* q0 Z6 J8 k ?; o
//////////////////////////////////////////////////////////////////////////
4 L+ b/ Z5 w0 g" d& h2 w break;9 }* k+ K# c: r; c' `" i1 ?
}
$ q5 Y+ t. }2 V, x } 6 J' [3 d4 Z l. T) ^+ L+ X) s8 D
}
& J. d% M: c H3 Am_wndMenu.SetVisible(FALSE);
2 L6 Z( ]' r- y7 c2 G+ r0 `9 Y, u
4 i, P% ? ?) s1 g--------------------------------------------------------------------------------------------------------
9 v- ]0 K5 Z/ S4 H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 j8 \9 b# ~; }/ j' m{! o7 c; U6 y9 K8 D7 p- l, U
BaseMouseCursor();
/ Z9 A5 z3 ~; ]}
9 e2 I0 ]' e$ E: \! R& l4 {在其下添加:
# j# j; \: D( b3 _% Q9 `void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 ]0 ?$ [: X, x3 E% Z{0 z x- A1 Q( S4 p
m_wndMenu.DeleteAllMenu();& ` N4 \) C/ d6 L
m_wndMenu.CreateMenu(this);. l/ M; j8 z+ D6 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 t7 S% z% p0 \: @2 L- @7 n( X |# [7 ~& b5 D* B4 S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 r8 g7 g3 I7 ^8 [" t{
) h. o7 ~' O8 D //P以上级别才可以删除所有道具
9 F# `9 N4 ]* u( ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' O# x S9 d+ L}8 R! l( c8 W W; v. T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 I& j* C( u d; b# o, Y+ am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' g- t3 S* p4 M& V
m_wndMenu.SetFocus();
) U& |. P' N% e- a+ u; p* q' b}; I* \3 B) M- K- A: b* k" L/ g
------------------------------------------------------------------------------------------------------------% V# ]1 ?8 W% n- d; L; S
*************************
7 y" J; s \; d/ \8 c# i- oWndField.h文件$ ^. C3 Q" P: L3 _+ K& \# Y! W
*************************
$ B5 f! l+ A& I" {" L搜索:BOOL m_bReport;
; j4 e8 c( O7 {# w0 V2 @1 Z其后添加:" ?0 j2 d' t7 i
CWndMenu m_wndMenu;! m, r! U- U/ I, C0 R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 k2 K1 Y# h P7 ?* p$ |7 K" W* a其后添加:4 T0 }+ q/ U1 i* E
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 N B7 D6 E! S0 u4 h+ E. p
! T0 ^& L5 p! l/ q9 ^7 N2 L P
3 K, l$ m# l- \$ q/ u- o x |
|