|
|
源文件中_Interface文件夹下WndField.cpp文件
8 h- w! w, a3 s9 z2 r搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 p# K. d( H- r" } V8 a, q6 }- O* @: Y5 ~9 Q$ M
struct sItem+ \4 @) h4 n$ ~' B5 T" M( ^; o! H
{ D o; b/ k w0 o6 x( L
DWORD dwId;
. E) i( |' Z2 U% i/ PDWORD dwKind2;8 c ^9 R3 A6 m" P: v$ ~
DWORD dwItemId;
2 c# k& T3 X H; s' S0 Y, J- wBYTE nIndex;( F V+ s; V- m2 `$ f4 ~3 u1 Y
sItem(){5 `6 ?9 R0 ^8 t6 v3 m! i7 v
dwId = dwKind2 = dwItemId = nIndex = 0;, _1 ^6 f) k6 b# t ~" F
}
) S/ j+ F. I; i. fbool operator < (const sItem p2)! F; t, V0 g7 c4 {8 H; R
{/ @5 } r5 ^" i9 {6 |$ k8 m7 a% F
if (dwKind2 == p2.dwKind2)1 b% g/ u! E/ ~( }7 S7 s& A
{
1 @7 F5 S2 \! ^* ]4 y( S$ x return dwItemId < p2.dwItemId;
1 }( [7 p" i. h: Y }else{
' r4 j$ t& {/ v return dwKind2 < p2.dwKind2;
6 _& c A8 x$ L6 @# g* n$ X } ]0 i: i9 V' D* u1 |
}
& x) F% }7 ?9 D( ]7 x' p: G$ M3 \};
2 u1 B' ^' e' o1 f$ l8 Kclass CInventorySort' A+ S2 p' _4 m# T
{3 F( `" c4 J8 F) K2 f0 x
public:6 P3 C' P; u4 W7 Y( B
CInventorySort()$ n5 a# C h/ j$ S' W! V
{( A, l3 m* R3 J# u- T
m_dwPos = 0;
9 |1 ?! R: k/ w! u: X$ ]* ^}; ~: v0 L" [( t; {+ J) R
~CInventorySort(){}
$ O( S* O/ N) m* L" h- K8 h/ Nprivate:
0 n. W5 J3 Q4 v* esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 K# Q: R3 g+ {
DWORD m_dwPos;
) K2 e- N' A" Z6 z2 Z3 wpublic:
# K$ Q* R. o. D& {% i0 y- C4 svoid Add(BYTE nIndex)
3 @: H( ?9 D6 g4 V$ Z; P; z{
5 m* T0 @4 a5 _( E if (m_dwPos >= MAX_INVENTORY)- m$ c1 \& v4 M$ {- _
{2 D' g( Y. v2 @; ]" T
return;9 f# ~/ v0 w+ S9 H" @4 P
}
0 ]$ n1 V6 k0 D/ A: q! i m_Item[m_dwPos].nIndex = nIndex;. k& O' h3 V. e& U: d# R6 d
m_Item[m_dwPos].dwId = m_dwPos;
) h0 q2 P) z5 r2 Y3 T E& x7 q m_dwPos++;
" n1 [4 k3 n: k4 x4 b( O \}
: a* |4 b! t" M2 @% }4 p- ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 O3 K* ~# _( Z/ R{2 K2 \3 S. R2 _- }
for (int i=0;i<MAX_INVENTORY;i++)
$ Z7 v& a. v6 d% h1 W5 d9 o# V {
0 ]5 y4 l/ w4 T; \8 P- ~+ N if (m_Item.dwId == dwId)
8 p1 `5 |% b$ q( @+ B7 I7 D {
; N5 g8 z8 G: c9 \0 _2 ?$ H8 s return m_Item.nIndex;
( Y4 ~3 d y8 N: @) }' [( J }
$ o7 Y! E6 [* L0 b }& Z; M3 x. W9 Z
return 255;1 ~% |6 B" | p1 Q( p& y S
}
+ t! M: Q: Y0 ?; J3 x, uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: |& O* Y2 H; ]( t8 M7 @{5 y& G2 {0 A* S1 s2 l% c" [
BYTE nTmp = 0;+ y, s# I& g6 T% U9 D& Q, G; e! J
bool bDest = false,bSrc = false;
0 o" R8 e8 v" n% b" H9 v* p for (int i=0;i<MAX_INVENTORY;i++)
- l& I8 R9 j/ i- W, R4 l { w' n" a% x6 |
if (dwSrcId == m_Item.dwId)8 d h# }$ U2 V: W
{+ ]& v6 k* U0 U' W
//id相等 则 改变对应的dest和src
1 o& C/ B5 j( b" V nTmp = m_Item.nIndex;3 t6 N- Z* H" }" Q: ~
m_Item.nIndex = dest;% v3 ~% y* a+ u! ]- z" C( B
}
& r7 \ q' [$ D }
) F u# k$ H' B8 O) l* P; Z( f //临时数据保存完毕,交换开始+ G% `; P$ G# {8 H# U
for (int i=0;i<MAX_INVENTORY;i++)
% O) @) v2 ^- {. _ {
. x' Z N/ a& N" p if (dest == m_Item.nIndex)+ U4 i1 q: Q5 E& e' |
{
, p, |7 u9 l! J$ K- a0 [ //id相等 则 改变对应的dest和src
2 q% \) n H. f& x* w; F8 G m_Item.nIndex = nTmp;7 d' _- V% M; d2 m) K
}1 P) M2 o, h, E, P1 I) K
}, w `9 ]" P+ d: G. r
}
$ n* z& f' }6 l `& y/ ]};
- ~: D/ ]$ f: Q2 @: d, m-------------------------------------------------------------------------
7 S) q% r2 W4 L4 k1 O" @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 m. I, C* L" M% b) a) w9 w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 D; s9 `4 L0 |' Q
紧靠其上添加:
; d5 A2 O6 _- x. aif( pWndBase == &m_wndMenu )0 v4 c+ K+ O6 {& N$ `
{
) B9 N) g& m% ^/ ^! n1 n switch( nID )
" y! g5 h( p3 \* M6 {. _& U {& L# L4 I5 P9 [, ~4 {5 H" F+ L P# Z8 n
case 2: |, I! X; j+ Y) }4 K
{
: e! I d/ |+ f7 \* I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 |# c' h# s" U1 p( E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); w/ Z( [$ v0 H, y# h
{
! |2 a1 X* D( N break;
! p& l( E) `+ N7 p8 H1 G }9 @* z& ]% Y3 X# U2 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 S; T, j7 D- ~ R+ ]1 X5 a {
) E+ o% o4 ^' T4 | M6 v5 h% Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ a4 n, S9 P- u- y" x# t- }6 ]7 z
if( !pItemElem )
8 H& z9 M0 Y* _: Z# f# x continue;
8 F( _- Z8 n7 E% N9 x9 P1 e1 @ if(pItemElem->GetExtra() > 0)
! p7 a1 A) b* p! I; q9 m continue;5 H& _$ W* H! q$ s% [( r. i
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* Q. u4 E- [1 Q J* B, ^ continue;
- e; k5 }7 s+ y9 [ if( g_pPlayer->IsUsing( pItemElem ) )
; ^5 S1 h% c5 B% P5 i' H continue;
# S/ u7 J2 a, q6 Y; U# O' M if( pItemElem->IsUndestructable() == TRUE )
2 I) T- e; b/ |7 L# I4 R {
" P: S0 M# o, c' A0 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: ^8 p4 `- n" F% X6 i: q6 z
continue;6 j( F" d8 h# s
}
, b8 @" t# x9 m3 Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ P; z# h" }0 V/ i; q7 e
}6 N6 D1 \! A u' V/ A
break;0 M: x) ~( S+ L1 x
}0 A& v2 k& a& t4 b/ o) v! j
case 1:
8 N6 I6 A8 Q2 y3 A7 ^8 l {
8 J3 o) Y- A# \6 A1 _/ ?0 } //整理背包/ ]: C" P0 U8 U3 P+ `# D
//////////////////////////////////////////////////////////////////////////4 q2 F8 n& K2 Z" K, i: @3 j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. }- Z6 B( ]+ [* N! e //////////////////////////////////////////////////////////////////////////$ P" e$ y- f) [& j' n; o
////////////////////////////////////////////////////////////////////////// Y4 V1 E' b5 c6 l
CInventorySort* pInvSort = new CInventorySort;
6 E( N5 Q, x5 n) ^8 m& V2 t vector <sItem> vItem;
- P j ]+ T3 u vItem.resize(MAX_INVENTORY);//初始化大小' u8 p0 \' s2 B( T
//////////////////////////////////////////////////////////////////////////( E" h& H i& m9 |6 M9 y
//填充数据5 J6 \5 W( G2 B; p- d( ]2 _ u0 M
for (int i=0;i<MAX_INVENTORY;i++)7 F4 T4 d, q* W1 Z, s8 @- @1 Q. g
{
: o) Q+ d( r3 T/ m. X5 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 j5 k: y( H7 x8 P* v! L7 d if (!pItemElem)
6 X# A, N# m- x/ [, d {, z4 H7 _1 L4 [9 @, G, R
vItem.dwKind2 = 0xffffffff;
$ Y, R2 ~; o+ w% {+ K vItem.dwItemId = 0xffffffff;7 r G0 ~7 B ~3 |( L; i$ w
vItem.nIndex = i;
# k b. ~0 s# b# b' e }else {
& m( M0 ^) p9 m9 z ItemProp* pProp = pItemElem->GetProp();3 R; n( V, N3 D4 d6 H0 n
vItem.dwKind2 = pProp->dwItemKind2;
/ z$ ?" p; R4 {' A8 B; [! _ vItem.dwItemId = pItemElem->m_dwItemId;$ N( |2 |; _$ |7 O; p' F7 V
vItem.nIndex = i;# P. C/ V7 B1 f# o$ f1 o
}7 R* t6 A* L, x/ i2 F; `
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, g1 h0 [- A+ O
}1 a4 u5 }/ R- Y2 O
//////////////////////////////////////////////////////////////////////////
: A1 ^ y% ?' l7 ~" ^ sort(vItem.begin(),vItem.end());//排序
! g3 O& v1 D9 Q6 M5 ~. O0 M //////////////////////////////////////////////////////////////////////////+ P1 W) I- \8 i1 p* b- ?2 @
//交换( c8 [( @+ y7 F8 X$ _! _
for (size_t i=0;i<vItem.size();i++)4 E7 R9 S+ V0 q a
{. g7 W' j- M9 Z( }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% q& I" |0 B: f( E! a pInvSort->Add(vItem.nIndex);% u3 R& |0 d. r* o: _
}9 |( _& P/ m( ~! Q( v! h& A
BYTE nDestPos = 0;
% }. O2 F3 i( M0 T for (int i=0;i<MAX_INVENTORY;i++)& L/ n4 ?6 ^" m0 E# G
{5 |5 n1 ~+ m: N/ D+ J# L' E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 G" G, Z( T- Z+ X" V. A if (pItemElem)
% R* r' o- L" m4 Q K0 b {
* T) R; @/ [0 y( J8 M. G- f if (IsUsingItem(pItemElem))' R1 _9 j ]+ f n% x. L3 T5 \
{
, Y7 Z z# ?! j+ p. B& {+ {! B" R //这个位置无法放* p+ P/ G7 |3 v2 U/ b% e. w5 s
nDestPos++;
2 d4 C* N5 Q5 g; }% |) d }
`! S7 D$ H+ J; ^( F3 ` }4 _; p% M& ]1 ]& ]1 A* r6 x* C
BYTE nSrc = pInvSort->GetItemSrc(i);9 B; U/ K9 j. b/ a1 S$ s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" g s4 Q4 \7 N9 p- A, D' [4 v
if (pItemElem); E3 i1 O$ U1 w5 E$ ^; P% B1 n8 ]
{
& [3 |0 e: y" _ if (IsUsingItem(pItemElem))6 w- t/ k0 N' _. b# }" A6 ~
{
+ a/ z( @/ @" T* i //这个道具无法移动,跳过
# b" k# @9 g! Z$ i! s. q' U1 d* z continue;/ m; c4 _1 c$ R$ E/ C9 u7 }
}* a5 A! T8 O/ t) ]
}else{! h3 T1 M2 U' F' |
//空位置 不用动# l9 l' `" a) A
continue;+ w- ~0 S* R! Q4 D" p
}
9 J* I9 ?1 _& i //////////////////////////////////////////////////////////////////////////
: a3 e$ G ^: B' O+ o6 F- O& O //开始移动
2 I6 g" K8 Q; g3 D/ C+ g if (nSrc == nDestPos)
' \0 g! s( q# D/ I& U# c {$ I: o3 U5 ]) z2 ~: F# j
//原地不动9 _/ @7 l2 E# \3 t5 F' X6 f& E
nDestPos++;1 l r1 A3 [" F9 W! P4 K
continue;
! E2 g/ s- d8 L i6 \3 W" t }! p. \% x3 F c" o* k
pInvSort->MoveItem(i,nDestPos);
) W9 G* Z+ W H+ U6 @# C. R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ D" D1 k; }# @" Z& j8 { Sleep(5);2 U& {3 ^- x' r' K0 i5 f
//Error("移动 - %d->%d",nSrc,nDestPos);
6 L* C4 m2 b0 d nDestPos++;- w0 o+ L U$ |( Z
}
' y* L9 q9 W; y //取第一个元素的信息
+ x* }0 c1 f2 W9 O0 q2 n! @ /*
# y# F( K. i# z6 F8 T' t/ n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 [! I' v/ q; W" i, V* r {
% w. D. y* j4 ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" A3 J* \ p( j2 @, _; h& p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 @; [( F" n+ r- Y) [5 S
}+ h+ ?! L& Y: d. S& d
*/ v6 ^' K' e# T6 Z1 a) Z4 F& a: `7 K
//////////////////////////////////////////////////////////////////////////. f' M3 m' C2 N' x
break;
5 f- C2 D- ^5 O4 \- _% i }$ L! S+ J! J; [( ~: }4 \0 n8 a
} : K9 Z: @5 D0 o$ P4 X2 R
}
& c: u6 H: Z9 D. {6 k6 S& V+ X- Dm_wndMenu.SetVisible(FALSE);5 A7 N& E; g" ?3 S9 d
: w! p# w+ [( j$ K1 R+ W2 d
--------------------------------------------------------------------------------------------------------0 U3 r- h( C# P: j$ J8 N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" ~8 r" I7 J6 T* {; }% Q+ g
{
! { Q: [! {& DBaseMouseCursor();
5 u- [( M/ e; Q" Z+ [, }0 F m6 d" K}: C3 t Y, J% [8 W. }
在其下添加:; D9 M/ R% r# E8 z+ j- }4 Z0 T/ J; i( B5 `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" @3 v& _$ c0 e+ f6 s
{
& ?$ N2 f0 g2 f+ rm_wndMenu.DeleteAllMenu();2 @# U0 f% y2 C6 T
m_wndMenu.CreateMenu(this);) M" u, [, @& L q, J$ y/ D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& Y6 m, a1 }+ h- ]) A4 n- f
) M# V3 |, K* V+ a( e! Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ B/ Q+ t( \7 y) S7 V
{6 O; z# z) A4 l; A' f, U! R
//P以上级别才可以删除所有道具7 s+ Z5 ]+ h* @ z. ~( f/ z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ v+ Z" ^. V* V1 z3 B& ]}0 M, c/ q0 J1 S
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% i5 P, G( }3 ]7 _4 u) I6 y5 i& ?2 nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 Y8 {5 I( d; Q& E7 _! b# C1 |
m_wndMenu.SetFocus();/ k' g; Y0 i# i; g
}
p5 p5 c/ L( V------------------------------------------------------------------------------------------------------------3 I! A4 l! s5 ] _3 m3 F$ H3 I
*************************
* {! W/ R- H6 n5 ^WndField.h文件, ^+ C: m) \- S9 t* O: I
*************************
; s4 z0 U" }# {. C& q! f' X搜索:BOOL m_bReport;
: m. Q! ?1 M5 N8 o其后添加:9 X0 o7 t3 c: w, ?0 f! z7 ~ J' I
CWndMenu m_wndMenu;3 J4 N2 P) }7 a7 z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 I, E. J1 |( ~其后添加:
: j. A p9 u" k+ {virtual void OnRButtonUp(UINT nFlags, CPoint point);) j% [; L; Y1 f7 g+ d" H9 @0 n6 R. j" [
6 C5 u+ A1 r7 D
8 F: a/ F, H9 g3 g3 W |
|