|
|
源文件中_Interface文件夹下WndField.cpp文件! I" @; W0 A& G8 ^9 E" r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( t0 F" m- i' n8 f0 A: `
' h# t1 O1 c' M% \: v2 nstruct sItem8 z) }* R( M' L2 A; F
{
! x3 s3 Y6 f2 w$ C0 Z0 BDWORD dwId;
2 w8 j0 h4 l* |" Q W2 G8 }; s$ ~DWORD dwKind2;
% U$ {3 U" t# E- p, PDWORD dwItemId;: A% t, M# n% S. c
BYTE nIndex;
4 U* x4 J( G, U4 V3 FsItem(){6 h: `3 k! e3 _ _ R8 O' r# @8 ?$ d
dwId = dwKind2 = dwItemId = nIndex = 0;
+ I0 w3 P3 G$ M1 G, D7 j1 o}
# m7 Q; G. T1 Z: T* v2 Lbool operator < (const sItem p2) K. D! U, w0 o& t; v3 q
{( s% W; y$ ~. G6 r( s# o& U
if (dwKind2 == p2.dwKind2)
% i" ?) h" ~! B {) ^+ b7 J2 s% e* ? U& ^1 b0 i+ P
return dwItemId < p2.dwItemId;: Q9 V* a- b) x* T5 X$ y8 B
}else{
2 b9 j v3 D# j' C7 r! ^7 T- z return dwKind2 < p2.dwKind2;# k, S2 E$ o4 W$ {
}* `- A- Z, X4 p% \/ w. t# b* W& f5 I
}+ n; T! e4 H- }
};9 g! k: [, z U. S+ w
class CInventorySort7 X, j! _5 M0 d N+ Q$ Z) Y
{
5 @; Y6 \: P$ g& o% apublic:
X7 |. V/ Q oCInventorySort()( k4 }* o9 ^5 E$ d/ ^4 b
{
$ h& ^' w% G; R m_dwPos = 0;
3 Y! u$ e1 q5 O! Z) J}
t& p! D" y. \( L; v2 b" j8 ^6 B" x2 u~CInventorySort(){}0 A* E" Q- M5 @* W3 k4 ?- D: d, A
private:$ @; c- e) c" B; [ b: Q5 `; }, I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ s j1 _; k6 i ]4 J& k5 G
DWORD m_dwPos;/ [4 e, W! n* F- A
public:
8 Y7 ~. O. t' Q! U3 z6 hvoid Add(BYTE nIndex): q+ F- b" p! ?+ A! c7 C
{
9 O; N x' z+ M6 L4 _" g3 Y+ m if (m_dwPos >= MAX_INVENTORY)4 E2 n5 s# a. _7 U$ y1 P5 m
{9 {; q+ ?/ j! l( v9 J! S% R5 b# }
return;) z7 L- L& x+ a+ \9 k2 X/ r% v
}: `: ~7 z9 D8 ?, {: z4 k
m_Item[m_dwPos].nIndex = nIndex;) q: U6 _- G2 z" I
m_Item[m_dwPos].dwId = m_dwPos;6 Z/ U' t) Q9 T) g
m_dwPos++;9 n. p# _3 s4 M0 J# q; K4 G
}* S4 b1 F2 X& I5 g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, d$ \8 L0 I6 F: C- D
{
3 @& w& G# z' W' }/ Y8 ` for (int i=0;i<MAX_INVENTORY;i++)
% g1 ^6 j! G& J# E+ {' d# F3 Q" l9 S {
2 f7 \* X1 p3 w8 N" e! Z" h if (m_Item.dwId == dwId)
& w* h4 d2 q# k; Q9 Z {# D2 }% H2 w) u* U- [. r# E
return m_Item.nIndex;! _# [" P& A" n" e
}
! n, o# \+ C5 L/ S" h0 a/ i0 v }. N8 ^% G5 `# ]
return 255;
8 {$ M+ X8 [# \# j7 @# k$ T}
9 L. A+ E: D4 _/ p3 D" ~$ }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 ?4 W4 m( @ k6 Q{
% l: Y/ T% o* I p/ a; `0 g BYTE nTmp = 0;
3 [' D1 ~9 [. }6 K bool bDest = false,bSrc = false;' K- S5 ^2 {& A8 Q9 J9 F% W
for (int i=0;i<MAX_INVENTORY;i++)
7 O7 N" D6 J/ g- J1 } {" V3 y, I7 W2 I5 X8 C, R
if (dwSrcId == m_Item.dwId)% z2 c2 P, c4 A, |- P7 v* r
{4 U# H, n1 P- f" H. t; B
//id相等 则 改变对应的dest和src( k6 z" C& I4 @' |
nTmp = m_Item.nIndex;1 c# K {: H; b) E7 k$ ^
m_Item.nIndex = dest;% X- F+ H' H* M U# w
}% u+ j' C" Q" k6 H o6 Y! U5 Y
}
8 C; K- z7 [ S; M, s //临时数据保存完毕,交换开始4 N, K, T0 ~; t Y# x1 B
for (int i=0;i<MAX_INVENTORY;i++)3 d4 @( N1 T$ y0 R
{
7 Z3 x9 {( Y0 U: P if (dest == m_Item.nIndex)8 |8 Z; ?! X s+ Q6 F
{. |. K8 Q- |. A+ \6 N
//id相等 则 改变对应的dest和src
0 K& Z! _6 E' |3 D! Q7 } m_Item.nIndex = nTmp;
0 S/ Y% V* Z0 N' J1 V5 k }& @4 O0 O5 X, w. J) `
}& U0 `4 ^3 C; N# j$ |
}
2 _1 f) @. t" W! X* w};
: s+ r, B: B e6 z-------------------------------------------------------------------------
: n; B. k, K; J- p$ m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 k! ^/ M/ h# V. y& x* A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# K# z3 _# B7 i; A" @) I9 b
紧靠其上添加:
" h1 I7 @! X) @3 R9 H; Z! yif( pWndBase == &m_wndMenu )
8 Z+ j( R9 s; o' a+ z2 B{( c6 Z1 u% o# a. D: b
switch( nID )
" u) L I) z. ?* B: q8 H {0 ?: C3 l8 m1 p1 c' @
case 2:
" I' c% W3 d" d# n$ z& ^ e, C1 W {
( B. X7 V9 {( U //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 d- s- t# c4 d M0 C# u
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 P2 y' u$ C. ~$ O# P: L: y {
7 T: |0 B- n" z break;
, e# U2 y/ T0 B: r+ Y& a }, P! d7 ]5 U& P5 R; t: U1 o1 L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ Q+ }) Q6 C$ P {- E' M& _+ b/ d w9 y) E, j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! h- F* m6 m$ `" V5 c: v if( !pItemElem )) B0 o8 K! m; k* U3 D- |$ [
continue; d! W: y& l0 \, h
if(pItemElem->GetExtra() > 0)9 O4 h) u/ c+ N6 D+ A% C
continue;: s* b X6 K; W* B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 ?) ]) f* P: S; ]' ?( K$ ` continue;$ h! K' @ n) t1 `( k0 a) ~6 ?0 f$ E
if( g_pPlayer->IsUsing( pItemElem ) )
$ P( p' g. R9 J0 K9 s continue;
: V7 |3 f/ x/ @2 p if( pItemElem->IsUndestructable() == TRUE )$ { @& }0 _$ ?% Z% Z
{
4 o7 }% l; x3 B! V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- ?, s7 e2 I' I5 T2 P; e
continue;
6 x$ p6 U5 q$ N% s5 o }4 W: [8 [8 O; m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; B4 W, m! B# y: T% ^) r1 R$ { }
$ l% g8 R6 N' r& ]. X; u. Z break; @$ L' v: d) O& p# i, d
}' K% u. k2 `/ w1 V) ? x5 g
case 1:1 G. k+ X, M3 N% O! r, P
{
0 {8 ~4 ~! `+ I3 h$ h //整理背包
o8 ]% ^$ a% O* @# u. u0 L) ? //////////////////////////////////////////////////////////////////////////
5 D1 G# @, c1 g0 U- v" u4 C& E5 N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ w3 f" R# z& h6 T8 H4 X! z
//////////////////////////////////////////////////////////////////////////
4 R* ]: f0 @- h! o3 W- S //////////////////////////////////////////////////////////////////////////$ M. E% P% ~( F$ l6 h& H
CInventorySort* pInvSort = new CInventorySort;1 ?/ |4 @* Y1 ?% j. | ~4 l
vector <sItem> vItem;+ E# j5 c5 x+ B X
vItem.resize(MAX_INVENTORY);//初始化大小
a, I2 u1 W9 Y1 u: J //////////////////////////////////////////////////////////////////////////7 K( r( I- W8 ]) Q' \) t) r
//填充数据7 R) r7 C( Q* W* p7 M: j1 m
for (int i=0;i<MAX_INVENTORY;i++)
2 N/ O" \7 f, ~! {- g$ \ {9 _4 P% a3 G! h7 f# N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! W3 U3 y0 G- R if (!pItemElem)7 y5 q4 V* N) a6 e; r
{6 W; l7 M, J; I& g E
vItem.dwKind2 = 0xffffffff;. Q- A7 x6 j! c L# B
vItem.dwItemId = 0xffffffff;# C# S, D0 A3 k! s/ Q
vItem.nIndex = i;
9 f: n- y/ q4 m0 h! M7 P }else {* k) _9 k/ w2 V# T5 }6 r( o
ItemProp* pProp = pItemElem->GetProp();6 ~& Q2 |; N+ k* F* ~# X7 R$ C) e# o9 c; i
vItem.dwKind2 = pProp->dwItemKind2;
" }' d. o1 c( ~6 x- d vItem.dwItemId = pItemElem->m_dwItemId;
$ J( }7 Q2 M( Q b) p: T: X! H+ g vItem.nIndex = i;9 Y E `# W; C
}# d( B! E% J( Z5 ?; ^# k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) g9 @8 z2 ~- d% p7 j: I
}! o* x4 i2 W8 u; S
//////////////////////////////////////////////////////////////////////////& @ m* s7 p( V# i) g$ B$ V0 a
sort(vItem.begin(),vItem.end());//排序
+ \/ P. w! Y% T* ]8 y) p //////////////////////////////////////////////////////////////////////////% S8 N2 r5 d7 n/ K$ Q- l! K
//交换
( k! d, w! e+ @, }- Z, | for (size_t i=0;i<vItem.size();i++)* A! I1 `; \( F0 j; \5 }
{
4 n" D0 {6 t, i8 C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 e: Y; a( B6 u/ N* z0 Z- \4 Z" ~
pInvSort->Add(vItem.nIndex);
1 u+ H) n G! F5 a. i }
" q2 m! J6 I+ D. F# Z A0 ? BYTE nDestPos = 0;+ e( J9 S. {9 j; G7 A u
for (int i=0;i<MAX_INVENTORY;i++)+ F. M- L# T+ h! t
{/ ^5 ?) Y$ i6 e! t# {. c. |' a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ F' f. j& o @: M& |0 B if (pItemElem)
2 m- G% t: \+ S" y {% K# i. c$ W7 c8 Q
if (IsUsingItem(pItemElem))
8 B* L& U4 {* S+ r$ W# C+ E {: _; H, e8 P3 M, N
//这个位置无法放
: P$ B0 F8 w+ u nDestPos++;( W" r0 [# P, u p* ]: v& y
}7 e) b- t5 G$ G/ S. T
}9 M+ ~+ `; n! q% M1 G% w
BYTE nSrc = pInvSort->GetItemSrc(i);# p4 j7 O: ^. ?" h! z( g# o: f( z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- t# B# {7 ~; q) d/ P2 P
if (pItemElem)
& k/ W2 z0 B! d" U5 w$ e {
' g$ y+ K4 k+ Z if (IsUsingItem(pItemElem))
1 r. \" H* p2 j3 H9 h, t6 o, m; W/ k" B {& V+ j# f# i Y6 O$ K& W
//这个道具无法移动,跳过
! i6 `/ y& l/ ^2 D2 X6 Z' K" f continue;
& i, G& M: U! [ }
$ \) C$ d4 j7 n) f }else{& K. \$ \; F2 p! p
//空位置 不用动
9 M2 r! p# A8 O: Y continue;$ l& \# Z5 ?# c7 m' P6 S& C
}9 H# `3 K. M7 j9 U5 t
//////////////////////////////////////////////////////////////////////////
+ V' X: u; ~! ` //开始移动
% V, {4 U8 Y9 D! q9 g( `+ R if (nSrc == nDestPos)1 @8 J; `* f7 l0 K: U
{
% K6 V( r5 K+ H/ B) T. s. L //原地不动
. I0 {7 C: S R nDestPos++;' J, C6 h! E. O; w8 G/ D) J
continue;4 e8 a& ?7 c2 x7 M
}+ H7 H/ w [7 I. c) C, R8 g0 s
pInvSort->MoveItem(i,nDestPos);
$ r) c; W7 E- E- }9 T( X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 _" A- l9 x L; z5 W& } Sleep(5);: R' O; O; E6 o7 |4 q, D1 g
//Error("移动 - %d->%d",nSrc,nDestPos);
! ?" F, h# k+ T5 V7 N) @% Q nDestPos++;
8 b, ?; R& C! p& x/ S( @ }
' A6 z* x6 F- ` //取第一个元素的信息/ o+ _# w% t1 j3 h2 \) [
/*
% ]) M8 A9 x, X( Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
o# l6 a$ Y, n% T {$ O% z. @& _. g" p1 |9 ^/ f
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ C+ Q5 ~3 m3 F6 R
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; O- X- L: A' r. D& b h% |# R }
& h e, ^* p0 v- w f2 A4 ?( \ */4 l: d# z% X( b/ p% g$ p5 Y
//////////////////////////////////////////////////////////////////////////
) |7 o" v( e* g0 w/ D break;- M* f) d1 \# ~5 g) U0 f# F
}
W8 C% x( L) e3 { } & P4 n$ I0 ^! Z+ G V$ P# _
}. H' L$ c. n# l6 [7 v8 |
m_wndMenu.SetVisible(FALSE);
. ^7 @3 \( [# G0 w, Y2 t8 ~
/ P- R- {7 E* b& J+ w--------------------------------------------------------------------------------------------------------
9 c1 N8 H" I; g% ~: h8 J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& c3 ], K9 D. w* i- V
{
7 L0 P, J1 A+ Z3 ]BaseMouseCursor();, h, y6 w+ U5 M- y4 K
}6 P5 H# k: C9 a3 h
在其下添加:
2 Q7 s9 R! n# L$ Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' i* v# ?) }' A9 e8 p{
+ q( Q9 _; w Q2 T* \m_wndMenu.DeleteAllMenu();
1 O" x" _: @9 I, p1 H' f) j* [, @m_wndMenu.CreateMenu(this); n7 a& f& W) b: F Y! i
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; ` D- L& j X1 \/ X( Q
2 E2 Y6 f6 K3 w# @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 d1 C0 O6 M7 [9 X' y2 g) y
{# K! l+ c& b6 ~; g0 z$ _# ]- t
//P以上级别才可以删除所有道具- {5 I5 [& Z; \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 D G }" K, D) V
}8 k. E/ I& t) k, z( u
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 S+ d5 A$ Q0 j& l0 }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( ?3 x& E: h/ B6 X
m_wndMenu.SetFocus();
, S* ]& K& G P- ~' ]9 `& Z; D}5 H! @ L( c1 k1 |2 w/ F- n( q
------------------------------------------------------------------------------------------------------------% w, K b5 P0 V
*************************- f' c' N7 n5 Q7 f `5 V% ~+ T
WndField.h文件
5 ^: D. V( B, d*************************
8 N/ y$ y7 \7 ^9 B搜索:BOOL m_bReport;
8 L0 n3 Q: O/ \4 k3 n其后添加:
, n6 ]+ L/ S0 ~' h& nCWndMenu m_wndMenu;
% @& Y+ C& z: [, W% x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
\* g4 [9 ]% F9 X其后添加: H" @7 w6 J0 f }# |" h+ W: i, f
virtual void OnRButtonUp(UINT nFlags, CPoint point);
I# k# ~" r: I C- E3 ?* Z3 F2 E: _2 |4 S
. ^; Y/ x P% d9 \# x( C+ s
|
|