|
|
源文件中_Interface文件夹下WndField.cpp文件
3 b- _( P# T$ k: |& B1 n* \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 b2 l- t$ L" N0 Y2 ]" x0 R% s- Y2 s7 ]" M
struct sItem, I. b) `. h! V" y# E% k3 i
{6 e$ W; ?) I+ _ L6 d4 p4 B) o! V
DWORD dwId;
( B9 B2 J" {7 D- O9 D) v4 k5 h4 ~" |DWORD dwKind2;$ T) ^1 m# d( R
DWORD dwItemId;
2 K2 C8 M" s4 WBYTE nIndex;/ I. j4 R1 c. }
sItem(){. R/ j9 ?4 H- x8 j, w/ R
dwId = dwKind2 = dwItemId = nIndex = 0;
. m7 O& R+ B. u& A, V- P4 Y) J} A5 g/ W' {- }: O" \- S8 l
bool operator < (const sItem p2)3 R" t0 y8 J8 e5 I+ S
{9 I& t, w: b/ m% ?
if (dwKind2 == p2.dwKind2)% `- i, K( ?6 x, d* u1 y
{
1 ]7 {, V5 ~: F8 S( X return dwItemId < p2.dwItemId;
) P% V x6 {, I1 h9 N }else{ E( I* z0 y ^) R2 T* V: G" P% x
return dwKind2 < p2.dwKind2;* i# \0 ]$ x- t/ T6 T
}' N/ p9 c' E0 n: x' r* s: }
}
4 L' w4 ?6 h8 S6 U5 e};
+ b; O5 l( B& B; O' V( J/ Tclass CInventorySort% ]: t0 j8 A" D% m2 U1 I
{
% m2 H2 T) L# ~- tpublic:: W! S2 Q! l! l+ D& C! p b1 [9 i' W
CInventorySort()
' B; O5 G7 L8 j8 ?( i% i0 _{, L5 V* |$ ~3 z( K
m_dwPos = 0;
1 Y& y; `/ Q1 @}. b) G% ~" \+ D& @; e8 f
~CInventorySort(){}
3 A2 C& ? p- s) b% Tprivate:
' D" K9 y8 _, W/ ]8 d, t: }8 csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ Y+ f/ ?+ |2 w; b. X* m h( \DWORD m_dwPos;# k) J. E' _- }' d8 a
public:8 z) I) l! f9 N( r7 f7 x( b, I
void Add(BYTE nIndex)
+ A: d% {$ l4 i" r1 H1 M J* S{ s5 N) `; p6 R' H
if (m_dwPos >= MAX_INVENTORY)* ~" w' Q8 W& j% ~! j; w9 X% T0 o2 s
{
# w% Z. M4 Z/ C8 j' X1 L2 d9 y6 E9 y return;1 G- i ^; z* C) Z0 L1 t
}2 h5 m; E4 E) Q! Q8 Z
m_Item[m_dwPos].nIndex = nIndex;# K! [, C2 Y- e
m_Item[m_dwPos].dwId = m_dwPos;
' \3 q5 G' n, W% A* O2 x m_dwPos++;- r; M8 M4 k1 D" o' D! _
}
- v& B2 i+ y; I/ DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ q/ v) n* P- q, Q
{) i: R9 c. e+ e* m
for (int i=0;i<MAX_INVENTORY;i++); z5 p% E1 m3 P1 b
{
, ^/ p- G/ N2 y/ i+ ?" Y( S if (m_Item.dwId == dwId)$ r) J( r* e; i! n" N( B1 y
{
2 c0 E" f' D9 e) q5 @$ o/ Z return m_Item.nIndex;
% n) a; S4 D* G) { }
6 f; z; w! I& x3 C6 W8 X) A }1 w f, V- K2 | O8 _$ p$ [! A9 S
return 255;: ]- D9 R5 _0 V
}
# w( J" d/ E0 y8 O! }5 o& ` k0 j! F& @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; v; C5 L1 B- k# \0 G' j{
: D+ ~; I% k/ M BYTE nTmp = 0;
* o/ W' j# D% I. d8 L( W5 [, ?$ k bool bDest = false,bSrc = false;. C8 b) K L5 e# D* |# q
for (int i=0;i<MAX_INVENTORY;i++)2 d. W: T. R6 a, ~' U* U
{
% s4 x) r1 O! r* U2 F; u1 z if (dwSrcId == m_Item.dwId)
6 j" G' W" L6 k; H) I {* d+ w" O u0 }' `: D
//id相等 则 改变对应的dest和src
: D/ O9 S3 I& i, t8 _5 { nTmp = m_Item.nIndex;
+ b- I" p, R0 Q& w. |" j m_Item.nIndex = dest;; o, Q, [" g. L1 M3 R$ V3 P, F
}
6 n. K; o5 J) J9 D# |6 A }
0 T( `6 Z$ ?# Z* u //临时数据保存完毕,交换开始; Y' _4 X# P E5 {7 Q& A* M8 Z
for (int i=0;i<MAX_INVENTORY;i++)- [+ F/ k8 [$ |
{
- [* C( l' f) K( Y* k, ? if (dest == m_Item.nIndex)
( m2 K4 [' L' |( i {
( I7 A7 F- j9 i/ m5 j; \ //id相等 则 改变对应的dest和src( y: z9 q7 Y6 H( y7 n- p/ N* i4 [
m_Item.nIndex = nTmp;
0 I! h1 L- j$ ?% P }
( S" Y$ O% K1 u' L! Y& C }
) z$ J; `1 c$ O( V$ T- |}
0 g; w% f1 [9 \" d' P; c}; x# N2 j% i% h
-------------------------------------------------------------------------
/ i1 f. x- D( \! ^8 `2 M) f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' s. b4 Q9 x! R7 ^/ R+ Y/ Z, C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 q( ~2 j% Y. T紧靠其上添加:
8 M, m3 J/ w! f6 p- Sif( pWndBase == &m_wndMenu )- l1 |: b* O4 @. g
{2 S8 K! @% {& g& c1 [$ Y
switch( nID )9 h# }. E. W9 d
{0 N$ b4 ]1 k, |1 l5 t, y2 H; U
case 2:* D6 X8 E4 t4 _
{& B/ r% P9 j9 X! m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: I2 V, X8 Y( _; y# f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ r% b' ?! }6 M8 l3 S {
4 j8 }9 Z; ], ^ break;
5 G) _% [" b: b+ M d& P }
0 O X5 Z8 `8 X* P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). ?! k( E+ z2 u/ [. f3 v
{- B) d# u" g- H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. |8 e3 [& t( Z if( !pItemElem )
+ V( {1 ^1 l: @" ` continue;
2 r2 ^; k; N6 o$ X, H. g if(pItemElem->GetExtra() > 0)
# v6 i9 ~- N. T9 X continue;
! s* f( G9 R. P4 K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 b! T: ~ K9 }; Z
continue;: h8 z" m4 t/ ?) g! k
if( g_pPlayer->IsUsing( pItemElem ) ) y1 `% H5 S" Z9 d9 o
continue;/ D& e+ G# l ?$ u; f
if( pItemElem->IsUndestructable() == TRUE )" D1 G9 P* r/ A4 t
{
/ q% I4 k" B; F `: w8 L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 h+ r6 f4 a3 P I! w( u/ V continue;
0 x; W p9 \9 z! Y4 t( B" g0 T }% G) O0 B' ~( v2 \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 {7 D2 D2 {5 }. g! {
}
/ [2 i2 @- a6 }/ Y" o0 o" k( Y- g% \ break;2 ^" r0 I* p9 W. F4 [
}, R: r+ Z$ i; Z2 |) K
case 1:: K5 ^* X5 g4 C' |
{
, h5 F* L! y* ]# Y e1 t //整理背包
+ O4 i5 p0 U5 h& K9 S. a //////////////////////////////////////////////////////////////////////////
9 z- T( i1 J5 Y' x; z& n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); s" b) ^$ u# @5 t; s5 G. ^2 |
//////////////////////////////////////////////////////////////////////////
9 M6 q3 T5 M5 R" B //////////////////////////////////////////////////////////////////////////
1 C+ w; O1 u: N, \ CInventorySort* pInvSort = new CInventorySort;
! Q/ r' S0 n5 a; \& a6 i5 g! l vector <sItem> vItem;
* N# x! y* P; p* w$ ^ vItem.resize(MAX_INVENTORY);//初始化大小
2 u" ^1 Z/ _6 U1 R5 h0 u- S2 u //////////////////////////////////////////////////////////////////////////
3 H$ {8 ~& r! _' l //填充数据
5 u4 Y( R& M$ W) ~& v$ C8 P for (int i=0;i<MAX_INVENTORY;i++)
; L: w' k& z. K# s0 Y# o {
6 ]% u. i' p( e' q2 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 C3 G: V/ Q6 ~ if (!pItemElem)4 f9 x5 {* X6 {. E: _/ d
{
2 n4 K! h" N, j0 p" Z vItem.dwKind2 = 0xffffffff;
: B" D7 Y, t, I$ ^/ D/ k vItem.dwItemId = 0xffffffff;
: ~: D; r4 [/ T* Z; Y vItem.nIndex = i;! Q, h6 k- T# {8 c- \
}else {% H# j; Z4 Y7 \0 n7 _% i! n
ItemProp* pProp = pItemElem->GetProp();2 f% W% X9 ~5 v4 g+ C: Z1 T
vItem.dwKind2 = pProp->dwItemKind2;; }: p3 i1 L- `0 d
vItem.dwItemId = pItemElem->m_dwItemId;. e0 o' J0 C, o) P3 l; [2 T. L
vItem.nIndex = i;6 `* z) }" D6 ^; B9 r! d
}
/ }+ E* n5 _% g; b5 u' J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 x% t! D8 V V- ^$ @
}, B$ P0 G4 V/ `! H, `' d( {. J9 R
//////////////////////////////////////////////////////////////////////////4 u& r8 L! ?# {3 Z$ Z# Y% I; b, L6 j2 H( l
sort(vItem.begin(),vItem.end());//排序
4 T# Z, {7 u6 U; H7 z; I2 C //////////////////////////////////////////////////////////////////////////
5 {% \5 x) S" G& C. R& } //交换0 m4 @, n; v# e) m) C
for (size_t i=0;i<vItem.size();i++)
+ Q" ~+ q/ c: d6 m2 I {- U( ^5 \: u9 `/ J+ @
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' f3 m, W, S0 y
pInvSort->Add(vItem.nIndex);
0 V6 d, L" w/ q b }
7 m! I5 s: ?% W% z v! M, x) w BYTE nDestPos = 0;9 T/ z/ l7 _# n' G/ `5 _. L3 N$ T
for (int i=0;i<MAX_INVENTORY;i++). @! W2 R3 c" d9 M
{
! H4 F. d) G I9 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ t3 }0 D+ [3 O' I5 Q% D# C1 P' _" \
if (pItemElem)
3 m+ f% |8 E# d7 u- P# ]( x$ ? {
4 K. c" U! x# B if (IsUsingItem(pItemElem))
4 l# n2 I1 K/ v, N* B- b {
% A( }. G7 @- f" a* p/ f //这个位置无法放
8 \8 L1 s( F9 N" n6 s nDestPos++;
6 k5 ^' J$ J( m3 ~' c6 f ` }
9 T9 P3 B6 q0 \" A( Z2 y. ~$ \* X }
# A$ G( G% F! ~ `% m0 W/ n BYTE nSrc = pInvSort->GetItemSrc(i);
0 m" d' T1 v! R$ s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 H7 \$ R) \6 [6 u
if (pItemElem) Z# Q+ ^$ E5 w. @
{
1 ]. W+ e$ @: T/ N if (IsUsingItem(pItemElem))) o& ]# C' o; p/ o. W9 J& J
{
& K3 R( s+ k, A9 J //这个道具无法移动,跳过6 o; @3 x: F. ?! ?; L
continue;
) H3 d& i# `% P" V' I( i& C" H" G }
: I8 x$ } s# S }else{5 z |, V. d0 V3 i; J
//空位置 不用动
- D, F5 R& j& r% b% j. F( g! Y continue;
% g) X& B7 G! |- l* H; e5 o }
* g8 g, y$ m3 K6 _1 D* c //////////////////////////////////////////////////////////////////////////; N! B8 j0 T+ m% j7 Q
//开始移动8 e. E& I+ U8 E d8 x8 c
if (nSrc == nDestPos)
" r$ d. M! ?% n( U% W; b2 C7 V- O {
, ^; x I* F$ r; I //原地不动: v% {; s R: `; }6 n
nDestPos++;. F0 }0 L: s; ~ D8 X8 n8 K7 e
continue;
6 a& f% E. y% w& f- h5 ] }
( d! r# m1 S% C' { pInvSort->MoveItem(i,nDestPos);9 `- U# s# C0 v3 J8 P3 S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: }% L6 Y5 W$ S4 ^5 ^- e" \3 R5 Q% a0 k& o
Sleep(5); T8 H5 `! |3 i: a5 g2 E( g7 v; `
//Error("移动 - %d->%d",nSrc,nDestPos);
% e/ Y1 O6 T3 E$ A. _9 X nDestPos++;
% i6 _# Y; b7 K }
2 b2 F. ]9 `% w //取第一个元素的信息8 R+ y# P5 v9 c7 V- x
/*
5 F" o8 o8 ~+ e if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ A; |" d3 P) }
{# t p* L+ N3 t& d- |! u# h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. a- ?3 ^, f! g/ e( O* q* H7 E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* {) Q2 V: w/ I7 N& ^, w0 K9 y }
1 B& F- F8 }& t+ w8 C8 R: ^. L0 H */
$ o! c2 r% q8 r2 l- M3 _ //////////////////////////////////////////////////////////////////////////
# ~3 U' B" a; m break;
S: r3 r1 m+ R }
% z' t* h# w8 i5 ? }
; ]4 |- H U3 f4 L" C; U: s- b}, v* O+ R+ O" n0 O
m_wndMenu.SetVisible(FALSE);2 P' M& G" d( b& B
" k7 Q A) d; ~9 M
--------------------------------------------------------------------------------------------------------
6 o7 U7 m7 J4 D! y" X! R, g3 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: ]: |2 o( Q0 E% ?7 g n{4 a) }+ [) X. R; h, U7 f, D0 A
BaseMouseCursor();
, d! A: O1 c6 J/ G. O$ ~}
; u k; p3 y' c( }, [: h* |在其下添加:
4 @1 F. x/ _6 \9 U( u3 A! M3 C8 Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 h8 C% S$ Y1 ~" k{+ s/ |1 S$ t' Z8 i/ `" x; h/ I5 s
m_wndMenu.DeleteAllMenu();
1 x' I( H' P$ i$ _3 U/ j; Am_wndMenu.CreateMenu(this);6 e+ W4 b: X& A/ y: g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' X7 a2 P1 j# p# n- a4 E: d0 P" P6 t+ t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; t" k0 n; L5 w, s6 z+ i/ F. v) ^/ m: w6 d{- R1 Y5 l5 e" E
//P以上级别才可以删除所有道具
8 J" X3 A9 ]5 g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 S) ^5 [+ P; O( h; e}6 i1 D/ i, B# ?" b E' U; p6 C, M ^# k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 P' y- ~4 i# w- z6 r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. C {8 X0 v8 M) s6 ]0 I
m_wndMenu.SetFocus();
% [% [! v# w" U- c5 F}
! @+ T! G {8 v6 s: f------------------------------------------------------------------------------------------------------------
0 g' v+ F! I7 @' \*************************0 O1 V9 \9 D# c
WndField.h文件3 O0 q9 M4 W' `6 N
*************************5 z" M* m( y% N8 W S# I
搜索:BOOL m_bReport; `* y6 ?, h8 z6 X* F) h: q
其后添加:" G# {" q* {$ N3 g; |
CWndMenu m_wndMenu;0 J3 D" T# F3 @# s' `: r( B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: R* I) }" H+ E$ [: M其后添加:
, C5 G* t3 l1 }5 Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
" U( }$ h1 i4 [& B. [. g
. Q6 I- W- B* N1 n6 Y Q
" I: R h0 S, g/ D# U/ }1 B3 h |
|