|
|
源文件中_Interface文件夹下WndField.cpp文件7 e( M3 ~& y; r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 x0 y. X$ D2 e1 D( y I4 E* q
$ K, B) Z: c5 l8 u( t P
struct sItem
' ], \, k( D& T/ r{" U; d, T/ \% l$ w
DWORD dwId;
( f; p; K5 ?- E3 q) T7 S7 DDWORD dwKind2;5 u$ U& i5 I' n0 e' D% D' U
DWORD dwItemId;
/ R; q7 I! m, t& X' |BYTE nIndex;
% e0 w5 H& h, A* M8 L8 `sItem(){
, g2 e3 N+ z7 | a" Q dwId = dwKind2 = dwItemId = nIndex = 0;
- S$ M7 ^2 a! o- T! f}
5 q$ W2 y9 q% s9 d- Ubool operator < (const sItem p2)! K t, e' d, u) Y
{/ W9 c9 `5 I; w c' X, o7 }
if (dwKind2 == p2.dwKind2)' B+ `. h3 w% e# |* l
{
- S" K t9 N# ^% t' H6 C& f' B! k/ _ return dwItemId < p2.dwItemId;5 r8 L8 k3 P/ z6 t- |
}else{
1 H8 w5 U) G. k0 c1 v8 f' C" x! ? return dwKind2 < p2.dwKind2;+ v, I& p% A! ]3 ]' J5 b N$ g
}
* u" n6 f3 }) a* A. G* l1 g: n}! M4 n m, q8 W# @
};
9 a) l6 M) Y$ k* v/ J: Yclass CInventorySort3 t+ D9 l. v" R1 c
{
+ r; B1 @! P' w% }; ~2 Ypublic:* P0 r9 K9 h) @, a. t; X: P
CInventorySort()
* _+ G5 U4 D% X4 F{
5 i C$ K& Z3 }( j m_dwPos = 0;
, M$ M+ K+ [+ c$ a" P}
8 `8 ^: F5 R. g( m6 C6 M) U @~CInventorySort(){}- A4 N/ q" [9 P/ P0 N; [
private:
, Q c: J, i* x; bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" @- q4 L/ _2 Y2 k7 l% hDWORD m_dwPos;9 r5 U. J% D" N0 C
public:# F& Y" B! s# y% e. V* X9 O
void Add(BYTE nIndex)
# d0 p; G. `& D; g- D! A `{
& v% U9 Q+ @6 D9 Y! Y4 \ if (m_dwPos >= MAX_INVENTORY)( S v5 }: I, a0 n1 _
{2 H$ s8 v, q6 X; l! l
return;6 Y/ E7 d- M2 |& Y/ \: Y
}# R4 m! A, w# s1 J
m_Item[m_dwPos].nIndex = nIndex;7 z2 T6 z/ w- W0 ~6 Z% p
m_Item[m_dwPos].dwId = m_dwPos;, j6 U+ l9 H/ @6 t: m" p5 \. L. V6 ]
m_dwPos++;& ^" l4 K5 S; W' _0 F! d' \
}
, y2 K0 ^1 g8 N8 m4 f' S+ cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, X0 D3 J# N. f0 A{
$ Q0 F, x2 V, v1 O/ \ for (int i=0;i<MAX_INVENTORY;i++)
) Q# b) ~) o6 Q {
. \, r+ J) }* d1 Q4 v; |8 o if (m_Item.dwId == dwId)+ W/ O( K4 j# V; f
{. f, g, S1 f& C6 J6 r+ Q7 n
return m_Item.nIndex;
& ^6 f' w1 c6 N q }4 [0 {8 D/ J- d* u5 [
}
; S3 _; f, D q- M- _! Z4 e return 255;
. D! H5 c# a! I' H5 R8 U}
9 }0 {% t0 Z8 @! t. @" Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& u% t' p5 u1 f: d' ` S8 F) B{2 B4 u8 p9 d% B: X& ~
BYTE nTmp = 0;
, Z! M* X+ F/ `+ T" a bool bDest = false,bSrc = false;
9 [: X) m2 t+ R! a9 J4 \ for (int i=0;i<MAX_INVENTORY;i++)
- h8 h% G; H+ v9 Z* j {
! G+ i" k f5 @: S. ?5 l if (dwSrcId == m_Item.dwId)
6 x( M q9 k2 e# E$ t6 V {
7 B1 v7 ?7 D% Y5 T% m9 [& ^, X* \/ G+ ] //id相等 则 改变对应的dest和src+ U& `$ X; n& Q/ J: ? \. }
nTmp = m_Item.nIndex;6 ], N0 ^* [- b
m_Item.nIndex = dest;
4 J' r% s: q* S }
6 B0 f/ ]. H% D' q, b$ T }% Z) j0 T9 l/ `/ ^+ X$ t( d
//临时数据保存完毕,交换开始. }, p- T9 N2 g$ Y1 G+ s K, U& [
for (int i=0;i<MAX_INVENTORY;i++)
, V/ W5 |& }3 ^( C1 J2 U {2 W5 G: Y8 S, X! T P
if (dest == m_Item.nIndex)
$ x+ b' S. [ R6 k- f8 G: o {
* L: m0 l" ~- x //id相等 则 改变对应的dest和src4 m7 M( [, S" I
m_Item.nIndex = nTmp;
" B0 p7 j7 Y5 a9 j; u" j( [ }
( Z( a4 n4 G& o# [ }8 _1 M c4 l2 u& P
}' u( A" s& @/ ~) k' Y5 D
};' J' b1 q) N! C' ~- }
-------------------------------------------------------------------------( t2 e! e/ P3 P# {: ?9 Y# x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) j% T: ^& A' K" b2 s# B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) m% {( R: F4 X `+ H紧靠其上添加:& R7 U d0 S) A& M1 J$ [
if( pWndBase == &m_wndMenu )# d5 w0 \! E( L" r
{' t7 u' q/ a8 I5 ^
switch( nID )
6 Q7 O7 ^" Y' V% G {% v: }+ @9 A/ W8 H1 g8 W
case 2:
+ W5 E$ B6 l( Y; j' ^$ ^# a {+ f" d' h# A+ y: Z- o( [1 e/ O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: m7 Q; Y, H6 Q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; s: G) `1 s; k! B {
" i# ]9 n, |5 y/ N* l4 f9 a/ i break;. O$ |3 i5 R" H" q- H4 N
}
( A9 N# c$ K6 X. H# d6 L/ \# J/ T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( a7 o: U* ~- s6 |( A& E {
- {( A. _" {& S( ~' K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 I8 O$ K9 f0 `) ^0 Q
if( !pItemElem )
) T: Q. o+ ~8 h continue;6 A# s y/ D7 f
if(pItemElem->GetExtra() > 0)
1 q: _( Q/ e# w- Q, s* u( [/ _# L) c continue;
. ^( _% ]1 X3 y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' e8 }; N4 f5 c+ @
continue;7 p# M) |5 C4 ?1 k! @
if( g_pPlayer->IsUsing( pItemElem ) )7 W( k1 L# `( `' g
continue;& a2 `5 l) q7 w' {4 H- y6 I- ~
if( pItemElem->IsUndestructable() == TRUE )" n6 H5 S3 z* }
{, M4 z; w& ]; C+ G" H* ]: z% u
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" Y! R) d- ?/ B. V3 e( C- p1 S8 ?
continue;( B8 G& T' e9 c/ i$ V
}* x3 V9 D& t P0 [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 m( S/ N6 P2 h$ a( g }
: Z6 h; P/ V( a H; W6 N) n4 y break;
- L% V# f6 ^9 K2 c7 a% k }
( _9 j" |# z; V/ _! {. a case 1:0 i3 C1 B1 w2 M# j+ B/ Q
{, K) _5 ?4 J, W! P0 l
//整理背包- h' \/ D- a% T: ]; a5 [$ D
//////////////////////////////////////////////////////////////////////////
/ o( W7 K( X f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, Q3 i4 q# t& f1 \
//////////////////////////////////////////////////////////////////////////% {, z4 c* Z$ N$ n
//////////////////////////////////////////////////////////////////////////, b+ ~0 _: w" l
CInventorySort* pInvSort = new CInventorySort;9 `0 m; c, T7 d
vector <sItem> vItem;) |! Z+ A4 ~: i! G
vItem.resize(MAX_INVENTORY);//初始化大小- @0 R* ~& p N% n5 {
//////////////////////////////////////////////////////////////////////////, n. _ N- u! _9 M! {
//填充数据
# D" q8 W7 A& Z9 B2 }: c4 o" Q: t. { for (int i=0;i<MAX_INVENTORY;i++)! m2 e7 i' {3 m$ w% {0 p- N! X) M
{
; j9 s: @4 Q9 \0 O4 [1 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' n- w2 ?9 [2 o# G/ z% v; `& C5 F s
if (!pItemElem)5 U: j3 G& f% A
{: ]# Y; T; w" D, E
vItem.dwKind2 = 0xffffffff;& ]5 H% K# V# v$ ]$ ]8 E: G' l2 W% Z
vItem.dwItemId = 0xffffffff;
?9 x7 V5 ^" R* L. n- d vItem.nIndex = i;
" I/ ~; L/ M$ E9 I0 U3 U }else {; V& f2 @! q/ J/ K5 B2 \$ [$ K
ItemProp* pProp = pItemElem->GetProp();# x+ k4 J2 L F! P* Y
vItem.dwKind2 = pProp->dwItemKind2;
$ a% m \, S& \ vItem.dwItemId = pItemElem->m_dwItemId;
2 }4 y! r0 d' v) j! E" F# Z: ^6 A vItem.nIndex = i;
1 _/ D' y2 n/ n }) y9 L: s7 B+ f0 G0 @6 q ^5 u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, B7 o6 v3 I- ?+ t Y) `8 j }. E( e2 f5 B. @" o2 B( m) o) M* L; M
//////////////////////////////////////////////////////////////////////////; d0 O A6 H+ h' A& q' z4 d" U
sort(vItem.begin(),vItem.end());//排序( | u' h" V- \+ w
//////////////////////////////////////////////////////////////////////////
5 I/ h4 L5 q7 S3 m- C9 c" ~ //交换* K1 i* V" M J# [* V* T+ L
for (size_t i=0;i<vItem.size();i++)
# |) Q* p% m' _' R! U* O7 n8 f {
& ~& x. [: m* Q# Z* u% U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 m U/ Y7 w1 z# ]3 _( s
pInvSort->Add(vItem.nIndex);6 q* E: h6 [$ C) F' a! l* T) r7 e
}$ ]3 K7 w4 s$ d! _1 H7 R6 @! }
BYTE nDestPos = 0;
2 D3 `0 e# }/ f; d! }* R for (int i=0;i<MAX_INVENTORY;i++)
8 c. d8 J" B0 ~3 x( m {
4 M! G, B: c6 x4 _9 N$ A2 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
z' N, @% i3 ]6 I4 A if (pItemElem)
% m0 w/ p, y4 `- ^( V {
* v9 q8 w! H! s8 {" r T if (IsUsingItem(pItemElem))
# y4 M. O8 _! F$ s8 W; ^9 H' l {
2 P+ x% q' X" i6 b! ^! t4 b //这个位置无法放
1 d5 T9 `' Z4 l5 E# \6 H nDestPos++;; S6 n1 c `( ^7 D2 T( r9 V7 h0 v& j
}6 V+ C( I4 z9 a. A6 D
}% j. l8 b% e6 g! d7 Y( M
BYTE nSrc = pInvSort->GetItemSrc(i);
+ j- c& t& w8 N5 r$ H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" \4 ?: q0 b) H- G, G1 D. Z5 R; r1 V2 ~ if (pItemElem)
: I* K% {; I; y$ x0 D {0 ~6 y+ J/ H5 \- c
if (IsUsingItem(pItemElem))
6 d- o% X8 }* _ {
" j9 }6 q; e; W8 }! t //这个道具无法移动,跳过
: h! |/ _5 |6 x1 @* \/ W continue;
& X7 D4 {/ C% \% g. B7 e% o }! c2 P1 E) ^: _1 m
}else{
- |3 H6 x) z2 U4 D" ?1 @( T% n //空位置 不用动0 u3 Y' E4 m! ~ W# F+ k4 C
continue;5 r) @' O1 ^, ^/ c L% q. P% d
}
( d; |+ ^: c1 ?4 h/ o //////////////////////////////////////////////////////////////////////////
' P% Y k4 X3 y3 ?) n //开始移动
; d! A( T& Z8 B* z if (nSrc == nDestPos)1 c. Q" ~- a4 r' v0 o& A! {
{* a2 N# j" `5 y( j3 F
//原地不动) r7 k$ `( ^* J: S0 a( R6 H5 |! J* C
nDestPos++;
/ J, v( ]% T! B7 b" \" n continue;
0 _ J& k$ _" |" d2 P J" p- h( { }4 T1 _; e* Z) D- T8 G
pInvSort->MoveItem(i,nDestPos);
! j+ y8 ^0 h5 y6 v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! u5 f7 E' ~) V- h( k7 R Sleep(5);# H: E3 g' r7 N, g
//Error("移动 - %d->%d",nSrc,nDestPos);
2 M3 ?/ ]* G/ v1 w* i5 K1 g2 E nDestPos++;
; f5 d9 ?& r! Q1 @* i [" j }, Y8 Y+ ]3 R( X0 c
//取第一个元素的信息8 u" E4 u4 ? {$ a' f' A# L& |- p3 J
/*
; _/ E; R6 n- K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 {1 d: U+ O0 ~/ Q( c1 Y
{8 e t, M6 [7 o# v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, @7 N6 ]- S% N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 ~, L! x8 v: v( v! s# F
}" V) x9 [: K: h6 K4 B% S
*/
4 _' r! M. X n" n( g# r //////////////////////////////////////////////////////////////////////////
3 R$ s, g0 D6 ^. p0 I4 O break;$ a2 A6 G2 [# ]1 P
}
# f4 N$ s+ t( O4 D/ m } / g7 w! u4 ?, m9 K: M, m# K2 [ `
}
7 j! @+ O" n4 ~5 ]m_wndMenu.SetVisible(FALSE);
; v+ w& z9 D6 g
4 Y2 I. J) a* C--------------------------------------------------------------------------------------------------------& h: D7 q/ h: f. T- L9 Q& g0 I1 @6 r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( g) p! H5 H6 j+ s6 W$ i{
( A6 s( s0 i7 t( ?4 LBaseMouseCursor();( C! L; C. N- d0 ~: g
}
- T: G/ K7 q* G$ U F1 ?' W P在其下添加:8 [% a5 v! Y' f7 ~" K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ O. ]( ]3 \: x% y! `7 `{
) S d( u$ V% m* ]4 |m_wndMenu.DeleteAllMenu();
* V' k: V. W4 O* F9 Ym_wndMenu.CreateMenu(this);
3 d7 Z |. }. t$ N+ ~/ um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% ?1 h" u. E7 r( d/ M3 l. P# i! O6 Z5 o- L: u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' |- b q- I4 o0 F' g
{
/ o5 y) p2 f' ~6 R( l( o0 ? //P以上级别才可以删除所有道具
6 X3 G+ I! Y; q' e) A# V6 y! s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- o3 K$ b2 g9 j3 t0 }. X
}
3 n' x4 X; J4 v+ zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. N h% a6 D# V# ~! @ k0 _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 J& a8 D d& Q3 d$ D
m_wndMenu.SetFocus();
" u* v3 n9 O& v% o! A g5 Z}, v: o+ |6 A' b2 W- A8 @: J; q/ f$ _
------------------------------------------------------------------------------------------------------------
7 P; y! O* x: [. E/ J/ F K. A; w*************************
# p! s; v+ L. nWndField.h文件9 k7 b3 T/ {- l( ?
*************************
7 m" [4 y9 y( s6 V) _搜索:BOOL m_bReport;/ C0 O. ]# M7 v" w+ z7 U1 U1 x
其后添加:
" s6 x+ j/ Y" m: K aCWndMenu m_wndMenu;
* g" |0 k2 m; m" c; Z1 Q z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ ]2 j: K; X# g2 i E( s z$ j$ a其后添加:
3 {/ g% }$ M6 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
# u h g& ?5 `8 h) t- _8 X" r" m' o0 |1 Q
# K0 L, g) e0 K, I" q* X3 p5 K! @
|
|