|
|
源文件中_Interface文件夹下WndField.cpp文件
& Q7 o |. D3 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 |& m5 Q2 n0 I# P1 @8 M
, N9 f0 ~! i( J2 E2 ^struct sItem4 }4 x' \3 ]$ o$ e$ Y) O2 D! ?
{
9 X; P8 K! O" aDWORD dwId;
5 U4 S" o# e5 h/ xDWORD dwKind2;/ p3 U, \' n/ n0 t
DWORD dwItemId;, O! G4 J( j0 r9 F! d3 i2 C& q, @
BYTE nIndex;: Z7 }1 a6 y9 B+ o; o* I6 v# ?1 E
sItem(){
+ w' j4 C$ q$ ~! H" u8 y2 W dwId = dwKind2 = dwItemId = nIndex = 0;7 Q& ~3 g4 Q8 F W
}
$ d& S' W" n+ K! G( b# H4 fbool operator < (const sItem p2)4 @- e1 I+ z( i; T! K
{
9 o) K) o* f. Q if (dwKind2 == p2.dwKind2)
2 g# r4 F" p7 d, z0 P- @7 X {+ g" d" u2 O" L: S1 W# q ~4 M
return dwItemId < p2.dwItemId;/ X9 y, `. ]) `1 g
}else{$ g u( m' _% \2 k
return dwKind2 < p2.dwKind2;
9 P: N) Q# e: w1 E }& E' ]) m! ?: S: ^" H
}! E" P" y% b8 d' T
};, U; t$ G. D; x9 R: _& G" k( w
class CInventorySort* z: f4 q) w# H) R- o6 X7 o
{
1 L4 {+ F% F, v% @ a$ J" } xpublic:% D% s0 ]' d4 m, k( d
CInventorySort()! X; t3 P% l7 X9 Y
{0 M: u! b7 f' F4 ~. q( a& I* W2 a$ Z
m_dwPos = 0;
$ z4 j+ S6 n1 J3 d/ \+ K4 H3 f+ Q}
, `0 Y4 C4 q+ R/ H ^~CInventorySort(){}
: h$ u+ c5 @& `! t# _private:
+ r# G& ^% m3 G/ ^9 W2 _0 R5 |4 M( [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) \6 ~0 F2 |/ b
DWORD m_dwPos;' Q2 i( ~- p: `
public:
( ?8 t/ v1 g: d; n8 ?void Add(BYTE nIndex)% a. ^. ^+ ?' B X) k
{
2 k* [4 q Q A: u. C8 T2 [' _, ~+ x if (m_dwPos >= MAX_INVENTORY) `+ S. u8 k6 Y2 L5 E
{
# u/ \, V5 }* E1 E3 @6 a, t' b return;
1 g/ P1 E: j: k3 e6 X6 Z }2 a, b5 B9 {' x9 W' _
m_Item[m_dwPos].nIndex = nIndex;
( B( Y; l9 }! q6 z1 @ m_Item[m_dwPos].dwId = m_dwPos;) ?; E. f6 W! m$ y
m_dwPos++;
+ {$ x3 y. z( @3 h" k8 \! b* w: n}7 S# i# d( f( s4 b3 F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. c) |4 A- d7 J% j3 r/ N9 F W/ W
{
2 ]: ?" \' T0 i for (int i=0;i<MAX_INVENTORY;i++)3 E+ L, J! e% ?* z+ i+ e6 Z
{ {: i8 \/ h$ t+ B( [' N% d
if (m_Item.dwId == dwId)
5 T; ~$ v% m9 h {
$ y4 {" z# [7 p. p) P; U return m_Item.nIndex;
; }: \' q, Z d# f8 ~- Q- D) V1 a }4 C$ B- u+ T" \4 a/ T
}
: p; w/ a# J0 z/ x* q return 255;
8 D; N5 M( K; D6 w9 L" @}! ]3 c; Y" Y; m5 X- Z$ o* H, z4 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ v! w' q* ]. Q2 t. n" o" z* w3 k{" v( Q- y" Z$ `! ^* j
BYTE nTmp = 0;8 g F4 i0 ^$ @6 s# @- z
bool bDest = false,bSrc = false;. t- l& e" O" Q) ^* r7 Y4 I6 f
for (int i=0;i<MAX_INVENTORY;i++)
. f- Y9 s6 N4 Z {6 H7 `. ?1 E1 J. C- _
if (dwSrcId == m_Item.dwId)
. f8 `7 q5 ]1 T( r J; Y9 U+ t {6 W7 _ b; w! r3 `* T$ N& E
//id相等 则 改变对应的dest和src
' Z0 ^7 E S- k5 r# t nTmp = m_Item.nIndex;. \0 @+ C, `( \7 ^: i' V- c
m_Item.nIndex = dest;
}* H5 T. [* `- B( D* S9 R }
' g O( [; U# H! l/ b }
! M* M, G8 @6 }2 f& d! b //临时数据保存完毕,交换开始
- b! R3 m' U! u8 g0 P& v" |# e- t for (int i=0;i<MAX_INVENTORY;i++)
7 \+ c0 r, d( n" e8 m; E {
! X! t! w `; M( g3 V- z, Q if (dest == m_Item.nIndex) D2 @: F! ^; n! D, v
{( n8 m' o' L9 z( @( N$ C; u
//id相等 则 改变对应的dest和src
3 [$ e6 w0 \" m: h# v- K m_Item.nIndex = nTmp;: D- L& @8 P) e7 `# [
}
* {' i1 \7 A2 h. {& m, g0 M; a }' H1 E! x. K; s, U; x6 c
}
) k2 ]0 M3 x d9 M};
" w8 I; d1 ^: I8 Q-------------------------------------------------------------------------
$ O& P) B7 ?4 A# l1 l& p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 c' q4 b5 Z+ \8 t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 v) S9 m5 m: p8 W0 [; N紧靠其上添加:
6 x( `- f7 s9 H: Jif( pWndBase == &m_wndMenu )4 O+ G/ k1 E' d3 i! s3 K
{1 ^6 Y# a1 G- t" I
switch( nID )( D3 c) j9 q' s3 ~) q
{3 F6 i4 f8 }8 V6 F% s- N6 h
case 2:3 A8 m9 I6 |: ?( ?& T2 Y6 v* I
{ O) F# g0 K( j/ h% ]" p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 b. ^# S! S! y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); g5 \' D+ S9 v: @4 n
{
2 g2 K/ g; W1 ~8 j+ N- v( ~ break;
% P5 t) ^' s. w. z }; f& e5 s Y8 z" n1 I" n* e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 p% c/ j5 c4 ^9 b. U
{
7 T% E, E m2 N) T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" `. g' ?! B/ \: Q- b if( !pItemElem ). y: a+ b; Q: m$ w( i3 S7 I+ b8 x
continue;
$ x4 E J; X5 P' V( W if(pItemElem->GetExtra() > 0)1 v- ^6 b# k/ Q8 u
continue;
3 o: t6 Y+ F$ H7 ]) T& z; e2 ^, L$ t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 x9 X) v! t5 ~) A4 {
continue;: v+ T6 o- k) h! u! |9 v0 O: d5 T
if( g_pPlayer->IsUsing( pItemElem ) )' K& S5 ~7 P* G0 \- C
continue;
, M- m9 M7 e p/ ] if( pItemElem->IsUndestructable() == TRUE )
) {- b* D# R, F; B$ N+ v$ e {8 T4 ^$ y& j0 a% U( C& L
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* d+ y3 U$ n2 {
continue; l) B, H2 f- R$ e
}
) V' B v6 P7 k# p) M4 ~" x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ o8 f7 E0 j1 E }
9 R9 T) k" s2 A break;) ], _* l/ r4 a* W2 h( }
}# Z1 ?+ `. k3 Y2 g+ L" P) F
case 1:- S0 l5 J# p' x4 G p
{9 [) E# K5 A7 A' R2 x" `
//整理背包
* J2 E4 i& D& m //////////////////////////////////////////////////////////////////////////
1 v0 ?7 f% g I$ c) G, r6 ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
k* d2 v: a: m& n9 ]) ] //////////////////////////////////////////////////////////////////////////
; u/ b) ~8 l+ ~0 N //////////////////////////////////////////////////////////////////////////
0 {0 g/ X5 F M5 f# \- p CInventorySort* pInvSort = new CInventorySort;
5 \! d9 n" u2 k# X vector <sItem> vItem;
! O) {* m6 u% c7 J vItem.resize(MAX_INVENTORY);//初始化大小( L" P# t1 I/ D
//////////////////////////////////////////////////////////////////////////& z ]. p/ `3 A J
//填充数据
8 x# z/ v6 \6 C( W for (int i=0;i<MAX_INVENTORY;i++). O, \' a7 K" N6 P b
{
5 W: ^* h1 z3 A5 ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 l0 X: q" r2 B4 \' X6 P# I: C
if (!pItemElem) E2 C/ ?, m1 y0 c4 X
{. G' c7 E6 }( N4 K3 w4 B4 `- k
vItem.dwKind2 = 0xffffffff;* T0 E) ]& S" `9 H3 v8 R
vItem.dwItemId = 0xffffffff;2 H' V/ T/ z' n1 ~6 f1 P/ _3 Q
vItem.nIndex = i;
0 x; g6 L) j9 Y9 @" H }else {
6 ^7 q1 E R: O% m4 o8 P ItemProp* pProp = pItemElem->GetProp();3 f0 e9 E8 C* |- M7 q/ z
vItem.dwKind2 = pProp->dwItemKind2;
M. R% Z- z8 @# G" v vItem.dwItemId = pItemElem->m_dwItemId;' x: ]$ l3 s5 O( A0 g
vItem.nIndex = i;, i- [- `0 `# \7 F+ }) ]
}
6 U# h/ U9 H' [4 c5 k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ^' y! N7 [& @$ [! W }6 ]0 n5 M: k* I2 I8 C
//////////////////////////////////////////////////////////////////////////
; z+ c; M1 T' N" o4 @% O0 ` sort(vItem.begin(),vItem.end());//排序
1 w5 ]9 j2 j3 x1 g3 _0 h( D3 ?' p$ R //////////////////////////////////////////////////////////////////////////
' u% A5 f/ o9 Q& ~ //交换) N/ D) U9 ?& K, k4 U3 k, {) B
for (size_t i=0;i<vItem.size();i++)
* _1 M0 U4 ]2 U7 ^ {( R' t: b" J& n4 Y. v* ^" X
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- \9 U! h6 N7 {9 z+ o. [
pInvSort->Add(vItem.nIndex);% g% d0 b3 G/ M- x
}. D; J1 o0 T- ~9 S6 f; i% \& G
BYTE nDestPos = 0;
/ C. r6 v0 B& D0 l: c( @0 @0 \ for (int i=0;i<MAX_INVENTORY;i++)
/ j+ c/ |- Y+ P, k1 F$ M! c* [1 X! O {
! E, S5 e g2 U' h- l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! G; R0 z0 \1 {: W$ ?: t; |: Y if (pItemElem)
1 v4 r: T2 L0 O2 B3 g } {
0 U( [! K& X/ d5 @: | if (IsUsingItem(pItemElem))4 w0 a. x0 D* ~- E* t5 e
{; h! {$ ? g' G8 o
//这个位置无法放; ]' `/ w- Q j/ k
nDestPos++;! D$ P! D/ `. d- `
}
$ ?& w. K3 J" m5 J! a' F }9 x6 q0 K; {% e6 d; G5 \
BYTE nSrc = pInvSort->GetItemSrc(i);
" @; \- k* V' }; D' V/ G; Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, Y3 [. E( x9 |* {3 O4 F5 a/ k if (pItemElem)
6 ?! I$ t+ v1 B5 B( d y {& T3 N9 P; ^% z4 }3 o, H
if (IsUsingItem(pItemElem))& ]7 P- t4 I9 b j ?7 ]. c! j
{0 n$ A u2 c8 U; B' m
//这个道具无法移动,跳过3 b/ t# k. ]6 @1 c) T; l
continue;! m) ~ _% s% J6 v6 x
}
; D6 G- N; R9 D5 M( e4 E8 i }else{6 h- U# B: |0 D
//空位置 不用动$ e3 g1 C$ G2 u1 U; |
continue;" A& r' u# y6 E0 b
}
* q1 G& r. d; U8 V* g) E7 @ C8 C //////////////////////////////////////////////////////////////////////////% N0 Q9 p, P; w% y! S
//开始移动1 I' I) L+ E& y" V! ^7 V; l
if (nSrc == nDestPos), S4 }# N* _/ }- m. o' r5 C- x* v
{
+ b9 w# z) j k' S1 A //原地不动% ~; _% t$ t4 |/ a
nDestPos++;
8 O8 c$ [, H9 k& Z; F5 [" u$ A continue;& r Y( X N! n8 _8 q
}
. l5 R1 S4 _% \; y( A6 l' K pInvSort->MoveItem(i,nDestPos);
* H% G9 C& F/ b7 I9 L, c/ J' |: } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: Z( ^! B. F# O8 y/ `5 j1 R7 w Sleep(5);
; z, z3 \! M/ C; e4 K //Error("移动 - %d->%d",nSrc,nDestPos);
" ]! `3 b& R$ v4 n nDestPos++;
8 }/ P" i& r" w6 @' ^2 N4 d }' t, b7 N& e+ g$ b
//取第一个元素的信息. {4 y0 M$ d' j# y1 j0 N
/*
" I/ T. a# I- P0 J6 o& y3 ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" }3 l, f- y; i3 j; v0 t
{
4 }( l) E& {. c z! d' A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& Z. b X1 ]; O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% e- s( e* e/ X( |
}
7 c6 R; V4 Z+ H n' h- C. [ */
2 G. Z5 O' `4 [, x+ ~; L& A //////////////////////////////////////////////////////////////////////////: Q8 P: X4 ]9 o; w1 p" o' x
break;1 A- d I j" p' W7 @
}/ o, H( j8 |- H% K& T
}
4 J! o8 S# ~8 }2 M3 ~' s}
w6 b6 q( z7 rm_wndMenu.SetVisible(FALSE);
4 T1 O% z: V- o) u& p* k% r: H1 u* `3 {, A6 D; \
--------------------------------------------------------------------------------------------------------; c4 W6 R5 H5 @; A/ F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- l1 C2 C/ D2 k. M0 d5 J. p4 F
{
0 c& V6 U0 ?9 p& \BaseMouseCursor();0 k5 L& o V6 B5 s) c9 q
}
2 _& s7 o9 s1 L+ r6 `1 h) \! `8 A在其下添加:
( B' t. ^; Y) y* t7 a# b* ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) x k+ _: c9 I! {5 t
{; C$ d% [) n0 n) `/ F! C
m_wndMenu.DeleteAllMenu();
+ J% ~' p4 E& |1 r; cm_wndMenu.CreateMenu(this);# X- D& \( G' _' @1 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, W% D) Z8 p, u# ~: ~0 I$ m) Q0 z! ?$ X. O0 i2 g7 O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 [ k6 B* s5 f m
{1 E+ |. i- r6 D1 z8 i
//P以上级别才可以删除所有道具2 k& f+ X& r- f5 v. d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& s+ K. N& H" h( J, ?7 C8 a1 _
}; d- K2 e- K- I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: o- Z4 z% l A. z# h0 w7 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- N* X9 x! u! a( ]) qm_wndMenu.SetFocus();; {* m7 Y& t- W ~8 B' r
}" D t& i2 p# _' l2 g1 G1 U
------------------------------------------------------------------------------------------------------------
5 [/ `" _& u; h$ S7 F" X0 G*************************+ a# P A! e9 ? p2 L* n" h Z1 |
WndField.h文件" R) Y d. x _ N K
*************************5 N: ~+ |9 y/ f3 m- _0 m/ \
搜索:BOOL m_bReport;
! |5 f7 a# J+ N* D! `" @! Q* |其后添加:! V [. q/ V* [* l9 W8 ]
CWndMenu m_wndMenu;
6 J& v3 |: a; m* t5 T/ _! o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; f# `, w# l2 P其后添加:
4 l3 x2 \% q" I, Lvirtual void OnRButtonUp(UINT nFlags, CPoint point); r/ f- k, B+ h
0 h3 t! U4 h* D P6 J2 x* Y: F$ e! s! R }1 c/ }% N5 ?# I
|
|