|
源文件中_Interface文件夹下WndField.cpp文件
4 ?, D. k5 n% \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& b- K& Y8 _+ M/ D7 y
% Q+ e G; n# V- f
struct sItem( M. m$ X/ Z+ y) o. f5 r# @" f- X
{3 }; K' D o2 \2 H" W' T& u
DWORD dwId;* J; L, Y* z2 t" A& s1 w# p7 k8 G
DWORD dwKind2;# Q3 Z9 n" }) u* d/ r4 [0 }8 D6 t
DWORD dwItemId;
- V% {" k7 Y* u+ B8 O" R% r2 F! i% v9 hBYTE nIndex;
! g, s; u1 `+ d1 D6 f9 a% esItem(){
# l$ Y$ L0 r+ S& T: p+ m dwId = dwKind2 = dwItemId = nIndex = 0;! a; N2 M# p \0 b, e
}5 `* K% r6 f' k; b3 W4 T
bool operator < (const sItem p2)
! \6 | n# ~& ^{+ |6 e5 d- c9 g
if (dwKind2 == p2.dwKind2)) x( d& l# d G& T. d
{
! A+ B v* Z. Z( ^) @ return dwItemId < p2.dwItemId;
8 _ A, G) [/ Q4 J }else{
' z9 e# O* ]$ f0 w+ W: m5 ` return dwKind2 < p2.dwKind2;
# v$ n& _9 A9 C% L }( {' z. d4 j s7 q1 e$ Z9 V8 _
}% K) ^# X3 _4 c7 l
};% r8 j( ]& G( H. ?" X
class CInventorySort" r+ O' g! P5 a
{& P; {: g# l$ R$ }
public:
6 I( h" ?) z2 Z B( BCInventorySort()4 R3 i& B, t- n! o* P- ]* m$ }
{
) x0 ~4 e0 e$ @/ D m_dwPos = 0;
( s" I" B5 \4 Z$ l. g}1 E9 d6 U' H, p8 F
~CInventorySort(){}3 b4 D0 o M H
private:$ V6 y& w, Q$ t' A' {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 M/ D. \, |& u0 M* e. C
DWORD m_dwPos;
# u t2 B/ f7 ]/ lpublic: J5 R/ N- f! b" L; B3 a/ Q+ B8 b
void Add(BYTE nIndex); f4 U K! h+ P3 N
{( a: o; U) p: w8 z3 ^5 G
if (m_dwPos >= MAX_INVENTORY); T& ]+ O0 n2 j% y# U6 P/ v
{: I1 ]2 o0 Q, N3 D. f
return;- t9 X2 C- P$ D
}9 T/ T, _' ?7 q8 A; P' o
m_Item[m_dwPos].nIndex = nIndex;
& {- [# e3 a1 O) \4 q m_Item[m_dwPos].dwId = m_dwPos;& j! s: K, Q& [* Z/ i
m_dwPos++; R8 H# F/ B& t; T1 U4 B9 U/ S2 [
}
% {" m1 d4 f, I' N5 w- X- o4 b, PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' g% [7 P, E7 j7 C0 O: U
{
6 K* t5 ~, x1 @ ]0 K3 @8 v" d4 g for (int i=0;i<MAX_INVENTORY;i++)
. |8 e9 `: t/ O/ O; ?& N {% f E2 ]( Q$ q
if (m_Item.dwId == dwId)
/ I7 e3 `& G7 | {
- h' r$ g2 U4 Y. F& u6 D0 d5 H' C return m_Item.nIndex;2 T. N; {. B9 O2 u2 a E% `
}
. `! B8 w! F% }, i! ` }2 F6 ?" r6 u6 p& p h3 p0 Z
return 255;* B5 p! @1 C6 s" P2 v9 `
}
8 q0 ~. R& L& [( @, @" Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; D9 P4 ^" N% S) w# M0 N6 ^
{7 y. `/ k+ ]; j
BYTE nTmp = 0;/ l$ Y" O( m& g( M O: }9 N
bool bDest = false,bSrc = false;, P+ m* j/ h' f
for (int i=0;i<MAX_INVENTORY;i++)( |" t! r( w4 S) Z$ _- y) Q1 r
{
: T* N3 {, k0 W! z: g if (dwSrcId == m_Item.dwId)& R; m n) F, i/ i8 Q* ?1 p" a' ^
{
0 E- }) c4 m3 ?0 o //id相等 则 改变对应的dest和src; c, i ~$ F) ^! S) }. Q7 {" W* [! T
nTmp = m_Item.nIndex;
5 t. P o* ^& I5 Z" C3 F2 M m_Item.nIndex = dest;
2 ^7 g X* g3 e! L; E }5 ^ ^% H' V& e e
}
6 `/ M: r9 K6 T4 c! N ~ //临时数据保存完毕,交换开始& ]- D3 Z/ B. J. R% |3 a+ f; t
for (int i=0;i<MAX_INVENTORY;i++)5 d! P7 Z2 b2 N2 B* U
{
" [1 w: ?' ^4 W& r+ j if (dest == m_Item.nIndex)/ y9 P) s/ E8 y% n
{) A/ x7 S7 T* y
//id相等 则 改变对应的dest和src4 b7 w+ @$ m) {, Z, l4 k
m_Item.nIndex = nTmp;
& g+ Z1 ^7 g c* c, K) i$ a S9 l }
! ?+ f z2 s9 t' i5 \ }. f0 Y3 d) q: B- a+ I
}
" B1 h% G! b" m# }) E};
/ }( P2 t( Z. _8 R& x-------------------------------------------------------------------------
2 P6 p. v0 `6 }5 H" i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! \3 S5 Y# ]6 f$ W- \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* F' ~& j( D7 I7 f' x7 t( Q2 ]
紧靠其上添加:# N% P, U- ]5 q( M e8 B7 w
if( pWndBase == &m_wndMenu )8 b9 s3 z, N" x
{
- Q+ |$ {& S) v0 T T switch( nID )
4 `: ~4 l5 N. W9 N( ~& X9 ? {$ h; N7 @& v' X& n2 g$ s
case 2:
% s6 @' e$ W0 k, A; H {
$ S# }$ t; N7 r6 }* v% d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 t, X0 t+ Y: h! M; P, O, I4 E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( _% t& z) u) Z' a
{
) s5 ]+ B' c- d4 M+ m F% H break;
' v; ?$ z) B6 s9 S9 [0 x }+ t5 t# U7 K: T4 y7 u- J. L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 w {* M9 T3 I5 a6 s g8 z3 w5 W
{
) c: i4 f# Q6 g, d5 Q) H9 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& x, q6 y* Y) @- l) q3 g& _ if( !pItemElem )
$ A" R Z; Z0 S5 |) v( p continue;0 J1 A8 q* W7 p! m( l+ W% E
if(pItemElem->GetExtra() > 0)) ^) j: ^5 ~* z; ~
continue;5 Z& A0 L0 P1 K j3 t* l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . |" A* @" \( v! N5 ?$ L9 y5 F
continue;6 Z+ ~4 L0 C# O; ~
if( g_pPlayer->IsUsing( pItemElem ) )
! a" l9 f- W' j7 ^; | continue;( o5 o! m6 e7 w1 v1 E
if( pItemElem->IsUndestructable() == TRUE )
& X% j! `6 i6 G1 ?7 S5 S, V$ b {) m1 u$ V- ~* ]
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& F* @3 [/ X0 ?2 W1 q6 W
continue;
4 @( n+ }( w4 o6 {; _* R9 d+ h# ] }; v! L4 |+ c0 k T! V8 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" J( s* E0 _% t! K% C; |4 H, M
}( Q# ]) h( |. T' L, k, u J" C
break;; @* H' ~$ D$ t
}
f* g7 W; F$ T( x! }4 ^ case 1:# L/ t5 R4 e! {5 B4 C
{' Z" C- b2 r* h5 b
//整理背包
6 O6 S0 u: L* }, B% f /////////////////////////////////////////////////////////////////////////// ~' n& E5 h4 B0 w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 E& s+ L; s3 S& H //////////////////////////////////////////////////////////////////////////
# v" |! W3 L A$ g9 F //////////////////////////////////////////////////////////////////////////
' u. N" c4 X% b" _) ^- Q3 a CInventorySort* pInvSort = new CInventorySort;
' t" ?/ y; n$ s vector <sItem> vItem;8 F, n4 o. Y, v3 F' D9 b! Q
vItem.resize(MAX_INVENTORY);//初始化大小7 g3 X2 ]' H8 Q6 T( J( b6 N
//////////////////////////////////////////////////////////////////////////5 s1 _ K( b b5 I; N
//填充数据1 a. i2 `' h4 x5 w. S
for (int i=0;i<MAX_INVENTORY;i++)
2 U V0 ]) q: s* D8 M# v7 @, U {( O$ M9 a l- F6 j# b. E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 v( Q- t8 l4 g$ F3 d/ d if (!pItemElem)8 J9 E, R j; G2 S! j
{
8 w5 C3 K5 m5 i" j @: I vItem.dwKind2 = 0xffffffff;
^1 C/ z2 J* L* ^2 @4 x vItem.dwItemId = 0xffffffff;' @, c. C1 g& G( e
vItem.nIndex = i; f2 d. {1 A& c R* A0 }
}else {
3 ~& L, j, H, s9 S ItemProp* pProp = pItemElem->GetProp();
$ v1 N5 z+ h3 o. E vItem.dwKind2 = pProp->dwItemKind2;3 T2 i6 P. G3 [% u7 n
vItem.dwItemId = pItemElem->m_dwItemId;
, O& H, }, |5 {5 z" {6 O# Y vItem.nIndex = i;
7 X3 e6 [. H" T% e4 f }
7 P7 `) K, Y& `8 o! E/ g2 a0 r; c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# Z5 @; s; F$ y L: s }) H/ e0 a% X5 j& ~
//////////////////////////////////////////////////////////////////////////
; L# a) k7 K1 p q+ [- @) ] sort(vItem.begin(),vItem.end());//排序, C( L7 I. \4 O, @/ G# {! I1 s
//////////////////////////////////////////////////////////////////////////
) ~: i5 r' I6 G0 Y5 C //交换
# Q7 |" H0 |6 e, k for (size_t i=0;i<vItem.size();i++)( L8 a2 ~3 |" V+ U% x5 c
{. V$ O$ R# v# r0 v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ |. C* K1 I. a' r. c
pInvSort->Add(vItem.nIndex);
5 V2 k a& C3 D! T) ~ }$ s0 \* ]5 O2 \! C1 R* }6 h# Y; f
BYTE nDestPos = 0;5 [) ^; C6 d: T) ~# Y. j
for (int i=0;i<MAX_INVENTORY;i++)) V7 k; T7 b/ F' j: r1 ]1 ~
{( \. |( z; ~4 \# v) r0 s" D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 N$ y. f1 V% e1 Q
if (pItemElem)) f# H) ~5 c: S+ X( N+ D
{
4 }5 G: W4 T- y0 A4 ?3 u0 Q if (IsUsingItem(pItemElem))
: `2 q+ j H5 Q0 @, Z3 ?9 _ {) I' X# b1 U9 ?9 |/ p$ J, |
//这个位置无法放
I4 [# N1 k5 D nDestPos++;; V- d# C, j& l% H! @8 E) ?
}
5 ~7 J0 {* W) w1 m5 a" q }5 m2 r& y X! P8 _1 s! q p
BYTE nSrc = pInvSort->GetItemSrc(i);1 m! A% ~2 X: {2 z& a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); o! b: `4 {8 g( `; y c, B! H* t
if (pItemElem): Q* Y9 ? Q5 U) {5 e8 t% u9 g
{
" b8 f$ }8 U. ? if (IsUsingItem(pItemElem))
) q2 h; U2 Q, P; I { F- e; z) s3 B$ x
//这个道具无法移动,跳过
6 _' M: D- v, Q6 W continue;
4 L6 }+ U% S2 d }
$ `: ], V$ t: P! [3 {" l! X* P }else{# r A- K- @( G; h9 X$ A0 s& j
//空位置 不用动% U. I0 |* X3 o6 }' J5 F) W/ C6 T
continue;* C) C( q N4 C: s
}9 v1 Z1 }7 p9 |
//////////////////////////////////////////////////////////////////////////1 V# ^8 O( R2 C5 x
//开始移动, T; s7 i6 X X. x9 D$ {2 D& {) l
if (nSrc == nDestPos)
P( Q2 e$ d5 \( `( Q3 { { f7 _. N+ L- j% n# Z
//原地不动: u; Z- O, ~! [7 \- i1 f
nDestPos++;
$ X! V9 K) {3 o" ?4 V, P0 g continue;2 s6 x( e* Z' }
}
}% n- f z5 e% [+ Q9 z+ k- r8 S pInvSort->MoveItem(i,nDestPos);; i" f4 a1 D0 z7 P( v5 S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 m% U' `# f8 y# y7 ?( A; p8 J+ H Sleep(5);
( W0 a/ m: X# d0 T7 } //Error("移动 - %d->%d",nSrc,nDestPos);
! n' X) x( ^7 Q" s nDestPos++;
r4 ~4 w; u7 ^- V" K }
7 Q7 |- @& L# q8 _) H- f& E //取第一个元素的信息2 Z% J ~: R; ^, q7 i8 Q+ z
/*
- Y* f% b& I4 a; c1 l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 U/ G% e" d _3 q) K
{
A2 x8 o( M% w Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 g6 T8 r C' L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 @5 d; c8 @4 e8 l- Q+ P0 e }5 f) q3 i' a8 M0 X( M2 l7 s
*/
% Z. s' v3 ^5 K7 s //////////////////////////////////////////////////////////////////////////
, t' d8 Y2 V: F3 M break;
) d- C2 t/ L2 D% I! |( | }' H+ B3 w8 B# s/ B N; N
}
. x {0 D% ~8 U' O3 i: v8 s}5 K! j# s% v* o% e+ x
m_wndMenu.SetVisible(FALSE);( I( n* G: ^. O1 r" t' U# r M8 K
1 p" C2 @; v3 G
--------------------------------------------------------------------------------------------------------/ B& q# S S- ]) H7 N2 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 H+ R" J, m8 L" B/ V; v
{
) F% D- p9 u4 f! Q' k/ ABaseMouseCursor();
$ C+ j# Z5 y5 I& b1 @}
# P, Q( U1 B- g# r+ y& g3 Q在其下添加:) |$ r, `: }2 ?, ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- k0 Y6 Q. c" r; T' H* G; z
{8 U6 C3 H) b, D- C, C
m_wndMenu.DeleteAllMenu(); `" Q2 B* q) E0 f: [* [/ _& `
m_wndMenu.CreateMenu(this);
5 m! [5 ?6 ]6 H$ R t/ {7 Z7 Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); U) Q9 S! r4 p! c
& F, S8 ?; P& ~ l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% @. r: _2 p- N" n P{; g, w9 ]9 {+ e
//P以上级别才可以删除所有道具
8 q, e" |1 x# L" v1 t5 |, P7 V m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 t _1 ]% Y4 S: l6 ^- j, j}6 u* l" U! x* a% o: }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& X/ I4 j6 Q! ^. s+ R: d! d, H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 _9 w- g# p/ Z: S1 m6 Om_wndMenu.SetFocus();
: Q$ q' s8 s! s3 d2 L}
t$ d0 L$ P/ ]6 U J------------------------------------------------------------------------------------------------------------
& T8 Z b) I( q2 f( H: I*************************- B- j4 l8 \5 g( Y
WndField.h文件
, B- T; x$ ]4 l, ^: p*************************
% \6 ]) k3 |4 S搜索:BOOL m_bReport;2 j9 V m4 g8 ~: X" l* K: G) s
其后添加:
6 }5 _7 V% o* m# zCWndMenu m_wndMenu;
' {4 I+ o" o( } |. M% }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 Q- Z. _' D. t, i其后添加:: n& k3 I6 g: n/ V
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 | p& F9 S' P" N
) ?; F7 u5 R: X
1 w; C- k. S' v7 x+ \2 d
|
|