|
源文件中_Interface文件夹下WndField.cpp文件
3 J. a' i, L" u5 c* e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 I6 s% C k6 C; }8 Y; ^$ f
9 t V( J! q: j5 e
struct sItem; B& p7 j& v0 V% Q: E- o
{+ z$ G# ^! g) I4 P2 Y0 s' K
DWORD dwId;
4 |, U) N* v/ b' ?7 U7 \* V. h8 nDWORD dwKind2;
; Z2 e4 `+ @- ^" a" ~DWORD dwItemId;( m2 T& w5 P& C9 v! s% ^9 F' r
BYTE nIndex;
7 X" W$ ]( d: g& P8 B+ S7 asItem(){) {5 p) t" L6 F3 [8 C
dwId = dwKind2 = dwItemId = nIndex = 0;
, P& ? @4 p, q& _6 k}, v, Y- E* H( q/ s
bool operator < (const sItem p2)
' ]' t3 o. H$ Z{* X. W4 s+ S& ^) T
if (dwKind2 == p2.dwKind2)4 ~; d" E5 c! a3 C- `6 c% x( m! a
{# x" Z. V. g' o7 w7 t1 N
return dwItemId < p2.dwItemId;
; x# q, k7 _7 p- f }else{
2 s$ I% J2 k: B) R- W. |: ] return dwKind2 < p2.dwKind2;
' x4 c0 K# S1 W& N3 \ }
$ u6 y- B5 W. s: ~2 z}) J x# W* ?7 t/ n9 M# W9 O5 |% ]
};5 }( j( r& r2 M. J3 g
class CInventorySort
5 r& }( `: O* m& }- T* i0 T8 C{
( H# @! H1 v3 r" _& Spublic:3 T, t4 U8 r: }/ |
CInventorySort()
4 W+ [( r: z2 s d{
; R3 b7 n- S/ u( e1 L m_dwPos = 0;1 ^- P4 l+ V: k" L6 g
}9 l! w3 x7 `8 p: x; g$ E
~CInventorySort(){}
6 N5 p- X6 k, o5 l7 m# y( gprivate:
2 r. \4 K2 k+ W( p; }! Y8 usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# p% d# _& b/ [* t3 ^8 _
DWORD m_dwPos;
7 r, p* Y% ~- }8 M2 Epublic:$ N, F) p/ ^) l
void Add(BYTE nIndex)
% B7 t' T; o/ S/ S+ q{- ]0 V; W _; @( X
if (m_dwPos >= MAX_INVENTORY); o; ~) i& X2 n
{. p. l# T8 m/ @& O
return;" }: H' m0 ?9 j) z) ^
}; s, c3 \' t8 `* I
m_Item[m_dwPos].nIndex = nIndex;
& y0 _ |3 b* Y8 h& V* G* [ m_Item[m_dwPos].dwId = m_dwPos;# B/ @1 N9 y& `) j; W5 l
m_dwPos++;
1 d8 u" }) `- V8 k! U* P: Q}
; d3 V5 [. v1 l- t6 [( l+ y& [6 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 S( ]* ?; z d9 f/ x: U+ a6 |
{3 `: |5 s/ d* `1 M% O
for (int i=0;i<MAX_INVENTORY;i++)9 B% \7 K6 F; |
{. A( c8 ?- L$ p% D0 R
if (m_Item.dwId == dwId). L/ M6 P7 h# Y7 d
{
- v' L; m8 _3 C- G# ] return m_Item.nIndex;
1 c1 [( L: X' a* e/ A& p }$ C$ i! i1 l* c5 o: e
}0 S" S4 S) e, C6 ?
return 255;% W r9 u5 I1 h* _- f+ K/ I
}
* C7 }/ u7 p& H8 J0 @. I$ ]& kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 U( X; U* g. w{/ c9 Z+ M9 o3 K+ s% f$ i: S
BYTE nTmp = 0;: t O x$ U3 K8 R- ]" p
bool bDest = false,bSrc = false;; s! m, q* U+ l" O
for (int i=0;i<MAX_INVENTORY;i++)* N: J' r7 ~* ~ d3 g
{
: ?& Q/ s1 m8 ?; z" s5 ? if (dwSrcId == m_Item.dwId)
, X( ^6 X# f, i# d {& [8 \" R- W; f- e
//id相等 则 改变对应的dest和src
$ `8 V# E9 U* c9 l: G q nTmp = m_Item.nIndex;: ]) n/ g6 y# _# o6 ~. E7 N. s
m_Item.nIndex = dest;
% T7 b% B0 f8 P6 O- i9 b3 h: c8 b }' y4 j, @6 v0 N1 h2 V: J8 c
}
" Q* D, [' ~! V4 O/ W0 S //临时数据保存完毕,交换开始3 Y& v8 @. Y/ {+ \5 ^- a7 P
for (int i=0;i<MAX_INVENTORY;i++)
. C& O+ j* a0 N {4 H: q4 `# \8 |( ~2 T9 X
if (dest == m_Item.nIndex)
! o- P" `3 k* T' K& h {
: C+ H0 A) t4 Y8 O, ~; h, e, n //id相等 则 改变对应的dest和src3 H4 e* x5 h; t. L: V
m_Item.nIndex = nTmp;
d8 S$ F% d* X }
% C4 g; U' }4 q) V; l7 E }
, s" p1 n6 u" Q) ]: D- D}7 k: m* F7 K8 u2 O9 m% r! B, `
};, \5 R4 R0 `- H
-------------------------------------------------------------------------7 ^4 c" T0 _6 k4 ^; J+ W; Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 E1 S, t+ A8 \: \% X* `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: V9 o) a+ H& R1 ?# i紧靠其上添加:2 L$ ^; d9 U+ f) [& }. v; y( U
if( pWndBase == &m_wndMenu )
( Q7 v7 K _3 c/ @- Y6 `5 G{3 U3 {% i6 w8 {# l
switch( nID )
8 p) X$ \: {2 l) l {
7 T) M- N/ K ~9 | case 2:- d/ R: O9 H" `" M( l- k! M, t
{6 Z' x$ Q% r5 T& [6 s5 d- Z' r) E5 d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 }5 e% Q( F, } [9 T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 E3 v! r' P+ G% P8 } {. S" l; E$ Q k1 u7 G' S. X* i
break;
4 E3 E" K1 ^8 ?. j2 `' @ }
9 f+ L( W7 M( |: q1 ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 F( _2 ^' U0 u
{
$ b2 u: ]: Z5 q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; L( `2 V+ t. H* }1 p+ u if( !pItemElem )& W [0 }! x; f1 p8 t
continue;
6 F2 N1 y% j6 b' W+ C# s7 e if(pItemElem->GetExtra() > 0)6 R. `. i( Q$ J$ D+ A
continue;
, O$ N W8 N. {' C+ I* _/ n if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( R! F: q# H- v/ a' _! l
continue;
8 B6 z) u5 w% J) t- P: A if( g_pPlayer->IsUsing( pItemElem ) )
L: L5 ?, z I continue;2 I+ {( L0 A8 p w2 f' B8 Y
if( pItemElem->IsUndestructable() == TRUE )
: e+ ~) \5 ]1 c7 B0 E5 F {. w! \6 [+ n( g. W' k0 r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 l" H1 m" Z. j6 X8 M
continue;
# U5 c& g8 z/ _) i; P8 s; F }7 W2 P. O" ^5 ?: m9 g* L0 |, g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
A% l6 ^) F# a/ Z; F) T' a }
: E2 Q5 s5 K# N8 Z break;4 B# `7 U" O5 K9 `- g
}
( O, e |* l/ k- v5 L' D case 1:0 B" B/ K( J7 L3 p4 D# l
{
/ n2 N2 U- o. X @2 A9 C/ G) W6 z //整理背包
- X, M' N$ V- z- C4 o2 V+ J% m1 S //////////////////////////////////////////////////////////////////////////
! ~3 z- s2 m: a. H$ N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ p1 ^1 }! ~) m( l
//////////////////////////////////////////////////////////////////////////
8 `& }1 n& q+ M+ y3 s0 w& g& I //////////////////////////////////////////////////////////////////////////' B, {" ~/ x) c8 N5 W* w C
CInventorySort* pInvSort = new CInventorySort;7 B8 ~ v, H o) l9 h/ {
vector <sItem> vItem;3 Z) A- |* g3 ~$ B+ r! v
vItem.resize(MAX_INVENTORY);//初始化大小
) }- `# n3 q; A% o- J5 p. o //////////////////////////////////////////////////////////////////////////- u" F3 d% o) W, O, H3 x
//填充数据$ A- i, s# _0 O
for (int i=0;i<MAX_INVENTORY;i++)
1 o( ]% G% f# z) Z- H {
7 H( L" i' k3 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) i: }2 _3 k# q
if (!pItemElem)
1 E# \ u4 N7 `7 W \2 o& S5 \# v9 E {
& R7 g8 I$ n# ?! x0 R vItem.dwKind2 = 0xffffffff;$ f4 x" X( G6 s- Z
vItem.dwItemId = 0xffffffff;
( c( \$ c8 A' V5 w# Q: ^ vItem.nIndex = i;4 C# V U) ~9 r- e# I
}else {' m. w6 \# ?& W) Y F
ItemProp* pProp = pItemElem->GetProp();- H. v4 f) S& l0 |# e# E8 T' N" w
vItem.dwKind2 = pProp->dwItemKind2;
& z- A) A* _( Q/ W1 X# w9 _ vItem.dwItemId = pItemElem->m_dwItemId;
7 h7 J' f) \% i+ ^ vItem.nIndex = i;1 i0 X" _3 G' Y6 ~$ ]
}* b! r. B5 C5 }; [: {5 ^- Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ e2 o% `- J5 S. z }
' ]7 [6 R0 D4 J4 k, ?2 E //////////////////////////////////////////////////////////////////////////
- d8 ?! P) A& q" s0 z/ l3 T$ u sort(vItem.begin(),vItem.end());//排序$ G8 c7 W) q& ~5 a y6 T8 A
//////////////////////////////////////////////////////////////////////////: t4 W5 z! p# q6 e! }% y+ K
//交换, k% |& M7 Y( N. v+ z
for (size_t i=0;i<vItem.size();i++)1 Z4 H5 a! t; L0 N! I; x2 Z" P
{
5 E' m# q4 K; ?$ T1 e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 h/ G2 C' X! p2 j3 I. Q
pInvSort->Add(vItem.nIndex);) t- V* W; Y- P4 u9 C4 o' m' T3 ?
}
1 C m) z9 `1 q) E! N o BYTE nDestPos = 0;* d" `1 ~: K6 ~" M* x+ d
for (int i=0;i<MAX_INVENTORY;i++)
) A1 o. C, @; o0 }! P {
8 T7 M {% w0 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* Z1 s/ F* ], h8 F; J% N
if (pItemElem)
7 V' u. X: h6 f( V {
% u: M e3 Q4 M. p; L; d* e if (IsUsingItem(pItemElem))& W, P+ T4 d% k
{$ x5 \! R8 |1 k8 R L, h, \
//这个位置无法放
' E% ^ }& G9 c, g% [" { nDestPos++;
8 j6 y% S7 {) V9 ` } Q# s( H5 p% S' ]
}9 R7 f+ v0 R. h4 Z1 M7 n
BYTE nSrc = pInvSort->GetItemSrc(i);9 s( S, X0 g! L, t( `1 t5 s; X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. ]8 c, f* d. l# ]8 @2 J if (pItemElem)
/ o; M0 H1 h4 I5 g {
3 x: Q9 u9 N" r! T6 N. v" I if (IsUsingItem(pItemElem))
6 E8 k" q3 ]9 Z6 [' R {
: P6 j0 ^3 m3 `$ k1 f* B //这个道具无法移动,跳过
8 Q9 K. a9 R/ W: S% R continue;
; @6 p! z' ~! {1 O% m9 i }& D2 B3 U/ o7 @1 g+ ~( y5 F2 {
}else{8 U% \8 L( D" D: w; U: Q
//空位置 不用动% E2 L6 _6 [' V8 @7 L; W6 r0 @' }" d
continue;8 ~ a9 i2 o" s4 B) {
}
c) a; K; {& g K: S- e9 T! G //////////////////////////////////////////////////////////////////////////6 ]$ M) G3 X5 k% x& u h
//开始移动6 q% o" L* t5 Y2 `1 r
if (nSrc == nDestPos)7 ]+ m4 }5 l* h
{/ v5 z* w9 X& t
//原地不动- h1 q# s w. k3 P
nDestPos++;
0 a; v! M% F1 n; u2 ^ continue;2 l7 K! g+ w( x
}
# }# q/ S [' {, ` pInvSort->MoveItem(i,nDestPos);
, _& Q- i/ u" t0 A' G# R; y# U g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 o3 n& {& V) o+ J. _ Sleep(5);5 ^0 F M8 Z' i. V
//Error("移动 - %d->%d",nSrc,nDestPos);0 c3 F; Y5 X" Q
nDestPos++;+ `& p/ y" M' Q
}
. F- d- j7 `" o# j //取第一个元素的信息! m3 d; I3 [; M1 ^' |. `- a
/*6 g% {* f* r+ y8 {3 G! c p
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, }. T! g2 `: |. w; x+ e {* C6 R9 N+ |0 B# [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- @" d& N1 U9 a4 m' i5 e/ V1 Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 D/ H& F. e1 A }
) e. m$ h- K# @6 |& X4 c: x */8 G& ?0 _7 E* i$ v7 J
////////////////////////////////////////////////////////////////////////// k2 j: l, ]- M g* E
break;
6 X2 `7 U; t; B5 H }' t/ h% e+ ~. A" {3 \4 q+ d0 k, @
}
1 k% x+ e2 H/ s) V( H}6 R% t% B1 ?! C" M) s! I
m_wndMenu.SetVisible(FALSE);
: U) O+ O. s* B4 o2 D s. h: S4 A3 t4 x9 B% B$ s6 g
--------------------------------------------------------------------------------------------------------; z$ v3 [* r1 b9 L+ b1 E2 u5 m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 W8 b" k% O( {8 m$ \, S{
n3 |$ l3 P3 |: Z# kBaseMouseCursor();
1 E( W2 G+ t: V8 `+ J}
; K3 y* m( n4 L, @8 i在其下添加:+ {( y( T# l* L. j6 M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 q! W2 Z! i# J7 ^8 I% ^{7 u6 C2 }3 I" F0 u' X& @
m_wndMenu.DeleteAllMenu();3 P) m. t. c7 v& U4 e/ q! ?
m_wndMenu.CreateMenu(this);/ o6 X" _# e8 q" V d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 t& X; N2 Y, @8 C* Q
7 y2 h/ I8 X* g8 u' t- Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; U; X3 E. G# M. @{
. s: }* C' Q# [4 x //P以上级别才可以删除所有道具6 c; g; o2 H3 }! j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 M0 O! [6 C' I5 V) V8 a; @2 I}
8 y: N8 S6 ^+ H. v* jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 a/ |7 S" H# Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: g3 n' [) c1 Q5 S" a# om_wndMenu.SetFocus();. s$ V( E3 S& m0 r' B6 X
}/ s: b$ a" e2 g; }2 X- P9 x4 c
------------------------------------------------------------------------------------------------------------9 c5 _0 M6 Q$ ?- d: `! B' v
*************************5 k- e8 ?8 t$ N' v: d! _
WndField.h文件
+ O0 @. g1 r" B) m- M: K. \*************************
5 M: e5 n6 o9 L9 X; Q搜索:BOOL m_bReport;
4 r0 Q+ J/ |! t3 ^9 I. G其后添加:# _: i h$ C5 I8 Z
CWndMenu m_wndMenu;
1 y5 E! x9 ^( Y1 b: ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" Z6 `' D( U4 q
其后添加:' n9 r ]" y. v# g& ~8 i& c% G
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 ]( H h8 ~: j+ V# J4 ^0 T
" e& E& l. Z8 i3 v ^! N/ i% W- a' z7 D
|
|