|
|
源文件中_Interface文件夹下WndField.cpp文件- q! J7 L# l* s# J6 N( L/ W% `; X3 h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 h( b; d7 n9 b6 X' E7 g1 E6 u) n/ j# r
struct sItem
/ ]* N# U( X" Z) Q{' z- v# D2 @6 f4 o: m( _- b
DWORD dwId;3 @8 s4 e1 G7 }0 x$ D! @
DWORD dwKind2;
* _. z9 Q* [8 b/ H6 o* B8 nDWORD dwItemId;
% P& Z' q( Q- pBYTE nIndex; b5 x J8 y: s2 l: u; g- j
sItem(){
1 o( A7 l, v# x, r( r; h5 V dwId = dwKind2 = dwItemId = nIndex = 0;+ A$ {+ B# j- X0 \# Y
}
7 M0 S, S( C3 I% q, k7 o) P, _; nbool operator < (const sItem p2)8 u- H! t0 S* N0 P3 L! w
{% V4 e& K' \9 n0 Z+ }" a# O" A0 p# n
if (dwKind2 == p2.dwKind2)3 U" A5 R. R. S- f
{8 b- j; `6 {! x; X) d
return dwItemId < p2.dwItemId;
2 y# p. ^: R5 i }else{: g/ x' c1 Z, j5 x4 ~
return dwKind2 < p2.dwKind2;0 G( r( l* ?7 K
}
1 X- D: T" d# p+ }1 Y! c* R& C}! Z$ J7 B& p8 S/ h
};
" {% u. e. q7 H# u9 h* Dclass CInventorySort# U1 L6 W$ K O0 U8 t% s
{
# K* j: u6 l8 m0 s" L6 rpublic:4 x& D y1 p1 }
CInventorySort(). C1 O, O$ R L: a- K4 s- {
{$ q: f; l3 p1 y. @! S! n8 K; K! ~
m_dwPos = 0;
: Y7 }: \( x0 g) y}
# O6 v" n/ I3 p. \, c( i~CInventorySort(){}
( p2 b$ d/ W, [3 _private:
/ |2 P+ G- ^! @6 W2 {( H5 U+ lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
J7 _% b, S7 pDWORD m_dwPos;7 k4 C# m- W. I5 A
public:
/ O# T8 i8 N) ?0 W2 v' l9 yvoid Add(BYTE nIndex)
! e3 [( u" K3 Q# ~+ \: ~{2 @$ ?- I) `/ _( j; y& o6 N; Z. c
if (m_dwPos >= MAX_INVENTORY)
. F& x4 b# N! t/ }- N/ \4 b$ F {, C+ V" W. H$ D- z7 ]
return;. q7 b6 y# ~' g7 ~
}
9 w* y. B2 [0 {" N, a- w+ o m_Item[m_dwPos].nIndex = nIndex;7 \0 H3 t: h6 ?" R) P0 N
m_Item[m_dwPos].dwId = m_dwPos;/ o6 e2 Z1 x' E; F+ X! L4 o6 s8 \
m_dwPos++;6 `. W& S. n6 b7 @2 T
}$ a( Q( N t/ t( J" d7 O# p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 Z) M% f* V. R1 |# q
{4 F5 A- b& T, i) l7 D
for (int i=0;i<MAX_INVENTORY;i++)0 p- p' S- ^7 |; M- x# U+ q# ^ P9 ]
{. d7 l2 E O* U
if (m_Item.dwId == dwId)7 ?8 ]" ^8 V, U( g/ x3 ?
{
: P, q$ O- R0 `9 s$ v return m_Item.nIndex;
- w+ `3 l6 j9 |4 ^ }) I. y( u9 f& L9 C7 C5 N; O
}, g7 N1 e6 \% K3 P% R, [% m" I" C
return 255;
. [0 ?" Q2 m1 {# r2 v6 _" r1 R}
1 u5 p" t- _8 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 [3 A2 n/ t# s4 \7 c% k9 x{' t, q$ o( w% l# Y- \/ }9 g# f
BYTE nTmp = 0;. @5 a7 n( ?' ?1 L
bool bDest = false,bSrc = false;& q* s, ^; ?6 y9 j
for (int i=0;i<MAX_INVENTORY;i++)
, m3 N; h) D. W$ o/ R {6 q: X, E9 [. z
if (dwSrcId == m_Item.dwId)# k% T0 N( X8 B+ V/ c* ]; m( Q
{
$ b# }' y7 V! J3 [% K: l4 `/ w8 k5 I //id相等 则 改变对应的dest和src
2 h% _3 M) d$ a# v# } nTmp = m_Item.nIndex;* U. ~* S4 G S- P: H6 W, D* w
m_Item.nIndex = dest;, w, i: b& N3 _, v
}
0 h! b+ |' v7 ~# C }
& h7 M2 n' i; M, X //临时数据保存完毕,交换开始) A5 h4 g6 G# N1 ]
for (int i=0;i<MAX_INVENTORY;i++)
* o7 d7 _" P& D* \* @ {
' w' ~) p6 w- r7 N( _ if (dest == m_Item.nIndex) \) ?* ?( t. R9 k N
{
7 @& N t4 x; M% H/ h/ b- V1 B! C; h$ h //id相等 则 改变对应的dest和src
6 ^9 u2 W3 D5 n; I" D" v m_Item.nIndex = nTmp;" |- N4 ^% M F8 [1 E
}. {; E$ [5 W- m0 L; ~6 L
}9 U9 H' k( ]* Z% w7 w# D/ G
}
9 s7 b7 F# {6 `2 i};: c4 R& O9 U0 |8 I4 X$ c
-------------------------------------------------------------------------* ~2 `7 f: B* w5 p* `5 ~6 C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ e, \3 x- M# p7 Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* m: h9 z* v9 o8 ` [! }紧靠其上添加:! n/ g3 b) f; F7 h: R
if( pWndBase == &m_wndMenu )
" o/ a9 P! w7 S# w& b$ E{
4 c3 S. c- \* u; | switch( nID )& p+ N( M7 @/ h3 \* V* w- a
{! B) M% l5 _1 @ a8 ~
case 2:% B0 i- T7 n+ ?8 s: a9 b$ T
{
6 Z, q' s, @5 m* F) h0 X //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& n$ J; @' [9 c; f" w2 E& a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& H4 F+ j1 c N% J+ B% C0 J
{7 ~! V$ Y2 |" I( B
break;
) G# ]% K s" j5 K0 f$ D( x0 V }5 x1 E9 y$ S8 }. f6 l+ G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 Z6 }0 M+ d- U/ E! { D4 \ {! R# O5 z) S- G" {7 J' `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* I& v* D- @0 x. |4 W* Y if( !pItemElem )
( c: f' w$ ?" @' r# | continue;) Y f% }! J1 j& P1 C
if(pItemElem->GetExtra() > 0)
- t9 Z1 X& W( V7 ~* R# w continue;
6 `4 Y- U4 f" T( Y e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 t7 N6 W h0 G. t
continue;: l1 E3 {4 c2 b/ |0 ?
if( g_pPlayer->IsUsing( pItemElem ) )
6 d' x8 f" ^. J6 Z continue;
) ?" G w, `7 T+ V if( pItemElem->IsUndestructable() == TRUE )
8 c; f7 E: s8 v% t, _: R {/ ?9 t% o: }+ D% z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& k# L" E) a: h continue;
A) C3 Q8 v# R' @6 w5 M: `( K$ b; v) a }& v# @5 P; D1 e( K$ F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 U( z* f: D; o }
3 [0 _7 k' Y1 ]! k1 E/ b# Q/ t break;
# _- T2 \& d: ` } w1 A9 n" V# f/ g3 }3 {9 P# u! u
case 1:$ Q2 L/ C+ M5 G4 R
{' A) O7 ~% y7 W. T( j
//整理背包
6 I; N4 @8 w$ y P( r* W //////////////////////////////////////////////////////////////////////////
2 J5 g: c3 W* p, J+ a //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 `3 R/ e( `' Q
//////////////////////////////////////////////////////////////////////////
2 Y: o# n0 m Z, r O" B$ w( G ////////////////////////////////////////////////////////////////////////// t& c& N; s$ A8 E
CInventorySort* pInvSort = new CInventorySort;
% g H- p P: x& ^: g6 K" y( P vector <sItem> vItem;! |8 ^% x+ P' i' L x! G% h
vItem.resize(MAX_INVENTORY);//初始化大小- j& [2 i- _8 g
//////////////////////////////////////////////////////////////////////////# y5 l6 ?, e% c; K5 R* B g/ {2 r( W
//填充数据
+ U5 X9 N, X( L- ~" m7 f% \ for (int i=0;i<MAX_INVENTORY;i++)
( G2 y* J |& X7 W, A) Q# B7 K/ B* I { ~$ v/ j0 c0 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! n7 h9 j) ` ? if (!pItemElem)$ N1 P# s P' s. o8 v- E
{
9 a5 K; L' i9 J vItem.dwKind2 = 0xffffffff;
& J$ q9 o* K- R3 S vItem.dwItemId = 0xffffffff; ]# m6 @6 }* Y1 n o3 J7 K+ c
vItem.nIndex = i;
* p. \8 z, T$ V6 U* J; I }else {
1 N3 z( u6 X, z" x. D ?, q' N ItemProp* pProp = pItemElem->GetProp();: w: O+ F, l5 U1 c6 x4 f! i, y; z( S
vItem.dwKind2 = pProp->dwItemKind2;
" r1 _5 S5 y* ^) ]+ Z vItem.dwItemId = pItemElem->m_dwItemId;+ {# t/ E6 b- |' i) u3 t+ L
vItem.nIndex = i;
8 `" U k$ w$ w1 T2 T- Q G }
" y- m% h: k& K5 u0 Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. @. a# {* V% {3 n6 t: o; p }& ?8 j& J* l# e! r
//////////////////////////////////////////////////////////////////////////
, V1 Y" H/ d# v) M sort(vItem.begin(),vItem.end());//排序
& ~: o" u! r w$ |2 m- e/ E! h) F //////////////////////////////////////////////////////////////////////////
2 [7 C3 ~, i- X+ n6 U7 ]! [9 [ //交换
5 k/ l: l& x, X. c7 k0 V* J7 k% Q for (size_t i=0;i<vItem.size();i++)
! c5 s( k! R7 g) m9 \# J' f {, @2 C0 t/ V$ r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 ?0 h7 L' q E. ^& f5 C
pInvSort->Add(vItem.nIndex);
+ q2 R1 H7 W, ^# T2 Y# t: e }/ q5 P$ a' K, ]0 u' {; Q+ L
BYTE nDestPos = 0;
8 @' a- C: Y2 g; J3 k for (int i=0;i<MAX_INVENTORY;i++)
" c3 L9 t) t* L7 h {2 T4 d) S6 Q+ P6 ]' U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# V. G! u, @) y: k/ I
if (pItemElem). m# h) L, f- r2 z: Z: u) u: u
{; ?& b: j' c5 G
if (IsUsingItem(pItemElem))
' J! G0 J" V0 a1 V9 u. L {5 H5 ^, M1 N+ i, X1 D. Z4 z
//这个位置无法放
+ x8 `" h9 w2 V3 A8 T nDestPos++;
2 X/ j# [) z4 X }3 `6 h4 w6 T( L2 n
}/ W+ E) u& D: N3 y m) w3 M/ y
BYTE nSrc = pInvSort->GetItemSrc(i);
- ~+ x: x' J0 ?5 q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 a x/ i0 T8 A( r1 s9 F if (pItemElem). M X1 K+ v9 H" S% ?& f. m- a9 u
{
( z+ l) x$ Z' P0 M0 X$ q if (IsUsingItem(pItemElem))4 \5 b" ?" M4 y, N
{0 G, r" l% r) Q- L
//这个道具无法移动,跳过& \. F/ o% ?$ @ r/ Y! p0 d
continue;
+ O9 t; N, m0 O. ~3 A( }7 N5 M3 a }
9 A' x5 f" b0 T! ]3 V } }else{* ~# O4 \7 O6 [2 P* T( P, Q- B5 Q. y: H
//空位置 不用动
' q, N) n% }7 N4 x$ R7 p4 }4 I% G: m6 t continue;
- `1 H& G# M2 p2 R) Q X0 K; v }5 t7 X) _) K, u/ W
//////////////////////////////////////////////////////////////////////////% s1 ]7 B \, V, i% H/ n( |
//开始移动% l1 I! Q( g! y& D |
if (nSrc == nDestPos)
) a" I+ n* {4 q. k) \" l$ U6 k0 j {
4 q1 N1 z& j, D f- O //原地不动
% @, `+ o* c& U1 u. `$ m nDestPos++;
* U R+ K& w8 |6 |4 O) v continue;
2 M* \% m& k5 H }
0 F! ]6 \# U/ _9 J1 F pInvSort->MoveItem(i,nDestPos);' G' b% b. B6 k
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& i0 Q y+ J( C" ~* E4 G* \1 w: h4 M Sleep(5);
8 }1 K: X( X7 l! h4 ?5 S1 e //Error("移动 - %d->%d",nSrc,nDestPos);1 Y. _! c( U1 G3 j) t) i9 N8 r
nDestPos++;
6 r1 Y: A R4 C5 [ }
, {( s N" D+ N3 p% j //取第一个元素的信息0 ]2 `7 m, J& E( d$ g0 r ^* z$ a7 n
/*6 T1 y* N! x) e
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- r5 J- ~! C9 I8 c1 v! C* I0 T {
& h* |7 X/ n$ c4 Y u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 g6 Y" ]' S z1 b: c+ e2 q0 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 d# y- p! ~3 A- c/ v, J
}
D8 [2 _6 R7 |( Y7 y */9 k5 e) {3 \- v. I7 E) \: _! Q
//////////////////////////////////////////////////////////////////////////
# X% D! K# S- ] break;4 C& e7 ]' e f1 g- U- l
}
5 F- W/ ^9 v$ q# a ?/ G2 i" H }
7 w, [* }0 c/ w% V3 r}
# a: b; Y" E7 `2 Q8 W, t2 N- m1 ?) \m_wndMenu.SetVisible(FALSE);! z3 i# {( z/ Z I0 ]
: R6 l) F4 ]( I ^--------------------------------------------------------------------------------------------------------
4 z9 f) J! x& f9 W/ C" S0 Z M搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 i! [! i) r+ S- A2 b+ r' t
{
: [9 ?/ q. y0 J8 l/ X: }BaseMouseCursor();
0 W6 l) x3 d1 x8 A- y5 U' o}
0 L: [# A) A6 x3 y: R) S在其下添加:
! J' g$ V5 N8 i1 ?# V- t, zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), S: {, U/ M. g- a
{- H9 E) @$ J9 \- a% s7 D. i+ c- N
m_wndMenu.DeleteAllMenu();
Q% M4 s; s0 q* e7 D) ~m_wndMenu.CreateMenu(this);
9 E( k# V% D1 H: p* C4 Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
{# X& o+ \7 E' x s* ~* U# s' B4 Z9 u" \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ` v+ ~) j* f9 `
{; j, g. C W4 p5 b; t
//P以上级别才可以删除所有道具
, L8 I4 z; H7 `4 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 z, n' u' Q0 `( N5 Z( U+ q
}1 u5 \: U9 B* n3 k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 `5 @/ s2 m5 e: tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 M8 p7 Q3 c, T$ a {: y
m_wndMenu.SetFocus();& h" k8 t8 W) ^2 v( t
}1 T% P6 H) p4 s4 F
------------------------------------------------------------------------------------------------------------8 @7 s1 ?; d! l0 @+ d
*************************
: ]3 i H1 w3 XWndField.h文件+ N/ u7 f" V8 h2 m# w, l: {
*************************
4 B* J: r1 C, n' S# \7 Y搜索:BOOL m_bReport;
5 o0 V, Q4 b# V9 i W其后添加:
! l) t4 z$ e- lCWndMenu m_wndMenu;! @; `8 W: k5 r5 X: c0 O, Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' k% ^* }( Z! ~& Z* Z$ w
其后添加:/ Z8 X+ I8 i! [( @
virtual void OnRButtonUp(UINT nFlags, CPoint point);( E+ Q$ g, h7 G) a
' V5 _$ |4 `. `8 r) h
4 M# ^7 Z1 Q2 q/ H) R0 b |
|