|
源文件中_Interface文件夹下WndField.cpp文件: i9 u0 Z- {+ O6 F5 G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 P! p: u. u, C8 E: L- L! M$ ^+ x) T/ ?: a- t! B; S: J
struct sItem
3 O1 \& y5 Y5 Y) L) p; w4 B5 j{$ W1 t) z: |4 o: n: |+ R! h' S
DWORD dwId;
0 b5 @! a2 Q/ yDWORD dwKind2;3 U; E0 @6 X3 P4 f
DWORD dwItemId;8 W6 P' c1 t R2 S3 s6 G0 i, k
BYTE nIndex;
/ U, n7 k3 ^7 {sItem(){" D/ [1 i4 |4 ^- c
dwId = dwKind2 = dwItemId = nIndex = 0;% |1 A4 h/ V" B H; l2 a9 ?) y
}
5 n( }- ^; U+ i# s" ]; ?. p7 }bool operator < (const sItem p2)
7 x S3 h1 d* r- a* M{5 J4 b) v" N; T4 l3 V" R; b
if (dwKind2 == p2.dwKind2)$ {/ B3 x9 V0 R* f+ B7 \& I
{
+ j( k( ~+ k* k( F- d5 K return dwItemId < p2.dwItemId;
( J7 s9 o& u+ \& M" n/ K( p8 C; U }else{
* p' }# k j! x' Q4 Q return dwKind2 < p2.dwKind2;' N; x0 H w ^ |4 Q" p+ V
}
# F5 A1 f7 w, J$ b/ _}
( c/ O8 }/ @: [) N' F};
" t, l3 U7 Z/ u! o+ Vclass CInventorySort
5 e+ x3 H: p3 D {% T: c% J2 v{& T. Y' F% [* X! O& q+ j
public:
0 y' @( f. g7 i, ?6 H& d$ x7 GCInventorySort()5 i/ K/ Y e( p: s3 y1 c
{& k/ x& m( Z, h
m_dwPos = 0;: D5 K! Z' v: B" c9 X' t
}
- Z" r: ^4 ]9 M" T~CInventorySort(){}$ ~; `" H @9 b4 D9 d/ ^# y
private:
; d6 g' `* X! w) usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* ^1 o+ Y* b( L, H X. S) I5 |8 u: [7 cDWORD m_dwPos;
+ C, K5 A% I+ Z! k ]public:. i [9 c! P4 y |, |$ }, \
void Add(BYTE nIndex)7 Y1 G! u; l: k9 {+ k( S
{- ~0 P3 @) O* h R
if (m_dwPos >= MAX_INVENTORY)$ v9 j ?0 ?; \2 f( i0 f" @2 J
{( D; b4 @7 q: S
return;
x7 H% b9 y S, R; x) |+ B- l0 t( }7 ? }
8 k7 T# I2 L3 Y) N' B m_Item[m_dwPos].nIndex = nIndex;
8 o) Q2 K# x- v4 ] m_Item[m_dwPos].dwId = m_dwPos;
# |$ I6 k2 j: J8 S/ h/ a m_dwPos++;7 @6 o2 A' [7 u! X$ H+ _, E
}/ x+ l/ L7 G- q" d, b& w: M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( w1 [8 S4 P. O, |. K/ J) D
{) L0 U' K; U* i
for (int i=0;i<MAX_INVENTORY;i++)0 W) N/ q$ c- ` I/ g3 q8 j
{( U: G- L1 ~1 \* e$ F4 S
if (m_Item.dwId == dwId)
R8 g8 H0 U }9 b {
1 \. q A6 x) a* a return m_Item.nIndex;
1 T0 g; N5 |# y0 L2 [ }' a* M; }- R$ M/ H
}
6 n( ?- r2 q, }- _3 l; r" ~ return 255;9 u4 q9 u! w( T3 ~+ h
}
, @) B5 r5 X$ D, c) F& S$ X7 ]( qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- H5 l/ M8 d! _; \
{) H, f+ W; F7 s) x) w
BYTE nTmp = 0;
% i! {6 v$ ], }5 j0 f, `$ W: I% ]$ n8 g5 J bool bDest = false,bSrc = false;
" W) ~) O& J8 e$ e5 W for (int i=0;i<MAX_INVENTORY;i++)
+ ]* q1 u( a0 B6 s& X8 n; M" ] {5 V9 ?7 O# c1 A/ M) q
if (dwSrcId == m_Item.dwId). }" X" }. {2 I$ ~1 ]3 e
{
1 |& ?. r9 p1 u3 e0 [- ? ~5 M/ } //id相等 则 改变对应的dest和src
& c: w4 Q0 I, q6 W( D' M, \, S: X nTmp = m_Item.nIndex;
9 m2 o& S4 |1 c u. l) |" X' v m_Item.nIndex = dest;
4 O1 S4 \+ p1 i }
* i/ M4 m$ A2 n3 F0 l0 o a }
6 c) d+ O9 X+ R* Z //临时数据保存完毕,交换开始. ?0 ^' [0 }- s( L8 n- x
for (int i=0;i<MAX_INVENTORY;i++); R6 v% Z8 \9 m! a6 n1 k
{
U, b% e7 d) c0 {7 a if (dest == m_Item.nIndex)
6 ~7 b. M9 T% q% t+ M8 L {
( O n5 }5 ^7 x //id相等 则 改变对应的dest和src3 i" B+ G- w$ `, ?+ H$ G1 a
m_Item.nIndex = nTmp;! Q7 y5 P7 ]9 a$ z2 [! I
}
# P; t- {+ u* K }2 X" l& t9 W1 I1 Y( M: ~
}
+ `$ v: c0 S% d9 S2 R" H};3 G. y9 {, f; J
-------------------------------------------------------------------------
1 E5 B6 ]8 T0 g) }; c) d$ t/ Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ H/ B ?# N) H* X1 u# q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 B. u, f, K2 n1 i7 d紧靠其上添加:
9 o- l' D- K7 L( A- lif( pWndBase == &m_wndMenu )
, n5 [. E, Z9 @$ K }+ w7 X! V{6 q- h$ q2 j" U' h2 p- Y
switch( nID )
8 P5 _1 D7 B3 Z {2 c) |( u# J, t9 A" ^
case 2:; h7 x8 ` ]* a! `( c* m' J
{: K4 {& E4 r- x* `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 t$ F. f9 \( Q: v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( n( O& @7 O" g: t7 L y
{. l: s3 |0 K) B* G& w* J
break;% x% p3 u x, n1 {. m
}
& g2 ^4 |! u: H: V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ G7 h* r t4 s& Z
{5 |+ Y& S u9 [, ]2 e- n' W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 C4 Z; z: J8 W9 s- t; j' t
if( !pItemElem )
! f3 @3 Z9 G4 A7 D) r, m/ K8 v! t continue;) p8 |$ Y6 G/ C+ ^
if(pItemElem->GetExtra() > 0)$ f' D9 Q; Z, g/ G- T( l
continue;
4 i. S& R* d6 ]5 v6 b. ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " K1 O% _: k- v
continue;
4 B- B4 U3 {) D& K5 S if( g_pPlayer->IsUsing( pItemElem ) )2 v( g" y% c& G+ S7 c! G
continue;
1 o2 M2 A- q1 m if( pItemElem->IsUndestructable() == TRUE ): J# ~& }, `, C; @$ E
{
2 ]0 {* H: c. u* D$ |- N7 n g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 u4 _3 @. ]# e! O. E* A' B% I
continue;
/ s3 A3 ?6 h: K+ ^4 z }
; }4 L% b7 R( p" J6 F0 N# h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! o, b: u) d8 K
}
2 p3 e" x- C2 P& A+ l6 O; w break;* r! K1 e3 [0 v: P$ u7 p% S
}
9 F& k- `! F8 O" P [# t) d case 1:
! a9 |+ O$ ^ T" I! G0 ` {
7 _: s5 X. T) v% t0 p- R2 x3 \3 T0 Z L //整理背包
. e. X+ w# {0 v8 r$ s2 D5 R //////////////////////////////////////////////////////////////////////////
$ `6 @5 p% Q' x- Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ ^ A8 U/ x+ j //////////////////////////////////////////////////////////////////////////
$ i `* n7 {! u4 r% \' C //////////////////////////////////////////////////////////////////////////, t( y# F" R( X* H Q& ~8 m
CInventorySort* pInvSort = new CInventorySort;+ f% n1 W. g/ z5 x
vector <sItem> vItem;- b% T, i) {: S/ x
vItem.resize(MAX_INVENTORY);//初始化大小
3 o3 L4 M: z/ R& s s0 l //////////////////////////////////////////////////////////////////////////
8 G! p. @! L' q //填充数据# g; e2 D* W$ j4 _. n5 b
for (int i=0;i<MAX_INVENTORY;i++), ]' r, d/ M- a- C. v
{ M Z" V* @% p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ i; k( d4 \' R1 M; l7 ]2 _4 ] if (!pItemElem), [( B9 {' ]; I- |: E; v
{& @0 i. A+ O* z+ t) P' C
vItem.dwKind2 = 0xffffffff;. R; K; w( J" `. u, C' ~
vItem.dwItemId = 0xffffffff;6 i% P. X& x* {
vItem.nIndex = i;
, ~1 w$ n9 H9 p7 [; y }else {
2 H& `3 k O1 Z5 s ItemProp* pProp = pItemElem->GetProp();" C* U& u+ [5 b" Q/ k- {! r7 S+ K+ O
vItem.dwKind2 = pProp->dwItemKind2;
8 ?3 h4 u- d P7 q4 _- u( _ vItem.dwItemId = pItemElem->m_dwItemId;0 z r# L# F) Y$ D7 e4 p" z
vItem.nIndex = i; ^! x5 M. q7 p- ^/ h* m
}1 Q$ a$ f; L: r0 K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 F6 T" ~# z. ^- G/ ~
}
4 m* a$ k, E: }, H2 V //////////////////////////////////////////////////////////////////////////
2 |# w3 M3 h, a$ t& X; J4 }9 y+ k3 n sort(vItem.begin(),vItem.end());//排序5 ^+ W* |7 [) c
//////////////////////////////////////////////////////////////////////////
/ L* Q% I; g' @' m) \4 m1 Y& W% J //交换
6 j* Y9 h) b1 l: Q for (size_t i=0;i<vItem.size();i++)& d6 K' b" b* h# J/ ?
{
& Z) ]) t# J$ T5 M. T: o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) n/ C/ i) I" _6 @2 Q/ M& ^
pInvSort->Add(vItem.nIndex);
3 {/ `' T5 o$ W( I4 H( V r4 ] }
+ z' B7 e; V) |+ M& f3 Z$ b BYTE nDestPos = 0;
2 J9 ~9 |# G8 ]+ H+ q for (int i=0;i<MAX_INVENTORY;i++)
; i7 C" d9 Y! H1 r6 X {
# X* k- K; ^0 z5 k' U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# s( _5 u ^, H. U! y% b
if (pItemElem)
, r2 g2 Y2 D- b* \( V4 o- e {5 L0 d! Z7 p& H
if (IsUsingItem(pItemElem))
7 ]4 e3 @0 W8 e {
, @, J, p. N+ V- c //这个位置无法放" Z3 G( h8 } }7 m/ F, m2 R1 a
nDestPos++;/ Y4 B' h, B% e+ C4 C0 N+ V4 w
}
2 b5 a% s1 Q0 ^1 J A }
2 E1 C8 B# {! C BYTE nSrc = pInvSort->GetItemSrc(i);# z9 |4 \" N7 y- A' K5 @0 W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 p/ Z/ K+ a7 g# j7 T" {2 [2 g( p ]
if (pItemElem)# B0 I! B/ D) F% p$ X( W
{; I$ S- r+ A) T! u: O; b
if (IsUsingItem(pItemElem))
# c7 X# a$ A7 I {2 O% P0 }( ~& z) z9 P& d5 F
//这个道具无法移动,跳过/ p! M8 |6 p, c' F" D9 ?
continue;
" N: e% s d' p& I, O }
% m# Q2 K9 y/ {( r }else{) q# C A3 d: ?& @) L! C. ?
//空位置 不用动9 }4 V0 U$ C8 V- U/ s6 @
continue;
% m) p5 B8 ^" T" J: J% s0 B }7 V. i& Y2 f' O1 l8 ], c9 A+ W& v
//////////////////////////////////////////////////////////////////////////
: {! N N8 O2 M //开始移动3 S6 Y0 G0 w: }
if (nSrc == nDestPos)
1 A S) H9 t% l- x { c& a* v3 U' ^% r
//原地不动
( x$ ^% ^# Q7 T+ H1 ^$ C nDestPos++;' ~) }8 n9 [/ D3 k. M* V& v3 z* ^
continue;3 m9 R/ h' N! e `' C- H7 ?7 B
}
- i0 ?5 T+ L1 b! |- z0 p pInvSort->MoveItem(i,nDestPos);
' O5 |% ?$ G4 t ~9 s& ?; R; C g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# V/ n# M" o5 Z# V Sleep(5);/ b* ^% h* a7 n& d( E5 v
//Error("移动 - %d->%d",nSrc,nDestPos);
7 Z+ N( Z: D" g1 Q& \ nDestPos++;0 t- Y& Q, k8 O+ e K$ H
}' y2 x# J) n! t* \
//取第一个元素的信息
3 q. U: R! V: }6 D; Q1 e' Z$ g /*
5 t8 c; ]% o7 v9 v7 B if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" C" k" C7 ^, } {
! ?5 z3 v! B" M: [- B4 z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! {* P' i5 U& b* V) t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 c5 U- i% k2 n# V }% S0 n+ H1 d& R N3 a7 I
*/
% ]6 V3 k1 t; H+ k) ], R //////////////////////////////////////////////////////////////////////////
# B8 k% q4 H' S4 _% n- p break;
- T! U% M' s. ]3 c |0 y1 F }
3 t. A; V( B( u) d }
- b- ^" s+ {" M2 S. a, Z( p9 P# z! o}5 D0 y2 x% i+ k0 d
m_wndMenu.SetVisible(FALSE);# G1 N% i7 k0 P* X4 h
& W! X* x3 a, [9 ~! L& W& k' O
--------------------------------------------------------------------------------------------------------) R. w: j& b4 X0 Z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 a. z. L, P6 l) t# S% a
{
- l. L6 D; J/ T0 i- M8 i1 ~! _BaseMouseCursor();4 K2 @0 V- ~" j3 i$ w- m1 ~& v
}
% J4 h% b( f) J- V在其下添加:& h& n( u( R4 I; Z% G! t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), Z7 Y+ b" g, @& b
{( q. {* B" l: g1 d+ M
m_wndMenu.DeleteAllMenu();
2 O# d$ O3 G S) S8 G0 Pm_wndMenu.CreateMenu(this);
- _3 N7 U" \% Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- g1 v3 w" x- X% _% t
" E7 u; J& g3 y* |* a( _9 Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, }! e7 ]: l/ j1 d4 V5 z; W) d{0 _; Y7 P# ~! t
//P以上级别才可以删除所有道具/ W# j& i$ N2 G/ M8 w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ [+ A4 Y2 z5 _ J( T' `}
# G u& S4 J8 m9 k& Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
U0 ^/ P; d L- g& h# em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; ~2 C; ^1 o: @2 _, I
m_wndMenu.SetFocus();! X" s* L! j: d( H& x
}) V3 p9 q* S8 y" f/ r {* X
------------------------------------------------------------------------------------------------------------
5 g" t( M. f# S*************************
! h0 j( ~- a. b @' FWndField.h文件
& h. s* X3 [) }1 y, I*************************) k. w; i, C7 y
搜索:BOOL m_bReport;) r4 h* o/ `: i: F& ]
其后添加:) g, _& B5 z* ~) Q- n6 N( v$ t
CWndMenu m_wndMenu;
7 {% F; g9 G" l$ A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 O( L; M6 P. ? `) P$ x2 U9 Q
其后添加:
; r( R9 T( Y& c2 \4 Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);) \9 n7 ?7 m1 c1 V, `( ~$ y; m0 t U
+ h/ u; {+ _4 v/ s+ I
: f% s* D8 o/ u( O |
|