|
|
源文件中_Interface文件夹下WndField.cpp文件, Z3 m" ~6 M) I2 _& S, }+ M7 B- h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& {. _. r6 d+ @) L' f3 {3 C$ J) t+ A* q3 L
struct sItem( k q# }* u$ F$ Y9 V
{
( Q2 L5 J, | P; h! ~8 l8 ODWORD dwId;
% ?4 t, O) g/ f, z8 lDWORD dwKind2;
4 W- u7 H7 Z' t3 P& _+ EDWORD dwItemId;' v% N' z1 ?' G0 f+ C! R, c
BYTE nIndex;/ q% @' i+ z: y) Z
sItem(){( u8 r1 S% i6 e4 y* a8 A
dwId = dwKind2 = dwItemId = nIndex = 0;/ C0 W- ~- \- I
}
3 e) u! O1 }7 d* u1 ~' [* Obool operator < (const sItem p2)7 c; a' b1 `! C& e2 l9 r
{* K! [3 D1 M" s; h5 j6 `
if (dwKind2 == p2.dwKind2)( a/ H$ f/ W5 j
{
1 [ z( c3 d1 o- {' c return dwItemId < p2.dwItemId;
0 I9 Z, ~' G' J! L5 }) N2 F }else{
' E) w! [7 {2 H5 B6 L7 H1 j$ V; u return dwKind2 < p2.dwKind2;
6 C$ o. Q0 i! s9 U }
: c0 A6 A' X9 X7 A3 a+ V% ?) K}
0 l6 r# J! x4 D7 P E4 ?7 V0 [, j};
5 d b u3 T* ^: \2 c6 v' A' b+ Tclass CInventorySort
) E, Q) D1 j F9 l7 u{
- o1 Q7 ]1 I l T/ L3 bpublic:" h) S6 }4 l7 E4 P) S2 F8 Z5 }
CInventorySort()
: h7 r! \3 u6 V/ J: U4 A' q( J{, C d! E4 I1 l1 u ]! B1 w& K
m_dwPos = 0;: f, w+ P$ Z3 e1 s8 b0 t
}1 @9 J0 c7 |7 I' _ f; f0 z
~CInventorySort(){}
1 w+ j2 ?2 l( L& Z* |- F' }private:
9 o3 l* L! ]9 |; s+ \: z3 Z1 VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, H; q4 w2 d+ T! N9 n# f
DWORD m_dwPos;
' e+ P6 b* h( @# B8 X* gpublic:
0 e) k9 g4 k. e. lvoid Add(BYTE nIndex)
6 q$ d4 O) f% s! f% t6 b m" |{/ D+ f+ I; S% Z$ [& d
if (m_dwPos >= MAX_INVENTORY)/ p2 R ~7 V! }( k5 c+ Y; a0 D
{
9 w) D- }3 H; O2 J& ~9 j return;6 [- @5 {" U5 K' \8 q y
}& @+ i7 ]+ f% ~
m_Item[m_dwPos].nIndex = nIndex;
8 C9 E) E5 J9 o# V8 K m_Item[m_dwPos].dwId = m_dwPos;4 y7 M# d- f Y. G4 [! T
m_dwPos++;4 {2 r1 G! W; i( i* H
}
$ r9 {$ s8 t, C4 _5 M; ]/ [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 b1 n' I' q8 F& D. @4 k
{- n. _7 _: @; }& i- j& q
for (int i=0;i<MAX_INVENTORY;i++)3 X, T9 G3 U* o' A4 \; S+ W. {$ U, ~# L
{
( k) o4 l6 ]# Z: \& `3 R if (m_Item.dwId == dwId)
; @1 I* Z6 }/ G1 ]) ~, B, g {
) ]% y, R4 E1 q- `% I return m_Item.nIndex;
9 F3 n2 ^8 x7 t: d* K }
4 P( d4 f8 x3 W }( X* [2 ?4 k& ~& P, L+ {7 E) T
return 255;
5 |, g j* U$ J8 {4 G$ r0 K}
3 S q) X- [! i4 mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# v, t/ A4 K! `# A{8 p+ Y& t1 ~" a$ o; a/ d. H6 O
BYTE nTmp = 0;3 H* U, R/ M8 E: [) V
bool bDest = false,bSrc = false;
4 k- ~( O! k' q- P/ D for (int i=0;i<MAX_INVENTORY;i++)1 \* J+ o3 f" m
{! L/ p: p' s o0 q, A5 i4 T
if (dwSrcId == m_Item.dwId)
+ k$ ? B2 C: r" o4 t {
; S4 j9 A" }' K% V( }- H //id相等 则 改变对应的dest和src
7 b+ b, Y* Y# r6 t( ~ nTmp = m_Item.nIndex;
8 P% k- p% E% U+ L: |% I m_Item.nIndex = dest;3 m0 b4 g# {! Z8 J* k s$ g4 j4 B/ j
}
% b% k: _7 G9 N+ I. ^4 n7 V0 g- G }1 E) q _4 c" S* p. B* c' E" o
//临时数据保存完毕,交换开始# X' I0 D. t( O9 ? R: T
for (int i=0;i<MAX_INVENTORY;i++)
* N( p% y4 T( B! y. I' ~& O {
! G6 @6 L: J2 \( G2 ~; m if (dest == m_Item.nIndex)% a$ L. C+ {$ x& |
{
. |5 R6 s X4 ^8 d L9 b$ r //id相等 则 改变对应的dest和src
1 v L' r( A, o: } m_Item.nIndex = nTmp;
) \/ x& [; b5 I/ p5 q5 R }* p: }4 Y, }3 |9 l9 g
}
: |7 B9 r" }2 N/ T, x# n: E- [& B}( ~% c5 t/ A+ @. T% ]
};
% m- g( s/ u$ K0 i-------------------------------------------------------------------------$ l& w" ~; T7 ^0 I" M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 U, ?/ L% g* ?0 ?/ S( ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 D/ O8 B4 _ y2 {. L' P1 H
紧靠其上添加:
, h: R) T' o1 i1 o: Y: x/ kif( pWndBase == &m_wndMenu )
0 q$ V) g' A: `9 A, q* N) \{: `/ z* W" ?6 e5 a* E( s
switch( nID )
) t% T; x, _- E3 Z) G# z& W8 h {
& P4 T: v# l6 H; B4 X7 K- `3 w case 2:
& I% i. Q' j# @ {
& c2 y: ?8 h9 f0 R+ H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) v7 M2 J0 W0 A# d1 V0 x6 d
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# M l" T: a7 O' @* p5 |: S
{
1 y7 X$ _2 C, P- l6 ?4 M. A2 [$ }5 t break;
' ~" U8 F7 s) t- R0 [9 c }
, v1 n- v- \2 ~! J- h7 {: [ g for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# T% {$ i( P2 x0 W% `# } { }7 V$ R/ r% m' y0 M% a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); C3 D* `' A. f% @' P C8 j
if( !pItemElem )
. h; E9 q' I2 V6 F( k continue;& l; ~( t: N7 C9 I' S
if(pItemElem->GetExtra() > 0)' Q: S2 i. M! S& X( N
continue;
& m1 w; k$ q7 G* \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; k7 X% Z& s% p- z7 p
continue;* o$ w' q- f6 d! l! N/ A
if( g_pPlayer->IsUsing( pItemElem ) )
( C# T w3 Q: X# a! N& ]5 x continue;
8 \/ L. m# a! a. Z( {4 [9 E1 @ if( pItemElem->IsUndestructable() == TRUE )
& }- h$ G- T/ N L4 i {5 f* f. C3 T" m* p$ j7 f/ R" L- d8 s: p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& A2 o# Y( C9 p# k: d/ O continue;( n& H4 D4 s: Q# Y
}
! x; H. ?- M8 P; K5 d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 ]. ]; L8 p4 X4 j, C$ ` }
. s8 h7 v# \2 @6 j/ c break;
! ~6 Z4 _5 B- R9 G J4 m1 ~3 {+ v }
: p) s' P9 V% l: [$ Z. ?9 [ case 1:: C# C t; R& L
{
! T. d9 t9 L1 \4 V& h6 ?: E) R //整理背包
) J3 n% x$ X1 O$ i //////////////////////////////////////////////////////////////////////////
* y2 A, c6 p D0 Z& ]5 ~& W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& b2 c _: ~9 C2 q0 H //////////////////////////////////////////////////////////////////////////
' w0 z: R( _% W4 ]- E //////////////////////////////////////////////////////////////////////////
F s* y; C; r% \" S; N CInventorySort* pInvSort = new CInventorySort;
; l; g, q9 l* @ vector <sItem> vItem;! M) d( L; s5 n, u! o+ Y
vItem.resize(MAX_INVENTORY);//初始化大小
9 P$ D0 P, K1 M) v( ~6 I //////////////////////////////////////////////////////////////////////////9 v) D9 w' y. ^! I
//填充数据
( g) G, C& w$ X0 u5 U for (int i=0;i<MAX_INVENTORY;i++)
" @" X' |6 B4 o {* v9 b! V% ~! P: {. |2 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 S. t3 R: U4 X4 V& k& Y+ W) ^
if (!pItemElem)
" O0 Z" Q6 N: v3 J {
: o( z0 Y6 P; g$ A" }4 z vItem.dwKind2 = 0xffffffff;7 h( W& |1 {$ X
vItem.dwItemId = 0xffffffff;
5 P k8 d7 u# h; B% Q$ H5 G: B vItem.nIndex = i;7 J% h* Y$ x: [) }4 B' a) M p' R
}else {6 c5 b/ ~) ?- Q5 |" P ?
ItemProp* pProp = pItemElem->GetProp();9 e5 T1 }1 |' n, s2 m
vItem.dwKind2 = pProp->dwItemKind2;4 g/ E' r" b2 c& P/ p
vItem.dwItemId = pItemElem->m_dwItemId;
C8 K3 o4 |3 I. h vItem.nIndex = i;8 G2 L0 L' q; s
}7 P% {, J. D* b1 {3 F! L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 ^4 p& x* k7 F$ ? }; q. O- ]" b& D" n' T8 l8 g+ P( O9 S# C
//////////////////////////////////////////////////////////////////////////
) ~& Z# N5 i: q* r3 _ sort(vItem.begin(),vItem.end());//排序 n8 D% Z# \/ T5 E
//////////////////////////////////////////////////////////////////////////
4 A. a' n! m w4 T+ l+ @ //交换
. P9 ^+ r1 Z7 V1 p( t for (size_t i=0;i<vItem.size();i++)+ |3 u+ C; g3 Y, Y/ k4 V
{( ]2 ]& E9 R2 Y& j: e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 i. y+ G& `/ c3 Z pInvSort->Add(vItem.nIndex);6 z8 n& J* f: ^% d$ e
}7 [" X1 y: s& k) K& @6 H
BYTE nDestPos = 0;6 q% e3 \. p4 I4 m3 ]% W, Y
for (int i=0;i<MAX_INVENTORY;i++)5 k( {: D% b* e; f2 u) m8 F
{: C; C& M- D% a8 n' Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 t* a/ A& {% j* a; p+ a+ ? if (pItemElem)
' C n* v- O1 D# Z( h {' ^8 r7 f' N6 e7 x( Z7 \- ]
if (IsUsingItem(pItemElem))
! g* x2 o2 b2 `5 s5 ^0 ~ {
* J0 z! S! P) g //这个位置无法放
2 q# B/ J8 H% `/ H! M$ ` nDestPos++;% c, _- [- \& V* s" U. p9 ~
}! P4 c% }: b) j; L: }- ~6 @
}
5 b L7 I& y" `2 | BYTE nSrc = pInvSort->GetItemSrc(i);9 N2 N; e' B2 ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: _* C9 J8 Q! N0 x+ l if (pItemElem)
) S9 i4 b; H2 o% F! m {
5 s5 j" ^) y5 _" r# E6 G5 ^ if (IsUsingItem(pItemElem))
$ C5 K. B* W" {: m9 V) Q0 X {. F% J x+ i, J9 `
//这个道具无法移动,跳过 D$ X5 f. U2 A) }; m! h# Y! e3 u
continue;; b* M, W2 H1 N3 L
}
a" m/ | _& [% D( i! [5 Y5 y }else{
$ D1 s$ H; ~7 u) Z5 Q# o //空位置 不用动
1 S/ v3 i' W! i1 q continue;
/ F& b0 U, F. E1 x }0 W9 I/ N \9 s0 Z9 v' i
//////////////////////////////////////////////////////////////////////////
4 |- _6 q c: [0 D2 }" a N //开始移动: F! U. ^& T9 p8 U5 n6 [
if (nSrc == nDestPos)- e# F1 N8 F1 z2 ?# {7 o
{
/ F2 @3 b m$ B1 H1 Q //原地不动
0 n9 b3 [! F% b# [2 K nDestPos++;; f" q! {- K$ Z* R" n% m
continue;2 L. s+ \" v8 `# D
}7 |0 u9 G( u. _9 [& S4 _' |7 |/ s+ G
pInvSort->MoveItem(i,nDestPos);! j7 V3 F/ {% e8 I/ R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 L9 b5 A8 q5 ~- x Sleep(5);
( g y F% O2 \0 X" g) Y //Error("移动 - %d->%d",nSrc,nDestPos);; f& t! q7 R: E' G/ [# B
nDestPos++;* P7 X, a! V1 |& ~3 S
}+ S4 d. G" x6 p, }/ ^
//取第一个元素的信息
8 \( E! ]* @9 H7 J# q4 x. i y Q /*( E: S' M4 |1 T" l9 I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 q0 y2 c/ Y) l3 F8 l+ V. Q
{8 e8 A v) I. R; |* q1 [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! x5 H. U* T; `# [" C8 R, f g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: C! h2 {) G: A* j6 ]2 G0 s6 U6 W }
1 z7 R8 g& ?" p; B9 l */
+ t. U6 [4 ~7 v. T //////////////////////////////////////////////////////////////////////////
, ], B- u- P( J- S; ~2 p0 | break;
2 V+ o- H, x' d7 N }
|1 [% T, m% a$ o, l3 l( `5 F }
$ [: D# J# Z9 q}4 B: U* f6 i' R) g. T
m_wndMenu.SetVisible(FALSE);5 v" U# S0 {3 S" } ~) Z$ w
* k1 Y0 e0 A% P: M2 B' ]--------------------------------------------------------------------------------------------------------
! Y* {4 c. |" ?' H3 Z, G" E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& ^( Y0 n) E, ^. s% B- v{' Q9 z( `; i. Z( X4 }! Q
BaseMouseCursor();! n2 h5 a. A7 V0 {8 |) E
}, W' \1 I0 Q; t# @9 V3 {
在其下添加:
; t# W- }/ ?5 L( {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% y# X8 M2 G6 H7 e+ o# d- X0 e{/ m: U9 n% H0 {
m_wndMenu.DeleteAllMenu();+ \4 w5 G2 S0 I8 S& Z$ G: n; }
m_wndMenu.CreateMenu(this);
0 q! N9 L# g2 B8 km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ p: S5 z" m `7 j- D2 y
+ c0 W% p& `9 V, q. j' O m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ {+ \9 T x2 Z{% H/ t9 M" g2 P$ h: O6 P" C5 u
//P以上级别才可以删除所有道具
% s$ V' o& s8 h- I. Z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* c6 j: q$ a9 ?- p7 k. h. l$ I2 n
}
/ h& L4 L) d" x% Q" Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 [3 L5 V) q; K [3 Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 E% ]' N: f8 r# o- V% T& U6 y6 [
m_wndMenu.SetFocus();
# F& D% a+ I; W* D9 D/ }" m}( ]8 m% \: R# G; p9 Z3 ~/ W
------------------------------------------------------------------------------------------------------------
3 {' s. v- O6 s' x, [" J*************************
+ C8 N, L- e: A* _WndField.h文件- h- ], J! O' O" G+ I3 V
*************************
+ v. i. E6 Z. b: M) [5 t* z' P- a搜索:BOOL m_bReport; }: n' k( K& ?( o3 G
其后添加:
* ]# I+ W1 }. ?+ S2 _) vCWndMenu m_wndMenu;# H3 B+ I2 ~/ @4 ^. x
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 [, N( t6 P: @其后添加:0 {2 ?9 g" K: _+ i
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 v' n% T1 \! M5 X
- q# p5 \% ?+ [7 H
' Y! ^) u- z z/ L |
|