|
|
源文件中_Interface文件夹下WndField.cpp文件
/ {1 F0 O6 z/ }% {; Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 l! ]2 A$ m2 s: n3 X, v2 Y8 q5 q1 \' {; ~5 _9 a: {
struct sItem
- e, _4 C! v" t# S* ?1 V1 h4 H% d{) U" i, q' Z/ V7 ~+ O! N3 b/ l! [
DWORD dwId;
/ i9 h: R. }& I) \DWORD dwKind2;
/ G4 [6 {, B% }0 @DWORD dwItemId;3 v" b0 |5 I/ c
BYTE nIndex;& X( x1 s; F0 \+ r2 s' d9 j
sItem(){
% f- ]+ R R0 m* H3 x, W w dwId = dwKind2 = dwItemId = nIndex = 0;
9 N5 i5 @1 o& l! q* @ t$ R0 o}# H7 D; u2 R. }4 x# I# D
bool operator < (const sItem p2)
( g: c$ \3 A' f3 D4 c9 N( k" K{
: W2 ^/ J% s h' M if (dwKind2 == p2.dwKind2)( w0 k) B4 k" t& h
{" j3 x! H5 ]7 b- F' e6 `' M: Q6 p! `
return dwItemId < p2.dwItemId;
3 i) ?9 {" w% x& @! x$ L5 W5 m }else{3 Y( ` N& M' k- n
return dwKind2 < p2.dwKind2;, H* s/ i& z y/ _, C7 x
}
% D0 j" V7 m' y% Y$ E* e* e}
% R9 f r+ U1 ?* H};
( W' ` o) U- Q5 I4 t5 wclass CInventorySort) R3 s- A% P4 t: W
{8 b5 f5 [ O/ {3 G- N
public:$ `3 C) }+ l3 i8 p2 ?
CInventorySort()3 c% n6 L. @* O6 O. U/ d7 \
{! O7 y l/ R( O( g; v' E. A
m_dwPos = 0;
5 E" H. j9 d+ _; E) @}- u- {, }2 e M, W6 V% d
~CInventorySort(){}
; I, d1 m, M% j$ Q; ~" u6 K f; gprivate:0 ]' p+ V( K. s' r" ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) m9 r. J! z1 ~, g, xDWORD m_dwPos;2 G& t* E# H, u2 \. z5 j$ M7 c D
public:" c( M- [8 l7 O3 Y7 j$ @2 [
void Add(BYTE nIndex)
* x+ Q) j7 |9 n+ b$ ]6 U{3 K9 B: ~* i. T" Y ~+ ~9 |
if (m_dwPos >= MAX_INVENTORY)$ U- d% o c: U7 v2 o% W9 `- u W
{( U) W* S( ?: u( ~ h) i
return;* A. B: k, D, Z; J$ O
}5 m" z) D( u7 l! o1 I
m_Item[m_dwPos].nIndex = nIndex;( t: A: _8 X: o
m_Item[m_dwPos].dwId = m_dwPos;" j K, l. A3 t# b! z( o8 c
m_dwPos++;
/ c% Y* |2 j$ c3 Q3 k9 }/ y}
- l3 W* _9 u8 S- M9 X. ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
P$ l9 ^5 w2 T B r3 ?+ ?{+ ^7 m1 z1 f+ o$ M) e
for (int i=0;i<MAX_INVENTORY;i++)! y; L- q3 E9 D1 w/ z' v! X7 C
{) W9 }( d, t8 o; ?% m
if (m_Item.dwId == dwId)
- U1 m3 ~: q. r6 Y4 o {
/ N# N2 z2 j' U3 x- n return m_Item.nIndex;
# S8 p( ]; N ?( i }6 r0 W. e$ x8 v9 c: E$ g
}; S7 t* A0 F2 _3 N9 b
return 255;
( l1 P5 q3 d7 L0 j# ?$ b- g}
& v! p& d! @ \% m9 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ M+ H% ?2 e, G/ M. m t! d+ U- m
{
' f6 q& y; R6 @ F+ i5 ^ BYTE nTmp = 0;! w- [0 O) d' F5 w8 P+ J* f
bool bDest = false,bSrc = false;
4 b+ _7 ^( m$ {9 S for (int i=0;i<MAX_INVENTORY;i++)9 |( P- P0 e4 p, f: t
{
6 r0 n9 n9 g B if (dwSrcId == m_Item.dwId)
: I9 z6 f: X# _( c9 Q3 _& C {
/ U7 \2 O, Y( C9 C1 a //id相等 则 改变对应的dest和src' \& f0 _. ^& X; h
nTmp = m_Item.nIndex;) p, v* U/ x l6 m$ J( R
m_Item.nIndex = dest;
6 R5 S6 V! D8 B3 K) |( V }
. J( f1 r1 x1 S$ |/ P# o }+ _2 l, U, _2 [/ o
//临时数据保存完毕,交换开始
9 N& i7 ?. {& H for (int i=0;i<MAX_INVENTORY;i++)
9 m3 `9 ^5 h! j- a Y M0 C# \ {, P; f. K* M- q1 M# [
if (dest == m_Item.nIndex)- R5 i3 ^% [" G& g
{" E& { S; }/ X% {! \
//id相等 则 改变对应的dest和src
7 \# h/ F F! N& `) V m_Item.nIndex = nTmp;- R3 a& N o. i* t! ~$ e7 A. B
}
! e2 d! v$ }8 ^- s' n1 Y }
% G5 k) S8 L8 \; P2 t}8 P! L5 J( J2 Y
};
: V- F4 u2 v* t1 R) ^- W0 c8 I-------------------------------------------------------------------------4 G- k* m8 j; L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). N& w: |( W& C% e/ A/ B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% ]: N- [$ O y9 s
紧靠其上添加:
7 \+ [# R) F' a; X4 l5 w9 mif( pWndBase == &m_wndMenu )
9 ]7 I6 S% |& E, m. {{
. `8 i; k: _) K3 q9 D! |# F switch( nID )
' N& k7 X7 L0 s% D {
+ ?! w- X! g `& }; b case 2:
' c* [# ]: ?- t3 i {
! N2 O. L3 f) K% ?( k' m7 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: P! }0 V$ R- |1 ]- k7 N& v3 m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 P+ W; n2 a3 m1 P: b( A8 E {
8 n- q" A4 S7 V0 p* o% o. Y! {0 r3 Q break;. R% K6 C) @+ J
}& d1 Y1 T9 u# q' F& e% I2 N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 f Z, s" T! w9 x5 N3 V
{: x+ ~8 u/ f7 s9 I4 c3 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 W( b- p8 F; J, @6 x
if( !pItemElem )
Z9 E0 g2 ?% ~5 ` \7 \* U continue;. n) \" T+ q3 G3 \4 m0 H
if(pItemElem->GetExtra() > 0)
N0 ~' T; k- y2 J continue;
4 @4 C2 S$ z' i! ?- k4 Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* P8 O) J4 H9 x" `1 W continue;
' m: V/ l, ?1 A$ n4 K if( g_pPlayer->IsUsing( pItemElem ) )2 A, y1 x: C L7 B% c @
continue;
" X: ~: x4 ^7 n5 w7 K8 R3 @ if( pItemElem->IsUndestructable() == TRUE )( K+ e4 e7 a. k
{7 F! R. w2 h8 [1 s+ I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' ~: A a' ?6 [* ^/ u( W continue;
" W3 v$ s( S1 i: n T }' l9 ?' _4 ?3 s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 D! m. D5 L9 g" _" a }5 q, w9 J( P: y& q
break;0 ^' {0 p$ v0 \6 c2 _9 F0 P4 Z- N
}
$ c a* k9 g$ X& ]2 S- F- }7 K1 l case 1:
. ^+ h) ~. G: h6 c* s' ] {
( W3 s- X0 {; c x$ ?* u# q //整理背包! Z6 M$ A& x% k- w9 r9 y
//////////////////////////////////////////////////////////////////////////$ K& B0 e3 u& o1 h* c2 L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( p2 r$ S& K/ Q
//////////////////////////////////////////////////////////////////////////( p7 p/ F, e2 B. e1 e
//////////////////////////////////////////////////////////////////////////
; q; e( k* Y% i( i CInventorySort* pInvSort = new CInventorySort;6 E, G& t, c, c, J, o+ T2 L
vector <sItem> vItem;
$ x% J! B1 _9 w O* |$ q vItem.resize(MAX_INVENTORY);//初始化大小
/ p/ r$ |: t' O* x) E, H //////////////////////////////////////////////////////////////////////////
4 K Y) V( f k //填充数据
3 A- t; @$ v2 k0 j( Q8 j for (int i=0;i<MAX_INVENTORY;i++)9 J2 {0 a6 v7 K) Y9 j' D
{
. V5 N, ^/ ^6 b+ X' h; T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% }% {3 x: ^& x; @
if (!pItemElem)% h1 W, d1 N1 e+ u/ D! Q5 Y
{
9 c9 c% D4 }2 P/ _+ Y vItem.dwKind2 = 0xffffffff;! G0 o/ s1 Z* n- Y" A
vItem.dwItemId = 0xffffffff;
6 [, E' X' v2 l. r) F6 D/ A5 r! ? vItem.nIndex = i;/ l4 j1 [8 v' e+ K+ w
}else {' _. i j" p# k9 C
ItemProp* pProp = pItemElem->GetProp();1 k7 U8 A2 ]( x0 e1 Z
vItem.dwKind2 = pProp->dwItemKind2;
# O0 F' X6 b% _1 t5 L! f vItem.dwItemId = pItemElem->m_dwItemId;
* z E5 t5 Z+ S( ~3 `6 N. j vItem.nIndex = i;
) e6 d$ b' p3 U6 Q4 C }6 y/ e3 P. K" a) f0 X5 @& ~
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, a- y/ d; Z- B! q' t! R1 | }
' J/ Y$ F1 Y# D9 F //////////////////////////////////////////////////////////////////////////3 e1 W. m$ D4 y% p# ]' d
sort(vItem.begin(),vItem.end());//排序- e6 b# ]( b! `' k4 f8 p) v0 J# j9 ^2 S
//////////////////////////////////////////////////////////////////////////2 u6 n5 S" A+ B% H2 a4 F
//交换, Q- f$ S7 P" t9 Y/ l9 b8 ~9 O( j
for (size_t i=0;i<vItem.size();i++)4 t% {0 Q1 A7 y
{5 H: V7 [- S( J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' r/ ~, U6 B* N# `% A
pInvSort->Add(vItem.nIndex);
/ K7 Q- D& a3 h( M# V0 z( }; ~2 Q5 _6 A4 B }0 H) A2 b! r! O1 X- M: i G$ U
BYTE nDestPos = 0;
, w, z" \4 M- K7 Q8 o% i for (int i=0;i<MAX_INVENTORY;i++)- e! p2 T- I9 u5 m
{
: l4 r5 X, J4 F! b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 g* d8 P! q6 v( h- i9 G' E if (pItemElem)7 Y- b1 v. M9 |2 R' H6 W
{
# d; A2 ~% a' F0 Q. R8 @! r if (IsUsingItem(pItemElem))
, L$ D8 k) @/ [: F( g {
, ^% U6 B& O, g6 c7 H7 @ //这个位置无法放
' \* b, i6 e) Z* m/ T7 |8 G$ ^ nDestPos++;
; U, U3 R4 t9 g0 C4 D8 r$ @3 C }+ Y/ R* V: w: [8 f0 ?6 ]
}
1 z! C) c4 P) B( ]5 e BYTE nSrc = pInvSort->GetItemSrc(i);# Q; V; U1 H$ ^2 N
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ m1 { `; _/ U% {4 Y# O
if (pItemElem)
# H* c Y$ v: L6 C* I {
/ N) i$ S& s [3 p# c7 k4 D" ?* E if (IsUsingItem(pItemElem))- L! r7 z3 G. @, Y' q
{
0 Z% b0 T% F" c( T0 o- c+ N //这个道具无法移动,跳过! d3 v$ {/ n. s. a* v0 H( V
continue;
. g+ w' T% V" w* ?- \ [ }2 l# L$ V- y2 N$ I
}else{
4 m- C! n4 K! S: {, m. Y //空位置 不用动
4 Y3 K5 J, u4 L; L0 f) A continue;+ G& f$ t% B% t+ [: n
}
; B6 v5 e4 c/ S( d L //////////////////////////////////////////////////////////////////////////( ]1 m# c$ ~( y3 @
//开始移动# G8 p/ M7 u' f& h- F$ ]
if (nSrc == nDestPos)
, S$ b- j, s5 k# J. B8 {$ h$ b {
. w+ O7 b, |5 Q2 P* x //原地不动6 p C0 `! E2 o% J% r
nDestPos++;+ U! ^' m! ~3 K: _, y: J, O
continue; x- E! j+ k6 ?/ Y( S
}
: X0 p" V# A- G! m- v* w2 b& O' H pInvSort->MoveItem(i,nDestPos);
! J& [; `, e4 ~9 Z' j g_DPlay.SendMoveItem(0,nSrc,nDestPos);: o$ j& a9 a9 F5 m7 x
Sleep(5);! w! ^) ~& v2 ~1 t; A2 I
//Error("移动 - %d->%d",nSrc,nDestPos);
% ?: g0 Z$ ]4 ^( e) r nDestPos++;
' a5 N1 o; x, d, z5 Q9 g- n }
4 S9 }3 J$ @# ?! G+ D, h, J6 W //取第一个元素的信息" O( _% x) i( {- B8 {2 W' ^4 W
/*( s4 g$ m" ?4 q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. B$ a3 }* B. T+ O% @" B* j6 S/ c {9 R6 o4 z. {1 q7 Y; q+ T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 e5 j3 o+ Y7 Y( D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 L+ k7 v/ z+ j. e) w# b. u; }
}
2 j9 ]+ e, z+ F */
5 V& {5 l9 k; [6 N6 U( m9 R- B //////////////////////////////////////////////////////////////////////////
! `/ ?! T' o+ P8 h% o0 T break;
$ |7 t, I" U8 }6 d$ M& s }% W9 d( R0 k( n" v
} 0 H9 w! S8 b* i4 \
}* w( i, ?3 @! \4 s9 `6 o
m_wndMenu.SetVisible(FALSE);6 J4 z {5 s8 a A: u- o/ ^
8 q7 f6 S( v$ C
--------------------------------------------------------------------------------------------------------* `' O( k: P/ c9 ?, k# ?- o, K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! N7 a0 V2 J# T/ ^0 K3 U. M5 U{9 ^: F# j5 ^6 v1 K
BaseMouseCursor();2 x2 @8 F- Q# w+ ^5 w
}" I0 y& S* ^, h, M) J! K2 Q
在其下添加: `; I F5 \3 r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
W2 l' w% K4 G4 R{
% n! P B7 Q1 r4 v) \- K/ ~2 o- \m_wndMenu.DeleteAllMenu();
0 g! H+ L$ b2 |# ?$ i% `m_wndMenu.CreateMenu(this);! T1 r" H7 d, w2 o0 q) k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) Z. Q! ]4 ? m1 B: R; i
; q' \2 J/ w" P. ]& Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! Z' g/ ]) |4 d4 s. H) X{3 [% \- g/ U# U( j" y+ U" Q
//P以上级别才可以删除所有道具+ ^. T9 a/ U, }; }
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) V) T. q3 d) v2 o1 H' q' L}: e; B" `5 r) M/ _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 R a3 j" l9 O* r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* D" d$ `2 E) U8 }6 B# m$ z7 P2 C: M
m_wndMenu.SetFocus();
# \7 s7 ^4 ]' u9 T& m! O2 a& l}
( s( A8 D: i, W/ {------------------------------------------------------------------------------------------------------------
7 {% w+ W$ x/ ~- e9 {/ c*************************
. H* t- y& B0 ~! ZWndField.h文件, j+ R v6 Y* w, |/ U
*************************! z$ J4 d8 j2 x0 Z+ @9 ^
搜索:BOOL m_bReport;
" O% C8 y1 J4 }7 \) f其后添加:
2 t' [0 _; e/ f2 r4 tCWndMenu m_wndMenu;3 t1 c% p4 U) J3 D7 O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, q0 B' O' Z) R1 l: w
其后添加:
* h! `, U% f" J! b. ^; C$ D2 P q5 `virtual void OnRButtonUp(UINT nFlags, CPoint point);' \$ S0 U6 d5 N
, q0 B3 J0 u+ w# }$ n; d, z. ~1 p# l' g" h* `2 _4 ] P' c: `* L
|
|