|
|
源文件中_Interface文件夹下WndField.cpp文件8 T) n0 y+ P- N1 m4 ` r4 U Q# V
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 ] z, R; O) {, g* l% r7 ~7 q) f
3 ]4 k5 Z' W9 T1 S# H$ Y+ c( Sstruct sItem0 H- @$ J1 f/ i8 u' E# L
{9 c" X$ ]4 Y; p- ~9 R* R
DWORD dwId;& c! m! |; p, s( ^' t0 }
DWORD dwKind2;5 \4 ]" j9 c. R9 J+ d, H; d( }
DWORD dwItemId;
& w/ b* l/ y; s/ K8 e( P8 YBYTE nIndex;
% q) g: O' @. |8 J2 P2 QsItem(){
7 ~/ Z3 j) \) W% q3 }. U( v dwId = dwKind2 = dwItemId = nIndex = 0;
7 p' q e# {" Q}
0 N" [, W- r8 y+ m& y, _7 E8 Ebool operator < (const sItem p2)4 b. X7 Y. A3 P- }' s5 c
{! Y' |3 e# ^0 M2 ?
if (dwKind2 == p2.dwKind2)
# F' t1 ~1 C' w' c" _& [; K1 ~9 [ {
- y7 J- C: ^3 A return dwItemId < p2.dwItemId;: D$ H: @, N* x' _
}else{
& X* B# x& z8 n9 ^ return dwKind2 < p2.dwKind2;" x" o* d) X/ B: a' w1 X- s2 `
}* b' Y7 \9 p: {2 w. x
}; a1 s8 s/ w5 G1 w- r: b% d
};1 c* L, d2 Z) V$ q/ V
class CInventorySort2 ]3 Y" w k' @9 K) K: t* y
{1 r' ]6 X. C9 E/ ^
public: H3 }5 i# C' H% o& N# v
CInventorySort()- z3 w! ?6 E- n$ O2 y8 r
{
' q) S) E% z" ? m_dwPos = 0;' T! Y9 \5 z$ `+ t
}+ r1 K$ I3 }" s4 e2 ?; V. U
~CInventorySort(){}
7 U' @6 u( N& mprivate:! n. k. x5 E# `* n) F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ H' u$ V3 r/ ?6 B6 p, X4 _
DWORD m_dwPos;' P; q+ { v; H; Y# H" i
public:
8 {& W0 v/ p2 Rvoid Add(BYTE nIndex)
, M5 W# g1 U; ^! d2 x! S{
: p/ K2 ?/ l) O1 x. s8 | Y if (m_dwPos >= MAX_INVENTORY), T0 t/ @* e5 G6 ^
{
- Q/ y- }/ n& p; D9 R return;3 y% u* D0 f+ L- i
}- A: b! U1 p( v: |
m_Item[m_dwPos].nIndex = nIndex;
' D0 u6 m' Y% l# {( G1 v( d m_Item[m_dwPos].dwId = m_dwPos;1 J8 V0 B" i7 Z/ t2 P" U' k) c2 G$ ^6 B6 }
m_dwPos++;
0 z: b& ?3 A, z}
$ H9 G! K% c: F) i, h8 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- ?) k2 p5 a# ?9 @{
% G& f8 ~ T4 ~& l/ E X for (int i=0;i<MAX_INVENTORY;i++)
$ c; i8 Y2 e, N4 q* ^ {) r' b* D7 M; P- ^* V P: h& P
if (m_Item.dwId == dwId)( D) z' }3 s6 x: r) ], ?1 \# ~: o7 U
{: W ?9 H+ \2 u" c: Z R U
return m_Item.nIndex;
6 {& d \1 A9 { }
- {3 R5 `% a h }
) b+ ?+ r0 K# @1 c7 r return 255;) l- a6 Y- v& t
}
) T. P/ m+ o' |% k" Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% Q) f; p9 |5 l
{; k8 U5 Y: u5 }
BYTE nTmp = 0;: b* q: @) ]* F5 N
bool bDest = false,bSrc = false;
4 D' o- k# g! @: f. I Q" s- q for (int i=0;i<MAX_INVENTORY;i++)
. |- u, {# N L {' S% [+ [) g+ W) G
if (dwSrcId == m_Item.dwId)
. } u6 s! a% P {. g# L% O2 b8 P( }+ f" [
//id相等 则 改变对应的dest和src' y* m, L( b& i& R( f7 }
nTmp = m_Item.nIndex;
* X. d2 x, D4 t* A3 \: K m_Item.nIndex = dest;
@7 @4 ^# P4 ]* } }
3 V0 [) P% G6 n% K6 M5 F }. X: X, [* B. P* g' \6 Y
//临时数据保存完毕,交换开始5 j; G$ {4 z& f2 ^4 m8 r4 w
for (int i=0;i<MAX_INVENTORY;i++)
: P9 G' d/ Y$ p, _8 e5 Q$ C) W {: N4 p; ?1 D- Z. d
if (dest == m_Item.nIndex)
0 h) L8 }, v# k+ `* v K# y {
: x, c7 h4 ~$ }0 H: k, } //id相等 则 改变对应的dest和src' {) n; I- `; k
m_Item.nIndex = nTmp;. m( _; c& m2 P8 m2 {
}
. s9 q# T7 \! \' h( y }* ?, P. Q/ Y7 {2 T3 L$ b
}
0 H$ L% D: Q' r; m};; A1 g/ B/ A% |( f* L
-------------------------------------------------------------------------
5 ?; ?, m# I+ A% T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- w& ^- Q, D3 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% K3 Z2 y6 m i9 Q+ z# w紧靠其上添加:
+ ]% h% \: K" J, u/ Nif( pWndBase == &m_wndMenu )7 v. A' q& `' ^. o" p' |1 m
{
9 J2 @- @& b: R# V4 d% |" w switch( nID )' l- k5 j! _. X8 f
{7 e) ?6 P6 W6 S2 k5 `- |0 n
case 2:" ? E. P8 ]3 y* m
{) M8 |! j, {/ u3 [1 N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ q0 ^; W; m# J0 I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 T, f( i3 s. r+ v& W' m8 E5 \4 T {" q: F; `" J9 F' V( f( L
break;
: P! A9 q" E3 x, `; x }
. c: A( z1 z& D2 L0 R2 P9 A* }( g7 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): r& o/ _6 n h. O5 A. @% V8 S
{" Q" x2 n z x9 f+ |# i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" z$ c2 K- t' D0 B# ?5 u! K! z if( !pItemElem )
~$ g# D2 ?% ]4 W continue;2 e/ r1 [9 O5 _- Q% |! H
if(pItemElem->GetExtra() > 0)
, t8 k) r* c0 h' ] continue;
/ T& e( O5 K5 e; \( M* } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ z0 F: H ~1 a& n6 F continue;
$ F: C1 G4 M2 A; N+ B$ q7 P- u7 L if( g_pPlayer->IsUsing( pItemElem ) )
) F/ w7 s- y& E' N" }0 Z9 Q; d continue;
+ q5 p& H0 g& n if( pItemElem->IsUndestructable() == TRUE ) i9 f. t/ U! G9 f4 D
{$ C, ]1 G8 w; r) C K f! A. t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ `- p S5 A- Q, P& @0 d% z, v7 s
continue;
' d4 { b) J. }( A0 Q# C }0 w; m1 u* N1 @% M& a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 j! j, q- m9 q2 i! v
}
) r6 c' e9 g/ C3 Y7 t break;
- Q. d4 h1 C( b* V* n* g0 k ? }
7 ]0 Z5 j1 `' l# ^; ]; w case 1:
9 I8 c* B t/ n! l7 [' \ {/ E) p7 l' g5 f) Z# R3 K- W9 j) F8 {
//整理背包
2 b9 c/ ~4 l$ F& n4 f/ w //////////////////////////////////////////////////////////////////////////
9 e1 m* s6 C) V: G3 _3 ], k2 F7 K" K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 T% i7 p t' m7 ? //////////////////////////////////////////////////////////////////////////
2 Y5 d# `0 H0 f8 Y0 R. w //////////////////////////////////////////////////////////////////////////
2 N* j. d* M. Z" R7 C. Z CInventorySort* pInvSort = new CInventorySort;4 f# L+ k9 n. ]! `, c9 Y9 a
vector <sItem> vItem;& |* Q4 \2 S. [; ?5 V5 I
vItem.resize(MAX_INVENTORY);//初始化大小
" E# J4 o* I7 Z3 W# A9 p //////////////////////////////////////////////////////////////////////////
$ F2 F6 F% m" }; e/ w' x5 w" n8 ] //填充数据
; R9 H5 w. ] Y" U for (int i=0;i<MAX_INVENTORY;i++)7 U) } `6 c3 r- J" ^* w- m
{! y, K: L& R+ T0 O1 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. S, p+ J! L* ?+ B! o' D) n- f if (!pItemElem); ~" G" D8 L) a, n8 V
{6 B$ L( P& }+ Q' }0 R
vItem.dwKind2 = 0xffffffff;+ _, B% {) C D$ g5 Z9 G' Z( S
vItem.dwItemId = 0xffffffff;& d. ]9 B* p% Y, x8 Q' [, z. M
vItem.nIndex = i;
8 j R( {/ V1 G4 n2 f, V$ H5 f ^; Q: A }else {
. b- t3 h& y7 [' ^/ p' o4 D2 I+ J ItemProp* pProp = pItemElem->GetProp();& e3 J! C4 G3 }. C5 g; C
vItem.dwKind2 = pProp->dwItemKind2;) O" Z% u/ A1 f/ j, ]
vItem.dwItemId = pItemElem->m_dwItemId;
6 V1 Y7 P; @" Z" T, X5 X4 n* R5 l vItem.nIndex = i;
9 Y: d$ W+ I4 |( G0 M/ i }2 Q z% G) H9 ~9 F: L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 @) w. z A. v1 d) m8 {$ N- K; S }
4 P) F3 |! N) o //////////////////////////////////////////////////////////////////////////
6 T& j: O. t, a! H# I6 e sort(vItem.begin(),vItem.end());//排序
- m! l3 H% Z! ]2 d) k //////////////////////////////////////////////////////////////////////////
# i q* f* `& m5 s! j% m! | //交换1 z: f8 E% {4 O7 ^2 U
for (size_t i=0;i<vItem.size();i++)
; [9 L5 T* \; L+ K$ |9 O- Y {
2 X8 X- V3 o0 h! j- J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 B W4 m" `# y3 c7 ?; y
pInvSort->Add(vItem.nIndex);2 g% |6 d' p" j% o5 J# ^$ I
}4 N9 |7 d3 i% N5 Y1 x
BYTE nDestPos = 0;3 i3 g0 [+ H' H4 J. G
for (int i=0;i<MAX_INVENTORY;i++)
/ O" ?" ^1 G, Z$ n M+ L {! S+ S( m X% K0 D- H& e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 K. p4 t: R+ c: Q( `9 e7 I
if (pItemElem)3 F& u- {( U' S
{) v- u( P: L8 M) X
if (IsUsingItem(pItemElem))7 Y, P: U% H% L S- H6 R/ ]
{
) m' U1 M+ m: G: b( l# P //这个位置无法放
6 d0 v8 h/ C8 p+ a* b nDestPos++;
; K9 j* A; A$ ]0 A }
3 M) \2 X, R+ K2 k( c. t# G( W; D }6 \$ r, c* x4 y- g
BYTE nSrc = pInvSort->GetItemSrc(i);0 \% ^1 K8 O; ~5 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' l" j8 s1 @8 X6 [. k( S" @ if (pItemElem)
9 G" V8 S2 m' C7 v! F {' i" w$ _3 @, W2 m7 v+ g8 {% `
if (IsUsingItem(pItemElem))5 ^( _6 ] U. `/ H+ [
{5 j! c- [, t6 l3 G( Y
//这个道具无法移动,跳过
" y3 y5 R; Z1 ?0 M# B. Y2 M continue;
" F) H, }8 T9 A! |0 a0 k5 A# v0 } }6 L' A! p5 H$ t( @+ d o. w
}else{
+ e; ]. w9 f3 X1 { f- n //空位置 不用动
5 o7 `3 v, g$ ~; F& F continue;
3 E1 O4 g1 @" k( {5 t9 U }& Y" F" z7 ]* N3 z$ x
//////////////////////////////////////////////////////////////////////////
- y9 C3 G% b- J$ r8 @4 K- X4 ~8 s //开始移动
" A s% D. [9 T. o if (nSrc == nDestPos)0 ]5 K& `5 S- V! P* Z) \5 h6 J
{
7 J5 \2 _2 q* o //原地不动8 z/ Q% k" U+ l8 @6 H, J
nDestPos++; ~+ ~$ A' N' M5 s8 }2 y0 P# {1 x
continue;: {6 n1 g, F i* @
}
) P; R0 ?4 O0 u% T, M7 y pInvSort->MoveItem(i,nDestPos);
; {6 b T3 u' R$ T4 O* z g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ ^0 ^& ~) l/ ^- \
Sleep(5);# V4 l. p! G* M6 S
//Error("移动 - %d->%d",nSrc,nDestPos);* I5 D7 f; n+ d+ u, f
nDestPos++;: r( l+ G& F) D5 R& N
}. N/ Y. F5 Z( M$ C9 T" W
//取第一个元素的信息8 }" n2 _3 j" {6 O8 t2 N
/*
7 _1 a# J" D- T8 o( r% W$ X' P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- H, h0 c, B. q- c- U; Y }6 p
{$ {+ E3 c7 m! U9 m) R7 J9 Q7 q8 o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* \; o) `- t0 H- k$ ^9 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ |/ ~6 G4 c4 ]3 e( _( i
}% o0 d1 g" G3 f
*/" f8 G" D! {2 N% l" }
//////////////////////////////////////////////////////////////////////////
5 b9 N* p; H/ ~. a: z$ c' A; L break;
: s$ x; E% U# M8 w) w }
& j$ c0 H9 L% S& F0 ?$ k2 }2 ]3 p9 W } 8 R& ^; x- [% Z6 A
}* s4 r) N+ B4 g1 P
m_wndMenu.SetVisible(FALSE);
1 N$ k! r+ }. h# B
/ z, L5 B9 [: _, q* M/ L' Q--------------------------------------------------------------------------------------------------------
7 L0 x. T9 A& n% r( Q$ U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 p8 V0 l: O4 t/ E5 |" C{: [, ?0 o R/ }$ L6 Q9 \" H
BaseMouseCursor();/ i% u/ E1 C6 b h
}. [# b" M) Z" g
在其下添加: s8 k1 s7 i) V/ O6 g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- F: n$ k. C. [! M4 j; m{
! r' V! q# `) y3 U4 Xm_wndMenu.DeleteAllMenu();
w! ^) t+ _" u) t( Hm_wndMenu.CreateMenu(this);
( X( W: V4 j* V& c2 n# Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- K0 N& t% g6 @9 H! m
! a/ m6 p) E8 E+ Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 n0 ^4 x; }, z2 i$ e" A{
7 H# P8 a0 g& t( t- g //P以上级别才可以删除所有道具
- l5 n4 m- `- y& ~; M. H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 e" C6 R. R9 x0 x1 V}" a/ V3 X6 Z& u$ Q2 b% ?/ ^ d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 P( O H1 M. U. U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 p: o1 D8 H, J6 u
m_wndMenu.SetFocus();
8 w0 G6 F4 a2 `' n+ y" ~9 y}
$ u" L) X5 T9 a6 \! |& u------------------------------------------------------------------------------------------------------------3 d1 ?9 o4 f' ~7 m* ? N
*************************
) I7 r9 }4 |' ^$ E- l) P3 DWndField.h文件1 W; t0 g3 @# ?, p& ?! Q; w' X& i
*************************
- @- N! \$ \+ m" W搜索:BOOL m_bReport;5 _ Y) Q- u* D/ _0 ~/ q( ^" s
其后添加:' A1 @7 q( [* g4 _
CWndMenu m_wndMenu;
: Z ]( d% u# r9 d( _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" t9 z# z7 u' M ]+ U' I其后添加:
3 k: l4 P) j7 x/ Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);4 W% b ~$ S, U
# ], I# u7 G0 {' P0 N7 v# ?$ n7 f7 A
|
|