|
|
源文件中_Interface文件夹下WndField.cpp文件0 G- ^3 C( O0 K9 D6 \0 a- N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- @" i) p8 k$ E
9 f- i; F& q# Y/ i; a3 P& h6 e+ gstruct sItem
f+ r ~( G& Y7 @# `8 H/ b{
L4 t" ], P; MDWORD dwId;9 F2 ?2 ^- c! O4 z. \4 ~3 T
DWORD dwKind2;8 K: K @( _( J$ L3 D! e: A% q+ x
DWORD dwItemId;
& B `7 t3 M9 B* S. y$ [5 X- BBYTE nIndex;
/ B0 g% ^4 t. YsItem(){
. v1 D( b( ^% k1 _& N dwId = dwKind2 = dwItemId = nIndex = 0;- l2 u# N) h- s1 O. d: u
}7 L0 S9 [4 {1 J" r# S( g8 F( c5 [
bool operator < (const sItem p2)
( t. J/ D9 H5 x# Z{
0 R" _& r: @) A/ ~0 A6 [ if (dwKind2 == p2.dwKind2)/ a* A& Z* f; F7 y0 e9 O7 K
{
- f/ w1 A7 q( H; z% b6 O5 j5 g9 r return dwItemId < p2.dwItemId;
5 s+ r, |: }9 \# G. W; I }else{, W, Y) o4 b5 k
return dwKind2 < p2.dwKind2;3 R* K, o. F7 E# H; p
}
# D( U( L. s8 _# z5 Y. M& ]; O}* `6 ~' m1 y1 E0 h% g( c
};# v( _1 c2 v3 ^2 y& m1 \
class CInventorySort
# {. C2 f7 O! O- ~{/ n- p+ p; r5 |
public:
" x! L. c0 V2 J! o$ cCInventorySort()
z! c( V9 v, l% m& N9 e& n! p/ u{( K! t' A8 [0 g7 i
m_dwPos = 0;
. `+ |* h, G. H1 X6 b [' K}4 X8 {; ?- N1 I+ g
~CInventorySort(){}
6 N" p& ?5 q, ?6 S( [, n/ ~8 Bprivate:# N1 V) N: i m9 d9 K! |' N9 u9 U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 `; C# L. Z" JDWORD m_dwPos;# W8 v( g) ?3 o
public:
N- L- x; b: q& s; Qvoid Add(BYTE nIndex)
; `& ^) ~8 L$ G. L( w{) U Z4 i2 t! j9 j
if (m_dwPos >= MAX_INVENTORY)
: A" J O2 p; X4 Z {
# {# L/ D4 H/ J& A. R/ @ return;8 c n, u/ G2 a S7 |& {) `
}) v; ~2 O" n6 u$ n( v
m_Item[m_dwPos].nIndex = nIndex;/ u' G5 G) _' C4 a3 J2 \2 s5 \
m_Item[m_dwPos].dwId = m_dwPos;8 X3 B* f# e: T: G) I4 a0 D
m_dwPos++;
& z; P1 M# s) O- @) f* g}
5 v2 H& J* m' Y" m8 fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ A6 p3 A0 u8 _$ Z: I{
" y4 X. t7 B4 N' f9 r; b( f for (int i=0;i<MAX_INVENTORY;i++)5 I! T2 U1 Y- `3 F7 U' s& [/ U0 g
{
0 }. L2 L/ @3 W if (m_Item.dwId == dwId)6 s3 \; x) [6 M5 o6 T# q( K
{! L* Y/ a2 I7 l8 X5 C
return m_Item.nIndex;+ H1 I% ^ V" J0 R7 |1 T4 Y
}
, b$ B# b9 H: S" j, C6 ^ }
: s: _& [2 R& {0 l return 255;
8 {2 Q2 ~/ z/ A% \1 ~. l/ ?& i}2 H& v. E# Q: u% p3 Y. k& s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: b) y$ a, a1 M, f$ ~6 R{
2 o" [5 o' L" [( ? BYTE nTmp = 0;
2 y' b9 L5 K( E2 z, E4 ~ bool bDest = false,bSrc = false;1 E& k8 G1 B# x3 ^( r L8 |6 d$ i& B
for (int i=0;i<MAX_INVENTORY;i++)8 P1 c& I9 [ A5 y+ M: S
{* o, i6 C8 U7 k; j
if (dwSrcId == m_Item.dwId)
0 q1 @% x; E7 V+ e, w7 l* U& s3 ~ {% l: o4 t" s! { _
//id相等 则 改变对应的dest和src
' j+ y& w+ P/ G0 i0 v nTmp = m_Item.nIndex;
/ n0 m! H i% e; F1 W$ l s. R m_Item.nIndex = dest;
, V0 \; \, E. } }
) G. o9 ]+ l( W3 s }
; h+ T3 d% x3 k! ^ //临时数据保存完毕,交换开始
% v: r h6 D5 Y# G8 \0 \6 A$ j" o for (int i=0;i<MAX_INVENTORY;i++)9 \- x3 r$ h1 V% [
{3 i; _+ i) h& |' g' F( l; P
if (dest == m_Item.nIndex)
3 v1 A4 `! G8 l! y. l( ? {
5 G4 K' n1 y+ i, D$ t //id相等 则 改变对应的dest和src
/ ~9 x+ s. ^5 W9 g7 A9 o m_Item.nIndex = nTmp;( Y$ s/ ?( j2 |2 X D
}8 ^* Y: n: l' ^- q4 W. R7 R$ N
}* k9 e0 a {( j6 Y" C% Z$ w& P6 f% K
}9 o" ~1 B: p. I5 t, k( ]
};& d0 @7 I. s q% H7 N( y ]
-------------------------------------------------------------------------
# `, t: V' { B$ f* u) q" g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' B8 j6 B, U% p4 I搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- i1 d; h* {3 v% K0 A1 l
紧靠其上添加:) n* |8 [" E Y( G. ~3 G
if( pWndBase == &m_wndMenu )$ O: D3 e: U- G6 T
{
7 a0 ?8 I- U: O2 M switch( nID )
% d w* P- C6 K2 o1 S. i {$ u2 |$ F/ W a$ N0 k5 m/ ?
case 2:& J# f3 v& V# d' {. `% W0 `
{" o- o2 Z5 |7 ?& ~/ |% G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# ^! Y! T* P$ z, M( [, I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 `; k `; F/ O$ ]0 n {
' {$ j6 R' x; f4 c/ Y/ b break;
# s4 z# k" l9 p }
" w8 O& _3 X) \! c7 P for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! r+ z4 ]$ C+ r K
{) g+ Q* @% m" H: X& P* O9 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ n$ N7 D; |3 a- Y$ r% `$ R
if( !pItemElem )) N/ i0 j1 W! g9 H5 ]
continue;' e8 B6 I% ?- Y* Q
if(pItemElem->GetExtra() > 0)
( N v! X0 [$ d8 x P( m, } continue;
! ~% u, U7 }0 Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * l) ?% W. Q# p) s- k4 M2 y
continue;; i9 l0 v# E/ J$ |" s& @: y8 u Z2 u/ b
if( g_pPlayer->IsUsing( pItemElem ) )
3 k7 ?$ }$ w- u& o$ L0 w* G continue;
( V% ^) |& o' s# w4 `% p* Y6 a if( pItemElem->IsUndestructable() == TRUE )
5 |. o& \3 p) P* L' l' C6 R {
, b3 G. e( V: }; H0 M) A: b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( v5 \3 t# r' N, Z X: s: }
continue;" o, a0 E. r# k! c
}
f1 L- [" ?9 @1 v& a) T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 E O: v3 K0 b. T# s7 B
}
6 _# U" C9 d# ^4 p break;+ L- b) x% b$ a- I/ Y
}2 v" D; B0 M; W
case 1:
; U$ X. j* l4 S z) r ` {( A6 B1 n; S' F8 P$ D
//整理背包
9 H. h3 U: j; ^8 x& o //////////////////////////////////////////////////////////////////////////
1 a/ c* b7 A' F! ~' ^ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) s# a1 L9 R1 d4 n2 [
//////////////////////////////////////////////////////////////////////////& V6 s" r9 G2 b
//////////////////////////////////////////////////////////////////////////
+ y& N0 }9 {7 j$ i% K5 _# E X CInventorySort* pInvSort = new CInventorySort;
3 K# {' \- M- T" I+ i" W vector <sItem> vItem;
3 r, e( k# s7 t4 r& O vItem.resize(MAX_INVENTORY);//初始化大小
$ {6 M( S/ d3 Q% f8 Y& S( C //////////////////////////////////////////////////////////////////////////5 |7 k, V k. G; x6 A! {
//填充数据6 @# G' R& ^# K, ?
for (int i=0;i<MAX_INVENTORY;i++)% I$ h4 z' \& {
{
0 k! j" F. R P6 S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ J$ e1 O* T9 N y0 L& n& {
if (!pItemElem) ^- D& G4 A0 L: X( G' V1 e
{
9 t* ^. m1 P" B P vItem.dwKind2 = 0xffffffff;8 {9 s9 J' B; m
vItem.dwItemId = 0xffffffff;
( V. i* H- V: c; z* _0 I vItem.nIndex = i;" g k+ l( W6 [' S
}else {
5 a0 M- x, j4 C/ c5 h$ C, X9 \0 g ItemProp* pProp = pItemElem->GetProp();2 N5 ?# v4 O% _) g: F6 W
vItem.dwKind2 = pProp->dwItemKind2;
# p3 d* x$ [8 H4 X vItem.dwItemId = pItemElem->m_dwItemId;
+ `. q1 E$ b8 G& @. r2 M: M; j vItem.nIndex = i;
`' P- m$ q3 Q. F }
2 L$ G7 u0 K5 V& C" F% }5 [# x3 t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 M7 [, V1 O3 q1 W _( p
}
" h! F4 G' ], x3 E& h9 @ //////////////////////////////////////////////////////////////////////////
$ y* z$ g* k& g0 z/ A sort(vItem.begin(),vItem.end());//排序 M/ b$ y# p6 `7 l1 T
//////////////////////////////////////////////////////////////////////////1 J3 J' A' ?% G. x
//交换
7 F/ G5 H6 G- J s! u i5 Y for (size_t i=0;i<vItem.size();i++)2 W- V, u/ J8 B$ S+ L0 h0 x: D( t
{( G: w/ v$ T8 C1 |& S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 ], F# X7 A. u. Z. T* t pInvSort->Add(vItem.nIndex);! _: `# J8 C' o$ O' u
}
" g9 k' F0 M4 F5 q5 U/ F0 o# m BYTE nDestPos = 0;
# _4 {4 h, Z. N$ S7 D( M& e9 g5 s! k for (int i=0;i<MAX_INVENTORY;i++)* p! N8 n! D0 [" f) r' q
{
) K2 W3 I* h- b7 O4 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 s3 J9 i! Y$ l0 E! }
if (pItemElem)9 S0 G0 j# E, F. b$ m
{
/ s, d/ a0 D2 J, p: ~: k5 c; t) P if (IsUsingItem(pItemElem))
8 o0 _9 L# \% t8 k9 w% `! d# P {
+ N" ] z, H! h+ V5 r //这个位置无法放 A: L1 i3 Z T1 s2 ^2 }, b9 g
nDestPos++;
. r: f4 [6 v7 w: [- [8 l }6 K" L* \$ e) B" s9 }
}! O; x6 s3 T# {0 k8 v& ?
BYTE nSrc = pInvSort->GetItemSrc(i);. X2 S b2 ?4 q1 M5 E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 z: ^; M+ [/ S8 s+ K
if (pItemElem)
! e+ P4 ~+ F0 n- c- q {
' f$ @% `( t6 ~6 K if (IsUsingItem(pItemElem))1 {. c! c1 L" k0 e O. v! y$ ]1 w' Q
{
$ F/ G" i1 l' b# c3 \3 G/ c //这个道具无法移动,跳过
) ]4 e w5 d( K0 o continue;5 Z- Q; `$ t# F% h/ ^
}
: X7 [0 _! x7 ]7 I }else{9 ~. \8 {+ ~9 | Q7 E Q2 h; o3 \' E
//空位置 不用动' e5 m/ f/ C# s# j7 B' X
continue;
# S. _4 u" }6 p; C4 w' l }
3 X& s0 B* O8 n; O* J, g1 k5 n //////////////////////////////////////////////////////////////////////////; k" U* \5 |0 ^/ n% k! G& Z; \
//开始移动 X, n$ G" i# W
if (nSrc == nDestPos)
# `8 F9 z5 K _) D+ z. u {
2 X2 F) N H; w4 ]; [$ _ //原地不动
+ T6 L# w$ m* [& v$ X nDestPos++;9 B: O" B7 m( L6 [- F
continue;' K6 W Z4 |6 {/ O8 p2 @) O5 h
}& K& l r9 K7 v6 N( F
pInvSort->MoveItem(i,nDestPos);( ]- M' e; }+ F* ]6 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 V$ l5 A/ l. n+ l2 G8 e, {7 O
Sleep(5); h1 C4 q4 y( ?$ r O! }5 |7 z- {
//Error("移动 - %d->%d",nSrc,nDestPos);
9 \# B( R f# G8 K3 u z6 Y nDestPos++;
/ Z! i. L( k6 M+ j0 y2 h+ H/ h }/ z( Y+ O2 l7 \2 Y; W$ A7 T
//取第一个元素的信息
7 v/ @6 H9 b. W- _- b9 [& G /*
+ K: B0 o* M$ x% n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 ]0 e: j) m5 a: h8 s9 c3 g {. p* {: i' }3 Y/ m$ y' R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 K! i! X4 ^$ K. H7 d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 k1 t( c1 M' ~% L
}
* ?& c: Y( ~/ I# ]- ^ */
1 z5 f) P7 h* d# D z% j //////////////////////////////////////////////////////////////////////////4 u* h9 i3 `, b* g M
break;
9 y9 S2 Q3 a: ?) {) D. J% N: u$ D }" H8 R; A2 D/ E& ]9 C3 U
} % I2 _. A3 ^6 j3 `
}
k$ k" e: E4 L0 m9 Im_wndMenu.SetVisible(FALSE);
+ k: g, s: _- `( @# R5 i6 F2 w; O& }% h# s# F
--------------------------------------------------------------------------------------------------------
5 g5 G1 h4 B0 t+ _9 t7 `( ^ A4 I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; n7 ^1 R" \1 ?3 h% P{
* v) `3 b/ w) z; m% B+ EBaseMouseCursor();
: x- r2 N4 y; N$ ]1 {( X9 l0 I}4 X# `9 l( g8 A6 L# m: p H: H! X
在其下添加:
0 u* }) m" N$ f4 j1 i8 M" R2 evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! y& p' X6 c4 |$ T+ q
{ ` C T& }1 D* M! L; m: d
m_wndMenu.DeleteAllMenu();
' K/ s4 d. r+ am_wndMenu.CreateMenu(this);
" F- I, d7 c1 ~/ p# ]' F5 U3 e5 Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) B! h/ l& `& L6 v
7 _7 f0 A7 v- K; y! ~0 gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 y" c5 A- U3 S$ b8 b8 {{
! F5 P" ^- C4 O9 J7 N //P以上级别才可以删除所有道具" \) Y% J) h" ?# p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, `$ L% Y, A8 o T. l}, F) X* e1 R" T; N; v5 E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- S% M! b/ Y5 M# j: G
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" M, \2 Y% _+ v) dm_wndMenu.SetFocus();: A1 T$ _9 V! i- R8 z
}- d6 q6 h' U, F$ I( }; p
------------------------------------------------------------------------------------------------------------
% v; T; {! _9 X7 T*************************# g6 i/ ]1 C) q3 z9 b) ]
WndField.h文件8 d* \" o) w4 C: f& x
*************************
( s1 u6 }5 H, I搜索:BOOL m_bReport;
W# T0 N, j4 M& C( T: _其后添加:
. p3 e* Z7 g3 `1 x5 T# gCWndMenu m_wndMenu;/ X7 A$ {7 T2 Y% F% \7 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) _! Q: G$ k* |6 b
其后添加:
2 ]! o& v' I1 ^8 tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
G9 @1 h5 Y' o$ L& p0 K0 |3 `
5 f- @0 U- q6 |9 A% V5 G4 l2 f$ I" k4 V5 `6 Q
|
|