|
|
源文件中_Interface文件夹下WndField.cpp文件, q7 o* e4 {. @2 s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 E% E# G) i8 B$ `) y
" F( L7 k. [* I9 [9 x* _% jstruct sItem
& l% T: u, j. i{
* b- U7 ~; @* P9 N. {9 n2 qDWORD dwId;- e" P, ?5 b2 [) b: a( f
DWORD dwKind2;
! B% t5 T- t9 U$ u5 Q2 TDWORD dwItemId;5 Z/ S* Y* f+ h$ Q4 t) e- E
BYTE nIndex;
8 v7 ]$ F% `. e; S3 V) XsItem(){4 G7 |& P& Z6 h+ p# }! h- ~# l' w% }
dwId = dwKind2 = dwItemId = nIndex = 0;' ^) }3 G( o% M/ U
}0 B: W/ @, b! ?! d. u
bool operator < (const sItem p2)
3 \+ @, o, y7 S6 f& t/ J" y+ d{
) O: J4 P0 `; B5 [) r% g if (dwKind2 == p2.dwKind2)% ]3 f0 Y, a6 d& w$ a/ x6 D
{; M( |& G. ^' [8 n
return dwItemId < p2.dwItemId;3 z- l2 ?1 K" l# l5 F% u: m
}else{; T7 a3 U% l1 L
return dwKind2 < p2.dwKind2;$ a: a" T) N* t; F& C
}
; @3 O8 M% J3 u! N}
0 b6 [+ f, [7 e" d' w! [};; p+ N3 s3 ~, f1 R
class CInventorySort
1 x) [, R: q5 q$ l{: O8 X8 N3 y$ k$ }2 ~, ^. w( h
public:
: v: F" m; U: n% [CInventorySort() _+ H2 X% x% u2 k5 D7 f B
{
/ o& r+ V6 i0 |, w+ m7 c; D m_dwPos = 0;4 }- b: h2 X' Z) z2 _5 b( J$ p& T. N7 g
}
1 D% ]$ U& D1 n' V }# K~CInventorySort(){}
' W3 x+ H D C' o1 A) W- a; x" ?: sprivate:& l* f5 ]( z4 _. u. G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% t$ `9 r% t5 q. s RDWORD m_dwPos;/ Q& Q+ A: M- B
public:% h" t5 b5 y0 a7 A6 q* D
void Add(BYTE nIndex)
" @/ ]0 v N) B4 F9 R E' l{
9 [3 a3 C3 N V/ s if (m_dwPos >= MAX_INVENTORY)! ^' s: V9 V1 r G% A
{5 h! S# B% M, F& B9 P# p
return;" t% M6 c& y& r' _
}( u7 r s; D& B
m_Item[m_dwPos].nIndex = nIndex;
9 d* Z; `: \' Y* P3 R1 G) @) S m_Item[m_dwPos].dwId = m_dwPos;
, ~+ p( W! \* n4 u7 o m_dwPos++;( y; ]- m! Y3 k. N% f: F# h
}
& s: m: i% H) u8 \) mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 B: W' K" j( N{1 K5 O y5 @8 a( f5 ^
for (int i=0;i<MAX_INVENTORY;i++)" g: t' L1 l; B/ ?; ?- K3 m. g( u7 M
{
* L" `! z4 N; T if (m_Item.dwId == dwId)# Y" S B# |, o1 ]
{, l! A' l% {& U8 e2 U( s4 V& A# E8 B/ C
return m_Item.nIndex;/ a4 w! E( J8 B% |9 K- N
}& n9 M( `$ D3 Q$ y
}0 Y3 @1 R# x8 C/ l2 m: g
return 255;6 }/ R4 R" O8 c
}( T+ F) j7 ]& Y! w ~1 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
l7 J. k! K# }# P8 Q% G$ P+ g7 N{6 ~, a( Y5 e$ b+ _! d# v8 U8 z. k# A
BYTE nTmp = 0;
5 G q2 Q2 x3 J: K bool bDest = false,bSrc = false;! \ G) b2 a" a: n: P, v
for (int i=0;i<MAX_INVENTORY;i++). n) {$ h$ Q( B3 F
{5 `$ }6 p0 I( w( S0 a
if (dwSrcId == m_Item.dwId)& V2 |! z3 S# ]4 `% h. _8 m
{. I1 n; J, Y3 u, O6 h: @" v+ d
//id相等 则 改变对应的dest和src
4 C, O8 g+ k, Y; o) b; b nTmp = m_Item.nIndex;
- Y2 F: `0 }1 W! P, E" Z m_Item.nIndex = dest;/ J/ R. O; \1 s% }. g+ g3 @' g
}
) V7 _: Z$ \, g$ x4 g( L }4 a% O& n; }( f/ u- d# p+ F
//临时数据保存完毕,交换开始& N' \7 }% i$ ]
for (int i=0;i<MAX_INVENTORY;i++)1 Y; s( r! F, h3 f6 K' i! {& ?
{1 j0 f; s0 T+ ]
if (dest == m_Item.nIndex)
8 O+ _& J$ `2 L7 t! a! c- g {; F. Z( [( q1 ]4 _ P
//id相等 则 改变对应的dest和src# m. g: } |6 Z1 n# B; Q
m_Item.nIndex = nTmp;" [/ T) |; w2 t, V, o( y7 r9 S4 h
}
4 E6 I4 D" K% E; g }" h, q$ Z r. x7 b4 |+ V" N
}
% ^2 y- U, t- W. s- I* Z, U! z};
& r Y' j7 r1 o# d-------------------------------------------------------------------------, A2 C& q0 g) ~1 E4 C! [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 m A; P- G2 |& x/ v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 j" l2 A* p9 L. D- z
紧靠其上添加: d1 J, [9 d6 v0 w
if( pWndBase == &m_wndMenu )8 e" b+ p( ^, `$ o: h
{5 n$ T/ H B9 R
switch( nID )
7 G$ Z) h& Y* L1 X* h c {' x( ^2 ~5 X8 Z8 D, G! z) z
case 2:4 z( { j- o( ?6 ?9 W
{ G f; O* g, E; x' a( Y$ t* J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 ]" o* ` ]! J4 t. l: Z5 p# w, y4 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Y0 f5 `/ r) x" }
{
! |/ g5 u) L( M) W break;
: a1 ?* J8 x8 b }3 k7 ?- `- u$ m" F# s C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 o% T4 `; F% V9 }( U1 o {
: L4 r5 [, b2 F' I" F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" l% A0 x- j# }8 i8 w8 w1 a! y if( !pItemElem )
% c3 c% u5 W2 i& b; K' w# k$ q continue; B5 d* h7 F" K4 F1 U" O
if(pItemElem->GetExtra() > 0)
' l( v+ g) N5 g0 w continue;6 Y/ J# I" J' S; ^
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 {% i1 g+ s+ A
continue;3 p, I9 c8 e6 M& t; ~/ V& a
if( g_pPlayer->IsUsing( pItemElem ) ). m# g! O7 o( Q/ O q
continue;2 m! e' V4 N8 H" y) V: n/ v
if( pItemElem->IsUndestructable() == TRUE )
/ _ p* D; c% C9 g0 S {- C0 g' m* w8 |$ U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 e' w! }* y* z, g continue;$ B% i- d* r. L8 L" P5 {( n+ g
}
3 Y8 ^3 i; E" i- N1 K/ _9 G- W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 O, U+ Z! {/ _0 a! g5 a
}
' }% o! A( S3 c4 c break;8 A2 ^$ k" h0 [& \% ~9 {
}
) g9 t; V1 |) e$ o2 l1 _$ F/ h case 1:
2 _$ t" P b6 j& M {
! {: c% e) r6 @ //整理背包1 _ \! L" ^& Y! P9 ]& ?
//////////////////////////////////////////////////////////////////////////
5 \- o. y1 X x6 J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# J6 N& W0 G+ g9 s, m$ D: N ////////////////////////////////////////////////////////////////////////// J5 b5 _& X$ Y; N4 {- b& H
//////////////////////////////////////////////////////////////////////////
. m2 L7 z! L. o6 Y% @3 m/ q6 @+ e CInventorySort* pInvSort = new CInventorySort;
' u) V$ B5 P) L2 t9 E" i vector <sItem> vItem;6 i) ?1 c0 D, n {" `. R: O
vItem.resize(MAX_INVENTORY);//初始化大小
3 n) @5 k! y" Q; a i" ^ //////////////////////////////////////////////////////////////////////////- D# X% \# {" P5 K- g
//填充数据1 F- G+ x3 `5 }( M G
for (int i=0;i<MAX_INVENTORY;i++)
" d$ U1 ^3 i4 A5 ]; O. D9 U K {
) ~' H! w: E3 f: G% j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 v7 V# ?5 X4 c5 Z7 a) K if (!pItemElem)& w8 y6 d, w) G0 l6 E* d# W2 Y; s
{# z0 ~1 E2 k2 ]& m2 d
vItem.dwKind2 = 0xffffffff;
/ L/ k* d7 N9 I( E2 P vItem.dwItemId = 0xffffffff;
0 z4 V- d( `- g2 _$ w1 r vItem.nIndex = i;
* n! j) l# C# C$ c$ S+ q }else {
8 `7 g; S' t5 j3 \3 V/ ~/ o8 ^ ItemProp* pProp = pItemElem->GetProp();; `2 J: t( ?( ~# N6 l
vItem.dwKind2 = pProp->dwItemKind2;+ Z+ C* q0 P$ s
vItem.dwItemId = pItemElem->m_dwItemId;
0 ], L/ B8 k2 h( Y vItem.nIndex = i;
+ C# X! ~1 e5 J! H5 k3 W" S" Q+ u: K1 n }
- T# F7 V- T3 u4 f# y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 c m, ]+ p+ f) |6 i
}- ?2 u2 ^- ?; l! M3 C
//////////////////////////////////////////////////////////////////////////& L2 Q0 B$ p) G, \6 I
sort(vItem.begin(),vItem.end());//排序, p: A Y) l# O! O6 ?2 W4 d
//////////////////////////////////////////////////////////////////////////
4 @, \1 I) E& P //交换
+ C* R o% r8 K% l8 P [ for (size_t i=0;i<vItem.size();i++)1 w- f" \- ^! m6 o9 W3 N; M2 H
{
) g ~2 b0 D+ x8 |( E7 w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. v$ }; ]: |7 e2 B
pInvSort->Add(vItem.nIndex);
' X6 T. {' Y: ?% z: M; M6 I }
$ b' q5 }& N& m) `" R& L1 _/ F. f BYTE nDestPos = 0;
, ^5 @ c8 D! g for (int i=0;i<MAX_INVENTORY;i++)
! z+ z ~+ B- B {+ M4 \+ w6 Z4 B4 T( t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" }. w x/ d, { if (pItemElem)
( u: M( b9 R$ B4 K2 A" b( X( J, ^: d {
2 F E9 u# X" j) x5 t3 } ` if (IsUsingItem(pItemElem))
Z8 _4 {/ @5 r7 h) k; Q {
6 Z4 F" l0 T3 B7 z v X/ J //这个位置无法放
' A# ?# S9 u% k4 T' q! } nDestPos++;
5 }' \. m* B5 ]; q: U }! _* @- D% }# I4 c* O" a
}
c1 R4 D4 a- z$ A; E BYTE nSrc = pInvSort->GetItemSrc(i);5 O3 L& o6 X/ e: b9 a( @$ n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ ], O8 n8 s/ Y/ f% J6 ?
if (pItemElem)/ }8 V2 P8 b+ O, x7 S
{2 ]; d: b: k5 g: t% Y
if (IsUsingItem(pItemElem))* G; W$ @+ m- O6 [5 X' T
{
+ U& b' G. ~' B //这个道具无法移动,跳过3 T/ h2 ?1 Y3 s4 p# j) ^5 i
continue;
3 j' e8 X" t2 z }
3 e1 @# X# p$ p1 o }else{ a7 [( k+ \6 O5 {, G. ^! H B0 Q
//空位置 不用动: n/ L4 h! q9 K1 x) v
continue;
4 g* n8 j0 G1 x4 J; O: C/ }& f1 N }" N/ {: G( `' V. e7 K
//////////////////////////////////////////////////////////////////////////
$ f$ j8 T1 d* O! O //开始移动; Q9 ^3 C% k! q: v
if (nSrc == nDestPos)
+ ^8 n7 G7 Q5 Z# X {7 l5 Y/ n$ N) b- s6 Y* l
//原地不动
- S3 Z5 _: C0 y# h4 G* C nDestPos++;; c) M& V* W% _( ^1 f0 m3 D) I
continue;% w* n% s7 j) r
}
1 s @. t4 c. |6 D: n) ?% K8 T pInvSort->MoveItem(i,nDestPos);
7 r; D( y# o1 D7 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ \2 v% V: `0 P
Sleep(5);
3 ^3 q$ [0 G! u //Error("移动 - %d->%d",nSrc,nDestPos);% E, o1 e1 C0 m+ {! G+ Y
nDestPos++; M/ W# j" s$ @9 l
}% _9 I* w5 P' ?% X2 r( Z8 g
//取第一个元素的信息) |$ x9 a+ W. H, q& V/ K4 w
/*0 i6 x$ X) a" L
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* c, k+ B+ Y- y6 @* S% x3 Q {
3 Y; N9 F9 Y6 Y) r9 Q! s/ \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) ]% w/ v4 l( Y" h, a3 h. k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 P, U6 Z/ r2 {- y }8 P; c% }% [( l% g
*/
! z5 C5 g, R' Y //////////////////////////////////////////////////////////////////////////
' X1 o) l4 w {/ s break;6 j5 g# N% Q8 U+ d, M
}) }" }! v. z( y2 k0 Y: f
} # E {+ y& Z! H J V* T$ B
}
# s1 s! @% \. _% H$ Dm_wndMenu.SetVisible(FALSE);3 E& p/ N: y! `+ V$ x' H
- h1 T$ k- f# p8 K; Z3 y--------------------------------------------------------------------------------------------------------
( J. [. n8 P+ C! [# n; h u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% \/ c0 l. ~, c
{
" m5 X* t" C" M) D5 s8 OBaseMouseCursor();
) o- m4 }0 [ E3 ^}
* P4 K/ k( N8 `% \在其下添加:* f" c6 \: h d# g8 U- W |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 j+ P4 e3 s/ V& C# T: x
{( y' r7 t8 i& ?/ |. _8 s2 y
m_wndMenu.DeleteAllMenu();5 K4 j, i& X9 z( n* p r
m_wndMenu.CreateMenu(this);; T4 r/ `9 e4 u* j/ w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 [ [ P* \, y. \
. T+ V; o' E/ u) m; S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" |- ^3 R) `% D h0 s{3 T) {4 _ n; b) Z3 W# y; w
//P以上级别才可以删除所有道具) }) c4 ~. d+ G6 l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( u, f$ p% m4 d* g1 X A0 H+ A}
4 _# V e: r5 U s$ e3 h" t5 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* Q/ q5 J& }* p4 s6 M! a5 I" om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 c) `2 _* z5 l9 ?* T
m_wndMenu.SetFocus();
" Q7 m! G2 G2 Y% e3 d) e3 u}1 ]% E3 i- n: m! q1 w; _3 I0 Z
------------------------------------------------------------------------------------------------------------
0 H0 `# G. f" W0 M: O1 L*************************. n. A* _( y1 @' q1 A
WndField.h文件
& V2 B, J6 r) X* ]*************************$ B% p- k- x/ g* z( u5 ]
搜索:BOOL m_bReport;" d3 i8 h) Z7 Y" z5 A1 @
其后添加:# O; \' j; I+ i8 J
CWndMenu m_wndMenu;
+ ~7 q) G( Z* X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
m" _3 c2 h* I/ g$ v5 Q/ Z' y ?其后添加:
: k6 \7 W: v. a" F& V/ Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);' T0 C( Y5 l$ @, q( r5 M
' a# L( [ D7 q" @9 q w/ T' e" _/ ^- D3 q" Y( Z9 Y
|
|