|
|
源文件中_Interface文件夹下WndField.cpp文件* S: h' p U6 `0 c# g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, D2 {4 m" a S8 P/ u. E, m7 I# F7 m, q8 y
struct sItem( x0 P- l3 h( l2 R6 K, C D
{/ r2 f1 L0 C9 ?0 K9 W0 D
DWORD dwId;
) {* W2 d/ h% @; ? a* N- m# KDWORD dwKind2;2 d! m+ Y4 z6 ]7 w. E) j3 E' K
DWORD dwItemId;5 |& W: ~/ r7 W: D+ _8 E# s& O. ?
BYTE nIndex;, H. l) C. r) ^& p. ]
sItem(){7 r6 r c, V. N/ n
dwId = dwKind2 = dwItemId = nIndex = 0;
# o' H/ p: r4 q) w$ o% U}6 |8 G7 B% i' t r. B
bool operator < (const sItem p2)
0 ]3 I7 c+ x% T7 U{
2 Z* C' k5 C8 `# O4 j3 n6 D7 P2 N if (dwKind2 == p2.dwKind2)
9 T6 H3 X7 o5 d) a9 d {0 S" n. T# M& N. I; r3 P$ a; Z
return dwItemId < p2.dwItemId;/ T0 w" P' W0 A3 G
}else{
& O/ u( t! ?5 c. V8 x( l return dwKind2 < p2.dwKind2;# @* S& T( K' }2 }9 {8 x
}% N1 V' V* _! ?' d$ K7 |/ N
}, I( j R: W) L& E) t, J9 j
};
( J0 Z- z* K. H5 x" dclass CInventorySort
0 }2 i3 U+ Q$ ^. H7 v% b{
" d4 f+ R( e6 H, K2 _' W4 w" Epublic:
% {& T. V) |) n. Q; d3 d; y% Y/ ?CInventorySort()
2 G" a+ }+ B+ |* j8 o{
2 h/ l7 k4 t' V: I& H. J! _ m_dwPos = 0;" p: b! y+ J/ i- i# G- x! s
}/ ^# x, t( A3 D, T: d
~CInventorySort(){}- q+ U1 Q( W& t% a7 y8 h* J
private:
: I2 G3 E+ Y* {# g1 A5 c/ c! G) l! vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 c6 y; J% n, a. W- g
DWORD m_dwPos;5 f% H8 F) d* x) Q
public:( E+ C3 C! p5 F
void Add(BYTE nIndex)) q( `$ R8 ~' b/ o0 o+ ^
{
3 K6 N) t4 E' A! D' W$ U4 p if (m_dwPos >= MAX_INVENTORY)
) {% P7 _, l' l0 G9 y/ i# p {0 q% H: I- x4 L( d$ X1 \5 @
return;6 g1 g" ]% ?) c% C/ T
}: b2 |7 s5 t9 `1 K; I
m_Item[m_dwPos].nIndex = nIndex;- \+ l/ f8 J% D" U
m_Item[m_dwPos].dwId = m_dwPos;
7 z, d3 Q9 ^. m. B# @; U/ o6 H m_dwPos++;+ l( m0 d9 J6 h/ p) f$ v6 \) W' p
}
4 e; X( U" Z) Y% HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; x/ |( I5 {7 @! Z* S- @& x J- M+ ~{
% G8 h: d) @1 s" Y2 C9 S; p' u8 S" S for (int i=0;i<MAX_INVENTORY;i++)
/ n+ H. Q/ F; g! [1 S( G {- ?( X1 X+ n- h, J5 w% _
if (m_Item.dwId == dwId)
+ a$ A. @) R- v {& u' ?3 K* I2 p
return m_Item.nIndex;- A1 z% z2 a5 x% g
}# q- o1 d: E" K$ G2 T
}
; z& M, G7 G! {5 p; g, d return 255;* O) k& l, L' z
}
# X* \6 l8 n+ ~8 Zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 ^3 y1 I+ O4 K- A! R9 k' {) h# j
{
2 P+ h+ a7 N, L8 T BYTE nTmp = 0;
2 c6 `3 I2 ]0 R7 h' D, u- k/ ] bool bDest = false,bSrc = false;
" t5 D$ d: T. J, w ? for (int i=0;i<MAX_INVENTORY;i++)5 R& P" ~# }6 g6 O: Q% J7 P
{
8 d4 _( M' w e5 `. I if (dwSrcId == m_Item.dwId)! H9 ^, q- M7 A+ u0 k1 f1 A
{4 {7 I+ \) V' Q9 D, j
//id相等 则 改变对应的dest和src
9 w9 K# ^8 Q$ U nTmp = m_Item.nIndex;
8 ^8 \2 c1 u( k# W5 N m_Item.nIndex = dest;
( ?8 G8 f7 f0 N& }6 R }
6 \0 a: a' q1 X3 C }
$ Y+ O7 L* R: r- i7 ^; g6 q; R //临时数据保存完毕,交换开始0 z2 Q$ F0 M: x$ s, K b
for (int i=0;i<MAX_INVENTORY;i++)8 Q+ S) [8 f/ j
{
- H% x: n o; N( z! {5 | if (dest == m_Item.nIndex)- L" S7 ~9 J, W# j- {0 c" d: z9 g
{& ~7 B6 ^- B) h( P$ f
//id相等 则 改变对应的dest和src
$ ?) y5 F1 g! D0 \- K3 C m_Item.nIndex = nTmp;
. }2 D' Z' J- ?( R0 }- ~1 P+ E7 r2 q }/ W! G% ?* S D/ ^* W0 m( J
}
) m" M7 t" A( { j& d}$ e, `9 D a* l8 X9 o/ @
};
$ \2 c& b3 d9 B& d' ^! A-------------------------------------------------------------------------
! {( W1 ^; V4 z x: K" v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) H( q v6 C1 M Y! c- F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' w! L9 h8 K" B6 P紧靠其上添加:" f3 N/ a: f7 c* U" x& O
if( pWndBase == &m_wndMenu )
: S3 k) _, @& G0 [{
/ }* H( G( ^7 |4 H4 l: o3 q3 J switch( nID )$ z, m; B: c& v4 h
{
# _" S8 C1 ^4 c/ y% g: C! n case 2:, [3 _8 f5 l) _8 B* ~# }+ C
{
# l# y9 l) y. O4 X/ I( {( P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 i2 {- L" U2 v) m6 p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 y4 o" G+ |. a6 E6 i3 m6 Z$ G& q9 a {7 m4 L6 z( f& n, l6 g# @, H, B* G
break;. {3 D: O) {/ u* @2 b
}9 e. O: a. D& ?- D7 w1 Y) m2 T# J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): L; V- }9 o" I: P$ |; N" t
{- c7 k) r3 @6 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. [3 g* C: B9 p1 b: S# f5 `; `
if( !pItemElem )0 ~. H. c; T5 Q0 k
continue;4 x4 j, [" L7 s) T4 M
if(pItemElem->GetExtra() > 0), l4 Y' \: r9 G `
continue;6 ]1 T7 }: N8 x( k( U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- l8 {4 i. J# t& x. C- u6 }* |9 t continue;! _; t7 K# w8 ?* ?4 B
if( g_pPlayer->IsUsing( pItemElem ) ). v3 }6 Y z. p1 a( e
continue;1 _3 }3 x& Y: y, R4 s
if( pItemElem->IsUndestructable() == TRUE )( S4 ]8 I$ m$ z! ~
{
' S4 H/ L# b7 h( f& T" m( } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ s9 n! i# a; R; v4 b8 S" G. W continue;& _# D& l; X% u9 k7 m* r6 a
}
0 l, o: ^. [6 ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" ?+ h; J; P+ g' z+ S# Q2 f
}) j1 u9 v" v o8 G5 B- l
break;4 w4 h2 \* [ l: P) O
}- q5 M9 Y. u9 I/ }9 V
case 1:' I1 `8 s4 P1 g% U& D
{
3 G) G/ }$ c" q! `$ N1 Y, [4 o //整理背包
; {/ z4 E$ L+ f2 |9 y/ v7 f //////////////////////////////////////////////////////////////////////////
) G- z: f- \( a/ X! [4 E1 ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); M& {0 b/ C$ t/ ?! a
//////////////////////////////////////////////////////////////////////////
: V. S, A- R/ B. X //////////////////////////////////////////////////////////////////////////2 l$ o, q2 [1 U$ G# F
CInventorySort* pInvSort = new CInventorySort;9 @4 v4 y4 l2 X% q2 P
vector <sItem> vItem;: ~; T P, ]* L T% |
vItem.resize(MAX_INVENTORY);//初始化大小# h5 Y! P9 d0 g( K
//////////////////////////////////////////////////////////////////////////
' q+ [; m' `9 @8 {2 J //填充数据
/ B# D+ @, f: o) q- N: I for (int i=0;i<MAX_INVENTORY;i++) [3 \, Y% L% D: v- T- v! Q: X
{
. r$ K1 V/ Z. R) h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 d( @- B% m* c- n$ d7 M
if (!pItemElem)
- u0 g' V$ p7 v6 k5 x {
, G- Q9 W8 a3 w4 y' G) b7 }- _$ ]3 X vItem.dwKind2 = 0xffffffff;
, U7 m% n+ e- c% D) D1 c vItem.dwItemId = 0xffffffff;/ G4 n8 K0 r* t7 ?: M$ ^6 T
vItem.nIndex = i;
; s" [1 z2 o% S! O7 t }else {
1 P" W# I9 _* P4 V+ t- C( c! E$ S. e ItemProp* pProp = pItemElem->GetProp();2 V4 Y' W+ f. l: R o* C+ J. x
vItem.dwKind2 = pProp->dwItemKind2;' u. J# G- \0 M
vItem.dwItemId = pItemElem->m_dwItemId;3 W3 \9 _& B: z% _
vItem.nIndex = i;
$ K% G& _+ r8 U0 h B0 v& H }
" n9 k: M5 a3 ]1 n! y# V# Y% P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: N! B, e7 ?- c }
0 o/ i* Y1 ?" I4 I4 d2 _2 ] //////////////////////////////////////////////////////////////////////////+ ?' K* o/ X7 g% G( ?( |4 s9 B
sort(vItem.begin(),vItem.end());//排序. E m# m4 {& E' @9 @- H; o3 c8 L
//////////////////////////////////////////////////////////////////////////1 N+ c& p. o o' B
//交换2 ^/ \1 u4 ? U+ L7 T
for (size_t i=0;i<vItem.size();i++)1 M8 x, P6 w- j) z+ |. F
{5 [# N, N+ V8 L6 V6 r0 O' O( D
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# X9 m$ y0 j# k5 Y pInvSort->Add(vItem.nIndex);/ s" t9 C4 P ~, l, y
}* S; z6 r2 q" J. h3 r- v) `1 h9 d
BYTE nDestPos = 0;
7 n3 i' d* K" j, ?3 ] for (int i=0;i<MAX_INVENTORY;i++)
( h% p4 y) H- @8 ~( l% k# y {
$ X! ~/ x) S; D3 E Q# X1 {9 J* l6 w& N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( c- k! `' c+ [ d% [' v/ G7 S) ] if (pItemElem)
- n5 c: b9 u2 u3 r {
# _2 c: i$ i3 B9 s) A if (IsUsingItem(pItemElem))$ a! n" L- L. a
{5 j, g5 W8 i9 y0 |3 ~ B
//这个位置无法放) ^% j2 r4 Q% {
nDestPos++;0 ~) C' z0 Q6 o& x
}# F/ M |" M# J9 T) v
}7 o6 q8 R& S' e- `/ `. l2 a
BYTE nSrc = pInvSort->GetItemSrc(i);
3 m( V2 ~. g, j0 [( G, e" D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
Q0 B+ @4 J0 G2 G7 k if (pItemElem)
3 O( j3 ~: A) v6 }1 A4 G {
: J" k; Y( B* e' Q if (IsUsingItem(pItemElem))
- \* U* Q3 h1 Y9 j3 U2 j4 C {
2 {2 R3 q8 e$ }" n //这个道具无法移动,跳过9 m8 S* z6 F+ K: a- V, a: \
continue;
0 i! X0 m1 p, w W# N! `$ ~ }. v4 d# _ | B8 I4 L
}else{2 ~4 {$ W6 J# U% C4 _6 T' `7 @! A
//空位置 不用动
% C6 ?7 K8 N" ^ e+ ` continue;* w- d, N) l, _ j) M- J1 }
}
7 d+ C y! c- o8 x. I4 w //////////////////////////////////////////////////////////////////////////
3 p% z9 }& v, U# B; { //开始移动, }: u2 ?, E7 m/ H+ j+ V9 j
if (nSrc == nDestPos)# W# D; t/ ^) F! n' s O" N5 U
{
]+ W- W2 P' m$ R1 D. o //原地不动
& P+ j3 k4 q7 a- U) ?; J% R nDestPos++;7 ~) K" K' y5 @' u* V
continue;
/ O; q7 L' Y, G7 n. p0 Z7 K }+ b0 _. [* {# [/ S$ o
pInvSort->MoveItem(i,nDestPos);
/ E. c$ D2 L3 d G" K3 W g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 u. j# Z& I/ H" w
Sleep(5);! O+ T0 a1 `; d: f" g' J+ M4 T+ x3 x
//Error("移动 - %d->%d",nSrc,nDestPos);
6 D" }$ W r. Y2 |' b& ~ \ nDestPos++;
& u# t% ~( m% B6 o4 V% t& { }7 {- T g9 U: Z, r; G, [0 v
//取第一个元素的信息
% E7 k& Y1 }2 K /*: M1 ?- Y, w, e H5 C6 K0 J8 ]! F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 j7 F! k( q8 }' x. _- P! w5 M {
# \2 C( T6 G5 l3 t( W/ m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* V L2 u, z3 g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 L8 h- T6 O# [# B+ q }
( V/ T0 d7 b* C' n) Z7 s */4 i# P' X6 e7 p: g
//////////////////////////////////////////////////////////////////////////
: \9 z: d! {) Z8 Y! ]4 [! C! `; c2 D" t break;
4 Y# P: x- i M) I' ~ }
: a* q9 C- k1 { } $ }: a- K3 `8 ^' `
}7 c& q) @& ~* @
m_wndMenu.SetVisible(FALSE);
4 m9 \8 N1 V% c% q, O" |: y' W! t* ^
--------------------------------------------------------------------------------------------------------1 F& a {* F8 W3 b7 O2 _; M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% A9 [+ i5 q- j E; f{. u5 [- ~5 o2 \ {
BaseMouseCursor();) ~8 n% @ D1 y' T5 C
}
/ m& j/ q. {, O! W) n在其下添加:. n6 N2 q% |: q! H8 B% ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) D3 _- z, E. A/ }" u i6 h
{( ^" E9 {: n4 e- [
m_wndMenu.DeleteAllMenu();( {1 ~" c- N% |7 [
m_wndMenu.CreateMenu(this);- R* l. n0 A1 P5 c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 y& d7 q% b! g# A5 M9 E* c5 [
9 X3 u; P0 q- e& x s2 cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" e6 n, t1 c9 e% K8 m{* h# t( x6 [6 Z1 M. d
//P以上级别才可以删除所有道具
) X/ ^7 H) S+ x2 h5 q2 P! r m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# W1 i: d$ u3 R. L R6 i
}4 R) T0 R5 q" x$ @ n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 u: q* I7 {. H3 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 `$ x7 Y# G1 Qm_wndMenu.SetFocus();
j; P. D+ L% a9 J$ R5 K2 o}3 ^1 {, l; E ]6 K' O
------------------------------------------------------------------------------------------------------------
% f- P. V- K8 X*************************: k0 X5 |, H- y) M# ^1 {+ S3 R
WndField.h文件
! |$ V1 J, [* g. k) |. k* R*************************0 ]+ b$ R( o% u1 L
搜索:BOOL m_bReport;4 l* |/ d9 B% `- c2 \9 d2 t
其后添加:
) G6 y9 U* y% u& y8 d) I, j# @CWndMenu m_wndMenu;
; F, I/ ~& z5 | u K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. y& b# |( s1 S" i2 S其后添加:/ b z' t |; M) k I0 a) Z! a9 m
virtual void OnRButtonUp(UINT nFlags, CPoint point);# O; h) n" O7 _# J
! h K& |9 {! Q" k
$ x3 M2 Q+ L& s7 q; p" J# B |
|