|
|
源文件中_Interface文件夹下WndField.cpp文件
1 `* C' R1 ]4 a Z+ k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- b% ]* z7 V! R* F* L
: j* z7 \! A2 m5 B* t( k
struct sItem
7 [' a8 i, @9 {+ o7 @6 `' h4 q ~{' B5 I# N9 o8 H- E# h8 a
DWORD dwId;
1 `6 t2 P7 X3 HDWORD dwKind2;: ?/ T* g2 a/ H; L, `
DWORD dwItemId;# `/ x8 _. q( B5 O
BYTE nIndex;% F) s G `& m+ ?, P8 d) U3 A
sItem(){. K6 m- x8 l0 N: d- G
dwId = dwKind2 = dwItemId = nIndex = 0;3 j! [) M& J8 e( }$ D" l
}% F, o; J+ G5 N. L) `$ R0 z
bool operator < (const sItem p2), A. ?) h5 C; q5 M/ x$ X$ H
{
. ~1 o1 v n" S9 l8 l8 e2 c1 | if (dwKind2 == p2.dwKind2)
+ R/ A$ c9 f, y. G: L {: J# z; Q& a9 J$ ?
return dwItemId < p2.dwItemId;2 Z% w/ n1 W9 G' w
}else{
0 a& ]. D5 E5 K; U( c, x- a9 I) d return dwKind2 < p2.dwKind2;0 }: ?) q0 N0 A+ s$ j! ?( I8 t
}
; Y9 m/ J9 W1 p& e7 V. F4 \- ?$ G}
) X0 L: ~# E9 g! X};
% ]& P$ g6 P' |) {2 @- {" c* \class CInventorySort
5 e7 ]' X5 q; m7 a{& W: d& D2 B7 w' n
public:; C0 m2 D* `/ T* W0 E* g; D' \
CInventorySort()
0 g, {) b: q9 B0 k$ v{: s4 L4 g, d& E; a. F/ G6 d8 t
m_dwPos = 0;
3 N7 F5 Z5 Z* U* n6 g& y2 ^}& l O& e1 ] O: }4 s
~CInventorySort(){}$ e: L" r9 W- X* w
private:
; W/ K$ f7 }- b* osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ u7 y& z' z. V: C+ N2 {! m
DWORD m_dwPos;
# Q2 T7 _$ N5 I! O0 D, w# Gpublic:6 h8 \% S! C2 G+ Q. w. S3 f: ?& P2 q
void Add(BYTE nIndex)
/ W& f8 i; D0 @$ H" _0 F0 U{, X) g% L+ N, _
if (m_dwPos >= MAX_INVENTORY)# A5 s$ S5 ]1 V4 J/ Y
{/ u0 U h- {5 Y7 t
return;7 i5 S x* T& Q% j
}
! n9 X& Y* u/ k; b. w m_Item[m_dwPos].nIndex = nIndex;; K# F, w4 P, R% }
m_Item[m_dwPos].dwId = m_dwPos;+ P* B \3 k V
m_dwPos++;) v& i: g$ k+ J$ k
}) ?+ d1 f- l/ j, K9 g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 D' Z3 Q" v( F# Y{/ v" D8 _5 Z8 n2 L
for (int i=0;i<MAX_INVENTORY;i++); t, N+ \9 p) @& f; ^7 y
{
[2 ~' I {! ` [( p if (m_Item.dwId == dwId)
' `, |& L. K7 f0 }7 M+ N+ D {
2 U; p& S3 ?* w. Y! b return m_Item.nIndex;
/ G8 o% W/ g# F6 |4 ~ }# H6 _- f- W }# V6 q+ w# o5 S
}5 o7 \9 g X x% f* l3 c
return 255;
, h9 f- P" i1 F" _. f( c}" A: U8 m) @& x0 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 \# R- m u( R u/ N1 }
{% t3 ]. P$ K) B
BYTE nTmp = 0;
0 b! F# x6 P! o5 ~8 L- {7 D bool bDest = false,bSrc = false;
1 m$ ^) E; t; `9 {- _ for (int i=0;i<MAX_INVENTORY;i++)* f4 G( d+ a, F8 S; v) i- I' k! m
{" H! ]( P8 h2 h0 N7 x" m1 V9 N
if (dwSrcId == m_Item.dwId). \ K' x( f" Y5 G/ |; X! S: N, ?
{ I" l3 q+ R! j3 a( U7 t! [# I
//id相等 则 改变对应的dest和src3 M& N5 J: \" D3 [* o6 k
nTmp = m_Item.nIndex;2 o+ e9 ~& c. u! F
m_Item.nIndex = dest;
/ _! m- ]0 [9 S/ w$ `; `$ Z }
9 X6 A. g' B9 O }0 M7 h) {3 @! I; f$ P+ x, h; d. O
//临时数据保存完毕,交换开始5 ?+ d2 L5 l8 |1 @) |+ D: Y9 X- u
for (int i=0;i<MAX_INVENTORY;i++)
- a$ Q6 r9 K* k$ N ]/ D( r {6 p. h7 _ N- N$ G1 @
if (dest == m_Item.nIndex)
4 h( `1 @5 A7 K6 c# f" r- v' x {
2 {) h' \2 ?# Y( g) W/ G3 a$ U //id相等 则 改变对应的dest和src9 R: z& N3 M j1 \) O
m_Item.nIndex = nTmp;# h* n1 _9 g6 \- Z- ~2 |1 c
}& E) L' z Z" g& c( J1 I
}' Q( }# J. e" i8 e" I7 i$ N( F$ @
}
8 Y5 O; G$ b5 h. d# O$ ]* j};3 ~& c) b. ?% l0 z% N# M* j: ~+ }
-------------------------------------------------------------------------
7 [( b, ~' j# O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& Z/ I4 r- Z/ e! d7 L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, m3 B0 H' s( F9 n) l! q; y( r
紧靠其上添加:) M' T6 u! R% ]3 c5 I4 c: ~) {5 s
if( pWndBase == &m_wndMenu )+ i3 \& |8 Q, o/ }8 F+ W
{. W. k0 O/ N; m% C! y
switch( nID )4 b! Y" ~& h& O( X3 s
{
4 F; G) S. B( m4 x7 W case 2:* S- y; _* t- ~" t' e6 U
{& y$ z8 ?# T3 c6 w% Q* `5 _; i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ y) C* H) G! u, q- l/ P' j7 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, }' t9 k$ k; t G" C- c; q {
# H/ U8 n3 V! o; A break;
1 k4 t a4 W3 s5 c) u }
" o/ O O4 e# A8 [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 s7 |7 M" U7 L. J7 U {
, _- k5 {. p8 O8 |) A' i, u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 q3 ~6 I: }+ Z+ z: K: }) G
if( !pItemElem )
; c9 S0 z+ R( q8 m" U1 Y continue;) ]! d8 r, `; i; x8 J+ s! }
if(pItemElem->GetExtra() > 0)
% @. G0 S$ g; a/ `3 B continue;' [/ P6 _7 K- `2 S' x; B9 i/ V) [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - H) l7 d- ^4 O! g" s- r
continue;
* d, m8 E8 n. d/ `+ N3 |+ a7 j# h; T if( g_pPlayer->IsUsing( pItemElem ) ); l* T" T, [3 w( M: T& ]$ `
continue;: ?& P( g/ ?, B2 N Q5 d# i
if( pItemElem->IsUndestructable() == TRUE )* w, l" D1 w( |. h! ]
{
/ W. `# Y: v% c7 y8 f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" h: Y$ t* W5 U/ p: \2 _: Y- ^
continue;2 d: q1 x; ~ ~
}
6 O% ^" q2 x3 ^) H5 x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% _" g+ N6 r: v3 [! g
}% g0 j, M4 }. a0 R
break;7 b4 o4 f& V5 N7 e3 e n
}
3 O* Z+ v! X4 X6 q case 1:( }- G! d' H( W: Q4 D
{
$ h7 G9 ]1 D2 a$ _ //整理背包. E! B, \; Z+ H$ x
//////////////////////////////////////////////////////////////////////////5 T2 c% C- V( K) d2 C0 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# j5 ?4 n5 |$ J5 }2 Y, P: G
//////////////////////////////////////////////////////////////////////////* {+ ^9 W6 ]+ \, o" E
//////////////////////////////////////////////////////////////////////////9 d! a' Z+ n5 O, ?
CInventorySort* pInvSort = new CInventorySort;
4 r% b7 [0 F5 d# t) `' d vector <sItem> vItem;3 u" b0 F. I2 L2 t( Z: E; y
vItem.resize(MAX_INVENTORY);//初始化大小% r- B! K( T3 G
//////////////////////////////////////////////////////////////////////////
, W( Z! e4 ?3 C2 @$ {; m+ S //填充数据
l4 D& R. v5 F' @- ~ for (int i=0;i<MAX_INVENTORY;i++)
3 u" ?- r X% V" v- Z% k {1 n ~ ~( d9 Z+ B( V$ S5 s( d( D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ W, f x: W3 ]2 j: w) L if (!pItemElem)
& [) S; w6 L: P9 I. F+ {7 r% s {
+ }" S1 y0 Y# O, [- E9 ^ vItem.dwKind2 = 0xffffffff;! V# n- w4 i, V+ S3 U! t; B1 \7 [" o
vItem.dwItemId = 0xffffffff;
" r7 b: |. q. U, X! p$ C. _; L vItem.nIndex = i;
4 x i6 I- V. A) i }else {8 c. J! h, K4 w0 ?
ItemProp* pProp = pItemElem->GetProp();
& F: \/ G1 D4 s5 B# m/ w vItem.dwKind2 = pProp->dwItemKind2;
z; i6 J G+ Y4 e7 B5 }5 ~: p vItem.dwItemId = pItemElem->m_dwItemId;: V# g, \4 m& Q) Y
vItem.nIndex = i;. H0 t ~, s) u
}/ s# J# L0 M5 o' T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 }+ ~8 K( w0 p5 M+ j }2 @# p( p+ k8 _/ |$ U# m
//////////////////////////////////////////////////////////////////////////1 _% d5 |: B$ V+ w
sort(vItem.begin(),vItem.end());//排序
% K( L/ p& v8 W l! ~7 n, o% ^ //////////////////////////////////////////////////////////////////////////
, n7 |; ] b& u, Y. j //交换
6 o" \/ V! Z0 L! @ for (size_t i=0;i<vItem.size();i++)
, J% I7 j. T# c# I& D4 ~' | {
1 _8 J9 t' Y6 Z3 O3 A, k1 U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! S" Z( Z4 h. l pInvSort->Add(vItem.nIndex);
; H% r; w. M7 a8 H }
" U2 w7 a4 {3 |) C Y BYTE nDestPos = 0;
; z# E( l( U m' N for (int i=0;i<MAX_INVENTORY;i++)! J. I: W0 y0 p: @- L( e0 z0 n
{
. I( z% K" n( N6 L R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); n+ a0 q+ v3 @) a1 |
if (pItemElem)* z1 }7 }' i- }6 ] M$ E9 Z2 P5 X
{
& Z9 m/ Y% g5 Y, L0 N( f8 F if (IsUsingItem(pItemElem))8 K5 q6 y& @- p. G7 G
{
8 [/ C/ A, R# V //这个位置无法放6 i. V8 P( E ?$ ^$ B; h
nDestPos++;
, Q, n8 M8 ^% H+ u5 U } X7 s9 `2 a; X3 }
}
( a- S8 ]" Y" F# f% i* ` BYTE nSrc = pInvSort->GetItemSrc(i);5 {4 u, K Q+ \. f- X9 G9 t. K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 D/ e+ H1 m$ z3 L0 d1 i& W4 J
if (pItemElem)* ~( w" ?6 W- \6 T+ ^
{
5 e1 |; j8 | n& m% h1 h if (IsUsingItem(pItemElem))
' r$ q H9 R' `: O$ u+ ] {) X: a0 V( K. D1 k2 g
//这个道具无法移动,跳过( e; L* E% d$ R1 v2 @- t1 D2 \8 A
continue;. S5 Q' L( T8 E0 ^: }
}
( s8 E# p3 Z) @8 L# h0 L }else{* `. Y) t# z- k2 A1 h
//空位置 不用动4 G, Y& N, P7 B" s$ l) X. ~
continue;4 [" q* I3 Z* F9 z: L" g: }
}
: \* G) t) {: |/ @ //////////////////////////////////////////////////////////////////////////# ?4 z1 O: E8 F- g/ z
//开始移动6 u7 h% ~ ]% |& k; W5 P: I8 B; S; R
if (nSrc == nDestPos)$ j# Y5 f/ t( ^8 b' ` ]
{& N3 S; k& w2 V3 h
//原地不动; F4 \, `1 L, r. |
nDestPos++;- V% T( c# p: t; k" |& J
continue;
* P1 X# d. {7 }4 U+ a }0 r- F4 b+ g1 a, W6 `
pInvSort->MoveItem(i,nDestPos);
9 \. {! E( j* K: }9 m! o. o" H2 l3 i g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* m( o/ d( m5 f9 u; Q; ?4 N Sleep(5);% J" c( D. F( @, z
//Error("移动 - %d->%d",nSrc,nDestPos);
8 z$ Z1 ~" F5 c6 Y. N" A1 l: o nDestPos++;
5 h; r' i" b9 M" b7 B5 t }: _2 k" }! T2 b' t" t$ K) o
//取第一个元素的信息
* E2 a8 t3 J- ] /*7 X! W3 m& ^/ @8 ~4 d1 }8 [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 e; d8 x* N1 i& j
{: ?0 T7 }- q$ v* q) y0 E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 X5 ~ r! e6 Z1 M U3 O5 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" I" p$ b5 d6 E) b
}9 `' u' U. T6 h4 o2 W5 a, ]
*/+ B; P) g; N& u4 d, a
//////////////////////////////////////////////////////////////////////////6 z9 ]( P5 K1 D% _/ c- `
break;
5 }, F ?2 [. }' ]9 [9 [ }
; k- L/ }$ p" G5 ?) c }
: @6 Z3 ]# y! H1 X}# I3 S2 @2 T% e- O; L
m_wndMenu.SetVisible(FALSE);
2 R1 o1 H$ [& [% A3 T1 z# b: |
# n: a$ ^9 [ c- @$ U--------------------------------------------------------------------------------------------------------
$ n6 d+ M- \ A' |9 k. C& i9 I4 d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% E( m- D9 B4 B" c! p{- M5 d2 ]6 c8 n( E% X. j& m
BaseMouseCursor();
- ^% f. n. w# p}& Z& J7 k% J2 G# w; _& U1 x+ J2 D- J. l
在其下添加:( a8 s) N/ ]$ t& y/ u: ]4 g2 g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# Z2 E% |3 J$ ~; l5 O8 }* @
{5 ? m5 l" D: q- }2 v: ~9 R
m_wndMenu.DeleteAllMenu();
9 e+ h" X5 i l: g _& [0 Sm_wndMenu.CreateMenu(this);. J4 X# m% | ~& z$ t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; Y* M& F" d, |. x
3 |+ o0 r9 ]6 S$ H/ F a& ^" qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 Y2 ^+ r' t- f& M& N4 v% W7 G
{
' b- r7 {7 {, a0 ? //P以上级别才可以删除所有道具4 I. y& L, h k$ u# A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( c) z% r/ ], N' g1 ^}
( A3 w6 E/ x7 r9 O- Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 D! v& L& ?/ ~9 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& n+ m& B) n& D+ M6 F6 f
m_wndMenu.SetFocus();
3 _8 } X3 @( W' P}
+ t7 }& D. ]* u" ^- [0 k5 m) V------------------------------------------------------------------------------------------------------------
& z. S8 R; F3 O+ T1 N- b4 n*************************
7 D) u3 i2 Z' _WndField.h文件
0 i" u- u8 A$ b7 i- {) _5 X9 a*************************
, k& E" Q: w2 I4 `/ }搜索:BOOL m_bReport;5 e8 K5 T5 H6 u0 t; ^
其后添加:4 y9 b) t3 Y3 b1 V: F+ X
CWndMenu m_wndMenu;# j+ ?1 L; D# S v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 W& Q2 [, l/ n3 q. M/ g2 X
其后添加:
$ B2 Q9 J6 Z. T* _* _; \2 g$ }, vvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 j+ Q1 H0 i/ Q
) |! Q5 q3 T0 k; f Q& Y% A% k" X" V8 ~
|
|