|
|
源文件中_Interface文件夹下WndField.cpp文件
]* z1 ~' ]9 h3 y4 D I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* B5 S* b, J9 P* n% H# ^4 j- ^+ p# v2 @' r1 E
struct sItem
0 _ z0 `# h8 B8 z* z. o% a1 x{1 ^& o6 ~# L7 z& q0 _7 e
DWORD dwId;4 B/ R& G: [* Y
DWORD dwKind2;1 Z# T. u8 A5 n) s8 G) j
DWORD dwItemId;
+ I2 \) Z, n0 yBYTE nIndex;, l! Z) `$ o% X$ I! l' e
sItem(){
`8 u, c5 Z8 g3 g$ r( p dwId = dwKind2 = dwItemId = nIndex = 0;
( b- X* Q7 H/ o, |. A}6 ]* L' G8 Q/ G
bool operator < (const sItem p2)
+ ?" X) o/ ` t$ ?" c; n{2 d8 z" D m) }+ D v
if (dwKind2 == p2.dwKind2)
1 o2 o6 B- B9 S+ P9 {5 g {
, F( s" Q+ _% ?; b N/ n% B. } return dwItemId < p2.dwItemId;
# X8 l( E, ?! K7 g& x. U. o }else{/ o" ]3 h# m- B( L
return dwKind2 < p2.dwKind2;+ D9 ~ w0 y. @1 ]' s5 x" K
}
/ ?) y1 _) y; e0 p/ j6 b}6 @% i: | e5 G+ m9 ?3 \7 X1 L
};/ i ^% F3 f$ |( ?2 }
class CInventorySort4 t2 b" d3 n ~1 a t
{
" t' L( G- m" v) t. g: ], m9 S: }public:
2 Q6 w# B( |5 n5 A8 o" ^CInventorySort()" x# I& R( t$ c& d
{0 q+ a- @* c& {- z
m_dwPos = 0;+ I# c9 t/ h' \$ k. X5 Q$ J
}
" ?- B( \9 `3 u* i6 \# R' B~CInventorySort(){}
1 T$ D2 e/ s m( D0 H2 l2 z( Lprivate:
$ M+ I6 M) ~$ u/ CsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' ^" A$ ]! s! q
DWORD m_dwPos;& g3 G A2 e+ R- X$ h: w6 E# C
public:! H* _# W8 I' w. F! n! S5 f
void Add(BYTE nIndex)2 G; s: e( I/ \2 a* v
{
: i+ b, ~% J" A) S, c& E2 M0 X if (m_dwPos >= MAX_INVENTORY)6 G5 ?. ?/ U0 X, w
{
1 k# f/ `3 J, l, L8 e" T return;) B& m* v: _# y4 M
}
( C5 g% ^1 r6 r2 c" ~ m_Item[m_dwPos].nIndex = nIndex;% K: |+ t0 b) T% x# y; a' P T$ m
m_Item[m_dwPos].dwId = m_dwPos;
" r4 t- t! P4 F( M; R3 G' q8 O m_dwPos++;
, M/ E- A- U1 m& k$ v, t1 B3 |9 I! N}3 o; `% w* y& y N, S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& d6 Z P; z& K1 H3 R{
+ G/ u" ^. m8 ?. P2 O for (int i=0;i<MAX_INVENTORY;i++)
$ D, `0 [; Y& U0 K9 S {% B- s& j, s. j! {7 G- U
if (m_Item.dwId == dwId)& @0 Q4 |8 `0 ]/ _) g" ?
{" x8 z# ?" x$ A( H _
return m_Item.nIndex;
0 V5 f$ }1 b2 v& a4 }" W# J! S8 r) S }; Q. _, Z9 w, t# R" x& i
}' C, \+ | H7 c0 p- [3 }1 |# e& t) G
return 255;4 s+ E/ x8 W6 k# w1 f4 ?
}
( ^9 g$ C( W9 T' Y: B! v" @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ F/ n! z$ P% [# r1 y5 H- Y. h& ]
{, _- ?3 C" J( @% e2 E! A. o! Z
BYTE nTmp = 0;
0 @) Q6 v0 h5 A% q bool bDest = false,bSrc = false;) C; O7 o9 ~9 C9 Z
for (int i=0;i<MAX_INVENTORY;i++)& g/ t: A, O n$ ?" a
{( `( d' a$ S: Q. p
if (dwSrcId == m_Item.dwId)+ g D! U* U/ Y( c
{' x+ \- c) e% C9 W: j
//id相等 则 改变对应的dest和src
6 d, L. t0 {/ j, | nTmp = m_Item.nIndex;0 O) O3 x H/ X' h* K
m_Item.nIndex = dest;
. R, a" z- w# Q+ S9 _( L5 t }
, Q# N. D5 a- G A" @9 U }
/ m) k4 y L* c: S) Q2 ~ //临时数据保存完毕,交换开始7 @! b* b: T+ E4 e- S( i
for (int i=0;i<MAX_INVENTORY;i++)7 r* W/ y0 A, ~# j5 J+ l! d- `
{
4 g- S: R, i) g$ F) X if (dest == m_Item.nIndex)" p( n! r* }( f8 k7 t
{
1 w+ o5 _( A( K4 K7 s- Z$ j //id相等 则 改变对应的dest和src
( u3 Z$ H3 T9 H {2 i2 C m_Item.nIndex = nTmp; T9 J) P& c! w4 I
}
2 o, u( \- B* t% h' u3 h }# r/ ]" H$ ?) l1 r
}. ?, M3 m4 k Q9 J
};" q# N* [& e, H# U
-------------------------------------------------------------------------
2 [% h% F6 U$ R5 D7 j5 r- K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# u% ]/ |' z) h7 }- L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& R) N" K' t9 ~& m6 S0 S紧靠其上添加:
; o4 a0 ^: P; K7 c8 r ?! M. Lif( pWndBase == &m_wndMenu )
5 H5 E) f9 N5 x; l' _! N2 m4 d% l{6 K/ i2 y$ z3 g
switch( nID )
2 z. K9 |) u( M- M! S {
! F& m; e2 ~, W: I% O7 F case 2:
" M3 B6 ~' T% G+ j% B+ n {, [* I" ^3 a' ?9 N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ w- x9 c6 [# b" ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 O: o' I# G4 G6 e& e0 E/ e3 g
{7 J4 \2 {/ x, R% d& z: u
break;
/ l7 e9 V2 t7 c) R' y L }9 ]( q+ i- K5 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 H' d& C: J& O& K0 Y7 B6 O {8 s& M2 T. n7 x% {' C( K6 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: A1 U2 a; s3 ^ x5 |5 t0 `
if( !pItemElem )8 `% L8 V9 V8 D& y4 {* P9 x* h
continue;8 B! j, z- W* q
if(pItemElem->GetExtra() > 0)+ {: |. b5 @: d. G
continue;
x! ~, X; Y5 }6 p8 l& \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 m. {6 }# y; H+ c5 { continue;7 S, X. C7 k1 W& L; R" a
if( g_pPlayer->IsUsing( pItemElem ) )3 y: n+ E B: _2 W1 V% @7 X
continue;; N! K ]! w) g$ ]* B8 ?
if( pItemElem->IsUndestructable() == TRUE )
8 h% R! A9 Y& ? {) T7 R" A8 a9 z% i s. J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 e" ^0 }( \! y
continue;
) [$ \( C$ E: h }
* v# @1 K5 v% W4 B# v- J. L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& h$ W" z( J% H e }
$ O' i# n3 j5 A( A break;. i1 C! Y6 Z) ~8 a' w- A$ f$ |: }
}
& X7 |3 C8 m" r case 1:9 K" l. e% W. \: C9 s, I
{' M# D# A- e' M* ~
//整理背包& r2 Z) B( W& I3 @, D) d: X
//////////////////////////////////////////////////////////////////////////" t1 @8 ?& P$ M6 T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- K+ T$ f6 I: _: y" y, e% ]
//////////////////////////////////////////////////////////////////////////
1 r" k Q: ]( f! Y //////////////////////////////////////////////////////////////////////////: Q- m" ^' I+ a$ q% ~ `
CInventorySort* pInvSort = new CInventorySort;. w6 _: i0 v% }# g) F
vector <sItem> vItem;
- w9 i$ ?. t* q' d4 U vItem.resize(MAX_INVENTORY);//初始化大小
% o6 a% ~7 {" F; C+ i" R% ] //////////////////////////////////////////////////////////////////////////
, h* k& D7 I0 c) n/ M //填充数据
. u: D( _) T1 I; y for (int i=0;i<MAX_INVENTORY;i++)
6 n# v! ^) s9 ^! n1 r { ^* ^) c3 h- z. T3 l, A7 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; @) Z6 x: K+ m( ?; r( v: q/ B3 A$ \
if (!pItemElem)
+ G( c% ^0 c. Q, n0 I5 ~1 g7 S {. u; m( F3 B0 K. W9 K: v
vItem.dwKind2 = 0xffffffff;
2 Z; E, Y# k4 Q ?: C vItem.dwItemId = 0xffffffff;; k6 Z9 b" a( ~0 G3 G: t# y
vItem.nIndex = i;
9 d) }. S. y% F& w }else {
) c5 Z1 ^) h( ]6 Z5 D. N ItemProp* pProp = pItemElem->GetProp();; O' [* Q' n8 h* Y" N! g% ?
vItem.dwKind2 = pProp->dwItemKind2;
1 n$ y' m' B- E! \, ~ vItem.dwItemId = pItemElem->m_dwItemId;
7 c* M2 T* C) c vItem.nIndex = i;& P6 e/ j# @1 h+ x+ e
}
# Q# _' c! F' y! o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- q- }, |) `! v }3 X9 Z: V- ?+ b3 W t2 a! L
//////////////////////////////////////////////////////////////////////////
4 v2 [9 X8 n' h sort(vItem.begin(),vItem.end());//排序8 G$ G) y x7 {! A# `
//////////////////////////////////////////////////////////////////////////
$ L( v8 t9 \5 |; k0 h$ ? //交换- d) u* }5 O$ |% K% f2 {
for (size_t i=0;i<vItem.size();i++), x, r4 t" ^4 w4 H/ ^
{
% B6 t/ s4 \/ m9 c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ?6 V: n2 @) ?& u3 T6 [5 h pInvSort->Add(vItem.nIndex);* x9 W& k# U3 k" ]
}
+ K+ v0 i) Y0 V BYTE nDestPos = 0;
# {) R* s/ q+ y# u1 j1 D- M for (int i=0;i<MAX_INVENTORY;i++)
3 M- \0 q. @/ i9 P' {' |) G+ [; ^- x {# d! {( Y6 v$ _0 |# X6 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 F* A$ R% {9 p8 s! ~- z& T' I. j if (pItemElem)
. i X& Z. L, N) {! c5 { {2 O8 K) @9 J X# x0 {0 b# v' z
if (IsUsingItem(pItemElem))
1 j4 ~1 F: F0 m/ y9 X$ E) w( M {% S/ u! D" H9 K
//这个位置无法放: r; w4 J: a$ [- k! t1 S; O
nDestPos++;& |3 n& Y7 P) s7 _" G
}1 @. Q p7 B! b$ |! i4 ^: [
}/ _ B1 B& H, D% J
BYTE nSrc = pInvSort->GetItemSrc(i);/ o: {$ V2 Y0 j2 p; U4 r
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 Y' F- C" Y' L% K5 G/ G/ e2 y/ g if (pItemElem)
# D# o ~, U1 r! C1 N" H! L5 r- T {
1 v+ _3 j, t9 n# l if (IsUsingItem(pItemElem))
3 N1 m5 r/ c9 Z0 L: T {
/ |& `1 Q2 E6 a) b //这个道具无法移动,跳过
/ O! q0 F/ a% B% f: A9 \$ W9 p continue;
; T+ d* K# e# {: o }
5 J4 h3 V/ v- O }else{
' K: X4 C7 p& ?0 _! X N //空位置 不用动0 {# @3 h( e$ ~2 z* A9 D8 o
continue;- P" ~1 n0 k" O: g
}
0 p6 B& k, ?! u9 ?, r- f /////////////////////////////////////////////////////////////////////////// K: |+ q, z" g7 N. n
//开始移动
, A% } ^ m% @( t* S% S if (nSrc == nDestPos)4 N, W) E) q8 B. J8 P
{
, a5 D, B ~2 r" d //原地不动
) u$ v0 R& A; p3 l. a nDestPos++;
% Q4 e# `; ~7 K j continue;6 }2 e& o4 y% H: [! X2 K
}4 }/ s8 ?% P. x7 x
pInvSort->MoveItem(i,nDestPos);% d! B E! O- j" b1 p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# Y( P) B2 T4 [/ F1 i" w/ J
Sleep(5);; K2 C, H" s( w) c! C% p
//Error("移动 - %d->%d",nSrc,nDestPos);9 @# V+ {# G' y$ M& j
nDestPos++;
w% _) W/ h$ i# T }8 l! u! U: M+ N& t# ]2 j
//取第一个元素的信息
( {# |# a P m) V /*
0 a5 M( ?' H! h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 u* E" S/ {) n" I {
* m" B$ E$ j9 V+ t# o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) b" `* f+ O/ B6 w! k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 A. f! x7 _7 Q& d3 l- H6 f7 [& u
}8 e( |5 n# v/ n# F7 g
*/% k1 i; U- E) A7 o
//////////////////////////////////////////////////////////////////////////: K+ C( ?1 H% B; x+ C4 D0 g& w
break;
$ t M& _' K; Y! |8 S T6 c+ I0 e2 w }5 w# @, Q) O0 ~- @
} $ {& n, P# j4 _' E
}2 G: s) J3 p4 ^ E/ N: P. k$ J
m_wndMenu.SetVisible(FALSE);; {5 b& r- v: L7 j# ~
( Y% W$ r. M( G. h" O
--------------------------------------------------------------------------------------------------------$ q* V2 Z2 d7 P+ `7 w5 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" T" Q6 @* ]2 r g8 j{
& i' G/ P n, u5 y( b+ M3 `BaseMouseCursor();! t C6 E# B1 t0 \4 a W6 ]
}
; a4 [* H( X: E8 V8 c3 u在其下添加:
7 J/ }4 V* A6 X# C/ I$ \+ tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( W- P+ f. ~* X{
" n' |2 b& ^+ P6 x6 Gm_wndMenu.DeleteAllMenu();
s3 j8 j# ]/ c7 R/ fm_wndMenu.CreateMenu(this);
+ C0 x m8 r0 ]4 p6 Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) h! Y' T! y6 t' ~1 r
Q; b `* T! K% ~& ]8 Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. t! `8 A7 K5 n% K/ \% R/ W% C{
4 h8 m! N0 }( x0 H. P* A* T //P以上级别才可以删除所有道具
5 v; [4 P1 t( \, c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( a( O" \: C5 E$ A- t}2 Y& H3 }4 t* U6 a, D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 O5 r4 V% X( q+ Q6 T& E. ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 O( V. B9 ^1 y: Xm_wndMenu.SetFocus();0 u" X' ~7 c2 T4 e9 r; x1 G4 I
}
% W$ f7 L/ n. t) r/ f' o------------------------------------------------------------------------------------------------------------
, P/ J0 ?! O: f4 `! n: r*************************
) M* ?1 I* ]3 c( ]4 b& a$ J) [WndField.h文件& |$ r/ [. ^6 l( i% m
*************************
" R" a4 q7 }! C% y4 ^搜索:BOOL m_bReport;
3 K$ N2 `6 h' y. v0 C其后添加:& ^9 u5 x, t. [3 ~) }
CWndMenu m_wndMenu;; f3 q( j) |* V! O' Z8 e# K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& d( Y) `+ l' {6 W
其后添加:% Z' t8 j+ B; \+ {. S6 S x
virtual void OnRButtonUp(UINT nFlags, CPoint point);& A- i; b# W9 I) Q& C' Y2 b
: t# T9 J" W( D) }' S4 F; ? E3 u' Z( ~
|
|