|
|
源文件中_Interface文件夹下WndField.cpp文件
' b; H9 E z! g* z% p' g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): |4 h' t0 B5 Z$ C! `5 A
) ^% y( o- }" p/ a- v# G! q% Zstruct sItem2 K% { b7 ]9 o
{
4 o% ~1 ~/ M) i% H: s5 a" d. ?DWORD dwId;' K0 X* r! w; w. `
DWORD dwKind2;- {9 d& e6 p8 o6 z& s. I! s
DWORD dwItemId;
# v( e6 G- U) {; B' B, c; ^/ O; [BYTE nIndex;9 l% w& ?; w# G3 p8 ^8 s+ L( }& q) B$ x
sItem(){- b) W( L2 ?3 U% L' l
dwId = dwKind2 = dwItemId = nIndex = 0;( Q4 v o. X# U8 t' t
}
0 P: G9 H8 Y$ k2 wbool operator < (const sItem p2)
: d& d8 `, `6 N, j6 e{8 D( F) E2 B9 H# i& F
if (dwKind2 == p2.dwKind2)2 A0 @9 @( A4 M; B5 N# n! J
{) B7 m' I6 C7 j* o
return dwItemId < p2.dwItemId;$ V, L& a5 j ~( A% E' }. U2 f
}else{" h3 j. }; m2 r: l V7 ^8 `
return dwKind2 < p2.dwKind2;9 z, m8 v2 m5 o9 S' J
}) P' v8 L. a+ U' x( u' [
}
- g0 H; n) i: q% [: |) d- M};
# @! O n2 z N- }6 w5 uclass CInventorySort5 W' T! o9 Y3 I' W
{# y4 ?* W) g& H$ U H& J0 M. F
public:
( @( L4 V) Y; U( ?& s/ YCInventorySort()
) H2 o9 Z" ]5 i+ ]$ x. Z{
O- @" K' B3 f4 P m_dwPos = 0;6 @+ w; E; D6 z& O! O. [
}" l% z* O. r6 u) b. s
~CInventorySort(){}% M7 r# `- R, d0 i
private:
! e- E$ S5 n! ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 w2 d& W! m; u1 C& j, Y' n
DWORD m_dwPos;
) E2 C+ @9 h; t/ A* _& A9 N& opublic:
% I% f F% L+ B; L5 z3 g# g. A3 A, jvoid Add(BYTE nIndex)2 ]7 v1 u2 n% E, B
{2 N5 b8 J; ]- c+ w, ?2 s, ~0 y2 z3 t; F
if (m_dwPos >= MAX_INVENTORY)' ~3 {+ y$ v9 s
{& x& v$ H7 R# X
return;1 U4 @3 |7 [- ?! o+ y% E! b
}
+ K, n1 x9 g, k$ A+ |. K m_Item[m_dwPos].nIndex = nIndex;4 D0 f& A% @& `9 i: X: v0 ^2 m7 _1 M
m_Item[m_dwPos].dwId = m_dwPos;
* E* e9 M1 X* h c( r$ ^8 q4 j m_dwPos++;$ {: w6 J" @3 d n
}0 n4 ?* |* }; H% X6 w( e ?$ J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, M: B* S y4 @: ~' ?{
: X5 Y2 o _1 w2 e# ?1 x7 ] for (int i=0;i<MAX_INVENTORY;i++)
7 H( i; f; V! \4 I5 v {
6 H- @% r5 Z( W( ~) n# L. t$ d if (m_Item.dwId == dwId)
+ K" g2 d4 {! R$ B# ]- O( k& F9 J {
: w" U' H6 |1 n9 Z; e7 Y% ^+ I return m_Item.nIndex;. j. z$ R" g' x e% o' |
}
% f+ q7 q- @8 W2 v" V }
3 y! _6 ~6 Q- f# w R# A2 R3 c return 255;9 c9 u9 w8 m/ g* J6 M' |( f! ^
}- u/ \/ \9 B. @; w- V6 ~# W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 _& ]4 k/ O2 v- }6 I! e{4 l1 b$ Q+ M, o' i( r/ ? K
BYTE nTmp = 0;
( ^" [0 z( @, U% v bool bDest = false,bSrc = false;
( M" t+ _1 b! A% e+ v( S2 P for (int i=0;i<MAX_INVENTORY;i++)" L' o! W" M! v( ?0 t9 c& n5 T
{7 L2 Q+ C: t4 M" n0 S% F
if (dwSrcId == m_Item.dwId)! U) z2 U3 x& F- }1 G6 t0 S! G
{4 m6 u# o1 p: s# L" X
//id相等 则 改变对应的dest和src
) U! H1 z8 W% c& ?5 ^: Z b+ E: H nTmp = m_Item.nIndex;
' s; k) Y r2 r5 D: W m_Item.nIndex = dest;* q! `" ?& s/ w) M
} M' |( K( r3 t
}
1 `3 h6 E- p2 Q7 ?2 u! C* { //临时数据保存完毕,交换开始
) U$ v, K! e2 T* _6 L8 m for (int i=0;i<MAX_INVENTORY;i++)
) v/ i' a2 O8 g. ^2 E# v {
% }* R0 _$ Y5 J- }2 [5 c if (dest == m_Item.nIndex)! {# W2 _, A) B" ^
{, G( M% w, H+ l0 b
//id相等 则 改变对应的dest和src
: a# ^4 R K& W m_Item.nIndex = nTmp;1 z7 j h% L9 ~' v
}
9 x# o! z0 Z6 d7 e. v) A8 ^ }
+ }* n9 w7 G) N8 X% Q1 m6 r}
0 P$ x9 D0 w: A};/ m- _' @8 s* o: @* r. C% A7 {
-------------------------------------------------------------------------
% a2 |& h2 {9 X K& J8 X# r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ D: n: u9 j8 J# \" o$ U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 d; B' k4 N" O' P
紧靠其上添加:
" [/ @# g$ ~0 e8 N2 U! Aif( pWndBase == &m_wndMenu )' ?2 C4 T' `. d9 c/ W5 k( T
{+ N; i. k9 Z, y4 w5 o
switch( nID )( v; p9 ?0 R1 W. e8 ~2 k% v9 E. e
{& x6 k8 u% Q, ]& C
case 2:
! e* r, j! e" R( U* N+ u/ K2 y {1 p1 Z6 L, [0 H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 ~+ b# I9 L3 ?7 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 B) R# N- `1 [3 e$ M5 Y
{5 r6 {7 o' l( m2 g" V
break;
8 H1 N; L3 T; D( I% O }( m9 C) N+ Z4 `, s9 Z ~3 @% A# B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, _2 ^1 P# [1 l! } {
$ V7 E; C6 n, @' k1 r# ]% m. Z" `9 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) J y& r- V/ i. d1 m& b
if( !pItemElem )6 R( N% l k" v c
continue;
2 J& }$ U/ B1 w3 p if(pItemElem->GetExtra() > 0)
: u# U$ a, I6 Q5 k8 @) u continue;
- o1 a9 a2 P. |2 W4 }4 B9 @: i! ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) K% |4 Z ~0 Z% f2 q& d3 F continue;1 l+ m ]( {9 @. N( z
if( g_pPlayer->IsUsing( pItemElem ) )
! g% J0 |/ W3 r8 b4 T continue;* v8 \ D5 J5 }8 `
if( pItemElem->IsUndestructable() == TRUE )
' f4 l/ ~, X$ i+ k! W {
$ P" g* X( P' C# s" x6 p' G! _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. F5 z3 B( N: C0 E) |+ } continue;
$ x7 M$ X/ H0 R% G8 f }/ K* Y z9 b- o4 L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" r" l* y5 J( K# I$ d) I9 T' v1 V }6 m L! j- Y2 x
break;
Y. [6 ` g5 S9 [' z }
2 D* j3 o8 ^2 Y W; s) `3 I case 1:3 r$ g4 u8 u/ d
{5 j5 C9 G7 c. x, u3 `$ B& Z
//整理背包' j' A7 z! k) m: n/ d! m
//////////////////////////////////////////////////////////////////////////
4 _9 E8 b8 u! X8 m! |' _: P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, g. K. ?" Z2 L W7 \
//////////////////////////////////////////////////////////////////////////
9 I8 d# [2 A1 x( p //////////////////////////////////////////////////////////////////////////
! C) d$ K. N0 ]# u3 m: M CInventorySort* pInvSort = new CInventorySort;
5 f7 u, ]- e0 q# n vector <sItem> vItem;
, `, ~* e2 j# P0 F5 \- A3 o vItem.resize(MAX_INVENTORY);//初始化大小/ F3 |/ o" s9 G! |$ l: A) K
//////////////////////////////////////////////////////////////////////////
- K# k% j1 [: {( G! v+ U) ` n //填充数据
# g0 Z5 j' q+ ]4 g) K. T for (int i=0;i<MAX_INVENTORY;i++)& ~% e, e& W0 ~
{4 ~) I; |# @4 }, N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ }. _4 P) N8 ]9 K! B
if (!pItemElem)
' v. ^% `# M Z% B7 ]7 H( W {
: N9 g- Y! V/ A( n vItem.dwKind2 = 0xffffffff;
3 p1 @/ o) c; W2 P% t# A vItem.dwItemId = 0xffffffff;! a) L+ X7 n+ ^5 R1 X
vItem.nIndex = i;
/ \2 z8 c) C/ _8 f }else {" R: R* X) s. v' O
ItemProp* pProp = pItemElem->GetProp();
- S" e/ V! f& ^# Z vItem.dwKind2 = pProp->dwItemKind2; d g3 s+ s& o
vItem.dwItemId = pItemElem->m_dwItemId;" h. A* W8 a: L h& I1 `
vItem.nIndex = i;/ t$ T0 L. k+ y6 f6 E5 O2 c
}
c+ r0 v- A( ^& \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 m2 F1 x/ j' a }8 r4 k F) V) I* @. ?
//////////////////////////////////////////////////////////////////////////3 U% W' F r( t# D
sort(vItem.begin(),vItem.end());//排序
" [* a o/ t! O$ Q% S1 j //////////////////////////////////////////////////////////////////////////
9 W; \: T* @! c1 x3 i //交换
. ?9 P) @6 L; J& S3 t- G for (size_t i=0;i<vItem.size();i++)& p) H" U- ?; B1 _& K
{% ~1 K0 _) |% b% s5 [, ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ T" K. y: i! l6 P6 b1 M$ t! `& m pInvSort->Add(vItem.nIndex);0 q' \: }. u& R, u/ J7 v
}- `5 s+ Y! G3 A s' x4 q" u
BYTE nDestPos = 0;2 r, {) i$ B6 E: }. `) ]
for (int i=0;i<MAX_INVENTORY;i++)- [. e6 I9 Q, [& r' I
{$ F+ a4 _2 y# B1 K1 r ^% f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
`0 ?6 b9 r" j( U. S, r, n* r6 J if (pItemElem)) c& N; `4 o* C6 n3 m- A- i9 s
{) d7 R" i. d. V, c+ Q( E7 [
if (IsUsingItem(pItemElem))8 U9 v! x$ E7 b3 z
{
1 ?3 u1 T2 B+ V0 y6 o' p //这个位置无法放: \9 q1 C8 t' j/ x4 s
nDestPos++;
. y/ r+ q3 L( { }' A3 _: o" @- {' Z
}9 g7 H4 ?5 \/ B6 q5 ?$ g6 g
BYTE nSrc = pInvSort->GetItemSrc(i);
" }" m$ i# a1 L" T+ b! e pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 F- s0 h! e; I$ L if (pItemElem)
2 }8 d3 e0 [0 b% y W( _8 ], v {' \& q0 x/ c, T0 Z
if (IsUsingItem(pItemElem))4 e! N! b' T( d/ B; q/ c
{
9 x% S+ ^& M f, T9 _6 O p! l; N; S //这个道具无法移动,跳过6 m3 i( _ @7 W$ q
continue;
1 i- \- w8 A o3 X8 f! ^" i$ V* X* o }
! I& b) N+ ^3 {" J3 D& c }else{
2 n8 }" C5 k% Z; e' K; f //空位置 不用动: ~6 i& \8 e0 y1 Y0 ^
continue;- s* p" Y0 b. ?, v8 z
}
0 w* A) J/ V F, D //////////////////////////////////////////////////////////////////////////
0 g$ x5 u7 r2 w( I. E //开始移动" S& I! m! b+ _) _* M. P
if (nSrc == nDestPos)% H3 \! F9 I8 Q! W2 V) Z
{
6 V4 L$ f+ U4 x //原地不动& l3 t( k, W3 T& |! f9 m# ` f
nDestPos++;
d: |1 y6 F5 ]. E) j continue;! K, F$ W% a/ K: P
}2 e( A f% y. y; P n
pInvSort->MoveItem(i,nDestPos);
8 I' o9 s7 }5 `4 P: r7 L g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" S5 n4 i/ L8 b3 s0 h Sleep(5);3 ?, T: d ]0 {3 S" C! h3 C
//Error("移动 - %d->%d",nSrc,nDestPos);8 j5 J, }* w) r C
nDestPos++;2 a' [3 d: \; i7 M- y2 Q# J- V; p [- l
}
. r, M. M) @9 K, m$ L //取第一个元素的信息, Y. f3 S# V2 h
/*8 n# a2 {9 ~+ v! `" _, {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, K2 X: d* A8 l2 f& P {
) s7 o- t( r: c& e' _. p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( M; _- y* [* M8 `5 k( L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' V) M) u! X+ W3 w }
a+ `# [, {* L+ E0 M */6 k0 L- x. r- A1 E/ e2 M
//////////////////////////////////////////////////////////////////////////6 i7 h2 j: |. F5 i0 g) @
break;
. p7 D& r1 `4 ?9 \ }* z C& y n7 _, T, ~. R, e
} 2 s5 C& c- g' @! r7 [( i% `
}0 E" R9 @; ?# b/ E/ x' \+ H
m_wndMenu.SetVisible(FALSE);8 @: P$ m! k" q3 K$ V
B, v& u3 ~1 R2 o* C- i6 Y& P
--------------------------------------------------------------------------------------------------------
) q) S# Q: d- X! a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; R" m! C" \; L8 A, E6 ]8 d{6 z) V) z+ f1 g7 S
BaseMouseCursor();- _. Y$ E# h8 h! m
}
2 o4 K9 x/ E+ r7 f9 L+ i在其下添加: U* }9 e! q& V3 H) q& A q! R! ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 J% F2 J) I3 M+ Y9 n9 w/ I{
7 s# v" Y0 C! o' z* Am_wndMenu.DeleteAllMenu();
7 O H5 }7 M, U: ^7 V7 j# I; ?; f+ rm_wndMenu.CreateMenu(this);
+ _6 @9 e+ ?9 a0 Z6 `' d: qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ u; C7 o' }0 N5 E B$ {* M }0 x% N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), f0 N* t# {! B5 K
{ e! X+ I* o4 a. S+ V
//P以上级别才可以删除所有道具: h1 M6 O" w6 C! A# [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 p- R2 ^4 H4 m8 v& q4 _}
* t% e1 Z. r, T. q1 Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ ]" e E P% r5 G! }m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) }. g) E5 r# S* g3 I/ v1 O( Cm_wndMenu.SetFocus();1 }8 j# @1 P# E9 K$ `% U2 h5 U, K2 o
}' X# }9 v$ F2 C2 g6 |& [1 T1 t
------------------------------------------------------------------------------------------------------------
! A, J2 v M4 D' ?- Q% i# K*************************4 f2 K( K x# X1 \7 Z
WndField.h文件) j9 F( y0 o X% w! f# |
*************************
* M) n- y% {% ]6 V/ O/ ~) T搜索:BOOL m_bReport;
' }, _% x1 ]- L2 j: ], C3 i其后添加:' r: o, X) S% \4 r0 V+ `" R
CWndMenu m_wndMenu;
* |6 i& W5 c7 Y! E# G% J5 X+ y1 E ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! a2 u0 m s5 P+ J
其后添加:
) y% }7 O" u9 P$ L( I3 Y/ Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 q: s. _$ G5 X* `# P$ D* e4 { y- U8 q. e) |2 `) u
s/ R' l+ n. r. b |
|