|
源文件中_Interface文件夹下WndField.cpp文件
& h6 U: E) r8 w+ o# W& d/ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. g4 O/ Z' p$ g. B/ s) M+ r1 Y, `2 q, h; v. b( x8 Z
struct sItem* c5 u& F4 u1 {- J/ t/ [2 u
{
. ?; i1 j% D q3 JDWORD dwId;' q" y8 X% s( M" L
DWORD dwKind2;$ M J' z) j$ u6 u8 I
DWORD dwItemId;
4 C% x" W1 K6 u) m& p9 T V0 ^7 S! x# XBYTE nIndex;
0 {; D7 Z4 T' DsItem(){! c/ M- C4 T5 E5 n( @4 s6 n4 p
dwId = dwKind2 = dwItemId = nIndex = 0;
7 n$ t: U) m* Y t}! U o( M6 J) I$ C- ~* X5 ^
bool operator < (const sItem p2)* \. Z) r( j# t" P! C
{
/ V1 T6 Y+ ?( u: O( k4 e; H if (dwKind2 == p2.dwKind2)
1 \7 c# u( @$ S9 i8 l( \ {1 d+ S2 F* M6 V7 ]1 E7 ?
return dwItemId < p2.dwItemId;
4 N1 A- Q$ p$ T7 E+ P% l9 D; U }else{
% p6 n$ E+ K$ p1 u return dwKind2 < p2.dwKind2;' n# v( ?: y% p; a
}
9 c: y! \) W G0 [5 `: E}
z! m# p1 r; q" n3 \% m+ F};
$ N5 n4 W- [, iclass CInventorySort" B, _, ]: ]9 H5 [; q; T, }
{* y$ ~9 Z5 {$ |1 q, t
public:, X- v8 w) O0 A( s
CInventorySort()& Z. m. `: C" H: i
{
* z# c6 T! }( Z0 z. p; t3 r) ]1 K m_dwPos = 0;
7 n3 [+ n# P6 O* d- ^ e4 E}/ ^, i% e1 [( [* e% y# O; d4 o
~CInventorySort(){}1 x# g$ @- N" E0 k
private:) d* l6 ^& p: z) G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 |7 V y7 {7 ?$ E: ?% ^$ I1 Y
DWORD m_dwPos;
9 n% y& W0 S' I i% \) d' jpublic:
) y4 D1 ]! m; p3 T" Kvoid Add(BYTE nIndex)
7 |. {# x/ {8 M" b{
8 y) m0 D- z: @' N- U! g Z if (m_dwPos >= MAX_INVENTORY)
6 e. F- H5 d V3 A9 e$ v; c {* `; S+ U6 _" u$ H
return;
# v' g! t* k8 b8 Y8 D# G/ a }1 S: L" E8 ?: z$ v) U* x
m_Item[m_dwPos].nIndex = nIndex;
0 T* T# R9 E; p3 A1 r; } m_Item[m_dwPos].dwId = m_dwPos;
c1 K. X& q. g4 N- S5 O8 v" F& Z# y m_dwPos++;
' o& h d! C1 A* }: w- Q2 K$ p}6 @# H) V& A7 k! c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, o1 I# Y1 ]2 C/ x! g
{
4 w$ r1 R6 c: a' h$ ^1 K' K for (int i=0;i<MAX_INVENTORY;i++)( e9 C- T7 }2 x
{1 L4 u3 j; i' X# Q' v& I5 m" r
if (m_Item.dwId == dwId)
4 ~% @; y; t6 N3 j! ? M {
T9 X* ?8 i" E& S2 ]8 y, h return m_Item.nIndex;% I/ ?& M4 h, j9 E6 K# O
}
# S# L( K7 v) N$ D$ f8 T }
) Z% Q2 U& @3 K/ O$ b. U return 255;! L- ~# b- P5 _4 V6 {0 {
}
2 w$ e0 R& Q5 ?- p3 ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* L6 T( h0 x6 _4 V0 q$ y{; \! b7 C+ V, A+ ~9 G: M' m
BYTE nTmp = 0;7 ?. Z$ P7 C$ C) i% ^, E
bool bDest = false,bSrc = false;
5 G1 X9 S- p6 }2 Y3 W for (int i=0;i<MAX_INVENTORY;i++)" p+ p) b. F, X: F& R! }& p+ t6 y% I$ H
{
% Z) i& ]' P: {2 {% B6 F5 X if (dwSrcId == m_Item.dwId). V) U1 y2 |. g# X/ _3 S- k# E
{: b9 F. G8 h% f0 Z; d
//id相等 则 改变对应的dest和src$ G; G& e# R1 r' o6 z% E1 d- H. l
nTmp = m_Item.nIndex;
3 k+ w' v6 _9 h6 @( u: Q" f1 }- p m_Item.nIndex = dest;# c% q; ^5 T+ ^
}
% H7 U; Y% F. C4 q }2 ?+ j! Z4 z5 o1 j& t
//临时数据保存完毕,交换开始
' T. v, @- O& z. J for (int i=0;i<MAX_INVENTORY;i++)/ f- g* d( O+ q8 @ t. m
{
/ e- @! U% k% N m; c if (dest == m_Item.nIndex)- ?3 n; F' p9 W6 u" t+ ]) G
{
) j. m- y5 O. i! F6 Y' f4 _0 E! G; [ //id相等 则 改变对应的dest和src" C1 l0 e. F" W! O7 \
m_Item.nIndex = nTmp;
' T( c* o5 }! {4 R/ y }+ E' p) t2 B7 ]0 F
}
( O# c9 X" i8 D2 G, O8 c" @& c6 o}! @' d& f4 R5 `2 h1 x# J
};
$ Y0 v( |0 Q! W7 [! m* e! S-------------------------------------------------------------------------
2 ]. U0 x' ^1 ^) i$ r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% Z5 w; }( {$ c" T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' U' r' Z& y, h w1 j/ G紧靠其上添加:& v+ \) h, k6 A$ A
if( pWndBase == &m_wndMenu )
- ?6 j. L2 t$ p: B{" [+ M0 P# a4 }6 o
switch( nID )
4 t" ?; ^, E' P P1 U7 O: f* b {
& Z- x, v$ K7 _* N, d2 k case 2:
' c1 n* M0 F7 m7 v( u0 `( c, t { L+ Y. _/ j6 p3 K" @
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 H0 k* B) e9 c2 x n. f9 ], x5 X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& e* [# t, R$ E" \) o. K
{
8 e8 ]4 N4 q/ \ break;
3 k* G- }3 ?8 M, N7 m }
9 p1 D" J; u6 p% h: D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! `4 \( M: b# I& O; W {
" k" c9 S* ?( W* o! z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 G! d- `) Z8 P( t |$ g9 Q4 v if( !pItemElem )
- o- f& c! g( Z5 T | continue;1 w2 ^. I7 q! u0 U7 d) U0 A2 d
if(pItemElem->GetExtra() > 0)
" X, `& X; k2 G. c" E- c6 `) `/ o7 V continue;
( \5 K; l9 [$ O8 e9 l% n' [& Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
`5 ~" ]; W8 C0 U$ I0 B2 u continue;/ P9 P: ^# W4 o+ h) J
if( g_pPlayer->IsUsing( pItemElem ) )
' [. V0 y3 G$ R9 n, o8 e continue;
( y/ ~* H, U- q9 D6 | if( pItemElem->IsUndestructable() == TRUE ) c4 H' H- r! g3 A8 y7 b5 r
{
. p. H/ V8 q m0 R r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 l' w( p$ n. L/ s1 c, o+ q continue;" f" [4 ^. K- |% Y: ~- D |2 t$ g
}: L" q( h# I$ o8 i. e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 s5 }! ]! C% H3 s, R Q
}- k+ ?4 V" L- o' ]
break;
( ^/ T8 R% \% n0 N8 |6 J( J# a }
! g+ b# Z, w& ~, L% ]0 _' P& h case 1:
. d: p" m9 c9 r3 v, Q8 O$ P0 H {
9 c2 G" p( O9 ?6 @ //整理背包% k4 w/ g( h9 V, Y1 K. ?) y( m
//////////////////////////////////////////////////////////////////////////, }3 |0 S) i' j1 H2 y% n/ L B" d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( G7 \# K1 Z' o3 }% H4 T( a
//////////////////////////////////////////////////////////////////////////6 P; P- r" |2 ~5 H: k% ]5 T4 l
//////////////////////////////////////////////////////////////////////////
0 X: q( l& {2 h$ u3 n, q$ a, h CInventorySort* pInvSort = new CInventorySort;1 m2 J) k7 i. Y
vector <sItem> vItem;
) c5 f8 @( v5 I vItem.resize(MAX_INVENTORY);//初始化大小' \8 Y" E' l7 O3 m
//////////////////////////////////////////////////////////////////////////5 W8 z8 P$ p5 z, X0 z1 c9 I
//填充数据+ @& k- }: w8 k n- m4 p: G5 ~
for (int i=0;i<MAX_INVENTORY;i++)/ g B4 I/ X$ n6 Q4 o. Q8 y f
{1 b; g* b# G$ e4 W8 \* @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" P4 b# [$ T+ W5 p" I' h0 R0 ~3 |
if (!pItemElem)' J4 Q# [3 e% G# I5 k
{) q( i( o- A+ U; ~3 P* r' `2 i
vItem.dwKind2 = 0xffffffff;
4 A, Q3 r8 u/ A( B: l vItem.dwItemId = 0xffffffff;3 s# |: }" a M) `+ N/ _ i! A
vItem.nIndex = i;5 z& K8 ?7 q% p) P; L9 Z, D7 a- X
}else {
- i! H+ n( B; D5 D% T ItemProp* pProp = pItemElem->GetProp();
, `1 U. K( q5 U% i; L& g7 I vItem.dwKind2 = pProp->dwItemKind2;
& Q. c$ e7 C+ k! p6 Q vItem.dwItemId = pItemElem->m_dwItemId;6 N# g, l/ x( h% l3 U' ?
vItem.nIndex = i;& Z0 M7 H, S7 `4 N
}) G5 }8 P" g, A4 i4 P, J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' F5 y/ j4 u! A3 s- m( d }- B$ e3 ]5 i) G! X0 O
//////////////////////////////////////////////////////////////////////////
1 Q. ?, z; ?- h. @ sort(vItem.begin(),vItem.end());//排序& @8 p: r% q5 J0 c% C
//////////////////////////////////////////////////////////////////////////% J' N, X7 ?- R5 T2 Z
//交换+ m8 f6 n: _, @: g M2 D/ C
for (size_t i=0;i<vItem.size();i++)
1 b! P L2 W5 J {
1 z$ X8 ~" z, n) _! r& R# `" ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) X5 {0 r5 {) L
pInvSort->Add(vItem.nIndex);
9 p) S$ `' ]+ m; P3 S3 z }
! p; R. z9 B9 C. m! {* Y4 \' E BYTE nDestPos = 0;( }; c8 {# G8 b
for (int i=0;i<MAX_INVENTORY;i++)
; a- {4 c4 ~6 o! ?' c {
( F. j K; O2 R2 y9 L; L. t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; j& V8 o4 A( X9 l% ~2 [9 o( ^- p( Z
if (pItemElem)8 `! l' J0 I8 x6 ^/ j
{
' R. ?/ C, b0 t* `& `& K if (IsUsingItem(pItemElem))+ H7 Q1 Y- g: W3 O) y& B% `
{: g0 e& c$ H% F& `. ?( }
//这个位置无法放$ `* P x6 W2 L' h; N
nDestPos++;% F% o' B( `5 v) I8 k
}
2 n' x( C. M1 O) M5 w3 X9 s/ X$ d }
; D3 Q6 f7 ^4 w4 y2 o0 t, o* Q6 ^ BYTE nSrc = pInvSort->GetItemSrc(i);
& Z0 ]8 n4 r: V$ l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 ~6 Z% o5 I2 V9 `
if (pItemElem)
" j2 N9 {9 [ F8 ]! X$ ^9 J s) c% O {- C* d3 b, w( N- N+ E; l
if (IsUsingItem(pItemElem))( f- X- c- S/ m' v& h
{
" S; n' r( J3 L0 _+ E //这个道具无法移动,跳过
5 _1 _3 j7 y, {4 C+ t) l continue;
" b) N! `6 N( p S' _ }7 o5 M9 L3 S' h' J" o* m
}else{& c/ P7 V# o3 t: d; ?7 I2 h
//空位置 不用动2 m, A- x& w4 F9 m3 S- u# o' E
continue;
0 A6 \3 O' [- _8 a0 B1 P" _6 O }, u, r' G t Y3 d/ V
//////////////////////////////////////////////////////////////////////////1 q) y/ D1 @' O/ ^' y) X
//开始移动& n0 o0 r b. Q- P4 n0 ^* r
if (nSrc == nDestPos)/ k5 ?) f2 |9 C
{, I& f7 o' j R, F) [2 k) M
//原地不动
# Q% g7 j. y) U4 z, Q$ z nDestPos++;8 R$ ~" R5 {! g' e7 v4 L# ^: y
continue;
# ?2 s2 R& y; q" O- B) x( u6 Y; q/ Z }# R0 |1 \) V; G4 u6 M% H
pInvSort->MoveItem(i,nDestPos);( P& } ^3 Q) f. v, [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! U, w* T ?/ L/ A- b
Sleep(5);
# w( e7 u# D9 Z1 t5 k/ t //Error("移动 - %d->%d",nSrc,nDestPos);
2 N, h6 b( Z, ~; ~1 G" f) t nDestPos++;
! ]5 Q0 x0 I8 q: ^2 F( s3 g }
2 m( M! V1 a% `4 J //取第一个元素的信息8 J6 C2 Y7 M: T; {. A, h6 U
/*
. b2 C/ J* z4 i3 j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- [& N. ` k: I/ Y+ P- L0 q7 b {( ^6 J6 u6 `' J* k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; v j0 \5 w8 x" Z: Q1 N2 T9 e- y' |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- r* ~3 L; n6 G1 f0 i; v" L/ ]" u. n( ^ }( v9 ~% e" u4 ~* x% n, i
*/6 M5 b% b$ S$ E1 D& o9 W
//////////////////////////////////////////////////////////////////////////
" V% R. c8 n/ G+ v( w break;( K0 x8 r/ j9 i w! g* ?, [
}
( b" K" z! m( q5 ?7 I6 N0 h4 s } 8 ^: B6 x+ F0 n" d! w4 u
} a) n7 Q1 U. b& B$ u
m_wndMenu.SetVisible(FALSE);
9 _1 c3 O7 W, x1 [) b$ J) k/ Q4 A: B! y
' H2 z( V, h4 x; w--------------------------------------------------------------------------------------------------------& E: r3 w' g( j. f3 t y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- L$ g* u* b3 `7 _6 o" N/ H
{. y* B' u8 W- G6 ?
BaseMouseCursor();5 a9 _5 E+ e9 r; M, n. V
}
8 ^: C% L2 C) p8 d8 h- l在其下添加:
0 T" ]/ W; N! P ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% c4 L, c2 V( R& M! ?
{% o8 |6 r( N; V2 a' Y* e; D" D( q# }
m_wndMenu.DeleteAllMenu();
3 G x7 W6 v5 t( sm_wndMenu.CreateMenu(this);
6 b7 w5 @/ {4 \: _ R/ J) Z' w2 M4 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! |* V- q0 b5 E7 ^6 @
2 _9 S- k7 ]" ~# U5 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' g, {# H( _- D) G/ n{% K1 H3 s0 |+ N6 [) j0 z) q, a
//P以上级别才可以删除所有道具
$ w' ~% m! Q. G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 K. q# n( e: |% ^}, C' c. F: M2 ?* M: v3 N4 z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 X( v, j& x2 r& ]6 A& Am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. c" v% R3 W2 Z
m_wndMenu.SetFocus();: m/ E6 f9 w) c& f/ b m
}
( t( P; ]( D" _$ Q% W------------------------------------------------------------------------------------------------------------; O; G% h- a9 x$ y# R# U
*************************- n( j7 N u9 y( ^$ T7 x# F9 E. w
WndField.h文件! f5 O# ]) l3 a" N+ O' X' C# d
*************************
/ S! v \2 S7 F/ o& f搜索:BOOL m_bReport;6 h( r: ]' ^; ]. a
其后添加:
. m' R' p8 r- r( ~CWndMenu m_wndMenu;% N7 ~$ K" X: {; f$ E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ z$ F: K' v# b5 {. s- [6 i, S; f
其后添加:, n1 Y- b2 h9 I9 N! ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);; n" X) b# h5 H
* \1 p% J; U" N" N, B V8 ^! Z
# }8 [' p! M6 R, C, I8 j7 G
|
|