|
|
源文件中_Interface文件夹下WndField.cpp文件
" X. L5 n3 k! w5 l" \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 z4 R F2 j$ f% h
; y8 |' U- W1 T" E# x4 X: x5 j; }9 y
struct sItem( b; N( i: N+ [+ O
{
6 M! T$ A F, \) h0 [DWORD dwId;# Z9 Z6 Z* u/ d, o+ V, ]5 _+ A
DWORD dwKind2;8 Q& J7 L! b" d# V$ E3 g, x; D% f
DWORD dwItemId;# q W% D2 @3 N5 l- A- v
BYTE nIndex;
! ~$ G/ M, w/ b3 _5 |3 S0 Y/ VsItem(){
0 U( E. K R3 D: Y dwId = dwKind2 = dwItemId = nIndex = 0;0 |! ^$ @0 J* o# d2 M* R: l5 U
}
( Q! k' b/ j! M/ ^; mbool operator < (const sItem p2)
) H+ x5 ` x9 u. g: H c# d{
2 h- `# ~; T% S7 H/ J/ q if (dwKind2 == p2.dwKind2)& g# t. d d# I7 F0 ^
{
0 J4 y A. ]* i& q( S2 s return dwItemId < p2.dwItemId;
4 w1 M+ a% `1 z. A2 ^4 R" d1 K }else{
3 T( ^) O" t- X9 } return dwKind2 < p2.dwKind2;) F& Y9 q d2 l0 d7 Q
}) R' U/ [6 ]1 i. C& C; T& [& f% u7 A. Y
}: [7 _: @' @) g( b+ \* ]- c. E! a# R
};, x* d( Q7 B3 h6 d3 k5 Y4 g
class CInventorySort
5 e! `: L( M8 {& J0 c{
" E4 L1 }; H9 Y; ?$ d1 G+ [public:
- Q! m2 @4 R3 V' Q I& \$ GCInventorySort()
+ y9 G3 e6 F9 D0 F+ k( b3 W{
! H% S- n: }/ V) H: H) X' A m_dwPos = 0;. `. h2 [2 r9 s/ g, o, t
}
4 J3 C8 J- t3 Z& z~CInventorySort(){}* `6 ?( H" W( a l
private:9 t. L" N# X# V# c+ T5 h& I, F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' W, E; a* g# pDWORD m_dwPos;" O8 B+ ~# |; h" M2 c; q# I8 h9 o( Z
public:
! k7 }1 r5 r: q4 A8 Zvoid Add(BYTE nIndex)! `3 z8 `, E2 @0 z0 {! z
{$ q# C- e$ o8 i$ O( `" U6 Y
if (m_dwPos >= MAX_INVENTORY)1 C7 a/ O. p7 h! G7 y
{
* g$ T3 U, D4 x2 U: C6 P return;' n( _/ y) {9 {) O) V) ]
} t% W6 L+ H1 T8 E4 M1 L- O
m_Item[m_dwPos].nIndex = nIndex;
, K5 N/ H( a! u! }; J& O- @( p m_Item[m_dwPos].dwId = m_dwPos;
6 J+ y, H$ C3 }* A; K7 }, B m_dwPos++;; d* M9 |) h1 G6 w S
}. c* y. i2 D; ^3 w! r5 E9 c3 e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- l3 J, B% S4 k$ i. W
{
+ s7 U9 K2 ^# b' D6 V. Q2 @ for (int i=0;i<MAX_INVENTORY;i++)- z; ~) |; [: y: k. F; e* T
{6 i* v- U3 B9 g( K' o, P5 h# w
if (m_Item.dwId == dwId)
+ z: i0 M; I ?0 ]2 f {
* H/ U* Y3 S W7 O8 S0 r# N: a return m_Item.nIndex;
+ z q. u8 k$ p* k }" m$ C/ A( _; K# c6 p
}
: w, |1 I( W$ W8 I5 w' V4 o+ { return 255;
6 y" m' A- R+ P}
8 v/ w7 F" a% Q7 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 s6 x, E2 g: f0 [) \1 Q: ^, M
{
3 I+ k0 s# |- K, e. O BYTE nTmp = 0;
' R- d1 t0 G# ? bool bDest = false,bSrc = false;8 }& [! ]* k/ {
for (int i=0;i<MAX_INVENTORY;i++)
t( c( }2 U, }* h; ~ {
" P! Y& j f( a c3 \8 f4 J if (dwSrcId == m_Item.dwId)& D" q6 J* g2 b
{
# ^8 @+ w, T; c# a6 U z8 G //id相等 则 改变对应的dest和src
: X, l- a& \) [" C nTmp = m_Item.nIndex;
( n# z* P1 b& W7 P8 P0 o7 e R2 [ m_Item.nIndex = dest;( r3 |1 C& K! v
}! G! n# z! f0 L( @: V, J1 t
}
/ W v0 v8 e* G Z1 S7 r I //临时数据保存完毕,交换开始
6 Y, F3 u/ ]6 h9 o+ ^' P for (int i=0;i<MAX_INVENTORY;i++). n3 h8 I/ U4 J8 t1 [/ d# c8 A
{$ s" ~+ m m8 i! O( [
if (dest == m_Item.nIndex); Z" i; [ x2 v% P! S4 R5 r' U
{" w4 @3 o9 F8 I) E& Q) y
//id相等 则 改变对应的dest和src
/ B1 v; R9 ]) ^* V7 X m_Item.nIndex = nTmp;
2 X: l" K r; s4 |( ^# Q& B* t0 P4 H }
. i) _1 Z/ N8 f0 A# F: A }
7 p- n+ _# q; @}
# N9 n0 d" D$ V% ~' z};
+ D0 a/ ]" p7 F1 L; a1 G, t0 c-------------------------------------------------------------------------1 s# L6 p% w) X' ]5 X% D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
Q, D4 p9 ^' y7 r+ c$ {& j5 c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ a& y( i! i' u; o+ O4 D% V$ [紧靠其上添加:
% ?/ f* B6 n4 P) F6 O" M4 A4 qif( pWndBase == &m_wndMenu ): `+ l( H3 n$ E7 O, K
{
/ r% g- a p9 J7 f; I4 u* k switch( nID )
6 P" s/ D% s. _& G+ K9 F {; B% S5 \, |# c$ m1 c# S+ A6 ^( ~$ M! o
case 2:4 l. ?( `, C* F: C
{
2 ]+ K8 @/ n l2 o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" [6 c8 D. u4 A: t
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ _2 F3 x0 }% I; F
{
+ v1 b5 n: b$ C3 d7 V# p- d1 V break;8 K# ~& q: d( B& B. @$ c4 P
}2 h0 |3 \7 h- @9 k% o
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); @0 M6 x2 ?' E4 Q5 o
{
! L* w" j: }% [' \$ D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' k7 s6 M- D Q( Q0 V/ U4 w# [ if( !pItemElem )
' D" @+ ?+ F9 }3 R* O continue;$ p! T. h: ?9 K1 N5 O% s+ H6 @
if(pItemElem->GetExtra() > 0)
0 _& s* _& m4 B# P* |0 s continue;
! F, m- e. k, i8 y( I, h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( L7 m( q% D+ b5 B; L( H
continue;* F! r% C g9 u' w5 f# N
if( g_pPlayer->IsUsing( pItemElem ) )
& ]9 p( u' t( ? continue;
$ ^* C. }. W) z( S; f+ ? if( pItemElem->IsUndestructable() == TRUE )
2 |6 l8 ~* s/ o1 E+ J% p& Y" h {
, d. ~9 U( c- j( V; _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, |5 O* i, \' v/ K( d
continue;
4 w9 l! `; P9 C* ~! {" o! t* r }3 O( }1 R2 S. l2 Q( G- \. R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# U) M' r. s O2 J/ i3 R }, J! E' u! c7 y- |; ?
break;
% ^; c2 J. v( j( R5 v7 P }* C+ x7 q9 q3 e, w3 ^
case 1:! o3 u' a2 h5 }% Y- B: w5 ]& V
{5 b+ s/ C6 g* F0 |+ c4 m
//整理背包
3 z+ A7 o$ x, g- t3 d //////////////////////////////////////////////////////////////////////////, ^9 k7 S8 t7 y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 W9 J# N" h8 E: V- c! E3 ] //////////////////////////////////////////////////////////////////////////+ L+ R; b' h/ P5 b: p; l" ^9 z
//////////////////////////////////////////////////////////////////////////4 E: t' m: o* m' r+ i# A
CInventorySort* pInvSort = new CInventorySort;
# F5 \, Y( W3 w! ^ vector <sItem> vItem;
0 a5 Y O( M9 _2 } vItem.resize(MAX_INVENTORY);//初始化大小
7 Y @9 o8 K8 I6 Q+ E- ~ //////////////////////////////////////////////////////////////////////////
! P! U' J2 v% a' L7 ]; S //填充数据; n( Z. A7 L# [, ]; f4 p
for (int i=0;i<MAX_INVENTORY;i++)
$ I+ \& w8 x9 N l* Q$ } F) d {8 |+ u& B! D) }$ c& V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, k2 C+ O, |8 E- e if (!pItemElem)
8 {6 n$ y+ W% P& S0 h/ Y0 w {. h# h/ l5 g$ @& I; t
vItem.dwKind2 = 0xffffffff;0 ]+ r7 @4 l* {& }5 O
vItem.dwItemId = 0xffffffff;
7 J4 h' W7 N# ?* S# K- L vItem.nIndex = i;9 p( J" ^$ y% u; k+ V$ W
}else {
( F4 Z$ j: v' M0 D. ]& ^ ItemProp* pProp = pItemElem->GetProp();- v- N4 k1 @( \% K4 E
vItem.dwKind2 = pProp->dwItemKind2;
Z. \! \4 f. V( B4 M/ w vItem.dwItemId = pItemElem->m_dwItemId;% f* R w. \- f' J! t3 `8 E
vItem.nIndex = i;
' @" a6 f ], |( J& w7 @4 f }
* J3 K# L4 b! ?) ~6 o9 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 N! g2 {- m1 l9 V8 F% H }- ?; _1 ?: E% | W- f, ^- m
//////////////////////////////////////////////////////////////////////////- Y# a8 C% Q0 d4 w
sort(vItem.begin(),vItem.end());//排序" b- H+ K9 k" y2 k, |. h
//////////////////////////////////////////////////////////////////////////
* k& ] E3 D* y //交换( L* C+ q% ?4 ^. s, a4 b2 ~
for (size_t i=0;i<vItem.size();i++)' @, ~! R; ?* q4 ?. n
{
/ [. `9 h% }4 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 ^% N/ ]6 t' d4 m' }
pInvSort->Add(vItem.nIndex);/ z. S* d' L2 t, [, W
}9 a3 v! g* L" r3 N" t3 q1 J
BYTE nDestPos = 0;
$ E+ ?3 S6 ^/ }3 B' \ for (int i=0;i<MAX_INVENTORY;i++)% D) v* d6 F. g3 k6 B
{
1 x; _5 _, t0 H! ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& s' p# S: p3 j, u( o if (pItemElem)+ c; x7 P/ P1 ^4 ^0 D/ j0 @2 C
{' }, W6 G P. g2 g) J/ r
if (IsUsingItem(pItemElem))& W! [% ~* I2 i \
{
( |% a$ g/ _6 C7 y6 I$ d/ |7 L0 [8 s //这个位置无法放1 i! l" S& I& h
nDestPos++;
- d: l0 p, U/ K3 d' L }
; G# r+ E+ J# ^3 L- T P, R }$ c* S$ d5 C1 T" M: x
BYTE nSrc = pInvSort->GetItemSrc(i);
; X! k, t. l/ L. ?5 H" t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ x# |7 l- n2 N+ E7 \! p6 T |4 w if (pItemElem)3 H( M9 m$ g' g& ^4 A/ [/ U
{
* F3 Y7 p. L& s" H if (IsUsingItem(pItemElem))
5 W- P% c' o# b6 q. O/ _! F {8 f# v" g' y" t0 [0 u8 ^/ m! k- G
//这个道具无法移动,跳过, F0 F5 S" p* u
continue;1 I- \6 z9 Q8 }8 t$ V8 [- {' {) | {
} h6 W9 [+ i$ A0 ~
}else{( C, _- A0 F( T. d$ y% N4 ]2 G
//空位置 不用动: j% R. s$ B3 W% {+ R- ?! m
continue;0 e5 c. Q- e/ x& W q/ c
}% `3 e- V7 F& S/ M% W7 Y
//////////////////////////////////////////////////////////////////////////4 ?1 N4 z* N2 f% m
//开始移动
3 t1 I6 D& Y& d' Y; D2 Z& a if (nSrc == nDestPos)* c) ]; U8 X6 m8 a
{9 A1 i4 Q, G6 B D% B
//原地不动 r% J0 l0 N2 a! t" _6 U) c
nDestPos++;
' {5 w) M+ E& I* I5 R continue;3 h1 i2 v* a' F/ Q# p9 [% b
}, D8 U2 t, c v+ @' X7 w
pInvSort->MoveItem(i,nDestPos);; k' j1 M, O# M% r- j5 ]
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
n9 B* I, e, h; h Sleep(5);- m. f- ]" @; ^' A2 V$ L5 C
//Error("移动 - %d->%d",nSrc,nDestPos);. z% L- Q0 m7 H+ F* N3 q' ^3 o0 ?0 {; ?
nDestPos++;- t: p. u* ^" n/ q. [$ q% g8 x. E
}+ M5 Z$ X# V- X8 Y
//取第一个元素的信息- |' B" _% I6 H: }% y4 }/ H9 Q
/*" s5 N+ B" P; E- ?* {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 ]+ E) z7 M* f0 f; Y/ q8 v @$ [) ] {
/ z6 H N: t& R/ Z% D6 D% G7 p: X; } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" m1 j$ I. C2 R" A4 H
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 t( H, a& U/ x8 L }. |& ~ {$ |. c" Q% t/ Z p7 i
*// q1 K: T' ]6 P: r' I& `
//////////////////////////////////////////////////////////////////////////
# @' ^$ A( G4 ~& ?4 ^; i break;- x# e' B4 P$ G+ D8 Y6 P
}
" j+ ~/ \' g, I# s1 A& V6 ]* u } 1 Y e% G: G( X! `/ D( G: y {
}
* d% H0 b) k; @4 fm_wndMenu.SetVisible(FALSE);. s5 c7 G! f1 Z( ^3 S
6 Z2 A# b5 d* ~+ @' x* b/ I- c& d# c--------------------------------------------------------------------------------------------------------
`+ X% x/ t8 ?, ~: H% u# a f& L搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ |7 I8 ]; U! q5 f{
" a. }2 D4 y7 o% kBaseMouseCursor();9 _' B3 D+ o4 d, `
}
( P4 D v; T! `在其下添加:
0 z, e, A4 X; `, Z1 h0 h9 yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 p$ x: h; z9 ]$ _2 k" d" T
{
% s% T7 Y2 H0 Y; h) D3 n3 g/ qm_wndMenu.DeleteAllMenu();' v' J& p, D! N, m
m_wndMenu.CreateMenu(this);( u8 l! Z6 c a4 }- {& ~; q0 h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. U, b4 T$ i4 [
% Z5 j8 c; R; M/ V( Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 z4 n# R. Y1 E. P' E/ x9 t3 R
{( C- c2 ~3 x8 g3 g- }
//P以上级别才可以删除所有道具$ O9 q& m+ i$ ?- g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 J2 h0 u% h/ K/ n: }- J$ B
} j1 w3 n, f! A% s1 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 l* ~# I4 R |( b0 v' }. `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ Q' |' t$ L$ z7 j
m_wndMenu.SetFocus();; R% W$ t* u% T0 U2 N9 v$ t3 O
}
9 Y! x! s! r7 I& e# |1 V/ k, B------------------------------------------------------------------------------------------------------------
- W3 y/ w4 l `* ~8 l. F' }5 Y% Y& O4 V*************************
) k$ u5 D& I1 i5 `- f( ZWndField.h文件
& x& q$ C, S3 O; w' e*************************
# c( f% b1 I) K% Z# O/ S* S搜索:BOOL m_bReport;
3 ^. ^) n/ V, m$ S其后添加:3 e) ]* A% _ N1 ]
CWndMenu m_wndMenu;/ S4 x# C0 y2 S; G2 k2 Y$ g, Q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 E$ Y) S& J F其后添加:. p, C! ~! C0 |) _! B
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 P$ C9 F+ U+ G) {( S, e; S
* j, J+ r: V! d o- |8 \
" w, [9 K H# x* [4 d |
|