|
|
源文件中_Interface文件夹下WndField.cpp文件
, R; y3 p6 Y% P' Z$ i" X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- b0 k. R% r$ m! s* ]
0 l& I, ~# L+ `, `% c7 Q9 @. i: k0 gstruct sItem
/ N: z+ f# M: ?8 q. O- D! h{
1 ^/ c+ J0 }! E' O1 t! _4 \, [DWORD dwId;
9 r: i/ j# }; B& fDWORD dwKind2;
+ S, x2 `' w3 z4 nDWORD dwItemId;9 g* {% I3 t9 r( d6 m5 @( [
BYTE nIndex;
) ~4 m3 ~; o8 A/ m" {sItem(){1 Y8 o( o8 c( Q( |; |
dwId = dwKind2 = dwItemId = nIndex = 0;' U* v- u [+ D
}- D; x) F3 Z t# | V, g. p6 s
bool operator < (const sItem p2)
1 P' ^: X4 `/ p; R+ F{
; X" k# f# Q( A8 _$ M8 @' {! T if (dwKind2 == p2.dwKind2)
3 z5 J8 P' x0 { {9 D- k f$ g6 v z! o
return dwItemId < p2.dwItemId;
$ W5 v k- u1 r9 Q }else{
6 j! Z: ]; Z9 z' Z- `0 a4 w return dwKind2 < p2.dwKind2;5 ^) W# g* v m4 e# D
}
7 g3 R; U) }7 e, W0 o}. m+ ]9 s$ E$ t6 T: o
};, v8 \* u, B, \
class CInventorySort2 _) q3 y0 d% C, S- \
{9 P! S6 H) n+ ]; r& C& D
public:) n! |) C' U& O( D9 G* M6 b
CInventorySort()
& [' _5 y/ t4 A, O5 ?' z! l* s) X{
, x( c. w& T3 f6 ^" A8 p m_dwPos = 0;
/ {! Y9 A* i. k* I1 ~/ n}
! u9 N( D, ^! m~CInventorySort(){}
- F4 }# f" {1 [; u7 T9 aprivate: q& L) u2 n- m' z* V% j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) F h( F3 y; I3 i6 a! ], G- k
DWORD m_dwPos;9 ^0 x5 P3 E1 @
public:- e( F" N% T3 \) P
void Add(BYTE nIndex)7 T6 \) g! D" x+ }# @0 t9 X
{- K5 ^! Q0 y3 A8 `/ U
if (m_dwPos >= MAX_INVENTORY)
: H# v6 S$ e, U. d$ K6 J$ A2 O {9 s- m4 E6 w0 \6 i* [. v+ F
return;
4 r$ x) g8 z @* J+ E6 t# ? }
" b2 L7 J4 f$ M& |; ^5 `. c* i% Z m_Item[m_dwPos].nIndex = nIndex;, P2 U5 [* y- \! Z5 Z# X
m_Item[m_dwPos].dwId = m_dwPos;% f3 s! s0 S8 c7 i6 D0 D
m_dwPos++;
9 L9 J% c8 P3 @( [$ f}
$ z9 {' | H; R+ ^% U$ YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* L8 }2 i- I9 B/ V1 l/ U{# w+ d7 s" b% a* Y/ ]
for (int i=0;i<MAX_INVENTORY;i++)/ d! O5 l8 w! J1 m
{" l9 W% P* h4 w. o
if (m_Item.dwId == dwId)2 m6 b8 A2 e% z# |3 m9 Z
{
5 v- Y q& z6 M; I( d, n return m_Item.nIndex;7 g& T; @9 q# C2 e b0 D9 b
}0 Y) U: {+ F C" R9 `0 F2 ^
}' B! U- ^7 b6 ?8 y9 P3 J
return 255;
" p; Z" Y0 C5 a2 c}' C# g) N' Y( a6 U( ^# @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 ?% U2 w. H) _$ c4 I" j* |) L{% o7 G7 x! g( }: L
BYTE nTmp = 0;
! v5 \1 p* |- p8 i' C4 { bool bDest = false,bSrc = false;
0 ^" o) }& r# Y( s4 o9 g8 n" P; \ for (int i=0;i<MAX_INVENTORY;i++); I2 z5 _7 j& K; ~5 p" f" ]
{
2 r3 o2 G' \; D+ b+ O' a$ Q if (dwSrcId == m_Item.dwId)
& c. N' n8 t' T6 u {3 \. h2 S$ _. f' H4 w3 v. V
//id相等 则 改变对应的dest和src
5 i" p: F2 u& b nTmp = m_Item.nIndex;
: j; K) p3 Y, ~" I" I m_Item.nIndex = dest;
6 L* H3 J: D7 q. Y }9 p1 G' Z" c5 `
}
0 d+ d( A9 n# b( Z- f* F# g5 U //临时数据保存完毕,交换开始* K) t8 I M( W( o1 U# s+ Y
for (int i=0;i<MAX_INVENTORY;i++)8 `3 m# {# z# w4 g% b
{
Y' Q0 ^+ G% R' V$ O4 H if (dest == m_Item.nIndex)# k( ]6 U& h" [+ y4 r- y
{6 @5 Z* a" y9 k" ?6 X
//id相等 则 改变对应的dest和src
. m5 M: f' u% k* ^; Z1 e m_Item.nIndex = nTmp;
$ h" c5 Y, s, V$ Y } l1 s7 y/ R! L. y. J9 C$ O; j
}: N8 l" P1 ^# n. X$ F6 `, Z
}
& F6 |0 k: ]& Y& x' @};) y! I. Y) |/ m# r8 s
-------------------------------------------------------------------------
9 E' U* X4 \& Q& ~2 ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ |, i4 l7 ^1 E4 S- J6 s% ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 U; u4 p3 @0 T: b紧靠其上添加:
, K! }+ p ?4 F1 o3 Pif( pWndBase == &m_wndMenu )4 h1 u4 P# D" O$ y( R! k
{
& g: k$ p7 q6 U; z switch( nID ). y% w9 U/ L8 Z) m8 d) C# t4 y
{3 V* p" n7 q t3 U
case 2:
x5 h4 X7 |0 R7 s& s3 m. C {
% R$ \3 Y7 F6 R0 k4 i9 v8 E6 Z$ G$ J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; P+ A9 x9 `* F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, L' N3 e1 i8 ]) g. ] {- p- ~! f3 r! ?( r' ^
break;+ m7 `4 l9 O( Y: W
}& u5 a `1 _( H* _" k7 X' @) K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ K: w! i4 N! M0 | L- W9 E
{
9 n8 w5 c) k: E4 `- N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: b& y Z, J1 }
if( !pItemElem )4 {# W! a# `& m4 v! K& j- R
continue;
! A5 X# z; p" U9 X& l, W if(pItemElem->GetExtra() > 0)& R. H% W/ c& @# ]! a' c
continue;; E, J- ]" O! U! @% Z' G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' d6 n" a) x% ]' A7 e* n. V continue;# ^0 p# r& b) Z( x4 f: q" F9 \# J
if( g_pPlayer->IsUsing( pItemElem ) )
7 u$ \+ C% _' m& M0 Q3 M continue;% Z5 n) S1 |1 I& N, [+ ~3 i
if( pItemElem->IsUndestructable() == TRUE )2 K3 n: {) U* B* a/ G/ l
{3 A& D: W+ \( y( g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* k7 z' D# ^1 |& w continue;, b$ |: l: g5 n
}
* F4 C* y" {5 }* R: c2 t( e5 `( w g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ L, g# ]$ x& q. N% w# } }2 h% o7 X& r2 K' ]5 B4 R1 Z+ Y
break;
1 ^* ]- v( @! B! K. }$ w% |4 w }
) i8 c( x. W6 E$ u$ o8 F case 1:
2 I- g' b- A$ ?( y/ {' }& D+ `: k {1 g, o/ s! w! b7 |6 k4 J: _
//整理背包2 b' \+ t) G0 q* O4 Y% p* L
//////////////////////////////////////////////////////////////////////////" o+ [: H( C/ l- m- ^: \! H' G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& M# V# {. J$ g5 G4 o9 ^: ] //////////////////////////////////////////////////////////////////////////6 }7 v4 W5 @1 N
//////////////////////////////////////////////////////////////////////////$ b$ Y+ [) h8 A
CInventorySort* pInvSort = new CInventorySort;' a$ \) J' Q7 Z; m
vector <sItem> vItem;
) D6 G @/ a" D- Y4 Q4 C/ {( M vItem.resize(MAX_INVENTORY);//初始化大小0 E! I+ g5 J. B5 X7 q6 d; O
//////////////////////////////////////////////////////////////////////////! ]$ P0 Z5 `/ W" ?4 p
//填充数据# B2 B% i* ]/ k, |' }5 W8 ^
for (int i=0;i<MAX_INVENTORY;i++): l; D t5 P: K% i7 @/ j6 h
{' r4 c3 |- C5 F, U) R$ @/ i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" ?" }. M. | j% @ n
if (!pItemElem)
' ^. v0 t: t R {
3 h% z3 d. P2 s- ]/ `; r, V vItem.dwKind2 = 0xffffffff;' @5 {) J8 q7 o. B
vItem.dwItemId = 0xffffffff;
8 ]& e. h- b5 Z, A' r& S vItem.nIndex = i;- i E# y$ e2 V3 T" |
}else {
8 X, ~' y$ {" W9 b" O ItemProp* pProp = pItemElem->GetProp();
2 J+ U+ w6 ~5 ^5 J vItem.dwKind2 = pProp->dwItemKind2;# ?- b( I; V% [7 N x4 L
vItem.dwItemId = pItemElem->m_dwItemId;
/ M( t6 ~4 q, j vItem.nIndex = i;
3 I2 Q5 P9 r, C( u" z }( n' c* e8 \) Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. a& [' C2 w1 W) ~1 z& C. c6 e
}* B( X$ Q" d6 J; j
//////////////////////////////////////////////////////////////////////////" i6 e4 q( _ c l, L
sort(vItem.begin(),vItem.end());//排序
6 x5 m) t' \' B* b! j8 X //////////////////////////////////////////////////////////////////////////
3 {9 ]& R- ?; H) b- ] //交换1 U0 h/ r. e1 r& `' d% ^
for (size_t i=0;i<vItem.size();i++)! @6 g* d+ a( s
{
+ l/ }2 H" W( w2 D; ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; j8 j5 f$ }. G: \0 h pInvSort->Add(vItem.nIndex);8 P* i- n r) |" v4 ~" ^
}' n: F% u$ S& `/ l) @' M* r% Q6 A; y" K
BYTE nDestPos = 0;
' N( f0 n! E8 u- B' m for (int i=0;i<MAX_INVENTORY;i++)
9 _# X/ K! a. b( w+ T" U {
6 t: M. f; _5 N9 \7 r6 g( [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% O! \6 P7 ~0 W) J9 J: v if (pItemElem)1 J" o, m ~0 _1 k3 o
{4 q2 s9 G5 ?4 w+ d% K
if (IsUsingItem(pItemElem))
; K1 c Q4 C8 e: U5 Q$ e$ ]1 ~ {5 q. i- b) {6 s# `1 u
//这个位置无法放
1 Z/ w; y1 k0 ^$ t ^8 t$ q nDestPos++;
7 m! h+ T8 o: A ^ }! a1 X9 t+ V, w, E1 P# `" d8 s# Z
}
, {( B9 { w2 T/ M: O9 p, R* \7 a- j BYTE nSrc = pInvSort->GetItemSrc(i);
( S3 ]$ ^7 n! O( J' v7 w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" _; Z. U5 e" G& U- Z- G) Q% K if (pItemElem)
3 g4 f: n. G: X0 [9 x {
9 } z1 l: H4 n# ^4 a0 m1 V! E if (IsUsingItem(pItemElem))
3 c: ^' |7 r2 T4 x, I' } {
, z* w- t/ N4 [. {5 M b; w% x //这个道具无法移动,跳过0 e- ^7 s# Q# }4 y) D) q# d
continue;( _# f1 N1 `& {4 J8 T; y3 F, {. _
}1 j& X! [8 A7 h3 Z' Q9 V
}else{
4 ]/ V: z+ [+ u2 q" P2 J6 z //空位置 不用动
o C1 v& o; f9 z; J1 i" c5 h& V# U continue;
: h3 W! M5 b9 X7 D$ @ }
7 h; z6 X2 b0 [5 |0 d, r //////////////////////////////////////////////////////////////////////////
" ~8 \: Y8 _5 s //开始移动+ H- m' W) c+ j( A( X; i H8 P
if (nSrc == nDestPos)
/ f3 K7 q, ]$ _' V( p o {
9 Y4 {2 P$ k4 P3 t //原地不动
^0 j6 Z5 e! \ nDestPos++;
9 h2 r- Y, M, x9 m9 |; D continue;" R5 n6 f+ F$ l6 J' i7 y6 f- x
}
/ b& f3 ~$ j! u pInvSort->MoveItem(i,nDestPos);8 X, d2 C: z1 R- {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 E% @% F, c. i1 i& `9 P! {3 Z* _ Sleep(5);/ n# e2 O- n5 [! s) R, h9 P- W! j
//Error("移动 - %d->%d",nSrc,nDestPos);0 z2 s2 B+ @; S2 K
nDestPos++;& R+ y. [3 G; v) \; E/ q# I
}
. K9 K2 q# A! S1 T& Z9 z //取第一个元素的信息
/ A8 u- P2 G" n3 g$ m+ ?4 U /*
! q% g o D) Q0 T! j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# L5 g7 U5 `: f y {
! z6 d% E0 k, T& A: h: }3 e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 `& X- }# O4 P: b l n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; X' l% }) N6 Q4 T2 s1 s }! K9 y4 l: I! ` V) ? e5 W
*/
, o! R( n0 r: o! e2 x, X //////////////////////////////////////////////////////////////////////////8 I8 j' b$ h( d
break;
$ ?7 v! x- O5 C' v }
) Q4 Z! h# _; ~2 l- n0 n8 u' Z } ( S) U" {. @. _* X
}
6 J3 |; P9 Y# K; P' c, t+ Om_wndMenu.SetVisible(FALSE);
! h3 z( p% u+ G" j/ Q3 ~6 M
+ ^) q+ W$ s( V6 s: c--------------------------------------------------------------------------------------------------------7 X% K2 ~5 Z7 `+ b. ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) M- {- n q1 c0 w{
0 }! {. b4 ~' s0 zBaseMouseCursor();' X% t, F% j- C) |' |/ U9 a% d
}
- }. h& G; ]* x4 i在其下添加:
4 R! R |0 X' P$ n9 Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): @4 K+ x* L0 W: o7 u$ v) F
{
& ?0 P/ F% }" x. Z! Sm_wndMenu.DeleteAllMenu();0 [0 @* n* c: E" }. E
m_wndMenu.CreateMenu(this);2 R' o1 y. B0 b# `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; [" W$ E- J" D' ?: V `4 A" i
/ i# ]7 E# M6 P+ l) zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 i9 y* x" s K; f
{( d' K; Q& Q# S3 `2 u9 y
//P以上级别才可以删除所有道具: E* H" H2 t( u6 K! ^) l0 p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* T2 D$ n9 N( R. \4 o
}
) o7 T! y$ [4 e7 p4 Q6 [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# {( e- F4 W5 ^1 d( i5 g) um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); y# ~/ v% v$ _
m_wndMenu.SetFocus();
3 Q( r: n1 L I/ o, R" t}* r8 J, Y ^$ J4 r
------------------------------------------------------------------------------------------------------------) W6 Z4 _) T& P0 J- D
*************************# s. t0 V$ F- B: k1 _
WndField.h文件
2 Y% j9 j8 S) i0 U7 `*************************
6 Q& S1 |# w) A# S搜索:BOOL m_bReport;
0 m# g2 i. n! D/ J5 R) N4 X% H其后添加:/ W& B" o4 T7 J2 q" W) B7 j
CWndMenu m_wndMenu;; S' L3 Q& s' i; v! G: W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& `0 k8 l- h' M! J$ X H) ^. C" p6 S其后添加:
6 U; M3 z Z( s' v: pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- i/ P, w& r0 V2 L9 o
6 D) L2 [8 Z% D6 ~" c/ g" G# v
6 y& g1 p* s5 f/ j |
|