|
|
源文件中_Interface文件夹下WndField.cpp文件* O7 x- u' a# u: @8 t% k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( F) u- M7 t1 M% V% Y3 l! K
( Z6 `* L2 l5 D$ [2 M" `2 Hstruct sItem
, b; C5 d% g; |, M% c5 b{& y1 d+ I/ j. @! w: U2 q9 \0 e
DWORD dwId;
& g( H: |( i: }DWORD dwKind2;
/ I) d2 Q0 p! w' o- r/ E/ EDWORD dwItemId;! l$ C3 L( }# X( R o/ U8 Z
BYTE nIndex;
H8 t7 H ~" E) ^% \2 CsItem(){! j& U3 e" R* \) f& D, L" w
dwId = dwKind2 = dwItemId = nIndex = 0;
$ j/ ~; v/ n$ O% h}' y% r8 U: S$ j: a
bool operator < (const sItem p2)% c% `8 F3 i) a& e! x! u- w! [
{
$ ?% l4 X9 W; z4 S5 e! L if (dwKind2 == p2.dwKind2)( X) w' Y; Q, B1 I" l! h7 q
{; k8 H. I# Y" n- E. b( r& K$ f* i4 `
return dwItemId < p2.dwItemId;3 P2 z3 _6 ?; n& }( |% k
}else{- B) E, j1 ]. d$ C m
return dwKind2 < p2.dwKind2;& O/ y U* _- o6 L
}
/ k8 I0 Y6 M* J3 d' d& s! {}
6 O* ?# f2 [, a4 F0 S};
7 D+ R/ N Q) Z8 c! g7 Jclass CInventorySort5 f. M/ F6 ]+ `; W7 l' I
{( L6 F; _' S2 P! y- d
public:0 `; |7 f H2 r
CInventorySort(), ^" H0 c. P, S- G1 L% a9 M
{! p3 @& s& S l5 q+ X
m_dwPos = 0;7 ~7 W6 X! Q8 L$ G7 j; G" C
}+ A2 Z# D4 }5 k: u! [
~CInventorySort(){}
4 V m7 l% c- G* `4 n0 h0 dprivate:
4 Q* c' C3 l- U! O0 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, ^; e. |) ^! n5 j7 O4 d
DWORD m_dwPos;8 `, p* h/ f8 {7 N
public:. _+ X1 P" V) M+ H
void Add(BYTE nIndex)
+ J7 Z( ]7 |$ I0 `( U{$ q( b+ V6 m( d- f+ z4 Y" {
if (m_dwPos >= MAX_INVENTORY)- I: G6 i% A4 h5 [' ^5 I
{
0 O) Z. Y6 I. n+ I) b7 | return;+ }# J$ G4 j) _+ u+ G% m
}
* S% Z& P+ q1 R0 n m m_Item[m_dwPos].nIndex = nIndex;
9 b, \& r! n7 E6 o m_Item[m_dwPos].dwId = m_dwPos;
/ o' I$ w! H6 V) K% J5 w# }/ ~+ k& Q, a6 I m_dwPos++;5 Z2 V' \. }' s) @4 P. i2 [
}
4 j( Z! p: @+ m# tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- i9 d$ X3 i+ S8 P* Y+ G2 p+ K. J
{/ `) H$ q& N; T
for (int i=0;i<MAX_INVENTORY;i++)5 [8 u1 R# E- \5 A, }
{
2 U/ p; o7 X* f6 r if (m_Item.dwId == dwId)
) o. K. g3 j N+ ]. C( T6 r. ? {7 E( c* n8 _! n" H9 W2 e$ X
return m_Item.nIndex;
; J* ?5 O0 | X) q- y7 e% ` }1 T" H8 B. D8 }% _+ P5 D
}3 A* X ?( V. d
return 255;
, n9 L @1 K! `}
( H; h3 N% W5 @. [$ r: Kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- ~+ K2 q! ~. s* m* [{( F* Y" _/ H! Y$ z8 H
BYTE nTmp = 0;, h5 i5 s6 N$ P1 @$ z+ \: M) J' H$ m
bool bDest = false,bSrc = false;4 \- D* N" @+ U1 m" s/ T0 q- a
for (int i=0;i<MAX_INVENTORY;i++)+ W" }, L, F4 {. {* ^: g' T8 [
{
$ s, O# i9 J" o! a8 S% i& m g+ f if (dwSrcId == m_Item.dwId)
; l7 [$ b5 d( r" ? {2 |) Z( J4 W& F, V9 ?$ E- I5 q
//id相等 则 改变对应的dest和src
F2 u% \) g" u8 f/ ?/ P" H6 q nTmp = m_Item.nIndex;
: G! ?# i% H4 | m_Item.nIndex = dest;6 [9 r( |) @, O3 p
}
+ a0 c' k# D) q* g. |$ M+ A }3 i& s+ R6 B- l2 @- y
//临时数据保存完毕,交换开始. s/ Y" N3 D A
for (int i=0;i<MAX_INVENTORY;i++); I+ n; g0 C1 C# T8 u
{
7 [4 E; d6 f" [# R7 F if (dest == m_Item.nIndex)
; k2 k3 F* @# b+ E4 a" R. z7 G {
* k* S2 s. ^. m- B7 |6 ^9 ^ //id相等 则 改变对应的dest和src
! l: ]; E1 u. m& L( y* | [ m_Item.nIndex = nTmp;* E! V7 ~! ~! q! W
}- Y/ }/ S. _$ O$ I, a o
}1 q& N: S. v: L* L. s3 o' i& l
}
$ p# w4 J1 n4 ^) P};
1 ?0 w) o* \1 ~9 O- ?' M-------------------------------------------------------------------------
9 r, j( v7 _9 A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) Q, {2 \3 {' ]1 y% c$ s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 j& N! @$ k$ e6 C% w& F/ H紧靠其上添加:
' C! q! [, g2 R8 J0 h* `; a9 Xif( pWndBase == &m_wndMenu )
& O+ F: M( `0 C: {! d% r% C; f{
5 H9 R* d0 B/ I* E4 O) M3 x: w6 z switch( nID )
, z% i2 D5 m" g- I+ Z5 |0 I' Y6 p7 C* s {
& K% | k: p5 U6 E, r case 2:* R" R6 V* p" u0 ~
{9 N5 y: ^- Q2 C, s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) t' V: _. M% |4 y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 o. e$ U9 c# N( a% D {& Z5 h9 d* O: L8 Z8 A
break; z E& e% e, W3 D! K
}. q/ }* F* u3 ~+ T% t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! h* G, Z: k: w2 h- S, S; C
{
3 M. r4 W4 x, y9 `2 x' k9 d& F$ ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 s, ?4 S6 ~! Y$ O
if( !pItemElem )) ~/ u; O, O) _1 Z ?2 \( |9 h
continue;6 |$ O6 U Y. \, F& g/ p) b( U9 E
if(pItemElem->GetExtra() > 0)# h0 |, W4 S, M. W
continue;: ?9 z9 \6 Y; N e8 \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 e/ ^$ F. E' }0 ~ X continue;
* H* @- ]; f( x, n2 H6 ?1 Z( p% c if( g_pPlayer->IsUsing( pItemElem ) )
3 W# h5 }* o% }% R6 R! J6 F! v continue;1 p8 A, a/ T# f/ W
if( pItemElem->IsUndestructable() == TRUE )* w/ ~5 ~" `2 y
{5 _7 k1 U1 W2 c$ [1 ~
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& A+ n7 E. p; G, F& k# w
continue;4 O, a% }6 C' K) I
}
' b6 z9 G7 z- U: H( g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* |7 J& x% U# `: \; E; t5 G- |
}( X; n* S# j6 q
break;, b& J/ a0 v, @) A) H, K
}
9 ?7 `2 C, ]' c# S7 P2 ?/ y9 Z, i9 I case 1:; O1 W% m6 t! q4 C, O/ f* l6 F' w
{/ S, v$ c2 r' j Q2 F
//整理背包
8 N% t2 w7 o/ H" X- V //////////////////////////////////////////////////////////////////////////3 d0 d: X/ L" P& x. l) I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 K# l- v: d/ b/ N, o
//////////////////////////////////////////////////////////////////////////- B# e% S% l9 N c0 x$ b) L2 Q
//////////////////////////////////////////////////////////////////////////0 E- H% O) _+ Z/ ^. n$ d) Q
CInventorySort* pInvSort = new CInventorySort;
% _6 z8 |% B% q }( W" w1 r vector <sItem> vItem;
% q a2 }" ?% [+ [+ p1 p, W# G+ p vItem.resize(MAX_INVENTORY);//初始化大小0 \* J, k9 g0 T4 Y/ P+ N! T( {: R
//////////////////////////////////////////////////////////////////////////
1 X% h( j4 q+ Y0 R9 T0 \7 U7 l //填充数据6 ^. E2 ]7 M, e
for (int i=0;i<MAX_INVENTORY;i++)
) x, L% r+ D+ O2 H+ f# ~# b {
) M: C7 m/ _0 G# K* D/ \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ K3 V7 X) ?5 w7 w& o if (!pItemElem)
( S/ ^8 z8 o$ |+ \. O/ o& X* x1 T {
) R. A* u! x) C! b# Z) D3 E- } vItem.dwKind2 = 0xffffffff;+ |" i+ {3 j, _8 T7 B* L5 A; L8 l
vItem.dwItemId = 0xffffffff;3 K5 R3 `' c& ^7 E1 a
vItem.nIndex = i;
9 s: d; Z! G ~4 s. y( z7 v }else {
3 [$ U% R2 w7 D0 o, @1 u ItemProp* pProp = pItemElem->GetProp(); y' G( K' n( F4 C1 T* q
vItem.dwKind2 = pProp->dwItemKind2;: U1 V5 D4 C. }4 W+ l) ?8 K) i
vItem.dwItemId = pItemElem->m_dwItemId;
( \4 a- B6 U* ~( K x( \5 T vItem.nIndex = i;
* [3 d/ D# F, X6 y2 j; b }
+ q1 t2 ]4 m8 f$ Y2 ]! j# |" s' a1 } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 p+ ?6 C9 {: o7 |8 z( A& i/ n }# X" N5 Q9 I- y! f2 p0 |2 }# @
//////////////////////////////////////////////////////////////////////////
" d/ s" I6 H2 u6 O7 a7 [, G' p9 G sort(vItem.begin(),vItem.end());//排序( M' N5 {7 i6 w6 a
//////////////////////////////////////////////////////////////////////////
4 f1 q0 e/ u6 | N. M* c$ | //交换3 I1 D6 l D. g7 m
for (size_t i=0;i<vItem.size();i++)
4 _6 `: w* v& _! ?6 v; o {
# l% s2 g W7 C& h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 B0 D( I5 q% p9 y1 R
pInvSort->Add(vItem.nIndex);
1 _. T) ~- R m$ f }
* \7 H/ x4 @/ O9 J( E1 b& m BYTE nDestPos = 0;( w1 T: M$ F& m0 U7 @- T
for (int i=0;i<MAX_INVENTORY;i++)2 z$ A' g! j0 l* A0 a4 b
{0 Q6 u4 `5 }6 m' C" M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 V; s" U/ m3 r/ e8 X
if (pItemElem)
* z3 a/ K4 ^2 Y `5 u' Y {
" |( @5 f. [7 P2 ~ if (IsUsingItem(pItemElem))+ J% E; T, b, W* \$ r8 u; p
{
8 _( Q. K! z: E //这个位置无法放
# C/ W' A' e; u. U1 D nDestPos++;9 v4 V8 [: c! x& m5 S6 S# ^
}
. \4 S! Z* Q4 i3 o3 D; v3 _" k0 L# I }
- {3 M" F/ j5 ?; R$ u2 U BYTE nSrc = pInvSort->GetItemSrc(i);: E' M( b' P1 ?( d$ Y0 r [
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( \& E" z% ]- @( L' g if (pItemElem)
! z! y, s8 e# F. { {5 {1 U4 [, B/ X& [! n* ?( }' X
if (IsUsingItem(pItemElem))3 Y7 ~4 L1 {/ D. w* j8 A% o
{
- `4 U: N, @3 T$ v) t //这个道具无法移动,跳过
8 t) ]( V3 s5 c$ e3 @ continue;7 i* [" G B0 p# J
}. ?7 h! }! f+ i6 h0 u
}else{
0 ~3 \$ y; i5 b0 E T2 D //空位置 不用动 H: _+ T/ x+ b5 [0 ]
continue;" T% @) h4 S+ L
}
4 i: k/ F1 ?% w' h, T N" h //////////////////////////////////////////////////////////////////////////
& r: M: I. s* M; |/ D k5 h4 b //开始移动
2 s/ w4 [: E8 ^0 f0 Y7 Y6 ^ if (nSrc == nDestPos)
! J7 e, p9 P: C K {
# I! W& P; F8 f) _5 N) j //原地不动5 Z4 w3 E4 Q @! Z: Z9 Q
nDestPos++;* d8 i9 d5 i" R7 T
continue;+ I$ j4 E4 e b, `1 ^- C5 {. x5 f
}
+ R4 N$ T7 j3 o. p6 ` A& L; E pInvSort->MoveItem(i,nDestPos);8 }) V+ B& Z3 X6 O9 `; J W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- k6 C3 t5 i* s/ o1 T' k
Sleep(5);0 {* r& w9 [& u. R- M+ W/ |" v
//Error("移动 - %d->%d",nSrc,nDestPos);; j/ w$ G6 k% T* V' p& o! N# S
nDestPos++;
9 ^ M: H4 b1 k6 O7 P }
2 ? n* K& u& M- w1 F //取第一个元素的信息: G$ n& q% \; ?
/*. B$ l3 {" Z+ l) d9 o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' @) G- @/ v4 n. v {3 h3 _9 C/ \9 r0 _6 b
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- T. x7 u- }1 ]! @2 T6 l, F E: t! R0 I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 w8 D# ]7 \2 J, D }
9 m r" \) {' c7 u/ B */
# Q2 q! V5 ?+ J7 p7 M2 | //////////////////////////////////////////////////////////////////////////
; J: u' @3 ]+ Y* `) l3 Z: H break;
' i* m8 T! O& T; b }
: B f- ]+ c5 z }
* n' @( u/ u) I8 [3 Z}7 z$ W% O* k9 @4 U
m_wndMenu.SetVisible(FALSE);9 e5 {1 o+ O7 g, o& d- \0 @5 P
d1 B. `& u# ?9 O, |--------------------------------------------------------------------------------------------------------
5 s+ a; y9 L( |, X3 ]: {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" E' t/ L3 Y! |' |( _7 A% l
{9 d. ^* J" P) L8 y5 j* i1 _
BaseMouseCursor();
. [1 M' `3 x/ Z/ y8 L! B+ A2 F}
8 ]+ J2 w, F. Y9 b9 ~$ \( D" S在其下添加:7 s/ n, u. [. E9 p {3 C6 n0 E" u
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* H7 k. P3 i$ j8 S U{
: q( U1 j f! v: Lm_wndMenu.DeleteAllMenu();+ z& z+ S7 S2 [' U5 ^9 E( f; G
m_wndMenu.CreateMenu(this);5 E3 r- n" x9 ], m: L4 I# f8 p% T# u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 j" g% p: r0 e3 C: \/ A) z+ Z2 ]
, T$ p! P$ R a2 Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; G, o1 f& E& S- u{
6 ]: N& c* }; G" B$ s* X3 X2 M1 S //P以上级别才可以删除所有道具
, e3 R7 ~" Q* R: P; B, K m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- Y# M7 l, V6 ?0 g. M" A# ]}4 I5 D# S2 K! L8 O1 G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 {1 N- ?4 S, T e/ D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ H0 y* e2 w) l: qm_wndMenu.SetFocus();& P( W) t5 K. K
}) X1 m7 O: N0 x; e- Z6 r0 U8 R
------------------------------------------------------------------------------------------------------------
: O: W7 w! c Q! h/ w* R: M _' }*************************
2 q8 _! }+ M4 u, A# V& c7 wWndField.h文件
( }3 h8 f$ V$ w*************************3 Q& o" D3 X- R# ]/ C+ W4 s2 H) \% J
搜索:BOOL m_bReport;0 q( B+ C' M8 h$ b- s
其后添加:
5 c; L/ a/ ~' y2 d1 p$ I5 b1 j1 J. X8 YCWndMenu m_wndMenu;
" ]7 s6 j2 \3 ^& @4 U! S7 a4 B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" @# |8 p; j0 |- _1 F其后添加:! l+ F0 a; x: E
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: `8 S2 I8 T, J/ u
* k m$ O5 [2 N- q( F* p4 o/ W+ j9 P# X3 E/ |$ `$ J/ N
|
|