|
|
源文件中_Interface文件夹下WndField.cpp文件
- h1 z+ F0 ]; I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ b0 o o* r8 g) _- h
6 `7 d2 u, ]; S: n
struct sItem5 x' S; X4 M" [# v/ |2 j
{
, { F& T3 z/ z* b" K0 j) @9 G; ~DWORD dwId;
2 R9 l w4 c c. s; R: rDWORD dwKind2;
! U3 q: P4 o8 x6 G* s" l1 D pDWORD dwItemId;$ a/ a1 m, Y+ p1 p- v0 G" F0 b4 V
BYTE nIndex;
. y0 h2 K' \# R( t3 UsItem(){' o5 s, n" z* Q; t! z" G3 p
dwId = dwKind2 = dwItemId = nIndex = 0;6 z- m. Q2 I1 a+ w
}
, Y/ S; M% R' g: zbool operator < (const sItem p2)! h9 I' U+ U! S
{
( m: p8 \6 O5 |9 E( C if (dwKind2 == p2.dwKind2)
) F* D R8 _$ v {0 U. W- H; N: l, s
return dwItemId < p2.dwItemId;
0 i8 u0 f2 B& I8 \5 b }else{
. ~$ L- w. a7 N1 @7 \ return dwKind2 < p2.dwKind2;* c7 M/ ?7 M6 e2 d4 X- F X; v
}
* Q4 ^; O, m: r8 @5 o: b% n! H}
$ K$ d% O' v m};
- _0 R9 r5 |6 ~class CInventorySort
+ L4 p: |4 O z5 s$ b3 B* `9 R/ C{
4 _! [+ a4 @3 y2 W( ppublic:
3 }# b0 f: H9 l# h( T8 u: DCInventorySort()
: @" J4 u b0 b{4 j" I6 V! Z1 Q; f, F/ k) j
m_dwPos = 0;
. b( E$ o- f+ O4 e6 |: A2 L}
: N3 ^! }: e) d~CInventorySort(){}
l8 ~! e" I% b$ M+ xprivate:
! w* j7 F5 N8 y1 c' AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% x: \0 ^, x( H+ X1 }: ~; zDWORD m_dwPos;1 h# b* s7 J5 x8 A D" n
public:4 u$ [. L, v& a6 c
void Add(BYTE nIndex)7 \2 @( E/ }/ R
{
) v3 p. D V2 E if (m_dwPos >= MAX_INVENTORY)
( i% O4 t, d- g; F- t {
' o% F2 Q' p* T T- {+ a return;
" O# C" X% I: S }
) Q( V) R! Z+ X2 G# X& n' T m_Item[m_dwPos].nIndex = nIndex;
+ M! T$ t0 y: s0 e/ O7 P% t m_Item[m_dwPos].dwId = m_dwPos;8 m8 e2 w) F& l. O
m_dwPos++;
( @0 [* E, ]/ B3 n* h}0 L: j {6 I) g. M0 P! l- g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% ^) O8 |1 k. e6 M; i# k) `
{* ^+ i6 M% Z/ S$ H; N
for (int i=0;i<MAX_INVENTORY;i++), z9 k3 V J; n. b1 z: b; ?+ H1 D
{4 v5 Y/ p: e, [1 f2 x* j1 l+ D
if (m_Item.dwId == dwId)
; B- F6 r; \% }5 m3 w3 H7 x# H {( L( k3 {+ a( H8 t) M' U0 M
return m_Item.nIndex;
# t7 ]6 Y3 H& e* Z$ Z }' U# Q9 Q1 C" x- r3 ~% P
}
# z+ b( O4 @& y! Z5 v+ x2 r6 R% ^4 p return 255;
' s( J# _1 H) j2 E0 V' k' W, D}
9 y; e3 z! v+ ^8 J- Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 ?& h8 x' {5 n
{
$ ~: h% _& H; J9 X0 y BYTE nTmp = 0;+ L- K6 }# ]9 |1 M5 J: q# E
bool bDest = false,bSrc = false;
! t1 d% B% z/ p7 N for (int i=0;i<MAX_INVENTORY;i++)
9 o. ? H* G# N9 u# O, w% V {
* h3 V& p! G5 }2 k: k if (dwSrcId == m_Item.dwId)
' v! k$ U5 @1 ^& W' Q {
. k9 o0 d2 d% k% ^, z //id相等 则 改变对应的dest和src: m: W" H9 J& Z5 J: f
nTmp = m_Item.nIndex;
" L& P% F" c- ^; D' d. S. U! t m_Item.nIndex = dest;0 n* H; E) j' t7 [$ q2 L
}$ }/ e4 l, k& `/ V, \+ x! @
}2 H' Q; q! }- Q2 w2 M0 i+ A: D, h+ |
//临时数据保存完毕,交换开始
3 x% r6 H1 C2 Y1 s( @' g$ x for (int i=0;i<MAX_INVENTORY;i++)
8 A0 m! \" F1 c0 t4 a {! n1 E N) @/ u3 K
if (dest == m_Item.nIndex). `/ `9 ` \# H4 \, k/ V: W6 F6 E
{( K# y2 u, G: S# ?
//id相等 则 改变对应的dest和src. k4 l9 J5 W! I# t/ ]" j
m_Item.nIndex = nTmp;/ x0 U0 e* s% [
}+ ~5 w2 u: k' f! ]; P8 a
}
- E0 G$ D( i2 V: M# @; I}
; b( K: V$ O& a: x2 A2 E; r/ i! b8 Y};0 Q* P( L& m& ^5 E- E! g M1 F
-------------------------------------------------------------------------0 q1 _. b- K) ?1 s) _- A0 w6 E K
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ _+ r, P% E& }0 L! j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, \) P. X, i0 M0 ]! E7 |
紧靠其上添加:
[. i! v# ?# ~# r- s" kif( pWndBase == &m_wndMenu )
7 `: I7 ~8 |8 N/ ]! a. H c" ^) i{
) T8 `( h' T/ q) v9 N# Z switch( nID )
1 S3 S3 `( b' i/ y% ]4 y {9 F: L, A1 l9 C' K. B
case 2:/ a. J j0 v. M+ b1 f2 r& G$ X! t9 V9 N
{
4 }% M$ Z% Y0 Q8 W: h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: q( |8 f& z) D1 ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( S. }( {; v4 c; W' _ {+ C) g2 ~" G: W( f$ V9 [8 |: k
break;# e) M- }/ Q7 Z
}
1 v- A/ {( i0 s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& c" \- d; Q' S( ]7 j# k1 m, j) I
{
4 f2 i9 e0 d8 C" X W7 h* o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. b8 t$ {8 g4 W( @. j4 Y
if( !pItemElem )
4 G0 u, @% _+ i& w continue;
! i( c1 E& r0 ^8 ?9 M if(pItemElem->GetExtra() > 0)" k8 q3 h$ E# M7 Z" L$ O/ B4 `! {1 W
continue;
9 c5 r; ?! ?! Q; w if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 a; S, o! U0 G( Z* o1 e continue;
7 q+ Y- ?: F5 \2 J5 n: L5 P if( g_pPlayer->IsUsing( pItemElem ) )
6 q4 P$ n; R! A: r- y continue;$ Q, o% e9 p# b5 j8 X8 v
if( pItemElem->IsUndestructable() == TRUE )
( Z+ V1 Z# k: p9 v* U2 u {" G& Y6 @2 T; Z$ U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: v2 @+ I. M$ I, D6 `% t
continue;' U- [8 I4 N6 t
}
0 b% f& i& i, A( s: | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 h% o9 h$ h* e: }. e& `
}% g. a, r, H" t5 i4 M7 @
break;2 g8 D% J% F q& n
}
; b1 K& w4 P: l( G/ O0 y) H case 1:) n7 r9 Y* [0 O2 F0 ?* \
{3 J5 d8 X0 J4 q0 k" R
//整理背包0 q+ |, u$ t7 O( L
//////////////////////////////////////////////////////////////////////////
; D3 I+ y9 L; Z/ @- e3 S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- w0 V; u' m9 _; I* w; w
//////////////////////////////////////////////////////////////////////////( p) q. K3 S; q7 E7 H* `8 Z. L G
//////////////////////////////////////////////////////////////////////////; G% ~0 v# J) R( R J% J0 y
CInventorySort* pInvSort = new CInventorySort;
& j. @: b3 j( t vector <sItem> vItem;, r n) U3 `) R4 S0 ~+ F9 Y
vItem.resize(MAX_INVENTORY);//初始化大小
+ }# `* _3 N$ m9 \7 x/ R! O //////////////////////////////////////////////////////////////////////////
# D0 G9 o6 e: F6 E {/ m3 D; M3 { N //填充数据
# k1 v4 a p! l1 D' D for (int i=0;i<MAX_INVENTORY;i++)7 c" p# M' q l3 E. A3 k; @
{
* a1 ?6 w! ~6 o- ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ H+ y/ e, d! s1 r( c: [/ a+ i if (!pItemElem)2 ?, J% f1 ?7 S/ u( G
{1 [$ N; G7 {- L. Y! v1 R: Y
vItem.dwKind2 = 0xffffffff;
[+ h2 G* W( c$ x d vItem.dwItemId = 0xffffffff;
7 |; p2 Z4 D% l' @ vItem.nIndex = i;/ y J& v5 W1 j
}else {
* {, E! f7 ]# ^$ C& ^; Z! ^ ItemProp* pProp = pItemElem->GetProp();
' m2 y$ n1 Y! T) G- [+ L. f( {- I vItem.dwKind2 = pProp->dwItemKind2;
9 d0 [ v! J. }) y9 ~' D vItem.dwItemId = pItemElem->m_dwItemId;3 P+ g W, D# A H: G1 q' P$ O8 }
vItem.nIndex = i;0 R( V- r, C5 x, N; a( E4 C( x
}; b7 M, B9 Z: Y; F$ ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* c; e8 r8 u" y2 M+ Q6 m% t* s: R6 Q* c
}, ?' v# F, v5 {
//////////////////////////////////////////////////////////////////////////! t. I1 A ]: j1 C
sort(vItem.begin(),vItem.end());//排序& ~; o- |( }9 e2 U* k, m% r K# C
//////////////////////////////////////////////////////////////////////////+ V" O- D* V* g5 I. r1 n; ~
//交换
" R, H1 Q" G/ g0 V# u) u @ for (size_t i=0;i<vItem.size();i++)) a9 t3 p0 |' E4 g" |9 D
{% }5 L) m5 O8 f# y6 z6 ^. e2 B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! y" v' t2 `2 b9 w/ _+ D- ?8 O* k1 z( ] pInvSort->Add(vItem.nIndex);$ w! F2 k5 B) G; Z+ P
}
" T0 F# q8 R+ X! p# t BYTE nDestPos = 0;" P. U! f! [& I/ Y/ A$ h
for (int i=0;i<MAX_INVENTORY;i++)
3 u; ]- O% X& i& U6 W; h {$ ^( x+ r. A# o# L# R+ z6 f' B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# ~7 q+ L+ a$ x; `) C
if (pItemElem) ~0 J3 c! n( S: L
{
# {: B T$ g0 }! X if (IsUsingItem(pItemElem))* M5 C8 ] q q% Z* q' v A" S9 q
{
& I& P( ?' B! z/ a7 d9 r: e5 Z //这个位置无法放
5 |: l. {1 ^2 l2 I+ X nDestPos++;
9 f0 @5 o R8 C( K9 L }9 m" c/ C* n! i4 v( ~" r! \; [
}
( W, s2 N r- h BYTE nSrc = pInvSort->GetItemSrc(i);
7 Z& p& T* j/ w( Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( A3 o8 b) G" H1 i+ l1 H if (pItemElem)) ^+ P4 V4 j3 e+ h) a9 k
{
( y5 o- s) D3 E- t9 s if (IsUsingItem(pItemElem))
7 ]% [ s+ E+ M6 M. t {& b3 \' ]$ \* i. L& t9 p
//这个道具无法移动,跳过
! S# A- Q. U4 [0 l3 Z continue;
, `$ Y. b1 o$ L }1 M$ A3 w* R8 B0 T# R* F v( E
}else{9 ?- ~4 p+ |7 N' \. A. @
//空位置 不用动
# z! m: c( f( N/ r r* x- b0 X% r continue;
. b$ g, ]: r4 v& ~9 v2 ~. ]0 N }
) D* T+ }0 p5 U" o+ \& I //////////////////////////////////////////////////////////////////////////3 I0 p" j- D9 x3 G
//开始移动
2 _6 p2 a, d8 }( Y) o$ d if (nSrc == nDestPos)2 \' S, c8 I6 w3 U& |/ I" G
{
) M1 m. d2 [7 P! v6 ?" J/ {: x //原地不动( p" G; `; Y1 W' W0 M' \
nDestPos++;% ]: V- w4 Y, ?/ T, b
continue;
$ o k, ~9 T# D }& C$ s" K+ s% j5 h
pInvSort->MoveItem(i,nDestPos);' F; ?% k) d+ Q" i; f% r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 y) ], ?1 a, `4 f) R# P
Sleep(5);
! N9 r6 a7 `. j //Error("移动 - %d->%d",nSrc,nDestPos);& j( F0 S# T) g
nDestPos++;4 F* ^: |/ ^. C) j! G) s# x% X7 s
}
2 Q2 W5 w5 l X //取第一个元素的信息% u5 Y3 `5 O7 g# A. q2 K5 ~
/*" S( W' t/ l4 H9 B1 U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 M* l! V Q, ]4 o. n+ F
{
6 D) P) R6 }8 R/ o3 N# m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 `6 r1 _! _6 g8 q2 L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 o8 y* d* L& J3 ^3 _7 t% ], \! `" O }
' ]5 Q) |# h) T/ o% v6 D! A/ k% i */0 @! V- f" a/ i5 d2 j p
//////////////////////////////////////////////////////////////////////////$ K' ^) C2 x7 ?2 A9 p; J
break;0 r7 y3 O E. ?; Y+ K9 w0 o
}
/ Q2 @* O% G( }0 n2 H4 A# W }
. e* j1 E0 r: a$ [# }) X}2 h0 U! ^/ ~, ?6 L3 ^
m_wndMenu.SetVisible(FALSE);3 |1 B7 k+ ]: F7 W) z
; z9 k+ L: G! ?
--------------------------------------------------------------------------------------------------------9 f+ V% d, R1 T! R' `! P
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) x& Y% K: g {# T' R: ]2 M{( T k8 t+ W* G1 G$ t
BaseMouseCursor();% e8 j+ v; P* n
}, A7 ]1 v u: C6 R- `
在其下添加:
: C V$ w* k+ b- qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ K7 }& s7 C6 g7 r @3 ?9 C5 ~
{1 K7 z, G. M% D$ o# n
m_wndMenu.DeleteAllMenu();
0 k6 D# {$ _* D4 `$ D+ qm_wndMenu.CreateMenu(this);
* W" |- @' ]2 m$ ^. |6 A% Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! M0 C6 J$ h) I. N% p3 y% [ Z, P+ U) j- D2 n: U0 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) u( X2 t. V$ [3 q# r3 N2 k
{
! S6 S# {: z$ m' G* V9 O //P以上级别才可以删除所有道具( x% l1 {5 f" N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 U/ r, A" a: `) o( X+ d+ q2 }6 n5 X}
- c$ F- p8 Z. R7 k: em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 U- f- [4 J# u/ @* b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 H" Y1 L; Q+ N' c( B* |; D
m_wndMenu.SetFocus();
+ Z/ A& H: k3 Q q4 a# w5 N# Y}6 d" l" L2 ?9 Z
------------------------------------------------------------------------------------------------------------: X( r4 a& S4 D; S
*************************; a: z9 }0 c8 A0 c5 a
WndField.h文件
$ t# u* D4 b2 ^; z1 c6 b# [* r*************************
. K* X, a% x$ B/ D3 P; u4 s搜索:BOOL m_bReport;6 E- L, ~# [" I0 c' |( u, T! m/ A
其后添加:
$ O/ @1 M8 ]- ?' I4 H+ _" l. n$ P( wCWndMenu m_wndMenu;
$ O9 }" W+ Y9 q1 V w* ^: o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); v# f! M! h3 R S& b
其后添加:* ? f: ~# Q2 w1 ]" B: z
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 A, y* T8 o/ w( `
! a: A) T) T2 ?+ |( s6 Q! \
3 D- _& S" g/ B4 b# W" Q |
|