|
源文件中_Interface文件夹下WndField.cpp文件
7 K7 Z4 x3 ^$ a5 m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 Y: L# O/ \9 ?0 \; z/ b2 B! V" W) f6 X' K* d7 S' W o2 `' d
struct sItem
& I/ q9 G& w( s1 Q: t6 q{
6 G Y; h7 A6 W6 Y S# aDWORD dwId;
& `0 Y( d, g/ EDWORD dwKind2;- Q+ }3 \) k, s' D) \4 N! w
DWORD dwItemId;
9 q) V+ X: r8 a1 ?- ZBYTE nIndex;1 Y' @, K/ l6 m9 J7 O
sItem(){4 W8 D- f9 q: ~& `2 p0 K! [
dwId = dwKind2 = dwItemId = nIndex = 0;( F' Z! J+ ]! {# P8 P1 _2 W0 q
}4 u& T4 q$ G, C
bool operator < (const sItem p2)
! ~6 k0 p0 v5 Q( q# _. E, {{* }" F7 Z- ]( ]/ q' p5 S
if (dwKind2 == p2.dwKind2)
$ W3 r, {! g' y# w' ?; Y {& F5 u/ K+ P' t, L5 `0 W0 d
return dwItemId < p2.dwItemId;
) u' {, }8 N; }, w( g: R* K }else{/ h# R' R) B) e6 z6 b' ?/ m* ~& O
return dwKind2 < p2.dwKind2;
7 F+ y5 s4 @4 ?; I }% _ k( ?5 N9 H2 \4 S) j5 @
}
! U; }: Q7 R5 N};
2 F" M( G" A4 L9 }+ W- W2 Sclass CInventorySort1 Q1 f- S0 Q: A8 g( K+ O. _
{
/ v/ V5 U% U* e( N. i0 Dpublic:
" d( l, o, _# S5 m% }" a( `/ ECInventorySort()+ x- W7 q4 p5 P
{6 h2 H7 N1 z0 {: l4 [2 h
m_dwPos = 0; k% E! e5 [& e4 I5 r$ S; n
}. J9 e: z5 ~6 q* E! D+ T
~CInventorySort(){}
) R y0 E( y1 b5 \# J2 mprivate:0 d1 ^ S* h, a* F1 g
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- S6 t9 t) [. d# I9 R5 qDWORD m_dwPos;' C1 h* M, S$ w# A5 A
public:
) C, v+ `; ?$ o S' ~; \void Add(BYTE nIndex)) A1 f( A! e# z. H
{
@' |4 \4 g d: C' G. x5 B+ P& Z if (m_dwPos >= MAX_INVENTORY)& l0 Q# D' V2 I: h) a
{/ q, G" }" H2 j+ J* s
return;: _! j( h7 T" P0 P
}( U1 f/ T" o/ e) U8 O% _
m_Item[m_dwPos].nIndex = nIndex;
! q, _0 m4 v: L* P+ ]1 T5 Y8 H m_Item[m_dwPos].dwId = m_dwPos;
# l9 A: K" e: `7 N4 J m_dwPos++;
# l, Y, a0 k$ s* ~}7 W4 v1 ^2 U: z& O6 Q2 z" T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 n7 `+ _( h6 e" L{
& E9 K9 J3 S% u4 ` for (int i=0;i<MAX_INVENTORY;i++)
, m4 D, [! b& h; X' {4 d8 J {
* }) H- ~( n# J* | if (m_Item.dwId == dwId)0 u! g1 u1 j7 g' M& D0 Q. A% {
{
! O1 s. ]6 I7 x ] return m_Item.nIndex;4 l: ^' L9 o# W i" @! ^
}
5 U5 D% {# ^. Y. _# R$ b0 Z }* G; ?" w) b- |, Z) [' M8 w7 I6 R
return 255;
; {: _" Q1 k! a$ b" n0 p5 z}
2 t2 M# ], Y0 L2 Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
l/ M( p0 D! f" @6 U6 T# E' h{
( W* J4 Z0 J" F3 K4 q: Q' k# l BYTE nTmp = 0;6 G8 p5 u6 ?0 M i! ^
bool bDest = false,bSrc = false;5 `" b' H4 r3 P
for (int i=0;i<MAX_INVENTORY;i++). m5 M, _) h- D
{
4 M) N/ L# @9 U if (dwSrcId == m_Item.dwId)
/ n8 G& Y3 z7 e {
% @. z) a7 _3 \ //id相等 则 改变对应的dest和src+ }) ~9 N9 v+ o: J+ F
nTmp = m_Item.nIndex;( J; f! _7 t2 P! X$ D4 V- b
m_Item.nIndex = dest;: \: t, A( ]5 D! `5 D0 U
}
$ _% O: ]8 w3 A# Z7 i }' G- c! t" d, [2 Z, B7 x
//临时数据保存完毕,交换开始
2 h( `. ~. k3 ?. g3 g for (int i=0;i<MAX_INVENTORY;i++)& W7 J& \' q0 z) Y2 z/ q
{( B% A3 H/ C. ]% h8 B
if (dest == m_Item.nIndex)
, R) T* _" J; m; ~8 o4 @0 G {. [0 P& P; e, G. r5 e3 u
//id相等 则 改变对应的dest和src
; ?/ H* e# {- e3 B( A& V; j% G m_Item.nIndex = nTmp;
. l- t# U; N) B. P+ B }
7 {( B' k8 |. r0 V1 u }
+ O- U8 {, I0 D3 ?: n- X}7 e0 X$ t' ~* w" ]# N. |2 J
};
) L6 F( F' ]3 W7 \3 @3 d-------------------------------------------------------------------------( ?* m8 V% {$ e9 x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ y- |! z# Z/ M; ^+ }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 y. ~. ~4 q. a7 D
紧靠其上添加:, R, ^* w( k* x* D9 C5 w+ w
if( pWndBase == &m_wndMenu )1 j9 ?$ K! N& @# c( U9 g
{6 i! p9 v' w( E, a6 D
switch( nID )
4 v8 y3 N/ p3 K& q( X: U& z {) \# b Z. s& V. H
case 2:
" w4 L6 W# T: x0 g0 \ {: C. z' {( @3 N/ D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; w! X/ p% D. V8 j C* _- G7 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* S: i1 ~, S3 h( Z& w% s7 W* ^8 ]/ a y
{7 U' {/ ]. u' C6 R3 R2 G
break;
E& N5 A; L) p$ J }( H& v4 w1 I. i5 e+ G% y! X* o# _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 i& P) b- H: j/ O9 e {; g7 o2 l) L6 e, u# ^0 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, B1 Q" ^& a! d* A
if( !pItemElem )) K( `0 P; ^) [; }% Y7 ]) P0 h
continue;
) e4 y {3 d, V1 d% i* X if(pItemElem->GetExtra() > 0)
5 d0 i! S. g# Q continue;( a/ Z; \; P* J* J o5 F @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) W! k# Q- e3 d. H& L' I) B
continue;
! K0 l* Q& c9 ^& S if( g_pPlayer->IsUsing( pItemElem ) ), @# s3 M$ ~3 Y J% h
continue;2 K# h3 C4 m" |4 c4 j) r" G
if( pItemElem->IsUndestructable() == TRUE )2 a# _9 K9 C/ V! q, m4 P" d
{
8 Z" `1 k3 Q' E% x g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ E' ]0 O y5 o4 e5 d- {
continue;
1 p! V& X' R0 @ }; Z% `$ s6 q9 L: a: _1 ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& E8 c- B# m: `6 m# X
}
G. p/ P% g/ y/ b1 f) \ break;- o2 ?- ?, N& Z7 r: \9 Z
}
& G' q5 G4 s% n& X2 }' z% e) g case 1:
; r$ `, H, {; h; C {1 w6 L+ t& d5 e# {6 f
//整理背包9 L, N1 b0 C/ ]. m/ l' o$ c8 W
//////////////////////////////////////////////////////////////////////////. b/ A+ z: L. b
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: s. _7 N1 ~ o6 b0 O; J
//////////////////////////////////////////////////////////////////////////
; d4 s# F& J5 _! \: @3 ^; } //////////////////////////////////////////////////////////////////////////6 D6 [2 ~% |8 n% O% }/ t D
CInventorySort* pInvSort = new CInventorySort;/ x1 e9 C8 Z6 O& O* h
vector <sItem> vItem;2 z/ p, v7 E+ k' _
vItem.resize(MAX_INVENTORY);//初始化大小
& ]8 |7 i% x* T1 w* \ ~ //////////////////////////////////////////////////////////////////////////
9 b+ v) g2 k0 l8 V2 q- h //填充数据, ] |* \% r* O$ _5 d+ A+ ]8 R
for (int i=0;i<MAX_INVENTORY;i++)0 L5 P1 C5 j$ @7 Q% {
{1 ]7 g7 c3 ]7 A w. F% q9 A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. s4 [+ M' R( }1 o
if (!pItemElem)) }, `0 w: y- a8 f% ]9 H
{
* V- [3 l, N. l0 u$ N* D7 B; c# C vItem.dwKind2 = 0xffffffff;
- {8 i) |: q$ V) b* R* d4 k vItem.dwItemId = 0xffffffff;
" X* w/ |/ W3 x" L5 _- [ vItem.nIndex = i;7 K1 P% @; U r
}else {( N4 f$ _- V: c( [; }1 h& D, P
ItemProp* pProp = pItemElem->GetProp();
/ t8 t2 k; }: L ^ vItem.dwKind2 = pProp->dwItemKind2;
$ K# F* ^( s* n* z- y6 w) k vItem.dwItemId = pItemElem->m_dwItemId;/ q% D6 R4 Y' Y- D2 H3 T7 v
vItem.nIndex = i;
6 ~; }! ?7 o$ D, S }
( b: z+ s) R: L, i' N4 z' \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, k8 Y& h+ ~3 h) r7 K5 } }
. V6 W$ a* ^: M- \9 ] //////////////////////////////////////////////////////////////////////////
; Q) m% n: X# h$ x6 q sort(vItem.begin(),vItem.end());//排序$ |" o* b. p* C
//////////////////////////////////////////////////////////////////////////! n ~5 Z! b! T( n
//交换) M0 t( A" G) K; A' H+ i
for (size_t i=0;i<vItem.size();i++)
: T# C+ f( T+ _, K2 h {6 N; n0 ]$ J+ q1 e0 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ H8 o3 C$ j' F& T4 V+ W0 V pInvSort->Add(vItem.nIndex);
; r3 k g! f2 b a }& r. ~! a& T) n+ A* `6 A" m
BYTE nDestPos = 0;7 O0 l: O" g. K" x! U/ f. z
for (int i=0;i<MAX_INVENTORY;i++)
& _6 \2 o9 G% J {
# }$ a/ }+ g( {& q) C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& G" c' Y4 S' p4 R7 J: }+ J. `. a if (pItemElem)
3 ~, @3 Z+ @: ] {$ d! b% |2 e# b7 i' |3 ]8 Z
if (IsUsingItem(pItemElem))2 d7 y! Z: t# J6 B! L$ o3 D8 x% l
{* p6 A/ K) K+ j7 P- W# y& a5 h4 M
//这个位置无法放1 t( S& G, c' i) a5 A5 Q1 f5 Y+ ?( T
nDestPos++;9 G, c) Q1 q& ^, e8 u
}
# \9 L* l* z. d6 q5 O }% `7 T1 j" i( u0 a
BYTE nSrc = pInvSort->GetItemSrc(i);2 v; f8 s* H: C- y: A8 \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' O; D4 G2 _; ^7 V' a
if (pItemElem)+ T( M X8 S; Y: Z9 i
{+ ]7 i8 _7 T7 j) i% u0 M
if (IsUsingItem(pItemElem))+ p" N. x" \- U# t1 K' _4 ^9 [
{
8 p. j! c' J' y$ ]! T //这个道具无法移动,跳过4 J+ z5 \. r1 _& j0 c4 [
continue;- c, |% H- K& t/ Z
}
6 ~: N L. q, |9 ? }else{
2 w J F* v4 c) N+ G t. u //空位置 不用动
" h5 ^/ z% l {! f2 ], D- { continue;1 \% C- b }( _
}4 q& P5 e8 ^$ b4 f3 P
//////////////////////////////////////////////////////////////////////////
. {5 y1 D8 Z% N o //开始移动, v; I+ k/ w; m* ~* M, h. Y* _
if (nSrc == nDestPos)- O8 c! j8 [% L6 ~0 ^
{
3 D, J9 o+ \! f" E //原地不动& N5 ]7 c5 ], t' p
nDestPos++;1 k8 ^! r' y: P# K7 f
continue;1 [' i0 L) }) p) R2 m' }
}
" Z. Z$ v6 m9 Z# h- p+ O pInvSort->MoveItem(i,nDestPos);5 Y5 n! M: G$ g4 C i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 c/ x4 o8 {1 S2 Z u Sleep(5);
0 Y3 R5 i) U5 ]2 F7 k //Error("移动 - %d->%d",nSrc,nDestPos);
+ q( U4 x$ V: X' u nDestPos++;+ _8 e+ U8 U" d6 L+ V+ \
}' Z: `# H$ l: D W0 ~: W
//取第一个元素的信息
; Q# o/ l l3 W3 }' c" \2 f* d6 [4 k /*
5 Q' @+ x6 @: \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 s* _! v$ \* @2 m) T
{
' p' P/ O1 L) q) ?$ A$ P% K! \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 V! ~9 W; c) J8 G( S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ b* l2 {( k) @& j7 L9 {
}: l: t! @+ o- }9 ?
*/0 ]. [4 H' U1 x4 z
//////////////////////////////////////////////////////////////////////////
, K: h0 ?9 @7 j. P' Y, k break;* e1 K9 ?7 ?' i# G- S# [% B
}
/ O: M E% i: ~$ X! r7 B0 \ } 2 R. t5 G6 C) ~" d! j! j; ]
}5 a2 p; u! o) a& t% E
m_wndMenu.SetVisible(FALSE);
7 w+ u z2 P( v" R, g( j
6 M2 t( ~& F, i3 W0 @- A: B--------------------------------------------------------------------------------------------------------9 h( ?1 Y" G2 p# E; d. n& M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 z, M2 D0 v4 k% ?* F2 u$ }{: b+ v( {/ ~3 Z- G& u
BaseMouseCursor();
0 z8 C# N6 ^! p% p6 D" C}! c! Q k" u0 n0 E
在其下添加:- } N$ R: ~% d/ d' C; O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' [% q$ Q# L N+ J8 x2 u
{# a! f; ?; W8 c4 a
m_wndMenu.DeleteAllMenu();
* u( R& x/ |2 r& W; Hm_wndMenu.CreateMenu(this);: Q! u u, [' W/ w U8 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ { g l: V I& _) V' h0 \( l! U$ G9 w, }) g1 B# J: \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& |$ R% z0 R! Z- @7 _; x; e
{2 e* U# Q& P: E1 L
//P以上级别才可以删除所有道具
$ n- L& s# \8 Y' u4 S9 R! U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! F! _- g {5 i, O. g& ?8 B) }}; d* y/ f: m& G2 f( s2 a3 W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); j& K4 g; l, u, I D& G3 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 F. S7 e4 \" k, ~m_wndMenu.SetFocus();
( j/ }0 c) g# q5 m4 ^) F}
! x7 Q" C8 {/ j7 P------------------------------------------------------------------------------------------------------------
/ {% K8 b$ N" J' K; j$ h3 D- ?*************************1 I6 u4 k3 `8 G9 T J% q3 M
WndField.h文件; d+ n# I3 G; M
*************************
. M. _; Z7 E/ e" `1 A2 t5 [6 c" U搜索:BOOL m_bReport;
( i0 P7 D7 G- b5 V: b- @0 W其后添加:
) |. N8 Y3 |- u: @/ `+ `4 rCWndMenu m_wndMenu;( d( i6 ], S; q& c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! r- I o; N' |' p/ Y5 h) R, T其后添加:
5 y! O; E3 M8 p) @virtual void OnRButtonUp(UINT nFlags, CPoint point); a+ e( ~" z7 f5 A. z
1 X- A j- }5 z8 D. v( y: s
9 M8 P7 U3 T; O2 ^; F3 Y |
|