|
|
源文件中_Interface文件夹下WndField.cpp文件- S4 P, e. }5 u5 W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) i: }- W) G6 k. g/ \2 s; ?
# S1 `/ N7 [( Y. m3 Jstruct sItem
8 K3 J2 l1 X% q+ }7 \6 b5 {{
( h2 u) H C" `- r8 kDWORD dwId;
6 {; b) ^6 ^( w& p3 {" R) u; d/ SDWORD dwKind2;- T- n+ }4 e3 R
DWORD dwItemId;& O5 O. ^; D( J1 |$ L( l! m
BYTE nIndex;! m) t8 T+ R, ]7 l5 {
sItem(){) r h4 P) Y" r5 J
dwId = dwKind2 = dwItemId = nIndex = 0;# o6 v1 a5 }8 ?6 X" N# J
}$ G' {- p% p& B
bool operator < (const sItem p2)
5 U2 i! ~5 l. [# ^1 a+ R( K{+ X4 {. s" ~' M' c' R% w3 ?6 }
if (dwKind2 == p2.dwKind2)
8 s. m9 `/ W/ U' p9 D( W7 u. n {
: J1 k( _/ L# N; }4 g8 | return dwItemId < p2.dwItemId;
% z) Z% a6 s/ W5 G( ~! f; Z }else{. H* z; D% {5 ~
return dwKind2 < p2.dwKind2;
2 s! o+ v ^, D1 B, N }9 S- J8 A3 H$ R' W
}- c6 A$ p& K5 _% R0 [" G% k
};
5 b8 n1 W8 g" V6 T. O* `0 J+ Kclass CInventorySort
1 T1 B+ Y V! {! a{
1 i; Q/ s/ H9 E& {2 Apublic:' I6 _ l# g( E
CInventorySort()
; F+ {( U) @4 e! ~{' d2 @1 y: P2 j( z0 G% T+ _
m_dwPos = 0;
7 H* @( R9 D) {3 u, O) f u6 ~}
% H' W, U9 v) A+ }+ X! U~CInventorySort(){}% R5 c$ \- B) \2 B9 Y
private:* L% Q3 q/ G! }* g1 A4 w' c5 Z' e6 d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 Y( G6 ^2 J: T. V9 J) qDWORD m_dwPos;, O2 l* S, b; G( D
public:
* `7 q4 V3 U# M$ o; \( [" x7 S; N/ x& Xvoid Add(BYTE nIndex)
6 X0 j4 V: S: R' S# H4 b: ~% |{2 s* x2 l* }0 u7 g5 P T
if (m_dwPos >= MAX_INVENTORY)
9 O2 j7 ~4 B$ t { ?1 H* s0 O8 M- K" E
return;% ~; f' w$ l6 }7 r7 ~: S( Q% c
}
$ _ W8 n7 W! Z3 A) a m_Item[m_dwPos].nIndex = nIndex;
. e0 K# ^! s% `& Q" n m_Item[m_dwPos].dwId = m_dwPos;# V, r: v6 P$ H! J8 d9 F& g4 |
m_dwPos++;+ V% z2 l3 V6 B# \
}
I$ T, [) \% [) X% YBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* K) I6 x4 ~( P5 [
{# R& {/ n! U5 X) r; V$ ~
for (int i=0;i<MAX_INVENTORY;i++)
I/ [+ q& t. j1 `; p0 ?: U {
* w% Z- s" R- v if (m_Item.dwId == dwId)
! ]( M( d, R8 D: `3 x3 V2 S q {3 {4 V& g- p) n" J Q* c6 P
return m_Item.nIndex;& {% y* x0 |# [
}
2 [* M+ j) I# S7 S" H }. t# o0 r) Z7 n
return 255;
' ^4 C; _4 Q" s6 o) n: O}7 J& P4 O) A0 P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% {+ h3 s& A7 V' }2 H* W{9 q8 R2 i0 L6 f* N! Y
BYTE nTmp = 0;
" X7 {8 u; `; G7 d7 _' N* q bool bDest = false,bSrc = false;/ e$ H4 ~2 Z6 F/ _( Y7 ^% F
for (int i=0;i<MAX_INVENTORY;i++)
$ w8 I0 `: L# q* z& _ {$ {9 \& z3 J2 O- ?7 p
if (dwSrcId == m_Item.dwId)
/ |7 ]- S6 {, r. E {! s* G! Z- `1 b$ I. W
//id相等 则 改变对应的dest和src' z; y4 k# D- b/ J3 w: L$ v" z
nTmp = m_Item.nIndex;
* T$ ^. l6 @8 t3 { m_Item.nIndex = dest;
0 B' Z& k4 o. S, z c }7 N6 W* Q) _* ?% J3 `
}7 l$ t1 I# B, _8 d1 I
//临时数据保存完毕,交换开始2 o' T/ m" N, j9 u
for (int i=0;i<MAX_INVENTORY;i++)
. X8 s# Y7 ~* e, ]! K {/ R: d: }7 ~3 }7 ? t
if (dest == m_Item.nIndex)
8 \- h+ @+ l; w% ?+ W: x- t {- ?: M1 c# I4 ^" M- p/ m' s
//id相等 则 改变对应的dest和src8 y8 L; ~4 q, U+ B: K
m_Item.nIndex = nTmp;
" I$ h- U+ n, A }
8 K9 l; i) t& C5 ~' { }
, p% ~; f6 d0 }3 r. L# I}
5 c D% Q# Y0 v1 G2 n7 a2 g};
- A% d; Y7 S* f3 \5 H-------------------------------------------------------------------------. f7 f3 j1 d; [" [* ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! V. ~* Q+ x2 l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! c2 N% i) w" o$ {, c
紧靠其上添加:! H; v+ |( d+ b. A
if( pWndBase == &m_wndMenu )1 e1 E) u7 d9 U+ \0 X' U+ K/ ^
{5 `5 W( V: m, @+ l3 c0 X; n! P
switch( nID )
3 O( x* F) u: N4 x- S0 { {/ T6 w1 q h+ s9 K
case 2:
- z' N# ] z+ w# A/ G! d7 m# } {
% R V# m, w2 `/ F: \3 u. f //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 y( @7 `1 f* y3 t N' P4 I6 `* _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 I& m; t5 @0 F$ H8 I) p: }* I1 y
{
6 |3 ]: O" p8 Q! e9 J3 s& m7 q, O break;6 z* P$ W% o1 e' s, i
}
/ ?+ G+ x' ]5 s+ _- h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 w4 k- p9 K! \* \' k {+ o7 d' L6 p: K( f$ F+ s2 B$ |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) u9 e& ~/ x$ Y
if( !pItemElem )/ R e+ M- o! D, C K2 x
continue;
. ?' x/ q: S; R# Z7 z: l; O if(pItemElem->GetExtra() > 0)2 r4 j$ a& Z# ]; f. K }4 y
continue;
! w" V' {) N4 D7 m, f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 q$ [! A- L K3 c- D& d continue;
3 R& H9 O2 X( y4 n" R+ o \3 ], N if( g_pPlayer->IsUsing( pItemElem ) )
! ~' G% Y4 e, o! z- l& v continue; v; i# R7 v( J& A0 d2 A5 n1 W
if( pItemElem->IsUndestructable() == TRUE ); J# ]' ]& e! N& X1 o# G0 ?4 I& M; c
{
+ J, s- o5 g* r9 o0 d9 P" b' Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, s5 `$ T4 K, H d; s+ V4 T/ _8 U
continue;, }1 h% g( k! N8 I
}
( b8 ~% Y7 P. u1 H0 R+ m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 ?; t- b1 g: P0 ]1 P% k
}& }( \) e, x2 @
break;
; Z: F7 k% |7 E7 |+ ? }
- R$ ]# ]+ `! T8 W case 1:' L* p5 @9 L+ j9 |( U1 K& u
{
* m, f% O- v- `2 d5 O //整理背包- J; c$ _8 C. Q% Q& b$ O0 X- B
/////////////////////////////////////////////////////////////////////////// P/ a1 f* S( r: d! S% Z0 P- K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) q: J% K; o/ ] ?; a //////////////////////////////////////////////////////////////////////////: I5 P" G0 N% O7 i* X
//////////////////////////////////////////////////////////////////////////) d+ P" x! X B1 d- r
CInventorySort* pInvSort = new CInventorySort;& b& E1 z P! u( `8 s# U8 s
vector <sItem> vItem;/ P+ G' J- c% S' ]& ?6 X/ p b
vItem.resize(MAX_INVENTORY);//初始化大小
' U& O, |' B) q/ C3 c$ ] //////////////////////////////////////////////////////////////////////////: b% V* N4 _ I& x" n/ ?
//填充数据+ B1 e; h( f8 J1 D. `5 p4 {8 P1 T
for (int i=0;i<MAX_INVENTORY;i++)9 a! E) A: C3 i; @( P8 J
{! h4 W( e D) n3 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, V! Y; X: e( ^ if (!pItemElem)
& q0 I/ j3 K6 ?" w- A- K {
0 }: ~0 B6 s' d vItem.dwKind2 = 0xffffffff;1 l8 t! e' ]( F; C
vItem.dwItemId = 0xffffffff;% J# ~# e$ L! _8 w' C' C) Q, ?, M
vItem.nIndex = i;
" ~! q. x' }5 A6 M/ s3 O" K }else {( z3 H; D6 E3 n4 z: Q
ItemProp* pProp = pItemElem->GetProp();5 h8 i/ Y* o, N9 a% Q. E
vItem.dwKind2 = pProp->dwItemKind2;9 J3 i F# h+ [3 b
vItem.dwItemId = pItemElem->m_dwItemId;( R7 D* P: z- k8 h
vItem.nIndex = i;" e7 a( N+ K) c' g f- ~
}: W5 v+ W$ O; O7 P. w! \7 a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! |7 X |/ c$ ~
}
: M; O% \8 t6 b a8 W+ {8 l1 S //////////////////////////////////////////////////////////////////////////
2 _; u( D0 @4 D sort(vItem.begin(),vItem.end());//排序
9 Y5 u) E. d; t: L- H4 v4 M2 n //////////////////////////////////////////////////////////////////////////
) L$ u' n6 r! J0 B //交换
6 @3 Q H3 e* S0 t for (size_t i=0;i<vItem.size();i++)* t7 |0 w! Q* x* |, T! R
{
* o. t3 E, F6 w' F V4 R% X //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' O5 R. d$ t. S, Q& |; ? pInvSort->Add(vItem.nIndex);
1 C; u4 h7 I) `5 b& W: Q }+ S, N, d) q5 x" z) X1 n r
BYTE nDestPos = 0;
. f9 ]% G' B0 D. h for (int i=0;i<MAX_INVENTORY;i++)0 R7 }' f4 i, D
{
! I0 R; [1 C5 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) F( c, R7 R% K' L8 A4 n if (pItemElem)
7 y9 Z6 k" Z" w% z1 F {4 [2 v, J. I& I3 r, v) H; e
if (IsUsingItem(pItemElem)) \! F; J6 Z9 h4 P& v \6 Q) D9 e
{- S$ C& H3 c* K, ?. r9 b
//这个位置无法放
( z: D) j# I" M0 j nDestPos++;6 P( O6 m' N& u# @ d m+ _# N
}
* B% I" n, L7 c }% D' C/ w0 M6 o: ?
BYTE nSrc = pInvSort->GetItemSrc(i);
/ }/ S% g; K; s; Z" m, e pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ [' Z( [ U# s! s
if (pItemElem) L( k" d# \5 }
{
" D; {2 [- A' C7 r+ G2 ]/ Y if (IsUsingItem(pItemElem))
7 V$ x; z" |! l6 T; j( L {; M2 p* u9 V* W
//这个道具无法移动,跳过; Y# n+ |# u/ z" V4 }
continue;+ H! z: V, I* w. w% c2 e/ S- P" c4 X
}
7 J' `. {$ y7 L9 h) ]# T* E8 z }else{& P9 }, y. U+ K* w% E9 i0 a
//空位置 不用动$ l0 I+ E6 Z7 u2 H
continue;
3 k/ Q) n6 z+ l# v, n* F }
- P# h2 |- p+ l9 `9 T //////////////////////////////////////////////////////////////////////////
0 q! A. D7 v: v* Q. `/ ` K& R# _ //开始移动
4 k2 e) S8 I" \% _& l* |: z' O% ` if (nSrc == nDestPos); m' z# u7 q6 [5 l% c- N
{
5 {" ^) A1 T8 X+ x! W //原地不动6 R9 w3 M- e# r8 ^6 G
nDestPos++;
$ s+ u O- B# E) T9 D continue;
0 g0 S+ a8 T& A R+ B+ `! s }0 A! _" y7 t& d+ p5 l; w0 v
pInvSort->MoveItem(i,nDestPos);
6 T2 y& w" f/ y g_DPlay.SendMoveItem(0,nSrc,nDestPos);( w$ {1 b" _, s! k" i$ A6 g
Sleep(5);
3 P4 P. |2 Z3 k! c' O //Error("移动 - %d->%d",nSrc,nDestPos);9 p: U, R1 E9 D! ` S7 Y
nDestPos++;
" o+ {" p! L+ b% D9 h }7 o: a5 [1 s3 W5 E
//取第一个元素的信息
L4 f7 d3 \# u) f /*
& w6 x" b$ q/ [+ i9 U$ i2 [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 o( g1 k+ ?1 T7 _3 t' M3 E# I
{& C c# {; `$ A4 V* M2 B: c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% j* p- e% O0 L4 D3 e) j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 s6 G+ E' ~/ v" @1 m* u* U1 _# Z9 `; } }/ b s }$ {8 f
*/
* g5 Y7 E! }' `! S6 A- ^ //////////////////////////////////////////////////////////////////////////; B; w0 D. c1 Y: _/ Q4 f, z# T
break;
3 [4 t2 `5 \- `. [, B' g! C }5 F# Y9 G2 I( n, m5 r6 V
} ; t* F- o F. r6 G
}
! ^& r5 |1 T! rm_wndMenu.SetVisible(FALSE);. i( I6 X4 k% a
; a4 |. P( @0 I( |--------------------------------------------------------------------------------------------------------
7 ?8 v8 }7 |6 I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& n' o+ [( L. [) _/ {$ U3 g
{
. G" n$ U& Y3 o) h2 U: z9 zBaseMouseCursor();
4 T# M S( [! j |3 R" |}+ V" Y; z! }6 t) R$ o4 h9 u0 }
在其下添加:
) z9 w J- Z% E$ Z1 \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' @& g8 E7 k! }! m8 j+ v* _* ]{
2 p9 @+ \% ~. w' Km_wndMenu.DeleteAllMenu();
! B/ d- E2 g A% n Tm_wndMenu.CreateMenu(this);
( w9 R! f. E# D) z0 T) f' C+ km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, u: P1 _( H3 N8 o
6 U/ m p+ ]* F7 Z' pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ C$ f p) I) s% p2 L) i{
: i& B: Y% D$ ^ //P以上级别才可以删除所有道具
# O/ q: C1 v. [7 U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( w5 K! C' Z0 e/ X6 P9 O
}2 ]8 {; l g. p1 d x& |. B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" a0 Z6 H- ^( S! S+ p+ Q5 f Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 L* c0 T/ k' W; [ o3 Nm_wndMenu.SetFocus();% Y4 l; x9 h8 y1 c, B( {8 r/ i: v4 P
}
4 W6 \* H) E( Q$ e% ]------------------------------------------------------------------------------------------------------------
" F8 ]% ]+ _/ O- h' P$ ~' W*************************" A5 \' I! M, |& L K4 @; U; I$ [- S7 e
WndField.h文件0 I0 a$ E( q% @) z0 T
************************** a; `! [6 |2 _3 u
搜索:BOOL m_bReport;
. [/ L: V6 E) k3 |1 f# ~8 m" N# g% w其后添加:
) J7 H4 K( ?' C/ ]1 y- ]CWndMenu m_wndMenu;2 }3 |0 p% K, E/ H6 W' e3 ?1 J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 T7 [! l1 F8 |- e6 E3 Y6 P$ m其后添加:
) w* F2 s, p8 J) n- w, p F5 Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 I4 p. t: T' r9 i( ?& V
) [8 E# _5 ]! |6 J
" M K0 M, Y: J. D- Q |
|