|
|
源文件中_Interface文件夹下WndField.cpp文件
$ P# V1 y" f, t+ O( `7 L- L" h3 n' O& A+ b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). e/ Q1 j( O2 l7 H. d& F
# F! j' f. a8 g6 Z( Wstruct sItem
. m5 E) r$ f2 L{8 l! N% N% E7 w
DWORD dwId;6 e- @7 n0 X* g' s9 I7 y% N5 k4 A
DWORD dwKind2;) r" G. A' ?( y6 X4 I& V
DWORD dwItemId;
' W$ z3 v, X) \' IBYTE nIndex;% I( J w, z9 e
sItem(){
7 ? c$ U( k% i# C6 Y dwId = dwKind2 = dwItemId = nIndex = 0;+ i1 W* y, _- \& v; K% m
}
- X; G* Z. g: h! p C! rbool operator < (const sItem p2)
0 J5 c5 T7 L K" e* @{
( R. N& [/ e9 F2 W, e8 m7 N1 D if (dwKind2 == p2.dwKind2)
) G6 Q0 L- [; h& P {: }7 w7 A4 Q. @5 o; ~) }6 T5 ?
return dwItemId < p2.dwItemId;
$ W8 S0 O" t* D- E }else{
2 ~# V& q3 \5 K. K; d return dwKind2 < p2.dwKind2;
- {& o* f3 z0 @% z' F }
: t3 v5 ~# Z( v4 |+ p4 E7 J}8 z& d: D6 X* a5 a
};
/ W2 p/ D/ P1 ?; Vclass CInventorySort
) P* `2 S" ~3 _( {# R/ ~: S4 U5 c: `' E{6 V! k9 }$ J# B5 e u+ t, t- a
public:: q1 [5 s2 L7 n( G; J
CInventorySort()4 S2 T% W$ o. u& ~7 X; r6 W: L
{
3 @5 P2 ]" M* d& S9 I+ b m_dwPos = 0;
6 ]* f, k4 Q. i+ E" ?}- y! d4 o# D; O% Z. t% ^$ B: }
~CInventorySort(){}& l. A8 h h: i* T7 Z- u
private:0 [9 s$ K' H) `0 I) Z8 R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 d% {1 p8 _9 V. o% n5 A% sDWORD m_dwPos;
: z6 u$ ^5 b/ E2 Q( V6 a' [public:
8 l4 b* h T% M7 y* Z ^" Ivoid Add(BYTE nIndex)- |8 J4 D) {8 ]- F# K& W4 @$ l
{( X D% w: M& w) s6 B) H4 g: {) P
if (m_dwPos >= MAX_INVENTORY)# I1 |; }3 I5 l7 x' R3 w
{
" C$ M9 ?$ _: a2 v return;: K1 u/ i% R5 O# X. Z S/ f
}/ F: [' e k- b, K: W5 T
m_Item[m_dwPos].nIndex = nIndex;
8 `0 U7 `% S/ }8 P m_Item[m_dwPos].dwId = m_dwPos;8 O0 _# \- b9 v9 w' r
m_dwPos++;$ @# ^2 v' V: C. b- ^
}
2 g6 H H+ t" _6 N+ r+ {% F5 M, {1 Q6 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. m+ N* q2 t9 G/ M. D
{
9 j! ?/ G( p/ V for (int i=0;i<MAX_INVENTORY;i++)9 t! X, e1 j' Z: [4 B$ M
{! d$ M& [1 c( G9 }6 Q Q, F. ?
if (m_Item.dwId == dwId)
A2 p& N5 F# @* c5 P {# b- \ e: [# Z# D
return m_Item.nIndex;
4 O2 s z! j+ U }8 O* O8 t0 G& G" [; k) c ]
}# N4 y: @$ r/ x* Y
return 255;0 v8 r% X& O6 v& g) m3 w4 O" D
}
$ H! C2 L5 U& L8 U" `+ W" M- n: dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ }3 Z* u9 p! _2 ?2 U+ X{) _: M4 S/ A" c8 v# e6 m
BYTE nTmp = 0;
$ ]/ C' a0 d8 u. P+ x, z6 Q bool bDest = false,bSrc = false;7 g' ]( t; m4 @$ e4 n* b6 |: l
for (int i=0;i<MAX_INVENTORY;i++)
1 f8 H, u; W0 M. X) P9 Q% r {1 T* s# g. D! P+ L$ J' b; z
if (dwSrcId == m_Item.dwId)
- y3 U4 S& ]4 O( K! N/ W {, ]! y# H" O6 @7 }
//id相等 则 改变对应的dest和src
5 d6 \0 ]. F/ {8 g9 @ nTmp = m_Item.nIndex;
/ T x& c( _7 ] m_Item.nIndex = dest;
( k7 G) q7 V5 d7 M; z }7 l) B' ?2 _1 M/ m7 `
}& U7 D9 x( k1 u4 O' c& ]2 |6 H# D: X
//临时数据保存完毕,交换开始
+ w( [- Y( N( ?& ]! w' x for (int i=0;i<MAX_INVENTORY;i++). u8 z( U' J0 u) U1 X
{$ O7 x: X) f, e3 X7 f4 U) K, X F
if (dest == m_Item.nIndex), ~/ x) n5 S0 P" @( ]% K* }+ {; B
{3 b' W8 @! X0 T" r+ P! C1 \$ p6 K
//id相等 则 改变对应的dest和src
8 }. U! C3 @. U& |, L m_Item.nIndex = nTmp;2 c" t* I. p# f! n
}
" G& n" D: w! U1 P }! B; { i. H, t
}6 o- U0 w. @* K
};
P1 k+ J. h, A! D+ `-------------------------------------------------------------------------
- w* X% M; V7 G9 I- y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 O7 v% |# c% d! I0 |) W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 `+ L4 v3 y; d* H( d- a4 F+ B- q
紧靠其上添加:
0 X8 {$ I+ Z8 h ?! `if( pWndBase == &m_wndMenu )
" a- a) m' N1 ]% C; s. D{) w$ h/ T5 g1 z( X) i" J0 ^8 |
switch( nID )& e) Y7 { D l. p4 V4 f
{
" x, K5 }2 J% D case 2:8 D c% x+ g8 B% J. S
{4 C3 P" y0 G9 q* ]8 J+ m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& W- s, ?0 E p1 |/ q* ?0 X+ l if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ {' X% ]. L$ Q3 p' ]$ j8 F- M
{
J% K" P4 ^. r0 @3 B+ g break;4 w! f1 E" w: E8 l
}
8 ~, A/ B; F# \4 O f+ y0 i2 F for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P' v4 S A8 e5 F- Y
{
" z H" b) G- J5 S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 c5 m- m5 i+ I) P
if( !pItemElem )
7 L7 c( M- y- ? continue;/ a& T& |: g! I# J4 @0 }; G2 V
if(pItemElem->GetExtra() > 0)
) y) [; S1 Z3 N2 [' G- s9 I continue;
% y- e' M1 I" t: @' d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% j$ i* @0 D7 a5 u) r% } continue;1 G5 v5 F, Z/ ^1 r( Y
if( g_pPlayer->IsUsing( pItemElem ) )) Q4 B1 }" K, i& u, {
continue;9 x# Q! H0 ~5 I* e# h
if( pItemElem->IsUndestructable() == TRUE )
" R" V% i+ G' C5 C) i {4 f* r2 s. P" Z9 l* A4 @5 ]' Y+ T
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) Q; Z L5 l( x1 x1 r0 J. E
continue;
1 N5 }& d; y# g+ c2 n+ v }4 }- |7 \9 G$ j2 u% j
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ S9 p" J" W$ p# p# L/ j W }6 d% e! c' W! E8 z2 e
break;
0 R3 d2 }0 P! p! N }
) s: n! A! m; D, E5 [ case 1:
8 \* Y2 k8 p! e" o+ i8 i {5 M$ T7 X% r7 Q! G, z, U
//整理背包
a) d0 C0 h( o8 h //////////////////////////////////////////////////////////////////////////% D; Q$ @9 K3 w8 R# d1 B4 ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ J+ ~; S0 p* m# L; k. M j4 w
//////////////////////////////////////////////////////////////////////////
! J$ P) ~) O |) E% I //////////////////////////////////////////////////////////////////////////2 A- c. |, p1 P `2 l9 ?
CInventorySort* pInvSort = new CInventorySort;
% W. D$ `% U; M! K" V vector <sItem> vItem;8 M6 M) s$ u! [/ W
vItem.resize(MAX_INVENTORY);//初始化大小0 o9 K- j( V! t$ x% Q
//////////////////////////////////////////////////////////////////////////
$ L, g! D- P6 {) g! k //填充数据, c8 i2 p3 [& {3 W8 I/ n* C
for (int i=0;i<MAX_INVENTORY;i++)6 J& |! z0 t; b* Z, U
{4 p$ `' p2 p4 ^7 c( o+ P0 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 u& C( g [ e
if (!pItemElem)+ z) y5 y' E8 @
{
+ Y0 ^# p+ J+ Q( E$ p vItem.dwKind2 = 0xffffffff;
# j j- r3 u' O) v3 n vItem.dwItemId = 0xffffffff;# R( }# D4 U. w7 W
vItem.nIndex = i;
, f* }# [! {1 c }: i+ ] }else {
4 F" n2 M4 f. V1 D2 T ItemProp* pProp = pItemElem->GetProp();
0 c7 f% E" G: C7 a# O8 S vItem.dwKind2 = pProp->dwItemKind2;; l/ q) [2 `! S. _! w
vItem.dwItemId = pItemElem->m_dwItemId;
1 Q) I# O9 H. ^% K vItem.nIndex = i;
( _5 m; ~0 p, P$ f Z }
9 i# U: A: I8 T1 B: Z8 q, C, F, o" q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); B; ~, G6 o0 F1 m# ]) w
}
3 F. m3 T% A1 N' Q0 @. s //////////////////////////////////////////////////////////////////////////, S9 b' g }6 ~: B/ R6 m, R. J
sort(vItem.begin(),vItem.end());//排序
, b: R9 n! E5 q) M( Z1 d //////////////////////////////////////////////////////////////////////////4 T4 p, }* T' [. ?* Z& m9 i( q# T
//交换
1 q4 g( n+ `& |- e7 ~ for (size_t i=0;i<vItem.size();i++)) ~5 x) n9 H6 C+ ?
{
6 C4 l. }( B3 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* Y2 h. X* P3 _* i: W( h6 v
pInvSort->Add(vItem.nIndex);9 g, c: u8 l+ E% I7 y5 h- i0 u
}
2 _6 o( M ?* k% e& g2 i0 y BYTE nDestPos = 0;
" U/ I0 d1 \: [7 L for (int i=0;i<MAX_INVENTORY;i++)- {* F$ v; J- ~3 @/ b( `
{
7 z/ t- T9 F- h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 e, [; J1 O$ J2 F1 M if (pItemElem)
8 L0 n/ C3 \; H {2 r0 m- r0 p2 P. p$ l
if (IsUsingItem(pItemElem))
K: b# i/ k" R( k {
" d( j+ P9 o) P& H7 K3 C //这个位置无法放* a3 n O7 I. I$ k' C
nDestPos++;/ X; r+ k$ U- n$ R; E. a
}
: o J; L/ [1 F }' C! f! p6 H. ^! D6 H: K+ `
BYTE nSrc = pInvSort->GetItemSrc(i);
5 e6 e6 [" W* F. f! Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ q. L4 t1 F1 d if (pItemElem)
. K- {7 U2 H7 z2 M* L# c {
+ q5 i7 z; K# U. l! Q3 e4 q3 Q1 o0 _ if (IsUsingItem(pItemElem))
% l7 c; a" n0 g" i {
4 l- C( |- G) J$ ~$ G, K" N //这个道具无法移动,跳过9 L( |4 N. x" T3 H( B6 W
continue;) a! h% j- V0 i$ X& I- Q" P
}6 ?& ^3 M2 O- z% Z
}else{6 ]6 q6 k( n+ g3 z' r
//空位置 不用动0 ~5 K1 i6 V8 a3 E; j
continue;" g6 ^+ S7 W# [1 Z* l) c
}
2 j0 i2 r& g' u; M9 N; r6 { //////////////////////////////////////////////////////////////////////////
! M* K' }0 Z8 L3 N9 r7 Q3 R //开始移动
: U; J$ Y8 ?, q4 r' d1 y if (nSrc == nDestPos)
5 N5 x+ j3 @' O" Q {
8 E2 I. V% P9 K //原地不动
6 Z# f& E4 V# ~8 z2 H nDestPos++;
' }6 q# h8 G5 h& P. k2 F: A) x; \7 Y" o! | continue;6 u2 a& _8 J/ v' G9 s1 S
}
+ E& x3 V1 E" Y# C6 [ pInvSort->MoveItem(i,nDestPos);0 ^% \( `: R9 w; A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. p& r7 k4 v l/ |4 F7 a
Sleep(5);
( b' i2 b" I- U- P //Error("移动 - %d->%d",nSrc,nDestPos);: A* o9 Z7 L9 n P2 C
nDestPos++; C5 {+ i8 W: I+ c# _, ~ ^) C
}0 ^$ T; E$ i9 l y* F
//取第一个元素的信息" K+ Z7 ^ l% R+ ~0 }% a
/*% k# Z9 Z, Y6 J$ g* k" c# X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
v- M$ }+ V# h# X {
. O! t4 X) Q. H$ a, Z) } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ C5 ] G& P# u q' v `" O( A6 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# k# T* |! [7 p [
}+ C) C$ b ?+ q- v; m& G
*// y1 u: }; r: J+ _
//////////////////////////////////////////////////////////////////////////
1 {1 E3 q) B5 `9 S break;( b0 s- R( `# C
}
% D2 D2 X2 u0 X/ Q. l }
7 \( \" f# |1 K}
$ G8 I" E4 O5 ~3 i# o$ Ym_wndMenu.SetVisible(FALSE);( o* T) F1 v, _2 p1 E w$ \
( x! q* |. k( H* J/ ^2 X/ G
--------------------------------------------------------------------------------------------------------
; o0 P. s) q% q. i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, ]( [# s! L) B Z( l& d{
' d& u, n; l. d, R rBaseMouseCursor();
+ E2 t+ t0 u( e0 \}) }$ ]0 O& |: Z7 q) @4 Z
在其下添加:
: N; L. j h7 v K$ ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 Z) [2 \ `% R: |/ c{% z) Y2 l) U) G' c
m_wndMenu.DeleteAllMenu();
n, ^; D2 [- S/ [ j, _m_wndMenu.CreateMenu(this);
) O5 M( J! A/ V, b( s1 vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 B* `. @# A. k7 R+ l$ f: c
' o# f6 i, N8 @! b3 O7 I4 zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). X; s2 P: ]' }& |: D( T/ b; g" s
{% h, R! E) G$ k1 R5 I
//P以上级别才可以删除所有道具! }( t& O. u' z/ n" j6 P1 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ {& C n; I) q0 p) ~1 t% W}
7 ~, c0 c4 g+ y/ Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); C1 g& t4 F% a v' P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 ^6 N& i4 |8 O8 _m_wndMenu.SetFocus();8 w/ m0 X. P* l
}
6 Y6 L/ q! I' K2 g1 F% h" j------------------------------------------------------------------------------------------------------------ F- F0 V& M" i, c
*************************9 Q+ }6 v. C) b2 s
WndField.h文件; j" d# q1 C; A" M3 r
*************************7 C; s2 q1 w" P& q' X, I- k
搜索:BOOL m_bReport;
& h& K9 Y& J2 ^+ J其后添加:4 b' F% l6 v3 ~7 h% ^' B3 z
CWndMenu m_wndMenu;
9 t; n6 ~! _" }9 Z9 l- U+ _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" s) o1 t! m* V; v5 F5 V8 n
其后添加:5 p; ]3 G3 Q( L; O7 x( n
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; w# r" g& N7 k; o+ G5 B
; I' k8 g1 Z' D- ]# T) }- Z" q! E' E$ \- v) r/ e3 \) T
|
|