|
|
源文件中_Interface文件夹下WndField.cpp文件+ K1 f3 K! l! [- g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- y, g! v# i% j& i t% _6 L
- t* g8 L4 g- n1 I$ ?struct sItem
0 D' v0 M5 q7 T. H; h/ D{
U/ _0 J, E1 c( QDWORD dwId;
8 g+ [# h. Q* ]2 d# u wDWORD dwKind2;1 a0 ]/ j& {3 g+ k6 Y( y
DWORD dwItemId;
3 g+ v4 q8 ^: W+ {% f6 z b9 }! D1 HBYTE nIndex;% I' {3 [% g+ N i* I, |
sItem(){
: H% w& K f5 w% ?, Y9 Z) ~ dwId = dwKind2 = dwItemId = nIndex = 0;
; \$ `: h! u3 k5 H: i5 I! m}
: B3 B1 F( g& H$ rbool operator < (const sItem p2)% r+ f6 _; q" R- ~: Y& l
{
- ?" X% d) r+ U( A if (dwKind2 == p2.dwKind2)6 j! D4 r1 M. |. J
{+ z$ X" J) L3 H5 j
return dwItemId < p2.dwItemId;
) S+ ?2 ^% C: e4 Y2 N2 t8 [! a6 [ }else{
" L* M& m0 V1 A/ D* Y) P: c return dwKind2 < p2.dwKind2;
" B9 v$ A7 K7 I- [* j }
+ O5 k' ` Z6 J}3 `2 J' X4 ^9 t5 K: i. F, P
};7 x# P9 u/ p2 t2 J- O7 M
class CInventorySort
6 M+ {' a. n4 M4 H{; q$ S* q' o, i+ ]3 @5 P
public:
$ T# Y3 m5 n- r" p- D/ W' TCInventorySort(); o$ Y2 |8 r9 |6 c) i
{) |( m. r9 s# W
m_dwPos = 0;
- @" d& B4 f# _/ l! o7 Z}; a* q/ F% Q& g% d
~CInventorySort(){}
7 @2 g2 w% g# Z7 m/ Z& nprivate:
: @/ \; J9 t. ^5 ]% TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: b; v( ~) _- M* P: f' j5 ]
DWORD m_dwPos;
9 H, W7 B6 E8 n- Tpublic:. ?, r8 c: \9 ?( P' ]' z
void Add(BYTE nIndex)
( m1 J6 d/ J8 F6 b2 J- g( _{
- {% i% m% P) {0 n) a7 d3 A if (m_dwPos >= MAX_INVENTORY)4 ]1 n( K0 Z- I# ^( c6 f0 L$ N
{; h8 Q( Y7 e" F, Z$ y
return;1 b1 R" a1 D$ s! J, W! X
}' P! R1 H1 _" ^/ l$ R- W
m_Item[m_dwPos].nIndex = nIndex;
& q5 _2 \) {0 q' f m_Item[m_dwPos].dwId = m_dwPos;
8 f' x' m2 E% g$ d& V5 f. S m_dwPos++;
E1 D# {% L4 g( r0 p( A5 |}8 f, Q" a2 \2 X, W- q% i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! h- W: A$ S8 b, H- [9 p{
: q& E6 b' Z! @/ `9 q for (int i=0;i<MAX_INVENTORY;i++); f. U$ c# b! _) S% G
{
0 J7 ?$ _3 @) v/ l if (m_Item.dwId == dwId)# `2 R$ x) V8 r7 ~3 Y) U3 x' d
{
5 o: N- X2 `8 A* K! T( U- Y return m_Item.nIndex;
2 w! _1 n. s0 }2 W }
4 l: C1 J) B G. [" l7 {" b: n }7 o. K# b# |# H4 P
return 255;' i+ G3 ^; X0 L4 H; e I$ P
}
- G2 j% B# _3 avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 w3 `, g/ v& ]' ^( n" K
{4 e7 k4 k2 Y) L/ G6 n D0 n& v/ Z( b
BYTE nTmp = 0;
, M" } N3 N% D$ y% B& ]9 a: [2 i bool bDest = false,bSrc = false;
# |. I& ~9 v+ W/ ~ for (int i=0;i<MAX_INVENTORY;i++)
# r2 \& e& l ~8 m% j3 G {2 U6 D5 G2 l" n& C& w' d3 ~1 X
if (dwSrcId == m_Item.dwId)
9 |/ |8 x9 V+ b6 y; f6 g, D U {6 m g4 p, ~8 V s( w( Y$ e
//id相等 则 改变对应的dest和src, G5 d! _8 X k" R) j
nTmp = m_Item.nIndex;( K: H) \8 z1 x( T) H
m_Item.nIndex = dest;
1 \$ J4 y. \! V* Y) U% V }& F% D* e' _$ Y8 r9 u/ G2 V, w
}
, [$ T# N; B/ z/ b8 y* O7 I //临时数据保存完毕,交换开始; |8 F9 y! c5 s, \
for (int i=0;i<MAX_INVENTORY;i++)
. D* w0 w% C( q {
% e6 f& y1 f. ?1 O1 Z! H if (dest == m_Item.nIndex)
. F1 S& s: P/ T3 ?! V+ H {$ |: t# f0 m/ X2 v$ S: H
//id相等 则 改变对应的dest和src
" i3 W8 @' W* T J7 v8 l) C m_Item.nIndex = nTmp;
0 k1 i! _5 y3 U& I7 P }
4 t+ |. k" e1 K* c& _6 K }: k/ a% j* G1 N
}
6 F9 O/ _" v4 |" M0 a# f};) D/ k6 V6 ]3 a9 `; X
------------------------------------------------------------------------- B( t* H; w# l o! @5 f Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 j4 [: W) j% L8 E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( t n) l' W1 w3 c& Z2 C紧靠其上添加:
" [. E2 h7 b) U- I3 pif( pWndBase == &m_wndMenu )
0 o& e3 \/ E. h2 K' Q4 I$ i9 h+ R O{
, p; l$ \2 k. p! U1 I r. N switch( nID )& p$ k2 ?3 y/ c% c/ o
{1 j4 D9 H& Y9 E) _" A, U
case 2:$ k' k! x" f. [2 j, {
{( c- p5 a) y# ~6 f& E+ Z. S
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ N1 O) @( {# E0 F8 k0 F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! A p/ s6 R H W9 e. k2 p$ o6 ^ {
: o% j I7 }2 S& j# B: h break;/ i `' l2 C- |7 O
}
]; @, }/ y3 ^- |" y/ R for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" b$ w% y: L5 w
{: \0 n) C# Z7 |4 {0 f3 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 ^( a8 L B) Y9 B7 ]( J& |* Y! h5 V if( !pItemElem )
% l8 p$ H- V' M continue;
6 D' N; `' P. j$ j if(pItemElem->GetExtra() > 0)0 O& E+ F4 r2 b) H, z0 d2 j# V
continue;- o% X# @$ F0 j' q. y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 a8 F" D8 K$ v5 y6 Q! r6 a0 q
continue;
3 }& G3 Z$ z. z* }9 j4 x0 d2 Y8 V if( g_pPlayer->IsUsing( pItemElem ) )
) ~% F# F4 Q! K* s9 Q continue;
9 G$ t/ M, Y3 x* F# f" q if( pItemElem->IsUndestructable() == TRUE )
0 q1 n3 m8 U' [, x4 ]* K {
4 I0 X; c; a6 j6 r4 i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* I5 X/ Z3 I8 B, l2 c
continue;
. ^0 K; j* f1 n" z6 [+ d0 G }" [# d1 V2 e' J) k: s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 a6 w/ s/ S7 J' ]5 X6 b: h
}! b+ }( p. S1 x4 l/ H/ Z
break;/ l. x" L% ~& Q
}' N( d: i5 d5 O! G5 [2 v
case 1:" Y' R* O9 N% o. r
{
+ [% q% \ y) d8 Y' I' x0 z' n3 F //整理背包" E9 ^5 L' y/ A. u$ q
//////////////////////////////////////////////////////////////////////////- \ y# @3 P D4 u$ Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& k- k( j$ y) z3 F' N% _
//////////////////////////////////////////////////////////////////////////
: G% _! U8 U: K; O //////////////////////////////////////////////////////////////////////////
* ~4 t' o+ S+ N, l CInventorySort* pInvSort = new CInventorySort;! C( }/ O; Z( }
vector <sItem> vItem;
, _9 d4 [9 m0 S. V8 ~ vItem.resize(MAX_INVENTORY);//初始化大小
; G* E( A" O/ W/ r5 B //////////////////////////////////////////////////////////////////////////
! J8 U5 a7 W" N I: L //填充数据
2 \+ n( O8 l: _ L. V( l4 { for (int i=0;i<MAX_INVENTORY;i++)
4 o8 B; l% I; ]* d8 J, x1 C4 p2 q {
' A4 \$ B2 X0 V* ]- s+ f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 W9 x9 K, A% X5 c6 l. X* U
if (!pItemElem)
# O+ a* f3 L( Z4 B2 ^! x {
0 a8 r- z$ B3 s7 X. R vItem.dwKind2 = 0xffffffff;5 ^ E( |& S) r) q6 u+ h+ p1 s8 @/ P
vItem.dwItemId = 0xffffffff;
; Z9 I. b* j8 q3 f+ J% y' q5 j4 \ vItem.nIndex = i;
. q' h) y$ ]8 i+ j }else {) F( F! u+ J- _: b8 c4 D
ItemProp* pProp = pItemElem->GetProp();
3 B, p( ]1 J1 [6 | vItem.dwKind2 = pProp->dwItemKind2;1 _) _9 g( Z# f. `2 Y+ X
vItem.dwItemId = pItemElem->m_dwItemId;$ e8 n8 i" z5 r5 p: P
vItem.nIndex = i;
; A: m3 w5 [* U" ?& o }3 m" S9 x2 N! ~* y4 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: K5 }# E. l4 Z3 g* U
}* d6 }( x5 Q$ k1 G
//////////////////////////////////////////////////////////////////////////* P9 c C/ s. B; x$ @: h, ^
sort(vItem.begin(),vItem.end());//排序3 Y5 p' b3 ^! W+ y) P
//////////////////////////////////////////////////////////////////////////! ^0 A0 H& Z; J3 ?' U2 a& I
//交换( W8 H) Q$ [6 p1 W/ i0 C
for (size_t i=0;i<vItem.size();i++)- p3 }. _- J. z, e7 @% ]4 Y9 j9 {
{- k. o2 i: m. b' \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; q# N) D- B+ \3 Q0 Y8 G+ [ Z. k6 R
pInvSort->Add(vItem.nIndex);, H8 {" c3 l* C8 V
}
; m' b# t4 j) Z# y) w3 g$ [' C BYTE nDestPos = 0;
& x- Q% V) X, k5 P, t for (int i=0;i<MAX_INVENTORY;i++)- [( K* x/ j, W! v+ S. t, e% r
{; c9 I* l1 o5 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 P% I" `: c3 b! P: p+ @+ R% m
if (pItemElem)
8 d4 Z( D. I* a, N% I {
" T& i9 ?; M8 G. w5 `& q if (IsUsingItem(pItemElem))- ~+ D8 I8 N( N+ j( t- U, E: n
{" P5 l; n( Q5 O
//这个位置无法放2 x( d0 B% A9 J5 `- G
nDestPos++;
5 Q' |5 c0 B6 r& |; Q; M7 w& S& p0 y }
9 @; Z& _! n$ X# s8 I. C }/ u; F: r. ~) `2 s' L
BYTE nSrc = pInvSort->GetItemSrc(i);& P, z1 {8 N; a1 F2 ]! S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ x, t [4 E8 N; o. I& M( _ if (pItemElem). O8 [( z+ Y% }) p
{
# j7 C6 A# I b" K: ~) ]0 P3 c0 l if (IsUsingItem(pItemElem))4 S& B4 u1 } C" A8 [* O* @
{+ P2 l- J) m" B% m$ O
//这个道具无法移动,跳过6 I1 u s, S5 k: C P' p8 L
continue;
* O' r) i" A3 {: U% g; Z4 q! L+ I }+ ^9 ]7 s$ w) s7 j
}else{
2 Q* Y& F4 y0 | //空位置 不用动( G" J x6 x5 [2 k8 z' [. z! s
continue;
& E0 m6 |+ A' ^) ~, r }
, m8 h; I% r8 X9 r& c //////////////////////////////////////////////////////////////////////////
' s. L+ \ \2 a% i5 v1 R //开始移动
3 T! r/ \7 d! H if (nSrc == nDestPos)
& u4 P0 F( p4 M+ H {' ~! V$ _9 o! r* I
//原地不动
- P' F5 p/ o3 i1 V7 f! k nDestPos++;
( P) h7 q+ _4 j; g% P" K' _; V continue;2 A) o( n7 v4 _: r
}, c$ p ~. K, M- t1 {
pInvSort->MoveItem(i,nDestPos);! O, _/ q; L7 b5 ?! p0 D
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 T! u1 j& d+ e8 o2 D* T& R Sleep(5);$ a( ]9 D% I& x* q$ D" r0 m: K/ p
//Error("移动 - %d->%d",nSrc,nDestPos);
) m% p, y) X% F' T& _7 L nDestPos++;$ F' v5 i2 s3 V% f9 |1 L" c* Y
}
0 G: d- I; Q, d: s/ J //取第一个元素的信息
[9 u8 C" m4 H! O( R5 \: ~ /** P" R( N s, _( O. Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% ?" d8 Q6 B. F- [7 ]& x4 q a2 D
{
( @$ Q/ |6 \8 X: E H- r Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. g* x% N6 J0 r$ K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: O: r+ e) N- ^) K }: E: z2 K+ _9 f
*/: a- f6 r" b; h
//////////////////////////////////////////////////////////////////////////" e0 J/ U6 D6 C; G e# L
break; Z7 N' U. x d9 a$ _3 h# A
}) w5 Q% {( K. A
}
+ ~4 |+ ~3 s( }5 C}
# g( n+ |/ d( x! V* ~: E3 t6 qm_wndMenu.SetVisible(FALSE);# \& j; S1 K: i0 X2 A8 ^- B
( O/ b2 c6 v) |3 B--------------------------------------------------------------------------------------------------------$ C* u _; b" I! i! [% e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* e3 G' \* F" Q# ?8 E
{$ f5 A9 n. H+ Y& ]6 t/ T/ L
BaseMouseCursor();
' s% x% Q7 w- T( ~}" }7 o+ T' c% q6 ~3 M' I
在其下添加:* B- l0 C& \9 t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: T0 Q" G6 `5 i9 ^, ~$ m+ S$ d{
( t( T3 Y/ W0 o3 U7 Cm_wndMenu.DeleteAllMenu();
& H. D+ R2 A& @8 `& X: Om_wndMenu.CreateMenu(this);
1 T6 h* o: x7 ]& K1 s$ L& Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 W+ e8 S; G0 |
2 g0 s# [" H8 W5 [9 Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 R; l" P& {8 m4 u* X$ L{1 [: o' S6 ?' D% t
//P以上级别才可以删除所有道具
4 ` C& B L9 X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 L( o; G) H3 C. q
}" |( t5 _1 P7 [! E Q! ~7 J$ ]) H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 m# o6 D- ^. ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' R+ r2 X% p9 Gm_wndMenu.SetFocus();! C3 N+ e1 B9 s' L( |* L9 z
}
$ h+ S5 Q9 \5 `------------------------------------------------------------------------------------------------------------" ~; O0 ?& w) C& q. S Q
*************************
3 r- A3 N. B' A* L. d9 rWndField.h文件
; v0 [2 g! a, W. ?*************************
1 H& j" [8 ? Y6 W搜索:BOOL m_bReport;
% x) {) o' F( _8 S8 V% u其后添加:) @& l% d4 i; {) F" R) Q
CWndMenu m_wndMenu;; d* d7 o6 ?8 T7 o$ n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( h. S- s; V3 S
其后添加:* ]; o) x, ^3 M8 R' U0 j+ l
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 k* r1 {3 n% `7 s% ]* g0 o# G5 G5 ]6 D" u5 S' d
$ \- `8 l7 d6 R, S5 o3 R+ V2 { |
|