|
源文件中_Interface文件夹下WndField.cpp文件- S; N, r$ `& |+ }6 H% R3 i+ a" Q4 B
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: {! z8 Z) E- ?' F8 c
1 `7 {5 V' Q8 g, estruct sItem
4 w- \* }$ i5 I2 B{/ e' v$ L3 W+ ^- S6 \: x. Y5 K3 i! V
DWORD dwId;' f5 q* d4 A7 L8 M
DWORD dwKind2;
* \5 ?1 _ n: N# I' f! `7 J A i5 yDWORD dwItemId;/ ?4 w, t& w+ ~( _1 o# g
BYTE nIndex;
+ d& h+ V6 _ W4 a. K6 M6 AsItem(){
# i- D% @; P# A+ h: u dwId = dwKind2 = dwItemId = nIndex = 0;
% M: p( m& N5 g1 k6 c. P}
' m& ?0 {) o3 l! G% n* hbool operator < (const sItem p2)
6 l: m: C/ P, O2 ]4 y( \{# ~# b9 f! H) a
if (dwKind2 == p2.dwKind2)+ b% ]+ a" q$ a6 J+ l: e2 I) K
{; K+ E! i/ ^7 C
return dwItemId < p2.dwItemId;% U: @6 O1 i) n3 F
}else{: b+ N& R# X3 r! o3 f
return dwKind2 < p2.dwKind2;
' [! I1 h9 z1 G8 Z7 k1 c1 x }
6 z" Q# g$ U2 o; V- ^. l}' n" {# \' d; L7 D
};0 ]: x* Y2 j$ G! F- y( |
class CInventorySort
$ [3 Y. F: H5 u. q{
9 F4 h2 ?# b' W+ ^$ i2 lpublic:
* |& e0 T6 L0 p" ECInventorySort()
% \6 i2 Y# h. R$ X{
0 G. \7 ?6 v" k9 \- {+ B, f m_dwPos = 0;8 p) |. w S' }& W( j# x
}
4 E) ]- t$ }* O+ t5 \~CInventorySort(){}- H7 }) u! L! e+ c$ N
private: v3 d) W* Z2 P' N9 m2 G, s6 q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ _" E# j( h0 P& C. [5 P ~DWORD m_dwPos;
3 m4 ]( @4 `6 j7 ?6 w( ^! cpublic:
# l& B2 l4 V& ^$ Q% I4 yvoid Add(BYTE nIndex)# _( J" |7 [+ [6 |
{
2 D C- b6 S8 }7 w1 Y) q if (m_dwPos >= MAX_INVENTORY)
" F6 w* X6 {+ u4 V$ I Q {0 y$ a9 [5 C- u! Q' W) V" ]6 k
return;+ M/ y6 r7 c5 A3 ^# z, Z/ j1 ^
}
) p; ~, I i6 [ m_Item[m_dwPos].nIndex = nIndex;! q: F0 I2 s$ ?+ W4 u
m_Item[m_dwPos].dwId = m_dwPos;
, Q# x1 ]: \% [5 l9 |+ i, _1 Z m_dwPos++;9 H: k' [0 i1 l6 @% |
}, z" C; ^0 B) ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% S% @ h4 q, }
{) s# C4 G$ z& a
for (int i=0;i<MAX_INVENTORY;i++)
9 y# K7 _& K2 ~1 ^ {
/ f- S L/ a& ?4 I! g. @: O if (m_Item.dwId == dwId)% z- H' S3 E6 d2 m6 b0 T
{+ a8 F( u8 n" t) o F/ W
return m_Item.nIndex;
6 W0 n" | ?1 b; u% N2 C) g }
# d* K4 |$ E7 y* D3 `# q( U }
$ d' ?& n& Z9 F return 255;
\( ~$ M) l% |9 x6 Z/ P1 C3 u}$ |/ G0 ]2 n3 a% v) F* ^, F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% @* k6 P* B: I3 |{
, t+ M L4 u+ a BYTE nTmp = 0;. A* ~ b6 ?; q& Q+ h! f
bool bDest = false,bSrc = false;
$ f5 n+ {& U& [. ^% Z9 O# O for (int i=0;i<MAX_INVENTORY;i++)
: t, \5 k9 y( L) N* I {
" u5 z9 j3 M3 ?+ L$ V+ S if (dwSrcId == m_Item.dwId)
s) v* j, P8 N. b3 V1 u {4 @/ g! y/ W: a7 k/ F; D
//id相等 则 改变对应的dest和src' \! H3 t, o! }- g
nTmp = m_Item.nIndex;
6 u+ q7 `; r: H- ] m_Item.nIndex = dest; O; B6 p6 D' N5 `$ M6 K" z: ]2 v3 ]
}
5 O; y4 C3 T! Q4 g/ h }9 e3 M, ^/ b" `5 X& C' O. H8 _
//临时数据保存完毕,交换开始
- u3 r# f8 Q* j7 X for (int i=0;i<MAX_INVENTORY;i++)2 V) y5 [7 W: V% i
{" r) a: Q* V' `) _ H, g' E i. H
if (dest == m_Item.nIndex)- t+ ^( t1 Y$ |
{) F! c! R: U/ A0 Y$ _
//id相等 则 改变对应的dest和src/ ?! i! x( y3 l- [/ ~4 U! A
m_Item.nIndex = nTmp;+ ]; J: h- f5 v3 h/ V
}2 S2 u6 M3 T) R5 U
}
8 ]- M' k+ |$ {; g: Q0 l}
. l# x9 s8 J" b ]( M0 R: T};* ^2 a2 @3 g1 o8 P8 I. n
-------------------------------------------------------------------------
, |4 X9 I0 B t) i- m* A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ y: W' h: b- f* x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 \2 U- Q$ D' U% P6 Q& E( P
紧靠其上添加:
1 M: u; X1 W' J3 n7 G7 _if( pWndBase == &m_wndMenu )
) n. v" v4 |7 X) k& @{
8 Y$ P, V2 s' ]! J9 N# g! e switch( nID )1 K. T0 m6 l* a
{ e+ ]8 [- W8 \
case 2:1 ?+ S. v7 Y) |6 j [7 g
{1 i4 g& b* Z1 X( Y6 X+ w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ k% n( K% a$ x/ K; {' `' A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( o& j. P9 U. X. [
{
! W4 Y$ c$ ]7 A9 }+ a! ^ break;. m+ A `1 P, z$ |/ w
}* Y* Y6 W/ [4 _5 |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" l* ~( p: B5 h1 T4 t {3 a' ]3 G9 O; J4 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- o# v% ? r' u' E, d1 G5 q if( !pItemElem )& S- M* P5 u; {' H/ T
continue;; G. y3 [( W5 o4 J& W& \* B' P- Q+ q
if(pItemElem->GetExtra() > 0)
- J: ^" C& x8 O/ G continue;4 e1 T: Y$ Y. B* h. t8 }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . W* v0 M1 G* G, B* r9 x: P) C) s
continue;3 P0 r( q% J8 G# N
if( g_pPlayer->IsUsing( pItemElem ) )) K9 w( Y9 O' @* @/ I) P: J6 J
continue;$ U6 m) M6 e; |) B/ S
if( pItemElem->IsUndestructable() == TRUE )
1 u+ J. S' ^4 g! K5 x" @ {
a6 {, \. Q0 b2 h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% \* g* X6 w: P
continue;
7 t* Z. G" ?5 b) a U }
) Q; t7 e, g& ~* Z- y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 j- g+ c6 a: T4 |1 e! g }& u: }0 S$ _, z2 K
break;
* G3 E& @; r2 u/ i. M2 y! X }
# q9 N9 n( v% F. ~ case 1:$ c) M# n+ K( D' M$ n. \
{
6 t/ G4 R: N- [. D3 s+ ^* A //整理背包
: Z2 ~. T: @ n7 l# u3 Z2 G6 v //////////////////////////////////////////////////////////////////////////
( e' Y( E: W6 Q* R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) W. Y6 y e2 A; l8 S% v. }; z2 N //////////////////////////////////////////////////////////////////////////
' q- e L! o& S/ U //////////////////////////////////////////////////////////////////////////4 d& K4 X) E; r! {6 G. ?
CInventorySort* pInvSort = new CInventorySort; K# w) G4 r' D4 D9 n) a! n! `8 O
vector <sItem> vItem;, |# L9 v8 B5 { E( x3 f
vItem.resize(MAX_INVENTORY);//初始化大小; A; d6 _' ]3 r8 [: v3 I
//////////////////////////////////////////////////////////////////////////: g2 L& y$ u. N& b1 x( T
//填充数据
! x1 I5 D% K/ r: e for (int i=0;i<MAX_INVENTORY;i++)4 r8 X# S9 k: \, B# N4 M( z
{
5 ^0 r( J7 t: ^: f4 i! U$ c" s! g( ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 i* M R9 M- j
if (!pItemElem)
; q; `' D$ R$ [9 p5 w# [/ o { ]% P, W) \: G) {7 j% b( x
vItem.dwKind2 = 0xffffffff;
( [- g7 v8 A0 L# Z& H/ T$ c3 K vItem.dwItemId = 0xffffffff;( x! Q9 G5 l! a$ ]2 ]5 N' ]. r# V
vItem.nIndex = i;
8 L. o0 g: ]4 X, _1 H# R }else {
6 _1 M0 B0 W5 C7 l ItemProp* pProp = pItemElem->GetProp();8 @% ?/ ~: O. l* h/ O$ J
vItem.dwKind2 = pProp->dwItemKind2;
" z6 i. X# P% D3 d$ Y vItem.dwItemId = pItemElem->m_dwItemId;! X) z) r+ g6 N% B
vItem.nIndex = i;6 M) ~! E e( D7 A
}9 }0 Z& j& t9 s9 C: g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ t4 t* b: ?2 j! L, h% d! d
}
# P4 C( P( q5 s1 Y" N2 Q' u //////////////////////////////////////////////////////////////////////////
3 c. Y0 m& x8 ]- ?" H sort(vItem.begin(),vItem.end());//排序
1 D! K9 ]# n) Z- q+ o //////////////////////////////////////////////////////////////////////////
! S5 _6 X3 @/ W/ W: |& q //交换8 @. n8 \- O4 }/ \( R
for (size_t i=0;i<vItem.size();i++)
5 j" T" `3 d. V2 v* M6 I* e: i9 C' q, V {
0 l( E4 h& R7 {9 V: x2 I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ l0 R z b9 ?# L& ~1 U pInvSort->Add(vItem.nIndex);
3 O1 ?+ K) _* ?# m4 I1 Q }+ e( E! I& K, X( v% P
BYTE nDestPos = 0;) [- q& @! W# S
for (int i=0;i<MAX_INVENTORY;i++)- c. r! F @3 o" l/ s7 [' b
{
# e- t- S# o& H ]3 h4 Q: C5 E+ z' N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 S! A: w& E' \, I% F- f if (pItemElem)
% e! r4 |& W1 I9 _ {3 e6 U- D6 F: V9 X9 |/ z5 `: {
if (IsUsingItem(pItemElem))0 ~* a) W$ k- _/ q! p! P8 v. w1 @# g
{: _# K) g4 o' [; f6 U7 r9 G! j
//这个位置无法放
& ^# P, i d7 O8 E+ _% l nDestPos++;, D3 T Y4 ?' m
}
$ _6 a9 c2 }2 _. j2 a0 ` }
" }1 `% o* t* r' S1 o BYTE nSrc = pInvSort->GetItemSrc(i);
2 h1 X) y: \! p# f2 G1 P pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% w+ n5 O; [' s) f7 E. ` if (pItemElem)
# v {- m) y, }& N4 j- ~1 n. ~ {
9 m, B0 _! v E( H/ {! O if (IsUsingItem(pItemElem))
0 z0 _! e+ M7 u5 h; e; w {, G8 |6 ]4 w5 W! I F$ t/ m& u
//这个道具无法移动,跳过0 {, r3 j- d6 g9 g. ^4 _8 Z
continue;3 g4 y. o ~, e
}; e' z8 K( f/ b' R
}else{. U& `. S$ k- s6 b
//空位置 不用动
6 u: F' Y& s- f# W continue;
! ~5 w3 R7 h4 |% @6 c D; q }
, N4 u) V8 N! p- K/ u //////////////////////////////////////////////////////////////////////////9 t' ^' N8 a( s# g/ @
//开始移动# m e9 o8 y) f5 k
if (nSrc == nDestPos)4 N8 r {! I. f( w. Z# ?) {" L
{
& ]' R- i3 G, ?. \5 O: g, Y, R //原地不动4 n! S" [9 X# z3 p m9 ~; E
nDestPos++;8 d9 _5 N& a. m, d
continue;$ v& P9 w3 g7 M& v: H& ^) P$ T
}; b: }5 H3 _' O, H; Z }
pInvSort->MoveItem(i,nDestPos);8 K W3 P ?0 B1 x: \$ r' P) g$ A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);" Y }' ^- `6 I0 o0 c. H& X
Sleep(5);
+ f7 b! h. I6 f5 n; x //Error("移动 - %d->%d",nSrc,nDestPos);
y$ m+ |, S8 G0 T' S+ |' O nDestPos++;
' v: U& w1 o5 q$ x }! S7 D; ^9 q1 \& Q8 q4 K
//取第一个元素的信息5 f9 H' |2 }. m. u* d# Y
/*. f! p9 w. M V' w0 k1 r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. L5 y2 |/ p* l! C. s5 w; P; ^+ t! E {
4 F, ~' y: V+ [$ I- t% {" v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" G3 U7 L1 B! n3 r( a2 X6 L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! S* k2 [5 q5 a3 ^, M. C
}
2 ]3 C) M' h$ e1 d, o */9 I+ E |8 x# V0 y. h* ?4 k
//////////////////////////////////////////////////////////////////////////+ U2 G$ W) s# W( |
break;* e- v' x1 {2 p4 ~+ s" P+ I) f
}
; p$ @1 b9 n& l: c% _% Q }
. p5 a k/ y/ [}
2 e9 N. m$ x9 I$ n$ rm_wndMenu.SetVisible(FALSE);
. @, r3 v8 x8 E+ b" h% B0 N# S
8 e5 ~4 p, ^5 r$ v-------------------------------------------------------------------------------------------------------- B8 _+ M% O6 j8 z5 X5 k; O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& \* H" r8 v0 d
{
; M/ Y7 `" M0 V2 p& c% F. SBaseMouseCursor();
C- }) K4 N' N}
/ [3 V# I$ g: q# f% B X/ ]在其下添加:
# w& O1 E5 [, o& Y+ |/ V& F/ ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- B- }6 F& c2 n' r8 V- n- w
{
3 |+ k# C) w) Rm_wndMenu.DeleteAllMenu();
- b; e! ^3 Q4 cm_wndMenu.CreateMenu(this);
& Z* @4 {: ?7 e) Wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 e9 o& R! k H1 B# T# b; m
. T6 c6 l3 X+ w/ ?& K' eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 Q5 d7 |7 Z8 U8 e2 ]' q/ V{
) r0 o+ q( _& U( e! q( W) t9 @ y, F //P以上级别才可以删除所有道具$ m: l4 M; b0 l' O/ {8 G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 I8 ?4 u6 {7 m$ @( r
}- R4 p# R4 R$ ~! z* m2 G0 j P, R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% h- T* G4 t( |: j1 G8 |2 W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! |( I: M8 V3 ?" e( X& a' {m_wndMenu.SetFocus();& X* w% p$ h; z8 v- V
}* B( \( q4 e' m
------------------------------------------------------------------------------------------------------------3 W6 S& c: |- e0 y
*************************
- F. j3 Y" L- j+ ]3 G$ a( `WndField.h文件+ k& }4 ~/ C1 g
*************************" w! E0 U7 n3 U4 f! k f
搜索:BOOL m_bReport;6 s9 ]( G' |1 w d3 z+ m/ A
其后添加:
' m3 `0 p' s- z$ y3 b; ]CWndMenu m_wndMenu;% `, }8 E; l& q8 s" n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 B5 I. `* n1 q, i3 Y0 t
其后添加:8 f: f- \0 p+ S2 |" [% ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 u3 j8 v3 ]! e# M
! i( m1 Y4 u" A4 v- e0 y' { v. P9 o3 J
|
|