|
|
源文件中_Interface文件夹下WndField.cpp文件
; p! G: [; A/ C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 T9 u1 `5 G2 {. Q5 w: _' A% s
- j9 c& f$ v7 E. Qstruct sItem" R7 X& Z/ Y' h o; V8 z; o$ ?
{
& s5 o# Y3 B8 J* c6 G* xDWORD dwId;/ f ^3 v7 y: W# D1 q* X7 C2 W
DWORD dwKind2;$ f5 X5 p+ k# ~, I3 L
DWORD dwItemId;0 c/ _/ M1 D# o9 C* u6 {$ C
BYTE nIndex;: Z# @( l; q1 m7 U6 i* i
sItem(){
+ f8 m1 L# X% H" x* U7 }% b4 k dwId = dwKind2 = dwItemId = nIndex = 0;( O8 q( p3 U7 X3 d' s' \' X" E5 ?: E
}
* T8 o/ O( M4 pbool operator < (const sItem p2)7 ]- T4 `$ u9 C( x" c
{; H/ h+ ]5 r) l
if (dwKind2 == p2.dwKind2)
$ G0 r I) Y, c1 a9 k* X) t {
: o% N7 r/ Y$ p% u2 j, x0 h& W return dwItemId < p2.dwItemId;5 ]$ j0 j& K: s0 z4 w4 d" _
}else{
! M: j- C" @# q+ d return dwKind2 < p2.dwKind2;4 N2 @* u* r1 m: Q- }
}
7 H7 E0 F" ^5 F}; o2 c9 l G1 x( W: F
};
8 z7 j# |% R7 K9 [3 D; \class CInventorySort! h9 \" J' a( b% L; z
{
) M2 o) s" s/ m; c0 b- b" ?. }public:
+ ?* H( d* w- C; h6 xCInventorySort()- {: q2 m R3 C$ C+ h: D
{; A5 l" H! E& [% F _& d
m_dwPos = 0;4 O/ L3 t+ N" O5 T
}( Q* z" ]# [( M$ s! z
~CInventorySort(){}
% W- o0 m* A6 M5 lprivate:& S7 ]+ }; Z9 u! Y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) H( @% U6 k% n; @
DWORD m_dwPos;: n! v6 s. G$ a" n2 V
public: a9 h2 q( N2 y& o* c u& _
void Add(BYTE nIndex)
( M! L0 f+ O; X r7 Z- l7 Z0 K{
2 T) i8 l6 u1 m P4 H if (m_dwPos >= MAX_INVENTORY)
; ~ x$ q, K- j2 T; g {
% F% \) Z, `7 p# U7 I: P return;+ u& ~- d3 W, Z/ @6 u
}
3 x$ w4 W" u! Y+ J1 A' [' F m_Item[m_dwPos].nIndex = nIndex;! `! S' Q: G- F6 S9 P
m_Item[m_dwPos].dwId = m_dwPos;
$ O% S, O/ v; w3 F; y! r8 O m_dwPos++;& R* D5 A% L' h
}
3 _% S) o ]0 ^9 p9 F8 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% L, e& m5 Y0 p q% U) ~/ g& o{
* _5 `" Y" ?$ |7 F3 P for (int i=0;i<MAX_INVENTORY;i++). E1 Y4 u' \. T T. A, g$ n
{7 N" M0 [1 X3 G4 Z3 m( k1 ?9 a
if (m_Item.dwId == dwId)
* K0 N( W0 N4 v" ~2 f+ ~% P {; D! ^$ D! i& w! P% ~8 q
return m_Item.nIndex;
. ~8 y8 f$ A: B- ?8 D7 D }2 c8 O/ t9 ~1 \4 b3 D+ U7 s& t! W/ }, f! a% ]
}# p- m4 h9 D2 n( C$ s
return 255;( f* B6 k, r, o0 j1 o3 r3 B
}& j' z! A2 \/ `* F4 D1 N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& v5 z; z" o2 A7 `9 E/ o, |{
3 I- k, X: G t4 a BYTE nTmp = 0;
! E D5 p. l8 v bool bDest = false,bSrc = false;
- D7 S6 }3 f% ^5 V8 B3 N0 w for (int i=0;i<MAX_INVENTORY;i++)
4 O5 b4 l; A6 j# x {' T8 m0 u3 m- b- Q# Q
if (dwSrcId == m_Item.dwId)
: s9 T2 [! ~# E; v& ^ {" e# ]0 F' Y f- O
//id相等 则 改变对应的dest和src
$ }- I: s4 N9 I% e. n; h nTmp = m_Item.nIndex;
+ Q s$ z9 l' L9 |8 @2 B1 i, a0 l+ Z m_Item.nIndex = dest;
! t8 B; q+ Q5 S, k }3 h+ d7 |; ~% G5 v E3 ]3 l6 I
}
3 w% z$ b3 U1 G; ^9 T! P //临时数据保存完毕,交换开始
" C+ I8 x% g: j1 Y3 {) I) | for (int i=0;i<MAX_INVENTORY;i++); w+ w; }, c6 J8 s
{
% T) ^# R* E) ~" H% j if (dest == m_Item.nIndex)6 R: ]& B3 G% |$ g/ y( o/ p3 K' O- p
{
0 {5 i: ^0 |1 @$ g& a //id相等 则 改变对应的dest和src3 z# Z" q; d. W7 q, h1 J; b. y& G
m_Item.nIndex = nTmp;
& ]; ?) T' C! c( ]3 S: K- [% T }: }- }$ q {. e
}
/ k1 J0 s. G/ ^. H U}: W* ?) ]; C. S3 | t H0 N7 P
};$ f. U4 b& Z) \# X2 G4 }
-------------------------------------------------------------------------5 }2 H$ R/ ?$ z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ^; Z4 m5 u7 Z7 n e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" _6 P6 t* D$ F
紧靠其上添加:
; _; z+ R4 H( ]! X% G7 g' I6 Z( K/ Xif( pWndBase == &m_wndMenu ); R2 \" ^) L, e; c `) r
{! G" p) Q T) k' L
switch( nID ): B1 v' Y$ e! s d% m. q
{
1 W$ B: e a3 x4 y case 2:
1 g$ k; x" D. y q* k0 U0 g {& R( F( _. G* G" r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 z% m: K1 I# _2 O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ v; c0 w; m, e5 P# g/ {) R
{8 R, c$ R. S: t+ u+ i
break;8 f H. m d' t' J7 q
}4 x% L- {2 c5 K0 ?8 ^6 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 d0 s \4 N9 Z5 A/ K; z, @3 m1 r1 ^ {
. ^& E n& ?, `9 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, d8 E! J0 y8 Y+ L2 \9 D if( !pItemElem )& Y3 J T0 @, O* Q- R" i6 B9 o8 x W
continue;6 O4 C% P3 \. P5 {4 E! y" k& }' s
if(pItemElem->GetExtra() > 0)
0 Q- `% R/ R% B0 z& F% U& m continue;
4 V8 I3 q9 v' O% G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' [, i9 G& j/ [) ^) \7 h# u$ d- w$ u continue;
$ f2 o! H. R5 y& a if( g_pPlayer->IsUsing( pItemElem ) )1 @ c/ y' x0 g! ?# C; ?! s
continue;
4 q1 [( |: t2 Z0 g- u if( pItemElem->IsUndestructable() == TRUE )7 |; o! m$ }2 S9 x! }
{
8 V& J! p- F- c6 K( V7 s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 ]% k2 y6 R ]9 r1 w* m
continue; l0 z5 v( \. E$ [$ l9 ~8 i, Q% j
}
' N! [% f9 w5 F" Z- [3 G& r: q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, _: E/ D+ o7 _
}. s, D$ _5 a+ e# k# ]# F6 }4 G
break;
4 |! C$ s5 d0 a: [3 C$ N }
' j' t0 Y9 D, b' n9 o& S- | case 1:
6 T8 J6 J2 c5 D0 I* |: T {* ~( z+ d" o% K) T
//整理背包
$ T B E: w2 U1 p8 d/ ~ //////////////////////////////////////////////////////////////////////////) }% [ ]' @' j$ o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 a' P2 r) }7 a //////////////////////////////////////////////////////////////////////////
6 k9 z' |7 w. s) C* A2 L //////////////////////////////////////////////////////////////////////////9 c p- ]1 H9 L" `+ L' ]
CInventorySort* pInvSort = new CInventorySort;
: u1 D" ?& [" { vector <sItem> vItem;7 W! V8 S+ M# U2 |
vItem.resize(MAX_INVENTORY);//初始化大小
% z, o7 c. V: y: b8 s, M //////////////////////////////////////////////////////////////////////////
- H: n6 ^4 o- P5 l) | //填充数据
- ^5 E4 E. v1 p, I! a D) }2 l/ K for (int i=0;i<MAX_INVENTORY;i++)5 E/ K2 {# G3 I
{: N$ o" {; N. L- J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 C- \9 ~( P5 {$ { if (!pItemElem)4 L I; F% K: X, w! m
{
\. s: \0 K7 M vItem.dwKind2 = 0xffffffff;
# N, G. A$ d. n6 `1 M6 A7 K" {3 q9 G$ q vItem.dwItemId = 0xffffffff;
% [, O6 Z1 {4 c, [' X( ` vItem.nIndex = i;2 @: C+ _# @; R& s
}else {' F6 l0 Z3 ~8 O; F3 B
ItemProp* pProp = pItemElem->GetProp();4 D2 |2 I& m: o1 ?" a/ Y
vItem.dwKind2 = pProp->dwItemKind2;
( q q# Y- e% n0 ?' f& L vItem.dwItemId = pItemElem->m_dwItemId;1 G8 F% T2 T1 ~4 Q9 F
vItem.nIndex = i;& H" c1 F; F0 g c) _5 i
}
3 y: o3 Z9 k5 }1 p# [; f3 B ~5 \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 V0 a# `8 O" d }5 X# N# ^1 ?1 S
//////////////////////////////////////////////////////////////////////////
4 y8 I& q8 j/ ~5 Q [8 `) e& L" M sort(vItem.begin(),vItem.end());//排序
$ _+ o0 s) g6 e. i5 @% H8 b //////////////////////////////////////////////////////////////////////////% B9 w( ~; O! o- o8 [! B
//交换2 T: v; E. f) y/ f
for (size_t i=0;i<vItem.size();i++)
# D1 H! }" @5 t1 S6 {! V/ k {' y! ]" l1 G p, r+ G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ X+ x$ K9 n/ ^# p3 x8 c
pInvSort->Add(vItem.nIndex);0 |/ e1 c5 W% M4 T$ z
}
/ ]$ R3 q% n3 G3 V& t+ _ BYTE nDestPos = 0;
& c* s O+ m0 g, N2 V0 r for (int i=0;i<MAX_INVENTORY;i++)
, V; G# s6 Q+ T) e* y {0 I$ w2 H; Y% F3 U; V6 o- V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, O& e% A/ _ S% A" W2 F( h
if (pItemElem)8 f: ~& l7 i, F- I9 F4 Y" u
{2 B2 |" r3 }6 j( ?# B. V! Y
if (IsUsingItem(pItemElem))$ B1 e! Y9 d; H1 W+ S& m# }
{
- ]8 m7 d9 h% B" Q- N8 c. E. C //这个位置无法放
4 b% M4 b1 j5 X6 D nDestPos++;
' ]( ^6 ]. u5 t9 x: Y- L, c2 L }
9 n8 z1 h7 a5 o: F: ]: ?7 p }* x% n) {! O, T+ u2 z2 M/ S
BYTE nSrc = pInvSort->GetItemSrc(i);% I- k' n1 n/ W* x2 ?, I3 A3 q6 X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 P I9 R, p% k5 [6 W w! T5 v( ^
if (pItemElem)
% G, w2 M) p( ?4 l5 J2 d6 Z% P {- m9 D0 L5 G# R+ T$ w- r
if (IsUsingItem(pItemElem))# Q' E0 W) K6 e- Y Z
{. Z+ H+ B4 r, G0 v v
//这个道具无法移动,跳过
/ v' M9 W$ w" z5 k; ~2 g# Z continue;4 {+ a# c* ~( m. v1 o" C
}7 k7 ]3 r7 Y5 P5 ^0 e. o
}else{
! _& H8 x x- y2 w& k H, f //空位置 不用动
9 Z9 C+ A* P' I$ p continue;3 L. n9 R* T) ?- P5 Q0 T8 E
}
E! m/ v7 ~, U. U7 B9 y7 S /////////////////////////////////////////////////////////////////////////// i& r ?& V1 v$ _) O$ s! u
//开始移动! R# F+ E) |/ `/ W& N/ T
if (nSrc == nDestPos)
7 M/ }/ c4 Y$ [1 O) j% m {9 ~3 X+ n4 X: O' z1 H& G
//原地不动
) x9 N# c+ g" M' \* r% @ nDestPos++;
3 @0 e. {/ j& L4 R) }: b continue;" k2 z1 r) x* a7 U6 y& \
}
" ^, p; s) m2 b) _/ Y5 E! d pInvSort->MoveItem(i,nDestPos);
- C7 x! x) L7 {2 B0 `3 b! G g_DPlay.SendMoveItem(0,nSrc,nDestPos);( h! X) e `) ]& L$ y
Sleep(5);
/ e% t4 Y' y9 v" n1 W9 G# K5 r //Error("移动 - %d->%d",nSrc,nDestPos);4 B0 R4 n" F1 o4 R' y- t
nDestPos++;* R B" T" }. N0 G: G* v! i
}$ ^, o" U( u6 @1 Y
//取第一个元素的信息, Z2 Q1 a, S3 ]; x4 d
/*
- }3 I' W+ A1 }4 |$ x8 M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) p- l7 Q) `4 W5 ^8 @% @# `( M {
) W* p7 h4 ^% q4 a" R# E5 l4 F2 V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 x$ |1 p: _5 K% p6 A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% g1 a9 j" X6 Y }0 W2 H2 J/ `7 g6 b5 v
*/
, S* |6 k E3 U5 { //////////////////////////////////////////////////////////////////////////
, _+ s \1 p4 g3 V) Y break;, j" [& i/ p4 c* \
}
# a& J& G7 k t- [$ L6 I: F, e } " _: \! f; R& I# e
}; F k# Q+ w4 ?. e- N* V8 s
m_wndMenu.SetVisible(FALSE);
' ~( ^3 Z) T( r$ n
8 @- I. S# L( U p* C. v--------------------------------------------------------------------------------------------------------4 F; G1 c3 N% F* f. O7 h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& `6 h5 l' m3 W S{8 X8 {+ C' ?9 O5 C/ j
BaseMouseCursor();
- J7 k7 E6 x3 t+ ^3 a! |} @- a" H/ ^( ?2 P+ [/ j$ Z
在其下添加:
. A, ?, O4 f- s3 }# p# D! svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& ]* T o2 E! X+ E{3 M3 R, d/ {# l2 M4 v' n6 \3 N: T5 C
m_wndMenu.DeleteAllMenu();
; g9 V1 {+ m8 }* |# o& i; vm_wndMenu.CreateMenu(this);
$ u* }$ ^! a, y( `- H4 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); P7 Z! p9 u8 r: Y
" y' O/ F& N5 s. v' k) [( }/ [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 Z2 ]0 O8 A) }, f
{
; W- t$ D$ m4 R. m3 M5 h. `/ D/ E& W //P以上级别才可以删除所有道具# e9 j ?# F; l7 i: n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# R, P/ r0 L- {
}( j2 j6 A+ R0 I% U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 W @ z0 h) @" b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* x& z7 r$ B3 U$ x
m_wndMenu.SetFocus();/ g! k j* q2 i
}
" x0 b8 f9 m3 N8 V7 Q# ~" {7 M! r4 p; ^------------------------------------------------------------------------------------------------------------% `3 G b9 g3 U4 {% |1 a: i: q
************************** `- L" H5 H' `6 K0 Y! l1 S
WndField.h文件- I2 [- y( w) p% D- I$ v. A8 ~! p
*************************- C" g9 J( J3 A3 C4 l( u3 I
搜索:BOOL m_bReport;
( T i5 o! U) i其后添加:/ X$ u' t) k! p
CWndMenu m_wndMenu;
! s4 D. r" e4 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# n5 ^* W- `- P$ b* X. Y
其后添加:! U4 }! u( T- a: P9 h o4 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);! x+ ?9 l5 C' P/ I& M* A) o# [
6 [2 N$ }7 S# ?3 n) X
% }: X: _. L9 F+ w: z$ ?
|
|