|
|
源文件中_Interface文件夹下WndField.cpp文件
/ b; T1 P4 K# p* y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 P3 u7 M5 e) X+ y
/ U! V$ O" D1 W' o
struct sItem
2 J1 `. z0 o5 Q( M+ t. d{
$ p9 P- n5 ^; A* R [& lDWORD dwId;! M& v$ X$ w: B% z) u, ` N
DWORD dwKind2;
+ X9 Y/ S3 q1 {+ S$ G EDWORD dwItemId;# j, z$ a/ q0 t a
BYTE nIndex;
+ p" T6 S6 ~9 \; K, bsItem(){% [3 Y' ^. ]/ ~8 P' D
dwId = dwKind2 = dwItemId = nIndex = 0;
' f& D- _2 W1 ?. N/ E}
5 g# A1 W4 {* N. ubool operator < (const sItem p2)
9 d% k# E7 z6 b9 \1 K5 P{! i( }5 d1 T. n2 L
if (dwKind2 == p2.dwKind2), G( U q2 Z% D, I: C( C; {
{
, x" B1 r( d# W7 w# \. V1 Z return dwItemId < p2.dwItemId;5 n5 @5 c- |/ `6 F! U$ G, F0 U
}else{3 Q" k7 H* a. `& k4 N6 X" o" X0 i. `# \
return dwKind2 < p2.dwKind2;+ b+ x( F* r( { H3 e0 h
}
! Y% ]: Y5 L: z3 X' @}- z$ T' O3 T* D
};
: }1 }8 u( K, N7 e! vclass CInventorySort/ \, x W5 V$ B' P6 _
{/ [2 w0 T4 k0 N
public:
6 X1 G% h$ l- d+ ACInventorySort()
6 ~. A2 N2 L5 W; F; W' m) f4 P{) N$ ?9 V# y% ?( q/ ]6 H
m_dwPos = 0;
0 D/ ?6 L; o" j! L0 X}
% Z% J q4 `5 n( L+ m~CInventorySort(){}
. _' J6 m, q5 \2 Z# O1 F1 A$ o8 [private:$ H! H% w8 x% _, T; s+ v' V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ D$ n! c a( O [' g1 Y
DWORD m_dwPos;
0 v8 t: ^7 G& ~' k6 w3 ]" @public:: f9 R+ T3 n) Z
void Add(BYTE nIndex)
! ^5 @7 V) p# D9 F! H y) g7 |{
5 W6 h3 b$ d1 H0 E- [0 ?% \) |( g if (m_dwPos >= MAX_INVENTORY)5 o! n* G9 h2 n7 ~
{
; _: T4 g- @3 M& O, r return;
L& Q5 C& N; R( R: Q" P }( F' ?( I* o( V8 ~4 r `
m_Item[m_dwPos].nIndex = nIndex;
B; I" e/ Z! s' x6 @/ W5 O3 T m_Item[m_dwPos].dwId = m_dwPos;
' ~/ T; T8 j( W" s9 J: Z9 j m_dwPos++;
" f8 k0 o: P* Z& V% L) i: m- q s}6 H0 B) f% ^ K3 u3 Y- ?7 ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 O$ n0 ~" A6 W; S' u5 o
{3 B8 Q- S: g1 _3 M! F2 U
for (int i=0;i<MAX_INVENTORY;i++)- _( p" D. ]# R* F
{
/ @7 @5 r* V# _" T4 W: o' y* x if (m_Item.dwId == dwId)- y9 l) X: C7 Z
{
" N3 S; ] D( F; O1 |3 h return m_Item.nIndex;$ ]; w) }7 |* g# M
}% b0 @: ?6 V8 D" g: K6 U
}
/ D/ N9 l8 |0 O7 j; X return 255;
' U9 g2 p8 t* N( y4 b. c}6 N% o2 r' n( o4 H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, d$ t* H( N9 H6 O* q{
' Q# {8 ]( x3 {" U1 q5 C BYTE nTmp = 0;
5 Q/ g+ F* N( z2 X) e" Y bool bDest = false,bSrc = false;
1 |9 v( F# `) C" a( W for (int i=0;i<MAX_INVENTORY;i++)! M3 K" `* ]5 w3 t9 W p4 z
{- |4 M+ @% i. ]
if (dwSrcId == m_Item.dwId)) S( H$ [1 W, p" a+ l7 `
{5 L2 F9 E1 m: X5 s9 l1 c P
//id相等 则 改变对应的dest和src
# Y& P. Z8 m' c( n6 E. r* M6 c6 \ nTmp = m_Item.nIndex;
8 T& s G* x6 a; f% \2 n5 H m_Item.nIndex = dest;* b4 Y- s# @1 E' y: _8 I' o
}
2 ]! P0 n) C6 R( t6 K }
2 h* ?0 H r7 x5 f: U, E //临时数据保存完毕,交换开始2 R P( G0 J0 m( c3 r% M
for (int i=0;i<MAX_INVENTORY;i++)* D4 }8 \$ z0 U6 F# ]
{6 ^1 s5 }/ N P
if (dest == m_Item.nIndex): x* t- v6 n: m
{/ ^, i: T5 f; s; R& a" `! K
//id相等 则 改变对应的dest和src
8 L- D+ D7 t( E1 K. Q m_Item.nIndex = nTmp;9 K1 ^' _2 h* L
}: u9 `0 O: {2 L+ A+ V
}
/ r) v( W5 C; g" r5 }5 U! ^" r}! ]3 H g1 r. L+ N: C" {" o
};; ]1 R$ r6 c/ \- S* D+ u# Y
-------------------------------------------------------------------------
5 p" W; p! a1 W& u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 w7 E6 {# r/ \& F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 r0 ~9 H" Y: w! h& M, Z+ L+ Z
紧靠其上添加:
+ y0 B- V4 N1 z) |4 [if( pWndBase == &m_wndMenu )' k2 ~( y( x0 A0 T
{
' l2 C1 [9 J9 h! e. F switch( nID )
& L3 A6 X% r5 ~* a( @/ n- C9 F {
% r: M4 h! R' f$ }" {3 c; { case 2:5 M; k& }; f8 a' D H! y
{* T; z9 `) o* f- @3 x* R+ V! r! d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 |) Z, ? A# k3 _3 Y T* B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. v% z I# j. I+ H, Q {
0 B. E8 {6 I- p+ w. d' H break;
, V* F* l1 `+ S3 c0 R$ y; C }
0 s- W0 V! O+ ?1 s" V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ Z. M& W- v" s. [ {
P9 Z, D; m# P7 O r6 q ]/ j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! n+ s; Y! y3 p; p& a/ c
if( !pItemElem )
$ ?3 `0 t" U K, \ continue;
9 ]/ ^6 r) o* U) [9 m) u g m if(pItemElem->GetExtra() > 0)
* _0 _' j& S1 ~# D2 K continue;
2 g- p/ q* A3 n* t8 i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" j' S. E. \2 x; g1 G4 v continue;0 A# }" j1 r- G* v
if( g_pPlayer->IsUsing( pItemElem ) )
- L! ^. I$ P" g. D continue;
' J' ]- f/ ^* y5 c if( pItemElem->IsUndestructable() == TRUE )# ~1 m0 |" I" x: k# V# D
{
1 F, j1 l; X: @' N: ^- U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( S7 P- S2 j. i1 ]4 P
continue;
/ L x7 @0 ^; I( k0 n/ U# |! y }4 H$ K8 Q( ~/ _4 n) _
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. C3 [0 v+ k$ _. y. Z! u; K6 e# w }" M0 o0 w8 H, r
break;
2 z. _" ~. f5 e4 b$ M4 p; t }
% h# _ Y$ B- x! H case 1:9 O- B C3 W; C8 o
{7 V4 x! x4 \% G# b7 z: ?+ @
//整理背包
) ^; S' s( m+ i5 Y6 \ //////////////////////////////////////////////////////////////////////////
& R2 q, }& L: v" H //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 D# U; Q- s0 S( _; v //////////////////////////////////////////////////////////////////////////# d0 Q2 o; G- e
//////////////////////////////////////////////////////////////////////////; M, [! R% w! j7 a. |( u
CInventorySort* pInvSort = new CInventorySort;
, Y0 z L2 K) s9 q vector <sItem> vItem;
3 s0 \+ ~4 G2 F; a2 V vItem.resize(MAX_INVENTORY);//初始化大小
8 m2 a1 o E9 M0 n9 ^* r i9 p' ? //////////////////////////////////////////////////////////////////////////
* M- _# [8 @- U- {) r; `/ e- ?# b //填充数据; C. D* G; H" A; ~. o8 V% \
for (int i=0;i<MAX_INVENTORY;i++)
( w S- u9 M4 c' |; { {5 N/ }) ], M, C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
l7 m; O" ` W$ ^4 \) x; r' E) f7 G if (!pItemElem). v* ^% U4 }3 d
{
+ c4 o- j @" e vItem.dwKind2 = 0xffffffff;3 k$ E8 F6 d! j7 l; E; Y0 J O
vItem.dwItemId = 0xffffffff;
$ w% J' I, M# [# b7 Y% m vItem.nIndex = i;
]' f5 ~& g1 O }else {
) Q+ F) k$ {) ?1 u! c9 t( ? [) C ItemProp* pProp = pItemElem->GetProp();# i4 H" A* Q1 G% A
vItem.dwKind2 = pProp->dwItemKind2;/ m# y4 }' ~& \+ \# W9 \3 L
vItem.dwItemId = pItemElem->m_dwItemId;
) m( d& C: j' r) _% H9 m( Z. { vItem.nIndex = i;
- n# q6 Z! X- X: M2 ?# Y }
% E$ L! h9 S3 Y5 ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( h$ l' S$ Q0 _- m/ J4 x% r) K
} @# }" f1 \, T: W% Z
//////////////////////////////////////////////////////////////////////////2 o1 W- p+ c s
sort(vItem.begin(),vItem.end());//排序! L2 N9 Y, t' X4 |4 p
//////////////////////////////////////////////////////////////////////////
. ?/ N8 d2 q9 ?1 M/ v0 a //交换 j4 n, f' ?: ]# i- x
for (size_t i=0;i<vItem.size();i++)
p! R" H9 E0 \* X2 ~1 J( | {% ~. X% e# h# ?; l. ]$ m( R4 x7 v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) f1 A2 l1 v* f0 A H3 l9 @ pInvSort->Add(vItem.nIndex);2 E5 p- z) x. [ C$ e \
}! p8 W) O# i) b a9 f, d- _
BYTE nDestPos = 0;
$ d* N9 z$ H3 w$ _2 Q5 \/ ^" s1 M for (int i=0;i<MAX_INVENTORY;i++)# G) i3 i+ j1 |- O' H9 ^6 I
{
8 b( k5 G, o5 }8 O6 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* c% U1 z }8 I3 O( N- ] if (pItemElem)
9 G% d- l4 i7 i5 w, U {
5 `$ c o, N! n. n9 J2 [+ _ if (IsUsingItem(pItemElem))3 X( V1 U- [* F- K) S! c. ]
{
5 j+ V( T/ f0 E3 \" x7 \ //这个位置无法放# W' o! J' d8 h; ]
nDestPos++;1 {$ M2 I% T: r+ ^( X
}; c( v% N: U: x+ Z
}
, X7 t$ j- w# v2 b9 M2 g- d2 c BYTE nSrc = pInvSort->GetItemSrc(i);
. Z. ~" Y/ @' d/ `7 @$ ~ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' v/ v7 |) O0 s) R1 ~
if (pItemElem). W* {* C0 ^2 I ?$ p7 _2 o
{. m4 X8 x. n! g0 X( `: k
if (IsUsingItem(pItemElem)); F+ F$ Y* C! Z3 |3 G
{
2 z# _* o; |! C. C' P6 h3 I6 T) }5 l9 N //这个道具无法移动,跳过
% [6 k4 ]( w& u4 Q; h1 | continue;
( m0 {1 K2 [) X3 [( y# O5 `. O }
" A$ O6 K& ]3 I$ g6 P1 \5 z }else{
( O, o5 G2 b8 o3 l4 f) E' Y //空位置 不用动
, I2 m+ @ c/ W5 O7 Q- J continue;2 \' W e6 P& m% f E
}$ m4 ~. A5 d/ `/ r9 T
//////////////////////////////////////////////////////////////////////////( P/ M2 o6 I4 r, v$ H8 x d7 O
//开始移动 m( ~7 m4 w N/ i
if (nSrc == nDestPos)1 q" `8 S, C8 v8 |+ _
{
5 S3 d, R* d( H2 h //原地不动, a+ K6 B+ z) _; `6 g/ p( ~
nDestPos++;
( s4 A/ e* G; Z" i continue;) @& O. m) t; e- B- s( m" y
}
0 ?# B9 c4 h5 E pInvSort->MoveItem(i,nDestPos);
9 s3 N( \; T" x8 o9 _6 { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 x5 i' h6 h' H# ]! w Sleep(5);
& i( I% W, K! O1 L: h/ N //Error("移动 - %d->%d",nSrc,nDestPos);6 E$ W! j: a4 d/ Y# ~
nDestPos++;3 t6 K" w% V; V! m+ N) ]8 @" e' a F
}1 q' B, v/ H' L3 D9 B) c
//取第一个元素的信息8 k7 S3 d' b* ?& c
/*6 ]8 b& X, F* `: p, y r8 _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 ~& s$ Y; M3 [0 @: }% @
{9 ^9 J; M6 e/ S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 g& V, g6 W$ m: `# h/ J) A$ T7 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" y0 V3 }4 }7 \: U' B3 ` }
( ~, B: {7 O5 S */ C. e0 q8 a$ Y- Y" V G
//////////////////////////////////////////////////////////////////////////
# Z6 `" O) a6 p! e/ P. M9 [9 r break;! ~' Y( f" j7 {* r4 I; N! |
}5 I9 W7 p/ D/ U0 Y* J0 y& U6 y
}
& _- g, E& }# P% A( E}- \) J) J, J9 n; L% ?& A& N
m_wndMenu.SetVisible(FALSE);: p4 ?& A8 n! J7 l. R6 C
5 p" n) Y* @0 k! l1 J
--------------------------------------------------------------------------------------------------------; Q9 n6 Y( K; v: Y2 n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ z! b, a( [# r/ e& N3 a
{
! ]8 J" V1 n* c9 pBaseMouseCursor();% a5 U" U' }( L3 t
}
( O, g. h% Z: c在其下添加:
' p- {# i) ]( a9 ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& P0 [* D! `, v' p{
; _6 e z! G0 j. ym_wndMenu.DeleteAllMenu();! y% e; W4 ]! p/ G% m
m_wndMenu.CreateMenu(this);* E; y: @& n0 Q( Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" o4 _$ f# G2 J0 J9 b2 h
: V- e1 }/ H2 w/ O1 p$ {& J) }8 fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ }6 F# Q. Q" q
{
% h/ P: c1 h5 J6 N7 } //P以上级别才可以删除所有道具4 u: s7 o4 b# j4 g( W2 j3 W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 n0 V& r9 C9 z# ~: { O& l
}
0 F+ n7 g5 k. n& ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: i( R0 o) c. ^ c# B9 t1 R) m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; _+ g& i) _) d+ A, j3 rm_wndMenu.SetFocus();
8 T2 k% y9 y4 R: t& n) n6 A2 e}
- @ m, U- a1 q! r% n------------------------------------------------------------------------------------------------------------: b- e$ K/ ~" _# q0 ]' K8 z! t8 Y
*************************1 G- [- z" {' e6 R
WndField.h文件
4 J( F0 t5 @$ b& @. B*************************9 c4 z- z) m* X
搜索:BOOL m_bReport;8 _( [3 v( E0 B& z5 g5 E
其后添加:6 ~& Q/ N1 m v2 H0 U; D
CWndMenu m_wndMenu;
- V: I+ E5 e( J2 y% g9 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( ] W0 {2 B# m4 B5 w! g- [
其后添加:
- y. \" e* m7 N7 Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 q; [5 b2 \# F3 y) _# p* ~% n! @6 P2 j
4 K) b: K* Q5 T9 C |
|