|
|
源文件中_Interface文件夹下WndField.cpp文件
. K3 {# L/ ~7 H# m. a4 Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; y5 D5 [* Y3 q; w6 H
/ Z" c% y2 j; O7 p% Ystruct sItem7 M% b2 X* W$ Q8 H6 k
{
: M* {1 D- @+ K( sDWORD dwId;0 {" f, a% }& g. o! V9 A; S1 i
DWORD dwKind2;
( x# U+ t- F; g! S( o5 QDWORD dwItemId;
' |2 K8 e7 M }1 y# XBYTE nIndex; Y+ b/ C; ?! I& v
sItem(){! B& j; j* ?7 ?2 N! T) ?
dwId = dwKind2 = dwItemId = nIndex = 0;7 E& P7 A/ T o8 _ A6 d2 Z
} A# @. ^5 J6 A# a. P& C
bool operator < (const sItem p2)3 _8 j- [* e9 G7 S3 s9 f! n9 t* a
{& E5 [/ T) e8 k$ q
if (dwKind2 == p2.dwKind2)
1 v( e( }4 X' [* m; F8 n {; }! y5 ?( O! {
return dwItemId < p2.dwItemId;
' r# f; l8 J( y1 P- N6 ]0 Q' y }else{$ K; I: {1 ]" s. E: u
return dwKind2 < p2.dwKind2;
0 V3 j1 U) j/ Q9 p* G/ D! i }2 C9 r$ |) ~: t! ?. o6 t8 I
}
8 v1 o) O3 e8 U8 l7 t};" n+ S" v7 a3 L4 x
class CInventorySort
3 G# N) {0 v# X* y" n{
b% h9 H, V& v @9 qpublic:
; u, T) W. M5 C2 o0 uCInventorySort()
9 C( S* K% f: P( O& Y, s{8 z7 [) d) w6 M/ z
m_dwPos = 0;
) P7 Z; X! i( a7 O; u8 s}
0 a: F/ g1 Z2 G, y0 d~CInventorySort(){}
7 r) c# Z0 |( l3 ^5 v/ g# c5 ]private:+ v$ F9 M d* V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" ~# l, H" |, l. z CDWORD m_dwPos;- ~- @: K6 w0 }$ l) U- D! P
public:
; x( l: _6 A" ]- v0 m. Cvoid Add(BYTE nIndex)
1 `% j C5 o- c{
, I% \) P( J7 x$ X8 h/ X9 y if (m_dwPos >= MAX_INVENTORY)
) [( k1 ^0 f9 S3 a1 o3 F( \) g {& C" \. W b# R9 l3 e- c
return;
8 G2 p _& {# F+ s E* _7 z }2 `- f! p4 X- R
m_Item[m_dwPos].nIndex = nIndex;
0 n# \( s1 ` H9 j! x0 _0 m m_Item[m_dwPos].dwId = m_dwPos;
/ M- @4 z5 {$ A( ]& M% } m_dwPos++;2 c6 _7 W" |( U) n9 N+ P2 X+ \
}/ T1 v7 n. T ?4 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) p- w: w& f+ j1 ~3 Q& l' y; {
{6 F" o% Q% l: h. h; B) L
for (int i=0;i<MAX_INVENTORY;i++), _4 k" p/ [. J! G6 T
{0 p) q1 X, M3 [! Y6 ~, L
if (m_Item.dwId == dwId)( e0 r- K% B* e4 x
{' _+ ~1 y R- D, q6 v# _
return m_Item.nIndex;) O6 ]+ F( H3 I! y3 }
}& l* i* U1 z* ]" O- t
}% f) \' l' p$ d5 v( a5 t2 m
return 255;
9 Y' q) P& C( D( M, o/ ?) [. \}
$ B e" L. ^9 S; @% J' \5 G7 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# A' ]9 R9 }; N) t/ x
{2 o* W2 R" @& X' G3 t
BYTE nTmp = 0;$ i3 F& K& X0 t* i/ f
bool bDest = false,bSrc = false;& i1 |! W+ P5 }5 r3 R
for (int i=0;i<MAX_INVENTORY;i++)8 L. z! d* q3 ~0 c1 |
{
6 K/ {- v9 p. K& o5 C- O if (dwSrcId == m_Item.dwId)9 [1 w+ k; o5 P
{8 ]1 ]! }6 T% R
//id相等 则 改变对应的dest和src
% g( Y5 o' a2 Y* D7 v nTmp = m_Item.nIndex;
, S2 ]. G6 K3 x) q; e/ u. E" W/ L' }6 e m_Item.nIndex = dest;
2 Y7 A5 D& h, @3 \: Q }
' w1 H& O7 f; a1 m2 y: _+ z }
' z- F& C: K4 ^ //临时数据保存完毕,交换开始2 g; @& t+ ?5 W4 V' }- S
for (int i=0;i<MAX_INVENTORY;i++)
6 F- Z4 I; M# v/ A3 a {% B) { T* w7 n$ s4 k0 h, I
if (dest == m_Item.nIndex); I* s, v, `0 {6 ]: }: t
{
+ N# u9 h6 q! b& | Z //id相等 则 改变对应的dest和src/ p( n; Z: {% c9 k; L- C: o/ U
m_Item.nIndex = nTmp;
. \" ^% h7 G" p' }( a, E5 x } s5 S2 J2 h( R" l# x
}
. E$ b6 W5 p3 n/ Q8 s9 W}7 {- E$ z' z7 D9 t- j3 i
};
8 v. }! c9 g( d' A! V-------------------------------------------------------------------------9 U) d& n3 l4 T1 f0 X5 ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 V$ b8 G6 y0 h9 a" G; l/ D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 P# i( w* h3 \ Z5 `1 U9 L6 S
紧靠其上添加:
& ^- ]/ T# T' L9 l$ Xif( pWndBase == &m_wndMenu )* }) A: t/ m- M* L8 ]
{, B! E. i9 |2 s' ~
switch( nID )
9 r" G7 G K. x {
+ t, Z; c4 o0 n8 L* h case 2:0 Y; S4 {7 U- c- @
{6 ~5 W5 Y& A( t5 y; w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& G2 J- V2 v# s, G2 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 |3 m. U* Z& e3 W1 {' T0 s
{
% J2 y. ] U0 \) D; A% L break;, b, W' E3 Z# `' L2 j" |" [3 k
}9 l+ o$ P" U6 [1 J, ^) I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ x9 `) L, \9 j( g
{! F5 r7 `# e9 E$ b i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- g" ^3 {4 q l* B2 u
if( !pItemElem )( S8 W6 ]( U3 V
continue;+ E+ P5 ~/ h% w& X8 p
if(pItemElem->GetExtra() > 0)4 n# u& C) I. h& t3 b7 O6 w
continue;8 U4 X. c# K% G3 D5 E$ r" d/ A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + Z% L3 M4 ?3 y; e0 P
continue;( q- j; S( n; [! h7 b; o* U
if( g_pPlayer->IsUsing( pItemElem ) )
' ?+ ?* N+ g3 t continue;
2 O2 {( v. ~' \3 n! f* o if( pItemElem->IsUndestructable() == TRUE )
5 D0 n2 [+ J, Y) @ {
, K5 J/ v4 z2 c% | \. V" Y/ m/ B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ i- |7 w% p; |) E: A5 O
continue;% P1 x, s0 M0 S, s( O R- ~8 f2 b
}, J0 C, U- A4 L9 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' }$ S b( }* W( q. A4 D Z. E
}
6 i+ z+ p$ a% D( t5 w, e# ] break;% r7 l$ B2 r' u' N: R4 r
}
' E6 S' x1 U7 U ?& p4 y case 1:" e' a: A9 c9 Y) ]7 p# ]* ^
{3 k6 a2 Z; ]+ ?' M# ]8 A% G4 n
//整理背包
' \0 Q- {/ m, a1 H$ d: V/ o! Q //////////////////////////////////////////////////////////////////////////
+ h! o# \( k3 o6 ?+ m //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 R9 r- k+ W7 R V+ Y& z4 N
//////////////////////////////////////////////////////////////////////////
1 R$ E, S0 ?' X* m6 ]8 @' r$ |: h //////////////////////////////////////////////////////////////////////////2 a5 |! h! ~( i
CInventorySort* pInvSort = new CInventorySort;3 A" |6 E* a0 N, n
vector <sItem> vItem;
+ Y1 e" {$ t; l vItem.resize(MAX_INVENTORY);//初始化大小! ]9 |2 t" `8 M9 [3 ~2 Y
//////////////////////////////////////////////////////////////////////////6 J. S/ d B6 |9 ]
//填充数据
3 [& M$ |: {6 p6 |; x9 A4 H1 [ for (int i=0;i<MAX_INVENTORY;i++)6 g" B; G) Q1 T2 t
{ d9 W- e1 i3 E* K! @+ ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; t% t$ S' ~. N! [8 p if (!pItemElem)
4 e3 l* |7 x) D0 o$ P {
S7 i0 X$ Y, I9 U8 Q& P! ? vItem.dwKind2 = 0xffffffff;6 h% w" ~! Y" ]0 n ?; [
vItem.dwItemId = 0xffffffff;/ `8 X* X) o3 O
vItem.nIndex = i;8 d2 S7 F+ L$ y' W1 ?% z$ ?
}else {
# }9 n, m+ J' X. | ItemProp* pProp = pItemElem->GetProp();
$ g+ V" {1 Z' D vItem.dwKind2 = pProp->dwItemKind2;
6 t, R) W6 n- I0 z7 H6 G vItem.dwItemId = pItemElem->m_dwItemId;4 N% `: v7 ]7 Q7 [- p+ ^ H+ ^
vItem.nIndex = i;& R& r; y; A' X
}
* Y: {9 I1 i+ r5 o l9 Q4 O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; u, _$ ]/ Y3 x: w" V$ ^4 k# J1 l }
4 l- X7 ?3 I- Y' z, Q" P //////////////////////////////////////////////////////////////////////////
: }0 u+ c; t5 K; J+ E1 T! a sort(vItem.begin(),vItem.end());//排序- @) |& |0 G D7 U4 m
//////////////////////////////////////////////////////////////////////////
6 R) _8 Z6 Z; c( R ?: G! f( k: K //交换8 K' |# c- l' Z4 l2 H- C, V
for (size_t i=0;i<vItem.size();i++)
& b8 h( A+ S* r {' z8 v" O0 N, q7 K# c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. E b1 W3 E# Z2 {9 F pInvSort->Add(vItem.nIndex);; k! g1 w1 |- R; N9 t" M6 F
}
! E D( b& O e BYTE nDestPos = 0;- `0 }6 ], \9 @& Y- ^5 i' G
for (int i=0;i<MAX_INVENTORY;i++)
; C, U8 r7 V4 J; V" @5 ^9 \6 l {$ s$ `# ~$ j( | N1 s# S1 }) }& A2 n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* b( L; C+ ~" y# C" E8 r- N8 c
if (pItemElem)0 w+ F+ g* O* V: t% X1 u, y+ D
{0 b; P1 R; Q8 Y2 Q y8 c% c8 \
if (IsUsingItem(pItemElem))
. b7 E2 Y n* N" P+ o* J2 z5 \ {' j8 K! `. u X o- v
//这个位置无法放
0 c* I1 C* G) v" A8 }# C nDestPos++; q- l: q' O. t2 i2 i
}
, E. T$ a% P7 Y- Q9 P$ o }! @6 m1 q3 U. P# {* _+ O
BYTE nSrc = pInvSort->GetItemSrc(i);
" L3 Q* P+ y7 G% Y4 \: g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 y& j) f1 R. ?+ t
if (pItemElem)% m% {$ H$ M5 h: x$ I+ d5 n& _ }
{
; `5 {7 {" s: v4 _0 O( c+ U! |6 F# C if (IsUsingItem(pItemElem))5 t f4 o) S r7 R, i% O7 P
{8 d4 Y, n" J9 s- T
//这个道具无法移动,跳过* G( H# E2 t2 b8 R5 }
continue;0 L# r5 R B4 Q8 _& f6 u7 `6 Q
}
5 L _) M9 \% i* Z0 |+ e4 g8 |: I }else{7 n9 U" L9 B; [7 {4 J
//空位置 不用动5 O9 i' E! t1 E+ a
continue;- G. q. e! Q. i7 a; a0 x. a
}% v- R1 |% Q% M3 M( V: h3 O
//////////////////////////////////////////////////////////////////////////
# T# b' E7 M2 [% | //开始移动. g; K) A0 Q0 t( [& c' b6 f
if (nSrc == nDestPos). t0 ?3 L; {& n+ ~
{
) c6 S8 S/ k8 c9 [6 X //原地不动
9 A* h* y# y6 f, `1 g nDestPos++;$ C* @3 c% c8 u4 s0 G- Y; [& R
continue;
4 W1 V1 A* z. E* Q8 M }7 | g. H% T3 b7 ?& i
pInvSort->MoveItem(i,nDestPos);
+ N( P7 Y+ I0 I, y3 R/ Q6 T) N; X g_DPlay.SendMoveItem(0,nSrc,nDestPos);. |2 q+ z/ |" U& f0 W
Sleep(5);0 a8 R! |8 }5 Q, C3 B y
//Error("移动 - %d->%d",nSrc,nDestPos);
o( ?# i- |) |* f- d% o5 p3 N nDestPos++;3 ^6 l( p C; Q1 V* g* Q
}0 Y B) ?6 [. o9 _# X/ M) _
//取第一个元素的信息3 a' `+ B9 h3 H' f" c9 f1 R7 C
/*
4 n' t# x4 _' U) D [( G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: }0 y% U) X6 N# } B( ?4 M {4 ^2 a* c" h+ ]$ N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
K+ ? ?- y8 f% T6 c& P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 a" V0 E1 `" {2 v5 G }7 W! [, L" q* V+ W, o
*/! Z+ _2 q# Y( m7 W
//////////////////////////////////////////////////////////////////////////) u' m5 L, q/ W' i- Q
break;
# C# b+ _! d3 x; d }
) E- b2 |0 K( ]" z+ N. f0 V }
. h& n% `$ c6 A7 j" g}
8 v5 M5 p3 v4 h. tm_wndMenu.SetVisible(FALSE);
; ]6 V1 e6 Q4 e! R. S; x( }2 A% O
--------------------------------------------------------------------------------------------------------7 C+ W* r) ]. C& r! T) o
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& y. F+ Z6 V' g: o, W7 V/ y
{; r$ |8 O; |3 {& H3 Q* J- E
BaseMouseCursor();" T3 @$ i5 E& q) z# X
}
* B6 w1 b9 q3 i5 ?6 b+ s* G在其下添加:
, u5 w7 Z3 u2 i ~1 {1 G' }& _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) c( m, |2 q; B{
$ ~$ P; x7 G. I; r2 pm_wndMenu.DeleteAllMenu();
" o1 p2 ?) _9 _! jm_wndMenu.CreateMenu(this);
8 Z7 _, T# Q1 X# ?) zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- u. u' V" ?6 g9 k+ H1 M
* B7 f3 n! m. X$ |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 g% e* m' \& j' u% r{
; R8 G' a( M* y0 m, O //P以上级别才可以删除所有道具! v4 m9 c" x6 w$ \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 F0 I6 A0 c- @* W0 a% w# n& v6 J
}1 l. Q) U( b: L( ^! r/ a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* v5 [" y, c8 o4 m; D3 ?5 am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 L5 U& G |: s, V/ v0 R
m_wndMenu.SetFocus();
* S5 I/ l$ n9 k1 u# E y}! U6 L. g/ t. [
------------------------------------------------------------------------------------------------------------5 |, |1 {, A) o: ~- q0 Q
*************************
% [9 D4 t/ d& kWndField.h文件& q+ d& U2 k/ d9 _+ |
*************************
) S! j( H# a. e- W' Y搜索:BOOL m_bReport;
: ?- f2 Y; v% e其后添加:" w) Y+ Z* E0 t h7 O- t7 u
CWndMenu m_wndMenu;" o0 O) @$ g5 w8 }) V; L* m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 Z8 H+ o1 ?/ E9 F& e: G! M) J其后添加:& f+ c# z% |/ _! y% a
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 }9 W Q& |2 t) \; F5 ^/ S' {
" n; g1 i! ]/ z( q# T- D( N/ K; Z1 f# Z q
|
|