|
|
源文件中_Interface文件夹下WndField.cpp文件
1 Y' z5 T3 c5 n5 b. _4 Y" [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 p& Y+ i; b4 `: N1 [, U
- }0 W) L: M8 t+ G T, O1 \3 \% jstruct sItem7 M2 `2 e# X: V! q& `4 G6 L" l
{7 Z; n8 b2 W" X4 E0 ~
DWORD dwId;
- _. Y" K* S) h4 V2 TDWORD dwKind2;1 `7 H& R; d7 n' p1 w; A) v
DWORD dwItemId;
& ~9 @0 X* e" y; aBYTE nIndex;* M2 K* m7 R l! P. }; N
sItem(){. I( b7 o0 `3 Q2 ]2 {2 e
dwId = dwKind2 = dwItemId = nIndex = 0;
5 a6 u$ @: q; Q+ Z! t}( T1 v' ?! ^5 i( v' |, }
bool operator < (const sItem p2)1 Q8 E: M5 X5 v1 a' B. F
{ F- Q; g1 V9 }5 ?( h* s* x+ D
if (dwKind2 == p2.dwKind2)3 `+ T! p. A0 Y) P7 E. x7 K
{
- L/ N8 N2 }5 M( o3 c/ |7 I return dwItemId < p2.dwItemId;
# m9 p+ y" y& g7 E" k }else{
* _# L& ]* E- S! p, z$ c return dwKind2 < p2.dwKind2;$ V% l, O) L) I$ W
}
$ f- Q; J- ^1 J# I}% j4 j) V. ^3 A5 b0 K- Q
};
& B7 t2 }: S) I+ Yclass CInventorySort, H" Q4 N3 p$ o$ g$ a+ ?
{
% k S: L! w: X- S, |+ k4 B* h: L. _public:% ?4 M* Y# j/ x* o9 Y* T- V( }, J/ Y
CInventorySort()
9 M, k9 P x) p% q p* m{
- h3 L8 }9 J1 w6 R5 w m_dwPos = 0;
1 ]6 n: V& a) ?& _2 s6 b; {}' V. y* _$ ?& M& j! Q& R
~CInventorySort(){}/ y+ q. L1 D; G- f i; d
private:
; H3 V5 J" f" c0 F" JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) j4 f7 S# v# M s* i4 N% GDWORD m_dwPos;# J- j% ?; _. e) A9 y: `
public:0 c. h5 G- A' k2 l, _5 I+ h
void Add(BYTE nIndex)
% t# X0 [7 K( D4 N{
5 }/ K( r: t E. P' t/ C" E if (m_dwPos >= MAX_INVENTORY)% `0 F% w, c3 d. r0 {0 j3 e
{' e6 t4 M1 P# g
return;, B s' b$ n) Y% M9 U0 \- ?" `
}6 `2 n+ H' M* b
m_Item[m_dwPos].nIndex = nIndex;
/ Z7 G: x9 G* J. `) v6 A( {. j: V/ f m_Item[m_dwPos].dwId = m_dwPos;: Q0 C) h' E6 g& o' g! A5 j* i1 C
m_dwPos++;
0 p/ b( I; d% |" J0 ~* w}) i( G! Y2 W! Q$ f$ @6 a" N" e: h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& ~' |# A) j3 y/ t- l: _' q( o1 E{
% n H. q. Q7 @2 d/ o for (int i=0;i<MAX_INVENTORY;i++)% O7 K% _% Z0 q% n
{
: b8 p& `% Q% r$ ^1 [4 ` if (m_Item.dwId == dwId), d4 ~/ @ B: R, G
{
! `( k v, b$ R+ M% t return m_Item.nIndex;
* P& N4 p" G2 N0 x9 ?8 H' w }8 ]! E% @% c* m3 L( x. E4 G
}- `4 K: p2 R5 V$ o2 G
return 255;
5 x! h0 I" o7 t/ P* O. W}
$ V _, B: K0 Avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 W4 C h% h+ s
{
* X' d3 u* _( N' ~ BYTE nTmp = 0;
* {$ i# k; t+ |0 q# H3 S7 X! u+ U bool bDest = false,bSrc = false;
9 q' P$ B9 i# C9 i: @' s for (int i=0;i<MAX_INVENTORY;i++)
0 P9 F, Z: P3 J9 Q u% J {. @5 G# w7 ], \/ |( C) L
if (dwSrcId == m_Item.dwId)3 i$ \% c4 D2 ]9 G& u% a" w
{" U* { ?7 C. `; u
//id相等 则 改变对应的dest和src
5 D6 R }* ]$ Y nTmp = m_Item.nIndex;% }; ]% z% g) {. M2 ?" Y& k
m_Item.nIndex = dest;
, b& d$ f/ `2 k1 }3 R+ R }
2 Z8 [: e5 \) M+ B4 S* L% d }1 ^ S) q' R8 _5 I& S
//临时数据保存完毕,交换开始
! |7 J' |' Q2 n1 s5 O$ S for (int i=0;i<MAX_INVENTORY;i++)
4 M0 ~! V _7 U! [% ?8 D+ r {
0 x7 u, W. D" f( m! p4 W3 d if (dest == m_Item.nIndex) e( R3 I; R% l
{
c( M6 v9 `. G& N9 L3 { //id相等 则 改变对应的dest和src2 ^* Z+ }7 E7 h, _8 O/ q
m_Item.nIndex = nTmp;
6 g/ _' Z0 _( P: \4 v }
% ?8 k+ H2 L) u: S }% K8 @* ?$ l! f" S1 g2 y9 g
}# m0 @/ N, ~: R5 W* }
};0 M, v/ g& _/ }. w0 \6 {" Y
-------------------------------------------------------------------------. m. k9 w# O2 c
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ Z2 F! w. z" b+ J. C+ |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; ]: D1 M" b5 p3 T3 ]# ^( _. e紧靠其上添加:- h# E% J+ w' y: h& x
if( pWndBase == &m_wndMenu ); G) h r2 e* \& `1 E0 ^1 s7 s
{
+ z: e+ E. c; |9 B switch( nID )
0 i# ?/ S; D) r' [8 T: d4 W3 ^- A: p( I9 N {% ^1 y) b% D% y) g
case 2:* E& ]& A+ m$ ?5 d! ^* ~/ { |. ~) ?* ?
{
+ M" Z" x9 c3 [# D //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& s; {2 K5 y% n* I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 H3 W1 P( ~0 e: I
{& N2 I5 L' @/ E; \
break;6 f1 J6 m# [4 k3 f; ?: u
}$ Y" X7 I& _4 g( r' M7 h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 c o5 d9 g4 l( i' L: [
{
% d+ U S% i! `9 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, i( k& `! l% z/ F' W if( !pItemElem )
) b* z5 X( n$ ?0 U1 i continue;
9 n/ w/ j! u( z7 z4 h0 | if(pItemElem->GetExtra() > 0)
0 P% ]3 j! ~, b/ d! z$ X' j continue;4 W, L6 B* @( r6 D# y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ q) u% C# t# s9 ` continue;7 P: R p. `1 Y- {" Z, P, v
if( g_pPlayer->IsUsing( pItemElem ) )
' S4 I% p, O* o8 L5 K3 a0 ] continue;9 Y4 d! A/ D4 T: ^) F$ j
if( pItemElem->IsUndestructable() == TRUE )$ Y: F3 `2 X, v; w1 i+ k
{
4 B @; ]" o. k6 m! b% o' J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: m3 W) T0 X" ~# R
continue;
% L7 r; q) V, l }( M1 A4 s+ h0 l; I( ^9 B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 }1 m4 d6 a( i }
6 u" c# z# k( g X9 {5 m break;
7 w& {! D( E7 k9 i- U3 \" W }$ G4 [+ C9 [( x! W
case 1:
1 ]$ h: L2 {7 ^ {
3 R2 z; ^& [8 R- D5 } //整理背包
4 x2 n- k) c* N" j; ^ //////////////////////////////////////////////////////////////////////////
6 L, }% r" j x: v4 O, t //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" S5 ?9 F! `, {9 } //////////////////////////////////////////////////////////////////////////
- B- V8 S% ^. W //////////////////////////////////////////////////////////////////////////9 d3 [% m- Q* R, V( L
CInventorySort* pInvSort = new CInventorySort;% j' Y1 _1 z: Z9 U4 I
vector <sItem> vItem;
- V2 Y2 e/ d: T# N9 x vItem.resize(MAX_INVENTORY);//初始化大小5 \7 W; V4 p* w5 N$ V) {/ e" a# ^
//////////////////////////////////////////////////////////////////////////
* U. t% F$ x" C, v //填充数据! \; m7 Z; T0 M! ]+ P: n7 l
for (int i=0;i<MAX_INVENTORY;i++)
" I! J8 E% |8 _& m. O% k {
+ V8 T: Z- K7 O1 u! L& p% I) i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' t% p D9 O+ W+ b# @8 O) _% h. Z
if (!pItemElem)' N: F; z: n3 r; C) a2 J/ ?7 a
{3 G1 c! y, y# G, s
vItem.dwKind2 = 0xffffffff;0 U& ]3 b7 T; P& O) K. `
vItem.dwItemId = 0xffffffff;+ ?$ `" ] R7 M+ ?
vItem.nIndex = i;
! i4 E* z. U+ V$ C0 B" { }else {
4 h1 X6 U2 y+ P0 y6 b, }6 d8 h ItemProp* pProp = pItemElem->GetProp();, x" \! g* a! b9 z
vItem.dwKind2 = pProp->dwItemKind2;
* b& q4 z( M0 ~8 h& }8 S% N" h vItem.dwItemId = pItemElem->m_dwItemId;# @3 }( X$ A3 c# O; u" w
vItem.nIndex = i;0 @7 t% d8 \6 W& L- B' z0 y9 |% A5 t
}" ^( K3 D7 j- P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- n% a( `( N% `. J' \) c
}# f3 {% p! i) v E1 Y O% I/ D
//////////////////////////////////////////////////////////////////////////. t G2 \2 c* r7 u
sort(vItem.begin(),vItem.end());//排序2 {& J0 i6 u: j; Y
//////////////////////////////////////////////////////////////////////////
6 t8 |- e/ R5 u' x8 r4 M U7 D+ ] //交换# a- `! `. g; Z/ b* L! y6 ]
for (size_t i=0;i<vItem.size();i++). @: A- K* @4 f V6 e, ^' q, J
{5 S6 o0 \: y. q2 H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 |7 p0 u0 ]8 i, b4 M- T
pInvSort->Add(vItem.nIndex);
J5 x2 j/ X/ ^' _ }
& f3 g2 ^! R7 k# ~) ` BYTE nDestPos = 0;. `; F( M$ v J
for (int i=0;i<MAX_INVENTORY;i++)$ S6 [. U/ W1 j
{; [0 K2 B( Q& S. I( f+ z2 P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
N( C9 u$ l8 W! M( U) W: I) R c if (pItemElem)( M, G& j2 p) k; b
{) N* ^2 N G) i% |. y$ s* M
if (IsUsingItem(pItemElem))& Z) N. `& C9 T8 `3 D5 C
{
! s5 S% D0 c+ X! R# S! n, Q( A/ X //这个位置无法放
P0 G* F* r* o' ` nDestPos++;
; g b. O9 u# C. B! }) @ f }7 l5 d+ ]$ i9 f
}
2 d0 W5 J1 o% Y0 N BYTE nSrc = pInvSort->GetItemSrc(i);
9 G, R$ A- y$ D9 B- W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, s4 B5 o6 `+ P$ a7 f8 m0 Y
if (pItemElem)
. K( w9 m7 |/ r' X& p {1 }6 O- o4 q% d% O
if (IsUsingItem(pItemElem))2 E& u [3 p. w$ w, k% H- K
{
1 K, m. A$ R% Z( q5 `2 L //这个道具无法移动,跳过
# O7 K T+ u- F continue; s Q9 C7 W! t
}
- ?9 V% z& P$ U- x W5 G }else{
% C5 K- m L- ~" |& Q3 x9 r, G$ o //空位置 不用动6 a( O+ j2 }/ J7 r8 e" h H
continue;1 M" i' F* x' o+ b. Q
}2 H) [8 X, j- v/ S- `& ^
//////////////////////////////////////////////////////////////////////////
3 m* m; o) q' H* f6 H //开始移动
" F2 r7 b3 Y4 i* `* w if (nSrc == nDestPos)2 P, [& B: D& b1 s- Y+ B
{
. o; M8 f" ~+ U; k4 k" g8 j //原地不动0 ^- R; r" m4 F7 p% O( o
nDestPos++;
" }& |7 l0 }$ r* y continue;) N: R( k" V: S. V8 [5 }. v3 r- ^
}1 _% @2 G: R) w4 B
pInvSort->MoveItem(i,nDestPos);
0 q2 Y+ T. O, B5 } g_DPlay.SendMoveItem(0,nSrc,nDestPos);, U6 \5 G2 D! k4 w% T! w
Sleep(5);
% Y2 P6 [ P( Z0 O# Y //Error("移动 - %d->%d",nSrc,nDestPos);. C' z) S6 n# f8 [2 [5 L
nDestPos++;
% m0 a1 r& I( x1 E }) {8 V' M- \& v3 A8 [2 o$ o
//取第一个元素的信息- ?8 q- E9 y' X P* @! `4 ^
/*
7 T: M. c6 `& a: B" J( m7 _0 u$ A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ ~( `2 o# u5 ]# ?0 a1 Q {
Q# n/ w/ J3 o& j9 \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 ?* R# L- T$ [8 W n- c; {1 K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 E7 d* T8 r2 F ]2 \3 _9 Q }7 x# D) H- o1 [4 |9 c
*/
6 [% I6 l/ B r3 \' }5 N! p: G3 M //////////////////////////////////////////////////////////////////////////
4 [) x4 P ]. ~; X; M% f( v9 f1 o break;
9 x4 ^% K. o% d: Z! r6 N }
- |$ i+ @# K. [* g$ a! t6 f }
( _, c, F% u3 A6 m}
1 |' C5 M6 U3 p7 q9 ]/ am_wndMenu.SetVisible(FALSE);) W& w" V9 A$ _! }' J
# L3 q8 a, M$ ]; ~. O
--------------------------------------------------------------------------------------------------------
5 i$ t; D! \7 l4 q5 d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 f4 U8 }1 y' ]5 \( D
{. Z, l' U* v8 ?1 W3 G7 _7 P, h; w' z* `
BaseMouseCursor();
$ [/ O6 G8 y6 s/ O! ^}
" E2 y4 Y- Q! i在其下添加:
* D. t. ^9 d3 S& qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); c- |3 A( `/ ^5 F6 s
{
/ D( e; Q+ J( H* r& ~. Om_wndMenu.DeleteAllMenu();
5 {% r! Z8 c: g, U. o) _) Sm_wndMenu.CreateMenu(this);4 s8 \* u7 u3 M9 l1 m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 z0 m X0 [9 s& I5 w- s
6 v# D `' F2 z. c& y5 w) m8 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ e) `$ o# D8 Z
{7 T( ]& r0 H' P
//P以上级别才可以删除所有道具1 b5 i0 C4 }2 R2 B% u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 h. Q0 b* Z9 E2 x# I}
$ E6 |1 z' d0 y0 X& g7 vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 Q2 n1 l* `% I! B1 v0 `. ]8 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 K% E$ |& Q. b. E8 Z; i) t3 }
m_wndMenu.SetFocus();
8 y) E, [1 k$ V* n! b}
' O" j- a+ N, @3 u* {; V------------------------------------------------------------------------------------------------------------5 U# }( V( N+ Z0 K9 I7 Q
*************************
) s" l3 }* M+ t" z* A3 w8 G% HWndField.h文件7 r4 q6 H5 c7 `) O
*************************
/ Y+ H- @2 R% v% X; P, R, R) \搜索:BOOL m_bReport;
k7 J6 K" a$ [9 A% u U7 ?; z其后添加:
8 a6 c: M0 W5 f* mCWndMenu m_wndMenu;7 {8 |$ b/ a2 @# _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- O& v: a6 \, O; M
其后添加:& h- @0 G, ~6 _' x8 f M \
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 t9 r, U& z4 p2 N+ a
( l8 ~" f ?( U5 ~
0 I1 \+ X6 s6 m) j |
|