|
源文件中_Interface文件夹下WndField.cpp文件
* n/ w% A: r) f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): i* \* Q) \; b# W
! _+ c+ t+ z- t1 R
struct sItem' S6 t/ L# e( @3 J K
{ [0 A, o0 i( y9 u9 u$ `
DWORD dwId;2 J2 N+ z% Q4 |# j! N8 \
DWORD dwKind2;
+ ~; A& X/ a7 C1 K% aDWORD dwItemId;) n2 T- b2 \$ T, \" p* o' W
BYTE nIndex;
$ X- i! ^# \7 @# w8 G | F% IsItem(){
3 k' B# h: X9 e! [9 H dwId = dwKind2 = dwItemId = nIndex = 0;
% P. _3 D- s3 Y3 I}2 u: c" _0 B" _- _- v' E* X' p
bool operator < (const sItem p2)2 V; J, `9 H. x# X
{/ V' }! k, ^* W0 h5 ^/ H
if (dwKind2 == p2.dwKind2), n9 S' N+ h0 ^) Q6 F( z2 ]
{2 f3 C5 H, y1 E1 x1 ]9 ^7 h
return dwItemId < p2.dwItemId;6 r4 z* Q K! Z4 w
}else{
& e" ~/ l- x, T, R5 k W7 ~ return dwKind2 < p2.dwKind2;
% _" b" a" w7 i" d, h }
, d& U) g- j# }; y& K}& t* k" q# Y, Z+ R7 ~9 I. d" w
};! l* l2 F( @) a3 d0 C, s
class CInventorySort" n* |) b8 ]; i+ z; V- _
{
& ?( S' N% r* }# p; P- D4 S* @public:
2 s& b3 B, g2 k9 pCInventorySort()' Y, @# ?* e$ F
{
+ y& s* e1 Q& r$ G4 u m_dwPos = 0;2 R2 y0 v* H& ]: m8 L ]
}
& L ~& p- r" c( ~1 h" l~CInventorySort(){}* ~1 Z. R9 `& r4 G0 H9 k
private:
1 A! J# g" k8 n# w% n. e; \+ |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ W+ e/ g" e; u% K1 C
DWORD m_dwPos;
( W" N3 Z$ [1 Mpublic:# ?. \' C3 N; @ |
void Add(BYTE nIndex)) @. x! y% p5 M5 X
{; A0 o. k% u- ?+ c/ O! E2 X- N
if (m_dwPos >= MAX_INVENTORY)- R" t: n8 v. y$ j
{
* v2 ?! {/ q) B+ c& V return;
7 b- d' U5 \& d' p) ?5 ?, [ }
: e" ]( `0 j1 V m_Item[m_dwPos].nIndex = nIndex; s y2 k5 \( @
m_Item[m_dwPos].dwId = m_dwPos;5 c2 j; S- V3 ]
m_dwPos++;$ ~; Y! H' a; z- w
}- e: b+ i. ^4 M- E! y4 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) y& x W& k9 F. ~
{
2 p* s; e* ]+ n& P, ? for (int i=0;i<MAX_INVENTORY;i++)
6 Y: s' A X7 h+ k7 U! a {
% U( N1 Q3 a: p/ A+ B0 R if (m_Item.dwId == dwId), ~6 _2 j8 ~& K0 P8 |: Y0 u. X4 |$ D
{7 F( }* c# k2 s/ B, D9 V
return m_Item.nIndex;; b' R) j, g/ p7 P1 n1 l! h
}
2 z; h, g1 J: h: k- C% z }; p1 _, P8 f+ L; z, L# C; D
return 255;5 b V( K( ` X9 L
}0 ~2 }$ w# p& `: ^% y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 A. B; ]) o& F: x! V7 P; F7 U' A: t{
. N1 q6 s1 y4 [/ o6 C BYTE nTmp = 0;; O7 W2 O% k6 R/ S! j7 U" o
bool bDest = false,bSrc = false;
" l2 x- v5 Z1 O# ~7 B4 C for (int i=0;i<MAX_INVENTORY;i++)
" X+ t4 Q! |+ @6 z$ \ {. K& W6 M+ q1 F# b
if (dwSrcId == m_Item.dwId)- U# @6 P, i! j5 l1 y
{
* n! s3 T1 c# u: V# x //id相等 则 改变对应的dest和src1 F- {' i8 `! D+ T* j" L
nTmp = m_Item.nIndex;9 ~5 o, l8 t8 C0 U d/ F, \
m_Item.nIndex = dest;
' ]6 n! R) e: u3 W }
. P) @2 x2 h g. x5 m# \) R! H# ^& A }
& S# g D8 A J0 w; W //临时数据保存完毕,交换开始
/ L' w2 g% i" z) s G, L for (int i=0;i<MAX_INVENTORY;i++)
7 j( h! Q" R6 O! S8 e {
1 ^2 ^! \5 g q- Z6 h5 Q if (dest == m_Item.nIndex)4 b# M# @. B/ w4 \. u6 A
{1 R' h# P* ~( k
//id相等 则 改变对应的dest和src' c; h. f: u( r) r
m_Item.nIndex = nTmp;
4 p9 o+ V5 f9 O( z$ h1 g }
9 x: F+ s+ {! Y, W$ i# V3 q }
$ \1 E; w, d) T' D; x% W9 K& l}9 N8 A. V0 j- X# Y" o- k3 j
};
( o- J$ w! Y$ `: I' B-------------------------------------------------------------------------
" L* ~) ^6 N5 O* T$ l9 w: C+ ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* j4 f. r0 t" f+ X/ G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 ~9 Y8 T0 y5 H. w H紧靠其上添加:
% }+ \( w4 `) D0 M* Lif( pWndBase == &m_wndMenu )" p$ H/ G' b+ q4 B. V; R- l1 M
{" G* N0 @: m! q* D
switch( nID )
4 m( ?+ x7 P0 a; D, f0 G( M {; R6 t1 K6 X! w8 E
case 2:* |7 V4 A) F$ w; {$ l1 ^: `
{
9 i% @; l% m5 f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 n% B8 B2 l k k9 E( e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 w( j; w5 a$ }: H! ?
{, a0 G- }0 r- @7 G
break;# h' O( Y; O0 d0 I
}
! w6 v1 c5 d4 S! [, E; ~" d3 V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; E8 f+ p1 [! J" c- q5 g. _ {: ^7 M0 j6 n: i$ s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 Y. i3 ]- e$ k/ I if( !pItemElem )/ Q9 B; }8 w- L) I" I {! }7 k
continue;
$ z3 i: H0 A. K if(pItemElem->GetExtra() > 0)
1 b0 Q9 a0 P9 Z$ f; f4 w continue;
- o4 E6 c! o X: k) h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' I: j8 `$ U, _2 R0 G continue;
" A, s+ A C- z( _6 N if( g_pPlayer->IsUsing( pItemElem ) )
3 H6 x+ v9 K& ]7 e, `* Z! o! ?* e K continue;) O$ o, w$ u3 J
if( pItemElem->IsUndestructable() == TRUE )
; J: c, ~6 \2 v: r+ J {
$ X$ `1 g) J3 z1 J S2 A% ]. u& ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# M5 r2 z* }/ @# `2 P0 j
continue;
2 _( u6 g' A& r }
0 `% O, H: Z6 _& X. y" z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); u' w/ m( o& ?( v) S) Z
}/ Y7 y5 f) I* T) I/ X' b
break;+ P( e4 F: j; N
}* m( b @1 x; b( d \
case 1:& s; A9 \ {3 y. \" k: v
{
) C8 v! E+ t, _ //整理背包2 _; y0 a A# w0 C2 f: h7 k3 x
//////////////////////////////////////////////////////////////////////////
* x- y9 b1 ~8 R+ L2 Q2 V" w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 K. p& z8 \! [7 p5 o8 _1 k
//////////////////////////////////////////////////////////////////////////8 R0 ]+ A8 C- ?( P
//////////////////////////////////////////////////////////////////////////" K7 ?9 b' N) Y- X% c p
CInventorySort* pInvSort = new CInventorySort;7 n- X+ d$ G) R+ A$ P
vector <sItem> vItem;6 G1 s8 B2 W* _' e" L1 @
vItem.resize(MAX_INVENTORY);//初始化大小) i6 d- A7 Z$ j+ m
//////////////////////////////////////////////////////////////////////////
! W/ J$ u) V( d$ x //填充数据
1 ?: s7 u0 \6 y% S: _ for (int i=0;i<MAX_INVENTORY;i++)
' o0 d w( c. \' G% m {
2 w; b( C6 e+ z7 w$ O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 u* D; _$ K7 ` Y, y2 s if (!pItemElem)
7 c: U) `/ |" x# i, `) k6 P {
, V3 q h& y3 Y9 v9 | vItem.dwKind2 = 0xffffffff;
' ?" b" t' R: ~; c vItem.dwItemId = 0xffffffff;
% F& A0 `% Z* K# F9 B- F- n vItem.nIndex = i;) u1 n& ^; K8 g% T! f x- Y5 @# S' z) z
}else {
/ g! x: W& l6 R4 n1 b. q ItemProp* pProp = pItemElem->GetProp();; H. f; A( z, E# Y6 q H8 r
vItem.dwKind2 = pProp->dwItemKind2;0 f, b! y4 d# i m
vItem.dwItemId = pItemElem->m_dwItemId;) M5 h. |1 v* U/ l9 ?
vItem.nIndex = i;7 s$ G5 G% M' B
}
+ g8 R6 E7 M- j3 X! ?- E& t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 ^9 R/ W0 }" ]! I6 D3 q/ T) b# ] }
2 z @5 G. E2 G3 C6 K& j- a$ @ /////////////////////////////////////////////////////////////////////////// a T' B. g! f' ?
sort(vItem.begin(),vItem.end());//排序2 q( l0 ^0 ^0 q2 G d4 o3 x
//////////////////////////////////////////////////////////////////////////2 C1 t$ Q) o+ j; J* k3 Z
//交换
$ ]# i# A; Z/ |% X1 |9 ~ for (size_t i=0;i<vItem.size();i++)9 c) K% M+ E/ g: c
{% E. U/ x% i, D# k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 c# q. [+ }0 _% I pInvSort->Add(vItem.nIndex);: o+ z6 i; b& k; L
}4 C; n$ j0 H& j( Q
BYTE nDestPos = 0;
' C' i* V5 U# Z" H/ z, z# D1 ` for (int i=0;i<MAX_INVENTORY;i++)
5 ^$ G2 ?5 u) ~( @( e6 \ y {
! c* z/ U5 L% U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 `; P$ D5 ?+ w m, x if (pItemElem)
; y5 ]' A9 ?+ l7 ^ {
* I, @+ T9 s8 h/ d: Z6 m2 ? if (IsUsingItem(pItemElem))4 y3 D3 ~" ]% e4 ~; m
{' o' ~( ^8 D9 H* {$ g
//这个位置无法放
0 D' p( @* [ F& D nDestPos++;
& U) m) ~9 t4 c& l# C. } }/ y) Q# E$ z9 F: f! t# a! j# F
}: z1 a- |8 [ S4 _' r1 r- V+ }# J' E; r
BYTE nSrc = pInvSort->GetItemSrc(i);$ _0 \" Q- L" U6 L! v" f3 e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% T2 e; ]9 |8 U; o7 I- Z1 O if (pItemElem)1 R! x2 X8 ^: h+ P3 x. w$ C
{
, ?. d# A* P. F if (IsUsingItem(pItemElem))
/ @. Z' R% }" N; \" N {0 n5 A7 F# h" a& i
//这个道具无法移动,跳过
, z+ e3 C6 w1 N5 W/ m continue;
/ e3 @3 p4 z7 W. @* {* M }: o$ A: k4 }9 k' h1 a! ]
}else{
* e2 v2 p( C' j7 b0 Z. Q& L$ `. i //空位置 不用动; j! L/ `0 S9 [
continue;( y0 R, e' e- ~5 I& z4 M. ?
}
, P2 n/ I+ a7 ?: Z: t ////////////////////////////////////////////////////////////////////////// O+ d! Z2 {' Y
//开始移动6 \8 X a. i; L! w
if (nSrc == nDestPos)
( X4 }! o) L Y+ @ {. Y% B; ~8 [" [, L, C
//原地不动 a$ J7 ]8 Y/ M% u0 z: z9 A
nDestPos++;, f! ~9 E8 x6 k6 S$ ]4 b, K' b+ J# A
continue;: m9 P4 ^2 A2 D/ c0 S* n& p
}
# C/ P/ y, W' I/ a pInvSort->MoveItem(i,nDestPos); o# e( @' c* B7 U( ^4 i3 Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 D) g D( }5 d- f& O! j6 P Sleep(5);+ y7 _. p6 {! N+ V2 d! ?
//Error("移动 - %d->%d",nSrc,nDestPos);
3 V) G& l2 `0 C6 k) A nDestPos++;- R' X, S; W7 C% z- J& D( T# ?
}
/ ]7 ^: G g8 b: T //取第一个元素的信息( p( J. @2 Y) {9 s( @
/*- Z7 V5 s# Q( n7 h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( l$ B. X5 F, N' U {
& h7 Q! G1 ~9 w' J, P& N! M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 C1 n) e* J2 @5 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
~" ?: s; @2 U( e. H }4 ?4 @: w; r( P- z
*/* d9 B1 }% Y1 D- D+ j8 l% B/ B) w
//////////////////////////////////////////////////////////////////////////7 E8 c F; s* Y U/ d4 Y
break; f9 n' N! f( v* b! j0 V
}$ m8 d# `8 k6 r: L S
} : v; |" w2 K/ b! X6 w4 B
}
+ b. L6 R+ O4 |% b1 _3 wm_wndMenu.SetVisible(FALSE);
6 C# {* V |( i8 w1 n( H2 i' x- K1 Y; O) {: ?8 @9 h
--------------------------------------------------------------------------------------------------------( n* \% s# L2 w* T$ C, q$ E+ g& z2 Z9 c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ q" o1 C* |0 ]0 [# K3 q{
" R0 Z8 V# B+ {2 n3 Z& y7 @BaseMouseCursor();
8 t' f W) D8 \ |7 y}; K5 T+ Y1 X. v- X+ a. u0 k, e
在其下添加:
+ E) w( a3 u( ]) ?1 H, v) b% Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); r& @5 _3 S$ O/ e) [
{
+ }, C" K% D! \4 U# C" Q0 H9 dm_wndMenu.DeleteAllMenu();
- Q8 \7 u8 K! R ~1 F5 sm_wndMenu.CreateMenu(this);
8 x2 U5 J3 A0 e/ v' M. Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- N4 E! ?$ m/ q8 ]# o. C
' @/ l( t2 q) A( y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% X2 f9 r# @3 R{
7 J) Q' Q. L- H' p) ]0 j //P以上级别才可以删除所有道具3 P% C/ b F3 K$ {* C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( n! D! V5 Z/ R5 l; N5 d7 {}
" V" a' X. v6 a# ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 ?2 G, _. g+ o6 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 n% @! H) v4 O: ]+ M- ^m_wndMenu.SetFocus();
/ t: |& f- X) {$ f0 p}
3 M' e& d8 H0 k( A' W- S% F------------------------------------------------------------------------------------------------------------
; X( I$ W2 C; n*************************5 Y) e1 s" } `3 k6 r o, Y" x" V1 |
WndField.h文件
' F* S0 [1 J, `1 p*************************' x- j% L( \) e: ?
搜索:BOOL m_bReport;
! z. J; n `) j$ ^% e' H& O+ A其后添加:
, T( H0 L# D/ D" V: RCWndMenu m_wndMenu;
' Q7 |' t' |6 _4 G3 H( p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 x8 h8 |5 D8 I其后添加:8 J+ p. ^9 v: S
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- C6 `, |% E1 D5 Y
% F2 ?* ^8 H/ {: X2 J& G6 O5 {9 o8 m% L' H Y: _8 [0 E$ h
|
|