|
|
源文件中_Interface文件夹下WndField.cpp文件2 ?: ~# X% m! K* O1 `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ o" P, }# u0 V& ]
0 {. o0 a2 T7 ^/ \# Pstruct sItem
8 \0 f- @; M* [5 {- N{
8 W, s! A; }" z8 Y$ U, @; `. d6 lDWORD dwId;) y$ q! q9 A2 k, \5 e
DWORD dwKind2;& R& d' `% Q% h
DWORD dwItemId;
" s% V4 U2 e! Q0 gBYTE nIndex;
. r" S; o z, a$ V _& n' usItem(){, [. T& ~7 h9 S8 W$ B! C8 [, Y
dwId = dwKind2 = dwItemId = nIndex = 0;6 {4 S g8 \- `* u' d. L
}& h6 L# e# m4 S0 ~! q
bool operator < (const sItem p2)
5 L7 w6 U( y( \8 u0 @{1 {3 [; J3 o' j$ O$ W
if (dwKind2 == p2.dwKind2)
, s- J4 Z4 l! Y H {* R6 Q& h; K a
return dwItemId < p2.dwItemId;( C* C2 G0 z% w& o d2 E0 A
}else{' a5 n5 _$ p4 }0 K9 `2 E
return dwKind2 < p2.dwKind2;0 Y' I; F! v9 E0 I b% K
}3 F8 e) O6 Z0 T3 h1 D7 M
}
1 b* V2 g; [; k9 n: g4 T5 l( R- w};
: }# ^: H. ^5 x7 _$ C$ R2 Wclass CInventorySort! w2 t# D+ ?" f0 @4 c, E9 l
{
; i6 D8 Q7 c x+ s6 v ypublic:
$ I- [0 x; t J* F% ?CInventorySort()
6 K1 x' s3 v. a! Y: u! k6 `1 N; ~9 v3 |{- Z* F' R2 V+ [3 h4 `
m_dwPos = 0;
" D2 h1 v( t" w}( X- E; c7 L' K+ c# G, I5 P
~CInventorySort(){}
% X3 n4 z4 d* Y1 @9 ?4 V) d6 c( Vprivate:! t0 M; G s6 b, K) t( m- j8 ]( @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 X+ u- y, ^+ w7 Q; W& A7 \1 vDWORD m_dwPos;
/ O! Q) X0 H$ ppublic:
+ `0 _) L4 K% ~( \# pvoid Add(BYTE nIndex)
9 k5 ?! w5 x, V5 j1 |{
" C: o4 }9 z) \ F6 b if (m_dwPos >= MAX_INVENTORY)
3 M+ G* e8 a9 a" n ] {
$ \# ]* Y3 D; T/ a return;. Q1 Y2 [ n& k0 b$ \! G
}
, b$ u6 h" m1 Y% E9 ^+ P6 E( I8 z m_Item[m_dwPos].nIndex = nIndex;
/ Z# x2 h0 S5 L W' t0 O# y3 P: U m_Item[m_dwPos].dwId = m_dwPos;1 i) ]8 E. f5 S& u# d2 Y9 m" b" L( C0 Z4 R
m_dwPos++;* W$ U4 Q( `0 q, Z+ }4 W5 L( Y; Z; C
}
7 P4 w" H+ J7 ]$ p* L( @+ M. v" Y% aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: m* }# V# i) n$ k' Q1 E) t
{7 E: V) R5 y0 Y' D) |- A
for (int i=0;i<MAX_INVENTORY;i++)
& V# G# U/ e0 V6 {" T% ] {* @' P( s" {6 D$ t( Y
if (m_Item.dwId == dwId)3 D2 c) |" [1 p' f9 x
{1 a; i! M5 H6 G/ h4 H
return m_Item.nIndex;$ W& \! R! {# i5 O* K
}. l4 L! s7 N1 b* n* i
}
. A) }/ G H1 \9 o" O ^% C return 255;
/ u# }2 }/ C! V U$ x; B6 J}9 a6 |# J, H! H) Y1 _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- O6 ^+ p1 w9 @9 h8 q9 @2 ^
{
7 D; p, G& C/ W4 ]- ]5 R BYTE nTmp = 0;5 K6 V! H! W, i. n
bool bDest = false,bSrc = false;* j; t( ]7 @1 y. F6 m' @+ ^- X5 r, Z
for (int i=0;i<MAX_INVENTORY;i++). \0 b( y% @2 g
{
) P2 @$ Q" N) P- h& H/ N; w( {2 } if (dwSrcId == m_Item.dwId): H, o8 t, U- N8 ~* l6 g
{
3 H( J; [ ~! a5 \7 d4 h //id相等 则 改变对应的dest和src8 G; ?- w" r V, x% U
nTmp = m_Item.nIndex;
. M) [* T$ s$ | t* s4 O Z m_Item.nIndex = dest;
$ }2 R! `) P# u$ J }7 N, Q' R. t' g4 j" K9 |
}
9 z6 B, Z% K( r+ M j //临时数据保存完毕,交换开始
; S6 }: @) f# ^( e5 G7 E. e; R# f" T) v for (int i=0;i<MAX_INVENTORY;i++)
! \* N4 Z' t: e! H+ l2 i; N* B {; C$ \8 O! u, |* r! R! E
if (dest == m_Item.nIndex)
, N; m* L6 y( I/ w {
9 u" [) y# E! N7 d //id相等 则 改变对应的dest和src
' b. e' G- w7 C# D( ?1 ?' N m_Item.nIndex = nTmp;5 B' z4 {# k h5 \1 {1 g! x" d
}: @2 J/ o# o, K) C
}
; D6 n6 B, t2 F; \}
1 m. c" w; t& t: u9 {/ ^/ O* t};
7 z4 j5 S5 n2 M3 H" I/ ^4 P. O-------------------------------------------------------------------------
1 q* h- }7 ^# C$ }7 D7 g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 }) Z4 Q/ R6 w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; L# v6 E7 x; L7 Y- {
紧靠其上添加:
~7 I! ]0 x7 `2 ] Rif( pWndBase == &m_wndMenu )
4 v( E& Q K; W5 C, y, A q{
2 n, F) ^9 X: D9 e" t switch( nID )+ O$ k6 c8 l2 u0 ^) }
{' M( e0 Z7 ?! Y4 Y3 x- ]4 X1 s8 Q
case 2:* i# |# A! i4 K, j0 V: T2 e" ?
{+ ]- ~# |5 {( q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' g7 _) n& C/ |4 E: K- f' z: h if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. X- c% p0 j- T0 P3 f7 h1 W {
" p6 U I" e7 F$ q break;
; [# W5 ]( i+ c4 t }
) t) C' N: `) x, w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 }7 ?7 J; c8 R/ u5 _/ L& a
{! s; l- h/ T. f3 g3 \# h' _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ Y5 ? X& }: e$ K' D& j. f
if( !pItemElem ). W/ K) |2 Z& n, I+ O: \
continue;% b. B1 L8 f" O4 ]1 M3 w' [
if(pItemElem->GetExtra() > 0)
" E/ ~8 u8 I& u5 \- d+ g3 i3 \4 | continue;1 I5 w* K/ p3 W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! H# k) L8 Z! Y. g
continue;
4 B s' v( o* f& ?( p6 B7 i+ w if( g_pPlayer->IsUsing( pItemElem ) )" L* n' E! u' ] e' D* P- G$ @
continue;
7 O) l4 R9 X: r2 b+ [ if( pItemElem->IsUndestructable() == TRUE )1 f, L6 }- |, U2 O' b7 _9 g/ @
{3 _9 O) B! w W( ^! S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 O. Z" F5 X7 _, ^ continue;9 P1 |& f/ f. E# a$ S5 i& X7 m
}
% T* b& z) {* c( N C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ |# ^3 ^. \# N' E# M
}
4 }- B9 t. y1 b break;5 D4 F# M. V l$ t# U
}
: b8 ~3 c+ J. [9 G; e case 1:
( l) G8 f* n1 C6 N" D" c9 L | {6 Y+ R, f, r& Y# q) m- t% d
//整理背包
( S7 I! Z( J9 Y# D //////////////////////////////////////////////////////////////////////////
0 z% b, Y! q% f1 S1 q' a2 A* B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 o6 \# m/ ?/ m; n2 f //////////////////////////////////////////////////////////////////////////! {& N: Q, V3 p, {1 m
//////////////////////////////////////////////////////////////////////////" ^0 n- R" j4 O6 ?. Q" N8 J
CInventorySort* pInvSort = new CInventorySort;
# G2 o" [! C" I" c( a! U7 O0 e4 Y vector <sItem> vItem;
- b+ O5 z4 Y0 Q- M! X# u. n) I vItem.resize(MAX_INVENTORY);//初始化大小: l: h% N* T+ F+ `
//////////////////////////////////////////////////////////////////////////
0 o: F6 y4 \8 w& I! g$ l! d. l //填充数据
- }0 Z( i/ u. S* l3 i for (int i=0;i<MAX_INVENTORY;i++)
% \" P5 |/ u' O. I {4 c* x; C9 i" M: o) g4 I+ Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- s' i: u) x- t) C9 y& B% Y. C if (!pItemElem)
Z, K5 s' ?# o3 c {
* f2 R8 U# f3 z vItem.dwKind2 = 0xffffffff;
- P( D" G: u1 j$ A* L, \6 S, d vItem.dwItemId = 0xffffffff;) k3 m% x0 ]1 u8 }6 i. u5 O/ B
vItem.nIndex = i;$ e; @7 |, \) N
}else {, V& ]% Y* A. `8 \) I
ItemProp* pProp = pItemElem->GetProp();1 M( u5 T3 D! N1 A7 D2 s3 d' l
vItem.dwKind2 = pProp->dwItemKind2;3 @8 |$ n0 p' J, d
vItem.dwItemId = pItemElem->m_dwItemId;1 D4 |2 O0 D. [2 o8 d' ^
vItem.nIndex = i;
7 ]. H- {; l" ~. { }
6 E5 F0 U/ G6 p0 \: K8 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& y$ R1 g9 J: l }7 \+ b8 [5 ?) z' w# D
//////////////////////////////////////////////////////////////////////////
& B/ h) D) T/ a, b8 K0 e sort(vItem.begin(),vItem.end());//排序" L+ T e4 Q4 @; w9 V
//////////////////////////////////////////////////////////////////////////3 w2 N0 k5 q ~; }/ l2 \# u2 X
//交换
( H" _+ h) ]4 {* ?: N4 S for (size_t i=0;i<vItem.size();i++)
: \) y r2 R2 ~( c6 y8 L7 I { ~1 o. F1 S9 ~% N' l2 g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# U [/ R# {3 Z2 j- l pInvSort->Add(vItem.nIndex);
) n6 ^" ]9 g& R }: [7 S$ A. V5 l- ~$ A
BYTE nDestPos = 0;
9 C' c- o. [; t for (int i=0;i<MAX_INVENTORY;i++)
. P6 l# Q4 I7 Q. w2 ~3 I4 J {
' S) c i6 F l _1 E$ h+ g4 T& m! u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% k! ?! g! H# t( }& M" s* u0 U if (pItemElem)
; X4 E! B0 |5 b2 a5 P/ ] {- B* k* v+ H+ q' n# @
if (IsUsingItem(pItemElem))
3 I+ F7 E' @: m; j2 h q {
5 f: r6 i' I! V3 Z //这个位置无法放; C% I W. H' s' ]7 o' m- J
nDestPos++;2 F2 [9 B' j9 Z/ f
}
/ C+ B3 ~9 e/ O9 D3 u }
- ]# M- ~# V2 f( P BYTE nSrc = pInvSort->GetItemSrc(i);
* C V* \ b' E6 }, {0 Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* ?: W% L0 v+ v2 C# c) e
if (pItemElem)
1 C; y0 x; M4 F. p J0 L9 t! S4 | {
1 k+ ^4 z C+ P8 Q, R4 O6 F if (IsUsingItem(pItemElem))2 N; D+ L3 W6 l& [; l- l
{1 Y% G$ p' K# M! M7 ?6 I' Z
//这个道具无法移动,跳过
; Y) y5 `7 c/ Y, j continue;" u( X! ~# K$ X4 T) y
}
- }9 F' V' H+ _& X8 P/ z( C }else{
8 c; p6 q* S1 x6 Z- d //空位置 不用动
' W, i6 m7 P7 e9 q, Y# |: V* C continue;# w) J; o- B( W+ B0 ]0 I$ H
}. U. d! e' E l
//////////////////////////////////////////////////////////////////////////5 j. g) x; A* p9 C& j& d: B
//开始移动
- H) P; T N$ J" c if (nSrc == nDestPos)/ `1 \3 t2 m2 L2 {1 H! V. R" U4 [7 f
{) f" Q1 Z' Z* d, c7 x
//原地不动
# K- a6 i0 Y& V/ M4 R( `. ` nDestPos++;
0 s# h5 X# T; ^ continue;
, Z" B; D0 v* v, _ }5 @9 D- W$ P' Q6 h; X$ d H, {% q
pInvSort->MoveItem(i,nDestPos);
1 W& j$ ]' I: u( |# B9 Q% ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ u/ |6 t6 s3 N3 ]/ u. ^. r
Sleep(5);
5 ]4 s/ x7 g% e8 ^7 s! | //Error("移动 - %d->%d",nSrc,nDestPos);
9 v( _) H: M w% \ z" e' L nDestPos++;& T; m( }# Q+ A. h$ t. |6 T. P
}
, B: w' U: U2 [9 N( }- I) u //取第一个元素的信息* @ O. e+ S9 S2 k: X3 S4 N
/*
: J0 Z ? Y6 i; |: y6 K' K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# Z$ `7 `, ~* R% V' D8 x$ m
{9 O5 K( V* j8 L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% M3 G, M# _- b3 w* \/ G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 q$ F! W$ q" w }
E; S" `0 L/ ]1 [# w */: e4 i/ U! J* q8 ?
//////////////////////////////////////////////////////////////////////////% d0 n- |7 d6 L# X& Z* H2 n9 M
break;
& i# b" F7 ]: h }
8 f0 p9 b T4 _! p5 z8 N } 1 _& f U1 j7 a Z1 ~
}5 G m3 j# J- I" k4 `
m_wndMenu.SetVisible(FALSE);
$ F' `# n$ n" @; f1 r! w+ p" Z$ h+ @4 p# h1 y& p7 f! X
--------------------------------------------------------------------------------------------------------
\& o R# L) a" c6 Z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" p( a; i8 A8 u) `{
`$ u. e7 v: T: _5 I; jBaseMouseCursor();
6 ~$ p5 D( X" j; y8 b) b}& J# f, G% X5 l6 g& R+ u
在其下添加:
, p; u! r+ ^' s% V, w4 j$ hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 l# ]7 n. a* B9 t/ Z: ?9 R{
: c# C( b" w6 H: O8 m9 V0 Jm_wndMenu.DeleteAllMenu();* E q: b3 R" D5 {: W
m_wndMenu.CreateMenu(this);
! c& _* {9 t$ ^5 M1 q; _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- u+ [" F- w2 @0 B* Z: Y% B/ M/ R; V7 c/ w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* j0 W C* k9 W" h{
3 \. V; N4 Q! N- R$ F5 T8 Y //P以上级别才可以删除所有道具
7 F9 r G; z* n m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 W; W; `2 \7 U+ X% v+ y}7 O/ B8 \! v) \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, N5 v6 ]* R& \: c1 n* Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 w1 s8 g1 |$ b& F% }
m_wndMenu.SetFocus();6 D0 c$ ?1 r5 g3 c1 w" h6 m3 ~1 n5 J
}" v' l$ f9 R' O* _( c
------------------------------------------------------------------------------------------------------------
: {3 L6 r% v: c4 J r. Z*************************
' U0 q" V+ y! zWndField.h文件
% }0 |( Y7 i( A. Z*************************
: w2 d/ ^6 w# R! z1 n8 W$ m# z搜索:BOOL m_bReport;2 v4 r6 i# O3 n! B; p8 w
其后添加:
9 ?2 B \; E2 O7 [CWndMenu m_wndMenu;
# P- N7 p: ?3 t% @# y& w& O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* @+ ?5 _3 M+ ^) \: d其后添加:
' ^3 g/ {& X+ R+ ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
! w7 v/ y |9 f3 l0 l2 E5 j, S8 y. u s
9 w$ v" W6 J+ N* I( j7 g |
|