|
|
源文件中_Interface文件夹下WndField.cpp文件
7 a3 d1 P: h8 Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# p6 w; A; j& L1 p+ ^: X) q
3 ?) B9 x* Y5 K, Ostruct sItem
: \. B1 [! S1 l# B9 e5 Y{1 A1 l/ U8 O/ P" m2 H
DWORD dwId;
* ]4 J8 K3 h; x0 P3 Z( XDWORD dwKind2;
# Z3 d7 Q# M! ^DWORD dwItemId;
& g7 p7 N/ H# p$ E& \2 y7 [/ iBYTE nIndex;
* J9 ^3 ?) }- ssItem(){
, U6 K! v* P/ B D1 k; b dwId = dwKind2 = dwItemId = nIndex = 0;2 D+ e; M$ |7 w+ @; x! ?
}
0 r8 R- m0 K+ ]$ q$ [7 Kbool operator < (const sItem p2)1 z# r( e- [% l) Z. k- ]. t$ l5 o
{& S# H. s0 R* R' B$ V
if (dwKind2 == p2.dwKind2)# I o. u9 N0 b9 H) L8 Z8 P
{0 l Q( h `; ^+ G( M
return dwItemId < p2.dwItemId;; Z( @* Z9 j6 c' P% C: I
}else{ f/ u) ^: K; ?; |/ B) a) M
return dwKind2 < p2.dwKind2;
& n, n3 e7 ~% T+ i, k% f4 \) ~1 D }
`# ^5 d/ C6 A}! R; {$ e4 ^& c
};' ^6 Q3 _* I* C2 m; o9 {: q
class CInventorySort% @" I; \: ]- r( W" r) e; `5 J7 m" M
{
3 w; W: m7 n8 ~6 Z4 O$ P+ spublic:& ?2 |) m- y' X8 ~0 }
CInventorySort()$ F6 [, C7 V8 x2 Y! V2 i+ }# E; z
{
/ w& C# [: f, H1 H" Q4 N4 ` m_dwPos = 0;
6 R! Z& Y) n. |% i4 ]}) z y: N* p9 t7 |1 C+ V
~CInventorySort(){}. O8 r) u1 ~% ^$ N! p
private:( R7 P) s& Y& v+ h2 O, z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 q, a( _) r5 X9 I$ G
DWORD m_dwPos;
) o0 b0 q, i, f& C% g7 Ipublic:
p& W; C9 z- x) ~! _. m- Cvoid Add(BYTE nIndex)
8 \9 e2 r& ]+ [( d( c{
. p5 ]! d) a- T. R1 Y# ~) W7 P if (m_dwPos >= MAX_INVENTORY)
5 P5 i5 Q/ M/ r( z8 e0 E0 Z6 Y {
1 C( S& ?* |1 r1 ^# f return;; J2 D, c$ w- b3 B' _. y2 B
}
& e: X0 Q$ M9 J( M" O m_Item[m_dwPos].nIndex = nIndex;
/ E1 U6 i+ e6 [) u m_Item[m_dwPos].dwId = m_dwPos;
; g' l7 K1 l" j* a4 ~: m8 K m_dwPos++;
; x/ I7 [# {5 C9 {: K8 P}
9 R: }. ?+ ?; M# h6 d# ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; K2 L$ v0 Q0 h+ W) s{( N, M$ o! @3 T
for (int i=0;i<MAX_INVENTORY;i++)$ F7 P) x0 {7 D. i, g1 P# l
{/ H3 ^( h. G/ N$ a& u
if (m_Item.dwId == dwId)
/ ?4 p2 ]2 d- L/ @" x7 j B% M5 _ {
2 M8 k3 A" O* b7 L* f2 g, K return m_Item.nIndex;0 a q* Y& i2 a4 ?$ ]5 t+ A! y
}
3 F. A# r. d5 n8 v% c( ]6 F }. W$ n3 h; Z. U/ W/ B2 X- y
return 255;: L( u! _; {) p: Y
}+ f: \) o$ }. ~' ?- O! N* w
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! L& N. i* X( R+ o# o: r H C( W9 t{5 H0 t! i& V1 E. }. Y
BYTE nTmp = 0;
8 {4 P3 ~/ }# h2 p bool bDest = false,bSrc = false; a. I, [' u" ~/ k( d- V' x# g
for (int i=0;i<MAX_INVENTORY;i++)) a0 ]; |( a; Q' t( e0 D
{
+ n8 W; m. B0 o4 _# I0 \ if (dwSrcId == m_Item.dwId), B. H5 C( T9 j
{
$ l" z1 N9 O/ Q //id相等 则 改变对应的dest和src
8 w4 d8 C4 @( R6 N# ^5 M5 X- @ nTmp = m_Item.nIndex;+ x7 l' r/ h. }7 l/ }3 T+ B$ ~
m_Item.nIndex = dest;# X1 F. H& i* H Z2 k. r; i
}/ j; L6 A8 d2 F
}
, o: W$ N+ S/ P8 w+ _1 Y' [ //临时数据保存完毕,交换开始
4 o- ?' x4 m0 H for (int i=0;i<MAX_INVENTORY;i++)( x1 w8 h( {# p" e2 S, c
{
+ A9 t6 d+ [2 m' k, V7 `% C2 a if (dest == m_Item.nIndex)9 q' L) `* q* A( r
{
# o2 v4 p/ d$ R0 S+ | //id相等 则 改变对应的dest和src
" x& x; }9 J0 A" O7 k# K$ r m_Item.nIndex = nTmp;
( ]$ d& H4 H n }$ L C: F: p; l/ D% q
}0 h- z- |+ n; ^; k- U+ G: X' z
}
) r" t3 G4 l, P5 }+ c: Q};
0 S! g% i m' i1 S) p5 o-------------------------------------------------------------------------
4 ]4 U' R' I+ Y( N( r& [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, t, s3 w$ c" ` k( _搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ r6 _8 m! a7 e紧靠其上添加:
- y0 h0 `% @ x+ zif( pWndBase == &m_wndMenu )0 ^* |" m( M: K) {
{
) |8 q$ y# @3 h; ^, K* u& [" P3 Z switch( nID )6 l0 h9 R7 y; J
{
+ g: K' L, C/ q% H! H case 2:
6 C. d% s# ?4 p7 _) B {
2 n3 A( I4 S! R# T% C, s: F' E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; Y8 E& ~* K+ I/ b; P; `! q9 v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 \1 A" L! P* t6 P$ {" D6 o
{
2 B9 i2 t* l8 M7 c) `5 h7 o break;
3 |1 f% f5 g- b }1 Q* w* n5 Q' m8 F: D7 S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ @" R5 w# e8 D& j6 a8 x {
# U" P+ k% k J: j y/ ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- X5 x) B/ N# n9 m6 t
if( !pItemElem )$ x, w0 d0 @1 {; A7 K
continue;8 i) R' E& v2 g( S
if(pItemElem->GetExtra() > 0)
# {) P j4 R+ O& u9 u continue;8 H+ `5 f! W" t' y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 o6 x8 f% g0 ~$ h
continue;8 v' Y0 C, R, Z4 {# I3 W1 e1 a
if( g_pPlayer->IsUsing( pItemElem ) )7 n! L: D+ f4 m. W$ V3 Y
continue;* \. ], n( v- [1 Y) A" [6 V
if( pItemElem->IsUndestructable() == TRUE )1 f; D( s9 L& d; a( V2 j
{
$ p) K( p: c2 \# F$ B" X( h' q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ u4 F) N% u: Z# H7 Y7 C
continue;* _3 W D7 r5 J
}5 L) L" l8 g" a3 w- |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 ~8 e& {4 {) |( G0 \ }
{; m. F$ [! c5 K% |( q$ S break;5 S$ @& L0 r3 _
}
/ v( U6 w& K: o Y/ ]5 E0 X& C case 1:
# n& G7 |5 m( n {
8 b7 w7 g2 o6 W! ^2 Z) V3 T1 t7 Y //整理背包
- q: a0 q0 O/ R3 s" K //////////////////////////////////////////////////////////////////////////
' ?& S/ v# k7 `9 e* ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' E, i; D9 R* w* Q
//////////////////////////////////////////////////////////////////////////( P5 @2 ^. }* f
//////////////////////////////////////////////////////////////////////////& `% C G- H5 s2 @. r: ^2 b4 {
CInventorySort* pInvSort = new CInventorySort;5 B( j" N9 ?7 x1 [. m2 C9 Y$ z
vector <sItem> vItem;3 w4 ^7 O: G! V0 f! S1 _5 f; ]
vItem.resize(MAX_INVENTORY);//初始化大小5 O6 u* M3 ?9 i7 N8 R" J0 f9 \4 x
//////////////////////////////////////////////////////////////////////////
0 `; |, I+ ~) C% F, W+ }, A) z //填充数据; ?9 G8 V( @6 F
for (int i=0;i<MAX_INVENTORY;i++)
0 k$ q. w( p1 a2 Y! o {9 C! d l5 C% A0 o9 i* `6 Z2 e% N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: \6 C. o: m0 E- I6 L+ H if (!pItemElem)/ U( }( B% h( W* I
{& v+ l; A2 l* L- N6 N8 _
vItem.dwKind2 = 0xffffffff;
% L/ x8 g* F: n; M vItem.dwItemId = 0xffffffff;. j8 {! K6 n b4 S) T3 l1 g( d1 Q
vItem.nIndex = i;: I/ U$ r, p9 F" t7 @9 B
}else {4 u8 S5 _8 W! K) f, R) E+ d
ItemProp* pProp = pItemElem->GetProp();
$ q* E7 a4 s- ~& ]7 p vItem.dwKind2 = pProp->dwItemKind2;5 K% W" H# l) h3 n% |% d
vItem.dwItemId = pItemElem->m_dwItemId;
/ F; u5 n( A/ _5 \3 @. ^# [ vItem.nIndex = i;2 o% }$ ]$ J0 S) J9 D2 i1 u2 ^7 W
}
' C [9 G& v. e2 M" I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. }1 W8 k3 i3 k$ k$ Z& N' U. o
}
6 F h. o' {# d* S' P ////////////////////////////////////////////////////////////////////////// L& q( l0 ]+ j% `6 r* s3 p% I
sort(vItem.begin(),vItem.end());//排序/ i" S) {7 q( J G- a; [+ J
//////////////////////////////////////////////////////////////////////////0 T" @! |3 F @3 \. _! Z
//交换
! y. R- O) E. I for (size_t i=0;i<vItem.size();i++)
% D ^" T7 h. q( M7 L3 M7 D% }: B {% C1 v* K" x7 r+ F# Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; H# D5 }# C9 {8 S! M3 u3 d1 u pInvSort->Add(vItem.nIndex);) I; z- u, v1 D- p
}. J8 z5 s5 x0 K* d: m. X: F
BYTE nDestPos = 0;
" ^) s# G. J1 F for (int i=0;i<MAX_INVENTORY;i++)0 Y! Y+ F/ n7 p( }/ y( ?
{
3 c( T5 d i) n+ S$ [- T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& r# [5 v$ V" D5 ? C
if (pItemElem)
5 a k% _3 j. x; W, @( ~* K% W. k: s {
( r( B9 c" h5 V2 u, u if (IsUsingItem(pItemElem)), z" R$ g$ D$ b7 C
{
: \. M! l. I' R: g/ q: z( L //这个位置无法放
' T5 }; f* i2 |6 }& h5 Q @2 u nDestPos++;
$ f2 v' p4 ~. e0 @' W }9 u+ c ]0 e' ?' q' u# Q
}
* T U% H2 f" y B g6 N BYTE nSrc = pInvSort->GetItemSrc(i);7 Q3 `$ X( T" s! z$ y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 ?' i! X4 @% { y9 @5 D' ?* ]1 R4 |9 W
if (pItemElem)
. w! U8 [: `0 o9 d/ ^% d {5 y! o/ B8 M0 d5 n' w0 W
if (IsUsingItem(pItemElem))+ O! [# S% H0 Y N" X8 f
{
( O6 a- Z0 L5 z0 \6 G* W //这个道具无法移动,跳过
& g. N0 u- }$ Y! h' _' g continue;
% E1 N ?" {1 k* y9 y }' ^6 j' Z1 c0 ^! p" X2 M) [
}else{) j a' ~* l% C6 o+ v
//空位置 不用动
8 V% G0 ^# l! e8 }5 B2 Z( X8 L+ H0 t continue;
O4 Y/ N- C5 U2 V, ^5 w" G ` }9 T( U; Y1 |: B+ ^/ }
//////////////////////////////////////////////////////////////////////////. ^ P5 o6 w4 P- j$ N2 g
//开始移动! k) D+ P6 A6 e
if (nSrc == nDestPos)5 b9 E' Z4 v% j. }
{# z0 k' t( i3 [3 l( R+ ?
//原地不动
+ o+ v8 n- {5 l$ q$ R' Y6 d \ nDestPos++;/ k8 h6 P- u" {: b
continue;" |& Y$ }) v* B \
}' |3 n* `' E' [
pInvSort->MoveItem(i,nDestPos);
2 ^3 P' h+ ` X% ^( u" @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 e6 W- m) g# P/ E) f& @
Sleep(5);+ q8 m4 W0 a: j! ?5 |
//Error("移动 - %d->%d",nSrc,nDestPos);1 F, T" L, a. x1 {
nDestPos++;1 Y* Y: F4 P3 v6 C5 K
}
1 }( ^5 H" m6 Q/ P A$ a7 H& ^ //取第一个元素的信息
. V X+ j9 @* y/ F- S ~% }' _ /*
' o8 `) |6 B; {0 y5 v+ b- S! F. F if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# U8 {; j& W4 ^9 R5 ?' Y* M" @4 r {: X6 j' E7 O5 }0 F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ \# u5 _& i. C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 x! G- A% b- \ ]0 n# D
}
- P" ^: c4 t* {4 m1 k */# Q8 l& O& t1 ~# T% r( p
//////////////////////////////////////////////////////////////////////////4 }) K2 X' V! d+ ?* W
break;
8 q4 |4 I- j+ \" E- a }4 F& {5 ~; j: @1 {. P+ H
} ; w9 [& |7 m2 }/ [
}
- E V4 B0 U S% @$ b" |m_wndMenu.SetVisible(FALSE);( A# a- ~0 X/ B
" A+ Y: F- p/ q1 S# T2 W--------------------------------------------------------------------------------------------------------' o; l H( x* g. Q9 w% {* @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# o" q5 Y: [7 \7 \# L{: f) E' H4 O5 c1 G2 h
BaseMouseCursor();
) T: i" S2 g. ?}/ s: R* O, L3 D
在其下添加:
& w5 p4 Z( K6 L. J# q. rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: t4 {) j; X# x+ I) b{% P; U- {- O* x
m_wndMenu.DeleteAllMenu();
6 c+ [" m& r& l) p8 B( K O1 \m_wndMenu.CreateMenu(this);8 n# H5 b5 W; l: Z! M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" u0 r. o3 ~2 W8 V& S. H7 x2 B4 }. Q. E7 |/ ]4 ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) n7 C! v5 o! i. d
{2 O" [0 y8 I4 B7 L
//P以上级别才可以删除所有道具, |8 |; N9 n+ I6 m9 A1 c( W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! i/ `; M3 X! M+ C x, z
}. H$ m: C/ Q) X4 r; k# r2 d5 W6 s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' l) n" z. J |7 H' X \7 s' E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 H% c: H% i1 N Hm_wndMenu.SetFocus();
, K& I8 r( g( C7 D. X}) U9 _, ^; H3 V# s) @; v+ H
------------------------------------------------------------------------------------------------------------: m) \0 V8 Q; c5 P! s: g; B' W; a
*************************. q* A1 x& P' @0 k3 h! z2 A
WndField.h文件! v e9 E$ L4 J( A/ @' ~9 `
*************************" y) w4 H; P1 d) ~% E2 ]' t! s
搜索:BOOL m_bReport;
4 e8 q$ f; O& @% b/ Q4 D- h0 G其后添加:
p) n( \$ Y( Y& aCWndMenu m_wndMenu;0 G% |/ m6 g; j/ {$ i U; X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 \6 J G6 q" l" j3 n- |
其后添加:- \6 w0 v4 O k) X6 X+ C' O
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) [6 z S4 W5 H5 Y0 R" C4 q1 X. _% |% k5 _( | l7 y
# O; j: q# G' ~6 [8 K$ x
|
|