|
|
源文件中_Interface文件夹下WndField.cpp文件 d1 u( @$ J! u! f* j+ O
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ b- }" d7 ?( k; p* F
6 C# x- f; Y9 Z) D( S' B
struct sItem
s- D( y- f6 A ]6 M! Z{
+ H. g/ b# t/ uDWORD dwId;
- S; L. t2 h" m' t. J7 f# [DWORD dwKind2;
( Y$ P% S- T' p9 [+ Y* a H) HDWORD dwItemId;5 j) Z( o( I; C0 R A I
BYTE nIndex;9 H. B& M5 o/ |3 x
sItem(){
" b$ s" L9 T* S: I5 T, B* G dwId = dwKind2 = dwItemId = nIndex = 0;% p9 \2 g: O$ F, ?& _# w
}
: N; ? Z4 v2 cbool operator < (const sItem p2)
0 H" C* K7 x: e; i4 L5 Y{6 B( o4 c% h2 X
if (dwKind2 == p2.dwKind2)0 h$ ~% ]9 i0 @4 `& z7 \% W
{% D: s) i8 Z( G
return dwItemId < p2.dwItemId;
+ {3 V7 S0 c: ]. {: K }else{
: C& D8 z9 e3 U return dwKind2 < p2.dwKind2;; Y/ h, }" P3 d! j3 R
}% Q1 n* q+ X- ~( A" i
}
; u$ }! b. @+ q3 j* l" f};
O2 x7 Z9 [3 xclass CInventorySort
" G& k% L$ v! K2 D9 S{7 o+ |8 X0 J0 v% ]* V- c
public:
7 w0 k" l; A5 c- _! CCInventorySort()$ u+ l1 K& p' n, G' F) r
{% Z, ^5 u, L' L y
m_dwPos = 0;
$ l4 c% Y* F8 ?7 d, p3 E}: |1 E! C4 E, k! e- |. m
~CInventorySort(){}
: M' v/ z' V. ]private:
! S4 L2 U& \! v. n) I( [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ P7 C+ |& o6 o b6 I, V4 a3 R( ~* jDWORD m_dwPos;; I! T1 _+ x% f9 j7 `& B
public:; ?3 _% l/ u8 X. B3 t5 P
void Add(BYTE nIndex)% |! Y8 O0 I, }+ g4 @, V( ~& n
{; o' A/ o1 U. t: H- {0 R$ ?) l
if (m_dwPos >= MAX_INVENTORY)! j4 m! Y n1 R; E% d
{
+ u$ M! U8 B5 o( T- [ return;
f1 J3 l7 a; U N2 A( r }
# T4 C0 S8 I$ H8 |) B m_Item[m_dwPos].nIndex = nIndex;( H( D: _: V1 T& I
m_Item[m_dwPos].dwId = m_dwPos;% B, t, O# ~ ?. S: F
m_dwPos++;6 W+ ^) E' E5 v! ]7 Q
}
/ k, l1 I+ U( t* }# v9 ^- SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( ]6 s5 [0 n' s3 U! k- W D/ O
{
0 n+ n! H/ m) s5 r for (int i=0;i<MAX_INVENTORY;i++)
3 @8 t( A: u+ u$ y3 Y1 f& c {
( J5 r. x! W, b if (m_Item.dwId == dwId)
( [7 t* h, G1 E" Q. G7 P, d {
, b! u' ?8 z: u+ J* U return m_Item.nIndex;+ \% A& A" ~3 \& S
}
/ q! g8 k% v9 @ E8 b2 ] }" U L$ N% F3 A8 o! h
return 255;
+ w' N! y C) |. c" V3 E/ r}
# Z, n$ E/ [6 ~' u' vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 b% I1 N+ }8 W. r3 L' n4 S2 R/ k- L{
8 F% R5 x, _. Q. `% v/ p) R BYTE nTmp = 0;
. d# E! @4 U4 V2 w" ] bool bDest = false,bSrc = false;
& c# H+ {/ K( E+ R# T7 s for (int i=0;i<MAX_INVENTORY;i++)- z0 ~% V; D" p ~* K0 u
{
% ~+ `/ y! p" G* i; v5 s if (dwSrcId == m_Item.dwId)' A9 F2 u9 d( z2 l- R% N
{: B9 ~+ [* R# l3 e8 U7 |7 Z
//id相等 则 改变对应的dest和src
$ _$ _+ Z6 `/ X" { nTmp = m_Item.nIndex;& ?* `1 L* C$ m/ V9 j$ L
m_Item.nIndex = dest;
# i# v& z+ q5 S* a1 h" f }
2 F0 H% G/ I2 a }; { }
6 P: V& q) A" [1 Q I //临时数据保存完毕,交换开始
8 H3 _7 b6 d& T- W* ^; j% o for (int i=0;i<MAX_INVENTORY;i++)
3 x/ `# {3 i9 x( n* b& r ]/ S {' l% ]- Y, k9 `$ P: W
if (dest == m_Item.nIndex)% p( U/ G( d- H2 @0 y3 i V
{. m4 F/ P3 S0 u
//id相等 则 改变对应的dest和src# i: a$ Z( t. ^8 L* K
m_Item.nIndex = nTmp;! y& k3 W9 _" _* ?( d5 f
}8 M% R( o1 c6 k$ z/ g" w
}2 v1 s+ U( c ]* n
}" R( y# Y8 }$ G8 X
};
8 p! C' _- [# z-------------------------------------------------------------------------
3 i+ E/ c9 ^+ @: P. V$ F- L' W1 d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 b* R( O/ m9 \+ ] d
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
D$ P8 D9 ~. T( H紧靠其上添加:& a6 T! {: e# C6 l' b, O5 j) [
if( pWndBase == &m_wndMenu )
@- r' B7 U5 i5 ~$ X. x{; G4 I! `! c) ~& j. B
switch( nID )
; q! m5 F! T0 l7 ~3 K E {0 c5 z/ A( f E! o- ?, P
case 2:
8 c& B% i/ ~: v) o% j$ q* P {
: l) i4 c( D* g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 j0 ]* h% I% o9 ]3 \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" }/ n% [2 ?; h( L. d7 X- j { W, E! k/ @, V" A' M/ x
break;
3 G7 m& z/ M' Z* ^) R0 m }
' B. e5 Y7 P/ v0 l3 M7 p/ U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! {6 Y* e; B2 O) @& c {
5 [0 s: ]9 r, f3 w/ g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& Z2 B2 k: }2 L! f$ l% @6 M# h
if( !pItemElem )
* r) }7 |8 b0 G7 U h' R. y; w continue;
4 V4 t9 K5 U' x/ [( [9 {, o( L if(pItemElem->GetExtra() > 0)
5 g. g, C4 P8 r5 d+ i# d continue;
$ X; w1 @ h' I: X$ F: ]2 \* M% g8 f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / A2 j0 g% u, z( ?- B7 g! G3 {7 Z& B
continue;3 b" |) z0 T9 P$ }/ N
if( g_pPlayer->IsUsing( pItemElem ) )0 \5 m+ j+ f& M: Z% F
continue;( V/ A% E. ~) p; v9 O# q
if( pItemElem->IsUndestructable() == TRUE )% S% J/ P! {# t9 y' t) C
{* E; `; l4 s x" R. e5 O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- g2 G1 C! F, E) ~ O+ N
continue;, \5 Y8 n" ^; v. T5 Q$ {
}
- c7 l0 J& W6 u3 {8 w% M) X* y" ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ k8 c! V: o# G$ {/ H }
7 d' m+ L4 p* c$ ~: @8 F break;
3 }9 _% X1 ? k# d- z }
% c' a' C* o J+ G case 1:
3 V$ \' p# W* X& y0 s {( t5 F, P2 {1 }+ C3 h$ L
//整理背包: z7 m, e$ ~( }! ?/ k8 R* Q/ Y8 l$ F
//////////////////////////////////////////////////////////////////////////% d/ I0 Z# |, _% y8 [& ^3 H/ K. j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% F* ?5 n( B+ P+ M, k" |8 |
//////////////////////////////////////////////////////////////////////////
: m3 l. {% G' U. H( a S& O //////////////////////////////////////////////////////////////////////////; i4 {4 C" w. b" v: h2 k C
CInventorySort* pInvSort = new CInventorySort;
7 q \5 @2 h1 Y vector <sItem> vItem;
/ ^+ Y3 I8 a% F; ]8 J+ a$ f2 q vItem.resize(MAX_INVENTORY);//初始化大小" Y4 ?+ o+ L3 J
//////////////////////////////////////////////////////////////////////////
. b: x7 e+ @8 ]% P6 F7 [+ X; |7 p9 ]% b //填充数据
o& u8 y& o) @5 o: p( a for (int i=0;i<MAX_INVENTORY;i++)4 E3 M. h0 I R) X
{0 _$ K! Z1 I3 D; c$ q2 p* H# A# R o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' ~1 p5 P5 T9 Z" M6 ~! ?) Y if (!pItemElem)" D& ^1 W8 N* @9 S0 ]* S0 i2 {
{, L5 v7 @; }5 X0 `
vItem.dwKind2 = 0xffffffff;
4 T% e& g/ l0 n2 v; J vItem.dwItemId = 0xffffffff;) f7 `9 a X! x8 S; A& b
vItem.nIndex = i;
- Q2 R/ Z% s3 G" [& G+ Q* x" W0 [ }else {! v- F4 Q1 T0 b) o3 K7 G$ m
ItemProp* pProp = pItemElem->GetProp();
/ M5 g; y# [% ^6 q vItem.dwKind2 = pProp->dwItemKind2;9 b1 g8 s* ~) T/ ^7 Y( E
vItem.dwItemId = pItemElem->m_dwItemId;! _3 e& D/ V8 ~3 d
vItem.nIndex = i;" h. n/ j5 ~4 k6 C( n
}
9 @% M% Z. Z& ^. P4 {, _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# [0 I! H- G) D/ w, E }+ ]8 k/ I$ o7 S' z! W
//////////////////////////////////////////////////////////////////////////& H+ ^1 ?- c( u5 _( S
sort(vItem.begin(),vItem.end());//排序: a! m1 J/ Z0 U/ u! ?
//////////////////////////////////////////////////////////////////////////! ]0 ?. _* x) q7 N; j
//交换& b0 q% }" O5 Q% ~, S0 j
for (size_t i=0;i<vItem.size();i++)! e7 [5 ~9 x% ` y
{
9 y# m3 g! E* B1 {/ I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" I/ L8 g- l! r0 B' o0 y
pInvSort->Add(vItem.nIndex);
4 O5 u' I* }; c- d Q4 Q4 j }
4 E9 I' T* j( M- w BYTE nDestPos = 0;
, {' J( P; W n/ f2 F& _ for (int i=0;i<MAX_INVENTORY;i++)6 p% e8 w( Z+ ]9 X7 e
{2 S- _. O$ J0 Y0 z$ B( m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% D& P9 C% v! P
if (pItemElem)
/ x, n/ I, Q6 r9 c+ y$ a {
1 T; j0 o. b* j+ ^! Y3 P if (IsUsingItem(pItemElem))
- T e( [ S( f {& G# l7 \4 n- D+ x1 K; a
//这个位置无法放
2 _- r' K# i* a( ]9 d nDestPos++;; ^* Z( W) R) ^$ z1 r6 L9 m
}" `" t/ d8 m6 s" O2 L7 K: Y [
}
h- [! d% O7 F BYTE nSrc = pInvSort->GetItemSrc(i);& o2 U+ r8 y, @9 Y" m( V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
?! W9 v ]6 l0 `* q2 } if (pItemElem)4 p) J3 v$ Q' Y. m: ]
{
. `3 ~- h) r) `+ ~, a& i% T1 x3 y if (IsUsingItem(pItemElem))7 a* c; Q$ O& ~) w2 ]/ k
{
$ j" g, i0 Q6 X7 s" n //这个道具无法移动,跳过
$ a+ b+ E1 x, o: N/ P$ b: H continue;
5 B: S7 W I& e1 [, Y3 ]/ \! e }
) A% f7 K" i3 a7 H( H2 o4 Y* @, H; e0 C1 i }else{3 T) g4 x; h( d8 p R5 e4 l
//空位置 不用动
7 T& R W* Z% q1 Z continue;! e& h+ f+ q- d
}0 `+ E2 G! ]8 Q0 \4 y! {
//////////////////////////////////////////////////////////////////////////
" r8 y. s5 P0 i/ Y2 F6 S; _; t: J //开始移动7 V* R7 [6 Y5 h! A9 f& ~' ~$ X
if (nSrc == nDestPos)
# y2 @6 d* R$ \9 G+ o5 F {
# J4 E! \' O+ A, _% G //原地不动2 L T( [/ V' s& V$ O" n8 c
nDestPos++;
V+ j- }5 W5 X# y; p& f' ^! S$ p continue;; P p* a% z d# f; D
}) D0 q- a, n& r) A! Z2 ]! d
pInvSort->MoveItem(i,nDestPos);
. }& Q2 f- v7 {$ a# a! b g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 r# L9 \/ t; v; l$ w7 E8 Q
Sleep(5);3 W0 ^( o- a3 u- [
//Error("移动 - %d->%d",nSrc,nDestPos);+ q- ~1 L+ @' k" }) O. n, M
nDestPos++;# Y! x Y; g4 F; T3 k
}
' C* ^, Q, u+ U* d //取第一个元素的信息
! j* U% y3 t. r8 R /*
) Q- t. Z6 x1 q8 } I# ^; _# i$ j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# e* K. ]( Y3 ]0 m
{
6 _& @. L X. n D8 K! S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% Q! U9 R$ F0 t8 L# J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% `5 h8 B; R/ M! ~( v6 f. e/ e }
( a' T8 [! h: F& d( Q */* N, D% {9 T8 A) o( t, @
//////////////////////////////////////////////////////////////////////////0 W' J; U2 m7 n$ O
break;
0 w: e. m! ], K- b2 }. D }$ b5 i! _* F* a& a$ n
} : p! M& O O' f) [2 X( {' ?) H9 S; f
}, S2 y, \# |2 O" J
m_wndMenu.SetVisible(FALSE);. K/ R7 a9 C. H- Q
8 T2 z% h2 y0 o' X
--------------------------------------------------------------------------------------------------------% g. S4 V1 F$ d/ n5 X4 E& v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ i }+ q j9 \1 _) R7 L. M6 R( j/ _
{& e. V. E' ]0 p9 r$ [! ?
BaseMouseCursor();+ Y5 a' ]$ K$ @5 A( H; c
}4 L7 p2 T W: J' Y/ K2 L
在其下添加:
3 y; p! q- {/ D8 |+ Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# E8 J! ]. p# F& r
{
1 a* y( m: @$ r. h1 Cm_wndMenu.DeleteAllMenu();
" ^4 W7 R! G7 A5 n3 Rm_wndMenu.CreateMenu(this);
' g. K- z4 z2 V- }, R, w- v7 n) Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* j$ F* c" h, x+ h+ u
4 t9 E2 L0 P# s. l# |1 }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Y: p) x0 I* Z8 q% a{
! Q/ M5 h8 \9 | //P以上级别才可以删除所有道具
- P! {# H+ Z w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. C) Y& z1 E* r9 H. L. ^8 }5 e4 f8 o
}
1 D" G/ i6 R" r d$ I3 dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: h9 _0 N, ?% q4 Q1 s, [* i6 p, a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 I) ~+ u( ^# Z
m_wndMenu.SetFocus();
- o0 p" Z/ {; D" j/ f7 O8 v}
3 y/ a2 L! u* B( m& z------------------------------------------------------------------------------------------------------------0 y1 f' i' ` Y5 F3 v5 L
*************************' }4 f6 [5 m o: W: X H
WndField.h文件. o0 O+ z$ K% F& B
*************************$ E' \8 ~5 M* [; K! I1 }6 A: o# p5 x
搜索:BOOL m_bReport;
/ \0 z0 B, h1 i* K( |其后添加:# K0 k5 U8 L7 ?% w9 G, ]
CWndMenu m_wndMenu;
t8 H# Q9 i# A Z0 T3 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 a1 G+ N9 V! I$ k: @, U
其后添加:
k* A* E0 v7 jvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 j. t# W( q3 d5 N# _/ O
7 V# D3 m6 n+ W, Z
' f9 ?- K, _5 T& J
|
|