|
|
源文件中_Interface文件夹下WndField.cpp文件
5 v8 H2 M- o$ [1 i- m( v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 r0 l/ t0 U; @; U
' X6 h0 q) U5 _) j5 x( ostruct sItem
( m3 k" l: n8 e{; }3 v/ f+ C; [( `
DWORD dwId;
! R- D4 r( R. `% O+ t, F, LDWORD dwKind2;5 D& r4 E2 I) G6 a
DWORD dwItemId;8 M( A: `/ ~3 \7 d: T+ F4 L
BYTE nIndex;
$ I% `. y1 |8 L( LsItem(){" A5 z: d. x$ n, s- x7 I0 z
dwId = dwKind2 = dwItemId = nIndex = 0;
+ V m( F$ o* D" V7 f}3 N. y: V1 }9 J) o
bool operator < (const sItem p2)
9 z1 ]: e8 n; a w7 h9 d% h$ {: N{
& j" W4 l( f( m/ V$ A" Z7 [, j5 y if (dwKind2 == p2.dwKind2)
* {4 h; R& X& Q {( H! n( d! A6 l- r( J
return dwItemId < p2.dwItemId;
$ }4 E5 E, N* D9 c/ | }else{0 }. K3 r6 s$ K) b" Y. g6 X
return dwKind2 < p2.dwKind2;
" v) H3 A# L- \ }
+ x% m2 T; S$ O. z; [# a+ v}3 D; y- x4 H4 K c5 N" s
};
+ V! ?; q. r1 G4 r; E% t8 @9 Xclass CInventorySort, c' F# O2 N5 B0 B
{
% {! Z! ?- p2 F( N+ j2 W0 s0 ypublic:" {* [/ s2 A. x6 H+ y8 [" Q4 J" {
CInventorySort()% A" N7 U/ C4 w2 ^9 h6 f( }
{: V) V% E& p% E
m_dwPos = 0;
% @5 P* t! b/ N |; P' l3 b}2 j6 \) F7 ^$ |$ H8 q7 i$ o( i' I
~CInventorySort(){}
2 P4 j: w9 T" H9 \& y2 Nprivate:2 l7 I" s+ N: M& O( ?0 K2 Q) ^/ Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ ?0 R1 `; `- _) E, u% x
DWORD m_dwPos; I" p6 b6 e3 `" W% A8 X! }
public:$ Z7 B$ d5 s7 n$ \3 `
void Add(BYTE nIndex)
3 q! H, x& @, b5 P; Z/ S, a{
: p3 Z$ _. G4 v+ G if (m_dwPos >= MAX_INVENTORY)5 k4 u) M* n8 v1 J! l4 [. E0 e
{
. ]9 N5 L) D# T5 k* _" [ return;
) e- J% I( }1 {) L( k* Q }) [5 h4 C+ y% s: r0 J0 i4 ^
m_Item[m_dwPos].nIndex = nIndex;3 z: z/ ~; q. B% g
m_Item[m_dwPos].dwId = m_dwPos;
$ x3 [* |# _: O. N( P m_dwPos++;0 C& e( F" K3 L! _- ^. z7 u3 ]
}# ~( s% m# B/ _( a1 \% y1 F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" J9 j# m5 S' V& \( l+ k{
: H7 _6 d, n4 v% j5 T3 B6 C+ G for (int i=0;i<MAX_INVENTORY;i++)
3 L4 { i5 C4 l+ p: b- F c4 I {' i" S9 n# u# |) A @+ `, z, }
if (m_Item.dwId == dwId)1 C7 D0 B& j$ Z o9 @
{
1 [+ Q8 |( \2 ?$ ~1 ~4 u* { return m_Item.nIndex;: J& Y) x6 K6 t( Y) _
}- a4 b+ [: j2 M& u+ ^
}
1 k, B* x2 b4 o; [$ I' D return 255;
: [7 y; g5 k6 x+ V3 P' v& M* ]+ H+ f}
- y6 S2 o$ \2 w" \. r$ Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. u' w. J' j9 d" C; p{
3 M2 {) G0 U3 c) W$ P4 q- S9 |2 l BYTE nTmp = 0;
7 @" w# {. E7 f7 Q; K' G" S q bool bDest = false,bSrc = false;
y" a+ W+ A/ j& s4 g% ]' c for (int i=0;i<MAX_INVENTORY;i++)
a9 t3 |& }' A8 I {
$ V! g& N$ T6 k8 U! M V if (dwSrcId == m_Item.dwId)
& s, r# V- b: b- s {
- }; Q) Y" s" q% z" r* {+ o //id相等 则 改变对应的dest和src
; n. i+ @+ o* S6 S7 h5 T nTmp = m_Item.nIndex;
* \( M3 w# c8 P3 ?. v5 \: R m_Item.nIndex = dest;
% o2 j. }; b" g' t. a! \ }
6 ~ c0 t) Q l2 t: M }0 A1 {) x& `6 Q& D8 C" a
//临时数据保存完毕,交换开始
* |5 @$ b( x8 [% }+ O& V7 E for (int i=0;i<MAX_INVENTORY;i++)! B; N m. E3 H" Q
{) E0 T8 a4 F" c; I
if (dest == m_Item.nIndex)
5 c- V" h+ U% v J6 L; ? {- g Y% a, T' Z
//id相等 则 改变对应的dest和src
7 k: ]9 P" ?# ]7 C1 z! D5 y) [1 ^1 \ m_Item.nIndex = nTmp;
6 j# m. Y5 U% \ z- m: K }6 C0 e& [. |. j5 j5 }
}
. f9 L' m- t9 p8 J- }}3 u$ Q! Y" k4 Z x
};
) `% w+ N8 t- d' ?) Z+ q+ x-------------------------------------------------------------------------: s9 b8 o& D; Z/ \9 c2 |. a- P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 v6 \% `2 O9 W: B0 D. M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ O5 _! f, A3 X9 t
紧靠其上添加:
7 y" [( z/ K; ^* c+ nif( pWndBase == &m_wndMenu )
2 N& U% T" A) k9 \+ l4 Q5 C" ]{, A7 e) y1 S* f
switch( nID )! {" x" v4 ?! y' d+ U, X
{
# ~4 m' D' P8 i0 g. r case 2:5 S# k5 z# {# M% z
{! r0 N' a% B9 E& x- S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( Q6 i' ?7 A/ S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 P; u7 z3 p' b/ q4 i3 ~. [
{
& J0 u) f- K, W# c, `3 u break;
6 K. G3 |0 S& j7 c2 v! s2 r; Y$ U3 d }: w, @! q. G: {1 W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), E, o, z0 X( j# W* |& z* I0 N2 Y
{
9 t! U, R3 M: c4 r+ z! l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 a+ C- a- Q7 M) t8 a if( !pItemElem )) v/ l, w2 U7 V0 o6 S8 w
continue;- x/ }$ P X" j( S+ E
if(pItemElem->GetExtra() > 0)
: L& z7 d; W& I0 `0 E continue;
9 M: D# f8 v: M9 N) @5 @3 I Y2 Q* I% [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 p5 X* ^ Z8 m4 E! f" e continue;
2 |' o9 i8 c' x& G if( g_pPlayer->IsUsing( pItemElem ) ), N! `6 e% ]8 B0 r* \7 M/ F
continue;
. S) n( v7 F7 ^. X' R$ G' m if( pItemElem->IsUndestructable() == TRUE )1 }+ Q# U8 `( s1 U1 Q9 ?8 `
{5 f) L9 E j0 `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 B% c% J/ \( }) Y5 _( ~& ?8 N; r continue;2 G6 }5 U4 d8 f6 a/ V+ L3 d P( |
}
1 }( W1 Z q% {- Z, ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) k6 g' _7 L! m; K }4 X* S0 g4 X; ~, R8 i9 ~9 c
break;# a$ t# A1 M! o" Y# E0 ]2 u! b
}" X( r0 _9 M" C( I' d& A h
case 1:
8 G. ~" c7 R5 o0 ?& \8 F8 `6 C$ H {7 T, U& n9 t. [8 L5 N
//整理背包
6 t4 f% u1 k" H5 m+ L7 } //////////////////////////////////////////////////////////////////////////3 Z* z' r+ m+ I9 {$ G) m: t: L( p
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, Q! F, p7 E$ h( c7 ?
////////////////////////////////////////////////////////////////////////// T4 e' }4 `6 I1 U6 t) m* u
//////////////////////////////////////////////////////////////////////////
9 n8 D* u/ P5 p) W; H3 ?2 E CInventorySort* pInvSort = new CInventorySort;
# t9 t; a, b" U" z' A4 n9 p" } vector <sItem> vItem;
9 y# s. f& J9 ~0 p4 z: w o3 U vItem.resize(MAX_INVENTORY);//初始化大小
4 p$ o! k# U: b; W //////////////////////////////////////////////////////////////////////////" n; O+ V# U+ q+ H& H+ _. {5 U2 Z
//填充数据
F. r0 J& {2 C8 Y for (int i=0;i<MAX_INVENTORY;i++)
0 _; X9 N6 p' S3 M {
- [9 W6 Y3 b+ j( } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* H- Q7 R7 J7 ^# Z if (!pItemElem)
' Y/ L5 q% t2 B2 y C {+ Y+ e) q( p2 I9 V& p' p* Z) ]9 h
vItem.dwKind2 = 0xffffffff;
( a/ Y; ^; S3 [ vItem.dwItemId = 0xffffffff;/ H* J- }( w0 X1 o+ R
vItem.nIndex = i;' v; G% @" v9 x! Z: q! t
}else {: X2 L+ j4 o" t7 |) T
ItemProp* pProp = pItemElem->GetProp();0 j1 l6 @; F8 N5 |5 c6 B5 s
vItem.dwKind2 = pProp->dwItemKind2;' b5 ], h$ ~( _
vItem.dwItemId = pItemElem->m_dwItemId;8 l. n' A2 t' K0 [1 n* X0 f1 e0 q9 N
vItem.nIndex = i;5 u% k9 u' D& M- X \: C- N
}% s4 W0 h7 S# Q1 q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- x" n" y5 Q' [$ f' K
}2 P. Y" I: V. K3 M0 B, B
//////////////////////////////////////////////////////////////////////////9 j& v4 C7 w0 y8 x7 { I- K
sort(vItem.begin(),vItem.end());//排序& C0 V# x+ o0 L3 H$ j/ ^
//////////////////////////////////////////////////////////////////////////" _; `+ d) W1 F& z! a! y
//交换
9 _& T/ ^" B9 k# o/ I8 e for (size_t i=0;i<vItem.size();i++)
. Z& x+ `$ _. i3 S3 Z3 j0 g2 O( a {
/ G9 S( L1 C; L' e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& h1 ]5 x8 c' T) Y1 h$ f
pInvSort->Add(vItem.nIndex);, D3 p/ c! h) i. l8 Z: L
}
; g' k, i; v5 w$ _0 B BYTE nDestPos = 0;
* r0 z# G4 g7 B2 \ for (int i=0;i<MAX_INVENTORY;i++)
0 ^8 D8 }4 E+ S0 g9 e {+ h# }0 ]% t4 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 x6 c( u4 f: d- e7 O+ M if (pItemElem)/ M: _ `4 L2 z, l1 p y
{
) [- y, D+ f) {: A. H if (IsUsingItem(pItemElem))
- ?% V; {! N2 [6 M- | M' g {
/ Z7 [5 c3 H! X" j& C+ j S9 o" _ //这个位置无法放
% b: b4 _/ N, _ nDestPos++;
|1 J: O9 [& a9 I* A: Z6 x }0 w3 w& |. ?' u8 f# W8 T% N
}
) k. ^: u7 M( {! E2 R8 M3 c* w( w BYTE nSrc = pInvSort->GetItemSrc(i);
( W& W+ j1 m5 r) P- l8 x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, E( n% ~6 J, s+ e
if (pItemElem)3 B5 K4 U2 x4 |9 W
{
; P& l1 Z6 P6 @9 [$ y) t if (IsUsingItem(pItemElem))
3 q% @: p M8 t* J* q; i9 n {
1 r$ ]8 m7 ?6 E( x //这个道具无法移动,跳过& w" M, O4 ~# U( k J3 U
continue;5 p/ b+ a( J2 ?8 B" `
}
# y+ z5 w a) O0 _) v$ _ }else{
* w: ]1 O0 X5 f( ]* t0 C //空位置 不用动
9 a- F7 S4 `& s continue;+ \7 p: G2 y9 \9 K
}
7 j" e) U# C( \% t; v1 c //////////////////////////////////////////////////////////////////////////
* } H" E Y2 z* x- D //开始移动
! P0 k0 `6 U) Z$ O4 P' V/ Q; M3 I if (nSrc == nDestPos)% Y( c# r9 u' a
{
3 e. _ C+ r. |6 l //原地不动! R6 |7 x6 E7 E2 T1 Y6 N( Y: {, J
nDestPos++;
- Q3 F4 {% Y, h" o! E* d3 Z' ` continue;( r! k* G+ Q$ j
}
: B3 B* o# E# B$ o& c, N& k" I1 r pInvSort->MoveItem(i,nDestPos);* ^9 y9 M& s. M) h" u- p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& }% v) v. c) U8 W
Sleep(5);
! i+ `/ g+ ^1 Y1 ^' r# \; |- y //Error("移动 - %d->%d",nSrc,nDestPos);
5 B' X, V$ f; w! Z P0 W nDestPos++;, A! e. z( }* i. g* x
} Y( W- ^. |4 t; P3 \
//取第一个元素的信息
0 Z- a% x* {1 W2 g. c) z/ [" t /*- Y0 d& R& J, Q h: X4 b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 f6 A/ d% S) ^' ]& a
{' p% y/ N" Z* v6 R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 T; i0 }7 n3 H7 J4 @& i0 X' p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. F j6 I, R2 ?9 i, U
}% V3 a. y- q a: t
*/
; T" [1 @4 V# B; M |( E0 p //////////////////////////////////////////////////////////////////////////( G6 u$ o3 l3 O( s
break;6 O9 A$ ~& ?8 c. h8 B, f/ A: P
}& D* L) W, D& x8 G" L: ?8 }9 ~
}
' L, k E; n `5 s6 O3 J$ ?9 a}+ G- n. I. k+ p9 Q8 p" f
m_wndMenu.SetVisible(FALSE);% [6 B. I. r! l% w. u+ a; Y
$ S2 M1 J! {9 }7 n--------------------------------------------------------------------------------------------------------
' X# I1 D+ C& _. z( u- g$ N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 Y! [" d; z3 x6 I, Y
{) m5 S3 m$ [( j* r" p1 O+ p) ?- G) `) W1 }
BaseMouseCursor();, u1 B- B/ s: t
}5 G# j+ F, N0 j9 V
在其下添加:+ `' B- }7 i1 y' Q: d2 Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 E! n. S" F4 R6 s. O7 m4 c{' e- ~7 k9 \& |0 j/ l0 ?
m_wndMenu.DeleteAllMenu();
2 w, q! B1 }7 L* S& f& Wm_wndMenu.CreateMenu(this);2 A3 p. {( j0 v4 h8 O* m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
h3 ?8 I; A. U6 A9 {3 d9 d6 i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) I. e6 n4 Q$ V4 {
{
2 r: d* n* U6 ^" O# G //P以上级别才可以删除所有道具% [' g$ a, a2 t& \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* q6 x& T2 { b# d- e
}
, n( L: o' Y) z5 `1 Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ ?! _2 w! }0 ~% J* \; H# g0 {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ g( g' i2 X5 jm_wndMenu.SetFocus();3 ]0 b* W9 M" p$ b; w
}
- P' p0 i: P" c4 c+ X- [! |------------------------------------------------------------------------------------------------------------% F+ w( A8 Y. a+ x6 k1 Y* ]" U% j
*************************1 ^" k5 z; f3 f2 D; R
WndField.h文件
. c1 j+ x0 T" u; j' d*************************
% j3 [0 V3 E5 Q7 K1 j8 G4 A搜索:BOOL m_bReport;
! y+ D" s1 Y. b2 c% r9 g其后添加:/ s0 h8 I7 G. C) k: ~& |
CWndMenu m_wndMenu;
% A, H% Q8 P3 X; a8 {0 l, E" r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 _7 M0 E, a( c0 J其后添加:
* a+ q) t# M) ~( w8 `virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 x1 V5 L( ^5 v7 p
5 P' Q& n# w; i+ x. ?; }; |" h1 \( E# _: J2 ~7 r
|
|