|
|
源文件中_Interface文件夹下WndField.cpp文件: s( A9 I/ q& b: w1 ~- b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ ?( T6 I% n' K+ N& M v; Z. D& ~) |$ _
struct sItem
2 M( U# [0 k% K3 o' _, G{" T) [5 P/ u3 e% w# L. z
DWORD dwId;6 U3 c0 S2 f9 e8 J; O; |
DWORD dwKind2;
9 X4 a( _0 a) H- @" o$ N& z: x; `DWORD dwItemId;
* l" s& I" i9 s8 \0 B2 q0 F/ H+ `BYTE nIndex;
# q) l0 G+ f- U4 X& ?$ DsItem(){! G$ t2 I: C0 f2 q6 I
dwId = dwKind2 = dwItemId = nIndex = 0;
( D" S1 C7 a8 V( w, a5 W}" o& ^, h$ H2 F, p% R4 K% d3 E8 i
bool operator < (const sItem p2)5 C: `# o1 v6 Z2 p8 w6 j
{
1 V' F4 m, G0 _& O if (dwKind2 == p2.dwKind2)
+ d! N( {- f$ @ {
6 I2 x8 e& N K6 s! \/ O return dwItemId < p2.dwItemId;
9 _0 g! @/ ^' Z! D/ o( ^ }else{
9 e1 \# j% o7 t3 O: |% n7 h return dwKind2 < p2.dwKind2;, z. ^4 y- v* D5 c
}
. ]1 F( p% q2 q' y; H& ^1 H) d! N5 ^}( M0 j7 z- \8 L4 v- ~
}; u2 N z/ D6 V
class CInventorySort
( v' E5 e9 n! x8 p{
+ M6 o8 [) V0 y$ O2 h, W6 vpublic:
$ u3 S; |& V- t( s# Y9 bCInventorySort(): H# l* p6 P! ^$ ]1 s9 Q, C' _. }; f! u1 F
{- H. L6 l& O! |4 q# |: _
m_dwPos = 0;
S" Y5 C7 g- X! T# P0 t( c. h! T4 v4 ?}
8 W3 G9 I9 B- l: q7 V~CInventorySort(){}- h/ d \1 ^0 p0 D: F0 L5 g0 S
private:# i% F7 M3 R+ f" S; [8 _+ u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- H6 f0 ?% V6 zDWORD m_dwPos;: b, T; F. ?+ |% n
public:
8 g3 s- S5 e$ \. {5 Xvoid Add(BYTE nIndex)" a. Q: Q4 b7 C( o
{
3 m$ L0 A4 x& I: R( ? if (m_dwPos >= MAX_INVENTORY)/ s. O$ z, p# @4 x6 `7 h
{% K* B: d. J# u3 M d
return;+ H& J8 V" }3 T
}3 |! |$ u) D3 q; s4 L/ a
m_Item[m_dwPos].nIndex = nIndex;
; ?, ?* @) K5 n/ B8 g. @ m_Item[m_dwPos].dwId = m_dwPos;
9 W% |$ Y) K2 g" f& \' B b m_dwPos++;
: k- O3 z _. j* b}- C: m, ~6 V. x/ k1 z! w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, P; z; j0 v# L5 x
{: K/ b/ |2 O& _ q+ @, J
for (int i=0;i<MAX_INVENTORY;i++)0 c! Q' y4 u( ], _: f( Z
{) X: t5 a* u2 x8 k d
if (m_Item.dwId == dwId)
& I8 q0 V* b% Q- N4 j! G; F" { {; j" S0 D7 R+ C0 P
return m_Item.nIndex;# a5 W+ G6 Q- v( O2 {
}
- E. l) {) c. J. ]6 { l }
8 A, K! v7 N" t9 w# c return 255;4 L2 u- J& j- |& o& W3 O3 W& r2 Y
}5 |3 v# ?' K& E f4 e2 y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& U, M! B" J$ V* L+ z9 f0 z
{
& y3 y) R# s4 F, A; a& d/ p5 W; W BYTE nTmp = 0;
9 L( i9 F4 O1 m) A bool bDest = false,bSrc = false;) ^8 o4 k$ t& F% m5 u- `! @
for (int i=0;i<MAX_INVENTORY;i++)" W# j( I5 [* ~' B# u# p/ g, c
{: ^% Z; c% z6 x' t; t+ [
if (dwSrcId == m_Item.dwId)- G3 i& `0 O6 h# P9 E$ Z
{
$ i& D$ p# B) z //id相等 则 改变对应的dest和src
* `4 I/ U- a+ t- P z) B3 Z nTmp = m_Item.nIndex;
; R$ H' B5 j% L$ h! m3 z m_Item.nIndex = dest;6 r- g. v: t6 a' h+ K3 G* s) `6 v
}
! r0 z2 ^! y, q' W( T4 A1 L0 m }
% B! W* G- F* y5 f( y( [ //临时数据保存完毕,交换开始
6 }8 p9 @# m3 k8 s1 d; ?! q9 ] for (int i=0;i<MAX_INVENTORY;i++)
9 |( p8 x) M% Z- ~" b) ^9 l {8 ?* Z$ `% T7 S- q
if (dest == m_Item.nIndex)- r o' j9 B. @3 f8 U
{
/ t! [6 r% O$ U$ [8 w7 d //id相等 则 改变对应的dest和src
+ O# D3 O0 H- }4 I7 K m_Item.nIndex = nTmp;
9 _! O1 H& k( P$ z; L }) H# K; T; G9 Y2 K
}5 p& H) s! ]" x x/ q
}5 }; K8 o( W/ S# X0 `6 l4 [
};" {! }# q# X: w7 z
-------------------------------------------------------------------------4 j5 ?& T# |2 H3 l/ w) c# l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ S9 p; E0 H) o4 y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) y& N( D4 ^( Q$ W5 B: m b! x紧靠其上添加:
" @: U7 x( Q6 d: e X( [: ?if( pWndBase == &m_wndMenu )+ N/ ^3 V+ Q* Z; \' ?
{ @4 o; e0 U: l2 j& U1 N
switch( nID )
$ d& l" b9 ?: r+ R$ n {1 u: b! D; x7 ^9 H( D$ W; m! ?
case 2:
9 v2 L* h' u, f6 M: i% @ {8 j* |) \* x _: `, Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 J+ b; q. K" {0 G7 n6 z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% L% v+ |" H+ C+ h: t- \
{
. a0 W K J* G7 \7 [$ x+ a% {% J break;
d/ k7 s3 J7 Z- {. u }
, e5 B+ P2 j8 F* F+ l' a7 [3 ?( }' O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- ^% Q' l) @, t, d {
- t \% U" m# N: t, w! o/ D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' M7 n$ X! M( ]" h3 j$ K$ _: J if( !pItemElem )
# W/ n, f9 p8 |3 R: ] continue;
' ^2 b/ v+ D% H if(pItemElem->GetExtra() > 0)
5 u1 f, ?! T' O5 t/ ~5 J! f) F# ^ continue;
; _0 z5 |+ b* s" u' F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / f/ P+ ?! `! H- m- K# b$ V9 U: X
continue;
9 G# v7 c- V# w; x: y% z- n if( g_pPlayer->IsUsing( pItemElem ) )
+ z+ K+ d+ C) d4 V6 b- p* }0 | continue;
% X& V- @( r0 u4 K if( pItemElem->IsUndestructable() == TRUE ). T* w- C9 K. P( r4 ?8 T, X1 E
{
: i, i! e+ `1 k* U0 i& \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 A5 } B+ E: ^8 \3 O i continue;/ M; c0 F ]/ P# X, g: [
}/ G1 V1 A/ m3 f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 r7 f9 y: G4 `* b1 F# }' Q
}
) E l4 l8 a8 O3 L$ s2 R break;5 d" s! g6 X9 ]! w
}6 { u g6 S) y
case 1:2 h4 d0 z) P! X9 c& M6 ]
{
) m$ |/ x+ D5 {) J5 m+ U- R+ c //整理背包
% r' a* P- q* a* N6 ^5 }0 G //////////////////////////////////////////////////////////////////////////
- A9 q$ P$ b& t- }% h3 r. q" ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ ^# O# u' \) `5 m1 q8 C
//////////////////////////////////////////////////////////////////////////
* p. z5 Z+ U, ]% U, N' E //////////////////////////////////////////////////////////////////////////% e9 ]1 H" \6 ~, \8 L
CInventorySort* pInvSort = new CInventorySort;
" Z$ e D1 k, w k2 \' a2 Q vector <sItem> vItem;! z y' d2 a4 K* x
vItem.resize(MAX_INVENTORY);//初始化大小
S- X; H% X+ c //////////////////////////////////////////////////////////////////////////
" ]6 z2 e7 X1 ^7 \. E( R' ^1 `2 x //填充数据/ n* W- W1 p, M# L6 g0 `$ f( Q: j
for (int i=0;i<MAX_INVENTORY;i++)+ ?1 L- j: O- w' @$ w- j
{
, [$ B4 s/ z. t* Z9 ?" ]+ A/ }* n x' f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 k; b4 W( ?8 H" q# W# z& |( i
if (!pItemElem)
& i9 `. Q' k9 r6 R R: Y( z9 ` {4 b6 u. c7 y! {# O
vItem.dwKind2 = 0xffffffff;
6 b6 g u$ x7 Y- {* w- Q: Q) m. Y: i vItem.dwItemId = 0xffffffff;+ Q" C1 [! U5 v# l: g: u, i; |2 A
vItem.nIndex = i;
' b6 Y; |' Q( a1 c2 y }else {
% d8 i$ {& ^8 _, ?+ N1 k$ D, t( _ ItemProp* pProp = pItemElem->GetProp();
1 l. Z7 Q: }( j vItem.dwKind2 = pProp->dwItemKind2;
8 X% A0 G8 W- {+ p3 Q2 |. V; F- `6 ^, n vItem.dwItemId = pItemElem->m_dwItemId;
" d: I7 b! g/ `0 S4 Y$ n vItem.nIndex = i;
* }! r+ f9 X7 R {9 | k0 O }; X$ c t6 K. B Z$ \( i7 y# m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 @" R7 T: O, D% g" C }
$ I( o( M2 k3 N* ~* i //////////////////////////////////////////////////////////////////////////+ m% p; b1 j$ S3 R4 O" Q
sort(vItem.begin(),vItem.end());//排序6 y# H* ~' d% a& k
//////////////////////////////////////////////////////////////////////////. t: C1 a5 J+ O* F
//交换( a t) C# m# q6 f; _. m: ~
for (size_t i=0;i<vItem.size();i++)! c1 G* ~ J( L) y5 a0 B! r8 x
{
- c1 [3 E: @, O8 L4 q* m% T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% q/ Q) |2 |# s
pInvSort->Add(vItem.nIndex);6 m5 l z+ K0 |( p" E
}
! H* w+ |4 [# s* @) F BYTE nDestPos = 0;/ r+ \! j. {/ e2 G6 y
for (int i=0;i<MAX_INVENTORY;i++)5 E4 R/ O6 p, B0 A, G7 \
{
1 Z: k0 m, B* Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) x0 N) h2 o+ ~
if (pItemElem)
7 T5 F, p4 E& b {
* F0 @) J( d; }7 {* n if (IsUsingItem(pItemElem))2 H- x8 O4 a7 {3 T, ?& `
{- ?6 F8 b6 w+ T# X
//这个位置无法放! T# v4 H" _, B1 k$ ?
nDestPos++;
/ V7 W" c" A" q0 U }
3 Z7 e6 Q$ a% `, }1 v }
5 r- K6 n, R0 z" N* d BYTE nSrc = pInvSort->GetItemSrc(i);! @0 r1 X$ C% i2 J( e7 v" i9 ^1 S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 @ j9 L# T5 W if (pItemElem)( R m' v& _+ p$ z* P
{0 i. o) t# i$ B# d+ N
if (IsUsingItem(pItemElem))
- ^4 d6 N1 t. d; Z. U+ {$ j {
2 d6 a2 v q5 N4 C ] //这个道具无法移动,跳过
, h) `' Q$ [9 _4 C- \ continue;
2 F2 J2 d; P E }
' u0 ^4 C+ s" z, w }else{* ~: w3 q' y3 K6 q/ m! }
//空位置 不用动7 U" X7 ^6 R, ^/ ~5 r5 r8 m. @
continue;9 |9 n* D& R/ Q, t+ W! Z
}
X9 W$ t2 l8 o" w. p. C //////////////////////////////////////////////////////////////////////////6 H3 A0 B# p2 ~5 o1 x. y
//开始移动4 R4 A4 g T! i; q/ ~# b1 q8 e
if (nSrc == nDestPos)+ V6 q: e. F G
{/ o" m; K1 j* @" ~
//原地不动: t0 W* S7 S/ L; [
nDestPos++;
8 `* d" d. D, }3 }9 j continue;
' F: y3 ]( q$ m5 Q }( u2 a c3 i2 M! v) e% s) |5 l
pInvSort->MoveItem(i,nDestPos);
, Y& t: Z# G( m# ^6 v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# _4 g+ y; z! Y: r6 | Sleep(5);
0 n4 j" {9 J; o4 @! W& F4 b* V //Error("移动 - %d->%d",nSrc,nDestPos);, h& C5 k8 Z( c1 w8 }/ i" D
nDestPos++;
8 G- d7 Q) S! i }5 L( K; M0 @, g
//取第一个元素的信息
1 J2 b" j* I3 S3 @& q9 t /*
9 Q" D F2 M! H% {, K6 b+ W8 h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 q+ U9 Y2 @& o; [6 q$ j {
2 ?# j8 p# u7 y/ C2 S, g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- B/ d; Y2 e+ p# p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- i3 S7 M1 V9 M' d5 V* K }" f/ n' v( B2 a! S' q
*/% {9 e9 \8 m% C
//////////////////////////////////////////////////////////////////////////
( o4 h0 U' c6 R5 ~ break;+ X( s9 y1 t5 y$ l E8 l
}! O; K) D1 |, ]. }* e B1 m
} , ^( g2 ]) U6 O9 _1 q' f
}
. W" }( o U* Y' I5 P1 a+ p5 Mm_wndMenu.SetVisible(FALSE);
+ h+ w- M; l3 b4 [/ f" e/ X% W) Y3 W' o; U4 e4 m' D# O
--------------------------------------------------------------------------------------------------------) q+ m* o( r" {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, T% H4 H- J! E, w{$ h1 Q2 t+ `3 L2 n* K4 A
BaseMouseCursor();
7 t9 n/ w1 V( A}: }% ?7 I Y# B4 x5 w h/ z
在其下添加:
% n! O6 ?$ a2 Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 d- V% o0 Q. a( v% E# g6 B, Q{
" c E2 Y; a. d+ R/ f* B5 im_wndMenu.DeleteAllMenu();5 k& G) v7 W0 h- a/ v7 D* N- @2 q% V
m_wndMenu.CreateMenu(this);
( ]' v: S3 u' K- D. hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 ~; c, j+ f5 w h4 L5 h" L m9 a; O; e+ B1 l7 ?
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% }5 w; D# h0 p. L, d: Z" b* h
{! ~ h6 \+ x$ K+ i* n; L0 I: P
//P以上级别才可以删除所有道具( Z' s7 L0 {' Z, O" J4 {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; O% g! P4 H; S) A1 @}
9 b, @1 O* h; s0 _m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 j2 `7 j: c# S1 ~+ D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 Y m( V! y- B }- Dm_wndMenu.SetFocus();/ |2 p. e( d; [5 x; Y* f' M
}
' g# \0 s9 l* L* T' j------------------------------------------------------------------------------------------------------------
6 a- i: K6 T: `4 G& x*************************
% u/ C! e) s1 J) L5 \/ ~WndField.h文件 V, D. K: C8 ]; i6 L k* Z
*************************0 H5 y% @, A( \; A
搜索:BOOL m_bReport;6 ~' W* f+ n: B7 |$ e4 N3 v
其后添加:
8 o# a3 \9 u5 H+ qCWndMenu m_wndMenu;0 F. S( Y" H1 \/ G* g
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 ] [& s) u, E# P7 m0 n+ S
其后添加:
7 A8 w- {: M" r8 s: Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
# a' v) Y& b6 [4 Z$ [
/ G X: g& H- R. j8 w3 {6 B( J& m6 i& k. j
|
|