|
|
源文件中_Interface文件夹下WndField.cpp文件
+ e2 j8 D, A7 {. P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): T7 f+ M( O% h/ K6 a: Z5 `. W8 a
* V0 d% p2 L, Z& s Pstruct sItem8 n8 r1 s3 {5 a3 q
{/ K) k$ G) {1 M" \, {
DWORD dwId;
* N2 g5 T. n9 g+ K8 dDWORD dwKind2;
) ]8 { o, O; x0 B) UDWORD dwItemId;! I/ D: T, h+ G5 m0 K8 T1 w
BYTE nIndex;
% i9 K' \5 x' g) |+ W% \- |sItem(){4 O n$ A, O, |$ E- M+ F# v
dwId = dwKind2 = dwItemId = nIndex = 0;
P5 w! @) ]& a1 d}
$ E7 `& ^, m2 _# g8 Q, x1 t, i( Sbool operator < (const sItem p2)
4 h$ a3 t4 W! \) W9 x# c6 q2 } C{( Z# A! z2 M6 C8 d* e" v \
if (dwKind2 == p2.dwKind2)
w$ R8 {3 U7 a8 B1 e {
5 W( T- r. R* r9 [ return dwItemId < p2.dwItemId;/ e" s: P) W$ b! j
}else{
. S2 Y, J q& p* r8 q- g8 i return dwKind2 < p2.dwKind2;6 R" }7 x3 `8 v% u& J
}
; N* e; X. g6 {* ?}
6 b7 g- S: V) u2 p$ X* L};
5 a5 o2 z+ _: l1 N$ i/ {4 l0 iclass CInventorySort
% v+ f( O0 p) u3 j* p{
) n* ^% V9 E: bpublic:( G" f9 A0 o- H6 o2 |- }& v3 ~, a
CInventorySort()+ Z* e' l ]; S% Q' J3 d
{3 g2 l0 G6 m) }- E1 B% ]9 r% p
m_dwPos = 0;- d# H' U) {% H$ U, Z @
}
' G/ @7 d* D( t8 K4 K~CInventorySort(){}- m$ M8 _& i/ f9 h: z9 [
private:- r g( v8 c5 e; y" t2 n% N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! ?. D+ ] T! L6 i2 |5 g8 u
DWORD m_dwPos;7 K! y7 {9 p8 X- L4 Q: ?
public:
; }5 ~; G# e- Pvoid Add(BYTE nIndex)4 e+ Q/ |+ v; m; Q! ^. b9 c* [) T
{
6 K" \3 _4 o+ X h" X ] if (m_dwPos >= MAX_INVENTORY)
* q- w6 q" ~9 n# F) { {
6 p9 V3 |/ X- r) u# t$ v) |' d3 } return;
; {4 x2 D3 k+ W% H }
6 b k" g/ \; U8 M! ?3 M5 Z m_Item[m_dwPos].nIndex = nIndex;
1 K0 ^, R7 |! Y# q Y# f m_Item[m_dwPos].dwId = m_dwPos;% e( G& ]/ u! a. s9 P% a3 C
m_dwPos++;
/ C: h' z# ]) a6 P% V4 d/ C. P! y}
7 c( e" w, a$ ?8 ^- e3 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 U! ^! Q K, M9 \{( T% [+ J: O+ N7 J( A. p; W, ?
for (int i=0;i<MAX_INVENTORY;i++)
. k/ @ m* k8 i, D$ | {+ [. }7 W5 `2 Y# ^
if (m_Item.dwId == dwId)+ l8 I4 _+ ~+ X! q" V
{' x. n# O0 ]7 j0 L
return m_Item.nIndex;% h6 c, Q% C* f" _. L" |4 n
}
/ ]+ C1 O7 j( } }
) X4 @5 u! ?9 u1 A return 255;
. O" s* ?% [ c" I}3 k+ ~& P$ n8 u& Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 O2 H7 m/ C3 p/ {# w) J
{
8 l. f, V1 o8 L! ` v; v9 O$ u" [) K BYTE nTmp = 0;! L- o4 @- c* Z" M, L
bool bDest = false,bSrc = false;
& ^. T3 \+ d8 k; @# e1 E9 O* \ for (int i=0;i<MAX_INVENTORY;i++)
; O) v, R9 m. B ]- @& @3 ` {
L& p# j/ x$ ?1 ?7 l* P if (dwSrcId == m_Item.dwId)
! T3 `, @/ \4 k( p( P {
+ {" G' I4 s7 z+ ^ //id相等 则 改变对应的dest和src
* W( J& |' Y1 r nTmp = m_Item.nIndex;! y5 h% t' j# j- I& ^$ v2 a
m_Item.nIndex = dest;
- i6 K+ x! z4 w! Y- B8 ? H$ [ }7 m8 l" ]; ?. [+ {) T2 l
}
( }. y6 }3 }3 Z2 B l: M //临时数据保存完毕,交换开始
1 H( T6 n; n% n, T for (int i=0;i<MAX_INVENTORY;i++)
+ ]4 p" e% J: h/ d, R {
# D5 v8 M' D9 z if (dest == m_Item.nIndex)
2 c1 D$ a0 M6 @0 \$ }% G: j {" L- y3 {" e* s' ]+ p `6 R- f# s
//id相等 则 改变对应的dest和src, }! k3 Q7 N* `9 M0 g
m_Item.nIndex = nTmp;
( B. m/ s: o% A- T1 e# o4 o }0 d, b& N: H1 t: l! Z
}
+ V) Y8 W" W3 r4 d* k9 I}
& b7 E8 ~9 t; v7 T2 J};" v, N8 `, }- [7 L) k
-------------------------------------------------------------------------3 x/ n" b& L3 x0 w- C u1 ]6 N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% b9 S5 F- t% {2 k0 S4 r* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, N5 l$ e1 y* k1 }& T3 O紧靠其上添加:- L9 I' k1 Z9 C. V) Q& P
if( pWndBase == &m_wndMenu )& `+ d8 g# T h2 I; c5 X2 ~
{
$ I- s- O3 \/ Q- b7 v switch( nID )
B/ a$ W A" K# C1 Q5 b$ [. J {
' j$ X: r# B: V$ Z7 D: V- b2 H case 2:
; c* W. _) \1 D {
( k) c# K; P& c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# Y' H1 d8 [& Y. l3 m, t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 x3 k/ b% j( ]; E9 B/ _
{$ J4 a) [& d, h9 M, E
break;4 e+ c# e$ F8 s$ r$ N/ {
}
) S" a |: G0 S u# d$ ^$ S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 Z1 t# g, ?3 x/ x
{
2 ^* s% }' [) G' ]# G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" b D( t& Y# @8 ~- I! u if( !pItemElem )6 @1 F2 @. F; X; x9 k- Z
continue;
+ r' ^3 Z7 O/ x5 o- l. M9 V* r: j. I if(pItemElem->GetExtra() > 0)4 ~/ Z4 y+ f; i# A# l* t1 `
continue;
: N; e9 {6 @( h8 a, c& [8 P5 L: D if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & f& N2 Y& g* ^; o2 C
continue;" q" t5 e3 F$ K+ r/ q
if( g_pPlayer->IsUsing( pItemElem ) )! B) Q( f; R" @2 F3 O
continue;6 S0 q1 _) V, c+ n, t X) j
if( pItemElem->IsUndestructable() == TRUE )4 k1 Y w: ^8 W$ H
{
( p7 W* p3 o2 v. X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% A, Z$ n% p. n8 V3 Z5 n0 q3 D continue;
# `6 P2 ^; ~2 ~& U% i8 i/ s7 F0 G }
1 V9 l& j9 ?% I1 c ]5 ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- D& u) l5 ~5 U9 K
}
# J' c5 L7 Y1 ?6 H+ | break;
+ A3 B0 S: a) ]8 y6 ^) l! Y6 z }; o' v3 f( s8 U* z
case 1:
1 T/ z* u* ^3 M$ L) h5 U3 K# k2 O {
% o$ ]" ~' N/ ~) a, N, c4 \/ n //整理背包: N1 Y$ k4 g* `$ R: v
//////////////////////////////////////////////////////////////////////////
0 O% [! I; m2 g //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
I8 G3 Q9 L% t8 W7 X+ }; k7 r+ n //////////////////////////////////////////////////////////////////////////
8 T0 ^% Y. ]3 L$ V U; g, {/ v //////////////////////////////////////////////////////////////////////////
$ B7 W, ]( @1 _) b7 C! F k CInventorySort* pInvSort = new CInventorySort;
+ U: M% E+ W, G( X vector <sItem> vItem;
# T% C1 \# P/ Z' o vItem.resize(MAX_INVENTORY);//初始化大小& {' \7 n! |6 b
//////////////////////////////////////////////////////////////////////////
3 a7 ^3 n5 B! x2 P3 @( i% A0 b# | //填充数据: l1 u+ e$ M2 [
for (int i=0;i<MAX_INVENTORY;i++)
1 ?! h F$ ?# f _ {
+ s) v3 E3 a2 |/ H. k0 H4 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. |8 C @+ ~& U, f: |5 |1 v0 ?
if (!pItemElem)
; m; a3 W' S9 M4 s4 v2 h {- o4 O$ C6 I% Z/ J
vItem.dwKind2 = 0xffffffff;# d) t2 ^! |" E2 o& [
vItem.dwItemId = 0xffffffff;
7 @3 A) G4 D% P/ {+ q vItem.nIndex = i;
- P: h; _' e) m5 N) x8 d }else {. c4 H# c0 R9 U6 A
ItemProp* pProp = pItemElem->GetProp();6 N; n( u5 Y6 I5 ?
vItem.dwKind2 = pProp->dwItemKind2;
) V! q- f6 R% m6 ^ vItem.dwItemId = pItemElem->m_dwItemId;
U( W, E B. I; o$ A0 R vItem.nIndex = i;8 s1 u# Q+ |0 T* ]7 \' H& |. ]
}
% D9 i$ K! s* W D9 a( W, g! i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 Z5 w) t$ I2 C$ v4 p }7 t' W( g# M9 F% Q2 Q: Y
//////////////////////////////////////////////////////////////////////////+ k. K: X8 a" a0 e% }: {- e
sort(vItem.begin(),vItem.end());//排序3 S. ]/ p& M+ a2 \; ~
//////////////////////////////////////////////////////////////////////////* l0 q! H, `% @/ O
//交换
4 N2 V0 ~, Y0 N4 d* m for (size_t i=0;i<vItem.size();i++)
4 `" \$ \" _- C+ d {. P ~$ J# r$ a" [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" \2 \: | k% N1 _! |
pInvSort->Add(vItem.nIndex);
- B! w. I4 A6 u- B# y9 l5 t }5 q* v# |. N6 {- V
BYTE nDestPos = 0;
& o/ \2 E \# q4 \+ l# @' i0 q0 s for (int i=0;i<MAX_INVENTORY;i++)
1 D: Y a( ^6 m$ Z {) j% S( c K; |5 m- R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' p3 |# W3 _2 t- J
if (pItemElem)
" u3 g9 U; O! q$ A) M {
2 H3 ?5 x0 _$ A f6 \, T- p9 X. _% x if (IsUsingItem(pItemElem))5 a0 c/ _, n. Z4 M
{6 k9 Z0 q2 F) E5 P
//这个位置无法放, F+ {; i6 _0 A
nDestPos++;7 h3 {, [ N3 C6 G
}# ? ~( F9 Q. d9 E2 E& c
}) ?5 V4 Q) c2 z N. M
BYTE nSrc = pInvSort->GetItemSrc(i);
1 i& Q/ ?# Y' b4 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, }9 ~ G/ {/ ^) T- l if (pItemElem)- ]; V2 ]/ ^ c& j
{6 z( v4 z, p# w, D2 |8 v! _9 w8 u
if (IsUsingItem(pItemElem)); J8 Y4 b, P8 O# W- t4 U( w) K( ^4 t( T0 h
{
3 V0 o q2 k/ `7 \% r* e# p% z //这个道具无法移动,跳过. W v0 l1 Z9 D$ _+ }; R
continue;- H1 n& b6 V0 N) J4 Q! g! `2 C% ~
}
* ~$ y! Y9 v( [9 x' q }else{1 H3 ~4 ?0 C9 l# T8 t
//空位置 不用动
- D M; u ]9 [ continue;
8 X5 k, e+ Q) {0 T }
4 a3 W7 I$ }5 G4 a4 I" f* O' A //////////////////////////////////////////////////////////////////////////, b! D1 k- b6 c! n7 Z
//开始移动+ E, K0 N! V9 i! |% z: t) Q! H
if (nSrc == nDestPos)
! K7 O% P( A" q# N5 D {
4 N; s- x {: m, ~. x //原地不动
9 n2 F7 V- g+ B* S. A6 L# K% [ nDestPos++;
$ u2 q; d% `# v. m6 M# o+ }, M continue;
0 y$ y; w1 z+ { }" N9 _: R1 M1 }0 W
pInvSort->MoveItem(i,nDestPos);9 W7 a6 m7 b4 n1 h1 e6 ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 f$ a# i- ^3 ~% g8 Z Sleep(5);. u- U& r% j! f) b0 C" A
//Error("移动 - %d->%d",nSrc,nDestPos);# c9 D0 A8 u+ T6 @9 M5 Y
nDestPos++;; P( U) n3 i, Q6 k2 @
} m0 I/ }% P4 p# H
//取第一个元素的信息
/ Y. M/ t2 ]- o( ]& e/ o /*! G J0 y' L4 v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( c) c" L8 c1 X/ D) b/ n/ a {
! N- g4 V$ F1 |. e- M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 D y. l' T2 l5 q$ W+ ]. ~' d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' p, ]8 p. y% D1 T* I3 Y
}
4 N7 c5 S7 V/ t6 m9 ^ */9 Z( }/ A. O K9 G
//////////////////////////////////////////////////////////////////////////
: X- T2 T$ F q6 P. M) `/ X break;( N/ m* _5 z# B4 s& q
}
4 `/ B/ o# `+ i3 X3 F/ n }
8 T; c# S/ X# t}
- G# a O7 ?" }! M# s3 Om_wndMenu.SetVisible(FALSE);
# o7 x; O3 j9 E i: N! C
h) @+ M2 Y* c: D--------------------------------------------------------------------------------------------------------
' J: r# A. S% m3 B, \. @$ ]1 M1 l% M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" R+ p2 I1 t+ `, q4 U, W
{
/ \+ K. u! Y* e. C0 [BaseMouseCursor();
& X* P; j; f+ ~5 S}! q# k1 D' O/ x7 |9 H$ x
在其下添加:, M; @: m# ?& `; {( g! s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
|8 ^! ]9 z! a6 X{0 W8 o4 Q H& h# f3 ?3 A
m_wndMenu.DeleteAllMenu();. n5 s: P- `/ F/ R: y8 D) f
m_wndMenu.CreateMenu(this);
2 k8 R/ H0 z% xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ p$ a6 _0 J+ Y& T, h% F
3 A6 W* _* Z4 ]0 q) [0 w. o+ u5 d, U/ g0 xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 X' Q6 p P2 J2 Y7 o$ Y9 r
{
. w% \8 T7 V! ^: j* m //P以上级别才可以删除所有道具% o3 r+ [& J' t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! ^5 S" W9 A# }& m- G2 {0 V. o}- l4 W. [" l/ G M8 l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 s+ m( b1 N* c* W, v+ W7 w4 v3 _4 nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 k1 {8 @5 M+ Q0 |% D' J$ ]! t
m_wndMenu.SetFocus();
1 o6 f* V+ _; \% L}
& `2 ~9 R7 a2 ?/ W5 @$ J------------------------------------------------------------------------------------------------------------) m8 u4 B+ d% A+ J& d
*************************
& C X0 [1 d# L% A( ~WndField.h文件; S7 l4 i C( `; z8 g
*************************( M9 w0 h( W! H2 G2 r3 k' Z' T
搜索:BOOL m_bReport;6 G) J! D! j( K. v, ~8 Z
其后添加:
+ _+ X' n! _2 x; _ M* NCWndMenu m_wndMenu;* N5 N" u: ^% c. V
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 ^6 g# g2 }+ e# T
其后添加:4 B! k: i9 @5 N ]! K$ X4 `
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& U! H Z) S1 a7 B+ [' [9 V" H8 t+ J3 v$ h$ X. n& ]& b
: s% w+ X6 [. k |
|