|
|
源文件中_Interface文件夹下WndField.cpp文件
" H5 ]1 a6 ^ \: V m, e) \' `搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# R+ a0 o5 d0 O0 l4 e& F- m+ R9 Z% r; m0 H2 {
struct sItem
. n, J6 ^/ n' X( w$ D9 N) n{' j" L) D! S n# [9 {0 k
DWORD dwId;
( f- M9 I! j$ i0 }9 ?" sDWORD dwKind2;4 S9 W: g* H: {0 ?& Y% \! Y6 s
DWORD dwItemId;
6 L5 `1 Y9 G" j4 {+ ?BYTE nIndex;# n' C; h( h; ?# h* |$ ]
sItem(){- z" c& c( D5 a0 S& M5 U ~: H
dwId = dwKind2 = dwItemId = nIndex = 0;
) q' h# P: b% x) [# e# V4 H# {}
( z" k5 h5 S' e9 sbool operator < (const sItem p2)3 {, x/ t( u' j o/ ^ t
{
3 I- h, p9 A2 _% @+ @ if (dwKind2 == p2.dwKind2)
' `8 q( ?* K: Y4 z2 _' Y {: h! D# B2 L2 r+ Q! p* Z
return dwItemId < p2.dwItemId;
: }- r# Z3 C5 s9 O. W, d6 v }else{8 n# `% `) v1 F) n4 F$ S- k9 V! ?
return dwKind2 < p2.dwKind2;. t0 y" o4 F4 @3 x
}2 u5 m; x9 J7 C$ J
}: j7 Q' D6 {6 j$ i: \$ U! {
};6 V; ]$ g) K7 a. K! U
class CInventorySort- @* S. t/ Z5 R: |. g0 r
{
3 U- ~9 E% a$ z8 p- f8 x: [public:
' X/ k2 F9 S8 \& K9 O2 M; MCInventorySort()
5 e) ]- _% d! @3 X. G9 n, y{* H4 n Y/ U* ~# \. ]( a- I
m_dwPos = 0;
# J$ a- z6 I% Q}
( X7 e3 l" N- b# O7 \: |~CInventorySort(){}
" w; |7 |1 C9 m8 ^& a; m- N! d Fprivate:- H- b# S% i' T# j5 W: t5 Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& K0 d! R, N& I
DWORD m_dwPos;
$ T) I! U/ O, R ]6 H: Tpublic:
9 g/ q. U' R/ u4 u, @, Gvoid Add(BYTE nIndex)
. h* ~2 L4 X$ X% T6 M: j% F9 [$ z4 @" n3 b{
5 x, c: w: X, W$ s% q2 q2 z if (m_dwPos >= MAX_INVENTORY)6 |( Y8 {* F( R+ V) J" u9 R
{
" y% }5 M+ {: X- V return;/ |7 h& v3 E4 ^) d8 H
}( r+ _. J1 S7 `" \: D4 u
m_Item[m_dwPos].nIndex = nIndex;
& @6 v- W) w) Y" t m_Item[m_dwPos].dwId = m_dwPos;
7 ?7 g1 q0 v* e" l4 s. ?3 e0 m3 r m_dwPos++;; }# d d6 D6 x4 E4 W
}# c3 Q1 @3 E, H2 {. R7 w6 Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: e* s- ]$ m; |, t6 `4 B0 u{5 i5 F# t* I0 ?
for (int i=0;i<MAX_INVENTORY;i++), E9 r& g7 Q; B! ]! f; c
{( b& Q; L: @+ L3 _/ v$ h1 K& ^! X# }
if (m_Item.dwId == dwId)
1 t2 E& f$ P( M* y; x {( K- ^3 ^2 j i! o
return m_Item.nIndex;
% Q J2 c" h. \" b. F( ^ }6 Q* Q1 b) ]/ Y$ e2 Q* o
}
6 X& ?- B! [3 _* b6 _ return 255;4 E+ e! l# ?/ v0 R: j# _
}
" M- y$ m' |, T" Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ |0 |+ L( g h) y
{
J0 q$ f% k/ y9 o% V6 j/ t7 H7 K8 ] BYTE nTmp = 0;8 y* z9 N7 Y: ?$ e
bool bDest = false,bSrc = false;
1 X+ b/ j, }7 u' O0 N" G: r) x8 { for (int i=0;i<MAX_INVENTORY;i++). {: Q7 E' }' [5 O0 O' E/ \; C. j
{
7 q4 G9 G% d. k7 _7 y: n if (dwSrcId == m_Item.dwId)
& Y' O8 ]# n9 q5 Y# H) G {
# U. I, u+ L V" z X' ? //id相等 则 改变对应的dest和src
0 e* R* P4 p+ H. ^ nTmp = m_Item.nIndex;" h4 b4 K7 I& n: e& g
m_Item.nIndex = dest;, ^+ U/ M2 A N. V4 \+ r. \
}- {4 Y1 x4 e' c8 Y, L
}
1 H+ b6 N1 q! |* T2 B //临时数据保存完毕,交换开始: V: \7 t* S9 k* G% z- ?
for (int i=0;i<MAX_INVENTORY;i++)
2 G c1 v& Y! k0 _ e {# Y n+ g- z0 r: D' P
if (dest == m_Item.nIndex)
5 O' O4 E$ m% j( [/ ~" s1 P {7 j9 p# e& D2 ~1 d' ~
//id相等 则 改变对应的dest和src* P/ b4 A4 y! J; d+ j
m_Item.nIndex = nTmp;3 }1 E* W( u; l0 |$ X7 V! a) y
}
7 s7 P2 q$ y2 Z9 d' B }& Y% A) }0 e, c4 U& ~, T
}
( c6 @0 F& L- N( a& a: H};* f; Y) A; L7 \9 y
-------------------------------------------------------------------------5 {/ [# x9 f, j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' s# w6 n% x4 T( o+ T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& F8 n2 g* U- ?7 Q [紧靠其上添加:
* Q8 o) [( Q a/ M: x5 O9 q F: vif( pWndBase == &m_wndMenu ); x% E6 N9 h, ^2 V$ h% ]) A
{
/ e) {. @- a4 e% t/ V' u1 y3 n switch( nID )" \9 g5 {5 _. N w7 ~# E/ t
{
! d( w5 d4 y4 C0 X& X- E7 p( A case 2:- \$ t+ N7 h' O3 w# P1 L
{
6 D- F$ L# H& @ k } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, E1 Y4 ?9 g9 q7 s4 I0 K! j v1 J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! v* c4 s6 |- I' z8 z% F( Z {- Q' V0 [9 j2 k! J. b* J
break;* E+ m7 p3 p7 {. q- o
}7 l1 f) }% N* G* E, b3 n8 | L( e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! s G* x }% U/ d9 {2 C
{
8 n, d/ u! B6 {: z6 f+ ?. ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( L$ h' W& w3 u" @ if( !pItemElem )( z3 w% T* c5 b3 E
continue;
" E- {3 l4 D n+ S$ f O if(pItemElem->GetExtra() > 0)3 S+ N8 o7 ~0 U) a p- Q7 E
continue;
) j' o, {, l# p: b* W7 S% T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - M6 Z2 M; t+ z0 D1 s, G+ D( F
continue;9 v! `+ S8 O2 t7 Y5 E( Y ]! w* O0 ~
if( g_pPlayer->IsUsing( pItemElem ) )
5 ~6 r/ G( n# C' z. i continue;
7 w. \( }8 o3 j3 N% _8 Y w if( pItemElem->IsUndestructable() == TRUE ); Y, t6 R3 m5 }& q
{
, [6 e( |3 I6 c, v7 P. R g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 l- d3 P Q( [5 e
continue;
% \; \- ~- m; d4 i& c }# r' T2 _* ?; S% s9 w* y- K' A6 i3 d" A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 ], I- E# N' J+ c6 T4 l0 F$ J
}' l! _! s3 I3 b
break;. }# R" X' f2 Y1 V% s
}2 E) m" Y% x- j
case 1:
5 e; K" J$ d/ @- V0 J# G {
: C$ ^0 |8 v/ F" X //整理背包5 I- F6 G g* @, l( T9 K
//////////////////////////////////////////////////////////////////////////
0 ?4 z$ ^' l5 A6 J4 ]7 a* p2 P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% T2 F! n+ }, i5 R; m+ z+ ^ k //////////////////////////////////////////////////////////////////////////
7 b7 z- a8 Q. z. e //////////////////////////////////////////////////////////////////////////; t; H2 |# P: h$ k7 B5 U2 a
CInventorySort* pInvSort = new CInventorySort;" n9 C$ D- I3 u. g9 l! r* A; L9 c
vector <sItem> vItem;
4 n. r; {. j9 o3 k7 E' l vItem.resize(MAX_INVENTORY);//初始化大小: a# F" b6 b; x& n
//////////////////////////////////////////////////////////////////////////
- B; U( H( }$ _4 `" _# j8 w //填充数据
$ E% e, \8 G Z9 f for (int i=0;i<MAX_INVENTORY;i++)) y5 x# h: P% K; ^9 p' d" T: y
{2 Y9 v; r0 m* r+ @. s6 O2 D9 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& a( ?& g1 g" h5 I6 D( v+ J% L
if (!pItemElem)
# A! q+ r; a) d& Z+ y. W {
\* s2 A5 S$ D/ Z: }2 h vItem.dwKind2 = 0xffffffff;
0 L" P( O3 U& D4 d vItem.dwItemId = 0xffffffff;( N# p! y2 i* i+ j: }$ p
vItem.nIndex = i;
% |. c( Z \# d6 n/ u }else {3 e3 D5 [. i+ Y; `0 u( J
ItemProp* pProp = pItemElem->GetProp();: D6 l b9 s% W% I
vItem.dwKind2 = pProp->dwItemKind2;1 z4 @; f+ \! g3 Y7 Y: z. h- l
vItem.dwItemId = pItemElem->m_dwItemId;
' w) Q" `& ^1 ^% t2 l vItem.nIndex = i;% T' E* `# k& ?$ C: Z) ?* z& f# n
}
* q- H# E1 W, d" e! ]" A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); ^$ ?& b- A0 I1 l( X( U
}
6 S3 u& s! C, H1 B1 E$ S. b //////////////////////////////////////////////////////////////////////////' a0 f, E" ]- C; |
sort(vItem.begin(),vItem.end());//排序* \1 }) t" Z; E2 q7 X
//////////////////////////////////////////////////////////////////////////" a' A& x/ K5 S1 s
//交换4 H" `8 f1 n$ k0 o9 j0 Z
for (size_t i=0;i<vItem.size();i++)
( Z. W/ h& K* Q. M/ t# b2 f {. ^5 z6 j; K* ?; z0 N+ M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: B4 h8 ~5 ]: x
pInvSort->Add(vItem.nIndex);& y0 q+ g3 L% T! o
} T: l1 `4 e* `! j; g1 m- D% l$ {
BYTE nDestPos = 0;1 n- \3 H8 d* u/ p n% f% a
for (int i=0;i<MAX_INVENTORY;i++)* t+ Y' M% ~) A" H0 g2 X
{
. F) T# }1 w, ?! \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 x' M9 p( Q; q M4 S* A2 H9 E: { if (pItemElem)
: e/ }/ y; b# ~& I& X- V. @ {9 A) E5 D/ U6 |5 j8 F* H" l
if (IsUsingItem(pItemElem))- C$ ^. i2 [' Y1 K3 _1 M
{
6 I' \# k! E6 R; O1 { //这个位置无法放
% u* s9 @: x& ` nDestPos++;
% h @" W/ l) F6 o# ?& X }
4 A' X0 f% K! s( C }# h) G' }- _8 `6 G" s/ C9 I
BYTE nSrc = pInvSort->GetItemSrc(i);' |1 X$ g2 D7 @! X# l. R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: v9 t9 _' e/ x3 L9 v% E6 U if (pItemElem)
/ Q; v3 y% d4 Q1 `" | {
]6 ^0 d5 j! @5 L4 s if (IsUsingItem(pItemElem))9 l! n! X2 X8 a R; _
{: j+ f. c& L; W# ~8 w
//这个道具无法移动,跳过2 L! [: O9 ?: U: n' X
continue;
9 g9 I( N, @; y- _0 w/ U, k }8 R2 G+ k0 v: @ t
}else{% ?( @& u( a! y0 O" y
//空位置 不用动5 F/ t6 @+ {1 M4 T2 M4 k. Y
continue;
) h0 c) B2 [+ }/ | A$ n! R }( A V& c/ N1 D% B/ t
//////////////////////////////////////////////////////////////////////////: q9 u+ H2 H, F8 P" u
//开始移动/ U3 R8 o+ b8 b/ {& z
if (nSrc == nDestPos)- M& e, m& m# F8 p" L
{( c" y5 g1 M9 X, w b' f
//原地不动# i: n3 ~* O0 J5 i: \) ^1 |& r
nDestPos++;
6 ]4 [( {! n5 V8 k7 g# z continue;
9 x) E/ o; O0 x6 T" n: O% o+ c, k }! ^4 y( c( R: [% ^3 Y
pInvSort->MoveItem(i,nDestPos);( {& S% P% K! O& ^2 p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 C( ]# L, X2 t3 k& _( ?7 h# {5 X2 u
Sleep(5); E. M# a: J: x4 n0 [" g# Y% p; g3 B
//Error("移动 - %d->%d",nSrc,nDestPos);
& A9 H$ [& M: G5 r nDestPos++;
6 Y2 D% G* ?0 W; b9 I }
3 M F/ D' `& ^* z7 C" j //取第一个元素的信息4 v+ J1 H7 Z' t0 l1 k- O% z* { I7 H
/*- ^7 d; _9 M8 d: E. I( [9 \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ p0 f# l" b7 I% |
{9 i9 W( n' ] V. Y9 f- S! _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ d- p, A4 H! L, Z1 G" F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. b$ L4 }) q, k3 }& m- F
}
8 N7 z' \' V/ s0 n, W2 F: ]3 v */* R$ _4 e5 A K6 I7 R
//////////////////////////////////////////////////////////////////////////% ~9 a+ W- E, A7 g
break;
& A4 y/ x( H0 Z" w. ` }
) f0 V, G4 [: Q, N }
7 W6 K. M3 A) O7 v8 M& o. ~}
/ r$ F) r/ Y8 D6 A5 {! hm_wndMenu.SetVisible(FALSE);1 j- G L8 q4 e) s }. u8 X
- K# B( y F" l c+ |$ A( N5 \/ }( o9 g--------------------------------------------------------------------------------------------------------
6 B9 ^+ @% @5 M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 O! z* [, x6 s9 p{& C: R' o3 |/ M) |* O
BaseMouseCursor();; R( {4 E- w, l
}
0 \/ N7 l# B& i% Q5 O" E; I在其下添加:
0 X" i1 l6 a$ F8 i8 Z5 yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; Z8 p+ ~8 B% n) N% G{
# C/ _, y1 B) H. F6 _* Wm_wndMenu.DeleteAllMenu();) w3 f' g6 S6 g. e
m_wndMenu.CreateMenu(this);, }# ?0 O' f$ |$ E- k6 Y! p! L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% j0 A4 O4 a# r: T2 j( z3 X1 v! A9 r/ P0 N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 o: S6 _& {8 B/ S7 Q* P, k! b' A
{
! I; ?& o/ ~& ^2 [ U5 p1 G7 h //P以上级别才可以删除所有道具
1 X: F4 b. k1 P1 `/ n m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' a# @) Y' J' [! q/ A- L
}
: A. O" L0 y) I/ X) Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
W# Q" p6 `$ am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 T& Y$ B- X0 @0 u2 Mm_wndMenu.SetFocus();- t" i: ^+ a6 a* R
}6 ^8 ~8 [( X/ t. u* V
------------------------------------------------------------------------------------------------------------1 W4 x6 U7 C5 i
*************************1 s: x2 Y1 T0 w) o7 X6 k
WndField.h文件
* B6 p0 l& @; j0 Y5 t, I# Z*************************
6 o9 G( b8 m5 T" y6 W搜索:BOOL m_bReport;
! J% b7 I% b$ G; H+ w其后添加:! Q, |# w4 x) x8 A! U- V
CWndMenu m_wndMenu;& G$ h3 K4 a9 g* B, L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 W. ?! E) D5 v" I# ] y+ J1 Q其后添加:
M, ?2 v7 f& k8 D/ K9 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);$ ]. D" _3 U$ K, Y- X; }+ z$ o
% c( V- L! }0 \
7 x- n# k# H$ w; w: H: D6 x; w |
|