|
|
源文件中_Interface文件夹下WndField.cpp文件
' W0 o- l5 H3 _, Y3 U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 X% @& p7 K) Q4 t( [8 `2 C4 \/ T" w) S) S
struct sItem
1 p0 P7 ]$ j0 |) i1 A4 E3 B{
+ r0 X8 i; V" o1 TDWORD dwId;
$ g! P: N7 c8 ^ BDWORD dwKind2; C& d f! A0 }6 ^+ M0 B
DWORD dwItemId;$ g; V5 @, J B* O" S
BYTE nIndex;4 e! Z0 [" g# [+ G, n
sItem(){
: L: z1 c5 ]/ T/ E1 [( j2 K3 x. W1 A dwId = dwKind2 = dwItemId = nIndex = 0;
" @ n/ P" S! @( s4 A! V' @, k}
& C/ b! J. J& K3 Z% B0 m2 y& k' F7 C* ybool operator < (const sItem p2)
0 J# F( W% n7 Q- u{$ ?; D0 a/ v, E0 [3 r& X* r
if (dwKind2 == p2.dwKind2)& P0 S% n4 F$ h: |6 Y8 [) ^
{
' Y* j5 P( n2 Y) Z# \; f8 _) D return dwItemId < p2.dwItemId;
4 E% t& j3 x& b6 G4 [4 b% o& L }else{
* @# @' s% X% }7 W7 p9 h! C return dwKind2 < p2.dwKind2; c9 @! a0 l& |( w' O6 m8 z: G
}* j3 \: E$ N& r+ R: ~
}7 I8 A' {- _1 [. L
};: I! o- G/ u1 k& C9 s+ b! B& R
class CInventorySort
3 ?# b3 `/ u$ S+ ?2 s+ P8 E{1 Q* J8 \* O# Z2 S
public:" s3 a& e' n: e$ m6 @# C
CInventorySort(): E* b' [) |4 D/ w- c9 j
{
3 p1 L) n3 l! H9 U; d/ I m_dwPos = 0;
7 {# j3 N! z4 ^. P4 R: g1 H- h}
! T- i4 T: i+ Y~CInventorySort(){}
0 l Q) m0 x* n+ g0 p( j' g8 k" y7 zprivate:( K/ r) R; h6 @) c B f. D- M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
c7 g& E! ~/ e6 k$ A+ t+ J9 DDWORD m_dwPos;# n7 q- r; b$ F. I4 {
public:. Z+ [8 P& x( t/ D& o- N
void Add(BYTE nIndex)& ^" U8 F) \" L& [9 t; H
{; O2 \8 T0 G8 u$ p7 K. x, t
if (m_dwPos >= MAX_INVENTORY)
7 Y$ ~! b$ x5 C- e( Z# g {
8 b* c, b B, S" u; B/ I# ?" {9 l return;5 S+ |5 [6 b2 P8 y3 G
}& M6 W& ?* U' B# ~
m_Item[m_dwPos].nIndex = nIndex;" v& ~ M4 E3 O0 _9 h; e5 e4 [+ P
m_Item[m_dwPos].dwId = m_dwPos;
% c0 F5 w5 |" F m_dwPos++;8 {. U% _% S" d% |: d: ]$ O$ h
}& D" W. ?5 Y0 {; @# t6 t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" O9 E: c/ P6 H+ m( A7 O0 s{
* h4 a5 \+ N) z for (int i=0;i<MAX_INVENTORY;i++)
* x# I# S" O9 d {
}. p) J% Y* N* J9 _* Q* l! k if (m_Item.dwId == dwId)+ j9 O J5 e J/ V" X
{
: t( u3 W% f! h( C! H; w( j return m_Item.nIndex;4 O2 F9 w4 h2 u0 I$ [
}
; [2 c6 G) n w0 ~1 K }
8 W8 b1 K4 b7 P# T- O return 255;
/ A& k- |5 `6 V; Y- @}1 S2 ?! |; K0 o. f: a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; J( I; }+ X# h3 M- c4 K E9 Q{
4 B, Z! _0 v1 H# H6 c BYTE nTmp = 0;- r& d& B N) |7 k
bool bDest = false,bSrc = false;
; [/ M% C! Q8 p8 U1 x0 h for (int i=0;i<MAX_INVENTORY;i++)2 a% |5 W' G, I! z
{' o! H' m/ ~7 ^" d
if (dwSrcId == m_Item.dwId)
& R* n1 Q D6 J5 e, Z( L {+ J/ k# X& G7 r5 P( Y. p8 N8 U9 N
//id相等 则 改变对应的dest和src
1 d% |& A! z0 \- x& ]! M% W! L1 ] nTmp = m_Item.nIndex;; q0 E6 ~9 q* q5 L! K; H. H
m_Item.nIndex = dest;
, z# v" }/ x' U4 g }0 ]' ]; |5 @2 S
}
3 ~9 x- z# y: M2 Z4 Z6 y& u/ ], x //临时数据保存完毕,交换开始3 S' o5 C4 T8 k B) \% y5 U5 ?) ]
for (int i=0;i<MAX_INVENTORY;i++)
# i; j* [& Z# S {% Y) B# B x2 [3 B2 e
if (dest == m_Item.nIndex)0 L6 D1 L( W& x5 j! ^: J
{
0 E/ c/ E* N1 @' M& f3 [ //id相等 则 改变对应的dest和src' o# y6 L& Q; g
m_Item.nIndex = nTmp;
) W0 p3 l- N$ D+ X E; g! e$ ~ }
8 Z5 e) @1 h9 T }0 H; E# b# o6 ^9 C# \( d6 e- [, P4 t
}
6 s" j' [8 n! t% h$ {& f& j% k};
& H( F( x$ o7 b' D8 J-------------------------------------------------------------------------' x" t1 Y! @6 z8 L+ Z% D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 f6 M; E5 t- A! j1 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- R! ]) {/ O/ Z# ^紧靠其上添加:
7 z L* P" ?: F7 S4 ~7 l3 tif( pWndBase == &m_wndMenu )
9 I+ a: ~; j. \5 h( {7 Z9 [{2 P5 a& F0 e6 d" c8 [4 {( K
switch( nID ): W8 g& |4 ]9 X+ t
{
* {+ I( v7 H; ~ case 2:
8 w" F9 ~! R n* b1 p! w {
* k) y+ @7 R. c1 t* L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; w8 B& a: R5 ]( B; B9 \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 f Q- ^9 I# c. [5 q: k) Q- ] { v; J4 f/ F I
break;, b$ [# W0 I: U: R
}
4 `, K4 h) A& \7 [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! Q. Z4 a& b [2 g+ v0 \4 J
{
4 z: M6 H `+ ~3 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ f/ L3 W7 I, J: H, Q# \ if( !pItemElem )
' N+ l- F" j6 z% E: p9 w& a3 U continue;
- e( q: |: L8 X if(pItemElem->GetExtra() > 0); w4 L) }' L9 h) {& h
continue;
! V3 r! \2 W7 f+ V; v# R7 Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . k* G5 W6 }6 I8 ?" _6 U; D
continue;/ B7 u0 }+ e* C. Q- {
if( g_pPlayer->IsUsing( pItemElem ) )
9 I1 O' C: d) m l% ~" x: L continue; h! _5 p# O, d/ t, V" x
if( pItemElem->IsUndestructable() == TRUE )2 D- k( n. Z7 A+ W3 g
{
8 I8 }3 `) h. q. P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* p9 G, Z1 v" w g, N* i p# y continue;
9 { t5 Y- u1 o }
; N) i2 u' I# I$ H7 m: b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. s, P _5 y1 O S* z8 | }
4 Q5 k0 t9 J4 C! T! K break;6 z( b1 b; `5 e* A8 b
}+ d( A5 [ l# S) Q+ J' w3 P6 Z) x
case 1:8 V* d" v# ~, A5 J* b
{
! C/ C0 w+ D3 }, e //整理背包' T4 ]: I; H; p% }3 [, T' r
//////////////////////////////////////////////////////////////////////////
: x# z0 Z {) ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 ?) Y* h! C; ] //////////////////////////////////////////////////////////////////////////- m: j7 ^. f( l, E) C) C% C- z
//////////////////////////////////////////////////////////////////////////
8 t% I/ @$ }. n% M. x3 W4 t CInventorySort* pInvSort = new CInventorySort;" ?7 Q1 u, A' ?' q
vector <sItem> vItem;
7 [2 O | J6 ~$ O9 s/ X! b2 L, K vItem.resize(MAX_INVENTORY);//初始化大小
, S6 n7 T2 K0 i# @+ o //////////////////////////////////////////////////////////////////////////+ N9 N( {# O: G$ r" d
//填充数据
% X% S4 Q8 H' }+ b9 C5 G for (int i=0;i<MAX_INVENTORY;i++)3 k5 ? v7 _& n7 I# P" X3 t5 B
{) v% Z( M0 c( \6 |# ^* |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: J9 z# H+ l. P0 h* P; f if (!pItemElem)) Z- j) I% D9 E* N* k
{2 ], j: |. ?! @4 e2 Y9 J
vItem.dwKind2 = 0xffffffff;) ?4 f0 Y* ^" j! z' w+ Y/ A- x
vItem.dwItemId = 0xffffffff;$ e) G2 G P9 r4 c1 B+ I; @7 R
vItem.nIndex = i;
" W k$ n% V0 }2 l }else {( V) d7 { Y! V( a' P
ItemProp* pProp = pItemElem->GetProp();
. {7 Y# Z+ n6 @! T" ^8 k2 C) c vItem.dwKind2 = pProp->dwItemKind2;
3 q1 V! r/ y" d8 Q5 ^% [. V vItem.dwItemId = pItemElem->m_dwItemId;0 @9 z# {6 O+ V0 T$ J0 M4 G( _
vItem.nIndex = i;+ ?6 _/ ~3 C' r6 W! Y% R; M
}6 K: X2 q- ]5 _3 P4 g# P2 l: a3 M
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ s# D. E' v3 M) @. u9 |! I
}
" i+ X. ~ e2 D5 ? //////////////////////////////////////////////////////////////////////////
) w3 S6 b% S9 ^) n$ j/ ` sort(vItem.begin(),vItem.end());//排序2 L. I2 K7 N% Q k; _( u# C
//////////////////////////////////////////////////////////////////////////5 ?$ z9 M0 @( H; @+ q: Y
//交换
; r2 W# p3 ~: p7 [% s% ?! X; F9 K for (size_t i=0;i<vItem.size();i++)
2 e5 r! z2 D8 V+ [/ U# v, u {
0 H7 r% o B) r( t) r" v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 P* q$ M* A# Z$ F6 p pInvSort->Add(vItem.nIndex);
& H+ q9 J& T) P" ?4 L) p }
0 e5 j' x; L3 [ BYTE nDestPos = 0;
; u3 t2 C3 q4 r1 G# @ for (int i=0;i<MAX_INVENTORY;i++)
Z4 K! s M8 t" Y {
9 k0 T9 W9 u e1 e9 Q' \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! g( S' m! u' n" I# W7 S if (pItemElem)4 ]( _! a. R, z8 O
{( V5 [; P$ k9 ]0 S. b6 R
if (IsUsingItem(pItemElem))
2 p' X. E5 c' Z: d3 @' G {, r2 C! Q4 U, F; c* Z/ l: k
//这个位置无法放, P. ]" N( \+ T6 h g, i
nDestPos++;
& Y l( C! ]9 v( r. X; y; M h }
+ _; }6 g7 X2 A# P: b" ^ }% ~0 x& w& R! v- b" N" N
BYTE nSrc = pInvSort->GetItemSrc(i);% u/ Z: t$ g9 q5 Q4 B9 q: k* O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); H$ S" ^% t, {4 w
if (pItemElem)
/ _- f* d( d# f4 z {( C5 g8 [9 c V1 Z* z- M
if (IsUsingItem(pItemElem))
1 i# f* M4 X- z( O. \4 b {1 u8 G/ y F; j' w9 x& `0 n
//这个道具无法移动,跳过
* _$ U6 ?* y# X3 L2 h* O continue;2 k; w* m2 Y4 ]1 n5 A# o4 b* N
}6 Z/ K+ N$ ^* I( G
}else{
! ]/ T* ~( v3 l' ^ //空位置 不用动5 y# a5 p5 U$ ]$ b2 \( p
continue; j# g. B" o5 }& g
}
% l1 Q( Z3 P9 C- J) Y( V //////////////////////////////////////////////////////////////////////////" a. N, w5 k- ~& V
//开始移动
! r* ~" H- T$ O! b- t" H1 D if (nSrc == nDestPos)1 I: o% a, u/ G3 w: ^6 o! t
{6 F0 w2 ~. K1 c, U
//原地不动* N2 R, ]: Q, c
nDestPos++;* }: {9 [# s* k* v
continue;
( h; x. v+ f2 @, _5 Y }
4 Q3 N" w; i1 R! \4 G0 G6 l pInvSort->MoveItem(i,nDestPos);
( W( P! C% ^5 Q! ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);: T2 y; z9 t3 a1 d1 W% k
Sleep(5);
" ~( A% W5 V+ {* F& b" A& L, d: y //Error("移动 - %d->%d",nSrc,nDestPos);( |8 Z ?/ E( D
nDestPos++;. N# Q" b6 b, u4 s: z; P3 [; M
}, I" Z# O! x4 \0 b
//取第一个元素的信息
2 M: _/ |8 d% I# l# G9 O /*, C9 ?% W$ J9 W1 v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% J+ q% j1 X+ }& H- c+ |7 l {
) U. r2 d! U+ a9 s u2 s Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, \" |- m+ n, [* K0 {9 w5 J8 Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: Q, {' o3 W1 ?4 t; ]! {' V }
5 l% m# Y0 C6 {" W. p a */% a# Q8 b+ y1 s1 |2 l3 |
//////////////////////////////////////////////////////////////////////////5 Y9 S0 Y6 {8 o- K1 J0 G% k
break;
1 a/ A. R ^3 Z; Y9 p3 F* J }
" X3 N* q5 n$ [) \ } 8 g- c' i: o4 |5 `. C# |
}; n* {2 A. G+ u
m_wndMenu.SetVisible(FALSE);* F4 O! ^6 j# h* y
9 |* Z2 S" V$ o1 i
--------------------------------------------------------------------------------------------------------" _1 P6 V+ u! x* q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ t& k; h2 E* _: Q' g* [{
1 R# E/ u7 n- e0 D- }9 V9 GBaseMouseCursor();" U* u: j6 s7 ]* [
}* h& [3 a- q# C) t, b
在其下添加:
9 r: [# i8 e+ [% G3 Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 }$ ^7 X4 S% |, p$ I6 r& I6 ~6 p
{- Z6 X1 Q! c7 w7 a4 z) l' X
m_wndMenu.DeleteAllMenu();
( H! d, Z0 I3 h' Nm_wndMenu.CreateMenu(this);% t# u/ D1 ?; `8 D4 O R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 K- h V$ ?+ l2 Z) N) z3 R7 O3 Z6 ]: M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H" Q& x8 `/ \
{
& B" B2 J" o( {2 w# U //P以上级别才可以删除所有道具: O5 |9 ]' E3 V1 }6 [& @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 G/ ~! F! w6 c5 {
}, X2 J, p$ m4 t. G. O4 q9 x& U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( K2 A. g8 w5 B5 a: _7 o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' A* w2 J2 ]5 D" a
m_wndMenu.SetFocus();
?7 o, c* e. ^0 L: m6 a0 }9 Z}
6 v' V/ \: o: F3 @2 F! G------------------------------------------------------------------------------------------------------------ X9 `7 v/ p" ?9 i H2 L- n
*************************& v! \ L) t. ?, b4 [. w
WndField.h文件7 Z% S0 f. m4 y" o+ X# D+ |0 ^; R
*************************
3 B: ~0 y1 \, A8 X+ ~搜索:BOOL m_bReport;
5 [6 d* ]" v# S- I其后添加:
) ~0 N U( i3 O! ?6 J% u+ Y7 i" aCWndMenu m_wndMenu;# ~, E# c& M2 v3 U5 }) ~7 b0 m+ G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* \, T$ {+ Z- { o# ^9 e% }& |
其后添加:8 {7 J- Q- t* k2 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 H6 Y4 x7 O; R1 W, P3 ]+ S6 |7 @& J+ ~, T
6 i* m7 G+ E# l$ e8 G& Y( q |
|