|
|
源文件中_Interface文件夹下WndField.cpp文件
1 L- `( [- ^* p% H. W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
u% X8 J% @ C9 v$ ^. [& q1 n
, k" R% p5 o. Z/ l# b! G8 w# @, j/ H( kstruct sItem
' j9 g% ~9 e$ w; o1 @+ T{7 _6 p: f( R. Z4 e `
DWORD dwId;0 _3 B0 B7 @- f, D" J
DWORD dwKind2;
/ g9 C2 u* L. S) UDWORD dwItemId;( h& M7 z1 }( C- g K
BYTE nIndex;5 Q! T$ t5 X8 q, f
sItem(){" q& x/ O0 m/ V! _' ^9 E# B) J; A. k
dwId = dwKind2 = dwItemId = nIndex = 0;2 B5 R# y' j2 P' \: u
}' A2 V7 s. d9 r- p
bool operator < (const sItem p2)$ C% H9 B0 x% Z: `8 J
{
5 T4 R5 F: V5 {+ u. J if (dwKind2 == p2.dwKind2)) X& q. e" \$ o: X
{
- t+ t3 P- c" p; {; I return dwItemId < p2.dwItemId;
& ~" e1 x6 P6 l+ y1 R# ^, N4 o2 Y8 _ }else{( E: W4 z7 w) c5 v6 {. C$ a9 ^
return dwKind2 < p2.dwKind2;7 \+ W2 N$ p5 ?- }
}
& {! u8 e+ d- e j+ M}; @/ R' A: P* P2 c) t9 z& ]' \
};4 U. Q" i$ h4 A# r: B5 b7 b
class CInventorySort
# ^/ l2 F. i4 F5 J* }2 X{, ? c2 g9 m; ^ c# X0 f
public:0 I2 @- E9 v; E6 H( M
CInventorySort()
2 @1 @9 p, d) r- E4 L3 p{
' \2 \* ^; K$ D: I' X% q+ L% B& \ m_dwPos = 0;! }% U4 D3 `( D9 J: J
}
* {+ e6 ]$ C, ]0 c( ~' r~CInventorySort(){}6 i2 m$ ]' G2 I( w. E
private:
; P3 H' X& {( t8 |5 c/ s& l, Y2 A" R; ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 S5 m; [ p* A' RDWORD m_dwPos;
' p. N* D& E) h4 |( Q9 gpublic:
' M4 f- l! X# @/ F: ?. b* }void Add(BYTE nIndex)
3 q9 N4 ?$ S- G. \& W{
/ H$ p& R4 P1 g7 Y if (m_dwPos >= MAX_INVENTORY) v7 T2 i$ O- a7 A" m; H9 ] Q; { z
{
) \1 C3 d8 F# @. g& J. |# w return;
9 `8 B q0 I& R& ~" G& o3 { }6 h% p( ?0 m" W$ K4 O0 z5 |0 ~, H
m_Item[m_dwPos].nIndex = nIndex;$ ^# d" x. S4 j# ?
m_Item[m_dwPos].dwId = m_dwPos;) e7 B5 X0 q2 B7 R. H
m_dwPos++;
, ] o* U$ n! _ R6 g}. |& K8 Z& n# o8 h/ n/ X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! q2 J+ \6 e( o x1 x) L{5 H4 Y2 w1 f6 {/ `
for (int i=0;i<MAX_INVENTORY;i++)
# O4 g f+ r. t" K {
5 K, Q& V7 Y* ~& D if (m_Item.dwId == dwId)
; x( S' |. X* e4 y% |2 ` {
) O4 t a0 F s! @5 ^ return m_Item.nIndex; g' y& J( r/ f, h/ E8 u
}6 V* e" s- n g- W/ L
}
" j, m- @+ U1 I$ D- k: z# y4 J return 255;) u! u6 t# q' N/ f
}; } F& S4 ?% l2 c, h* O3 P- h% `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 q2 F2 q4 ?- s6 V{( i3 j9 ^9 J& o6 \. _
BYTE nTmp = 0; p; n4 U9 @ F u+ }8 h
bool bDest = false,bSrc = false;& Y$ g6 R: U. N" j
for (int i=0;i<MAX_INVENTORY;i++)1 b, U4 q. {1 n7 b# W) O
{
; V. F. q' e' _7 ? A4 v if (dwSrcId == m_Item.dwId)
* Z. h. ?) n& x1 z! {: }( u7 D {7 ^! l9 O' E: t, b! t$ S9 R% G
//id相等 则 改变对应的dest和src) P. ?8 C q8 C
nTmp = m_Item.nIndex;3 d* \; \' M& y# c0 K6 X8 Z# q
m_Item.nIndex = dest;! K9 m( n# Z/ T# H {8 Z: A
}
6 x$ q2 k+ ~0 @1 O! _ }* o( K% h( \/ b s% c( k( ~, e& p
//临时数据保存完毕,交换开始5 g, ?' W! {/ n- j* { e
for (int i=0;i<MAX_INVENTORY;i++)
9 U* q( s5 f, Q' l/ }) C0 B {
0 u) C; n& P% e if (dest == m_Item.nIndex): K4 z: K7 S. L; v5 C1 x# r
{
" B2 q4 l4 S' Y: G+ l) A //id相等 则 改变对应的dest和src# P6 K! b& e2 f# Y1 G$ x/ a ]1 i
m_Item.nIndex = nTmp;4 \/ J3 V$ P0 L* g N; t) N
}
9 u+ Y; }: s/ A0 p4 \ }
; B! O& b0 V0 ]' f3 A8 \7 W}, @: I6 F6 L% X7 ^* o( ?! y* v
};
9 n5 _9 B4 |% Q- \6 H-------------------------------------------------------------------------# `9 U1 D+ ?# O" _& h* f9 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) p- z1 ^1 ^9 J0 W1 z% X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 p" p/ Z4 f) f2 A3 r. M9 a9 I/ C紧靠其上添加:$ S" m# r' F3 n: n: v/ N) v
if( pWndBase == &m_wndMenu )
9 M2 ]9 V9 q z8 Z( E7 n; O{
2 R! |4 T: F( J" a, s: l switch( nID )" [% L& ?& y3 l* `5 \
{1 A0 e/ {8 D( H5 v- m" ]& K. L, U
case 2:/ j9 @3 @: e1 {* R( o5 V9 p1 d
{% T/ O/ Z6 t* d8 `! m4 q9 {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- @" {( S" ^3 n& }! }& e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ \1 z" i5 Y+ C- U L8 l
{
1 Z/ e4 P; _! W. J6 Z break;
" h! L, r$ v' P/ ?2 R1 S" h! u }
% r9 n; c2 O- M' y C( \: \( E, f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( } ~/ i6 s" h0 X/ I A3 z {$ D9 @' ?2 p9 b+ M/ s6 T- T. v1 n* a% y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 w- F. r$ R& \) ^9 O3 t' M4 C3 E
if( !pItemElem )3 U4 b/ n) B: }' T
continue;
7 @7 v1 n% [8 k# P, O* I if(pItemElem->GetExtra() > 0)
% m( ?/ O- y7 {* u continue;
% ~4 o3 d1 g5 X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 c! Z# c* V. G9 C
continue;
; w. b1 Z( F$ Y+ X2 S if( g_pPlayer->IsUsing( pItemElem ) )6 K) k1 c% [2 P/ ?0 j7 Y
continue;
2 F! o) V5 p! d2 F if( pItemElem->IsUndestructable() == TRUE )! ]. K' z" Q4 i! o" h+ z* ~
{' g% K2 R- z2 p% E# T) U/ W* W. Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) \8 f5 i1 l. F2 f
continue;8 _' g Z5 i& U+ w
}
, @6 \0 D! f# r" y' u. @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; v. S! \5 b4 h4 N3 I7 I. c) z
}0 H: f1 V+ a5 T
break;
9 P' d: D* V' }! S4 I' G }2 k8 d- K+ i# R/ p8 `* I! j# w
case 1:
3 n2 C" j$ N; f5 R: C3 v: H {
3 H. M! A5 K5 Z& W8 `+ m6 a //整理背包8 Z4 }+ h. a0 y0 U9 `8 w% {
//////////////////////////////////////////////////////////////////////////; {) V, R, A# G0 h$ T* C4 n# P* s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% G; b& J0 j$ c$ `' D //////////////////////////////////////////////////////////////////////////2 F" l; x& B% P+ Z
//////////////////////////////////////////////////////////////////////////
) Q. Y% J Q& Q CInventorySort* pInvSort = new CInventorySort;! p3 I* [' `& l4 b& B% o! E
vector <sItem> vItem;
" i( a- E5 T, N4 {+ j vItem.resize(MAX_INVENTORY);//初始化大小
1 \9 }7 v( R7 ?; E- |: J) K //////////////////////////////////////////////////////////////////////////
- i' z: L6 f) y5 U! C //填充数据! ?9 B$ o. |. p6 P) v v
for (int i=0;i<MAX_INVENTORY;i++)1 s; o5 _3 \+ f
{+ j+ z% ]# X; |) g% K% f/ z1 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; `% A6 ^8 E# Z# G' k- @
if (!pItemElem)
6 V, |% l) J8 u {% x. A" [0 E, ]# Z
vItem.dwKind2 = 0xffffffff;
/ I' O( O- Q* H8 S% P' P* V! U vItem.dwItemId = 0xffffffff;
6 P$ \4 H, P% x( [4 P6 ]. ?6 Z! G vItem.nIndex = i;
0 n- r S; ^2 o" H: ]. A }else {' x) T/ N# }; E w
ItemProp* pProp = pItemElem->GetProp();
0 k6 Z3 H; c: K7 V% m6 X# T5 [ vItem.dwKind2 = pProp->dwItemKind2;" o* ^0 g; w1 S J
vItem.dwItemId = pItemElem->m_dwItemId;) x) j& l4 v+ l$ f
vItem.nIndex = i;" C7 R) e- ^( Q+ @! x) ^7 m# y
}
% B/ s' c: {- g1 ~1 X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 G3 M3 J% D, g }
1 z; A* L4 l0 n: B% N* ] h! G //////////////////////////////////////////////////////////////////////////
5 V9 W2 d) A- I& K0 V" _+ z5 w sort(vItem.begin(),vItem.end());//排序9 S1 }% i: K7 }1 L' o+ F
//////////////////////////////////////////////////////////////////////////8 ], u! p5 T8 a) t. b h3 {
//交换 `6 T/ y r+ _. J
for (size_t i=0;i<vItem.size();i++)
* J3 l" ]" C0 _ B/ Y {* R5 h/ t$ G& H* F% u Z% o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 s9 j) T, Z; O. k6 w2 g" t7 _ pInvSort->Add(vItem.nIndex);1 n1 F1 [$ x5 I% ~- @4 r
}: R7 p! R# H s9 Y; R
BYTE nDestPos = 0;
& g/ r! y7 P( U5 { for (int i=0;i<MAX_INVENTORY;i++)* v; R7 ^: w. g' T, K9 e
{
9 h5 J' \+ x: ~8 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; h; a- p- e- ]2 f/ V+ r+ m if (pItemElem)
7 a4 M* |1 R$ X8 f {
7 m1 h5 ]* t& W. O3 W if (IsUsingItem(pItemElem))
% c( d% O, f3 a" B. N1 C {
1 h2 k. V" C) q" s: c$ B: g$ T/ \ //这个位置无法放
* m- R& C* p# _0 F- s6 A, v) V nDestPos++;
! Z# ]: G1 j4 m$ J, l7 Q4 Z4 R }
* o& D9 E! d$ f3 E }
+ f4 s- c7 s0 f. W BYTE nSrc = pInvSort->GetItemSrc(i);+ C3 P5 N7 m( T; a3 D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* D; U/ g4 g; N2 }
if (pItemElem)
% l7 n0 ]* p+ y* | {9 S+ T" s7 G# e& E
if (IsUsingItem(pItemElem))( m; ^$ U, u$ W+ Q
{
# g! F: O/ b, }7 P& X4 [ //这个道具无法移动,跳过
+ L0 `% k+ P; \/ j" e# Z' H continue;/ _5 z4 v+ O4 ]# X1 u9 `: C
}' C5 {. z( ^( J1 P
}else{2 o5 ]: J* |3 K3 P" E2 n& L
//空位置 不用动
; O0 ?0 t5 o2 t) ?1 G' o continue;, R q2 P$ |1 Z: ?. _
}+ l% |) W1 G# z5 j" A
//////////////////////////////////////////////////////////////////////////
7 s6 k+ v+ t. F8 @1 J7 H0 V //开始移动
: m1 X; N5 O! u$ _- x1 ]& E( y if (nSrc == nDestPos)
2 c; c( U1 E# u4 N {6 H# R, |& X9 |% J a! T: L9 l
//原地不动
: J' b" ^& v8 ]. r% S nDestPos++;
" P2 S0 Q. R9 w% _7 W continue;
# n/ R( S% R7 R; E! Y }/ M; n+ d9 S6 E
pInvSort->MoveItem(i,nDestPos);
! r7 D7 ~1 s. A2 e& X2 o1 ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- U; V4 b1 O' h! C! J8 ? Sleep(5);( M7 v( s4 S9 ?7 g5 C: |% \8 D
//Error("移动 - %d->%d",nSrc,nDestPos);& a3 `, X, c! y' t, V% @; q
nDestPos++;
# v9 \' c! M- K }
! {1 r% \$ }# N4 G; V9 f6 Z //取第一个元素的信息' g1 `: x9 a5 e) W% |% H! p: U
/*$ w6 f/ W! r' l% K6 J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ e R' v$ Q. B- V
{
5 P6 Q# _/ i: `) S) f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) S3 S: S1 ]( \# n& x. Z& z* R
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 }# E; F$ f) S2 s& N6 A$ L9 j }
# Z7 w0 j( ^# O7 L. Q; Q; { */ S8 Q$ h8 S9 H% z. u
//////////////////////////////////////////////////////////////////////////
) p! @5 q% \) }7 V9 k# _+ w7 f% t" J break;
+ E; v1 E6 _# C+ U' g- h }
; Z S$ I3 F' ?+ L7 H }
) Y! u5 n7 R) f- D3 E) O ~+ k3 B}! {2 R$ R2 q: E
m_wndMenu.SetVisible(FALSE);
& y6 R( e+ e0 }9 d+ E+ N( D- R: | ^: Z/ g/ S4 g$ ^2 N r
--------------------------------------------------------------------------------------------------------
3 R, G& T. o. C! W! P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) L w% J: D0 X
{
3 C# a& J( p5 ~BaseMouseCursor();
; w! ?5 L- ?+ C6 v, ?! h# N8 F+ V7 u}
& g: V( s9 _# V+ G在其下添加:3 {+ D5 Q+ h1 r ~
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 }0 I. }2 l3 X( T/ \8 V- V
{
q3 A( g* z3 p- Tm_wndMenu.DeleteAllMenu();
7 G" c" Y( S. p5 U$ um_wndMenu.CreateMenu(this);' w3 [! d- F% s" U# n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( H+ g* _" `/ O% i, h3 u& Q" O1 \
9 ] Q. c; U% R" ~4 U* lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 t% Q1 [: H/ p3 U g
{3 o3 v& L+ M- ]
//P以上级别才可以删除所有道具
7 o& k. H" ]0 T0 Z7 x! f4 D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 U( z! C \; t! J}
8 {1 G) t" {" nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% ]8 o7 v. s2 N' C" k2 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ @% t2 n- U t) z; ~' M# _( x) {m_wndMenu.SetFocus();
% Q3 G. X+ m( W. n7 C; q, p}' u+ \; _0 P8 K$ } w& A
------------------------------------------------------------------------------------------------------------3 I" ?3 m4 V+ e! Q/ E/ k
************************** Z; P/ W" u, {3 k% S- Z& q
WndField.h文件
' k1 ]# o' b% f! B*************************, R5 k3 [5 K7 j2 u6 E, o
搜索:BOOL m_bReport;
. e$ d5 j" L$ \& }! O% Q4 e其后添加:
' f- O6 f3 a$ BCWndMenu m_wndMenu;
4 _' X6 \% _6 K7 i8 Y; g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 e& x j& V6 `
其后添加:: D1 E6 i3 b2 w0 X8 y
virtual void OnRButtonUp(UINT nFlags, CPoint point);) ~' @' _: D0 i7 Q( c& f" u
( |' x" ^! C- \" ~4 _' ~
: h' {# ^) n' p8 p; S8 z7 Z |
|