|
|
源文件中_Interface文件夹下WndField.cpp文件
* B# k- |4 E3 |! p5 Z0 `: Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
D* ~8 x H6 l. U, k! W3 ^; i3 v" U
struct sItem: |8 _* {1 [! i; t ?
{
5 D. D2 P: b" m% I9 dDWORD dwId;% R4 U& s0 k6 e- t( x$ L
DWORD dwKind2;5 e5 b: u' r; Y" g2 v! u
DWORD dwItemId;) j- e9 o( y4 |
BYTE nIndex;' k% L1 r% C5 Z; n8 P) M
sItem(){
- n5 G, `: T0 s8 i7 J4 F dwId = dwKind2 = dwItemId = nIndex = 0;
) i/ `0 w1 Z5 Q; n3 M3 e* W0 y4 |}
. j7 b/ h! |: k2 h6 ubool operator < (const sItem p2)4 P2 [4 E( ~4 g! a
{
- `- J( ^9 L4 ~* y1 ?5 K) \ if (dwKind2 == p2.dwKind2)
4 m: z3 P7 M+ p! o" o {
P! h1 v, T9 c. O" k return dwItemId < p2.dwItemId;* z+ m$ t1 e: s6 v" R1 u* b! d
}else{
w# {" L* y; K! m return dwKind2 < p2.dwKind2;5 h/ O/ U! ^! s- W2 Y& ~- c
}# b( Z- H- B* T" Y4 K: g
}
! v8 n4 B/ A( p9 D% O! N};# T/ p, J' g$ C% K$ g2 M8 n6 e
class CInventorySort: o6 [# ]0 Q' y* o
{
- ?* @: N' h1 q2 P- S! fpublic:
# J4 B# p+ |* VCInventorySort()
9 P# X; O& {$ O1 e. e{( `5 K3 U* O( i+ l
m_dwPos = 0;$ c5 y2 \4 S& _
}
/ b- @# e2 X7 e~CInventorySort(){}
& a9 z6 s; B# b! ~1 v1 V4 W) M" Xprivate:
% o2 C1 L: x( X( G3 V& C! LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* t) S6 d" x4 n$ D* `0 h% zDWORD m_dwPos;
' ~0 U5 ?( A) ^* o3 Opublic:8 _% {0 D1 Y7 v. R1 m
void Add(BYTE nIndex)
5 |: w' l# T, e- o. a/ O{
; `9 Q& D& H0 ~2 U T9 h+ f if (m_dwPos >= MAX_INVENTORY)3 ~. ^9 [7 Q! e6 ^) q/ T) t& [; y
{
3 r, u7 r1 g8 e/ Y9 B return;
% y/ ~( g8 Z; @$ N$ j$ W }' w- u; |' d" x1 Q# `
m_Item[m_dwPos].nIndex = nIndex;: ^' \; s0 J9 v. G2 Q
m_Item[m_dwPos].dwId = m_dwPos;8 B% D4 ?( V1 E- q
m_dwPos++;
+ m6 f: S+ m G}
3 ~. p/ g( i1 q8 o3 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
M& f; b+ [; o" Y, ?{
: Q% Q: b% W* l/ y8 a5 Y for (int i=0;i<MAX_INVENTORY;i++)7 t/ }7 v3 \# B4 G" @
{
1 D9 }5 N* s6 E- r, d( v if (m_Item.dwId == dwId)8 s/ \+ q. Q" H; d8 [+ E7 L
{
% R# c% v9 M& g; I) L: C' V& O return m_Item.nIndex;) j8 T# c6 |6 w( k6 ]0 d4 D3 q
}
) ]) |0 l# L. N4 Z4 [, ] }( r) }$ e0 ^) [: A( w
return 255;
2 O! H' s, h# G8 ]}7 V7 F+ l3 R9 |! n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* ~) }% F- s- B4 z( l{8 o u# I$ O1 f3 c7 Y
BYTE nTmp = 0;
% _. F4 n9 k7 u# M# `' l7 } bool bDest = false,bSrc = false;1 M/ U% D2 n( I# Z
for (int i=0;i<MAX_INVENTORY;i++)
- A( S: u4 a, m* y, R6 @. L. \ {: C: d o6 W! k: }: c8 q+ T: k
if (dwSrcId == m_Item.dwId)
) d4 p" a7 L+ r$ ] {
( P: r- U: W" o# ^6 k* c //id相等 则 改变对应的dest和src3 O* ?7 h |8 \' b; I2 g
nTmp = m_Item.nIndex;1 } S# b, U' Z& i0 ~% [2 H1 n
m_Item.nIndex = dest;
4 G' I1 J5 O( @! @+ w |/ | }* o5 R; I4 S% j \! J
}. ^" g. \4 U9 }* P# ]: T
//临时数据保存完毕,交换开始 ~4 a% g, W* o( I
for (int i=0;i<MAX_INVENTORY;i++)) _. O) `1 I, W/ k" M
{* v& j7 T1 v# b7 R
if (dest == m_Item.nIndex) Q) R/ g+ @$ S! n- E
{
+ |7 J3 X5 D% |$ V) W& | //id相等 则 改变对应的dest和src* t0 C! @* j0 Q+ V: ?5 O
m_Item.nIndex = nTmp;
2 I: |; m& ~' [6 D }/ `) \+ Y6 h4 e" m
}
$ A2 f& f9 @' w y! H6 n/ d+ m}; ~$ M- t, }" Y. c$ B7 J
};
1 p0 c" U ?4 i( O-------------------------------------------------------------------------1 V- N8 p5 j7 ]$ c o5 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. X- [8 o# q% m0 x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ E# _% \ E8 ?! g
紧靠其上添加:
* X T8 B) B2 n7 x) tif( pWndBase == &m_wndMenu )! E. R% {/ \# q" y
{5 I g8 y! o; k" }2 T3 `& U
switch( nID )
7 m: w a' `% t) V. w+ s {: A/ R# M/ m' ^' W8 s
case 2:
! J: s; o0 I. r! j, _3 O! f( k {' C- ^) K" l% I; j1 x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- P# J- P2 d4 ^) G6 p) Q$ t4 s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* g+ }- v& S! f3 P+ t {
9 T' {* n3 s3 s8 F break;# {" S: N; U3 n# J9 E/ W
}' B9 [- D# A7 b% V: G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 Q% g+ K1 C/ H" ]9 [4 @% C! V {& x% U: b S: o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( g7 |2 T% h0 d9 ~
if( !pItemElem )
* q/ \! j4 i% o5 g continue;4 R+ p6 i9 T, ^ _6 d F0 C3 T
if(pItemElem->GetExtra() > 0)* D0 _$ j& M5 h" b0 r
continue;- |8 R" a' R) s1 D: k, Y8 {5 [/ V/ R
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) }1 a9 k2 l8 N; `9 Y continue;
, C! h9 [: o* a if( g_pPlayer->IsUsing( pItemElem ) )
4 |% T2 P5 J! A( q# r continue;( b) K9 O; T$ O5 B, J+ L
if( pItemElem->IsUndestructable() == TRUE )3 M. |' f# M9 }8 P+ q
{
/ A& V: ^- b/ Z3 c9 v% ~0 O9 s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% S2 G; F% S4 B- d8 x continue;
. b. o: u- z: }& | }$ e2 r/ e" {% ^. t3 u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( L/ {* W6 m4 g. a* F% g
}: E! i; p3 u$ ?. [7 `! j5 U
break;
1 s( f8 W- k( y# G }
1 S' M6 A% _4 D2 v case 1:& ^" o! T! T$ U4 o
{
& E- l& j2 G% ]- x, V4 F1 ~ //整理背包( h: d6 e" _5 f! L0 T- ~
//////////////////////////////////////////////////////////////////////////
0 x Y* p4 C; ^' q- i8 G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' _( V$ i4 p! P! P- N6 q" i //////////////////////////////////////////////////////////////////////////! G( c8 o: J: g& }: F& V8 ]8 H
//////////////////////////////////////////////////////////////////////////8 L# K+ f1 V: |* E; f2 g0 L
CInventorySort* pInvSort = new CInventorySort;1 m4 t+ _3 S6 r, a
vector <sItem> vItem;* m6 h& x& H- Q$ g' s
vItem.resize(MAX_INVENTORY);//初始化大小
) }; B5 j% [6 Z) \9 c //////////////////////////////////////////////////////////////////////////
: @, p6 `; C7 d. o R, R; A- c2 z: y0 R //填充数据, j- h" j; ]( ]2 N/ s" F: D
for (int i=0;i<MAX_INVENTORY;i++)7 p; D) D3 E! a! B; D+ D p
{
4 ^9 Y* ]. _0 X. Q% v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- N) P$ [* i7 O6 U; f2 H if (!pItemElem)! n; r( J8 \( a& o9 @7 ~. A! Z) ^
{
$ w. u) ~/ n8 w2 D' o9 s9 p+ z vItem.dwKind2 = 0xffffffff;
; P# s% h; ^7 P; M+ d% y2 V5 r vItem.dwItemId = 0xffffffff;+ ^/ g1 C! a- U: b
vItem.nIndex = i;
) {7 R6 r. B$ |) ]+ e7 W; t }else {: c: ~# Z3 U) g9 V; M, A8 B: m
ItemProp* pProp = pItemElem->GetProp();
$ w7 P: z6 G: b# e vItem.dwKind2 = pProp->dwItemKind2;
. G2 W5 S+ P/ Z8 E2 ^8 k( N$ f vItem.dwItemId = pItemElem->m_dwItemId;) ^% q0 g" u0 H; q! Y! S
vItem.nIndex = i;& W7 R$ `' S* a3 k% K( P% H
}; M E3 }7 O7 C0 H3 p* y: |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ R" z4 i! h; S v- T# Z: j }
3 T& t4 s5 s2 w$ Q4 [ //////////////////////////////////////////////////////////////////////////+ {3 u+ `" m+ X0 p
sort(vItem.begin(),vItem.end());//排序
! E; |( Q! @1 T7 J/ F* f //////////////////////////////////////////////////////////////////////////
- t$ P' S3 q c4 w* @ ]; @2 K //交换* D* d6 s# D/ Z' k" q: `
for (size_t i=0;i<vItem.size();i++); q$ |0 l4 W- \0 R1 h* h/ Z8 Z
{
5 w- s% W3 S1 J, t; L/ a% v9 H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! u4 R+ o0 e) b) h3 T1 D8 X pInvSort->Add(vItem.nIndex);
- W( b! s4 S( y$ D3 q; o( y8 N1 d7 Y }
1 \8 |9 Q2 `6 E, V6 ^$ B0 b BYTE nDestPos = 0;: K! `" G. x4 f% @' W; A
for (int i=0;i<MAX_INVENTORY;i++)! ~ }' r) s( Z: F3 q2 m, S
{; Q0 q9 j* V' F' O. ?0 U( C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 M+ x' g6 I, ? if (pItemElem)' K. b# G6 S4 D) Y5 n1 T
{
2 n5 ~' a2 n3 @9 d# [ if (IsUsingItem(pItemElem))
$ m0 C4 q0 F @5 f {
8 @5 C3 L& |5 r- I //这个位置无法放
7 ^0 x3 D1 ~$ z! h nDestPos++;
" @$ L: I3 p, T+ }% `- |: A' i0 o }* h6 g! R! b* J/ q: S1 X3 b& O
}: m m Z# n4 g' K
BYTE nSrc = pInvSort->GetItemSrc(i);
4 t' G0 R! r9 n1 _' j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# _3 t" h. N, {+ p/ q
if (pItemElem)8 e& K+ [3 `9 G' ]
{, ^3 g7 S" h+ L* Z/ x# \
if (IsUsingItem(pItemElem))3 N( h/ K# B( `" y! Z: S' g
{7 Y5 `1 _( [% s+ p9 q, o$ B/ R
//这个道具无法移动,跳过% R" b" ?- N9 M' ~- X( g# d' a( }
continue;5 ~0 p+ p6 L$ A9 a" |! X C
}
; y5 L: G# ~' x% G; [+ N! S }else{/ k7 ~6 j$ ^; X0 n1 g
//空位置 不用动
0 T6 e; |0 i6 v1 ?# O continue;
3 }+ e& S# H. L. c% w# S$ m }) ~ \2 n2 N. }0 @/ @
//////////////////////////////////////////////////////////////////////////
- p0 s( s8 R% o. m; q //开始移动
: H. @& N X# {! v if (nSrc == nDestPos)
2 L& }% B8 e( q/ `0 D8 P! a3 u4 Q {( w3 \- m3 f8 y' U, H
//原地不动
5 Q. I* Q" j7 x* U- Z% r nDestPos++;
: f5 V$ b4 S$ i. p+ C( X; } continue;9 D s- J1 u7 a
}
* P6 q* E: w/ C5 f pInvSort->MoveItem(i,nDestPos);1 s* j* d, D |4 m8 [2 q Z- W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# \+ ?- \0 q0 x' d5 A$ a. {5 B
Sleep(5);. @1 Z; q! \# s+ Y0 n
//Error("移动 - %d->%d",nSrc,nDestPos);
8 c% T% m3 z8 o1 E nDestPos++;
- k8 R. \6 @: `) S( i3 N e }
0 s; L9 ]1 \( ?* E8 Z1 |2 {9 @8 Y/ x i //取第一个元素的信息) Z9 v& B/ L) E {4 \; P! ?
/*
3 h6 j( M- b% G; @3 n3 n% C1 x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 ]7 ]6 O! T4 f1 t* A
{4 V) E& {* |. O. A, m: w* K0 u, O
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' {8 R8 ^1 z, \2 I g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( Z! _3 }% w: t
}
" s( J' J; F* O( y) v1 z */
6 F( l2 [# R; _0 N7 M: _ //////////////////////////////////////////////////////////////////////////
) W" e1 m; h0 }, F9 l break;( L! z" X+ u x. n
}' c3 c! m' H) S. g
}
/ w, s5 ]( J' r! G}1 j* B7 l- j; ?* ^8 O* h
m_wndMenu.SetVisible(FALSE);3 K/ I9 Z0 c9 P6 r b4 u
# e+ B: W% K9 w* k; R7 i--------------------------------------------------------------------------------------------------------% Y" Q/ h8 w0 |; p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* n0 W) B2 g; a{
: U4 r) Z u5 B4 E" f" ?! n0 qBaseMouseCursor();
! I% Z- O( K7 i5 T7 y" @}
$ s! q$ @7 J8 U( J# b+ l在其下添加:
8 h6 `3 n* f# V) ]; Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ^& Q& E% H" ^, S2 q1 F; @{' L9 `' L! v' Q3 `2 r6 [
m_wndMenu.DeleteAllMenu();
+ F) l* x, }( i3 _# lm_wndMenu.CreateMenu(this);, Z. t% z( T, X" [. d( X+ B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 l2 C. ]7 x a% U5 J* O
/ \1 s% I- Z, R. t/ qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 n2 x" s5 @# e5 A% J8 L$ Q{* W* V, X. V0 k7 C7 U! f
//P以上级别才可以删除所有道具; J( H# L; l5 _" E7 l' {& { O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' _3 N6 ]+ \9 `9 Q* f7 }1 }
}3 W$ i; C: k$ b3 j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 J* V- l* n- w8 F5 `/ _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 `: ]1 K( [6 U# ]$ `m_wndMenu.SetFocus();
$ J, o* s$ l0 J}
% h$ r1 L) Z, T------------------------------------------------------------------------------------------------------------
R }3 u& z: G& [" z) ^) w% q, v$ C*************************
* @7 ?: }# [$ x, IWndField.h文件
! O4 c* d1 V/ K; z1 ^1 k*************************: e9 d1 }0 ^9 Q4 }/ ]
搜索:BOOL m_bReport;
; c# b* h& G3 E其后添加:3 z6 s' q: [$ L
CWndMenu m_wndMenu;) z' g0 D- ^) Y i5 s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) p( q0 h/ `! r* \其后添加:' m( {% D$ Q: o
virtual void OnRButtonUp(UINT nFlags, CPoint point);) F8 }) a) ]# D' @# k. F; z
+ d, ~6 Q0 T+ J5 N! X
3 D0 t+ `- X/ x& l% w9 [; ^ |
|