|
|
源文件中_Interface文件夹下WndField.cpp文件
8 Z1 i h) x8 n( U S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, Z) s. f% h" N" e* `1 I& w) J- o, {+ h
struct sItem
* b" R+ S% W, g* L1 k{) X) |5 o( @+ Z: j# F. `
DWORD dwId;+ W9 R+ D B; ]( c2 ~( R! L
DWORD dwKind2;& ^, o/ \3 {9 E. ^2 z# m
DWORD dwItemId;! @* ~0 k/ J4 F
BYTE nIndex;
7 R: z' j4 [/ m% |" B" b& RsItem(){" v) V. r: f0 e( P. v M
dwId = dwKind2 = dwItemId = nIndex = 0;
3 b9 R8 ]$ ?$ }. Y1 V5 U}) L$ W7 k" V8 L
bool operator < (const sItem p2)' u& b6 i( P( c& y; J* ^+ w6 T% r
{
& Z" v8 S* V9 C/ { if (dwKind2 == p2.dwKind2)$ [8 j0 F0 T: q5 ?% X; }7 u
{; C7 K: y, p @/ b
return dwItemId < p2.dwItemId;8 ?. U5 W9 l. n! A9 K' d
}else{
. E5 A1 ~- O8 [- v- o( Z0 m return dwKind2 < p2.dwKind2;# n: P& \) a/ [1 T5 X: L, l7 M
}
* I2 }# ]! J& Y& B# r, C' m}! z2 X( {) W: \6 w/ }1 S
};
8 d2 k# n$ _# m! W) Y' r" wclass CInventorySort q' A) `% K& V/ i, I: C
{$ O5 W& Y3 ]: P: n
public:9 x* Y i+ ^8 V S
CInventorySort()1 d9 N0 }& M3 t4 F# N
{7 S. o. J) h: T4 o
m_dwPos = 0;
9 C! c* d2 C3 i& p1 u- u+ f}
) j( k7 P0 r4 m; B! ^3 [/ |9 u# F5 H~CInventorySort(){}
5 D1 E3 K6 C, V! m: g# u! Z8 |private:. ^8 h# p, U- N& D+ B b' o2 q. y5 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ f) v* J0 Q, K: f/ e0 n7 F5 `! t/ lDWORD m_dwPos;( _# n8 @) y4 B8 H
public:+ U" o! \/ ^0 V4 `/ F; L
void Add(BYTE nIndex)3 \& d# a0 \" X& N3 ]
{. M; ^% M( v0 R: d
if (m_dwPos >= MAX_INVENTORY)( C) }6 L8 `1 w4 i( c( ~" e+ E
{" _/ ~. t. L2 V; L
return;3 d, n. w, Q% h: M/ g2 Y9 X* T
}
/ D1 A" {! }! k$ I, d( A8 | m_Item[m_dwPos].nIndex = nIndex;0 e2 a6 R) E6 F. _' `0 _5 [' T$ B
m_Item[m_dwPos].dwId = m_dwPos;
; t0 l% h3 t4 W& s6 k" i# B m_dwPos++;- x0 O# \/ D; p& Y* s O7 }
}. Q" Z! Y; M$ `, M! R& |% u7 [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 T/ o# W5 n+ H/ M
{
$ C* v- T/ S5 e, O; K: i for (int i=0;i<MAX_INVENTORY;i++)
: N, \$ v1 Z' r% u n- {8 c5 m {. ^4 P k: T, Z' Z
if (m_Item.dwId == dwId)
+ z6 H6 A0 _( ]( Q& o# L1 O {
( V7 x* \& y7 x2 [& G return m_Item.nIndex;
1 I+ b* W9 b/ \- b }1 x) y% h" ^$ x3 l' r
}5 P1 v4 _& M$ p: w+ [1 C
return 255;
; @, X6 k: B8 c. j: w1 h1 c0 @}( J/ _ S2 @; f' M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 N0 s5 u" X) N2 c. B{
# g4 G2 ?$ u7 x: d+ z BYTE nTmp = 0;
# s; Z1 Y q) C; P; r5 ~: g6 R bool bDest = false,bSrc = false;
; w5 o7 I5 _3 h; L9 m# ^; D for (int i=0;i<MAX_INVENTORY;i++)% L& M! Q: p) h4 w- ?- j- k3 m! _
{
9 H5 a% n# B ]1 X* |. j2 f if (dwSrcId == m_Item.dwId)3 X. g/ D `; E8 V( c8 @
{4 m& A) G2 G: r& i1 F* d7 m
//id相等 则 改变对应的dest和src9 t6 [3 _2 r1 l4 k( |6 q, k- Y
nTmp = m_Item.nIndex;
1 r' Q' D# x4 G# D m_Item.nIndex = dest;
' B+ g; o8 l+ N% a& i' H! f% f }- O6 s6 V) X9 q' m! s& A' V
}* t5 a" g( X' a$ D& y
//临时数据保存完毕,交换开始6 s# I) o& v$ }( [. h
for (int i=0;i<MAX_INVENTORY;i++)
0 R0 Y F6 L3 P+ i5 M# X! ` {* b6 B/ d7 n. [2 a3 k" L( I, y
if (dest == m_Item.nIndex)
6 r+ }0 P; [! j. B3 d- s {3 u+ _9 ~' }6 o. U% F" Y# [: \6 Z6 K7 t
//id相等 则 改变对应的dest和src# y M3 d3 S5 D& R( ~9 v0 [1 ]
m_Item.nIndex = nTmp;
- O# V& \8 V8 V6 `0 p; i. p }3 x) h5 \6 E& O
}
- b0 W. f6 L& E% |+ u" ~}
- W4 A+ r' J4 P: ]};9 Q& `- Q d( Y) Z- o |1 k
-------------------------------------------------------------------------
( v& F3 D6 j# V9 y" u1 E& F' Y. k! N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 k4 Q( r1 i& j) @1 F搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 q. v9 l: c3 [0 c/ v
紧靠其上添加:3 b; q/ k: K7 T, u" e4 D
if( pWndBase == &m_wndMenu )
7 r5 [# H2 d, K{
5 Y) d7 T; V, a7 s switch( nID )" I% i- b3 A. Q1 [+ P
{, k7 g! _( e9 D, U3 P" _ f
case 2:
$ R- J8 K, A# P; }! P- W {' U( O9 c2 f( L# O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 z; Z2 X+ Y" N# Q3 k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 Y( ^' N* U5 l- N8 p/ _" |. \ {
7 f9 I, \0 i4 e. h, i break;+ ^+ @8 B: C+ O6 Z
}; V6 S1 q, j: F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# d$ F/ {7 d% @! W# [
{
: e9 C7 @% x9 ]1 P& x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# H# ]5 @; ?9 H k# J& ]0 \, L
if( !pItemElem )" R- `2 v" V2 G, F* B5 a
continue;6 [7 X9 M' B; g7 x' g" f6 N
if(pItemElem->GetExtra() > 0)/ o+ ^. Q* v- x5 m: e0 \. h* U3 r
continue;) z# F' h r X! |) e4 q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # X5 p3 B/ I; _# M4 I
continue;, B+ N8 g4 `9 H! z l+ c8 _
if( g_pPlayer->IsUsing( pItemElem ) )0 O, } ?( k: w/ d
continue;, n( Y' U. R, p' F$ C! k" w
if( pItemElem->IsUndestructable() == TRUE )& J7 H$ \1 V& V% g7 ~" W, x
{# G* y9 M$ A7 S6 j, J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 U' Z) B. H* }+ G
continue;
* C; f' `+ ?; m& N& J3 D* n; g }
# q z( ~+ s4 m+ s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
[8 {5 `" d0 M) f$ @0 p' m }$ N, `9 r. q1 X* M
break;7 {% p7 G: V: T/ z" I" W
}
6 Q$ v' M+ f) _ [5 v* B& F! i case 1:
6 J, l1 h. |; C3 C8 z: s' ? {/ I3 |7 ]& A4 D# A# o
//整理背包
: \8 \4 d* ^ K2 O //////////////////////////////////////////////////////////////////////////: |$ C1 U1 v7 \5 `4 k. u! }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) d/ @8 p) I9 X& S/ k( U //////////////////////////////////////////////////////////////////////////
6 [) T' s! K$ ]6 b //////////////////////////////////////////////////////////////////////////( O0 B, i0 f3 k
CInventorySort* pInvSort = new CInventorySort;6 F4 G1 F* I; v$ t# `/ R/ R
vector <sItem> vItem;6 E( l3 ^& ^" v
vItem.resize(MAX_INVENTORY);//初始化大小8 T/ w1 b0 H$ p+ a, K* t# |
//////////////////////////////////////////////////////////////////////////
" b b+ {; F& E9 ^& e8 V //填充数据2 W( E2 U, q1 }& }
for (int i=0;i<MAX_INVENTORY;i++)
Q( H5 {9 p4 q' V { m4 x& s* b. u6 e5 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ r; B' ^8 |4 t) ?* q if (!pItemElem)
* u# R: g) J- J {
9 C. U- C0 h1 S1 J- j vItem.dwKind2 = 0xffffffff;+ M3 G0 Q& W; U h0 Z' J
vItem.dwItemId = 0xffffffff;' @1 z" D0 w4 l$ ^5 p4 ^6 t
vItem.nIndex = i;4 L. F# c) { }8 ]$ B0 s
}else {
# v) U1 Y, D1 i$ C8 i ItemProp* pProp = pItemElem->GetProp();* V+ j+ ?: x B# \' A" t
vItem.dwKind2 = pProp->dwItemKind2;
7 u0 V. n/ M' v1 D vItem.dwItemId = pItemElem->m_dwItemId;( }' @; W+ d. L9 b( f
vItem.nIndex = i;
% r, y( T0 V2 r' z! P# L* s/ |$ Y }
- ?4 U3 G# |+ g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; O8 z0 V6 Z3 S/ U3 H, O }
: i& H% m/ `6 Q" P% Y: f //////////////////////////////////////////////////////////////////////////
& _* I. f! _' r# }: s& M4 \ sort(vItem.begin(),vItem.end());//排序4 ~+ N o$ }; t1 A U' N) j; ~; Q6 |
//////////////////////////////////////////////////////////////////////////
& H* }; D2 p) F* [% a$ M( [ //交换6 |- f, M! s' s+ x! Z3 ^- G2 R
for (size_t i=0;i<vItem.size();i++)
8 Q* G. `, N/ l- X$ x$ ? {
( }+ h) y5 Z I/ j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# K# }2 E) t) d: [0 I! V3 a9 d
pInvSort->Add(vItem.nIndex);
- ?7 M% I6 i0 Y2 H }
4 d& `. x" B! F& v BYTE nDestPos = 0;) b* u7 o: d! s8 D
for (int i=0;i<MAX_INVENTORY;i++)- a9 F; P6 ~6 S f. N( P, J
{! h/ ?6 K. E$ g3 ?% N) _# {7 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 F: J( [0 U2 W: Q; L/ \! ] if (pItemElem)7 Z+ U$ N4 I5 @/ s6 e
{4 R$ S. q G( w) p7 }, _' K% r
if (IsUsingItem(pItemElem))6 w3 K1 e" D8 V% R
{
N; \) H/ c* `' H* N1 V Z //这个位置无法放( U2 c. @- W5 {' X
nDestPos++;
; f$ T: Y$ Z7 z1 Y! I } `! O! E! o- r1 g1 C
}
* a1 m& g2 R( B1 ^4 o2 Z BYTE nSrc = pInvSort->GetItemSrc(i);7 H0 F( G& w! e) V/ L- R! r) X9 s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# |* ?* Y0 Q; {: E/ P! | Z# c if (pItemElem)+ V) d9 r, j5 ?
{3 U, W4 v4 Z1 R( {) j0 T
if (IsUsingItem(pItemElem))
1 ]% _: M: g/ L0 |4 M {
$ r3 H; _9 G% Y# S. Y1 j' V, I //这个道具无法移动,跳过7 W, e; |2 L4 `7 Z
continue;
( o$ b# c' E7 P) l6 `* k }) q' [4 _/ c3 Y8 u/ F; D6 c6 |
}else{
7 ^' v* |" b+ s/ w //空位置 不用动- S& Q& F3 z# g* Z1 B
continue;
: K. V' }9 K. D9 b$ s }9 p5 d, K2 V- C# ?5 B# C
//////////////////////////////////////////////////////////////////////////& L& y. ^8 h i3 }( h8 `' U
//开始移动
3 P% j( B! L# J+ I if (nSrc == nDestPos)
6 @; V5 H5 d. P' t {
3 M y% a/ e- q* x; l) s7 ] //原地不动0 i) x+ ~* r5 k, t# g6 r" `
nDestPos++;' g$ U* R! F$ s( H) n" J
continue;) a; S2 l- `4 M( J) \3 D
}
7 ]3 D' i K3 q* j pInvSort->MoveItem(i,nDestPos);
0 n" _( `5 d; J. v g_DPlay.SendMoveItem(0,nSrc,nDestPos);; R/ y5 B2 H3 i
Sleep(5);
+ L {/ D+ l6 _ //Error("移动 - %d->%d",nSrc,nDestPos);
2 F! H" F2 K5 T# I8 x nDestPos++;0 Y: l) q2 d H% x( W Z
}
4 Q/ m3 P8 o6 H, f1 H+ ^5 J/ | //取第一个元素的信息
' W& N, Z0 ~/ I1 G- ? /*
, B' M) v! I3 T4 ]1 J; g7 l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ h; k; E# X2 ^+ S4 A0 ]3 |0 v" e {
. f% x6 U7 _3 `" F Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ h' r5 S6 D0 M+ I# ]6 J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% @1 k! y% @# G9 c1 P Z& i }
* J0 c! F0 d6 ?- ?6 ?( M */$ V P' X2 }3 M3 n
//////////////////////////////////////////////////////////////////////////7 t+ x) e- E* F# t) R$ |7 Y" O9 b/ g
break;8 \# S8 s3 O- q' Q
}. q$ l$ m! b) o
} , M; O( d' S3 I" n& n' q" V! P: j
}
5 A9 |, V, e$ i L3 ^+ Om_wndMenu.SetVisible(FALSE);
' t# \" ]- f1 Z$ G# t7 ]1 f! f: i( j% g
--------------------------------------------------------------------------------------------------------
+ K4 U9 m" x5 v ^2 k& k4 R; S3 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ Z( ]: k `9 U Q{. R* x, q* L9 _% O/ u; w' ^
BaseMouseCursor();
9 A% n! B6 B4 u( a( X}
! \7 a8 @4 N/ ^+ u. k在其下添加:1 \' S4 m# r- x' f5 |0 r& R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% q& B; z" K- k; k; q{/ z, G' W$ Y- m8 z @9 c* f
m_wndMenu.DeleteAllMenu();- e. b5 m3 L8 |( j% `$ b: W* |
m_wndMenu.CreateMenu(this);; o6 D" |7 U& G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, @; L/ W: ?& \' D, i3 B
; c2 {" h( t! I% Y& w t- kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 l9 L& q' q0 u{
% ]( Y; {4 ^7 c$ B# o* k2 \ //P以上级别才可以删除所有道具
9 T( @, k! @+ D$ k! a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% Q+ g$ J- b8 T- A, s4 n
}: ~9 }8 V% X2 a3 J" `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. k* {. \( x- X T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 g+ N. b. r; d
m_wndMenu.SetFocus();
5 g! ^3 X2 Z$ d1 r1 K5 x) }0 { q* c6 x}2 H, S: q/ @; r% n2 ~" b% Q
------------------------------------------------------------------------------------------------------------9 ~! F- I$ [5 B5 @8 G+ l+ ^
*************************. \1 v: X/ l( @. u0 B* v
WndField.h文件1 }' x P! c% |6 \1 K
*************************8 j- ]/ J, `1 P/ l2 H; X t
搜索:BOOL m_bReport;
# [, f/ V1 t8 H8 i- J其后添加:
' Y% A# ^1 n2 r/ ]5 \/ V& ?CWndMenu m_wndMenu;
' J' l( c. {0 p9 w( y+ ]; F: l8 }* R" O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, x/ g t4 n$ j1 B+ ]; E
其后添加:' \+ J" [) S1 j1 f2 N1 G) H
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ K: G" C9 F y# ~& O. z) u
2 W& L% p+ }. m7 b+ `0 w6 P
9 M% ^% Q# e* E/ |5 R, K/ y |
|