|
|
源文件中_Interface文件夹下WndField.cpp文件, z) J% R% K6 M Q& @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! b3 d2 S n( m" o, f
8 ^ d( |; h9 o! xstruct sItem
6 K6 B( t2 H# W% q, {{
) G" Z0 n4 @ J9 m3 pDWORD dwId;
t) G, p, p3 E. L2 a& {9 b% k8 r* }DWORD dwKind2;
( S8 a- `) t$ z9 pDWORD dwItemId;) O, h) a: O% m5 o- ^0 k: { Z
BYTE nIndex;3 O5 Y, T+ {8 H |, H: C8 R
sItem(){
' i2 |+ i; x+ F0 K/ B7 [ dwId = dwKind2 = dwItemId = nIndex = 0;
( ~" ]( I' x* ~7 O& {}# C' x( L8 W1 r( o
bool operator < (const sItem p2)
# L. e: n' K/ `{
7 i- u# x7 a' ]! Y ~ if (dwKind2 == p2.dwKind2), Y- ~" _5 g1 U% E8 [/ E. _6 Y9 K
{
! ?8 m' d3 c- z; \" u return dwItemId < p2.dwItemId;) E# [; S1 Q3 `7 V( h+ Z
}else{
3 J- X* _7 P- r5 a* Y# @ return dwKind2 < p2.dwKind2;3 J6 u; r- a" M3 @8 E; g' o) r
}$ C! ] q. _) `3 l6 c+ m! r
}
. P7 {& Z) _( a2 |3 V3 g4 l};
# E, U, S5 v/ G' Z5 e7 [class CInventorySort! ^0 o0 ]& z6 r9 L4 t
{2 @; R2 I( k: h B; A7 |9 W. e
public:- w# O' r2 M7 P
CInventorySort()
! I) {0 s' g$ W, H* `& G{
+ d0 Z( F1 c# S' D* _ [0 Z% W5 n8 t; ] m_dwPos = 0;
- L6 m6 q6 p5 p9 W! U4 I}
4 A6 y7 S) E! q# Y. o5 @' X; }~CInventorySort(){}3 m7 Y4 W' _* u$ t; M C- ^& [
private:
$ q+ P# `3 L" m( ]9 Y isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) V) m+ T- v+ K% ]/ k3 L. g4 GDWORD m_dwPos;
' ]0 {) r7 ~/ Epublic:
- R: n$ L+ @( C& @* I( e# F8 K# Dvoid Add(BYTE nIndex)6 I9 f. {7 ^& V; e& m9 s+ b- F
{' ^: ~* A, S: l
if (m_dwPos >= MAX_INVENTORY)
) X4 c9 X( L- y+ s0 i {1 d# }& g0 ^, k2 C: T! m& i* C* X, P
return;
3 a8 L# O \8 }3 I }
, q: U- U- Z- L' F W* Q m_Item[m_dwPos].nIndex = nIndex;
' {0 w$ \7 P: ] m_Item[m_dwPos].dwId = m_dwPos;- }& ~4 M4 z4 I+ r
m_dwPos++;
& \/ a1 f: }" X+ W}
- C# `2 `3 G1 ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! y' V" F7 J0 G; ^{
; v6 ]: [8 i: s* Y: ^ for (int i=0;i<MAX_INVENTORY;i++)
5 F' G2 u( M& W' k {5 h- |' [# ]. ]4 i/ O( y. d
if (m_Item.dwId == dwId)
* U5 M/ O; u, l6 k3 D {
1 a M% ~. r+ V8 y1 t6 G: | X return m_Item.nIndex;
. b) s; R( G5 i }3 W, j9 ?6 ^1 \* [5 F8 }
}
, \% d2 h( Q& Q2 y9 n4 u1 @; o2 t return 255;# I! y0 D0 a6 \ M9 C
}
6 s1 M3 e `9 S7 @& f( P( nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 ^/ v* b( M: O s( F{% I y- {7 d4 L. i$ w, |
BYTE nTmp = 0;. f8 G) m) b8 I4 D
bool bDest = false,bSrc = false;) e8 i( R, y3 E7 L# ]! K1 w& [. Q
for (int i=0;i<MAX_INVENTORY;i++)* \4 r: R$ M: G3 @$ V: \$ {
{
r7 U/ T7 l4 K if (dwSrcId == m_Item.dwId)6 J/ \* T+ \# u$ j9 k# n
{: e, Z* O' T& `$ z
//id相等 则 改变对应的dest和src/ ]9 ~: M6 V+ W+ l0 A4 `; R! B0 c
nTmp = m_Item.nIndex;& w" q; V& A9 Z4 g3 `% i
m_Item.nIndex = dest;, N& x5 x' v# q3 a$ q. H( K+ L1 C: ?
}, K' N# ]: c# f( P `0 b
}. ?$ B1 b. T; _% n" f9 Q+ ^
//临时数据保存完毕,交换开始6 Z& i7 N( G7 J1 f! q
for (int i=0;i<MAX_INVENTORY;i++)1 F9 e: D) M1 ~8 e( ^
{# e$ O( u. R$ ~! `
if (dest == m_Item.nIndex). I/ J- o' J9 F. d, W; z* l) d
{ k& D8 R/ G$ E0 s3 q/ K" y8 h
//id相等 则 改变对应的dest和src
- S H6 P/ U1 [# y m_Item.nIndex = nTmp;$ }% q2 Q+ R& o& o
}7 A! N8 {# k) W7 x
}
( B5 k3 w- M: T}; u; k% S( X1 |
};1 y: A M. k0 k* c/ X+ ]) n
-------------------------------------------------------------------------
2 r: T6 _# Y+ t9 L$ T/ {$ g5 a: j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- X- g$ q4 j3 l0 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( t& I! t/ F- y* o% i5 z, f: h
紧靠其上添加:
) o, |; X5 g) `, Eif( pWndBase == &m_wndMenu )0 w) q0 U& [% V$ c) [
{
9 }5 i8 s1 k( G S4 f( m5 f switch( nID )
; X1 X2 K1 e0 b% \ {3 V. L3 T8 ]0 g$ a; a) u4 i4 G
case 2:
' p! z, \, y w* X+ C {' }0 }$ |) d6 n! W# G+ u/ i2 _
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' N' ]1 d+ B4 x( I* r" A. l& C if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 }9 \) `: F0 X& {& |2 ` M
{
* f) |$ D- Y# Z% Q3 Z break;
3 s: C- X4 A3 G }
% _- j2 B- i! z: {3 l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 E7 |4 A8 M5 ^1 D {3 \ A% z" g$ M0 Q5 z% w5 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. g, q& T5 @, W; i; {: d0 y+ |5 j) _
if( !pItemElem )7 v3 S( j1 \1 X; t. Y( ]
continue;3 V3 \7 L0 h1 M8 V. o# Z
if(pItemElem->GetExtra() > 0)
7 A; [4 |# V C2 ~7 E3 E continue;
; L7 T3 D; z* [/ J if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % z, |5 I# e1 j- ]6 p3 c
continue;# q; x9 m+ p2 f; l
if( g_pPlayer->IsUsing( pItemElem ) )
; q3 t1 u0 @0 p6 p6 n continue;
* z I. S" e' t7 O if( pItemElem->IsUndestructable() == TRUE )
' y# p8 U' y0 X1 b+ J- p6 n0 Y+ Z {9 a$ G7 m9 |- i. h) V8 }& F/ T; P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 ]2 g5 E! K) Q continue;
- A: i! Z m( ]! W$ I+ a }
1 j4 e- F0 W2 j. B g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' W8 d/ j9 ^/ K1 C8 @
}# x7 Y: G) y4 \" v8 N1 ^# k
break;: `$ u* Q U& b3 u( |
}
" ?& n( v" l$ H* u8 N case 1:
0 S* s' o" k* Q- e& f {
' O. b" x6 t2 n9 v //整理背包
! R9 R, W1 |+ G1 B$ }7 J! u //////////////////////////////////////////////////////////////////////////* ~+ v2 y4 j: m& f. U
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; o7 [; i* e0 Y( r8 |1 d3 n
//////////////////////////////////////////////////////////////////////////2 |* b' K* r6 M
//////////////////////////////////////////////////////////////////////////% @' X; O% a- Y! w% I% |2 Q
CInventorySort* pInvSort = new CInventorySort;$ q0 Q/ m% M& I% O( A, f
vector <sItem> vItem;
! ~' _9 h9 w/ o# e; f' M3 V: x! P vItem.resize(MAX_INVENTORY);//初始化大小
, A5 \4 w2 f% u% M$ U8 o //////////////////////////////////////////////////////////////////////////1 G) c1 s# Q5 t3 o
//填充数据" P2 G. v/ I! J+ d9 n. D
for (int i=0;i<MAX_INVENTORY;i++). G& ]; b }& ~# G& U
{( F1 k/ P$ B$ \2 s$ \- V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ O9 T6 z& K3 @ if (!pItemElem)
F0 `8 k" n+ V {! U; Z5 d5 K3 C3 X6 [ n+ z: g
vItem.dwKind2 = 0xffffffff;$ }( n, Q) M( J+ |. z4 X# a
vItem.dwItemId = 0xffffffff;% t t, N% Y: j$ U0 ^) Z
vItem.nIndex = i;5 K) t0 a' o: a) @; p
}else {: l. c( O7 [+ q+ G; ]' W' C9 H
ItemProp* pProp = pItemElem->GetProp(); k' d6 l' e" r+ k+ g% w
vItem.dwKind2 = pProp->dwItemKind2;. L f# x% t1 [- F4 n4 y3 r# i( [1 H
vItem.dwItemId = pItemElem->m_dwItemId;
7 [) n8 E. Z) d% E vItem.nIndex = i;
# C& z p. \. u2 S `5 | }! G _$ f H7 T8 I* |( D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, `- |: E+ Y" a x
}
( k! g0 w( |7 ~( B$ m6 J //////////////////////////////////////////////////////////////////////////6 x0 `/ ?: s+ {# q/ n% d5 y* T1 @8 G
sort(vItem.begin(),vItem.end());//排序3 J ? ^6 @, h4 Z" M3 Z( H: k
//////////////////////////////////////////////////////////////////////////9 Z. L' d e( c; I0 m! C
//交换; r- F, z# R2 X7 R& G# C5 o
for (size_t i=0;i<vItem.size();i++)- ?, J/ x% Q: u9 L8 `9 ]
{6 y* @. J& U1 G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
u {- q/ D3 \/ R pInvSort->Add(vItem.nIndex);
: b% |! O! U) v9 M) ^. U1 H! i% Z* v+ l/ a }
, O& D7 {1 J1 ?" x BYTE nDestPos = 0;
/ |" g3 H) V+ q9 j3 h" \$ l for (int i=0;i<MAX_INVENTORY;i++)9 n1 s# c9 \6 h
{' D/ ^/ a6 q1 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 s6 F6 E+ r/ f) W4 b
if (pItemElem)
; Z$ j" a. q4 F: s$ [+ I% r {4 O# p$ w1 h" j( D) }5 Q# t' b! K
if (IsUsingItem(pItemElem))
- F4 Y$ K4 v8 d; z2 x {/ t$ J& V( x- s4 i# ? { J2 S
//这个位置无法放
! y. T( d# R- R6 t1 P1 L/ E! }0 j6 R nDestPos++;
: d% f l8 p. n }& w& ^, l* q( }- Y+ f" `0 }
}) G0 A" l4 {& _9 }0 s' l) C2 n4 d* h
BYTE nSrc = pInvSort->GetItemSrc(i);
, ^; J2 A* L+ V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ v. H. r4 W- Y8 \. o$ t1 h
if (pItemElem)2 E9 R# @" d+ ~; W
{! c) A* u. @& i
if (IsUsingItem(pItemElem))
6 T# M7 M; i# _9 W6 E- S {
! Q% [ V# c& m4 I6 ?! x \ //这个道具无法移动,跳过/ w2 U9 B5 T& M; y5 _* H# |/ i8 H) }( J
continue;
5 @2 D! x/ @# V: e4 q$ d- U }1 |, n( M8 |3 D" a3 r" H( W+ t
}else{0 W, a5 {/ B5 y
//空位置 不用动
* |+ R. |7 h, z7 G: c* E continue;
+ E: n4 v7 e, y! X# I i7 p9 M }
5 p' k) O1 G i //////////////////////////////////////////////////////////////////////////2 u" H3 \1 e! P
//开始移动. |; a6 r8 h ?" e- [1 w" @% l
if (nSrc == nDestPos)
R$ |1 G8 Z) V! G* w {
# ~- J0 F$ d7 b g //原地不动
6 ?+ P3 G9 X4 U, r4 s nDestPos++;6 \: k7 v2 Y. [, ~
continue;7 Q6 y4 b, x' D& _
}
3 b% L& j/ b" l: N/ x' h" r pInvSort->MoveItem(i,nDestPos);( h# H6 y( c# k5 F& o; ~7 |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- ^( o; N5 P# p& W( O
Sleep(5);( h" w, ?9 R! l( |
//Error("移动 - %d->%d",nSrc,nDestPos);" k" D/ f1 b9 h0 m3 g6 b9 B
nDestPos++;
0 k, B# [9 ~; l. ? }; w p6 U# F9 w5 F( n
//取第一个元素的信息! u7 w/ m* k* ~
/*# r- ~. n# T1 O+ v7 k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ H, y. |, t* _- Z# C. o1 P
{
. U3 J' Q# W+ a) i6 Y: i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
G# A0 W: y. l8 L# u0 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 _# w' W2 c8 n' x
}+ V$ J2 U. u7 [: b2 n1 v, X$ y
*/
4 r7 d9 j. ?8 E3 W2 ^4 M5 K1 p /////////////////////////////////////////////////////////////////////////// a t+ h& E( J$ b; r: _/ ?
break;" O" E0 B* Z3 p) z' n
}( G: S, X! F7 o. t
} L- K6 F2 o, ~, L( @/ k
}
2 V K1 e: n, Ym_wndMenu.SetVisible(FALSE);
( c9 q k+ X( \3 Z) G8 q2 w# H# Q3 b) @( y% F' X6 T
--------------------------------------------------------------------------------------------------------/ P' e% Q7 _" a% S! x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); q: j) b" C9 v, V: \8 p7 N
{
" @) F" r- G8 q0 y* s' W! T( HBaseMouseCursor();
+ i: L9 J$ Z' V4 q7 M}
6 @- s5 h" V/ Q3 O( `在其下添加:
: k7 D- E+ [! G& |8 Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 p# k" G6 Z" X6 h{( A9 {4 c X" z b4 p
m_wndMenu.DeleteAllMenu();# m' M" B* ^/ {% z* N# V
m_wndMenu.CreateMenu(this);
6 S( j. `% p2 j% Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# \7 w* ^7 t* D( C b: L8 |- v; s6 T
8 B; W2 G1 T( r# {1 iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 _# l0 r$ ?! P" q2 }1 B$ ]{
) B" R: B" v3 ^3 N //P以上级别才可以删除所有道具
1 w/ o: D+ S8 q: U1 @8 x; U/ ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 z" [) B0 q& a- W+ [ m3 m! J9 K, P}" F& b1 U: ^: s6 U$ w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 s9 e7 N% K' A0 R Y! B2 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; H7 s* e( q: sm_wndMenu.SetFocus();6 o5 P U" _& n, b, E
}8 o; S7 m& Q; k
------------------------------------------------------------------------------------------------------------7 a' O& g3 V# g) {% {* f* N
*************************" g2 ^$ W2 q! \& U3 c% o* b
WndField.h文件
7 g4 c$ J f' v% I2 c' t5 y% ?( _*************************- [$ ^. z3 o, ~! @- j
搜索:BOOL m_bReport;, D0 W8 P$ {' y# N
其后添加:
4 B( Q4 l* P3 G6 Z+ ~& {* O* {CWndMenu m_wndMenu;2 G& V& u' V9 Q/ K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# F [! ^9 u7 Z2 {. R3 R
其后添加:2 D2 C; ]5 E* c2 X" q
virtual void OnRButtonUp(UINT nFlags, CPoint point);- t2 g& r+ m; _" J( F3 I2 f
2 y; S" j0 t9 A) s; y/ Z# R4 I5 O9 E4 a# R' k h
|
|