|
|
源文件中_Interface文件夹下WndField.cpp文件
3 @2 Y1 F& W E* b9 x) W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, v8 J- @& C; P) T* F/ l0 Y, A3 C1 n {& i& X9 d# n
struct sItem
, g2 m3 e1 R& x i6 Y# I' o{% R0 j# [, W1 L+ H/ Y( M
DWORD dwId;' E/ a0 J P- @, U- y
DWORD dwKind2;0 { k# l9 f) Z* q" S
DWORD dwItemId;
4 B5 o9 Q! w1 o" a9 {% ZBYTE nIndex;
. _: r$ J1 N a( i2 q( c$ c" xsItem(){
) {# A# z, C# {8 X7 q8 A7 h! Q dwId = dwKind2 = dwItemId = nIndex = 0;) R* v, X4 k# G5 X% f
}" Y" s$ G8 m- \/ c$ j+ s
bool operator < (const sItem p2)) Y8 i9 n0 r! W* |0 P7 G3 S2 Q' ~
{/ @/ R. P, M3 |! |
if (dwKind2 == p2.dwKind2)
# \8 l# B: @, \( `2 L) Z3 q4 j K {; r# j* F% ]1 Z6 O9 u# D3 n
return dwItemId < p2.dwItemId;
9 k, S5 U+ k0 b$ ` d }else{- O9 k+ v. b. R# V
return dwKind2 < p2.dwKind2;
2 g& S9 O0 X2 h$ H, w$ N" [% f }* x; p( Q5 y- P( [1 s
}
) x' E. W' ]) ]1 V" P2 ~};
# p& Y8 {3 @9 S8 x/ r# Z0 w0 gclass CInventorySort3 A( `7 Y& x" J
{ u$ D8 n/ Y) g" \1 `
public:' F8 J% y, }, L: ^ B
CInventorySort()% G3 v8 N! t, \$ O
{1 v" H- w% |" s1 q
m_dwPos = 0;
6 Q5 `# X- o* b7 p# \$ t}
% s# _8 X6 P: l2 k7 T; y~CInventorySort(){}
. y. F- S% B& ^4 A1 u, gprivate:+ Q5 F* F0 b5 ^8 F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 b+ ?/ L! t$ W! hDWORD m_dwPos;
s" E! V4 C& [) v+ q: I& epublic:- R1 S, X1 t1 D c
void Add(BYTE nIndex)' B% g; e/ r O8 n4 K( O
{
3 S% `0 \/ A" K, t* C% ? if (m_dwPos >= MAX_INVENTORY)
5 {" g% \; O* j( \! |! j% | {
$ G4 k+ {, }3 ?" B' F, H$ I return;9 _: ^1 j1 K0 y6 q% @
}
6 F/ y3 v3 u0 f9 V3 U @/ l m_Item[m_dwPos].nIndex = nIndex;
) y+ T& t( A0 l% _& G m_Item[m_dwPos].dwId = m_dwPos;
5 @. u6 P1 y, y. s. Z m_dwPos++;
: M7 a" w+ ?& j: `1 F4 [}
+ J7 ^0 I/ I! `! |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ B s1 F1 I4 {* i1 M{& I& }+ {2 T* f9 E; t
for (int i=0;i<MAX_INVENTORY;i++), r9 ]( O; ?. r2 R
{, X8 ]% n! q! i' M8 O6 P4 e
if (m_Item.dwId == dwId): N+ J$ p4 r, W4 n9 s) A+ ^
{
$ e/ H1 p, Y/ K9 T4 Q return m_Item.nIndex;6 h d/ `, a/ j5 ~- C5 Z
}
4 D7 r3 H* k( a+ ?9 V }
4 h7 w8 \1 Q+ n* `5 q1 F3 f return 255;
9 s4 N0 `' U0 |/ @( x- D}4 U0 m, D/ o1 L$ |* J" c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ D8 J5 D& T3 S8 N1 [{
2 M7 {6 \) E* J# | BYTE nTmp = 0;3 @* Y# n/ p3 W/ U# R, _
bool bDest = false,bSrc = false;2 H$ n7 n. Y% j9 [% h$ y
for (int i=0;i<MAX_INVENTORY;i++)
R# o: N6 B/ `6 z/ s { o2 K* Q; y, L: G
if (dwSrcId == m_Item.dwId)( R0 `' [! J$ \( e1 }1 v p# ~
{
! E- x$ F' ^& g" A2 |2 e+ f //id相等 则 改变对应的dest和src3 f Q' r: u' b' Z
nTmp = m_Item.nIndex;
( s: O" E; C$ Y) u( C/ ? m_Item.nIndex = dest;
% l. e1 p6 n& Q# d- g; w7 {* H. b9 | }
( G+ r: b+ r7 y }. }9 c# V- w$ q
//临时数据保存完毕,交换开始, _, p* V9 z R) S. n
for (int i=0;i<MAX_INVENTORY;i++)
$ c( l" B0 U8 u- n3 S {3 y! ], S% j8 P1 ]- @7 `2 B/ ?) p
if (dest == m_Item.nIndex)
% y, k) X6 |. o {# u3 ]; m2 H8 Z+ N. W. E
//id相等 则 改变对应的dest和src
3 Q- Y# Y; ^7 F9 Q9 ^ m_Item.nIndex = nTmp;
( E$ V. B( {: s& e( s* r$ p& v }1 Z2 ?+ M# Y* e% h
}+ V o: ] L! j
}" w, u; P, t6 [' S
};0 k1 m- U7 {" n O2 t' \# @
-------------------------------------------------------------------------
% V4 y( {9 c1 n5 n! z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) t% @2 d3 i* R u搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' @' a2 Y$ g7 |. E6 Q
紧靠其上添加:
5 y: t- ?) K, g' C* R# _, M* [if( pWndBase == &m_wndMenu )3 X3 ~# R6 l) c# `, h
{
0 d' }8 [+ v6 N7 ^ switch( nID )
" @1 |& g1 q9 P4 H {6 h% \2 i8 f/ ]/ `7 _' X4 o$ R% U
case 2:9 U9 c: f1 h) W+ |0 H5 }" a
{
. }" m- l7 l& @7 ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 n# J! ~+ k2 A4 U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% d; N- H& P, R( |
{
% P+ d0 w g: P break;
7 r" k( R0 ?. N) m- A; R! P1 H3 B }8 t; U1 q9 A: B6 v0 C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' J; o/ i, z( [7 J4 P0 @
{( P; d1 I" V; }: A5 A2 B2 M8 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- s- X; x; x& t# z# c. }- U if( !pItemElem )7 W$ r; {+ O2 L; u8 x
continue;, k/ Z, c( o S9 B) J
if(pItemElem->GetExtra() > 0)7 b' r3 ~7 S3 x; N
continue;( D8 ~+ O+ s3 Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. U" j& \3 [! m2 A" g( S s continue; \/ Z j, _$ T) H" Y
if( g_pPlayer->IsUsing( pItemElem ) ) z+ ]/ p3 o d8 w/ U4 b7 p$ M
continue;
7 j6 a" v0 q' g6 o& H0 l! N if( pItemElem->IsUndestructable() == TRUE )7 K( H% G1 E( m% o1 l. ^. j
{
3 S' }9 @) s k$ ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' l2 A2 y0 A* u k3 M continue;/ f( U; M# i* Q2 O) j6 i
}) Z9 l7 v* W6 E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! ~8 ^8 ]' X; P- x, J. S& a" I
}4 A ?1 s+ o2 n
break;& Z( D3 q k k, o. R
}
3 @9 H; s: E8 f5 l7 {; L1 r case 1:% d# X( p" T, ] g+ h+ K% |
{
5 A: @9 V+ U! x: ` N( S //整理背包
! j: G. d8 b, J7 }" x+ n2 j4 g //////////////////////////////////////////////////////////////////////////
. \& y% C+ C2 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) N* X; o3 |, A- f //////////////////////////////////////////////////////////////////////////
& Z* ?2 N V0 ` //////////////////////////////////////////////////////////////////////////. i3 }) P+ ]' @ K& b4 ]
CInventorySort* pInvSort = new CInventorySort;) B; r- F6 U. M, C9 ?! I
vector <sItem> vItem;. m/ ~3 Z. L& G5 d3 o# s
vItem.resize(MAX_INVENTORY);//初始化大小
2 F+ E5 o- V; [4 m6 ] //////////////////////////////////////////////////////////////////////////+ I) ~2 U A( D
//填充数据
9 d8 g, V: P$ ~. n for (int i=0;i<MAX_INVENTORY;i++)7 a* ?4 w- @; X0 r \, {# h- b" y' q
{
! p1 H. J k/ X6 T, o* { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' H+ Y& [) w# C6 l9 r) I( S
if (!pItemElem)
$ F; t! `6 ^* y$ ^ {: G% n1 c9 s) }
vItem.dwKind2 = 0xffffffff;' `3 e, H/ ^ M& k+ ?: Y
vItem.dwItemId = 0xffffffff;% j( s5 R. P& I# T
vItem.nIndex = i;
; Y- I7 ^- j6 g1 o! X; w }else {
* {" m- B, L" P' L ItemProp* pProp = pItemElem->GetProp();/ h# h3 i2 f5 G! T3 r' v
vItem.dwKind2 = pProp->dwItemKind2;' a$ ~4 f5 ] B" J) U- W; @
vItem.dwItemId = pItemElem->m_dwItemId;) C& k8 E) }7 ~9 |' [2 A( I/ T
vItem.nIndex = i;
: c4 t) l# b$ m( e( v }% o& f- @8 t4 B3 w5 H* Z8 |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ \$ C/ F/ Y1 R" H0 Q
}
7 h, B1 v3 s! V0 A; C4 o: B0 _! d //////////////////////////////////////////////////////////////////////////
6 X# c8 i9 m) w sort(vItem.begin(),vItem.end());//排序
7 z" A B- Q2 R. l3 V) X //////////////////////////////////////////////////////////////////////////8 O! y+ E: ~+ e' O m3 e% s
//交换; R. |% ]$ h+ R9 c' e5 s
for (size_t i=0;i<vItem.size();i++)- ?) K# k5 ~8 R# D3 T7 }# D
{
6 f% F( _& Q( v0 c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* t6 s. n, c6 j! K
pInvSort->Add(vItem.nIndex);
1 o8 u1 `# ]5 _# F8 t: _1 e }6 Q6 r: h# P. V4 R2 O1 \& Q
BYTE nDestPos = 0;
. m1 N7 p1 h. T9 S7 x for (int i=0;i<MAX_INVENTORY;i++)
4 g4 x4 m1 x/ ~1 T; y9 {; g {+ I* p. W2 u' f, F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- G9 h9 Q/ l" V
if (pItemElem)( h& Y; N: T( h0 r4 p$ C: L6 u* J
{. k$ C5 ]2 y! M B
if (IsUsingItem(pItemElem)). O" \" k% V$ \8 h, i
{; R* A6 j; c; b8 L. Y/ O$ o
//这个位置无法放& e4 J" A- w- g2 x9 p `' W2 t' v
nDestPos++;' l4 A2 T% o6 Q' z
}
# u' L- v5 f: ]" o6 @ }9 O) p. `: C+ P6 a
BYTE nSrc = pInvSort->GetItemSrc(i);$ A$ d. c+ g* P+ e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" v! G: G. R- c. C$ S' }7 u if (pItemElem)
! V+ Q# C3 @$ m { N8 B4 w; C( _0 p
if (IsUsingItem(pItemElem))
) z( E* W: ?* ~- N }, u {
9 `) O/ u; X$ M/ x: U //这个道具无法移动,跳过
4 o2 g( \4 K* i8 L L. q( H continue;
8 U4 P6 v: y( @0 N4 L5 E E# B _ }' {" F7 V' G9 q6 s
}else{, R3 U; L7 F- e) Q( T2 j
//空位置 不用动
! f l3 @6 x- k6 I continue;
0 F: ~( W8 S9 N& p2 ?8 |( r }! \& j$ |2 ]0 `6 H* K
//////////////////////////////////////////////////////////////////////////8 m8 a0 Y: ?1 J5 x ^0 K* F
//开始移动% S* U- E# s. ]6 m0 o7 D0 q
if (nSrc == nDestPos)
0 ^9 x5 _% Q' }; K( `+ ^; {; P, Y1 X {
C1 w f) v) H //原地不动: }" C m; W2 D7 S; ~
nDestPos++;
& g B6 q- Q" @2 u8 i* c continue;
: k! A4 J! f( `1 e- Y) u }6 i! \" V) u# q2 q; \8 Y9 O, n- r
pInvSort->MoveItem(i,nDestPos);& j5 x+ ?" Y0 ` D! t
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' _: h7 J) P, A1 ?0 Z4 w Sleep(5);& s! E* v+ R; G# ]2 q% O0 q
//Error("移动 - %d->%d",nSrc,nDestPos);
# i( I) t3 E+ C3 x: L nDestPos++;7 Z# u5 J+ Q9 `8 X4 F/ z
}
$ F: l& S5 y3 b B5 k# u: I2 I //取第一个元素的信息
# D, y$ X; V2 X% d! U /*$ u5 U6 G5 J" r: K7 W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 w5 t! f: R1 W! Y3 g$ ?
{
# A2 X- r7 p" c, X; ^0 w; d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 F4 [7 q' H1 B+ J* B4 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% x. v& e* q: N. E }9 p/ w$ C- V: j5 s1 v1 S. c9 o
*/
$ M: ^& [7 @. D //////////////////////////////////////////////////////////////////////////, f' c- W- ~1 A: `7 ]2 |8 T
break;( F: B# q0 d# B! v+ i" [
}8 M3 }7 f# J1 L$ p# O
} + w, U0 Y4 z4 x" c5 H9 ~7 ]# e
}0 ` Y* T7 `2 J- ^
m_wndMenu.SetVisible(FALSE);
/ E% Y$ s3 c+ ~( u0 N8 j% M
) ]; V7 [8 K+ l! e7 K7 Z7 T--------------------------------------------------------------------------------------------------------3 m7 N* T8 z" d) M% Q; N1 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& k/ K3 d# j- n6 T9 Z
{
, s! o6 E5 k. p1 qBaseMouseCursor();: ^, Q$ j. b1 t; V) {; A
}
6 w% x3 ]$ t* g+ _& M5 s2 }( Z在其下添加:
0 [' i) R! c2 F, ?/ H4 Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 [; i# s' i6 ?; ^! h9 t
{: b/ p! g: k! d0 @) Z6 _2 X
m_wndMenu.DeleteAllMenu();
+ L7 Q* W, W4 K* P0 x# O4 fm_wndMenu.CreateMenu(this);
. t" l7 D' P$ x4 G& Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* [' i" l3 S* \
7 ^9 r. V% r cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" |6 }# @% {' p4 g# E+ h" z
{ w( q P& q7 L& i1 y
//P以上级别才可以删除所有道具
9 z7 s; q; T4 J9 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# v0 ~% v7 \: r6 y6 H z
}, Q+ `, I8 o' l% d3 D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: B4 p# }# i& r7 m/ `7 zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 q5 ]9 J7 F. y" C% c3 L6 f+ `m_wndMenu.SetFocus();
( D/ k4 k2 c! B2 f. G* O' w- K: B}
, r& t# W1 Q: i$ g3 ~: z* z------------------------------------------------------------------------------------------------------------
) m* x; i1 v, i: X2 K4 N*************************& q4 j( C' w2 \( [! v8 T
WndField.h文件+ z9 R' B! ~9 A1 y1 T
*************************1 F7 x8 T; w' t% h" C4 @
搜索:BOOL m_bReport;
; o; Z b) j" G- j$ f其后添加:) E: z8 A$ ~# j- J C2 u% S& |! q
CWndMenu m_wndMenu;0 e& z4 P2 H$ [5 q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" u% I+ n. n, e
其后添加:8 I- x8 Q2 T$ G2 F! v5 [
virtual void OnRButtonUp(UINT nFlags, CPoint point);* a, p; y( d& _* g
# I7 ?( _, ]* x2 z
' E3 |) X \" K2 a3 J6 |0 L& k |
|