|
|
源文件中_Interface文件夹下WndField.cpp文件 F8 F( W, s2 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" C+ c7 R8 l- q8 ]
; x& [) @4 k ]& Ustruct sItem) u: H& ]( ?- B8 t$ X
{
" @9 z, G) U+ S1 A, Y u2 wDWORD dwId;* r* W: I4 f, J, D' k) Z
DWORD dwKind2;
. w4 l" F4 d6 TDWORD dwItemId;/ s3 q4 a! |/ P* p! w+ e3 e2 ^& E
BYTE nIndex;
7 H+ U( k/ }9 H( esItem(){- N. k; Q6 ~# m; a f- q
dwId = dwKind2 = dwItemId = nIndex = 0;
8 Q5 ~9 j% L7 z: w}7 C& q% a6 [. I: [9 d+ b* O
bool operator < (const sItem p2)* `% U! Y* G* b1 X Z
{
" I* F1 X! Q: N, v) T+ Y if (dwKind2 == p2.dwKind2)
5 e) K, v) r- v$ L! R {
9 b/ w% z+ H4 M3 E% t7 L+ h' _ return dwItemId < p2.dwItemId;
4 y' R5 w7 V' ?: B9 q7 v }else{
k" a$ M$ a+ K+ S4 Q return dwKind2 < p2.dwKind2;
. P# p) x% g$ y6 _$ T% ^& f }# `* T( U" A. |
}% s0 s! I M8 W6 q& w ]
};) y2 F b) K. s- s7 R" N/ G
class CInventorySort
1 X' y% h+ R& ^# e. r% z{
% N: O# ?! C# U- G' mpublic:) [8 O0 K3 [0 {8 f( h" |% `& e
CInventorySort()5 f8 C F9 j% R: Q
{
! Q4 N/ Z0 `5 h5 g m_dwPos = 0;
6 R2 K6 {; i% V}
8 {# p$ ]( R6 J' y~CInventorySort(){}
: o6 N# ~. s4 c* k, Jprivate:: q1 {7 B& g6 t( }" Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' a9 t' R0 f& m; r
DWORD m_dwPos;
2 H* ~9 d* |# A& U9 }# i5 Mpublic:7 V- @7 d3 g" p1 J7 `& V
void Add(BYTE nIndex)
) k9 h+ l4 k# y{
0 v5 w- }" r1 N" M if (m_dwPos >= MAX_INVENTORY)
- g" T& {" y. f7 p7 e, i& z* V {- A; N- k7 U6 t1 c3 ^1 r" h0 z6 J3 u$ ]2 ?
return;" T. m+ c L" [) z' G) O
}
/ y; I& w' n6 f( s4 G m_Item[m_dwPos].nIndex = nIndex;4 c: \: A) P% I* J: L
m_Item[m_dwPos].dwId = m_dwPos;
. U) N: }* J3 Z m_dwPos++;
; X! [% n0 |% |! ~9 W; H}
; p, U( W* ~$ QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: [- D. R. u7 I3 i( p0 { p' p: W{/ X( v& G# w6 ^( M: G
for (int i=0;i<MAX_INVENTORY;i++)
$ r E: A7 r: R3 o r {
4 z4 U& \4 B* c2 e7 ?. \9 z if (m_Item.dwId == dwId)5 U4 Z/ l6 K1 N9 d
{# v! ?1 Z: A/ Y' T1 l; ] k% \
return m_Item.nIndex;
2 e4 e2 F. C1 D* u% I8 l' G; T }
( H& h6 y3 l, T& ] }
0 K. h7 o* n, z9 D' q return 255;; k* `, R; Y$ ?- ]' U6 P& {
}
3 E! G3 D! \5 U! @+ F, ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 _9 \ v9 W+ a3 i
{" x1 |2 m0 y& M* V" I: V5 ?8 ]% f
BYTE nTmp = 0;
0 ?5 p+ X$ @" I- ~0 }3 M8 ` A; L) B bool bDest = false,bSrc = false;
" l+ ?# I, L! } for (int i=0;i<MAX_INVENTORY;i++)
& }9 M7 n. X \* p y" i {
% ^+ y0 ?8 M: o% \ Z8 t if (dwSrcId == m_Item.dwId) l1 Y: q! r/ Y W6 W6 a( H
{2 Y5 M3 `2 m+ h. U) {
//id相等 则 改变对应的dest和src
- [! m2 k6 d4 f# X nTmp = m_Item.nIndex;' m& @, O4 g# Y
m_Item.nIndex = dest;
3 d; Q/ H7 z. L, ^. g }
2 E) s& g- M. }, u( j }; m3 f0 w, V' w0 K2 o1 E
//临时数据保存完毕,交换开始% I. |' C* t; `4 a+ }/ W5 ~+ y
for (int i=0;i<MAX_INVENTORY;i++)
- p9 v- b" H, Y( R4 @' l5 G# q {
; \! T; @0 T( C3 m if (dest == m_Item.nIndex)
. j0 M+ ^+ ^1 Q1 ~5 u {
5 G* }: U3 ^6 R& ?/ v# e //id相等 则 改变对应的dest和src" y5 I& }. E, _/ y1 G C
m_Item.nIndex = nTmp;
; S7 _; v6 N; I- C1 q7 I }& O. @% _5 t9 Q/ i
}* s* A, p1 p3 i" L0 l/ K. y
}. Z+ b( ?+ l; {+ [! X( K; H& {
};
% x+ N) D5 `( k/ v& Y-------------------------------------------------------------------------
0 v0 S' P/ s2 m k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ @4 v' t2 V( d% v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 f" B/ {$ C g) G9 P' x紧靠其上添加:9 S R; p8 H2 C) s! }$ m, c: g
if( pWndBase == &m_wndMenu )
. X1 \3 c+ a+ a, w' j( c( K{ S0 M) v# B8 V7 P9 A
switch( nID )6 v9 t! J/ r0 X @. {
{8 ^7 Z' z9 l9 [7 C" q
case 2:7 ~( k }! r* \
{
' U g* }6 m4 o5 \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, i* a W; E$ t- o. e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). b3 ~8 {. ^ v; n1 r
{
9 T1 C' o9 ^( X break;! h. f8 u( g& g0 Y M# O; f8 ~
}
) B1 c* v% B: Q9 M4 e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& u5 v- u( g5 k' n; [$ o! L+ s
{& E& g" h* C* e5 x# |; Q+ C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( G ~% S/ E; ^9 m if( !pItemElem )
3 j1 O7 e: H: R2 Q) y' j continue;
" e: T0 H( N2 L! u# a if(pItemElem->GetExtra() > 0)( A$ D; X& b N2 V+ {
continue;
% P1 _. c E& {. O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 i, q' L9 W' j, V3 J
continue;3 C/ Q: W5 f! L' N }
if( g_pPlayer->IsUsing( pItemElem ) ): Z2 `1 `( p3 T# ~* S
continue;5 B* ]( g& [; K+ }* m8 m7 q. W; }
if( pItemElem->IsUndestructable() == TRUE )% o$ `1 T C. Q
{ H# b0 Z8 i9 [0 g& Z) ? `! j1 B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ @5 l* W3 c1 j9 j continue;6 c# i& A: c, w! s7 o) B) f% c, \8 p
}
! B+ f H1 h1 ~3 \) |! k6 ?# E, ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 c( O5 d4 g" j% j8 j6 u. V }; }( U/ i) L6 C/ x$ s
break;
9 g$ G# p# B& c6 ?1 v }4 S7 W* B! L0 x- T4 X3 F Q( |
case 1:
$ a! x0 s a( X! s, Z! v {3 u1 W/ i0 D b. G" | R
//整理背包
" ^ @5 O5 W L7 r. O //////////////////////////////////////////////////////////////////////////. j% s# Q3 u: S" m4 H. s2 d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 \) s K' n" _$ K //////////////////////////////////////////////////////////////////////////8 v5 W; Q$ b B( H2 a. F6 @
//////////////////////////////////////////////////////////////////////////
/ K4 i9 i5 s6 u" i) H3 W$ v CInventorySort* pInvSort = new CInventorySort;4 j- T. {) D5 B" J9 E1 D6 Y
vector <sItem> vItem;& E9 P8 U* }" x2 e. M
vItem.resize(MAX_INVENTORY);//初始化大小
O L( D# ]4 S9 f( S. }* h //////////////////////////////////////////////////////////////////////////
- B! h, n1 l* O1 r( _0 k //填充数据3 A5 J, O& _4 Z0 }) H, g( i
for (int i=0;i<MAX_INVENTORY;i++)) J' x" T, g% j2 f/ u
{
, m. t$ q* H& p+ H) z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! M( f4 x* p" f1 Y) t( t$ ?- Z
if (!pItemElem); I& K5 E/ l3 B/ x& g1 [
{" c# u3 A( q4 N* I7 F% X) [6 r
vItem.dwKind2 = 0xffffffff;
) }8 T( t* y7 W* f) | vItem.dwItemId = 0xffffffff;
9 V8 N4 x. }; G( ?( |. d+ Y# J/ ] vItem.nIndex = i;
6 [' V4 W u8 P6 G5 K0 } }else {
' ^4 x% H( L& K# G ItemProp* pProp = pItemElem->GetProp();8 ]# z7 T5 v% @9 w, i! f# I
vItem.dwKind2 = pProp->dwItemKind2;' x% g% S# }% x8 k
vItem.dwItemId = pItemElem->m_dwItemId;
2 |7 ?2 j9 I, h: |. z0 \ y4 h vItem.nIndex = i;
( [' p& g9 W& ^. y2 B8 I }
8 o5 A9 |: d5 y; l2 g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 R8 h2 @8 q% p3 m6 ? }1 d# \- Z, ?3 R: @
//////////////////////////////////////////////////////////////////////////
; z5 C: S$ R/ V0 q' o sort(vItem.begin(),vItem.end());//排序0 i; |% n( F# L$ m& V7 U e0 d
//////////////////////////////////////////////////////////////////////////, |* u Q/ O$ u
//交换7 _! u& r3 Z. Z8 o4 B
for (size_t i=0;i<vItem.size();i++)6 l# I* W8 H6 r( n7 ~
{
* |" z n8 [. P8 z6 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; a& n' {2 z3 R$ v& f( k pInvSort->Add(vItem.nIndex);) P- ?6 k- x* V+ L7 K$ d
}/ R. \- |3 M3 K. }9 p" O1 O
BYTE nDestPos = 0;- y! Q0 ~9 c2 W, w
for (int i=0;i<MAX_INVENTORY;i++). Q; T! [ F" e5 P7 t' M+ u3 B/ F9 T
{+ u/ e8 W$ G# N- i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 R# \9 g- ?2 q9 F; H if (pItemElem)" ^8 l+ ]! [/ b- g" ?7 p
{
* G. U, e7 q7 i0 O7 Z, C" Q0 B7 C if (IsUsingItem(pItemElem))
3 n# g2 g, P: U6 D {
( a H. F+ Z y: A' L& ~ //这个位置无法放
0 @3 P3 ?( c/ i0 A4 P1 z nDestPos++;
! \1 j: s3 ^! o& v. j B9 O$ a7 T }* z0 A) N9 J) R: _. A) A
}% }1 P# X+ k) s3 }1 e
BYTE nSrc = pInvSort->GetItemSrc(i);* H* ?6 f1 j0 {, R4 E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 {, E' C% @6 f
if (pItemElem)4 E2 P% F3 i3 Q! o# d( m6 _3 q) M
{
) p% p$ N! a& ~ if (IsUsingItem(pItemElem))
7 f1 q, |1 }' s$ V& i% d1 a9 F. z {
8 K" U! Y6 J3 P5 N+ m( l$ S //这个道具无法移动,跳过
8 O$ y# ~/ A1 ]7 z# t2 R' p+ r continue;( ~, _7 N2 g- H1 j1 i
}' y, C+ x6 j' W
}else{
2 s$ S' d4 ~; A% ?0 V //空位置 不用动
& V, I) T" B& U3 A" | continue;
5 b. q/ N/ i( s }
5 q) c8 c R9 u, {/ f# W6 |! g, W //////////////////////////////////////////////////////////////////////////
' T6 Q- q2 H6 F3 l& V& R$ k //开始移动
% S* \! e, [% G6 x% W if (nSrc == nDestPos)
% O! e6 N" B# G. Z% a! @# a* O2 w {$ | \! v7 ~5 g% c0 A, R
//原地不动
2 c. {( ?+ R [6 P nDestPos++;1 d2 R: S3 r# Y. c
continue;- j n4 F) d4 s
}5 j9 N% J! I; X
pInvSort->MoveItem(i,nDestPos);+ C6 ~6 u% _# J' N+ F6 i6 p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& t, D5 p! o S1 P Sleep(5);
S- J0 {1 q* r* B //Error("移动 - %d->%d",nSrc,nDestPos);
w- c3 c1 p6 M9 e" p' e5 S nDestPos++;4 K( U0 q& L0 `/ M" d7 Y7 |
}
' ^0 P# f7 H% w& z //取第一个元素的信息$ ^8 ~1 @! A2 ]+ \ K4 N: E t
/*- F# H5 O6 [7 [4 U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* {; Q; g7 G5 G' }5 `
{
6 h9 O+ a' E9 Y3 B5 A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 Y! K: F/ {# F4 a% c0 j$ _1 T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" p( }/ W S4 F) X; i# [$ K. z }) l9 m' v a" f
*/
" T6 U# q+ ~1 V5 d- r4 y" P //////////////////////////////////////////////////////////////////////////
( {3 w, x% F# L5 A) a, f0 L break;8 T6 x+ e& c+ U: ^( E
}
. m0 }! W: x4 t. f5 u) W" l0 P }
. i& x _! @. m h6 [/ l} q% Y9 w! ~" A+ H4 i+ M- v* P
m_wndMenu.SetVisible(FALSE);
- y& P0 L9 _) s' \' {
( C% |/ X2 _7 G% z7 }% o) X r--------------------------------------------------------------------------------------------------------$ ^) G. a6 K3 m3 P( ~2 W/ x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 K. t& Y6 n7 T0 @5 V; s{
+ C) x% @+ d, |3 C; G+ A9 KBaseMouseCursor();
% U' I- E" I1 T}
% N8 Z' K' C2 _- t7 d0 t在其下添加:1 s9 ~6 c# p7 B! E+ J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' W* O* {9 L4 A1 [0 H/ f
{
3 p' V% S2 P: O% sm_wndMenu.DeleteAllMenu();
5 J$ P5 c( R. Y% Nm_wndMenu.CreateMenu(this);
6 L6 T$ t& T6 U, I, Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); N" n1 I2 d/ K* H6 X0 G
( T9 K8 |+ ` s2 |8 Mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, g4 y! r! X% v) I2 x8 o; P/ ~3 T{. n) e& c/ h) l! z$ T
//P以上级别才可以删除所有道具" ~% L; u% O8 ]! f/ k8 ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 b, d# X9 w ?; ^3 ?( U: `- O8 l}
+ \' M% x5 g: l) g, X$ wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 o2 \% _. B% }% {9 J2 ]! y) q# b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. s! J/ ?! y& Mm_wndMenu.SetFocus();
% {' V3 z$ `+ `9 [( i( g}
' r. Z8 U" p% p% s8 H3 M------------------------------------------------------------------------------------------------------------
5 S: i+ B3 D, d$ l' M% l6 \) a*************************
v* {* O- ]2 P; a& U8 MWndField.h文件# D6 j8 H$ x; c
*************************
& c/ b {8 M- [2 H$ R搜索:BOOL m_bReport;
9 H# F( @8 L( z; f4 {其后添加:
& D( j% c3 G: f) d/ \5 ZCWndMenu m_wndMenu;# B/ D; ?" d# ], T1 D/ w8 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ {- I9 c" s& F& g, x6 P
其后添加:
1 b7 ?/ C+ `% Q8 X3 k# cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ s+ ]/ o: }! n* U6 B& k( @
# ?! G# N, \# e5 V# S! T! Y1 f: ~
9 R' l1 m$ \, Q0 } |
|