|
|
源文件中_Interface文件夹下WndField.cpp文件
3 R% m9 W' ] C# Y% M# e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! e1 e5 W* h' @* M$ K" @4 N
" _1 P' P$ E$ ostruct sItem
0 m% i1 D2 ]" N& T' |{; Y0 t8 y( F8 T" ]
DWORD dwId;1 o& R) D2 j5 k% e
DWORD dwKind2;
/ C6 ~8 V! x3 H+ K5 x7 c' nDWORD dwItemId;6 e. k+ o" @7 x3 i
BYTE nIndex;
/ E! O: H; _7 W% qsItem(){0 [# x! C0 W# _
dwId = dwKind2 = dwItemId = nIndex = 0;
3 g/ b: H& f1 D0 j/ z* W. f}! ?& e6 \5 K [
bool operator < (const sItem p2)
- E& i- ~9 r; ? u: l; i" L{
3 m- v. `* G9 R# ~# r5 E b, l6 O if (dwKind2 == p2.dwKind2), g3 h) ]. R- P7 r1 |2 Q
{
: w" B, x: j! q9 I return dwItemId < p2.dwItemId;
. ]. q' S V, n) f, n }else{
, D; l" b, @5 `& \9 l0 a return dwKind2 < p2.dwKind2;4 L E3 C: F8 Q" E( G9 D
}* {4 Q6 c$ U9 a0 p
}- g6 Y: B7 y5 b3 w
};
6 V& R% P- k t3 G( _6 Eclass CInventorySort
7 k5 y0 q9 w0 P6 x{% K$ L$ s) Y6 p5 k2 n$ \
public:
) p( l+ O& I- a$ L8 j% \% l( HCInventorySort()' f- g& ]" _7 I3 n$ N4 W
{
7 {% a, z! J5 E* `5 A5 `: b m_dwPos = 0;
H. h& N$ `# y9 D}
; M# S, k; c0 ?& P0 S# B~CInventorySort(){}3 a% A" h/ Z- ^
private:
; A6 ]0 d$ c, B* g MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 s+ q: \+ C- I) C
DWORD m_dwPos;
' a- F7 g8 | k! F% k t+ ~public:
0 E0 n0 v% A+ T1 i; ?void Add(BYTE nIndex); o& G) Z- D# t4 p9 M
{3 x- l6 r* D% A. E9 J- v
if (m_dwPos >= MAX_INVENTORY)1 v' J/ E, d7 q4 c% J
{
, Y. ~. U& ^# B return;7 }: Y4 y" |5 E. E
}3 @5 c& q" l' J: M$ O: |) Q
m_Item[m_dwPos].nIndex = nIndex;
( r8 D8 f8 {7 m7 _8 U. A( n4 [ m_Item[m_dwPos].dwId = m_dwPos;& B! b2 r! v8 V# O9 U3 e
m_dwPos++;
/ ~/ z: J& k5 @- y2 F}
" i9 i0 Q8 c# f! o/ G6 QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" v* r* }8 i/ Z1 Q( y
{
' T) M% ^. ?* `# F5 L3 @; i for (int i=0;i<MAX_INVENTORY;i++)
2 d1 A+ k$ }( }5 @7 d5 ? { E F3 l/ ^ ~
if (m_Item.dwId == dwId)
7 T5 V0 a4 C! j f {- T! q5 X% B( P; r
return m_Item.nIndex;
+ \3 `, N* U' F% x4 m# K }* |( C2 H6 K8 \. W' ^
}
( n' O9 U0 M5 S) m- e return 255;
% r* l, |2 g9 E3 ]% {/ U9 n}
+ F' z+ O' b7 Z2 Z6 D! pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) u0 y4 V2 ?. [
{ U9 v! C4 Z2 n
BYTE nTmp = 0;
, R, l# \$ S, u bool bDest = false,bSrc = false;3 k3 r% z: Q4 W0 M* Y- y
for (int i=0;i<MAX_INVENTORY;i++)# D5 u. S2 ?, K, V$ k
{
" v* t" t" g8 r: P2 Y if (dwSrcId == m_Item.dwId)( a& o. z' Z$ `$ t2 v
{
0 b! K# J/ L5 `* B1 p9 I //id相等 则 改变对应的dest和src
" O8 D& L/ a8 ~) F; d nTmp = m_Item.nIndex;
* ]3 }' W5 ^) S' a$ P5 S/ y m_Item.nIndex = dest;7 N" t% a3 N2 A8 L" [, \
}+ P4 v# o* P! h- v" |
}8 e& f% F3 ]* Z" J
//临时数据保存完毕,交换开始
9 r( H" L( H5 S& P1 a. G7 w) a6 s- \$ Z for (int i=0;i<MAX_INVENTORY;i++)
+ ~6 J2 S/ ^0 D( e6 X# Y0 o4 N' v {
# u) l: _* J J2 R! @% a4 g if (dest == m_Item.nIndex)
9 @/ O/ }& T0 a# n2 j( W: b# E {
0 g- U+ a2 Q. X( N, i //id相等 则 改变对应的dest和src8 }, t7 m; ]: A; y' y( W7 A( | r
m_Item.nIndex = nTmp;, Z n" c: Z5 w2 f1 c" E( r
}
: D. N/ A: F" n4 x* ]+ b& m }: R' a: N4 @3 z" R! i
} d6 c( ]$ N0 l
};
- J" b+ ^) S( J5 J5 u1 m9 D) H-------------------------------------------------------------------------% [" ?, F: c# C& H) j3 X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* e) m6 ^. M3 u6 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! M% c! ~% ~- l+ E% D
紧靠其上添加:
- w" J/ \! i5 D& U7 g# Rif( pWndBase == &m_wndMenu )
$ l( G8 {) ~8 J( a: _( d6 `' R{% ?: g: V M+ L" @ H
switch( nID )
5 X8 a' Q& M8 z. Y, B" Q2 u8 J6 I, a {
2 j! t/ K- z1 y. J( I case 2:: t, F; } w7 k3 v# t
{
1 j8 g# j) V% Q \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 r( H- B+ w# E4 s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ E" p. @- ?- Q- K* z& R
{
4 H. z7 a* O+ d- a/ N& L* i1 W break;
4 `; Z# X6 ]) _1 b0 V* _- Q }
J; b! k! v& k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) g5 E5 H! n: J9 l9 h
{5 Z% w$ l6 ]$ t2 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! O! n/ H* F& \5 C0 v2 t8 a if( !pItemElem ), D$ x2 c8 \9 q: w/ N
continue;
8 M$ l& R7 t# O if(pItemElem->GetExtra() > 0)" J' Y3 s' o; T: v! T/ R, }
continue;
9 D9 t& @* n5 R2 ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 P- D% e- P* I! Q$ l0 d k continue;
1 D) H; {# `4 u4 L i" ^ if( g_pPlayer->IsUsing( pItemElem ) )
" b& C$ c3 \. d* E! m: _6 X continue;
" m9 S4 Z1 \, H0 e) \: V7 j2 ^' d if( pItemElem->IsUndestructable() == TRUE )
% c, G O6 V* B6 c# V! X {
* B' ^% ~1 s4 d0 j) s4 j7 ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 B* N0 a( U! O; b% ~
continue;% Y# |$ X9 u9 {6 t" P& a4 n
}
$ N2 r& Y. T. X, z' u! x5 V5 J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 u O$ `# }) q p9 w7 x
}
3 I4 ] E/ k+ ~/ H' q break;) C% u& i" ?2 I, n3 F
}; j6 p# L3 ?+ W' m
case 1:% C a* F" G( U$ G! q5 i
{+ ]" t& r) T5 F( i7 b
//整理背包
! y# k* _ d% ?; q4 ~. ~- d" v //////////////////////////////////////////////////////////////////////////
) w' q1 }4 E4 [7 t1 k4 O3 k/ n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 J' g: d8 k+ i5 O5 E //////////////////////////////////////////////////////////////////////////
& U6 c+ S8 h. W: [ //////////////////////////////////////////////////////////////////////////
& H3 \& ?' |& r: P7 A CInventorySort* pInvSort = new CInventorySort;
% G T* {( N% s) R vector <sItem> vItem;: o' s3 n1 J: J: R% z* o0 D
vItem.resize(MAX_INVENTORY);//初始化大小2 ^5 ]* M: L% |7 S- ?
//////////////////////////////////////////////////////////////////////////0 n2 z, _2 i( b! u6 H
//填充数据
( l7 y6 @+ }9 s p/ J) D for (int i=0;i<MAX_INVENTORY;i++)
2 e' p5 N: q$ }, O, b, R {; ~! p1 r1 S \. b$ x: P& R$ i6 t( u- @7 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 x, l" p; ~& R/ I Y3 L3 M, @" ^
if (!pItemElem)
: a+ i2 W& |( \# K8 l2 T! w/ G/ D3 g5 a1 X {5 V# b9 c* ?$ a5 w$ b( {
vItem.dwKind2 = 0xffffffff;5 t/ H3 M2 K/ B$ W$ H1 Z
vItem.dwItemId = 0xffffffff;$ a/ S6 d5 T0 ~3 x' A4 G
vItem.nIndex = i;# i/ S' C: y8 q h- _; E. ?* I8 ^
}else {
) Z4 C# U+ W, R: }) d ItemProp* pProp = pItemElem->GetProp();) l" S, f, C+ @9 X
vItem.dwKind2 = pProp->dwItemKind2;
, ?% d( m( f5 G# v6 M9 i8 H vItem.dwItemId = pItemElem->m_dwItemId;
o: w: I1 i/ i7 C" u vItem.nIndex = i;! a( |' d, }) J( x6 ^! ^& f, E
}2 Q4 ]& `5 h, w$ E# }" d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, P3 ]; ~9 W+ h& W
}
3 F: f2 c" f6 H. v" o# u5 m6 c& \ //////////////////////////////////////////////////////////////////////////
l2 Y' f7 s$ j+ j# V; E sort(vItem.begin(),vItem.end());//排序
4 L. v4 N) h2 f; ]% f4 C //////////////////////////////////////////////////////////////////////////
; l+ \+ n! q* Y, |' [/ Z0 v, x //交换% i+ T# J6 ^% b% f- |
for (size_t i=0;i<vItem.size();i++)
" t' Y3 V1 z5 l2 F: _ {
* N) `, a* Y) e1 y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 c! p- }" T" V! @
pInvSort->Add(vItem.nIndex);
, T# |% G' w) `8 n }9 R# }# U2 U$ U+ J0 ^
BYTE nDestPos = 0;/ M. u3 p6 k! ~- e6 c2 H0 ~
for (int i=0;i<MAX_INVENTORY;i++)
& k# n, B" p. Y L; j/ p* Z {$ |6 j" K# k6 Q, D" N, p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 `% w6 I$ U+ N) z& h0 B& V$ P if (pItemElem). X& b/ ]: U3 q9 I
{
[) p; r1 m1 r& O0 A; m& Q+ w- x if (IsUsingItem(pItemElem))" [& J" G) a, l, X/ h' k
{: A m" E* y( C3 k
//这个位置无法放3 {, T6 i O* l! R6 j* Z) c
nDestPos++;
' [# y, W9 ^4 i2 q }1 t( Y2 T* j/ c) M
}+ h7 F3 `; B! T) b8 M
BYTE nSrc = pInvSort->GetItemSrc(i);1 H: P: n3 m: z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 O2 e4 I! x6 y$ r3 G! ^
if (pItemElem)
5 C1 P/ d4 K) T0 L8 \1 E {
% B( s8 ?* [8 q5 u! k if (IsUsingItem(pItemElem))2 p+ ?4 t/ q3 j( c2 A: a
{
- o7 w, B8 j" Q [ C; l4 c //这个道具无法移动,跳过" [2 S+ [3 i6 H% B* @
continue;
+ N5 U; O; I& }( F6 P }
; i' {4 i8 _+ S( T6 X }else{
3 v6 w) I, M+ P- \: F3 l9 \9 R2 I7 C //空位置 不用动
6 u9 \1 q6 {3 K; e continue;6 J2 r; w$ w; a/ ^
}) {% R# `' c ~) U
//////////////////////////////////////////////////////////////////////////+ A, Q: l& b* k9 t+ ^9 K! B$ N
//开始移动7 S7 x1 G( c# R& j
if (nSrc == nDestPos)
N B1 q* L9 h+ T- `6 N: s! B$ q {
, z" _2 P8 C5 N5 C //原地不动
, E1 x6 g+ c9 j+ B nDestPos++;
+ P' X q# U# L( J: b8 i( P' L continue;) E5 e3 j" f; i7 D( y: C: h5 Q u f
}
4 A+ d& n3 N8 R8 n; @* t9 _% D pInvSort->MoveItem(i,nDestPos);
# l' M d; q. L+ I `7 z# p( @( u, A g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' {' n1 x7 |5 l. O1 a. R" c Sleep(5);
5 A; O; S% Z1 |+ i) r //Error("移动 - %d->%d",nSrc,nDestPos);
! \! s. _3 A& ]' x4 y+ U nDestPos++;
& G0 x* \+ a( x3 O6 `3 A }# p( C a0 R* Y
//取第一个元素的信息- f. v/ q4 }7 n. Y
/*
) g) T& L5 c7 r) u* U! q3 n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 L3 l: ^; A/ @4 H- j
{
& L! I8 y. _# @' I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 G% v& R& R$ v/ J1 `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 c+ g% d" W* A
}
# [3 ^) I6 ?* p) _4 ?) U */! ~; k1 \: N6 X. ~
//////////////////////////////////////////////////////////////////////////
# g, R3 K% P+ d! ~ break;; D2 g( ?. R2 t, N; {+ N
}+ J2 R; M5 I5 P+ G# u
}
- b. E2 O5 @& S! W% ?) i}
" a' ^2 F, m6 {. X+ Wm_wndMenu.SetVisible(FALSE);
! J; x/ ]( g# C' N5 p
; X/ \+ O) X) ~5 ?/ ?' @5 u--------------------------------------------------------------------------------------------------------% v7 E% `; {1 o) z3 N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; X; i! Q, K5 Q& \2 ^{
8 Z% z+ ~( F9 w$ e+ \4 |; G0 WBaseMouseCursor();
b0 ~* B; S5 o; ?5 Y! r* u- i}
3 E8 I; V O& t0 F在其下添加:
' M1 `, m, n: G! a2 E) K% _! c9 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 T ^) A* t/ b6 D{! w" M, t2 w7 @5 V* `
m_wndMenu.DeleteAllMenu();, [4 R; n4 Z3 k" D0 R, x( E! T
m_wndMenu.CreateMenu(this);
) v% e2 G; S% qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- V& }* a* {2 V1 U {+ ]4 x! i/ K9 |; n! k/ S1 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 X2 N- {* R1 ?7 c{: M8 z5 ?3 b/ K
//P以上级别才可以删除所有道具
) z/ u0 R& d/ R3 C3 s# @) \1 F" b Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% A% ]( Z8 i+ V* w}
+ x- V' r0 C L2 W8 Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. O Z! _, H$ f* J, W8 Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 F+ U$ B* f/ u, s* G
m_wndMenu.SetFocus();
/ m; t+ Z6 d7 j- K, y}3 F4 V: E( w: C) h
------------------------------------------------------------------------------------------------------------
2 m$ V7 e3 @! P: X7 [# }" Z5 A# Z*************************3 K4 E% R6 O- { T/ \( P& F9 x
WndField.h文件5 e: U6 K( f7 y9 I* l. ~
*************************- m* i+ m$ m' S
搜索:BOOL m_bReport;' h* q* d0 k; b7 j7 h( m
其后添加:
0 C* B" _7 I! Z# Z# R; q% ~CWndMenu m_wndMenu;
( j' h1 K) g) \6 g3 l+ x& M7 @% O+ U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ r; I4 m8 R: A. w1 `! B; X# w, s+ U& ?其后添加:
3 D! @" n6 F# }7 g& kvirtual void OnRButtonUp(UINT nFlags, CPoint point);, P0 F3 t* V( w9 H2 i! g
$ m1 O( y1 K2 |/ q$ X
8 I' Q/ f6 S3 J; E! i& n, u |
|