|
|
源文件中_Interface文件夹下WndField.cpp文件
( {0 K8 w3 B2 v6 J7 H, u4 d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ n5 i3 b1 | R- C
4 P' _! u; g! Ystruct sItem7 m6 Q( w4 n( M. c6 y6 h2 e" c/ T H
{6 c7 W- k+ w0 L3 B! R1 U2 A
DWORD dwId;
9 W0 w7 X' C$ N) _8 |, `DWORD dwKind2;
6 j) [. ^- t5 V$ y5 K* P9 K d" aDWORD dwItemId; I6 ?" j+ n0 s! Q" ]
BYTE nIndex;
; [, W7 H3 I U. KsItem(){
/ W4 ?" }- h( E* V% x8 ]& u# E dwId = dwKind2 = dwItemId = nIndex = 0;' M. t. v" Z; n# L; ^
}
) t) J K% h0 A& \bool operator < (const sItem p2)0 y u. e2 d4 E$ ?
{
2 Y( q1 H* W. i) F+ R if (dwKind2 == p2.dwKind2)
& [/ c8 c0 @0 h6 b5 v& i- R {& V5 {( b( q+ h
return dwItemId < p2.dwItemId; P% e; M; ] S' t# B7 I
}else{
! f6 y8 s6 ~. E4 { return dwKind2 < p2.dwKind2;( J* N2 k# h% t" I: n/ R9 s1 U/ C; c
}. T; k0 a7 n1 N8 m9 E0 C1 Z S
}
$ b, t: L( ~% Y};9 b" J: Y- ?: Q, L. C- E9 I
class CInventorySort7 b; E( V/ h* _% S
{
" f- c& P( L Y z3 W9 apublic:- n% t! j) z6 d- C2 E
CInventorySort()
( E2 l6 M8 K) S{
8 P# \$ a) Z* G6 N% y m_dwPos = 0;
* {: ?# f% J' U8 g}: T: H- z" E( Y; l+ C' w& H
~CInventorySort(){}
4 z6 Q$ h( v0 |5 D& \private:& q" }+ ]0 I2 f' P, Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; l$ Y& M9 n6 n
DWORD m_dwPos; S% v: w: C2 V4 x
public:
4 W1 x3 J( t; C# P9 lvoid Add(BYTE nIndex)
2 T9 v9 M e6 ~* q2 o# T4 o{6 J5 I, ?5 ?& n& ^ q
if (m_dwPos >= MAX_INVENTORY)
1 W3 ]" g- l: g! L# w; n( B% N s {0 {: |5 [( E& ?; \
return;
% \# E, ]- a: a. v/ W: k }2 m0 K% e, j, l0 N& F4 D; G+ w- B
m_Item[m_dwPos].nIndex = nIndex;8 _ u) Z; M+ P4 k& X" ^
m_Item[m_dwPos].dwId = m_dwPos;
* `0 |% \0 o% l, ], u m_dwPos++;
0 P( G8 y0 u) m}
* Y9 P2 J, X1 T8 c' }" T, SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; b; |7 o( N; Y) S+ o6 p{
9 a: p* j0 K7 o4 R- ` U for (int i=0;i<MAX_INVENTORY;i++)
2 q. t' ]9 h3 J! [6 m2 H {( J4 s; u9 }# l! [, F
if (m_Item.dwId == dwId)5 Z. d' ^% ^4 w' a/ l- Q
{' \1 U% R+ q0 u# L3 v) q
return m_Item.nIndex;2 B$ d* Z! t) }& C! \
}5 P* z5 u' C7 w& y; j! A
}# E9 w2 E j) u
return 255;" n; o1 } z5 s e" E: u; W
}0 M) Q4 i( z( w0 a3 j! |! C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 _8 P( ~9 ^% [+ b7 h{6 l) d0 H) {* j; `: T) `5 L
BYTE nTmp = 0;3 y+ |. j+ l5 N/ ?9 [* U2 D
bool bDest = false,bSrc = false;$ g* A4 H* @, p$ _0 g
for (int i=0;i<MAX_INVENTORY;i++)
0 b- D) Z% e8 b2 c, [- R9 f {
- B. G+ r6 d& c9 L. L if (dwSrcId == m_Item.dwId)
& ]2 \* i& _; w: @ { v; i( R; Z- G b( B% l R
//id相等 则 改变对应的dest和src4 M0 O. V c! k& L' y9 u
nTmp = m_Item.nIndex;7 B$ d% Y! E& l. \7 K1 f+ N/ Q
m_Item.nIndex = dest;
5 c1 ^6 o* t4 y6 w% E }
6 w5 x9 w4 t: j6 U }
6 O3 x q" B; K! K1 K6 _5 h. Y U //临时数据保存完毕,交换开始
# g' o2 M0 U. n for (int i=0;i<MAX_INVENTORY;i++)* i0 E+ A- O" E9 ^
{) `- C6 W4 M- f, w0 [
if (dest == m_Item.nIndex)& L, b6 U! ^. Y. i; u2 S, h
{5 u1 \; }# b' w! b1 F
//id相等 则 改变对应的dest和src
$ ?) P6 Q1 J- }. ]$ h m_Item.nIndex = nTmp;- f5 Z7 }7 F6 m+ I H: }
}% Q2 x8 {- [7 c8 u, G
}0 b* P* {" R9 ? G; u e$ v2 _- b
}0 z% y9 R: e$ E" @; v7 u2 u
};7 q" ~( R* B+ E& q: C
-------------------------------------------------------------------------9 I1 G O- Y# A" ^ o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); c% T0 s+ [% M0 T3 U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ @5 X7 F" X2 k# O1 K$ l紧靠其上添加:8 L" i# W+ K$ P' g
if( pWndBase == &m_wndMenu )" O# c0 ^$ g S% }
{' D4 A& @$ Y5 j* }4 ~' V! X! s9 G! }
switch( nID )9 a6 H" M2 X) u# r2 F# i
{4 |" Z: M3 F# h- T9 i) R
case 2:) h6 S, L( |5 J$ Z1 f7 ~# N6 H
{
& m7 @- c# J, `1 Q# g) s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 v9 `, ] W7 Z' J- M1 a/ d, ]- W: e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' Z% A( M/ l J1 C {
; C. E; J5 x! ^7 K3 ] break;
( S2 p6 U" ^/ x k2 y* O+ p }- u. R8 ^% [% i0 A' S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: a( T; @# ]5 `2 P- J {1 P3 g# I6 T5 X9 Z- R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 ~9 j* Z5 f2 ]; X
if( !pItemElem )3 ]3 }2 S d+ I( t+ y. q0 b" m5 q
continue;
- ^5 R$ ^ X1 C3 L1 e if(pItemElem->GetExtra() > 0)
3 ^- e2 c% ?4 I3 c# ~) j; y continue;
6 d. _! U# ?# e6 x3 `$ r! Y! m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; ^$ o2 y, [ {
continue;
+ }! A' X0 `( W if( g_pPlayer->IsUsing( pItemElem ) )
" j5 ~/ e" O% ^2 c* o* \( T; R continue;
' z# A/ R, }+ ]5 | F* e% \ y if( pItemElem->IsUndestructable() == TRUE )8 i6 c. _' M7 x2 u4 I" `
{' ^ o8 p/ R4 ]! T0 F# A- u9 l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 E. i/ H+ i6 u6 e# K continue;) }: o; k; d- j, I l+ Y9 s" N, X
}& }& t1 z* M/ }
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* E5 D. p0 a3 X8 j' t5 b. }' l; z0 ` }! a: q* M4 I2 ?" i5 H
break;
3 t, X; }; V" O7 U }
+ i" O+ I) x3 t$ [5 Q) Q8 X case 1:
( K1 y$ P2 O C7 i* F% i {9 j+ n7 c" r# v* w4 E
//整理背包2 D5 ]0 Q, T$ u" D2 g3 g F- T
//////////////////////////////////////////////////////////////////////////
* E4 x0 l/ C1 W3 w1 E# ~- j' X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 X: C a4 P& N8 T j0 p4 v( T1 I: o
//////////////////////////////////////////////////////////////////////////
: C" I. w n, w% C& E //////////////////////////////////////////////////////////////////////////
% y! H, o. Y- t: E' q) E( Q CInventorySort* pInvSort = new CInventorySort;
4 z! q$ F/ f$ W# x% L vector <sItem> vItem;" T) _/ u0 j9 X1 a8 U
vItem.resize(MAX_INVENTORY);//初始化大小
& d# ?6 Z" |7 G' l$ N6 P1 ~; [! d //////////////////////////////////////////////////////////////////////////) q. R3 k- h$ Z8 j! Z' {" e; H
//填充数据, U' F* X5 e% E# L( t- `
for (int i=0;i<MAX_INVENTORY;i++): j) r. M, [; P
{
; E6 |% B/ F) Z4 U1 X; o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 j+ Z; g/ @" P0 Y5 k5 f
if (!pItemElem)7 d/ Z W& N0 o5 K) M3 `# a
{2 L& \- O8 p5 d& s1 S F% [
vItem.dwKind2 = 0xffffffff;, w" I3 Y( B0 {& N2 g$ D& N, f7 O
vItem.dwItemId = 0xffffffff;6 x1 j) l" a+ [2 F
vItem.nIndex = i;
4 J' z1 G8 }$ `/ J% `9 p }else {
& ]1 H0 }- m5 T3 V ItemProp* pProp = pItemElem->GetProp();/ S3 x2 J- O: \7 ]2 G0 [
vItem.dwKind2 = pProp->dwItemKind2;
9 \: r! _1 d6 N( M vItem.dwItemId = pItemElem->m_dwItemId;
; J' a* Z( m/ }: Z- j4 w vItem.nIndex = i;
9 I! w+ a' Y# r) O3 Y7 ? }
( q# y" I( @( X+ K! s4 K/ `0 w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, ^9 ^8 Z: `: d7 U" U$ ]0 a) F
}$ O: l$ N3 {; _8 C: U
//////////////////////////////////////////////////////////////////////////3 Z9 W& P( k( ?: p# n$ D# W+ z; T
sort(vItem.begin(),vItem.end());//排序
+ k- @" g/ ]* a //////////////////////////////////////////////////////////////////////////
% `# H I, f# r: r //交换" d; b! j- C- E! Q
for (size_t i=0;i<vItem.size();i++)! f& u( o" t/ a ?/ b" D0 O7 q
{
$ i' e* Z/ n# e. {+ A# ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ X( s/ t- Q% `7 B
pInvSort->Add(vItem.nIndex);
9 _( T2 o4 Z1 S: B! ` } d- Z) c5 q4 u+ D% i& y6 n2 R
BYTE nDestPos = 0;! B h% p/ c9 J% b# u
for (int i=0;i<MAX_INVENTORY;i++) w. K! Y2 i/ J# k9 h+ L
{
& X: W1 ]9 M3 K3 T, ]( @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) @2 `/ }9 n6 g9 Y& l2 g
if (pItemElem)
4 Y( e9 b) ]% ~/ l8 o {
3 x& q+ j$ {' J0 e6 N: c if (IsUsingItem(pItemElem))
) ]* n& q! o# @: }2 E {
$ y6 K1 J9 S1 d+ ? //这个位置无法放" L6 L7 _3 p" w2 p, S
nDestPos++;8 e7 t+ w- c) n, K. `
}0 Q; R0 F* p5 u3 c
}9 B3 L& D5 {0 N5 h" C D
BYTE nSrc = pInvSort->GetItemSrc(i);
* W; @3 N+ a: {' F. s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 n0 B5 L( g( k5 Y' o if (pItemElem)' A% x, K' G* [. o/ w. s- E0 w
{' m4 _, a7 L& f! e& N% i
if (IsUsingItem(pItemElem))" {: R R5 k6 X
{0 P$ k9 r2 k) n8 p7 P9 W
//这个道具无法移动,跳过7 l: D5 A- o2 h
continue;
, T# Z9 D. p, Q+ v0 }. F3 V4 d }
- [9 \! I/ q+ P/ M" U1 j }else{7 L3 W" N$ C4 r) ~
//空位置 不用动
- c1 u/ \5 t/ d9 `4 Q ~- P continue;
& O5 X$ Y C6 m0 _; J# A }
& |& E& l* {" e: Q. b, R( d: A //////////////////////////////////////////////////////////////////////////
8 z. J R; {" T" z- w/ K& m //开始移动! L6 v) E C' y5 b
if (nSrc == nDestPos)
% b: |$ g4 d& T8 a {, C( ^1 n+ @6 b$ T: y' K" g# i, O: C
//原地不动
7 u* |7 x2 f- Q0 _1 U9 s/ m nDestPos++;) ]: f: t; k9 ~! w$ H; O2 h9 O
continue;
8 @, y4 U$ M% a! ?8 f9 ~3 m% | }
3 f3 V+ d, Z$ ?: d pInvSort->MoveItem(i,nDestPos);
' b! r4 i& u/ b- G% O4 Z2 _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" [5 D' e( W- \8 ?; n& m% A Sleep(5);2 r# o( Z p3 R8 R5 ]& G
//Error("移动 - %d->%d",nSrc,nDestPos); ^* S2 h4 y9 c+ c; ]- u8 d
nDestPos++;( f( D5 V5 z! y+ d
}( ?2 j& C! C. M: C0 p3 v8 }7 ~! ~
//取第一个元素的信息
4 R; H; n. H5 ] h* y /*
+ g$ |3 e8 n. L6 S0 ~, W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 h( b/ T# ~3 E% Y {7 D0 k2 C N! B
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- U6 n. G+ |2 | \' \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% L: Y% x7 `' Q; B J) |" P
}% @2 E5 P: r& T
*/3 C6 t8 c+ |+ a; d! b) j
//////////////////////////////////////////////////////////////////////////
0 M- L/ @/ O! {' l+ X' U/ h break;1 u0 C- \1 S# b, C
}
+ I: w2 Z0 q6 U$ W3 ] }
' I9 [' C% l5 e' B}
! W: O( V/ k8 ]* L3 z/ h* D4 r! Em_wndMenu.SetVisible(FALSE);
' ^" h) `0 h+ j0 ]% w- B! C2 o D- e% ]4 G) y+ x% A
--------------------------------------------------------------------------------------------------------" @/ p* q4 x" Z3 s5 p5 ]
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 J; [ v; K' t9 O2 b$ ^7 f, R9 Z4 D2 i
{: y, {+ s2 W" d6 A: |" h
BaseMouseCursor();6 H8 L6 }2 U/ h7 o( d" ^
}
4 A$ m: `7 d5 x在其下添加:9 V; R6 b( c, B# ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 d. j/ V- J# L8 S2 x5 x# b6 |
{! p( ]4 R" L6 H* s
m_wndMenu.DeleteAllMenu();! Q, M8 O4 K7 D" ?
m_wndMenu.CreateMenu(this);! [# i. n+ N6 n6 @9 v
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# N! L" R: T' y" b* k7 V
5 }: m# A8 P+ E% F: ]8 ]1 bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' U8 ]7 B: s( e! _" I
{' A5 b& s+ z' g, h& c6 A5 W
//P以上级别才可以删除所有道具+ D4 N% z0 ]2 T7 K, X6 E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ Q- u S* x& \
}- h0 X) W4 R6 B0 K& H' ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- S# z- F2 z7 x# k) q. h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 M) M7 k: b$ b, km_wndMenu.SetFocus();$ O$ W9 N4 i; i" i% [6 ]1 {6 A
}, h, H9 {5 M; F$ h1 P# b
------------------------------------------------------------------------------------------------------------. n- _9 K- S* y( ]# i. b5 s
*************************
0 q$ a3 i$ ?8 ?3 `WndField.h文件
% l. a4 V0 @% g. z# |4 A- m*************************
( o3 A3 s' N: ]2 Q+ F搜索:BOOL m_bReport;0 |( L, o1 D+ l) d
其后添加: X; u; C: r# L t* Z3 m" C4 s
CWndMenu m_wndMenu;% _* P: f$ H, y: v* ]) C( |( C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 B) R: w* n' {7 y6 @9 G
其后添加:4 E' K7 b- U# a6 j/ k) ?, S- `7 d
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 E& l1 p, ~3 d, @# I
& g7 u3 b* g% q5 J O6 d6 C/ T. Q. A: r& G
|
|