|
|
源文件中_Interface文件夹下WndField.cpp文件
$ ~+ }( ]$ V5 _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& C( x7 W. S; r% u. Y4 a
/ P/ P r" k+ A
struct sItem0 `4 U2 f3 G$ o1 V' R% V
{) ?& s9 A; o0 \$ ^, ^0 f( A6 L: A
DWORD dwId;
7 L2 l- [; p+ u2 F$ O: DDWORD dwKind2; j0 O9 m# ?! ]' Q
DWORD dwItemId;. U) p2 f- I: N3 u: }& { T8 x
BYTE nIndex;
# b: F9 M- x6 y) L0 csItem(){
4 g1 y7 S5 [1 ~5 L8 _6 s6 A dwId = dwKind2 = dwItemId = nIndex = 0;
; s0 V' |: u; G! R6 M}. o. A# C8 U+ U- L! M2 h, i" n
bool operator < (const sItem p2)
2 M! y9 F3 T* f% w- B/ z{
7 Q& t. {- X5 X if (dwKind2 == p2.dwKind2)
9 t5 b+ t& \2 L8 k" h8 F- \! ] {
% ]" [/ o2 g' |9 z return dwItemId < p2.dwItemId;/ @5 z" A( h! z- S" H) I
}else{- F' k4 Y5 l* M* ]8 O9 U$ y) R
return dwKind2 < p2.dwKind2;
: Z) T3 j& q% E9 [ }6 W e- a7 l5 O
}
. {( `1 t- `; J9 c# c, C7 X, l};3 R3 G: x6 K2 J# F
class CInventorySort2 t" M' K1 l+ | J' P! B" R( O
{
! Q! c; t5 `. v. M4 h. P# Wpublic:
+ e p4 ]4 c1 ~! YCInventorySort()
4 [2 u6 w. S; Z! n W2 J{% G3 B5 T& U0 m5 w+ M7 X
m_dwPos = 0;# E% I2 A, r3 Q) u b. y( B! W
}( h5 V% y3 @1 }! F, V( e7 B
~CInventorySort(){}; O* |4 z# P) ~) G
private:- {- ]- x0 H! j, I8 p* q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 K6 {7 d+ T: U- K3 xDWORD m_dwPos;
( r/ q, E+ E3 _) ]. o; epublic:0 t" o: r$ V# f
void Add(BYTE nIndex)7 q7 b9 Z& b w& _
{
5 v2 I1 j- B3 T( e3 C if (m_dwPos >= MAX_INVENTORY)0 y* i% V1 ]% d( U- g2 h
{
' w8 ]1 e; |8 u; ?0 a0 } return;7 I+ v/ g2 [! d+ x3 i
}
- Y5 g7 x3 L5 @ m_Item[m_dwPos].nIndex = nIndex;
1 P/ a, a) N. h5 x) c m_Item[m_dwPos].dwId = m_dwPos;
8 ~1 f6 M% V- E8 e m_dwPos++;2 l& g1 I! O: O3 T' F
}& j: v' Y0 A4 g' {: [+ n! {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ w8 M3 m+ u# u3 _: Z
{9 S' F0 M& z3 i" s+ ~
for (int i=0;i<MAX_INVENTORY;i++)
9 F. v' m! x1 i$ b7 I" `0 S# X$ M( [ {# v; E. D% O2 Y) q5 v( T+ x4 g+ R
if (m_Item.dwId == dwId)% A5 F) L2 R& e7 p5 o# Q
{$ ?7 M% G6 J) T; T
return m_Item.nIndex;8 a y3 W, M, }# ^ g- |
}
2 V+ [( R& p) ?6 j6 Q }
9 E. N+ n# Q+ t7 P9 p7 |+ o return 255;: D# h+ ?% Y) s3 R- J) ]
}# A7 U- s0 }- @8 q6 n% L4 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. Q, h% k6 N; o- X0 s2 z
{
! F$ }' x1 B2 x& T) T BYTE nTmp = 0;
4 T+ A! U o$ k, D) D3 I+ K' U, h4 T bool bDest = false,bSrc = false;
. @6 H; p" k4 L1 K( l for (int i=0;i<MAX_INVENTORY;i++)3 n# K7 }# P9 R, _& x# z
{! R% A+ p0 T0 Q4 I8 q
if (dwSrcId == m_Item.dwId)2 }, |* A1 @) ^ z. ~# n$ }; E% D
{
+ q# e+ v' |2 X. _9 g //id相等 则 改变对应的dest和src7 c3 D7 F1 q& p7 C. R
nTmp = m_Item.nIndex;- z4 A1 P4 r9 \6 B0 L
m_Item.nIndex = dest;' t' X# g% f6 u# ?! K3 V8 A( l
}: n0 l; O% Q3 W6 z I
}
% T9 p; E2 o& ~; r$ V9 O //临时数据保存完毕,交换开始% Z' B+ ]2 c+ m% i) Z
for (int i=0;i<MAX_INVENTORY;i++)7 m. I" `1 g2 X, p% b
{$ P' h. O3 E6 M1 z
if (dest == m_Item.nIndex): s0 u% z4 y' u1 X& E' A
{
7 @ n% r) S5 [9 Y( g0 c' W //id相等 则 改变对应的dest和src
, n5 D4 r/ O; ~; X m_Item.nIndex = nTmp;
# p8 v0 z! ^! v }5 _8 Z3 i2 z; F
}
$ N/ G6 ~) g5 B1 n2 |3 Z}- r+ Y% F4 G5 }' h5 n
};. Y$ }+ L$ X: \2 ?6 {4 S
-------------------------------------------------------------------------
: W' L1 M# @; ]9 L6 b6 }0 O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 S s" N x8 o$ J) f2 X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- Y$ ]9 z; i7 r* ]9 t0 c1 |( _紧靠其上添加:
; w4 _) h4 I0 C# s/ _; dif( pWndBase == &m_wndMenu )
# W. Z2 A' Q: A/ q{) G) \: `$ h. Y! H$ G
switch( nID )" v2 v0 e" @& O$ V2 t+ K
{/ ?/ s/ D$ s6 s
case 2:
! g% p5 T u6 m$ X$ P/ B {# q: r3 M9 ?! z: [- e1 r: ^
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! F$ d. E( X5 ^6 Z3 x* k1 p3 j if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 U3 c! \" y9 H/ B
{) t/ w) k" H8 T9 c
break;
' X7 p6 s- n) y }
+ t) N3 O) O0 c) Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! s5 P& o" A# w* p2 z* Y+ _4 b {4 u1 e" Q7 v0 g" T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 B6 ~. }$ F0 G2 g+ `. P
if( !pItemElem )( Q" y/ v4 P/ t5 X1 z5 g$ o# ?- \
continue;' U: Y- X% ^# U3 n' K6 b+ ~
if(pItemElem->GetExtra() > 0), e+ ^, V) q" a2 W" S
continue;1 E* C1 p3 z6 W8 b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( c- Y8 W* E! c' x& W
continue;2 R: h, ]* [( d7 g; i9 m
if( g_pPlayer->IsUsing( pItemElem ) )4 t$ }. x9 u4 C9 {* |% e6 `
continue;
; a. x/ V1 n( h% | if( pItemElem->IsUndestructable() == TRUE )
$ t3 d- f3 P# j {
+ Q6 s" {1 K- [; L! p" |3 l" Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 E" R* W; K( S& U1 q
continue;0 l4 U: m7 X) p! X0 g1 Y9 C- R+ }1 S
}
" A3 k0 X c$ A% @; Y% W; a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 G$ |2 i8 X" K( e/ R
}, T9 m& \: {( S/ ^
break;
I4 l0 t( z/ C$ A6 _ }
8 T6 \+ I5 K: e( C, v: }6 u case 1:( V( V2 L. s: [ o
{
& y) K4 {9 Z0 ^& i, m //整理背包
2 u- h+ }8 w; B3 s$ C% ? //////////////////////////////////////////////////////////////////////////. O; d2 x. V- t. P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 e# J* z6 z9 x& Q; [0 ?& a
//////////////////////////////////////////////////////////////////////////; I4 D# h6 @ Q
//////////////////////////////////////////////////////////////////////////
$ z, x1 K; w) G5 P( n; S! H# f5 _ CInventorySort* pInvSort = new CInventorySort;
+ }6 n% l% h: H$ C% e$ z vector <sItem> vItem;
' N$ Y% Y$ v! B/ Y' L# w' c vItem.resize(MAX_INVENTORY);//初始化大小
3 p; M) `# ~! v //////////////////////////////////////////////////////////////////////////7 b: F, w+ r z4 x) }
//填充数据: p5 ?3 r4 T& {- U, u0 B# V
for (int i=0;i<MAX_INVENTORY;i++)* w# J& _# H) s' t% {. x4 @8 i
{
5 D! _ J' ?! h+ k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ?4 X V$ [1 ?, w+ j' R if (!pItemElem), d# \- F' ^" I9 L" ~8 y( D* i$ t% Q
{
7 T0 ^0 i4 j( i$ ^0 y9 \" |- s vItem.dwKind2 = 0xffffffff;
: f6 G6 u6 n! I3 u/ V& W vItem.dwItemId = 0xffffffff;8 y/ m* W# v; p9 A- Q
vItem.nIndex = i;
; r1 G# @7 R) B8 W* ^ }else {
: F! k8 n" u+ X9 { ItemProp* pProp = pItemElem->GetProp();/ T W, ~' H' @6 f; k" I% |/ c
vItem.dwKind2 = pProp->dwItemKind2;$ [( [- h9 [5 v2 f+ e7 J5 w) n* Y8 [1 Y
vItem.dwItemId = pItemElem->m_dwItemId;
5 _( @1 l/ P4 D7 L2 p vItem.nIndex = i;
9 V$ c' D$ g% q+ S }2 d& f% A& m) F( U6 \2 k; j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) L0 D/ K2 g! F; A( W }9 @" v$ Y9 i5 b+ `- t$ M! Z
//////////////////////////////////////////////////////////////////////////
* U" n4 i6 R v7 d% B- X sort(vItem.begin(),vItem.end());//排序
: v" U6 H: i% Y) W5 H% l //////////////////////////////////////////////////////////////////////////
/ R% n7 Y$ [5 Z //交换; Y: X; O+ c; @2 ?: p
for (size_t i=0;i<vItem.size();i++)
7 L& }+ _: {. s, ~ {. _) `1 ]0 V t! \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! `) J2 O1 A* b L pInvSort->Add(vItem.nIndex);+ s0 I# O# g. v
}% l# ?% H/ c5 P
BYTE nDestPos = 0;
+ G0 z# r* ]* {5 n4 w: q for (int i=0;i<MAX_INVENTORY;i++)
5 q+ M- V5 c: H# N O; d2 } {
$ i/ F7 T; J# c; {2 L6 @; G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 m6 m" X, Z/ Y. P" V' N' \) l" E
if (pItemElem)
) @; g: a- u. Y7 v {2 s3 L; }* t# t0 M
if (IsUsingItem(pItemElem))! D. S& P: c F# ~% T
{
3 C4 F0 {* l9 I$ {* K) Q //这个位置无法放$ t, J) u" c. s* k% y
nDestPos++;' W) d7 R. l4 j+ W8 ?0 h
}
$ i/ z- J5 L9 n3 X. m }" u2 p: }3 Y+ G4 y5 ?
BYTE nSrc = pInvSort->GetItemSrc(i);
7 q/ P% m/ s! L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! s9 x! A9 T# `: c& {+ v5 v6 { if (pItemElem)
+ s" _( Q# R3 N8 M4 H; i6 R {6 ]* l( L0 ]8 R6 g+ O. ^) R0 Q. y
if (IsUsingItem(pItemElem))
( F: p' n" q; l+ O* Y, r. j `8 G% k {: w1 ]4 z4 c3 |1 F; E
//这个道具无法移动,跳过- n, j( a5 [# e9 K
continue;
, v/ c+ o6 [2 A4 h }* q3 }# S, m, \# j5 L" d4 q
}else{0 q/ T/ i" Z& p! d% x6 p, U
//空位置 不用动% {) d2 T- n& B: E; i! |
continue;
4 E- @2 {# M/ |# k- a1 ^3 t }! d/ x( U/ ]& d b
//////////////////////////////////////////////////////////////////////////5 x: j: ?% ^" H7 z& S1 y& O8 y
//开始移动! ~5 Q' P9 R9 o5 V- E1 {
if (nSrc == nDestPos)6 D, e5 Q& e$ @
{
4 o( M" D& w. e8 o+ f //原地不动
+ H+ ~" M/ q% p0 g; e nDestPos++;" L8 `9 }- a0 G" m, k5 e% D2 f* N
continue;: n4 a& i5 S. S- [! g' y) ?
}
0 r }/ r1 d# F- E8 N: e1 i0 o pInvSort->MoveItem(i,nDestPos);
8 m; p' R4 \/ t" P" N g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, w2 s; X+ x8 U9 T v Sleep(5);' f- Q) z+ Y' L- O, c# ^, {
//Error("移动 - %d->%d",nSrc,nDestPos);
! y+ j6 a q: P# }" J: \1 \ nDestPos++;
. u" R' p3 ^) y+ T( i9 O0 B }
# v9 g5 }: u& h$ L' L5 ^* V //取第一个元素的信息$ t" p0 w+ Y: d) Y2 B$ F
/*
8 P1 S* `0 C7 H$ K2 H5 t7 s: @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% Z: |. w% z; R8 F0 n {
! D [" N6 G; J5 q3 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
{ W& g9 y1 p+ e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 M* l- n* K H- K }! c* |2 \% \! ?# k
*/
7 `5 c/ s, }# e5 a4 J c- Z6 N% N //////////////////////////////////////////////////////////////////////////* v7 I+ b+ u/ \" L1 \5 S
break;6 l& K& i) E ^! v( O4 @7 X
}' x: G+ r, K0 _. w
} 6 G& l5 e- Y9 d1 B" l- F7 _- o) O: B! h
}6 e8 n! N; Y! K! S4 U, v% a
m_wndMenu.SetVisible(FALSE);
/ R# G( W C- a3 {; P. Z# L" a" A6 R, r9 X7 D5 p3 x3 u
--------------------------------------------------------------------------------------------------------. ~: y( _& p7 M0 }, W* z* {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' K5 g3 j* p; v; y
{% K: P9 [" p N
BaseMouseCursor();
( I7 Y. r: S. j' Q- D}# l1 z% [. q2 ~9 R9 N5 h4 F3 H& h
在其下添加:
8 B( m1 p+ ?8 r1 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ ?; P* E. N. g( U, X$ V. `1 f{
r/ k- ~" C. R( _. xm_wndMenu.DeleteAllMenu();
) y$ E* E7 A: u" n1 l/ i4 ]( K& G2 H( nm_wndMenu.CreateMenu(this);
) A; I4 D9 k7 p3 k6 ~& Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# A9 m5 _$ [" h8 d @' x" g6 N0 {
/ `, s# ~. o' u0 j- }6 H/ Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
u' v( T1 ~3 o5 c. }& u2 @{+ `5 V+ H1 F* o# b& {; Q
//P以上级别才可以删除所有道具* P3 o8 k: V C, `* B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 S6 X1 x) y u B) _}, h- Z! \. p+ a0 n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' c' m) W* v& b( C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% M, O1 s8 R( b! S% O: F1 A1 _( Z2 J0 Vm_wndMenu.SetFocus();
1 }) N3 G. [) n6 ~- H5 p3 p}0 @# ?3 g( H6 L6 l, x
------------------------------------------------------------------------------------------------------------
/ L/ p( X9 A+ A& x) ^' O# z1 D*************************
5 L4 F _+ m) ^5 u$ i* B/ qWndField.h文件
; s, D: Y f! |% N J1 j( M1 M0 K*************************' b) }' h" M) A8 ?. [
搜索:BOOL m_bReport;
# h1 R8 _* e+ g: ^其后添加:# G9 y$ v& E7 |8 }2 c5 p, K
CWndMenu m_wndMenu;
! q* A1 G; H* W& W& {7 b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 ?7 u8 D% {( Z, K( {- q% N3 Y5 F$ E其后添加:, e0 _3 V8 b$ s$ M X2 `" G
virtual void OnRButtonUp(UINT nFlags, CPoint point);' K4 @4 I7 J m$ \4 m
/ A% t a2 }. z3 A r( p/ l
. G/ a! X) h+ l! A0 w$ s
|
|