|
|
源文件中_Interface文件夹下WndField.cpp文件. N6 M0 X4 A# b. x3 j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ e% |2 v3 k0 V5 @* \1 J5 }! ^
2 n' R( ]) B# g |' M4 Z( S4 pstruct sItem
8 ~+ j; C- S2 P# y{
& e/ ~3 k9 | }% ~DWORD dwId;
6 o" ?0 f q; \ I# _% JDWORD dwKind2;
( ^' f/ ^- a q/ K! @6 [ [/ _1 [0 tDWORD dwItemId;* L/ r: @ e$ s9 b' V% ~9 Z
BYTE nIndex;7 `! f2 K3 H% Z! _3 n6 I9 T
sItem(){
0 ^7 R! l- Q- U; E! ^, W dwId = dwKind2 = dwItemId = nIndex = 0;
# ^% W& e' k& y' M' X% d' {) D}( d8 T, p! ]! N
bool operator < (const sItem p2)4 o' D6 {) t* a# `0 O3 n
{* s" e- a) s6 p& M* R
if (dwKind2 == p2.dwKind2)
- P v( F+ z) c, e! W3 Z; ?7 a- x {
' H% d# s$ k- I" p return dwItemId < p2.dwItemId;* \3 Y% b I% k# Z3 R* p ]% j9 g
}else{: C, T% W5 K; V( t q9 B0 t9 v
return dwKind2 < p2.dwKind2;
- k8 f- D5 z' H# y0 O }$ a" g1 z( Q- o& p/ r# ?# w5 n
}
7 Z5 x Y: `' P& j3 U" f8 S};
: X5 s) G2 U# |2 u- _ T7 ?# fclass CInventorySort
8 x1 L" h3 Z- L' y" S{
( P9 K$ N& \, L0 ?9 Rpublic:
' N' Z' B: O; I( D5 _" v( cCInventorySort()7 F$ l( q2 y6 X( G
{
' n! }* A( K' [/ \* K m_dwPos = 0;
, d; f7 G5 G2 D" G" t$ n% w}4 O9 t2 _: j& F% o) g2 B6 x3 K5 V: p
~CInventorySort(){}
6 \0 v# [" e4 |: L5 S$ Z4 Wprivate:
5 l' P- P0 n& [& j$ P4 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 |$ X {* X+ s3 kDWORD m_dwPos;* \# \# z$ E! e+ e c; @4 d1 }6 |
public: P6 w( H2 B+ u) a
void Add(BYTE nIndex)
7 b( ]) X, T) W( m$ n{& I7 \* U& J* t# `
if (m_dwPos >= MAX_INVENTORY)
5 D: F+ Y: ~( ^) J) L5 X {7 N/ i/ t$ e0 K7 _& `3 k
return;
6 y( s- }1 h$ \. ~! ]' Y& }8 F" _ }1 @. Y) R1 M! y7 v* I) `- J" Q
m_Item[m_dwPos].nIndex = nIndex;0 \( M- u; Q* b0 R$ ~% f
m_Item[m_dwPos].dwId = m_dwPos;2 f5 s5 b. D, E! x: E
m_dwPos++;/ t( V/ D4 u% d& H( ]& M9 ?( c6 h
}
4 q7 T1 v* G3 t1 W+ ^0 H1 JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! r2 b6 K4 c$ J* F2 A/ ^$ r{
# _$ N$ k( g( N for (int i=0;i<MAX_INVENTORY;i++)3 I" ?, _! l* V
{
1 \/ O) d# y/ H0 L! B B# g+ d8 j if (m_Item.dwId == dwId)/ h& J" }6 j5 |2 f; f
{- K1 {% p$ z1 T6 M1 b& E! G; a. E0 c
return m_Item.nIndex;/ O. [2 R% [8 J. p- x) f# l
}
2 q- z6 V D$ e* |7 u' P* b. U }" _% z1 V9 H/ m3 P) @4 u! H
return 255;: B: S: r1 t r" P# E; X$ a
}
' y* d0 f+ n! f4 F4 U Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 x7 v7 X7 H/ T7 o" A6 G# y0 W{: B2 d9 Q+ M v y1 z
BYTE nTmp = 0;6 S) C6 A' {+ h% W/ j& \
bool bDest = false,bSrc = false;
$ I6 [2 G4 J* h" p3 z for (int i=0;i<MAX_INVENTORY;i++)% z. ]& H6 p% c( ?2 _
{
5 F: O$ s8 p8 p9 ]2 F if (dwSrcId == m_Item.dwId)
3 N4 c, h+ D3 L( S2 @: I {7 d$ K7 q I: A# N' P: C: s+ P
//id相等 则 改变对应的dest和src
: f+ Y; x0 O6 Y nTmp = m_Item.nIndex;
, `/ k, c0 n2 r m_Item.nIndex = dest;
2 g# O0 F* M& _- o: a' ` }
5 ~2 F3 ?: @5 \3 t3 \2 e+ _ }
5 X0 ^, F- m( M4 } @8 @ //临时数据保存完毕,交换开始
2 { l* T0 |2 x: V2 q for (int i=0;i<MAX_INVENTORY;i++)! a% T* W2 n1 E. p' k8 t
{
" Z" e7 O: L; u7 q( B if (dest == m_Item.nIndex); s' ~. j0 R3 E
{) C( b' n( F& C$ b
//id相等 则 改变对应的dest和src
' A" G/ ]$ y+ z# g) c% W+ W m_Item.nIndex = nTmp;* m: ^! a5 H* s$ U
}
3 q0 |: I, W; ^; d% _. d }
; }3 U( T! o, \}4 V/ \ m% j$ @5 Q/ B, D1 B1 X. m
};5 d" h3 @( d0 C+ c
-------------------------------------------------------------------------3 f- J: ^# s& T9 |/ E8 n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) W- t. N W3 T5 l, U( \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
i, n; e+ s' f. ]+ T d. U7 V. H紧靠其上添加:
/ y; t7 R4 X4 T( c! Yif( pWndBase == &m_wndMenu )
. ^* ?, _) Z& x! G{5 d7 h. }2 l) t% G$ o5 X: |0 A
switch( nID )% P9 ~1 W" `. y# }+ p) p' g; c
{ H. f, W7 k: N. N# C
case 2:
6 c5 ^" I2 p( V: g {
9 b# Q a" i3 ?% ]; a //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 t7 Z/ e+ c) r! e1 ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 n) A& W5 s t: r
{
' s0 z! h) e; Z1 C) {7 ~3 ? break;! Y" N3 ^# J m' b9 t1 }. D* H- O
}
9 g. K& y s0 p6 x9 N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 f I _# B( Y {
7 @3 E! X$ B' Z7 w, R+ k b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ z4 [3 h+ x0 C- r' h: o1 k4 _
if( !pItemElem )0 [; T0 x; z8 k( t3 i. w
continue;* N9 _5 r- Z- ^( h- r' \( C
if(pItemElem->GetExtra() > 0)# G% Q5 K3 a: \" ?
continue;/ k' v' m$ d2 |& G
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" Z- c. H% F3 d+ C. j3 K+ L4 G% k continue;
$ C( T2 f1 s* D if( g_pPlayer->IsUsing( pItemElem ) )
( a9 m3 \: C( n: b* w3 i( R& D J continue;
9 e; M1 ^, ~/ l: a5 w8 G; g if( pItemElem->IsUndestructable() == TRUE )
. V% T0 y. J8 B7 f+ K {2 f( _4 v$ f5 v8 h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" |( l5 w3 W" L( d
continue;
' ?: P4 c" h. X, m" Y8 a+ d }
/ _9 g5 L1 ~( n! X5 T& J# I# N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: A+ @) ?5 M/ ~9 K5 j; ?
}; U! p" J4 J$ U- x
break;8 `' W/ U5 |& g0 y3 M% y
}# L# }! M2 j9 q
case 1:
6 N5 i! r5 n) F) e% s3 e7 T& a1 e {
6 x8 e3 `. c/ ^1 K- J //整理背包
, d, ?& x; j2 |* G* t //////////////////////////////////////////////////////////////////////////" o+ s# m. n! V% Q! l# N7 }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% b# J& [$ _, g, _, W: v1 a* P
//////////////////////////////////////////////////////////////////////////
% S+ [9 T8 G) T' P U //////////////////////////////////////////////////////////////////////////
) z7 W- [9 C9 O: Q, G/ ? CInventorySort* pInvSort = new CInventorySort;( t! K3 Y( e9 m
vector <sItem> vItem;
8 R3 O' v6 L# L5 n# X3 O: X vItem.resize(MAX_INVENTORY);//初始化大小
- U2 A3 c" B$ q: ^9 }; ?7 w //////////////////////////////////////////////////////////////////////////8 O# }( B0 y+ d$ k3 }' w# d, w
//填充数据
1 e6 @( l0 p8 f: k, U0 c for (int i=0;i<MAX_INVENTORY;i++)* ]: F R2 D* o, R: h
{
' Y* H2 E1 g, Y* I* G) H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* @; h! ~6 b2 u1 d if (!pItemElem)
. a* l, ~' W0 N% y% W- g/ t4 i2 ~4 v% { {
# { [% C6 \. X! h" ^, V" h vItem.dwKind2 = 0xffffffff;
5 P* {7 h3 f9 i% N) f1 z1 C/ Q' H% H! c vItem.dwItemId = 0xffffffff;3 Q5 b6 [- [6 T1 d
vItem.nIndex = i;9 J2 k8 ~" @" g9 Q
}else {
8 h: b! H2 Q5 w$ I E/ k7 d ItemProp* pProp = pItemElem->GetProp();& c/ y$ J9 j3 h" N% W" C( u
vItem.dwKind2 = pProp->dwItemKind2;
2 m# `6 E; i$ W5 _7 ^) T vItem.dwItemId = pItemElem->m_dwItemId;
: y1 b7 F/ n" `( M1 @ vItem.nIndex = i;
F! g `% R( k- u9 f/ ^ }6 t5 j- ?5 \) |. X! F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) w6 [( t o/ n6 ~ }8 Z# H* d% ?3 o
//////////////////////////////////////////////////////////////////////////! Z2 [. y) j& _/ A2 E% v
sort(vItem.begin(),vItem.end());//排序1 p: I+ z s- J% }& I" C0 g
//////////////////////////////////////////////////////////////////////////) A- P8 ~# W G9 d! S1 o n& F
//交换
0 ]6 C6 v5 Z8 I( _8 _4 v7 C# L for (size_t i=0;i<vItem.size();i++)) P1 D9 o0 z# b& E# W, ~2 k1 g
{
2 E5 Z; x2 |* g: @0 P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' a( E5 _% y" |5 C pInvSort->Add(vItem.nIndex);
e: J$ J& Z$ f! C* B. b }1 G, g3 D3 n9 L/ w2 @- ~# X# z
BYTE nDestPos = 0;! q4 X4 c. d9 P& d" g* e
for (int i=0;i<MAX_INVENTORY;i++)) h3 C- ?' f: d' o; W
{
5 t% J W* D: L1 S& O. P- R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
r5 i. }% G: b. p if (pItemElem); y+ l9 o' G' S; J6 s6 J9 t1 t
{
- R& j) c' x5 X+ W6 w8 w* ~) f if (IsUsingItem(pItemElem))
$ ^4 ^/ O2 Y9 s& U. `( h# _0 | {4 T* z! @- ]7 h5 S9 i1 S0 D& n
//这个位置无法放5 ?9 f' O% }3 @0 W
nDestPos++;4 n: d/ J; B2 U6 o
}7 P3 g3 N: {$ u
}
! u7 n5 A' R: J8 k8 ~ BYTE nSrc = pInvSort->GetItemSrc(i);
: @* o/ L/ Z( q# g+ ]* } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( {2 F1 V& V5 z( n if (pItemElem)
! t6 d; b& o+ g) s3 d {
6 w! g3 L: @# _% j( n0 F5 F if (IsUsingItem(pItemElem))
5 V+ d/ ]$ J' k3 L2 e7 S {
+ X, |1 r2 l0 L, v- g //这个道具无法移动,跳过
4 e9 X$ {5 D4 x5 A1 n8 R( v continue;* H& A; ?. z' O* |0 p+ D
}# i% G$ }. v) f- j0 F) S
}else{) U' f, A! ` |& C
//空位置 不用动) z* _" d: g& x( J7 q# G x! P
continue;
. N) M3 B3 b& _; U4 x }
6 M3 b L; `+ `6 H1 q# u, {6 I //////////////////////////////////////////////////////////////////////////
6 _) c2 c- r8 b: Q //开始移动0 o% C7 e3 g/ R3 Z, E F
if (nSrc == nDestPos)
7 R6 }3 [+ u3 F, X2 M# ]& U {
/ j; _5 T' m/ Q* | //原地不动
$ v3 H" ~/ L' e1 b nDestPos++;
0 d! _# r# m# Z continue;$ H2 W( `+ s# S4 f% g2 n
}
( G% G9 L$ D* H7 }$ Q$ t pInvSort->MoveItem(i,nDestPos);
! M6 i( m' d; Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. v+ u b) w8 S" L6 N Sleep(5);# ]" ~, p: ~: n- l
//Error("移动 - %d->%d",nSrc,nDestPos);
; N' h1 u' w G: D7 M nDestPos++;
: Z+ n; t% J; z6 J# | }4 i/ u* H1 i, {. k/ X
//取第一个元素的信息0 O2 R* B" b. S- x5 ]- C
/*
- G* F$ k. p, ]4 i1 @6 X$ ?* I0 U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 j5 f$ t. _. ^9 d6 t. o3 U {0 _/ e. F5 {6 r0 ?* x7 L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' d, p% q, q3 \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ z* {, f! Y0 u8 j$ |9 s6 D/ p! Q
}
+ Z2 ?7 r4 ^7 M- l) V, p */
- M$ ?! Z q: J; q( _- N //////////////////////////////////////////////////////////////////////////
$ k# a# H$ n. M9 ` break;$ X2 T' ]6 N7 y! h, S
}7 g0 o/ c; r( G ?) r. b
} 0 B/ D0 j* N$ |
}9 G* @; X# R% I6 f
m_wndMenu.SetVisible(FALSE);4 U5 O0 G. _6 g( j$ B% b, y
+ ~, Z5 r; c6 C+ S! s--------------------------------------------------------------------------------------------------------; d6 h# B- \2 l" b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ q! s- ?& _' u{
+ k( q0 w8 \. @/ l( i4 aBaseMouseCursor();
6 T% `# ?' _4 B, l+ C$ o* i$ b}1 g" u! m. u3 _
在其下添加:
t7 t6 b3 i0 G Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); r4 u( J( o% q1 i: p4 I
{
5 q6 i% H2 y) ~2 wm_wndMenu.DeleteAllMenu();
4 j1 C1 V) Z$ v3 Ym_wndMenu.CreateMenu(this);& w' [/ ^+ u0 \: h* o n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 v( c- I* H# p {; i4 ]
8 X9 J. J6 \9 {- l* w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 j; c9 b3 }! e# B3 h g{ {5 u% h" M$ y! s& `5 y' k6 l
//P以上级别才可以删除所有道具! B" v$ x1 z$ F6 S; c$ ~( p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% Z* {, n7 w! x- a( x$ d
}- t0 k) c: v- d" ~* J/ |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 h- T% e( H' t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. @& ]3 t9 E/ b: ]# i' |' m, N4 N
m_wndMenu.SetFocus();4 d- a0 Y1 t' k% `
} b' v) F) ?2 t7 j$ r1 w# F
------------------------------------------------------------------------------------------------------------
2 c) Y4 d* b9 C1 n1 A4 W" [# ]*************************% k$ E8 o+ u; s
WndField.h文件
* Q5 Z: N, P0 X- [7 }$ v6 Z# `*************************
1 L. s' V: t5 V. o+ b) M+ p2 G+ Q0 n搜索:BOOL m_bReport;
% m G% w# z$ W& O& \& l# J7 w其后添加:9 Z: y4 M- X2 ^6 r, b) q
CWndMenu m_wndMenu;" R6 ]+ t4 ~2 Z; Z; |* Q6 U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# F5 @+ E p& z8 \; Y, u7 m
其后添加: }& ]' g2 { e# r" K) s! c
virtual void OnRButtonUp(UINT nFlags, CPoint point);' }5 T7 ^* Z" s, W* Q+ I N8 y9 A
& u& Y+ J. ]" a$ L6 ]" \) _, i8 ~8 Q3 }9 x( S
|
|