|
|
源文件中_Interface文件夹下WndField.cpp文件
$ {$ {; j- K. @ [7 e8 G% U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 @; v% i G( s9 D: R( R
7 G+ O; n/ k% q& _: d
struct sItem9 S, Z; \" p- _+ t* o( W4 R
{* u% o3 m5 d# m
DWORD dwId;
% @6 \( f' _5 I+ {DWORD dwKind2;- k+ s: F8 b: h0 H' H' w
DWORD dwItemId;
# E; W3 n- k8 y7 H. G& ]; Z: `BYTE nIndex;* ^( ], u. q- O o% w: `
sItem(){
$ y# l- y+ {) ` dwId = dwKind2 = dwItemId = nIndex = 0;
* k2 n5 q( u! y8 A3 K6 b: [}# V4 d: r- p! s& G
bool operator < (const sItem p2)
7 C1 J B- Z' Q$ \6 W4 N{, ^$ e% M1 h+ `. O; W8 b
if (dwKind2 == p2.dwKind2)3 E' g+ P( M" C
{& y8 Y: Q1 b4 h4 D( Q
return dwItemId < p2.dwItemId;- }2 G$ E$ L1 p/ w7 f5 l
}else{
" i4 t G8 B& F- w$ D+ @ return dwKind2 < p2.dwKind2;. Y0 {( E( R+ c" p
}
6 t: ~) K3 y7 a6 H% @7 ]% x}7 i5 E. \ ?5 ]8 Y
};
- s% f7 |% V P/ J2 n, Mclass CInventorySort; ]" E0 G' V+ Y0 A. t% J
{& z6 [7 m) A6 c* D/ Z
public:
! f1 v" z- Y( ~" U( m6 \CInventorySort()
! ?& @5 V* r: b* E6 `8 k{, B: g4 @& p8 q
m_dwPos = 0;
0 o! t! [. [: [; W) R% t}
4 g, n: A1 e7 l( ~+ _" v. p~CInventorySort(){}
) ? k/ i2 S. qprivate:! f( `) K3 m8 C7 k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( e8 f v7 ]1 H" B* U; |1 eDWORD m_dwPos;
: V4 \) g' W1 R* E* w# |1 lpublic:2 h) U& t: Q& V- Z6 {
void Add(BYTE nIndex)* h7 ]# a7 N: x4 b1 d4 f. }# }, O
{
. A- ?$ D. X/ h! P, M: w9 r if (m_dwPos >= MAX_INVENTORY)
1 ], d5 M* i! [& L. x- K7 S {
9 I/ ^9 k: T6 f! m return;
' C, E' @1 i# ?8 X7 O, h }1 H& P( F$ p, y/ m
m_Item[m_dwPos].nIndex = nIndex;
, o/ N1 ~4 D9 g' k" v* H6 Z m_Item[m_dwPos].dwId = m_dwPos;* S7 w9 l. p$ J( ~. Z
m_dwPos++;
% k( m4 }6 `! b( N}
" T" v1 R5 n. I9 x6 bBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 K( L) {' u8 n{
# c! \* ]4 q+ e, p& J; c/ {/ | for (int i=0;i<MAX_INVENTORY;i++)
+ v# W0 I1 x4 t: l! j {
% E5 b& h. o8 y6 W if (m_Item.dwId == dwId)! ~# T+ H( ~0 b+ U' e/ ~
{
$ ~3 ?, d& ?8 F# f5 g: L2 L return m_Item.nIndex;4 J. c/ } X' @. a' J' s
}
8 N2 b8 j/ c2 l6 M3 r% ? }
7 ]7 e1 B3 s9 e/ Y% M: y" S5 m return 255;
( k. L1 G6 u p) s2 i8 D4 Z}
3 v( [) g" B* H1 |9 Z% J1 gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 f6 M& P) i/ Z( j7 d{
+ A+ ^0 o& g5 P# J, c* ]2 E& f$ w BYTE nTmp = 0;; p/ |( D6 p' J" O; M) E
bool bDest = false,bSrc = false;
( R+ ^- @+ a4 K) z# o) \ for (int i=0;i<MAX_INVENTORY;i++)
$ _; A, c) v0 o6 G* R9 `7 z1 F {( K/ R. M% a7 R! G
if (dwSrcId == m_Item.dwId)
% K ?4 C8 L6 M' ?$ q" ?; N7 \ {
4 f0 t+ ~; I0 `. F7 X( n1 V //id相等 则 改变对应的dest和src
3 Y4 v' n' k/ k nTmp = m_Item.nIndex;' {, v9 \, F T& F* e9 q( ~
m_Item.nIndex = dest;0 J, S/ v9 k& p, [, F3 s9 F
}8 M" [3 J/ e* M# N- V3 `
}- u( j# f8 h- X5 C/ h C
//临时数据保存完毕,交换开始. B) Q+ D) K: W8 L* g1 v
for (int i=0;i<MAX_INVENTORY;i++)
+ k- P$ S8 W1 X! j6 K$ z& `9 q8 _ {
& D# H, j$ \' j! E7 h. h if (dest == m_Item.nIndex)
9 e7 o0 P5 {1 G" f. M" h1 _& ^ {
! k3 {) z. M& l6 a, ?; ~( N9 P //id相等 则 改变对应的dest和src
0 n c& Y! S R3 R m_Item.nIndex = nTmp;
. b, m/ A3 |4 E# _/ b9 @% g }
! j( @& k4 @1 m. F o }7 f8 v. e& P$ ^% h2 G2 ]. E
}% U( V- J/ Y# F4 T) \
};
" _/ W7 q2 T% d* |/ E! i; g2 F-------------------------------------------------------------------------
3 I* u/ X: |, L* ^+ A, Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- }# U, y( \; {9 B7 @/ ?( D搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( }: O* t4 x* B- [
紧靠其上添加:
& @/ X- t% A' X( b9 ` n4 Tif( pWndBase == &m_wndMenu )8 X9 T5 o& |' p' b
{
9 @$ l+ w/ v" T switch( nID )5 {& X6 m& a& j6 G; h; b0 N
{
. l7 R/ i" i6 j' Q case 2:
# G, K3 U, w7 l0 `. M @' O {
* x/ w8 l/ P. b. c, } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! f4 W+ |4 ?4 J/ K* H" P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 L/ M6 q* V1 T* n* [
{
( n% O1 S: Q$ x2 W4 h break;- r$ U- s5 \. u( B+ K+ Y5 i
}$ O3 S' k/ R8 c5 b+ @
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& e+ \" e, _3 O+ r m1 a {, G }- Z- H; E% C0 R; t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* b% E8 }) b6 f8 m9 U9 W if( !pItemElem )+ C' m) r' d, F6 G( \
continue; r" k, t) ^3 W4 x: D* j
if(pItemElem->GetExtra() > 0)
( n/ Y0 l5 u5 M* c0 ^ continue;; j5 Q, c T: _. L" x8 T6 Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- R5 k. i5 a% f continue;7 F# [( x0 T6 i3 ~/ a0 e) @" T/ }
if( g_pPlayer->IsUsing( pItemElem ) )
W2 h8 K& C y9 s. i& ^: ? continue;3 L }+ Z( P( |
if( pItemElem->IsUndestructable() == TRUE )
2 e0 q$ ^" E1 a& N4 X {
3 x. I, W9 B5 b% P4 A9 Z2 N% J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% S$ T$ m1 G9 g4 s' T3 W% K# Y
continue;, K+ I3 R9 P2 {- R$ j3 ^
}* b& j' s6 `3 R! o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& j5 r2 u' ]4 _ }
8 `' h4 W# F$ m8 E1 G( i% B break;# O, \; `" y- A7 s; K
}
* [0 M3 ~- H, E5 I" T! T4 F case 1:
. F( n0 \& E0 { {, L7 c7 j; I8 }
//整理背包
! ^, M! R8 P# }3 w, n //////////////////////////////////////////////////////////////////////////
2 i# P1 C* t3 {8 L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ \1 k3 d2 E" ^8 F. F6 e, }, ^1 @
//////////////////////////////////////////////////////////////////////////
$ h$ X9 ?9 }* _# N* k //////////////////////////////////////////////////////////////////////////
# O. O1 C8 Y C s CInventorySort* pInvSort = new CInventorySort; ?, \$ R+ s2 ~) B# [3 ?; P# ?
vector <sItem> vItem;6 S+ B% R4 f; u+ l3 N+ ?6 \
vItem.resize(MAX_INVENTORY);//初始化大小, ?* c$ k/ V1 d L2 g
//////////////////////////////////////////////////////////////////////////
% {& R% i- {3 G8 Z* r9 _' { //填充数据
8 ?5 C; J9 P T for (int i=0;i<MAX_INVENTORY;i++)( J) R1 Q( n- I
{
8 V- I& ]' ~3 s$ H% p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# d. I/ V- \% y+ K+ m/ b
if (!pItemElem)) G+ b& {, I7 z' i
{, H- g2 _1 c' L( X- E ]/ X( W& O
vItem.dwKind2 = 0xffffffff;
9 a) o+ B9 w V3 v% I vItem.dwItemId = 0xffffffff;
" s: V, X$ W: J+ B+ K* L3 N% O vItem.nIndex = i;
# r, T. m) s& K4 U! K% y6 f/ | }else {! a4 B# `# _& C$ x# {
ItemProp* pProp = pItemElem->GetProp();
: h: [+ @+ m% l( F: _; K7 P vItem.dwKind2 = pProp->dwItemKind2;1 ]- l4 y* e8 a4 h: m
vItem.dwItemId = pItemElem->m_dwItemId;/ c* ^1 |! p" J7 ]. T: B
vItem.nIndex = i;9 X, R# @: \1 }3 X, t
}% Q* m9 i/ u2 o1 l1 I# H+ s# G
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 Z. @# l, Z, v7 i4 I! `" L$ v n; C
} v3 a4 W* ?+ o/ J" q3 ^9 Q9 o
//////////////////////////////////////////////////////////////////////////8 y# B3 n" { L5 l; T5 z8 B8 K
sort(vItem.begin(),vItem.end());//排序0 f F& ]- D: Y0 j4 [9 U& _
//////////////////////////////////////////////////////////////////////////" m: x. ~! V5 \ _2 h
//交换2 f' A, f: a- k0 C+ h
for (size_t i=0;i<vItem.size();i++)
% C0 v: J* d8 Z6 {+ ]* X# z- J N# ~ {
2 x, i2 h9 u* W4 W. u2 C0 }( a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- A, h$ P8 g0 @+ h6 Y) B9 V pInvSort->Add(vItem.nIndex);
0 \7 _" {, O0 X9 p( |: O }
) e" [+ |2 K6 H* ?+ {: O6 r BYTE nDestPos = 0;$ G2 \" r% p0 R! J4 z5 N& T
for (int i=0;i<MAX_INVENTORY;i++)4 J+ ]( [# j+ T2 O
{) k! [: [; {6 `8 o1 b) {1 f2 y" o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# ~8 W2 z$ c5 T: P) J7 q1 J if (pItemElem)
" Q# o( }' @( p6 a/ g; O9 R" t {
5 u5 i+ x T/ r if (IsUsingItem(pItemElem))
' L! ^6 w; n% L7 C# b9 L& p3 M {$ ]" C8 _3 o. ~& d1 `4 A
//这个位置无法放
" @1 p& G1 \, ^ nDestPos++;
0 {4 d0 ^# U, i9 q+ J+ W }
2 s/ u% M1 Z" `' L! c }) }4 l4 o* M: i& ^' E1 `
BYTE nSrc = pInvSort->GetItemSrc(i);7 K0 B5 [1 G: P1 F5 ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) z: v$ y3 ^7 V( e) w if (pItemElem)
- o4 Y: w- ^( o/ S3 P {
& q$ i6 S, U* K9 N r if (IsUsingItem(pItemElem))
- J) a( n" _$ t- L5 P {; B- @, L, f$ |
//这个道具无法移动,跳过6 F7 r9 g% M A% ^7 |, d& P
continue;$ L4 I# [/ x! _7 q
}
& ^; a# U8 a& Q6 s5 A" R1 D }else{
* [) o& j. i1 A* H, ], ]) E //空位置 不用动, n! o; e3 e5 g0 K$ }& j! Z7 p; }
continue;
( J1 L0 H& D" O: i' S) a }
" @2 R+ {0 `$ s //////////////////////////////////////////////////////////////////////////9 I3 ?3 W( W5 V! G9 f
//开始移动
7 W U5 y8 f+ t( N- e9 D if (nSrc == nDestPos)
3 \2 N$ h8 H' l. O2 E0 g. Y" G, _! [( b. \ {' g, C T9 H. u5 R/ ]0 z
//原地不动
9 j% H$ v0 z+ V1 R, e nDestPos++;7 b5 B& L9 E, M) c' M
continue;
8 H3 J; ?9 O' x; c3 e$ n }' c& h; F, L; V. u& ]& }7 @
pInvSort->MoveItem(i,nDestPos);
9 x: C& K- l1 k" y0 d" v g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 l+ d- t$ @& J* u
Sleep(5);, D% c, o5 j4 _$ [* H0 G* E
//Error("移动 - %d->%d",nSrc,nDestPos);
9 _* T2 l" e6 `7 g nDestPos++;- `; W9 g0 I9 r& t
}+ N. n$ Q6 w( }; i9 b4 H1 Z/ ?
//取第一个元素的信息
, X0 f. I) K# P5 Y7 B4 v; o /*
5 A* v% ?! j: L+ ~4 ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), B& ~1 h( b3 ~ }9 H X
{6 u8 U, H$ @5 J( G3 h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! L$ \9 D; H5 A8 h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! K y5 A# G, e7 f( M) A" { }
& A8 |5 ~! {2 K3 b4 o */+ o* I% q7 }4 H7 @% r8 L
//////////////////////////////////////////////////////////////////////////
4 F4 b5 v0 |+ f1 v$ c break;
) W- J' A' F3 Q4 n }
. @3 t3 U/ K# @# {' K O }
. X3 K, ^: Y& L/ m/ h" v* I5 d+ M3 Y}, A6 j% V& T2 Y7 [' o( s) \) H' w
m_wndMenu.SetVisible(FALSE);
) q6 ^: ?# j4 d: s# b1 B% g
, Y, @1 p8 h6 T8 S& P--------------------------------------------------------------------------------------------------------+ y p" U2 v2 y% N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). z* |' g2 S9 @8 q2 |9 m/ M
{0 X0 ~! T0 I, G
BaseMouseCursor();2 j" ^' A" ]+ L4 ~8 W- P( Y! i
}# B7 z/ _% |' P3 g; E2 ^# S0 J
在其下添加:
! t9 D$ ~6 m. N6 I% \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), |0 O5 k' U8 S- D1 K0 {
{
3 Q6 l4 N* q8 \" B! Bm_wndMenu.DeleteAllMenu();
) D0 _ A/ l7 {# Pm_wndMenu.CreateMenu(this);" r& o" p. v8 X1 {( D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 X1 Q& j' |- \, B$ \
5 u C4 M0 d9 g) C- B1 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 m9 l" r- e; x( L) W6 D
{! h7 @8 R% V0 u% d# L8 R2 n1 X- N
//P以上级别才可以删除所有道具, E3 W5 }" z4 d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* `- O' o2 f6 B}! T8 U' z" n* q: b/ G6 B0 U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' s7 |5 O5 R0 L1 V% x& v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' h5 {; j, a& ?9 _% e# D" T( ^m_wndMenu.SetFocus();
+ v8 |& W7 D% q# D! A}+ ~0 ]+ V: s( D1 i0 E
------------------------------------------------------------------------------------------------------------
( t; z# r" j$ ?5 u0 v' R# G5 u* `*************************7 T/ ]4 l( P' U
WndField.h文件. }6 ~, m! n0 v; a# G1 Y( D5 [
*************************4 r# M1 h8 r! Q" ~$ i$ U, M
搜索:BOOL m_bReport;
' N! }0 t! ^7 ~% Q其后添加:
2 ]; [; W; t0 I1 }5 RCWndMenu m_wndMenu;
7 m1 P J0 w' M8 u# p- L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, @1 n: L/ N. ^7 @$ }$ w4 E其后添加:
n$ m$ G' |- l: R7 |! e Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 u/ X' |" _! r5 ^3 o9 N5 A* F2 b! `: T& @' G. ?
+ k# W) y6 u/ ~7 @- T) _ |
|