|
|
源文件中_Interface文件夹下WndField.cpp文件: j9 Z- n g5 f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. B7 m5 S. J( t& G8 P& O6 ~4 a) G% m
struct sItem3 B a3 Z% i7 z5 v. a
{0 A% @5 e: ]2 s# p# C
DWORD dwId;# P, d0 U' O2 I+ V, s. \. q2 `0 Q6 h
DWORD dwKind2;' y5 Y! v* A2 G- v
DWORD dwItemId;" S( { e; S. S* ?' q7 \
BYTE nIndex;) Q) F' f6 Y$ i4 t V* u
sItem(){- d! \& j# e+ {4 N1 ^
dwId = dwKind2 = dwItemId = nIndex = 0;/ Y! r" c+ B9 e! D
}
! z; z. e! y# K9 \2 hbool operator < (const sItem p2)( [$ a( q, [4 Z2 F2 E( j8 P
{' W' U) G5 t; h2 H. {3 a! @
if (dwKind2 == p2.dwKind2)
- _" ^6 h' _2 f" u. q! O0 r {$ \/ I9 g5 l& K6 a' T
return dwItemId < p2.dwItemId;
1 n. R3 F2 P- h( Z6 U7 { }else{2 L/ E# @) N6 Q4 L5 h
return dwKind2 < p2.dwKind2;& w0 t# O+ {5 L- m
}! X, l: {( j# J' z, g7 n
}
& q& x# \; v3 \3 z& K};0 n; j$ T! a* A. u2 c' Y& h$ b
class CInventorySort
7 c. Y0 N) N7 f2 j, ]) }# \/ \ T{
9 ]2 ?0 w& _8 T$ w0 d, j. U. apublic:
; ?" B9 C/ v* w! ]1 m! O- v9 DCInventorySort()
+ s# O8 w1 g$ K! |( k- w! U( @4 h{
, o0 K1 z9 b& c8 h0 g m_dwPos = 0;: n( j/ ~& B9 |6 M4 Z* C: d; S
}9 i+ A3 `! T0 q, [, P2 K
~CInventorySort(){}
' q) u9 c1 I' Xprivate:$ b2 x, V" O& r" ?6 s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 g. f% J) Q1 K2 P! l2 k5 ?0 DDWORD m_dwPos;8 U% z4 c2 l& d
public:6 U F/ U, R9 c
void Add(BYTE nIndex)# p: w8 ~) `2 X% g+ G: S( f
{3 ^3 P& t7 P( g+ A H7 j# d7 [
if (m_dwPos >= MAX_INVENTORY) J9 C) p/ k; L# N" Z2 S
{
9 q" ^0 y: q# N; ~. }/ A- I0 X( u5 E return;
0 ]0 R2 ~/ O( q7 w }! w* K J/ W4 T: U' N
m_Item[m_dwPos].nIndex = nIndex;
9 C7 Y2 |& B. } m_Item[m_dwPos].dwId = m_dwPos;
3 x8 c0 N j1 N+ \3 A' u m_dwPos++;
- g* \* W" ~& B: q/ @) j}# ^# I8 K9 _/ [3 t: h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. }& I1 j7 u: L2 e$ ~1 f
{
1 r# F+ D8 }1 _8 L for (int i=0;i<MAX_INVENTORY;i++)
0 [, \; ?, s, |. }. E {; v1 b; e/ l4 a8 o+ e+ H( Y
if (m_Item.dwId == dwId)
7 F4 d: S8 J# y8 l" P {; k! E2 m# g2 p7 b! y
return m_Item.nIndex;
4 M' M& _% U/ z. u/ p5 l7 L }' c7 }4 i4 f% l
}
6 S5 ^1 s9 v& m, G5 \ return 255;
9 [4 u! W* C8 T) v3 [5 k5 l* t( L}
7 Y6 c7 ^( B/ `; J$ V( Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 `+ F1 X$ q$ |( e5 a# K
{
0 ?+ j$ w4 c }( e' C6 a BYTE nTmp = 0;
. c4 C$ A: S1 ]2 w8 t# c* } bool bDest = false,bSrc = false;: M0 n" x; V# T8 i D0 _
for (int i=0;i<MAX_INVENTORY;i++)
5 `8 |- l9 u. Y% Y1 Y {8 h7 F/ a3 \( V n
if (dwSrcId == m_Item.dwId)3 o5 b- Y3 o# L0 d% i# u
{
9 |, j% O+ }, h/ E; @1 J //id相等 则 改变对应的dest和src( T& r' C _5 H% M
nTmp = m_Item.nIndex;9 A4 @- ?0 ]0 m
m_Item.nIndex = dest;
! p( b) \7 m; E7 L x1 a }
6 W: D* M) F8 z4 k }
0 B6 G! T$ v$ P; D0 `; T. | J //临时数据保存完毕,交换开始
! o7 N1 b* w5 f$ ~, G. U for (int i=0;i<MAX_INVENTORY;i++)9 j/ [$ `4 |- V
{
& z( B9 e6 u4 ?- f0 ?4 Y$ i2 A if (dest == m_Item.nIndex)
; t1 Z% j9 J5 w- o9 U4 k {
, e& y( r5 w5 t" m! i# B& O% I1 ]7 | //id相等 则 改变对应的dest和src
: t* \6 z9 a: b1 ?8 d m_Item.nIndex = nTmp;) y! T. u6 X5 O% h" \6 o& q
}# ~6 v1 m! Q3 n
} p6 d& _2 x/ p1 _
}/ `6 O$ X5 e* u+ l6 i5 |
};7 [% A6 n# s/ N. N; b' M7 a2 @" z* T, {
-------------------------------------------------------------------------
" N7 }* Y9 c* t. l6 F4 s; \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ ^ _8 C% n- L3 s) ^, o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 }; P, q7 a8 m( X紧靠其上添加:3 M4 X1 b; Z I0 X: K1 u8 b/ U
if( pWndBase == &m_wndMenu ), V: ?# b8 q6 L- R1 u
{6 ]# M# R) }; {+ Z
switch( nID )
6 G% G- D7 P/ I$ o0 i, n! ~ {3 @7 M' u; z) ]3 g
case 2:
' K$ c/ P5 N. F0 j+ V& M {
6 H! K' `. u7 p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 q& Q8 u; h" a' [1 T; s" H. `8 o, g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 y6 X' }- T R; f1 P4 H( B {
9 h) v8 n) |/ E$ B0 J" M break;
j/ {/ F8 D) Z8 W7 P, E }
' G5 r" N9 ?' [ |. i& z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 y/ l7 Z, h0 y6 l r8 b' T7 w& E4 V
{
- H) L0 ]9 H# r8 H( Y# }& B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& P. t* y% x: g) A( Z4 D if( !pItemElem )0 E: L# h$ l2 V) q
continue;
) S6 W+ e; s$ R if(pItemElem->GetExtra() > 0)
3 }5 e! h/ d# m) E- V3 o7 j continue;
j4 {" f! ~" y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% i2 Z9 B# U+ a5 o7 ` continue;1 m1 B3 J: ^- T! c
if( g_pPlayer->IsUsing( pItemElem ) )
8 b# D: ^# {- q' q* ]% U continue;
% L- i. Z8 G# R* e if( pItemElem->IsUndestructable() == TRUE )
8 N0 r9 ~; B! t7 s# i7 `" e {
x# w) @( s! Y1 K6 U$ W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! V3 u2 D4 h/ | _$ i( `4 Y( F continue;2 [5 [# t8 }1 o' V
}
9 f; J" E& h! `6 Z( T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 o% _" I0 l% |9 c
}* A: d# {/ ~) l5 h# {4 s- O- b
break;3 U3 A5 I- p! s2 ]) s/ G
}$ D5 c/ i" s z8 n* Z
case 1:
o0 l! l8 g6 z7 q {; U! J& j! n# |( k
//整理背包; U2 u1 f2 f) i6 T2 A3 X# w& O2 ~/ t
//////////////////////////////////////////////////////////////////////////
3 O+ m% R; z1 c3 y4 w! z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ B+ Z0 u9 L9 G* l A7 l
////////////////////////////////////////////////////////////////////////// d# n3 k+ J" N: s c9 c. q
//////////////////////////////////////////////////////////////////////////: u( ~" y0 Z" @- T7 u% U+ b
CInventorySort* pInvSort = new CInventorySort;8 S; T8 t+ w) @! [8 e
vector <sItem> vItem;
( a9 P1 @- T1 Y: q3 K vItem.resize(MAX_INVENTORY);//初始化大小0 b: R9 D8 B# _' W: M
//////////////////////////////////////////////////////////////////////////# u3 P9 P8 \! q1 e0 j! M0 d4 W
//填充数据
) L7 k9 U7 D0 D for (int i=0;i<MAX_INVENTORY;i++)
0 l) s {% u" c% u {: q U$ x {
8 R" E3 E( V, m7 h: t1 a9 W; m" l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 O4 M1 }" r/ ] if (!pItemElem)
! K& X4 p/ }: }; J: u {/ i% V8 f2 c; R4 @% B0 C
vItem.dwKind2 = 0xffffffff;
g* k7 b9 E) j, m vItem.dwItemId = 0xffffffff;
; z( t; c: B- s4 d0 [ vItem.nIndex = i;
- I% }. m* T0 b! U, R }else {, e8 @; m2 P2 v% G, T* a
ItemProp* pProp = pItemElem->GetProp();
. K- N) B4 x" z- D3 U3 } vItem.dwKind2 = pProp->dwItemKind2;) p+ }$ E7 o4 w5 t3 O7 `; s
vItem.dwItemId = pItemElem->m_dwItemId;* Z2 D& R! p2 [
vItem.nIndex = i;7 |; \9 K7 ?) B C9 N ]+ e0 g7 I
}5 S# k$ I$ W8 B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 Y, m3 f5 |8 m1 p1 r# ^* H }( E/ \4 C0 c+ g
//////////////////////////////////////////////////////////////////////////
1 }% S" H$ O9 q8 f9 [+ U+ N sort(vItem.begin(),vItem.end());//排序
( F9 ?7 n1 G4 C7 v7 ^' Q //////////////////////////////////////////////////////////////////////////
$ ]1 @+ a. ?( W5 E* x //交换
! k2 a" e0 ]3 z* E( d for (size_t i=0;i<vItem.size();i++)) d ^# k6 f3 M) q6 |( r. m
{8 f$ @# T7 Y& e u3 u) a: N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! R, Q/ }! O0 Y+ a' T4 ~- W
pInvSort->Add(vItem.nIndex);
) ^& ?6 G- v2 f$ _. ` }: ~" t6 h: `& X P2 U
BYTE nDestPos = 0;6 A5 L! h5 x3 c& e
for (int i=0;i<MAX_INVENTORY;i++)3 u! L, F: X/ v6 K2 A
{. O1 | c; u; ^# B% w+ n$ M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 ?/ r, @0 N3 I1 g if (pItemElem)3 o( K$ M) \" X( y
{9 _) ]" ?, s) o' h( ]
if (IsUsingItem(pItemElem))9 g8 @1 h; O- |8 h0 _8 W
{
7 n( |: V" o8 Y1 k/ ^( o //这个位置无法放" ^+ D0 t! x/ R/ Z7 p+ T
nDestPos++;
' k" f4 B4 c2 B }
# f% s/ B8 N7 D$ F# k }" \5 ?4 f0 T8 J5 ? C
BYTE nSrc = pInvSort->GetItemSrc(i);
, `& w% i% F, O+ n2 M5 F2 B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
I. U9 X! d, a2 z" q) j. v$ | B" m if (pItemElem)
: X% h7 {7 k0 D$ |; E {
+ ~$ s# _2 O9 m' W" ? if (IsUsingItem(pItemElem))
4 Z0 k0 x# }2 r {$ j2 I/ Y6 F, }9 L( n/ w5 W
//这个道具无法移动,跳过
% Y* c+ o$ p, }0 o$ w continue;
+ m; C7 P+ Y4 [2 f$ J }; t/ w5 t- ~: U& ]4 o9 _
}else{4 E4 e9 x3 j7 _/ V
//空位置 不用动! z' k8 |6 O" r/ L
continue;" w; \4 b$ Y! o) e, I, J
}* \' N z4 b- [8 t& @. p; [, \. k( [4 Y
//////////////////////////////////////////////////////////////////////////) t# E+ s+ Z+ v# L, M q" \
//开始移动' `8 R& F+ C- b; M" b
if (nSrc == nDestPos)
' |* W! M; }$ G# j. y7 ]+ j {
! n$ ], i5 A/ z7 _5 R //原地不动' ^4 o% Z; r4 d1 u' W
nDestPos++;# N8 a9 f9 O' i7 v/ M1 K
continue;) w' i; {$ T9 q$ q9 t7 l5 ^
}) ?1 p7 J$ |. O
pInvSort->MoveItem(i,nDestPos);
1 H9 v% C3 W1 }4 v8 U9 N" } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ @6 g8 n7 b- T' h8 o Sleep(5);# x+ ` M E, z
//Error("移动 - %d->%d",nSrc,nDestPos);: }" B) T/ f! R1 ]4 f
nDestPos++;
; N8 R* }7 \5 [) R q9 T }
. B: c' @1 {4 i //取第一个元素的信息! m/ C% S+ h& `! z$ Q. f, G
/*
6 |5 N. k; u j! o9 I1 ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. p% j) m) w0 [: x. U, R& ?& q. M" I {9 \) a7 Y5 a$ F S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; E5 ^9 X1 `7 }7 g3 T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, H# {2 D8 m9 x! M% @/ o
}1 K: ^- m5 ^! w% y) P
*/
7 G A" S; G! I4 y: c" g: ] //////////////////////////////////////////////////////////////////////////
1 f6 J6 ^9 L) U5 G break;0 r! `+ A! ^! W. b5 u" g- R4 x
}$ o+ {. g+ C; T. n
}
_, M. P% W* L) x- d; u. i, G}
/ X+ F, K' h) s$ u; G) _m_wndMenu.SetVisible(FALSE);6 H* g* [4 |: e; ~) M# |/ S0 Z8 k
8 U ]$ a: g, N! v--------------------------------------------------------------------------------------------------------# W8 ]% s, h9 A, P5 G% R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 M1 L! x" u# M( q' f% G4 _7 ~{3 W7 e* l9 A8 u$ A
BaseMouseCursor();" D7 q( L4 ~( S5 p; [- s
}& K4 G8 l' E& E* d- D
在其下添加:
X; Q+ o" ?8 z' R" {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( ?2 D+ Z$ H% |1 R8 e/ }4 z" N
{
: i( {1 e7 T# `5 ^) Q$ Nm_wndMenu.DeleteAllMenu();2 F% p; q$ C: N; R1 @( r0 c7 s8 Q
m_wndMenu.CreateMenu(this);+ r1 w. T$ O2 Q% m/ y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 l: z g( m4 o( h2 Z# f
' z5 I- x& x: a+ b# O7 e! C- x/ J( Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 t6 n9 @& v5 Z{
6 G) W) ~# m2 H0 ` ] //P以上级别才可以删除所有道具
M" N; ]( u3 P5 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% ^, o; B0 v; h0 v% l}
, A( i f5 n% ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 t4 \" F0 |( j p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 G6 o- I8 l! `7 y2 T+ E9 e+ [$ m
m_wndMenu.SetFocus();
1 y& w9 n: _/ Q0 Q4 _3 Z6 f3 v}* E; d5 W* |2 M- Z
------------------------------------------------------------------------------------------------------------/ N2 [1 b& @0 X) v5 Y5 L
*************************
2 s$ q @' _% tWndField.h文件0 Z) | c& g: }
*************************
) _+ r+ A b6 O9 K q* p8 M, K8 R搜索:BOOL m_bReport;4 }- u7 o0 K3 X0 D) Q& a
其后添加:' _7 {0 x% R+ i: g9 H
CWndMenu m_wndMenu;& }* V$ ^+ T& I3 h
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. d) i! G3 N5 ^+ y- j B5 Q
其后添加:
! e' h2 M' o9 h, [6 jvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 O8 X! _( F0 U5 @
/ E$ ?1 _/ B& c* w3 H) C# p9 E& V
I% g7 D* ?9 E* U# e |
|