|
|
源文件中_Interface文件夹下WndField.cpp文件! ^4 Q3 Z( n, s7 K! t" _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 v7 G% o% l1 f; H K5 b' X
A' t, t: E: U, B0 `1 astruct sItem( U+ G4 [2 P* I; k' [( L. ]
{
4 f4 ~- h0 U: A6 B" m" E7 wDWORD dwId;
6 H5 m! e7 G# ~) H9 f; P z H bDWORD dwKind2;
' m3 n. I% B. B' e: ?$ e7 gDWORD dwItemId;/ h7 I4 a) F# m2 V" W |, m0 R' F
BYTE nIndex;
1 p3 Z7 ]7 h4 S+ x5 S# I p: S! hsItem(){8 f& M2 Q# a; y# l
dwId = dwKind2 = dwItemId = nIndex = 0;5 |; K; j9 O1 p# l, q$ {1 \5 w
}
- G' W5 Y' h7 r( A7 g3 }7 Xbool operator < (const sItem p2)0 m& l8 h, i4 S# } o" ~* _
{
/ h8 M1 C/ H9 C# B$ S/ `& ?, c if (dwKind2 == p2.dwKind2)
6 N% Z2 f3 b' T, M! {' O8 z7 ` {) Q# G( x- ]7 q5 W, S6 Q
return dwItemId < p2.dwItemId;1 ^$ K: z( M8 G$ ^. K3 G7 M, k
}else{, X5 `- g' t2 ~+ U$ b2 }1 |
return dwKind2 < p2.dwKind2;
0 A8 O: S h. e2 D1 W( r) q }
" g7 C X- h9 y( {+ i2 n}# L! n* c3 [# u9 p( t' T
};+ ]% W$ D7 b( ], P0 M
class CInventorySort, K# n6 p' I# F6 `6 z
{) j$ u6 K# @" i. B
public: U$ a1 w2 v6 g1 y6 p; v
CInventorySort()
9 }3 z* i4 u6 m3 J' W, S4 s{
% E( p C- z+ p m_dwPos = 0;( s6 W5 \ D6 ?* u8 i, }7 \
}- x N4 F$ s5 a8 c5 B
~CInventorySort(){}
" q! R7 f& Q/ b$ w$ t/ dprivate:
1 j% C4 q l, J! D5 j4 |7 ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) S& H" n# j; E1 L. e! {DWORD m_dwPos;
' [0 D. G9 Y7 s: o3 f. U0 A! }public:
' T0 p, Y0 s' Y3 l3 \2 D& P$ B2 jvoid Add(BYTE nIndex)
6 g' V, A7 Q. z% i) O{5 `3 D) _; I5 q1 j0 D5 Z+ y
if (m_dwPos >= MAX_INVENTORY)
) W+ q$ J( e$ M. x2 S+ v {0 o0 V# ?& A0 j& i* T6 K/ ] [6 j3 ~
return;
5 V& @; Y6 P5 N2 o* ?/ v0 h }7 J# @. q6 J0 z6 a7 U9 Q8 R
m_Item[m_dwPos].nIndex = nIndex;
+ A! a" a# n/ t- R! B- e: i- L. ] m_Item[m_dwPos].dwId = m_dwPos;
$ D/ t( u" Y8 j9 C0 B% @1 v+ p2 D5 _8 ? m_dwPos++; B0 ?& C, M E/ ]5 i% [3 l& }! S, s! H
}
7 e9 N! s% |3 ]8 u0 m# d, Y S+ g1 nBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 E0 [: D% g! `
{. `4 c1 `$ C# f2 u
for (int i=0;i<MAX_INVENTORY;i++)% v, |9 f! W/ }
{2 M9 l- ?$ l4 f. K# A7 _2 O0 ?
if (m_Item.dwId == dwId)
4 ^; R8 K+ X5 w* f: v1 f7 I {( o$ u& y! H4 U/ u# X. n
return m_Item.nIndex;; m0 ?* A/ A9 P3 @9 x
}! ^1 w2 a6 F) C# X; k4 g
}& ]) c+ N! V' m6 z' m
return 255;
% M& ~6 o, D8 a, }. D}1 C2 d4 D: X) z' p. R1 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- S) P8 v3 Y4 L* [
{9 m, s0 c) ]& m" H# i% {
BYTE nTmp = 0;
$ ?0 t) g1 ^' m( t- D0 r bool bDest = false,bSrc = false;8 \/ z- ~6 w) v+ c# ^; @
for (int i=0;i<MAX_INVENTORY;i++) ~+ X$ P8 M' d% `& I2 R2 g% x/ y
{
% M( K6 m1 [" f. ^$ C if (dwSrcId == m_Item.dwId)
, Z8 `6 C5 x: _7 s; Q {
1 Q1 P1 m! z/ Z4 r& w //id相等 则 改变对应的dest和src
1 s; i* H5 U: o% `9 y# \2 X6 a nTmp = m_Item.nIndex;
8 V9 t2 h7 _ H& J& V m_Item.nIndex = dest;
2 R: w) W$ a; S) K; `+ Q& X }6 b6 N$ g" Y( g7 k& \& N& `
}
* x L! n$ h* v# o1 A. h //临时数据保存完毕,交换开始
. x" o6 a6 i) \/ p1 s. @ for (int i=0;i<MAX_INVENTORY;i++); S# s# K. G9 p% H r4 W
{9 @% i m9 D$ g' i4 O7 d0 ~: X
if (dest == m_Item.nIndex)% [6 s. Z9 b+ ^# X/ C% O7 U
{
2 c! U5 z6 v% j% G$ ~% L3 U //id相等 则 改变对应的dest和src& G }/ B ?$ B! L
m_Item.nIndex = nTmp;, ^" ?: o: `: t- C
}
* K& f, P+ [1 K) w" | }
+ S# y- p( ~+ g) F% p}
/ U l7 {5 h! V8 Y7 H};
' c4 O, N B! A6 K2 H. |6 V) m-------------------------------------------------------------------------
/ m9 Z( G# u5 A: f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( T- b" }( k, ~& m) L& V( q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 h$ g! V. F4 G0 |1 n6 v+ I
紧靠其上添加:" n' k, s S2 q8 ]9 p( N
if( pWndBase == &m_wndMenu )0 l p$ H+ k# G! m6 b2 b3 O
{, n- W0 N! I4 M' E0 a- I; j8 W, o. w
switch( nID )
" j2 F* L4 a8 |% n" b* O/ N0 z {2 P6 }5 U4 m! {' b& F
case 2:$ t* S; m: ~0 w2 a
{8 P) f* h4 M, a- J0 l, I
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! }& Y4 T" w( ?/ m. G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- m l( P& G5 `/ L
{( o/ x1 V) r; ]0 |$ n. E
break;( H' [) v$ L* E9 n& J6 b2 _
}
' f* ^. T, K' F; R+ U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 k, d% e7 k+ J4 ?; T {! l- d# m- l4 ?; l0 {. q9 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 U+ O) u3 l& D if( !pItemElem )
z3 `, a Z- ], x# V% B# D continue;
) u6 P* d# V# E7 J8 { u5 S+ F if(pItemElem->GetExtra() > 0)
# e! K$ Z* M/ D/ B' [! d continue;8 o' q2 Z# P0 l. p1 `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 L1 b' A: X G& j continue;
3 z- ?/ a2 \) b if( g_pPlayer->IsUsing( pItemElem ) )
4 `* v* v8 @$ z2 E4 d6 I6 S0 H continue;* h0 m) N C: E: ^$ F( V$ o
if( pItemElem->IsUndestructable() == TRUE )
( K% }2 H7 o, _/ f5 `- C" y {7 W1 i* W+ z( [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
f0 |1 f5 }- [/ P- | continue;* B4 [/ P" T) J
}
. {2 D0 S, ~0 K2 z0 u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 o! |& E6 h; |7 C6 ~+ e }, v3 {& ^+ t1 r! _2 z
break;6 D# n9 B+ e' a5 A4 {
}2 i9 m' i5 Q9 K- ^2 M1 j
case 1:
3 w* V8 M9 ^8 x+ b {
( A, u- |) ?5 ~4 r% Y/ c //整理背包: P) [) n) j% _3 L! V
//////////////////////////////////////////////////////////////////////////# \+ L& g. l) f$ ?! b3 p
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* E/ A6 E/ ^7 {" E
//////////////////////////////////////////////////////////////////////////
( t2 j) |. r* R# g //////////////////////////////////////////////////////////////////////////
' J c: P7 I. x3 P8 T: w CInventorySort* pInvSort = new CInventorySort;
) d& U7 N9 F- f3 h+ i3 P1 s( q vector <sItem> vItem;
$ e) b. a: |% r5 {4 D vItem.resize(MAX_INVENTORY);//初始化大小3 E: s+ C' @: v+ q$ h
//////////////////////////////////////////////////////////////////////////
( x3 B/ w. X4 k. e; u) b% M //填充数据# K) f* E. K3 r8 t+ f1 h- D( D8 j
for (int i=0;i<MAX_INVENTORY;i++)
+ z, Y( J" \3 y0 i0 y+ t3 d5 M {
1 r( m$ t% Y8 X- _# c, Q, A( Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* F( E' _" j6 h) @/ z5 { if (!pItemElem)
! Y. H$ W, p3 Y; y; M& W {" k6 l1 W5 W8 `! X8 I1 O' V, ~
vItem.dwKind2 = 0xffffffff;3 W0 U2 P3 O* k) G& A
vItem.dwItemId = 0xffffffff; ^: Z( |/ z* v' T- b+ |# m. y
vItem.nIndex = i;5 d1 O# `. x! s% V. s6 z/ O. R
}else {" H5 K# P: \, x O
ItemProp* pProp = pItemElem->GetProp();/ y) m- b" \- Z: O
vItem.dwKind2 = pProp->dwItemKind2;: H$ o( |. u& Z5 g: d
vItem.dwItemId = pItemElem->m_dwItemId;% G% b- {5 f; [( E* ]
vItem.nIndex = i;% c3 C7 L! c. {3 v
}
4 n. Q2 X: g5 h' [& G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 |# N4 d, T) F4 ] }
9 ]# N9 m0 s. U) W) ?# T* u //////////////////////////////////////////////////////////////////////////
$ F% k9 y, @0 _4 A sort(vItem.begin(),vItem.end());//排序
8 u6 O% W1 Z8 d7 L //////////////////////////////////////////////////////////////////////////
& |* a, S |" h7 }' @& m //交换8 r' d8 W+ e4 a3 K; D
for (size_t i=0;i<vItem.size();i++)
8 {1 E: W. c$ r/ L2 m2 }# E1 O. W {6 ~2 O- H. W, ^5 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 n. e8 h1 p+ Z" Q) v pInvSort->Add(vItem.nIndex);
9 u8 @+ ~3 b3 C: A" K6 Y8 b }. o1 m6 J3 _: |0 W" }: i
BYTE nDestPos = 0; e2 }- m" k% `( D' r6 g( }
for (int i=0;i<MAX_INVENTORY;i++)* ^- [ o7 b ` B
{
# Z* ?1 g% U1 R$ b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 p+ y4 `; Z9 k" j _6 m, k% u
if (pItemElem)" i t' u' O3 l: {3 s' H
{* z d* Q1 h+ |) S$ P
if (IsUsingItem(pItemElem))3 n) G. @, w; ]5 ~
{6 `, m' f2 g# G: g) {
//这个位置无法放. d+ I3 _! C5 L' I
nDestPos++; s& ~; x/ `% c! A2 L' f) O
}6 H( Y+ T6 d+ h% e( X1 u
}. ]- `' ] P# c2 M8 H' c
BYTE nSrc = pInvSort->GetItemSrc(i);& R5 N, C& l) r0 v8 K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- c6 N, T5 V) D. l5 Z. T/ r* b* ` if (pItemElem)& ^6 R, D B, m Y
{
8 z6 q( T, B m1 w4 x( u if (IsUsingItem(pItemElem))' W9 K3 o, z6 n( s
{* e" ], _0 m1 ^$ O# a- \
//这个道具无法移动,跳过
# a4 ?5 g/ c" ^6 w! \ continue;0 Q2 k- C5 K2 Z8 v5 f/ @
}
% V% Y4 N d. C# t+ A }else{
$ e+ t. {5 p$ ~9 I //空位置 不用动0 g1 S$ F6 d$ |1 p# q
continue;. R. a7 [' y: Y, ]6 F( t* B- M
}
9 n6 U6 U3 }* f+ O$ R //////////////////////////////////////////////////////////////////////////
. e+ @# L0 h1 s9 O6 x; \/ o //开始移动* [. }: o M$ Y" l+ s1 Y9 d8 C
if (nSrc == nDestPos)
0 m& W; F% y' k; t! n {
% p5 U V* v8 d. N; k" n( m+ \ //原地不动& _: `/ p) x) X; Z& Y
nDestPos++;
; s: J2 r" J4 z& q! U; k' T continue;
1 h+ Q$ D! ]% K) G0 {. T6 Q# ?1 D }
8 A) Y( }, [7 d0 d pInvSort->MoveItem(i,nDestPos);
# Z/ d/ a) U! Z4 m6 N4 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);) b, z/ b4 {7 L% D5 O& Q3 U
Sleep(5);5 l1 w: V- l# k/ H
//Error("移动 - %d->%d",nSrc,nDestPos);
% d5 e5 ?' S' U1 @: f3 X# I nDestPos++;
3 L6 d& t Y) d8 c4 P: P, ` }9 N: Z7 [5 K3 u% }7 O. R2 v
//取第一个元素的信息8 ?' W1 j+ m; S5 q# f1 b
/*
6 ?9 q' y) ?3 ?8 z0 r- ^! ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ ~1 p) c$ W4 D8 V+ C" y8 \- T% o9 j
{
! k- f; U9 n; I9 ~& l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 l2 \4 h5 i! ^4 k* D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
I0 \7 f5 U Q" _/ K& V# r& t. r }
+ z, i" U1 R& k \ */; v7 u8 N7 j. b3 p5 H7 A- p, {- b
//////////////////////////////////////////////////////////////////////////. H+ l, _0 V! H2 D- Z
break;" I. W9 A3 |/ T
}
2 v0 S- f" C* A7 A( ]8 [% N } $ L- d9 B! ]4 [& x
}
0 L) h* f. O3 P' |& f# r, im_wndMenu.SetVisible(FALSE);
: l/ M3 I% |" }% w$ t6 y$ z
& C2 }- L5 }# O2 u+ K--------------------------------------------------------------------------------------------------------
1 z; T8 b2 M/ R' x" Q5 }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- P8 f7 a0 R* V/ A7 M- p
{- V( L9 B- U/ Q9 C% k7 a4 R! v
BaseMouseCursor();& \, R% T" q3 ]- a
}
4 y5 t9 t. C- o* a# M5 L在其下添加:! [2 ]; j) i; I* w( g7 U6 S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 t/ p4 D$ Z2 X
{
, t6 j8 @- Y3 }. o* tm_wndMenu.DeleteAllMenu();
% e' ]" S# G6 |5 r$ Y& wm_wndMenu.CreateMenu(this);9 z) V0 f6 X! F. I. {' A
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* ~8 d/ Q$ k0 z4 ?. a6 a @8 |+ J
7 T5 M# D0 g3 ~; C/ N: q/ nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 s: ^6 U- y- l{
2 a0 ]# _. ]1 a //P以上级别才可以删除所有道具" X6 E1 b; ] m" ^9 C& Y6 E5 t; L9 ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 E4 k" r6 B6 S}
) m9 o' l! H x) Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 a, ^& `* u% L" }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* O7 x: p' n" }5 k) i
m_wndMenu.SetFocus();$ @ u9 {" Q* e( u, b
}/ L+ k+ g# y" n# L8 h# M1 [3 Y
------------------------------------------------------------------------------------------------------------9 D: \: {2 \9 T ]
*************************! i9 Q+ l+ b: q# Y
WndField.h文件
5 n4 k V) Y" y*************************
4 `" l$ ?1 e- o, q+ [1 K- y搜索:BOOL m_bReport;' U y+ S8 F7 L8 o* V
其后添加:# b6 n1 w# g/ r) \/ H6 y! n
CWndMenu m_wndMenu;
, |) K/ `2 O7 \# c" W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. B( k" o, D2 J0 `6 N' S) [3 o
其后添加:& e( f, J3 R1 ~2 J, o* k4 b: y
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 ^$ c/ \- V$ o, D) P
0 z9 t- H" T$ A. R& F; F" Q
% n: V- B5 Q: m, s4 N' g# a' l
|
|