|
|
源文件中_Interface文件夹下WndField.cpp文件- F3 t& n. }, L( A4 t. P0 ^0 d
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 u# Q& Q# ?4 J$ D `' D& b4 Q* s7 @: Q
struct sItem
) i, ^. H% j# w) C& a{: f5 M ^9 O. v
DWORD dwId;
, @0 Y) H+ E( ? DDWORD dwKind2;. Z, f9 F' s; ? F1 N0 E
DWORD dwItemId;4 x5 ^& r6 A: S* S+ Q+ u
BYTE nIndex;1 k9 i) x( ~! b; R% M' v0 o! r
sItem(){3 ]+ u3 Z8 ?6 l' i4 U
dwId = dwKind2 = dwItemId = nIndex = 0;1 G, P, z0 ]$ ^4 A
}
/ X5 A X8 l% A0 s% ?bool operator < (const sItem p2)
) q; H8 o" _+ k' P* D; E- L- e{$ J. z' N9 a0 V$ C$ l: G
if (dwKind2 == p2.dwKind2)
9 I1 B7 h( F* z# U3 S# |1 U {" g9 ]" V9 F/ F+ a4 t
return dwItemId < p2.dwItemId;; M) X M i: ^- y9 V! c+ _
}else{
9 Q. R) W- e& i return dwKind2 < p2.dwKind2;
2 Y6 ?( ?, C. z7 o( i8 t }( p+ e) s( Y& u) M( g9 |) ]" z6 Z
}9 X( l3 m; M- [3 r
};
! n4 m1 r; ~6 P- Tclass CInventorySort8 E' r, L& w# t" r9 f
{& {$ A8 q( L: L p$ x
public:
3 M! ?/ e% b" D8 P- o' N( E+ [CInventorySort(), d" J, |- [5 X0 L
{8 U1 q% j% b5 |* l1 ?) h
m_dwPos = 0;
3 x& F9 W/ P; N8 y$ Q" h/ r}
. m+ \; p, I3 Y t, g~CInventorySort(){}
, ^1 \9 {% F: `private:
6 ]3 f. N" M8 |) a( xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 S, ]/ S6 I/ s- oDWORD m_dwPos;/ G$ h( B# n( Q7 T
public:
8 v5 m' Q5 D/ Pvoid Add(BYTE nIndex)
7 V4 g1 |# \* R- F, E0 I& h{
r6 G2 } W8 R' b2 t" h if (m_dwPos >= MAX_INVENTORY)' L0 N7 ^2 F1 F" a1 R3 \( @
{
}+ z1 L, L. |% b2 t& I% y return;; q: V, T$ e4 l2 W0 F3 ]5 c" r% h
}" `! [: G# f( F$ y z
m_Item[m_dwPos].nIndex = nIndex;
' G- Q5 _) U4 A/ E, r m_Item[m_dwPos].dwId = m_dwPos;2 r, U9 R9 h; I; }
m_dwPos++;
3 X9 r, x4 }8 y, ?) M! U w}
: E) r4 s* T4 Z( MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* E. _/ }7 u: {% o9 D2 i4 h6 Z& s
{
2 V0 W: ~3 b* I( N, c% p) e for (int i=0;i<MAX_INVENTORY;i++)+ ` A6 l+ R% L
{
0 H: t! l2 ~" |2 p4 Z5 P+ m7 K4 Y if (m_Item.dwId == dwId)* |# r! n( J. A7 C
{+ x7 x, }/ S, V9 a! b" E) T/ `& p
return m_Item.nIndex;+ l- ~- I9 M" Z0 ] d( T W2 V
}
B" |: C+ L. c' D }% h0 c: n# |4 H- B
return 255;
$ T2 g t) O4 L4 u/ j}: [+ n# T9 r3 z) u! Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; H1 q7 ?5 _- Z- c{) F! j, {4 h) D, _5 {
BYTE nTmp = 0;
: [+ v$ @9 d" V A) e( [ bool bDest = false,bSrc = false;
- W( d, |* H- H9 q for (int i=0;i<MAX_INVENTORY;i++)9 \- s" j, ]4 P% X
{4 m8 y1 ` V/ o u: \% u
if (dwSrcId == m_Item.dwId)& O: P: i( Z" s' N, P
{
, |8 b) a! ]4 \ //id相等 则 改变对应的dest和src4 \! C: u; B8 p1 n: A+ C) F7 r
nTmp = m_Item.nIndex;
8 U! t; F* c4 Y7 N m_Item.nIndex = dest;0 W" e0 q$ t4 P* @" Z, n- e# U( ^
}, S4 W! I, S( E! u; V5 f$ v
}
) h" Y& E; b) t, o+ s& t% A5 \/ k4 j //临时数据保存完毕,交换开始4 m1 y [; w$ t# ]
for (int i=0;i<MAX_INVENTORY;i++)* i* I4 i7 Z4 @6 _, S, P
{; y- I% U3 e3 R- d
if (dest == m_Item.nIndex)$ Z+ H4 ^# p' d3 r1 k
{ H2 G0 b2 ?! K1 V7 ]# ~
//id相等 则 改变对应的dest和src. t9 c m# K: }( _4 d" L
m_Item.nIndex = nTmp;
7 s" [3 ~ T4 ?9 J2 Q1 k }; R4 n' p [2 Y. ^% y8 a9 ?
}
( A, u/ M5 V( F+ P3 S}
/ o5 N' n+ L1 m5 ?" c Y};
' |5 M, C) }2 g* I6 f-------------------------------------------------------------------------2 i. V8 r: O4 E* Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). }3 q9 K; W0 y# d" D* B: Q: H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& e( b' u2 |' ^' y" A
紧靠其上添加:7 Z, J* j0 Q; t" ^, d& H2 R
if( pWndBase == &m_wndMenu )$ k6 t( o( h2 F' Z" n# A
{
' w j( I# A6 G; I% y switch( nID )
' W% R! F7 v. T( m {
8 i7 k* \8 p+ a( f4 \ case 2:/ v! W6 x3 [$ b; Q
{& _! f4 I8 l. G* [' M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# P1 p* i0 X5 g2 b- M4 L C2 h% v
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- b& H/ s6 x3 {7 r
{
4 W, j3 i# N+ n2 h+ A% y break;8 o& z$ ]7 X* b- O3 l
}
5 x' i, \, ]: \" x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 i; D7 s7 r' V% }. \3 Z& C6 H {
* y6 J# F' K; a: T. }. ?% T) z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' L. \" v' V" [1 @! Q if( !pItemElem )
3 V0 N. p+ D6 w( h, g m continue;, Q, T4 M3 `* R3 h" X, o
if(pItemElem->GetExtra() > 0)
+ W; x! z% e9 s continue;
2 N3 ^ k, a; b0 O ^. T, y4 p if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 A+ @( \# @5 f+ c% w/ n3 C: D6 {* I continue;! j* u& }% _2 t0 \2 F
if( g_pPlayer->IsUsing( pItemElem ) )! A# `1 D8 f+ c# L
continue;
0 n( r" m- h9 b2 o, S- a" C2 K6 F( c5 m if( pItemElem->IsUndestructable() == TRUE )
5 t- y* r& ~: W {7 z3 }' R {; d! T, u/ L p' a5 P6 u( b# C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 Z- Z) ~# E7 Q3 G continue;, V' B0 d$ j6 {9 x: _/ x# t
}
8 A/ l% W+ m I! ^- q5 _ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* ~5 u' E4 ~0 Z; o2 G9 w1 v }% t: w z9 ]# p7 z: C
break;9 b7 k5 x0 V) C$ v
}
3 V' ?6 r% H7 H# M( j, ]8 Q+ g case 1:* g2 k z+ g! U5 F! S! P
{ v ^1 P0 o3 T8 H$ w9 @4 D
//整理背包
* r, f" ]3 H7 V+ D: w% i //////////////////////////////////////////////////////////////////////////. P; J- g1 ^ j, N! P( P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ G% o8 _8 ^) ]. u2 }, N) c% x% ]
//////////////////////////////////////////////////////////////////////////7 T9 I3 c8 Y. _$ z( e
//////////////////////////////////////////////////////////////////////////0 I4 n) m- I/ X' o) _3 y; E7 e. _4 `
CInventorySort* pInvSort = new CInventorySort;! Q; B$ {5 _5 z7 e6 s( G
vector <sItem> vItem;
0 G% `7 O! s/ E4 a% C r vItem.resize(MAX_INVENTORY);//初始化大小
, R5 R) v# G. Q //////////////////////////////////////////////////////////////////////////
9 i% i$ \' l( ]: G4 w //填充数据- e; I! I- o. M6 \, a" y- c" {
for (int i=0;i<MAX_INVENTORY;i++)0 j" a0 Y2 d% E
{
5 P* I5 X8 `1 v4 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ k) }: Z; D# s4 ?, J if (!pItemElem)% q, F% ]- P7 ?3 L' q7 K* D
{
) ?: o/ Y3 O) Q vItem.dwKind2 = 0xffffffff;
4 p# t! B5 P' t$ Q% C6 K/ A6 B vItem.dwItemId = 0xffffffff;5 A$ C5 n' P3 n# K( Q/ n1 H1 i
vItem.nIndex = i;
& E3 P7 P. k Z. D$ A# K. m }else {( y! X( @* S: D5 B9 V
ItemProp* pProp = pItemElem->GetProp();
% H3 I. |' `0 @/ U9 ]& J+ A) N" X vItem.dwKind2 = pProp->dwItemKind2;6 Y0 f: W; ]1 _
vItem.dwItemId = pItemElem->m_dwItemId;
5 _4 l6 x7 l. ?% K I vItem.nIndex = i; O- o5 {& l# q* I/ A- n
}) j# U, d. D8 @- M4 f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- J* z7 \- T5 ]' @- r
}
' a( c& [7 ?) a* o Y1 g% s; I* ~# ? //////////////////////////////////////////////////////////////////////////
7 d4 }9 e* x1 u" e) I7 o sort(vItem.begin(),vItem.end());//排序
( c( T F! z! | A6 t/ K5 O: k //////////////////////////////////////////////////////////////////////////
% U3 k4 R9 u) ]* R //交换
7 O2 @4 ~1 ?* F$ h4 \ for (size_t i=0;i<vItem.size();i++)( V8 }7 \ c" e) ?+ t) ]3 Y' n! ~* F
{, N% }) D' X7 D% E6 f8 T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" C+ G) w9 j+ j n, D" R1 t pInvSort->Add(vItem.nIndex);
1 J& c, l6 G, i }
4 v9 B$ W( x7 s2 h0 Z BYTE nDestPos = 0;. n/ S* P3 k6 Q0 T
for (int i=0;i<MAX_INVENTORY;i++)
/ H; @' F; ~( u3 G# X6 C {8 `' [: ^$ L! @6 {7 P, i) x8 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ t0 A3 o. ?, i3 |, g
if (pItemElem)
9 q" ~$ ^* U: ?; F! Z' Q, I {- c) h! I; _7 u8 O/ O# ]
if (IsUsingItem(pItemElem))! H1 t% ?8 D0 o' v2 M
{
( G% s; A, M- E& A' Y5 e: ~0 U //这个位置无法放- R9 R+ ?3 j7 Z; U2 R W" z
nDestPos++;4 h) ^8 S8 g3 R' R9 S
}
1 P1 Z0 n% Q! ?. b6 z5 _ }0 A9 [! C% g2 i, B) \$ o
BYTE nSrc = pInvSort->GetItemSrc(i);+ x5 M+ t9 K8 Z5 p% W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% D4 f# N: h/ K% e% C
if (pItemElem)
7 }, x& R3 p0 f1 E$ }) I+ R W/ X, [ {
3 _( C8 F3 ^, o: |0 @0 Y3 x if (IsUsingItem(pItemElem))7 q" V* a5 {+ I4 B& G! G
{, j# I" W, w4 _" t! z4 l
//这个道具无法移动,跳过
" i+ t3 a; T8 c continue;2 ~+ M& R, O( M: h
}
9 Z6 [# j' y8 [6 m* W }else{
* C6 G# S* K. {6 m8 `" a- H //空位置 不用动
9 u7 w ?. p3 L* c2 J! R continue;
4 ?- x A; T2 v+ B( @ }
4 A$ C& N6 h, V /////////////////////////////////////////////////////////////////////////// N+ @+ ?1 u3 v, }# P$ C7 G& ?$ t
//开始移动5 S4 p e9 }# W/ P0 m) f
if (nSrc == nDestPos)
3 H( K9 }7 c% J( m+ P {
3 j( r! c3 l* K# A8 j8 X* N //原地不动/ \$ z d( I0 B
nDestPos++;
& G' p% S/ j. x! V9 _" }, B/ h' A continue;
$ d" y: v! r) }" c3 N* |, q }) k( Y9 |) n# n( |+ n0 T+ P
pInvSort->MoveItem(i,nDestPos);
/ m6 U2 ?7 f# o3 ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 J/ i9 E# p5 o4 c( g
Sleep(5);
" _& w! B& t9 X* [/ q* H //Error("移动 - %d->%d",nSrc,nDestPos);
7 e1 [ [$ G% c8 `1 P4 h9 s1 c0 j nDestPos++;
3 B2 ?0 ~* E# _5 _3 N% g2 } }0 k$ h d; E$ `7 s- {+ i
//取第一个元素的信息
8 i) D, m8 \( h& f# g /*! Y+ | _3 L+ t+ j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 j4 z( a2 |0 z' I1 P& p) `9 X {7 N# c4 m% S! h+ t0 X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: ^( z8 |/ u" a) G% F3 E% H% Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* ^6 T' l* y7 A6 i1 Q/ w8 Y& o5 A }+ ]8 F8 Z! S. N
*/: l8 u2 j- S/ [+ e
//////////////////////////////////////////////////////////////////////////- K$ Q6 P- k' c0 p3 }# @6 X
break;
1 e! s8 d6 }$ c- r }
" w; @5 k: @, ]% V2 i }
" o. P( J0 m# ]9 M( }9 h( {}0 D8 o2 V( D6 u$ p
m_wndMenu.SetVisible(FALSE);3 v2 y- c7 W& W, M# f
* |9 e7 ?0 U/ B9 r2 O. {
--------------------------------------------------------------------------------------------------------% f3 b9 u7 O( t1 a+ L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& |& p! v; D8 i/ S4 G# l
{
' J7 l+ ?' p8 r8 U% R' m. lBaseMouseCursor();. g" A, D2 C# C! }( p8 ?) C
}' u0 h3 x) J7 u- E6 u
在其下添加:
$ m. e1 l9 w5 W4 \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" ?8 C+ y+ [# o* N& m+ M+ a
{
( ]( v# h6 S! {: c" E8 D+ Qm_wndMenu.DeleteAllMenu();' d1 Z7 y7 x6 D. I& g
m_wndMenu.CreateMenu(this);/ N* |/ f- J. \. G8 H, G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* ? P* Q: ]* a0 E, r6 \+ e3 v" b
1 t+ Q1 h6 x" G4 f: z2 w5 F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 ?8 J: f, I' ~( Y- j' t
{. r, |5 E- `9 Z5 O! f R: Y
//P以上级别才可以删除所有道具( v, c, ]) n9 i; Y2 F# W. \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; g$ C5 O* q+ I, ~: w$ x}
" z- W, \" `# E) V5 qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- z, y8 Z: x* e2 F& g! L+ E
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 Y/ q% [' v" \, z8 T8 zm_wndMenu.SetFocus();, c" l/ \, }' z7 ]3 M: T
}7 g/ o2 d6 e% o) i8 a2 }: }
------------------------------------------------------------------------------------------------------------
$ |# G" O8 b9 ?4 O*************************0 a: s: z5 Y4 ~$ w
WndField.h文件' H6 G! T7 i8 j
*************************
" n/ T3 o9 O8 ?2 e2 h( e" D. X% I; R. L搜索:BOOL m_bReport;
# i; a( x& R- X其后添加:
- [' b( u, G0 u7 y7 b9 q/ RCWndMenu m_wndMenu;
+ u i% S! E/ M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 e* p- _* v, k! ]: a其后添加:
' B, G9 i4 c3 Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);- H% I6 i) W! n
- O3 |8 T' d. o9 `2 ^4 Z1 d% Z
/ z [+ U L$ V$ Y5 ?7 ]
|
|