|
|
源文件中_Interface文件夹下WndField.cpp文件
6 ~4 O' \8 Y' e4 P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: k8 U. \: ]4 D* ]) t/ y1 i3 A+ k9 ?. l" K
struct sItem+ y7 D- m# F3 a* F" O4 O
{
; d# Z3 M7 K6 c4 C2 QDWORD dwId;
) l& \" v: v- J# A+ D4 zDWORD dwKind2;
/ p4 X1 u& O$ b( t9 l. G. g' c$ BDWORD dwItemId;
2 z: C6 h k+ O0 o) B: P. K JBYTE nIndex;! y) C; S p" d8 z! [
sItem(){
: D5 F5 v$ |, g- V: ~, P9 l dwId = dwKind2 = dwItemId = nIndex = 0;7 C. C& W' c. X0 g
}
8 G, I# k) v, Nbool operator < (const sItem p2)
$ q0 k" p I5 N Y. x{: E, ~- ~; F B |& a8 `
if (dwKind2 == p2.dwKind2)5 Z% Y+ k% H& V4 f8 \& F
{3 C* C9 \. {" s6 n. J
return dwItemId < p2.dwItemId;0 F I1 N# S: |5 ?$ z& A
}else{
" s0 A1 L/ e- n' k4 _8 X- a7 ` return dwKind2 < p2.dwKind2;
3 b9 d0 d5 E" c }
e( a4 n: e# k# Y+ y}
1 h `8 e# t, Y9 R* u6 k7 m};
: Z! Y& c+ U9 Y1 y! ?7 aclass CInventorySort
. E. V8 B4 ?5 T, s* V) V0 i5 l( z{ l7 J S1 Q$ x( ~% |4 ~5 m# v
public:
$ x5 L; |4 K5 h( H; r. k0 UCInventorySort()
. [1 F. M3 O6 x{
" j" M4 f; j! G& G# [6 k m_dwPos = 0;
# j/ [& Z* r3 ?* G1 P' ~' A% J} ?: ]7 \& b7 v& ~" L
~CInventorySort(){}
: g4 o- E* |+ Sprivate:
- [, u7 {3 A* N- T! D c$ isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 M3 N# ?9 U) `' {: ?
DWORD m_dwPos;
3 j& h: K9 w0 e( Hpublic:8 `$ K% F" Y: |
void Add(BYTE nIndex)
- h2 k9 Y) v$ i b) d1 T% K{) \; b& C% N" g: C- `
if (m_dwPos >= MAX_INVENTORY); Z3 S1 L0 M. l9 U: D
{
1 w: N/ U2 _! s return;
# A! a: v3 M o1 x* T }
* l& H6 r3 v" o1 i; G4 ^. M- f! S m_Item[m_dwPos].nIndex = nIndex;2 K; Y5 L* P. \* [: F
m_Item[m_dwPos].dwId = m_dwPos;0 E8 R6 ?' ~* t# i$ I. y) N1 W
m_dwPos++;0 R' `: k( A, c
}( F: K4 X: k. W7 w0 _, a ]1 N% U/ E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 f' H5 G1 O/ l: |# X/ ]
{
2 u' f# o; e& W! Q6 \ for (int i=0;i<MAX_INVENTORY;i++)
' y. [# t* l2 ?3 T {
. U) P0 g* _1 I" {8 R# q if (m_Item.dwId == dwId)
& p8 w2 e- @: ^* I$ ^( v% f# q {1 B* g! F) r' G
return m_Item.nIndex;; ` ]. V+ W& m
}% }3 Z' I. \1 r% p2 U4 Y! z
}
8 y% x7 M) r0 d" E+ L! h1 z return 255;
x. t/ s: `5 P1 W1 B( t' W8 S, ]}$ ?' w0 U4 [9 f( p. J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! `! p2 G b' P' `/ |
{
$ f! W6 ~$ j3 G6 B( P6 o BYTE nTmp = 0;# A) g: ^9 B; e" M( W
bool bDest = false,bSrc = false;
" z& u; h9 y# k: B0 O5 x for (int i=0;i<MAX_INVENTORY;i++)
" g6 I! r+ X: F$ o, G: r {4 u D( W9 X, U3 |7 n
if (dwSrcId == m_Item.dwId)+ B$ p, J7 N: b
{: r" S# _% X0 b: a- u3 H* h
//id相等 则 改变对应的dest和src6 x \6 o3 j( I: o' c& [" z9 o+ N
nTmp = m_Item.nIndex;
) y6 \7 P: W9 {) h; z4 W5 W m_Item.nIndex = dest;
6 W4 M% o: q0 j7 s/ } }
( f/ h4 j5 c W- J; L& S }
/ ]& x6 T# Z$ {- L //临时数据保存完毕,交换开始* D; P- x* T, f% }
for (int i=0;i<MAX_INVENTORY;i++)
1 r- z' H* E2 F, X8 d/ L8 F0 X; i {
" `4 J/ e; t2 |# r1 j; `" | if (dest == m_Item.nIndex)* n2 g. F4 j# w2 L# f: }! V
{. V3 Y! D" W# D
//id相等 则 改变对应的dest和src g2 M4 \6 ?+ J+ ` j6 ^
m_Item.nIndex = nTmp;
) N6 p' X& G- _: r( a }4 c* ^& \! W0 O& e& i& V
}
( Q! v* q2 c2 H4 k( ]}& p ~! N) E9 `: R6 g0 z' y
};* W9 w& Z" X% @; b& o- [% h' O2 @2 U
-------------------------------------------------------------------------7 C% P8 {7 W, U: w5 b$ F5 t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! Y3 k* T3 |3 q' t6 @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& [- f" V! H' n
紧靠其上添加:
$ z$ z8 D0 y, o3 lif( pWndBase == &m_wndMenu )
( P, o7 x) p6 H6 F{5 u) c' I" v6 E/ n2 a
switch( nID )
* ^6 R3 n+ R* ^5 Y {
' i7 e- \0 R# n5 A) ~ case 2:
2 f( c6 Y! D' j8 |' B% W; H9 p {
4 @ D+ z1 q. w# L9 i //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ g" V1 `! m- H- t) S+ I/ m, D% p. U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), m+ {6 S5 w/ Q! {1 [( y% p7 y
{
G" q. ]7 x& x" T# _# e& L break;
1 U- o* P( c2 }- d( O! H }4 h6 Q' A9 f4 G3 ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 a. }' s) X5 K! m* { {
* u8 [( m8 R. D5 l: n1 b0 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 R' k8 C& T1 l, ~# K1 G1 u if( !pItemElem )
/ X) n' u" a, n {# q. n3 B continue;
3 \! y6 l5 |( i, v' x if(pItemElem->GetExtra() > 0)) B" h$ U. E. Q, {) M, _9 A
continue;
6 ~; l2 G2 T9 Y* y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; ^1 n' _- A3 d& R1 Z0 L
continue;% v8 w9 Q9 {1 |4 ~
if( g_pPlayer->IsUsing( pItemElem ) )
; k- `3 D3 d7 s/ L7 { continue;+ o! k; W& \; g, Z+ E$ X6 K% y' _6 l
if( pItemElem->IsUndestructable() == TRUE )
0 b2 a% x% p5 g) [0 K1 p, U! b; m {
, z! y! e) a; O! r1 [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* K1 U; A2 n( |5 n& J; n5 u
continue;
* F; d: z5 S$ o. P: m }# |2 D6 d3 L1 g* v J$ Q' E! \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! G; B4 Y/ ~* c4 Q
}: B+ H, _: L# k' h' e( J4 M
break;, K$ s0 Z6 Y$ p0 r- L, O
}/ F4 m0 h' f! k% ?. c' \! a
case 1:
' o R2 o7 ^: ~5 h {
- n6 N9 d1 H$ Z; _3 S7 b4 K* c- }3 U //整理背包' f; O* y& |& @0 m* k* y% A$ V
//////////////////////////////////////////////////////////////////////////
( O. W& V! `3 D$ X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); `/ e' k1 G' }' F( z6 Z7 p4 V
//////////////////////////////////////////////////////////////////////////
5 T' E1 \/ W# h$ j8 D. R3 z& l/ c //////////////////////////////////////////////////////////////////////////# V+ o& j5 y# A% g7 c2 _( e
CInventorySort* pInvSort = new CInventorySort;* {% ?; s; s( |2 U+ h
vector <sItem> vItem;
- ?! ?9 j! ?8 w1 R6 K- {( Z vItem.resize(MAX_INVENTORY);//初始化大小( `3 W, b- P( y, m$ c8 Q
//////////////////////////////////////////////////////////////////////////
6 }3 k2 K# h+ F9 t/ e. [' ]/ I" @ //填充数据+ g; s* v0 x# O0 A, L
for (int i=0;i<MAX_INVENTORY;i++)& v) ?% a6 v& p) E% E. ^4 E! J
{
/ a3 w; I6 C* @4 h" _/ D7 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 Z- ?! ~4 P& [. T8 K) G if (!pItemElem)
$ q8 j& R; e( ` C" u* g$ F {& p8 Z' C5 |" M8 D! F% l
vItem.dwKind2 = 0xffffffff;
: B6 ^8 z$ |- S8 D vItem.dwItemId = 0xffffffff;
0 W' t7 T0 ~" Z1 K2 C vItem.nIndex = i;
* M: M" ~0 p. B# } }else {
% E3 A7 }: o+ c7 z1 G ItemProp* pProp = pItemElem->GetProp();
. I1 X; d6 b& w* V4 N& P vItem.dwKind2 = pProp->dwItemKind2;0 \. t! b. M% B' v3 `
vItem.dwItemId = pItemElem->m_dwItemId;
7 T2 X0 ]) n+ r; D* m vItem.nIndex = i;
6 T1 H1 O, v0 M5 Z }
: |2 j9 r# N' P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 Y _% J& w* j6 o) ^
}
+ k2 T7 _1 M' Y- e$ l //////////////////////////////////////////////////////////////////////////6 {4 i" j: O8 U7 e8 d- Z
sort(vItem.begin(),vItem.end());//排序' @) I7 p5 X+ T$ H, w& y$ w
//////////////////////////////////////////////////////////////////////////
* p* M% g0 Y/ @9 p4 i4 k //交换( g& w8 U b2 Z* X) b
for (size_t i=0;i<vItem.size();i++)
. \6 }4 X7 y( @4 h0 t {, w$ J% V9 F. {5 p
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ U6 D2 I# c2 S, Z2 F) A
pInvSort->Add(vItem.nIndex);
' C( e$ v$ Z& s% P, x4 L) |9 u) } }
* o9 m8 O" H% E# {+ x% z8 P BYTE nDestPos = 0;9 ~% n8 I! s3 R# k
for (int i=0;i<MAX_INVENTORY;i++)
) Z9 R/ q- N% y- F8 k {
6 |9 s! A0 M( c4 m# @( t: H, J% i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 K# t4 O7 ^! P! b, c
if (pItemElem), p& M8 G+ p+ p% l7 U: v
{
9 @+ Y' J/ r. y9 x! m4 W- S if (IsUsingItem(pItemElem))
( `1 Q5 R4 R! b { h4 y( E$ g2 Z1 Q' _& U/ G9 d5 n
//这个位置无法放. ^4 G) r4 Q5 O1 q
nDestPos++;
7 G4 b% P1 ?6 a& |/ m }
- o8 @" R1 r4 @1 J: V/ Q" [' d; B! U }
/ H0 S, O( ?6 o* P6 h. b/ u BYTE nSrc = pInvSort->GetItemSrc(i);- }5 r$ X1 J) ?& Q2 }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
m: Z( c2 G1 p5 C6 C) Z. B) E0 U if (pItemElem)+ Z: |+ S, |* I# t5 ~ ^% ^ E
{8 F8 I- k) H" V; \ G$ i
if (IsUsingItem(pItemElem)): @! R z; u0 ~. V3 N
{
9 y6 _: w- A) j1 w //这个道具无法移动,跳过1 _% [# l1 d9 _8 M* _6 Q6 F- O
continue;$ `4 U# _9 ~, c$ n1 v9 G0 L
}9 a( C* Z0 |; \8 r
}else{
* D2 ^, J7 L. S% D4 I7 I. }3 Y& O //空位置 不用动 ^5 J. H% P, h. `2 ~, B, y* n
continue;
1 P- S# L7 R" z. I" p+ E2 m }
7 ~& t5 F! F( f- B. f m8 V( E- l //////////////////////////////////////////////////////////////////////////
: @9 d. Z9 [. n) l U! ]1 M //开始移动
4 A# w9 J6 H7 ]# s: E( e: | if (nSrc == nDestPos)/ V! i; e& f- M) \% I0 F* z
{$ y( O1 A* B* q4 X
//原地不动
) _" Q) y% H5 W6 X, z6 X" D nDestPos++;
9 k9 N; [* a/ H! G continue;3 V% P4 Y1 G( G
}
/ {* i, J5 F; z, o, `- y# M pInvSort->MoveItem(i,nDestPos);7 `3 O) y" k8 J, T# v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);' i& V6 P7 O8 @
Sleep(5);
+ h' ]. L$ \' a7 @; r //Error("移动 - %d->%d",nSrc,nDestPos);( C1 A" ^; x& j4 \6 W
nDestPos++;, O3 ]& D0 \! n0 b# ~2 I" r
}
0 X! b5 W: W' P6 o$ p1 x //取第一个元素的信息- e5 [6 Z; ~( [
/*' V, e" U% u) X% a, ^( l. u* d
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 o8 O. f0 \% A1 i2 N
{# i, Y- ]. d! i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( p$ U9 D+ P& f$ O) d+ q. D
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 z) P) @+ J4 D
}
, A) R* u, y K7 g5 A2 K1 u B+ r2 z */6 `8 b! `5 A( \/ D
//////////////////////////////////////////////////////////////////////////; B6 ?, ?0 ~3 x9 {4 r+ |
break;
) x- d! M h5 I' g' E! H8 }+ s1 b" } }
+ N2 t1 D T9 ?" a }
6 k/ S# ~8 _& |, ?: a5 S% B1 [, k}$ c- Y7 t# l- n# Q
m_wndMenu.SetVisible(FALSE);
1 S* Q; C. s( x0 U
/ @5 v5 d- m5 b--------------------------------------------------------------------------------------------------------
' K, M. s2 R* F. ]( m, o1 `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 B/ V, O x+ ]4 L, F# d! k! \1 ^
{
* l) }6 l0 H2 f# m9 DBaseMouseCursor();
4 ^% [" u9 e! `7 v; H}. p* A8 W2 m: ^
在其下添加:: y, i/ |9 R* i8 V) W1 _$ h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ O" W) O: ^$ O" L8 p/ \% [
{
! z; T' |; _* nm_wndMenu.DeleteAllMenu();
% x8 a9 n! o4 w8 tm_wndMenu.CreateMenu(this);
/ Z5 m( f3 W0 y6 p1 s/ ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 I, t. n) O8 r" f: j0 [
2 H4 d1 `! p9 w+ u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* D1 Y7 n/ y4 O0 n
{, u+ @' |# ]' ~( {7 y; J
//P以上级别才可以删除所有道具
! y0 b/ i, `' ` v9 T! Y* l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 a+ R* }( {* C}$ {1 c* A" w) T6 H. `9 o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
Q4 g& X0 z s/ x+ _; `+ O% h5 f" Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 J; P; q/ b: L. n+ @% ^9 H% g8 Zm_wndMenu.SetFocus();
8 T2 y: [0 g6 w; N. T$ e}( I2 |$ S! T& Z$ W" d# r" a, x
------------------------------------------------------------------------------------------------------------
% A; j4 C( ?( T- I$ A+ Y; ^*************************4 _& a3 f+ m' m0 U
WndField.h文件
( v) L" `3 _+ m3 [# P*************************( c% f2 L6 G+ U: p
搜索:BOOL m_bReport;
8 w! [) A! ~: \, O其后添加:
$ g% l/ y6 n3 \9 MCWndMenu m_wndMenu;1 ~. R1 Q9 b1 H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- t1 m7 i; c3 d/ T, F其后添加:, {$ V5 y s4 L) q2 O/ C9 z8 @
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 R$ I# t5 b+ Z& |" u- l/ _5 J. j1 Y0 X& I+ d# b6 @; o2 D
7 q7 {, w$ A9 ]# R. {/ C |
|