|
|
源文件中_Interface文件夹下WndField.cpp文件
; O `% p# V' t2 {! f6 d- Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ i3 P3 @9 @1 V0 f. t7 y8 ^1 R; L! @
struct sItem
9 z& G' Q8 e! D{
A8 j; B* b0 N! C) V# r( w0 UDWORD dwId;8 w0 Z+ ^* g0 J( s& t# v$ s
DWORD dwKind2;
9 W0 O) J9 B+ ^$ YDWORD dwItemId;
& M: o8 E2 @" R6 i+ @BYTE nIndex;8 z8 F f# ~. A, A
sItem(){4 M8 Q$ k/ v. K- z% {( x
dwId = dwKind2 = dwItemId = nIndex = 0;
# A8 {1 k: C% o}
* a' a' c+ Q. e0 E2 |1 ibool operator < (const sItem p2)1 x' o c& F# @% H/ I$ V: w
{
( g( F5 J5 K% d2 q: Z! C% j& a if (dwKind2 == p2.dwKind2)
" n- r' e5 h& b6 o+ {7 o$ b/ Y {7 K6 N, s4 l; F& D d% @2 c7 |
return dwItemId < p2.dwItemId;
) p" L4 R( r0 c, n7 R) m. o }else{: e' d) ?( _% h4 \) e7 t
return dwKind2 < p2.dwKind2;) M0 k: r5 \7 x9 i9 Y& M
}
: l0 w. H# E4 z}+ @2 c2 R) Z7 i3 n X$ C7 ]4 J* _
};. q: t0 V, Y8 @
class CInventorySort: z; _8 k; l2 Q
{
) p/ y4 c3 H( v0 mpublic:- U9 s2 L( U/ l; h- n
CInventorySort()
* a* p$ E9 b+ r- _5 _{
! [) `; j, g6 F) T4 j m_dwPos = 0;0 a4 _8 f& I! P+ P) Q6 b
}7 O" H% |8 d/ d: Q8 m
~CInventorySort(){}( Y9 d+ o4 z6 T; {+ S& ^/ D
private:5 f9 S/ H: _# W* y0 v1 ~5 n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ C/ W1 j7 S8 w- yDWORD m_dwPos;3 g; [0 w" U- q7 U3 {
public:) y/ K/ ~. z, _ D) O6 u3 W
void Add(BYTE nIndex)
7 {6 z. j0 N3 ^" ]7 P* ~. h' f{
) T; G- f& |0 `" X* ? if (m_dwPos >= MAX_INVENTORY)
. I i2 }6 R. z+ w. L% f' r { D# a$ b0 a* H) u0 Y6 D; o
return;3 {5 l: \ D. B% D
}2 M: o! d8 [9 e5 E, v
m_Item[m_dwPos].nIndex = nIndex;
2 X6 b- c. Y4 o. I, d m_Item[m_dwPos].dwId = m_dwPos;3 f+ e9 W+ g. L6 }$ I# X4 P5 B
m_dwPos++;7 F5 J& u! S2 ?/ g, L: N
}* l3 U, F: @, p0 O1 J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 y8 R0 f$ q8 p& q{
* V- n6 Y+ g% s- l for (int i=0;i<MAX_INVENTORY;i++)+ J4 Z! M E& r, g T( q. h1 k
{! w* d; b, W7 G$ k! Y0 u8 w- y
if (m_Item.dwId == dwId)3 o& w0 T2 W; `+ ^( `
{
& S6 L4 h9 L' p return m_Item.nIndex;* a: ~" T' p1 H; w3 o
}$ W& P2 d! v; M* K- [0 u
}
5 L% o7 t8 Y, n: ` return 255;
3 q$ ~+ W# ]9 a; n) d& R}
. }" ?& H5 }0 ?1 E* ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ j' z6 {4 k2 I2 d$ y{5 R! J, G w- S4 Q' ^* }- Y4 _
BYTE nTmp = 0;6 Q6 {# B1 V' X
bool bDest = false,bSrc = false;
$ y! y2 f9 q: }) `* m for (int i=0;i<MAX_INVENTORY;i++): S% ^4 Z6 L% L u% j9 L
{2 N, V2 {# X1 f
if (dwSrcId == m_Item.dwId)3 r/ F3 @3 U$ r+ o/ }
{
6 U9 C0 h5 d4 D0 K2 t1 o9 F9 ] //id相等 则 改变对应的dest和src
+ |. ]# f1 g$ J9 ~4 E8 s# u8 h nTmp = m_Item.nIndex;# E3 I8 j9 w* P- t7 E% u! V! t
m_Item.nIndex = dest;
6 v! d) _8 l9 L7 ~ }
% k7 d* e. A" S* b# y }" d, i6 H& `0 A5 i1 ^, n% k& R& o, s
//临时数据保存完毕,交换开始
" M% g6 i* a1 s9 F& R: m for (int i=0;i<MAX_INVENTORY;i++)
' B+ Z# X; _2 v {
7 G$ b% s- |+ u5 f9 R. p if (dest == m_Item.nIndex)( L2 O: Q( |' _/ H7 f9 @- v
{
y9 `3 B( q+ ]9 j //id相等 则 改变对应的dest和src
9 D- d$ [5 L$ W( s( W0 l m_Item.nIndex = nTmp;
; k! E8 {3 x! t( `; a }+ ~1 E/ [! x) v& j8 N% \$ e7 _( n, I
}
1 ?0 F$ [0 I" @0 v7 o1 F! D2 g}
, u, M- |5 Y J, n% y! r};. N% @2 K" {' s& P% w
-------------------------------------------------------------------------! o$ f, P* V/ e4 i* v3 Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 L$ y7 k, O1 z- Y) [" [! h
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. C0 A" ^: M% ~ Q, k( b
紧靠其上添加:" b( O; a9 H1 D- K. I
if( pWndBase == &m_wndMenu )
9 J, z x+ o, D# D' ~ G{' K2 j7 k' g( R5 h
switch( nID )) [# Y4 K/ {4 {
{; @. X( s$ a) o2 Y4 k. R0 V
case 2:
8 D/ Z5 ~ ?% A* N {1 ?6 v c9 @% z! S7 x5 q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; H$ C3 f4 I5 {
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& y7 x E. B _7 k: [# D6 W {
) Y% P! ~4 x; _. Q) h9 T; ?# p break;! {) H* O, j2 i( P
}
6 R) m: o. Q( I! B- f6 R3 t4 ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! @, v6 {0 q% K* J
{3 b) l7 g; G" K0 s! B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 L5 |/ R0 U. O+ { if( !pItemElem )
7 R5 w/ D7 ?3 ]- N3 O9 I. J7 M6 q6 ` continue;. d! G/ H0 F. c. d* j
if(pItemElem->GetExtra() > 0), t) [. E% f; h% R' e6 U
continue;
6 ?$ H2 k& w+ O' A5 j2 X* R: ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* m% ]7 k. S! D1 `4 V continue;
6 n! l! X- _; @* ~: _- z if( g_pPlayer->IsUsing( pItemElem ) )) u4 A, A* d! k; Z9 |# p V
continue;
* \0 P0 U: M* {. m- w+ J& \ if( pItemElem->IsUndestructable() == TRUE )2 Z) A1 O9 z6 Z- C# l/ |
{8 E1 g+ u- K5 N! m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 d3 L; n' }; x4 g" s. u/ s& u continue;7 Q: ^' O/ `2 i. a$ t: Y( ?% @. d
}1 I1 x: B6 J' q& |3 E6 p5 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 q8 n4 t% M+ r: @% ^
}, c. V. p8 ?+ C$ H; ~; Y* m' K, ~
break;
# A9 i; ~ z5 E; r" Y }. G/ o* Y$ R3 t4 N. v, }
case 1:. v: U/ q3 T4 S' R; I5 K: R+ X, P
{1 M: R6 E* q% d
//整理背包3 X( ]1 V; o) i. d, O
//////////////////////////////////////////////////////////////////////////
* f5 C2 Z% W! j Y; Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: O2 L0 S$ j2 T8 U4 \3 d2 s
//////////////////////////////////////////////////////////////////////////
$ F. w/ o* \# y5 L //////////////////////////////////////////////////////////////////////////! r8 Q# C5 { Z( l0 c+ x
CInventorySort* pInvSort = new CInventorySort;* U* ~4 r; E& K; ?9 ]
vector <sItem> vItem;
) I9 ?8 g: \0 v1 X; Y, f9 s* o6 k vItem.resize(MAX_INVENTORY);//初始化大小
% J2 W8 u! q' V5 | //////////////////////////////////////////////////////////////////////////* S4 K% N. {2 @+ @- }
//填充数据
: a' z- s, w0 v4 S" y& f for (int i=0;i<MAX_INVENTORY;i++)
" K5 p* V& o# z5 Y% |; A {+ i# m* T6 t! A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 P5 K) T$ m) ~5 d1 a, G if (!pItemElem)
" [. O0 ?# J; ~3 n1 O {" _& f! N5 _7 [
vItem.dwKind2 = 0xffffffff;
. o3 ]- D4 L0 s3 N vItem.dwItemId = 0xffffffff;( s5 P* c3 m* V& Q
vItem.nIndex = i;
& p: j" _* e; o }else {
7 ?* v4 `# `% ]6 n5 f ItemProp* pProp = pItemElem->GetProp();! v* j/ @0 z) A1 `0 p( F
vItem.dwKind2 = pProp->dwItemKind2;, o, y. r/ r! m! x# Z
vItem.dwItemId = pItemElem->m_dwItemId;
* t/ @- T7 \1 i' e$ j vItem.nIndex = i;/ u; }, |$ x: b7 S% f
}
& g, N+ V6 ]. z1 j1 L- v I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- r) y% c/ D0 x2 O y }1 T; l+ y# B$ c) u) t h% W
//////////////////////////////////////////////////////////////////////////
- t# G7 L7 L- ? [ sort(vItem.begin(),vItem.end());//排序
6 b# h. _. f" @ //////////////////////////////////////////////////////////////////////////# o7 S! c& o+ k/ I5 Q
//交换8 M% _3 O% b" M( R7 o
for (size_t i=0;i<vItem.size();i++)
$ M- J$ Z1 K7 o( N {# A: a- P" o0 x; [* N; k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, ?7 n4 z0 I& k( e5 e# [ pInvSort->Add(vItem.nIndex);
+ @" \: z0 h$ _. a3 z# q }6 u- X7 K* g: Z6 X) I* a
BYTE nDestPos = 0;
# k7 P3 Z. J! J" r* o7 N for (int i=0;i<MAX_INVENTORY;i++)' Z0 Z- S9 r8 E1 t8 r: O0 o& \) T
{9 O% q# T$ r5 P% H4 v- ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( G. y" M; v2 Q5 ?; {% [ if (pItemElem)2 Q" u' M- U' T4 j* g
{
3 M' D: d/ s, M. m v if (IsUsingItem(pItemElem))- }8 g# S& B3 O( D, m* |* v
{
4 ]& D$ I L/ T7 @; A; `! k( Q* q //这个位置无法放
& S; Q+ G+ q, k6 O- U9 q nDestPos++;0 {4 N. S% ?6 e f+ `6 A4 p
}
; u. V! A" h: T0 h }
( }' N. b. i; w, ^2 ]7 E BYTE nSrc = pInvSort->GetItemSrc(i);- B' X: N8 g' E8 `5 c+ k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 {3 K$ X' u. b; _" l* Y) e2 h9 K if (pItemElem)' I- r/ K; b# p/ P* }- x9 V
{4 h5 c, b6 h( U
if (IsUsingItem(pItemElem)): F0 I: `0 v' z* ~
{
4 o/ [* m0 a9 w8 k8 p) m+ [7 ?- l //这个道具无法移动,跳过2 W! F @1 u/ Y; }
continue;1 S5 f5 N- @* T3 P8 o4 o) S
}7 [& }; I y7 }" ?+ V
}else{
9 M5 v3 l& `2 y //空位置 不用动
7 w$ `6 o ^# L9 b( W( u continue;
8 M6 ^$ m4 k& _1 F, j" @8 l! c }
' w! M( s, q; M$ E7 `! L' B //////////////////////////////////////////////////////////////////////////3 R; S9 f9 I$ z: E* k
//开始移动
8 Z5 q! l, F- S1 ? if (nSrc == nDestPos)
$ P1 `$ @! h. ^- L3 ` {
5 v/ X% p1 \' b4 j# b //原地不动' X, |# K- J% D, j4 l
nDestPos++;* {) I3 g3 J+ p) i0 m$ z9 U! P
continue;
& h6 I5 J! m/ w }
* [- _& v8 b$ B pInvSort->MoveItem(i,nDestPos);. M9 `0 W5 b8 N/ ~: l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' f C* r: _+ z+ D Sleep(5);1 X3 }8 S; G' q' w- u
//Error("移动 - %d->%d",nSrc,nDestPos);
( h) H8 P2 Q- B% ~2 }9 r H& ^ nDestPos++;, e" ]1 K3 d8 S$ f8 G+ _' \- [ h
}
' i2 W6 V( q7 [* J& ? //取第一个元素的信息0 s* c2 w* N( l( n
/*& }5 J, L9 J; Y% c0 y: u+ g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ N: {% P7 F% a* D/ ]5 e {" B0 z5 E+ H1 k% D3 I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# M2 I/ z% u; L' E/ M6 w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' U0 p4 ]7 I. A% G# c; W }
! s7 T; N" P; P; H */
! v( Z+ C5 g( e# p //////////////////////////////////////////////////////////////////////////
' a4 B+ t% V( v8 Z1 o7 I5 l break;3 Y- Y: a" F' Y2 z8 }8 a
}) o6 ]% B: e' }' V3 O: e5 W* d- a
}
, R/ y% p. N- R}
) G/ \2 F( J" s$ ^2 E# P0 ]m_wndMenu.SetVisible(FALSE);
$ C" n, T5 R! o1 U" w
* c9 X2 o% m5 \/ O- e4 h--------------------------------------------------------------------------------------------------------
8 E0 `- E2 e( J1 Z5 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' x$ Y" `5 C% O/ W4 g( ~7 m- E; J{
' G* V' h A) [" \. m1 yBaseMouseCursor();
( `* F7 ` K; d; a3 g7 c}
Z; n3 J% v8 w- w o/ t* R在其下添加:
( f' Q% N& M; F. `/ A8 z8 ?& Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" x! d6 b; N b/ P
{8 g. b: `- i- _" u
m_wndMenu.DeleteAllMenu();* {/ P1 o [1 p! z% _" {% I4 v
m_wndMenu.CreateMenu(this);
( N C/ j: d* g% v/ S0 P0 B* Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# W2 d2 H. A& z6 i6 h; F' B$ C9 N3 Q# Y- r+ C2 q$ M+ a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 x5 F q P8 \4 Z, t{+ ^! Q# R& l$ J# P
//P以上级别才可以删除所有道具
M+ _0 a5 F) w6 o0 m8 S/ ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) w. U3 [6 i9 b1 s}& Q B" v" w/ R! J/ L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 a. Q8 X! ]9 L2 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! I! j; G7 G8 @4 r6 g$ T7 e3 b
m_wndMenu.SetFocus();
1 t4 o3 d' A0 d: b" J4 |: s}
( |3 a! X* Q; B6 E# F9 m8 |/ `------------------------------------------------------------------------------------------------------------$ W( ?9 @. x+ d. {" M# a
*************************7 s- a1 M) ~5 {/ j
WndField.h文件7 L3 v: a& x' P# }% r+ K
*************************
( m L1 C3 a6 X: A搜索:BOOL m_bReport;5 M+ K- y+ s; O, v
其后添加:' W6 W! R& m* T, e. ^1 e' ~
CWndMenu m_wndMenu;/ T# v( G! e. M0 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" A. }( f4 v" M* z4 a `4 R3 Y
其后添加:
4 v9 b6 e5 [/ v" [ U# bvirtual void OnRButtonUp(UINT nFlags, CPoint point);! y+ {" D+ a' u7 ^( w. K k
; \, ^) a/ Q5 m3 w
+ ~: s# R/ ~$ \; v- o7 R
|
|