|
|
源文件中_Interface文件夹下WndField.cpp文件
' i6 T! b: C$ q5 c K9 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). \# a! X. t! x% P" c
2 w8 T% V. @4 I$ W! {2 ostruct sItem
9 W" j3 U; w, r- U5 x& ?# G' p{) k/ e3 Q, y T& I8 r
DWORD dwId;4 _0 h% K* X( o
DWORD dwKind2;1 ]- e1 i& Z7 x2 Q% L0 p
DWORD dwItemId;
7 ~& q5 ~2 r5 V! [. eBYTE nIndex;6 M2 R+ d6 O' M1 |8 @
sItem(){
( ~5 I# n! V: w$ a( v dwId = dwKind2 = dwItemId = nIndex = 0;& t( v7 m. b$ [. x6 G
}
# u8 I- m* R$ W" [bool operator < (const sItem p2)
) }: v( u4 R6 k8 _{
5 \$ F) d2 ^7 Y if (dwKind2 == p2.dwKind2)% D. u8 w e) z
{
( B' a$ X0 ]( b; \) E return dwItemId < p2.dwItemId;
. B5 h% P3 w& _( T& P }else{# f/ e* V7 [: `* A' d8 H7 @0 V
return dwKind2 < p2.dwKind2;
' x1 u+ B. v5 P m+ L }: X" n& @" h" P$ T( h5 ~5 p- z
}% M. k- k! G1 F4 H$ |. T6 ?& Q7 U6 l
};( Q7 F( M( c' K9 t
class CInventorySort
: f2 ~9 a& b! ], l$ G{- i9 p! e2 V& h4 C/ A+ l
public:
. p5 q* u3 Q; u/ I9 F( @CInventorySort()
: d1 e! A2 I, H+ h* N+ w" J{
5 ~6 a& |9 W8 h m_dwPos = 0;4 W' [! N3 a1 `+ I
}
0 V2 F- Y. j3 I# D2 F) i: G- |, I~CInventorySort(){}
- w/ S2 M7 s3 n5 F% {private: V! g/ w% ~" u0 h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 g* I9 E+ D, O X0 e+ E5 `
DWORD m_dwPos;/ Q' W" l7 j8 L; I+ d+ R; y Y& @% l
public:; C, {) f1 e( \: M d
void Add(BYTE nIndex)
) @# V1 X7 d3 P7 H8 x5 ^ w{8 p' |4 t9 J5 I- e, F" V* b
if (m_dwPos >= MAX_INVENTORY)
' j8 }( q1 o7 I {) c% G+ v; | \( z( v
return;
% {6 P: r+ e1 ^9 S }; V. F/ p g {2 |# }
m_Item[m_dwPos].nIndex = nIndex;
6 z) M" j; ^5 S; A m_Item[m_dwPos].dwId = m_dwPos;& o3 u7 |; }; z6 g4 x
m_dwPos++;
; N0 U5 x- M/ N X& J}
9 m! G% \1 J, wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 G: d) w+ ?' p9 M2 D& O5 m{
" z" F2 |* a: w! X3 F# l* H for (int i=0;i<MAX_INVENTORY;i++)) |& B1 d) l1 ~$ O8 v# ^3 N
{
, x1 P+ z! f8 y" L" Z3 L) o& M if (m_Item.dwId == dwId)4 c0 b9 z2 g+ i4 k
{4 I+ C0 b! U9 w- K" t$ u9 V
return m_Item.nIndex;5 g0 I) A/ t6 z9 {( Y, b# L
}5 m& X5 Z4 t0 x3 B w6 f# d4 V! M" `" w
}
" A2 c, u0 W1 H5 {, [ return 255;
! Q8 c; g8 X# l$ @}
8 _+ g/ G# |7 \- P* q* Zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ [6 D) h/ p& R* t{% b" A/ b9 z9 b- R8 ?/ ?
BYTE nTmp = 0;9 A& z* @7 ~$ O
bool bDest = false,bSrc = false;
3 |' p6 j a$ K; ?# I for (int i=0;i<MAX_INVENTORY;i++)
/ \' k; Y; l% g4 d& Y- G' R1 S% g1 m {7 N6 w- |8 ^, T E
if (dwSrcId == m_Item.dwId)! k/ X+ f4 `4 z+ h+ D
{
( ^( V6 M% V, n3 a) o //id相等 则 改变对应的dest和src
( d/ @) l. j& P1 p" A nTmp = m_Item.nIndex;
; z8 I& c, r2 J: p5 N& _ m_Item.nIndex = dest;& {( Y! p/ J5 V- K0 Z# o" W
}
# r( [" P0 A3 H4 r6 T7 d* M }, i) O, n2 @+ \ Z' e% Y
//临时数据保存完毕,交换开始" W( X1 m$ z& A, Q
for (int i=0;i<MAX_INVENTORY;i++)( ?! M5 ~) X8 n* x/ }# e" c$ f
{
8 d! I+ c7 C3 n8 S0 ~1 U+ W* ` if (dest == m_Item.nIndex)
( ^( ?6 Q5 x2 t( M9 F1 Y {4 J$ I( G8 `% e# m( f8 l- m
//id相等 则 改变对应的dest和src
% R( o* B8 s% D) b) | m_Item.nIndex = nTmp;
" e4 w9 @ M F5 P }# \4 W9 K! \6 A1 A
}2 L. h) x6 \1 i& d
}
! K2 f6 [2 d* U5 w- s4 c. v0 y};) }7 o, j3 o9 i
-------------------------------------------------------------------------8 y% H+ |- @5 V5 h9 i) Y6 S, V
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( P) i4 F: m" H- O+ c7 I& H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ \5 O' X' R5 w4 r* K; X2 V+ I6 z4 O紧靠其上添加:
) p0 Y5 o7 c7 d' w. f6 Wif( pWndBase == &m_wndMenu )
3 k, V# s( z8 w{
" u2 v% a0 e5 _' I' B switch( nID )
" \! K6 ~. J% b. V; O7 x# ?0 U {
# i- p2 f# `" ?2 X' G4 h( N' R% {; A case 2:. H$ k. j2 g# ~; w! y
{/ S4 Q( [; Z, V E5 L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 S" f/ z9 s7 ]# k) j6 g5 j3 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ J- e: S/ s& [$ r5 e. C6 C
{
/ C4 f7 f. R5 g. f break;# |' A* ]0 y' d% c7 X$ X4 G/ b2 I2 w
}
$ H, Q1 W4 [4 R& q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 g% [# y8 I M {) O% l) ]# q; x0 ?3 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! E& U7 Z# E* E. ?- E if( !pItemElem )
: [+ D/ C9 ]& V8 Y. r$ ]' Z continue;
3 p3 W- r: P0 x8 b4 T! r0 a' \ if(pItemElem->GetExtra() > 0)4 ~1 J$ _9 L0 J F) `
continue;
, l0 Q3 ?* a" T7 f7 j$ q1 n3 A/ T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . a' s( V4 t/ a0 P% h
continue;4 e. z5 S/ j. }# Y! C, ^
if( g_pPlayer->IsUsing( pItemElem ) )5 \! n9 J/ x+ v1 C5 |7 i
continue;% c% p! \9 q7 q. S0 ~" X
if( pItemElem->IsUndestructable() == TRUE )' D. u4 i) L2 q; s/ n+ u- I
{6 o4 f0 p" S2 M: b1 I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( i' y! |) m) D6 P) K/ Q# s continue;( I6 L6 L( b. }. g" j% Z
}& `. `& z) ]- z" [/ |7 @/ K
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' P! u. K4 h- x- M }1 L" `6 a, a! F; ^' \
break;, |1 M6 q3 P1 ?2 a/ H
}: O! s* f2 ^8 C7 P6 Q( |7 X: f
case 1:! n& B3 L# z" n+ X
{) a) T4 |+ o4 y& `/ B1 i
//整理背包6 c# s7 J, j2 N
//////////////////////////////////////////////////////////////////////////3 ^" J& @( q% t4 F u1 u3 J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# S2 |7 k, e" I- C, D8 m
//////////////////////////////////////////////////////////////////////////' k1 [5 y" b8 L" A+ J
//////////////////////////////////////////////////////////////////////////
2 m' B- {' G9 Y! D1 e CInventorySort* pInvSort = new CInventorySort;4 ~2 X! U; Q/ C \" M' |' E
vector <sItem> vItem;" }0 G. X6 h1 x4 g. ?7 [' e
vItem.resize(MAX_INVENTORY);//初始化大小8 u% {7 U$ k0 H" o
//////////////////////////////////////////////////////////////////////////. T A: j$ p/ ]/ O' m9 u
//填充数据
( B( G, T: N* E for (int i=0;i<MAX_INVENTORY;i++)$ R9 D: e y' a6 h2 i
{
/ b3 G: }: ?% v2 Q/ q9 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 s9 G# O3 [6 I: C if (!pItemElem)
- c7 U; i6 n- }0 B8 F9 k4 B, ~ {9 u2 w# L* _7 k O
vItem.dwKind2 = 0xffffffff;: Z$ n& c' F8 Q9 a
vItem.dwItemId = 0xffffffff;0 S+ r9 K+ M1 o% }, A/ @8 G- P. c: G
vItem.nIndex = i;# @( G$ x& n n8 C5 y
}else {' \3 B: p( n9 P$ C( _
ItemProp* pProp = pItemElem->GetProp();; l+ o3 a. b0 P& u" @
vItem.dwKind2 = pProp->dwItemKind2;
! ?$ Q$ D0 f; ~# X vItem.dwItemId = pItemElem->m_dwItemId;
" `" m2 e2 t+ Z& n vItem.nIndex = i;
5 s$ G9 D# ?6 r }
8 y& M( z0 b: f# B# ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- f* }# `: C6 ?5 V
}
& Z$ I6 @( b" s( q; N) `- B //////////////////////////////////////////////////////////////////////////, b' M7 Z" p6 q2 p$ ]# g
sort(vItem.begin(),vItem.end());//排序
- d" m! o/ p- Y; t h //////////////////////////////////////////////////////////////////////////
* o* i" V9 r! R( J8 p) @/ o( \ //交换( m1 U0 i$ {3 X: z9 M1 \7 t B- c
for (size_t i=0;i<vItem.size();i++)
" `( x0 ?% l! F" z# { E9 W {
5 s0 m2 k. k; W& `8 {! F! B! Z" y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! T( M4 \) o$ t( p A. { i8 ` pInvSort->Add(vItem.nIndex);
0 B0 u. k2 G# c. ?; W }, M! T( F, }0 S: f6 O/ X
BYTE nDestPos = 0;
# y4 \" |# u; Z' W( p8 ?6 b for (int i=0;i<MAX_INVENTORY;i++)3 J! Q; b- x3 ?) ]
{4 t* o1 U0 J1 K4 m& q* s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: w' ~/ i4 {( r) b
if (pItemElem)
7 o7 d" q0 h2 [8 T/ W7 K4 i- | ] {
. @# Q: Y+ I( i. w7 ~2 o if (IsUsingItem(pItemElem))) F# K) g5 a" N4 D
{+ x9 N4 f9 X$ m9 g7 T
//这个位置无法放9 l0 @- S: k' b3 \1 b- a3 N! T3 |
nDestPos++;8 {/ e2 G }9 e, @
}
2 N x: h1 D5 @% |8 x) M/ g+ @- F: O& F }
D" j" k0 O8 t+ s- p BYTE nSrc = pInvSort->GetItemSrc(i);, w" t, s6 |3 a( m- @. c1 V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& ]; g+ u5 W- i
if (pItemElem)
: e8 `/ z6 R% ^- c- M1 [ {4 _' @8 z) @) b2 h, t3 m
if (IsUsingItem(pItemElem))
! {( w8 q# Z, B n9 F ^* T# x) f {
$ |6 ]) \) [9 ?/ y; D7 K# I' H //这个道具无法移动,跳过( N% }! n' w8 ~; j9 K% d( u" D: {
continue;
/ L9 `# w- R/ B6 Q" `; a- _ }
`) J7 a+ G$ r0 }! ^- G! ] }else{, v- [( X0 @& n! W1 u
//空位置 不用动& G- L9 }& M, S
continue;. f! r) Q1 L! b/ P3 G
}
3 v/ m$ [ |# ^( t% D //////////////////////////////////////////////////////////////////////////% T9 G* L% i$ p# g: c
//开始移动1 R% g$ a6 j2 l% X9 g6 D/ u
if (nSrc == nDestPos)
2 `' t( Z4 c1 ?4 z {! Z" F- p: _5 v& O! g% W
//原地不动
( a4 n- P L/ S* u* S nDestPos++;
2 {7 n. B. M3 ^ continue;+ f! n" r! N3 |0 W% U
}; M" Q* r5 t3 Z2 |* T5 T, c" |
pInvSort->MoveItem(i,nDestPos);8 Q1 }3 M1 z+ g$ y* h$ \. [1 p" K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! }. O- e9 F2 M/ I$ M9 d
Sleep(5);
: ~9 } N' G* U, ] //Error("移动 - %d->%d",nSrc,nDestPos);0 c3 C4 S# E" Y
nDestPos++;
) x* ?2 s8 B2 I( P% f2 P# P }
( G2 |1 q' W. Y: @/ E4 u- A //取第一个元素的信息% z- f' n S8 c- W/ k2 g# g9 ~; z8 j
/*
0 ?* [; B4 A. }) t' b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- m! H) o/ `) ~! R- W
{# D3 Z. `- u' U
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& z6 P1 E9 ?4 _6 @- I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' b' w$ f$ I) i) V% g( s4 g6 N
}
1 ~6 x" K1 S7 m/ S/ M */) S* f7 E6 x0 U2 I. x
//////////////////////////////////////////////////////////////////////////
# A& l \2 b8 H6 B break;
' x# y/ r% O+ c }8 m/ f& K# I7 a2 h/ g# @
} : e S: D0 r$ g
}: n; R# g1 ^4 U: y1 \
m_wndMenu.SetVisible(FALSE);
* J$ Y: A7 f/ y$ R/ Q
4 y" H4 C# x5 F- x% w-------------------------------------------------------------------------------------------------------- O/ \5 U& m3 v& c' q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ ]) V/ G6 C$ ?* S' y. J
{" ~% l& C o+ n7 `3 |- \
BaseMouseCursor(); |/ h# I- b* k R3 F& I
}2 m4 V0 J2 Y' ]
在其下添加:% y V; f/ D) \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 z# V* y# `; s* Q0 i{9 T( I& C: x# _0 ?( u. r# x
m_wndMenu.DeleteAllMenu();
; I" M. L4 T7 vm_wndMenu.CreateMenu(this);9 m0 d! `) y+ E: l! _) g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 M/ w1 i3 n' b( v7 g
( g+ T; n" X! v* n3 Z- n* z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* I+ i, Y# W7 O
{
$ p+ \# D9 u* ?, V) W //P以上级别才可以删除所有道具0 D) I; V, U) I. ~
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ T6 c' ^. \# [% Y. K1 o" S}+ n5 j# ^( m' W3 A6 O5 S! [- n. `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: N9 U! }) R+ hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
M" D. @2 v2 z5 a Nm_wndMenu.SetFocus();
) [ o5 O( q( t. o7 p& T x5 k}
3 A* m: ] D% _: E( j! e------------------------------------------------------------------------------------------------------------: Q) n( H- W& I) ]# a
*************************( s+ b+ s$ e# @3 V' X
WndField.h文件1 M& R9 K1 T6 H# D! ]
*************************
% S! J* R9 P. c$ C搜索:BOOL m_bReport;
0 ^; c4 H* `1 r8 k: c( r3 G% \" y; u. z其后添加:4 G5 l- j) x' _1 ~
CWndMenu m_wndMenu;
7 n7 U( A2 t3 Z4 c; n" T搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& I3 P/ d9 ~! k6 K; M- n# U
其后添加:9 h7 E+ R$ p. M8 L; P
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 l' J4 M: O1 J6 s
/ p, ~# w1 K& _1 h$ I" J+ A
! ~& {7 T1 n( y
|
|