|
|
源文件中_Interface文件夹下WndField.cpp文件0 G) ?- x! ~* E' A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# q9 z% N' `6 j
- P( g& l, d9 u- Z( \struct sItem( ?' x1 G* Z4 d/ Z" e
{+ J' V2 _, V# `$ a4 ` o3 w
DWORD dwId;
# M/ K: e5 f7 j1 p# r% _2 @DWORD dwKind2;
) c: M. G5 { V) j2 GDWORD dwItemId;. W9 ~( _8 R+ B2 }- `" p' M
BYTE nIndex;7 J6 R2 K# \* c8 U$ A+ h3 i
sItem(){
# ~% O# w$ D* u9 w* C dwId = dwKind2 = dwItemId = nIndex = 0;
# V4 c* b. o' J& f5 X3 ^}
. J+ o( }& L* ]. Dbool operator < (const sItem p2)
( L7 r. f( O9 j, R' n; x{: P# B: x+ @# \8 @& Z
if (dwKind2 == p2.dwKind2). G% Y+ L4 n0 C( g* E' h
{9 W' R+ k% P! j- }! p% _
return dwItemId < p2.dwItemId;
9 h" W" O2 ^6 k- e }else{) i+ C+ U" B3 ~7 s& e
return dwKind2 < p2.dwKind2;5 [8 E; `0 z" v! f: b% E1 Y" O
}
1 {, L* ?+ R* R4 U, p3 R: k* T7 O}% r" b' K; I2 I1 _3 d' v
};3 V l1 c# ~/ N
class CInventorySort$ v& h1 z" G4 t, K# S+ G9 {
{, i& r* y2 k0 @1 Z( A
public:( f$ S4 b; R- i/ h+ k$ E. b
CInventorySort()0 p6 @6 c* Q% f7 ^% |1 J. \$ v
{
; s) {9 _& n5 p5 e m_dwPos = 0;
& O4 R3 J. g: T$ S8 V6 F# B8 s}
' \& s3 R+ w5 F9 V' j~CInventorySort(){}
# g7 L2 |8 N; v: [7 nprivate:
( y& `! V# A. M& \! m7 [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 c7 ^/ y- d4 t
DWORD m_dwPos;% p$ o4 e; Z4 C9 t
public:
# }. j8 j8 j5 U8 @8 a* Rvoid Add(BYTE nIndex)
2 ^ ^; p% ~1 f, s+ R) f! p2 h- x{. C8 m" u; C& N' N1 s
if (m_dwPos >= MAX_INVENTORY): M3 R1 _# J- V+ s* x
{ j5 ]# Y5 `' J: z+ c. @3 W
return;
) Q' K) S3 ]+ o d _. s0 l$ O( m }
4 l3 ^( V( Z2 n, C, u m_Item[m_dwPos].nIndex = nIndex;
4 A) v$ F% X" N) ~8 H$ S1 p m_Item[m_dwPos].dwId = m_dwPos;
- V6 v4 e) w( Z" i2 ^ m_dwPos++;
4 N& W: {: S ~8 _}
- l6 Q& H: h$ [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) O9 m5 `- m2 |: c6 B# s- p! G% H
{; X: P% z& v' s$ o- |; ?) k
for (int i=0;i<MAX_INVENTORY;i++)3 T1 O# b0 D8 J3 N/ M+ B5 E/ x
{
9 [6 |6 f1 A- e" e* m2 K6 O if (m_Item.dwId == dwId)
! {$ j9 V$ l+ g. k1 C2 k7 y {8 {7 l7 ~0 g$ x7 k8 L6 D$ h
return m_Item.nIndex;$ k: B2 E+ D0 d9 N1 \$ v
}: _. x& i& W9 i) u( z9 i3 R
}
) }0 ]. ]. A: q: U8 M return 255;! E3 H0 N; ]- X7 R7 a
}# @$ A4 D K" c2 h1 Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 P% L0 d. t8 e4 ~# |7 T
{3 a/ m3 Q* d5 z- s
BYTE nTmp = 0;
& b& D" m6 }7 W3 ~6 Y ?6 _2 x bool bDest = false,bSrc = false;: I: G7 D. `0 d& Y8 }
for (int i=0;i<MAX_INVENTORY;i++)
: O% T; X5 ^6 u& w {$ J0 K4 l! F" l! c2 m# ]
if (dwSrcId == m_Item.dwId)& L0 G8 r: [. U0 s
{) K+ x# q9 v3 V! Z) T; C: U$ Y" _
//id相等 则 改变对应的dest和src! |6 X# A- [& n6 @5 |7 A& J
nTmp = m_Item.nIndex;
i( `. ~' i) e9 z5 j0 s2 y m_Item.nIndex = dest;
6 ]6 d# e. G2 A9 E# r% C }
! l9 ^* L9 w! x) F. T! w: C8 y }
; P6 b* n2 f A8 k) L( K //临时数据保存完毕,交换开始
% k0 D: u" F/ W+ D, A/ @- W$ e for (int i=0;i<MAX_INVENTORY;i++)
. R5 U6 l( D4 L4 [" r. x; B {
/ Q& @4 U/ M, r3 q" {& P if (dest == m_Item.nIndex)% r) m0 E4 ^' r$ h6 ]4 r
{/ h2 W0 f) d/ o7 u/ }' y
//id相等 则 改变对应的dest和src* O5 q; i' N% p7 D% Y) n
m_Item.nIndex = nTmp;7 v0 d- p/ w$ y3 [' O+ t2 g4 \
}
[% d- J+ b# t: o: Q1 b2 X }
: M: K) }& K* M% R! [7 j; `/ B! V}
5 b7 y, y$ B& r' U8 b! B};
* L i% i, N# N. [8 F4 M-------------------------------------------------------------------------$ N3 o( s0 @- }& u- q9 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ B( W4 F7 O4 ?% e" l$ O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* z# A& e0 L8 ?; `) O- m K
紧靠其上添加:8 |. p2 p7 ~% d% L
if( pWndBase == &m_wndMenu )
" `: A% G$ v' J( P: R' P' n{
1 G6 o5 }1 `) I switch( nID )5 w1 C2 [6 {' X( ^9 d3 L
{
' e, D; p# f$ s: _$ n case 2:- c! l! J- E& i u* t' E" w
{& ?5 U. G% ?1 }& U! g( h& j0 n. T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) u2 q3 P$ G+ g9 \+ ~8 w3 ? if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% M5 }% G S% G x% r
{; i! d" J2 Q1 q$ \" M* l8 U! [/ C
break;5 D( D' N6 A4 J+ z
}* }8 }* d: }" _7 a6 Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ R& H+ I" f+ e" R2 m9 d {
3 n3 U- E: C2 y3 V8 T& Q5 {5 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! y v# l1 }4 G& Z: U if( !pItemElem )
+ G, A" k2 k# S! g3 M, U$ I continue;. T0 H1 Y7 W o$ `
if(pItemElem->GetExtra() > 0)
: h4 {! D- B8 @. X% w. x continue;
$ @1 l& ` ?2 a" g0 _/ r if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: H; ?7 I% `: W2 P4 B+ k continue;1 H1 {5 ?4 i7 u, h( m
if( g_pPlayer->IsUsing( pItemElem ) )8 u6 w/ W1 p/ Y X/ h
continue;+ f- e* y3 E. ~" t- _
if( pItemElem->IsUndestructable() == TRUE )
- q2 d* J ~* f7 k0 w6 ?: z6 Y {2 P" [6 F) e% K; j9 W
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 c1 v0 A1 U R6 D3 g0 p. p" e
continue;
- d* @ S) \* a+ q" b' e }. A% ~4 h' Z9 L8 M( {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 W4 }4 x4 Z8 A( m }
4 _6 ?* g$ m, j break;% o9 U" Q( D/ k
}
3 f$ `8 }* t7 f% }2 F ^ case 1:
+ }& y/ _7 ^6 V { @' R, ^" p) `+ j7 Y8 L
//整理背包 l# ^: s7 V: q+ U' h1 D
//////////////////////////////////////////////////////////////////////////7 S2 ]% S) ^* z# Q+ j1 T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 {. y D# ~% F5 s4 d //////////////////////////////////////////////////////////////////////////$ n8 ]# E% ^+ \2 m5 z1 n
//////////////////////////////////////////////////////////////////////////
$ y3 C q% L8 J1 v0 c" K( ? CInventorySort* pInvSort = new CInventorySort;1 ~; O$ K: X! T5 a G
vector <sItem> vItem;
+ s5 M9 p: ^6 w" w vItem.resize(MAX_INVENTORY);//初始化大小; E% J! |# m; W M
//////////////////////////////////////////////////////////////////////////- S) R# l9 y( W& H6 L
//填充数据) K- t+ {( l$ m% W6 d, Z
for (int i=0;i<MAX_INVENTORY;i++)& A7 H# D- b$ }
{. j G' v; H1 ?' v0 _' ~. T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); i% Z; x7 y7 P( @- }. r
if (!pItemElem)
- {) `9 d* w0 c; j' x {' j6 R, Y9 i- {& l2 j8 r
vItem.dwKind2 = 0xffffffff;! c' Y: p$ a* A, G
vItem.dwItemId = 0xffffffff;( L6 R$ Y/ X0 E5 `) f* n% H ^
vItem.nIndex = i;3 Y9 X1 Y# E8 M
}else {
, f1 _( g. S1 F4 U* @ ItemProp* pProp = pItemElem->GetProp(); N8 d& e1 `2 l3 R
vItem.dwKind2 = pProp->dwItemKind2;- ?: w3 [9 [- z' ?
vItem.dwItemId = pItemElem->m_dwItemId;: ]* w6 @" {; ^' h' v. K
vItem.nIndex = i;
& @% j( |' `: X4 V* k }
7 r6 ~8 z C' A6 ^, ]! q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# w3 T4 ^( e* X6 ~+ x _/ J6 z& S }
. P! z) N; W- _1 ?. T$ @ //////////////////////////////////////////////////////////////////////////
2 F @- B( n2 _) n% h( F sort(vItem.begin(),vItem.end());//排序8 i5 p# v W# _* j
//////////////////////////////////////////////////////////////////////////
5 w- Y3 i% H% z" b P //交换/ k( k9 `) w, k$ Y. \% D
for (size_t i=0;i<vItem.size();i++)* q$ j7 Y! Y. d- M" |2 J1 ] E
{
1 Y- S: M' I. r4 r$ r+ D" _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- ~6 _# c A( C; n pInvSort->Add(vItem.nIndex);
9 V7 q6 O9 V' W+ Z& ~/ w* i }
2 ?# v% X/ W, V$ d. E) ~ BYTE nDestPos = 0;
9 p5 }- K" ]+ b4 a* @ for (int i=0;i<MAX_INVENTORY;i++)4 v1 q3 q8 Y8 s1 N) F8 j
{
5 @, Z6 s+ w" Z4 a2 w+ b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 m! y# q' H% W* B0 `% F if (pItemElem)
& Y1 x/ [# e, E1 B) y2 L/ F {$ ]" l- j' q4 O+ g7 C: ~0 n9 o( [
if (IsUsingItem(pItemElem)). b& Z! L6 p( K7 Q0 Y0 x) Z1 s
{1 `# z5 @5 e. _. ?3 B5 N
//这个位置无法放
7 _8 ^' D9 G. M2 M- r1 E nDestPos++;
3 `) _ b" B+ r8 O) C c }
' D* D' W! o8 X$ o }
/ x( d. V2 ?$ m. c4 ? BYTE nSrc = pInvSort->GetItemSrc(i);
8 C0 f ^' j; E; o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; `5 [6 p7 A* ] F( P if (pItemElem)! I8 Y8 C3 S# T
{
s* G6 Q8 L/ ?& Q/ G6 b( Z if (IsUsingItem(pItemElem))
8 L, K+ q# j& P8 ]$ a4 U {+ y* i/ d {' d) W6 b
//这个道具无法移动,跳过1 O9 R& z+ ~; K' h$ V, }
continue;5 U( p. c1 ]9 C# q, t
}
* n4 h1 Z( ]: V0 r2 w% E }else{
8 K' I3 s ~- a c3 K //空位置 不用动
: _3 J. Q9 A6 _& |9 i$ j continue;
# ]) P% T: g1 O- ~ }
7 ~2 e4 R$ ?% w; U. s( j3 [ //////////////////////////////////////////////////////////////////////////6 k7 O& u. B2 ?( a f$ v2 @4 Q% i, w
//开始移动$ e8 k! v: m* j: I& [: r
if (nSrc == nDestPos)
" z9 v7 ~$ A( w: S- z3 o6 K3 D {
; |# R/ j: _9 U0 @. f: B, N! ? //原地不动
. l, z: K4 a3 k& Q; ^ nDestPos++;
. D8 h* h8 L" K. v' {5 [% W- \& S continue;
5 A% c/ c+ d- { l& V$ X( E) { }
8 g( ?5 H+ P! \% [. l* h pInvSort->MoveItem(i,nDestPos);2 J3 j. C1 |5 C; `" G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 \5 K1 y2 k& b0 @0 G/ h, j Sleep(5);% b/ B$ a: s, ?4 {
//Error("移动 - %d->%d",nSrc,nDestPos);
# {% V6 B3 T$ c/ Y M. a nDestPos++;! R0 p# D& B0 C: E
}
! `9 q- z% k( v0 l* }& d! ~% O+ N //取第一个元素的信息+ [% [/ J5 \7 D. Y# g
/*' L( t d: ~+ j2 Q0 N; c
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' \, D$ y* V7 M6 t/ y+ @, v+ N {
$ l' u; l1 H! ~0 Y: E% x; P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 L6 U" X F4 s; O; a6 M% S, d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* c2 `' Q- \0 Q& d
}4 |7 J" F8 p8 f, J9 {% i+ K
*/
8 x S2 U# q* P; T' H: z# L, H //////////////////////////////////////////////////////////////////////////
( B( V( t; }: e1 P% K5 x; m, f break;
6 n3 J$ U: B% D# A% \2 b- i }% Z* \ r0 E9 B8 f" z3 z
} - O: O' x. x, h; F- ~5 w N
}
, L" S' J& e: ?- x, x% Xm_wndMenu.SetVisible(FALSE);$ p" e% S# N! V# _% w
8 E- ~4 X2 P6 q" D; l [--------------------------------------------------------------------------------------------------------: W, f( z7 l. I5 [8 n" h- G1 t; l
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( N: Y6 P$ l2 \+ B7 U$ S{& O# y: j& M( T, [2 w$ I
BaseMouseCursor();' P- ]- d8 h( h7 n x% ~
}5 q* H% P% N# G- z6 l3 P
在其下添加:& y6 `( b& ]- B& p; t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' D$ |3 {* @& n8 y; {4 s1 z{
3 x1 a5 t3 d1 ?" ?$ ?! x. ~m_wndMenu.DeleteAllMenu();
$ p+ t, x+ ^1 |m_wndMenu.CreateMenu(this);) U0 A2 | J$ O1 c1 C1 k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 j: u* v& L" n, v% }0 ~% `; e" u1 N( E, |; h# l S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, L- ~! U6 Z" F Y{: B4 a+ M% Q0 i7 [, F& q
//P以上级别才可以删除所有道具: T3 C2 F5 g+ W! V
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; }* ^; X+ C* D' n: G3 J
}
! i# i" P) L0 g4 h9 B, Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% K' }, g% I7 P) D4 m! am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* O" T" \) O# G: s2 Q& X
m_wndMenu.SetFocus();
. E; R. V `9 G# G# B; K}
1 R, y9 O, C u------------------------------------------------------------------------------------------------------------
. m: w; J" u+ s5 T5 ~$ f! h*************************
. m2 T9 \ p- \- `WndField.h文件; K- @+ C# N! P: v
*************************
( A& Z: m( U5 F; h O, y9 _* ^" y搜索:BOOL m_bReport;
& u. [, S- f' B' U! Y其后添加:
3 w( m' b5 J2 f; ^; G5 jCWndMenu m_wndMenu;* R, l+ m! h5 q7 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 i* F$ X/ E0 j, {2 m3 V其后添加:
M. v e4 X. m Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);$ b& R4 q ?# K. B+ b+ V
- d) L# @8 p* W0 S# V$ D
% N4 E3 _0 d# ~) y. U
|
|