|
|
源文件中_Interface文件夹下WndField.cpp文件
& T0 J& s$ S9 p% M3 L4 K5 A$ n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 _6 j7 s- l! r/ r" v8 ?
: d) L" _. m* Jstruct sItem
: }* P5 w* Y1 Y: N9 b+ O: \{- p0 E8 B" X7 p
DWORD dwId;
1 ?) R ^& G# M) WDWORD dwKind2;
% L& v$ v S% l7 ?& [9 m' }' QDWORD dwItemId;
6 U' @" `3 g; i6 Y5 iBYTE nIndex;- R: V6 v- |: ?* Q9 g. r
sItem(){# J8 _0 W* h" U; m" o [
dwId = dwKind2 = dwItemId = nIndex = 0;
; T" p9 n Y) l}
0 q/ g" k1 [& S9 [' X# X7 Zbool operator < (const sItem p2)5 k! _' I( f4 Q) @
{7 h! ?3 Y# G* M( @3 v l
if (dwKind2 == p2.dwKind2)+ q: q, p# d2 T6 x; F- m
{2 p$ y8 `1 A! N" g3 f
return dwItemId < p2.dwItemId;
9 N) i4 r. p. F. k& Y8 U+ u& W/ w3 a }else{+ T6 K0 p* l6 j, [; I
return dwKind2 < p2.dwKind2;* M3 L* r$ ?3 Q/ g9 Q0 u, I4 x
}
# Q% ?. B/ |; l2 ^% z( v}- D4 v, B+ m2 H( W
};# s( h# X; R/ U- `! s
class CInventorySort1 {- g& k6 I$ u Z
{
$ P/ \3 O6 c- p3 Hpublic:
; l* Y' b( ^& F. SCInventorySort()/ L$ O2 V! J. m o
{! h3 B$ Z. b: A
m_dwPos = 0;1 A4 f4 |/ S+ H p) n" T& \% |- s
}
' q$ \ ?% p; i) h& V, |6 Y, U! n$ P~CInventorySort(){}5 m: c" u6 o2 V
private:
* Q* ^, t$ B. |* p" _( i' ?5 _ }sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: y3 J0 I9 Z3 s& ^& K; bDWORD m_dwPos;
9 _& [' D! n' A. mpublic:
- n' H c6 ]' ?: c% Avoid Add(BYTE nIndex)
; |+ g6 t( w+ q0 o" h, B{! W Z7 R- o+ N% Y' ?6 z
if (m_dwPos >= MAX_INVENTORY)
: M A+ Q# ]5 S( g, b) l: _ {( m) Y# l$ n( {' p3 f! j/ h& o3 E
return;+ P( O: ?( v: P+ K
}6 y( c4 `6 q- t& N. l7 T
m_Item[m_dwPos].nIndex = nIndex;
" W; H" {) Z, W8 @+ g) u% H m_Item[m_dwPos].dwId = m_dwPos;
, o, F! F& b: f0 D m_dwPos++;
/ Q* o/ x0 e8 A3 P1 A- v}
+ V# ^9 c# T0 b2 K; _$ wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 f! \3 f4 \/ s6 x. M- h. C# K
{# ~$ e" n# M) S% X: f+ O* j
for (int i=0;i<MAX_INVENTORY;i++)
+ n# e$ j' Z6 w1 a! F) r, x {
; E/ s- S( P) K' \ L' E0 q+ W& l if (m_Item.dwId == dwId)
* h2 y# U% c2 `: R" R* z/ L {
9 T( t5 |- ]* M3 I$ L return m_Item.nIndex;9 ^( `. P) E6 r% ]& }8 S7 J
}* `; e+ I4 C; }! e* \/ |& ^' k" f
}
0 D; P5 d* P+ Z; ?+ P/ ?" e return 255;
! z7 Z8 ^8 j8 M, s0 |1 X}
, r- R0 j; H- n3 E$ r0 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. E1 q( X2 Z) C5 T
{& `& p. M2 X* w3 ]# w+ h$ Q
BYTE nTmp = 0;1 A! ?1 G, `" E6 z
bool bDest = false,bSrc = false; x# @4 p' V9 j5 h
for (int i=0;i<MAX_INVENTORY;i++), D, u7 V; Y0 h* F# l8 ?
{
G3 X. f: b' m# @ if (dwSrcId == m_Item.dwId)
9 f/ q; J# n7 c# S& j6 h {
* x, \3 J# b/ `/ w; y# s) K; \& _ //id相等 则 改变对应的dest和src% C, s" M# K7 {6 l" A* w- P& ~
nTmp = m_Item.nIndex;, o) ^8 u1 V& g% c+ g, i' o
m_Item.nIndex = dest;
k8 V7 C9 k3 }: X) J( Q }
8 Z; t5 H6 D5 `& z( B }; L; X3 N Y$ A' T6 X. v0 M8 Q
//临时数据保存完毕,交换开始# D5 [; [3 J# e
for (int i=0;i<MAX_INVENTORY;i++)
/ p6 \+ r* R9 a' C) s {
: R( Y2 f! Y: s4 p& y0 ^ if (dest == m_Item.nIndex)& q5 A% B+ ?6 i% I/ d8 @5 R
{ ~& y" ?$ r+ I3 a4 i9 e! P
//id相等 则 改变对应的dest和src
0 @# f( y6 x/ A- d" w( a m_Item.nIndex = nTmp;
7 S8 h d) t, l# k" f7 S4 ^ }( x0 F" E% N: O' [6 t' ~& Q
}
% z& O9 L' o5 X3 j" x0 }/ q' B}
/ R: K1 c) l8 @1 I; W% E. t};
" `9 s K+ s1 w-------------------------------------------------------------------------, ]4 J, S$ i4 w( s5 j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 W* B& N! E3 b4 Q+ h) n, E& _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ K+ j U7 i& e [紧靠其上添加:
) u% }4 Y* @; `8 j5 ]if( pWndBase == &m_wndMenu )
0 q! W0 d( d6 e/ c2 t{! N2 E/ f1 L. N6 {
switch( nID )
7 ^' I9 I/ V( h* y2 P {
' C' L q! i, B6 Y% {" C6 I+ ]4 f case 2:
) c$ a! @1 P" x; b9 ^ {6 D# y, m9 {, l+ F( W" p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( m5 M4 i2 J; C: U/ [3 ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( N1 n/ n; y2 T) `2 @/ \ {
& z- N% Q, Z8 D) Z! H break;0 k; T4 C" P! T2 Y
}7 m: r" a. G& O9 ^2 t0 x/ F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ d* N0 o+ |. w5 n) n% {3 m {
. S8 d. |9 j. z" c5 d- d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 L+ ]' }4 h, } if( !pItemElem )
1 A$ v/ J# d& J continue;3 s% H% l, j! s0 j
if(pItemElem->GetExtra() > 0)
! P+ y9 g \0 d: j3 y- s; a$ J continue;1 ?" e* k9 U) b* }! A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " y2 K8 F* p. K! X& T1 v+ r
continue;- W) e0 f2 H3 r5 C L7 ?' u8 B6 P6 v! o
if( g_pPlayer->IsUsing( pItemElem ) ) ^) k6 t% m, p* W
continue;
- d$ N8 s: L7 W& f if( pItemElem->IsUndestructable() == TRUE )
* T" e* x$ K+ h0 Y: y {8 A: F" i" C2 ~2 ]+ u, @/ x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# A4 i8 q k) Z6 O; d: B
continue;
' E& t/ \$ M( n0 M$ b+ d }
7 q6 y. u! Y, i1 k$ o8 v% j+ k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- `' p1 b+ X* r5 [' }( m
}
2 s8 Y' `, E, L( M) E3 B- b7 R k break;. G6 f7 A, r) I
}% v1 \0 I- s: S* s: @
case 1:
: b; y; n" o& L' [: F {
8 x" ?- u- g" U- S; r- E5 |& T //整理背包- s: ]$ }1 s8 J+ A) C4 h1 r. x
//////////////////////////////////////////////////////////////////////////
, q( @9 K& T' O* h- a# k( w h/ ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& X5 U3 b% R& R# E/ C1 O3 r
//////////////////////////////////////////////////////////////////////////
: g. A) U; v8 `- {* e6 x //////////////////////////////////////////////////////////////////////////9 P' M W: D$ e) `. r( ]
CInventorySort* pInvSort = new CInventorySort;" C) a/ U3 Y, J. W/ A
vector <sItem> vItem;
) x2 Z0 s' h9 B/ M vItem.resize(MAX_INVENTORY);//初始化大小
9 t( @$ o- }# d5 B //////////////////////////////////////////////////////////////////////////
- @2 Q6 ^$ |" Y- h( U! J8 I //填充数据
. x1 R) R( m3 L6 @ for (int i=0;i<MAX_INVENTORY;i++)8 W4 Z* s0 ^. f
{( v! c) v" M+ u( `) ^! o$ O2 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; y5 H7 e$ E8 {6 g if (!pItemElem)
5 ]8 ~. _5 D- Y0 v: a/ m; d. C2 z {. m- Y+ v( {9 E, ~( z
vItem.dwKind2 = 0xffffffff;. w0 p" ~$ d; {. g5 L
vItem.dwItemId = 0xffffffff;
5 E8 ?0 r5 ]! q: W6 p vItem.nIndex = i;5 i( s. C& \: i6 a8 \
}else {
% Y! M/ k, L% I2 b ItemProp* pProp = pItemElem->GetProp();
# }0 t' D9 X: b vItem.dwKind2 = pProp->dwItemKind2;
. M: T; K& Q8 I) v4 W vItem.dwItemId = pItemElem->m_dwItemId;
& |/ J, W! A0 }3 p) Z1 d B4 f$ E7 X vItem.nIndex = i;
+ i! s3 C# N2 ]6 y6 M3 S, e }4 s1 j6 \" z3 z' l! [+ \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" F( ?! K" i- R: ]; S- w8 R }
" w) i! J8 O# J0 H* O* V! D //////////////////////////////////////////////////////////////////////////2 m8 i5 ~' C Q p
sort(vItem.begin(),vItem.end());//排序
8 A% B# D! _6 C& m# u //////////////////////////////////////////////////////////////////////////
4 h9 i; W1 v+ A- P) I8 O //交换5 [. U; M- C( m& k* S+ i/ A" ~
for (size_t i=0;i<vItem.size();i++)5 u% d0 s8 C1 i& W; Y1 K \+ J8 N$ R9 L
{+ E5 h/ g* o' Y8 U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); V0 |/ m G: Z0 h$ C: @0 n+ J# [
pInvSort->Add(vItem.nIndex);
. g8 Q6 m. I! q7 X }
5 w* k% q0 w. ^- o" K: j6 f0 e BYTE nDestPos = 0;
0 U8 f( Y, X2 m% Z v for (int i=0;i<MAX_INVENTORY;i++); v' A# q+ l, u$ k
{8 W3 x8 Q, a* ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. N( z6 Q* L1 Z
if (pItemElem)
2 i8 v% p: x" M. f6 P {( o0 Z+ ?: c& u
if (IsUsingItem(pItemElem))* [8 }, u/ n E1 }
{9 @' z7 J G" w7 H/ u2 n9 p0 e
//这个位置无法放
7 F+ _, \- d% \) t3 ~0 x" k nDestPos++;
" \7 L5 Q% H8 _& l5 s8 T8 y! o( O' D& e }
- g6 v7 L! R7 ^) I7 E d D' A7 O }( k5 j j7 M" c
BYTE nSrc = pInvSort->GetItemSrc(i);
$ u" K, _ {1 {8 ~# C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 |* m3 T7 { O
if (pItemElem)
7 {% k& O6 I8 h4 S {" a/ ]+ R/ g4 f$ ~8 W+ p' |
if (IsUsingItem(pItemElem))
$ D# B1 F. @0 { {
( ]& r: D" j$ |; n# g //这个道具无法移动,跳过
^2 W7 M, V0 O( T* k! P5 M1 p continue;
) C8 i. R1 G& o$ a# M, z* Y% Q7 E" } }7 T# x& Q* V& L. M) F
}else{) r) R* ^+ }5 ~
//空位置 不用动
% h( y2 c( x( m5 ~ Z5 y continue;- D U. L/ `4 T" ?& |1 l) @- I! @
}$ U/ d3 f: L; o. D4 \6 o) F6 Y3 x* N
//////////////////////////////////////////////////////////////////////////
/ ?" B% C. H1 ?( i' Y | //开始移动: {9 X* \& @3 B0 C
if (nSrc == nDestPos)
- ?0 p' Q/ W8 y. G {
* j k- A2 c! x$ o y //原地不动 X& P5 g' ^3 t( m3 }6 E
nDestPos++;1 q4 b5 a; i8 {+ Y1 E" g0 e
continue;" W# n9 u) @+ Q4 j. B4 l- N2 z
}
) s2 x9 ^& |7 Y8 x) w pInvSort->MoveItem(i,nDestPos);, |( F/ M& ?1 }/ u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& A" Q- m5 ?$ i; s
Sleep(5);
) p: _7 j) c- r- l( k, d" R //Error("移动 - %d->%d",nSrc,nDestPos);, w. B2 x2 N2 {, Y( H7 o8 o. D
nDestPos++;
% B7 i) ^# s* ~$ ] }
! ? ]3 N( n' |8 o5 E9 x! \ //取第一个元素的信息
: g1 S3 L7 G7 ] v5 I& l4 z" c /*
+ z/ A7 R. @+ k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% g# e% P4 M5 { ], Z: a7 G
{3 H% U# K2 Q8 G3 ?) ^6 K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 `; V- Z+ J# z# l! v$ X1 V0 D
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 q0 [# B% Z; P% m3 s; t/ ^# H } N# i- P: ]; O$ x7 L
*/' N. `0 m5 C6 b$ c6 Y
/////////////////////////////////////////////////////////////////////////// J1 p# g' t: p8 V8 ^; x' Z
break;1 o3 [) _7 n6 W* i I- b6 O
}
k2 |: v( |7 }! H% X } / Q( |. {. p% x; @- D4 L% T4 F
}" ~$ e5 N; W( h: w1 v* ?/ Y6 O0 n
m_wndMenu.SetVisible(FALSE);
) T$ A7 _) m( S( _7 o
! H F! G. e1 N. k; p7 q% K--------------------------------------------------------------------------------------------------------+ a# D. Y& @: N. y8 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ u/ ^5 E7 [: q' u
{0 N. Y3 j* v! j2 j
BaseMouseCursor();
' [* n4 ` k) I1 \}
( k1 q# o' U' j- m7 q7 R在其下添加:6 O8 N2 N! q8 M3 M9 b& Z" h" H' ?5 v
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- y8 ?0 y0 o$ [{. ^' ^5 z; G% ~7 U {. j
m_wndMenu.DeleteAllMenu();* A+ U: ~8 _8 _ ?1 T9 a
m_wndMenu.CreateMenu(this);1 [1 u: m. {! v9 A% S8 C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 H" B% g' ?: i) X; P7 _4 `& }. e
4 O1 a7 E7 j& J' g$ |
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ ^0 g3 ?# ~/ v' U4 `) s
{
4 l6 ]( u: Q6 z. B //P以上级别才可以删除所有道具- L5 G% |; Z) ~$ c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 ]3 B( R( y, S, _
}
: H3 L4 |, J$ m% k! C& im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& o T3 ]' O1 a! u. nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& t7 k5 @ _$ V1 k' u
m_wndMenu.SetFocus();/ s6 K2 G' M9 S) h" d
}6 R4 j2 J6 @! a0 S
------------------------------------------------------------------------------------------------------------
0 J5 h: s# `& T- m! v*************************8 `+ x6 D: ]) q
WndField.h文件, v3 m6 j3 p& @. c \
*************************+ O: K2 u* s N* y# m* A
搜索:BOOL m_bReport;4 F6 b' K- F+ I8 x
其后添加:2 W, g& k P% y* _) x
CWndMenu m_wndMenu;9 g% K E) \+ o9 D- I+ L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ F5 L% B; `8 b其后添加:
- W! U4 D1 _1 O4 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);( [# N% b+ G6 B
& \1 s2 m8 i5 T/ s4 }2 W* S% i
; H! a0 J0 S0 p# p6 C5 O D% \ |
|