|
|
源文件中_Interface文件夹下WndField.cpp文件
6 {8 g! ~" h7 S$ E. p4 l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" p$ v$ e( D8 r4 m6 i
, P$ q0 }0 I5 n* i2 |struct sItem! `( o( r: m6 M# k" s7 \
{+ j K! D) X v) Y8 J4 e7 r
DWORD dwId;
0 F! l, M7 S+ k* I) ?4 l4 G) @DWORD dwKind2;& q! p8 R( b& q2 G8 O8 Q
DWORD dwItemId;
% f9 f g2 g$ w6 A: y* D2 HBYTE nIndex;1 {; s; T6 y) c/ u1 n+ }4 y
sItem(){
: o3 _9 O0 O5 T9 ?$ I! Q5 v( U dwId = dwKind2 = dwItemId = nIndex = 0;4 [& C. c3 C: Y; E+ C2 y. G4 ^
}
7 d: F+ l/ u3 j4 a: P( Tbool operator < (const sItem p2)
# k B, j4 C1 l" X{
~; B- d8 |1 n* G4 _. P if (dwKind2 == p2.dwKind2)
7 F$ o a3 h2 m* [1 U {1 k/ Q6 y3 X( |; _
return dwItemId < p2.dwItemId;
1 l5 }) _8 z8 r% C% h: I }else{8 D3 k7 Z# F4 W# S5 M7 L ]
return dwKind2 < p2.dwKind2;" w% E6 ~$ {1 d1 X; N3 d7 S
}
+ d5 a5 p* E9 b6 p' O5 V _}* |0 u. I/ V; P, K
};
- W) D2 r5 X- A' T! {1 Z( Wclass CInventorySort
! O( k% L1 b/ B6 d{
' ^4 T! ?( p* T- E7 T* `public:
& I% a6 }3 D2 H1 QCInventorySort(); u' }$ s; N- \: @* a# q$ B& ~
{- U7 [/ V. u5 P p7 @
m_dwPos = 0;+ g0 p& s4 n j$ B* S
}
) p+ u' I/ r/ z3 w~CInventorySort(){}
2 p2 Z8 O3 u. j& aprivate:( o. U5 H8 w/ a: ^5 S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( v8 Y: B2 u' W2 S! J% i
DWORD m_dwPos;
~. W. s3 R! cpublic:9 b! h% p7 P) P, k1 I# J: w/ N
void Add(BYTE nIndex): `+ i* y5 \9 [5 r8 N
{
2 j9 i1 g1 |) b- t' o if (m_dwPos >= MAX_INVENTORY)
7 m. W! v1 T; r9 _$ G {/ |( x2 B/ k( Z% d8 M3 m% R
return;
7 G! T/ ]- q; }: \( m# C2 ` }
& J/ x9 B" {$ V1 `* x* e/ A2 ]# p m_Item[m_dwPos].nIndex = nIndex;
6 I9 ^" E) r6 D( N2 W m_Item[m_dwPos].dwId = m_dwPos;! @ g+ W/ Z I; Z( I
m_dwPos++;
- s- z* C: I7 l, ~}
! X7 t+ E8 m( {+ o7 g1 uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
s' T8 B8 U. {: j3 R4 |) f{
- B2 b6 X e9 |% l for (int i=0;i<MAX_INVENTORY;i++)* q' I4 {* T0 [, ]3 M
{
* D- i( n0 N8 w* L0 |$ R, u: |4 @: E5 F if (m_Item.dwId == dwId)
# B, @0 [1 p) A8 V( n- s. [ {
4 k4 G: D [2 K6 }3 X return m_Item.nIndex;
6 i P1 ~3 t# v V6 L i5 A* h }" F# z$ H. o8 h3 ~5 v) C- Z
}
v. X: p, l4 K( O' e) S3 _/ ~ return 255;
* ^7 y. w+ @- b2 Y3 Z7 [4 O}
+ ? X4 \( u' y" }! |4 {7 gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! i! M1 R6 \7 |* o" d9 x
{
/ k# R" n5 O& \6 v BYTE nTmp = 0;& {1 [/ z) q) R! O& @# i
bool bDest = false,bSrc = false;9 v1 l9 V) {" ]& r
for (int i=0;i<MAX_INVENTORY;i++)
; m- l2 W9 I2 k6 l; u) j {9 i+ \& R& [+ l9 M: R! `
if (dwSrcId == m_Item.dwId)
9 l5 i( D4 u# R' C* G+ Q1 A {
( a; O% M% y2 W+ t0 `- {; w1 D //id相等 则 改变对应的dest和src2 a1 [" O1 M, S. b6 G' T' S
nTmp = m_Item.nIndex;. Q Y! `! n: W: h9 t9 m
m_Item.nIndex = dest;
0 {9 t: q' Z2 O3 ~8 W, H }+ w3 r9 I! M: U! G
}
1 j k1 ~' U9 l //临时数据保存完毕,交换开始
( l+ K- S/ L' B0 A% A2 e4 q for (int i=0;i<MAX_INVENTORY;i++)) N+ N1 Y# |8 v1 |6 h' m' e! s1 @
{
& a, z1 R* Z9 x+ s6 [& H if (dest == m_Item.nIndex); F6 W. s. ^' @
{
5 a8 R1 K! v/ G- i! I- o //id相等 则 改变对应的dest和src
0 r& {$ q: P! ?( A9 l# g% V m_Item.nIndex = nTmp;
# n6 N' P+ h I7 v3 S }
( i6 X4 b7 F4 s$ N } Z; F, Y- M: Z7 r* M! l
} _9 e( e7 i% u, J
};
3 ?/ \, z. h+ g ~7 h-------------------------------------------------------------------------
/ g0 S1 q, i" ~+ R- j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 e* A b+ t/ o5 D: O5 `1 P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 c; O! V+ U$ n: o# t紧靠其上添加:
) a2 Q6 Y9 R% S: n( @8 sif( pWndBase == &m_wndMenu )+ E/ d$ {4 u; c; S8 M8 q
{, {" l- b! c) O9 ^- L1 ^( D7 t
switch( nID ): \* `* t( k! s& M0 }
{1 s+ w. _% Z. L( d' H0 c6 _, t5 Z
case 2:
1 J( X9 }3 v3 I; Y {& X: p5 I! v: Y, x1 k5 g" Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( t* H( V1 v) }: t: c+ p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 ]$ C& ^" y/ Z* r
{
4 u) N7 e6 O- A break;. B) q0 `8 P0 ?: a( |0 ~5 N, S Z
}- A3 |( H" K0 u# t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 R* s' G) ]* m6 u) K8 K
{
7 c7 w% t. S0 l6 I( x8 z' I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ O, H3 I) ^1 x* X- N# e2 V if( !pItemElem ). Q2 b c5 ?% n% P2 [0 ~% |3 g* _
continue;; X8 C5 F% c9 s& M; _
if(pItemElem->GetExtra() > 0)
% P5 x& f: B2 F7 {8 ] continue;: M# F' [9 ]' c% j/ w- P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! ~. o J9 p1 i' V9 T2 w continue;
, v/ K6 l* o$ r3 L' }2 A# d. f1 }) } if( g_pPlayer->IsUsing( pItemElem ) )1 W6 B- [7 C; C# n* O3 T4 k3 a
continue;
% e' _& H+ J5 y" O4 X' g if( pItemElem->IsUndestructable() == TRUE )3 F% W" D- M6 R$ r
{. y. Q, F0 f; t; L3 c- D% N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 P0 X/ H1 N8 g) X continue;
9 f, Z- e* J" ~/ b }! O5 l. k6 \0 r1 F, [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, w% E% q+ A$ A+ s' `& l' P! g }
! V9 \( _( c! W* g' r break;
6 C5 O' W# L) ]# B) X6 u }0 S2 V1 s" v r/ m |/ [
case 1:
, Y: k& h: j' X8 g( ~ {
! \6 N ^- L, x5 I5 v- r$ ^6 F% | X //整理背包
D/ h# C* _/ u //////////////////////////////////////////////////////////////////////////
+ l& K' P% O0 X% H# v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 y( x3 _6 Z" n9 n2 V4 S' G
//////////////////////////////////////////////////////////////////////////# b2 s W5 G3 J( d
//////////////////////////////////////////////////////////////////////////
7 A) q- M0 n2 ?4 P% | CInventorySort* pInvSort = new CInventorySort;; k S6 j( f5 L, z
vector <sItem> vItem;
0 e# ]( k6 ?$ L4 U2 ` vItem.resize(MAX_INVENTORY);//初始化大小6 l! Z8 l$ H& K1 L8 h, R4 V
//////////////////////////////////////////////////////////////////////////, g0 w% S' _6 |, ^
//填充数据/ m3 j, F2 f; s; I) u( O o
for (int i=0;i<MAX_INVENTORY;i++)2 V$ d$ P: m4 n9 c7 S% T
{
5 S- w0 F. R* G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) Y: u9 R9 { v7 d y: H0 h& A if (!pItemElem)
7 D- ?, u' n3 }7 J+ q9 f. Q {
- D* K0 ?* g2 m4 X1 f$ B vItem.dwKind2 = 0xffffffff;) m& r! w+ E2 S5 H& A8 ~
vItem.dwItemId = 0xffffffff;; v' u W* w; l! }) ~ o
vItem.nIndex = i;
% a4 A5 L; J8 R* B0 A }else {
8 ^! h, i/ t! @/ y. E c ItemProp* pProp = pItemElem->GetProp();
5 A& R; T6 P! z! b7 Q0 b vItem.dwKind2 = pProp->dwItemKind2;
% b J1 N9 R e4 Z: c vItem.dwItemId = pItemElem->m_dwItemId;
; P/ L9 m# t4 i' K3 k0 ~ vItem.nIndex = i;' Z( V4 ]2 P J) c/ [' D
}
5 I' ^" g' c4 \% u( J# q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* I* H W& f% q$ B1 P7 S! v }
! @7 J7 s# j' s //////////////////////////////////////////////////////////////////////////2 G& ~8 t! f/ }3 B& |# `$ v
sort(vItem.begin(),vItem.end());//排序
, ^9 y( {2 i& _7 u" V4 I$ ] //////////////////////////////////////////////////////////////////////////
- r1 [& N) S5 W# | //交换* z1 z9 ?- ]: e: G$ r2 u; ~2 }
for (size_t i=0;i<vItem.size();i++)& q5 Y- E6 X/ N0 ~9 Z( R
{: V" K9 A/ Y4 d+ H# K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 ^: m+ ^6 F. B; z
pInvSort->Add(vItem.nIndex);
- L: d$ c5 m+ h1 { z# u }" H1 d( ~2 X$ I0 X
BYTE nDestPos = 0;, Q# s/ [' ]8 V- \; u' K
for (int i=0;i<MAX_INVENTORY;i++)7 r. U1 ~, A- M; j( O' \5 W! [
{$ ]' q4 y! d$ p( h' s- |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 o" C: v1 U1 K) n+ }. T' ^- W
if (pItemElem)
: E9 U( t) M4 S( p) ~ {
& L6 e2 p5 I+ `+ _4 E8 L' s( Z if (IsUsingItem(pItemElem))
4 P) r# p9 U, l( g# U. g {- t8 }0 Y8 I% g! a. Y
//这个位置无法放3 O" e6 w) U- S2 E+ D
nDestPos++;$ E' h. }( s" K8 V5 G4 S' {
}
' J7 Q2 m+ G: X7 Y! R, T }
4 i* F$ j1 ?+ o% n$ J; b BYTE nSrc = pInvSort->GetItemSrc(i);
! L8 b! } \$ H/ ?) _ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, c6 E" j; P1 k- k, X if (pItemElem)( N4 R9 d1 m' O1 ]# J* S
{
G8 R/ g+ O. |4 [1 t( R: O if (IsUsingItem(pItemElem))
8 L' a, u; V/ x+ K9 Z' x1 T {3 w- O P, b$ E' d0 v/ ]2 `7 h. |
//这个道具无法移动,跳过2 P+ `$ M; G8 h0 Q+ f7 p. q
continue;2 `* o; o6 M2 r
}- w T+ g2 F6 j }
}else{
* ^" k: i+ L5 g- p0 b5 X) D //空位置 不用动" E; {& E& \$ Z% x. @) b
continue;
7 \. G ]* F+ o5 _! P) j7 o$ T$ r; ? }1 k4 D0 b: \. k# m2 L& f* N' C+ k
//////////////////////////////////////////////////////////////////////////
6 e% b# G# w: l( L //开始移动
7 U- P/ P9 D7 z+ ~/ Z( i if (nSrc == nDestPos)
$ x. o1 Y7 H" B# L6 q {2 J7 l' c' M: |0 p ?
//原地不动
6 G7 I7 t+ Q' `9 ^( T) K6 a- u nDestPos++;
8 _8 E0 @/ t. Q/ q K$ C continue;
2 Q3 C8 ?' a& J }
. q6 Y7 c, t/ H" B pInvSort->MoveItem(i,nDestPos);7 N/ j4 c* O: [+ ?- f
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 K" g2 ~1 X* Z$ x Sleep(5);
, Y$ h6 H: ^0 o. B //Error("移动 - %d->%d",nSrc,nDestPos);5 r4 _* N1 E" |+ @9 M, D
nDestPos++;5 P0 r, [' f/ h. u. ]2 j/ r
}
- f! u# a9 v# l1 R //取第一个元素的信息1 X9 e" A% x; @0 }: V! y T
/*/ s' k7 F, i' K
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" E1 F( C* U0 k
{
/ }$ q* ?9 `, N+ R/ j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; I3 S! Y8 ^" X% O: N4 ^. S) d% X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); n: h% l3 V: s$ R1 t/ n m7 U6 \
}% h: m1 [: s2 w4 S2 k. [
*/( h/ h2 X0 `8 D6 e! ?% X( C
//////////////////////////////////////////////////////////////////////////
5 X! D2 o8 ?" z% K break;( v/ j2 m7 M& S9 J0 [2 L4 s4 q1 A, k) u
}5 @+ C. i; I+ L6 m; l9 ?; R
} 8 }* g0 _, i4 M0 \1 U
}
* ?' h' G4 d# mm_wndMenu.SetVisible(FALSE);& ~, M8 g k6 _7 D
& H( @: N6 v+ S3 j% f
--------------------------------------------------------------------------------------------------------2 x2 W2 _# k+ |, |9 N4 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" V. [- U* p9 x. h% O; s8 l{+ `3 I% ~0 w( N8 l0 b! E
BaseMouseCursor();6 j/ i8 |/ B/ H7 N6 g
}6 o- G# }% _3 [5 f
在其下添加:
p9 h3 J" L+ U" I% t+ T/ k8 N. Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 \1 y! Z1 A D0 a9 H
{
% c5 ~2 L% Q8 K x0 r; Zm_wndMenu.DeleteAllMenu();; `2 |) q5 i; Y0 G
m_wndMenu.CreateMenu(this);" b1 w- `" M/ v& |7 K3 n ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; J6 g4 F5 N8 d0 I. w; q6 ^' }
q* I- I. \& l9 o; N. P1 {! e1 Pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% o1 t9 |3 ?5 y) U
{2 D) ^2 o- J! M* G! d
//P以上级别才可以删除所有道具' A" I, I. O7 o2 J+ T6 D/ ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 v6 ^+ S: H% X! U
}
4 O6 g5 i% `$ S. k$ }m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' d/ q7 |9 H* m6 s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& t7 J" h! G7 Z% _5 A
m_wndMenu.SetFocus();1 S6 A$ C' Y3 p/ ~ { x8 F0 B
}
- K9 p& i* u3 u( o k------------------------------------------------------------------------------------------------------------
, }7 p: R0 p# G! C. S9 [*************************
2 A, G4 s4 `8 J' n5 gWndField.h文件- S1 q3 Q. h0 @2 ^% E
*************************# d! t! p. z* u0 N6 c$ Q: y
搜索:BOOL m_bReport;" B$ I9 W7 ^/ t! `
其后添加:& Z: X% N' r. o. |) E
CWndMenu m_wndMenu;
+ N* d% a$ W5 e3 Y6 t" O" ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" c" o5 \; D0 F4 q u3 T
其后添加:. j X, s( p0 ~' g+ ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ W' P G: b: ?5 n6 I- k
7 q- O- Z0 B8 o7 d7 f# S9 j
; U) l2 _% U2 F1 g |
|