|
|
源文件中_Interface文件夹下WndField.cpp文件
- b. h5 ~6 D7 s8 R4 g! h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# b+ E$ N3 N1 v. w
+ I5 ] Y: r7 U: a
struct sItem
7 |- O2 N f. C. l) Y6 O* H* {{! r) R7 p: G- b. A4 G$ ~; ?* P
DWORD dwId;$ w% w1 \& S6 R9 R' t
DWORD dwKind2;9 h9 P- p" C Z5 e+ ]+ b7 k# \- ]
DWORD dwItemId;9 A' o$ n; ]- g2 u O4 m
BYTE nIndex;/ ?5 a% }! `* u% ]- m6 n* v0 e
sItem(){
6 {. Z h; D( S# J+ t4 _ dwId = dwKind2 = dwItemId = nIndex = 0;
9 F+ x/ T. v& G+ M% e! ^}# t( `. `% s& s B( [
bool operator < (const sItem p2)6 O6 s( h x5 p
{
) @/ h5 R+ Y# P" r0 D* v% p' j if (dwKind2 == p2.dwKind2)
+ V; d3 M4 u6 D% B k% g0 P {6 x \$ X' y; a) H
return dwItemId < p2.dwItemId;' y, {$ p( V7 d6 ]7 C! n( ]
}else{
# ^! m& a* p% a# D; x return dwKind2 < p2.dwKind2;6 Q5 a! m; q+ D _/ U4 v5 U' q
}9 k: X& s I+ P4 W
} W9 f: C3 c4 x& h) S" `
};* M$ I5 G7 r- H- d% Z& R# j
class CInventorySort$ y5 M& O3 N4 N) \$ J. o
{
( @/ D+ o. q& D) b, ppublic:9 x% r! y% y* ^6 K1 T: Q
CInventorySort()
9 P0 M2 ~ s* k3 N5 q w{
3 {& W8 P/ ?5 \4 F m_dwPos = 0;& |! b4 d1 S2 S4 }$ k
}: L8 Q6 l) E6 x4 c" t
~CInventorySort(){}
/ `" u0 R4 c% Iprivate:
1 n' G2 C& L# C; S5 I1 V. F8 wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) Z7 C8 q4 c' `- n! L) L8 l: s% [" tDWORD m_dwPos;" W5 `% L9 B* ^1 [4 w/ U' \
public:
! Y$ o/ R& ^% T, H* a2 h. svoid Add(BYTE nIndex)
' v- s {# _( u* g{, E+ i: w8 A4 Z( G4 T/ i
if (m_dwPos >= MAX_INVENTORY)
5 s1 S& I/ u- D {
# d' [. f& a. T T return;
6 X& u6 S1 r) H% f5 Z* ?9 a+ U( ^ }$ c/ T( J2 D) m' ^
m_Item[m_dwPos].nIndex = nIndex;
( K/ d, s5 |0 R$ D m_Item[m_dwPos].dwId = m_dwPos;
5 {. n. [/ a: M9 j1 }4 W m_dwPos++;
. Y+ G0 \9 T0 Q2 Y9 ]$ h}, q) S8 k& V* {( c- w5 l. A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% c w' \0 h! j
{
% L; `' R% C, h9 V# a for (int i=0;i<MAX_INVENTORY;i++)
$ e% l2 D) i; s F/ K& n9 ? {
6 u7 q. p" m' k z+ O if (m_Item.dwId == dwId)
: b# |3 l& S( h+ v {
3 }* R+ p! o- B4 i, H return m_Item.nIndex;
& F( ]! E: b3 _- T8 }8 [ }7 q8 c1 a9 I6 N4 f4 G! f
}+ I" i D9 D m: M
return 255;$ i1 A8 J! G- [0 k4 v& |9 j
}
* _# |: b- f, d. }7 K) ?; R+ Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 x1 @# m9 \& ~ Y t0 M6 c{
! w2 e. z: D; Y$ x( [/ w* v9 V BYTE nTmp = 0;
1 H6 l: B: k# W bool bDest = false,bSrc = false;
6 C: q& ]5 j9 |+ v/ k7 R3 C for (int i=0;i<MAX_INVENTORY;i++)* Z; M: u% b" r6 M
{
' N f$ V \8 w if (dwSrcId == m_Item.dwId)/ q; U" G5 J7 v7 Y/ q( |+ X5 h1 s
{
! L& y2 v& _& d, J4 U/ z# k //id相等 则 改变对应的dest和src
! ~) c, f' O9 @% C5 d& ` nTmp = m_Item.nIndex;
" W+ J) X- k- S/ @1 ?4 Q& Q* M K m_Item.nIndex = dest;
; G4 \- P8 @/ w }- G j8 s5 w1 Y/ P+ P' y
}
' ^$ k3 u' _3 V7 d //临时数据保存完毕,交换开始
* s7 ]. h9 S2 }, W6 q, V for (int i=0;i<MAX_INVENTORY;i++)
5 J, b' o/ c8 \+ } {3 ~1 }- p! Q' ?3 `5 k
if (dest == m_Item.nIndex); ~; z, R1 ^; W$ X: j! X- T( Y
{
6 M8 S. n5 T0 F2 }- G* ]. B5 ]$ p //id相等 则 改变对应的dest和src+ u% K- n9 X$ _& o
m_Item.nIndex = nTmp;
- {) g$ `8 |9 T$ ?# [8 X4 e, f; h }
7 G# u# L7 q7 E; d: [9 o5 _7 E }/ B5 }; H; P: g K1 h
}
3 V& o' `6 d) T% n/ ?}; V& z z! N8 [2 p0 u$ @
-------------------------------------------------------------------------% t6 ^1 ]/ b) q% J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% R8 ~9 _. k( }7 F& U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& _- ~' c# \ b' T7 D. d, b紧靠其上添加:5 [6 H5 P7 ? y; g
if( pWndBase == &m_wndMenu )5 n& V+ [8 ^+ k5 x4 n
{/ }8 |4 x6 W3 y1 c8 [. P+ I8 v
switch( nID )8 N$ b; c- ]9 R3 R
{( R2 `. v6 F% s/ m ?$ n
case 2:
8 N7 H% K) y9 Q# w0 Z2 ] {1 J, @* U, b/ c. F( l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 s7 ?1 s# I9 w6 x. o3 b% C
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 J s }& W( K8 C {
2 R2 P3 G/ X+ L. J& }0 [ break;9 P+ A" p" o, F/ J
}
4 l" K; |7 F5 i- x8 U+ b; Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 d: F( B2 }2 u3 o8 @6 C5 R {+ k6 u& z0 H6 P. i; m8 p) N# P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 ]/ b- C: W% \6 a2 [5 j) x
if( !pItemElem )
! n3 K4 r2 R6 o2 k3 q/ i( ]6 H8 J continue;
" C. g% p0 q& H% h if(pItemElem->GetExtra() > 0)8 o* [! t& n5 U/ t
continue;8 {. w9 J" I$ [! r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 q; T3 I! y1 Z0 m) m continue;
8 L* N$ v! b$ X* y2 m; D+ o; c if( g_pPlayer->IsUsing( pItemElem ) )) D1 a0 z) E9 M. P. z
continue;9 k8 s: X; B; c4 G; S9 a; x
if( pItemElem->IsUndestructable() == TRUE )
. _: b d" M& N( u2 H {$ F: x9 s, E5 M h, F% m1 O1 q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 c1 v2 { ]/ g9 c5 F continue;1 @7 j8 _! {4 R k H
}
2 W7 y- w) ]& O g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 q7 w# b3 w& S/ U }
2 x0 z" U. [ D/ j break;1 u- q6 B; N, a+ ~, H. e# V$ L) [" g
}4 O9 @# U& x! i- _* T" h. z
case 1:
" K8 q2 p" M3 U' A {# \7 [4 N0 T! D7 B& o7 C, t# @
//整理背包/ B8 w& L& V, M# D! {+ V
/////////////////////////////////////////////////////////////////////////// x1 c# }0 Z5 c0 v K) n0 ^0 f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! ?% j5 T5 K7 l9 [; r* h7 F g& o: w
//////////////////////////////////////////////////////////////////////////
/ h, A# g& x: W6 M i# I' i; L //////////////////////////////////////////////////////////////////////////; X u! C: `! l$ l$ m4 |
CInventorySort* pInvSort = new CInventorySort;- C7 g' D2 {9 K) m/ @
vector <sItem> vItem;
; o4 ^3 w4 K7 E; x Z+ P6 p% A vItem.resize(MAX_INVENTORY);//初始化大小9 M& L# ?7 d; g/ v z
//////////////////////////////////////////////////////////////////////////
" z J' y& O. l2 A4 e+ q3 W! D. E" u //填充数据% k: O' g* k6 E. F9 a
for (int i=0;i<MAX_INVENTORY;i++)$ U; e& ?* R; D
{
9 M' q8 \6 O+ l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 g) d4 ~; q0 K3 |8 D; N$ s if (!pItemElem)% {0 E' @- C2 L% G% J
{
7 n; v! h# k! P! P1 d$ N vItem.dwKind2 = 0xffffffff;
( `7 k- Z* a A: R: u6 U vItem.dwItemId = 0xffffffff;. T7 U4 R/ H4 E# J* `# m
vItem.nIndex = i;
2 d, E* Z% N5 L* G' F( M l; @ }else {
' f$ J, Z: x$ s ItemProp* pProp = pItemElem->GetProp();
$ o) H0 e! z. Z- }) G# Y2 [ vItem.dwKind2 = pProp->dwItemKind2;
# X- z3 J6 v U- [ vItem.dwItemId = pItemElem->m_dwItemId;
8 v' p! H# n6 f, p vItem.nIndex = i;
: Q S4 D7 e3 ^$ I8 H }4 F+ q( O7 i7 S0 \& `, h" T7 I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ g/ P5 Q4 U" m% H2 ?0 q }
$ c, V" w( {7 k* J //////////////////////////////////////////////////////////////////////////
; Z' _6 {. w3 b sort(vItem.begin(),vItem.end());//排序: ~# N& l( }9 q$ W2 S0 n) U
//////////////////////////////////////////////////////////////////////////
" ]( o& T9 H3 k1 H //交换
$ t! b* \6 Y1 t# |" X for (size_t i=0;i<vItem.size();i++)
! i! W: ~9 S5 b W- n {7 ^- I% F' W5 e- W
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ B5 h3 b, `0 u pInvSort->Add(vItem.nIndex);
9 D8 {1 o! ^8 V3 i. r7 |5 L- M* q }/ e6 G. S; A% h$ y* d$ [% b
BYTE nDestPos = 0;" S6 _/ u1 `5 @% z" h
for (int i=0;i<MAX_INVENTORY;i++)
0 ^0 Z8 g1 q1 ~3 s; L) r {
9 _6 a' |+ c9 X% w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' j$ ^7 |& E6 q8 I
if (pItemElem)0 t& J. ~; Z( Y' x7 q+ D; {
{
' @ i% U6 T; M$ u& u* X5 U if (IsUsingItem(pItemElem))1 Q# M8 \6 t# m* n
{! I x$ @0 T: X6 N/ a) P c3 b: q
//这个位置无法放0 [4 l& @7 V2 |0 i8 ~5 ]" V
nDestPos++;
. r5 i0 ~, J5 ?; ` J7 q }" ~! @9 K( G b# V" Z
}
2 v* V; p, O# \* o/ q/ A BYTE nSrc = pInvSort->GetItemSrc(i);: \+ _5 f7 l5 X) l2 L( A2 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# {8 H9 m$ b4 ?! z5 u if (pItemElem)* _, b% m1 k1 K8 o
{
$ A( g0 V& D6 C: @! H if (IsUsingItem(pItemElem))/ H- G5 M( \ j0 V9 `+ C: Q
{/ E! [0 K* {* W# P
//这个道具无法移动,跳过& V) f: }7 [/ [ y
continue;: M9 B" ]8 [* X/ s: A* M
}' F0 b9 d; s: D% d
}else{
6 u( E1 H$ g9 v$ E- B" k2 a6 I# Z //空位置 不用动) Z5 T% I" Q5 s1 X% l, `
continue;
- N3 O9 w/ L- M/ v' s9 A( ^/ ~/ ~ }5 F; U4 w/ W8 W ~8 N- L
//////////////////////////////////////////////////////////////////////////
7 K* ~3 Z9 L. q3 G' r //开始移动
& B0 \% B8 l8 j/ l3 M( c. [ if (nSrc == nDestPos)
- d9 I- a3 y( |# l' ~' i+ R' t {
' j+ p Z5 ~- O6 d5 v //原地不动
1 S" N; C0 Y6 d- J) b. Y: Z0 q) @ nDestPos++;! _7 H( A6 c* i' C
continue;1 B2 f7 C8 e" u0 a! [, `0 H
}
& x/ L1 A/ A) l; n% f0 Z pInvSort->MoveItem(i,nDestPos);
! Y/ t. G3 o* G3 f4 N9 @! ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! N: W0 `9 S/ s9 |7 ^ Sleep(5);0 M8 j q& Q! q+ d) Q: \
//Error("移动 - %d->%d",nSrc,nDestPos); ]* H1 M2 Z: ~1 V$ ?0 q+ n4 a5 K0 K, a
nDestPos++;
2 e0 b/ E# E, t7 h2 E4 t5 m }
/ Y" R6 e) u6 V+ z$ O //取第一个元素的信息
, E% B# M* B" e! ] /*
7 V% e' M7 @* t; t& N0 ?7 Q% O& h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 V3 x Z" L, J m4 R4 _ {
; q0 s. E& Q7 O& p4 c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ V7 s; x8 H0 ^! u8 n. [ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 M1 r$ z! }+ @. f- }4 q/ G7 F
}' C2 m' a2 @0 \5 X
*/
- F# C0 ?8 A7 _* B8 ] //////////////////////////////////////////////////////////////////////////; T; }8 [ W4 ~' S
break;$ H: k' d% p( [9 F; w% t5 I
}
' E7 N( I' W# C# @% t0 j7 N }
a( f7 A4 T" q* O' m. D n}
$ Y6 _+ w- Y$ @! s8 Am_wndMenu.SetVisible(FALSE);4 ~- Y8 v& g3 e' F$ Y5 u
$ _* M! f- R( a* |4 u' h. y& O/ @
-------------------------------------------------------------------------------------------------------- f3 @ Q: l1 Z4 |" b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" L3 D2 T2 X0 ]/ l, H( I{
$ R, ]; w3 C1 {4 ?BaseMouseCursor();
9 @% A9 M5 `& v: g6 N' S}
6 F- Q9 x$ P* v+ L4 w在其下添加:/ c8 z4 [4 i# r3 B0 B# j0 S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ G' E* p/ r1 Z2 A4 F
{1 }2 r, p( I7 q' ^6 t
m_wndMenu.DeleteAllMenu();9 [- h8 [) ^$ g( h. }0 `; q
m_wndMenu.CreateMenu(this);6 @( r) t# Z, { Y" S% F6 c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 D! ^9 M# m/ @$ U- s9 V
8 s, i- S' l- _" [/ {$ H) P# x/ J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ h3 @' Y5 ]4 ~2 I8 x
{
. g$ d1 J& M1 F* [: h& j5 \ //P以上级别才可以删除所有道具* z, b; r9 v5 _$ u; X# q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ d) J! I' F4 i; E# I}5 k" R; g5 A) o5 S D. }$ \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# U. ]; a$ Z, @" z. K! v dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 @- U. \5 C* i& K
m_wndMenu.SetFocus();
5 n* |9 f. G4 K' Y}
( W" R/ b/ t# c' \------------------------------------------------------------------------------------------------------------; O5 K+ G2 \8 { e2 l* t) E
*************************
. ?1 U. w8 i, |WndField.h文件
! }! a/ ~; y& G8 G*************************
' ^1 F: b( ]; S; o搜索:BOOL m_bReport;( H. p& P& B9 K) s2 s
其后添加:
& o; M4 `! U1 ~( ^# ICWndMenu m_wndMenu;2 g' C4 ~& ]& T& o0 S: T6 ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 A. p, e9 J# S/ g4 C其后添加:& K9 R1 i5 d( d- O7 B9 @
virtual void OnRButtonUp(UINT nFlags, CPoint point);, M5 H4 o: U' O0 q" a
* ?! y; q% p9 E, Z- P" j0 b: w/ I' j
|
|