|
|
源文件中_Interface文件夹下WndField.cpp文件5 a* T3 ^4 y5 ]1 U$ H4 h7 Z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 n. u, {& F6 k8 w. J% t
2 k" v! ?0 `+ p9 i/ Z" {struct sItem7 y8 S' a+ Q& `( Y
{1 }8 w8 w I' o: z
DWORD dwId;5 ?4 ?$ ^( A! o- X6 J* o- D
DWORD dwKind2;
) o: Y. N0 E( f% x; A, L" S+ H/ }DWORD dwItemId;
9 F: I) V" x- \+ GBYTE nIndex;
" u: d) d! O6 o5 x0 wsItem(){
7 {7 g* R8 w& d6 w2 N* m8 \0 ~ dwId = dwKind2 = dwItemId = nIndex = 0;6 X6 {( c& J7 a! o5 u
}
: G Z% c h& U* o9 D* T1 s* X# Dbool operator < (const sItem p2)# e! o' J) a7 p$ ^. c# B1 ]
{
- O7 a7 u* t) Z% y if (dwKind2 == p2.dwKind2)
) E9 D# \& u! i" ] {
! N3 A) q% d7 ~' s* N; L0 @ return dwItemId < p2.dwItemId;
; C7 Z- d T8 } }else{
+ ~. ]# ^( k( {8 U6 N. x) u. l return dwKind2 < p2.dwKind2;
9 k+ N" _- c( Y! G y" f3 i9 s }) u3 `6 @8 Y9 O q7 Z
}" |, ^4 j& w; v$ E
};
& ^5 s0 W5 e% Q: k1 q# Dclass CInventorySort
4 F, _& [9 _7 U9 W w{
7 W; x0 B' y/ r/ f; y$ Upublic:1 P- |7 A1 F4 Q/ d- I+ M6 r
CInventorySort()
l6 O* r9 E' p8 j0 U{% T5 n2 N+ a. ^1 f; E, k' o
m_dwPos = 0;% V+ q% Y4 S- x' ^1 d. e
}7 L) c: D( ?& i- `; I; l
~CInventorySort(){}& g7 G" e- |1 N( x" U4 v
private:
* g. \- x0 a+ M1 Q, f$ k0 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" P; K" ~9 y! @: o$ q' s( f
DWORD m_dwPos;# y4 k4 h4 m# E" b6 w" {; w; t# \5 L
public:
, N M+ L1 W( l5 m0 i: Nvoid Add(BYTE nIndex)
/ s+ `( E8 h) e& ]4 `" T{3 t4 G% J8 ]! ]3 w& U2 |5 r) s
if (m_dwPos >= MAX_INVENTORY)5 w, a$ b7 y1 Q2 S
{8 p9 ^& E3 n2 n2 a: [4 ]' |( S
return;
9 R% A$ {+ e# G8 Q9 |9 i }3 d( E# L( n; V
m_Item[m_dwPos].nIndex = nIndex;
, U% K2 R0 m# ]. V- p7 F m_Item[m_dwPos].dwId = m_dwPos;
3 N6 o1 `8 a4 ~# o/ W. y# r; k M5 \ m_dwPos++;7 A0 d0 ^* c, r& Y9 [1 }/ G D [
}
$ [+ a% c0 s. X3 M8 L0 w$ I7 [! Z( U bBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 E/ H' L: w2 _, z( d
{( @. i7 v; U: R% i4 A- Z
for (int i=0;i<MAX_INVENTORY;i++)- C D5 ]* r9 T
{
9 J/ d+ i- { X! F9 u9 k6 i: C# [ if (m_Item.dwId == dwId)0 C9 D5 y, I5 [- D3 x
{
% y- K! j4 G9 v# A$ I return m_Item.nIndex;: z' ]8 e7 u; k# ?- |
}# j* Z. D3 ?% P
}( d9 M r" k4 S; l
return 255;
2 V9 Z8 a" K. i8 Z: K}' F" b- E$ e/ b* R8 H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 q2 O' t9 T9 q' ^{
" b4 D1 a5 c* ]$ V% ~ BYTE nTmp = 0;
7 ` b# ?" a0 V% B) L) C& I. Y bool bDest = false,bSrc = false;
8 \- s% @& b0 [- Z for (int i=0;i<MAX_INVENTORY;i++)" D: S4 F& [$ E6 O
{6 c# z9 I/ K% w! U, _' h
if (dwSrcId == m_Item.dwId)
3 P1 d0 \$ d5 {1 V {1 U: i9 l7 _* G- Z, n5 a4 S' \! C0 c
//id相等 则 改变对应的dest和src
' p7 h5 L3 P" R1 A& e- T nTmp = m_Item.nIndex;2 s6 r Y( P$ C" y2 A n
m_Item.nIndex = dest;9 ~( x8 r7 F2 U5 d( D
}
4 o% f& R, Q( H; V }
% r: g( y0 B4 ?! B, X //临时数据保存完毕,交换开始
! S+ {/ B7 |0 r# R for (int i=0;i<MAX_INVENTORY;i++)
, j3 P' g- V, p {. [* z: n) M$ ^. \
if (dest == m_Item.nIndex)
7 Z/ q" r$ f- q1 P {
9 T( j! X5 O3 r0 ?$ y+ G5 q //id相等 则 改变对应的dest和src3 b2 [* }5 U% w# M1 }* @
m_Item.nIndex = nTmp;3 I; y5 J: ~) H( N" j
} U% Y. z+ n" v' Q9 g
}! V$ \/ X2 B, |5 O) m
}0 G1 z0 F- M3 i y' J! ?( C
};) J0 N. w* ?; C3 [! N+ ^
-------------------------------------------------------------------------8 D# I% |0 j) s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ K3 U) x7 V" q$ [7 G& @6 ]- U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: Z, e& o. |+ k# P/ V. v# t% v紧靠其上添加:# @3 o7 T5 A- p# x, x
if( pWndBase == &m_wndMenu ); y; l% F* G! ^3 a& o
{% j9 C2 V+ r7 E: U! h* k
switch( nID )
: B$ x; t! i8 q) }* M1 W {$ H0 g8 | Q. R `
case 2:
. p1 O7 J" B% |, [& A. E" p- e* t% j {
. n" j# I; q( C) U //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. L; h, v) a7 W9 F* N1 b# Y/ r7 J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 z# t0 T9 c2 z; |% D& h9 D
{
- p2 {2 U' D5 T9 l break;
, X/ a/ {6 n" ] }) d! z& ^+ ^0 t7 Q1 C, S9 `' a
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( t; G+ x$ ] t& L+ Y' u0 J
{
s) v% W- M) Q: L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ B8 W6 T9 c% L) Q if( !pItemElem )
* G8 }, Q5 m% I; Z$ u* r; f- m* \ continue;; n e7 b0 K. p+ L' C, l
if(pItemElem->GetExtra() > 0)
2 j3 P0 y, u f& e0 L0 L! f- Z- T& z continue;2 b: B* S1 d0 ^% N9 g \( F9 j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, }0 \/ F* Q+ l4 W/ o continue;
8 Q& [" Y% F5 J _, B' ?( | if( g_pPlayer->IsUsing( pItemElem ) )
$ F5 S* a* M% k4 V- G continue;' E. N& d: Y# N* P& ?5 |# ]
if( pItemElem->IsUndestructable() == TRUE )
; y* Z+ I- H! N {
2 c, q2 H- J+ D1 r( H( E' K- m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, ^: T% f9 Q, Q% Y( _1 f
continue;% d3 {8 }4 V: I: F& h4 o
}% m* F6 B U; q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); G" M* s2 ~+ r' H
}
) C- N+ k5 _" j4 Q& {& }) |6 e break;
0 A8 k7 P. h& \7 E }) A" Y9 ]4 [2 I
case 1:
9 b0 H |9 [1 w1 `) g: y {) H* q. R7 a0 N9 I( A+ s; d
//整理背包3 B& j2 {/ r& D" x
//////////////////////////////////////////////////////////////////////////
6 |! g0 o8 N8 r$ S( r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ b" h) f8 H, E, h! Q) m) O
//////////////////////////////////////////////////////////////////////////
( N" s4 G% y: ]4 o //////////////////////////////////////////////////////////////////////////- E/ |: Y; D7 P! Q
CInventorySort* pInvSort = new CInventorySort;. y& i& O/ c; W. K z7 x
vector <sItem> vItem;
- r0 d" F8 y7 e# t) z! b; \! z vItem.resize(MAX_INVENTORY);//初始化大小. }) j1 U) Z" a g
//////////////////////////////////////////////////////////////////////////
3 _5 r2 V6 \9 K+ U( _0 D% ~ //填充数据
+ A+ ]$ c9 [8 }, v1 K6 f! v for (int i=0;i<MAX_INVENTORY;i++)
9 R7 }) c$ y+ T0 Z' U. H {
- f# g* F8 T0 p i2 Q: w% u* m! U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# A7 _0 H6 ]) g! y" d% H- V if (!pItemElem)
% B) @) m- x; Q+ o' ^ {) O2 o4 ?! ~9 [, _- {: f3 c
vItem.dwKind2 = 0xffffffff;. F. Y. k" O( H% I
vItem.dwItemId = 0xffffffff;4 x$ S6 v. Q" s0 C3 ]) Y
vItem.nIndex = i;
" _$ Z1 x" {! G }else {# h1 P8 C6 V8 u
ItemProp* pProp = pItemElem->GetProp();$ U+ J/ s/ ?+ |2 Z4 ]
vItem.dwKind2 = pProp->dwItemKind2;9 k. L! L- [. y. H) t* l. D; O+ I7 E
vItem.dwItemId = pItemElem->m_dwItemId;
5 u# q( V, `( t* o vItem.nIndex = i;3 N, N- q) |+ X7 z* Q+ X: ^
}% I8 c; h% `& x9 t) d+ o/ W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( H7 r, `& |* L, y# E' b }
! j. F" \5 |6 ]1 R" f( c5 }5 @* p //////////////////////////////////////////////////////////////////////////3 ]. g- c8 D( L# f% g! ^* `# r2 c
sort(vItem.begin(),vItem.end());//排序
! M0 u4 X5 w& | //////////////////////////////////////////////////////////////////////////9 `9 v2 s2 ]7 x g
//交换
% x/ |( Z& U" z2 c for (size_t i=0;i<vItem.size();i++)
9 \6 u/ }# {: I7 r/ i, U3 C2 S6 ` {1 b6 n1 n& a" f( @5 b0 g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ M. B( ^% C$ g. h3 G) e' d
pInvSort->Add(vItem.nIndex);
1 _7 o4 Y, z K5 B' u m }9 @ T" X u% N
BYTE nDestPos = 0;
. t5 ?- u+ ^. P+ W$ f for (int i=0;i<MAX_INVENTORY;i++)
) |5 E: R. r% f% ], N {, f" n2 L' C0 P8 w2 Q5 O% ]" T" J, h+ h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 [, b, v+ D$ ~7 H7 x! T if (pItemElem)4 D9 W( o' T _
{
2 o! @) T' _# q7 l* e/ k/ X if (IsUsingItem(pItemElem))+ g3 i9 d' V) z
{1 o1 [# Z7 f( P% M7 \
//这个位置无法放3 @8 j7 l. Q6 T F/ f
nDestPos++;
# P6 R9 ?" E0 @, u; X9 s1 F: [8 \ }2 D1 x1 a e* b
}& _9 f0 k5 h" Z
BYTE nSrc = pInvSort->GetItemSrc(i);
6 E+ ^; E, S! |2 V3 L- ^+ ~! ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. A2 C% G( c/ G) s5 K8 G+ l if (pItemElem)' |1 V0 J% l# o2 n: @8 F9 l' _0 F2 ?
{
% v2 p; w9 v7 o. \ if (IsUsingItem(pItemElem))# q. ^, L. `) j/ L F* y! z
{/ F/ R% e( n4 P# |
//这个道具无法移动,跳过
! s3 b+ `; n }$ |' [! o& ~8 I continue;9 E. V, k) N& W$ C' i: g# b
}
0 @% d4 P$ ]; X& d9 D+ O1 v }else{) v+ t" k6 v& I0 z+ S
//空位置 不用动% A9 y3 |% N g2 y% _3 c
continue;* p/ y3 G# [ @, j3 t2 F V
}9 L% J6 q$ ?9 T3 Y) i( {" u0 `9 u
//////////////////////////////////////////////////////////////////////////
8 J" }8 h' T! @& h/ A. @ //开始移动( Z P2 A( M: W8 M* D/ d7 ^3 d
if (nSrc == nDestPos)3 R% p+ ~2 n0 ^1 t% L
{
; E5 g2 P- f( R3 G //原地不动
* @. b4 _) X' t1 E nDestPos++;
- y* O; K: M" H& `) F continue;( h% ~) h- F6 c7 Q7 n8 M3 |0 Y: f; L
}
6 K7 i) V: }; ^- D pInvSort->MoveItem(i,nDestPos);& Q1 E' I0 c/ L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# s$ F. k) R! u# }: h t0 |; V, G7 R0 B Sleep(5);
8 f9 \9 q5 b# X& [# G* I( B //Error("移动 - %d->%d",nSrc,nDestPos);6 k6 N. x9 W) C) ]2 k: T3 O
nDestPos++;
; l/ x) Z Q8 `" ?) f2 c- w }
/ E7 h) _: S& v9 Y5 \ //取第一个元素的信息
8 N& i+ E! b# G% \2 ^ /*
* d3 V8 a4 d, s1 }* b/ V) K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 g/ G4 S! ]3 F% N7 e5 o
{
5 b3 L/ l4 G0 v- e5 m: O! W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 \. L- k1 t9 E, E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 ^. Q" M5 @! w }
% r9 X3 T' d: S+ L% l */
# f$ [* y/ O8 D) x l) y6 q. y! p //////////////////////////////////////////////////////////////////////////; Z, w+ a& @0 s" n5 ^9 ~* r
break;
- n$ ^% H3 }1 W$ ~4 h9 V% y- U+ n }% `$ r) [4 B4 t. A( m$ ]
} " T6 v; S, ]9 b0 m% D7 R
}/ p0 m! }" A$ i+ D, l
m_wndMenu.SetVisible(FALSE);
+ T% m+ J- ]$ ]) s* k9 x, W0 k+ o1 {$ Y; K2 z
--------------------------------------------------------------------------------------------------------' f6 T5 Z) i( e2 c# G2 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; F7 B( s/ N$ j, ~{, A0 X7 r8 p+ w- `& U& y Z6 _
BaseMouseCursor();& C1 B! w1 l) V m
}. y) d, ~$ u) ?% p' k/ g% L
在其下添加:- p; Z/ e% p$ S4 p' G5 d2 F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 d2 ^' {; g( n- a{" S3 p3 m- S, J
m_wndMenu.DeleteAllMenu();
1 h0 W/ C$ ^7 y9 p8 `8 zm_wndMenu.CreateMenu(this);- ]( s" v1 N3 t, O% n$ [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, U1 p/ N0 r/ U. E( m! u2 P
& o: N( I' `% n! ?5 Q; b) K
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 }/ l- n* z+ f* v3 b. P( M
{3 F6 \) j- m8 ]2 ^4 p5 K* }2 D
//P以上级别才可以删除所有道具1 X. r9 i( e& g- o! J3 p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& d. x5 |. S8 h4 c/ }$ a* N}
$ x9 {' [! s0 S) v. _4 d( wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 Z& t6 b: J5 V5 V% m' `, D; v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 N. R3 J2 D( d) s; l" F! A, Q
m_wndMenu.SetFocus();
2 X0 t7 R ?+ L% h}6 \) c/ ~6 J! Q& r. v
------------------------------------------------------------------------------------------------------------. C P3 p5 X$ Q' T2 W* B
*************************( l6 H! m8 L6 n% z$ s; v/ M
WndField.h文件
: r% V8 X: b8 ]! z _6 S; b*************************
, w* k7 R& P5 R3 i* W搜索:BOOL m_bReport;
8 x. r2 @7 Y) j+ n" J% @' J9 [其后添加:
7 r# \2 u6 P- @9 R9 f* SCWndMenu m_wndMenu;4 B }9 r9 A( I* Q+ O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& d" X0 M8 H+ | o. Q
其后添加:) H. c9 W m* F* G# m7 X3 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ k. u6 ], K( ]3 Z- o
) w& r$ x# U2 j% F6 L! `9 f! q# V% T* E" J2 T
|
|