|
|
源文件中_Interface文件夹下WndField.cpp文件
/ k- M, o* n5 W/ S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, X6 s) |& `: N. {! G, ~* R. t" c1 K: Y7 |" Y; i7 f
struct sItem. s& i$ @/ ~# `+ X/ s! `" V7 }
{
6 y1 k. n. V, s% M! s3 VDWORD dwId;
+ `, h' `- b7 ]/ s8 \, ]DWORD dwKind2;3 H" Z+ ~. g# p
DWORD dwItemId;
) m6 Q# \' E5 HBYTE nIndex;" f& d- B1 ~) C+ q/ l
sItem(){7 j0 @0 N: M2 m
dwId = dwKind2 = dwItemId = nIndex = 0;; O5 S4 e* ]2 a5 B
}5 D+ e3 C' K1 g6 L& T1 R" g
bool operator < (const sItem p2)
. E% V& i( B' J |# H8 x) }{9 z4 A6 `+ B' {7 L4 S0 i
if (dwKind2 == p2.dwKind2)( t+ l1 L1 C0 K" m/ c
{) O7 b! E) L( Y3 B( n" c& Y
return dwItemId < p2.dwItemId;9 Z; i2 I- P; n
}else{
+ g- }# Q4 N: B/ A2 w return dwKind2 < p2.dwKind2;
# @- N- H; Q2 r7 B. A }
q# W" }5 C7 F" X' j5 e, C" G}
9 p& m- I W: r& ]};
6 k& s# a" j5 Z% }1 kclass CInventorySort- D) n$ g. A5 }% {
{- w2 [! u4 F9 }' L! s
public:) k+ g8 M5 L/ n/ f, G+ v
CInventorySort()2 {& `: [/ O3 ]0 D% j$ f9 ?
{
2 G: z4 O4 F4 }' b m_dwPos = 0;8 ~8 z% ?) Q8 ]. h
}+ I% s8 n- D. M/ q) N) I
~CInventorySort(){}% M6 m V3 z6 f$ d! m2 \) h
private:
1 }; o% @. N% HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, W3 ~6 u* p# DDWORD m_dwPos;& U+ n; }7 g. Q& V
public:2 x* K7 _, A; I6 i( U
void Add(BYTE nIndex)
7 {1 n3 d; t! t& G1 [{# |6 J; @4 P. @. U, z6 T) }
if (m_dwPos >= MAX_INVENTORY), ^1 ]7 M2 K1 F, c3 g% d3 @
{2 [6 @3 `( W1 e! |6 k( z" E
return;
; B- Q, ^ d3 D+ c8 a }; p4 g3 ^& d" I2 G) e# C- C
m_Item[m_dwPos].nIndex = nIndex;9 g G( q# y ~
m_Item[m_dwPos].dwId = m_dwPos;
( y8 U) z; _) Z4 ?; v8 D5 q( h m_dwPos++;
- c/ A/ y) x7 m. ~3 Q$ X% e, E. T" {}
- w6 }9 d% u, S) f8 W& K, eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 j3 c6 J" }8 {3 H7 ^" k{* }' p2 C+ y& Z9 U( c8 l
for (int i=0;i<MAX_INVENTORY;i++)
( ^6 m2 o$ t3 \( u {, F6 c b" z, y( U( v }0 W( |
if (m_Item.dwId == dwId)
' p U% s2 q: a% z" L {. i( n* _* A# s( U+ P3 Y
return m_Item.nIndex;
2 G. O* j, \: T! B }
( L* O& Z" v/ P. Q }; r) L2 K$ ^% x# x7 r0 Y. {
return 255;0 U, H }7 Z: L/ _! _
}
/ {4 |9 ?) i$ D9 _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 ]3 X1 S+ H& }7 `+ Z+ P% Y% {{
3 ~2 ?/ u8 s2 Y/ X+ b7 S0 J BYTE nTmp = 0;
/ v o" r. c" j' c# U bool bDest = false,bSrc = false;
2 u7 F$ c: P: }, Z+ j" w8 D2 h for (int i=0;i<MAX_INVENTORY;i++)/ E/ B2 E, }- ?7 V. j
{+ N5 H4 M/ ]# |0 ]
if (dwSrcId == m_Item.dwId)
7 @$ {7 b- N$ M0 o: x! g {* @5 s: S+ h( y& i& T5 A
//id相等 则 改变对应的dest和src
: ~2 C- e* E! _. e. @, k; X nTmp = m_Item.nIndex;9 P0 q. _ x/ Q' E; T, _& X8 z
m_Item.nIndex = dest;& Y; y4 `+ Y% a3 p0 g2 H' D
}
: @. d1 c$ u9 ]' b3 ~( ]0 V7 t }
8 H- }( u6 V( B5 n0 L: X, S, ?& ^ //临时数据保存完毕,交换开始
8 P1 U7 u9 _* x$ {3 K for (int i=0;i<MAX_INVENTORY;i++)
6 A& b) J3 m; L) | {0 O0 k9 S9 a3 i8 g$ t3 ~, C) e
if (dest == m_Item.nIndex); K9 Y! o* v4 I4 w8 x4 ^
{
- z2 O3 U7 d" i, o% V //id相等 则 改变对应的dest和src
+ e0 X- z1 }+ ]/ `: t9 n m_Item.nIndex = nTmp;
( k# Y5 g6 W5 L$ O, O }( @$ s$ R( ?5 B0 Q' l7 D( w/ \
}
2 j( H" B% i: s" f5 Q}
6 p& q0 p7 R6 B8 g) F};
* k" L/ Z% }9 Y* Q; O$ [+ {-------------------------------------------------------------------------
: T5 x1 d+ Z6 C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* Q9 o9 K' K0 e2 B5 O* G" X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 ?( w$ k( t& C' B! U! z: V
紧靠其上添加: |! _4 ~" {; Y* `5 H+ R5 n
if( pWndBase == &m_wndMenu )
6 n y# X- g, J4 Z( E8 s& W{
6 |0 z0 C- `, D7 c9 E% _- {6 N; `7 E switch( nID )
7 Y* E1 d" O. p& `) }" [ {$ ?, |( `3 ]+ h$ C7 R( Y' }9 _3 ]: b
case 2:' d2 `! A- w! o+ Z# }* ~. U% k" h2 i0 O
{
5 C. C7 `. f! T e3 `: Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 `( N' a; P7 G- U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 c) A' \' c% |7 n' w9 o8 x: g
{
* s0 {2 E3 d6 e0 t! q: q break;
) G' w7 }! \3 y ^4 t6 w }' h) G- e# @6 a$ Z v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
O! S+ @+ n! }: |# S {% z; U; s" j+ R1 l# r1 W" |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# v$ W* ]4 a- G/ P* s, I
if( !pItemElem )
( M$ Q3 h- n+ m# t* x$ y) v3 N! ? continue;8 P3 ~6 R H! o$ ?$ ?# e7 d
if(pItemElem->GetExtra() > 0)
3 {$ i4 [8 g: S continue;
( ~8 U* e' O3 c$ g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* U( g- l# {# d% o" o4 s$ w; K j continue;' q" a& ]/ q+ F" t
if( g_pPlayer->IsUsing( pItemElem ) )3 Y5 K% ~0 H7 T5 w3 Y+ ?# a
continue;
9 K* Z, L9 z8 B6 I if( pItemElem->IsUndestructable() == TRUE )' a1 P0 \2 O' J. y$ J, G
{1 W8 E9 J+ ^, A2 d0 D4 d1 ?4 M' [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 f3 j2 b4 t% j) ~/ d+ N continue;* `1 H8 g7 e/ N! B
}
8 t- [7 j9 D4 e' J# M g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% t5 v/ z$ ]5 g- O, S }
8 W, d/ ^6 L) T. Y5 \" w. F break;& j5 X/ v$ P4 o* u ]
}
/ j, G4 Q# \) i: o, [, [ case 1:
' g1 e1 [5 F! e% @2 K {
; p) F7 x2 w q' g/ i5 u' e //整理背包) D; x5 z E# k
//////////////////////////////////////////////////////////////////////////
/ F0 ]4 s j% ^3 [3 ]: w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 ^. D; p* \7 B! O( U( W //////////////////////////////////////////////////////////////////////////
% b, s5 |- Z/ s' i3 z& w //////////////////////////////////////////////////////////////////////////
7 r' s0 l/ Q* [# s5 N6 G CInventorySort* pInvSort = new CInventorySort;
* [, {. z: z, x vector <sItem> vItem;" h* ^# Z! O- S. T
vItem.resize(MAX_INVENTORY);//初始化大小
3 U! Z0 ]0 H4 j' D //////////////////////////////////////////////////////////////////////////
' |% z2 F1 a1 g$ p! S //填充数据8 r+ h( I- R$ G5 ]4 j( o/ x1 X! R; Q/ U8 v
for (int i=0;i<MAX_INVENTORY;i++)6 j8 ]. l% J0 E0 P2 H; P
{
6 i% x/ P7 U& X. C- ~$ @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* J0 Q8 z* d1 [1 n( |: X0 L if (!pItemElem)# a; o- w: L/ ]- Z0 @; d
{6 Z+ p9 z4 J3 \8 p5 A& y# T1 \
vItem.dwKind2 = 0xffffffff;8 q$ E1 @1 Q+ c F' I* \
vItem.dwItemId = 0xffffffff;' a5 I K I; [' a' x' t# M( F, S1 a
vItem.nIndex = i;+ i& K, I2 ?" J$ R
}else {2 L- n4 r7 D) Z( S* y. O
ItemProp* pProp = pItemElem->GetProp();: Y+ H5 h6 m8 B6 B" _
vItem.dwKind2 = pProp->dwItemKind2;+ W( v% x$ _# M4 `6 Z% _6 D' }. ~# ?
vItem.dwItemId = pItemElem->m_dwItemId;
* \! \. N' [5 x# T8 P5 I. w/ T vItem.nIndex = i;
$ Y1 S" _$ ~# i' K }
" U( ]+ d+ J; w$ v3 d9 I1 l$ X% r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 L8 E3 u2 ~0 z' X; X2 [ }9 _& ~/ l8 v$ B
//////////////////////////////////////////////////////////////////////////$ H% ?, V$ W" i3 T1 K
sort(vItem.begin(),vItem.end());//排序
, ]8 L) t" A2 \* ~ //////////////////////////////////////////////////////////////////////////5 k+ B' I* C3 m" U2 |4 a* {0 o8 \
//交换6 y- W1 ]7 ~$ I6 B6 o* K
for (size_t i=0;i<vItem.size();i++)
, r! G2 o0 I, m! ?( }' S+ r8 x+ ]( @ {0 S6 p- l4 |. Q, k5 Q0 O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 D& @' B' L: i& k7 Q9 Q+ I pInvSort->Add(vItem.nIndex);
, c5 h% T. @7 |* K3 o$ q- @ }
$ E% k( U) I2 y# r6 @, w BYTE nDestPos = 0;3 \: I2 Q2 H9 n7 r
for (int i=0;i<MAX_INVENTORY;i++)' H$ M0 g% ?% G( F, ^- w l. d2 F v
{% s$ x5 a( Q4 {7 `9 ^* a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: ?/ U4 u6 `6 d& U! Z
if (pItemElem)
9 x5 K+ d$ y6 w, J {+ c* o* p& A* t0 m* r K) m; E
if (IsUsingItem(pItemElem))
$ `/ \3 y$ M0 ~ {1 j' @, n; @# J9 W; w/ B6 b
//这个位置无法放% ]" v8 ?' r( x8 p* f4 t, N
nDestPos++;5 b3 h7 }+ v9 F' R
}
# I, T* _& h. C1 ?- T! L6 R0 j }
+ }1 H+ Y, N6 k* f+ z. L% x BYTE nSrc = pInvSort->GetItemSrc(i);% y0 a( P1 r* k1 d6 T% D9 m0 P5 h
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& u& K2 y0 t* v8 @ if (pItemElem)
: M& T+ B% c$ Z3 r2 p/ Z {
Z. |5 b' T. A7 Z1 m- X if (IsUsingItem(pItemElem)) k+ a% _: p# S$ T6 S( F6 B
{
' a# M/ R8 u1 q, V$ d/ _3 i/ a //这个道具无法移动,跳过
- d+ S/ M# v& N+ b6 t continue;
' J* v0 l) s7 U, A. | }0 |5 Q, Q+ L5 M& M4 i% X4 `
}else{
0 v" B( W, N% }) L( z% s //空位置 不用动
0 Y/ s8 W& M/ y8 u6 ? continue;: o+ Z( _5 e3 U h' H* U2 W
}9 Y2 r6 W0 ^$ x6 q' c
//////////////////////////////////////////////////////////////////////////6 F& t- `, Z; K* g
//开始移动
, J) B ?8 O# S" D if (nSrc == nDestPos)
+ U) c) B! M Z9 ]7 T3 } {
8 c b- c# k7 t1 o //原地不动
* Q$ B% J. h1 @. t nDestPos++;
; E# p+ f: Y+ e continue;3 d7 l, F2 X, K9 R; W- o7 `
}
2 P3 W: ^' Z: C8 Q' M7 i pInvSort->MoveItem(i,nDestPos);
. f5 U' S0 G3 Y. n* I2 R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ w9 D3 o3 K* T# T5 n( ?+ P Sleep(5);
, O$ q) p0 z, _ G //Error("移动 - %d->%d",nSrc,nDestPos);. L# s5 {1 `& b! R" E$ J: ^# r
nDestPos++;5 Z. C% j* _8 \; Q9 f; F7 E8 L0 {2 f6 E
}
: a/ {) [, ~5 R //取第一个元素的信息
! e5 ?8 g4 b! g4 L* v T /*
2 Y4 y0 x9 E$ ]& C: T( A) S- M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* z) m9 ` k4 @6 I9 { {
8 u$ j8 u; y- w, U; n6 A/ ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! A) j/ c/ }, z! O6 H# R2 P4 L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) c7 K3 R! h6 J- X8 p: E& d6 I! z }6 e/ K3 }/ `4 x$ ?
*/. p5 u7 I5 ?1 `6 k
//////////////////////////////////////////////////////////////////////////: Z3 [" l; v$ j. S' z
break;! C( m( \$ h3 @ V1 \ U8 m) U
}5 d, R, u% |* s- c. ^( g
}
/ g6 u3 G2 \; \: K+ m1 N}- I6 r I% X# a/ Q$ Q% h1 z
m_wndMenu.SetVisible(FALSE);
: S: s) F+ S$ ~8 F( O0 W- {/ M& I! o( ^
--------------------------------------------------------------------------------------------------------3 z5 N* O N+ }5 Z7 a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! @' F. z9 @# g" D: v/ Y* q{
! o/ j+ l. l5 W4 g4 S1 O V/ SBaseMouseCursor();
! p( F: I g ~& ^4 L5 R}
, X r, c4 @' Z& u& [ m5 K在其下添加:, Q; P5 Y. I. T' n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) A& [3 p( m/ H* p5 `' W{2 R% |$ G' D! t4 o4 e- r
m_wndMenu.DeleteAllMenu();, N7 i% b, V# y$ F
m_wndMenu.CreateMenu(this);
+ p* D0 }7 o! D. @4 M5 p5 `, j5 Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 ?* s* X4 D- }
$ y) H ?0 L! ?+ g2 aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& m6 W- ?. o: Z, E1 b% v{
+ u5 m& j( b: l4 p //P以上级别才可以删除所有道具
$ O9 a$ W7 k' N& I- k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 B9 ~: V* U' |7 y5 y}3 ]! j9 }& g2 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, I/ f5 I: H0 X, y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" ?" P3 _! ]9 K1 l
m_wndMenu.SetFocus();7 Y1 s9 U* W" S5 [3 A! C# k' _
}
0 e8 s1 w. k/ @------------------------------------------------------------------------------------------------------------
! J7 |4 K9 f0 m; R*************************. i6 l: P6 M/ o+ P
WndField.h文件2 \8 c! q% A. k6 w2 G* B
*************************
/ C, `3 @2 W! m' }, F: a; B搜索:BOOL m_bReport;4 a+ k+ w$ m1 ]+ U1 s# O; w0 w! B
其后添加:
" R" X4 N4 O$ u/ F0 I" N5 M3 {" uCWndMenu m_wndMenu;
/ q( j; P9 ?9 A0 _3 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) }& X8 G+ m/ F! l7 [8 `5 Q其后添加:
2 M; b' L; I/ W* u! ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
- [. b, q1 H2 d0 j/ k
: y& }. f4 G' `. t* m
6 ^8 P9 b2 o- Y' e0 r1 j6 G- m |
|