|
|
源文件中_Interface文件夹下WndField.cpp文件" X# |% M H) `/ h* t, G8 G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 `9 N& @+ |8 s1 I" B
3 i6 ]6 W" B B6 e7 @
struct sItem' V5 ?" ^, A/ k0 a: C" `( w6 X$ C
{
: v8 w( s7 E3 TDWORD dwId;
7 t# `* h! L* Z+ J& SDWORD dwKind2;+ R' x* t$ f& B5 t2 A. K
DWORD dwItemId;
) @) `4 @1 c* a3 N" \) LBYTE nIndex;6 g* b( E* K. B. a8 d
sItem(){2 w2 K7 Y$ G! p9 `3 C) f/ ^
dwId = dwKind2 = dwItemId = nIndex = 0;
& X3 f! o: {, K" k; d* o' c}
Z) w, _( j; V! o- M; K3 lbool operator < (const sItem p2)- X5 D+ \" {* T z" K. I, M8 }
{
: U) z- D8 R3 V# [# B* b2 W if (dwKind2 == p2.dwKind2)
! p2 S1 @& F, F" _ {; D6 b2 F1 E4 T K6 L
return dwItemId < p2.dwItemId;5 P3 c( G( @- m6 d0 m, A+ J
}else{
8 I T) o$ H4 n return dwKind2 < p2.dwKind2;
$ m. H8 Y# Y) ^ E- }' x }
) P+ o u0 B/ n o2 W7 V& e4 s2 \}
& w* |" g8 S, E6 Q};
" I* O3 [/ C$ M! Z: A: @class CInventorySort
) J1 T. k' _- K{. |) T% [; T: E& a/ e8 u' J7 r
public:& m) \# X, y5 z( d! b, `% E. i
CInventorySort()3 G5 `" H+ X/ w; ^: y- P
{5 P( `; ]! P; S9 J$ O' |$ G
m_dwPos = 0;; h/ O6 Q" B6 K4 m4 }
}* F" n2 ^) ~' K
~CInventorySort(){}6 R0 y: k( {. |, s
private:
8 f0 \; {' e$ o# XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 b* y+ z' E+ X; |9 s, bDWORD m_dwPos;
8 H+ A5 y' ?; b: @5 |% G1 S, jpublic:
+ s, E6 w) m) f2 `void Add(BYTE nIndex)
9 D9 Y) G# Q/ w8 `; o{
/ L. b" s/ [4 d5 c/ d% w) m if (m_dwPos >= MAX_INVENTORY)/ j" }1 Q# o3 `6 a# P
{
- a7 Q- K6 y) _) W5 F9 ~ return;
8 s7 B- Z; q3 M: O4 E! g }
$ v E% v7 t/ s; T7 @ m_Item[m_dwPos].nIndex = nIndex;
% H0 _7 i0 R5 ^2 E9 ? m_Item[m_dwPos].dwId = m_dwPos;
: ~6 A; A9 A; e m_dwPos++;
3 ]8 a* p n( t0 h- c9 }! ~} ?" e# d8 H4 Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) J, F/ C* I( b+ u0 f* |{1 C ]: Z# X4 n5 t2 F' e4 K
for (int i=0;i<MAX_INVENTORY;i++)
6 y5 C Y0 ^1 Q2 q' P& ] {
/ f- T& D0 F$ F5 e2 u2 Q if (m_Item.dwId == dwId)" C! ~; j: b% N7 r. R
{
- d3 A& {- D* I- w return m_Item.nIndex;3 i P8 K3 s$ s9 p# [5 c; r. C( U
}/ B0 y$ d( h+ D1 k, ~0 ?
}
& @/ T I3 f$ h" h return 255;1 C/ O+ F- d5 Z/ d% C0 m& ^ G
}
: i; d" n+ e. e* f! Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& ^- @" e; C, }" @, @2 [5 J! u
{
% [$ C8 `) ^" D3 Z3 I; l. b/ S! Q BYTE nTmp = 0;
# U6 o7 J# Y- S# A$ g0 [: y bool bDest = false,bSrc = false;+ m E2 [6 } ~) s! l
for (int i=0;i<MAX_INVENTORY;i++)
9 D2 K/ o( n- ^/ [- X& ^ {5 I% |5 A( N0 x
if (dwSrcId == m_Item.dwId)$ ?1 E1 [4 E/ V3 x& ?# \/ c, R0 h
{
/ I6 P, W/ Z: t, f //id相等 则 改变对应的dest和src
" j3 K8 H5 T' `0 ~ O nTmp = m_Item.nIndex;
3 {" d5 G- |$ f1 f' I# G m_Item.nIndex = dest;
) ?7 ~6 A/ Z9 n; i }" h/ ?3 D$ z3 r3 o
}2 r) b' C- a) o8 Q0 i2 ~
//临时数据保存完毕,交换开始
* E/ _2 w7 G: I1 x. R8 l for (int i=0;i<MAX_INVENTORY;i++)+ P: ?+ u: i/ W6 M6 |) U
{
. `- k- ?) r9 x if (dest == m_Item.nIndex)1 {$ ~4 R2 Y& H+ O) R. B
{. R: e1 v' F5 V9 M( [
//id相等 则 改变对应的dest和src! p1 d3 ^7 ~4 |
m_Item.nIndex = nTmp;
* L1 i: F' g6 m. B( f+ q }
7 F. \7 T2 o% W3 F }* e5 \, E% Y, B9 q5 @9 O" I; e6 r
}! O& m8 r' ?5 J( r5 m# J6 `
};
5 i: k; K7 T& @. x# J6 p+ m-------------------------------------------------------------------------
@ K/ K& z5 S/ s' A依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ m2 `- b( j0 T. x1 J2 r' @: Q7 I7 z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) L% ]" [8 {' ]7 |4 [' n, f紧靠其上添加: j" ]9 D; n- _; }
if( pWndBase == &m_wndMenu )
/ d2 x6 \ I! l8 r j. e P s{# k. y y. z/ e1 g' j" J
switch( nID )
/ R% w0 v; T& Z' ?) x. ~, z {
, a4 B& J- U1 N case 2:* p9 g: [# F' z/ F
{
7 x6 p) @' c. w4 o: ^7 }" J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 b# e# C, v. v, A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" ]; D7 U1 K9 E" X8 {
{8 B9 w* o7 T2 _- n/ f
break;% m3 Q! o. \. u! q) J$ Y% ?
}9 m5 m# y, \% X" y! H- z5 G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 C _+ t& J' W2 |% i
{
' y2 Q3 F! y; v. H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, o1 v$ q7 e" G# v4 [( r if( !pItemElem )4 T6 H3 _% j& ]3 `
continue;
8 i$ e0 x* P1 U! O' f% `& K3 J2 D if(pItemElem->GetExtra() > 0)
' c0 W! _" `7 A G4 ?9 O continue;* A" x4 ^& W6 U8 b; ~$ W8 n6 B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " r$ v8 c/ \" C0 A, ?
continue;
' d3 }3 \; s V8 C3 }# ] if( g_pPlayer->IsUsing( pItemElem ) )
* |* _( z5 J% p' Y* b4 A continue;
% e. o7 T7 n% q8 L9 C0 r7 ?* F if( pItemElem->IsUndestructable() == TRUE )
9 V8 w# w( B+ ]2 c" E& N# b {; l7 ^; H& K# c( `; @+ {$ j2 x/ J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ j% u7 N' Z* Y+ B( K4 r continue;
5 `7 J7 W0 Z2 f m- R }
" X, b" ^+ `4 t- k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! |& q% U1 F# `8 a, A( | }8 g5 ?% ^5 }7 \# k7 [0 ^
break;
$ `! }5 N! w5 w6 R# `; J }
7 s; @; P7 ?! _9 E$ D case 1:
6 w) A/ d8 J# a' H: {) G {
. C# ~9 ?2 h5 G0 C //整理背包
4 K6 B8 I/ k- m# q5 T3 ~1 w( k //////////////////////////////////////////////////////////////////////////
6 ]; T( o' Q% T/ Q; o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 q! V9 _! i; P4 n! j0 n
//////////////////////////////////////////////////////////////////////////
! B A* A% D$ u/ Q //////////////////////////////////////////////////////////////////////////
$ M& h: B0 D. x- [ CInventorySort* pInvSort = new CInventorySort;. {/ x& B6 ^, G& z
vector <sItem> vItem;
& v: O8 r/ a& X. a vItem.resize(MAX_INVENTORY);//初始化大小' R: J9 k' M, m) Z( @- P
//////////////////////////////////////////////////////////////////////////
6 |9 k6 W, P- ?- r3 q# V0 e& J //填充数据
5 k6 s) Y9 o1 [( e: X% H* A for (int i=0;i<MAX_INVENTORY;i++)% }; w# \( k) b" W# Y
{
3 w% O1 v( P3 S# X( z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: ?- C. q6 y6 H
if (!pItemElem). Y/ V) B5 I; F- K; l( a+ T8 }
{3 K- a4 E$ ]; t/ O6 ~7 D9 W% A9 Q; I
vItem.dwKind2 = 0xffffffff;- n# x8 T1 L4 K7 ^" A
vItem.dwItemId = 0xffffffff;
9 I9 L2 F/ _+ ^4 r. } vItem.nIndex = i;
1 {0 n! K& d) C1 D3 K% t% F6 }/ _ }else {- g( e8 P2 P& I* w2 O" c8 k7 Z
ItemProp* pProp = pItemElem->GetProp();# r0 A; {# H3 J. _
vItem.dwKind2 = pProp->dwItemKind2;
6 D/ [1 B: A: b vItem.dwItemId = pItemElem->m_dwItemId;
% [$ D: Q; [4 E/ G2 \: T vItem.nIndex = i;
9 E, \. A7 V# V9 C6 S }
3 f7 I# q3 \/ k% h4 _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" F! ?0 L0 p$ R }+ E" O- }: N: N5 _
//////////////////////////////////////////////////////////////////////////
5 u0 W# E& N/ A8 E N; S) S sort(vItem.begin(),vItem.end());//排序( b# H# a& |, i1 J3 _
//////////////////////////////////////////////////////////////////////////$ c8 P/ n0 L6 P9 {8 d# o
//交换" c0 ^1 e9 _8 r; D
for (size_t i=0;i<vItem.size();i++)/ L8 K) T1 ~! u* a
{7 a9 q3 J2 \. A6 i" Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
J0 `7 p9 U. i, g K pInvSort->Add(vItem.nIndex);
6 K3 |( J+ a) O" o }
0 r. G% b* H# u( s- f- W g BYTE nDestPos = 0;8 H4 y) X6 R- J' Z: s* R
for (int i=0;i<MAX_INVENTORY;i++)% F- |' G. V1 a
{- v/ P" P6 @8 }* G1 q* f7 n# {5 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, \# T3 D& ?& M9 s! w0 s- a/ Q if (pItemElem)" b+ Y8 o3 E' D+ }" @
{
5 y- B6 s2 x9 c# z3 t if (IsUsingItem(pItemElem))* E7 N; z( f6 P% D4 u
{
+ O7 @& _3 } l7 J5 A$ ^ //这个位置无法放
) |" \+ K1 B/ E; k. K9 a nDestPos++;
8 e( p% g; ?0 ^! T1 |" C( `4 B }
% t' Q: p& y+ t U }
7 U5 ]: ~( h5 H% D7 F( s BYTE nSrc = pInvSort->GetItemSrc(i);
8 k1 c, @7 ~( d! d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* U0 |3 s) ~0 x7 n, q3 J if (pItemElem)
% K5 A# B* B: U6 U6 a# g* e2 e! t {
) |1 T$ r: I3 G* m6 q5 F5 Q) {# w if (IsUsingItem(pItemElem))
1 q: {/ p/ E a. o2 A {
3 K, a# \& C8 r" x# S, G! h5 d+ A //这个道具无法移动,跳过; @4 M/ m( i( R$ {1 P6 \4 M( R
continue;
7 x3 K' ]! G/ |& _5 [& o3 B9 M }
* b% e) @2 r) {* G. e% x }else{& R* J: w: I4 D+ Y7 N
//空位置 不用动
& L- P3 ]; T: k: n( x- U continue;! q# R+ V2 ^3 V9 q6 q' R
}4 D4 u$ n% l4 A8 ]1 [7 h' t
//////////////////////////////////////////////////////////////////////////
+ P: C+ N( B5 e7 F' B" }2 A/ E% @ //开始移动
5 x2 X, n& h9 r! S7 k if (nSrc == nDestPos)
4 f5 `% \5 f, X/ E3 n7 r7 L" ?$ m+ y; w {
5 I, ?( o7 L3 J, h3 i/ y //原地不动
1 m1 p9 ]; I \ nDestPos++;
+ D% t+ F, A1 A( V, B& q continue;* z2 Y* `& g! z+ _
}0 c; c2 t: t& N5 w
pInvSort->MoveItem(i,nDestPos);
9 n& _1 i. D0 w$ r( d r2 P g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 ?2 q8 [* J5 e, l* G5 E Sleep(5);- K/ o& D4 `* J- M; n8 @$ D
//Error("移动 - %d->%d",nSrc,nDestPos);5 ?+ p: W/ i, c+ F0 O$ Z
nDestPos++;
{0 S7 w! u7 b, g" l2 G, h }
$ k3 D) \8 q, e8 I* Y& B7 D9 f% t //取第一个元素的信息
0 I) q$ d3 K, j4 U" V$ k /** c! Q/ g1 r+ Q9 a+ E; q- F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# U7 D2 h% l8 b7 H0 I$ s5 A8 [1 t4 V
{
. J0 e' s# x, ]% M4 ^( b2 g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- K, V( R: E* v/ _. f0 c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ m0 Y* [. l0 B+ @) c }( x; H1 x# [0 \( X
*/
. H( f/ j2 Y: {5 Y2 ` //////////////////////////////////////////////////////////////////////////7 Q6 r: w: |& z& c+ C
break;
" k$ `" n* I' F: B* c2 `5 S }% v5 a5 o+ j- y [& v
} 5 S {8 H. l% \% o: u
}3 @5 Y( L6 t: H; A. D2 b G
m_wndMenu.SetVisible(FALSE);& Y$ i+ [; W) D- ?0 k
) k; A/ v$ j6 Q* J
--------------------------------------------------------------------------------------------------------
0 S# @: F2 H7 N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ y+ A1 y6 {( o, b4 {
{
$ R, t* \, K& f: P9 i( y2 oBaseMouseCursor();4 y O8 q' G/ ?
}0 O: l: \0 N5 f: a5 a! \, d
在其下添加:" ?# ^8 }, ?3 t6 {4 v' V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( T: l: h( m2 h, ?/ g C{
7 T/ t& U# X' _7 f, d* Pm_wndMenu.DeleteAllMenu();
+ A S4 w4 \! M; u' y6 ~m_wndMenu.CreateMenu(this);
: H x4 r2 t9 y. Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; ~8 ]' Z* L; E# K5 M1 N0 L6 |, a+ N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) s" }' g7 z- o- Z1 {+ i
{
( Y+ E9 { m6 Y: q: V/ s //P以上级别才可以删除所有道具2 ?+ ]- R. O; ]# V0 q' g" g5 \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; n5 @, P7 z' ^5 J- O
}3 f, \2 L8 b' M6 M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' V# z7 u2 C! _- y# e N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 i# H9 e4 z! [1 Z; Jm_wndMenu.SetFocus();, Q- a1 X* M4 @/ |; ~6 w+ r. H
}
1 B, w( r: I* I. M2 y/ U3 h( O------------------------------------------------------------------------------------------------------------
% W' m! q+ S& W! s*************************
1 R( U. ~! G. |- x, cWndField.h文件3 o2 }* C/ t& K: w' w( v/ Q8 Q
*************************
# z3 `7 A6 M4 i: }& I$ r0 V搜索:BOOL m_bReport;( }. |4 |7 P- X( w8 h4 E$ k% p3 N
其后添加:3 Z% }6 {: i- B7 a2 d4 a
CWndMenu m_wndMenu;3 W9 j' D( E1 R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. E x- `2 o5 J0 W3 G. d
其后添加:
) p/ _# H5 r+ L7 a0 W6 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);, O* }( g! o" [
G2 I$ w6 {7 ]) t4 E5 f8 E
* Q( N2 j, G0 A8 g+ D) \% g; \+ |3 {
|
|