|
|
源文件中_Interface文件夹下WndField.cpp文件9 _. F k$ J g1 }& v A: |) ]/ }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. G/ X$ T+ J: J$ M( L8 p
( H5 P: S4 K6 E' \struct sItem( u+ F" D' J8 E. I# a* N
{; F3 X$ w9 j( E, A0 ^" g
DWORD dwId;
. [! ]: g" n! V) w3 N+ vDWORD dwKind2;( n8 a2 S1 L- V3 p8 B
DWORD dwItemId;( K1 a6 w* o8 D+ V! I
BYTE nIndex;
$ i. O: U/ R7 w6 a/ hsItem(){) `4 A! c* P$ u' D
dwId = dwKind2 = dwItemId = nIndex = 0;
4 B" J/ j. I( m- E+ V}
& q. f- @: ]; u6 A9 w( \bool operator < (const sItem p2)
3 ^6 D; l' _ u9 ]* B. G{
1 U3 K# H! O1 U6 } if (dwKind2 == p2.dwKind2)
% ]5 g# ~$ D3 ?' \7 l {
6 l& L, v3 b( C return dwItemId < p2.dwItemId;* i0 y& T3 {8 [; L
}else{
: E; D- Y5 ^9 C: n: o$ {5 H return dwKind2 < p2.dwKind2;
8 m- q$ Z. ?% G, @4 B* d9 ~ }( I0 d# Z. O1 I: |3 ^, l+ r+ z
}$ t& x% z l M8 i/ G1 a/ f$ ^
};+ s+ w) A, d2 F7 m6 }* B! w
class CInventorySort
- i+ I% Z y9 ^+ K4 G5 i8 w, S! a{
* e! P' w9 }& I; ^8 q* c$ ?5 C+ T7 Spublic:. C8 G( X7 I( A: h v
CInventorySort()
! U+ l7 a- G) u8 e% y$ J{
* P3 m# \* A3 ^ m_dwPos = 0;) {6 R1 p5 G' |' k v1 g \2 c
}
7 T# t& G$ W( _ o~CInventorySort(){}
( ]4 {# h0 J! u4 Q4 u3 S, |private:* Y3 v2 |8 e5 y G! I \5 y5 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. X2 o. D: r+ N# L6 V$ Q
DWORD m_dwPos;
1 b6 f$ e; O' @: {4 c( I7 Rpublic:
* b! a+ X$ L- K% V: Dvoid Add(BYTE nIndex)
( Z: `% }( K5 i! r- s9 J/ \- Z{
9 d$ V: k+ a+ y if (m_dwPos >= MAX_INVENTORY)
6 q) G( p0 f. m! l2 v {2 h. M1 }- c, A8 p* }
return;
) K7 @. ^& k) S* z3 {' u }
1 V2 \- N. j6 d. l0 \. x& Y& I+ { m_Item[m_dwPos].nIndex = nIndex;' s' B# c9 a s' U# B# E+ [) e$ I
m_Item[m_dwPos].dwId = m_dwPos;
% @# s. @* o6 d" u2 y# e, e7 @$ f8 Y+ V m_dwPos++;
9 U8 O; q( L5 ^5 \}
7 F3 R& f+ k* x7 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
d0 H: k# Y8 K- G; J{! K- s* f1 H' b, T/ [9 `
for (int i=0;i<MAX_INVENTORY;i++)
8 v/ X! n1 ?$ Y* W8 X$ Y {
, _0 T0 ^8 q' ~% q8 { if (m_Item.dwId == dwId)" S( C1 s. _8 B$ K1 p2 i$ h2 a
{ P, h' {. X% t4 y/ f
return m_Item.nIndex;
: k( M1 j# P+ p1 K }3 W% k* D8 j# [. c ]
}& f2 {1 C+ \ {( I5 ~6 c/ P: z
return 255;% e" o' }% H4 l. U7 k
}/ L# F8 R" K: }/ o+ Y5 f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 C% c Z, G( |& \
{
* R9 E: Z( J, V BYTE nTmp = 0;3 J, y. N/ T8 @0 r3 t; B
bool bDest = false,bSrc = false;
5 j8 G4 C9 O. |; q9 @* S for (int i=0;i<MAX_INVENTORY;i++)# V+ G( ?8 K% R
{7 P$ ]1 ]6 P8 N' l4 d" R
if (dwSrcId == m_Item.dwId)
! m0 K% N: m1 o% e. }7 A8 p {
7 E* D/ Y* _- k. f$ l5 X //id相等 则 改变对应的dest和src
( r4 `/ r. v! ?+ q9 G nTmp = m_Item.nIndex;* l5 a& K' Q, Y9 x5 W
m_Item.nIndex = dest;
5 ?( ^! ]' r# p }+ W& l" B0 ^7 z! t4 S
}% n4 d, n: y. r# l
//临时数据保存完毕,交换开始
1 f4 ]$ ?) U' @+ b for (int i=0;i<MAX_INVENTORY;i++)
* p) n( X6 O1 L" R- y% d* m% E {
* `- ?6 M' Z& ?0 ~; q+ i1 U' i if (dest == m_Item.nIndex)% M8 W/ i" M" n9 v5 ^
{
: Y' v) V, {8 _ W$ E //id相等 则 改变对应的dest和src+ c# k& ]" _: x$ U, b) D
m_Item.nIndex = nTmp; h8 V+ |: Q3 ]4 V' [: y
}+ a: @9 q' x: _+ F0 E/ @* ]8 E
}1 g: |/ `) v4 ~+ L. h+ i6 C
}
# {% j; k. Q+ p* ?};
: R" v! ~2 ]& U$ O-------------------------------------------------------------------------
* m) z: D3 e, i/ z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 h8 P% B0 P9 b- V9 f1 b: X% X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 h; s1 k3 N! ~1 ?5 e
紧靠其上添加:
0 A2 }$ U) D0 S- Xif( pWndBase == &m_wndMenu )
2 R7 y+ E' o L{/ s/ V( ~- o6 t9 E6 ?( N
switch( nID )
" ^/ K( N5 K# k+ ] {
6 d* p! d+ o0 K case 2:
. G3 G) j$ B7 y+ q3 q; H$ _6 y {
6 }/ K+ B# F& [; H0 J+ ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 o+ C: V1 t! p; V/ D# M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- O& H3 w. O, i ` {
- ]2 j6 r; O+ C. f. X break;- P# I; g" g# R% z! _1 v
}
# C6 V$ \+ i2 L3 D T. G! w L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 _4 K/ M: z$ V. {& F& K+ N1 ] {
" w; p" O! b. b" X- f" d- Y; w3 J7 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 r r" v8 q5 E. S* @% r" \* ~
if( !pItemElem )
" K8 a+ ~8 Z; Z+ B/ S continue;# |+ D$ m2 U! m/ _& \8 L
if(pItemElem->GetExtra() > 0)
1 o H7 w2 Y& O continue;
/ f- C1 E+ X) P: X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) u) [* }/ L( G
continue;
/ Y& ]! I) s9 `' c; A9 V0 T if( g_pPlayer->IsUsing( pItemElem ) ); U$ q+ I7 u/ B( J/ ?2 s
continue;5 G: B$ _9 F, p$ F3 G1 U9 \
if( pItemElem->IsUndestructable() == TRUE )5 o' y/ E7 f' a7 Z" v+ U9 }
{
3 i9 o' [. O% Q0 \0 o9 N& b- o$ {5 D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 ]9 Z) I6 Q/ }5 W/ ~. \$ s8 h continue;1 w4 N$ K4 ?- |4 M- `
}3 [5 n X, k4 ^* b* I; S* {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ ~9 o; I4 u( H3 G! } }
+ I3 x! k8 V. S5 \. o break;1 X( p% a( t+ l% s% e) h" T; Y
}$ R! l5 |" M" { F; I( ?. k4 H
case 1:* G- J7 P: @8 z5 |- E1 m/ U
{
% s( Z/ f& g ] //整理背包
( x& A# M# U# y% e //////////////////////////////////////////////////////////////////////////) \) G6 _! T1 g5 R, {+ P) }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# ?; _9 O- D# I' |5 V9 Q6 }
//////////////////////////////////////////////////////////////////////////
0 B, n5 V3 h) \% B //////////////////////////////////////////////////////////////////////////
5 Q& V4 O% N& g CInventorySort* pInvSort = new CInventorySort; f) s' b. [5 V' V, g6 g, V7 b: ~! N
vector <sItem> vItem;
s2 l l* `" A; H vItem.resize(MAX_INVENTORY);//初始化大小
, y2 w! r2 f9 F: k' c3 U /////////////////////////////////////////////////////////////////////////// N4 I3 O/ U% \- p: v: I1 R) s) O7 x8 e
//填充数据, A4 m: f/ y% x& D" W& Z
for (int i=0;i<MAX_INVENTORY;i++)
) |9 o! G; E: s! x: w {
' j1 | w$ e% M8 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( o) ^; R( I( e8 l if (!pItemElem)# P% X F6 m5 j) \; k' T: y
{3 {9 _9 O& {( h" H: D" [7 ~- ^9 o+ @
vItem.dwKind2 = 0xffffffff;
5 S3 `- E5 r6 o, t% ] vItem.dwItemId = 0xffffffff;
$ k6 ]/ p% n, ~# U7 h vItem.nIndex = i;
# w) g% s- k% v6 k( B, k0 J }else {3 O9 S) C, G: P$ X
ItemProp* pProp = pItemElem->GetProp();
+ T5 V- V+ r) e8 u vItem.dwKind2 = pProp->dwItemKind2;
- v- L6 V3 u' U vItem.dwItemId = pItemElem->m_dwItemId;
* X1 k7 J; C* [" ]) z( q vItem.nIndex = i;" X/ A& t# O+ H* `: m
}$ o- _: @5 l% @4 O; k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 l m3 g3 i4 Y4 U1 I" o4 |' ]1 X
}
5 R E- ? J* a' w6 G //////////////////////////////////////////////////////////////////////////; |) | G" a3 i
sort(vItem.begin(),vItem.end());//排序0 ~% U* B3 D2 I" q' Q* }+ N
//////////////////////////////////////////////////////////////////////////1 u! e9 n& t5 S0 o3 @
//交换$ `' W) D/ l7 X+ [
for (size_t i=0;i<vItem.size();i++)
& i+ G7 U( g' f# H* B2 ]! u7 N {
* Q7 K6 C R) I' P5 s$ g5 [0 U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) C$ w; Z/ t% s
pInvSort->Add(vItem.nIndex);9 a! N) Y, n2 C* A
}& |# t! {1 S& k% v9 d
BYTE nDestPos = 0;6 V! a$ a5 t% j+ C( m) u
for (int i=0;i<MAX_INVENTORY;i++)" I e t I% v+ ]0 M. }
{
. Y% P b2 Z; A) E: ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- Y4 j* K& q: A
if (pItemElem)2 r( d9 Q/ z- s
{
6 A& o4 H1 `' } if (IsUsingItem(pItemElem))* m# N4 ~8 h8 e- P x
{7 O3 [! @1 I8 K' p
//这个位置无法放5 J, o& D' q) a8 w5 P! _: G
nDestPos++;
. d6 U/ E& u8 R4 j% m( r8 { }
: u* N6 _2 f) n/ @" a" `1 P9 d }- h8 `, D" c! J3 t( u. g+ h0 S8 l' y
BYTE nSrc = pInvSort->GetItemSrc(i);. U i6 Z' g3 B# ]+ ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) p# E2 S# Y$ Y1 O1 X
if (pItemElem)% L% J( K0 N% I9 ~9 Q# D# x1 R
{3 E* K$ R- i% Z6 X
if (IsUsingItem(pItemElem)), ^# k; W$ O& Q! y7 X
{' ]* k5 g/ E0 `+ J* O* l$ Y
//这个道具无法移动,跳过
: G3 Z# V/ e" B |5 i continue;% R [$ |# ?2 s& Z
} e7 P3 f4 A+ A" W
}else{
: a" s" B1 P/ j6 b. Y //空位置 不用动
" S0 G' D( `! a* K" h continue;
9 U' M$ e: V0 q5 O0 E }% o# ^$ L \! i/ N7 v
//////////////////////////////////////////////////////////////////////////( l4 v, P7 y& x1 Q; b% K$ }
//开始移动' i0 e& C% u* ~8 x: d
if (nSrc == nDestPos)! z3 ?$ }+ r. \- V
{
4 V. L* v, x% U$ R, s0 D //原地不动# F x+ ?, k6 |7 c7 y
nDestPos++;$ n! B- o2 d5 p0 W) l
continue;9 n% e8 x2 C/ g3 r8 d0 j
}! R/ y/ S; A; L8 m0 n
pInvSort->MoveItem(i,nDestPos);
8 W( ~2 c2 B2 D; l2 u( h. Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. a' N. l$ M. t6 O8 V* y Sleep(5);
# O+ G0 ^% t7 L6 w) s, O. { //Error("移动 - %d->%d",nSrc,nDestPos);1 T0 ~: [& p+ F" |6 ~- W& |0 x
nDestPos++;$ j: N2 Y& n6 o1 N( _% n5 s+ N
}5 r& T% U* E) w$ m/ [; Y
//取第一个元素的信息, I! ~" v X: Q: l# x# l6 n* n$ W8 C
/*- g5 \0 w! Z8 W+ z& M2 C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& D5 k; F9 s+ l
{
* |0 q9 \0 h9 A% J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ t2 G7 k' V+ f$ O' Y9 G g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% r/ a, v6 L3 k
}0 X. G; o- ` X8 |0 M+ t" I: a
*/
% z& E& V% P; B9 R0 q' F5 M0 {' I k //////////////////////////////////////////////////////////////////////////+ O8 `8 n/ y1 G" e
break;
: a# Y# M# |7 ~9 ?, W }1 m/ x* C, S& \1 Q
} " a1 \7 I4 ]0 Z
}
" y( I; i. ]" rm_wndMenu.SetVisible(FALSE);
1 r9 o+ N2 P# J/ Q3 k
* Z; N" n& I, S0 \5 S--------------------------------------------------------------------------------------------------------
/ h1 O3 _# n5 I, G2 ]' @) x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 G) ?$ s2 K4 u3 E5 U) n9 n) l
{# d1 W" ?) I4 d* H8 A. K' C* O
BaseMouseCursor();
8 d% Z. N* \( ]. @# _}
. D+ M( {. r- X! \4 U7 H% X在其下添加:
5 X: |! \8 Q; ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' |, y: S9 w" M$ t$ l6 I{' b% m( i4 g- x; N L
m_wndMenu.DeleteAllMenu();
0 k! u- _, a: ]m_wndMenu.CreateMenu(this);
$ `9 Z% u. _/ d8 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 {5 g; h' O: d4 L0 @5 H }0 @
5 Y) C. Q+ Q; y) {8 T+ S9 t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" K3 [, w+ f( e$ t* p{$ U+ A( B% s+ U3 J
//P以上级别才可以删除所有道具6 E' U; Z9 L2 c" P+ H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 R& `* S z! L}* H' {- q3 D( _, W7 |8 ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! @' x5 {: _6 X5 r- s# d, F- Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 K9 n; n6 W$ b
m_wndMenu.SetFocus();6 Q0 o/ d7 a ]( n1 o9 M
}
6 H" D# [" P8 r# I1 _( e------------------------------------------------------------------------------------------------------------
" {8 E9 h7 y5 J. Y1 c*************************7 D" R% j8 R7 L& w% d
WndField.h文件
, y% J* b$ a/ }% M# B* B4 [*************************
* ^( ?: d1 r+ \0 _1 O! y" _5 c搜索:BOOL m_bReport;
$ J! l' ?" `0 @0 e# P0 }/ Y其后添加:
: P- b# h% z: a6 O" E. p! J7 lCWndMenu m_wndMenu;( B+ D: O+ k0 U) ?1 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 h& g3 f- u$ s. T. p! V m; t
其后添加:
% R5 i- O& ^" p. X% v, vvirtual void OnRButtonUp(UINT nFlags, CPoint point);' t+ F/ U: k' B& o4 d
' Y& U' L! s p
, I% D# G/ E% j$ M1 l4 |2 R6 s2 j
|
|