|
|
源文件中_Interface文件夹下WndField.cpp文件
3 W k7 h8 y3 Z m+ v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 C1 c) B! T& S% h% g) b v" c% Z; s- H. C% ]( ^ ~
struct sItem
& q$ Q0 g. M2 {1 w{
% j( B/ P( A9 M3 i/ }DWORD dwId;
3 ]) |- O6 N) s! j- R% ?DWORD dwKind2;. C% \3 o6 C6 |& A
DWORD dwItemId;5 u2 m `9 W6 V3 s7 X
BYTE nIndex;
0 F j- \3 x5 c& b* EsItem(){+ q% ~: Q! Z4 Z9 G
dwId = dwKind2 = dwItemId = nIndex = 0;
! a0 Z4 j: [6 |/ _ w3 v! E1 P}
( b4 v; m+ Q1 D, l/ |1 |6 @bool operator < (const sItem p2)
- y5 ~- v4 c& |6 N; {: ` b4 X{: P* L% M: n9 ~0 n$ M6 p+ E* Z, |
if (dwKind2 == p2.dwKind2)
; t1 p9 L& P8 C) |6 S* m {
. L/ p9 w/ p( G# L- T! @. `9 n return dwItemId < p2.dwItemId;
; b) O8 w+ G2 y$ r }else{+ E8 U _$ p, P/ ]$ t
return dwKind2 < p2.dwKind2;
7 `% s( _5 a9 D# B( R }; W/ R+ v( f2 t7 C& p# s7 Z) E/ Q
}* t: M/ g5 S9 X0 l/ \: e" b' U
};
# p: ?" W- n" C9 o `% K9 W/ @class CInventorySort
) }/ a# G) t! {/ |{
+ L, x0 o' O+ U- @6 Wpublic:9 E- ~2 r2 f) |9 q, D8 ]
CInventorySort()7 W' { m. x; r4 o
{. {; s5 {5 n+ }& k' q+ A( I( N) v
m_dwPos = 0;
- @, ~# v" t+ l5 _+ y6 I6 Y$ @}' E: A9 H& c% j5 P7 w
~CInventorySort(){}% n3 U1 f. x) \ ?. ]5 b
private:
: P4 \; q) o1 n+ }7 GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y- |! H4 k; Z' {3 F( s5 VDWORD m_dwPos;3 O7 ~, d* `5 f0 ~6 R! S
public:
. h& \ O# K* R/ c2 @& ?void Add(BYTE nIndex)+ x) C1 t0 ~6 b+ M
{
; Q( C- ]0 ~1 c% i+ H5 w if (m_dwPos >= MAX_INVENTORY)
8 q& r+ M9 V$ P: H9 M {+ i+ C- s+ P& i% ^ M1 E, A
return;
% B- g9 t( }- `1 K4 @ \1 T& y }
. [- |- |8 o( ]/ ^ m_Item[m_dwPos].nIndex = nIndex;+ Y! u& _9 E5 u' D' I
m_Item[m_dwPos].dwId = m_dwPos;
' Q; \# y, E h$ {1 s G2 s+ T m_dwPos++;" K( ]/ r) e/ e8 g2 d ]' e1 a$ p
}
9 q' S. w& W6 x. s* }; Q6 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 S- S1 g* [! X: _, R{% G0 O& K H* w) A6 f- R1 O
for (int i=0;i<MAX_INVENTORY;i++)" ^# o% R& {- h2 Z/ t4 g. t" j
{0 F: Y- a" j' j1 _% u; T
if (m_Item.dwId == dwId)9 [4 s- \% v, C3 q
{/ n" n" s1 W& `, j
return m_Item.nIndex;
- X- Q& T- U4 } d4 h+ X3 f5 m3 T! S2 j }
2 N: D2 X$ Z* J" x! Q# W }8 b+ z( B% I5 h6 _( K/ m+ ]- V
return 255;
0 I( X5 h8 ?) d}6 f& v& ^% B0 s. E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" {; F& x1 f d0 N6 I0 B
{
" O$ H* K& p: O: K' J9 e; S# D# o BYTE nTmp = 0;( E: } X, p5 s l$ x3 ]* O
bool bDest = false,bSrc = false;
8 l) w0 i; ^9 }" A9 o for (int i=0;i<MAX_INVENTORY;i++)
" K5 u2 l, u' L3 C {/ c0 T: M2 O: f, w8 f8 e
if (dwSrcId == m_Item.dwId)2 p) @( }4 @5 B. ]7 \1 k% c- i/ i/ @
{& ] r# [% Z4 ?% n- W' I' S
//id相等 则 改变对应的dest和src
* V0 T Q) b, @6 H) W( o' @ nTmp = m_Item.nIndex;# O6 U5 n7 n7 X; ~+ i
m_Item.nIndex = dest;) o. d, ]4 c# C I% z
}% `# M$ T6 d3 P7 t: L
}; c/ t4 H6 M% t9 P! {* u
//临时数据保存完毕,交换开始3 N$ M3 _- \, s" N! T) H* A
for (int i=0;i<MAX_INVENTORY;i++)
7 s0 }9 I$ t/ z0 M8 X {
. @$ D! Y% b9 L" o if (dest == m_Item.nIndex)
1 R6 {: E3 @& s( K {
# G: U/ s) I6 \5 W //id相等 则 改变对应的dest和src' ]0 p; I$ ^- S* m
m_Item.nIndex = nTmp;) c$ s. \2 R1 f6 \
}
; I( [( W1 k" v: ? }# k* B5 w. n: |' b& w; B
}/ n2 W$ }5 H/ O% ]& e. f" k5 ^
};
$ c5 T/ q+ G1 a/ A" q-------------------------------------------------------------------------
4 T! {9 P" Z/ l9 n) |9 L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 r/ f% J" T; _; J
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; M) V a2 [+ s
紧靠其上添加:: y" V0 @* u$ ^8 w5 R
if( pWndBase == &m_wndMenu ), f& Q1 g- q/ f D& Y
{( H" U2 `) u! ?9 e7 W6 s) Q
switch( nID )9 g8 p! ]9 K8 F. @& z, Z( l. C
{
- V4 Z: j; J7 K$ e6 R, O# o case 2:0 q+ R ~; N; P' `9 Z
{
: a$ M- V5 x$ W1 Z/ K8 |. K1 k5 B //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! U* {6 @0 {+ v6 m7 q2 b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ?) g1 j/ H- ` s ?0 Y. r8 y
{& @3 ^; c# n! j- k
break;: D7 r8 k/ M" c, y) A* m4 R
}
9 c" }" ~. o) g/ P; z) x( W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): M; t2 N* W5 g# j* G; m
{
0 o7 {4 R# a8 q+ M7 _9 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ^) Q) a a2 M+ z
if( !pItemElem )6 S0 g; a5 z+ z8 I
continue;+ e2 O! y6 V; y2 m; W5 ]$ b: T$ t
if(pItemElem->GetExtra() > 0) _. Q) `+ H5 s
continue;
: }! r' R1 [1 k: } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. l* |8 j1 H6 E3 m6 \ continue;4 \. c, C! Z9 l \
if( g_pPlayer->IsUsing( pItemElem ) )
, V7 e, M7 `) Q3 O8 ? continue; k! y% h2 ? L7 c+ e
if( pItemElem->IsUndestructable() == TRUE )
0 q4 q& S/ p, x' y {; g- f$ B6 N% [% t; h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" w3 A% E4 P7 m continue;
3 j1 f8 v, G4 ]( D }7 ~* }7 J5 V" A ~& M
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 ]8 S& j" w0 R3 l }4 S0 [2 T! r2 }9 j( s
break;
6 ~8 P9 e- f2 w5 l6 k }$ C. ]# c: S S& C+ b
case 1:2 m+ x6 f, i% j% m. B/ j+ x
{
" l% G, ]9 X" o+ d/ d //整理背包( {+ k8 _; a1 n: T/ N* \ N0 R
//////////////////////////////////////////////////////////////////////////
6 b7 D! h& r* r, g2 v- O/ s- V& A; U //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 [0 f7 J. }1 _2 e( M: O# X5 M8 _- A //////////////////////////////////////////////////////////////////////////
' K6 g: S; c5 m" M: c+ a) f //////////////////////////////////////////////////////////////////////////
7 v v+ J' M: b. O CInventorySort* pInvSort = new CInventorySort;' X) }9 o2 S; p' q$ d
vector <sItem> vItem;% l, I. O3 @9 e; u
vItem.resize(MAX_INVENTORY);//初始化大小, E2 i4 S% Z1 B# L, a
//////////////////////////////////////////////////////////////////////////9 ?+ L3 d7 y: C; p
//填充数据- B1 t$ e0 f* z( m
for (int i=0;i<MAX_INVENTORY;i++)
& M$ g+ s9 t# N4 O+ V6 K {, h* m% r9 ?; Y1 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. E5 u* `0 g: s0 r% w
if (!pItemElem) t: U4 j% E3 z% W
{( M3 w- O. X/ U& [. x
vItem.dwKind2 = 0xffffffff;
+ {1 J5 X& W6 I5 N! A! {$ L. Q vItem.dwItemId = 0xffffffff;4 z& V- D7 t1 v. v. J3 A/ g
vItem.nIndex = i;
5 ]3 V, [: I% p+ A; K4 h' C3 Q }else {
p5 C) m ?) z# x" ] ItemProp* pProp = pItemElem->GetProp();
; K* ?" n5 e( i+ x vItem.dwKind2 = pProp->dwItemKind2;
' x* W/ \0 K; K, \ vItem.dwItemId = pItemElem->m_dwItemId;) T, w% f* M& D6 G& @( f7 P
vItem.nIndex = i;2 h' G, V" ]6 |
}/ Q. w# \! N0 u( l8 v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& W/ g0 L+ W5 W" G K6 c1 \
}- ^4 C! y. K) Q) X6 k. |( s
//////////////////////////////////////////////////////////////////////////
3 w% b9 f- r9 p% u sort(vItem.begin(),vItem.end());//排序# o# P3 l7 X+ m' A3 H
/////////////////////////////////////////////////////////////////////////// H, \8 V) a1 P2 O8 n& x
//交换$ |& K3 m% Z C% `, N- P
for (size_t i=0;i<vItem.size();i++)' s. x; N' V+ w- u6 _3 B% x- u6 S
{
; l, ?% v+ W0 x- D. J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 T4 ^3 Q5 I2 Y8 ~7 m
pInvSort->Add(vItem.nIndex);6 D# S ~* w p+ N4 I" p; q( a9 m
}3 [; I! l, Y& J# t# ^
BYTE nDestPos = 0;
2 t4 c; W$ l! S) K$ L4 F for (int i=0;i<MAX_INVENTORY;i++)
" d* w! o' K+ S! y s; h# q {
/ N/ x# M; A |9 F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, [% t9 P' o$ E: M! ?* T- G; V, g
if (pItemElem)) ?% f/ F7 B9 i5 C+ I
{0 g3 H$ b7 \/ Q: ~$ P, P
if (IsUsingItem(pItemElem))
. ? R3 O( C, E0 q; D {! D7 X- j$ _3 X6 l1 L" W" S* J
//这个位置无法放4 T* K5 l* Z Q4 }- A
nDestPos++;" A1 F& q! c0 g4 z$ k
}
5 [* y/ C1 z3 @0 u0 Z$ A( x; U }
) C T, D, L$ \ BYTE nSrc = pInvSort->GetItemSrc(i);$ F" c1 ^" L$ S: r; q3 x" E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 T6 g3 T( u3 Q3 s# Y if (pItemElem), B( |: T) T j/ W! w" _6 p
{
! N9 W, s; Q6 {+ S2 k3 | if (IsUsingItem(pItemElem)) s. {: q( b( _ l6 D
{$ x2 y4 s6 r# b) u. |( [5 u
//这个道具无法移动,跳过
7 V# J: {8 e( b8 Z7 f continue;% W4 l) b' x8 T: ^# I
}2 S+ w7 e2 T8 d8 Z+ P! d; B1 G, E% X
}else{1 h: a/ }1 j3 a0 L6 ]+ n
//空位置 不用动
( H3 g( r i+ x c/ [6 N continue;6 [" a H( @3 [4 S! W
}- L$ q* @3 [! w/ g& Z
//////////////////////////////////////////////////////////////////////////# w3 W9 f! Q) B" G4 w4 I9 v+ ?
//开始移动 G- P, X9 S: M& {4 g
if (nSrc == nDestPos) l7 i! c6 q7 W7 D/ @0 X4 O
{2 }0 |0 T. P0 X" v0 n1 j
//原地不动! m0 t8 I- T+ ^+ Z- a% r/ e# _0 R8 q
nDestPos++;
' T5 q) R$ H* M. ?% | continue;( ~: g$ i: L. w9 {% ^) b
}
0 I+ v- }& I; s+ [ pInvSort->MoveItem(i,nDestPos);& Y/ ` y7 p/ c% V. x4 \
g_DPlay.SendMoveItem(0,nSrc,nDestPos); M p& b8 @" w H3 W
Sleep(5);. [ S4 p. K7 K
//Error("移动 - %d->%d",nSrc,nDestPos);
& T, ^2 e) l& m% S+ v. N# D% Y nDestPos++;% C+ Z, Z- ?! i8 ] g
}
0 x! U8 f4 r% G2 g) _8 C6 j5 a //取第一个元素的信息
7 r6 d0 J, Q% f& R! @6 U4 |5 e /*4 W8 Q9 ` d* z4 C' f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); w# p# z6 Q7 ?+ K6 Y/ s
{6 c0 K6 m9 Q) s! ~
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* o; h* o, a8 H5 v7 C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 R% A, m, G0 ? }' d9 C* Z2 T9 V2 x9 D7 ~& s. A
*/7 i K$ U6 g- k8 Y
//////////////////////////////////////////////////////////////////////////$ `4 A( U% p+ x& U1 `4 Z. _
break;5 p {6 A; R6 L4 }" D
}
8 p" l, d. O7 `6 M }
8 Z3 V1 O5 s4 M& _/ G3 X w% ^}( g% I. d! \& c7 Q: B5 `
m_wndMenu.SetVisible(FALSE);* P+ s8 H. D" A5 c
5 w1 S% U3 W5 v& j; ?7 K/ S% u--------------------------------------------------------------------------------------------------------9 e: P7 V/ [) O# q8 m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 e1 Q9 _3 \. W' i
{1 ?- q6 S7 K" P* P7 n h$ L
BaseMouseCursor();$ M2 z7 x. z; m, K z
}; G3 A) x X% \7 ]" V
在其下添加:2 R4 T8 T) A2 J, A# L! K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 \3 f+ E/ _ g& g; A: ?
{# B9 \7 M/ z8 R0 }9 w4 y! R+ i
m_wndMenu.DeleteAllMenu();9 G; C4 q8 n* X
m_wndMenu.CreateMenu(this);
: W8 ^4 q8 r; O K4 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' f) v J& b+ o0 N3 h! b' C6 J
5 c$ }1 `+ ^, ~: y4 Z3 pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* O! m: Q; r( g" ]. M( J+ P{" u4 |8 V: S0 I* S
//P以上级别才可以删除所有道具
1 Y' @" R# O, P0 I9 r b: M, Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% x, V3 p3 o0 z1 _' o e% _0 ^1 [}
8 P$ x6 @1 `8 n0 X- g/ fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 _3 }/ ]( Y6 t- l: t1 `5 J+ q Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 a* W' A/ N4 Bm_wndMenu.SetFocus(); c5 l5 p9 ?( _& d- S8 g6 d
}- t$ H8 V0 J( N' E9 U' T
------------------------------------------------------------------------------------------------------------6 X- _/ j. n5 z9 E
*************************
/ o3 D3 f2 b1 u$ i- ?2 {# IWndField.h文件
1 o/ A! t& X4 j8 s q3 ]*************************, ?1 l3 B' R/ J& D( r. A
搜索:BOOL m_bReport;% I( G( m7 j+ O y/ s
其后添加:
1 x7 s G* A I: L: {4 e& W9 zCWndMenu m_wndMenu;( w7 Z* M( F8 c" F) c; H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 q- I" T5 c4 f, y2 X' z! x
其后添加:
6 e- I; g3 z& C- y4 H8 p' Svirtual void OnRButtonUp(UINT nFlags, CPoint point); A5 x0 o" V' K2 F. w, p
. O$ P: z! y" A9 c9 g, G: W' e& q$ N. ^2 w
|
|