|
|
源文件中_Interface文件夹下WndField.cpp文件
3 v0 U0 w7 U, d( v0 E搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* k. k) N- V2 \. _7 O- ~& b1 q4 h" i
" x$ ?% H9 S) i, t4 Q: astruct sItem' |9 V/ ~& {# u( K& a6 c
{
# U9 |5 n! ^0 UDWORD dwId;& ]& v' v( Y' c5 q0 D. x2 h
DWORD dwKind2;5 E; l. K7 J! X- Y6 ` }6 ?
DWORD dwItemId;
6 ^/ ~7 q1 z s8 P2 C6 lBYTE nIndex;" F, w& [+ }0 ?0 E& E7 _
sItem(){" o/ {8 ^) L% p4 c
dwId = dwKind2 = dwItemId = nIndex = 0; D% [' o6 L1 @2 q9 N* _/ s
}
4 w8 M2 ]' x9 }: e/ L' \/ _+ mbool operator < (const sItem p2)1 n& y, @! i( z) ]
{3 ^9 \+ k$ l( M9 }7 ]
if (dwKind2 == p2.dwKind2)
( I( W& h- L v3 ~$ C7 { V {$ b0 \- Z5 {2 \( v) F
return dwItemId < p2.dwItemId;
`1 B* t9 L" r* T0 d% d }else{7 X) p) S1 [1 K& r
return dwKind2 < p2.dwKind2;3 Y# a8 ]* A) N
}
! [3 S4 F6 |4 e! P Z3 X}, f& j3 Y' k g8 O; c
};
3 ]; ?. d( s: e0 j& _class CInventorySort0 ?" N: t8 c2 \$ P
{
: a y5 g G9 `8 \6 H1 H9 q; kpublic:7 _% A7 m' A q$ z' w
CInventorySort()+ q! _2 p4 \, v% l
{
+ d; z: M4 c/ O0 \) C m_dwPos = 0;0 y+ s/ t1 I2 S# \
}& z( w* C" s* T/ r6 N! ^5 O
~CInventorySort(){}
# V. V; `7 p' m' s* Bprivate:
& o/ {/ y6 I8 _' Y; _$ C/ PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# U2 J2 D- V s# O3 K/ a+ L
DWORD m_dwPos;* i/ D: _; g' S( {
public:
( W' `+ _, H! W0 Y8 Dvoid Add(BYTE nIndex)
2 s! ?' v4 n% g! f9 s: Z{4 S$ s1 r" Q& a7 n3 ~
if (m_dwPos >= MAX_INVENTORY)6 L$ o. y0 w3 f8 u% }+ m
{
; }9 y* d- u, m" } return;5 ]5 a$ S& P9 e* ^
}3 s* G( T+ u/ x& b5 k+ o
m_Item[m_dwPos].nIndex = nIndex;
6 f5 `- M" b1 q" R, y3 J) X" n% ` m_Item[m_dwPos].dwId = m_dwPos;
7 w9 N7 q" S+ ~ [9 z% D7 O L m_dwPos++;
% `6 V' L q- K( Q}
( j6 {' a: Z9 Q' K. @2 ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* h; V$ I: s- X/ E+ [( I
{
( g7 j; E% Q5 G# ?4 c- z for (int i=0;i<MAX_INVENTORY;i++)
0 d; R2 X. f) F& [8 b {
/ N! M, |9 R/ @3 K if (m_Item.dwId == dwId)
* i% h5 J1 B- G {
. E9 l) O) j" }5 Y3 ?0 {' _1 t$ d return m_Item.nIndex;
6 k/ A5 A6 C' L" f( p }
) V, D6 K( a) A( m% ]& @! L5 H }# r1 p( d: O* q% u# w
return 255;
* ~( g# C* d! H: n }' d' p0 F}& a$ L/ u1 q4 `& S8 U3 P+ m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ T: L7 D7 v* Y. h: E9 `. T; Q
{
7 q' u- ]; ]: _# y. I/ W' n BYTE nTmp = 0;
% |0 I( M; b/ N bool bDest = false,bSrc = false;) E+ \% Y( `, c* O% {
for (int i=0;i<MAX_INVENTORY;i++)
- w# D0 T6 r0 H5 k9 e1 k8 X {
. O7 z! u- J6 _0 R, V if (dwSrcId == m_Item.dwId); V/ U, [8 @2 p$ r+ \
{; X5 \/ E- w# g# V4 O
//id相等 则 改变对应的dest和src
4 ^4 X+ [# E8 L I% @$ ^ nTmp = m_Item.nIndex;& H- x) D8 Q E2 H
m_Item.nIndex = dest;
; j6 z, x" D7 R$ r- [- T }! v* s% [# u+ X" y6 `$ L7 N( t
} P, A. I8 i8 g4 I U4 K, l! }) }
//临时数据保存完毕,交换开始" z( R8 B9 k0 j$ n
for (int i=0;i<MAX_INVENTORY;i++)
: ]+ Q2 F' U# y: [4 c; E* r {6 X/ c* i' b% Z; a+ ~
if (dest == m_Item.nIndex) Y. [8 G' Z% M0 x8 l" X
{' r! }/ R1 u6 S0 v1 l& W
//id相等 则 改变对应的dest和src
5 B, s( r; u& A m_Item.nIndex = nTmp;2 P/ e6 k3 d' ?2 v: m* U
}
' n( H! Y; N6 `- \ }: |) d q1 L8 w/ g- n
}
4 U& p' \ t# b3 Z: e0 S}; s2 T8 G6 _( p
-------------------------------------------------------------------------
4 R3 g- U6 L; Z+ `+ u" H0 t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ w& n% f# i% q% W* E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 W2 m, {, i) z' b紧靠其上添加:
- s" b! H# Z* E& U3 M$ tif( pWndBase == &m_wndMenu )
% N2 l/ i$ ?4 B% E6 J: h{
" P& p2 r, q, I- h4 g" o switch( nID )3 z+ {6 ]! m0 I+ _4 R
{
0 X1 v$ `, o* n$ x9 }, O case 2:6 |- e+ Y- W9 p* G" c* I
{
/ x5 p7 H" z7 y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, l# s( G$ ~; f* A5 e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: S& m1 L/ Q3 C" X6 R; U {8 j, B3 @. U8 G1 o1 m
break;
# e$ S+ O2 O( r0 `4 o }! x: o* e9 `: e' a4 f' z& H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% w0 f k' B2 W( J) q% B% h- T/ L {
4 k8 x3 }0 M% M3 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, Z V* |* x* Z) j1 \/ K if( !pItemElem )$ O+ p Q8 L+ z" M5 x; B( a
continue;1 O# D. I' @6 g. a* O& j
if(pItemElem->GetExtra() > 0)
: l3 U0 I5 F; n continue;, j6 Y3 B! b* {% w. |* |
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 u: I$ L/ v' k continue;
. t) {1 R5 R8 X$ n if( g_pPlayer->IsUsing( pItemElem ) )9 V( R+ }. ?. y2 C, L Y/ f; E
continue;7 h$ A: G$ m" R4 [$ _) C
if( pItemElem->IsUndestructable() == TRUE )
A# C& v! o5 |' n, ^1 L: t# | {( K; Q( K/ N: W0 i4 a. z" }
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 y% c3 ]) Z1 ~! }1 }$ p continue;" Y4 B5 j* X H. n( t! a# r7 p
}) J- S# e* i; f8 D% n3 c5 J) `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& t0 {. y6 r# [
}
# A. B2 b/ s8 ` break;: t* a% s+ p3 f; p# w2 q
}
4 a6 c6 }, b2 p+ ~4 b* J+ U case 1:+ n* C$ C4 r# f* j
{
; b$ o7 |# F7 U$ P6 o! a$ J //整理背包
) a9 m9 V7 Q d7 ]& o& L8 J$ x0 [ //////////////////////////////////////////////////////////////////////////
: J$ `$ A) `" I+ q: k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ r1 q1 E F0 }4 C/ ^) k4 ]% q( ^ //////////////////////////////////////////////////////////////////////////
8 I6 p$ t0 z8 `0 W3 F //////////////////////////////////////////////////////////////////////////( Y+ P1 O) ^# G9 Z( D: g# Z
CInventorySort* pInvSort = new CInventorySort;# N; h7 C) Y& f- _, E( \) c8 {
vector <sItem> vItem;
. Q) O8 W; u7 Q6 @ vItem.resize(MAX_INVENTORY);//初始化大小
6 j, A5 g" ]/ O8 \* Z //////////////////////////////////////////////////////////////////////////$ o7 D: a+ v8 ~, |8 ?
//填充数据1 o/ j3 s# M2 E: z3 v
for (int i=0;i<MAX_INVENTORY;i++)$ \8 n- F: A3 P5 f5 G8 a
{7 }% W5 E: F* l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- ?7 ^# {3 _* F! P. y9 g
if (!pItemElem)* K$ X' [8 D) T
{
# y; |8 k ?1 V+ | vItem.dwKind2 = 0xffffffff;
( s1 k/ w% L5 ` vItem.dwItemId = 0xffffffff;2 n' Q6 X* M' l$ X; F
vItem.nIndex = i;
6 A( s7 K& o0 ~ }else {- e6 T- z# w. j1 j2 n! t" b
ItemProp* pProp = pItemElem->GetProp();
) U' V7 M! ?/ ~2 R* j% r vItem.dwKind2 = pProp->dwItemKind2;2 y' P; E) Y' _( e4 ^' `- X
vItem.dwItemId = pItemElem->m_dwItemId;& i& I* @. }) W
vItem.nIndex = i;
! Z- f" R4 t& p2 M0 r }8 Z; a7 y/ q6 g4 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. F) B1 l" G) i3 L6 M$ z8 A1 s }
1 X( d0 P: r$ I7 O //////////////////////////////////////////////////////////////////////////& U' U" m8 ^% I/ S3 z8 L% K- R2 U
sort(vItem.begin(),vItem.end());//排序) L9 ]: |1 r/ d# j
//////////////////////////////////////////////////////////////////////////1 _, j8 b+ o3 g' \7 q; c* Y" b
//交换
* \6 b" H3 R. N/ z( c x2 n for (size_t i=0;i<vItem.size();i++)
% q2 Z% |" E4 L0 o! `/ z s { X2 s9 b( G# G8 ~8 Q6 N3 B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 k7 \* P( K, h& F6 l& j6 O pInvSort->Add(vItem.nIndex);: f7 }2 [( i; a P. e
}
9 E5 H4 d2 J5 m6 X BYTE nDestPos = 0;
9 L& ^4 I* i/ e& R* {7 l0 K/ ?% N for (int i=0;i<MAX_INVENTORY;i++)
, J+ I1 j- X! ^- W3 @' `) p- T- _ {7 D* j) w% Y8 W! n2 E% c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: W& y) l+ c! n
if (pItemElem)
2 I. Q3 `' x' [ {+ Y, A; w( E2 i# \) B
if (IsUsingItem(pItemElem))
: F% b" V }: D" w {
" Q1 b. R; |2 P4 F! r //这个位置无法放8 p6 `) ~& x) b$ G4 C6 x3 r }
nDestPos++;
) B; b" z& @% F2 T }
( E( L# f3 R' [0 ] }. i3 A% y2 g) V/ P1 w, n0 e! @
BYTE nSrc = pInvSort->GetItemSrc(i);8 b% x8 g8 |6 C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; t0 j* f! X) g" ?. t2 K8 R/ A) g$ a9 A if (pItemElem)
0 n' G- l# F/ A4 s' E. u" o2 m/ T {' S. }" |- Y+ w6 t7 }
if (IsUsingItem(pItemElem))" T! U0 h& e S- J1 {
{
4 I5 f4 h; q7 g/ w- e //这个道具无法移动,跳过6 m' J( p) F, E, L5 \# u z
continue;
. o$ k( {- B5 Q: Y& i3 K( I8 a }
8 a! f( y" B B }else{( d# [2 H* M2 q A8 ~# h
//空位置 不用动7 o# |' G1 o6 Z' r+ P$ Z0 G: f, e
continue;2 j' R% L C! Q' R
}
( D$ F* _) o Z; b //////////////////////////////////////////////////////////////////////////
2 J& B4 y' B* ?1 Z% {7 k) A) A //开始移动" L9 A7 D3 F& x: B
if (nSrc == nDestPos)
+ I: i4 d+ {* R: F {
% l& S7 e& d) K4 @) ^ //原地不动! L K# G1 ]3 G% M4 h7 i
nDestPos++;* |# k% I" V' y$ x# i" J$ C& f0 Z
continue;0 u. X1 M+ R" N1 B( j; |1 J& E
}/ `/ Z0 F1 Z6 M. H9 q" L
pInvSort->MoveItem(i,nDestPos);( f3 z' u- }0 z- B" p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. p. V8 l, C" v1 Y% n Sleep(5);* F, r5 h/ y4 e0 n% u3 d6 F
//Error("移动 - %d->%d",nSrc,nDestPos);
' a. P/ T" u: a) q c- s nDestPos++;
) e4 U& ^1 |. z }
, o/ d4 m' d' a" N- w/ @ //取第一个元素的信息
% u0 q7 E+ q$ j4 g2 @ /*7 Q2 a2 G6 ]2 C/ {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 ]/ [0 a0 E# P4 | {2 ~8 ?9 X% O" `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 [, ^" u( U3 G- m q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 f) A* c$ s8 S P* u }
, p" X2 }% q5 A */
U1 n* k+ ~5 b( o //////////////////////////////////////////////////////////////////////////
' ]6 P, \9 ?& a8 A break;* ~9 K1 m- x$ O0 c9 i
}0 Y6 Y1 Y! J' }9 G& d' g
} " \5 J$ M d0 w4 I5 X H3 d
}
: Z( m: O- t+ F6 U! X- km_wndMenu.SetVisible(FALSE);
6 ~( u* k5 v5 X* y" B; ~; }; Z- x% G: P* [9 F0 T
--------------------------------------------------------------------------------------------------------( j& j2 I% ~" U @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: \2 E' w W6 p$ r3 s- [ Q0 i{: r4 h( R4 w1 W8 m' }3 l
BaseMouseCursor();1 \. F$ n4 p! b$ M
}
1 s! w- A- n" i2 x) D' W- T) f& S在其下添加:
7 w4 Q& Z! Y4 B1 D9 S3 b! Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), m" X$ C- s$ O
{
6 I" a# B+ O* E3 H% jm_wndMenu.DeleteAllMenu();
4 m) P& O3 f/ A# B) Nm_wndMenu.CreateMenu(this);7 t6 k& T* R1 ]' i$ g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, x' ]" I+ S6 X9 ?1 s9 H8 o; ~( Y) s! ~: H* N- y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 J M- u: k" t
{1 x6 k, v/ P7 d: ], O( M3 f9 k( N
//P以上级别才可以删除所有道具8 z S2 ~/ M' _% O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 v" P4 o+ r1 F# {% B
}
, [9 j. |" } D' tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ z+ K2 O" q5 |' R( C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 G3 T" `! k3 Sm_wndMenu.SetFocus();
9 N/ ]" r! D" F; S7 H+ k8 g! H3 y}
% \( A5 N* e% e' k3 h------------------------------------------------------------------------------------------------------------' ?7 m0 v/ v) P
*************************
- R" m3 G# {# \$ iWndField.h文件3 j$ N" r2 ]9 i9 Y/ O( ~5 U
*************************9 w7 a9 u P* }7 m
搜索:BOOL m_bReport;$ ^ ~" t+ o% h C% R* b, v
其后添加:
- `0 N9 _ S3 GCWndMenu m_wndMenu;
9 b+ Q5 M+ v7 M, S& P% E# ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! e& @! c& U D6 t) E# C3 A其后添加:
$ L& X/ R5 S9 S1 L) f4 R/ m4 ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
Z1 Q3 e# W: g8 |) x9 b7 F; j
* n, j4 ^% w1 `! w. M4 a& ~) y$ {
! g+ \5 ~" p' w! l7 c |
|