|
|
源文件中_Interface文件夹下WndField.cpp文件
) T2 a7 I% \: F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ?8 o. X+ L- ?0 Y/ }8 j
1 P; I2 C$ t. O; G- ]
struct sItem
! ^" a/ {* t: f& f9 ^{
4 Y$ N* f/ G7 yDWORD dwId;
( _ ~: C. I* R. |# d) g! f$ ^6 lDWORD dwKind2;% }) ]1 G2 D: w z# g8 c; ?7 U
DWORD dwItemId;
% Q- g1 X8 x. {2 E+ _4 IBYTE nIndex;
/ B A( i( G) e1 N+ WsItem(){1 F/ X+ y Y+ l; V# N5 T, _
dwId = dwKind2 = dwItemId = nIndex = 0;
- v. r0 T% Z! |3 T- c! B' k}
`7 o( M2 I5 {& ]- g. f- wbool operator < (const sItem p2)
4 p! c; E s. j0 a9 ?/ Z+ u{
$ b% H! L8 _' U; J; h if (dwKind2 == p2.dwKind2)
, b; s; U& ?5 N {: @9 f* p0 W9 q. U9 Q6 w6 Z4 b5 m! j
return dwItemId < p2.dwItemId;
& F+ X3 V0 n' D: [8 } }else{3 n. A4 T. K$ d: t5 a/ d
return dwKind2 < p2.dwKind2;
) g5 _- Y# i: B! u* U4 H8 M: i }
! M. V. e7 ~$ t8 l* @}
% ?, Q9 }9 Y, l};- I. P6 A/ L3 U- w1 r5 C' i3 S
class CInventorySort
- a% x# M7 ~( D: [! }{
# d/ G; U( [( P2 Z. Ppublic:6 U1 L4 r9 J5 s0 R0 g' C
CInventorySort(); H4 r% b2 F0 I5 z O
{
1 t( z/ m% l- C1 H7 @ m_dwPos = 0;
0 s) a' D2 j& {+ o2 y; o3 @9 \; o}
$ G) e6 M. K/ Q3 w1 v7 ]~CInventorySort(){}
9 o( [2 ?" }. z( {, ?private:6 C0 A0 T: S. d9 u6 G6 g6 H2 @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- G. F5 W. i4 R- P0 E& ?1 a. t
DWORD m_dwPos;7 s6 H3 m( p( {. G
public:
, M( z2 S8 U: T6 Yvoid Add(BYTE nIndex)8 i8 x) u6 B1 g! G8 S
{
0 P$ v; U7 T6 a8 i4 [* { if (m_dwPos >= MAX_INVENTORY)
+ t+ ]3 ?2 J5 p: ? {
6 {" j+ {6 w" O; T% E return;7 r1 C, @, C( T5 R. ]5 ]
}$ {$ J. i8 R$ B2 h" y
m_Item[m_dwPos].nIndex = nIndex;
6 `! M- p- q, ]" ]4 X m_Item[m_dwPos].dwId = m_dwPos;% S( c, ]& l4 ~, N: f. e
m_dwPos++;( e5 \6 F* @9 x4 p' \ y* W7 z
}
+ S" ?* D% J& I8 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" p4 w9 {) t+ N* ^: x+ M( [
{3 S/ F% g* Z2 T! Z; X: ~, ?! w
for (int i=0;i<MAX_INVENTORY;i++)
2 m q; P6 r/ \, I! n' ~' x: |; d {
! K9 W) o( G/ ^" I. m1 Q if (m_Item.dwId == dwId)
: G0 T2 J/ d. a/ f4 z! b0 t {
8 _' S$ E" V( T7 v: T; K" t return m_Item.nIndex;
8 `8 N7 H- P; `! e7 d. ~ }
& H) b4 ^3 X* {/ x( T }( C0 n( [9 \/ |, X8 b9 v) ]: J( v
return 255;( `) i0 |8 y3 L
} H. K6 c0 ^9 ~0 N, A
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) ], Q2 T- G- ^1 n( H! F& i{* R, }( B5 D; T
BYTE nTmp = 0;# H! E" B) e- Y$ d
bool bDest = false,bSrc = false;
2 W4 g. D# `) w: G4 t- d/ S, Y for (int i=0;i<MAX_INVENTORY;i++). Q( w) c% _& Q& {& Y3 a
{ k; t E+ w7 k _
if (dwSrcId == m_Item.dwId)
) {* ]( P# a, E( j {
* ]0 o! f, Q2 \! }# F! V2 b //id相等 则 改变对应的dest和src
* A5 ^0 w# h2 ]% `+ J- m1 ~7 \6 X nTmp = m_Item.nIndex;* C( }' i0 F, e( [- @
m_Item.nIndex = dest;
F. G( F4 ?( d% {# D& F( g }. K6 z! C8 d/ L; ? C
}
T2 @( b5 u8 W( B$ t& W: b //临时数据保存完毕,交换开始
& W Z0 K1 Y* G$ v5 i/ u for (int i=0;i<MAX_INVENTORY;i++)
+ V5 F, `1 z( h+ s {
1 _- O/ ]) z$ Y1 P e; g$ M/ j if (dest == m_Item.nIndex)
, s/ v- D( A+ s4 p {! s0 N5 f6 X& Z$ l9 u' Y
//id相等 则 改变对应的dest和src, h: E1 O/ b; h6 S" _
m_Item.nIndex = nTmp;0 r' ]3 [% n4 e1 \! X$ H8 c' t* m
}) ~& b2 G+ m" m! }/ Q8 V$ r
}/ m& F- L( G# z$ C% T, B' u
}
( U( M5 d7 a+ d0 @};
/ d0 c/ s+ k- w$ O-------------------------------------------------------------------------
' @8 Z' |& X9 w D8 p0 g. R0 B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 r2 k7 X6 K) J5 |3 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ k7 T) T# G0 a/ T5 Q0 R
紧靠其上添加:) s# j3 [/ w4 e/ v- i2 H
if( pWndBase == &m_wndMenu )
6 k: a" T4 t( x7 b% u{& W, V% e2 C7 P2 i9 Y
switch( nID )2 d, G' t, V! \, W
{: T' K. a- H: ?8 L3 B$ ]
case 2:0 G4 i+ X0 j$ n
{3 B. T# j; @2 X: d7 A
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 L3 W. y* q' K5 L0 |9 P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 c7 h0 ?/ ?$ j
{
( [) y: z; C( a0 h: b break;# D! d4 A% r% c' n& J2 a; q; Z* X8 D
}
2 J8 e, k' O+ {; h& S1 z- K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' ?' s2 i2 P5 R3 J" M
{
! O6 A0 q: e! ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 \. R$ R; ^, ]% H% K0 K4 y if( !pItemElem )
' l ]! O; k6 k' c6 o* g continue;! Y2 H: S7 y, ~8 g4 P
if(pItemElem->GetExtra() > 0): u! U8 l: y5 X2 P
continue;
( q- T" ?( Z+ y1 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 \* z- s% e. B' G( N/ @
continue;
9 N8 x# }% o+ m if( g_pPlayer->IsUsing( pItemElem ) )) T1 B) n* X# `8 v' ]2 x( Z% h
continue;
1 X3 U- `, s& r if( pItemElem->IsUndestructable() == TRUE )- n1 |/ `2 m1 Z
{
6 Q& s G3 Z' {9 Y7 h3 p, m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 u0 S) |/ a" X* n0 z% l8 ? continue;
5 O m+ J# s" l: @, Z' v- `6 [$ | }0 G* Q; Y+ \& |. i2 s$ I
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 Q$ x7 r/ n) l6 R- H) D& { }
9 J) v4 p5 Y h! C/ e% X break;
, v- Q, `/ o9 X- S! g0 F0 M }' h8 v! M3 h( S5 t3 r2 S
case 1:
* W6 X/ d5 B. L: Q {6 X6 t6 q7 E N L+ [) P
//整理背包0 o9 e9 ?+ x C% s" q
//////////////////////////////////////////////////////////////////////////. c# \8 @' b! ?6 W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! B2 X/ [, x! A1 `7 Z/ D. t
//////////////////////////////////////////////////////////////////////////' O$ i# {# S/ _$ }2 q
//////////////////////////////////////////////////////////////////////////
7 r$ n5 `5 B- B" {. P$ X CInventorySort* pInvSort = new CInventorySort;' V `* D+ {" D. w0 ^* \5 g9 F
vector <sItem> vItem;
/ g4 |5 M/ i2 C8 U* H Y0 W7 i( E vItem.resize(MAX_INVENTORY);//初始化大小" J" [7 @: A9 L& w+ U$ {
//////////////////////////////////////////////////////////////////////////
6 E7 `, ?4 n' j& v T5 y% L; m //填充数据
* y5 o- F7 L {4 X for (int i=0;i<MAX_INVENTORY;i++)
* H, n/ e& c; |6 a { o6 i3 n+ G$ E$ s& R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. ?) q4 m, Y7 P$ W/ p9 d ]; j
if (!pItemElem)
3 V; t, z- I" {- N {
. i4 q, T( Y; J" k vItem.dwKind2 = 0xffffffff;
8 j0 @4 |3 r# p/ ~" e vItem.dwItemId = 0xffffffff;
/ H8 u2 ~8 Q5 a7 R6 c vItem.nIndex = i;
& }5 A3 c: d% o }else {+ S) T D+ U' k& Y
ItemProp* pProp = pItemElem->GetProp();5 i" D# @: d6 M0 S, D/ u
vItem.dwKind2 = pProp->dwItemKind2;# b+ z, O$ K8 f* f: y
vItem.dwItemId = pItemElem->m_dwItemId;2 T: |2 @. G1 w) x; A3 x1 `% e
vItem.nIndex = i;
% `. ^9 G3 n' P/ q }7 S+ ~% h* _6 l1 }4 G' ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# C8 H/ }' g5 u
}" B/ i7 M/ s1 l/ v
//////////////////////////////////////////////////////////////////////////
3 S, q1 s5 a5 }. @2 i3 D sort(vItem.begin(),vItem.end());//排序
. p0 O- }! @. j4 u, i //////////////////////////////////////////////////////////////////////////$ I- d" y8 w R" g- L }* H
//交换 i5 @* g$ d5 z, ^
for (size_t i=0;i<vItem.size();i++)
* ]( V) J. @! [1 b- Z+ E+ x) p {% ?7 z$ M5 H. e1 {; k7 R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 K p3 ~* K r1 Q7 r/ u pInvSort->Add(vItem.nIndex);8 j/ e- X3 f k$ @
}0 B! }7 H' P6 R5 b6 o, l
BYTE nDestPos = 0;" V2 W& T' F, R( W. E
for (int i=0;i<MAX_INVENTORY;i++)
- v" M+ _. x) S {$ y2 V0 O7 O, |5 T1 _8 w& l9 u t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, I' [5 z5 x; z5 i if (pItemElem)% [$ m" J) h8 e% a
{
- ^: ^0 u; _( U if (IsUsingItem(pItemElem))
" S F2 t2 G& E! x1 q( c/ { {# j! v4 k3 W4 y* q6 }7 A
//这个位置无法放5 ]! ~. ?+ H+ B
nDestPos++;7 O+ \2 \& L8 e$ t* D
}
# V' L2 n7 R0 s }
9 `9 v# ^' ]) B; }6 Q BYTE nSrc = pInvSort->GetItemSrc(i);' z0 \. _4 M5 I/ J- U/ }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 \/ h' ]) T" u" i2 e, B if (pItemElem)
( G% P7 b5 N2 w/ T$ G( C0 ~ {/ q2 \9 w! o8 |; V: G: A6 y
if (IsUsingItem(pItemElem))6 V' y2 O0 ]! G3 a! o0 c
{" T, \+ n3 U5 O. t- v$ T9 {
//这个道具无法移动,跳过
; a! d* u& B0 C* i& F continue;1 [9 S# N4 ^' `9 c1 e/ \% R
}
( [' _$ k3 w \# C6 J* H }else{
6 j* S# {& L' q //空位置 不用动
4 f6 R9 l3 i" Y$ p, u continue;5 |% f" O x% V$ K1 t
}
/ `# y) x I$ s1 e: |/ a8 f //////////////////////////////////////////////////////////////////////////
( ]2 j# i }1 K1 z6 V' N% P7 K3 e //开始移动
3 L$ T; r& K8 y# \* j4 ]9 r if (nSrc == nDestPos)/ ` o y3 \' o; P( X- s4 Y
{5 W1 J4 a7 s+ x2 D1 ^
//原地不动+ P! U; D% j: `& c! }
nDestPos++;
9 y; z+ S( n- W D X% T continue;
% ]/ q7 x! S+ C6 K5 _ }6 G9 h5 C0 u7 u4 N( B
pInvSort->MoveItem(i,nDestPos);
9 q3 E k. F$ |, d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 S. \/ _# @' N$ I" N Sleep(5);
# A- P3 U" B' D. b# q$ t* s1 j //Error("移动 - %d->%d",nSrc,nDestPos);% f' p3 p2 U6 l2 T. A
nDestPos++;
) ?" T( J2 D- K2 T }
+ I2 }. E+ Z# E9 n //取第一个元素的信息
7 p& l0 X1 v; R8 ]- o /*
! f# X" x2 z6 s( P/ L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% o+ I- Z& r# _) \
{
# `( K' N* ~9 K0 a% ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& X0 e, V$ T, l5 [0 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 T0 t+ M9 m2 o5 E }" W9 I* Q3 p+ @0 ~- b6 b# ?
*/
1 N: r1 J- N/ a+ x8 L3 |) e //////////////////////////////////////////////////////////////////////////2 w! ~5 j* m; M( C
break;7 [$ b# ^+ _9 w# c
}
2 [8 x6 G1 v& l# c# P9 n" k } 2 @) q; `2 |6 X. d! |! `2 J4 n
}1 T& A( j% i* @# g# ~" v
m_wndMenu.SetVisible(FALSE);
4 b! T" ]9 j6 L# a& a
. B, t( x5 M" w* ~& a2 X! H--------------------------------------------------------------------------------------------------------
3 U# U8 w R# R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" r: h I) h6 }/ T1 I{% k' L' m; T" \" P2 p: c# i
BaseMouseCursor();) ~. R* t9 O* s4 }' Y+ Q" ~5 `
}$ W* k: v# t* j
在其下添加:% T5 R o' S4 v& I8 W- ~- x# B) J( r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# C4 g1 ]% K& E$ ?* }2 g0 x% m
{( E7 r# y0 V0 e6 B$ x3 Z0 u
m_wndMenu.DeleteAllMenu();
$ D# ~- `# {8 U9 x% f4 Dm_wndMenu.CreateMenu(this);5 Y* k4 ]1 y0 p* j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: T9 s! |5 i: i6 N" `% f; d* _3 w7 V7 l# c
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( ?3 p& \( c8 ]' ?" Q- b
{$ G' E. N: K x8 f, b9 L
//P以上级别才可以删除所有道具
! O, n+ x* Y8 a( g4 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ @: C' ]9 c, v7 N
}
, ~: ]( y, v3 w% v! Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 k; U5 |7 i2 d+ _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' g, U' x: O; s# w; }5 U) Km_wndMenu.SetFocus();
" V9 b2 S) J% G" m* K! L$ q- `}9 F: ?! [3 L5 t1 F j
------------------------------------------------------------------------------------------------------------1 ?5 ]$ @. j( x5 h
*************************
" A1 X. X2 N$ X0 cWndField.h文件' x7 B! X% ^! I! Z& C! j
*************************4 G, k& m' T1 B& B
搜索:BOOL m_bReport;
6 z; l# d6 B/ c3 Y+ F其后添加:
* D! m# E, w2 k0 s+ \9 {: x* {CWndMenu m_wndMenu;! C/ \1 |/ ] H. N- W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# l; C* _1 L0 F其后添加:' Q0 r$ |& `/ S+ r
virtual void OnRButtonUp(UINT nFlags, CPoint point);) i3 ^2 N" ?2 Y- X4 L, A
6 P* E7 H3 [# X" g8 g% v
; O3 S- H8 [+ G/ A |
|