|
|
源文件中_Interface文件夹下WndField.cpp文件9 [5 I |: X! ?. Q- _) `5 X
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; x6 H& [! `' v$ s4 P5 `1 s$ r5 y; ~
struct sItem: M* P, {; V$ u7 E0 d4 O- W( q
{4 V( @& t. w# ]+ d, K
DWORD dwId;& v( h( u; B3 I# j2 k' n
DWORD dwKind2;! v0 Y/ @! _3 Z2 f; ?% Q
DWORD dwItemId;3 v9 [( Z: [7 {$ T8 ?& T
BYTE nIndex;6 S3 y5 H: b/ C- P% L9 `, p$ `
sItem(){
+ d+ y# g0 m0 ] dwId = dwKind2 = dwItemId = nIndex = 0;
7 q2 W) M4 y$ ?% a5 Z7 {}2 S% @5 v+ k, W3 G& H- ~
bool operator < (const sItem p2)
0 F6 E6 a2 P6 v7 V) R& C8 E( \2 r{
% X; F5 e7 d! }! R if (dwKind2 == p2.dwKind2)' s. y8 [, |. [" j% L
{3 p- u5 z/ ^. h4 H$ `5 Q
return dwItemId < p2.dwItemId;
+ \% G) H* m# g* q9 |' K }else{6 l9 r8 o. y; L. g5 t
return dwKind2 < p2.dwKind2;" s% _4 X7 h' n/ z$ _. U
}
2 ]4 S; Q I% M# N. O. C}7 k+ `$ ~( M8 ?# ~: @) L, R. A* a3 M
};
7 l8 o8 R! Z0 V A. Hclass CInventorySort
. c8 v3 u7 l5 C3 v{
2 g4 H5 Z' s! G _* spublic:, u3 S% B. I0 g! ^$ ~/ Z' `
CInventorySort()2 v, S B; a0 i% e d
{
9 _! j1 [" ^, }$ u# H m_dwPos = 0;
2 c; v4 J( K+ i0 E! I* R1 |9 H; U$ U" q}
% L) e4 j" R3 b~CInventorySort(){}# l& y# K M, L; B" U
private:- k+ q- _' d$ e/ L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 j9 i) T" N& J2 ?; E
DWORD m_dwPos;
# u. v7 n4 H$ Spublic:
& x; ]4 w4 m( j l+ U' F) J# dvoid Add(BYTE nIndex)/ Z7 e* x8 C% L7 |* w
{
) d8 e; Y. ?. l0 l/ y# A4 w% f; x if (m_dwPos >= MAX_INVENTORY)7 k3 t. a1 J. e% W+ W' c8 a4 @
{2 I0 ]: z% e3 L( i. ~
return;
$ t8 N9 [6 Y8 n0 j* X5 A }; u. f# @7 T/ _) S0 i
m_Item[m_dwPos].nIndex = nIndex;+ N# F# L" i: y" B
m_Item[m_dwPos].dwId = m_dwPos;. b; z8 y3 [( b A' P
m_dwPos++;% Z& V/ }) Z, S6 X, _0 D& G! i+ @
}
% T' U7 O6 b! `. a$ fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! U- ~0 T8 ^4 k+ F A& Y
{. e# G% \6 U! X4 V7 q
for (int i=0;i<MAX_INVENTORY;i++)* |$ y W0 |- I1 U) j0 p
{
5 |; x, C; _+ L4 }; X if (m_Item.dwId == dwId)
) r1 K& N2 s0 T" D: J {
& v! c; x7 L) ]$ J9 i: x* |/ f return m_Item.nIndex;$ ~: k" u& p" C8 Y* ]( O% l
}: n) x N U, K8 S$ D4 l
}! l0 E1 H3 F; i
return 255;& A$ U7 M6 o* D6 l: y1 W" }
}6 N: Z0 v2 k. [/ N Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; Q3 A6 ], ^+ D$ b9 R l
{1 j0 F1 ~& N1 o( T8 D4 \
BYTE nTmp = 0;: h- N. G" L2 X* H+ @) v( U& p3 ~( ?
bool bDest = false,bSrc = false;
' J6 {$ p% W( v* }2 A' l# ^/ Q for (int i=0;i<MAX_INVENTORY;i++)/ q3 c3 t" M3 T% D
{1 |7 I9 u- A, q5 W' s8 K6 L8 B
if (dwSrcId == m_Item.dwId)
9 t5 Z0 y5 C4 k4 o. }% d% v { f ?2 ]# H8 J$ f
//id相等 则 改变对应的dest和src6 j* f+ ]6 f. a4 e/ q
nTmp = m_Item.nIndex;
6 {/ U7 A5 [: {9 X' o5 w8 `9 ? m_Item.nIndex = dest;
: |8 }/ l7 U6 { }/ R3 N5 F+ b4 Y
}: [+ r0 J% W' k" z7 G4 m x: }8 s* g4 [
//临时数据保存完毕,交换开始6 y4 ~, j* O' s' b* R+ b. N( I Y
for (int i=0;i<MAX_INVENTORY;i++)
# H& C( B+ v2 G {
2 P- E; ~; D' ^; v if (dest == m_Item.nIndex)
/ D7 U/ N- R, K8 p- ^: M' b* T {
7 D, c6 G1 ^3 `; \ //id相等 则 改变对应的dest和src
; h$ y3 W. Y o% q* Y m_Item.nIndex = nTmp;
" t6 e. b5 D+ _1 }, {3 j }. E& ]# J8 R( M$ j+ Y5 B& B
}
; K; n# m# @# W}/ U2 c& a1 M* t. S( ` F
};
; Y5 k! w1 ~+ i: S, V k-------------------------------------------------------------------------: ]! m. B" ]/ l' r1 p. O( ^- }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" H S7 w( q7 X. ]8 m) m: ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ A1 Z' M3 J9 i4 R紧靠其上添加:& T, i+ c3 j: \! d! f0 M
if( pWndBase == &m_wndMenu )
% B8 O& I- a4 D# b P4 H$ N: C{8 F0 g* `$ I9 V2 f( U
switch( nID )
2 s2 `% I1 l8 h* A! n {
! r+ y, u, O! E; h1 P. } U case 2:( \( u0 @0 V" o! H0 j
{3 Q+ x9 h6 x+ j5 u4 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& v' ~# K% ]% t: i' \' X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 V4 q2 V+ \8 @& C8 X8 u4 c0 i
{
9 D6 c6 t4 E" I* a$ ^7 ? break;+ @& W. T# z2 w% O
}+ J5 N# b7 g( p
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ ~0 }" X. h" ?: Z! Z' K- i" Q {/ j: f& {1 f$ a& q' }. i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: p: P) a# d) @1 }% V" Z
if( !pItemElem )# \: h- s3 F" a( i
continue;
& B: O2 i- k m B- e8 S% K if(pItemElem->GetExtra() > 0)
' T: s& [9 t0 q3 Z6 W# c3 l continue;3 F) @- [6 e" \: k9 m: v! {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- g& ^3 E( ~ I continue;) W4 N, }$ j0 g+ A7 b; s# z$ H
if( g_pPlayer->IsUsing( pItemElem ) )9 b% k! Z, W/ G, x v5 e' G: f
continue;
+ ?9 Z! W( n: J% w* F( b if( pItemElem->IsUndestructable() == TRUE )
- d( |( O% ]" @* N+ R {3 e y* f. b4 o( f& w8 u( G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); ] B U% R% ?# @
continue;
R1 S+ e0 J2 _" q# @4 \ }
$ q. {2 V4 m1 { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ i: j9 @7 s* A8 p8 N5 ?
} P8 a! f# [9 G0 w2 M
break;
: X' J$ M- g6 v+ q& u } |0 P }4 z0 n. H
case 1:1 c2 [5 J8 U' ?7 w' i% L* U) `6 n
{
0 P, @: o/ K7 b3 {* h4 T1 ` //整理背包* \! l: ^5 X6 \/ N0 F3 W/ V
//////////////////////////////////////////////////////////////////////////
, D9 `* K# d3 a- V2 @( j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 B+ G$ O/ R, n: H
//////////////////////////////////////////////////////////////////////////
1 f* I$ W3 P: {2 } //////////////////////////////////////////////////////////////////////////
% G: C, [3 |" d* H CInventorySort* pInvSort = new CInventorySort;
; ~% F* t# I# k3 V' U( N- A vector <sItem> vItem;
" L% t; @' G3 ? vItem.resize(MAX_INVENTORY);//初始化大小
& L8 H* e! \0 H1 P0 B //////////////////////////////////////////////////////////////////////////
* R/ G; v) Z! o //填充数据: ]/ L4 z# L3 d' I
for (int i=0;i<MAX_INVENTORY;i++)+ s& B- Y* A/ g" [; c, \2 Z7 P: h5 Y
{
! |+ P( y4 _) R/ v) t" m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ ]4 y6 c- s1 n' C+ A7 {- T2 l# z
if (!pItemElem)- F+ C# W, B9 m+ P0 g
{
) U% V# y2 G Y9 Y. s vItem.dwKind2 = 0xffffffff;/ a% Y' ~4 f7 F1 c+ X
vItem.dwItemId = 0xffffffff;
d, L; l# ]' ]# }7 P4 N vItem.nIndex = i;; A& J1 H7 t8 X
}else {$ j% o) ~( R, e* _3 q) J
ItemProp* pProp = pItemElem->GetProp();
* q& X5 T; i& ?" K' [9 x; S vItem.dwKind2 = pProp->dwItemKind2;! x; L7 J% F9 H9 [$ s
vItem.dwItemId = pItemElem->m_dwItemId;6 x. S. o7 `; R& W8 A' R
vItem.nIndex = i;
2 A4 d( y B& s0 A/ E }
# j( Z- k$ v" q' ]6 n2 m, x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( R- b8 ~& [$ i* J5 c
}
. N4 |' j- C: I, `* Q3 T' ^ //////////////////////////////////////////////////////////////////////////: ]7 N; }4 d/ J3 `5 @) H, B: j9 U
sort(vItem.begin(),vItem.end());//排序* p2 Z, P$ O/ E- L5 ]8 T* [; e8 |
//////////////////////////////////////////////////////////////////////////
" [$ @2 H( ]; J1 V* X //交换
1 I. E6 p6 V; {: \. b for (size_t i=0;i<vItem.size();i++)
( w' I9 t2 W6 A. Z! g {, B# B& O% b/ x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( t I$ D, y" M* G4 e* E pInvSort->Add(vItem.nIndex);
9 i" K) H1 ^, o x5 G3 }! {1 T }) M" d" m* U7 O% n$ a& c
BYTE nDestPos = 0;+ a( x( `+ a4 Y* P
for (int i=0;i<MAX_INVENTORY;i++)* ?8 P; i, y1 n! G
{- ` U, m4 `( |" \7 X, ^ ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ w7 R+ L, T- M* z- o if (pItemElem)1 q" Q) N' }" [, M$ p8 w$ G5 f7 Q
{
# Q0 q* ~! L% q' ]% O V _, P if (IsUsingItem(pItemElem))
2 b) c ]4 ~! Z7 \ g {( X9 ~9 c7 e4 j9 j3 L! z; G0 ~" T
//这个位置无法放0 J b5 E' D0 u
nDestPos++;. M" A3 F. c1 F. g
}. g$ C1 g6 f& V8 g0 _/ d
}
. U" h9 r/ r5 T+ |" t BYTE nSrc = pInvSort->GetItemSrc(i);
* O- D- R7 E, O: p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 k# x2 Q/ n2 x2 u4 H% @ if (pItemElem)
& _' k6 B/ ~% [- _9 l; g {; T4 K% n, ]. z6 N* l
if (IsUsingItem(pItemElem))
. T& `( `4 ]6 h6 E, @/ S- W2 E {
: H' {5 R' b6 r8 b //这个道具无法移动,跳过6 E% }+ n4 f8 h+ S9 L7 l
continue;
( i! q, e) D* G$ J6 _7 t A }1 {) C3 V( D. t: o5 {! A
}else{
, X: v- z$ _, G3 R0 N2 y3 t* I$ N4 O0 V //空位置 不用动
1 q( [, k/ d \5 I8 d. u continue;+ D! B; r- C8 y) Y
}
' I \; ^2 Z0 [! c //////////////////////////////////////////////////////////////////////////
% U1 l9 I% w5 I0 `# T( R. ^ //开始移动4 q, K! r% n; P. s! y! g8 A
if (nSrc == nDestPos)1 Z8 [, @2 T: p; W
{' }+ G0 A% b/ ]* E% c( {1 ?$ M
//原地不动
5 D- T/ m- t) \" ?; F9 w nDestPos++;
- b' c# D' B Z5 A7 j- ] continue;
5 S# O/ k1 y( G }. Z, [( R- i ? B0 |) G v- ]
pInvSort->MoveItem(i,nDestPos);# K9 [8 Z, M; [' Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 G' A) i2 g4 m
Sleep(5);% U( r; E; Y. n
//Error("移动 - %d->%d",nSrc,nDestPos);( g2 B& b3 V7 r" N& V
nDestPos++;
W, s) r4 q1 u Q) Z }
4 i$ ?. D% U; E$ W. C //取第一个元素的信息
9 p8 x% g6 K+ K) ] /*' Z4 i* c! r1 d! E0 B7 P) a3 H
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), K8 b# L. n3 c- W4 C; j
{8 Q; d0 J8 i! s" P) n
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( K+ p5 r c6 W! @* C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 C- s) R) ]4 c! x5 b: v1 ^6 `
}
0 E% j, n- E7 ] */0 Q2 C5 E5 _1 r; o2 p& |1 Z
//////////////////////////////////////////////////////////////////////////7 i2 j8 r- z& [- e
break;
) ~4 t' Z5 q) r! K+ i! { }7 q1 }8 f$ p5 w- l3 u }+ ?
}
. U6 j/ w' e# ?}
" `, B! e0 i( h- u3 [+ [, vm_wndMenu.SetVisible(FALSE);
. h0 s7 Q4 ^4 L0 F! _4 R5 A/ Z+ G8 J7 [# F5 Z
--------------------------------------------------------------------------------------------------------
6 @# E8 P: Z0 E8 T; e# d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; f. H( L. p- ]# n$ t* T1 V X0 E{; Y6 F$ v3 U& j
BaseMouseCursor();
/ ?( a. r! z5 x$ e}
$ i$ |' s' J2 ~4 K- f( O在其下添加:2 [$ {; Z4 ~& O. r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) l3 w/ T0 m# H; N{6 S7 g9 E& e' Z2 S L0 G7 c4 f$ V. J
m_wndMenu.DeleteAllMenu();
f+ O& P3 g7 d7 ?3 x b4 D }, Vm_wndMenu.CreateMenu(this);
$ U0 x& T5 X: d, A& ]! M `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 w+ A1 d# B# o8 ^. |9 x
) `9 P% A7 w/ {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: M9 ~1 J! P5 l/ W8 m{. D4 h& s* \- u
//P以上级别才可以删除所有道具& [+ X3 F% {/ v' j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 L1 C5 ~1 N- H5 G
}0 \ _3 `6 E) C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( ~7 N% j% m4 _1 v5 E$ Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); n2 e9 @; O& W- o
m_wndMenu.SetFocus();) j6 J, v0 h# F+ Q: W
}+ n. W: y: d$ }$ C2 h t9 @; d9 S
------------------------------------------------------------------------------------------------------------
9 P" ]+ l& T! r/ q2 O*************************
+ H: A* n2 g: b0 G3 G3 t9 M) aWndField.h文件
! O# m' x! ~/ h% U) {*************************8 ?7 }& n. S( ]+ i% S$ K' c% j
搜索:BOOL m_bReport;
& t* ^4 |) i0 a. P) H* f1 J其后添加:
" o* X# m/ o2 i0 y2 lCWndMenu m_wndMenu;
/ S, g% @; l' w, }, ]; N. k6 d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: l1 `1 P3 r; t8 u
其后添加:) d. j8 Q$ O$ P4 I) u1 d* \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; Q/ M: M4 x# Q% Y* N, p
6 A" r; @' G3 N
% T$ t. X) I& r |
|