|
|
源文件中_Interface文件夹下WndField.cpp文件
. D; G [5 v/ q$ F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 e/ u: D5 P, t2 W
; Y" w5 f. t3 |% Z! Rstruct sItem' h: _+ S& B+ K
{
" ~- T- j' U. K' V8 NDWORD dwId;
' p! z9 [% i' U' p8 k! o- y NDWORD dwKind2;
X, J: g0 g9 t' H, I# uDWORD dwItemId;
7 S2 F+ x/ A) S$ {! ^, fBYTE nIndex;2 O! w5 e6 U4 \# e
sItem(){4 F8 x, i& b4 {: U
dwId = dwKind2 = dwItemId = nIndex = 0;, y! Q# t j% b! N
}# ~+ s2 J3 V7 n! E+ {
bool operator < (const sItem p2)9 o# r& P" d7 W, t* X
{
* a! D$ P' L @ if (dwKind2 == p2.dwKind2)9 N1 ]5 ^6 c/ F# u
{# y5 }8 q8 v p/ D5 t7 X# W2 A; d
return dwItemId < p2.dwItemId;4 {2 o/ H/ l9 l! s- t- A% E# i
}else{. h: m" ]0 r1 W2 Z
return dwKind2 < p2.dwKind2;2 V& K, e6 l9 B: ?# V
}
9 `2 @8 p8 ~ N" @}
6 t6 \% b$ A+ F( _3 S5 o/ M; K' y};
+ \1 U3 Y& B* q) Xclass CInventorySort3 B8 Q/ ^9 |8 c: F
{2 z& m5 P7 w( J N
public:; u. ]& R1 n c) C$ Y6 A- j, J$ o
CInventorySort()
# T2 n; |$ b. F{
% f! H$ f9 h3 Q* s5 g m_dwPos = 0;
$ M7 p6 S1 y0 }}6 f+ s, `# W6 k& M8 P
~CInventorySort(){}* v+ f2 |. A& t/ H" T
private:7 ]5 z/ S, t3 x5 G) j/ i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 i; p9 C% n( U. N: UDWORD m_dwPos;( C) Q: o8 Y( U: C0 j6 M
public:6 _' ~1 s Y4 H: `% p& }) B& A
void Add(BYTE nIndex): o7 d3 p$ I2 U: {6 Q9 w0 P: b
{
; n0 W' h& O3 V0 s$ w! f if (m_dwPos >= MAX_INVENTORY)
2 [% r1 {! A* r$ r {! X9 e/ O! j0 S) q* W. _
return;
0 j3 V% R5 W( f9 @ }/ E X! h- q( L- Y" w, k
m_Item[m_dwPos].nIndex = nIndex;
) m1 D) }2 J" X, N% M m_Item[m_dwPos].dwId = m_dwPos;% a, u+ ~8 G5 f+ j
m_dwPos++;
3 `( l6 }! {& F# P/ e s2 _}5 Y4 j+ a9 y: {3 a- Q- C" o- \% T( E3 z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) q/ o2 P6 {$ x2 B{- I5 S4 a, c$ T8 g( E' L
for (int i=0;i<MAX_INVENTORY;i++)- n* P% w6 z C9 {& f2 o2 `1 [
{
3 o& ^- V m" C5 x if (m_Item.dwId == dwId)) s% L! ~" @5 ?5 e$ \
{
O4 v# Y5 u3 r- g return m_Item.nIndex;3 j! [" |! r# E* k; w! L
}0 e, T4 o- E8 ^; K
}" L4 k: U; E7 \, S. i0 Q
return 255;
2 j3 ]; w, D4 m: [}
; v& ^' z l }1 }/ jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 f! ^1 u4 i# Z: @$ q
{5 l, R( e# G5 ~/ X0 ~' e
BYTE nTmp = 0;4 A( ^9 J6 i Z1 N7 S- y: g
bool bDest = false,bSrc = false;
6 {$ `) F% c0 N3 \ for (int i=0;i<MAX_INVENTORY;i++)/ c2 K8 h+ F' V9 A5 j$ |) e$ Q
{4 E! c/ |) w' h) W; H
if (dwSrcId == m_Item.dwId)/ A$ a. {( X9 a; H% a
{4 N4 e" U$ L' D6 m( ]6 N
//id相等 则 改变对应的dest和src
! S" Q3 E7 h; I nTmp = m_Item.nIndex;7 r: q/ n) o1 ], m! L |
m_Item.nIndex = dest;1 Y8 y5 A' l7 g4 h* Y
}
3 {' f& i1 v* n+ b4 N }( k3 v- G( p: }2 L; t9 m6 P5 L: Z
//临时数据保存完毕,交换开始
6 W- z3 @6 ]0 j. }0 \1 X( k+ | for (int i=0;i<MAX_INVENTORY;i++)$ V6 y) [, f, x: k% A
{4 F/ U0 S4 V1 Z: ^
if (dest == m_Item.nIndex)2 E3 n2 L6 o/ E9 N, _6 e
{
2 W( T0 O( J y //id相等 则 改变对应的dest和src0 u7 r* d4 ^0 b8 ]
m_Item.nIndex = nTmp;1 \: P- R- h, C0 i' s, d
}# B, y7 e1 S6 ]; c
}
/ Y* m0 L% J% I* M- M: v}: k2 |( A! G5 ~
};
/ R, K- u: B7 d q/ D1 }5 n-------------------------------------------------------------------------
( P: a# y; w% \0 A7 R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 n: G8 ~: A& T! \) l- }; F- v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 \7 ^9 d+ V2 I3 l3 }( U _紧靠其上添加:! P- R+ q F' S* G
if( pWndBase == &m_wndMenu )
( o( }0 `( x H{7 N, R; z4 Y, Y( w
switch( nID )1 N8 e6 R5 I/ ~1 ?/ [
{) W- _/ b5 S; ]+ G8 E, P3 X
case 2:; M7 P2 a3 a8 I& L) @* J$ s& k
{' e/ v7 j$ Q1 U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ ~: n2 K) u S; Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 \* n* e, B) y' k {
6 r$ A9 f6 A( o5 G% p4 o2 Q break;% @& g1 l$ X& n# \# B" ]
}9 Q2 A1 R# p: q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; o0 Z( D4 ]5 w- u7 X. r {
+ J, X( G& Z: I/ R4 t. u1 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 n1 L& {4 K0 r* e2 Z if( !pItemElem )
8 d% Y; E# |) M! a- | continue;
& F: n! E& m. p! ?' l. Q if(pItemElem->GetExtra() > 0)' r5 T, f! D& i
continue;
2 Y/ a3 o _# I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 U. M) V+ V, E" k8 U continue;: k! G4 Z% Y- j) l% A0 @
if( g_pPlayer->IsUsing( pItemElem ) )
6 r4 R. _! k8 v0 m continue;
# B. p- b" f+ H6 e" `( u if( pItemElem->IsUndestructable() == TRUE )2 O4 }1 Q) R5 D- }% C8 J2 T! K# w
{" x, I, n) M) N2 K7 R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* n9 B+ D( e: R: B `6 a6 k+ l4 N) R continue;
: [% J$ `1 B: f2 k, W }( z+ q2 _. m$ b: a, T" z) `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) V& R7 d; X" z9 I" H( f' d8 a
}
( ]: b. K( h: n- T* S2 b* s- e0 g break;( q+ d2 Y* k/ r% U
}8 u6 J% k4 x) J( k' q0 U
case 1:5 \- B! N% ?) L' e
{% e0 q5 W5 R- n* L l+ i( T/ X
//整理背包7 _$ J" O7 x, r$ X$ S. \
//////////////////////////////////////////////////////////////////////////
j: E6 _8 l$ z6 ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% B' n0 q4 A. m* c1 }' o0 [ //////////////////////////////////////////////////////////////////////////
$ R2 C3 N! ^( _6 _ v //////////////////////////////////////////////////////////////////////////
3 z' f7 x1 ~9 i3 f* j2 d1 I l CInventorySort* pInvSort = new CInventorySort;
9 b$ T; G! o" Q- j( ` vector <sItem> vItem;
) c) x6 J0 w) p" Y* u1 G/ f vItem.resize(MAX_INVENTORY);//初始化大小
3 b+ r& S4 s1 ]1 F& g5 L //////////////////////////////////////////////////////////////////////////
$ \( ~# \; e# z6 D! D7 _# v. i //填充数据( o, S8 D7 O6 u
for (int i=0;i<MAX_INVENTORY;i++)2 t% l4 k" ?6 i9 R1 G
{
+ V# m3 }. K9 v+ A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! [! _, W1 k/ X7 d/ O. ]5 ] if (!pItemElem)& e! \0 V3 R q/ v
{4 g" I- ] Z+ ]! U6 U4 x v! a
vItem.dwKind2 = 0xffffffff;) D- B! c [: p5 V- s# E
vItem.dwItemId = 0xffffffff;
& n: D% h) ?9 X2 d( w vItem.nIndex = i;
0 W% d% |9 e6 o0 o }else {. c6 y& J" Q3 M3 Q5 v d
ItemProp* pProp = pItemElem->GetProp();
0 f! \+ O4 o" F! C) N vItem.dwKind2 = pProp->dwItemKind2;
* F- ]& M7 s- _( f vItem.dwItemId = pItemElem->m_dwItemId;
z* q, g2 U% _. a0 C- u& ~ vItem.nIndex = i;1 |. } P6 m. y# J! E' q2 T& P9 p% O
}- o% K" n! u8 j4 N& B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) v4 x y( c1 p5 T. ]/ N+ _' u+ _
}
- ~& ~5 ?% E! H3 f, }: t. X: g //////////////////////////////////////////////////////////////////////////
: c/ D; P3 l. y sort(vItem.begin(),vItem.end());//排序! P9 a' T) C P
//////////////////////////////////////////////////////////////////////////
/ b" F; ^- k2 v8 b* \2 Z //交换0 R6 W/ W5 L1 w9 G
for (size_t i=0;i<vItem.size();i++)9 P$ S! n* O: H8 ~4 [" a
{
6 V8 y: j- ^# f2 ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 H/ }: K1 [6 B4 q pInvSort->Add(vItem.nIndex);
8 {( t0 B4 c' }$ W3 L }
- l$ \% O2 i; K( Q }2 }6 { BYTE nDestPos = 0;
( f8 p: H' S, H/ \ for (int i=0;i<MAX_INVENTORY;i++)
8 Y+ C1 X( i' g' f$ { {, I& `4 p% C, G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 I% @# ~$ }7 e: {$ J; K) g# a# @ if (pItemElem)
, v8 q3 ~ w# N {
0 f9 x/ g0 W5 Q$ K! F if (IsUsingItem(pItemElem))0 j: ~. {% ~' V! h6 ^8 z6 E% Y& q
{ N7 r) x! \/ s* _4 V9 c
//这个位置无法放: \7 E: x3 c: v
nDestPos++;
3 S0 M$ Y3 v. _( I' a, W' S }
' y# Q! X5 I6 Y7 E9 p }
) b+ F+ ]8 F+ Z. r6 S BYTE nSrc = pInvSort->GetItemSrc(i);3 V) L) I2 t- f5 H; W2 M1 y3 e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ P- {. d- z! G K/ A! S/ {4 G
if (pItemElem); D+ j% L! I6 v- p2 w
{7 ~ x; r' s( \5 @0 V
if (IsUsingItem(pItemElem))$ H% v4 `# J! R# M" \
{* F# ], w ^1 M
//这个道具无法移动,跳过+ M# h1 L5 h4 y6 ^" n& h3 @" y
continue;# w; s+ ~9 H. I8 m/ s
}
% Z o! b0 j+ G& J8 ^ }else{
' _. ~, l' E+ b$ @1 `7 `, X: X //空位置 不用动
6 n- A g* K, C6 F3 |4 N( M* ~ continue;- J" W0 i# ]6 n5 z" L. ~
}
1 ~" x- a: q/ {8 V, y( B, \ //////////////////////////////////////////////////////////////////////////* f+ E- U& E7 Z/ H- }' ^
//开始移动- _; J0 H+ [9 Q3 ]9 V
if (nSrc == nDestPos)2 V r6 |" v: F6 o p
{
1 u* ` I3 Q- T4 G //原地不动# a2 t% B. ~, W; r
nDestPos++;
/ P$ ] _3 `1 ^' e. H continue;
# i0 C; W/ F3 B X& w6 T( ] }& ~+ G" h3 F6 O0 U: D
pInvSort->MoveItem(i,nDestPos);$ P# _% `: O; T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 L1 q9 M7 \4 g6 ~" g, u4 {7 l6 i# \ Sleep(5);" Q7 I: Y, c, A6 ~0 T) H
//Error("移动 - %d->%d",nSrc,nDestPos);
6 U* n9 _, e; z: L! J5 o" x nDestPos++;7 T- ]2 Z1 O1 E; }/ J
}
M! [% S; N. O B5 \% b1 L; t //取第一个元素的信息. i" |% S# ^- a' h W5 h
/*
3 y2 X& M$ A* B& A$ \, a! o if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 d+ D5 J6 U# H; C) B
{( y5 ~! |/ o4 i' B: q+ |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 r# J% O, m2 d2 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 o u) c5 _! P! \( w5 q( _" w: j }2 j5 X- G6 Q6 z0 C8 i: S( B$ l
*/$ i. m) U) p, @ b0 Z6 k
//////////////////////////////////////////////////////////////////////////4 Q" n6 i8 m: l2 |+ f* t+ P
break;
. Q4 `% B. ]0 ?( G }- A& z- h9 {( |9 L5 Q0 ~
} 2 m. L/ R! J7 w; u! k3 M
}, y7 m+ A( B! b% m2 `; f. g
m_wndMenu.SetVisible(FALSE);
: N. p, ]6 `5 B9 |6 W4 G4 M, g2 r9 b2 l9 |. j3 s$ B$ `
--------------------------------------------------------------------------------------------------------
1 E" \4 T; ?8 k% c( S) d9 o- J5 s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 z3 [/ I t5 ~8 D d2 e" U
{6 w" D+ f8 L) G8 }6 Q2 f4 p+ B
BaseMouseCursor();2 ^* G7 f% N# p2 B
}
; ~# q2 B. E8 \- \; ^在其下添加:8 T: M" t" r' [5 z: z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 J6 k7 I2 ^# N# {
{
& |5 V/ x4 e6 g) \( am_wndMenu.DeleteAllMenu();
/ X5 ~) i: Y- h; u; t Q' p! Sm_wndMenu.CreateMenu(this);4 Q% B8 G0 y9 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ w* J7 \2 o- r$ I& ^( b9 s4 O8 |! B: y5 |* a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# \+ F1 |3 I+ l; d6 H4 s
{
- G0 L& k" ~& z ^3 L. [ //P以上级别才可以删除所有道具
. e: P8 ?. ?" s0 e | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" K2 w5 ~+ t2 ]3 w
} p2 K! L: D, [4 W( o. C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, }0 g% y1 h+ ~5 b, Fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. Q2 {% x1 G& |
m_wndMenu.SetFocus();
/ D6 h; X7 i) q4 P7 r}
7 B* q" | i3 H. \, |------------------------------------------------------------------------------------------------------------
: o% L2 X8 c. Q*************************! Z4 J* h5 T" J4 z$ }
WndField.h文件, V: R) p2 u. J7 `+ b
*************************7 u( S5 N/ X& N* w$ Y
搜索:BOOL m_bReport;
' O! W, j/ d9 j" |其后添加:) U$ ^8 d7 K; K0 E1 F; F3 u
CWndMenu m_wndMenu;
+ z5 h3 b2 i9 M0 o; D# ~+ _1 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
Z8 E7 v6 J* |# m" b' w其后添加: X4 v, Q2 m+ p. ]1 v
virtual void OnRButtonUp(UINT nFlags, CPoint point);; u& ]! e2 J; y
1 X5 y5 u6 G% D% r( y/ P% Q' E9 m2 i* y5 L+ G( h4 B. h
|
|