|
|
源文件中_Interface文件夹下WndField.cpp文件: r8 {4 S. a7 W. |% B. ?# w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ T% \! L; m& f! o: A6 k1 A: Q$ Z% ?* l/ z
struct sItem
8 r& K0 T$ `1 w* U: k& s$ b- [+ {% ?{9 e, ?. h4 @3 F6 n2 z, s( X
DWORD dwId;4 x, D" U: y6 M/ [, m1 s/ @6 j
DWORD dwKind2;
# v/ T! q- f& |2 j7 _- L+ c2 qDWORD dwItemId;- N: x- E5 ]' b: t, V
BYTE nIndex;4 @% {- K/ f6 I4 ]2 |+ ^
sItem(){ W( T: L/ J5 w C8 m
dwId = dwKind2 = dwItemId = nIndex = 0;
( s. r' ^) v1 L}
! _" i' G$ @& M& [7 t0 fbool operator < (const sItem p2)* j; `+ B7 V0 q7 H. m, p/ h
{
\0 m! ^! u+ ? if (dwKind2 == p2.dwKind2); v! N8 E3 C$ r% u. G+ N; J
{
: A) h( w9 j6 W6 q* T return dwItemId < p2.dwItemId;
& n+ E# g8 r0 p0 T% I' ` }else{0 t g" U2 m+ d& }6 G* l
return dwKind2 < p2.dwKind2;
( l" ^& s# b% s$ q. m }
! ^8 K( q8 N1 G/ N9 g1 p}, ^/ l: d8 K9 L9 \
};6 s, J; T1 V+ I+ l3 F' [
class CInventorySort' l& Y4 Q, k6 G2 D. j4 s- A
{/ {; F# \$ k3 l# M- V
public:
" t' M0 c' [$ Y+ v. eCInventorySort()
6 e1 o# s& X- t9 p* I{0 r0 e* O* P3 T$ ~: w, m0 k% `4 `
m_dwPos = 0;
% V0 Q8 Y4 B" U ^7 D$ J/ }}
0 s0 }1 |$ _+ n; Y0 ]% d5 D~CInventorySort(){}' }( O# I' y6 i$ D; {: ^+ L
private:/ x! z' W; Q/ e4 q0 ]) X+ S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ e9 S$ T3 s6 f8 }! S- f1 c6 EDWORD m_dwPos;
- P0 [/ c. ?3 }) i+ @ l: p5 Lpublic:' I( @- B, x+ P
void Add(BYTE nIndex)
) \, x: _: E3 G) P{
; t7 N6 ]- f9 a6 j& _. v if (m_dwPos >= MAX_INVENTORY); l$ x0 ^$ R( j+ p& B! @$ v; I3 q, K
{
! {6 F+ S$ R; ]; }8 @7 U return; w* U; I& p' n# L1 M1 u
}
6 K! I, M4 l. I9 B8 A m_Item[m_dwPos].nIndex = nIndex;( Z, x9 q: k* D9 u% r1 X: Q
m_Item[m_dwPos].dwId = m_dwPos;+ U" ]8 A' I* q; p9 T
m_dwPos++;
3 {+ g5 q8 A* t9 ], p}
/ {( E+ r) W2 sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 l0 \# p2 y% w/ u: a! B7 F7 c{, C% z+ C" A8 K( _; T% K( ~ a6 i
for (int i=0;i<MAX_INVENTORY;i++)
' [3 i: J0 o9 K$ G t1 E/ E {
7 Q$ t% s, G2 ^/ m if (m_Item.dwId == dwId)( z: r H( d5 J! S
{
# l. h: \: q2 A* x. x return m_Item.nIndex;% W- y+ D! m( `
} v: Q7 n3 O8 H8 y- r
}
0 s" U. l2 J. d' N5 ?3 }3 O return 255;
, o# j8 t. E5 Q}
# K) K* _1 d& F' b: B1 mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! q* Z4 ]7 S% V5 r. I3 m{$ f, C. C! w7 u2 C: x. V1 x
BYTE nTmp = 0;+ m. f k" v+ W- n( l2 m3 D8 u* O+ l
bool bDest = false,bSrc = false;
# w: Y7 K7 u& o) `: B for (int i=0;i<MAX_INVENTORY;i++): y; j6 {$ J C5 C
{
. q F+ }+ C" q1 @ _ if (dwSrcId == m_Item.dwId)1 `- ^- P j0 B- D) e3 |
{
" l( f3 m3 M6 e% F- \2 F: A8 h1 k //id相等 则 改变对应的dest和src
" \' ]6 a' F2 r8 Y, p2 f. s nTmp = m_Item.nIndex;
4 z7 a, Q, ?$ ]4 D& d( Q* }: n& R m_Item.nIndex = dest;# v" T8 l- x) V( I
}2 G, Q% l+ P% m8 f
}
) L2 i# M1 M& T1 _2 B- K9 _ //临时数据保存完毕,交换开始
" r2 P0 g; h* o+ G) \ for (int i=0;i<MAX_INVENTORY;i++)
8 u/ R' u( ?7 {: K {4 s i4 G# _" Z% k% b7 l" r) p3 N
if (dest == m_Item.nIndex)$ {6 ?% g# C. ?7 j4 f; v( V7 h! n8 x
{
5 a2 ^2 @# E7 e! ^0 e //id相等 则 改变对应的dest和src
* G; g! V3 N5 l m_Item.nIndex = nTmp;+ p- U7 F6 D6 J. I1 k: f
}. C* P L6 }& U2 D5 a* `% U- d/ K
}
( |2 A. U5 Q+ L) e7 {+ ?}0 t! ?9 m! ~$ V( @2 r" J
};
' ^0 \2 |& X) P4 T" h4 r/ `$ v. g-------------------------------------------------------------------------
$ }) U% L' B1 }: r6 N4 U+ _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- y6 k- q6 b5 u7 V% s# b搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 t: k/ a& U) k
紧靠其上添加:
) U/ i; E" E2 A0 |* sif( pWndBase == &m_wndMenu )
6 @& R3 k0 A% M, ^: p{/ f9 S, H1 C' |
switch( nID )
9 E0 Q% Q! E5 o+ S3 i1 C0 h9 Y. w {
) \3 Y; p5 \1 g" K, S0 x$ a* r4 s3 R case 2:0 y* l9 I# [6 }$ A6 V
{
3 v* l. [ X& Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 ^' K" w& ?; ]4 [# s0 K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) b% r' a5 Y3 T7 Q, L" D: z
{' Q3 I! Q5 s Z$ ]
break;
\* f0 K8 }$ K% m }# j0 J5 o: C' F6 a! L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- ]) Z3 Z9 l9 q8 Q5 e+ ?
{: }: c; v* s6 b7 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& o% x8 g! ]# I; C if( !pItemElem )
$ z+ O5 q) i% x- k! F# { continue;8 M* a3 T* P# b2 u
if(pItemElem->GetExtra() > 0)+ A( z7 l1 I6 `& o
continue;
$ Q# M1 b+ X Y- B if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' m0 q2 y: J/ Y0 V7 [6 C6 X+ ]# u
continue;
8 U& P5 P' \6 w& x if( g_pPlayer->IsUsing( pItemElem ) )
3 T `4 I- B$ T# S+ c1 | continue;7 H; I$ c9 f* r. W9 \* B
if( pItemElem->IsUndestructable() == TRUE )
/ |: }4 p& {8 j2 i5 T# P( c6 F3 ~9 \ {
, R. G8 t2 S' J8 u0 S" {" o6 y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 P8 x& Q5 ` Y2 V; z continue;
1 O8 v+ A- z% R- C4 w* Y }1 }# r) n; H, r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) D. U: @ ?9 C# ~' {+ s1 F5 j
}( Y& v! D i; F" _8 v! i; z
break;* h0 h! Q9 K+ h- r8 c
}- {7 Q, n6 l' s+ }
case 1:: d5 h) w7 z5 V& f" p6 z6 f
{
4 f) r! x2 T6 y, y* k0 a5 }% n //整理背包
. l; j" [6 A7 C! ~) ], X //////////////////////////////////////////////////////////////////////////
. [; Q- W; _* T- S$ S. g8 I: I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* z, m" T: d6 s" w
//////////////////////////////////////////////////////////////////////////3 \: c' w5 _6 U; q: f$ G: t: ?
////////////////////////////////////////////////////////////////////////// a) b W. \: Y! G7 K
CInventorySort* pInvSort = new CInventorySort; A( m# b; R v% |% B
vector <sItem> vItem;# c% l5 M/ n0 X3 }
vItem.resize(MAX_INVENTORY);//初始化大小
) {( ~5 l c' _7 o1 @" V //////////////////////////////////////////////////////////////////////////$ n; E9 M- z& d8 W. C
//填充数据
) A; P2 s6 V5 s: o- W9 @ for (int i=0;i<MAX_INVENTORY;i++)
5 g) j& z! H" i5 q$ Z% ] {# A" E8 p8 d- H. e$ K5 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# q/ ` A" U' ] ^ if (!pItemElem)9 o% g l- U& J& ^/ f2 R) C! B- ^( t
{. g! `$ z( u( h& p+ S8 U- h
vItem.dwKind2 = 0xffffffff;) a0 Z& ]# S' i2 V
vItem.dwItemId = 0xffffffff;( }# W8 D! r; R. ]
vItem.nIndex = i;
p1 D# w. X8 F }else {/ f/ P: M2 s: Z, Q$ @
ItemProp* pProp = pItemElem->GetProp();$ i5 b2 s! ~. r
vItem.dwKind2 = pProp->dwItemKind2;
' P# p( \* j8 K6 I vItem.dwItemId = pItemElem->m_dwItemId;3 F, X0 v: F' `7 T. x8 T2 A
vItem.nIndex = i;' A5 N+ l: y% H! f+ `5 F* w! I2 K5 Z
}6 I2 @9 o0 b& x- F8 M
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 O; h6 \0 E) ?0 r4 V
}- Y, Y5 B/ X+ B: {8 x- }* f- Z; @
//////////////////////////////////////////////////////////////////////////) O; n" _( _# z% g2 B4 x
sort(vItem.begin(),vItem.end());//排序
! j% V. W. m3 |5 E //////////////////////////////////////////////////////////////////////////- g# M* f$ r! c w! k" F3 l! P/ b
//交换7 K2 J M- ^ D4 q. D; |( h: f1 T" c
for (size_t i=0;i<vItem.size();i++)
5 M- l* W, {4 D4 N- ^ {
( ]5 u# X6 X! s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 A* z Y9 V' S% L
pInvSort->Add(vItem.nIndex);. X+ g2 _* l, K$ H3 c) H# b
}
/ ^- v( `8 j' H" G7 c BYTE nDestPos = 0;
9 Z+ j" j2 e% o$ w for (int i=0;i<MAX_INVENTORY;i++)) Q8 n, l2 m9 E. D1 j' h' o
{" U3 t: E1 S0 Q; e; i& [8 `- ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' h# k4 H8 d$ G" H& I
if (pItemElem)2 q6 ]# `- I1 G7 e7 k3 O" c
{& u: `( n$ s2 S' V
if (IsUsingItem(pItemElem))2 `* e0 f4 u" N2 u
{ ^# A( t' Q* \5 D% `2 s2 |- z" D' k
//这个位置无法放$ `9 ~1 `1 g, Y- g4 [# z, M) N
nDestPos++;
# a+ \& }" d) N2 T( e! ^ } Q* H/ m' U/ k2 _1 B7 q' e
}: U, C! [2 s) O" O( A
BYTE nSrc = pInvSort->GetItemSrc(i);0 G7 F3 |4 U6 D+ e# H8 O* a. n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 ~* w9 Q) j0 [+ {( N if (pItemElem); n) |- m( l) ?. P& X/ D) h7 Q
{
, A. d+ v9 @6 d) l/ B( N if (IsUsingItem(pItemElem))
! ^$ \/ q( C! B; N3 U {" T0 D" d! b$ r( N- w3 c& b2 X+ K
//这个道具无法移动,跳过
9 h/ N% Q- E/ t( f b$ x' q continue;, e4 ]6 i( E7 t7 j# g
}4 U: n- n8 g0 U! i
}else{. w _' j* s2 L% n# u* c- }
//空位置 不用动
! x$ D# R' m k: ~1 L/ M4 C( X. | continue;
8 v, d" S3 t! y& J J }, H* p$ l7 P* T+ |4 E2 f
//////////////////////////////////////////////////////////////////////////
: V9 e7 k+ U, J( g //开始移动( Q, w7 e# U+ u: t8 R# Z
if (nSrc == nDestPos)2 d% E& ]0 b: p8 ]- |6 v* r4 }
{
! G! j, N n6 @7 E) z //原地不动# Q; f5 y) |7 N5 [+ @
nDestPos++;
' z6 y) n# I5 O* n9 m* H% a E continue;7 W' e+ P4 I/ \, T( Z2 ]8 j
}& |& p& B& ~: x6 E$ C! z% s! d
pInvSort->MoveItem(i,nDestPos);
) Q* F- S" a& |6 M9 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 h. P5 k" X% Y1 f, A Sleep(5);
, U/ ~7 i3 m9 t* U! R //Error("移动 - %d->%d",nSrc,nDestPos);0 Y/ G/ X% B8 n0 r1 N" c( k7 w6 U
nDestPos++;
( @! f* S2 f1 d3 A: l( I }; m9 r: @. w* K3 |, A- I$ t% a
//取第一个元素的信息" x& b2 V5 x: A: @
/*9 ?" x9 D0 u- |$ V3 `
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 I* ]# R3 x" [3 N. y! i
{5 |7 }6 g9 O: c! q7 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( P) w2 C% a/ x1 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 H$ g) |3 l2 N% n1 S6 g" d }
3 p; N% \4 q/ c( N" e8 k */4 H3 ~& Y6 ]/ s2 l2 c; | X
//////////////////////////////////////////////////////////////////////////" p$ y( E% @ A9 T: J& Y/ `- F9 U. Y
break;3 I; ]! C7 ~* a$ |% f( o, y
}
0 h, C, S+ s& i$ l: ^- \ } 5 `; Q1 M; A0 T% d, i; u6 w
}2 @- l( ^6 Q% A# R3 A+ t: c- ~: S
m_wndMenu.SetVisible(FALSE);9 ~. y3 U9 A: _5 v: V: ]8 h7 m W
* D0 w" g) ?. S--------------------------------------------------------------------------------------------------------
& ?: f9 P. l4 K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# b- D7 D: y" p4 V) f6 m$ g. h [
{
; B6 ?2 _ { u0 B t6 g$ [. kBaseMouseCursor();2 W; V) Y. ?' C5 |' r
}
# T2 v0 E8 ^( H& P9 S$ ^0 e在其下添加:
% g8 |" J2 |9 Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# q$ a: x/ m0 R& h+ e
{ C- E" \6 Y2 @2 J: A$ m) H
m_wndMenu.DeleteAllMenu();
7 I5 C$ U5 f: f- m6 Gm_wndMenu.CreateMenu(this); X' i {; H. o. j" g) c% O& r2 i
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. |1 h& W9 A0 L2 o: C8 Y
% I9 H6 O; `2 O b; b% nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ R/ N# h: ~' v5 T$ j5 ? Q( Y{
2 {5 R) l- v8 e- @: F, L. W6 H //P以上级别才可以删除所有道具2 \; K6 O/ W% R& O: n3 r
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ f# D9 w, f- W- T+ K. a n' b}
" E1 \; R% r6 g9 J: D4 u! K' Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); L9 y* X8 X6 }% K1 _; R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* w) q2 b# {6 d1 g$ S& jm_wndMenu.SetFocus();
; Y% c* c" x: d @}
2 u7 x1 r( [8 w8 b$ s------------------------------------------------------------------------------------------------------------2 G4 d. [ t2 v) l% v, S E
*************************
8 t5 S0 o' r6 R- h4 A* sWndField.h文件0 P+ v; \) W# l7 j
*************************
) E( G6 u! B( J& n4 k搜索:BOOL m_bReport;
* K+ L2 C! h! u% M G# R( N其后添加:
: b7 f0 F0 K6 Q5 Z2 z2 k. u8 V3 OCWndMenu m_wndMenu;7 |% U6 E( P4 Q+ G& C4 G# u% E- s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: B& A4 `4 ]# n& S其后添加:
- D. q' {# X+ m! A, E4 |virtual void OnRButtonUp(UINT nFlags, CPoint point);
; o* W+ W/ A( D2 L$ O( _5 ~7 q" n6 S, H* b* \
& L8 B: U& L1 o' B4 @
|
|