|
|
源文件中_Interface文件夹下WndField.cpp文件
- I4 b4 _. O" [+ q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! G" v+ t; ^' @8 S9 H" j: \8 T
$ Z7 s d; r# G! n1 p2 hstruct sItem- e$ m% e$ S0 p1 E
{5 H8 c4 k2 L2 T3 A1 g
DWORD dwId;
: B# N5 Y. n' o/ DDWORD dwKind2;/ @) w1 Q# P8 D
DWORD dwItemId;
* L0 b; j4 U. P- @: c; OBYTE nIndex;1 b. x) _4 Y7 j( ?' h9 T* {
sItem(){
# T0 ]6 n2 ?% c% Y4 b dwId = dwKind2 = dwItemId = nIndex = 0;( Z, F9 ?( M k6 g- c, |1 U4 {# n
}
$ g. F, l0 N! B$ tbool operator < (const sItem p2)- X& ?* Q# P& F4 Y
{5 S6 }' E J: E- F7 J3 W
if (dwKind2 == p2.dwKind2)+ S: z" c" Q9 b% y. S) Y8 g+ @
{3 z1 O( t' V7 V' a$ j! ~) D
return dwItemId < p2.dwItemId;3 K; ^) z# ^+ A
}else{
: z6 b0 x0 g) e, V* E: i7 ^& x+ q return dwKind2 < p2.dwKind2;
' w. e! K4 y- B* H2 f) b }4 x @& t! d+ D
}
% n- E- H5 v8 N8 u};8 @! U- ]( A9 r4 ^
class CInventorySort+ H" M) v! Y% @* b' n
{
# R2 S% J: X0 i$ gpublic:
, Q) r; u/ @( O- L* e- }. eCInventorySort()
6 @. }' }# {* P; G{) s# I0 p, Q4 S* @, z
m_dwPos = 0;
; {& ] E6 Y( Y}
1 ] w; Z6 Q% N~CInventorySort(){}
! e- \* f) z0 \0 d+ V7 _3 eprivate:
* y8 i, `$ F0 r; l+ ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% @# G7 D; j; [: b+ u2 D+ x- YDWORD m_dwPos; y* R/ D6 O3 k! }
public:
9 U: j& Y# b' `$ _void Add(BYTE nIndex)
' p I+ Z5 ]& a( e6 P0 [& B{
5 R8 u4 R# o+ a7 ?0 |' z; s if (m_dwPos >= MAX_INVENTORY)5 L3 t8 m4 |4 y
{
) C$ y: ~$ |2 x V" |1 l return;% e! j9 D4 [+ s# a6 v
}% }# t& [2 ~# Y( M. m5 e% ]) n8 Q5 P. \
m_Item[m_dwPos].nIndex = nIndex;: `% q1 ^& n# c1 N; _3 @
m_Item[m_dwPos].dwId = m_dwPos;
/ s* v2 Y8 I, J4 w4 |1 I! G m_dwPos++;
( a# D& G: t4 O}; r1 K; j+ J x+ W8 ]# N" L, [! U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# T( D8 w1 z; \{4 p( w# e2 c; Q1 l
for (int i=0;i<MAX_INVENTORY;i++)9 y/ o( l3 p$ w2 k, S7 c
{
# N$ N& c$ l+ @' K0 L if (m_Item.dwId == dwId)
7 o- o+ j5 w7 o$ B {5 @5 ?8 [3 X% T! c: I/ V4 @
return m_Item.nIndex;
( c' W$ |* h; c2 v) I }
- _& ?7 ?- ]9 w, c2 m } W0 o+ [* l4 A1 j/ i
return 255; K. Y- z- ?1 q2 S' t! O, E
} Q" K: N- w0 d0 u: O+ m, x: J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: N- Q8 ~- h3 ~+ u# z2 }{
$ X. P# L7 r8 H# a% E y' O% a BYTE nTmp = 0;6 S% l$ Z( [% P; R# e' ^. Q
bool bDest = false,bSrc = false;
+ \/ U3 Y0 D5 d6 R1 `3 k( r. r for (int i=0;i<MAX_INVENTORY;i++)/ c; E- j8 v1 k6 k E& z
{
' W- \0 Y; Z, I* ` z7 D# t* ^ if (dwSrcId == m_Item.dwId)6 `! E0 V( e4 a' h2 F4 `6 h
{4 }0 Q* ~9 ?& V" H0 z& T
//id相等 则 改变对应的dest和src' S! D6 e ]. I1 ?- G* B& [( P
nTmp = m_Item.nIndex;% J P* V3 p# G- ]! l3 u j
m_Item.nIndex = dest;
1 o3 k+ X. x# v! Z8 d* ` }
. V! m4 n: I3 F% O }# |% e U3 K$ h
//临时数据保存完毕,交换开始 O# X1 G" I$ c# w; z
for (int i=0;i<MAX_INVENTORY;i++)* V9 r; c* q F0 A' V8 _
{
- D! Z7 @5 ~: k; L4 H& W* }4 i if (dest == m_Item.nIndex)
4 ]& D4 _$ ^3 Q0 w( v5 u {
% d2 ~* I3 _' ^ //id相等 则 改变对应的dest和src6 ?) _+ J0 Y# s. t( T1 \3 z
m_Item.nIndex = nTmp;% N" M/ {0 s$ U# H e
}0 J* o, q/ v" v6 `) ?
}
# e: ~. ?5 H T3 F. ?6 r/ K" `}& ~ S3 \0 p) E
};
3 B0 ~ \ C& R' I" S! Z: I-------------------------------------------------------------------------
' m, P! a j, C: f2 g) z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 h9 \5 C1 {7 x6 B; s$ K3 C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* I# o4 ?( Y( l, k m& I- p
紧靠其上添加:
5 j/ n" S7 ]- f. r( o: i S' Nif( pWndBase == &m_wndMenu )
y' \1 b8 I* m K' H/ f$ ]" k( b$ S{, w, s; \3 g+ b E
switch( nID )' U) X6 z2 H: g5 j$ |% a n
{
" j' f) ^; ~4 H5 A case 2:
, q i3 M1 V" f* g. s$ p' C6 u {
0 ]' x/ j" G; ^: r. _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: ~$ d* ]& ?) E# Y# K2 ]6 J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. Y8 i8 v% S6 k7 U/ ? {
8 U& U' Y- d" S" r; ?2 i break;- h. j! U$ k, ^2 X# T
}
( G$ X% z# k9 C! y N; ]1 E* n# H$ J for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 z6 Q! P( d0 a2 }8 B' p5 u: U3 e
{
! U! x1 J- [' f5 d9 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 k0 o+ l3 A; j$ a
if( !pItemElem ). b% W5 T8 A) f9 f
continue;
1 T1 N% L. Y9 R' ]1 m4 n if(pItemElem->GetExtra() > 0)/ P8 [- Y! h2 W! L1 k
continue;2 V+ @9 [/ W1 _+ Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; ?3 Q- Z; w- B# z; ?; p
continue;
9 q. J- e( F2 U: N if( g_pPlayer->IsUsing( pItemElem ) )
8 |" J* W) W! q/ `. r continue;
7 M: ?9 }8 `; N- ^ if( pItemElem->IsUndestructable() == TRUE )$ T, ^& e' l( Y# z2 w( m
{, F4 _0 F$ }5 x* U5 r$ W) l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; T/ G1 [, R+ Z continue;. O: @* i6 @4 ]) P; c% ?
}
' A$ v" l: M8 f, a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ N e4 f7 l+ V% ?
}5 b1 D V5 h9 T; U; |% O3 X
break;
0 T! l8 D% T9 M* P1 O4 u }0 r( e: b$ i2 G# S
case 1:
6 g! v$ H, t! o; [$ a! { {% n9 K/ S+ v4 P7 G/ E/ P& N
//整理背包
, S3 M+ _0 _+ n- [' h //////////////////////////////////////////////////////////////////////////& [0 R. f2 \/ W9 L8 }1 C3 s6 g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ z- m' i# a4 d5 h7 } //////////////////////////////////////////////////////////////////////////0 D/ P3 s" Y/ ]& E7 H
//////////////////////////////////////////////////////////////////////////7 F$ c+ X& N* A8 W' q0 c- c
CInventorySort* pInvSort = new CInventorySort;
7 Y) K) x2 h9 K$ ~3 A1 A! F vector <sItem> vItem;; i; h+ o- j G4 ]% h/ z8 {; \
vItem.resize(MAX_INVENTORY);//初始化大小+ A) Z' t( b% V( F3 b
//////////////////////////////////////////////////////////////////////////: h1 `6 \; b# D6 c0 L7 W
//填充数据
o2 J1 W0 ]" A7 Y4 S. | for (int i=0;i<MAX_INVENTORY;i++)
- T6 ^& s( p# t8 m$ x {
& k$ l# Y# _5 }. u& f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: t/ Y' x9 E j4 O) [* z3 R" `
if (!pItemElem)
/ T* Y9 x. t t: r; U {: b: Q; k4 P( S1 `1 A, a
vItem.dwKind2 = 0xffffffff;
1 ~1 B% T! ]& f% s2 A# s2 w2 v vItem.dwItemId = 0xffffffff;
9 L' e- u- }$ ~/ [ vItem.nIndex = i;) w0 t- G: p/ C0 i9 D) H) h; D
}else {
5 `- `4 f% s% r ItemProp* pProp = pItemElem->GetProp();* G; N- m: H1 I! T. X1 e
vItem.dwKind2 = pProp->dwItemKind2;
# n: J/ B1 W3 [( E2 |# E' A( z vItem.dwItemId = pItemElem->m_dwItemId;4 O& m- V* O" G. _+ B
vItem.nIndex = i;1 {, t% a( p# j; O3 t
}
: q+ `# z/ f; Z1 D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& b, c/ D* I2 ]8 }) \* O7 r
}
0 ~( l. ]- Y, c( k4 | //////////////////////////////////////////////////////////////////////////
l! R2 S/ Z7 b+ `/ w sort(vItem.begin(),vItem.end());//排序
) b+ h* B! B* R5 V) @# } //////////////////////////////////////////////////////////////////////////( P& N9 D* e+ w8 Q% f% \/ z) U
//交换# a5 d: T0 }! C% m8 f
for (size_t i=0;i<vItem.size();i++): G' a1 u% F& C! ?" j, D
{
8 R( ~4 c) C/ |7 B4 R( q: y* ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# m* p8 \- P6 D pInvSort->Add(vItem.nIndex);* H6 F* I! _5 C7 g
}: X+ \* D1 n( m0 z9 n- f3 y
BYTE nDestPos = 0;6 v9 G( V; c/ R% J& i/ l, q8 s, t
for (int i=0;i<MAX_INVENTORY;i++)
$ I' \/ K. K* G$ X7 i {8 v" F5 M r# r1 w! K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) D& | D- w" I: m5 R3 F
if (pItemElem)# I9 V5 M# a D$ Y! d
{# u, W9 M. Y7 N* W6 p) z3 I
if (IsUsingItem(pItemElem))
, [- d S) r1 n* ~( ^& e {' B' l% l3 E3 B8 n* }' G/ S
//这个位置无法放6 t0 U( ~- v4 n8 ~: G
nDestPos++;& U$ M7 _' l4 v0 V4 w
}, K, _8 E* `" [$ ^4 y& ~
}
7 P. F" b; B1 Q s$ C; y# G BYTE nSrc = pInvSort->GetItemSrc(i);% y0 }! @* K( G0 j' d' r6 G3 [3 [1 t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" P# W- Y1 ~; c4 r/ H6 g
if (pItemElem) G) Q& R5 I; _- C
{
1 _+ y: _( l# a. V7 a if (IsUsingItem(pItemElem))2 q) P9 L0 M0 X8 ~, F0 y! l! e" ]2 @
{5 k4 T" J/ j/ p; {
//这个道具无法移动,跳过
3 n; m7 l- h% W. u, G continue;
4 r) I: n' Q0 w }- R9 I4 e. |. w6 k
}else{
9 o3 ^' v/ n2 f# H+ W/ @7 h6 C- N //空位置 不用动4 Y% h: r+ @9 `7 T% _3 L/ B3 B
continue;& d) v* d# E: b0 @" ^3 F g
}
& q: I3 F3 b' w" S //////////////////////////////////////////////////////////////////////////
" a8 D3 Q+ [3 u1 y2 G //开始移动
6 l. C3 r, }3 {% m. ~! ^8 G if (nSrc == nDestPos)8 [8 d: I( W+ q9 M) a: H
{
! a1 b, _, ^; I9 {. D& }" V //原地不动! o. a' Z: v' }, ^2 ~ L! f+ Z6 O
nDestPos++;0 w+ v2 {3 W! W, z
continue;- g! x$ d5 Z ]) Q
}$ g! |1 s, B9 H2 M4 `
pInvSort->MoveItem(i,nDestPos); O" Y0 f( T5 D* M% e5 ~* n' H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 S; M/ V! X* W! j' L" C Sleep(5);
2 i7 }% P# \3 S- A" {- O5 I, G //Error("移动 - %d->%d",nSrc,nDestPos);
4 Y; ~) D" d8 [9 r nDestPos++;
# n# V |! c& ? }3 `+ V4 ?& u& @8 H( g& B
//取第一个元素的信息 E( U& @7 [; I; b
/*+ p7 s- ?9 z, C: I1 K5 \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) @5 L8 p6 d- t- k* s G { T( T8 X# j& I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 D6 B: g- q7 Q1 N# T y) J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% U+ ~7 f" F+ c }
; h6 ^6 O* ~ Y, ` J */4 K- `% x0 F2 _7 r
//////////////////////////////////////////////////////////////////////////
. ~& ]( T, r9 |' @- c# U break;
* a8 ^' P2 Q4 N( W' }% O }( I! T' J2 ?4 ?& B+ d
}
, n: p3 \+ H3 r7 J L8 Q}
; i' X, X; r2 j5 `m_wndMenu.SetVisible(FALSE);
7 c$ o5 R3 H1 ?# T1 c7 b' P( J5 E+ }8 V% @1 w% S G
--------------------------------------------------------------------------------------------------------; C9 M8 y) B9 i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 N, d. p( d6 y3 F# {, a, S
{3 B- l$ v( d9 d# ]0 C# x) M; o0 @
BaseMouseCursor();
5 R* P) k: N' f, i: C6 y: n' ]}
# c% f( I8 b) n1 l在其下添加:8 C) y( R I8 H+ C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 r, z6 q {( x$ q, {# U
{. ]# [( r" O3 b6 {# q& [" M
m_wndMenu.DeleteAllMenu();
2 R2 ^% u0 q: nm_wndMenu.CreateMenu(this);; w/ p5 |# S1 k6 }
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" x# F2 K5 `, T2 e: X7 \
+ M# c0 b u/ T+ W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( i; F. W/ x0 _* B5 H
{. M5 @, [: {# x5 w0 d) u
//P以上级别才可以删除所有道具2 K" a( Y2 J2 n+ j* x; N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) J% p+ w% J; h. C
}
# C g: d. S- `0 v. B# X+ | Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ ^% N1 M* U7 p, W2 \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% S+ Y8 X+ [" H$ [6 C; ^m_wndMenu.SetFocus();
( Q! n4 {; m' u; o2 U7 a}# a/ w4 f% c/ c. N' D R# {0 p& M U! I
------------------------------------------------------------------------------------------------------------
9 G) J; [8 ]( A5 N9 k! E*************************
, G5 @! i2 I& W1 U8 wWndField.h文件' ]: w) |" p3 ?+ J% q
*************************
- ^% L1 @) j% q# R X- n搜索:BOOL m_bReport;
% ?0 f g! x; Z$ }, p( v+ X其后添加:
. ]% } ?2 f. t$ T" _CWndMenu m_wndMenu;8 S( h0 k+ r& O* d* p) h J @# f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ l- i1 `# F3 w, B
其后添加:
% r. }& I1 j X% b) L) `7 v) ivirtual void OnRButtonUp(UINT nFlags, CPoint point);3 T$ Q$ m% N. l
; \8 S# y6 E; {, b7 m" k
3 I/ h$ N+ j; ?2 T6 z7 o
|
|