|
|
源文件中_Interface文件夹下WndField.cpp文件/ Z8 s3 S) N% P9 ]5 X. p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 z: r5 s' L5 e0 w# Q l6 I) q4 i. e, C- Z8 V
struct sItem4 |5 ] T, m9 M# c
{
, h/ k( A% K* V. B ~0 @+ T) p7 Y+ a7 ADWORD dwId;
/ }6 U/ [( H3 jDWORD dwKind2;6 E9 |. f% m- e: y) P' s8 s$ J8 w+ I
DWORD dwItemId;
! ~: `) H2 J: g, vBYTE nIndex;
! x9 C* U0 J4 b! I% csItem(){" W9 \: v/ G5 F, w3 w' _
dwId = dwKind2 = dwItemId = nIndex = 0;
, {( H8 y' [; n}
% R( K3 i+ G1 i) l- Abool operator < (const sItem p2)
, `- _; o, U- i+ p1 U A& \' C: L{$ u. k0 N$ s8 ?$ d
if (dwKind2 == p2.dwKind2)
$ \: z' ]8 x H8 [" T7 v {6 F( R# J& K; c- z5 V
return dwItemId < p2.dwItemId;8 t7 R- E2 \& U- {' G3 A
}else{) C9 B' y$ ^7 u0 P
return dwKind2 < p2.dwKind2;
3 _1 W8 M4 H9 F }
: r' ^( H+ Y, v) q& [5 O4 K}& z- @4 `/ G* k) j! X: V& c
};
0 }' \$ X; u8 K& h/ v1 b' R8 Uclass CInventorySort* P9 P1 ?$ v( }- p, s/ u
{7 B! v" h, A2 }" B. K) q: I2 y
public:
/ k$ N6 c+ g1 Q# NCInventorySort()
- h. w& m' h) w' t{
) e2 c2 E+ Q9 i9 [" Y. x m_dwPos = 0;
; u+ u+ j& U7 c}, c0 x5 L5 Y' P& u8 d& U$ F7 ^6 [
~CInventorySort(){}
1 Y' ]" `# g& f& aprivate:2 y5 ` W" e) [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# t3 s7 P0 f1 q3 F7 YDWORD m_dwPos;
1 \1 n) i5 t% M; Fpublic:
7 E9 }4 |, X0 Q( t) a5 T9 W8 v5 }- M& evoid Add(BYTE nIndex)' X) F4 @5 y( X2 G$ K* F! r
{
7 o0 Q+ u1 { V- K5 ~+ z: v8 c if (m_dwPos >= MAX_INVENTORY)
' d7 H2 t I9 r1 Z) v {# \$ |- A, H, L$ I! `# ]. G0 d7 k
return;
& N& {& b! Z5 j }
6 ~& c% t8 ?; n& I( o* S- N) A m_Item[m_dwPos].nIndex = nIndex;
0 Y/ U2 s/ Y7 @4 X# Y2 s m_Item[m_dwPos].dwId = m_dwPos;1 f1 N4 _- d; v9 c# {6 F
m_dwPos++;6 U4 W2 v" Y# U( M/ Z; d O2 d
}
+ R6 T" V8 W S% Z( l5 s, x1 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 S) i# g: D, o! Q. f( W" B
{
; X0 d2 g$ N$ M# b0 l4 B; u for (int i=0;i<MAX_INVENTORY;i++)
; R/ p- Y! ]. Y1 j T {( I& V% _ W1 C
if (m_Item.dwId == dwId)% A, I; p# N+ ~6 U
{
6 l7 R, ?( \; s* p) | return m_Item.nIndex;
8 B* Z2 n$ D6 v* O }' R, ~) b$ [: k t$ ]. v9 O; j7 i
}
& p' m. y8 \* m# n V% ? return 255;
1 j9 C1 o$ T; {0 t/ q9 F, \}
* D+ y/ z @" l5 q/ y. Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) P( T) S3 @/ S; ~* K
{3 K! q3 R" C* Q2 B
BYTE nTmp = 0;1 y* A; ^2 D# r! c
bool bDest = false,bSrc = false;: k2 B5 J* ~- y
for (int i=0;i<MAX_INVENTORY;i++)
* Q7 Q" R( n+ H. V, b# Q {
X# l+ N( I6 x if (dwSrcId == m_Item.dwId), e" M |: f) e( @
{: ]/ D) [1 _) r4 ]
//id相等 则 改变对应的dest和src5 F9 |: U& C2 ~- q+ G, g& W* l$ v
nTmp = m_Item.nIndex;
5 E: B+ V {- n8 h2 N$ h* k8 R Y m_Item.nIndex = dest;( I6 `) e1 }6 b! J3 D$ F
}
, {" @8 q: G0 E& Z5 [% Z& m }) w$ y6 s3 J1 R3 Y
//临时数据保存完毕,交换开始1 ~* h; e$ l" p7 |( _
for (int i=0;i<MAX_INVENTORY;i++)
2 Z% \* B8 t$ L& K/ } {& x) b# C g7 R, r5 t
if (dest == m_Item.nIndex)3 X: M! J r+ h9 I4 q
{8 e3 [# N8 V& A* p
//id相等 则 改变对应的dest和src6 }$ G1 t9 C, }/ G
m_Item.nIndex = nTmp;
! ?) y# A. l) D6 } }
" T+ T" u7 t& O7 ]: R6 F& ^ }# Q1 S e) g8 m( y3 U1 g
}# t7 h/ T: I9 `7 c7 R4 F( P! @- M
};4 _& V+ C. m) \$ v- _7 {) a- {
-------------------------------------------------------------------------% ~. `1 A' q" V" k- U8 U. p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& {6 E% `8 i7 ^5 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 B/ K E) ~8 Y+ ?紧靠其上添加:
+ {8 F$ u C- v( p" X: A% wif( pWndBase == &m_wndMenu )
) v& [, x4 t' ^, z# k4 j5 v! A{. {8 y( C& o& t7 C( d, f' H
switch( nID ) J" A( }0 r3 @. i/ _. J
{
* p! }9 \2 F! Z case 2:
* P* k& g( x! @4 U {
3 Y8 b2 Z/ ^" @+ L3 @8 S0 P1 L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) ]$ v7 I$ Z. p- c. o( d% D2 w
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 k' n4 _/ q* [. W
{
; h' [; T! E* i/ }5 | break;2 }; [# n0 g- C. c
}
" v) x0 c$ m7 E1 g( O5 f+ H/ h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' [3 R1 D8 o" m5 c! {
{& K5 S7 K. Y, o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, r% z$ A C4 l I& R3 X% y if( !pItemElem ), h9 u0 d: _! W
continue;
6 }0 Q8 P8 L; i4 f4 n G if(pItemElem->GetExtra() > 0)
" B3 J: e& l1 p8 a$ i continue;
0 `/ ]( i( f5 J% ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - D& D+ P7 b) R7 R' X4 I
continue;. G3 t/ z6 M/ k N! d
if( g_pPlayer->IsUsing( pItemElem ) )6 j# T6 p h: x+ G I
continue;: r& J+ @8 E5 ]' S) ~
if( pItemElem->IsUndestructable() == TRUE )' V- c7 q* V# D) Y+ h
{4 Y2 k; J- T7 p/ q$ d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) w4 \' G# r5 T0 Q4 x% ~$ T Q- Z continue;
" B% e: B" M( ^' W) L2 G: _& \ }" E G0 i3 V7 I5 \* b Z: K
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. t. ]1 f8 J! G }
" m( _: B3 Q4 B/ m- s" V4 S2 u: N break;
4 p2 e, D5 E7 |3 C: M: b- g: X( C; J }
2 \7 U1 r/ U& X+ w case 1:' Q1 {! g: F+ L6 D! c4 w3 e0 g
{& |" m0 |8 V: Z5 s. E
//整理背包
. Y0 \- e" z9 u/ u //////////////////////////////////////////////////////////////////////////% l* d9 h9 {) J% t6 U
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 c C; f3 B- V; \ i- H //////////////////////////////////////////////////////////////////////////$ _8 k; w& f @0 K. G
//////////////////////////////////////////////////////////////////////////3 @8 g( d5 D) |) F8 o8 D4 `
CInventorySort* pInvSort = new CInventorySort;
n `: E0 Z4 w. M" u vector <sItem> vItem;. F" T C! B6 y( C* U& d
vItem.resize(MAX_INVENTORY);//初始化大小3 C8 C2 b0 ^ I* E
//////////////////////////////////////////////////////////////////////////5 o& B9 p1 J. M, ~$ P& T
//填充数据
+ y% b D* p+ x% [; S0 J" f4 j for (int i=0;i<MAX_INVENTORY;i++). ?+ c. |6 j- \' j) J, m7 f
{! V; Y& S/ L4 [- r' [) x: @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 u; R& \6 S8 s$ |' W) e- d if (!pItemElem)( I0 p, T' \4 L0 g) A
{) w7 z' q0 {' Y9 Y
vItem.dwKind2 = 0xffffffff;7 A6 t R' y: |# u. q- @& Q* R# z
vItem.dwItemId = 0xffffffff;/ e/ ^; J; i! q' h" ~' t
vItem.nIndex = i;
& U5 |& Q _! C! M5 | }else {
; r$ ]. e# ?0 D, _6 Y* |2 l0 w O ItemProp* pProp = pItemElem->GetProp();7 `( ~+ C T6 B' A& D% A9 l( o# t
vItem.dwKind2 = pProp->dwItemKind2;
2 P+ r1 X9 o8 X vItem.dwItemId = pItemElem->m_dwItemId;
) {! d- R5 {% q% }# w& E* S vItem.nIndex = i;: p8 `* M- W( S0 c. _* ?* W+ s t
}7 N: C3 y2 m( h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; X m& l E2 \9 k( y6 H& |" ~2 k }
: l; N& b- P c& q! r. h //////////////////////////////////////////////////////////////////////////
9 c& M. P+ H! ]' z sort(vItem.begin(),vItem.end());//排序; T) ~$ {5 M" o
//////////////////////////////////////////////////////////////////////////6 g0 P1 D$ [/ f1 ` ]0 P
//交换# O. y6 L& v& X3 G
for (size_t i=0;i<vItem.size();i++). W4 q3 X/ b: U4 S) Y
{
" O( n& _' k8 y/ [2 P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. y0 i' G: z; X, q8 k& f
pInvSort->Add(vItem.nIndex);9 v+ _/ S; @. K/ {3 U7 b
}
0 D- Z& w) o; N! e! [: | BYTE nDestPos = 0;
4 } ~: X6 U: H3 Y9 ~ for (int i=0;i<MAX_INVENTORY;i++)
* P5 v- Z& Q; o+ s. M {! x4 \' C N+ r% h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% K' X0 [0 ]1 M2 q if (pItemElem)/ m, f+ B( t* ]' Q6 ]& \
{
$ P3 P0 P$ F+ W* G) c if (IsUsingItem(pItemElem))
( U' s' z7 Z, z {
6 q' a2 u! H6 u3 n //这个位置无法放
* n% i O7 Y1 D! R# O; Q9 j nDestPos++;
# t! u: I+ v* E; x3 @! a }7 K3 x# n( M2 @5 b7 G8 T
}
4 Q/ }: H0 x3 f: c8 W g" s BYTE nSrc = pInvSort->GetItemSrc(i);
( B; l8 H4 T2 F0 ~: V- U3 v2 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; v6 T) B4 P9 ^$ r; j# L
if (pItemElem)
" J9 J6 S: T# A- s# D+ { {5 U8 u. a7 u. b5 n7 L) i
if (IsUsingItem(pItemElem))0 e2 C" N- H% d! [$ }
{5 }" }$ q* u$ r5 k$ n
//这个道具无法移动,跳过2 L0 ?: l) j% Z6 ]0 V4 U) ~8 d
continue;
& c+ \ o+ [" W3 L6 t1 A( j9 B }
, d8 E A# j$ J* F- V( F! S }else{4 i# H( q+ V. r8 M& e
//空位置 不用动: E! s9 Y( v4 k. g# y
continue;9 j3 G! g8 x5 u' C/ |" s
}
$ l- {9 _3 N O //////////////////////////////////////////////////////////////////////////
7 q2 Y: t- P& g4 K2 G9 Y //开始移动) N; Q1 ]2 ^/ C+ L$ G+ }
if (nSrc == nDestPos)5 Z) g" k( K4 K" m
{/ }- o q6 Q' n: S4 c% _# `
//原地不动: V- O* m/ Y# n! o. H
nDestPos++;+ Y7 b( |6 Q- I' E- C& B& ^
continue;7 X" n% \9 G- ^& X$ n' n9 y- U
}5 i+ B k" H; c( d+ z9 T7 I
pInvSort->MoveItem(i,nDestPos);
3 S4 ]' d1 c0 E. m& N: x9 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* T- `' { C+ f5 @# X* i Sleep(5);) V4 k0 @0 R5 F, j2 I6 Q
//Error("移动 - %d->%d",nSrc,nDestPos);
" ^4 X) }1 a3 G9 ~1 ~: y# E nDestPos++;" l% o6 J, _/ l- I5 t+ s
}' t, S: U) u7 ~' H
//取第一个元素的信息2 L* u; E0 `( `; ~- N0 ] Y7 k
/*; s' U' W! v8 Z6 u9 m: i+ a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ O( I( t; {- Y2 u" m+ {$ Z
{9 z; r( P3 g: B0 ?8 A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# |/ k0 l2 z% B! U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 R9 W; y0 V4 b8 R& |3 Q }* N% R' Y4 W" u+ D' x( M
*/- i# C |3 J: f L$ u
//////////////////////////////////////////////////////////////////////////
7 J: l& G S2 S- `0 \1 Z" P break;
/ {% ?, d4 t9 Z) b! Q4 o }: k# w/ ^2 B5 ~/ H2 u; M
}
7 M8 B6 M4 H0 u& R3 w- S; k}# w3 n& i" V1 p+ ]
m_wndMenu.SetVisible(FALSE);
3 |, @) |# n# ?5 a9 M/ Z& ]- _' E" P# W4 h
--------------------------------------------------------------------------------------------------------
& R" c) g: e2 v/ z+ g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* C( D$ g$ K" d. [0 h$ p% G+ i
{
. }1 A% X: M$ U: T+ _ A( ~/ MBaseMouseCursor();' {4 T; v5 ]6 k. _" F3 G8 o) Q
}0 d0 |/ p/ O' L# u
在其下添加:4 n, }; M$ p% O/ n- S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( A/ _* V8 g# ?% }1 r. K- `
{; y( S9 F5 V! x ~6 u
m_wndMenu.DeleteAllMenu();5 L) N0 E" x. ]6 I
m_wndMenu.CreateMenu(this);1 H& [: T+ z; ^ f# b2 z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
}7 A, E2 f$ u/ |0 \' E* C3 v8 b' u/ |6 Y! s6 C# {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# N3 a8 s% U2 M- e5 T+ N0 ^4 s( m
{
$ M" N* n( R7 }6 X+ o //P以上级别才可以删除所有道具, | d5 y0 ^( R) v/ z; c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ y3 }. s+ s6 l+ c( J2 @
}6 B e% t+ [# H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 x q7 y* I9 ?) S; Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# H; L7 C% g$ J7 \/ s
m_wndMenu.SetFocus();6 O! l3 X( z4 u& o& x! r" w
}
5 b0 w8 K$ {. n1 c9 a------------------------------------------------------------------------------------------------------------
* A3 ]3 K' q% z$ W; n/ |*************************- _) M F5 V0 p
WndField.h文件
! T- S5 c) t6 p8 F2 b, h*************************
1 w6 F" M: x7 W. q- p搜索:BOOL m_bReport;
% t" c# z7 k4 K h其后添加:
$ U+ `+ r: T( qCWndMenu m_wndMenu;
* Q5 G" O7 R% [# Z) x7 Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: u9 }- {6 j3 k, a9 {+ {其后添加:
1 {2 T' A% I1 J0 j2 Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 s L7 K9 [8 a5 O: `4 y" x) P* O# p+ Z1 D T, J
3 |. N% |% ]8 V( t5 f3 [
|
|