|
|
源文件中_Interface文件夹下WndField.cpp文件
: g9 Z0 b$ J- L1 }+ j搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' R- M+ p% }' j1 m# e1 R1 m
9 y) @6 r8 f! Q. lstruct sItem, `4 i) ~( Z) g, _: Z
{
2 n# \; |% k. Z/ O+ X2 zDWORD dwId;4 I9 U9 } K0 s* W. V! j
DWORD dwKind2;# g: f2 ^9 P. H6 P; \
DWORD dwItemId;
% H6 `3 \- n0 @% _BYTE nIndex;
+ T% M( q) Q. N6 \; p+ e+ FsItem(){
! ^9 y* j, _5 K- t" M" L dwId = dwKind2 = dwItemId = nIndex = 0;/ k4 w- Z9 n" A, o4 \% q( U
}$ w% q! }" M3 c( Q
bool operator < (const sItem p2)
7 s: M- L& T$ u1 q{' ]1 H4 w7 S; C0 n' {5 M6 a ]% @" u
if (dwKind2 == p2.dwKind2)
( d" |7 y( D' e7 g l {: B; j" C/ G% y5 v: y4 `) ?
return dwItemId < p2.dwItemId;( _$ y$ i5 d; ^3 I: g. d u
}else{ t" I) `: O4 r' P6 @: ^3 [ C
return dwKind2 < p2.dwKind2;! A; K/ K7 p( z m
}
# Z) o7 c. S& F7 K, c [}
/ J! K7 i. L# a! V" C) o};1 ]$ H$ Y5 r1 k8 A! V
class CInventorySort3 f& |) h2 q% L' h+ W+ h
{
- m* S5 o0 h: A2 [+ ppublic:9 Q: \/ [3 V0 h% p6 d' m1 H! n
CInventorySort()6 l- K, g0 b3 x6 i" ]3 w- k
{
& J9 |9 A0 r8 a/ B m_dwPos = 0;, Y2 I$ P \% \9 z" |( w: U1 x' F
}
+ m7 w) {* j! _4 H* ]~CInventorySort(){}* l- f0 ~! U" P
private:# Q/ ^4 g5 H( U( R, K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. M: O; Y& g/ ]! rDWORD m_dwPos;
# Q" f% t5 A5 g) `public:
2 g2 b9 N; Y3 u1 Z% E# cvoid Add(BYTE nIndex)
# a$ P* Y5 U' y% c& _( d{
# D- C B$ S- s( \ if (m_dwPos >= MAX_INVENTORY)" N6 h2 T0 q. d8 t6 d3 B6 Z; H
{
@9 ]. M7 B6 P! r" z6 P8 d n return;: i) ?" n9 R- }0 I6 i
}
9 ^! ~; r! f$ | m_Item[m_dwPos].nIndex = nIndex;) F& F2 j. V# [$ }3 b: y4 I1 u
m_Item[m_dwPos].dwId = m_dwPos;1 B, l$ P& Q+ Q" g/ Q
m_dwPos++;
: f7 X; g) r' N2 T* q7 H# k}$ m3 ?1 ~& X# S: b* n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 b0 I5 R& N7 b. p7 n* N{' U2 \6 Z; w5 ?9 S
for (int i=0;i<MAX_INVENTORY;i++)
" m: C7 o( G9 [& b {% C, i9 C' I7 t, e+ [
if (m_Item.dwId == dwId)
* @6 {& y* s' N/ h! X" O {
3 T" Y# K/ y- M return m_Item.nIndex;
: b$ s3 \4 ` z- L }. Y( G' o# H( u9 V- C9 s! z3 k
}
9 o! N+ M4 } j0 a return 255;
: ]( [) Y0 t) q" m6 X5 P( I}) E. l; |0 G4 F' y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, c) _4 @: s" G+ K, h, X
{: N8 [; y6 H! V5 M5 P
BYTE nTmp = 0;( n& y$ n& P' u* w: k
bool bDest = false,bSrc = false;2 r: G [+ b q" O/ t8 f( V
for (int i=0;i<MAX_INVENTORY;i++)
' h7 u Q, y: ^- O- O {" |9 O) e$ _, h7 j
if (dwSrcId == m_Item.dwId)* o$ g$ b- o9 d) I: ^$ I- L; ]
{
0 [ ?$ V3 K/ K //id相等 则 改变对应的dest和src9 `5 r2 D7 \( z0 ]2 M5 _" G
nTmp = m_Item.nIndex;
3 B1 P7 V Y7 `" } m_Item.nIndex = dest;+ q3 V7 a/ b& V8 e
}( M4 g! ~+ D: F
}& {# U O' Y' o5 z! a$ I
//临时数据保存完毕,交换开始 N J! I2 m/ w
for (int i=0;i<MAX_INVENTORY;i++)
( ?" {. Q( W$ f- p {! j& D& M0 E8 ]" _
if (dest == m_Item.nIndex)
2 G; g: d. l& u J+ A {
9 a) ^8 J- j8 @; [0 n" e+ ] //id相等 则 改变对应的dest和src8 h/ J8 g! x! H+ x; k7 j- p. q
m_Item.nIndex = nTmp;
/ C# H [( X* I; V- t" @4 o# I5 w }
. q! K# T V0 |/ l2 W } s1 x3 e, S6 T% i% d' k
}
4 n9 Z6 ? ^% u' c};
8 S( P1 M% y7 A-------------------------------------------------------------------------% m, u M* Q3 J7 H: D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% }6 N) w0 m( f: d9 G1 B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, ]1 ^& ~- i8 v; Q( H紧靠其上添加:
/ g8 x: r5 v" ~4 Q4 [2 R% O, m4 bif( pWndBase == &m_wndMenu )
9 P$ b* c" Z0 R5 ?{
% w) a" ~* V1 M1 `9 @$ W switch( nID )' E, J( a7 t& y! ?( j
{4 ~" k1 ~) E7 E1 t2 I$ V2 A' v
case 2:
7 s* K2 ]' P/ n/ D {
) j9 I" l- X" C( @ |5 w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% @/ d Z2 \8 V. z' l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! ?! B! _: P: \+ c# C! Z1 u {% t0 m! w, V$ j
break;
) \+ H0 O5 j! x. u$ k }5 ]7 o2 v6 n8 f7 H, a" T; ~9 E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 j% \. E% c$ z& m
{
1 u2 f% d# f4 h6 T' K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' k c1 A p( M: P8 T
if( !pItemElem )( K! g; i; \& m. y3 W% Y- P+ b4 K
continue;
" v- _& ^5 i$ ? if(pItemElem->GetExtra() > 0)
" z" g% R! I5 v$ _) b7 a N0 U3 g continue;
9 W0 h$ |1 z s- l: a* G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " U# v5 L! _) d5 W- R: a0 J9 m' E
continue;; m6 u1 c7 [0 g C7 r
if( g_pPlayer->IsUsing( pItemElem ) )
# e, ]: n! x$ H4 _% ^8 s% Y# b) s continue;* J, M1 i3 y4 A' u& @) D
if( pItemElem->IsUndestructable() == TRUE )
" a( k2 d5 S' {9 q1 u* }5 J {+ y* V8 X+ s$ m: z8 Q% K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" N- l* S% }, G9 ~+ L% w) N continue;( a: W" ]( g% V4 @# S @, }4 q
}
4 A' ?4 t2 K: T; {4 V' G1 ], H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 L2 v4 _5 w* i$ S' D5 D }
( K$ ~" |/ R, W$ C' ~ break;, K; `3 r1 v4 }
}
; m, D2 h: }7 b6 [ case 1:. H2 ?8 _; Y2 F5 W( i
{1 F$ Z) C0 P9 ~- T) W: Z
//整理背包
+ t6 G7 [- ~ Q* K. B, V) I: A //////////////////////////////////////////////////////////////////////////+ Q) H1 Y+ h- {4 D6 Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 a* |" |. |1 h2 `+ ]9 u# r
//////////////////////////////////////////////////////////////////////////5 ^" P' k& H! ]! X, g& a# Z
//////////////////////////////////////////////////////////////////////////
+ P0 c6 I0 d4 |6 z. q CInventorySort* pInvSort = new CInventorySort;
& p5 ]% f# @% ` vector <sItem> vItem;( I/ O1 R% t! s P8 ], j& T
vItem.resize(MAX_INVENTORY);//初始化大小7 N& }; B% w/ L9 L' b4 n
//////////////////////////////////////////////////////////////////////////
5 Q7 Y3 T9 I6 C6 S" O$ C7 V //填充数据! m |, K' U+ t6 P0 ^6 D( z) o
for (int i=0;i<MAX_INVENTORY;i++)5 L/ Y# U/ B8 X z
{
8 p2 O2 {* ~, {! ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# r8 s8 b2 r9 ?7 t S if (!pItemElem)
+ S+ n: i6 i0 h: r {4 B- `4 X& J6 y7 p" }0 l: I
vItem.dwKind2 = 0xffffffff;2 Z! s% p1 {) r4 z- t
vItem.dwItemId = 0xffffffff;; @9 s1 [1 B2 h4 s; S f
vItem.nIndex = i;4 o% w. q# X) `* F) T
}else {
6 n- h c1 w" H! E5 W+ S7 j ItemProp* pProp = pItemElem->GetProp();
& j# f! Q- T- `% M: \, f vItem.dwKind2 = pProp->dwItemKind2;
, i, x- W4 E U8 b& h& ^ vItem.dwItemId = pItemElem->m_dwItemId;
9 Z' i3 N- ~, G+ I% c vItem.nIndex = i;
. P, u7 m) f c1 [9 l }
0 T- ~- V% ^7 a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 B$ U7 j& H$ {( b* U' u
}( }- u: _' T5 G- N/ q: ~
//////////////////////////////////////////////////////////////////////////
- i- u! k* P z( Z, {* e) K' b sort(vItem.begin(),vItem.end());//排序3 H3 x2 I, X/ x. j' F- \7 Q# t
//////////////////////////////////////////////////////////////////////////0 w2 T0 q m/ |
//交换/ ]% k% B- }: g' |. c0 X% s
for (size_t i=0;i<vItem.size();i++)
1 i0 F- w* ^8 h$ j) p% x9 ~# x {
& L u) Y" U( T) k7 ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! U% p& i9 g9 }; q) l
pInvSort->Add(vItem.nIndex);. y5 y6 c ~' N7 J8 E4 j' t
}) o; T* E! o" e& }% o
BYTE nDestPos = 0;( {8 [+ m- e* r: D2 J, Y! P
for (int i=0;i<MAX_INVENTORY;i++)8 E# D! S3 a# O K
{& U! T% H1 ~7 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 U- Y- A, ~3 T ~6 Z if (pItemElem)* p4 |3 [! j2 {3 Y% f: H, m
{
& Y( d" G _5 b( r$ Q- d if (IsUsingItem(pItemElem)): R( Y2 j" M; u2 [ Z/ K
{5 `! }0 k/ O. f7 V: l7 d
//这个位置无法放
% j& f3 c5 u- u& c( N nDestPos++;
8 ]4 p8 {6 [2 B* u; i- V }* I7 m9 |: \1 I! u2 `6 I) e& X
}( L1 o0 U- W' w6 W3 g" r1 K0 o
BYTE nSrc = pInvSort->GetItemSrc(i);8 c( S% Z3 R4 h/ v! {& v7 O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 t. _9 k( v- H; {6 K5 {, M: v if (pItemElem)- m( F+ C& v$ m. \& n
{
$ L6 i3 P1 K1 x" A* z if (IsUsingItem(pItemElem))
) _8 J; c+ v' p* r2 Q- k {
4 Z6 t8 a& Y, g& w! Q: W, c' W //这个道具无法移动,跳过8 `" D7 ` e. k! F8 _* X
continue;
2 c& w* p" ?1 I* { }7 ?/ [0 h( ^' p
}else{
4 {1 _2 j+ u! g# F) h, A //空位置 不用动6 q6 u) `; v, o3 ~/ a# D) l' D; S. q
continue;
. R g3 Y" z1 n$ a( T( }. J" S }
9 C! H7 E9 @1 g8 U+ S. h; t //////////////////////////////////////////////////////////////////////////& t4 E# A0 V. c, {. {0 \7 a4 h
//开始移动
4 F( ^3 Q/ j0 \# w9 r" j if (nSrc == nDestPos)
& f2 ]6 ^! K7 f9 c9 h( V- o {
, {8 ]% ~5 J) J: s3 V/ K5 _ //原地不动9 s* c$ n, C% Q5 U
nDestPos++;
/ Q% X6 v* ]; A, M+ r continue;5 ~) @1 L! [4 ~% n
}
% l f( q) E: Z6 F+ m pInvSort->MoveItem(i,nDestPos);5 e/ W0 z& s/ z1 w l- q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
}& N- Z( e; j9 Y) h% B) |' @ Sleep(5);" l6 R, X" R# E2 d5 R$ N: O+ [
//Error("移动 - %d->%d",nSrc,nDestPos);
3 z; l9 r1 ^4 v1 T( k0 V) z nDestPos++;
, u4 d* ]* g" x" _* z+ A }
9 m! X7 D- N% ?) B2 b' I //取第一个元素的信息6 N0 R6 k5 W4 F1 w& }) e) E' c
/*
7 l& {2 {! c! {4 Y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) W6 ?7 U. C) K3 a: ^- _* m0 {
{! [+ m7 G2 @; X M/ `6 L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" ?) x, b6 u1 I2 G g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 Y5 Z: ~! P) }0 D a7 z0 T }4 p" i4 X6 i- W$ z6 G( n
*/
; e" G7 Q0 V, D( d3 Q+ s; G //////////////////////////////////////////////////////////////////////////
. ~ i x/ }* p( a. M4 N/ Y break;% x( I# N: K+ Q8 V. W |, I8 |
}2 A; \! c/ G( a }1 I0 X
} 9 G3 `- S. N( U' A. O7 }2 z
}
1 v$ N3 u" D2 x% nm_wndMenu.SetVisible(FALSE);
. N: Z' d4 |8 @. c) {' C$ o3 ]+ H$ u
--------------------------------------------------------------------------------------------------------% G" _: c! m" Y: m8 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, f# [/ @( M M{+ c7 Q1 h" Z3 P! n0 r2 r& W V
BaseMouseCursor();
% ?$ d) c5 ^9 ~. g. b- r}
6 N( I3 r6 j2 W( ?) N在其下添加:8 {% M/ Z4 w4 N' D }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 t8 F+ e! h1 @7 k# t
{. S% J0 M2 U/ m: z7 L6 Q1 S
m_wndMenu.DeleteAllMenu();
% x* y, n& G" y) H: m* h5 ^m_wndMenu.CreateMenu(this);
* u: R+ m; h c& t% K V0 zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ }1 E7 R( P9 n+ A; t1 P
6 s. j: c" ]( v+ c0 p ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' r; p" [( D+ X5 m2 M{' S8 [. \5 c7 Z
//P以上级别才可以删除所有道具
" D2 q2 x/ u2 K/ o9 k: w+ Q: M1 D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 e: J6 W* A' M$ @}
* e' X, @6 x$ y' H' rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 C0 k+ y3 C f \; O/ t( H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; ]( x5 O. n+ S' K2 G( [2 K) ^ Y
m_wndMenu.SetFocus();
" f3 o8 x' I1 A/ J5 p}
. T$ U& ?( R% v4 ]+ k------------------------------------------------------------------------------------------------------------/ {, p! i- K, d. @* u
*************************
& r% k+ a" n9 a0 e. I" o' GWndField.h文件
0 L( q$ R& V1 q) v2 X*************************( y) U$ X/ c2 J" n* ?
搜索:BOOL m_bReport;
. X' V, f/ I* e8 f/ D) U2 d其后添加: @6 {9 D. x% C1 T8 r) _
CWndMenu m_wndMenu;
$ u" t. h5 i8 K* c5 k$ a/ A9 U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' ~ C0 B& R: L# j5 ?- O其后添加:, W- @" S6 F2 P2 c( s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, w- Y7 ? s! \, o. f
3 b2 x8 _' i: y' P1 q: a; a
5 c+ x- E% ]1 L |
|