|
|
源文件中_Interface文件夹下WndField.cpp文件
, `4 _: G3 g1 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 N# L$ H2 k6 A5 K, B# B) O6 _6 {) q; y9 [) B8 V
struct sItem. |8 L9 v/ Y) K% S
{+ }- S# O! ?* d }+ N
DWORD dwId;
& r% W& w6 i3 i* J) \DWORD dwKind2;: u) D4 g1 M8 N$ x7 p! g5 k# w
DWORD dwItemId;- u5 B# {) F/ {8 E
BYTE nIndex;
" B$ n6 T& |8 HsItem(){
* z; z$ F# I8 O) H6 @3 U+ c! ? dwId = dwKind2 = dwItemId = nIndex = 0;
. V3 Y4 K! F$ E I) y% G}
; L/ ~, V/ f& m5 @% n4 A. l; N# p0 rbool operator < (const sItem p2)
. Q% b+ v3 b" S, M{0 {8 n8 O# U# r
if (dwKind2 == p2.dwKind2)
9 D" M5 `' M& W9 } {+ {! n. H5 D& T% g9 t! ]
return dwItemId < p2.dwItemId;7 b/ d s; c2 R+ F; P( L& l
}else{
6 {: L( f+ O) I( s. Q return dwKind2 < p2.dwKind2;
0 H, E b; q; Y" f; f }1 X" }: ~8 | a7 C
}2 q/ Y Q7 I- q$ X% N% `
};
$ K! U( N: Y+ _8 |class CInventorySort
9 {5 u k. K: a{
, ^( e. c9 K+ fpublic:( n* @9 L2 t6 Z9 v7 Z) d8 s
CInventorySort()
( \8 J6 S7 X- B" W% Y6 x/ }' Y9 L{
) j6 ]& t5 m( S0 B( m# C m_dwPos = 0; c* x6 g b0 Z3 G
}" r' _" a, z% L" O
~CInventorySort(){}. \; Y2 b- l7 `. w, _3 L& w
private:4 \0 e- L/ u. w7 ^9 x/ d4 s8 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; @' T& N; U6 i9 e( v
DWORD m_dwPos;
- J. v/ ]5 }4 U* Ppublic:4 o7 ^$ c) l1 l& i; Z
void Add(BYTE nIndex)8 G @4 K/ O! j
{1 \ N9 {2 h+ t7 e5 b/ d
if (m_dwPos >= MAX_INVENTORY)2 H8 u( t& k) N5 O$ Q0 }$ x
{ K5 T7 T ] Q
return;4 |. e0 x) ?# x' z
}- h2 ]& V" B( v
m_Item[m_dwPos].nIndex = nIndex;
5 P. Y# F/ U7 K' B m_Item[m_dwPos].dwId = m_dwPos;
2 E( }" @8 I6 k* d r m_dwPos++;; ?& o8 Z S. p% [
}% N' L, ^4 v1 F ?8 n& \6 x7 P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. Y7 k# S, y! H3 W3 M
{8 P+ ~' K; s0 G& [6 {0 t, X
for (int i=0;i<MAX_INVENTORY;i++). N5 t) f/ T) t$ z0 G- F, C
{
7 Z. d8 @4 B6 r8 J" y! @5 {) ^ if (m_Item.dwId == dwId)
* U, J" Z5 k) a0 [$ i! F O' g {0 X$ K/ W% {) _2 F! `2 {$ L
return m_Item.nIndex;) z$ h. [3 U) _8 C4 n! t1 p$ z
}3 P$ Q2 o+ j7 I% K' Q* |% V2 N r
}, P9 C0 F6 i) Z+ H2 ]( P: K
return 255;2 K; M0 d6 Y& t9 c5 a
}6 S1 U) u7 t/ n* o
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! x9 |, d3 B# h- k9 d& ?
{) u/ A5 r9 |1 s5 I
BYTE nTmp = 0;- k0 J* B: |6 [% ^: _
bool bDest = false,bSrc = false;
. A4 f" N' [$ w% ? for (int i=0;i<MAX_INVENTORY;i++)& i# | i* R) j) u
{
. {2 L, Y9 r. _9 r# |; g5 z if (dwSrcId == m_Item.dwId)
q5 X6 F$ J7 K& i6 \+ b8 O/ t$ R {6 \! _ V! p' I0 s) S& Y1 Q: P
//id相等 则 改变对应的dest和src
& j# [# e, s7 Y/ C* G; G nTmp = m_Item.nIndex;
5 ? K0 V+ q# O" q. @1 k+ `2 H m_Item.nIndex = dest;
6 \5 Z% F* d# z4 b5 a }5 B6 r) C+ g" b2 ]5 g& y
}6 g! Q2 Q! i. A* P9 B3 D* W
//临时数据保存完毕,交换开始
% A2 u6 K0 R. ?7 s" P for (int i=0;i<MAX_INVENTORY;i++), [7 \( x# K8 C
{- B! A9 C' S/ @7 p+ u
if (dest == m_Item.nIndex)) E$ t8 V& b# W& L) h
{7 g2 ?9 K% T6 c# U- R
//id相等 则 改变对应的dest和src
K8 D$ _: \! n! V$ b' _- s m_Item.nIndex = nTmp;
' _1 K2 A+ I6 D" E* c } R, A1 p8 u e- j O' u
}
. G. S: F5 m/ \0 A1 a2 l}
# q+ ~% z3 k4 i, d- a( A$ Y};' m4 F5 P, c3 @9 a1 j
-------------------------------------------------------------------------
$ ?$ F& L/ y6 G2 ^& [. Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 s6 G6 n' t% C8 D8 C; e3 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 r4 M) i( ~) i% a. B, s紧靠其上添加:
9 A7 ?# Y) x1 V% B" Yif( pWndBase == &m_wndMenu )
: v5 a: t" [$ {$ x: J; f* P& S' c{1 n1 @0 x& E: W3 b( r
switch( nID )- |3 B8 t* B. R8 v
{7 h7 w& o; ^# G' m R2 _7 R
case 2:) V" N4 e( o4 v b& w* i
{
# ?8 M5 g; e- Q- {/ H9 V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( ]5 K% m4 Z! @/ D0 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% R! p9 Q) k3 ? E& R
{
# C- E) f8 c) D+ [/ b( u# j break;' i L: M- H& P- |9 j
}2 Z' `) ?* D# R7 q' q/ t. c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 J" F" a) o/ {! \5 h {6 A4 `" ~9 s4 W8 |; {% t' h @1 d% D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 m8 [! K/ `. L/ W e+ R
if( !pItemElem )
7 V* i. U3 s! u8 I9 c continue;9 g. o+ E' c( U+ R( @1 {, J5 e
if(pItemElem->GetExtra() > 0)- b! `& K; T3 U8 }. k" S# |" _
continue;/ b* I& d% j4 @( _- w5 \& h1 ]- P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 i* g+ Z9 x( @3 Z2 s1 b continue;
( f$ E2 g3 {# N+ O if( g_pPlayer->IsUsing( pItemElem ) )4 h: g) ~4 r* y# X9 k
continue;
# O4 N4 q# g6 I1 V" v' S if( pItemElem->IsUndestructable() == TRUE )
& f( V6 N2 Q/ N6 t) {6 C$ x {; e# E1 v u! d( s: K+ X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 @( m+ u$ x' h# q4 X0 l% P
continue;
8 I0 r+ y% x& q: d' o% R }
* D+ {6 j% O& m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 k7 D3 [! y( ~% @) y0 y6 f4 ]& Y
}. C8 H0 |9 R6 E4 n
break;6 z# K. s+ Y) K
}9 h8 F' p' g B/ h# n
case 1:9 l) \/ ^, q$ ?2 k" ]/ k
{" ~) N/ l; H) K' @3 v/ g
//整理背包2 X) U& u9 a$ s
//////////////////////////////////////////////////////////////////////////
% \4 C. j1 m5 @: @; t //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ T' B e- p+ G" x //////////////////////////////////////////////////////////////////////////
4 V$ v* F7 T6 ]1 L! e/ D0 H- p //////////////////////////////////////////////////////////////////////////
) y' J- E! d# \ CInventorySort* pInvSort = new CInventorySort;
# b7 T1 N5 T' B7 a h/ U; ] vector <sItem> vItem;* C% G2 g5 K0 P# w" h1 @
vItem.resize(MAX_INVENTORY);//初始化大小
% i1 i `5 g U" i- e3 ]. V //////////////////////////////////////////////////////////////////////////
0 L% m! h$ ]: |: q1 w& v: G; W //填充数据, d) y3 r( r l( c! ^ F- S
for (int i=0;i<MAX_INVENTORY;i++)5 a1 i% a* x' f, Z* H
{
R" s+ a4 w3 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 e/ J# [* s1 z2 t5 B# l& a$ U if (!pItemElem)
& [! }, }. h' z {
8 G$ K6 M* i0 [' P8 c& u vItem.dwKind2 = 0xffffffff;
H8 N" M$ E+ y vItem.dwItemId = 0xffffffff;
; S+ w4 |& v: \! M1 h t- U vItem.nIndex = i;! T7 X5 H1 J6 ]- B$ W! Z5 ^# u
}else {
8 Z( i8 f" v& U+ S ItemProp* pProp = pItemElem->GetProp();
* d, H2 c$ t) ]8 ~ vItem.dwKind2 = pProp->dwItemKind2;
' A, j! _: q: T/ Z' f8 o vItem.dwItemId = pItemElem->m_dwItemId;
8 @7 @) U: A8 W7 x vItem.nIndex = i;
8 [) X8 v9 R. c! j }
9 h8 K' Y1 B8 o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 l/ [) n& A# d# y }
% x* t* W6 i+ @0 l' w //////////////////////////////////////////////////////////////////////////
7 o' a$ l. w5 o6 }& a sort(vItem.begin(),vItem.end());//排序
' m4 F' B; a, e& n //////////////////////////////////////////////////////////////////////////
& r" I9 N& q5 [. I8 o- ~ //交换
: s# L u$ A$ @9 `' A$ Z" {; u2 W for (size_t i=0;i<vItem.size();i++)
; H; N1 F' h! z8 u. C {
0 n3 A* I% q9 ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# F+ g/ j0 [# Z4 _; a; i pInvSort->Add(vItem.nIndex);, W% z) g% S7 V/ q
}4 L/ m& S6 n& k: C% s3 f0 L
BYTE nDestPos = 0;
# T/ v8 J) a B2 h. s* i9 E% o: D for (int i=0;i<MAX_INVENTORY;i++)& x' s; S0 ~+ @9 G7 @
{( |. ?4 ~* k! q0 T- }3 T6 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* G3 P6 z6 K) } q t
if (pItemElem)+ W8 P5 a( Q5 b) [% Y0 y& z
{
) Z/ c1 ? o3 u* ^ if (IsUsingItem(pItemElem))
_9 N& _0 w4 g+ J+ ^, P {
- G- t* S! c7 \, w //这个位置无法放5 ]2 D* B# R2 ^1 g
nDestPos++; T* r+ a0 ?" ^3 W
}! \$ W# P1 ]$ s; N/ d
}
' @& V) U, D0 y! R' z% z% d BYTE nSrc = pInvSort->GetItemSrc(i);# F# g$ b" H7 Q6 E5 Q8 {
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* F4 t9 e1 o$ `' q# [6 \ if (pItemElem)
1 C9 L( @$ N; v; } {' i. H: U! y, F, T
if (IsUsingItem(pItemElem))
2 y; [7 P: Q# T6 l9 n0 P8 n( v {2 m3 l" n" G9 l
//这个道具无法移动,跳过8 T& A6 X- h2 p9 I' Y
continue;
& q- N4 T0 L1 w8 M! W) n }
3 M6 J1 V2 h& a2 X }else{& U7 k& O+ b2 F9 u" Y5 H
//空位置 不用动
( U0 \" `/ x& l8 ?9 H4 W/ J continue;% |) q* c- _ ~4 [# P/ Z+ f
}
) S$ X! r# D3 Z$ F# d: F //////////////////////////////////////////////////////////////////////////
5 _7 E& T2 I) m) g. \$ S //开始移动" ]6 y. s: P! P a* w8 R
if (nSrc == nDestPos), T4 R' t3 i) T" x$ D1 P
{
7 M; F, r, D; o! E+ L# m7 } //原地不动
/ x& g T0 D: @2 v* } nDestPos++;
) z0 Q2 K* z0 D7 u$ R1 Q continue;
% T) p* z, j& I4 W: L% d- E0 ^# p }- C$ \' n5 y4 }& f. d* o
pInvSort->MoveItem(i,nDestPos);
+ O2 \$ Y8 Z) D$ x g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- O4 M& d7 r8 v: a Sleep(5);
! D2 O+ q& n5 }4 n) E1 N //Error("移动 - %d->%d",nSrc,nDestPos);" r; d, a# T' z4 E+ O& K; a! S. x. e+ K
nDestPos++;
" M4 x- G1 b: | }
6 v. B: r6 d! `; N* W y //取第一个元素的信息
. @, o. Y3 z# n7 r9 `; U /*) Y- |, a+ }) G+ T" O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! q, w' m, f' B/ Y
{) H1 K2 v) P l& r3 q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 i U4 Z9 z8 k1 k4 a6 x4 _ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 ]. p- g0 t0 w/ N$ c0 J) L }) ^+ u7 E7 V/ ~" b& a0 K4 P
*/& ~. K# _ ?9 U
//////////////////////////////////////////////////////////////////////////
7 X0 w8 ?) h8 @2 o; @& t' q) ?0 L break;
) Z1 Y) t/ ~1 { _2 _6 J }
/ {3 H, v: l; o( G$ p+ k/ S# k } + A% @) n+ h# w5 I
}
+ p, ]) b3 n5 P, T c) Xm_wndMenu.SetVisible(FALSE);. q" P# z: J- ]; } x5 V8 L
" U9 m6 u: N9 q+ U--------------------------------------------------------------------------------------------------------
- x; B. R; C. Y( P( q: `1 ~5 f0 Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), P! g1 M, X0 z% v8 p' D
{
- h3 J3 P1 D% S0 ?BaseMouseCursor();
4 U$ ~2 }( ` ]3 T8 H) m. i}! M6 ?& J% g0 R9 f; @
在其下添加:& q" l9 G/ V2 ], w6 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 b. W, q" t+ g8 \# ?) T: B{
2 x% P' R8 n7 m& wm_wndMenu.DeleteAllMenu();; {$ q$ R. y7 W5 Y
m_wndMenu.CreateMenu(this);' v- `/ E l- j9 V6 c/ C; m- k/ t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; @& Y- Z; g: z2 B; F) [/ f
8 c/ W4 H4 o2 [* J- tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& O& w$ r) y1 m* c{
4 a D! t' J' U* g) U# N, t- K' j //P以上级别才可以删除所有道具
' S& f9 v& `3 F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: h: u" D/ U% f0 u0 a+ r# `}$ ]7 ^* n+ w/ v; o: P; R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; \$ s. X5 i" A! H5 R& `0 T7 H, @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# \% L/ m; x7 @, X
m_wndMenu.SetFocus();
: N& _" z( u/ l" J' X}& `9 z8 o5 P' u4 {3 p1 h( h6 a$ V
------------------------------------------------------------------------------------------------------------
* Y; T$ g! Z# X3 R7 D*************************
! f j' ]8 |( d2 l8 nWndField.h文件
) _2 n7 m1 v0 F9 A! n*************************) x8 Q9 K! R5 {" J1 ^) ]
搜索:BOOL m_bReport;
. L8 i T- J; A6 C5 r6 C其后添加:% u$ f- ^1 o0 R( r
CWndMenu m_wndMenu;) ]7 v8 F( f! ?- N7 i4 d- _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% |4 J# ]0 F$ z
其后添加:6 a2 u' |2 ]+ d6 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" s2 H, y3 a- s- ~% c
# T0 }5 {$ X7 k1 G
8 a, k; @& }8 R1 K |
|