|
|
源文件中_Interface文件夹下WndField.cpp文件: q& e/ j1 a( u# Q% c, `% a) D0 u
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 x; P+ Y$ k2 r F- r* E
b$ v% _& k7 `struct sItem! g: W( r: d& R' {
{
1 ~8 G. \7 Z9 p3 G7 MDWORD dwId;
' ?, ~/ b& w' c6 ?DWORD dwKind2;' B9 T; K! M" ]8 T* g
DWORD dwItemId;
6 Y$ [, C. B4 ]BYTE nIndex;0 T# T/ O( X* Q* c. L: h3 Q
sItem(){
, d( C/ s) {' W x# {/ S dwId = dwKind2 = dwItemId = nIndex = 0;
* y( V7 k) V# F3 H$ Z% Q}( C. a% r) ]8 F* ~/ L
bool operator < (const sItem p2)! ?# f5 f: r, q2 P0 y
{
: e2 ^3 l# a1 a4 u- M# ?+ s5 r8 |. S if (dwKind2 == p2.dwKind2)/ l; z3 r. N V: C$ q/ E/ c
{
/ M: ?7 B/ X; l. s return dwItemId < p2.dwItemId;- Q! a$ ]* Z- D. O
}else{+ j/ F' x1 c1 I9 X; l( D
return dwKind2 < p2.dwKind2;3 R; y) r/ H& Y! }& V
}
. P) t. o9 M6 ~, E3 Y3 }}
2 p( e7 j. M9 S2 N) K};
7 t7 ]% w9 B8 Z$ f) C7 _class CInventorySort2 z9 W3 v2 O1 l4 |+ }1 p) G
{
( t# X5 |) d8 m' i: V+ Mpublic:; d0 [# A% E) ?* Q7 X7 o0 v! S. \
CInventorySort()
0 {7 x- H/ c9 A( E- s# H8 {1 f{9 c8 \: n0 Z! C/ L( F3 L4 z
m_dwPos = 0;
! j2 _/ D6 N: f O- B0 t- Q}3 o- ?/ s8 e2 X0 n4 F& x& g
~CInventorySort(){}3 C- j- q/ [) K K: y$ v# j
private:
! i( A6 M( E: \5 zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' Z' ]. l$ l* b9 m! ^DWORD m_dwPos;
0 w! K( X0 M9 B7 \) R/ G# lpublic:
+ C6 U9 {$ @* j3 }7 \" A5 S% N; I7 cvoid Add(BYTE nIndex)' T" ?6 O* d2 X; N
{. R; x6 X/ c" u r& P
if (m_dwPos >= MAX_INVENTORY)
4 c% P( v4 Y& f/ L {9 h# n/ {0 b o" q; B
return;( q( U' j1 A( z
}( K/ k2 w0 c# j4 B1 T
m_Item[m_dwPos].nIndex = nIndex;
5 M( e& k& B$ A m_Item[m_dwPos].dwId = m_dwPos;
/ R1 D6 U' R( P+ i" J/ A m_dwPos++;+ m: c3 c% c& ~ ^! B' v( p% L w
}0 ^, A5 L4 B4 R* E- n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# A8 q' E- y. O2 h2 t& \! s; m{
: Q; @0 { Z$ \: Q. x. C" ]3 y for (int i=0;i<MAX_INVENTORY;i++)$ ? m0 Z/ }% G% z) o" R0 q
{/ |' l" t7 V( [0 S- X# D
if (m_Item.dwId == dwId): H3 d# D4 V; K: I3 T. N
{ `0 @- V) t! o& b t4 z
return m_Item.nIndex;( g5 S- m; |3 y# R9 e
}
5 S$ k4 Y9 n! i9 j }
7 b- j5 e. ~9 S% P! ~ return 255;
* }& c% G% E( w1 G3 D}
+ ^$ i; I; \( h- Rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 l7 c; W) u7 g/ `
{% O# V I2 @' x. t/ i" M3 r
BYTE nTmp = 0;% S7 Y0 S) m; _" l6 }2 w
bool bDest = false,bSrc = false;
1 i& S$ A! h/ r; t; C2 ]+ \9 ] for (int i=0;i<MAX_INVENTORY;i++)
1 p' W; |1 H( [- U {4 f0 p- f2 \5 u6 a: P8 P1 ` q
if (dwSrcId == m_Item.dwId)8 r( Q3 k7 n2 |" F/ r1 `& c2 |
{8 V* A$ E! ^ D" d# G
//id相等 则 改变对应的dest和src2 E* n% ]) u$ n
nTmp = m_Item.nIndex;
5 h3 e( v! T; R; ]! N& l' \ m_Item.nIndex = dest;% ?7 @: R0 o* P- P# t' g
}+ K" e% G+ ^' x6 P
}
1 _/ Z4 ]5 J, r //临时数据保存完毕,交换开始
& y- i) a0 |' R7 } for (int i=0;i<MAX_INVENTORY;i++)
( I8 [# L8 E' x2 I- [1 D {
! b) |" M' y6 E# B# E; w$ l) E if (dest == m_Item.nIndex)% M0 `0 k7 B, _# T$ @; P
{" V5 d; G; S- J( z
//id相等 则 改变对应的dest和src: S' |3 o" c7 L& r- M
m_Item.nIndex = nTmp;4 {# k* z7 A( h8 C# ~# U, K$ P
}
8 A: ]. s+ h3 @* N8 _8 } }
$ B3 I6 P& e4 _3 P7 o}& y1 A9 z# q p- Y9 I+ f" M w
};# b* _- u9 F' j' r
-------------------------------------------------------------------------
- e6 Z/ g7 o) m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( D. P0 E3 A0 z$ I+ S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! b/ k$ j7 i+ d; c9 \. T( x
紧靠其上添加:( v4 U- P3 d7 O$ R& z
if( pWndBase == &m_wndMenu )
6 [, Q9 c" _- g+ _{: X$ U5 h8 o) q* ~6 G
switch( nID )
3 o; T ]" V* C {% G' a5 d1 i$ a" w7 {& J m
case 2:0 r# Q( Y. Q3 W
{; R' b, x, n: K( I9 @! f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 |% o2 A9 N' t5 ^' C, P# V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( i0 U, j1 |* q9 l# f( ^( E4 S
{
/ { u5 H! p! k7 s: V9 ] break;
7 u% @6 |1 e0 c0 q! F1 C6 K }" t, Y6 G/ n* m! K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& ?- I4 W0 u; I& k0 N
{
% Z. L) e! D3 |; W( ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: K! _; v3 F9 n' l* h+ d9 c; n if( !pItemElem )
# p( j9 k5 D. ?# T continue;
9 b" O$ G: m. P- R if(pItemElem->GetExtra() > 0)/ f6 K( J% P+ L7 M& ^
continue;
! i- a" [ o- t9 q% H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 ~/ W2 l0 F9 n8 O7 i5 U$ S4 a
continue;% }, y& s2 A4 k. H5 O5 n6 ~ O
if( g_pPlayer->IsUsing( pItemElem ) )7 A8 I! O4 m8 G5 I
continue;
& j. k9 h" U4 P+ N3 N1 _ if( pItemElem->IsUndestructable() == TRUE )1 b4 G0 K$ O' B: Q$ K
{
9 j, p/ A- a7 `$ i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, J# k: [. f( }7 q4 @ continue;
5 l) h; n5 K' O6 F! M }
* m3 ?8 |$ j- x; | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- N; o: V% N- o5 i: q' H
}
! J; A8 z9 r6 A break;
6 T5 f" g6 a1 n9 ~- \ }
1 h, z( ~' ~- o1 W5 {/ d case 1:( a9 l. A3 R+ m, w$ b& O8 r" }) ^
{2 N. {8 p2 i9 A
//整理背包- g: L' [! Y4 e
//////////////////////////////////////////////////////////////////////////5 A ~/ a" f$ `; j3 i& o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 J3 \- g4 _0 b7 U8 H( @
//////////////////////////////////////////////////////////////////////////
. i' ]/ H+ A1 n6 T8 j //////////////////////////////////////////////////////////////////////////3 ^' m6 Y- A5 ? w" @* C$ G! U' B
CInventorySort* pInvSort = new CInventorySort;
( a# l* v4 @& L6 X4 L+ | P vector <sItem> vItem;
2 a9 l& ?: S( r3 R3 p' z3 W1 A* D k vItem.resize(MAX_INVENTORY);//初始化大小; J. J2 c: ]8 n! M( |( f, c
//////////////////////////////////////////////////////////////////////////. ~: a r( [, A' H9 x& r+ V
//填充数据
- @+ o3 c2 U0 K for (int i=0;i<MAX_INVENTORY;i++)* c& |5 O, I! ^4 I8 y& v1 W
{
4 n0 s0 y8 n% q0 l6 H' g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( S4 D; l ~4 \( H5 O) O0 O) H. B
if (!pItemElem)7 G1 ~6 g9 X( Q2 L
{
7 @2 ~* d: ]# K G vItem.dwKind2 = 0xffffffff;
; g' O2 b* {* r. O5 w: I vItem.dwItemId = 0xffffffff;7 c0 A# G) \4 T* @4 V# _0 S
vItem.nIndex = i;+ p1 I/ U7 z: h# ~
}else {
2 W; d3 I0 ~& K: A$ W" s- j ItemProp* pProp = pItemElem->GetProp();
p7 `' i: t* H: H& M+ Z vItem.dwKind2 = pProp->dwItemKind2;& Q4 d5 C- u. a! C1 s; o i
vItem.dwItemId = pItemElem->m_dwItemId;
6 {+ o6 g, h* { vItem.nIndex = i;) P! n6 o$ v$ s6 D* S# O2 S
}
* f6 f/ Y* e ?/ L a; E/ \* k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( _5 s4 [7 d- k9 Z: C }
- z# d* \. ]5 m5 `% @" f //////////////////////////////////////////////////////////////////////////
+ B. H# E6 o+ h1 R8 v+ G! B sort(vItem.begin(),vItem.end());//排序
0 F: v6 _( R B. \ //////////////////////////////////////////////////////////////////////////
. h6 l E9 R6 W: Z //交换- P2 v+ l1 M% m
for (size_t i=0;i<vItem.size();i++): l7 n+ o' K' l0 H+ ~6 {
{
" o* q* ~1 t6 x+ `- f+ f" L s" j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ a0 h) W# w* `- k8 } pInvSort->Add(vItem.nIndex);3 F* d; n, Z) F; M" R- \
}
, |9 s# s t. n& N' l. i m8 N BYTE nDestPos = 0;
`2 H: e/ y& h$ \& R6 V& q for (int i=0;i<MAX_INVENTORY;i++)/ i& H% V/ I- v# w8 [" E$ H9 I
{
, P, P; }" w1 y( c6 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) V: U2 N) ?4 @; d if (pItemElem)
3 L7 D8 c4 n0 I, Z {. O) _: L1 d" ?
if (IsUsingItem(pItemElem)); f4 H1 [3 D; _% j% R0 u1 d- |
{
9 N( q- @6 ^1 U/ ?# ] //这个位置无法放
L% ?" T4 ~6 M0 F h2 w nDestPos++;' B( S4 Y p* f6 x B4 [0 e
}
6 D9 a+ M. U, K1 Y. ~ u) ]! p }* z; ~9 a& N4 \+ f* U' E
BYTE nSrc = pInvSort->GetItemSrc(i);
: m9 S6 b# O& f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% L1 i) g3 z% u2 X8 w c if (pItemElem)" i* Q& Z0 f/ `
{) N/ x+ Q V3 @7 w! F
if (IsUsingItem(pItemElem))
! \7 g Q$ C5 a& w* U/ e' u& T5 g {! A+ ?0 q( p4 J7 O& E' C" r
//这个道具无法移动,跳过
9 z* V( U+ X- H8 o$ l/ R continue;
- \; n1 l1 A" Z) V2 Z. I }
; u3 ?7 k- F5 J }else{+ u7 F9 t# \: ~& ^+ R, B# }
//空位置 不用动
$ p; \7 J3 A t3 |1 h5 { continue;% v0 B' E% e0 `4 I5 I% I
}2 p6 R7 d! G7 S. _4 P& u
////////////////////////////////////////////////////////////////////////// [4 `. j! _& N3 A
//开始移动5 c: B* K; L# F. Y
if (nSrc == nDestPos)# J& v% A# V* t/ {& f, W
{# z. R3 O! m( O% v& z& \
//原地不动
* ?5 T! c( r! I4 N' @0 g7 ^ nDestPos++;7 D2 M) t# b0 c
continue;
) f6 R4 W A) [9 g8 y6 D }
1 f' x- O# [ l! h pInvSort->MoveItem(i,nDestPos);8 T( L, [' u. P! d: t3 N2 @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 c7 j4 f K1 ]6 y/ c5 Y; i: }( Y Sleep(5);& }- m; e( @$ y5 G+ X
//Error("移动 - %d->%d",nSrc,nDestPos);, P/ \" d2 u F8 B# [. ~2 l
nDestPos++;
) [% ~! l: \( ~' i }) M$ t& G$ _) Q7 \/ s
//取第一个元素的信息! w B3 Q. @0 j k8 b
/*
$ b, Y, L# u, X- G$ d, k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 q R. r" b& w5 f5 X- a, R
{
7 T2 C2 t$ W6 s9 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 t: @8 M% i7 G3 m0 B g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; X+ n* Y' H* _9 F/ _( D }( t# B* P4 K* h2 h* `* U
*/
) T9 X0 k) }5 D( ]0 U( ]8 h //////////////////////////////////////////////////////////////////////////, v* E' B8 M; n5 x7 }
break;5 _% ~2 D) ?+ ~4 t
}
6 d; k+ p! |7 W; \ } / S% K4 j0 n- L/ ~# ~7 o# E5 x. y
}& Q" F) J2 h, P' r3 F
m_wndMenu.SetVisible(FALSE);
9 y( w; f9 Z" A# c& ]* Q1 b K! `$ ^1 a- N
--------------------------------------------------------------------------------------------------------
3 l) ^" X+ b4 x$ R4 W1 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 A, n8 N6 t$ C{
x+ C8 J9 d9 f, l0 XBaseMouseCursor();. H3 Z1 u$ k7 b e; d
}
$ r3 v% E: }7 Q在其下添加:9 Q% ?! L( E; Z8 {; Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
J0 ]6 a+ o. ?. }- l; F: L{: q b9 E/ O1 N& [
m_wndMenu.DeleteAllMenu();
7 _3 }5 x$ U0 D+ N. W/ am_wndMenu.CreateMenu(this);
k: p% p3 d m) m& h+ km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 h& O" E$ }% T" m2 Z |0 S0 T0 b/ G3 m4 d* q9 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 C, ?2 L8 n t+ b' I{: I& G7 P7 G+ K0 I% X4 L1 S4 w2 C/ s8 Q
//P以上级别才可以删除所有道具
$ K7 ]7 a% U0 f( _- h) r m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. f4 z, f& ^% v6 w1 g
}. s, z+ A( F6 n. `% ]7 s x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% X# ~' o5 U7 P8 Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 `/ J3 W5 r/ G9 U+ X$ B# \
m_wndMenu.SetFocus();8 P$ k R( Y, Z8 N, s/ @
}, C* h. K+ `, O- p' X0 [
------------------------------------------------------------------------------------------------------------
2 v% J7 K/ _/ d6 G5 a*************************
5 K3 E% R: n' k- {WndField.h文件$ H7 o5 O: c8 m6 E8 n% m/ L0 F* A
*************************$ U) q' [6 j8 i& ~
搜索:BOOL m_bReport;$ Y1 R% ~& v. a% Q* F& O
其后添加:( I) R) w: b) h! s
CWndMenu m_wndMenu;- S& y9 V3 W" U6 J' z) _# C- \0 R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. x# N7 E& g" a3 {! p! K0 `
其后添加:0 r2 C2 ^/ s$ T# c& w
virtual void OnRButtonUp(UINT nFlags, CPoint point);) \7 ?* w8 |" d) ?9 [
) i" e5 E2 F* J2 z( t4 v
6 q( {% p% a# m( g |
|