|
|
源文件中_Interface文件夹下WndField.cpp文件$ ~/ A. }9 g$ Q& p0 X0 V7 |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 @ X* y5 V0 I) D; W4 m% Q
( A" d; L9 g9 |# s& X w
struct sItem
. e8 v0 C" d' c6 L$ W{
* O0 W- J* J1 z' w: cDWORD dwId;# f2 }9 @ p( @
DWORD dwKind2; V( w' x: J9 l4 l2 K# v! R; t
DWORD dwItemId;5 ]" T+ G! q7 f/ b! h
BYTE nIndex;
* N- m3 C, t4 K" K- m0 ]sItem(){+ ] ^+ |5 y4 t! a: P
dwId = dwKind2 = dwItemId = nIndex = 0; W1 H1 _2 @4 b5 c
}
: e* E9 U0 ]8 x8 S2 s1 Mbool operator < (const sItem p2); a, c. f! R$ h
{# D- \( e8 {% ^/ q* c
if (dwKind2 == p2.dwKind2)* W1 Z9 b, T- F% U* F
{0 M& o( T3 w1 F g" ?% z
return dwItemId < p2.dwItemId;+ m* [! D& o. R: D3 r; F
}else{
# v, V7 {! V1 { return dwKind2 < p2.dwKind2;( l& b/ O! e8 h
}9 |: ~; s$ s/ {; t/ B2 i( y
}
# w; m& r( s) C, p, \. z9 N7 I};5 ]8 L2 x- R% F
class CInventorySort
6 ]3 C2 m! a0 W4 \' g0 u{
% R8 Y3 {8 H9 u q7 H5 {public:
8 d. D( P8 @: P/ w5 `: t- }: tCInventorySort()
/ L! t1 ?' \3 ?" t{/ [8 i# @' g' X% g) H& p% x
m_dwPos = 0;5 g" U( ~, e6 w- w: h% R7 ~
}
0 m! }% s1 m, {2 H6 x+ p" a~CInventorySort(){}- o( F; z. l5 E7 y" ]- v9 {& G! Q
private:$ ]4 y4 b' Z0 `0 h& ?3 x) Z7 j8 b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! `1 K2 F4 C2 a" n/ ADWORD m_dwPos;
! ]6 ^( `3 y3 Q3 o5 T2 jpublic:' n/ B/ ~: L: V7 s) l! y( l# i
void Add(BYTE nIndex)
7 `. t3 ]7 n5 \& f* ]/ {! W8 e{
+ Y9 h" @5 H( G0 Z0 e! v if (m_dwPos >= MAX_INVENTORY)
( D: ?" |3 @! u" W% P {5 @/ k: z" H6 a8 R. J; {
return;' X _! X/ E2 T% v
}
0 h( e8 u) U7 c) \1 T m_Item[m_dwPos].nIndex = nIndex;: s1 r7 `3 G$ j) F [! \
m_Item[m_dwPos].dwId = m_dwPos;5 L4 _% a& J1 S& |/ l" U+ I
m_dwPos++;
! r3 ~4 k+ N, r}
C+ H S p3 |( HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* {$ ~- V0 G$ s{
) I& O; Y& ]6 X6 V) i- U) s9 ^ for (int i=0;i<MAX_INVENTORY;i++)6 M. [5 _4 ~ c
{
- L4 B/ {: v3 |# H! _ if (m_Item.dwId == dwId)
0 I* h( s, I- `" g; j1 N {/ X! N2 c4 Y5 L2 v# U6 | ~
return m_Item.nIndex;- `( t. d. J: u: L8 o/ O4 l5 p
}
. O; b2 w( u# V( T8 s S& ^ }
0 [; T' i3 z* Z# c8 P, J4 r% X! L return 255;) _7 G/ g2 K/ x5 X0 v+ l
}/ A" u7 p6 w) s& e9 R1 q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 h2 W( o. `5 ]( f$ S
{% P, v4 c: i/ H9 z' ^# ]# D! Z
BYTE nTmp = 0;& C# r n7 x6 \6 `7 A- a6 f1 x
bool bDest = false,bSrc = false;
$ S' M& h8 T! h t' m$ [ for (int i=0;i<MAX_INVENTORY;i++)/ J& b# h" j5 F/ S9 K+ r! b
{
`+ |# t/ D( q if (dwSrcId == m_Item.dwId)/ J. `, m; i j1 k+ q
{$ T8 `. L) n9 K. l% J9 ` B
//id相等 则 改变对应的dest和src+ e* H( r& Q. n
nTmp = m_Item.nIndex;1 k+ ^! C2 @$ L! }4 ]6 ~& ?
m_Item.nIndex = dest;. L0 H5 m4 |- ~
}9 t) k. A2 k; ?
}
4 G# k. q8 [) U' i5 @. q4 u //临时数据保存完毕,交换开始
% ` U" w/ Q0 J for (int i=0;i<MAX_INVENTORY;i++)
' j6 [" M0 ]( g. s8 N" t {
4 J; C! T( u5 s1 ] if (dest == m_Item.nIndex)
; V7 e; y+ r @6 M {
! g& o% j2 u5 @ z% a: o //id相等 则 改变对应的dest和src
3 a1 q7 p3 P! R% L" H4 [- L, g m_Item.nIndex = nTmp;2 o2 }: e( c: s! g
}+ u+ a- R( g$ o1 `$ e
}! p6 u: ]8 w) Q! @, W; G- i# U5 M) i8 k
}
" P- |0 v5 Q& r+ ?};
" \3 J6 m4 L, l, F# j4 j-------------------------------------------------------------------------
: S5 _6 G8 q4 T3 N& D- \! W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 F7 n& \! i; s. q7 f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 j+ n9 Y+ A, U紧靠其上添加:
7 P0 P* m3 V. d9 C3 @, Dif( pWndBase == &m_wndMenu )
6 k9 S; F* d( w; h{
3 s" R$ k$ j: w/ s) W& C, P& h switch( nID )
$ f e/ U$ s+ d$ V7 c1 }3 H {/ ^1 e7 g4 L- l3 P7 l
case 2:! H) R: ~% ^/ ^- S5 l5 z
{
" K# r+ p) l1 s4 C$ ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* S1 @) c' T# a3 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* k% ]/ E! I, g, G! {# P {7 S: H, J: B. [& A0 W% N- _
break;* E! S! l( v# Y, ?% T, f1 u( [
}
5 v V: |6 G! a. K& m t; v for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ g- J4 ]6 i) E) Z {
% k9 I6 i+ r) P4 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 c. U: Y6 e3 V
if( !pItemElem )
3 j6 v* j4 v! J/ A continue;- V& O' {9 k1 h( c" D& W
if(pItemElem->GetExtra() > 0)
+ ]% P2 l; q. [) A0 ?7 E0 m continue;
1 W2 O X' x7 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # z6 g/ o3 H8 t& ?
continue;, v( w% o7 v! R( L8 \" j0 R( V) r
if( g_pPlayer->IsUsing( pItemElem ) ); q' P5 R3 i. a ^8 {' h
continue;( F: s! U* Z8 N5 I8 D+ H
if( pItemElem->IsUndestructable() == TRUE )
2 q/ U8 p; |3 [. }: w5 ? {
5 \+ x3 J+ I" y/ x1 A$ _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 O5 D# T, n& ]/ J* v- X$ {1 q continue;, B, U/ ~9 R. t$ f5 U+ X# G$ }
}
! S u s4 n4 t, ~& G2 \4 x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 e/ z0 B7 F( q- S5 x5 X }
4 e* F/ q0 n' R+ j. U break;9 m2 O* s" m; }' y8 Z" e$ _: s
}
8 A1 J. X7 u q3 a4 Q3 p" I1 q& D) z case 1:
- D* d6 f$ p. T0 A1 k2 _# B; @ {! N3 L" H6 ^) a, B0 t
//整理背包
8 T e7 c3 Y4 y //////////////////////////////////////////////////////////////////////////) ^" y# ~# v- b( i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 O4 L6 D( }; `9 u //////////////////////////////////////////////////////////////////////////
! M5 g& k0 B/ a //////////////////////////////////////////////////////////////////////////- b1 I0 @* M G. n* ?
CInventorySort* pInvSort = new CInventorySort;( o5 S, [3 O( C9 D
vector <sItem> vItem; V1 u9 f/ C6 y" C6 Z3 n4 P& U5 Y* T
vItem.resize(MAX_INVENTORY);//初始化大小
* F$ L, [8 u! @ //////////////////////////////////////////////////////////////////////////
6 R O5 q6 k4 O, G //填充数据$ ~ Z& ~+ x2 l- ?' E
for (int i=0;i<MAX_INVENTORY;i++)! {8 K; y: | K; n
{( p: P- j2 h6 L- E0 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 V' ^# h# u. s! y! ? if (!pItemElem)' m) B* @4 B- @9 E7 F0 s
{6 l" D( B% f6 U9 H
vItem.dwKind2 = 0xffffffff;
7 W5 m4 n) R3 h vItem.dwItemId = 0xffffffff;
1 _$ n8 T) f" p0 ]# M* D' k vItem.nIndex = i;
" `/ W5 q! p! s, h) d5 i }else {
* t! }0 O7 E7 u% X2 ?9 n ItemProp* pProp = pItemElem->GetProp();
5 m+ w& B# I8 `! Z! C9 m& _! b vItem.dwKind2 = pProp->dwItemKind2;
8 J1 W! e# k6 W3 X! W! v! k9 ` vItem.dwItemId = pItemElem->m_dwItemId;
, S* x' C, l# a3 G$ k0 c vItem.nIndex = i;; |7 b, w! v# k0 {# a L: V' H' L
}
8 M" v6 {( F5 v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' |5 o& C- j& a
}7 c9 B! T% T- N" L7 b
//////////////////////////////////////////////////////////////////////////
$ P. y! D% J/ h7 t sort(vItem.begin(),vItem.end());//排序
8 Q1 f- g1 q$ H) z7 r5 \( w //////////////////////////////////////////////////////////////////////////
9 e5 p. [7 g9 T$ i8 P3 h //交换
5 ~( u3 Z5 Y& n% S+ g for (size_t i=0;i<vItem.size();i++)( U: u; G1 X( i/ @2 r
{2 T7 K0 ?& Y# a) A* P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 J. E0 {+ a1 j& a ` pInvSort->Add(vItem.nIndex);
% b) u0 m0 f! L1 K: t' m }3 }; u+ R& v( r. ~# y0 w2 o3 j7 X' z
BYTE nDestPos = 0;
1 t- [" c! t6 n) C9 n& |( }" Q for (int i=0;i<MAX_INVENTORY;i++)4 a- d% \! {& |$ y: c
{9 E1 ?8 o% L& O& l N$ Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& i2 O7 s4 \* v3 U3 R6 i9 R if (pItemElem)
4 L2 n5 u) Q. G6 t {% F0 a; }& c) n3 n" m+ W$ T
if (IsUsingItem(pItemElem))
j4 O" \0 k1 I9 }5 i {
3 u0 }- G! v$ Q ` //这个位置无法放
- d- x. l5 ^; O9 J2 b7 ~9 j0 \ nDestPos++;
- o9 V( ]9 Y# E) A }5 H% D `: y: B' r! w9 B
}
9 ~& l8 d/ \! z3 J i7 u BYTE nSrc = pInvSort->GetItemSrc(i);
' I# p! \0 V% n7 ~# J1 X; J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 E: P Y Y! ~ if (pItemElem)
. u1 n) o) @3 J1 f {. G( v' t- A) Z+ E2 F
if (IsUsingItem(pItemElem))/ b. U9 c) V1 d
{
, ]& V% | [/ r- j, Q Q //这个道具无法移动,跳过1 S0 ], j' y+ _) H; L% `
continue;
* k0 t# h8 p' J/ T/ a' m }
" b' f: {# e$ X5 q, J% u }else{: H o) x: n- J. ]# ]' R
//空位置 不用动* ~9 s& S6 t8 o7 v1 C6 U
continue;
( a% j5 _1 A. b- U }
* T1 I- ~5 r% C5 H8 O //////////////////////////////////////////////////////////////////////////
( w6 C+ @3 ~: n; A9 i8 K+ x //开始移动1 l7 q2 E) @# s5 a2 ~
if (nSrc == nDestPos)
; T8 Z+ E0 D. J {
7 F& P: R; L5 L" _ //原地不动4 s1 [( [1 H9 R2 f0 v# x5 ^
nDestPos++;0 x9 a o: i3 G* v; e
continue; G( c6 _" U3 f6 G. z' V* J
}
+ J. a* y5 a( m; b; ?3 ]! ^* g pInvSort->MoveItem(i,nDestPos);% \0 j* N# N4 C- b$ _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) A. f, w) A0 W6 S! _4 A
Sleep(5);
9 h0 `9 L, U& ^7 T6 M* Y% a8 \( @ //Error("移动 - %d->%d",nSrc,nDestPos);
1 q* U9 C5 G+ l+ P nDestPos++;
3 Z) c1 K& e" T$ i6 ^$ z5 J# v, H }
& U. L/ l* j* u3 C4 {8 x! {% K+ b8 ^ //取第一个元素的信息
+ Y1 n% I* x- W# z& T! ` /*
9 r \5 e4 }" m% K7 N) b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
z# [& E5 O# U' K) b8 i2 G {
* L$ Z# v- p2 g. X' O: e- z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 o- ?3 D, r; e( U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 U1 E) v0 E" b/ C
}
3 ^# H( E. H9 f( w! v */
/ t5 z# c* _9 }4 [, ? //////////////////////////////////////////////////////////////////////////
9 _% m. n7 ~! t0 B# L& X. A: O break;" v' n/ U+ }' l7 l
}
% O' R q. ]* c }
0 {2 i9 X5 [ I6 p3 @. j+ P}
. U& u; I8 ~5 f8 T( T! zm_wndMenu.SetVisible(FALSE);+ J7 L+ Z! @. O8 f& f9 t
' L ^6 F9 U* j4 ~8 O% k' Y/ Y
--------------------------------------------------------------------------------------------------------
5 r( I" \+ i. [8 a4 g7 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ E9 K. J) `% o7 @6 w5 S
{
% W$ u+ m5 V4 N3 F8 |4 A# t nBaseMouseCursor();2 ~) |: A" L$ W. B8 A/ I2 V
}0 C* C* \( q% @ u8 }
在其下添加:
4 L8 F. k+ }) n* {9 Z# Dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 p% o# ?6 Q; {$ m& }
{
E& Z6 \9 Q9 U0 ^1 Ym_wndMenu.DeleteAllMenu();
; y m3 M3 A; d7 L$ g2 U( i) i, Fm_wndMenu.CreateMenu(this);
/ w# W1 s4 i, _6 Z3 o. _. E2 T$ y+ Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: j _4 g- c7 U6 h: A; G+ k
4 N- o* h& h& Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 q% Y" {* b1 F
{3 e6 a* g/ t& W* @3 ?& @5 N8 [
//P以上级别才可以删除所有道具
( B& e. J9 u/ [$ p m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( \1 r( ]- W( p4 r
}
3 x( f- u" u2 M! V) Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: ?% f+ K: b! ^4 Q( P- D; ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. D! W+ z& Q$ E, Y& k. _" i
m_wndMenu.SetFocus();
! e7 t7 D( V0 p3 r& m9 H( ]1 ~} \6 `6 E; W6 x
------------------------------------------------------------------------------------------------------------
& O0 n1 v6 a; w4 Q- R************************* u( ?3 Q b$ N3 U* Y' A
WndField.h文件
3 ^4 p3 n- { e5 d( g( S' D2 j*************************0 r( `! p. u/ |, X: \& ]2 f& V
搜索:BOOL m_bReport;
6 f$ R, n2 \/ f7 k# H$ u# L) I其后添加:
2 F0 v z0 \0 [ t5 Q# C# kCWndMenu m_wndMenu;
: T1 X* z p" O$ T& q) G* y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, R4 h, {& I/ k D3 g1 M1 o; G2 a其后添加:
8 l. F8 X4 P S8 |1 Q0 E& w( }. uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! Z8 o8 `+ ~0 S. [( G
7 `2 N& g( w5 |0 K2 O- O8 t* w+ X1 Z j9 w R1 F* C1 l
|
|