|
|
源文件中_Interface文件夹下WndField.cpp文件8 y w6 |$ l' o4 Z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* U: d5 Y' i5 H. e* X6 H
6 I4 o: Q2 n( I: ?5 H7 A) tstruct sItem/ q. n) [5 ^* a
{2 \- s" C1 q5 S0 i
DWORD dwId;
& w/ n5 x; |" b1 w% ?' P; QDWORD dwKind2;. T' @9 B3 m! Q1 r: ^/ m
DWORD dwItemId;
8 W: @0 z2 x! E6 Y) D8 h/ ^BYTE nIndex;
8 G5 s: A: r* _6 rsItem(){
0 X5 E5 P: }8 ]4 h dwId = dwKind2 = dwItemId = nIndex = 0;
" u9 ]% ?7 m+ r. L/ L}' \" i; O! A8 R% @+ S W
bool operator < (const sItem p2); k0 K+ A H& a! i
{4 G4 t/ ?! t: |& U
if (dwKind2 == p2.dwKind2)
7 K+ \! C& a& |. Z {
' t7 \" e; Z, q4 }" g. M5 B return dwItemId < p2.dwItemId;+ @# u7 @3 O( U# }% ~1 J% C1 C, p5 @
}else{. L4 ~4 g* f* A2 ?( A6 X
return dwKind2 < p2.dwKind2;
1 N3 J* C9 n5 [) y n }
9 N8 m1 ]. ]. u2 S' z( o}9 T% R" W/ }; [; f( q' _4 w" s; T
};
" J& U7 e9 Z! {6 V* N3 a( o6 Qclass CInventorySort
) B4 u8 x6 d. b{; W( A, C$ N# T) I4 Z
public:/ {# U' R/ r% }# m5 r; p5 W- e7 @* I4 Y" [
CInventorySort()! i6 O1 |# T9 _' b0 v; k
{# {+ R- S- [ k+ P, B
m_dwPos = 0;! r8 I5 \7 E) Y) S* p
}
" t& K* S- e2 ?) [% x; W. ]: z~CInventorySort(){}0 m9 n9 c8 W5 L9 Q7 ?
private:
* u5 t1 b7 Y$ L8 A" esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& _/ G, v# C6 D. I) I
DWORD m_dwPos;1 `* j) S& Z" R
public:
l& d. B, m! @# R0 w T4 x. @3 Kvoid Add(BYTE nIndex)
: K2 Z0 v) g; P. {{7 {! c0 k8 M4 |5 ~
if (m_dwPos >= MAX_INVENTORY)
0 ^" k* m; t2 h' Z2 P3 R$ r {$ x+ j1 u/ g; o. ~+ j
return;+ R( m5 _' }% Z/ N% Y, ?
}
8 M$ H( Z7 D& r$ L K) V m_Item[m_dwPos].nIndex = nIndex;; F- L) b+ l5 ~8 x4 X3 j
m_Item[m_dwPos].dwId = m_dwPos;
f9 O4 U# K7 ^: Z1 p5 \- {9 c+ l# N m_dwPos++;
7 W5 z/ [( P" d4 @}
$ e% }' x& e6 t% \: iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ p' s {2 V# h{
2 l. t* H* m5 d7 O for (int i=0;i<MAX_INVENTORY;i++): k$ ]! }( ~" a6 K1 d( K- O
{" G4 O. H% }4 o+ w& ]
if (m_Item.dwId == dwId)8 |! p& k( t0 \0 _/ w% U8 h
{9 K3 r/ D9 D L7 ?5 `
return m_Item.nIndex;, Q9 v X( @0 I
}! z* _; s! }* n% V( ~& z/ i
}
7 v' @8 B q$ r( k3 ~ return 255;
" e5 C" c) I. V}4 l# e4 g# w3 j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# i+ H7 s# I5 D/ Q{
4 F# ]& q" U, p( S+ r x: {2 s; t BYTE nTmp = 0;
0 D' I a7 ?! L bool bDest = false,bSrc = false;0 C4 t* f' G1 A- \/ v5 I/ b
for (int i=0;i<MAX_INVENTORY;i++)
* W; w: i4 ~% a# Q B+ Q {
& D) F' J( ] t$ D/ W if (dwSrcId == m_Item.dwId)( ^7 ]$ h3 i% x2 ~. X! I
{
4 m: @5 ~: l" Q m //id相等 则 改变对应的dest和src. V2 H) C% f8 j) l# D. Q4 u
nTmp = m_Item.nIndex;
3 }, n% b/ t( t- L6 \ m_Item.nIndex = dest;2 x* |: U d: e8 Z% Q1 E
}
4 X7 t2 S, b/ |! _' a }4 C1 @# }( r3 b3 r; v$ n& p" U
//临时数据保存完毕,交换开始
/ x% L3 ]9 G# c for (int i=0;i<MAX_INVENTORY;i++) z8 n4 p" o8 z, G( h* `/ b3 r
{; p' l5 I7 b0 v4 e: F9 `
if (dest == m_Item.nIndex)8 ~5 ?$ n% ]( Z9 ~, x, S' N% T
{
1 f( w# p% j* }9 X G //id相等 则 改变对应的dest和src ]& Y+ o6 e; Q! u5 m) `
m_Item.nIndex = nTmp;
2 E6 G. a8 S7 |. r }8 R6 _1 l1 s" a9 z2 x
}' B( @5 j0 ~! O$ L
}
\7 g/ o2 G/ Q0 p3 S6 }( Z; z2 }( h};
) l9 E( y! ~7 I-------------------------------------------------------------------------# v1 u1 O9 X8 e) J9 }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ u0 d- n2 x) \% q% j2 `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 d4 _: I* f1 Y/ W7 R4 q, U0 H
紧靠其上添加:4 d& e. M+ G! ]
if( pWndBase == &m_wndMenu )
$ q8 h$ y q# q+ N+ N: j( C1 @{# H3 [. S7 @( i
switch( nID )
6 l) }- s3 s" |/ s- k7 C) r# X: o {9 g( V% k3 b, `
case 2:
) m8 {3 a1 S# }6 }4 Z {
) k6 W2 H) i$ ~. K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" ?1 h% ^ b4 C# ]: o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" @ l# c* u% }8 m) b5 D {
) V" | }. L* c* R& C! u break;6 X; F @ m% r1 W: B
}- ?0 }8 L1 ?9 X# p& {0 i+ {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 s0 [8 W8 B& m- a4 l+ V {2 E0 s, K1 S S/ r& B$ n0 @* P# y9 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" Z; E3 I3 L4 X; i5 r if( !pItemElem )2 t% p+ P" s0 h2 B: `
continue;
+ T4 m; m, ]* O if(pItemElem->GetExtra() > 0)& _( L4 ] }) u5 f& ~/ D/ L- y
continue;, |, h3 G5 s, }: @! P0 n* {$ j+ i4 D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * W$ J* k/ e# N( E4 S, \
continue;
9 w9 J( e: a% E0 P7 l) r3 S if( g_pPlayer->IsUsing( pItemElem ) )
2 x) _ m4 d0 O! g; ~/ Q8 | continue;
: X9 @0 h! ?6 R5 A& T) u) H if( pItemElem->IsUndestructable() == TRUE )6 f7 k% c5 e9 f. ?
{
3 V5 Z9 G$ k/ X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 v; T4 q9 ]: k; n4 _ continue;7 n/ ]+ \( {% t- E+ n# S/ v2 {
}
5 c: u5 X9 ~( J/ j) \1 n6 U- N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ p* h. O/ u5 `3 X' E1 J: h0 T }! q/ }% D8 f: @& P
break;
1 J' s. Y/ u4 G8 n+ R3 I# @ }
$ k% z" T. }0 L: C+ N; M case 1:
4 y( n$ ~) ] m& X; @: ], c {) e8 n# \ p- b; M. e
//整理背包
2 V5 n8 q; V9 `7 Z" H9 K; t9 h& v //////////////////////////////////////////////////////////////////////////
, E# C% z4 s# W; B/ p( b) ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 E9 s) K* Y& I ^ //////////////////////////////////////////////////////////////////////////
- X% u# V5 j- h ^1 Z! O2 E2 N //////////////////////////////////////////////////////////////////////////
+ H0 h' D9 i( a6 I CInventorySort* pInvSort = new CInventorySort; z6 n+ u) E! Y% e9 D1 @6 ], g8 X$ p
vector <sItem> vItem;/ v# j4 N3 P( S: k) ?
vItem.resize(MAX_INVENTORY);//初始化大小
* w* a% w* b6 M# P% J //////////////////////////////////////////////////////////////////////////
9 K0 I8 ?8 i( u) ?( Y //填充数据
0 m+ f9 u4 |/ N$ ]. S for (int i=0;i<MAX_INVENTORY;i++)
! |+ z; s4 C% y) c: s7 I" x& p {
* \7 R1 ]5 K! e* y4 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 x( [& J$ K3 n7 j$ f8 W3 y
if (!pItemElem)3 c& S f2 A s+ ]
{( R: K( r9 }3 p" U% o2 q& s" Q1 K
vItem.dwKind2 = 0xffffffff;' d3 j( W9 K# u% n0 W! s. V
vItem.dwItemId = 0xffffffff;1 M' G% e7 d# J
vItem.nIndex = i;* a5 S. w# L! M" [! } Q
}else {# C8 G' v; a: A; N9 L
ItemProp* pProp = pItemElem->GetProp();
! j( f( M, [( p4 K vItem.dwKind2 = pProp->dwItemKind2;7 l, b# R2 ]0 [2 n0 k- f
vItem.dwItemId = pItemElem->m_dwItemId;5 h0 Z/ M. B9 D2 s
vItem.nIndex = i;4 w" C# c' g) W" x5 E
}
7 O( {: |3 {% R. Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- Y/ V$ m( C; Z5 {! n* v }
0 Y S% n& G" A. C# D7 w8 U //////////////////////////////////////////////////////////////////////////, k8 b$ u! Z4 U' L7 I% T
sort(vItem.begin(),vItem.end());//排序
2 A5 f4 U% `9 \ //////////////////////////////////////////////////////////////////////////
?$ z6 i- i5 V0 ^9 ` //交换2 _- E1 G( U; k
for (size_t i=0;i<vItem.size();i++)
" j; C/ i' g& p- ^ ~, K {6 t! w7 |, k% n- H$ A" `8 v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; e j. _# }' h+ `# I6 t pInvSort->Add(vItem.nIndex);
/ ?% J8 m) w. y& b& _ \& ~ }
& o; R5 [. Q/ n, ]7 I BYTE nDestPos = 0;
0 K0 B V9 N5 |+ P' \7 ^ for (int i=0;i<MAX_INVENTORY;i++)8 Y+ B) r( x0 m8 O4 X8 R* z
{
+ ]5 k; ]( o } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: n2 }6 Q; m9 u2 e if (pItemElem)$ J. H1 l8 j) |% P. \- l
{
; d; V' B: V- J: C9 K4 w if (IsUsingItem(pItemElem))9 Q1 x' a7 |* U( o' k5 H+ v; j
{
& E1 H. R6 b: l6 }" o' V //这个位置无法放
4 S9 b3 L. \/ j7 ] nDestPos++;- o) Z5 Q- [5 W; G7 v/ B3 v; U* M
}$ B) q. h- q7 d3 R W, e2 Z$ g( j v
}4 h" b- M5 h" e4 y6 ^0 {( |) \
BYTE nSrc = pInvSort->GetItemSrc(i);
4 `( i* t+ r( ~& w: X' N pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 o" z& A! V: \: \9 Q9 @1 Y8 c if (pItemElem)
+ H' y9 b( r0 Q$ R {
) o' E( O* L# a! ` if (IsUsingItem(pItemElem))5 p4 D% m6 b% @% ]- W
{
6 \; s- _$ T7 L //这个道具无法移动,跳过: D4 N5 ]3 E z7 |$ X! Q
continue;4 f& f* \; m x7 ?7 x
}
$ j& L* ?, k _* u1 y }else{5 p; x8 ?; Y( M2 ~% ?
//空位置 不用动1 @ [8 F. H& W/ j4 \/ u
continue;: T+ Q \/ L% ~# `# {
}$ u# X7 f- e) ^3 S/ v1 r
//////////////////////////////////////////////////////////////////////////
; o2 M$ }3 w0 A //开始移动
# x/ {& G, d/ u3 d; r5 h if (nSrc == nDestPos)7 q* z7 j" f8 y* c
{; L0 D" j* A7 ?; |; Y& c9 h
//原地不动5 g9 ]9 _6 w# D/ C9 F
nDestPos++;
+ V- {' Q/ e( Q( z6 F' V continue;
2 a) f# |4 O4 H+ p2 Z }3 [) @& m" ^9 ?$ g' I4 [/ w
pInvSort->MoveItem(i,nDestPos);" j% X* z0 Y1 b' U) N C0 W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) ]: c8 X) D# [' r! K$ q Sleep(5);1 c7 u* w: Z' O* n: ~& x+ R. p
//Error("移动 - %d->%d",nSrc,nDestPos);
% `% o0 J6 R7 A+ D# a nDestPos++;9 [" Q: P& g: M6 e! f
}9 |! ~# i* z2 J; m/ P( T
//取第一个元素的信息
7 ~% x- ]; U5 a# ~* g& R- x /*
3 ~+ v: c% [: s if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 s3 c( ]' r) `8 g4 c4 W$ k8 @% m {8 V x; z" @. I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( x" Y4 v. x7 d; Z; b5 }. ]
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* ?. M$ w: g4 \1 W: w3 j2 _2 K }
$ ~9 ]" b1 X' |6 ] */
`( |) G1 C, g //////////////////////////////////////////////////////////////////////////$ f8 }% j/ V% }, V' z
break;
1 i$ ^8 I7 z* B5 _ }6 ]3 `% {0 d1 H+ `1 p' n
}
2 {5 e3 G4 x# L( K; ]# R}9 L7 T9 a4 w0 A( L- K" d7 X
m_wndMenu.SetVisible(FALSE);
% |( [: N' F& k: @
/ Z( Q- z5 j9 W& j0 u--------------------------------------------------------------------------------------------------------
4 e* p5 F$ A# B5 Q0 J' H4 ^7 ~' c1 G搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 c& c6 p7 t% y! o
{+ p& J' }7 a0 X# T* z
BaseMouseCursor();# f8 r! g: Z2 n
}/ k) a6 F5 P+ i
在其下添加:
. @' k" _; [" a7 n2 Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# |6 B' y M- p% ^ p! D6 E
{7 i1 E/ J3 G6 g& r0 V
m_wndMenu.DeleteAllMenu();" V0 p; x# }$ T
m_wndMenu.CreateMenu(this);
* H4 U( k* `3 ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 y7 U; j5 l \! g. `8 l5 E6 ]
`8 V& m! f( ~9 v( ]0 q: Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" {) ?7 }/ i2 G{
1 }" M) ^- M& a' M" u: | //P以上级别才可以删除所有道具- S4 D* ^4 R/ w4 a4 Y7 \0 }
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 Y7 G8 O5 u" I( C
}
8 A* r. D2 u& @3 G2 a+ Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( Z0 V p: E( a' [8 y" e1 ^; C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' {. O8 i8 [+ F# N1 z
m_wndMenu.SetFocus();
0 ]9 c1 W" H! j: Z9 g}& Y. W* X( C( t7 F* F
------------------------------------------------------------------------------------------------------------3 b% w4 f1 t8 a* s( ^
*************************5 j1 g/ m& B$ K4 K
WndField.h文件
2 ] Y7 o" I% J. I*************************9 |, Z5 m8 b. k
搜索:BOOL m_bReport;# o2 s/ v# }5 u- {6 R6 T
其后添加:& I" K% \$ v2 R, u1 l
CWndMenu m_wndMenu; Y. s/ ]- c. s! d1 g3 J) b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 p W' Z E3 P+ @8 E
其后添加:
9 B8 m% P$ ^5 h7 bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
& @: O* p. Y7 S3 h
$ q5 y0 e% Z* L0 M& I6 p# A" _0 S6 v$ ^5 o+ r
|
|