|
|
源文件中_Interface文件夹下WndField.cpp文件
9 ]/ s1 X! F* H4 D7 e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ p- E" v* a! }0 k4 J/ k0 Q! W, u6 C, ?! @; u; J
struct sItem
, r1 f+ U+ S- D% O9 z+ R1 A{( |' M, b3 U3 K. t- z8 p0 ?
DWORD dwId;
9 l7 V. m; A7 D2 k! {DWORD dwKind2;
* c, \9 O7 J& Z) UDWORD dwItemId;
- \' H% K/ s" |8 \BYTE nIndex;6 g8 B/ g3 |8 ?- W1 ~1 h$ q
sItem(){7 k' |7 d" ~2 g2 X+ L) w4 z K
dwId = dwKind2 = dwItemId = nIndex = 0;
5 b7 s& F1 K& Z, W}' S8 [! R6 p$ h
bool operator < (const sItem p2)6 l1 U' J7 \; H, Z
{7 a& |% K# ~% o/ G! |: v
if (dwKind2 == p2.dwKind2)$ e. J* m8 W% [: V5 k
{! z4 h8 q' ^; ~% ?& c6 M
return dwItemId < p2.dwItemId;
" x. l) a0 X3 c* }$ p1 U }else{
, b# h- |# p/ i* g# }$ C return dwKind2 < p2.dwKind2;) S3 Z2 D) X0 Y8 D1 R, K, w V
}* J X4 j3 I3 n8 o/ {5 j7 e: `* @
}6 L1 v- Z6 C( |# y5 e7 _) D
};
! J% m' N( N1 s! zclass CInventorySort5 d/ }! g9 }. x- Q
{9 [- r- E1 @$ P
public:/ ]2 S- z. d- r) x# x1 z2 l& A
CInventorySort()9 [ S( J( U* C
{
. [: d- p# `1 a m_dwPos = 0;0 K& }* O9 ?& d9 [- j
}
& {( l$ j1 |5 [9 O~CInventorySort(){}
0 ?1 z1 b0 P3 Sprivate:6 b( s% `7 h9 y5 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& d& I$ F+ t6 P ?5 E$ L
DWORD m_dwPos;" S$ X* N- k+ k h, F9 r5 m
public:0 J! Q4 X" ^% I& o+ H9 u2 G5 L
void Add(BYTE nIndex), c2 B. i# d: S& N5 l1 e/ o
{5 Z0 w. m. ~/ h* c8 [
if (m_dwPos >= MAX_INVENTORY)
( Z/ z; v2 t4 A$ P4 w; ` {
& n6 o- V. F7 Y return;
* L. y# W b& |2 w }
8 l$ y# _1 m' i m_Item[m_dwPos].nIndex = nIndex;3 H/ M% h7 L# Y7 B8 z, ]% I
m_Item[m_dwPos].dwId = m_dwPos;9 h) S6 Y: w6 M" `( d
m_dwPos++;8 y! b, U8 x! z& @5 S, \+ R
}5 F$ h" u8 n: Q% t" `' |6 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: F, i3 ^5 q/ d8 |, ^6 ~5 _" o4 e
{% V) D+ W0 v6 X$ `- a
for (int i=0;i<MAX_INVENTORY;i++)$ t+ p. z( z! p2 F0 |
{( W' r& d9 }3 v/ A+ j1 U2 Y; C
if (m_Item.dwId == dwId), v+ m* t# l' U- l
{
* X( g$ S; J, U u return m_Item.nIndex;( v. {3 n. A3 W! L& E* ]
}
# y& n ~. u' p1 O2 Q }
' b Q S* n* B* _ return 255; }0 z |- T( {6 b
}
+ z) E D: e0 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 r+ K3 \; A' A* ?* B+ L
{5 U, D/ x0 a+ Z8 E- k/ I
BYTE nTmp = 0;* g( T! z* V' ] r2 c
bool bDest = false,bSrc = false;
2 F5 h& o. |$ q3 T }3 u" h for (int i=0;i<MAX_INVENTORY;i++)
/ L3 A/ @/ ~: d4 i" t, l {5 _; \3 m, p& ]; N3 B9 k( w" U( `
if (dwSrcId == m_Item.dwId)( v# ]% Z) h! y& r* P6 }7 Z/ i3 h; Z
{
7 b$ v% h" Y, R- w! }8 L8 z //id相等 则 改变对应的dest和src$ b( Y) Y6 V' f2 Q; `
nTmp = m_Item.nIndex;1 Z. C1 V" x( E
m_Item.nIndex = dest;0 ~* X1 E5 D1 a. Z+ }4 ^/ B. W
}
/ v; h! g' @* h" h# l }
, L' f, P; z5 q6 z8 X* D //临时数据保存完毕,交换开始3 Y: \7 q( V5 P- Q) k
for (int i=0;i<MAX_INVENTORY;i++)* s* x% p) M9 f0 b
{/ Y2 d& K& u. |# { ~8 C
if (dest == m_Item.nIndex)
5 K, D$ p1 V F9 ] ` {
! N& B0 Q0 m3 r //id相等 则 改变对应的dest和src
* t2 E6 l, J$ z7 f, ?- m8 X m_Item.nIndex = nTmp;0 M2 j% G0 `# S0 F5 L& m
}
/ p6 j7 B; W* ?5 u7 }7 [* U }$ O2 y/ M: f! f0 T
}
0 j6 T- C0 w- Q7 ^};
( _% G( e% K0 t-------------------------------------------------------------------------
; N4 Y# F+ p+ |/ O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 B% j2 |+ ` A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 w! `% {$ Z2 q& P3 B$ o; ~紧靠其上添加:
" O7 ]$ ~6 ?8 A. B6 U, Cif( pWndBase == &m_wndMenu )
( q" f; @$ F* a( k{
! J3 v4 c Y5 E1 t2 Z4 V3 r, z5 q+ d switch( nID ); o0 E& d: l& C2 y7 j
{
' m, s4 J6 c3 B+ r( @ case 2:
) `! m' o2 ^# R: ?0 m K {2 q3 W( Q& ^8 k$ e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, n5 \: R2 @1 V) [, e5 H( A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- Y) }( ~2 D7 y, K {; d+ V+ i, A. N& [+ [" ^0 S
break;
% C; x/ a5 c1 Y7 h. E9 \0 | }5 z0 x* L7 j) P: |; Y# T; ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. k# O3 w+ ? g- d: K' ? {+ w: z! M0 k4 L5 u4 R0 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 ^$ c" @0 U! d. M; N) s/ T2 J% n7 t
if( !pItemElem )
7 `; `- M# e) T& ^' c- [* A' w' g continue;
4 j3 B( S" E0 ^6 J: @: S5 h if(pItemElem->GetExtra() > 0)5 l0 _( o. r. M
continue;
" x% X" l. w" B8 N# C& f! L% J7 F8 ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: o/ b2 v! X! g continue;
- m, }, G$ Q9 G( N* Q1 [1 \4 w- D if( g_pPlayer->IsUsing( pItemElem ) )
7 ?8 C) J" K+ `& c1 O# C* s continue;
0 D. U. |# z+ D$ } if( pItemElem->IsUndestructable() == TRUE )5 i2 X+ D5 e$ F. [
{% S# d- `# R* p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ H# n' V/ k7 V" k# k, G
continue;
5 e( |! O; t F) o }1 ]3 @: K8 P$ i9 a4 H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
L8 c+ R, X& N& a& ^ K# X }% V1 k" ?9 k! n6 `* M7 }
break;
0 K e. N3 c5 U+ |8 ~1 f: U }
& `; K4 v/ ]; l9 y case 1:
, n2 G+ K& y0 G! T& P( ~/ O {) X6 w: n+ y& x9 @; G
//整理背包& g( G# f' k7 z
//////////////////////////////////////////////////////////////////////////
5 W- C! w. x$ H //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; j* f7 C% s* ^( j. f //////////////////////////////////////////////////////////////////////////- Q% [1 z5 i/ E+ ?6 Z' l8 C) f
//////////////////////////////////////////////////////////////////////////
% e% H3 O' A( I* m CInventorySort* pInvSort = new CInventorySort;$ \# Y& S& r2 Y
vector <sItem> vItem;4 }. u( L; h: ^0 ^1 t Q
vItem.resize(MAX_INVENTORY);//初始化大小
: Q7 F+ z; o5 C; a //////////////////////////////////////////////////////////////////////////+ {. c' S; M4 s3 x' Z O( C
//填充数据+ Q+ P" [8 R8 m& P! y. B$ \
for (int i=0;i<MAX_INVENTORY;i++)
; ?" q( a* P9 P0 H( k {
" D- F8 O* X4 ] O: J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ e0 W5 k/ C( T2 @ if (!pItemElem). X# `0 |( K$ ^9 }' e
{
/ t* v( v# b; @# v W( p vItem.dwKind2 = 0xffffffff;4 q4 Y6 S. [2 z5 [
vItem.dwItemId = 0xffffffff;
% N6 e$ E6 M* p vItem.nIndex = i;' a7 s- Q; Y' K) l3 {2 X
}else {" q ~; ~9 Z& _ U4 l
ItemProp* pProp = pItemElem->GetProp();- U% C$ [; G! ?
vItem.dwKind2 = pProp->dwItemKind2;
: b8 K) F" b! O7 h9 A vItem.dwItemId = pItemElem->m_dwItemId;3 k/ f% f9 d7 b& l! s% x
vItem.nIndex = i;
3 P; l* @$ f2 W6 k$ O& W5 P }
$ _/ e% Y9 r' ]; ?4 E9 H( u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ A1 h3 S" `3 S
}
- _, p8 k/ J1 Y //////////////////////////////////////////////////////////////////////////- ~" u8 w( i. @
sort(vItem.begin(),vItem.end());//排序
! j6 O {$ ~2 m0 L7 W3 T //////////////////////////////////////////////////////////////////////////
" L! H$ J8 R) L& Q1 m3 Q+ { //交换
0 g( v3 J# `6 v6 B' a( ]/ E for (size_t i=0;i<vItem.size();i++)
( P! P$ l( S: t" Q: E) e; V {, J$ C& R! E: J0 G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ?$ l! }( W' U7 a
pInvSort->Add(vItem.nIndex);3 Q( n5 G3 k: A. _& ^9 A7 p* g
}. y1 |, w( o8 G" |( L6 W3 d% `4 s9 V
BYTE nDestPos = 0;2 S9 ~2 z5 m+ c& i4 B: }' l
for (int i=0;i<MAX_INVENTORY;i++)3 _0 j: O6 ?3 q) u- M3 u
{! M) h- V3 k1 L% U' S I* C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& D1 ~; Q g! J" }3 B6 t- i/ ^ if (pItemElem)1 ~0 x8 a; y; k( e# J
{
7 P' R5 o, ~0 W if (IsUsingItem(pItemElem))' k: _6 m* D! V) l _
{
; J& O1 |% H) c A3 k2 z //这个位置无法放
! c6 c W6 n; E0 n9 n3 n l3 s5 X nDestPos++;% A# N: v4 k# q1 y1 G
}) | o; d1 i4 z0 }1 q
}, u' g4 D! }6 s+ L
BYTE nSrc = pInvSort->GetItemSrc(i);
1 |( q8 ]' p- k$ e W! ]: `- V0 w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 ?/ A( t- v/ s$ G: C1 L( T
if (pItemElem)0 i- ? S$ d( M- [2 C
{
* B& ?( O7 F( d8 W if (IsUsingItem(pItemElem))
) z2 Y g; u+ y/ H0 z {
/ ^4 H. G5 D/ R6 B& o& Z6 r% J( D //这个道具无法移动,跳过: k' r# D& B8 e# V) I$ R! Y9 S
continue;
8 a* P) y, G. ~2 \. ` }; M5 M2 b0 E: q% z+ R6 J
}else{: d% H0 J3 n# b6 J9 G2 C! _6 @
//空位置 不用动9 Q! [* x" n$ W7 Z
continue;' R- S) Q: H7 z( Z
}
5 p4 t! b1 k7 r //////////////////////////////////////////////////////////////////////////0 n; i" w8 {) i( B1 T
//开始移动' n: k1 M; D ^4 Q! R8 t. p
if (nSrc == nDestPos)
1 [3 s! u/ R- ~% y' U X3 W {1 H+ |1 ~# m3 m6 G W
//原地不动
4 W% y$ ~# p. z% j3 s nDestPos++;$ M( h8 U8 H. X. E1 ]
continue;; ^$ \( V: T6 w! N/ O& f
}
$ s+ `: i7 M- L8 u- A y pInvSort->MoveItem(i,nDestPos);
. U {) e" {3 d+ W: U g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. f, V3 R& R C) A& a" ~ Sleep(5);
; O0 `$ V9 H4 O //Error("移动 - %d->%d",nSrc,nDestPos);
5 `9 w% H1 a+ @8 T nDestPos++;
- a- ^; X- @# }% h! Y }
' q* Q ?: _ s+ C {# d* V //取第一个元素的信息
. G$ D I! y. y: L7 p /*% B2 U0 F' H, b; j; O7 b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); S/ A Q9 p1 R+ D1 W" f3 G( Y+ C
{
" \, n4 f$ _) t Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ a; G) S! S& { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# P: U8 V' F! v
}
( k/ J8 f: O" N: @" E# z: O */- X1 Z( g7 h- ]
//////////////////////////////////////////////////////////////////////////
, V0 y, w* t# r) v3 z break;% d6 v: M! l$ Z m% l7 w6 t
}
+ a8 \0 ^2 P% y, [6 g8 S S } ! G( G, W, A$ P* v
}
! b) z7 a' T9 i' R% b* zm_wndMenu.SetVisible(FALSE);
1 _8 Z6 \$ ]) t2 J1 ]
% H j7 S# c4 O* u. I--------------------------------------------------------------------------------------------------------# N! e1 G8 W4 \" V) B; X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" q- D5 _! P$ I3 ]( z
{4 \3 J/ x3 h7 T2 S
BaseMouseCursor();
- d. p0 W( ~" [& B}
7 R, U3 }0 s7 U在其下添加:2 W! Q- c7 G* T$ _9 J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- O! `$ e$ O9 q8 H6 B+ ~- x' I5 ~" m; v
{
$ s f7 x" n9 d: Q, zm_wndMenu.DeleteAllMenu();
: d1 h' ~8 }9 N. Q8 wm_wndMenu.CreateMenu(this);
, r& J0 d* o5 `% P* f ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( o9 U9 `3 W! i3 {* `* O- |( W) ]# f, h% C+ v2 P/ j2 W* [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* A! y. k: z1 p9 ~6 p{
5 _7 s- z! y; r7 h* p" N6 W( A+ i$ Z //P以上级别才可以删除所有道具% c4 c7 F1 n0 n1 s1 A4 a7 L5 Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 C; Q$ U u7 |$ u2 p}
! ?+ M7 ~* ~+ I4 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 a5 r; r/ Q! e' tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( t' P0 L6 C' B( y& o! Rm_wndMenu.SetFocus();
$ A+ ^$ E" a; Z9 a9 O" w}
0 p5 }7 ]% r( x, ^) {3 {9 }4 L+ R; f------------------------------------------------------------------------------------------------------------
?6 E$ T3 O9 k* s7 x G*************************8 ~2 R& \+ @$ p- n/ @/ E7 w
WndField.h文件4 D' K8 q7 Z1 }
*************************+ H; H' o# e# E
搜索:BOOL m_bReport;+ J% G( W' K3 _8 p; }+ G
其后添加:9 v- @9 i6 ~: [& d$ T! p+ Z# Z5 K: x
CWndMenu m_wndMenu;
7 y1 J# {' G: r# j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ l% U: z \# \) s4 |
其后添加:, }# q |* K3 M# E+ m0 ?; P( e9 O7 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 Z" t' v2 Z5 o9 p+ V4 a. _( {
0 |/ h' B& l" H( e+ K, J9 p/ a# D; ~% E! z3 E7 [# C" `1 i
|
|