|
|
源文件中_Interface文件夹下WndField.cpp文件
3 y" I6 Z+ `7 _1 l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 g1 p- c/ X, S3 K' V5 @ Q
7 n) h+ r7 G8 `8 U, Istruct sItem9 N: N: {' V0 E7 ~
{" w" Q- I& b% I9 V1 f
DWORD dwId;( C9 E# a% d' l0 A4 D
DWORD dwKind2;
% C" H3 B8 h" c2 b% w/ c, e) [DWORD dwItemId;
& V% E2 ^& A) B$ ~* O+ M% tBYTE nIndex;5 J- C5 G6 Q0 R: x
sItem(){( t$ V: |4 k/ y; O3 J
dwId = dwKind2 = dwItemId = nIndex = 0;, S& K$ T @8 ]) |- ]
}- }. ]9 ~1 G& W2 D0 V1 T6 l4 B, w
bool operator < (const sItem p2)
/ O% i( \6 Q/ H3 v7 x/ z{
% ?; W( Z Z( ~! I$ E% O if (dwKind2 == p2.dwKind2)" Q: E: K7 [1 J! |+ E5 a, ?9 E' o
{) {0 P8 i3 L0 I5 X4 x) j7 q5 c
return dwItemId < p2.dwItemId;
6 e1 m# t& }' C) n }else{2 Q& G, q( i: b$ a' x3 j$ _
return dwKind2 < p2.dwKind2;
" Q' D3 T. Z! C, _ }1 n$ d9 g/ G8 w( C; b! I- z3 v1 P
}5 v8 @9 g1 M1 p; n- i
};$ t9 `9 h; H! _2 Z8 ]& u
class CInventorySort/ R+ j5 J4 N# g# v
{0 V: z i1 g. y& x0 a3 w
public:
6 |0 V: w8 N5 `" T9 D2 a# C2 v; o8 MCInventorySort()) d. @+ v: x6 i+ K
{
8 f4 n/ K' I) A m_dwPos = 0;+ [) _/ e1 f* M
}* g5 K# G( {0 t; L1 h" \5 j( p& g* ]
~CInventorySort(){}, L; [' ~9 q: e3 r
private:
, @# ~. n8 l7 d8 _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 R' ^( p$ ^( p1 n$ |* }! M' vDWORD m_dwPos;
8 P# Q/ c2 z( @. M0 L2 c5 ]2 spublic:/ F. E) J. x, @" G a6 k
void Add(BYTE nIndex)4 c0 i6 F5 H( X5 Z$ B
{
2 r" {4 d. A; B* t if (m_dwPos >= MAX_INVENTORY)( f3 |/ ^! A7 B( e2 }# e
{
8 V# W8 @: v7 {+ r7 G i. ] return;/ L, Y# R7 \+ {- W: b% Z0 W$ n2 R
}" V/ L; N5 M5 C L
m_Item[m_dwPos].nIndex = nIndex;$ A, v6 g& M! h) \* V6 {- I
m_Item[m_dwPos].dwId = m_dwPos;4 e' x0 T! M% R) {8 J
m_dwPos++;
9 Y1 |( j) S8 K+ ~}
% X- x- L2 {6 S$ W8 o) {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; m j* C# F% ~# }. z8 U. `
{+ v4 \8 j) a: g# j, g6 }( ^
for (int i=0;i<MAX_INVENTORY;i++)
" @1 M5 |+ L4 m3 a7 k1 q. m {& v( d$ ]/ m: G' ^
if (m_Item.dwId == dwId)
3 I4 Z# H7 z5 d {
x/ l+ S; h1 Q return m_Item.nIndex;
9 w7 m& x- w- h5 h; o4 w }. n$ L: P3 _: ?0 C1 E% J6 H
}+ H7 k3 o& s" s k/ u
return 255;5 t S, U8 u; @
}
+ I' S5 S w% @/ \% L# lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 j/ _. I7 V( @: [6 s. G; U8 k
{
- X* l( m8 d0 {" [ BYTE nTmp = 0;1 I" w9 H" h& N5 j. p9 C9 C6 G8 L' Z
bool bDest = false,bSrc = false;
5 f+ @6 i8 ]! o6 V1 p2 U( n$ u for (int i=0;i<MAX_INVENTORY;i++)! D' w: r# G6 E# x3 S# ~% w
{
5 |) H8 t7 |% k) ~; l' b: | if (dwSrcId == m_Item.dwId)
) X' f, F5 {9 d. D5 P2 X* o {
0 A5 }4 w( {! j3 N ~3 q //id相等 则 改变对应的dest和src6 X! {( r& P4 U5 g: S: {
nTmp = m_Item.nIndex;- @, m- i- d! a, w5 r
m_Item.nIndex = dest;
& O* D3 r3 r! F4 z' a+ W }
/ b, x. W6 f4 w4 w) W }
3 ?$ D3 h5 C! S7 r/ {" L; v; `# S //临时数据保存完毕,交换开始
/ T& e1 Y" H) T D for (int i=0;i<MAX_INVENTORY;i++)3 @; ~% a0 C6 Z; K: y2 W! N( J
{
$ e$ A2 [9 e0 e1 t6 c if (dest == m_Item.nIndex)
Q+ L- ]+ S& A3 `" d" K) ? {
( V/ v! ^ d* R) ^& n //id相等 则 改变对应的dest和src* J' J) R/ M+ p/ D. V; w( d! K/ E" K
m_Item.nIndex = nTmp;: \+ i' F* B: G8 R4 Q
}
; F) Z* a. a/ o( h }
) ^; Z7 D, I3 E% Z6 ~- O1 z}. R) `9 H0 e! {' \, r# X: g' {+ u
};
& g( ^, x8 {3 v8 I c7 I6 E-------------------------------------------------------------------------: G1 Q% y0 Z& I
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 I. D( H% Q! a, k e$ F+ |# G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 z- T( M* n& v, f' u
紧靠其上添加:- l) c- \ ?5 h8 c
if( pWndBase == &m_wndMenu ) e. I( U8 S' L* s
{' h5 V# q. d5 w' ~( M
switch( nID )
. j) u- A3 B& A$ f" D. f2 A {( t2 f: E1 B V
case 2:( X1 }* B5 I/ S$ z3 t# [
{/ T) H; j% E3 L6 j u
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: Y& D2 U* {4 h4 d' r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) q; x5 k) A( T) z
{
, V! Q" v( |. ^' g+ l break;
! A& Q% [/ e5 w' o/ P' W }9 O2 _0 V6 Q& t9 K7 N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 \* V1 X5 c- A3 o# Q
{
8 p; q+ N0 X% h; u1 ]$ x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 J1 D% z' a4 I
if( !pItemElem )% ?2 H. q/ V+ z1 X* V5 R A
continue;
/ j) X& u1 e( F if(pItemElem->GetExtra() > 0)
r+ Q* I+ \" f! h, x4 A: a continue;. {0 u$ t. w- U1 h0 ^; S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 L; v, V" Q/ u# m continue;
9 X2 J2 b/ J D) t0 K- s8 q if( g_pPlayer->IsUsing( pItemElem ) )( W2 t, k2 c0 X
continue;3 n1 L- Z+ H, [9 u( }( [0 t$ n+ `2 _
if( pItemElem->IsUndestructable() == TRUE )
) m4 ?( p, e5 Z7 X y {! M- M3 v3 \' X1 J- O5 f2 R- v/ C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! Z5 C, a: K+ b+ V% U9 E8 P continue;
2 Y( q3 q2 f- k* ?& \$ Z }, e- D- M- w9 h; W* v% X6 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 N. B; D3 y$ U7 Y: V }4 k/ t4 s3 Q, N5 g+ n+ z( K2 b
break;+ ^, _* N: j$ ?! F" `: q
}
/ \2 G6 A1 S7 f* c0 ~/ e( h case 1:
5 E3 F" a! R9 a# j4 t {% I2 _1 |( b+ J
//整理背包
3 S$ q$ ?: O( p; L# T7 ~ P //////////////////////////////////////////////////////////////////////////7 I+ B3 h* I9 G C: K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 g+ _3 D- ~# \& L5 @+ W3 ~ //////////////////////////////////////////////////////////////////////////
6 O+ D" R, p" y- {- k //////////////////////////////////////////////////////////////////////////
) _" o* r; I. D2 Z CInventorySort* pInvSort = new CInventorySort;
. C9 ]; |, v$ x) m& V vector <sItem> vItem;
6 U1 R$ X. ?+ f: J4 G vItem.resize(MAX_INVENTORY);//初始化大小+ l. b' b. d* [: p' t) ~
//////////////////////////////////////////////////////////////////////////
n# i0 l9 b0 w) t$ v4 @7 D: ~2 w7 F //填充数据
" u# r. X! n2 ^0 J y* U for (int i=0;i<MAX_INVENTORY;i++)
: s! v8 y0 L) H: k" S) t$ m1 O {
6 f. R' g1 X" W3 |! ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 g! x1 X! k$ K C2 t1 P if (!pItemElem)
$ q1 m6 P, P: U: ` {
3 ?: ^- P& C+ G# G! Q- C vItem.dwKind2 = 0xffffffff;
2 D9 k1 a; Q, `* y9 b$ F vItem.dwItemId = 0xffffffff;
d5 x: Q- _% } vItem.nIndex = i;4 a* p6 ]6 O' f) o' d/ v* }
}else {
! n; U0 x0 J! s+ T& k4 z. q ItemProp* pProp = pItemElem->GetProp();
) }0 f6 m. D; g, y; K" K vItem.dwKind2 = pProp->dwItemKind2;
O0 \2 i& O* C: Q6 N vItem.dwItemId = pItemElem->m_dwItemId;
" d2 I$ s/ P+ C1 T vItem.nIndex = i;+ h* h5 ~4 E) N# j% d7 }
}
# u' z0 A; H) L/ |- ~- p7 m% g8 ~ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 U* ~+ f3 X8 H. V
}
( D% e7 d$ X. \# f& M //////////////////////////////////////////////////////////////////////////, m: Y0 h8 B: O
sort(vItem.begin(),vItem.end());//排序! g) E) M3 u/ }/ w- m+ K
//////////////////////////////////////////////////////////////////////////
( C" k* B8 i2 E$ P0 u //交换
- S/ y/ l U5 O6 i3 R7 k4 Z for (size_t i=0;i<vItem.size();i++)
/ _: V: m% K* u, z {; M9 Z0 x! p, B/ Y5 \9 `0 f1 T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ H4 T3 A+ G3 z
pInvSort->Add(vItem.nIndex);/ ]6 |! E# O9 M- N+ H
}8 P1 A: w# f2 i0 [( r1 ]9 W+ B1 ~
BYTE nDestPos = 0;5 J# }" d2 k& ]2 W, }9 \
for (int i=0;i<MAX_INVENTORY;i++): Y9 D' W4 d$ N4 g, I! ^5 v' V- R. i
{# ?" x$ ?8 f. ~4 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 A1 c4 ?" C( x; `) `9 M/ c! C if (pItemElem)
: L* _* d, f( S8 c {
( A& y" ^, J& A$ C2 c$ W, t if (IsUsingItem(pItemElem))
" l- B4 p% k4 y {
. I9 R; x; N! m& u" U //这个位置无法放. ^) k2 Q7 T+ _- P" }
nDestPos++;
9 s5 O; \1 T6 v0 F5 O0 e8 D }9 o7 v3 Q2 ^7 ^8 v: E P a
}5 m4 V: n: L6 j3 w: P0 Q& p
BYTE nSrc = pInvSort->GetItemSrc(i);
( z9 d/ g Y$ F) T5 l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) K- y8 \4 Q* U8 j/ r' G0 f if (pItemElem)
3 t v, I; e6 l6 F( S. |0 ] {
$ { n3 |+ |3 W if (IsUsingItem(pItemElem))
! F& S7 O% w) X1 N. j8 A {
) B, u2 {. P2 q1 ^! X/ E //这个道具无法移动,跳过' M: e, \% K. @) }6 M
continue;
) r3 a( b! Q4 q# [ }
" Y4 w4 f, ?1 d; |2 C' R, t2 }- z }else{3 f; \. q) ]$ t: [' @* `9 o) }) e5 B
//空位置 不用动
8 z4 ` x5 K8 L0 {9 m! a5 L- e continue;( L; E- V- N: q# z5 \# L
}3 n- I& i! o, \' r9 {4 Z) d
//////////////////////////////////////////////////////////////////////////: X2 M( C# @8 _# G* Q5 `
//开始移动
/ w! a- R! u/ Y4 J: { if (nSrc == nDestPos)4 a$ a0 K K; c6 D9 h3 `4 B4 }
{
! m& t% h* W" h# t6 B( f2 J0 I //原地不动; q# ~! n& ~" h, m( ^2 A2 i8 G
nDestPos++;2 Z" j7 o3 g, H3 m* u. j% F
continue;/ G" Q3 V/ U3 r8 |
}
: c+ K& Y: Z6 X pInvSort->MoveItem(i,nDestPos);
1 N4 E2 ~- M+ b" T& u- S g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( s; D# o Y, f6 B. G Sleep(5);' i, K/ V% z5 |. Q
//Error("移动 - %d->%d",nSrc,nDestPos);
* a0 M6 g/ K ~5 t+ Z N' ? nDestPos++;
, \0 B+ ?4 P( w9 ] }
( m, x" u/ `' H& I3 V //取第一个元素的信息+ I. @$ J, u0 w) {+ n2 p
/*! |" A% R. ~* m! ~; c" k, w: t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 }# l" ?3 o) i+ d! I5 U- h" V {
( z0 [: }6 B+ U. l. e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 i$ a4 X( }" B5 H4 r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 x6 P* t6 E/ k i/ n3 [( j) J n
}
" D& h k8 g, f* m; v$ O; I */9 `3 r0 K2 w3 S$ a9 M! F+ Y( L: a
//////////////////////////////////////////////////////////////////////////: B; R# t$ S1 D" Q# i: k- {* X, k
break;3 g$ Q% N8 k" Z8 t0 y
}
6 Z6 d( P( S5 g } . G6 u0 g+ G$ k) z$ L- I' Y
}
. m2 }( L' ?3 p3 {, }* l6 _0 bm_wndMenu.SetVisible(FALSE); Y4 `4 b; n8 e7 r/ L6 o; D2 S
# ~& q. W/ r0 f. w9 o) B
--------------------------------------------------------------------------------------------------------
6 |4 W+ Z6 Y: _8 M8 u* _9 O1 w( \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ I' o) b @& h5 ]0 n
{7 d6 y$ l% Z/ R6 ~3 n
BaseMouseCursor();. @% o6 A+ R4 L7 O
}
3 M+ j/ e9 {1 Y; p. q在其下添加:
7 \ \! V1 t7 \' g3 s6 uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), b& C. L+ \% |: D, m7 |- E
{$ |4 j& B' ~; o v
m_wndMenu.DeleteAllMenu();
- G3 b7 Q1 ~" s$ Em_wndMenu.CreateMenu(this);
& y. I5 Z( W6 V/ F- q, pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; ]" ~0 ?" K# Y
+ \6 r9 B: c. r1 G( C, P; y( e- jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 a/ i8 o2 P4 ?; \! _{" P, ]* b2 D3 [9 b& U5 l0 E2 @; ~$ |
//P以上级别才可以删除所有道具! R/ [* {& ^* M4 I/ Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* P9 l( u8 _4 `+ D% E7 N4 c}5 s# Z! @8 t! z# ^$ u, x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. x- Y+ B- S8 o- J1 X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 X) B9 H" [, `) W2 b
m_wndMenu.SetFocus();
1 _1 q0 o6 A4 @: G" O}
* i* d" A8 r$ o, u------------------------------------------------------------------------------------------------------------3 C- M: @) j3 v8 j
*************************: X) c) F+ ~! T C5 _
WndField.h文件, M r( U& l8 p
*************************
0 T! J8 m$ [0 @: k. c0 P! V: w* C搜索:BOOL m_bReport;- j4 u6 `: [0 B m) ^
其后添加:) Q2 l' @$ l+ L
CWndMenu m_wndMenu;4 c- u2 d [0 Q! z5 Q1 f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 {6 N! u( p2 s, x) h
其后添加:; O* N! n# V" x. t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: T* l6 f8 T, Z7 T( |3 J% P! t! O6 Y: u' y5 A
0 _% x, [) ^ u7 M5 N: [ |
|