|
|
源文件中_Interface文件夹下WndField.cpp文件6 G' ^! x! q0 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ K7 o; j' T' Z' q- {# q% c3 A* z, v h/ x9 Y* R8 P
struct sItem4 E8 f& N X# ~7 n& Y+ O
{/ n: O* J9 V4 Z) w1 G9 o# U
DWORD dwId;, l1 Q- ?: i* ?, F8 N5 O
DWORD dwKind2;; l7 h' l* }2 {$ `$ s# {3 \: [. Z8 n
DWORD dwItemId;+ V# W& C9 T) a: ?# y+ }
BYTE nIndex;
: `; J& [" D* a4 q L& h/ g esItem(){( A# `& Y$ Y I" A
dwId = dwKind2 = dwItemId = nIndex = 0;
% R7 i( w: a& ]- k% ^}4 d T+ } k/ P3 Q6 f' y3 D
bool operator < (const sItem p2)
& C. s' b1 t. V) [2 \6 g! l{
8 c$ D' ?; k- O" I. B: v: m P if (dwKind2 == p2.dwKind2)3 [& l8 F7 ?; \4 _. m7 O
{& f" _$ ?/ v+ ?
return dwItemId < p2.dwItemId;
5 b2 q2 ?; _, C, m3 c# } }else{
( r* Y% k: @. t( Z' n return dwKind2 < p2.dwKind2; S T, l4 w+ E& U0 x) v
}
$ b/ Q2 Z' K0 l j/ V}
8 u$ |8 n \) k0 Q O};0 Z7 l# e2 y. ]% w( L" t
class CInventorySort( m3 B9 V; Y3 a8 c: y5 z
{8 @0 D' r! Q4 r b
public:. {. [! }: r! l
CInventorySort()9 K2 k6 U/ t8 W. h! J
{
' C4 l2 |0 R- o# i- S7 @& O5 @ m_dwPos = 0;2 e: T/ q' V6 M0 [% F
}
6 o. d# ]9 Y7 f7 _5 w5 W~CInventorySort(){}
+ `& d( ^& j/ Q! v6 T0 r1 `private:" M, m# L! X% l; |5 p7 z4 E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 x, [# ]; X( i# S- E
DWORD m_dwPos;
, D) t* I) ?! G: r( Cpublic:
) I: w* ?% y* w/ V8 e3 Y( Yvoid Add(BYTE nIndex)2 r \6 s; f6 r# c
{
- g/ O. E H) E0 @ if (m_dwPos >= MAX_INVENTORY)5 k) o8 D; o; E3 ?2 i% R, K
{
* H! Q( Y1 v4 E# f9 R1 M return;
. E2 q) R G' P8 c/ H0 z- U+ U; { }
1 [" X) M" Y5 T3 d7 e+ F- \4 ? m_Item[m_dwPos].nIndex = nIndex;' D* J; g) S6 ]/ [! @( P' C% @
m_Item[m_dwPos].dwId = m_dwPos;# d! |6 n9 t) D! ]! b% O7 e
m_dwPos++;
5 k) R4 d( b2 w$ I. f2 z F}
! Y; S, ^) H" n2 {+ D# `# e& r) L8 ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( ?% n! b, `7 X6 Y" J9 l9 g{0 U" \; ]% M j( Z; J; z
for (int i=0;i<MAX_INVENTORY;i++)
0 {0 ]+ j' ~1 L2 i {# k0 X5 ?, W* \5 I F5 Y
if (m_Item.dwId == dwId)# r4 F9 X' T& {/ a7 F. i0 {
{0 w7 [2 e: g6 Z( `
return m_Item.nIndex;
0 f$ }+ B) w/ c4 ~" H3 r }' c. U7 i9 t" f/ H# a
}' m5 m8 E. n% ]5 E. Q: g0 k
return 255;
& K6 ~8 |( @# s* W. S}/ X9 D/ S. S0 _) p" T8 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" z: c' F" L; z/ x
{
; ]6 G8 `# T! M4 y4 R- m# Y8 j/ D: M BYTE nTmp = 0; y A4 Q6 Q) y0 R
bool bDest = false,bSrc = false;
! ?- }! g- ~% S9 z# ?1 ]# G, @ for (int i=0;i<MAX_INVENTORY;i++), f5 {, R0 l6 {+ Y. } `
{0 g! b4 J8 q, V) a; B' Q
if (dwSrcId == m_Item.dwId)
4 Z ^% K" B3 B4 o& [% L6 _3 W {
' m1 E1 u. N4 S8 F //id相等 则 改变对应的dest和src
* `1 q. k q3 J$ n$ S nTmp = m_Item.nIndex;
0 e* g/ }$ s& x% M m_Item.nIndex = dest;1 s8 C& S' F/ [/ H; [
}* _ n& ] d8 z( N. A1 P2 a
}
' _' _- r$ L3 d1 a3 y i; U6 | //临时数据保存完毕,交换开始# l$ a* r, M* k- V0 p# H
for (int i=0;i<MAX_INVENTORY;i++)/ p1 p0 `4 V: v; q+ v( }9 l
{
; b1 @$ w# r% @8 F$ P if (dest == m_Item.nIndex)8 Y. u1 K3 B/ W, G4 R
{
% t) m) G/ c" W s: z9 S //id相等 则 改变对应的dest和src3 r6 }8 r4 J' W) Q: s4 g
m_Item.nIndex = nTmp;
! ?# l" {% F" B2 _ } u( f$ [ @: a# u% I$ j/ Z( d
}
! F2 G6 T- R* ]( Y# f}
$ F% A8 u& F; y, M- H5 _};
, P# L! N- B' A% y-------------------------------------------------------------------------
, O6 `$ @6 ^) C5 H& Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 O9 C% }0 t2 z, D. W$ \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 Y' q7 l# ^4 ~5 O) n紧靠其上添加:+ D' x8 l" ]* q- E! A
if( pWndBase == &m_wndMenu )4 Q1 S0 _5 p+ V v \4 d
{- {7 n4 ?; L, L
switch( nID )8 O- D# Z( k) L) n
{! a7 f% _- n$ l1 C, q' }6 h# q
case 2:
5 P3 X, \# H6 T l4 t+ ?" j {
' I: C( _9 h- L2 O, y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 `% o+ J( x$ { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 G: J, o) Y" ]1 o9 N" [
{8 u% y1 c0 O) U! B3 r$ `
break;2 ], R' _# H1 n L! [# h: h2 I9 O
}7 p5 K& E1 {' q+ b
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 t! @4 G8 d9 J/ M I
{
; {9 l; m7 n8 e/ H% Q$ Z- Z+ M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: r2 n8 |& e7 U* I
if( !pItemElem )
& k# M& |# h0 E$ f0 j& q continue;: P& N! P, g: }$ z" k3 j
if(pItemElem->GetExtra() > 0): ~4 U! ^: Q3 L7 m: H
continue;" ^# @: Q) v, e; ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 {" |5 v6 O* N' ^4 [3 s
continue; f( n9 {+ ?' E% z
if( g_pPlayer->IsUsing( pItemElem ) )
7 \& E* i( H, y0 ~ O9 o continue;
) s% A5 e7 q" z; v# ?$ L if( pItemElem->IsUndestructable() == TRUE ). E$ X5 p, z O# |1 H4 i8 r- o4 f
{: ~* l7 i9 Y1 g- ^& D
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% c# ]# U5 [: F' X5 P l! } continue;
& X7 @; p/ i g. M6 q2 `3 O' I; n }3 j$ z9 m6 V8 z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* f: S o1 R7 x) R, v+ T/ r }
: k8 F5 v$ x- m# Z& |* _ break;; n% |* S2 s0 {% v2 J
}
: `7 H' z0 f S& L- T! B: t1 h0 G case 1:) E1 f0 r& x2 y8 h
{
- m0 M0 z5 ?) E //整理背包
# J1 k9 O f# Q% z. j //////////////////////////////////////////////////////////////////////////
+ Q2 X9 f' K7 W: v) q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 s3 }+ n! C3 M$ T6 I4 O! H1 e
//////////////////////////////////////////////////////////////////////////+ @8 U9 n: w/ x! a
//////////////////////////////////////////////////////////////////////////
Y9 g+ H4 B W& ~: l1 Y CInventorySort* pInvSort = new CInventorySort;" S9 Z1 w( ?3 s1 y8 m/ U4 `6 f
vector <sItem> vItem;9 s* \' C! K- C# }- x
vItem.resize(MAX_INVENTORY);//初始化大小" Y- v# r( b- j y0 a5 F- K' R7 J( O
//////////////////////////////////////////////////////////////////////////5 o, G6 b' ~/ b/ E" l
//填充数据# R7 Q% X; s8 D# @* G0 m
for (int i=0;i<MAX_INVENTORY;i++)
7 j' h/ h& F9 P/ O* G. o2 l {
* r2 u; u w8 W1 ]8 \! C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' n; N* S# {. A/ r ~
if (!pItemElem)
0 n1 s M! T3 ]8 A4 s {$ w, {* c( Y7 U5 J) e
vItem.dwKind2 = 0xffffffff;
( S* J0 k. ]" a( ^ \ Y- E4 X F vItem.dwItemId = 0xffffffff;+ A/ D+ F8 g5 q8 r0 _" F$ C
vItem.nIndex = i;% k5 F% o* d1 y J4 h
}else {
" u. }) O% w' y" M/ c+ m1 ? ItemProp* pProp = pItemElem->GetProp();2 {3 A J! u+ k9 W# t
vItem.dwKind2 = pProp->dwItemKind2;
" |! q6 u1 K; a& m% a+ B. d2 e) V vItem.dwItemId = pItemElem->m_dwItemId;
' m" ?. L# c9 X vItem.nIndex = i;
& }' C$ s, `/ v2 s8 a1 K }3 y1 L# O0 {7 c* s& N" k& {( S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 S9 ]2 @ @3 p: Q }. }) e. a3 i ]" k& l* K- ?* m+ b
//////////////////////////////////////////////////////////////////////////
: W) b8 a' `( V8 F a: N `' x sort(vItem.begin(),vItem.end());//排序
* G n3 i7 p- W0 ~+ |- y! U3 U" W //////////////////////////////////////////////////////////////////////////5 s# y% z' B; m1 @0 i8 ]: l
//交换
9 N1 d6 X& m2 J4 Y- f: R6 D for (size_t i=0;i<vItem.size();i++)
- K: N9 _" A" }$ r5 S% g' Y8 w0 X {
5 C, I0 d" s; g- i+ J9 | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 ^. y2 ^/ g' T pInvSort->Add(vItem.nIndex);
5 W0 o( {4 r7 B6 ~6 @+ e3 t }
L e2 J+ q* s! N) i BYTE nDestPos = 0;
2 E7 @- P+ f, x A for (int i=0;i<MAX_INVENTORY;i++); J* y8 T3 V m% E) s
{
5 t" _: U" E6 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. I* r$ x7 t& P: u' V; k' T if (pItemElem)
8 p" e1 b* ]! S; L3 J9 D {; g* f7 o' g- B2 P; Y7 N/ I
if (IsUsingItem(pItemElem))
( P3 K/ @0 V6 R) w; X+ u: y1 I {/ ^ b+ ]2 |/ y
//这个位置无法放
4 g! h ?7 j8 ~2 l- q& T% u5 s nDestPos++;
0 I8 }9 T7 a( x0 P8 {, ^ }" L* L8 O7 i r b$ }' ~! E0 |
}
" l& y( L" ^8 K8 X. s l' P BYTE nSrc = pInvSort->GetItemSrc(i);1 {; [* U- \( b- L0 q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 s% T4 J3 e/ Z' ~- W% V" m6 F if (pItemElem)
1 X! a% g3 ^. T; @2 P! E# w* C, P u/ z) d {; T; y6 c) {- O. ^6 T, p
if (IsUsingItem(pItemElem))
0 H( I+ [2 s3 h- {/ a4 S8 J8 G+ M- |. y+ \ {
- s1 n/ V; y# Q$ U //这个道具无法移动,跳过4 c4 `- o8 X$ B8 \; F
continue;5 ^" C9 b/ r( U5 L
}/ \8 t1 C X& M- S7 ^' h
}else{, ]! Z4 N7 P2 |9 E+ ^
//空位置 不用动
* C( S* M0 |# o% V continue;
8 T8 ` c5 A" m" G; d c$ d" h' Y3 H% P }' X# A6 ]) b+ i# h% a7 v, F2 a( p- K
//////////////////////////////////////////////////////////////////////////0 Q4 ?- d6 x" a' A( C
//开始移动2 z* Z+ d) Y& M8 x. h; q' Y
if (nSrc == nDestPos)
- l( `- g" o0 k8 ^; y9 ` {- r! c S( I' \% b/ m1 O
//原地不动
; k5 @$ M* o. J6 }/ x+ M! f. u* w% U: x nDestPos++;
$ @) Q1 ~( H# U P continue;
! J5 |3 u+ u4 F0 s0 v9 y }/ Z* T6 I5 X+ a
pInvSort->MoveItem(i,nDestPos);
" N* L. _+ V0 U! {6 P6 h/ N; f g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 f. R& f6 @) _6 E& ?" X3 c) f/ \$ e0 b Sleep(5);
* ?) f5 I1 w) k: l //Error("移动 - %d->%d",nSrc,nDestPos);. O1 {3 l& ^, E5 r0 I2 R1 K& I9 ~
nDestPos++;
, U3 m" y; ]9 e) _ }4 s! O; Y6 I7 ?" [# q M
//取第一个元素的信息
6 j. ~- K1 A" n. ` /*
8 q9 Z9 P6 G$ d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). X, e/ ], H% E5 b7 Z
{
* |- f v% S' \- C" i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 ]9 l9 w- U! p5 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% C) }& g5 U$ H1 Y1 p& r' O6 @
}( M8 I. x) H1 B* L$ O4 c. |8 ^
*/4 L0 t9 o/ C( r* K1 G2 B" s6 S" `8 _
//////////////////////////////////////////////////////////////////////////
8 @4 ~- T4 o8 L4 n; t break;4 V& R/ a0 C; x+ M$ r
}: R, |1 h: x1 W8 H
} / W" ^( K% G# }1 Q9 i( i8 p, e8 u1 }3 x9 ?
}
4 z7 r% B5 {6 s. j0 M0 M" mm_wndMenu.SetVisible(FALSE);9 c2 W: B. i% P; l
% M0 Q! F1 ?2 o% w4 \) X--------------------------------------------------------------------------------------------------------
8 g8 j: X, N1 U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 [4 J! b' [2 |5 B' }1 ^( P
{
, w; Y* U G7 R" S4 dBaseMouseCursor();
, c; l1 ?- v+ ~% H} r; t" _1 K6 @* V1 b3 ^5 b1 R5 R5 x
在其下添加:
, Z" S) P4 x4 p- M$ c+ a. ~& Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 A3 z: U. A. W+ \: v{ j% c) d/ U, g& b8 C
m_wndMenu.DeleteAllMenu();
. b; u: r5 _+ _1 `0 l8 I5 I& r* R& vm_wndMenu.CreateMenu(this);
6 \& [+ n0 C$ Y" |1 Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 l2 V. t5 H4 A0 E1 ~
3 C, r+ t& f! h1 G, H" l' H# cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 [; m* g- \3 v- K$ y3 D6 m& k U' c{
- q/ m6 M9 V% n2 I* H2 G4 @ //P以上级别才可以删除所有道具0 T% x. O" I5 [1 j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( a" L% J' C* Q |/ N}
" m9 {3 F* G- ~$ c! d, H0 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 N. `% L5 n9 m8 @: W" s. m- X8 ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& H: m7 |& Y7 x: l6 K. zm_wndMenu.SetFocus();
# T$ o6 X8 ^) J- q" Y" Z; n}* ?6 B- F: X: \
------------------------------------------------------------------------------------------------------------8 R5 h: G$ Q- o/ y8 y
*************************! {, {* R2 Q) k2 g' ~' T" ?1 W4 Z
WndField.h文件6 z: W" N9 S1 h$ c
*************************+ H! x) Z$ W- k ?! F p- ~6 t2 |
搜索:BOOL m_bReport;$ o+ m3 n( U, I1 K; p
其后添加:
9 C) H$ K0 @' ]1 ^) {9 eCWndMenu m_wndMenu;
. c) G; n5 P0 o1 q c9 u& E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' L6 r1 ^ p8 T: M6 ~- J
其后添加:
# Z6 S, ?" {1 B. G; j, ]3 I' O$ z' fvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 V+ }. T+ ~! a$ @/ ]
8 ^, \4 M5 C+ o1 y' T7 R3 _# B) G6 q
|
|