|
|
源文件中_Interface文件夹下WndField.cpp文件4 \4 c: R' d0 Q" D @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Q. Z! Q: x- E- J& C T; u
' G& E. a( P9 k% k
struct sItem J c+ I% J5 f7 O
{* O# W! z2 j1 D8 e5 M6 @6 B
DWORD dwId;
' R* n) m4 U9 H; Z8 }) M% L3 A0 x- UDWORD dwKind2;- M1 W1 M7 f' O0 f0 `& p
DWORD dwItemId;: O% Q& e. V. a" K: o- t* S
BYTE nIndex;& O1 q* J) D' ^" o
sItem(){
+ \0 o8 c/ O+ Q, j; Q$ K dwId = dwKind2 = dwItemId = nIndex = 0;
3 s0 U8 |- p$ P0 l# A: v) {}5 D! w+ l8 [- z# Z- ~* A
bool operator < (const sItem p2)0 a" h. } e, s4 h% N
{) I4 [5 [* K, t% j3 M* }+ J( [
if (dwKind2 == p2.dwKind2)8 u3 q$ N: U: z: l5 h8 N2 L9 Y/ h
{
6 Z$ O7 M* D% e/ q! r$ X return dwItemId < p2.dwItemId;7 l4 k6 H% S% c$ ]5 D
}else{1 F5 x: ?; x. A9 i4 W% t7 K
return dwKind2 < p2.dwKind2;8 G3 u' t& h. D! P1 O" C5 Z
}
9 P/ t: b# z! d+ C}
3 O T6 t. I3 S6 u* l: \};# Y1 s2 l. z+ [9 e, Z( B* {& g
class CInventorySort/ F3 e4 ` z; I1 j" M2 l! M
{
* B; P" k, A* k. }% Tpublic:1 t2 B" q( S# i7 H& _: V1 A* s8 C
CInventorySort()
( t' G `. n# p5 a# @% e9 R/ ]{
+ T# d, H5 ^0 S- _) B m_dwPos = 0;8 _% Q; y" P5 p1 j
}# B3 C! z* U; e% H5 F
~CInventorySort(){}% g' _+ ^- u8 O( O5 ]$ X; d
private:
0 U6 N9 f. K# o1 x6 }, P& PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 @/ o! _* o+ u3 \: V4 IDWORD m_dwPos;
+ E3 T! K F! J+ _" y3 bpublic:/ S N' e" J; N4 d9 ?; T: ?3 X
void Add(BYTE nIndex)
6 f3 ]+ V, Z" k' h% M" e{
: z9 S6 x" `. Z: s if (m_dwPos >= MAX_INVENTORY)# d- R9 h/ ]8 B: W( z- K' d
{3 i- y/ k8 j* Z8 b( T" f
return;
2 L: R1 X4 m: H) g) \# U" A& { }
/ M# A8 [2 r# P1 H! G: R m_Item[m_dwPos].nIndex = nIndex;
5 A5 C% V! S" k7 R, v m_Item[m_dwPos].dwId = m_dwPos;+ n7 k0 T1 m" J4 k: \
m_dwPos++;
. Y) q6 t$ M$ n ?8 v1 z}( z% @% }* n% o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& N: O7 s4 O) k3 C& {* s
{
7 N9 K( n3 \( ~$ r1 `# C. J, `( e& _ for (int i=0;i<MAX_INVENTORY;i++)" m% F; I0 W# g$ l1 U
{
$ Y$ H* V2 [' M$ U! ? if (m_Item.dwId == dwId)+ v& a6 q' |! l, g$ i) T
{; Q1 b; M6 J A) Z/ c9 m2 `
return m_Item.nIndex;
" ?) ]0 w4 E. L. E' U$ k }
/ z0 o/ A- e- r' J }5 J9 N& g G! f. {
return 255;2 c# T0 p8 M1 E- V
}6 r4 I% [% v5 a: ~$ a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 L, ]9 {3 [! }0 r
{
, f8 X' N1 j, S$ v6 y4 B BYTE nTmp = 0;7 y" |. X, @' B0 y W
bool bDest = false,bSrc = false;) |2 x3 y, F7 |
for (int i=0;i<MAX_INVENTORY;i++)+ q$ K, C, J; ^. G- z3 u* h
{
O' d" k1 s4 z, t if (dwSrcId == m_Item.dwId)* L+ W" W" Z, f- Q7 Q5 y
{
7 q, O2 b- w0 U j3 T( o //id相等 则 改变对应的dest和src+ w1 I, ~4 P& X8 S& \
nTmp = m_Item.nIndex;* t, A- v% ~# ^ u7 @9 x
m_Item.nIndex = dest;
' F0 i0 c- {8 L' e5 K# c2 D }
+ B! m, _* J( a2 M0 N4 m# z }5 E8 j+ E2 k5 O5 S
//临时数据保存完毕,交换开始
; o7 H( R" E9 k$ ^" ~% `; i7 G for (int i=0;i<MAX_INVENTORY;i++)
2 H" g6 N8 E5 I( |' _ {3 b" q- v$ [ z0 E8 w& B
if (dest == m_Item.nIndex)
% Y2 a) G( F0 h/ B' }. _+ T {
0 G$ ^: T. T& J$ l( P4 } //id相等 则 改变对应的dest和src
: J% p/ w" F- \% J3 ] m_Item.nIndex = nTmp;
# k8 | L+ X: a! g; f+ c }( b6 Q' Z, ?6 u: K* q3 s' b
}
* J+ H n0 c g+ Y* W4 i}7 i/ u/ j) Y( O, I* M
};9 e; R6 Y$ [& C5 n, Q# G/ n
-------------------------------------------------------------------------6 Y4 p' |! M, G# [# J3 `; E2 s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( G; ?, F; P# o3 i, }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 J0 l, U1 [' h) D+ q# H, K) {紧靠其上添加:
+ d- i; w/ E3 Z6 ` v- b/ f. u ~if( pWndBase == &m_wndMenu )3 P7 x" s) J" D x: H$ o( p
{
/ t d- ~+ u6 F1 R0 L5 l4 H switch( nID )
5 z: g$ \; ?. ?2 Q( } {* ^; ], s. f; @* l. V
case 2:" u& m% [ [# ]
{- y9 Z$ o2 {+ Q& _/ `. w* Y3 y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 h: f( q- ~, n( Y/ h- Y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 t P( Y; U+ Y: _0 U {
7 k8 @& [+ ^7 X" J break;
4 q$ \: ~- q: X0 [! h }
# h+ T% c9 |$ W' m; Q- @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# R* ?3 n, |" ]. \+ g U& w# p
{7 R3 I L8 g+ o3 s; ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" q0 R* a6 ^, x if( !pItemElem )8 |) t$ W, r# [, M! ?
continue;
6 v3 l" J! m7 I2 p if(pItemElem->GetExtra() > 0)
& ^' g+ C/ g# J! B' N" z/ @ continue;
) P! @. z& u9 }; [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # y" [8 l- Q# |' q0 Z3 U9 y
continue;
- R) A, A7 R3 f. a if( g_pPlayer->IsUsing( pItemElem ) )
0 u& O+ T. P1 g a2 V continue;3 {+ r/ @8 g- ?) j6 p: ^5 W7 s: T
if( pItemElem->IsUndestructable() == TRUE )
5 m. B" x0 b7 K; _, G+ ] {
& A* X* ]& N8 z# d. w* r. W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 A0 X. D# O9 X# v$ g% ~ continue;
6 Q6 @0 j4 b0 n) o9 r+ c! d }
0 _. u0 ?* B% S ]- ]' e( [" @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 h8 p2 y- `; Y7 P- L2 m. d/ l+ z }1 J5 w1 Y- ~) h# \) `. |
break;% C. }; F r$ {% S9 ~
}" W+ U- |: V! o _# t
case 1:
* ^: K0 }6 m0 M6 _! G {, a0 g. ]9 J4 R8 Z( ]! ]
//整理背包4 u( X) a. E4 F) T+ D$ J+ T# ?6 T( L
//////////////////////////////////////////////////////////////////////////( P, F% a) x4 V% w! O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 j( Q- s1 ?0 t: r4 m4 g) S //////////////////////////////////////////////////////////////////////////
0 p+ n# }2 e5 T$ C6 Z7 s //////////////////////////////////////////////////////////////////////////; Q2 c* j! |: G& n
CInventorySort* pInvSort = new CInventorySort;3 o& O" W, y( {: o
vector <sItem> vItem;
; R) N3 Q! z+ F/ q$ v t vItem.resize(MAX_INVENTORY);//初始化大小
% O* ?- l, p# F D: ? //////////////////////////////////////////////////////////////////////////
6 c3 {# H6 d; }, o) W //填充数据3 `4 Q+ G7 Y1 N5 x
for (int i=0;i<MAX_INVENTORY;i++)8 K" T T0 o4 t2 E& b
{; w/ m* t; A" w& b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( ~& P- o1 t1 z; y- A* i6 w4 K if (!pItemElem)
3 J" P. o7 T1 h {0 n/ Y! K l8 t4 y# i9 ?- C
vItem.dwKind2 = 0xffffffff; ~, h% H. C W g7 e
vItem.dwItemId = 0xffffffff;
) w( G: g$ M8 Y vItem.nIndex = i;) f2 Y0 C) r7 K* a$ r2 D
}else {
+ b, e+ P7 w- W1 x1 ~ ItemProp* pProp = pItemElem->GetProp();2 I) Q. I. j/ C
vItem.dwKind2 = pProp->dwItemKind2;
( t5 X5 }" \0 `8 ?; w vItem.dwItemId = pItemElem->m_dwItemId; D; J7 A8 e2 e0 n
vItem.nIndex = i;/ f: r8 N* J% p2 D7 w. B9 K$ `
}
. @" {* p; u: b0 G. w! Y, K //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! _& i7 r) N1 u }/ v9 J' y: {' z
//////////////////////////////////////////////////////////////////////////
( T+ E. a" I0 S, v% Z7 }7 p sort(vItem.begin(),vItem.end());//排序$ o9 } a* F \0 U* J Q' D7 s
//////////////////////////////////////////////////////////////////////////
- j6 |+ F/ b( v. z9 Y6 T //交换! I3 o) S5 U7 {, }. S. o
for (size_t i=0;i<vItem.size();i++)
& m5 x) p3 v; j p4 q, n {+ D9 x4 C! z2 B# q M: F' m! R4 m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ m/ K: S8 w$ K* A& s( t' D5 W
pInvSort->Add(vItem.nIndex);1 E& Z' s8 B9 W8 Z
}
+ T& s3 ?( Z/ ~& |3 L4 u/ n BYTE nDestPos = 0;
* L% d; a0 \/ R: x4 }1 i for (int i=0;i<MAX_INVENTORY;i++)
1 q8 x; k0 A5 |. \/ F/ L8 y {$ d* o5 A3 O# L. O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 L6 J F: m5 H3 U if (pItemElem)$ C! U- @, Z- P
{
( ]6 x% ^3 o* e* n( ?: c if (IsUsingItem(pItemElem))
/ q. J% r( i. I* n {
- K( w- \& I* e/ C //这个位置无法放4 R- I! N/ j4 c, ?3 g+ f
nDestPos++;4 y, k) D4 J" }, b
}
+ ^# Z# J z. P" A- S' j( n [, C }
o1 f6 N8 i3 I4 X BYTE nSrc = pInvSort->GetItemSrc(i);3 n: M% i1 j0 |4 g+ D4 d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& [/ h1 b$ |: H/ L
if (pItemElem)" s g7 E6 n4 a5 y* l3 T
{
, o% q- g0 R. y z8 y, D& j- T if (IsUsingItem(pItemElem))
5 C' j& b! j8 z0 o' F. N P; M3 J0 u+ q {
: z" r; {* b7 Y" h# A# [( T& I8 i //这个道具无法移动,跳过- S7 \' L+ X+ w9 C* c. E
continue;
2 h7 i; L8 h* t- j; a8 { }+ Y% @2 _. f0 Z# O; J$ U
}else{$ t/ q7 e3 b' x9 S2 @8 {
//空位置 不用动' L5 T1 N0 P$ c' H
continue;8 h) }; s" L* w4 C ]. @
}$ C. D5 T. {8 ^6 I. Q! J; ^+ E
//////////////////////////////////////////////////////////////////////////3 d k! i( e/ U1 i" |& e
//开始移动
) [; l2 ^5 G. s% o/ N. P9 i if (nSrc == nDestPos) w8 C1 X+ Y5 D* c2 S1 ^9 u
{' l) m9 z. f' Y* o* |5 Y
//原地不动
h( o% p5 f- X4 Q1 Z/ }- ~ nDestPos++;
# v% b7 s; U \% S continue;+ l# A6 w' K0 q0 U" b, K
}
* d$ b% f! I6 D* L- A* X) L& e pInvSort->MoveItem(i,nDestPos);0 { }% U; _& s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& ?( v/ k# c4 I
Sleep(5);
" p( C1 `! h- Z( S7 y$ X4 { //Error("移动 - %d->%d",nSrc,nDestPos);
4 k* |. v- P1 N" z5 k/ s! X8 w nDestPos++;( o2 Y9 }% Z( z2 Y& w
}
" H6 ~$ I( }! O0 b- R/ ] //取第一个元素的信息% q# F' m1 L8 O8 F3 }+ y* F
/*
# X# z6 j+ k" r4 T4 f8 u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 O$ j( ^; [ R7 _, T8 v/ B
{
% V8 m1 u1 ^5 p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 w1 v$ o' j9 N" q' N X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! e! H" z/ E3 j
}
/ i0 @, ~2 k9 v( d& G' S, W, s */
, z' j) P# M/ \ s //////////////////////////////////////////////////////////////////////////! F; A: @0 E: A- _1 |7 R# P$ e
break;9 ]( e3 j6 H# {8 i4 v
}0 d- j1 D3 `/ ~* B3 I/ A
} ( S/ D7 V" h9 x: S: r3 m
}: w% \8 r9 u; h, T4 E
m_wndMenu.SetVisible(FALSE);9 @4 K4 ?( o% A' i3 T/ L
4 `, U: `7 `! v# t4 f6 |
--------------------------------------------------------------------------------------------------------1 d" m# X! E' \8 [' b2 B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) o. d( F w$ [! U
{. k7 w2 V( H+ g
BaseMouseCursor();
0 U- u3 \8 m; f: ` G. U% C& c}8 R9 T$ n/ a# }
在其下添加:7 W+ t4 F1 J& T+ P# s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& B8 u* p* W7 X4 s" A5 a" [7 v" c{
8 L( g. Z+ t" O, dm_wndMenu.DeleteAllMenu();% y! b; R* V( h' ?* D( u' k2 l
m_wndMenu.CreateMenu(this);
: t2 R8 K0 p( f3 G0 \; \+ R+ @8 p4 Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( C9 X) j3 E8 z. I; c& O
$ }* Y9 n6 F. M* }! z$ W% b( ^: m( X, Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ b, m$ a3 Q- N% I8 l
{
/ N: ? D$ w7 E2 ]& f2 R9 K //P以上级别才可以删除所有道具
F2 l7 H' b6 ^/ G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* o& E s" j' G) I" a; k- Z6 g3 C3 D}
# @6 l2 v6 v& [% ?: bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); h; t+ K' Q5 F! A8 {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- P6 Z( a! h' _7 G, {# u) ~
m_wndMenu.SetFocus();
6 a( I" Z0 b, t& h) ^' q! r}
4 d& ~7 i) a s+ v------------------------------------------------------------------------------------------------------------6 P+ H" ?% a! z. C
*************************( m7 c3 `" V- k( S; @% x6 I/ c
WndField.h文件
" G6 r5 G) x5 p1 x*************************
- F/ x' O& B0 S" C& X2 n搜索:BOOL m_bReport;
( i" C% i% U+ G8 v. t9 y其后添加:% I6 a/ ^: k3 o; i" ?2 v- b" g
CWndMenu m_wndMenu;; s5 p# U# j# b0 z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ O/ h0 Z8 [9 a3 \其后添加:
) C5 ~8 [" ]7 c- I/ Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
w& X$ {* e, F; l( H7 k9 T
9 a/ g; H" C7 a( e* i# G% z& f2 A* [7 S$ r$ p. A
|
|