|
|
源文件中_Interface文件夹下WndField.cpp文件1 \( q& l! A, t" p! a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 R$ ]$ b( B# J, _# p+ @* w" n. {
6 W1 V* m9 ~3 f# \struct sItem
! a, r/ O, j) M{; r2 E$ U& x8 a! t Y
DWORD dwId;
6 V. G7 i8 v' _5 d% i4 O% iDWORD dwKind2;+ v. n) x' C7 n1 ~
DWORD dwItemId;+ x; W2 C3 H: s' `$ R) c c
BYTE nIndex;0 j6 k. z$ M2 r, B( U
sItem(){4 n) B! R: m* X: p$ G9 ~* b
dwId = dwKind2 = dwItemId = nIndex = 0;
5 S; s* a$ V% g' H}; x. k1 P7 N v# k5 I9 l' [
bool operator < (const sItem p2)0 O5 I0 [* ^# s; L l
{
, V$ O' i4 s) Q! I5 {. |. e if (dwKind2 == p2.dwKind2)
7 ~" H2 g- z! t' G! Q$ N {
' w; U6 F$ R+ b: v return dwItemId < p2.dwItemId;
: Q! n+ G9 L6 Y }else{
8 I4 @9 h$ A, D6 V return dwKind2 < p2.dwKind2;
& w ?5 R0 J- p) v5 x, y& Z }5 e# k4 J/ x _' l8 q
}: N. ]4 l5 D: I3 j1 @7 x. B' b2 ?) L
};
0 y2 m& U O" D/ a3 |, [! H$ Y2 Gclass CInventorySort
$ g/ y6 t7 T5 Y! Z# R4 x+ d{
5 z; E" B! ~, e0 |" gpublic:
8 a! x5 j2 v% e, D1 JCInventorySort()
# \) {, W' u' e( {; q{% _( v5 T5 w/ ]! r
m_dwPos = 0;% S$ S0 C; L8 S5 U1 |) W
}' S8 f \/ x _0 M# Y" I8 u
~CInventorySort(){}
4 S* ]# [8 F$ [private:
4 U8 u- r- [& v5 T( qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 v' k* c1 T" P7 P* C" NDWORD m_dwPos;
1 L$ [# n1 b: I; L, m4 m, upublic:* D8 }- J$ C3 m5 E" R$ k
void Add(BYTE nIndex)
, r6 T: t+ k) X! A* e/ t{3 @$ h0 r! O7 p4 d7 I$ W! z& W
if (m_dwPos >= MAX_INVENTORY)
. [# w O0 t1 k# o* ^. Z9 \ {& f# N9 f* K" W+ F
return;2 C3 ]* z3 }- k; C1 C% k
}: |, ?1 _8 m% a
m_Item[m_dwPos].nIndex = nIndex;8 V, b( V) }8 s9 q1 h! Q
m_Item[m_dwPos].dwId = m_dwPos;$ X# t% {* R! L; c; E( _- _
m_dwPos++;
1 B; \. N: R: Y7 y' @' v; l}* y, O' b) e) N+ T( i+ S1 D; G/ I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 ]' J1 i; q& {1 y5 J5 Q
{
" \* E* `. x$ N: I( x$ D for (int i=0;i<MAX_INVENTORY;i++)
4 i8 e) }; P9 l9 A {
! V8 i( K3 v* {& N if (m_Item.dwId == dwId)) }2 C/ z" R. o' R) w& ]
{
! h. `+ C7 x+ q6 x( ~/ B return m_Item.nIndex;
7 ^' R. _* E) I* `2 f6 a9 i- i }+ R% `( W7 [' R2 i6 `
}, S4 @. R9 y/ @" T6 m, g+ |
return 255;
0 h: {0 s; [5 s4 }}- [5 }: F {0 X1 X% g; s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 X0 X) p4 ~' h# _{4 s" U4 l" C: z+ w/ M1 h7 G
BYTE nTmp = 0;
! V$ ?; S( w3 M, ~% Q$ ? bool bDest = false,bSrc = false;8 Z* m$ P! _6 H) B7 g) U
for (int i=0;i<MAX_INVENTORY;i++)
" j5 |7 h+ q. E" {$ ~/ ]" S @ {
- i! F! C( Z+ e% l+ U* q% j% o if (dwSrcId == m_Item.dwId)
3 s& |: Z+ L/ n9 N {
) ~9 `" n- S+ ~* w5 H: l, q' N //id相等 则 改变对应的dest和src7 G4 i2 L v, T+ X! }+ Z
nTmp = m_Item.nIndex;
1 \5 u& e) N3 b6 t/ G" h m_Item.nIndex = dest;
+ Y0 x; j8 r# m: p. s- k }6 G4 i+ k/ j4 `" g% Q: N
}
! U1 T4 Z5 _. u. M //临时数据保存完毕,交换开始, A8 k% ?1 Z5 I7 c7 I: y# G
for (int i=0;i<MAX_INVENTORY;i++)
2 l ?; g% E. A9 l3 a5 U( Y6 j {
1 ~) R) G. y' E& q1 ] if (dest == m_Item.nIndex)3 {5 ^- ^) Y% J2 t) H1 n. S1 R# }" P
{
6 v7 r0 C. N0 V' H P! E1 F/ y //id相等 则 改变对应的dest和src
+ I2 {( v& q. p0 g; W: F9 G9 N m_Item.nIndex = nTmp;! @- c, q( n/ `" E7 e
}
3 e# |3 O# J8 P+ l! C }" F3 L( _ V$ b8 H5 c- E
}
* j6 @$ n! h, N9 C};
5 N. t1 N1 |$ U; [- E-------------------------------------------------------------------------" ]/ i1 j, D; n" z v! `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( F6 t! h$ A/ b# w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* u: Z M! s) q8 P紧靠其上添加:
4 \5 L% o+ e) ?6 ^1 \if( pWndBase == &m_wndMenu )
# |' W3 e* ?5 o{
, r5 y: \$ j* _- W; @: x* z$ } switch( nID )0 q+ l5 |( M7 S7 {
{1 A( ~+ z' U! P1 _6 o
case 2:
% s7 r1 Q2 F' z+ @ {5 X% `/ h& C/ X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 a/ k; m" {+ @% G! ?+ a( e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- T0 |: c# D$ h; U. l
{$ x6 j7 o* Y3 m! E2 N$ W+ K8 \. D
break;
6 a7 `- b9 L" G H }3 ~) n0 q, n6 q- N( H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 ^5 j5 M* {4 l5 O8 j P( C* _ {* R8 Z! T: X2 `2 T1 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- |& T: v8 S7 m if( !pItemElem )6 I: z' U, A* |1 V) @4 K
continue;
3 o# h. Q5 B% s5 n5 W" g# ]8 {7 O if(pItemElem->GetExtra() > 0)' E6 {- _7 c7 N8 h
continue;
( r% k6 q, m9 D# t& X7 [+ b- ~! u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: d& `9 ^- j" P5 t$ Z6 Q( `( v continue;0 B; z; K" j7 \( X2 u* p+ `! G. i" k+ @
if( g_pPlayer->IsUsing( pItemElem ) )
3 U$ _# o1 U% Q( \9 j continue;
2 w- z2 ~3 i" [3 ?% o! ] if( pItemElem->IsUndestructable() == TRUE )
% j& v1 Q! N. j/ t8 G {" ?. [, C# N% Q1 M
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 W! u# Q8 j& j5 r6 O continue;
+ X4 F5 z0 y# O$ r% G; E! y7 f }8 P0 j$ [& x; b1 ^3 X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- R8 g* v, L6 M# K& Q }
9 u1 R( @( z$ B$ L+ m break;
. o6 o( B- L0 B7 Z }
6 Y. Z% e) }: Z2 b; V3 u case 1:$ b% t6 S$ `8 }& j; y ^
{
+ O1 X. A; o# O# A //整理背包
: S5 N+ | V: _9 U //////////////////////////////////////////////////////////////////////////, L4 b& L3 v9 n7 B; ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. a7 A, j0 F, S+ w //////////////////////////////////////////////////////////////////////////) J8 `# p) } `( n% M4 f
//////////////////////////////////////////////////////////////////////////) @/ a- T" l5 `6 M; r
CInventorySort* pInvSort = new CInventorySort;
& {, ]) J! T4 ]! O; B, p, i" y vector <sItem> vItem;
! |( ~! C5 H4 \& Q& Q! P7 ~% a vItem.resize(MAX_INVENTORY);//初始化大小
# n% h) s3 B: ]* y8 Y4 b K+ J //////////////////////////////////////////////////////////////////////////
, e" C% V( ?% r. T! {- A" P" i5 b //填充数据( g( S, w/ y# T3 \
for (int i=0;i<MAX_INVENTORY;i++)
+ d: I+ G. y. s7 `. [ {' Y* ?; ]( M" s/ k9 o9 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 x- D/ X; i2 x+ w4 Z5 c6 O if (!pItemElem)
2 @& w2 |. U3 d- r {4 @2 w6 Y; \7 O
vItem.dwKind2 = 0xffffffff;6 v) j( H1 D5 t: M6 r" K- u, a s6 I
vItem.dwItemId = 0xffffffff;* M5 E$ h5 v0 O- O( F# j4 G2 Q1 R: Y
vItem.nIndex = i;1 @( W' P: c$ m! }
}else {" U5 |' H Y' o7 V
ItemProp* pProp = pItemElem->GetProp();( |- D; a8 a+ e1 ]% O
vItem.dwKind2 = pProp->dwItemKind2;: P8 O, f# T* h5 _
vItem.dwItemId = pItemElem->m_dwItemId;
1 s% Z3 n7 e& P0 v M1 b vItem.nIndex = i;
5 h% G1 n) m7 P& m* q }2 z: k' \/ j) w( r" v* r2 ]) I: N
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 w4 b2 }% }2 [9 t8 s, U }& l+ t. n4 R: @5 @
//////////////////////////////////////////////////////////////////////////
$ {/ o( y; [1 b6 v sort(vItem.begin(),vItem.end());//排序; U! f% z% Y0 X/ L/ k
//////////////////////////////////////////////////////////////////////////) B8 y! e# V! @4 W& D
//交换4 [( K0 ^; Y+ S2 H/ ], U
for (size_t i=0;i<vItem.size();i++). A% [: N$ y* l0 v0 z) A
{
' L4 a/ r, q4 u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% e% D+ ]8 e' c( p pInvSort->Add(vItem.nIndex);$ U7 {. r) q# w: @
}
1 r; x7 q. l, N) C BYTE nDestPos = 0;) G# A3 |, q& c8 u2 z. k
for (int i=0;i<MAX_INVENTORY;i++)
7 V9 Z+ [: h U* i {
6 u. R: ^( @6 B6 v5 r5 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- B* h/ M$ f( D+ c2 C if (pItemElem)+ b3 w% m) @8 U# ?
{
! U8 o5 r8 f6 w# I2 |/ U if (IsUsingItem(pItemElem)); y" c) b% B' j3 y5 p( j
{
( T" |' \8 G+ K% A //这个位置无法放% b5 Q9 i; k& ?: @
nDestPos++;* T( b& `( L" F6 Z
}+ o- \' l7 D0 }
}* E1 Y! n5 ~, e' A- K# o
BYTE nSrc = pInvSort->GetItemSrc(i);7 L5 b! ]1 e# p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( T1 m0 S6 c$ D, @ if (pItemElem)
`8 w8 w2 {* l7 z+ g2 T, z4 X {
. C# L# t2 @$ p; Q0 X) @& t if (IsUsingItem(pItemElem))
0 \: W( u: Z7 j) z# v/ V! V {9 u! ~' v# M+ n3 w8 M' o6 [
//这个道具无法移动,跳过
( n! ]% Z6 T+ y% r$ v continue;
, Z7 I* m2 l# [% F l+ w" ]3 ` }$ l4 `/ g. i$ f! B$ y
}else{$ t$ C8 @( L+ d5 U; e5 n2 j
//空位置 不用动
+ V! P* t& m8 C9 N, C! U& N' o) | continue;
+ }; y, }5 M. ^- }- c. Z2 i J }2 K; D7 ~# Y# {3 k2 G. Z
//////////////////////////////////////////////////////////////////////////+ s9 D' X) V. m) x
//开始移动9 T- P7 m4 u8 h! e
if (nSrc == nDestPos)
; i- o* ^) H! {, J$ g( M {% U& c+ _" p3 @3 J
//原地不动
% P8 j/ q' R0 M* E& ?* e6 b nDestPos++;8 c. [+ v1 @9 [, w. x
continue;4 d, z# q( x# S; W
}8 K" q7 |3 j% k. D- u: { W- \7 U
pInvSort->MoveItem(i,nDestPos);
3 _- J4 X% r1 x7 U% L" ]1 Z1 G g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 P1 m$ n& c# O/ C* T
Sleep(5);
4 u. Y% @2 |$ o' y- B5 m //Error("移动 - %d->%d",nSrc,nDestPos);
7 v2 L7 Q. I8 J3 j% u2 } nDestPos++;
" _ F: I) B% V- U6 _ }8 `- \( ~4 f) I& `6 }$ [
//取第一个元素的信息
8 g9 J# X( }1 T4 Z S /*+ y N# H) i6 C: X' Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 _' A9 b4 B5 T- C+ ?: P8 @
{
% O, X# G. ]2 I3 i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: o r. b* I+ R, u1 R g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 Y& [1 K% R6 R4 p" _
}
6 j Q, w3 b( F" I; n; O */6 q( t- X. v4 Z- c; L6 Y V5 H8 C
//////////////////////////////////////////////////////////////////////////
2 g+ c* @, T3 @ ~ break;
3 a7 ~+ G" S% {! P' W& Z2 i2 u }& x+ C O( h; F/ ]8 O" ^
}
, M i# D$ f# Y$ R- @}
1 P- A; t8 k1 I, x( Q pm_wndMenu.SetVisible(FALSE);
" Y6 H' @8 F$ c; x8 Q: l
' a6 o) P+ y& D( y1 S--------------------------------------------------------------------------------------------------------! d; V( k. Y E( y! {+ c5 ^# Q; N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" C3 ]3 g { j% T. J, f{$ L6 K# h: y0 [1 y. J* P- x+ w5 L
BaseMouseCursor();
' h' [( v5 c1 F B6 w Y}; i6 z% |/ \9 c; i6 e
在其下添加:8 j4 f& W: \4 m
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 F. ~" G' N& a* u4 a$ N3 a
{6 b5 T( Y6 |5 x) `2 I/ Y+ U
m_wndMenu.DeleteAllMenu();$ g3 U- C. _, K. q! P' m6 [9 v
m_wndMenu.CreateMenu(this);. y5 F' ^8 g A% h3 t1 E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ q; [$ W* Z) u( @) o0 h
: H2 s; z2 n& \) x
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) Q9 j# h4 j/ d# }) `$ ]7 ]8 I# Y
{, L- }" ]" u! ?9 ]/ S
//P以上级别才可以删除所有道具( M+ O( G% e' Z0 K. Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ H4 j) |. Z& x7 g% w$ P3 W: v/ |. F}
" I7 ?" Q1 k& [, xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 n1 s1 t' _. j2 w3 g0 s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 }' r, ~, I; j6 D- M+ ^# y ~
m_wndMenu.SetFocus();
. G W! d# G( `}
+ V; H% M2 G7 C- \------------------------------------------------------------------------------------------------------------ Z( m! D+ y8 @3 q( C
*************************
1 r1 I; b) U+ {6 T" LWndField.h文件2 W/ \; o+ A, W6 V/ Z* [' P$ i
*************************+ D1 p, J+ e# o0 b6 e6 _. {
搜索:BOOL m_bReport;" B F0 e" B1 V7 e/ G% l: s" w
其后添加:
( a) Z$ j% S* ]* `% n" ?; }CWndMenu m_wndMenu;) ^4 ~ d3 H* t4 J6 w! ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% @- Q* A4 [0 M' F( R/ h) W其后添加:
! X- x; g9 p bvirtual void OnRButtonUp(UINT nFlags, CPoint point);3 r2 `; f+ x) u, o k! S
) ?& }0 f0 @, r( t1 [' r4 v
9 ]/ h6 p7 K& W; z; Q |
|