|
|
源文件中_Interface文件夹下WndField.cpp文件
" Z; Y3 a4 G0 N- a- R# u: ~. e% q% K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ w4 N) m' z; ~& M8 _7 Q
4 _; _- W) ~# |struct sItem$ b" }( {3 ]. ]! l+ I* @
{
2 |9 X1 [+ S. O4 }DWORD dwId;3 @% v* i4 C% c3 m7 l2 H
DWORD dwKind2;2 A3 ^: P( W: I% W% A& `& g0 w
DWORD dwItemId;
3 g: B! r4 g& G; j* UBYTE nIndex;
2 _$ T+ {7 c' x* x+ S# KsItem(){- h8 X& h- s; ?$ @1 n3 O
dwId = dwKind2 = dwItemId = nIndex = 0;9 W) w, k5 r( u3 @! ]
}1 X g; k0 [/ W( ^0 E; ^
bool operator < (const sItem p2)
2 @2 i$ W% P l! x4 U{; P' H! e' i0 V8 Q6 k3 b' m. k$ T
if (dwKind2 == p2.dwKind2)
. ~' L% E2 g7 ] {) L3 E' U& W/ F( r/ |
return dwItemId < p2.dwItemId;
, n, W( N, a& h A( W9 d' e( E }else{5 @" |4 W9 b1 Q2 {# |- F. x3 i- ?
return dwKind2 < p2.dwKind2;
" H: S/ \& A) O }' W$ |$ ]8 V( u( K9 y% m' G
}( h8 G0 X& w2 @
};
8 b/ G' Z5 M+ I& }! h3 eclass CInventorySort
/ z1 D# `4 w i: | s0 [0 o{. h. A# `9 n+ B% o
public:) ]( Z7 [% k3 h4 T* u+ p" h6 r0 |
CInventorySort()
5 \7 X. \9 s( J, v, O5 Q1 v$ U{
; F" x& Z4 _% g, l8 D. u! G2 F/ o& E m_dwPos = 0;0 C$ n1 ]7 q9 `" @* k. [" c) e
}
; x" y+ M0 D: W~CInventorySort(){}
# l) N$ k! {. ~% a+ Cprivate:
. v+ ~ ]! |+ e x) i- A7 H% ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 @% z) j2 G' ~# k
DWORD m_dwPos;6 B1 h! @$ h+ t2 }: ~0 ]5 {
public:. s7 L. x0 h* U& U
void Add(BYTE nIndex)5 n! |% a4 o9 ?! V
{- A/ ?- W7 y) y, L( I# [. ?( @
if (m_dwPos >= MAX_INVENTORY)
, |/ k8 O# c$ V) p {
* F Z0 ]( S1 I5 h" A return;# p) [' M) Q- `' L7 `
}+ I% K0 D; D5 M
m_Item[m_dwPos].nIndex = nIndex;
! J; {* m u; z m_Item[m_dwPos].dwId = m_dwPos;
5 f# ~ Q3 e! z3 [ m_dwPos++;1 `! }# u" S8 D# E3 i0 |9 y3 W
}
) U$ U# w; C( Q, Q7 ^3 e* n: XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 c: N; G9 L5 h8 [( i& w$ a( I
{+ g4 N5 k6 B; x" t1 @+ ~
for (int i=0;i<MAX_INVENTORY;i++)! A- v6 D' z/ Y r: F# q
{* V% e7 Y" V- m4 |+ V
if (m_Item.dwId == dwId)& n( _) ~- Z' V, q
{
% `" z1 m0 c) P+ t( Y, n: m return m_Item.nIndex;
) R+ h) A, J! k0 P, T2 o6 k% Q1 K }" B4 `/ g- v, N$ f' ?; u. L9 K% a
}" \+ P; a: m- w, v }( k* P3 U
return 255;% V2 r0 y# [" A8 p+ w$ E/ s
}
4 l3 `% V( r2 w1 U t# M9 }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. P( H1 o! F. w# a{
7 w' s' j' B6 r1 R BYTE nTmp = 0;3 e& ~& a- D9 I8 V. t4 j* @ i, J
bool bDest = false,bSrc = false;( m' R! R/ p, L7 f6 v8 A, T
for (int i=0;i<MAX_INVENTORY;i++)
. {( q% w; @8 Y; e; i; A {! R6 ?4 e% e. c# L4 f
if (dwSrcId == m_Item.dwId)
6 V) r G: N! H) V% z# d {+ s1 Y" I7 |( J
//id相等 则 改变对应的dest和src
6 L8 h% O( Q3 `; s$ i8 @3 g4 E nTmp = m_Item.nIndex;
6 N w$ @/ `+ t; @" D) V6 i( q m_Item.nIndex = dest;5 R7 w+ R7 W- Z! y# Y
}& I0 W! D1 T( \1 U4 K* }! q' _( S
}
4 I* |8 j6 q3 M S& c" B& W //临时数据保存完毕,交换开始
+ Q9 V& f1 J4 a( T/ J* w8 e8 A8 X for (int i=0;i<MAX_INVENTORY;i++)
7 H5 B" n0 p1 C2 O! Y9 b {* L. s) j, y5 V! [: l0 c
if (dest == m_Item.nIndex)
: ]- x1 P. j- |- f& |" y7 }) d {
. g- Q0 C+ W4 V( R8 ^1 _1 R8 n: a, r9 S //id相等 则 改变对应的dest和src% W6 M' S3 O! S( S" B% H# F
m_Item.nIndex = nTmp;
3 f: F3 u2 }: |9 p }! Q' X2 `6 i' m& u- k4 B
}5 `9 }1 \( u( W, w) T
}; N" L$ {& |: z: T
};
* s- [4 \9 M- A5 p( O! \0 W! q-------------------------------------------------------------------------8 k/ `0 j7 g4 B* o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ |4 l9 v8 b9 {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); B2 D) C; C( v x L E
紧靠其上添加:, A/ |3 `' |& z$ k: T0 O* s$ s1 z y
if( pWndBase == &m_wndMenu )9 W C$ }! I: ? a& N7 M
{
! R5 m b5 ^' s; a+ a( |5 z5 X' O X w switch( nID )" V5 {2 C T& \( D& {
{" E9 A, q: a! Y2 V
case 2:
8 H& _+ r& }+ W5 T {9 H& H; }4 g8 } ?& B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, ^8 w4 q# L- t: H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); Z" f* c! ]1 M- A) X S) O
{0 d( \) A+ D }( b" d- ^' G
break;
# j: F& b2 w& ?! M }& ^( Q" O2 z6 R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, H5 H7 g, L) @8 ^: E$ ^ {
% G& B9 v( U. W5 ]4 c* X0 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& L4 A& h- |) Q if( !pItemElem )7 O, O5 o4 L% f7 J/ [* ]
continue;" z5 Q8 G. R4 T1 Y/ f! ]+ m
if(pItemElem->GetExtra() > 0)
6 J3 r) c$ R# C continue;
7 m4 |1 O6 m1 N/ f/ h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - C6 Z o$ u% B6 X/ d/ b1 Z' H
continue;; Q7 }/ A. g2 t8 j% L q
if( g_pPlayer->IsUsing( pItemElem ) )
. ^& A* w6 P8 p. y% e1 F continue;
8 L9 M9 L+ C$ w, ^# @9 b if( pItemElem->IsUndestructable() == TRUE ); |7 W* ?. y) J# V+ l: c; ?' T
{
" }9 r1 ~; x" P# _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 s( Z9 s; r l continue;
$ S9 n7 o+ Z5 }! o8 `9 T }' e, W: Z' Q/ d& P: I1 k
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); M! Z# P+ J7 w- l
}
& L3 _- o1 P+ v7 k6 {! M! c7 e break;6 H1 e, z/ {9 A7 A' F
}; W( h/ b; o6 ]9 l$ T" E8 d# |
case 1:
$ d8 {; M7 ]* j. n {
/ O$ F( b6 ]0 h' z //整理背包. W# [2 V/ j) q& A
//////////////////////////////////////////////////////////////////////////$ v c4 a) s& t3 t7 ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! ^5 J# s* t' g( S) L //////////////////////////////////////////////////////////////////////////
8 i2 u% F: X3 o- m! R, f, N //////////////////////////////////////////////////////////////////////////" P0 `5 [' S1 V7 r+ K& N+ Y
CInventorySort* pInvSort = new CInventorySort;0 ^! s7 A6 L2 ]9 B
vector <sItem> vItem;* t! h0 U( Q8 q H' v/ o1 @/ p
vItem.resize(MAX_INVENTORY);//初始化大小
8 {7 a) {) B) ^4 H //////////////////////////////////////////////////////////////////////////
) O! L/ u# a! U9 U+ m //填充数据0 x1 ~ ^7 _& f G
for (int i=0;i<MAX_INVENTORY;i++)
{: I K2 \ H6 ^$ d {2 L0 B7 e* V' B" E, z$ Z% }% ]" |! Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% ?) ?" f# N( N* Y E9 I" A3 G if (!pItemElem)3 G& t. b" s0 b/ m
{7 G" M, B1 o# M/ @6 J$ r$ a
vItem.dwKind2 = 0xffffffff;3 A4 Y! G N+ E$ @& V2 s( y j
vItem.dwItemId = 0xffffffff;: B: j/ ~' P$ W' Z$ f/ f: G, p
vItem.nIndex = i;% | i2 f( }( F. n
}else {
/ E9 p* Z$ s0 F6 ?5 f8 {! r ItemProp* pProp = pItemElem->GetProp();& C# k& {, y* x6 g0 T
vItem.dwKind2 = pProp->dwItemKind2;, q Z, X; q8 C3 L
vItem.dwItemId = pItemElem->m_dwItemId;
$ [( J; l" Z; u3 h6 \2 j% k vItem.nIndex = i;
" |9 J$ W. w/ @* g }' R$ J' A" P Y2 G) U6 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! d3 I8 B8 a. J }
' g# T, Q, k( Z. {; U //////////////////////////////////////////////////////////////////////////
0 n6 ?% [" m6 [- v" b3 n% Z sort(vItem.begin(),vItem.end());//排序" e b! x/ [/ b
//////////////////////////////////////////////////////////////////////////" \7 X2 s% K' |9 \, Q: R, r
//交换
; S. D" Q8 l4 s- m, h for (size_t i=0;i<vItem.size();i++)# O# t' p9 _6 U2 l& N/ \& w
{3 M; f* H( V$ M9 _/ D( U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 d* S# {& _7 p. Z9 g% b5 W& J K6 r pInvSort->Add(vItem.nIndex);
6 G& M$ U$ @, C6 r% } }' ?- u6 i$ k( D# u% E7 r3 F, t8 D
BYTE nDestPos = 0;" [- b9 R# X8 b8 r% I
for (int i=0;i<MAX_INVENTORY;i++)
+ X& D4 w) J; a6 D {# h5 x8 ^ E, K6 ?; N$ w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 q4 _- F) U$ e: i% k if (pItemElem)) Q$ { I' U( r1 ^ e0 ? V" p
{
' A6 y r( b3 n2 y3 g+ N if (IsUsingItem(pItemElem))
" K+ W( h; s# s+ T- I5 R P; S8 N {
6 b! N3 ^% u" ~# j //这个位置无法放
H s, ~5 B4 ]! Q6 b7 c nDestPos++;9 r% z6 F- f+ f; y4 Y% v
}- B) p G2 E6 c7 h) O+ [
}
9 u& A. ^' `1 k' N+ k BYTE nSrc = pInvSort->GetItemSrc(i);
% Y- d1 I) [* d4 g; y( d# e pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- M3 h, s- {$ P' d$ ]2 Z' @ if (pItemElem) C4 W) h& p8 O! K- D* F: J5 @7 H
{/ z ~4 P' [$ M/ G1 S9 m0 r
if (IsUsingItem(pItemElem))9 z `$ y- \, y. l5 f
{! O/ j( k" K8 L* G$ ~
//这个道具无法移动,跳过7 U' h( G: b; e- C: w" s
continue;
2 K' w8 G4 D. h& g \8 K9 ^: ^3 K }9 K5 j- N7 J/ a, f$ d
}else{6 o2 v2 h/ u8 E* z7 \
//空位置 不用动7 B E* }$ a$ U" C$ F1 F0 L
continue;* g2 l) C% n. q I N+ O1 ~) E
}3 G. |( q: h1 R# b1 J
//////////////////////////////////////////////////////////////////////////- p4 h" q/ d. D1 X2 @) j/ Q
//开始移动
1 s: H4 |; b5 g' d0 |+ i if (nSrc == nDestPos)* h, e/ U* y0 n- Q' D5 M H
{8 L6 y6 I5 C, } V4 ?; I4 j
//原地不动0 J4 K+ H- c5 h! j C7 f
nDestPos++;* D1 L- ]" Q) v3 y# ]7 @ Q" {+ L
continue;
: j$ S2 k5 o+ p4 Q }
2 E/ W6 J/ g/ c, {+ G pInvSort->MoveItem(i,nDestPos);$ i- o* \; X% n7 ~5 ~1 N9 a2 z h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& p- Y8 D& F7 Y Sleep(5);
0 h/ {' B8 v4 i/ Y //Error("移动 - %d->%d",nSrc,nDestPos);! L7 h2 @" R4 \, V( ^
nDestPos++;7 X+ _& @4 x% I, H0 U. m: D
}
. `! V+ Q. B0 h //取第一个元素的信息
r$ a% M. o$ Z, R+ l /* p0 [7 A6 R( `! J5 f# K
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" ]$ f+ U [+ T' X {( C, H8 ?4 A" c8 u4 D- O
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 Q: f- Z5 C/ ~8 c* g( U% c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( z. P' j$ ^* o
}
5 H: H# U X: I" b5 t */
5 r8 F0 o, D4 M- C //////////////////////////////////////////////////////////////////////////
$ Z( p Q, J) ] break;7 v% s- i0 ~$ |# k: q6 ?
}5 j1 E0 C: w+ Y
} ' I7 M: a+ B8 a) w
}* ^% z3 G$ a: u' |1 h# ~4 G& X& N L7 m3 v
m_wndMenu.SetVisible(FALSE);
! q! q, e% Q& E0 S( g
5 e5 ~$ X4 R: S--------------------------------------------------------------------------------------------------------# A: |8 B# n1 ?9 C; ~5 @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 _2 r& H" U U, F4 r- ]
{. {7 f1 z9 X& k2 U: L' C
BaseMouseCursor();7 g" T; o$ M7 J9 s5 x e, Q
}. h, C" E4 L" f
在其下添加:
$ s! c R/ U' z4 a- xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! ?5 r. O8 b, F2 C l5 c7 q# c{
) n+ E. N) V! {* A5 p, Vm_wndMenu.DeleteAllMenu();$ L( D3 ? @* p) `8 ?/ I
m_wndMenu.CreateMenu(this);6 h- h! r- \% |0 D9 i$ c' X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) U' O; t3 I. G' A' {7 c
1 ?( v/ C9 s9 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 z' F5 V0 `$ n2 H. Z3 w( H) ~{
. y- p" [" `0 K$ w# a$ x3 l //P以上级别才可以删除所有道具2 ]7 f! k: o0 r' D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& }2 T. D8 T! p$ r' k; Z" v
}- [/ G/ @/ m/ X) _5 a; H2 n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 |) ?: v3 t; j( L& ^0 a3 Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ d* K" ~" O. G p# u7 _m_wndMenu.SetFocus();
! x, y3 r( o# ^5 p) ]' [; o}
- n' c8 b1 i8 a& t I& y------------------------------------------------------------------------------------------------------------
1 G9 T0 j R$ ~( h% l*************************
$ m+ j2 S" ]/ c. b/ NWndField.h文件! e3 y# u- u2 {8 E& l3 j* J9 X- }0 Z' T$ e
*************************( L% p7 s$ [3 E; z/ Q" I n0 T
搜索:BOOL m_bReport;, a: Z! n8 W5 d
其后添加:, K# P2 W. I) S1 S# c" q1 F
CWndMenu m_wndMenu;
% }0 r" o E) H( o: [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# @# s# X2 p8 t0 T其后添加:
$ ?' p' D! y1 W# A: j8 Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);' d9 W! a) P ]9 d- b- |3 i
2 G; x2 {5 P8 m$ ]7 B& g. O& L
2 n- r( G$ c" F% _8 ~
|
|