|
|
源文件中_Interface文件夹下WndField.cpp文件
8 s; F f0 B' K6 |) h0 O2 J _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( h4 t! M0 I$ ~0 {. t Q
; v! A& g* F$ z7 e8 ?struct sItem$ q5 g9 E) ^. _. M0 d: t
{+ Z4 \% d$ ]( y6 S1 ?
DWORD dwId;
5 I' L9 A Q) R4 S- {5 JDWORD dwKind2;
6 T0 e0 [' T" H' EDWORD dwItemId;+ J) r* h$ ^' P1 @/ z
BYTE nIndex;
1 B# Y" w# y- _5 ^, E J8 o& SsItem(){" H: e* _* P' `% ~3 Q
dwId = dwKind2 = dwItemId = nIndex = 0;
. _0 ~" Q* ^' ^}0 Z: N6 |# i- z8 t* M
bool operator < (const sItem p2)# d4 T8 \! P+ ~' {. W
{! g8 r( O( Q# _# J- [( n
if (dwKind2 == p2.dwKind2)
) }/ ]; b' n$ `4 G. o& M: _ {
. @0 b$ X8 q' ~. P" w. } return dwItemId < p2.dwItemId;
6 I C( w- l1 ^! J: C% N/ q7 p }else{* A& M0 e( X- |7 D! Y
return dwKind2 < p2.dwKind2;
* w/ ~: ?0 g2 O* E }
. m; B$ w5 x) q}1 @7 k% j% }+ A' _& U
};" q' R5 e% P/ b2 l4 ]) T
class CInventorySort
{ _' F& x' p# a, J{) ]5 C2 z3 |, \
public:* e/ N" s X5 [+ k; j/ Q
CInventorySort()
* W* e4 o( d/ i- J0 L! w{
9 F- M$ S. x6 K+ o) ? m_dwPos = 0;
, Y! H& \4 z% w. n}
! y8 `% m6 j- ^. F& D2 n~CInventorySort(){}$ o) c1 G ?1 ^9 R4 L
private:! P& T! x0 a' h3 `0 C b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
_4 @" K2 P5 P, k8 _& d' ]DWORD m_dwPos;
4 {) k" N" ~' Xpublic:! {. y: M* t$ Z% u- [; |' C
void Add(BYTE nIndex)
; W" ^% K- e& `& }* r# B{9 t; P7 A7 i: U, S2 R( o9 D
if (m_dwPos >= MAX_INVENTORY)% A- x: |+ d+ y. y7 l0 P4 D
{) B% l) y8 M% O8 R1 n" G$ a
return;% b1 P* v5 T2 [' d
}" b5 B3 |- i( H5 h
m_Item[m_dwPos].nIndex = nIndex;3 P9 y& H3 E' c9 s/ C* U
m_Item[m_dwPos].dwId = m_dwPos;: W/ d& R2 @% L+ G, D p
m_dwPos++;
8 ^ ` T8 V) U% P}$ S& L# B3 q. j. e/ G$ H- m6 M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ [ C) j, N6 n R8 c/ M{# [: R( b6 |: w7 H* e1 y& X0 j
for (int i=0;i<MAX_INVENTORY;i++), ], t$ ~8 @; V1 ] ~
{( d. b/ s& W! C3 J
if (m_Item.dwId == dwId)1 O! ]" n& Y+ p4 B, q
{1 x+ ?; f7 n& j; p
return m_Item.nIndex;! L$ I# p, S3 X" E3 _
}- E. ?+ h1 O$ N+ I& o' k
}( ^ Z3 f( J2 \! Z: B
return 255;
& C5 I, O9 K3 W1 i$ i. X}
. M5 D7 ? n5 w& \; zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 E' o+ O- t; W. z{7 P5 p4 ]1 E. d2 z& |4 @1 l H) N* s: T
BYTE nTmp = 0;
; c" t* C: i v! v/ L$ Q5 g! r bool bDest = false,bSrc = false;
0 O1 N' x' m$ P( ^; J3 e for (int i=0;i<MAX_INVENTORY;i++)
! r* I6 w3 \6 h3 C; e) l {) W" C9 K: A& B, G, O' d
if (dwSrcId == m_Item.dwId)& g" P# R% z. L) \5 u0 U5 ]- `
{
5 u0 f% x; E% T& D) Y //id相等 则 改变对应的dest和src" A% X8 L, z/ ?' ], e
nTmp = m_Item.nIndex;
" h0 v% l' g2 z$ ` |, n0 } m_Item.nIndex = dest;
2 `8 q2 g1 |. S/ T7 Q, R9 B0 ^ }$ E; Y) S' J# }: V. T
}
- L% K& m+ |9 z- u* F //临时数据保存完毕,交换开始
+ |( G( c8 q8 d for (int i=0;i<MAX_INVENTORY;i++)
Q. J1 _- F/ `. I" O% C* R { v8 Z: ]; F' E5 u: G
if (dest == m_Item.nIndex)6 d" o& |! L( W! U4 U J( i
{ _0 l3 V1 f: h/ s" A2 r
//id相等 则 改变对应的dest和src
6 a5 \6 w' H2 F8 q, }2 G: g, V m_Item.nIndex = nTmp;5 L- G% f7 A$ h% ~
}
) ]9 r! w& o5 p5 ~4 l& W( p }
7 ]( i" h6 i& i* Z: j2 r}
' m! @7 R; r8 h# O, C+ N};$ e( h: q0 K/ p* t( w
-------------------------------------------------------------------------. b/ O) \8 B+ E* z ^! Z, k
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% r; v+ }! |/ }; V9 b4 |6 d8 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 Q: x k ?; R9 C) }( a4 Z
紧靠其上添加:/ s1 r& J- G: p1 f" n& Z& d( ]
if( pWndBase == &m_wndMenu )
8 ~* O$ A& t3 z& D) M4 w{
+ f" q: q' r' j# B1 R" w+ } switch( nID )/ |( c a* {/ s1 e1 \3 u% ^
{
' U$ W# X4 A( r4 C+ Y* h6 p2 a! D case 2:: y! e6 M; E9 k4 }: Q; b5 Z
{
/ y# m7 q) z+ r# N, I3 T //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. @ _; T4 n ]6 i# s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 ~6 Z9 O F" n7 x. P! n { W! G0 g6 Q2 G" J. h$ G3 R2 L
break;& ^! ], H$ x: `& B$ Q5 {% J, ^* z
}
) O3 F0 ]1 T' h* {# S5 |1 ^$ ^) w4 }2 W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# ]* E" X) x% }' B R7 B( ~
{
, Z7 @' T1 x. u5 A4 E8 D: x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% T& Y7 }2 u6 ?( R$ i. ~ if( !pItemElem ): j0 b! l' i, j3 Q
continue;
* V9 t4 x) _! R8 |! L/ r" k if(pItemElem->GetExtra() > 0)
; }# U' j: {$ ^ continue;( n' S7 k9 G) p5 `. V$ g t5 S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 Q& X7 m! h: D6 i3 S; S
continue;
- }6 Q2 E) W! e" K# U# ?8 F% e if( g_pPlayer->IsUsing( pItemElem ) )# m) x- g4 Q: b# S5 G
continue;1 R6 r( b3 E7 D: ^2 z( v: t
if( pItemElem->IsUndestructable() == TRUE )
- U, T( z+ C& x$ G; X$ p- f. J1 ]3 e {5 \$ p) j i5 _" f( F i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% @) R! c/ ]! A: x continue;# A5 w, I: M0 j8 m
}
6 {4 c+ J8 }3 b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, F* q; u) x' g4 F }
: u( U8 E* M/ f break;
$ T1 C4 l+ Y& x5 G( j }
- z) ?) ~" P) a U* ?6 e case 1:# T" j5 T+ l% G7 U6 ?7 r
{# j. n) B: M. p
//整理背包. f X& X3 x/ B( k
//////////////////////////////////////////////////////////////////////////
x2 u* ^* k# W9 k1 p8 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); [: ?/ K/ }" Y# f8 U
//////////////////////////////////////////////////////////////////////////! Z# S( q- G6 n3 A& `6 V
//////////////////////////////////////////////////////////////////////////
5 }( n4 O: b9 C0 I: v8 G# @! y CInventorySort* pInvSort = new CInventorySort;
* l `9 t' V+ h+ Y6 W6 Q vector <sItem> vItem;
1 W" q0 M0 o- a9 Z vItem.resize(MAX_INVENTORY);//初始化大小3 J, J: i5 u. C' J- N
//////////////////////////////////////////////////////////////////////////
2 p% x* p9 {7 t' x //填充数据7 f8 V1 ~6 g% W0 f4 }7 W5 {4 ]
for (int i=0;i<MAX_INVENTORY;i++)
2 H( D) m1 Z( O, k$ I) w$ K {; }! q1 o4 X, V6 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 f1 X% K$ O9 [3 }. { if (!pItemElem)) h% ~' J2 m7 I c
{# ]! L8 ]" e6 d/ j
vItem.dwKind2 = 0xffffffff;' D0 \ o* @4 _, I
vItem.dwItemId = 0xffffffff;
8 Y6 }5 R" d: O3 ^" x' e1 k) l- a vItem.nIndex = i;0 W: B; h J+ F$ v3 o
}else {, @! U! a# `+ j( m# k; l0 M
ItemProp* pProp = pItemElem->GetProp();8 t# |, X+ B: H" a/ C
vItem.dwKind2 = pProp->dwItemKind2;
$ r" M7 s9 I2 I* M vItem.dwItemId = pItemElem->m_dwItemId;
% ^' j" F: E7 k. O2 |4 S vItem.nIndex = i;6 L9 ^0 ?: y) }; Z% S; w7 J% Z
}8 G- n; d! {# H2 B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" J. p: s) S. e, s# l6 p8 j U }
7 B: s+ o6 K! f, h; h2 o //////////////////////////////////////////////////////////////////////////1 e% I2 k& ^! z5 @% W/ c
sort(vItem.begin(),vItem.end());//排序
5 T7 d& B' j. i //////////////////////////////////////////////////////////////////////////
( L( {4 f/ ^$ X$ |( X s- F9 ` //交换3 R R) N: r- V5 @7 m) g3 z
for (size_t i=0;i<vItem.size();i++)
3 r2 n2 e7 F# F, s: Q9 T% E {: q" d8 G2 t: m7 D
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% p. R' D* B# W pInvSort->Add(vItem.nIndex);% A/ X5 F/ a+ C) n7 P, [: w
}
5 s; k) R, c- t$ M* n- U; C) t% ~ BYTE nDestPos = 0;, q f! o7 k& X+ ]8 f( u% K* |% [
for (int i=0;i<MAX_INVENTORY;i++)
) }6 j E9 a$ b' f7 p, {( ^ {8 l6 d6 w- O+ t' z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
@! n* x& z( A5 J( ?/ o/ {8 t if (pItemElem)2 X" F1 d3 c$ x7 V- b
{4 A# v. b' O7 V) G. M, W) k
if (IsUsingItem(pItemElem))
4 S; z9 B( P6 D( }: m0 W {
+ I6 I- |- x1 c //这个位置无法放( x" n! R+ S: H- i
nDestPos++;$ Y* M4 L A! I; _3 D0 K
}& i' p9 L" p' V% X r
}4 e3 @% X) p8 O* _
BYTE nSrc = pInvSort->GetItemSrc(i);
% E2 I) e* \ w `: ?, O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& X' x7 i( g$ C+ ? if (pItemElem)
2 D/ I" W9 k& j3 ?- {# n) ^ {+ Z! M# R$ C8 n, u0 _
if (IsUsingItem(pItemElem))
7 ?( G2 Y: U2 x3 ^' f, Q4 x1 } {
% G+ o/ Q' ]% W# U, S //这个道具无法移动,跳过
4 b9 ~7 x4 r8 R5 _" I- ` continue;
5 f. g; T2 V$ A) m2 ? }
. c1 ^; G1 Q8 s. s" s1 d3 v }else{
6 s9 @; C9 Z2 f8 Y' |8 |$ \/ J //空位置 不用动! G, ^5 r( [. T- `$ X. \1 P o
continue;
3 Q7 E7 z( T/ w! C }
4 e& ~. s G5 U( g* _2 I //////////////////////////////////////////////////////////////////////////
( I# `; N/ r+ z g7 k( v //开始移动9 w- O8 X+ c% k/ B; W0 ?1 u
if (nSrc == nDestPos)
9 J* }& n: r. d! i" j5 M( F {
% c, F2 T! c, G# l+ ^, Y; K. R; A //原地不动
, F% o( _+ d% k. ?9 s7 S nDestPos++;
2 Z% H8 {; L P$ W, u4 e continue;
& H5 K$ S3 j0 } }
& {+ ~2 P8 g2 i pInvSort->MoveItem(i,nDestPos);
% |) n0 a& n: z4 i5 E: a9 c8 i6 R g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 k! t: ^% T+ J0 a( g. h3 F5 d& ~
Sleep(5);0 e# t3 _* ^9 g
//Error("移动 - %d->%d",nSrc,nDestPos);
3 Z& _$ b1 k2 r/ O( g7 ? nDestPos++;0 l4 C' d; |* K) j, _. o9 T
}- J% |* v# w5 o
//取第一个元素的信息' k3 p( ~9 {# e x6 M. N) ]
/*- e* T9 T: O: ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), `8 n, p% h3 Z9 O4 {$ Z. A
{5 H8 \' y4 P' N% o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! q1 ]+ J% K/ b, V5 U* {% W
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 X+ n3 \# r5 c3 [% L5 I* z. G- ? }2 [% c1 k; N( \2 a% U: ~
*/
0 l* W6 o( [+ g2 ^5 t //////////////////////////////////////////////////////////////////////////
. I. P0 n: m ?' |3 i: x break;
( T) d" C: |. |7 g. k# s$ ] }
; }: R6 W5 X* R8 F9 W6 D } ; J' ^( M/ w1 j% I9 b
}
4 t1 [1 t# u1 e6 n$ Qm_wndMenu.SetVisible(FALSE);
8 V% u, \( k; X; r. Z* ]% K3 P, e7 ]1 s4 N2 l
--------------------------------------------------------------------------------------------------------
I( e0 b; R W5 |/ e( h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); h$ V' f R6 K) z
{
# \# E' L. [) K5 jBaseMouseCursor();8 u, @: B. X* Y9 o
}& `$ J9 m% l( \
在其下添加:
8 Y0 m5 h& L/ e' b$ x: Y4 evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" {( i3 U+ }9 b4 U1 l
{
; C2 Z4 h0 Z5 N9 T/ T7 K2 a: lm_wndMenu.DeleteAllMenu();
, O5 ^# Z; u& w- O# cm_wndMenu.CreateMenu(this);: H8 r4 K4 c s6 j8 ]' Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Q: ^0 v; d& N6 ?
' u! ~9 o% F# X# U9 F0 x5 Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* \3 Y7 K3 [0 W7 {+ U* ~8 |8 Y/ I{
# V" G! n: {5 g4 @8 r$ z //P以上级别才可以删除所有道具 I3 n6 u- v/ }/ b% p6 k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ F% `( z; V) t h* x' I}
7 T/ i: g7 R# t, v# h' U! H8 Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! A J( ] d& L0 d1 B, Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ u+ Y0 E% H/ N. X( [! Gm_wndMenu.SetFocus();; r6 N- N5 j5 f+ Q3 R
}
R/ c: v4 A/ E: m" P( s2 I2 t/ D------------------------------------------------------------------------------------------------------------0 j {4 Q$ d4 }
*************************
2 o: ~% Z; ^2 H$ B b C6 E- xWndField.h文件* z+ D4 S/ Z6 Y2 S) r" W
*************************
0 T2 n+ \) N5 `& z搜索:BOOL m_bReport;3 c4 s( \7 s) W4 @+ D+ z- J: s# z3 K
其后添加:- X% Q1 C: ?- L
CWndMenu m_wndMenu;& |* b* e+ {- C) m- D; d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 \- t! t; g+ f+ s. K
其后添加:
6 L6 y( k7 d* C* ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 H$ I5 I' u; s7 T6 h0 n( Q: J9 U; { m& ?& F% x1 |
' y4 x0 b2 @1 j) x: f, l
|
|