|
|
源文件中_Interface文件夹下WndField.cpp文件
. t) E- n7 L- k1 `# w搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 y; {4 e0 Z' x" |. z# v7 N
1 {6 j8 V+ L" w Q) X+ A/ pstruct sItem
4 @7 _1 b% D, m& \4 e# z{
! \) M9 Q0 v$ ^7 b! Z+ s* ODWORD dwId;
7 J. @# J4 {% h- I5 ~0 N% ODWORD dwKind2;
2 s$ Q2 a2 M) C3 ^DWORD dwItemId;6 ]7 s- q. g( O% ~
BYTE nIndex;2 A: v, O3 T2 O" p
sItem(){1 _" E& d ?) b8 A, {
dwId = dwKind2 = dwItemId = nIndex = 0;
+ S& R# ]* e P# |, t2 ?2 x}
' a$ {3 t9 x y5 Q8 m' Wbool operator < (const sItem p2)
) a3 @* R0 b6 D3 Z0 z: Y{, j& ^ t0 E2 s) a6 D
if (dwKind2 == p2.dwKind2)
1 `' U; `. O+ ?% C& B {
0 P' B! K6 Y }9 W+ u return dwItemId < p2.dwItemId;5 |" N- ?8 R* p) I! H7 ~7 f
}else{
5 J. L) F3 f- K, Y1 n return dwKind2 < p2.dwKind2;" d2 Y9 W& {% _0 W4 B
}7 u0 e8 E. M) l- @5 e
}
( V7 N5 U% G2 x( |0 ^};5 p: z w0 c, ], T) F
class CInventorySort$ ^( n! a% t+ {- ]& A9 v
{
4 `. z+ |) G$ U( C, Wpublic:
" l) k! \' s8 L) m# ?. u" \5 vCInventorySort()2 G" t |+ g* j, m9 q. }0 i& U
{
& N) I* p6 B: D. p* W7 { m_dwPos = 0;* l$ L( c/ V9 @! M# H, |
}
7 S7 t) c6 n4 V8 \ R. Q2 j, L0 F~CInventorySort(){}0 e+ m" W/ H! ~. U. v" Q7 X
private:
3 s" ?0 \( |' B8 n! v ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; B- Z9 K7 @9 r ?! J4 L1 cDWORD m_dwPos;
4 p' h* j9 Y2 V* j' K, m6 Qpublic:
( a# o' r; {2 G+ w& i. ~void Add(BYTE nIndex)0 \* V4 G3 R$ M: T: R! T
{+ j% ` i; A4 k. v& |1 ?$ W! F7 Q
if (m_dwPos >= MAX_INVENTORY)2 H/ O) D9 O4 [, y ]
{
) C' Q, Y1 f. w$ |: q# L# o5 V return;
( a" `+ Y& i# X' }# R N }
! W$ z- z1 ]+ e) a Y* U+ y m_Item[m_dwPos].nIndex = nIndex;
U6 h: ]+ j6 V7 x m_Item[m_dwPos].dwId = m_dwPos;
) Z6 N4 @/ p4 Q$ X( z3 s9 I5 A m_dwPos++;% t9 n5 L/ V0 h( L" R
}
, Z$ v' k$ N2 F+ ^+ t* HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# ]) s) A. j- s" A% A: _ z
{
! h* H" l. Y2 V3 v4 o; u2 j for (int i=0;i<MAX_INVENTORY;i++)* u# L w, @/ d* S3 i
{( A L& C# i- b; H
if (m_Item.dwId == dwId)
8 h( H8 |! |' c8 X {; ~5 u L6 ~9 h6 x- P, v) ]2 T
return m_Item.nIndex;# J/ h1 |. ~- x' K7 p* \5 @
}
! z6 c% c- J' o& B s& w }
! \$ x) z" U* O3 @1 ^ return 255;
- y# R3 k: v- t6 M}. @1 ]5 |5 x* W3 i* `. R1 }7 o
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ H% p/ n( v9 ], o! p{
/ c7 h7 V) a/ }; ~; `* A BYTE nTmp = 0;
2 a$ F) i5 S) @7 e bool bDest = false,bSrc = false;
: E* A" }: t Q8 ~! ^ for (int i=0;i<MAX_INVENTORY;i++)
% N! A8 ~9 f" c( s% |3 ^9 R {% o! B4 `4 N9 E; q3 W: ~
if (dwSrcId == m_Item.dwId)
- m3 ~% {# c% q+ {( [ {4 E/ M8 u) {& L. X8 t
//id相等 则 改变对应的dest和src: j5 r* j/ s; j/ W4 y' r9 h
nTmp = m_Item.nIndex;
2 |- C4 V: \5 e1 _% c5 d B m_Item.nIndex = dest;
" c" v4 k9 ~" ^6 d( B }" N7 W3 K+ J( N$ l
}4 h; e) k6 {# K3 r
//临时数据保存完毕,交换开始
5 @* S% o( D, X: H" X for (int i=0;i<MAX_INVENTORY;i++)
' K4 j5 ?0 J+ f! j' x- @$ g Y {
. ~5 w$ Q! b3 D! e) z! J- d# ] if (dest == m_Item.nIndex)( \4 t. Z( h2 q
{' O$ T; Q2 P% N
//id相等 则 改变对应的dest和src
5 H8 z$ b4 ?& W$ E& J/ e m_Item.nIndex = nTmp;
' @) { v" F. H' ^* ] E }" f% | X' m0 T9 B
}
: e! R6 D1 v9 ~/ |' U}
w& C( J8 T! N" z q, a: o! b};
* ]4 ]9 F6 J) f7 A- D-------------------------------------------------------------------------3 a2 I# S8 e# B$ {; k ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! V! F. E6 o! }' N# o) n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; x. o; I/ E# `' D# G& Z3 \5 h
紧靠其上添加:
7 A) h: T# Z8 o( c- m z" w& Yif( pWndBase == &m_wndMenu )7 S6 t/ L9 \ v5 S, ^ j
{% X, g1 m- I8 o/ d
switch( nID )
* D& w% r- v/ k/ v: E {! ?2 I; f% m7 g L* Z1 Y: `6 b
case 2:
! s9 D/ {6 O/ E- e {9 g7 _% U* t5 X6 A, x
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; N8 s& D, M) Q$ w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ @/ u1 [5 v4 o7 P3 H4 d) E1 a
{# f6 N6 n! A! p8 v+ ?: n# t$ m# h. r$ t
break;
: q; i8 u# [" R7 W& ~2 [5 ] }' t1 v' @; [& v/ v8 F" ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 S9 u. z/ a( P: j4 S% [ {
. g( k8 t# Z# s6 k! p! i* [6 @" D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 X0 m* a! B* a1 g4 Q if( !pItemElem )& ?( M) l* R- }8 g
continue;5 g$ O; w! b+ i$ w- d7 o, i
if(pItemElem->GetExtra() > 0)# a1 m! f7 {, n- P. U
continue;8 x& k" G- `; p' M; H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 V B$ S, B# |- Z" } continue;1 I9 W& |/ l7 Q5 J# U* l
if( g_pPlayer->IsUsing( pItemElem ) )
4 L, Q) ?% h( X+ t$ s5 Y2 S continue;
! Z' f1 Y" F, \6 G I3 Z if( pItemElem->IsUndestructable() == TRUE )
& F9 g2 {/ U* D' b2 w. u {5 _& a! Y3 d( f" y' m. [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) H7 l0 t& h6 r$ N# h# B2 {+ G
continue;
3 l- V3 g- V0 J4 |' ~ }
. N1 P% @% |. H! e* O( V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 a% Q1 F7 y, O6 ]8 b) ^! c
}- D2 m: W5 O9 X: A
break;* c4 O- J% i9 \# P8 ]4 Z) M/ x
}
: B# Q1 m- N8 b% G( H case 1:% x! g5 L7 W; o) g
{
0 y2 P# t+ U6 K% L) e) z //整理背包* }' M' ] e1 [1 v1 |
//////////////////////////////////////////////////////////////////////////. G; ?% L- |7 K a
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- a- x/ c# K, E" n
//////////////////////////////////////////////////////////////////////////
) q/ Y6 I. ]- Z //////////////////////////////////////////////////////////////////////////
+ V, t% E( l- @ Q* ~ CInventorySort* pInvSort = new CInventorySort;7 g3 y/ W1 m8 w H
vector <sItem> vItem;
% A3 ], V# t, @" _5 m) G vItem.resize(MAX_INVENTORY);//初始化大小
* ^( [: R( A- e: S" @7 Y* D //////////////////////////////////////////////////////////////////////////
, I4 B6 `( `" @4 q8 ^, M7 M //填充数据! j9 {" M# ]# A- E( A
for (int i=0;i<MAX_INVENTORY;i++)- K( f* p4 g( `$ m- d6 k9 L' W/ t9 ~
{
% I5 ]8 F N+ E, n, N* w/ h; R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ p3 K( k, q( d2 l+ r9 h
if (!pItemElem)
% w' O0 V5 k. F% b& Z7 [ {
7 X3 i5 ^% l8 @# O vItem.dwKind2 = 0xffffffff;/ X# H, d3 J' d9 e
vItem.dwItemId = 0xffffffff;
3 ?0 `: N& J: W. s+ D5 n vItem.nIndex = i;: g# v, e' ]4 _5 Q0 P: Q5 p& ?8 K
}else {! m! p3 ~6 J* \( r
ItemProp* pProp = pItemElem->GetProp();, |4 O. o4 x' ~0 i' T3 ]: C9 c5 k
vItem.dwKind2 = pProp->dwItemKind2;
`! o' i# w# f. j" F- a vItem.dwItemId = pItemElem->m_dwItemId;
# T7 }' R/ c, g B6 { vItem.nIndex = i;
' D0 e5 u8 j' A/ F% k6 ~ }. M: D! S; ~9 b+ x9 ?! K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. O8 U1 G; h. |& p I }% c z+ I& j' ~' N0 R9 [! W! |* h
//////////////////////////////////////////////////////////////////////////3 v' x/ a& e8 z6 e! a
sort(vItem.begin(),vItem.end());//排序. z$ ^! \8 S# c" {) K/ H
//////////////////////////////////////////////////////////////////////////" A4 b. s4 w: g
//交换
: H! s2 s7 w6 b/ F% S7 c" W for (size_t i=0;i<vItem.size();i++)' r0 Y8 m( Q8 r5 W& T3 ~
{
1 i' a4 N4 g* ~# E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. P' } S' H- o9 \ pInvSort->Add(vItem.nIndex);
% W8 B4 f: C* z8 I* W1 @ }9 B' l* M1 k6 r1 {/ W* O7 ?# r
BYTE nDestPos = 0;
" s1 T3 @$ b9 o: }1 u9 L" |6 ?6 f# ] for (int i=0;i<MAX_INVENTORY;i++)3 e2 |) B" v) S4 K# u+ ` H: _
{
3 w) ^3 S) m4 z1 d; z& h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% P, n) I Z7 R% W7 ?0 V8 u2 ^
if (pItemElem)
5 ?# C7 o0 e" l* u$ W3 @: L {5 X4 ^% f9 k7 o9 \2 E8 c
if (IsUsingItem(pItemElem))2 S6 C/ ?8 B; p3 O0 Y( Q" z
{. Y$ O7 P/ e1 W+ O4 @4 x2 _% D- {$ c/ w
//这个位置无法放
8 Q0 k k( i/ m* R nDestPos++;' y+ |0 r( O0 e" P1 x# E0 O
}3 ^+ x! e4 R- S, I7 ?' Q
}# H/ R* q" J3 B3 p% K7 V# K a3 V' N
BYTE nSrc = pInvSort->GetItemSrc(i);
1 {1 i T: Z! g' F/ C) y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 E' f% @- p7 V4 J B- U/ e if (pItemElem)' f. ^1 ^# Y1 g1 D: n
{
. J* j: P: l( @7 y! m if (IsUsingItem(pItemElem))& P! c3 {' R2 {- T) H" {& r
{
( [3 z! i4 m# Q# q //这个道具无法移动,跳过* a1 \2 h. \! n! G# t# E. t
continue;0 `5 [8 `* H% F' N) L# I
}
9 l# G+ ?$ i& j5 w! m* \0 z- L }else{
/ s! K! O- c5 @8 L //空位置 不用动
7 w4 I% s( w3 q, }9 v continue;" @: y$ d2 l7 e3 z7 t& |% u
}
, a$ ]4 j; O; x' I) V //////////////////////////////////////////////////////////////////////////
. Q; t( z" p! M9 {2 Y+ _ //开始移动. z6 U0 _( C! [3 @
if (nSrc == nDestPos)
% ~' L& U2 }( i! x. ^& X: R4 v: l {
6 {! x/ t4 c/ X; q* R //原地不动
8 n$ [, L, f6 \: E* k7 Y8 N" | nDestPos++;( c- _' Z2 a9 g
continue;
7 [8 x: F* Y" Y8 I }' V; w" N! H* ?2 S v: U
pInvSort->MoveItem(i,nDestPos);! J, B: Q/ [. L! W! P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ W( [' M5 ^+ C4 R
Sleep(5);
k9 d: ?, G* J' b7 [, C* c; |3 P$ W //Error("移动 - %d->%d",nSrc,nDestPos);
9 b& u T% C* o$ _1 o# _ nDestPos++;
* L- \) s6 I7 `$ D+ _4 x4 L/ J }
: _, x$ w7 v- ^8 j d( N //取第一个元素的信息( a- x$ h. v4 s6 O5 h# N7 j$ s, e, x
/*
3 S F* |$ o$ B2 M$ t. }2 G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), L. q* R8 r& P. i+ J
{( w. R, j+ i4 e2 w5 z9 r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 _+ {9 A; H# o) f8 r& H: j* E
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' A( W& i+ }2 ^ }
" }5 w* j. n7 q) N */- g9 p3 q. H: H$ |
//////////////////////////////////////////////////////////////////////////8 R5 v; K- o1 m7 l& x3 c
break;* X# q$ c+ X* z1 s8 S5 {) f: x
}
4 C; Y- c: K! p1 @+ ]5 Y } ' j3 Y& c& F" l
}$ C& q+ F7 \7 S/ v& R4 k
m_wndMenu.SetVisible(FALSE);4 i# A L* W) `* G" r
- D- N; X3 Y# U8 X--------------------------------------------------------------------------------------------------------
" I4 ]- Z& N+ [: g' V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) R% }) ~9 l0 `) t& y' d; c
{
]1 e) V0 D Z# i# yBaseMouseCursor();& U3 Y- l3 ]5 y4 e$ Z7 w) W
}. _8 t3 I5 W" l0 i
在其下添加:2 c4 S5 `) U+ K# S# ], E: ~, c4 o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 L5 A, ~' v8 Q* `" T* d" {
{
9 K6 w5 w5 M ^4 e$ f9 j& xm_wndMenu.DeleteAllMenu();
: Q# O; T$ @3 |7 T& Im_wndMenu.CreateMenu(this);
: |- k/ I8 u/ ?+ c/ xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! q% H1 B$ ^! K2 ~1 e' I
& } y" K# T* ?; \8 V( w# w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 G% O0 ]+ T! U3 T{
' V8 m0 z5 s F //P以上级别才可以删除所有道具
' V, y9 {# v/ ~! u* X7 X9 }2 s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 n% j4 m2 M! m5 t9 ^) y}
+ O3 R5 t! ?' l( a) \$ [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) N0 O6 i. y: e8 [! k* \$ zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 ?: d6 _5 l4 L3 Jm_wndMenu.SetFocus();( ]- o/ M+ w0 }: D4 X8 L
}
0 [, G9 M6 E9 `5 `5 b+ u( d$ Q6 V, e' S------------------------------------------------------------------------------------------------------------
; z( M% O1 Y3 b* Q$ k1 G7 x*************************8 M! f( U( v4 w3 G. [1 r/ N
WndField.h文件, a0 t. m& G9 T) l% z: `4 y" i
*************************
) L9 ?& ~' y; }3 @9 D1 k搜索:BOOL m_bReport;5 _$ v X& M0 c8 O
其后添加:# ~- ~+ W: R1 ^7 g7 T
CWndMenu m_wndMenu;
) m1 H$ T" x0 z6 v! }. _ q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 }4 r+ S1 m. s6 y其后添加:
; z3 o9 V' n+ b- Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);1 }1 D( U& ]: G0 D7 O
& d9 s A3 Y7 S3 Z
' j8 z$ p5 J/ D6 n, C" C# r# A- s
|
|