|
|
源文件中_Interface文件夹下WndField.cpp文件
! ?) P1 C& w2 S) t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 m1 o+ O; A6 Y, s9 I# N& }& u
5 V- s' G# @3 Ystruct sItem- l6 N- [4 K" h! k. C1 K, I1 q
{& h9 C! L- d F4 b
DWORD dwId;
3 X! t* j8 z, s5 {DWORD dwKind2;
; [) ]4 G! e9 p5 Z( c! iDWORD dwItemId;
7 u! i/ h8 l: E' B a5 D8 ^1 PBYTE nIndex;
. \; C7 \) {3 p6 N; X! V: PsItem(){- [, T* J) O+ ~" D& K' y
dwId = dwKind2 = dwItemId = nIndex = 0; S2 I! |, _ W% o" C! C4 _) i5 ~
}
& M1 R9 Z$ h) x3 C4 wbool operator < (const sItem p2)
2 g7 }( o1 Z6 {( j8 \+ [{
/ E9 S f F+ [' m) | if (dwKind2 == p2.dwKind2)# d" W% i- S* I
{
$ A, I% l3 a% g E) Z return dwItemId < p2.dwItemId;
: v+ q( h1 V! i$ ]% v: W7 c; g }else{
7 d. B8 u/ I7 r. b3 y return dwKind2 < p2.dwKind2;6 n4 S8 Y/ h+ O3 b/ \
}
1 W3 L% B% P. L8 e8 [}9 p3 H& w$ `( U3 h, H( z& s/ f3 W9 q
};
( S- X N& E5 E' N3 V: hclass CInventorySort
5 z/ J) o0 Z9 k{8 s" c/ K: I" M. y! o! C
public:- N/ v+ |$ ~+ R7 |% w( z4 l( j% X
CInventorySort()
; I# E0 Q7 m! r) D% G" Z8 @{
0 X6 n( z, l4 }# o9 P+ ~# G$ ^ m_dwPos = 0;
$ E4 \' V! D- a; R9 X- \- Q}4 V6 j# \% e5 |5 p. F9 b p. r6 K
~CInventorySort(){}
9 Y7 d: |$ k8 O" G9 yprivate:
0 j( e; d/ ]9 b+ r- s. isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) q9 K1 q" t& K, U
DWORD m_dwPos;. N3 v6 V! N9 F" Q
public:5 ]3 c+ G( h/ t; ^- K# d
void Add(BYTE nIndex)
# D: f: O! R3 [: ]0 c{
" N& m- K8 n! x7 {, P; E. b# J if (m_dwPos >= MAX_INVENTORY)
0 a. ?9 a8 x. A( \& h) A {
" y/ g5 S! ~. q+ t7 X return;8 u1 K) n; p7 @( e
}
2 S- P' S& G: R1 C m_Item[m_dwPos].nIndex = nIndex;1 E6 N( |6 c7 \* m% A9 q
m_Item[m_dwPos].dwId = m_dwPos;
& o' i/ c) |" r! S- `: W m_dwPos++;1 }9 u9 t, Q, z# K
}& i1 ?1 f0 s2 V' u; ^* b. ] S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 S& W8 s, W$ P* r{4 o" w1 Z( z2 F9 ^% [) g0 I
for (int i=0;i<MAX_INVENTORY;i++). Q+ w) F1 ]* i2 L$ _/ Q7 A6 n$ \
{6 k2 s7 }0 {" T" {+ q0 e
if (m_Item.dwId == dwId)
; a. o: J. u' t8 l U% ^ {) d' [: Z' I7 f7 b! F, N
return m_Item.nIndex;
6 {' L4 |! |- ?4 ?( c }; _' l7 S3 u; v3 _8 x
}3 Q. R5 d& W# K V* D
return 255;3 t p9 E& y. r& i# `% V) H' y
}# k# }5 c& `" s, Z, x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 }& i4 W& B5 g% `{
& O3 ~6 n; T& a6 P% c* @ BYTE nTmp = 0;& J2 G9 {0 Z- x/ L
bool bDest = false,bSrc = false;* J( |$ {0 i! g& _$ ?3 B
for (int i=0;i<MAX_INVENTORY;i++)4 I u" _" K- q# q
{
2 C0 A; R( ~9 t: h) E- B if (dwSrcId == m_Item.dwId)- {6 w" m7 U3 G2 t+ F* b
{
: N' ^# U. B7 J/ w) d. |; N //id相等 则 改变对应的dest和src2 K. H* o' M# ?# s( K1 a
nTmp = m_Item.nIndex;
6 f8 J( S, \$ _: Q( n. X m_Item.nIndex = dest;
' p1 ^. {/ b# @ r, \9 S. U, l5 e, s }0 V5 t% B$ F, {9 K
}
$ J2 k% Y8 U, X+ l. X3 V8 l //临时数据保存完毕,交换开始6 o8 b) N3 [4 U
for (int i=0;i<MAX_INVENTORY;i++)
6 L& U% } V2 j% C& q {2 j2 i# a5 j6 x- H3 c6 c
if (dest == m_Item.nIndex)
8 |8 H7 i8 R3 R, O/ Z' G& q: N0 ^( p {
1 Y3 \* X. T* S# J& b( I1 R //id相等 则 改变对应的dest和src
3 B7 p; x& C) n# u8 l) r/ F m_Item.nIndex = nTmp;
0 ?/ W6 N3 J5 f& V6 V2 J0 e) ~ }
/ y3 p V2 X- e7 k }
( m' S( I" `) _}
8 a2 _. u. W* O o# i" s8 @};
7 C Z8 P- S( X/ O/ n-------------------------------------------------------------------------9 j# B* H& C$ r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" I+ i. \9 [9 e1 }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; N l2 s. t8 i" \& E9 U; W3 |) i紧靠其上添加:$ U2 i1 @4 t# D g3 Y) q4 v
if( pWndBase == &m_wndMenu )5 U# C0 q. d- X( N1 G2 x, c' V
{' k) G0 B3 n2 P+ D( Y$ V
switch( nID )7 A% n% i: c6 @) o' H
{
+ E1 I# T4 I( \8 q- C6 f case 2:. p4 s7 G5 g" A( ^. p( B k& S
{
* }' Z: ?8 G5 F2 |+ y& b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 U1 O7 F3 R, C' C' `6 n) Y* o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ x3 i6 q, s- {0 o) M
{
. r, E" p# J! i8 l! j break;+ |4 n: s: V* H
}# J9 B3 \, g$ T U9 {2 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% M0 g2 U$ T! k: p% V {5 o$ G/ |8 h! Z! P$ o) W. v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( d$ m0 }8 z2 P2 I
if( !pItemElem )
5 h; I; {: ~. x continue;
6 }9 w; ]& }/ a8 T if(pItemElem->GetExtra() > 0). S5 W p" e( x6 j0 m# M# a( p
continue;0 Z( T3 N8 N9 D0 Z7 r$ v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* o! ? K% _6 a! R% [1 h continue;6 |. o w2 a& O' C. c. C
if( g_pPlayer->IsUsing( pItemElem ) )
3 d. M8 N& Y' \! y continue;1 m" v! S* `# s3 v
if( pItemElem->IsUndestructable() == TRUE )! X, s/ J; _" y
{
: {% y7 Q& l9 k/ V" s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, B4 Q! I Y9 h6 y
continue;6 `1 C0 d6 I8 e% z3 j
}& ]( W V6 Q/ `/ m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ L8 L- y+ K- @. ^$ S/ E! U
}
& U% `- U# z3 J) { break;' Q' U6 Y( A% m
}& h, o* ?6 p. M7 t0 i
case 1:
' [" D9 X) B7 z$ H7 Q {
: k7 U( G7 w3 ~1 v8 h) P, G+ P //整理背包
$ l4 g5 r$ ]$ P. ` //////////////////////////////////////////////////////////////////////////
0 p7 Y Y9 L5 Y m* D p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ l# ^( B, }! J
//////////////////////////////////////////////////////////////////////////; x" @( n6 N5 p0 o
//////////////////////////////////////////////////////////////////////////
0 _& k3 M, e5 O/ {* W" c0 d CInventorySort* pInvSort = new CInventorySort;, w7 g; H: O" l* r8 | b; |. x
vector <sItem> vItem;4 p( h: c9 f5 e& }
vItem.resize(MAX_INVENTORY);//初始化大小) n! }' K- x& F( q3 x# T& `! S
//////////////////////////////////////////////////////////////////////////$ i/ P5 n- I3 D
//填充数据
. F2 N: p( B' T for (int i=0;i<MAX_INVENTORY;i++)
1 S9 O1 p6 C0 c1 y" J+ @& J {6 A" n) q' i$ P4 n' F; l' _ f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 ^. K0 W: U, h+ x if (!pItemElem)1 A: C9 P0 a5 A2 C1 m/ H
{
5 `5 c& ~ {! [8 ]( V$ } vItem.dwKind2 = 0xffffffff;
! I( j- h ^- c& i; s/ g. X* | vItem.dwItemId = 0xffffffff;( x( z6 A5 c" |
vItem.nIndex = i;
% O6 ^" G/ I8 b }else {% ~7 a; w7 o( w( t$ G
ItemProp* pProp = pItemElem->GetProp();8 c4 B m( P6 ~, n3 d$ k3 L
vItem.dwKind2 = pProp->dwItemKind2;0 W$ a; D1 k) r9 N
vItem.dwItemId = pItemElem->m_dwItemId;3 p* Z9 S4 C4 u
vItem.nIndex = i;7 A8 T# L" \7 z3 q/ U O/ D* i3 w$ S
}
/ U" v& u. {. F; A+ g% e1 z% } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ P7 N! z. @1 v Q8 O1 Q/ X8 d; ~
}; ~8 k. _3 s- V7 D7 Z" g
//////////////////////////////////////////////////////////////////////////
* `7 j7 c1 C" h) w" s4 n sort(vItem.begin(),vItem.end());//排序2 X$ g2 p: ^3 t, R7 l0 _0 L3 W
//////////////////////////////////////////////////////////////////////////' }6 E; T' ~- f8 K) _3 d3 C! u
//交换# _' ^% m# P- O$ M
for (size_t i=0;i<vItem.size();i++); K. {; u. L* @. g+ D9 [+ }" ` c
{
' D/ a Z* q t4 t* R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% P3 b) `+ }+ b pInvSort->Add(vItem.nIndex);5 ?4 v" V$ m+ H" H& v5 Y& ?& w1 T
}
( q5 N6 O& s4 v! e! g+ \6 F BYTE nDestPos = 0;7 ^# @9 r8 K: S* F7 s5 s# N: a( `
for (int i=0;i<MAX_INVENTORY;i++)
6 ]5 V* H4 p. ~, w9 T0 d {; |& |. h" a- G# \7 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 `+ p! m, u5 W2 F; Q9 X if (pItemElem)! g5 H3 l4 K' z- F
{
0 L5 R/ o6 D: ~" a2 A if (IsUsingItem(pItemElem))
7 s5 [" d9 g$ o( P X5 e9 R8 U2 T. Z {
T$ t! m& U: @, L& j C //这个位置无法放- u% r* X. `" G) w: @
nDestPos++;2 \5 G ]$ Q6 l
}
2 j& J) {+ `( v4 P }
3 E% S3 V2 M5 _2 S% K" z BYTE nSrc = pInvSort->GetItemSrc(i); J: C8 K* x7 \0 h5 D# e" j7 W$ R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ H$ J- [8 d* U. L if (pItemElem)
" h$ T! _4 g9 @. S {
3 }4 z0 \; D$ k6 I if (IsUsingItem(pItemElem))0 V. w6 F4 e& b9 p4 \
{6 S% s/ {% e# g7 C' ?* j5 n
//这个道具无法移动,跳过
% ^' D) [0 z% P! O P/ f continue;: q! l" f) z, y' s& G4 e
}$ u, H0 m5 \6 V Q5 m
}else{8 _& y9 e0 r+ p9 _
//空位置 不用动. ^2 E5 d$ x+ ~; F
continue;- R' k5 M7 W! {2 J6 c( U( g; Q
}
0 D& b' \; h: j% v/ ]: l0 l) Y //////////////////////////////////////////////////////////////////////////* m* i& Q% ^) |0 R2 L) @9 X+ P
//开始移动- }# U/ j* F, m3 ~7 D- j) n! k
if (nSrc == nDestPos)/ ~. h1 ~ K5 p8 C" J, ^
{7 t; k+ j, m9 F P9 m
//原地不动' Q$ L- p+ R1 u2 q; W
nDestPos++;/ w* G) E% |2 C( K1 c' m/ a
continue;
1 k- ^0 F. L7 \$ a, d }! m. N5 w* y; I1 }& k8 G( K
pInvSort->MoveItem(i,nDestPos);
" j; @3 O( O; W1 w0 ^. q7 x4 t g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 l- M4 m z4 D5 Y- w Sleep(5);
4 F4 q3 I0 O% R5 Q" B: Y) W1 n0 f //Error("移动 - %d->%d",nSrc,nDestPos);
: ?/ o: l& z/ |% J$ j& {, ^; B# o# p nDestPos++;. _6 f" P* G7 f1 V3 d1 U' N" l' F
}6 o) a& z2 s9 `: m1 `8 C; r' ]
//取第一个元素的信息. m8 p0 ]2 H# Z: _! X& L' M E
/*
( \6 r$ D! b5 A: C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 X$ u$ q- j6 @/ X7 F8 p2 E
{
; u2 H5 U+ \6 B6 A) M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 q0 J6 B) Q( a, t' S0 E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ Q! @) M% ~4 C }/ p, z/ p2 q ^# x, G$ }
*/
# X. B: H! ^# T5 ] //////////////////////////////////////////////////////////////////////////
( H9 t s9 l$ G4 F: V break;$ m/ m( n# L$ f8 E- B0 z) S
}
) i/ @! i: t! |( X$ U }
4 e( d9 c! t/ p8 w}
, i U# O8 ^, |7 t! D$ Wm_wndMenu.SetVisible(FALSE);2 a/ W" N* z7 B0 L* I# O
6 ]! N; z" X& t! W1 w& Z6 P M* Q
--------------------------------------------------------------------------------------------------------
" @7 I0 `1 |$ l( o3 p% V6 H: E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% Z+ B4 F7 B+ p{
' E5 n5 Z5 `- l. _) N9 Y3 uBaseMouseCursor();
4 M2 ]7 ]7 y" U) p4 n, {/ {, J}
9 a3 f+ H" e& n& g3 P在其下添加:/ \( G8 g& G2 h) R# i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 `* P$ L. e* b+ f* v, O
{
2 s' r* n/ N7 N( ^& A0 p! Tm_wndMenu.DeleteAllMenu();
$ u6 m0 f* v. i3 O$ Gm_wndMenu.CreateMenu(this);
& `1 D5 ~, s. }+ J' `$ F7 f8 Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 A& U9 q$ L+ m( l [) q/ Z9 n; S3 ]1 b; y4 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 [, y- v3 e' s o6 Q{
/ r2 L( \5 H) | //P以上级别才可以删除所有道具5 e& w4 h( i8 y0 u1 [! ~: @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" N/ N/ V( f" B2 i6 \0 z}
* d: {. ]+ g1 Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" i- g) v& _6 `, u u
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( p' N- r. ?* O% i$ @5 y
m_wndMenu.SetFocus();% Z( t1 g9 g4 Q$ b
}
2 ^( M2 R6 a. |------------------------------------------------------------------------------------------------------------
( v+ ]; S1 _) Y( i( q2 o+ x* o*************************
' f- n4 A$ U+ u$ X. J6 q) pWndField.h文件0 I: ]: @2 B7 h4 {6 O* [
*************************' S" M8 C( { a& p4 b2 ^+ A1 d
搜索:BOOL m_bReport;
4 ~7 {+ l$ g2 x# a) R# O其后添加:5 i$ u9 y2 {* _
CWndMenu m_wndMenu;
/ E$ J3 a$ c+ e& o+ l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ t* g' h+ t y* {1 b, ~$ k其后添加:
" X" a7 R* M2 {3 J. [virtual void OnRButtonUp(UINT nFlags, CPoint point);+ T0 z( U/ a3 H ~; ? A
4 e. R8 k( ?. m8 L T3 f2 Z
% `9 r' J+ h! M% H3 S |
|