|
|
源文件中_Interface文件夹下WndField.cpp文件
% g1 G4 E" L; y% r3 M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ q6 s: T4 y) t: \
+ t+ y% ]1 f# b0 mstruct sItem
5 D' q: h1 }7 w4 S+ I2 U R# Z{
, I0 x/ [; c' b* I ?, wDWORD dwId;9 c4 M; I p. m' z1 W
DWORD dwKind2;' r0 {+ m U5 ^0 s2 w' Q
DWORD dwItemId;
8 C i3 ^7 U. OBYTE nIndex;# } Z4 K, q- M. Y1 |4 y. s" X
sItem(){
1 H8 ~4 W6 Y, a" ^. A. ? dwId = dwKind2 = dwItemId = nIndex = 0;/ l( \/ @9 `, |! l3 n
}
: S% l: X# j+ ?4 n V; x/ Hbool operator < (const sItem p2)
8 o: ^: ~1 j1 C{
9 N9 `, n9 m8 n7 h+ o0 S7 K if (dwKind2 == p2.dwKind2)* I" t, X) |4 z) R: } d
{
! Y0 k& h2 h( A5 R+ O7 C2 [3 H return dwItemId < p2.dwItemId;
1 r }5 C' m" x. N8 x {6 x }else{% U' K, T' o% O3 H5 v2 {
return dwKind2 < p2.dwKind2;+ O: o( M- J( n. c8 \4 n) j E
}! k/ [( c% x, W; w
}
5 ^% m, i" }* M& l3 F};- K7 a. W2 ?$ i, l% A
class CInventorySort
3 x+ `& H7 D2 W: E& G, Y w{
7 d, b! B0 z2 [1 _public:
2 l& K+ \! [3 d! NCInventorySort()
; U4 ~, h2 J6 H( ]: v- p. z{; P% V/ Z; d6 Q; p( R# s. |9 S
m_dwPos = 0;
) w5 s% l. e5 ^- p+ [. e}
% D! i4 }1 R1 ~- G~CInventorySort(){}- W# ]2 f' K! g+ S
private:) Y1 C2 B5 h3 @4 a! U' G$ x
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; t+ M- c+ t- H9 g; s0 \DWORD m_dwPos;# i5 }' J* E5 u5 m- c
public:
7 V; S- R7 F& @0 p' U9 dvoid Add(BYTE nIndex) t1 H0 O- x. u' K1 A
{% ^3 S8 J9 {9 }% R! S5 n$ `
if (m_dwPos >= MAX_INVENTORY)
6 L# @7 O% z% v. l5 K p {
' @6 ^2 C( s+ R: \2 D: m1 [' y return;
6 ^. n, N( b, N8 d X+ H; e }
6 p2 b2 p, [9 O m_Item[m_dwPos].nIndex = nIndex;
. l+ D3 k& a" M& }& |2 w m_Item[m_dwPos].dwId = m_dwPos;
9 u! h" h3 P+ F+ s m_dwPos++;
- B) z7 n$ m0 x}9 `1 L7 Y7 }! i+ k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 T' Q; t! e2 w2 S$ K2 k" e
{
5 }/ v8 I* c6 p/ I/ X7 {( k for (int i=0;i<MAX_INVENTORY;i++). L2 G) S9 x4 j# W- }0 C e5 N2 r
{
# K. h- U$ u+ C2 C9 |4 | if (m_Item.dwId == dwId)* A% c9 { k% A7 O$ |6 R, Y
{
! B; \: }9 H! D5 ]- [8 |$ h" ~5 q+ { return m_Item.nIndex;
/ @) [7 i. g' | \2 H, o+ v }
4 j7 p( @# a7 E* f. e6 Z$ u* R }# ]3 G. `- R3 |% i
return 255; \' }7 l& n, }& w! S3 {. T8 i
}
, m! Q- J4 y/ v, rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! w" u- x4 ]$ v, d d+ t6 C7 x
{
( M- l# ^9 e9 M/ R BYTE nTmp = 0;
1 z; h- \; q6 \ bool bDest = false,bSrc = false;8 Z% U7 @1 K9 q$ {, D' p/ O2 l Z
for (int i=0;i<MAX_INVENTORY;i++)) C9 r9 ?! W5 `# S1 G, C! n1 \
{
% W( ]2 q( p: ?/ o/ |5 o& c2 ^4 c if (dwSrcId == m_Item.dwId)
( \1 u* C5 O- {* G {# ], l# Q/ @" g- d. Z0 g! x
//id相等 则 改变对应的dest和src+ h v4 Z) A) k% g
nTmp = m_Item.nIndex;
# L3 D4 x5 }: I5 Z3 F0 U m_Item.nIndex = dest;
. O: S( W# B7 ^4 | }
' `8 G* i- W2 M/ o }9 X$ a- B$ z5 B) C; z" u
//临时数据保存完毕,交换开始
: s) N, |) B( A# R for (int i=0;i<MAX_INVENTORY;i++); Y" y# e: {: `0 {2 L; r
{9 t4 Q, l T _2 G
if (dest == m_Item.nIndex)1 z8 o0 y% ^0 }" K- W5 j9 m4 T
{' G' s2 k1 z' T6 G5 M6 U$ f
//id相等 则 改变对应的dest和src+ t: @& I3 Y, E+ A p9 {7 w
m_Item.nIndex = nTmp;
0 ]' s4 ^ e$ X0 Q }7 R# |5 @' X9 m
}
/ P" U/ A: `! ^1 o}1 p6 V) t0 O3 O, o
};' l% Y: w" x6 J/ e" Z* x
-------------------------------------------------------------------------
& r0 V8 H0 Y8 K1 I) J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( C% ]3 ?, B. W$ @" w( y$ R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* Q5 X7 @) P8 S# k1 j- r紧靠其上添加:( h; s7 c; p2 A1 V" j) c
if( pWndBase == &m_wndMenu )
: J: m) w( \$ O- x' a3 p2 s{
. Z; O# N9 p8 b/ S7 |+ o5 K switch( nID )
. ?. [8 J- ?2 p7 [1 S' {3 Y3 T {
0 |( ?. Q9 C2 h. W) `$ t case 2:, M; e, j; y, e) I. B0 V
{( y7 X6 Q m5 s$ q: ~; \" v' k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- a/ y$ o! J+ |7 ]6 ?) @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; R( V9 b/ b/ J# e {- M$ @: z6 Z8 `( h% F
break;
7 F7 G% J& A+ A' w8 a* p: R/ U }) B3 K. H" ~( q9 i
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; |+ O) L% x, P$ I3 m {
- w% Y" }+ g8 S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 q1 k- a) m" s0 G+ y if( !pItemElem )
/ g. Y" u3 F r continue;# F& I+ R! ~4 ^" s
if(pItemElem->GetExtra() > 0)5 w y# f# A1 }) w% x9 `5 f5 i
continue;
! G8 |, i& a7 v2 h7 W- | if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . E' V! x( s* l0 @0 r
continue;0 L$ l* w1 c8 z9 P( g
if( g_pPlayer->IsUsing( pItemElem ) ): o, l& j+ f r1 {: _ k( j
continue;
/ b9 K- o: l( B7 e1 w4 U- W8 u if( pItemElem->IsUndestructable() == TRUE )" w& @. C0 X1 d7 k4 N3 M! u
{
+ i' L3 N5 w$ n2 M- C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& C' m& B2 W0 E8 |4 d' o
continue;+ d% |6 K( T. I9 W3 I& M
}: [/ L9 k5 n# ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 L. E5 Y9 n3 Y6 v4 y g" ^0 R
}: ^. ^' a$ l% H
break;3 N6 H' w- R4 O& {
}
# a+ |1 o' i; \4 E1 R: N5 D! R case 1:- d0 c: u/ \& F4 V5 j
{0 n9 Z. k5 i5 `+ p( J+ K- V
//整理背包
- i3 C$ X$ w f$ r, T //////////////////////////////////////////////////////////////////////////' L( U7 e1 I$ f* X5 f) a( X/ R! X. H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' ?3 q8 O) u7 r9 v0 w1 w' M
//////////////////////////////////////////////////////////////////////////
- Z4 D" ~+ {, L* ? //////////////////////////////////////////////////////////////////////////
* z3 p! X+ @( t, \2 N ]1 r% ` CInventorySort* pInvSort = new CInventorySort;7 G, p" c# o H4 x% f
vector <sItem> vItem;0 A& V! l5 M1 H3 ~' Y6 A
vItem.resize(MAX_INVENTORY);//初始化大小
; x& \0 Q6 `6 w" b9 L( F0 {4 `6 B3 H //////////////////////////////////////////////////////////////////////////$ a- v4 {0 u+ U! D# R- S7 [* B6 _
//填充数据
3 E# |1 |, g8 K+ [( j8 S- P for (int i=0;i<MAX_INVENTORY;i++)5 ]: _& U0 M# n/ o* j
{
8 s" U& @* Y* ?! s# b5 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) }. @& |) [. [6 S" c& Z, s
if (!pItemElem)1 b& M5 k& Y- U: O6 f1 @6 x
{0 B2 U$ D- P, @2 m9 N7 k
vItem.dwKind2 = 0xffffffff;& {# A7 `' u2 s: B) C
vItem.dwItemId = 0xffffffff;
8 j8 F" V9 p0 Z5 O7 b vItem.nIndex = i;
7 Z( J8 |! m3 `, \0 K/ h; C }else {
: t Q3 A7 M, E ItemProp* pProp = pItemElem->GetProp();" i# H2 p; i+ ?1 S4 w$ o# p' l0 A
vItem.dwKind2 = pProp->dwItemKind2;) R7 p/ {; |' E3 v4 B$ Y% I
vItem.dwItemId = pItemElem->m_dwItemId;
# d6 B) Z4 n0 Z* H+ ^6 L. o8 y vItem.nIndex = i;& E3 ]5 [3 E' Y$ ]" {% ]: ~: s4 D! {4 _
}
2 u$ m* y/ o" u& y4 A8 U //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 u) Z/ { {4 G3 ]5 J5 n
}) u1 n) s2 p W* q
////////////////////////////////////////////////////////////////////////// G( ]' |( k5 A9 C* q" K* d
sort(vItem.begin(),vItem.end());//排序2 U9 G0 E4 L1 } i2 X& v7 [$ x9 j# h$ `
//////////////////////////////////////////////////////////////////////////$ Y" R" t7 }! M
//交换# o" g4 ^! s+ N1 f) \4 q
for (size_t i=0;i<vItem.size();i++)! _; K) @2 e4 V- j( T3 B
{) S. |* @6 V# w9 h- j' E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 e0 U" k. Y2 X4 Z+ @$ T9 U pInvSort->Add(vItem.nIndex);
' ?8 [# N6 w4 V3 d+ K } d4 s: z, j8 S+ e+ k0 n
BYTE nDestPos = 0;
/ T# j+ G( b; K/ e for (int i=0;i<MAX_INVENTORY;i++) \1 G ]7 q, k3 [ ?+ O! q/ i9 a
{: J+ D8 ]" e. s+ k7 m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( W9 g# Z9 g4 F4 g7 e$ H if (pItemElem)) |+ r. A9 n$ K' Z7 b8 ] D3 s
{! } @) P( q4 p+ f4 b" R& U
if (IsUsingItem(pItemElem))" S; ?* e. |4 K
{0 E* x$ r, ]3 V" H
//这个位置无法放8 m* h8 I' C1 P9 C Q
nDestPos++;
' K, T3 ~* w% f( H' c2 [5 `4 [ }
6 W2 U; A2 E2 X$ E, H' u4 Y, D }
( `* m$ R8 @8 O BYTE nSrc = pInvSort->GetItemSrc(i);
( q# {+ P9 a% g* f& A4 _! x pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" I. b& h4 |) |' Z h if (pItemElem)
7 Q! x8 X2 w& Z! _' C {7 ^! |* }# }3 i8 k$ M0 _4 O+ h
if (IsUsingItem(pItemElem))
! Y, Q1 W$ u1 \- ^ {
" ~5 n. C9 Y) o- k //这个道具无法移动,跳过4 f, i8 o' o: f& \: w" |, O
continue;0 Y% H8 m! {. q4 S6 r
}2 H W$ x$ Y* e! X- O8 T% M
}else{
9 a' U6 ]) k/ @; { //空位置 不用动
( p0 T' R4 a7 E3 Q! r' b B3 J. { continue;7 G% A( ~6 x# s3 w. F1 P
}$ g {' p! Q- N: S; R z
//////////////////////////////////////////////////////////////////////////
* q) p% E5 @; J" ^1 v4 S //开始移动* `; ?. q+ W1 F. C5 |* m
if (nSrc == nDestPos)1 u r8 }6 o8 _# k1 \: m O9 D" _
{6 h8 c3 p; D' H
//原地不动
5 E. M" g& x( o8 K% w nDestPos++;5 ^/ A$ ~* V/ C% c7 `0 T
continue;% z( M8 o/ q+ T* W! E, O5 z0 j
}8 \. t0 N9 r6 g% @/ X% V4 n# H
pInvSort->MoveItem(i,nDestPos);9 y! U: |! h8 d0 {9 p1 K7 q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 L' ]- w4 v, U/ e2 x+ Q" E; C Sleep(5);! s' H, i! D7 E
//Error("移动 - %d->%d",nSrc,nDestPos);
' A c/ F/ E' u2 J& V nDestPos++;! O3 E$ A3 a2 {5 ~
}, P5 }/ j" A. L: [7 P
//取第一个元素的信息7 B1 E! G) ?5 j- ]: t7 E/ @
/*6 b0 N1 n" D/ ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 [: Z, F, Y1 I/ L/ x7 | {
! N+ ~; C7 O; K6 f7 D, E" h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 d3 G3 {/ w9 u' c! \# M: K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
d- Z, G% f3 C0 _% z$ O, ^3 t }; o7 L. U2 ~/ k9 q! Z7 @" {" s# x
*/
1 y" P$ M1 T2 k ////////////////////////////////////////////////////////////////////////// G2 [( ^8 I0 Z0 i `
break;# k6 ]9 Z2 v; x
}; q- S3 l" Y0 G: p' m, j! K9 L( d
} ( X( H4 `( ^1 l. U8 o E
} A' D! X# ^+ ]9 ` ?9 B1 P$ w) f
m_wndMenu.SetVisible(FALSE);0 A) |# i* o4 u0 D6 d) K( S/ S
- s; K o' b6 D7 N! h1 u3 t
--------------------------------------------------------------------------------------------------------0 q, M. T- \- T6 V5 y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 K, G8 j8 K, v+ c5 P% l{- b' e8 S) [* Z' m! G2 O5 @
BaseMouseCursor();% l8 c. d/ }0 S% _/ o$ D
}
4 I" a. m$ [- H4 j' {* r3 E; U, q5 L在其下添加:
& o& x' ~: Q9 \4 c' E) @- Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
R1 i1 N6 G \2 S' [4 B{
1 Q& D) E" r% n: A( }! ^3 B+ ?$ N# Zm_wndMenu.DeleteAllMenu();/ {3 j9 `7 b, `4 T* o
m_wndMenu.CreateMenu(this);) f: U2 E6 j7 N+ K+ a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! {, A/ M2 u" @0 }& B0 W9 q8 k2 }' N( D2 c: I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 V- A: }& Z3 G) h
{/ y F5 s$ l" M( M# s0 p( G
//P以上级别才可以删除所有道具
( Q" |7 I2 Y9 n+ f# z7 ?8 J. H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ X) @# {- x" ^
}4 P$ P* T& H6 T% J6 J, k5 d3 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 u, l. O& ] @4 W' G% am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! k9 e4 |. ?! _3 I, u$ g6 m1 q
m_wndMenu.SetFocus();
! X! e& L7 ~ S' O7 v* p}% n5 u- K' P7 Q. Q
------------------------------------------------------------------------------------------------------------
" `0 S! n" ]" j; R# O*************************
8 C$ R! G9 ?3 o0 {; w/ E; ~WndField.h文件
, ~% M9 R% G/ l/ z0 q6 Y. A9 C*************************! j; ^ q! Y8 S1 g6 y7 ~+ l
搜索:BOOL m_bReport;
" H. J+ D/ _/ T2 k# k$ p其后添加:. N' r1 t: s( j: f
CWndMenu m_wndMenu;
2 T2 N% @ J* s# Z% g) t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& C# s& o$ q1 h: u% I( h0 U0 w7 c
其后添加:
' g1 U$ c5 d/ {virtual void OnRButtonUp(UINT nFlags, CPoint point);! `, i3 i. B3 D+ k
' F6 U$ `$ }* X) x( R _1 l# O
% M1 q; C( c0 ~8 f$ E; U
|
|