|
|
源文件中_Interface文件夹下WndField.cpp文件, ]7 S7 e. q$ R, u, {8 I2 e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 w+ R/ |* ?. f, R5 B3 Y& s% C; R( z8 J' t- \* I$ f8 W
struct sItem# ?6 k& e. y4 @; c$ K6 T+ k0 L4 Y$ U. l# e
{+ }3 \5 B" J" e( `! J4 |3 |: ?
DWORD dwId;* D; U* @* \0 }: y1 }4 t
DWORD dwKind2;0 ?4 R; n9 D7 X
DWORD dwItemId;
0 ~9 x: c$ M8 @( |2 ]; F3 CBYTE nIndex;! I2 { f# ^2 E, `( a3 Z" `# y
sItem(){- m# b7 b" L/ U) e' Y7 c u' q( N- t9 B
dwId = dwKind2 = dwItemId = nIndex = 0;
: C) H0 w6 j+ G S}) K2 e% U& u+ w1 a' Z7 u- A
bool operator < (const sItem p2)
: Y: O$ a0 a" v M8 l{
; v9 s" u, `- u: U+ p4 ^" k D$ K if (dwKind2 == p2.dwKind2)* _$ ~4 m: t" p
{
9 ?+ w9 C: f' \) {( u* f return dwItemId < p2.dwItemId;
1 R9 q. |) Q Q! k1 C }else{$ o2 h2 _, i; p8 \ h l E1 J
return dwKind2 < p2.dwKind2;
% a; |$ c! J) ]7 d9 a+ m+ ] H }
, A& X# L# q# @9 T' W. c}
- r Z. k3 ~' `};1 \' Y# Z/ `. z& _8 K/ D7 [
class CInventorySort, \) W9 L5 ^, ^9 d5 c0 i
{% w/ T, S+ u4 b+ C6 Y4 H
public:9 }2 y4 H2 o Q+ b
CInventorySort()
3 s; R# L& R7 z4 R; P# e! P7 Y- {{
: z0 G( A9 i0 q! D4 y, F# g+ P' N m_dwPos = 0;
% }& ?9 b1 l. r, I8 X}
* r. _' j4 {& w2 E7 X- B. G# ^, U~CInventorySort(){}+ T9 [+ Y7 U9 d8 \8 `- n& r
private:6 f# W; l, I! Y1 e. y; ~, D# o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ p6 ?3 D& i/ E) E8 ]: P& G3 C! g6 L, d
DWORD m_dwPos;
! s: A7 s3 Z% npublic:
6 C+ z/ _( O! V" W4 f& F9 @void Add(BYTE nIndex)
( Z1 Q4 n3 F" N6 d8 h3 O" I" E{% V# q+ k! P& s/ F7 @& }, i
if (m_dwPos >= MAX_INVENTORY)- w2 J0 A: m( C) t7 x7 K
{$ }) T3 R7 }5 a; r! E: u* D
return;+ j; Z/ Z! {# _+ n8 E9 L/ e
}: X2 \% c- N! z
m_Item[m_dwPos].nIndex = nIndex;
5 Z0 C' s4 X& Z6 e m_Item[m_dwPos].dwId = m_dwPos;& a3 B1 N8 x" |8 F8 A' B4 y! c: r
m_dwPos++;
4 s1 J `" s0 @! K}
1 r, s# q/ f1 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# q9 X: A: ~0 P! b& S{
: c( w# O7 ^, M4 A( o }, g for (int i=0;i<MAX_INVENTORY;i++)( P; ?# }+ j9 _- I, [
{
5 N5 V7 B7 e3 E; ~9 J/ \' H$ V if (m_Item.dwId == dwId)
( V9 N0 H( i0 h/ s1 Z {7 W! D1 G, V7 p) O# x+ K* [
return m_Item.nIndex;
; W1 W- t1 C7 H. U# L0 p& r }
- g0 L, x0 a, \6 \8 @- }) n, E3 O) ? }% N( N7 E, C* c, x* c* ]9 G
return 255;
9 l& x# S) q f4 t Y3 ~}" b5 a1 {1 |1 ?8 x, G& |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 X: j! G6 M: V
{
3 ?# n; s- p3 t# E/ I5 J" r Y BYTE nTmp = 0;& ~" a( q* s' c6 V. `/ j* D- t
bool bDest = false,bSrc = false;. d) [$ V: N- l( I
for (int i=0;i<MAX_INVENTORY;i++)
2 n$ [; y/ w/ l- n; u p3 I {
( d7 w: D' W A+ t- ^ if (dwSrcId == m_Item.dwId)
, @* ^, g; a R8 r- c {- [3 T2 B9 O; h3 R* v& B
//id相等 则 改变对应的dest和src
) d3 L4 _5 S M) V; l; l, e: f8 z7 \ nTmp = m_Item.nIndex;6 u9 H" r9 E; ]9 M9 V. ~2 |+ h( C
m_Item.nIndex = dest;
& o1 h8 n" d' T- r4 r }6 y5 D- v' p- X* l: x
}. H* P/ G# e+ @3 K- P+ r( U5 R
//临时数据保存完毕,交换开始
' L3 U. W! N+ v6 i for (int i=0;i<MAX_INVENTORY;i++)
d g9 |4 e, _" A {6 p) A; C$ f0 k! o
if (dest == m_Item.nIndex)4 Q+ v# j( Y' n- k
{6 L: o7 f9 l8 {4 I/ }
//id相等 则 改变对应的dest和src
& B5 h v* E1 j# a2 K* ? m_Item.nIndex = nTmp;
% ]5 S! h+ S, j. ^ }
' p& _) d8 m8 R5 m5 R }
. _' l6 ]! ]9 G$ s6 r) A}
+ z: Z4 I+ a( Q% W8 w/ c2 A};
( B+ Z: {$ e8 n: `% K+ ?% f p-------------------------------------------------------------------------- y: ^8 w% \ ?6 U X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 h3 C& C! i6 a" I, ^* K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: {& B+ _2 F( D( J
紧靠其上添加:$ g7 o* y0 `# {/ G7 L0 e
if( pWndBase == &m_wndMenu )
% b5 O0 \' F5 [5 C H5 l{
7 q5 |; r/ L" o: l+ D: I4 t switch( nID )+ K! t: y8 x- B! J1 c2 `6 l
{9 K" M. B& b. }, E! s: }
case 2:
3 p1 V6 Z; m) F- o* a1 q {4 ?! x) ?- N6 W' j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 f, x' f3 |3 R+ [- z; D* F- ~3 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- K8 q- z0 v# H! I1 f' N
{( j( _* G$ N' r! L4 g7 O
break;1 {4 i0 M4 K- ^: Y* O( t5 D
}
" T* \: _# y6 ~+ U. n1 O% c/ {/ Y7 w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, C9 w6 g; h9 l. t {! a- q$ C9 `0 `6 I, k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. G8 r0 n M3 H6 c! r% ?4 {% i$ @
if( !pItemElem )
: b0 q+ v5 R, A continue;
- S& u2 ^6 m2 E) }+ r# f. V if(pItemElem->GetExtra() > 0)0 n1 W1 u6 \9 |8 X3 C9 J
continue;/ W) k9 ?# \. Q$ n B. i1 Q' M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 h1 [# ~- Y- V: H& i0 z$ ^+ L continue;
: X0 r9 B. p9 J9 s' E" B2 S if( g_pPlayer->IsUsing( pItemElem ) ) C# t! T# ?4 m6 P( [& {; L
continue; ? q7 c. y$ h! O) C
if( pItemElem->IsUndestructable() == TRUE )
1 D6 p E4 D+ O# r: W/ i {4 b( W' X+ s; z. O9 _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 U2 ^4 }) x# m+ o7 [3 h9 w
continue;
" [# f, D1 ?( l: ?& } } n5 A7 ~- a- D3 G& ]9 b& ~( i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- y, J% l# q+ y) K }
! O- z3 ~2 J- I break;
5 f) M, J }+ R& t% } }
3 h! S$ R1 m2 b: C/ l case 1:- l! M$ p8 C: t/ H9 J5 d! b, _% R
{
4 c8 ~8 ~$ A3 E+ S& b4 y8 T0 t6 I //整理背包
2 G( W n2 D# s, L //////////////////////////////////////////////////////////////////////////! t5 {5 {/ q* a: H$ C6 o( d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 n1 A% s, v& h3 I! @% \0 u0 f
/////////////////////////////////////////////////////////////////////////// {% `2 l9 ~+ H1 U0 }# ^+ }
//////////////////////////////////////////////////////////////////////////; e+ i' K1 |# F0 ^9 U
CInventorySort* pInvSort = new CInventorySort;, X- H/ N! \5 m1 [
vector <sItem> vItem;
% G! X7 z5 C1 d vItem.resize(MAX_INVENTORY);//初始化大小
9 E+ F2 i7 H) {- ^3 H* o //////////////////////////////////////////////////////////////////////////
" j/ O8 A$ r: D //填充数据
: `; U2 ~2 r8 f$ t for (int i=0;i<MAX_INVENTORY;i++)4 |6 z! J8 @, o$ O: I
{) W& k1 A+ V( @0 k) u+ t; p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. [% a3 H- M) L: E if (!pItemElem)
/ j0 L, X$ |' }6 t {, m; |% n) j ?) s e2 y+ M
vItem.dwKind2 = 0xffffffff;
; w8 g7 Q$ Y# w! o vItem.dwItemId = 0xffffffff;4 W' b, J8 ^1 ]$ v
vItem.nIndex = i;
8 r. w+ ^! b4 p' C }else {; h& G3 j( u0 }) |9 h2 _5 e, H) { [
ItemProp* pProp = pItemElem->GetProp();/ Y, t/ [* m0 B! z
vItem.dwKind2 = pProp->dwItemKind2;# e8 h. Y% Z$ n( |$ s
vItem.dwItemId = pItemElem->m_dwItemId;
7 r- p* @0 T& R) I0 j& q9 G vItem.nIndex = i;
# P6 U: _2 r- I( }( s }
! X9 p3 `+ {+ r9 V //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) R$ R( S+ s4 n M: ?2 w }5 _5 a n' Z% s, F1 {
//////////////////////////////////////////////////////////////////////////
1 I$ V' a* L* w# n: {; C sort(vItem.begin(),vItem.end());//排序
* q" w6 m) r: E3 K1 Y //////////////////////////////////////////////////////////////////////////
7 ?4 s& m" m& r6 T# K1 V //交换
7 R# O) P# I2 X# F _4 I) l for (size_t i=0;i<vItem.size();i++)- r9 D# i+ J" P3 r
{
; v9 E* g9 c6 h+ C; W5 n0 o( H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 ?$ \& G3 V$ L, |+ j0 P( s0 ?2 X
pInvSort->Add(vItem.nIndex);
8 j5 {* P6 ?0 ?$ U" J }5 Q: L1 K5 W \
BYTE nDestPos = 0;
$ O8 M3 I+ K, \8 W$ j2 g for (int i=0;i<MAX_INVENTORY;i++)9 h: a: X i y; B
{4 H9 r) w4 e) J+ ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ h0 `9 Z* a. t Z& ]( ~' B if (pItemElem)" G/ [) ^6 B1 r3 x
{
" E8 [" \( G) _0 H1 } if (IsUsingItem(pItemElem))
; S, j7 m, b2 T, w. |+ R8 h {' F A+ [7 L1 B8 d
//这个位置无法放 A" b2 j5 G+ j0 r" B
nDestPos++;
/ r) w; n% C- A0 I }
0 I M; t4 L; v. ^% c: t }; b/ e0 M. l: W# Y. A3 A$ R
BYTE nSrc = pInvSort->GetItemSrc(i);
( S' A2 u# O# P; A" D* ^" ~: X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 \) g, g7 W4 u( o) I
if (pItemElem)5 G) j6 L5 p* q$ C
{
1 z- _" w! j" I5 W7 ]. P6 n4 F# Q if (IsUsingItem(pItemElem))% a h, e$ s1 y9 d/ h3 [
{
2 q: F& N& t$ I2 q' E* B' [ //这个道具无法移动,跳过
, c( D# j5 }7 I2 d continue;& m. g; F; w0 W! Z R8 B. ^) Q3 ]
}
3 O/ m4 E* p# d }else{6 m- u- L+ J( e. U. q' ?; {
//空位置 不用动 J- F: I5 d+ p
continue;7 _( s- L& d4 g( I
}
4 S2 g' m1 ^% O6 y4 j0 T# w' a //////////////////////////////////////////////////////////////////////////
0 o( G8 i4 `* P //开始移动 z2 H$ M Y# L6 M
if (nSrc == nDestPos)' j( g4 s1 B, _7 E
{
" A% z! U6 E9 @/ }) } //原地不动. O- g3 I" v) t6 n
nDestPos++;
. t1 A0 P* V) G. D6 ]/ u; o continue; a [! [5 N+ D! |
}
6 I7 [) V# r& J3 J2 j" y4 R" P pInvSort->MoveItem(i,nDestPos);1 A' Z) ~* r6 h2 v- `! p* e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( ?1 o: l* L5 S5 K* S Sleep(5);/ u* O. p7 J9 y4 m# ?: e3 D% t
//Error("移动 - %d->%d",nSrc,nDestPos);' ^3 D3 n/ m# a- t; b3 \& H6 U9 F7 M
nDestPos++;
4 T4 L7 {9 b2 Z) o* I2 Z }
9 b" e v' Z# W1 j1 p //取第一个元素的信息. b7 e: @, Z9 ^: }; K- M: |5 Y
/*+ [, B2 Y; D+ D/ m6 Q# E( D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ V) s- b; N) X8 k- P$ q% ^& X {
* O2 q& }7 q& ]5 R7 H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. x: S* u( p2 M# m# T- }2 { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- S" x6 Q4 P: J9 C! e( v }
% |. T2 W& u% ~' c6 S$ d */
C0 T g: C3 A& T+ j H6 x //////////////////////////////////////////////////////////////////////////
+ B' p: Q: E% A break;4 X' x. d0 q9 k% z# O. \
}
2 `1 k! W, u4 T+ b1 p4 {/ p } ( _- P# G7 ]6 T& Z/ I6 z
}
$ N! i3 t2 J+ I. ym_wndMenu.SetVisible(FALSE);. U: T7 _4 a2 o+ }6 b; `: B3 _
% H5 B7 F8 d- D8 \# I. r9 `-------------------------------------------------------------------------------------------------------- y6 E6 R, q8 t7 p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 [* `& T1 U8 N( @{
' V# Z3 D# Q; [; @: m5 u+ nBaseMouseCursor();
1 u8 I& Z% p! d9 h}7 k+ l4 P' e; t* I( @
在其下添加:6 [% l* a; W: ]& W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" `/ H r: F' b+ W8 V# U
{/ g' w1 ?2 a, D* i& d- z
m_wndMenu.DeleteAllMenu();
w) G- e* `( R7 k5 g+ n, cm_wndMenu.CreateMenu(this);2 q$ _# `5 c5 g1 n1 L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 a$ O* }( z" C
: k: `- E6 d4 Z1 B! Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 D- y# t! F1 @$ z: f{' t+ |; W4 [, Z2 n4 g) m" k* L5 i
//P以上级别才可以删除所有道具8 V' y1 E( n5 W/ ]# k8 i: a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- @5 E; `- @, m5 d}
/ ?" T: i) Y5 _. t) C: o4 qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); d" o, W! ?5 n) H" o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ i# V2 c- Y+ X+ d7 @' N0 A
m_wndMenu.SetFocus();
5 K, U8 D* r& k3 q' m7 C}
, d$ ^+ f, Z7 L7 h; O------------------------------------------------------------------------------------------------------------6 v# {/ Z2 F7 e5 @
*************************$ a4 x7 f- k$ e- d' ~, D" z
WndField.h文件
+ D' ^% @+ p$ C2 o I& B. J9 N1 W*************************0 U1 ^# f; R i
搜索:BOOL m_bReport;( w' @3 M5 ` S' F9 R, J1 }
其后添加:
$ j% m n% w; E x7 k. N1 dCWndMenu m_wndMenu;3 X4 y; _! N% ^4 F0 o+ \! g
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 e' d$ b; h; K# x4 X7 c* Q其后添加:- I7 [% i+ y1 B- p0 Y5 u& L
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: R4 `9 T, L, [8 |& P- z9 {+ j5 }, |) S. \& F& v
" n% s" d8 z9 W' Y" V$ _6 ] |
|