|
|
源文件中_Interface文件夹下WndField.cpp文件
: P8 Y+ l% O- _6 _ _: c: s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 r" m$ a( y( s: `. K) L
! m( Z" @/ g' x9 }6 w
struct sItem2 y6 \4 [) ~' N
{- K9 x2 w7 v* x, `
DWORD dwId;
7 G% E# e! W% f4 J* w& rDWORD dwKind2;* Q! o3 V7 C8 g/ d* l
DWORD dwItemId;# m W2 }) q! R6 @! L
BYTE nIndex;
% W! j: b6 [$ h2 L& psItem(){ K4 G2 c L! t8 U; ^5 d: y
dwId = dwKind2 = dwItemId = nIndex = 0;
% [1 B9 M0 t4 E- N1 l. f+ ~}! Q$ `" g: @& R, S
bool operator < (const sItem p2), b9 P$ v0 \* g* w x* | ?
{
6 P# H a& R* M! c5 N if (dwKind2 == p2.dwKind2)
. ]" D6 a# r, s( D9 B; V, G; w {4 R1 q1 F! u3 f+ T6 c/ o& T
return dwItemId < p2.dwItemId;
5 k0 d' o, G& s" u8 E3 L( s }else{% u" P0 z9 ^8 \
return dwKind2 < p2.dwKind2;& N% o8 a/ b6 m: A0 g$ N& g9 r% V
} ^& O. T6 z7 C. V3 W/ h5 {# g
}
# O. w9 x/ n& ~( c};
& \' n* M! j3 T' g/ O8 C9 A tclass CInventorySort0 ?0 n# [. M! l7 U- I; K5 B
{
/ O3 H0 R/ i# |1 gpublic:, ~$ e3 W/ G' K5 u5 ^
CInventorySort()3 a! C! i- L( ~6 z
{
. F; {+ R( X1 b. c8 S7 w1 f) p9 Y m_dwPos = 0;! Y8 g! n M9 P4 w6 S1 e
}* h `, N# X# H
~CInventorySort(){}$ u# Y/ i0 x; D6 |+ l4 x" U; E
private:
4 ]% L# O6 n' r# B0 d, ~2 isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( |0 o3 n- r4 n. C, }
DWORD m_dwPos;$ A3 {' Y, P" X" Y8 J8 B9 `
public:) V! m3 y2 r1 J( @
void Add(BYTE nIndex)
2 t4 C- v, D! a: H{# a7 {* I3 G3 Z* M" L
if (m_dwPos >= MAX_INVENTORY). {! s$ K' @2 N& K o) R; l- B
{! M9 n$ ^/ o+ }7 d: f% r
return;6 |9 s; P7 l1 u) ~( ~/ j
}
/ [# @! `! @$ ]; _$ h" f' U m_Item[m_dwPos].nIndex = nIndex;
2 ~! {: C2 \4 K& G5 I/ { m_Item[m_dwPos].dwId = m_dwPos;
- o5 b7 g/ j$ e& t m_dwPos++;4 P1 }/ k* Y* W! h$ H
}, K8 m w% f! }9 M& K% w( G, E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 M) k4 ? I1 |+ D' h{9 I1 x: h$ y9 b- p5 V9 M
for (int i=0;i<MAX_INVENTORY;i++)
$ d* s0 W3 s- N* a0 N3 A6 c! V* z {
n( g: {1 o2 G9 f. u if (m_Item.dwId == dwId)2 j# c: I! K0 u& X4 i
{
, d+ \' N ^! U* R# {, X return m_Item.nIndex;. x5 g/ X+ F% y) b' }. o$ o; h
}
8 z; ]0 [: D5 }( @& a }
6 K1 \' u) a8 v: F% [* }. q( l return 255;8 ` Z( G8 _* E& v
}
/ [$ O+ \' e( k/ d. Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 v, j _+ \+ e6 V
{
4 t" c9 U& e1 c+ R. O BYTE nTmp = 0;
' e2 q/ s3 B* k1 {/ [% C% u$ c4 C9 Y- G bool bDest = false,bSrc = false;
6 c2 |$ y# x- G/ n0 \ for (int i=0;i<MAX_INVENTORY;i++)
) O0 @4 {+ T& L* t- Z$ w4 z2 I3 g( N {
$ m2 \/ C* _2 @# f if (dwSrcId == m_Item.dwId)+ C- H9 P/ m" b0 H0 D: c V
{
9 U5 t9 E& [( q6 L //id相等 则 改变对应的dest和src' @; R4 u- B/ |8 }1 A
nTmp = m_Item.nIndex;
' L" ^: Z5 i; c, c3 M5 ^" J0 ] m_Item.nIndex = dest;2 |. @- s: n, m* {$ N5 U
}/ w2 M. S) Y6 I! r4 L
}
" P. m# p6 D G1 [; v //临时数据保存完毕,交换开始
; V4 T) X8 Q- O1 M$ g0 B; h) q& L for (int i=0;i<MAX_INVENTORY;i++)
& I \" P. j" P+ g" U+ h {
4 X8 e! V3 a% i2 w( t$ P6 v( L if (dest == m_Item.nIndex)6 N9 x+ [& m' D: W0 s6 @+ J
{" g! l2 {' D, N. y# a) P% E- x
//id相等 则 改变对应的dest和src
; }/ l+ Q( D; y( ` m_Item.nIndex = nTmp;
- ~$ v% Z4 V% V% t: p }
, ~7 g; U3 F$ }/ @; B1 U4 T }
% ^3 O0 O5 Y( d7 W* I3 S}
' ]8 a$ K: x; Z6 |/ {, w};4 t9 i; b" Y0 i, Z9 a3 m1 e4 H$ v) X% O
-------------------------------------------------------------------------
. k8 J" _! C8 Q9 P4 ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: b9 r) f" B! _& M( V# Y n5 D* n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) `$ z f+ L: X: |9 b紧靠其上添加:0 a- B g8 n1 ?# A
if( pWndBase == &m_wndMenu )$ d! W9 {( Q' T) x9 N8 c- ]
{! I8 ^4 |0 f9 W D4 f( O& X
switch( nID )
% r; T \# e- ^ {
4 F, b7 m. G, L/ q+ G) q Z2 p2 V case 2:0 E" I, R. D9 f# @/ `& X1 O) J7 _
{" X E' m! M" b- {$ @
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* w3 G0 H3 A) L; `3 W( i8 ~4 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) R5 `9 A8 q/ F) c2 J! R" P {' o. S2 U& G, A2 x
break;
! U0 ^9 `3 b9 d: c! f }8 \4 ~) b* `1 o, W* c9 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( q* s6 K& a2 |; @* t/ O {+ o, v' b5 b7 O. e9 m& Z# I) |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# F Y2 Z* f& P if( !pItemElem )) L+ L2 R- z a) V7 f
continue;
. M2 @3 v3 h- R& o if(pItemElem->GetExtra() > 0)7 N9 v; r- n e* Q j# h$ |
continue;
9 g1 ]- x' m" p0 Y* Q( W3 j# f1 d/ ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! b' Z; V1 u% `1 b continue;3 D+ |+ B' q. Z0 @% J
if( g_pPlayer->IsUsing( pItemElem ) )
5 N+ W4 I# n( X+ p% M continue;
, b% v3 Y; n$ d if( pItemElem->IsUndestructable() == TRUE )+ [6 U/ ~% t* v( x5 w% v
{3 P( ?5 G( N4 w' \% K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; \; [6 @: _% P3 P
continue;7 R4 k1 ^2 ^& J3 o- B- H- W
}
, F, h0 {- l# F g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: o G% `2 e7 x) a
}% G, |* |) k! n' l5 @
break;
; v2 V$ z4 U, r' ~' R( [ _+ N }2 }3 a+ @9 j' n9 K! R3 {1 T
case 1:
5 Q3 U4 D% }$ X {
1 |: q$ |6 c8 I$ e ~) Y \5 L //整理背包 P5 X) o$ v: N( h3 ~
//////////////////////////////////////////////////////////////////////////
7 t# G( j' D. M //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! Q7 i6 N, T% K, {
//////////////////////////////////////////////////////////////////////////
# B- X5 m; G2 J+ x+ G- ` //////////////////////////////////////////////////////////////////////////
" U9 {+ G( v& I) n+ D! O CInventorySort* pInvSort = new CInventorySort;& r9 y! B' M9 v8 A& N9 l y E
vector <sItem> vItem;1 v" [7 m" u( l8 n
vItem.resize(MAX_INVENTORY);//初始化大小
~( c/ Z+ J) L. `$ }: `! Y //////////////////////////////////////////////////////////////////////////
5 N$ O1 c7 p6 p! \, x: ^2 ] //填充数据
! Z; i" u+ H0 u; e1 K+ m& Q- } for (int i=0;i<MAX_INVENTORY;i++)# X0 r5 V0 f6 \; i; ], `; J
{" B5 L; v; [1 U* H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 B6 T0 M" R' a& Q' V/ h& } if (!pItemElem)0 V1 y! Z% Z* ~; M, i; H$ [) c# z/ K
{
0 E+ j) ]- @; j0 J9 H7 c vItem.dwKind2 = 0xffffffff;8 {5 ^4 ]: I: I
vItem.dwItemId = 0xffffffff;1 q, h' ~4 j. y/ |6 U) Z
vItem.nIndex = i;
1 g1 ?) U: _" L& |; v) t }else {! c6 Y! o3 ]) [" `, H6 m- O M
ItemProp* pProp = pItemElem->GetProp();. Y: y. L# a3 m- l: \$ C) o
vItem.dwKind2 = pProp->dwItemKind2;1 O/ B0 K) E v
vItem.dwItemId = pItemElem->m_dwItemId;
2 Q5 E4 C: D2 k" I! L& v vItem.nIndex = i;
+ b! @) n! @* k1 Z; K }
8 A3 V/ T( h3 W1 m8 y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' o/ \* g) x( M, N; `" S2 f' ]
}
' U1 V# d8 Q2 S& F' | //////////////////////////////////////////////////////////////////////////
m7 P d( D! V7 h$ _" t. ^) f3 q sort(vItem.begin(),vItem.end());//排序& C# ^; o7 `# c$ r( p4 z- W$ |
//////////////////////////////////////////////////////////////////////////) T( V7 G( C) ^' d) K
//交换9 W" s. N+ C5 C1 N7 z( _
for (size_t i=0;i<vItem.size();i++)/ I* `' h& y- Y5 f
{) f: y+ C0 A1 m% j8 F0 t
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 q7 S5 i5 V0 `( f
pInvSort->Add(vItem.nIndex);
" ?# q/ O) Q2 F/ C* { }) g) j8 x, q7 i
BYTE nDestPos = 0;
% U: ?2 z- a$ O for (int i=0;i<MAX_INVENTORY;i++)+ K P# m3 Q* Q/ @0 H5 ?
{
2 Q" v. Y* Y: V# ^& e6 k8 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 p3 m$ ]% t8 J% N; N- u, [( J# k if (pItemElem)
2 s" h# v3 V0 q: l; v% v v {1 }2 W0 G' Z |
if (IsUsingItem(pItemElem))) G- Q2 i" a6 o; N
{; v5 G; `: P1 j% \6 E0 b/ M( M
//这个位置无法放2 H6 O/ A9 |! X; @) l; s; Y
nDestPos++;
& W& J a# @% N; J }; K4 }4 T# ~; {: n6 x
}# o9 z" {3 i& K! n0 q- V. F4 U
BYTE nSrc = pInvSort->GetItemSrc(i);; b2 c8 i! T8 [: [2 T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) B+ I; m, @ H: w5 a) C7 L0 p
if (pItemElem)
# Q1 ^( h' M- z& a0 m {! J& |5 b+ y6 G0 I; \% K+ Q
if (IsUsingItem(pItemElem))
) a6 n4 J0 X& \' {: t {7 S' `4 P9 U p2 `2 T0 n4 U* N
//这个道具无法移动,跳过$ X0 O9 }! U# D+ G
continue;
- i( O; ?4 V* O }' `/ _& ]8 x; ~$ e1 W& S
}else{
3 a7 h0 d' e/ y, E3 B& D Z! F //空位置 不用动
6 n, m4 X# V: _# ] t% a d continue;# P% m- |0 V' {* Z
}. d" a. S+ r$ l( h* X' X4 p4 @/ ]. O
//////////////////////////////////////////////////////////////////////////
. D" R* p) _$ ~) t+ g/ T //开始移动+ A' r3 g4 W/ |% H# h; A
if (nSrc == nDestPos)" K; U% q; t9 j* T" j3 A- H/ {
{
0 F5 o! d+ G0 Y //原地不动' _6 Z K- H3 \7 V; i4 ?* H
nDestPos++;
% K3 X( q3 o6 D! |& F4 r$ n continue;
9 [, E! g, x9 H" I @& T }5 n1 J% E/ h' J2 q& M
pInvSort->MoveItem(i,nDestPos);
. Q& ~( w) L. r, t+ u! e" z) S g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 |) k: I8 I, e$ J7 } Sleep(5);
- e& h0 x. O. r% E$ Q //Error("移动 - %d->%d",nSrc,nDestPos);
- N3 P4 v8 S, T" h nDestPos++;$ }# c+ r8 |. v0 w5 s
}6 V; k$ K2 z; {# b4 i1 h$ t9 r, r8 a* k, f
//取第一个元素的信息
/ S+ M% m( ]6 S( e# ] /*) l. G. D: r0 {6 g, o$ J$ B% w# x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) N! j' u: X2 L7 M- i {. p( f6 y7 i- @+ w/ _. ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); d h1 I) _- J* V: V4 u% j, e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- X8 ^. ~7 P: i }. p }! ~- O% e! Q5 z8 n% p$ E
*/, R6 _1 U! a/ L( w( w
//////////////////////////////////////////////////////////////////////////8 ^+ L: U/ A5 |
break;, B# L1 ~3 `$ |8 L p
}: n9 I5 X1 Q# u' e+ _
}
+ r, ^7 J+ H5 L# V T" o}8 G- F9 {, Q( Q- L- k0 N0 o- D
m_wndMenu.SetVisible(FALSE);
5 W7 r+ O% Q: `; m2 h4 i$ |) _+ M0 [5 i) v+ A; s! }' T2 g
--------------------------------------------------------------------------------------------------------# ~3 ]9 ?. l1 F2 }- S% I4 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); [# J9 w8 b. j( I* n7 ^
{
# [' ?7 A5 @! JBaseMouseCursor();
* R$ E2 U8 ]* F$ b5 I3 f; v}& p8 c3 [$ D% ?1 F" C4 h
在其下添加:. e/ ~: T M7 N. r3 G+ ]- j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 X3 m. T0 Q1 ~( h) A; J4 Z! _
{
1 c6 O$ U3 D9 g$ Y0 r( Hm_wndMenu.DeleteAllMenu();
( ~2 u$ Q3 `6 n/ U9 Bm_wndMenu.CreateMenu(this);2 v E7 s+ f/ U/ w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 F5 V$ M3 { L& D
- }( h8 m) r1 q+ N6 z. k7 J2 ~. k1 vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H$ j5 P" w, V/ [9 h& X P
{
) r# d0 R: g) d4 p& j9 E, t; J- e //P以上级别才可以删除所有道具: u* l. D* b: Z7 A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 o* O( G& m% m ^- n
}
! X5 }) x7 |9 |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& x7 a* H& D: l2 O+ A* |' `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 c7 V. Y. Y4 \
m_wndMenu.SetFocus();
2 c2 ^8 i3 ~' ^ t1 K& _ u}
/ I) P# r! A: h, R. y% G------------------------------------------------------------------------------------------------------------/ t) P: h' C, b1 K5 Y0 T) I9 T) Y
*************************$ h& v% b) r F# G/ r
WndField.h文件8 {: H) J) s& N
*************************7 T* p; S8 i- k4 v
搜索:BOOL m_bReport;
* F) `0 G4 B# [. G7 O2 i其后添加:5 X" O5 P1 h: l; v$ u; a/ c
CWndMenu m_wndMenu;% _# U. g0 }, f1 P* d7 L$ z/ B( |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
?% [: Q* d+ c% c4 r其后添加:
$ W' q) ?1 Z; Y+ K1 Q# v: F4 P avirtual void OnRButtonUp(UINT nFlags, CPoint point);
* ~& [8 p# p- i& W9 _+ Z; \/ A6 F) x1 d1 m
) \) X0 u0 I Z$ C
|
|