|
|
源文件中_Interface文件夹下WndField.cpp文件
+ ]. \) h( T }: y5 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% j( s6 P' m* n& Z, l3 ?: U
. T- u- x4 U* x: K4 h
struct sItem! i' W8 w& a) o6 A6 o. _
{/ E4 \3 B7 N& `4 o2 D
DWORD dwId;
" s5 C, t; J4 A% e; J+ ?DWORD dwKind2;
0 w6 z9 `2 J# G1 E0 RDWORD dwItemId;
6 |! O& X& R5 f9 l3 HBYTE nIndex;- Y; Q! g( M5 l" F: h; k
sItem(){# V! z; d/ Q% `3 O& {& X
dwId = dwKind2 = dwItemId = nIndex = 0;
4 G8 r& I1 d8 R}
8 q3 x. U; S6 {) Ubool operator < (const sItem p2)
% f I' f% @6 U& |{
& z0 u0 U3 r; R6 q& D B if (dwKind2 == p2.dwKind2)
: y K- @+ b+ e/ ^) G {
( _9 H7 ^( N6 ? P1 c* ^ return dwItemId < p2.dwItemId;
8 w$ X9 s" @0 y# e' w. z }else{
, I# m9 C+ g4 A9 ]5 D; I return dwKind2 < p2.dwKind2;( N* `9 {! C0 ~, V. G: J
}
" b9 r* V; Q3 {, J/ A2 ?1 U}" M3 j e7 P r1 |
};
$ N5 v" D& F( Fclass CInventorySort
: B% j3 p6 m% n( m+ `{) F7 T3 l1 @0 i0 {. ?
public:
1 R, B9 Z/ Z2 _: BCInventorySort()! W; ]- P9 E R' c6 S9 W3 [3 x
{+ r& f* R4 T5 Z$ C, p* m. L) X
m_dwPos = 0;( j) o$ U. S( {% l$ P0 w. H
}$ e" F2 t1 H8 |! F2 L
~CInventorySort(){}: f3 Y- g: b. L9 n! k* i
private:
5 u+ H% x6 i/ D+ n6 u/ M8 Z# VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& b+ U2 R: e5 v: m7 n' K/ h8 y2 pDWORD m_dwPos;
2 }& R* V, |& K( Jpublic:5 B9 o$ V: K( w! ~; r
void Add(BYTE nIndex)
8 O5 s X9 d+ |1 E; s{2 m9 N; f2 C6 f1 A/ u& z, J2 d
if (m_dwPos >= MAX_INVENTORY)5 y& e+ u- g Z& Z8 a1 U
{
- ~. O. R# D: {7 p return;; f7 H P: Q# H3 X9 s. N* v. @
}4 v" o% C, G, |1 p- S3 `
m_Item[m_dwPos].nIndex = nIndex;: A: I* v- f, H1 N4 F2 q& w" e
m_Item[m_dwPos].dwId = m_dwPos;! ?( u- Y; S. K' O) N) j; Z: \
m_dwPos++;
. R5 n" m2 l1 u) D: c- K1 {}8 O+ ^# Z! P- M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 p, @" w: c# m6 u8 ~) S) T* Q{
3 B c4 C7 J5 M9 c6 n0 M- i% f# Y for (int i=0;i<MAX_INVENTORY;i++)
6 X% b0 |- Q$ ~% C {$ G3 W6 X( \0 r# |# p+ K! B
if (m_Item.dwId == dwId)/ x0 p$ f3 t% Z3 ]! F9 p
{& \' P+ _. `6 s& [# x
return m_Item.nIndex;
S; s0 p# `3 C. ]4 I8 K4 s0 R# Z }- }4 A- g/ N2 B
}
0 e( J9 l$ T& U2 P4 I( J return 255;% ^$ G' D( k0 x; M% T0 E" U, v0 a
}
% F' X9 \- g) j1 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" I/ P% V& z7 q3 T" t$ b" y{
+ Y% T _5 T7 G2 x& T' | BYTE nTmp = 0;
" S5 Z$ z! X/ D bool bDest = false,bSrc = false;
1 q- K; j; Z+ | for (int i=0;i<MAX_INVENTORY;i++)
2 @8 I, c3 s/ w2 Z {8 r; L. H( |$ C* f' K
if (dwSrcId == m_Item.dwId)/ F3 s3 ]; w$ H/ j
{
8 J1 m$ M7 l7 C) q) @% A8 p$ g& b //id相等 则 改变对应的dest和src" q2 L4 ]$ D/ }; [2 v
nTmp = m_Item.nIndex;9 a) I0 Q1 [' D1 H5 T# l: ^
m_Item.nIndex = dest;
( q" A- b5 m y- X; q- t: ~ }
: o; [' ~! E1 b$ a }4 Z) q9 ` v; w$ E
//临时数据保存完毕,交换开始
6 |1 _ _$ ]& J& @- Z for (int i=0;i<MAX_INVENTORY;i++)" \! Z- m$ m0 o; f; G
{; s( q8 }# |& N: R7 m
if (dest == m_Item.nIndex)
8 f6 N( K8 q% t5 ~ {
: M! W' H4 C9 ~9 Q: Y+ } //id相等 则 改变对应的dest和src' _9 l6 R# ]" S& j% n' b- Q) g; r( Y
m_Item.nIndex = nTmp;; E; x. p1 B2 Z8 M+ B7 b. G' `
}# ^8 s U4 }6 ^5 J% P! M- q( T
}7 B6 m! ~' }6 ^1 z
}; F! F' \; \$ j- v J+ w
};
: n0 N& A. N7 T* @-------------------------------------------------------------------------0 r2 C! G, x# M0 J6 K: b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 r3 I1 b C& i: V* S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 ?& f" O+ a, v9 O: o" E5 c, _
紧靠其上添加:$ ^" F# b4 J$ c- o! V
if( pWndBase == &m_wndMenu )
% C4 u: z- w+ N3 ?+ R{
* j5 D" H( U. J8 o0 s5 q) f switch( nID ); `: e* l; v8 I& j' M
{
( c) W" K" u2 e J1 [" [! v case 2:
* z3 ]3 @% z" @! R% q/ z; X {
" _) C* s1 G% \2 h. h& C+ l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 R: F/ |, W0 B" s% S5 a; u. p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 E& C& @% p% p {
/ P) A+ ?9 g( U# } b7 Q break;# E2 s% r! y h/ c
}- k% N) k+ t' p3 H d
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- {; K6 R6 L* n2 i9 H {; T. W. g% b8 J' e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- Y5 \, E1 ^5 _! ^( g' v if( !pItemElem )
1 ^. u5 K4 W% ^5 f) A2 H continue;
% H7 y$ p3 ? h+ h4 K; C# e if(pItemElem->GetExtra() > 0)1 d% f8 h4 Z! K$ Y/ W8 t9 _
continue;7 f |# |$ d/ p5 y+ A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 B* v$ z/ m; ^# [; |
continue;
% R5 n! V3 G. b% T if( g_pPlayer->IsUsing( pItemElem ) )
3 H/ o) X5 c+ ]$ ^% l+ P continue;
4 J5 _$ m" \3 p% L I2 S& Z if( pItemElem->IsUndestructable() == TRUE )
" P1 Z# T/ ?2 X0 m1 U {' Z1 a4 j' u5 {% `6 }& t1 p% l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 n3 k' y7 _; M continue;
& O; b3 e& t1 Y }1 n' \( W# q: b2 h: R, Z- E4 D2 G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; Z+ g1 W0 M0 Q7 v
}
5 s" j# f7 T' P0 b' `! M3 c break;
3 h y8 z O4 Y; @1 h# T# U) s- k }2 |( p: i8 A: t C) k6 [
case 1:; c6 a) j% c' v4 A/ J
{
% g0 y2 h0 Q8 y+ n4 D //整理背包) @7 j+ D- R p; U2 d* ^
//////////////////////////////////////////////////////////////////////////% D+ F z# z& |& ~& t M: d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ a7 v/ f5 U0 I: p+ I /////////////////////////////////////////////////////////////////////////// A! w( {0 n3 e( O
//////////////////////////////////////////////////////////////////////////
% R1 q7 C2 O# l; h! x1 q: } CInventorySort* pInvSort = new CInventorySort;4 U! U; i. L- B
vector <sItem> vItem;
" ?. }6 x8 m: Y* ^ vItem.resize(MAX_INVENTORY);//初始化大小
K# |! {2 \/ d% ]2 J //////////////////////////////////////////////////////////////////////////
2 c, z v% u: B/ S0 Y6 k: Q# U8 i //填充数据
1 W! e! y1 w, U. h for (int i=0;i<MAX_INVENTORY;i++)
0 } K. D0 X3 h. |, L! B& X {
2 f d0 c! s' ]8 G/ \) ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! P# X' `, }" m" Q3 l" v- M
if (!pItemElem)1 v+ P% p$ S6 q5 q8 a- V( y
{5 u5 U* u: ?9 f! Z* s$ Q
vItem.dwKind2 = 0xffffffff;5 x- K5 u* k i% [
vItem.dwItemId = 0xffffffff;
, `" f7 r* U' y) g, A7 r. U( k# k2 Y vItem.nIndex = i;
2 I: b* t4 B- F/ J' f! m' L" v }else {
+ j# M) i7 n3 u W6 a" }: B( _ ItemProp* pProp = pItemElem->GetProp();$ N; Z7 v( H2 |8 d" I
vItem.dwKind2 = pProp->dwItemKind2;
8 R4 B, U4 y, N vItem.dwItemId = pItemElem->m_dwItemId;
+ b% T( s2 p8 R1 X vItem.nIndex = i;
) p6 x3 M* o# e" o4 p- a3 K }$ U9 @; |+ X3 i% P5 x J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); P M3 I: x' n; M9 C
}9 Q5 F3 F$ b: r O+ I4 e
//////////////////////////////////////////////////////////////////////////
2 i% I; L5 a( K% |1 p- v sort(vItem.begin(),vItem.end());//排序
% ^8 V' T4 @- x- J/ f //////////////////////////////////////////////////////////////////////////
1 X2 ]" l S8 y3 E //交换/ C' T8 D3 G' O- E! H
for (size_t i=0;i<vItem.size();i++)
6 j' [! {( v( W/ J {+ n8 q. p( z( ^7 h' ~% j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! q" m+ y5 S ]2 q- x/ ` pInvSort->Add(vItem.nIndex);
+ r6 Y- c* _& D6 E- { }
. t' \ }; u7 ]- J) j BYTE nDestPos = 0;1 ~& w- _7 ^3 s
for (int i=0;i<MAX_INVENTORY;i++). z, c3 W9 j3 [: g
{
) k% f/ \, f' [1 z6 ^7 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 l! Z' J1 X) h# k. E
if (pItemElem)
) C4 w/ I0 S: j% m9 _4 a {$ J% R- G' P) S' T B) ?( w" x6 Y2 r; ]" P
if (IsUsingItem(pItemElem))
7 ?! n9 g* h G, p {0 k$ h$ n' x; m. b/ C
//这个位置无法放
. M( e0 r. r2 q# [7 k nDestPos++;6 P U5 H" {% ]& p
}5 p0 ?6 p1 ?- N$ L
}
" F3 L9 D4 C6 }4 a4 y BYTE nSrc = pInvSort->GetItemSrc(i);) P1 {) V1 u# M1 I7 S5 S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; o3 o0 H3 h# A+ E" v if (pItemElem)
. r- q. \5 j3 Q {0 \6 S3 }$ R1 S- r7 s
if (IsUsingItem(pItemElem))' S$ A& R) o+ X# d, f( a6 I
{
# ?+ @/ m) R- S# y( ^) Y3 U; E //这个道具无法移动,跳过' t# }+ n, `' N
continue;
( @# j1 F2 H4 O, u& t: M }
8 \3 }1 @: `- L3 e5 r }else{
; z* H- m2 N; K; e4 g //空位置 不用动- W% V# j2 e" s5 e* ]6 i
continue;2 u6 Y7 S: n+ i( F e* c
}9 W4 k" ^7 [4 G: C
//////////////////////////////////////////////////////////////////////////* k: T3 t* ~0 w! j7 s. z7 F
//开始移动9 N. j% a+ o& z# W
if (nSrc == nDestPos)2 U/ W/ H; [% d# b" e* _
{# W4 B" G! N& D) u/ {
//原地不动2 W# \7 s1 W7 p2 S7 D( l L
nDestPos++;
( l6 K; ?; b) n4 G" R; @ Q& c continue;
- M( C9 a( G. J1 | }
) i" ] d; p: a0 j# G; ` pInvSort->MoveItem(i,nDestPos);
' P$ W( }& ^ l7 x" y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 x9 t- j6 e4 ^1 |% k6 t+ J Sleep(5);
, o9 s8 D+ a8 q- j% B4 y6 \! |9 Z6 }$ r //Error("移动 - %d->%d",nSrc,nDestPos);
: S7 W' ~7 I {1 \ nDestPos++;6 S. v1 v4 ?1 t4 M! [- D* F
}
4 k Q- g7 H$ c9 \, c& \ //取第一个元素的信息. p8 t7 A& w! d) y& l! ~
/*; c( H; Q+ R5 P5 s0 z" `
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 z+ [/ Z6 _* t r& ~8 H {' X# W" v1 c: l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 N3 M3 X, ^- K9 T9 [7 J6 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 B9 k$ v% Z' s- U& a }2 {6 N' ^, [ V$ w/ D' a5 G
*/% u3 h' v! D7 ~
//////////////////////////////////////////////////////////////////////////
0 v5 E1 z# H. _, w- i break;
1 b; L9 i& V7 |* W& f, r }( d+ W% P6 F( q1 g3 \
} : u/ G9 a$ w+ l1 Z7 I; t1 n
} ^: r/ s# N. B! `
m_wndMenu.SetVisible(FALSE);
% h' |" B# p( L; P0 |. M$ X8 N6 W: V8 j- O4 F1 U& h
--------------------------------------------------------------------------------------------------------. V$ b8 K$ V( w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' S" z/ I- l8 e
{/ w5 E9 s4 u( p8 G7 X; H( C
BaseMouseCursor();# [% j* `/ U8 P5 ]1 c; g! e P3 I
}' K& O8 g7 L5 u, H/ s& c4 r4 ?
在其下添加:! I0 i \& U+ ?' a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ d3 E, _& d( R1 Z: H% G$ s{* ]2 r# E9 ~! K/ S" P
m_wndMenu.DeleteAllMenu();$ o+ W; k& O' B: k, _8 n, }) P
m_wndMenu.CreateMenu(this); b( ~4 C' \$ l; w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, I' j" Y6 t% w- M
- u3 [' q! Y* J7 V* h# ?3 Z0 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( m% @ F. w% y9 T{
: j! M1 t) H7 `+ R" R. d* n- Z* S //P以上级别才可以删除所有道具
6 m" G8 b {8 C& _ h) g7 b m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 H- {) }& d/ _# _+ x2 s}
7 r" @, z. X% l1 ~2 `9 |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, v* \% L7 H! |3 G w) v) j8 {+ x ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 d g0 S# W( D$ am_wndMenu.SetFocus();
- Z _) O7 m7 }+ |6 E& K. A}# ^8 F M% m |" F
------------------------------------------------------------------------------------------------------------
, M7 c, N9 [/ E# b*************************
9 e5 I0 J7 s' F7 D* T/ RWndField.h文件
" B- ]- Y( Z" i w$ t% w" _# n*************************
8 n( @4 o, f1 E( H! G搜索:BOOL m_bReport;: I" p5 x4 [5 \6 w) S# s5 }
其后添加:' G" ]3 [4 K: f3 P! p# n5 A
CWndMenu m_wndMenu;( M n* k$ g$ R' v3 ~; g1 x
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 [, ~) f r3 c$ _/ h
其后添加:" Q: Q" s- z9 w1 B' K5 l( j! V9 M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- U, ` ^; e- Z) G0 c
@, t4 C* [4 r+ p2 _- g( ], Z& Z V% p& V6 B# K
|
|