|
|
源文件中_Interface文件夹下WndField.cpp文件( ^) S+ `4 Z5 h$ y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); I8 L+ g5 y, w, @3 l$ @
1 C# e5 Y) Y! ~2 H
struct sItem
/ @4 {% e ~8 a3 N, e) K! w{
7 q' X6 R$ M% Y2 A, dDWORD dwId;1 x, q+ t" p' T! O9 E
DWORD dwKind2;: a6 m! | @) {( j+ \/ k
DWORD dwItemId;
# P2 Y/ k; o' |& Z4 E1 _BYTE nIndex;+ k% @) E% S" \. B# ~
sItem(){. ^' q" a) K$ n3 F9 }
dwId = dwKind2 = dwItemId = nIndex = 0;$ ^- l7 S# D; l6 _( B
}
- q& O h' |1 }9 m; l' a$ a' C% h8 c5 Cbool operator < (const sItem p2)
1 O4 \ K4 |8 o9 |- ?7 e{
4 |, F5 D+ L5 I4 j$ { if (dwKind2 == p2.dwKind2), P! l9 \( U- t3 Q
{
! o9 \3 v9 A- I. `& [+ G2 g+ Z return dwItemId < p2.dwItemId; H' m5 r& w3 m5 ?" U
}else{
& I: c. F" |5 L2 U8 A( W2 L return dwKind2 < p2.dwKind2;# g% t$ d9 b$ d
}
3 U) B6 x, |0 }& s}' g" F9 Q1 t& d* ^. u2 Q
};
$ U9 ?$ `' J7 C8 @. i( Q tclass CInventorySort& K& u! W/ R, T8 P+ y# Z
{3 G) e' Y1 |7 \ x5 p3 ^
public:
5 I8 [8 l/ A: L" {) [# LCInventorySort()# k: \. S! _3 p6 a: T, H8 ~
{
6 P- h+ `4 G) V+ c m_dwPos = 0;
! J, ~) o+ I9 G}
5 n# k/ M5 W; j4 a& x& q3 Q~CInventorySort(){}
, n B( d% Y- _private:
+ ` K1 V5 a4 g+ ]4 C/ csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; x7 G0 A0 G9 O9 ]; `) A3 U: e8 E
DWORD m_dwPos;8 G6 W3 j6 Q# d8 ?
public:
6 h* o. s) N2 ?0 m2 A- evoid Add(BYTE nIndex)2 h3 v* i! ~. j- u' `( C+ r
{
3 @6 l! D7 j: S* }9 @/ _5 R8 L if (m_dwPos >= MAX_INVENTORY)! N; B, t; C. a0 D2 P! A% h( a5 e( v( I
{
R& m( m( p! i( T7 G; d return; J8 K6 m6 w" w; h# f N
}$ G. {8 \8 v5 U. n0 D, F
m_Item[m_dwPos].nIndex = nIndex;
t6 A2 |1 ^7 Z5 E( { m_Item[m_dwPos].dwId = m_dwPos;8 e1 o3 A6 |0 x" A+ T
m_dwPos++;5 [3 C$ f; i* q$ \# m7 M' q" Y8 J
}
/ V# H" }* X7 }% g& ?5 `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" E, H% i5 R9 [) g9 V{ P/ {0 i. t- y: a7 `, `3 Q/ q3 `
for (int i=0;i<MAX_INVENTORY;i++)
9 A C% X" v Y, x- ~, \3 J. Z {
# ?; P4 d9 F' Z5 x% V if (m_Item.dwId == dwId)
$ q% H" S) |9 R4 h) k {0 i& s, z9 P* C4 p% p5 x5 A9 x' E
return m_Item.nIndex;
: k& P1 _, `' l, n* ~ }/ Z# X5 d1 k" n/ H
}7 ~- q; c: {8 h" Y3 e4 c
return 255;- m* u8 F- e( a( l7 X8 I& N
}
% _0 O. a' U( k2 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& ]/ L* t- s7 d! w# X{
0 ~+ i" U: I) q# V/ _( } BYTE nTmp = 0;) T: c! C& V, `
bool bDest = false,bSrc = false;
: s- V& I y: @+ z0 t for (int i=0;i<MAX_INVENTORY;i++)
) X6 S1 N5 O" {9 w& l; X4 I {
5 O7 H0 \# V# E. S2 K2 U: Q if (dwSrcId == m_Item.dwId)8 ?# g7 J! s7 U" Q
{: I$ u" B& j, E, Y; \( }3 U- g( M& ]3 g
//id相等 则 改变对应的dest和src
- r1 }8 q( _% P/ I0 N9 p nTmp = m_Item.nIndex;
0 j% a& D U& k m_Item.nIndex = dest;
5 J! X4 e, ]1 x$ b% f }
" l; M) b% u- i }
1 {4 T! Z# o h4 G1 n //临时数据保存完毕,交换开始8 K) J5 N3 P% ~6 S N5 c9 l- n N
for (int i=0;i<MAX_INVENTORY;i++)
6 M* x; U6 }$ c( J {! Z6 f8 Y0 B) L- R; H3 Y6 s
if (dest == m_Item.nIndex)# j# [: }$ A$ r/ t4 L
{9 Y' |) s2 r6 f' z
//id相等 则 改变对应的dest和src
+ e1 W* e$ R7 |5 _7 _7 a. [ m_Item.nIndex = nTmp;- T2 Z+ t. n% W P! ]
}8 w; \- c! z, p2 g ~+ K: Q
}/ a) [6 E! l# V6 o3 h0 Z
}
; |- v1 S/ t$ J. }) U2 w};
/ m" @; w) |/ I2 `0 Y5 K/ \- B-------------------------------------------------------------------------
" v7 U: _1 T9 A0 s依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ l+ E6 {, w3 f8 F3 I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 _" d' ?" t& G7 x紧靠其上添加:. z* P- v T ?* n! P, [
if( pWndBase == &m_wndMenu )
# Q4 c. s a" U1 e{" ]/ x5 L( d4 o, ^0 G) Z, R
switch( nID )
" X0 O4 E" P; j9 v5 X {$ _! Y* s0 _7 b, c) ^* ?7 c
case 2:0 `. w$ f+ n/ f- _" D
{0 X) ?: s, _8 b! f2 l# V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 |- O5 u3 w/ S1 j, V
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( T ^; Q8 S" n0 s6 A3 z6 _ {2 {# |% E. L1 V- u6 r4 ^* @7 I g
break; e T4 s( `* }
}6 a, _1 O$ R6 u( k1 t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 p- o' x3 `" V3 W+ c {
! |& Y8 O/ G! C3 P6 x6 { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 A) W# O" p0 l8 s if( !pItemElem )
' O7 _7 w& y _9 A continue;
& i1 W, \/ L+ k6 |8 k( a+ k e% q d" C if(pItemElem->GetExtra() > 0)7 H7 M! ?: P. B/ F9 k7 I
continue;
- g. o& X: ?8 U. l- s+ b! m8 p& }% b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 r! F; ` I1 K% w: D continue;7 `) J9 X1 W- b; C b* H0 ]
if( g_pPlayer->IsUsing( pItemElem ) )
# H5 m! ^/ v0 J: j: J continue;
) ]8 m+ D- c' A+ g5 N+ ^1 I9 d0 b if( pItemElem->IsUndestructable() == TRUE )
. }' v0 \1 V5 i: k! P' n* M1 P {
! J4 b! D8 z( k6 k* Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 Z4 [* d* J- y' Z* y
continue;% G$ T7 C P7 r" a# |; C7 T
}2 T) B7 }2 F/ q8 R# c' \: P Y. A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, } j- L1 ~( [. F0 a }
' r- r8 J( K/ K+ ? break;. q' R( n. @/ Z; j7 O
}
7 W6 r8 l; e5 p case 1:' T) @/ e+ \3 }' [" H
{- ~/ a- K/ K! \; y. S) k1 ]' G
//整理背包
+ i2 W6 o0 M3 k; A9 l- \4 m //////////////////////////////////////////////////////////////////////////
8 ^4 X6 ?, k% n; W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" ^1 G; Z) |8 U
/////////////////////////////////////////////////////////////////////////// U+ p, W. u2 x7 q
//////////////////////////////////////////////////////////////////////////
2 L! } @' C, X0 [5 d9 ~3 j CInventorySort* pInvSort = new CInventorySort;7 b, @4 k/ U" J% b2 `/ M
vector <sItem> vItem;
9 j, n5 }: }+ d S vItem.resize(MAX_INVENTORY);//初始化大小' W7 d7 i$ Y! ^! _: ?4 a
//////////////////////////////////////////////////////////////////////////
9 \/ v: U% r# K& Q: V //填充数据5 B! _; Y$ {5 Z) \
for (int i=0;i<MAX_INVENTORY;i++)
% _/ c. @+ z- [! A! ? {
7 ~# s0 R; s9 Q' u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% k2 K- i( {* l5 Q1 ?7 Y& h if (!pItemElem)
; b! x1 W9 Y! X% b2 ^' o {
( n* ~7 w$ s/ P2 u# e5 | U vItem.dwKind2 = 0xffffffff;
1 O }# G. e5 c, R9 V% O vItem.dwItemId = 0xffffffff;
3 t# J: E# x8 Y7 P: ]1 ` vItem.nIndex = i;' C$ g. p1 a! S9 }
}else {; c2 f8 V3 h( K7 ?
ItemProp* pProp = pItemElem->GetProp();& D. C- ~ f7 j
vItem.dwKind2 = pProp->dwItemKind2;" }" }* s) |8 M# h0 x1 n9 u
vItem.dwItemId = pItemElem->m_dwItemId;% f4 m) D+ ~% q" d
vItem.nIndex = i;" H/ D4 {5 }/ b
}
0 O& t7 b, b# b* k8 o) v) J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 t' R z. c3 e/ l( A N }
9 V* |& |. J- _( E# s1 t9 K0 x' S //////////////////////////////////////////////////////////////////////////- Z! y w# ?" b% q. z' U
sort(vItem.begin(),vItem.end());//排序8 K* S- I7 P& ~ T( ~* Z
//////////////////////////////////////////////////////////////////////////- C) f5 L% R+ `/ ]" h6 f8 [+ S
//交换: x+ r5 C4 g8 Z8 o) z
for (size_t i=0;i<vItem.size();i++)
, e3 e- ^) C5 T6 p) k {
6 l% P+ |* m0 Z! X% D! m //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( e- b7 e9 w- Y6 N pInvSort->Add(vItem.nIndex);# q5 b. z/ |$ y
}3 N2 d5 i( f% ?) {& w9 f
BYTE nDestPos = 0;
0 D( U6 e2 a% S, C) O2 Z+ b% d1 c3 U+ y for (int i=0;i<MAX_INVENTORY;i++)5 Y% ]& d7 c& I, ~! g4 [6 V
{( C0 d6 n' c7 {( W- C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 k, z4 B# v' F/ U5 g# R
if (pItemElem)
* |" s* [4 q8 f- j { q# S; z, P _6 W) }
if (IsUsingItem(pItemElem))% y" Y) Q' {+ E0 H- t3 f
{8 R8 Q" N7 J' w: }0 h/ G8 d$ z" A
//这个位置无法放( Z j$ \- t" \1 Z: }
nDestPos++;
Z9 L0 R6 B& B; z4 j! P% U5 G* ` }
* e( f* k7 g0 Z8 q }
1 y ~- g/ h" t ]/ e: U# q4 e BYTE nSrc = pInvSort->GetItemSrc(i);
0 u; d! K9 U c/ j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 ^% R! `# u- O if (pItemElem)
' m2 w9 g& V* l6 d g9 q" k$ q; V8 b {
, @: l# k, M$ h" d if (IsUsingItem(pItemElem))
" |8 |, j. v7 _3 G( Q: D {
8 C: a: ~2 P' l8 s5 Q. Y! J //这个道具无法移动,跳过
& f8 M% F0 r/ n2 E2 p1 x continue;
. y, h; R Z# ] }
9 B0 i, T: u; H5 L }else{
" K$ i# _% ~# u: U3 z //空位置 不用动
! o- i9 e# G4 n continue;
8 M* `6 ~+ ]- M1 ~6 O# Y } E g& l# ~/ l9 P: m0 w
//////////////////////////////////////////////////////////////////////////+ W' b' E+ ], q! o9 [6 l
//开始移动* z4 o+ ^" O8 w" |% q# ?
if (nSrc == nDestPos)
[1 ?/ \2 w8 _# B! u" y {2 T3 G( R3 A, q" n* J
//原地不动+ u# b% R3 Z: O* o( }% o5 ^
nDestPos++;
, f5 y1 g4 g1 G* q' ?; m continue;
/ B* t. _; Y- g. g* S. `6 m7 ~, K; ?8 {. x }
& q$ [5 b( p- ` pInvSort->MoveItem(i,nDestPos);3 c5 r; `# f! x6 d
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% \' q% E: F# s9 [ q4 Q Sleep(5);* w5 F8 s; L( K" J
//Error("移动 - %d->%d",nSrc,nDestPos);
* n% M7 M$ [! b; V% b! \ nDestPos++;
: V O% N! a; W8 m9 i: Q }" K: J; t! q- p- K
//取第一个元素的信息
$ }9 r% X1 j0 i /*0 X- i i/ S+ c" G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! l) E! m7 c8 O+ C1 C+ d {
& X" P, |9 m6 w) @0 S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ N. t, ~ S) b. i: s8 e9 M" m+ ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 d: _) j" v' U, ~; x }
2 G7 o2 Q+ V! U0 l. Y7 o+ V */: A9 e% p. a4 X( o0 ^
//////////////////////////////////////////////////////////////////////////
7 s# Q4 f! [' `7 ~/ O6 o5 `2 J break;
5 E6 r }" j( B, E, A }- O& [5 }9 D: I
}
! F4 X& B/ D- D0 A4 p}
& Y0 V# R7 g4 a4 z" R Z% q Ym_wndMenu.SetVisible(FALSE);
% p, _! C' K( x' @4 f
8 g J2 {- S3 ^. Q2 _" P! L--------------------------------------------------------------------------------------------------------' S4 z1 {8 B0 v0 s+ g2 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 B8 I4 x m8 t" A9 o7 l4 c% n
{
6 C( U3 H; B' ^' h/ FBaseMouseCursor(); b! i, [+ m/ w: @
}
3 ]! d* I, F+ ^8 l0 y D在其下添加:) G, ]7 m. I0 o- }* N1 R$ H# ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 H9 ]+ i) X5 ?1 j{
4 B& O' o; r7 f/ s. S2 i- \( ?m_wndMenu.DeleteAllMenu();
T4 l8 }* x% a3 Um_wndMenu.CreateMenu(this);
- V; n# s" a! {' a6 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, U' q0 R( Q+ F' x+ X4 I
+ N. o4 E- \0 I3 c% Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; i$ b5 l4 @* Y- L ?* V{ F9 k( Y, w# L* o/ H6 b2 \
//P以上级别才可以删除所有道具
' s; k9 i, i: ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 J. u- P6 S2 M1 L5 P" M
}
. Y& g4 [# u9 K9 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); \( S4 M+ Z. ~, D9 u# }: T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ a2 H& l F& ^- Z3 G% ~
m_wndMenu.SetFocus();3 p' j8 T; U+ a) p& D; H' M
}; K h! n/ J9 ~
------------------------------------------------------------------------------------------------------------) \7 L+ ^) Y% \
*************************
% Z0 F! }4 D7 a8 v; |- KWndField.h文件
% N. o" P1 a9 _( i*************************
$ x: A- p- U9 E% u0 t1 W搜索:BOOL m_bReport;
7 K4 K4 i. N5 K3 k8 o- W- x其后添加:/ y" s) Z' ?4 n/ h/ ?2 w9 V
CWndMenu m_wndMenu;* P: W" w9 ^3 ^+ C" P' p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 b! v: f- k9 ? V/ z
其后添加:+ y5 Z6 k0 E2 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# Z3 X6 L4 U9 S7 V' ^* E Z# P( L/ }, k2 K! C& y+ s, r
( g8 L% \8 M; {8 p5 t2 E
|
|