|
|
源文件中_Interface文件夹下WndField.cpp文件
' s8 {; W, }3 l" I2 l8 l- C6 }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 l( z7 T- }' w2 ~+ @
1 n0 `; F$ o5 V6 F" ?# o! k
struct sItem% F: G& ?# C! Y
{
* Y. j. n7 H; r+ I7 `, v9 E% bDWORD dwId;+ L8 a' A( [( g" b
DWORD dwKind2;
1 w4 p O; t$ p* i/ zDWORD dwItemId;: T% Y0 y2 G4 ]: p/ `0 S
BYTE nIndex;
! K9 C* ^# t: G6 P* E* LsItem(){
% ^0 j: O, p% s dwId = dwKind2 = dwItemId = nIndex = 0;" k8 S6 j( f( l$ d( i& I! ]
}
! w' \5 C m+ e' H1 M7 ]bool operator < (const sItem p2)
1 `/ w& _! z/ h1 H8 b{
- f* b5 V" C4 @. g6 ?* ]$ o if (dwKind2 == p2.dwKind2)
1 f1 T0 g$ Q) f0 { {5 u1 y& @0 |8 a1 E8 Y
return dwItemId < p2.dwItemId;
8 M+ N$ _8 X# L- X9 @6 N, p& v }else{
6 ~# p" F& ^5 l return dwKind2 < p2.dwKind2;
5 G- f* Y' |8 k6 ? S. B/ ~ }$ |. {" w. Y* q2 }) O t2 O
}0 s. ]& x- y( S, W6 i/ ]* O6 @
};
7 Q. S8 V' M; Dclass CInventorySort2 c3 i1 _8 Q) T1 j6 p2 p; I8 N
{3 O: C% ]: B; B2 F2 n7 S* A
public:# Q3 V. n( t5 o
CInventorySort()
" H. v* @, C7 U{
; P2 {% `+ a. }5 s6 y v! J m_dwPos = 0;7 H/ Z) _/ }5 F. g( Z
}
0 [" f+ F9 T7 L) j7 F~CInventorySort(){}5 W+ S* Q; v: e
private:1 x# _5 K, m/ Q8 E' ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 K$ L; W+ R! M9 g1 |; b/ t) z
DWORD m_dwPos;" |% @& G. l W5 p
public:5 u) u+ |* v F2 X
void Add(BYTE nIndex)
) s: J; e. l- K! T9 a" q{. s7 t$ E: L b, B+ ^3 U
if (m_dwPos >= MAX_INVENTORY)
7 \- b, u, H! a |% W) @ {% w# G$ ^/ s5 k! r$ H) H: @5 Y
return;, g) b* v, j8 j, J/ G
}
+ |- q; O0 E9 K& |* ^" `# F m_Item[m_dwPos].nIndex = nIndex;
: u& [! Y$ `! _ m_Item[m_dwPos].dwId = m_dwPos;
! r/ X& d" Y; E7 a' v m_dwPos++;1 k$ V5 |; H1 j* K U; V. }/ g
}
& h. a, [6 n. I4 a+ kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 K4 o7 f8 k$ ^% K{, @1 k5 t( L; Q8 i
for (int i=0;i<MAX_INVENTORY;i++)
4 [- @% U7 O" x9 r4 z {
8 _% D3 r8 \! h- J if (m_Item.dwId == dwId)1 `% q7 \! @9 ~' N7 H Z9 M
{
: q0 Y6 E4 M9 e! k return m_Item.nIndex;6 {! W. t" H: m; Z) s; m
}
5 @2 c0 ?* ~6 ?! _" H& ~; J6 b1 x }9 o( h; M% B0 C2 w9 g
return 255;
0 t' r& R/ `. |! X/ v3 R! X. J8 Y}6 j0 ], W+ n/ F6 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 b/ V! K( z9 \. C+ S
{+ @9 E/ x+ g" r2 }: _& Q. Y# g
BYTE nTmp = 0;
2 N% d8 a9 d% Z, X" _& I bool bDest = false,bSrc = false;
6 O0 \9 r: z- | for (int i=0;i<MAX_INVENTORY;i++)
$ w0 j, d( j( x. I" Q {
0 \0 U$ F1 d# B* ? if (dwSrcId == m_Item.dwId)0 m' `' w" p# O! {1 M' I1 a
{
9 ^9 ?3 r, Z# k: ? //id相等 则 改变对应的dest和src3 P! }, u+ d8 F4 z% i# G
nTmp = m_Item.nIndex;
! N, H* G* M# x! ^. A. d) X m_Item.nIndex = dest;" m7 }7 E" D+ O: c; _5 T- z
}
+ W' V' y" y( S+ l: S, R }
: s: N9 ?9 u: ?" i# Z5 ?0 _8 j% S0 ? //临时数据保存完毕,交换开始5 N! h- k, p7 b, t# q3 J8 @
for (int i=0;i<MAX_INVENTORY;i++)
N9 { C3 Q6 R {
1 M5 Z) w& {2 I6 M if (dest == m_Item.nIndex)! f9 c y2 E6 S0 Y$ U, z, E& a
{
- W! x, F8 s- I9 q& x) j- F& U //id相等 则 改变对应的dest和src- f3 h: B/ `: k) z* P8 v0 i3 x X K
m_Item.nIndex = nTmp;
4 x/ M1 x o- D3 O( i- h }+ H4 m% D7 x( D1 `/ z
}
9 V; B" P" {4 F- p- V}" [% V+ B5 l, q* ^. {5 ~
};
/ G$ g" ~. |1 c& j-------------------------------------------------------------------------
2 b6 u; q9 F4 v0 x0 F% `' M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 C/ Q! o* \' n/ E) l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; A# B8 u. Q9 O1 T% K
紧靠其上添加:
" G H+ m& j- ^if( pWndBase == &m_wndMenu )8 k1 |, |5 h5 d, O$ p$ N
{5 g0 v# |# }* m/ S7 u# W; l
switch( nID )
* g" z2 z; F2 f {2 U$ h, D+ P, I
case 2:
8 f' r: t) O- p) {8 A/ G {8 @& k- C3 b$ l4 _4 F
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ d0 G- L2 y1 c6 v g( T9 D4 S
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. V0 @2 e4 a8 [* u& R( n {1 N7 X$ G4 c( Q9 s1 k& n
break;
/ i, D+ B s: ^$ | }1 z7 w5 d; q; A4 Q' K
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ n" g3 j% M* \3 C6 \7 y9 g! j
{' K7 d2 d6 ^' J- G3 J/ y: d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) E% u1 N& Z9 A4 X" q$ _ if( !pItemElem )' i1 ]& M. n9 \- c
continue;
/ P/ T+ [4 ^" f2 B2 k& \6 R if(pItemElem->GetExtra() > 0)# E2 X8 ]0 A/ J& D
continue;
9 B- T% ?4 h- R k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: ^1 t& s; _1 }5 `+ K4 o continue; U/ `( \& P9 m; Q, s% {
if( g_pPlayer->IsUsing( pItemElem ) )6 ^+ \) z. G, d- X
continue;- E3 Y( l. w, v, N/ R
if( pItemElem->IsUndestructable() == TRUE )
. p. x k6 m, i* {# ]; d {( C7 f2 E [( g% A2 p4 i; v
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 x" H0 I% c9 L Y4 J. i continue;! a. D+ @7 x) l" {% z% I
}/ G) R5 }0 S6 e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 m8 Z! \2 y% R( x+ z
}
. [3 Q) ^; b0 G3 n& c break;! N" ?2 j) K1 S6 k! E
}
# ]! r- A4 Z. C/ x3 a _9 t case 1:
- F* V4 F) W4 \% J* ~' m {
8 L4 u n* Z/ o3 X+ ~/ B //整理背包
) t' B; ?. ?7 V# W( N+ _ //////////////////////////////////////////////////////////////////////////
) c5 J, W4 \7 d+ B& u+ c* _( k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 T7 S( T& Q$ B" \1 O( z# Y- a x
//////////////////////////////////////////////////////////////////////////6 b: L" W$ n J
//////////////////////////////////////////////////////////////////////////3 U; `9 i u4 T5 t; ~
CInventorySort* pInvSort = new CInventorySort;+ f/ T0 u' ^- J" P; z. Z8 [
vector <sItem> vItem;
2 F5 b; K7 j$ @% L0 u& @/ E vItem.resize(MAX_INVENTORY);//初始化大小
, ?2 i/ Q5 Z" I, a //////////////////////////////////////////////////////////////////////////
5 M( o' l, k0 T3 B5 z; H //填充数据
9 r1 B9 p0 B+ T2 i, G. @2 K1 k( p for (int i=0;i<MAX_INVENTORY;i++)& M K) \0 [+ y) t' d
{
- s5 \. w$ e f& `& k& N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ l# U, V* B# N# w if (!pItemElem)) U4 ~$ A4 z+ N9 k0 p
{
+ Y; B. y2 Q0 s- J vItem.dwKind2 = 0xffffffff;
5 s! x7 {& j- d5 \% M; }; t1 L vItem.dwItemId = 0xffffffff;1 [5 Q: a* U4 U! K0 h
vItem.nIndex = i;
+ k ?5 V6 r' n X) D5 C2 [ }else {2 V! ?7 M4 t f9 ~
ItemProp* pProp = pItemElem->GetProp();
- q$ G U) C1 ], q& C vItem.dwKind2 = pProp->dwItemKind2;+ B9 F5 k6 z2 Z
vItem.dwItemId = pItemElem->m_dwItemId; n s& N2 W" U: \, m0 f
vItem.nIndex = i; {/ z6 O7 z: x! }2 l7 S
}# }/ Z$ c8 q: W; B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( f' K; A+ j* c& b. l$ R }
% W+ V& c) I' U8 P. I //////////////////////////////////////////////////////////////////////////
" U! f% \" |7 ?% m* e9 Q5 _ sort(vItem.begin(),vItem.end());//排序
; T" z/ c% s! v" e2 J1 A i. Z! a //////////////////////////////////////////////////////////////////////////
5 ?% R) b ~4 ^7 S, k) l9 R //交换
& D4 Z* z7 L0 G ?; L! e for (size_t i=0;i<vItem.size();i++)7 @+ T3 d+ K5 h8 ?. ]* Q8 H# |
{
: j' X5 @1 L% w- u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' l5 v9 U/ u0 f- |+ {" } pInvSort->Add(vItem.nIndex);
! }* u7 C2 H; G1 O( L }
: J$ i0 @, ^: h+ R' K/ ~! r BYTE nDestPos = 0;6 l2 i z' Y' c5 X5 M, w; V
for (int i=0;i<MAX_INVENTORY;i++)
1 f G$ C: n' ^6 Y8 z- } {
! B+ l8 O! h9 X R& i2 E: ?: x) e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; L( m: N0 B2 E# \5 T# Y! o if (pItemElem)
# q0 F* N e+ m; ^. M9 L {
' l' n, W6 g9 b' [9 s if (IsUsingItem(pItemElem))
/ q; v: x" _" w2 E5 E {* ]: d d% z n! S8 K
//这个位置无法放" P$ f; w$ s% T$ q" m
nDestPos++;
/ j$ g4 R5 U) L. r }
! U4 q' f4 K* | O }5 ]- h& l H# M" g% P5 I' l
BYTE nSrc = pInvSort->GetItemSrc(i);
/ }( t- H3 i, `8 o1 G. M3 V# {/ M7 c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 a ]. l* A/ ]$ x9 C+ R
if (pItemElem). ?8 H9 x1 Z- L
{
& r& J v# y# R& T1 A$ X1 G if (IsUsingItem(pItemElem))) a7 s5 @* @9 w
{( {( a& m+ ~9 ?1 ^7 }& U# W
//这个道具无法移动,跳过
+ e; E, N/ s1 b- v& E d continue;9 E0 k; W; i/ c4 x! C
}- i5 y' G+ p: y3 }' L' z$ Y2 x" k
}else{; [! U i, E" W
//空位置 不用动
# ^; {# F6 s$ v1 R/ L7 W continue;' P2 C8 z/ Z. u8 @
}
9 j' U$ c8 b! N0 | //////////////////////////////////////////////////////////////////////////# o1 m8 t5 }8 U% R# K9 \9 X* C
//开始移动3 K$ N- T! h; U7 e
if (nSrc == nDestPos)
: o! R3 L) `; o! C0 P {. e/ m$ s" P: d* ?2 m/ {
//原地不动1 z- [# X; f4 r9 u6 q$ B
nDestPos++;
9 a1 Z' V2 X$ ~+ e1 P$ b8 K6 g* d0 y! D continue;
) H |% u+ E( n& Z- P } I* o' U; V* I7 K/ h& R9 |
pInvSort->MoveItem(i,nDestPos);
4 |4 P) r7 b1 L# y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# l! N7 P! C0 r3 F Sleep(5);0 Q% a3 h" J- g5 J3 k
//Error("移动 - %d->%d",nSrc,nDestPos);, R0 L% M1 s" x; i6 {' b
nDestPos++;8 F; y- p2 R+ |9 F" P6 p' n
}# @0 W1 |! L/ i/ o2 K- _5 J( D5 X
//取第一个元素的信息
3 x& m! r5 ]/ s0 L h /*
! Z, Z2 P0 R/ p% |4 t5 T7 s if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% g' w/ D( l" W9 O( I {
3 D( H" E. D/ ^" C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* a) ^( g- F8 i/ n9 D* G) ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 u! r6 y' {3 m: f/ {* X2 { }6 A" w2 N( P. V! `, @) z4 @: A
*/
7 L% ?% k% s! {+ j/ T; X# z //////////////////////////////////////////////////////////////////////////
5 o k2 Z$ g1 s: ] break;
' G! |( {% g; y D: a }: y& ]1 |. K9 s8 z' e
}
& `; i7 m$ ^9 g}( b' r2 ?1 g# I1 ^" s$ T7 d: b5 Q
m_wndMenu.SetVisible(FALSE);
! i! h' @" u; X+ O% _1 S/ `7 z: ]4 M O: o( I
--------------------------------------------------------------------------------------------------------- S& D5 e: x X; A P. X/ {: G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), K4 S' F; I% ]1 D, ], R6 c |* ~
{
0 L3 c( @5 h. U3 |2 ]6 dBaseMouseCursor();! w; x, B- C+ Q# Z
}
( o `0 D) R+ j4 W在其下添加:
! N2 j, E+ u1 n1 ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 r2 y) p( [$ @* v( q: `1 @, U{" l; q* y' s, O' x" Y- I4 y
m_wndMenu.DeleteAllMenu();0 E6 D% s1 v1 b L0 B8 k, ]% t
m_wndMenu.CreateMenu(this);0 ~* b7 z* H' X$ @1 ^# e1 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 A" {# W. ?1 L; a- N( m- N, G
9 D! b g% C: g, e$ M' lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# a1 ?$ I8 A& u{ O x3 `9 q( l! V- ]
//P以上级别才可以删除所有道具& O5 u: s. H f% H' H) b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 D+ e7 j# l5 w6 t1 u% l" P$ p
}
% f& A3 g7 K: p! O1 }( km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: o! ~6 C4 T. M, R4 o, Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 [8 b' S/ O/ c1 o" gm_wndMenu.SetFocus();
, E" o6 e5 c8 o, A}$ X6 a( V& [# p8 M1 D
------------------------------------------------------------------------------------------------------------; Q4 f: w3 W/ Q) N0 i9 b+ V
*************************. v- g& z& i, H8 M
WndField.h文件
' B- Z& |1 {6 X4 e*************************( ~+ l; c: q# w5 N$ ?
搜索:BOOL m_bReport;
2 M1 r' E% G( t W2 J其后添加:* L) J* `7 G# ]9 x4 e
CWndMenu m_wndMenu;* Q3 b3 [2 @" G0 _* p/ R6 f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. Z4 r& H6 W& b0 S
其后添加:
: ^0 o6 n; Y0 Vvirtual void OnRButtonUp(UINT nFlags, CPoint point);' z4 s. C# O7 T4 e9 P3 }
) Q: S9 r) E1 W; |. n6 k+ e5 w' B+ B! ?! {# Z" z
|
|