|
|
源文件中_Interface文件夹下WndField.cpp文件( {- k2 ^$ q- @& e3 i+ ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" ?3 }0 q' x# K8 W4 {2 {$ F' p0 r- s* `- A% f8 H
struct sItem
) b4 a4 h. n* q4 d{' {- q/ J5 q% } e9 ?0 p/ o
DWORD dwId;
/ [1 }8 h0 T$ _" wDWORD dwKind2;. G' H. n' q+ m" t0 R, p8 F7 o/ k
DWORD dwItemId;
9 G0 _! a/ ^1 c& K- K2 qBYTE nIndex;1 Z2 q+ K1 k6 o
sItem(){+ s! G, [/ E3 j+ R
dwId = dwKind2 = dwItemId = nIndex = 0;, g2 g* K* H; g2 a8 C
}9 v; o3 | U) j- k1 Z7 a6 `& \
bool operator < (const sItem p2)
: l- p: r ?- r* n7 ^' M: d{
$ B# @) N/ Z. v/ Z, Q8 J* i if (dwKind2 == p2.dwKind2)
2 u4 S2 s ? N- q {
, i" i+ h6 S$ [* g: I# Q% L9 A return dwItemId < p2.dwItemId;: \4 x3 D0 A/ U5 x' f
}else{/ I& f& V; m6 N; e
return dwKind2 < p2.dwKind2;0 a* z) q- c, B' K7 {' C3 X2 q
}% {' \# G' z. O( Q
}, G0 Y! [7 G+ }1 ]) ]; D8 q
};
9 C `4 b* ?3 ^" U/ t6 J2 ]class CInventorySort
* H) n, I) n2 K, m, O# n6 ]* ]4 Y{
% T2 h9 Y( t/ ^* Fpublic:/ J+ I' ?' R8 ^5 s
CInventorySort(). T+ z$ c' v4 ^' G6 T" J
{0 k" D a; }. W, [+ N
m_dwPos = 0;: ^* M) G8 Z5 q2 X
}
; r6 F8 l$ Z" z6 \~CInventorySort(){}
7 t X7 A; g: J- cprivate:# \% y1 S2 `: w
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 R8 o. N, [$ D6 ]! F: x: tDWORD m_dwPos;+ I% m r2 w9 @! e5 s5 r& |
public:
3 C; H$ R8 V4 g& E1 nvoid Add(BYTE nIndex)1 R) j' V! Q J. }6 V( s
{
+ x, _5 r& e" H! S if (m_dwPos >= MAX_INVENTORY)# X4 @& s+ F7 ?
{, R; j0 ?, {5 j
return;
. R+ e c& Y+ J. E; W* n }' h6 L6 C: y9 U8 u- J1 ]
m_Item[m_dwPos].nIndex = nIndex;5 b9 @4 l9 k. |/ J
m_Item[m_dwPos].dwId = m_dwPos;
0 Q9 v, M+ C- f; z7 S m_dwPos++;) E/ R- J! @) q) T2 Q
}1 ~" l% `- g# F) z$ \8 X3 J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( s* d1 a' [* H3 R0 I1 D4 G5 s{
* a- D8 F+ `' W. ?( A0 K( _* d for (int i=0;i<MAX_INVENTORY;i++) \8 H, L7 l& T' n; e
{
# n+ ]% H' K5 z; c' H7 h if (m_Item.dwId == dwId)% M; x$ T F; Z$ y# a
{
; c4 X1 S$ v2 m/ T* s2 K return m_Item.nIndex;
. B) t; i) I$ B9 s }
+ S/ J) ]! }) d, H5 X" R- ` }$ G2 ]' K+ L5 s( A# Z! \
return 255;5 M b1 N8 P: p1 ~4 x
}
, `( |( `/ ]1 C) p8 ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 p3 J+ d! ~# T, q" @6 p6 X' L{
c. L4 ?: n0 T1 C BYTE nTmp = 0;
@0 e" w& P0 V+ U bool bDest = false,bSrc = false;
7 o% i' n8 [4 O- i for (int i=0;i<MAX_INVENTORY;i++)
) R! u- x8 y4 X6 ~- G: R& T! C9 ]$ j {
% z- D: T% ?7 |- g; A8 w9 M7 }( H if (dwSrcId == m_Item.dwId)
; t7 L9 K' ?) t; P8 C {: @8 j& C. x+ Q% f
//id相等 则 改变对应的dest和src% ^* y8 e; p$ s' A5 S9 X9 q; R
nTmp = m_Item.nIndex;' Z; ?8 }) Z& B* N4 y. t$ i+ Z
m_Item.nIndex = dest;
/ m5 U4 m0 i4 o4 [* O }/ d: w6 ]" @6 b/ X8 U; n* ^
}
6 E6 a' ~7 B; N' b; a: ?* a //临时数据保存完毕,交换开始
. m; f+ e/ e: w# H4 a for (int i=0;i<MAX_INVENTORY;i++)+ V3 X o& n% s3 Y& M
{0 \8 T0 c0 t$ {# O% r6 `
if (dest == m_Item.nIndex)
* r+ h5 @0 q3 @+ Y0 a+ q {% i4 n8 s/ ~! ~ u& l% j# Q* A5 R& ?
//id相等 则 改变对应的dest和src
c6 |/ u* ~6 V: h' ^; O m_Item.nIndex = nTmp;
. b) W8 b$ y* s }# \+ Y6 H; m% }( v, i5 v4 {
}3 u; b2 n" @ C4 r K1 j
}
. I' y- r5 M' W8 B8 p. e};6 w' E; G& O Y0 {3 e" ^0 K, A" N
-------------------------------------------------------------------------9 \8 u# N* ]& Z3 |5 g) ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, Y, O$ e$ t8 r r) V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 P& g( d) D2 i- N" W8 y" W
紧靠其上添加:
! x6 W# W( \! _+ r% {if( pWndBase == &m_wndMenu )
4 y P: |7 ]0 D& R{ L+ c) r$ L: Y; s
switch( nID )
/ u' z) X6 S+ m; E2 Z {
9 @* [: @9 W. M: ]& N case 2:8 k9 x; q; ~: {. g9 j; g; o. l
{
- K0 N2 a, @* A3 j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& w( { a* V+ U4 C ^ { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ L' j- e* `0 \) I# K: y6 d {
% M- x# Y" M; \) w9 c7 x6 h break;
/ \! p2 h, \- ?- v6 } }$ r) O- k T3 C3 L, j
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 p, B* l2 F5 C0 u3 c {
) D9 r0 x z. r/ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- @( ^7 D. u( N( O( p- f if( !pItemElem )' l6 T4 H: E8 H& t& C
continue;
) p9 M& Y8 D, l if(pItemElem->GetExtra() > 0)
- g; ^ w, n7 f" y6 r% g continue;. b4 Q- B; t$ d$ d1 K2 C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 Q3 p/ f! p0 O3 O continue;, N! z) m$ K0 h" [
if( g_pPlayer->IsUsing( pItemElem ) )2 [4 o1 r- w' u, T
continue;! m+ k" C f/ m: }3 Q1 V5 N: t
if( pItemElem->IsUndestructable() == TRUE )$ f' z8 Z, B6 h' c' i
{/ d B& N! K( W! ~1 a! K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* @9 n9 q8 {- q# w; D6 ` continue;
9 a8 y2 Q0 ~" {1 ?# q4 M }
4 z- t: W8 I. i% h: {+ B g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# K- `1 q% v: X6 \8 S& z
}5 U, E5 \, z; f6 a) [
break;, c% y! w- ` J& @ _% G, M9 c! q
}# _8 ?) }( L$ U. X5 D/ D' {; ^ _
case 1:' w# _! L- G# T& e. Y- @, h4 ?
{8 v2 O; G2 t5 X8 I
//整理背包8 w( n( s( f9 p
//////////////////////////////////////////////////////////////////////////, F9 T3 F! }( h+ B) C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 \' T, `/ T+ v5 C+ P1 P( g( a //////////////////////////////////////////////////////////////////////////3 Q9 z8 C( k) h4 S- J
//////////////////////////////////////////////////////////////////////////
V1 m0 ~' |2 a CInventorySort* pInvSort = new CInventorySort;
* K8 M7 M# x/ ?. Z vector <sItem> vItem;4 V6 o; s( W$ C% q8 L+ P; A1 S
vItem.resize(MAX_INVENTORY);//初始化大小7 Z0 K/ L% \7 Y) s
//////////////////////////////////////////////////////////////////////////
/ G+ y4 G! _. H/ p- w( s //填充数据
8 F( s* U4 }( ~& [% Z! D& W" W- i6 ` for (int i=0;i<MAX_INVENTORY;i++)
8 l; N1 M( D8 Y" A9 e" p! c7 Y b {
. m/ U+ |8 }2 w/ c4 x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) Y0 g5 j# L9 U8 J: K
if (!pItemElem)
& Q7 d2 W3 f8 J! H+ p" w4 ` {. C( l% T1 Q; p- Q! r
vItem.dwKind2 = 0xffffffff;
3 m# \9 ~' ~ v, S2 i1 _ vItem.dwItemId = 0xffffffff;; [6 r' a; _. Z3 R2 O# c# l8 ]9 n+ T
vItem.nIndex = i;+ z9 y! _; _# r9 i i2 Z+ s+ l
}else {
: e% k0 [2 A# d7 w. z ItemProp* pProp = pItemElem->GetProp();
- J# o5 x, i# N$ b0 S vItem.dwKind2 = pProp->dwItemKind2;/ l8 P* R$ l" d& n9 p
vItem.dwItemId = pItemElem->m_dwItemId;; c) o6 O* x a6 z" |
vItem.nIndex = i;4 j' a) X8 y# C9 a$ `) r
}
! R: L5 @+ M! K# ~2 X' r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- c- {- V: ?; Z* `6 B9 m }0 H% T) }1 f( ~: S- t" X
//////////////////////////////////////////////////////////////////////////
% S1 Y9 v: k/ l$ x$ T3 v, b. U0 [8 \( n sort(vItem.begin(),vItem.end());//排序
) R5 G8 g& ^3 z% k% o //////////////////////////////////////////////////////////////////////////* t2 p3 v; L3 @& `1 |
//交换
+ X8 v6 c$ {' Y for (size_t i=0;i<vItem.size();i++)
# e0 e1 B7 e9 S/ U; C) G+ t {( Q, x& ~; P: \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: M/ x% m4 h& [% z, {. B! x0 L pInvSort->Add(vItem.nIndex);
; p3 I$ I" q& l7 i9 f! F }
* y( b0 g. C7 X+ ^! @& `- @ N" n BYTE nDestPos = 0;
8 ?. u+ J+ k* Q$ m1 M" v5 ~0 S; j for (int i=0;i<MAX_INVENTORY;i++)
" b3 r# D9 I, @: n8 { {
$ e$ T8 ?3 B9 B) Y/ b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ M e1 m& M, ~( z- [! {" ^
if (pItemElem)
+ X9 a* o# T, x& B {0 G0 ]/ }$ T8 x2 O
if (IsUsingItem(pItemElem))
5 Q* q& f+ L0 ~9 a9 j! z {
. o0 m1 a( C2 G) W //这个位置无法放
' d0 v5 q* n3 ]' V( J nDestPos++;
$ p e2 g$ o, j( B: N }/ }4 y$ t9 T& z0 p
}
3 C: m2 w; ?& s# ]2 x BYTE nSrc = pInvSort->GetItemSrc(i);
9 c1 d& ?+ I" J9 c- o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; _3 q7 i& J; X& s if (pItemElem)! {; B$ U5 A- ^4 J% |% J) B5 `3 I
{3 @: T7 T) M' m7 b# |
if (IsUsingItem(pItemElem))5 M0 C0 ~6 ]6 ]
{7 |* V9 r/ m7 ]% m+ k8 _
//这个道具无法移动,跳过
4 }8 M( F2 _1 i# N7 _ continue;+ B9 x/ J2 y6 x1 w7 l
}
! U& H2 {1 n0 c: N( x }else{
) S2 i$ A6 F0 E //空位置 不用动# x# @ I9 m. Q! [8 D$ W! U' @
continue;
+ G5 X- ~ r' V1 e }
% G' l- B3 h" n5 K5 L. p //////////////////////////////////////////////////////////////////////////
) F/ D2 O9 @$ H% v/ M3 B //开始移动
8 Z. E6 z; R _" w( k) v- u) i if (nSrc == nDestPos)
' Q+ ?$ M G+ O1 R2 d& Y) c- g$ B {/ g. G. C* U; k( T
//原地不动
* x" ^9 q- j, y3 v9 ~3 [7 h nDestPos++;' A+ O/ ^! r3 j: v' H: y3 D* c. T
continue;
' h. v$ w( ]. p7 @$ ] } }8 g0 q% a- }! T7 c) G2 T! N
pInvSort->MoveItem(i,nDestPos);5 L3 _8 ?) |$ P! N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 F7 f! |; X! ?% O0 |2 R Sleep(5);
& j# `' n5 N# d6 o* a$ G2 k3 E //Error("移动 - %d->%d",nSrc,nDestPos);
K" i$ Y5 V( R" u% w nDestPos++;
4 [0 K; J' R' F }
7 r0 j+ O" o1 b: T/ C //取第一个元素的信息7 W9 ~' f3 a) S
/*
2 j- |9 Y' z4 ?# a7 E* \4 A) j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). p8 A5 }4 _* c3 T
{
- q, ~2 j0 t( w e9 \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; F' x' R& R& o6 S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 X1 S! M; r1 p1 R1 `# u: c }( n2 |+ p2 B( r: [( @
*/2 V/ O( N* t. d
//////////////////////////////////////////////////////////////////////////% k* \+ N$ m/ F
break;2 d7 `4 ?" R z
}1 }8 Q1 e6 ]# H/ \. A
} 3 g! d9 p' _" J8 D' l4 I
}
3 C; {) e0 i5 Mm_wndMenu.SetVisible(FALSE);5 `1 k( j+ p& [1 D \
5 G3 L3 e( P7 u5 t \ F* Q1 R# p--------------------------------------------------------------------------------------------------------. t' R' [7 N3 p5 L( W, T1 V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 v* A% b! ]% a/ G2 r# O! l
{6 {3 O; v2 x: y& ^( d2 F
BaseMouseCursor();
1 s( A, H6 ? R& Y# J. x8 x}: e- ^9 b2 A( S' F( g
在其下添加:5 k/ D' M& M/ e/ v* p+ i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), Z9 b. l* Y0 P7 O
{4 y! P$ N+ s2 E# B0 A; h" D, S
m_wndMenu.DeleteAllMenu();: i: h0 W1 f: V" d7 r
m_wndMenu.CreateMenu(this);
3 [9 I V& y: k+ z1 }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 a' p* Z# {7 J/ }
, h) ]1 [7 E/ A9 E! m, M- \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* K- Y2 b1 |& @4 T0 W3 N{: l+ `( d- g1 }$ L
//P以上级别才可以删除所有道具
" I$ g# m; U. J, @4 S2 k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# L! w8 S' l9 C7 q" ~
}
8 h, D7 C- @( ]: I3 {! Cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 @- F( y, u8 u: H4 N4 j& ~" ?0 o; E% o# v) km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 q% ^/ o- E3 E; \6 W" S# V" x+ Km_wndMenu.SetFocus();
( h9 l! e X9 L8 _& W}
# ^( I i, o2 l2 t# n$ a$ B% X+ d6 N------------------------------------------------------------------------------------------------------------- b" ~+ I: D9 B0 p4 p# K: U& y" L
*************************
2 \) a4 ^1 H1 n+ }9 u9 p/ E/ T# kWndField.h文件9 V4 `4 \% B2 }8 U! i1 B$ M2 Q9 c
*************************. P0 x6 G. f; U. M
搜索:BOOL m_bReport;
" M' ]5 _$ _; X5 }7 C其后添加:
3 u5 H4 n; M+ ?' R! Y+ A: {CWndMenu m_wndMenu;
* Q3 o B; `- ], U6 M3 F3 z: v7 y6 U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 \# X Y& x! ^* o' O9 y: Y% y
其后添加:3 O X3 E, c- b' a# }# K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 ?+ \7 o. E5 |9 @" G) i1 P% B1 T1 j
7 T8 _& v* B- z4 O" S" U- X1 o+ x8 F: U. S% i9 {
|
|