|
|
源文件中_Interface文件夹下WndField.cpp文件
1 S' A3 I1 N2 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# E! Y- {( |+ X. e/ K
4 @: \" y4 ^1 |2 V: d& H/ kstruct sItem2 Y* i' H/ C3 w
{" V. P& a" S" Z
DWORD dwId; y; j, \" [! y# A$ |5 V
DWORD dwKind2;$ s. e; q( O3 N# N
DWORD dwItemId;
: C% j' |% M' vBYTE nIndex;8 z! \) q5 e: }/ f! n! j( u
sItem(){
* w: D! |8 u6 c) _8 ^) _$ i+ o dwId = dwKind2 = dwItemId = nIndex = 0;2 x# l( Y2 `2 D* R; N. |
}, W0 _& S% z1 c) j
bool operator < (const sItem p2), z& l) S) i3 G" ?& M6 b% |
{
4 E9 s$ P* u2 m* [2 U Q if (dwKind2 == p2.dwKind2)
h3 p2 f! D4 _# H% E {
! o. I# L3 C1 i. v8 f' A3 Y return dwItemId < p2.dwItemId;% b4 x( L5 s7 |5 o9 }5 \
}else{) V# C% {% K& q
return dwKind2 < p2.dwKind2;
6 c L$ O* z! Q }- P S& _( G7 v; g
}3 ~. z& L+ u# l3 V/ X( a
};# S2 `$ t8 y! M3 j% b: Q% |) k
class CInventorySort: k! T9 l9 s% ^ r$ s6 a
{
% [+ ^% ~! J$ e; q0 Z, gpublic:
) e2 N8 S! U# \# sCInventorySort()# }7 D- i9 h- x* |
{- E$ j5 |: g) a
m_dwPos = 0;
/ _8 _3 f' S- L}
: M( @; D' D8 t& ?3 Y~CInventorySort(){}
8 n# C0 N& Y/ r t' Xprivate:
5 ~# l$ A9 h7 r) J* GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 V5 D# c5 ^ t. }* v6 PDWORD m_dwPos;! ]5 L$ e7 a) u0 }% z
public:
. z9 J o& d5 b \void Add(BYTE nIndex)
5 ^/ a5 q. }. D$ G" Z+ n( y- i{9 N& I, d& H9 Y, b: u% ?) |% N
if (m_dwPos >= MAX_INVENTORY)5 G5 t5 E2 N0 v9 [
{6 E! Q9 p; ^, g% J2 q
return;
3 ?5 L5 J# x5 }4 f# Y1 D }) ]- w7 x! @; W9 \
m_Item[m_dwPos].nIndex = nIndex;
: F" X: v2 v% j( u m_Item[m_dwPos].dwId = m_dwPos;3 R5 j$ x# I9 e* c( }
m_dwPos++;
" R( N# m# z1 E E2 [3 Z7 [# L}
6 U+ |8 Z; Y. u# MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ e5 Q, z$ `3 ^ U1 ^! S3 C1 ?, I{
( N' H, D V# @3 T" C for (int i=0;i<MAX_INVENTORY;i++)- \) p- X' i4 m6 b
{; Q2 ]) H& Q1 {- ]
if (m_Item.dwId == dwId)" x, [) y) K% ]
{+ K( J3 [, p& L3 i9 H" Z( B: g
return m_Item.nIndex;) H' Y3 x; u2 ~9 Q9 Z
}
7 G2 W. k. v/ ? }
% p9 H; \+ u- } return 255;" z k" A$ l. \7 }
}
+ f# b7 t* W/ u' d" ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! S# \& E t' ?{
0 o& }# j' R; P$ C4 R( L% }" i' Z BYTE nTmp = 0;
. X0 w! `$ U9 L3 l0 Z% v, j bool bDest = false,bSrc = false;5 y6 V: n7 i% W) i0 M7 c
for (int i=0;i<MAX_INVENTORY;i++)
7 I0 R' H/ c* E! D0 @6 Q! l {
' V) x* m% @, O2 O if (dwSrcId == m_Item.dwId)' ?3 J( u$ e5 ^5 s0 d8 `, f4 ?
{
" E% [3 m+ K b) d! D+ v6 S" S //id相等 则 改变对应的dest和src
1 O, u( x/ T# q9 I9 w8 d( | nTmp = m_Item.nIndex;
+ E' h7 T/ g% }- Y( D m_Item.nIndex = dest;* h" D" r) i* z+ g, s: _- h6 v7 X
}
4 e4 j# q. n4 Z) j7 W% K8 R } ^' Q1 K1 G5 y
//临时数据保存完毕,交换开始8 e- z: X7 g+ _/ j
for (int i=0;i<MAX_INVENTORY;i++): t q# f$ D$ V) K' A
{
5 o) d( A# j; p- c5 O if (dest == m_Item.nIndex)
; H. @ Z4 E0 ~( j$ }& b8 l {
- r4 l# B1 n1 C( R2 c- u3 X //id相等 则 改变对应的dest和src4 x, U. T" @/ Z' J# m0 ?" t% a
m_Item.nIndex = nTmp;
- e7 I& `* b3 [& o3 H$ V' F }
" r+ k r* F( g5 @' @. X2 h1 T t8 ] }) g: z$ v2 @% _2 N5 ^! z" U- z1 b
}8 \! y2 [, G5 E7 E
};2 f5 k2 L# ~% a) a
-------------------------------------------------------------------------
5 B! ?% [ A. Y& @0 i3 P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 Y! a3 p3 a ~7 i) P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# `, f M. U" x5 a" y1 l紧靠其上添加:( X/ J2 r- T# l! D) k" x
if( pWndBase == &m_wndMenu )
- I4 W- J. C/ G, e! x1 f{
2 E9 ]) X# Y3 r6 o switch( nID )% W0 V* R2 B" d& Q$ B4 ?5 M& n2 w
{3 h+ C3 w; |6 c! H5 i
case 2:
* b: u1 `% Y2 i* P$ U7 @ {+ V% p; I R1 R; S" a$ F/ l G6 \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 p- J/ ~' k3 L8 y/ s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. n1 s$ p" L& T' A1 Y& T {
: m% B9 a6 `5 A6 p }7 X( C! }3 m break;
I; u( J2 L+ Y* Q) ?2 L }
5 B6 A* p2 J# l" L% a! ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 `+ R$ n6 J8 h' K# b
{7 I F: R7 k0 F7 J4 l6 g1 O* |# f# q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; \. b3 w4 Z/ |; {( p& s9 }# H- R
if( !pItemElem )
( \7 E( p; B* S4 t3 q continue;9 m9 s4 G' C( Q! p8 L% R
if(pItemElem->GetExtra() > 0)$ I( N, ]. `% S) I" H) L
continue;! x4 ~# a" \) U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 k% d. p& t% K) w( D' u continue;
% \; i2 b) n) o9 ]7 u' c if( g_pPlayer->IsUsing( pItemElem ) )1 ]8 F" r/ p( c4 \) D% v5 z, u# u
continue;
+ E9 A/ I5 j) s) m7 q; Z if( pItemElem->IsUndestructable() == TRUE )) k2 ]' ^" t. y# T+ P U
{
! A8 {) X. S" _! e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( f* U6 i6 Q! P0 D continue;
' h2 t' F3 ?% \+ X8 h( r }
& v6 Y$ U8 r( c1 ]: r+ g; w g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ j0 H- d: Z) T7 z2 n' D
}' J. Y2 r/ C) \# d
break;
8 Y8 b9 y* ]4 Y7 O6 b! b) _ }
, x0 T! i q0 X1 O+ H. |9 ^ case 1:
( Q; m) t; ?) a& }7 W) C {
, I0 m, Z" q& i. Z7 g: ~6 e //整理背包
, M) j& K7 d& Y" p //////////////////////////////////////////////////////////////////////////7 c% X5 j8 E/ j8 c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! J, R- p3 Z! S+ ?( U6 W1 T& R' {" l
//////////////////////////////////////////////////////////////////////////% i' T; B) F/ C+ _# j2 F. h
//////////////////////////////////////////////////////////////////////////( l. b& P( x& _5 K7 T) F
CInventorySort* pInvSort = new CInventorySort;
. h, h. X! Q- B vector <sItem> vItem;
! `5 i$ F* D) g; e3 m vItem.resize(MAX_INVENTORY);//初始化大小3 p6 `$ j/ e' M {6 t
//////////////////////////////////////////////////////////////////////////+ o- p6 I0 S# W: v; R: Y; i7 p1 |8 F
//填充数据
( J; p) ^% P4 {3 _ for (int i=0;i<MAX_INVENTORY;i++)
# ]" N5 D& \2 F% c {5 q8 Y2 V' v7 Q! [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% e$ |* z" H n$ z8 b/ I
if (!pItemElem)
; u }4 P+ Z+ r {9 { f; b4 A/ a1 _% @
vItem.dwKind2 = 0xffffffff;
0 x6 f: w' o+ r) |9 b* e vItem.dwItemId = 0xffffffff;( |- v9 u: A$ A3 L7 T% A
vItem.nIndex = i;
1 C" ]: b r2 @7 t2 t }else {# F- P* Y2 d# a# `9 s6 m+ Y) u
ItemProp* pProp = pItemElem->GetProp();
# X4 H4 K3 u$ X7 R5 D; ?$ C vItem.dwKind2 = pProp->dwItemKind2;
* p3 |4 F# b8 h, m( ? vItem.dwItemId = pItemElem->m_dwItemId;
`; o2 G$ a/ M! m vItem.nIndex = i;$ R( x) S6 |" p9 E F6 U
}
: ]! N) S9 C ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ U6 L% z0 E" Q. r }
; S& ]9 v: C( k( D2 v1 `6 G0 L1 ^- E( c //////////////////////////////////////////////////////////////////////////
% P$ d% O9 f, J" _ sort(vItem.begin(),vItem.end());//排序
5 X$ I i0 X" A, K) b g1 ]$ c //////////////////////////////////////////////////////////////////////////
! m4 ?# [6 i9 w8 i+ z //交换
$ i% Q4 ]0 m. A4 S7 c3 k. \ for (size_t i=0;i<vItem.size();i++)$ C- t" M0 g. I* ?% `( b/ s
{. g/ y8 F# w2 W2 _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- u5 W. y" G8 Q& j, e2 {# r pInvSort->Add(vItem.nIndex);
$ M. |: ]) q* ^" {3 r0 k. k9 ] }5 S! J# @* R% z! v
BYTE nDestPos = 0;
: `& V' j' i- }$ F6 T* y' M* d, q8 a for (int i=0;i<MAX_INVENTORY;i++)
' ^) K6 [. O+ d, i) J5 [! ~" L* Q {. S/ m: l1 I% k2 v2 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 [; M( u1 b' Y. k, S
if (pItemElem)
7 @- p+ D, ~4 o" y" Y {
8 ?) R) D" p. ]" }3 } if (IsUsingItem(pItemElem))
4 ]7 z7 t y" j+ X {4 f: E% N4 M, U* B: b5 ~
//这个位置无法放" j6 o! k8 n K' ]: ]; N8 [
nDestPos++;
" w) ^- `) v3 ~5 a2 a }! _* q4 F9 a, g4 M* x% _8 H
}1 U* X' i: o$ _" O
BYTE nSrc = pInvSort->GetItemSrc(i);
3 X! n7 B& @9 K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) o2 J& i4 u. G) S2 ] if (pItemElem)
: f4 o! h0 H: i' C4 j {7 W+ c6 h' h) q, F6 k) S
if (IsUsingItem(pItemElem))
/ Z# s- s* E! U8 }% t5 M) ] {
3 J, w- k; f- s: V4 c8 C m5 j //这个道具无法移动,跳过, K. |& ]# n+ w+ O
continue;0 i4 R1 H' G) Z6 w
}
! T, F- K6 r( [ K1 N }else{4 P) T3 g2 ~ d* {: A3 W1 [
//空位置 不用动
( g! ]0 a$ C+ D: Y9 O continue;
$ z3 e4 ~: l$ F/ |. h/ M7 Z) A }; n: r# g! `( v4 Y. c) l
//////////////////////////////////////////////////////////////////////////
* C( @. }# Q) d4 _ //开始移动/ s) |8 t5 e1 x. \. E: e! ?
if (nSrc == nDestPos) B. O, g* O- f2 ~' L- J0 b
{* A k/ t+ D, c
//原地不动" _* v% D3 e) s
nDestPos++;' ~* Q: J6 J4 T" ^# v1 M. `7 F, A
continue;1 F, X0 i. D, q: w+ c
}6 y" t! w, a# [; z5 e
pInvSort->MoveItem(i,nDestPos);
; `. w/ X: T& L- D/ I g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ a/ Q) l# F9 e, H$ |( I! j b Sleep(5);
- E8 h: w5 K3 Z //Error("移动 - %d->%d",nSrc,nDestPos);
}) x! o" k P( u! U. M) S- [! |, q nDestPos++;9 f$ w; `, K# O7 M K
}
3 ~) w% Y+ @; I; b1 L1 f) l //取第一个元素的信息
4 i4 X+ Y; R$ v /*
0 d$ [7 I, ]+ R/ b& @5 N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 F; `3 u- F0 V1 Y2 a6 H
{3 i+ y; t6 x% @0 g! M. i7 O$ z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& ~* ^2 z5 w5 V4 Q$ T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- k$ P! m% O: g4 A5 A+ x$ d
}
& c; N- ]5 d" r2 w */+ J8 H D9 c# e3 p3 L
//////////////////////////////////////////////////////////////////////////
3 B! e7 u; N7 ~+ U$ P6 _ k break;4 |& K8 \# D3 Q9 |. U
}
2 G8 Z+ ~+ s) d0 t: u. ~ }
7 G2 B( \' g" }: G}. g; _. @0 N6 o6 a1 }* g/ O- ]% m
m_wndMenu.SetVisible(FALSE);
, w+ O4 C: U n- Y. \
6 }- d! C9 V; K& N--------------------------------------------------------------------------------------------------------
; G/ d/ X8 k2 z7 x. F( E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, G) F! ]' B* p! a: w{
( f9 T+ @* z! t+ M& d1 b7 QBaseMouseCursor();4 k# Q7 C6 u' @7 J- n5 m
}% q1 X, F" w6 K3 ]
在其下添加: }- g9 h+ v! b/ G% ~1 D' {( b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). s1 D- k1 f3 ?
{/ Z* J6 m& {" J- G
m_wndMenu.DeleteAllMenu();7 Q+ q2 h$ h# q! Y9 E$ I+ L1 d; \# l+ |
m_wndMenu.CreateMenu(this);
0 j& l9 x. x. g3 N' L' zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 x( w3 D- z# N {7 P% v& l7 B
9 \ `# t! W$ U. b0 x; T- m c* Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H+ c/ f- @5 Z) Z" W9 W; K
{
3 e: V; Q) u6 a% J1 H8 b, b //P以上级别才可以删除所有道具3 ^8 p1 @) X: W# s" l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 d0 w2 B. E- |4 ~4 L+ T9 d
}
" B0 z: r2 g% O& u" x8 L- tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' H5 k i! A/ N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ u A9 H4 N$ @ f' Em_wndMenu.SetFocus();) F& ?6 E1 A% s& m$ T
}
0 c6 x1 C# b& e4 [( K& z------------------------------------------------------------------------------------------------------------
# x) |& n( R- L$ D8 N' o$ K*************************
6 [! o* [+ C: EWndField.h文件/ U+ j; C9 n t* P* O* B
*************************6 R4 E) ^4 U$ ^: W' T+ u
搜索:BOOL m_bReport;* P5 [ y) G9 p8 M n+ t1 b1 g
其后添加:
+ M$ K2 F. q/ O/ H" M! U$ dCWndMenu m_wndMenu;. h3 P7 ]( d* }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! c' u& t! D* ^/ w0 s# h
其后添加:
& ?$ m8 k2 G1 x/ j$ w* @7 ?$ ]- yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) |" l6 e8 ~% v6 t
( L w$ c% n$ A/ F
6 R% Z% f! a3 O( `6 y& F |
|