|
|
源文件中_Interface文件夹下WndField.cpp文件2 m, s5 P1 O6 q8 D
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% Q7 h5 L/ t; C# F% `( m: i
8 v7 s) L; J4 K t8 J+ L% j. G: {struct sItem' Q, H0 v: \, G: I+ a
{
/ I, r3 v& t+ GDWORD dwId;. r2 n% _" l- R* o8 T
DWORD dwKind2;9 [8 B& |1 P* o! ^. C
DWORD dwItemId;
l' p3 g$ \6 P8 J/ ?" LBYTE nIndex;# Q( d. V5 Z5 m& e0 s8 e
sItem(){
5 p r/ @* U) j; _ dwId = dwKind2 = dwItemId = nIndex = 0;
. M" z8 V* E' I2 t* f) S$ ]}/ O1 o0 b% S1 l& [
bool operator < (const sItem p2)
d+ M( |4 z0 a. S{
+ R+ F4 c" M7 E; { d9 T2 g" o if (dwKind2 == p2.dwKind2). v9 k U }9 a6 X. a
{+ }; T2 P; W, @, ~( x; f
return dwItemId < p2.dwItemId;# ^; b7 [7 _' o! X
}else{
) }6 V1 v1 c# K, [: T9 b* Q return dwKind2 < p2.dwKind2;* E' ?: B! A/ G. d& l8 y6 _
}8 }" \' m7 a- _+ I( v5 B
}# ]( G" K( s' N' H2 L3 j
};3 w- w) U4 t& x: Q* e
class CInventorySort- Z E$ o; J2 n! {& y" k, O# E
{
. `& q& [! v5 U( d- Y' Upublic:5 |! J2 W# q( Q, E6 B
CInventorySort()1 `8 b# e3 X& n( S0 F- i4 ~
{+ P! m# k% F# W B
m_dwPos = 0;
% d2 {6 ~* |/ F. q/ k7 w: d}
2 Q1 ~" l, ]; W- F. O4 e~CInventorySort(){}
$ K- a! H( B8 ?5 E1 Xprivate:
2 b% ?9 H# {' h" L% hsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 X7 e: L/ Q! f% X6 @DWORD m_dwPos;* a t" Q) L1 E2 }3 v' M* s
public:
6 R* T: L, B9 ~5 g3 e5 `' |( M, ?! Evoid Add(BYTE nIndex)3 \- y4 v( Z0 e6 N; ~ k
{
* w1 d* x l* p' C$ t, b% \ if (m_dwPos >= MAX_INVENTORY)
+ @# n" a4 _, H {
- X1 z% p7 F% ]5 e* z return;
% P$ X; o- K/ b }" R) b' z7 r5 X8 B
m_Item[m_dwPos].nIndex = nIndex;) s6 \& C$ \8 V) i9 }
m_Item[m_dwPos].dwId = m_dwPos;
+ ]) w! R& W0 Y m_dwPos++;1 ?) G% n: \5 x, f
}
* n4 C* C2 P3 J3 zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( p0 z% S& V. ?, x
{
% f- m: O s! m: Y9 d$ |: W; m3 L for (int i=0;i<MAX_INVENTORY;i++)6 {! V3 }2 p- s" X6 `% c. P m/ s
{# w4 k* R( K9 P8 J
if (m_Item.dwId == dwId), S0 U0 Z5 G8 F& c
{" i+ T0 i& r- |8 u1 A& i
return m_Item.nIndex;
$ K: G+ v" s' a0 T5 ? }
0 K$ c( P" j( x( T9 g }
. r3 w; X$ a( R% |7 X return 255;
+ y! Z' l4 D$ s- r7 F}9 _6 q$ M" Y, r
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 M* R: E) W! t; A6 R' `* s{, Q. }4 C0 J y& o
BYTE nTmp = 0;4 A1 ~% I9 M4 R: q1 _- K+ h
bool bDest = false,bSrc = false;
; u O: Q" c' O! {8 N& d; R for (int i=0;i<MAX_INVENTORY;i++)# x2 S0 a/ i( o* P
{
0 a7 _7 R6 w: b8 M7 j" J# f- a if (dwSrcId == m_Item.dwId)
( f. G" e$ N2 [0 J {, C b3 W: R( I# F3 U
//id相等 则 改变对应的dest和src
) i2 G; a6 y% P* I b% j nTmp = m_Item.nIndex;
9 D; R8 J$ N7 V$ E% _5 U' V4 q m_Item.nIndex = dest;
7 _2 F- ?% u6 r# { E }
! M' m; B' [% g' r B( n* u# U }
5 g k- u/ \. _) i; J0 d //临时数据保存完毕,交换开始
- K5 _7 H( P* P- Y7 R for (int i=0;i<MAX_INVENTORY;i++)6 Z h5 \7 D" P- y$ H
{' u* P4 R" g3 w& J+ |: X
if (dest == m_Item.nIndex)
, I( e/ ]- L, W% ^* m; H! y {2 ]8 T- A: ]/ h- P0 E
//id相等 则 改变对应的dest和src
! I3 P( J+ M5 H% P m_Item.nIndex = nTmp;0 D" X3 o x# g# Y3 a/ i/ r/ m$ ~
}
. Y [8 ~$ C. }) n }
% l y5 ]7 P: j: i0 f; e}# ?5 T k2 m: P% Z2 {! R
};
5 A& b) F* H5 l9 W! t* z9 o-------------------------------------------------------------------------
( ~9 n x; n6 ]; A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 c* [ T1 i6 S) l: @$ a' K1 Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 e* M: p( v9 M0 v/ l/ E紧靠其上添加:( ^# | X! q; h5 _' ~6 \- y! B
if( pWndBase == &m_wndMenu )! d T. b: H! e3 P8 a. q% r4 S
{
, N# k& a4 o& h switch( nID ): ^1 g) N) z/ a! r$ ?
{
+ ^! C7 z7 f( \- G1 K" g case 2:
, H/ V* C1 i! Y" ?5 Q+ ]) X' H6 Q {
- U K+ U* c( n, b G) J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( D$ E4 d: t9 k; d% w! R* \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 v/ I: J* h0 P1 U* N1 O( p0 S" I
{
; N4 C* S+ Q& u7 l1 v. a. h( ^+ l break;
8 ?# M2 h3 m; p }
2 m9 q* p* _# |; Q7 r' ` for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: ]( `7 I7 i' W {5 V2 F: [ `; C, A) }9 ? r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 z I# u: X- J1 Q# T
if( !pItemElem )
. ]# f1 T; M. f2 ?, v, ^. U' c continue;" v! K' ?) L {0 J8 p1 x4 q. I. s
if(pItemElem->GetExtra() > 0)
6 Z) g* t* d% b/ \4 o6 u2 ]3 x continue;
( m4 Q0 M# S8 L, K, A8 |% N if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- A% v# C9 j% l- ^0 f3 L continue;4 s. G: F( a# ]) m9 G& o) f5 t8 Y5 p
if( g_pPlayer->IsUsing( pItemElem ) )" N' g% m! }4 w( G. f4 }; ?. o
continue;; \+ ?- M' {/ }4 [: m
if( pItemElem->IsUndestructable() == TRUE )
, a1 k3 P+ @5 w( ]! m {
! s+ v* C' X8 A! {4 Z& [/ k g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 }0 J+ Y; p8 v2 q7 f! ~
continue;! o5 [ P- \) G" k% Q! u
}
! T& A/ S2 o; X E: q7 M- A; _% N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- O" u ?/ [( ~8 a/ k8 A }, I) e) z( i, X% D
break;6 J0 z4 T! [) u1 X' H
}/ z: `9 h! \+ @3 [3 W
case 1:
# _. U5 J" C Z e/ C- h# x; e {$ G: _( @6 s$ v$ Y% z9 J
//整理背包, k, k/ E+ s* e. \' t
//////////////////////////////////////////////////////////////////////////
5 J# |7 Y, z0 O- Y5 S; |* V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. z9 g; o+ W3 w% F z( w+ }
//////////////////////////////////////////////////////////////////////////' g1 R: i+ I0 @7 O5 B
//////////////////////////////////////////////////////////////////////////
4 z( }$ z/ G; ]& o$ ~# ` CInventorySort* pInvSort = new CInventorySort;
) ~+ a; \# I# F+ o! o+ Q8 t vector <sItem> vItem;
. k+ g: h3 g _% [. E* l vItem.resize(MAX_INVENTORY);//初始化大小% R6 ]/ K3 i9 a) d: ?" f6 m1 a
//////////////////////////////////////////////////////////////////////////
. c2 [$ _9 F+ I% r, D) y. v //填充数据
1 q# N( r. b4 v/ q* ^0 ] for (int i=0;i<MAX_INVENTORY;i++)
, A. W' U$ p5 x4 v& V- {5 f {
/ }+ u$ g+ L1 l( s3 `( x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. B) H4 D, F4 w& o' H
if (!pItemElem)
: A A9 T6 R+ ]# T! ~; n { S8 Z$ y/ @3 R2 o5 T; ~
vItem.dwKind2 = 0xffffffff;
! Q, O) v- }/ I/ B! Z: Q vItem.dwItemId = 0xffffffff;
3 \$ [9 A( P- ?9 @ vItem.nIndex = i;8 o* M9 W1 P+ t( @5 t9 `
}else {7 q- g7 _6 c' R6 g0 F% B" s) E3 P
ItemProp* pProp = pItemElem->GetProp();' H7 a G) G* o3 \& ?' m+ d
vItem.dwKind2 = pProp->dwItemKind2;7 Q; O& ?+ ~5 E7 j& i: r
vItem.dwItemId = pItemElem->m_dwItemId;
) h% Y- I6 ^0 |7 {6 A0 } vItem.nIndex = i;
3 {) @& \! f* v% j+ `# ^6 t& \ }& s. g' u$ y, m& K) z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: {# i4 e+ g* c; g }3 j+ }& A& K9 b9 M4 h* t% W
//////////////////////////////////////////////////////////////////////////
9 H& l9 y: V1 K/ j& _" K8 n sort(vItem.begin(),vItem.end());//排序4 _! L, Y( V. i- n) U n9 x: J
//////////////////////////////////////////////////////////////////////////! Z( S* S9 u* h0 g2 }0 E
//交换) t! Q9 A( c/ v/ B/ l* } g4 I
for (size_t i=0;i<vItem.size();i++)
# c: X% `5 a: r1 E, j {
$ r) Q$ J7 C) C; C //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 [* |% Z8 e" P; N) ?
pInvSort->Add(vItem.nIndex);) S( U, X, @- @9 t
}
1 C* o* h( |7 U/ b) C B BYTE nDestPos = 0;
4 m. [& b) F, S for (int i=0;i<MAX_INVENTORY;i++)
: Y1 V. o. w; @% { {' b2 ~5 l+ l! K% x2 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 O5 G% U6 ~0 V- }
if (pItemElem)
# q* B5 J9 ^: C0 M7 N9 L- n { b6 |1 j) T+ [% K: z% R* `
if (IsUsingItem(pItemElem))
8 T" q3 g. z Z/ G$ u {1 `- |5 e4 r% Q9 r- }5 ^
//这个位置无法放
, J& c$ n; K) Q' J+ F- S7 g1 Y! Z/ Q. S nDestPos++;
4 `2 d5 }" s# _# _ }, b) J4 Y$ W" v0 D/ ^% W! l5 g
}* |3 c$ L, R" |; E6 z* I
BYTE nSrc = pInvSort->GetItemSrc(i);
; U# _' M U7 ?2 B. _6 T# @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# V5 l6 {# X5 T" s6 s if (pItemElem)
/ I% Y, J4 s4 \6 F1 |" I2 U {
1 k! w' t, p6 L( L* T8 o4 T if (IsUsingItem(pItemElem))/ a/ x/ b+ o3 P! N
{
4 p- P" ?4 s! Z //这个道具无法移动,跳过+ n, J; X6 D8 q# x/ s, o7 h
continue;
! Y, U# {# X, r: C }$ ~8 r5 |" D* A3 C* I- w/ _
}else{
/ W9 V t x C* t4 q+ E5 _ //空位置 不用动; A7 I* M/ e# ^1 c
continue;0 |1 B0 c8 L3 i, ] ]
}' w2 L- t/ }4 ?) u9 ~% N/ A% P
//////////////////////////////////////////////////////////////////////////$ n+ Z! _9 m8 F5 j0 B
//开始移动
: \ T9 U1 e- b8 }) p2 ? if (nSrc == nDestPos)9 y5 f) G4 B: |3 q L; O: G
{
/ g( ]# ~ s7 V8 P //原地不动
2 L* H0 l% S- M" q/ h/ D9 u nDestPos++;
7 j# _: f5 z3 z" \, ?; G! W$ R& o continue;
& j- E3 e3 ?: x/ W* g: a }
5 a/ x! f$ ?, ^ pInvSort->MoveItem(i,nDestPos);9 x5 L; Q' G, ^( ~8 J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& |# @+ P7 ?9 M- P0 ^* l
Sleep(5);
) U& g: ]) h) M //Error("移动 - %d->%d",nSrc,nDestPos);* F3 N. o1 \ K" T
nDestPos++;
& ^3 ^5 |: t; I7 x }+ ?/ m3 o. X* x* W2 r' Q/ m! S% g
//取第一个元素的信息
4 F3 L# a; \7 A! M$ R. v% E( r /*3 p% |5 t& h& J0 F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 I# r; B$ C9 k {4 x4 }$ G, c/ h( y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ ?1 j: |# N7 v" } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* N# s5 k# ?; F1 a, J2 C0 J }1 g }" Z0 V, T
*/
" s+ i- |, H/ f) {+ J/ A //////////////////////////////////////////////////////////////////////////
; w8 w& o5 p2 d3 ^, i b6 c break;
: X/ o; q/ m: V) y1 B }/ h9 t- q# e' I9 e
} , c$ g" _- s! F3 W( y
}
# K3 `$ e5 Z& ]2 S X( em_wndMenu.SetVisible(FALSE);
8 ?% u5 |/ B& p) D' e3 P
# n5 G; Q [! Q, P# a2 G4 p. D z; _--------------------------------------------------------------------------------------------------------
' X- R5 ~/ w' Z! D: `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) P' V( u% V" x v9 q; c; `
{
3 J( h1 x% a0 A+ }( ?BaseMouseCursor();
1 L% n3 |1 N( `' e, O4 b}
: M3 y. r& d& l+ D在其下添加:
8 C ~0 ^( S* u3 m. M4 Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); o% I; C) _9 Z5 D
{) G" o, }! o# F
m_wndMenu.DeleteAllMenu();
! [; `/ u) }: G$ q1 Y _- v. @( a% Y; |m_wndMenu.CreateMenu(this);
0 _7 \7 w) L Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); d% A$ W: f3 g$ T( e
8 V8 a3 q; A/ s* pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# C. F% n! N; m1 G: ~4 \{/ W+ N8 ^% w. g( W! y
//P以上级别才可以删除所有道具
4 o' T' g! @) m9 V- R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ` G# i6 C3 t o" z4 n
}
' D/ |: Z! }' e. j8 V2 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( \' }$ t$ T' B4 C2 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ K/ Y/ W; G3 F/ `. F: |m_wndMenu.SetFocus();
, [! d0 W8 [' m+ k2 c- e- o: \}! f, t+ k# s6 {
------------------------------------------------------------------------------------------------------------
. G' o; |4 J6 \4 \3 E5 a! n*************************
' |( s& Z5 b8 h0 IWndField.h文件2 B5 Z6 d! ^; _/ h% o
*************************
* D- `. ^: N- T. \1 Y& q搜索:BOOL m_bReport;
3 J& ]. h5 p1 r其后添加:
+ b2 i1 S9 c" cCWndMenu m_wndMenu;
) g' O; ~" s$ n( F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 q+ V6 m/ u' S, t/ ?其后添加:
. s- S# g6 E6 o$ R' m! O. I5 E0 Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 Z! ^+ Q0 t4 i
) R; ?0 C2 _9 z1 H! j& ?6 x3 M k& u/ i8 x- p5 d# @' x
|
|