|
|
源文件中_Interface文件夹下WndField.cpp文件8 u8 G& A6 E* x4 R" I- x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 n- c: r* @9 Y( B( D1 k3 V4 {( c1 o9 d6 z0 o# {
struct sItem
" @1 f+ @( r/ D+ g6 f6 X( Q' v{1 G3 O9 C s, [8 ]8 M
DWORD dwId;3 E) h( U& p: U/ N& F+ l( W
DWORD dwKind2;
6 g* k! M9 z) u# Y* ~- Y, S# EDWORD dwItemId;
& b* b+ h- V! T) l5 K* tBYTE nIndex;1 Q! n1 d0 T8 ^& b: a. M9 O
sItem(){
4 R; h# T* q9 d, w/ ^4 Z% v dwId = dwKind2 = dwItemId = nIndex = 0;- \; s1 ?9 J. j7 y" ~2 t
}
1 F$ b- x2 p- o* F3 `, s& X) rbool operator < (const sItem p2); Q& K I" v6 q; ]! G
{2 q# k5 V- ?' e/ Z S
if (dwKind2 == p2.dwKind2)9 N3 ~; a! D5 U3 l; ^7 V5 Q$ v
{
9 o- c* x9 _. z/ e) y5 d return dwItemId < p2.dwItemId;
( n/ ~" h0 v# V3 k1 P }else{
4 j5 G/ Q7 M0 M) g" x& F- R return dwKind2 < p2.dwKind2;1 I* A3 X& p0 ^ ^/ w% ~
}7 {' J1 y6 P3 ?4 ?% u7 b
}- D ]8 ~. A. r# q* ^
};
: c. A/ V5 y/ p& ?$ t1 C) M. q" S: Iclass CInventorySort
3 u! r/ ?% Q; i- G$ E* [3 l9 r{+ X% Y9 l; s# c; F; d
public:
1 M% t. H. [# [' u( |# ]CInventorySort()
/ c" J7 b8 v# F2 a0 [{
3 {4 W! Q0 C/ p& F+ X2 @ m_dwPos = 0;
) U) _- I- d* s}
9 b/ y9 L! D }6 G~CInventorySort(){}: c4 t# t% y. U& y6 w; _/ p# d- l
private:
% N6 Z* N0 ?5 d/ H8 _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 S B$ o8 g A9 }& N/ k! sDWORD m_dwPos;
$ \. K' X7 x3 vpublic:3 _$ u6 o, \8 x9 D2 e1 ^5 n) ~
void Add(BYTE nIndex)/ v) L& L$ m" S2 m+ \6 j
{
1 P. T' k3 P0 f6 A& S if (m_dwPos >= MAX_INVENTORY)
1 _! R4 ^1 S: I! \ n# Z. }" O/ l {+ J2 e* m! r+ }/ [+ g8 X
return;* x" U6 ~+ n+ \$ T
}
* O" N6 T) S1 m8 v m_Item[m_dwPos].nIndex = nIndex;3 M9 [% T% @7 o2 K& S! F
m_Item[m_dwPos].dwId = m_dwPos;/ _# h* k' g# f! R+ a& r
m_dwPos++;/ H+ {* Q9 H/ g& }. y
}
& C+ d5 d( V& BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* G" t' E3 K0 j, j% B1 m, m% M{) @/ t# p- L) f0 { I
for (int i=0;i<MAX_INVENTORY;i++)) w- i. v* X. t
{
- \) G" e- A& m" I( Y if (m_Item.dwId == dwId)
5 U3 q0 j7 | e0 n+ E; l {7 _+ W2 X( H6 P+ u
return m_Item.nIndex;
! g! X q8 K# v9 b }5 ]4 b% h2 m, f1 @, M
}
# I/ K: o! u' b8 ^& o return 255;
* P8 M6 N! d4 s! H( Y}9 A' R, C- f E4 z: o4 @( ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, ^; F5 a0 l* |' E& G{, w W$ C! s& H' V! Z) @
BYTE nTmp = 0;- c9 g% `9 A! i. L3 N' ?
bool bDest = false,bSrc = false;. f, M# w; E" c$ T: e
for (int i=0;i<MAX_INVENTORY;i++)
+ J3 h1 b% z' ] {0 k% X. r( Z2 z
if (dwSrcId == m_Item.dwId)! G4 ^$ ~) O$ L- V, _8 Y' w2 [
{
) h. F, h' H9 \; b; l7 o( a1 W( l //id相等 则 改变对应的dest和src* [' T& V1 |" N2 P% k j
nTmp = m_Item.nIndex;. o2 c7 ?8 t& J: Y
m_Item.nIndex = dest;
" H7 I) R7 K3 z( Z1 `/ T }, x& D3 B8 Z. R8 `& r8 ?7 ]
}
d, Q& F; u" x; w" p& L: m //临时数据保存完毕,交换开始
) }1 H! C3 i/ U' o for (int i=0;i<MAX_INVENTORY;i++)9 U r# q( l/ V. m7 {) X0 V' H$ k. X
{8 H1 t$ \' M6 J- h
if (dest == m_Item.nIndex)) u9 C9 O: Y! K7 C: E- j: X
{
; |: l3 w3 ^7 v0 n, L8 C0 [. _ //id相等 则 改变对应的dest和src
0 r5 \) h# x+ c P m_Item.nIndex = nTmp;
) X" s; x. h3 \ }
! @! M8 K+ P& y6 ^5 c( ? }
7 ~8 v: h0 A, D& U}
! v2 J% ~- C% ?. D1 G};! Z. x) M$ R1 V M9 |" D+ H
-------------------------------------------------------------------------
2 m' f# |* y5 Z- s: G* i* m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ F C' f; W! }) Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; T& l: i W- B! k紧靠其上添加:" a' z: V O' q
if( pWndBase == &m_wndMenu )
+ N& Q. _, ]+ Z8 Z. V+ ]{% M( b& O0 l" k. }
switch( nID ). m; a/ [1 x* D/ \5 w
{* E% S& ?; h8 I/ P" d* L
case 2:8 H: d/ a+ i/ p1 y6 F
{
3 y% V$ k+ l( @8 T3 i. E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 w3 A( {* g% W% L9 E' |7 i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; z3 Y! t8 A y. f* x6 A+ L0 N* S {
3 l) d' I9 `" z" N break;
! G Y& P& g4 v( o' Z( X }9 Y" t2 z! {% a$ G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: \8 i4 O6 N. \ J" u/ J {. y0 o) \+ L" ?; O0 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) M+ {) D% \* a/ e5 r6 A
if( !pItemElem )% K% y2 r* H; P4 f2 t6 o8 H
continue;
" [2 c( ?7 l1 ~; q( q# T/ { if(pItemElem->GetExtra() > 0)' q' D3 c1 P2 G
continue;
' _2 n8 ]9 U; J3 c! ]0 e* e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # G8 d2 X3 M$ `
continue;
' k, K4 O* O# |" k1 A if( g_pPlayer->IsUsing( pItemElem ) )
, e* i1 z6 ]) A p) s$ r8 | continue;
: x9 N6 ~2 B. Y" h# h/ n if( pItemElem->IsUndestructable() == TRUE )3 d% P& k8 |7 H7 Z. P
{
1 Q. j+ X3 l- r& I, {) T) T% F: Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* d1 l3 g2 w2 d, } continue;. y/ y" k" G1 Y" T* r
}
% ?, o+ y- W$ F6 C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
H0 f9 R% Z R6 f }
5 ^3 T; a/ x# g% h! @. u! B& ^ break;, ~) z) O) [2 s0 Y$ y
}& r* e) V9 c* Z5 ]; _1 I! D
case 1:! v- s+ `/ |6 n _
{
9 v% I: d. C) z5 k7 i2 _ //整理背包# H2 a8 m# P1 ]* |. K& b
//////////////////////////////////////////////////////////////////////////: o; F9 w% ]# S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* \" x# ^9 E% X7 G //////////////////////////////////////////////////////////////////////////9 d: {( f) }# d/ C, m7 c. r. N% d
////////////////////////////////////////////////////////////////////////// Q3 t- a+ z; |, S
CInventorySort* pInvSort = new CInventorySort;6 W+ U# U1 [# `5 E! {0 K R. V
vector <sItem> vItem;- k. s. ]4 |5 v: w$ A' b& i
vItem.resize(MAX_INVENTORY);//初始化大小- x* H+ h9 W; o% S: o
//////////////////////////////////////////////////////////////////////////* f n' M! p# j# K" ?5 M. E
//填充数据
* O' A$ r& Y. n5 b for (int i=0;i<MAX_INVENTORY;i++)
8 u) V1 U) C9 c# ? {
+ I2 Q' }4 _# G6 g7 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 F$ r" p3 n" P% |, l. M- g
if (!pItemElem)" O1 q2 R6 p- H: r* [8 h- d% n
{0 H( C0 ~, z( A9 T, N) ~% O- {
vItem.dwKind2 = 0xffffffff;
7 B' s8 G' i. f9 l) [ vItem.dwItemId = 0xffffffff;
2 J& N; s" D- H- f3 o: s" X vItem.nIndex = i;
: N$ x: ?& J/ b' u }else {
: a' h& \ W) Y( O2 |7 u ItemProp* pProp = pItemElem->GetProp();
2 d3 I% P# o& a4 C' l+ v vItem.dwKind2 = pProp->dwItemKind2;+ n, g/ c N; O+ E
vItem.dwItemId = pItemElem->m_dwItemId;
9 E$ H+ S8 _% _0 I7 Y5 M! W vItem.nIndex = i;$ G5 p9 ]0 A- ~3 U/ c1 z: X3 c
} o7 F+ m* Y: i" `# D Z/ r, L7 n
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 R1 F- U2 @' y2 V& j1 G0 Q
}
1 v5 A9 P/ v# }5 y6 o* Z/ q //////////////////////////////////////////////////////////////////////////" @2 K+ b4 S0 ?2 h8 ^7 _
sort(vItem.begin(),vItem.end());//排序7 ~" c( k1 z* f# u- \0 V
//////////////////////////////////////////////////////////////////////////( [+ `5 { P* s7 u3 Z ~
//交换
8 x, A b: c4 h! s# P( |7 g for (size_t i=0;i<vItem.size();i++)
6 t& g/ H! @' z/ f2 E- o3 [ {
* t4 y8 r- x+ F7 `* d2 t2 s+ N7 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 Z+ S: L, b- T, h pInvSort->Add(vItem.nIndex);
, C+ r6 P% l+ |) n l3 \* K6 H4 k( n }4 n0 X% O0 X* B" T" m! e) Z1 C
BYTE nDestPos = 0;9 M; @ A4 n& c+ @, ]
for (int i=0;i<MAX_INVENTORY;i++)
; Z* A( u. {) b) B+ Y. c4 W {
# c) j/ w" y! ? w5 }* i0 \: p7 [& z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, u: M/ `7 M$ f" M" {
if (pItemElem)
3 |- j0 N. F# d( s. \2 l. t' U {
+ B& x* g% \- E( c1 L; s; c if (IsUsingItem(pItemElem))
$ _9 ^. H* @. M" X5 @ {
$ F) e5 Z# S) ]8 F3 G //这个位置无法放2 x" `: C. O% N& W8 B3 V' \( H
nDestPos++;
' ~: g$ e" h- o2 V8 \5 Z }# V; G$ q$ a/ v5 v+ N, P
}
/ c6 a) {( d' I1 }; j BYTE nSrc = pInvSort->GetItemSrc(i);
% }/ M. G! t. C0 Y0 z% Q6 [ i/ T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 Q, ~. M! j6 r
if (pItemElem)' y1 K/ { {& m7 l' g, f1 z+ W( ^
{2 R6 J; A& G2 w# o( j; z
if (IsUsingItem(pItemElem))+ f: Z: m) N/ M1 D# {. N) W/ j5 n
{' w2 R: p+ k5 s6 n
//这个道具无法移动,跳过
) {5 ?, s! H& P* q continue;
0 _5 W3 V5 f) o& A }
- i) S* Y7 w) A6 \% l8 i }else{# S7 ~) ?) n, L; \$ q
//空位置 不用动
0 f$ H0 h+ G7 x- G& L; V) N continue;
, j3 H( L4 E2 U% }6 \+ s } W. O: Q5 v, D. ~) c
//////////////////////////////////////////////////////////////////////////' C! a2 F* k& O& Q
//开始移动1 @; h! V1 i+ e7 d. B5 \* V9 f
if (nSrc == nDestPos)
4 c) y3 B6 T: |! A) x {
4 G. h8 _0 c* f% e! [+ L" e4 F //原地不动
5 q. K8 {) P+ q& i' }2 L( g nDestPos++;4 Q% E" `) Y# M& J R* J, M
continue;
4 k2 B! A5 y. ~% s6 @+ _* u2 k; i }6 `" O, S; R& \( K$ h
pInvSort->MoveItem(i,nDestPos);
% }* L+ ~& W4 c+ G" O g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ n- a+ G$ W( Y& ~( d
Sleep(5);
; \; f: x7 N) y, ?& q //Error("移动 - %d->%d",nSrc,nDestPos);
$ v+ `* I4 q: i$ [6 i5 S nDestPos++;
) h4 i! ?* I0 q4 d. l, b6 V2 r4 _ }& p7 e' }' f& y6 B* r
//取第一个元素的信息
/ d# o0 X( S9 J- g7 r /*- g4 t/ I h& X- }( c/ @5 R# [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) n* }" ]! W9 b( ]9 Y
{" D, G0 [0 M6 d. `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; Y) U* E8 k% U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( C9 [! a/ ?7 Q, m: \
}& j, x) W* B& o! D) f) t
*/4 G$ _! R8 `* G4 u* e7 h5 r+ Q
//////////////////////////////////////////////////////////////////////////. J' g( M0 o( G0 e, [
break;
7 E0 l0 o- [5 N4 f" v }* D- H' ^% b% h- ~6 k% D% U- p
} 2 D F6 Z! g5 i$ L
}
( X1 S+ `" w1 I7 M9 P) Dm_wndMenu.SetVisible(FALSE);
- W1 u4 z, f: |- m ?8 v) b5 H; V6 v5 j
--------------------------------------------------------------------------------------------------------9 Q) d- ?1 I! H. c5 x! X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 ~' j- C1 N7 J; }3 k{
7 c4 m3 @+ U+ D5 HBaseMouseCursor();
3 V$ H9 M* i5 k& e4 i5 e( E}
& B: C( ~, c: y4 r9 ]6 I: Y在其下添加:
9 k5 B+ A$ \. {9 I4 o( ~9 Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% d! m, ~+ L9 Y) `9 J$ G$ S
{1 e: Z+ k! \& a. U$ r2 I3 @
m_wndMenu.DeleteAllMenu();& K9 @* t5 `4 w# q2 i: q
m_wndMenu.CreateMenu(this);
7 b$ k3 B' H& f) Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- u. ~5 O3 e/ ^) }& s
% G/ I, a. ~3 `. [" g) M+ L7 t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 p# ]8 I* F4 B' ?{5 }6 Y( T7 v2 \
//P以上级别才可以删除所有道具2 R! H, w; Q; i- k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; }- c6 m% I+ i- B- R5 V+ t2 \7 E}
) d0 I8 |4 o9 B8 x2 K0 om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! r0 R: U# |" o% s d9 C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! G- s6 Q% g1 X& |8 m: }6 G
m_wndMenu.SetFocus();) g& T3 {, ] e! B1 m9 o' x
}
. T2 E ?8 r) L1 D! W5 j------------------------------------------------------------------------------------------------------------
' L8 K6 E) E7 X6 U* m8 C*************************
5 X; B- ], Q* u S0 hWndField.h文件# v- j/ }+ u4 p
*************************
8 o' X) t3 u& e$ f. A Z G R# |7 I搜索:BOOL m_bReport;( j0 J2 b9 k: { B( G B
其后添加:5 Z2 C X% a" E/ I! [0 I
CWndMenu m_wndMenu;
" l5 b: K1 K' @+ T+ h3 K7 K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: E+ y9 H. C4 ^9 R$ \/ l3 N. r
其后添加:
" f& m1 g0 n: Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* J; w. @/ g, ]: Z/ v" a0 l- j* z$ _' i0 q' {+ S: `2 h6 b1 l: }4 i
: x! d8 ?# |, L# n5 x |
|