|
|
源文件中_Interface文件夹下WndField.cpp文件3 H. E$ a/ k: v) V1 e# y% a) q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 I9 Y; Y3 a( U+ H
r0 D) z# C1 x6 ?) s* b: ustruct sItem1 s8 F& E, n2 d, G& {
{
# ^: t7 N# s, tDWORD dwId;
" R$ c0 b7 F k" @; l7 F- t. HDWORD dwKind2;4 Z% x; @& B. b* K" p1 \( \
DWORD dwItemId;/ i; p! e9 D) q$ l2 K; t0 g( W) ?
BYTE nIndex;" b' {' Q3 H6 i9 R5 W
sItem(){
2 q' H6 d8 V8 W- k6 t8 N9 U; ^ dwId = dwKind2 = dwItemId = nIndex = 0;2 F: }9 f* J" [. l, a
}
3 r0 x% s% U5 r5 u4 Xbool operator < (const sItem p2). j5 s {+ `2 T& Z+ ]- ]; Y
{ n0 P' j W" M- _4 H; Z# t& R
if (dwKind2 == p2.dwKind2)& W; p+ E) w. k0 N' z
{+ ^* `2 Z4 w6 \+ S! M
return dwItemId < p2.dwItemId;4 h/ v0 H. O. W/ q( ^
}else{: O5 C4 `1 U9 U x& n z9 p9 @
return dwKind2 < p2.dwKind2; m2 X T$ B+ B8 Z. y
}- {7 S& v2 c& y: }3 Q( e7 K( G
}# [2 x( v6 D& r% E) O) B
};
& q3 j/ v: a1 P, S. Q$ m9 u' L( ^class CInventorySort
) b- B+ p1 s! q6 O! `" V# {{
8 J' C" ^& j# A% d. E$ P D0 \public:8 D4 P b6 Q% \. {
CInventorySort()
2 N+ N. Y e8 j; R{2 ]& X! V" s8 y# P1 `
m_dwPos = 0;
3 `5 j" A- W9 \/ O, d1 o1 ^9 D}
8 D6 d2 g# R- {~CInventorySort(){}
( z9 i0 g3 Q) eprivate:" W1 F; V: z: X& v& }9 l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 W7 L6 J( o& X! ~2 E# R3 r# k3 pDWORD m_dwPos;
9 S' ?( o9 d- S: E& }, }public:) O3 v5 m; ~" m# _/ ?9 J
void Add(BYTE nIndex)* b3 @' t& }$ P6 z# K8 ?
{ Y7 S1 i: q& n) R
if (m_dwPos >= MAX_INVENTORY)9 ~; T9 ^" _. ?3 {
{/ d" G8 }6 A, a% k
return;" r" l% r: ^0 E6 Z
}
6 p+ u1 S! ~# d! ~# D- s: K m_Item[m_dwPos].nIndex = nIndex;1 s1 L. _8 q7 @- {$ f, d6 S& d
m_Item[m_dwPos].dwId = m_dwPos;
9 p2 Q% w9 |+ \6 G' N1 P0 o& ^3 c& q m_dwPos++;# g# N$ q2 d }, _
}
' M) y4 T# c8 M% E7 U1 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ L) C* T. k- W" P9 i1 N" m
{
/ G+ {3 t a8 d1 ^" k0 B! ~' B for (int i=0;i<MAX_INVENTORY;i++) }) P/ \- ^- ~% r l
{
! B9 \# t2 H% S5 @# ^# Z1 B if (m_Item.dwId == dwId)5 ?! _8 F) K9 V: K$ ]4 {. O, Q' v
{
# u; I% u+ t! l7 M return m_Item.nIndex;
* d# ?3 {& _ l, y }( B& m. ?) m% I$ Z: D$ ]
}
' Q. E* C1 a3 G# c* i/ \- y return 255;
" A+ v) H- J( K, F' i9 H/ r" v}
& s/ [9 n# c( u8 D7 S) r' Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- U8 a# j. j( Z/ Y, |{
6 \" e, s" K, n4 p5 w BYTE nTmp = 0;
3 v5 D% \$ a g bool bDest = false,bSrc = false;
7 h* I* |4 h% n- p for (int i=0;i<MAX_INVENTORY;i++)* x) j+ d& d6 l5 ?5 k& z, k+ `
{8 ~2 p9 G9 A7 k& w5 K c# l
if (dwSrcId == m_Item.dwId)& U2 e8 ~; T+ _4 |3 u4 J- m% a
{
: [$ }3 X C7 o //id相等 则 改变对应的dest和src* v* {8 p/ V9 [( O
nTmp = m_Item.nIndex;* e z4 ]+ P) W1 }/ m/ Z
m_Item.nIndex = dest;% Y" S7 i" w+ v6 x# M- @
}/ Z& s8 y# h( g
}) f9 r5 P9 e# W
//临时数据保存完毕,交换开始
9 ]: b5 @ ?# h9 T R for (int i=0;i<MAX_INVENTORY;i++)
9 J |' W/ T1 m {
+ J* L E8 M4 X1 B0 d1 _# k if (dest == m_Item.nIndex): }4 h, F0 V H3 P. c0 x
{
1 _! p& N% }6 t2 }3 H) s //id相等 则 改变对应的dest和src# n+ z( w. o6 ?) A. `. F2 d! F( }
m_Item.nIndex = nTmp;
8 C, B( ?3 ?" k3 V0 ~$ d/ |: Z }
d- V0 q/ ~+ G2 k! S }
8 G! W, E, W$ d+ d: P6 M& _% v2 _}
: G5 ^7 n* B7 c- h};
* z N% }; R" l-------------------------------------------------------------------------
+ E# V" K( O: F# w) x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. v& c! ~* x1 O5 Z0 K3 N9 w7 [4 V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& _8 y" C; [# w6 X" f, G; I+ U
紧靠其上添加:) o7 [# J* z% G9 F8 _) P, u5 I
if( pWndBase == &m_wndMenu )# D# w6 B+ U7 o1 R* ^, e
{
$ V# m; O. C4 U/ j switch( nID )
# G( W0 x% G8 R e' A; b" A# V {
- I6 i3 @+ Y ~5 S) }9 G1 s6 q2 \ case 2:
& a# r! c2 B1 M+ \! v; C& [+ j {0 B& G: \# j$ q/ ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& Z( P8 H8 ?% w1 \. j( Y% o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 i; P! \& ~) I6 |+ @+ Y
{
. i) i+ [0 s0 H; P break;
! t( A! _2 M" z6 P6 F$ r( v }! `* D" Z) C: V; f6 a: a$ E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& P( b7 a" C N+ i {
" b; z8 \* k. H/ s2 X! l6 ^* T% q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; u9 {. S9 U; \, M! y
if( !pItemElem )0 o7 l/ i o- i
continue;" w, {6 j, ^9 W; j& ~7 y
if(pItemElem->GetExtra() > 0)6 i+ p: ^' x, e, w& W: G" J. k# j
continue;
) L$ r7 t6 w8 b if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / p. Q: H" ]" I
continue;) g& r& \9 J, }" `; a6 Q1 @; s6 @; z \
if( g_pPlayer->IsUsing( pItemElem ) ). Q4 W0 y& W4 O( T. ~: k8 ]- m. v
continue;+ W4 C! V$ S. P
if( pItemElem->IsUndestructable() == TRUE )' X1 [% Q0 l P1 K2 M N. O( c
{
6 @# a/ t! E% g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 J" X; C. D" g7 O+ ^) Q continue;* \$ u& b5 k4 C, N; t# _: f
}* w4 t3 k' R ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 } x7 t) H& B9 i( P }5 R, ?* e2 N h: B- q
break;# E9 Z' D/ s. w% Q
}1 ]$ h- U8 O; S: ?* R! J* h
case 1:
( c f7 x4 N& Z% `& L1 j3 X" K {7 V6 L0 d+ p1 Q4 W* D% ?
//整理背包
1 T- M9 \$ V7 i$ R* I9 G7 _& z //////////////////////////////////////////////////////////////////////////( _2 H- g: e0 ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* c D! \$ q: v, n //////////////////////////////////////////////////////////////////////////
' U2 Y) w; i8 a" D2 y //////////////////////////////////////////////////////////////////////////* }0 u& w3 n" {8 D% w) V
CInventorySort* pInvSort = new CInventorySort;7 f! B" G: P/ ^4 k: ?
vector <sItem> vItem;+ l6 c( Q0 ]' g! h
vItem.resize(MAX_INVENTORY);//初始化大小$ c3 b1 N+ b7 `
//////////////////////////////////////////////////////////////////////////
5 {3 A3 N" B2 k //填充数据/ t" J( u6 N6 l) b% B" l: \2 @
for (int i=0;i<MAX_INVENTORY;i++)1 E. t6 v( c( Q, Z
{1 w) u* ^1 [% O0 k7 c& D" f- U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 P' ]7 }( d: k( K! r if (!pItemElem)
% X% `' z' s+ d0 `6 X4 Y {, `6 {( K5 k- r! D- f/ j
vItem.dwKind2 = 0xffffffff;
) C! u w$ A/ Y* p vItem.dwItemId = 0xffffffff;
% m1 ~3 V7 X/ _; ^+ K2 w vItem.nIndex = i;
1 `. h3 a# s; m, h# W }else {+ O6 g" q: R4 y: v. E9 i
ItemProp* pProp = pItemElem->GetProp();
, v4 G: g8 a3 E: r- { vItem.dwKind2 = pProp->dwItemKind2;
) E0 v8 _& f8 M3 P( m/ x% N) _* y* z vItem.dwItemId = pItemElem->m_dwItemId;
8 k, ]+ E( C) Z) @: @+ z vItem.nIndex = i;
9 `. T& |( k0 M, r9 D' j; W; h }) S5 s" h: M& F) B& U* w3 s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. C( V# l- t4 J- c Y0 B3 i }9 H6 U: w- j8 s
//////////////////////////////////////////////////////////////////////////
4 \- v9 ~1 z3 J* p5 l5 C& j ^ sort(vItem.begin(),vItem.end());//排序
1 d5 O7 z6 G2 q8 ~ h, B //////////////////////////////////////////////////////////////////////////5 a' F! T& n, f" g3 s& l' _& r1 y
//交换
4 D1 W7 n* `: r' V6 \ for (size_t i=0;i<vItem.size();i++)
1 q1 R8 g$ Q5 A5 k6 p+ @ {1 l0 \9 h1 ]9 _6 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ V% y8 q& o N8 O [9 A pInvSort->Add(vItem.nIndex);8 k; H- j( y5 @* `% e! M
}
5 b o; d4 |" |# y BYTE nDestPos = 0;
8 j+ }6 ?3 M! L6 Z. F( l for (int i=0;i<MAX_INVENTORY;i++)/ S3 S( ]3 O) u2 b
{
% c6 a1 G4 P, t+ n6 |7 D, k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& n/ t. l7 U; Y" X
if (pItemElem)' T8 B2 ^+ F; f$ r4 C m2 S
{
) V% ]6 P8 h! E6 q. S6 e if (IsUsingItem(pItemElem))" l/ I' b- z6 J! X O7 I
{" C" ^5 v: p( N7 M+ D' h8 w. n
//这个位置无法放7 K% i9 _: n# E5 L* P
nDestPos++;& z3 k; L( U/ D) [1 ? X
}
' ?: G, |' A4 R }
- R) }4 N: ]# U, k BYTE nSrc = pInvSort->GetItemSrc(i);- l8 R1 p6 s! n# j6 R4 l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 D- b# q' o9 z7 P+ ]8 b$ E
if (pItemElem)4 @8 p5 u C/ u% L3 Y6 `3 h' I
{
5 G9 N, i) S* u; u5 o' {8 q- ~ if (IsUsingItem(pItemElem))
0 C: `! d* q2 q& T# a. Q {
. b7 ~# {1 |5 l, t3 l( [: A |. d4 @, Y* j3 { //这个道具无法移动,跳过- B% }, _7 i$ m2 o i
continue;
% s9 |0 j7 q! e3 g! D }1 n0 H' X. F3 |, ]! O+ p8 H
}else{
6 M& g. @7 E0 ~9 Q //空位置 不用动1 ~% ?! P) k* f3 ]- [
continue;
" C. i3 N; u( q) S }8 B$ i2 j* E3 _% R7 X5 {! a! h
//////////////////////////////////////////////////////////////////////////
4 K+ `% S ~8 w0 m8 k //开始移动+ X8 \; \" U# K1 n* i$ E
if (nSrc == nDestPos)7 @ \# Q4 c" z& E# S
{
: `1 a2 R& w7 n# A0 d //原地不动; g' A! U$ g! w; y7 y! b( q
nDestPos++;1 D I `; O g$ \7 Q& ^
continue;% h* p3 ]9 G: G5 w8 }
}/ E0 F2 g! @- u! l( [
pInvSort->MoveItem(i,nDestPos);) {8 D, S0 _! L0 [3 }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- M3 Z1 ^4 {6 } ]7 y" u& {6 d
Sleep(5);6 G) g" B3 U G- I0 M+ I
//Error("移动 - %d->%d",nSrc,nDestPos);5 \* C: A# n: v, l0 j R- z
nDestPos++;1 V4 @( J a- `/ x* ?, V
}
, }9 u0 u8 X- `4 i7 t5 L. G //取第一个元素的信息
* `1 {" G( _, z# D! O /*( ?" m: o" G: i2 z+ U6 Z$ w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 Q, W2 R" R$ M+ B d {
5 P2 `2 d/ X6 V! `/ B9 L3 u9 G Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" Q, }2 W3 S# V. R5 N$ K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 x) n6 n/ h; J- L9 E O! Y! T g }& m9 S( X1 T3 u3 q; t* {
*/
: `8 N9 @7 M: Z* K3 _. k //////////////////////////////////////////////////////////////////////////0 u* |" A1 g# D) _' U
break;
1 I# X0 ^* m( w$ L( D. e4 j( ~ }
) w, n7 B& W& g2 Y4 M; U! ]- Q: T- [% \ }
& z( D' I9 u0 e8 s}
' m5 l0 K# w- ym_wndMenu.SetVisible(FALSE);* G9 i: X6 x" a, }3 e5 |+ N+ W
- n5 j: U; F" c+ ]--------------------------------------------------------------------------------------------------------
& \' J! b$ ~3 C9 |' _# ~6 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" [6 S- N. S/ h# ~: n
{! h- m6 F& r! E( W z
BaseMouseCursor();
& N& m( s1 E. h4 a. u}
, {7 I! s! H& K& O6 {在其下添加:9 Q1 m$ S( |% U& l. h2 O& S0 ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 [$ ]( ?1 x( b+ L" S6 c( }9 ~
{
8 H! x/ t K# O0 ]4 cm_wndMenu.DeleteAllMenu();
7 S3 {! q. n; y" b6 Hm_wndMenu.CreateMenu(this);
- ]1 F2 k2 B+ J+ em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 l4 c6 }( M: N% t5 i; ]1 M1 S5 w7 Q
3 I8 R3 e& d% X1 K* Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- f5 O) S" a! B/ o9 b
{7 |; Y, C; P, Y3 Q7 a
//P以上级别才可以删除所有道具' P5 {8 Y% ~& Z. U6 x7 Q8 p4 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* [3 y7 ^* u" g! q3 y}) j) N* z2 |. Q3 S! ~9 a6 N/ c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 G/ G) V7 j# k/ m. U7 F, pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( u5 q: v ?- E% _4 n2 S) I
m_wndMenu.SetFocus();
7 `" L( }# v& L8 o}
C3 `8 d* m- K( M% |- O------------------------------------------------------------------------------------------------------------6 T0 y& L2 `( |0 z; |
*************************; B7 G6 A6 E5 O
WndField.h文件" _4 r0 \& {. G- `6 L
*************************
b) B3 @. p; C7 P+ V搜索:BOOL m_bReport;
) t/ Q" ~: n5 E9 |其后添加:
7 V8 R8 f2 l7 T: RCWndMenu m_wndMenu;2 }; X( {% o2 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ |9 g( q4 B" G# p
其后添加:+ y* E0 s. a( K1 d. X* h
virtual void OnRButtonUp(UINT nFlags, CPoint point);) y, q" j( ]$ {
* |" X; M. M7 t2 V/ e
$ Y2 O7 W8 F9 D$ ~8 K$ U/ `
|
|