|
|
源文件中_Interface文件夹下WndField.cpp文件7 z4 H' Y" O# |" F" Q ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 N U) f' ]2 I" |7 D
! n8 b4 S8 T* [- P/ ~) ?% B( {/ X6 F9 Tstruct sItem
; D, k, s1 E, e7 c$ c6 ?2 R" @{
+ [$ x# ^! o/ S6 ?; x( f# _DWORD dwId;
2 S( l+ Y8 Z6 S9 x0 BDWORD dwKind2;/ H& ^! |& T2 P/ i( k) W
DWORD dwItemId;
" _/ L8 n" k2 c: w( [7 PBYTE nIndex;8 [" h; H3 m! f7 T" [
sItem(){5 h" ~ h$ d! d1 A
dwId = dwKind2 = dwItemId = nIndex = 0;: y) w6 Z: m) }, X
}
* v5 f5 y+ J* [& Rbool operator < (const sItem p2)9 @ c( r, X9 E, l+ g
{
; Q+ X, Z- ~/ O if (dwKind2 == p2.dwKind2)- a" q" C1 d2 \/ B5 E, Q o5 r/ Q7 M
{
( r9 {5 C2 Q o2 Q) p" e5 O/ b return dwItemId < p2.dwItemId;
8 Y2 H0 e) Z- L: U3 e: R! Y }else{
$ |( g E a2 z return dwKind2 < p2.dwKind2;! \- |" o- [5 @( o# h* V, k) v
}
/ f1 M8 ?, C+ s5 j$ g% N}# ]$ v1 o9 X1 _) k- {& V
};
# p( V% f, C5 p- Y; ^- T" Yclass CInventorySort
' J9 H7 h& s: R, o+ G{6 O. M3 O' p& V3 H
public:" ?7 [; m- V5 p+ {3 B# Q
CInventorySort()
9 k8 O6 t6 |* ]1 P% d{
, Y/ X( N- g! L m_dwPos = 0;* V1 I1 n6 d& I4 u- Y/ k t$ m
}/ ]4 P) ^; j( P2 ?* c
~CInventorySort(){}0 f: V" j/ }8 h' I# F! `
private:
1 ^$ s1 e- w* A* J. S7 i) }: R. rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. a, @/ T9 p4 `9 w9 L& e' \2 r
DWORD m_dwPos;7 s# b! q+ z; C$ c1 J
public:3 H; t# L& ]' b* _% B6 ~2 e
void Add(BYTE nIndex)
* l( |9 G/ U3 y& M4 {; A. O4 F l- C{
6 A( m7 z/ K) d$ Z7 W if (m_dwPos >= MAX_INVENTORY) A0 b! P! m. g/ q: q( A
{, c6 z$ j3 i8 w7 n
return;
7 _ o z6 P6 \ }! E, r1 I4 m! d) v" h( _7 i
m_Item[m_dwPos].nIndex = nIndex;
9 N% [' F, v+ B3 I. B7 C- @ m_Item[m_dwPos].dwId = m_dwPos;( `+ p( ?, N% U
m_dwPos++;
) c# \& b3 B6 J, ?5 B0 j}
' W5 R+ w! I6 n" a( v! y: u: vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. i6 V! F5 A( l, }* L- J
{
$ G: l! }$ i( r3 H1 i8 U for (int i=0;i<MAX_INVENTORY;i++)
4 |9 o) k) r4 u( J ], v {" T" P6 Q* Y) ^2 ]/ S
if (m_Item.dwId == dwId). |4 j6 |. @, x4 e
{6 q6 ^1 x; g, a* G$ a* ]1 O
return m_Item.nIndex;
& C: L& [5 Q0 `2 d% E }4 a+ {- y6 }8 y! b" x
}' C& Q1 `* ~0 T$ v
return 255;5 L0 o2 s; s3 \
}
/ O+ t( O* _9 Q- v0 Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: `; B# R( n, j" @{/ b, M Q2 I/ T& N2 l+ w
BYTE nTmp = 0;
1 Q: T- J$ U' ~6 H9 u bool bDest = false,bSrc = false;
3 P" d8 b5 U2 \6 T ^# r, i for (int i=0;i<MAX_INVENTORY;i++)
% a0 w/ _6 }$ I" Q/ r5 e0 r" R {
, e1 M4 N% Y# F7 J9 ~$ |7 P. F w if (dwSrcId == m_Item.dwId)
6 n5 n9 E* h5 g8 I% @ { w N7 h- J( r" M) @0 ~
//id相等 则 改变对应的dest和src6 P! T S2 r3 O* U% _+ O# B
nTmp = m_Item.nIndex;- U* f) ]0 ^5 b% R: n& h* B$ J
m_Item.nIndex = dest;
( Y: J v `- F7 x } |, ?+ Z' ]9 C0 O, n- O. o
}* V& a5 t( Y) {7 U) w4 l& a; S
//临时数据保存完毕,交换开始
; j: u- m0 _+ x for (int i=0;i<MAX_INVENTORY;i++)
) C. P d5 m8 ] I, |3 J* l K: x {4 Q8 r3 S: T# {7 |; r
if (dest == m_Item.nIndex)
) s2 L4 o( ^8 g4 m: m+ }2 `" I {7 z/ s( J3 V6 Q+ i2 F0 H
//id相等 则 改变对应的dest和src
! d; q. l6 V; J m_Item.nIndex = nTmp;. C* k) E' Z7 h' U
}
7 b" s+ X7 B1 ^) a* _& k7 t( u }
% f& {9 U8 C/ L( k4 X: Y; n. n$ t) `}
- C: q& ?" v2 S5 O. `: f};
9 D! K$ g" ~6 A-------------------------------------------------------------------------& l, |+ ^- b) ^! ^2 ~1 } _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& L6 M" b8 D3 o0 w5 i+ ~6 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: J/ ?$ U. N5 s9 ^紧靠其上添加:
3 z- O0 m2 ~2 |7 jif( pWndBase == &m_wndMenu )
$ ?+ _: u5 v% Q1 c7 ], s{
" D) `, m- q) Q% b! i. h switch( nID )
' R. w9 ?0 Q* P5 ?8 v- n) p {/ z3 e% h- C0 K5 \! J! u% O
case 2:
9 s/ @2 D& y5 r+ B" |+ _ {
' E5 q8 z3 e: M. p+ C8 e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. `; b, x" d1 z* B+ |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 B5 b& k; C5 l) u! b# g2 F9 d
{* L P# g: l$ e; F0 q% d5 ~8 d. k* x
break;2 ?7 R' V. N8 U9 E
}' [$ P3 _! m0 y! c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! T, g6 ^5 A- ~# a. e3 z1 d; i {
0 V/ U7 t& N6 b3 I4 n( Y. Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ T1 E' w6 l- M$ H R& D
if( !pItemElem )( o4 N7 j0 \, y1 X6 G
continue;; h2 _3 _* {- ~7 w# e( V! |3 i
if(pItemElem->GetExtra() > 0)! H: K; w" n6 S2 L1 x
continue; b7 N7 E: A0 {. \8 i1 i/ }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 Q& h& b( _6 |/ V. H3 u continue;' w) l0 }9 x1 |: x% s2 X& q
if( g_pPlayer->IsUsing( pItemElem ) ). `1 E M ]4 W5 t5 Z( U
continue;
; l" a" z$ r9 U if( pItemElem->IsUndestructable() == TRUE )( v' ~- `" l4 N0 V0 \( b# C( M. {
{
, R8 ]6 l: i" y& c! S2 |5 q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ a- d& d$ I' H" b3 V' P. ? continue; y( S+ O q- H
}4 r# j# s$ d) n0 g! f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. X; z/ P7 i) R. U' m( a* d/ [& T, B }7 _( p8 t1 |0 d Z- K
break;
3 G& Q) z3 Z% C( U5 |) d }
, H& }& @& B4 c) H/ F case 1:; K9 F7 j( |$ `
{, f" L0 ~9 r& C& | a
//整理背包
/ `8 _3 Z; d8 h* G- A" E# m+ | //////////////////////////////////////////////////////////////////////////
& {$ k9 Y7 K0 ?3 K# l7 n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 ^/ T0 D5 H! I; K# ~) u: k //////////////////////////////////////////////////////////////////////////; |! c) F/ r% ^ v. M) R
//////////////////////////////////////////////////////////////////////////
+ Q. r/ U. h1 y8 y3 a* x CInventorySort* pInvSort = new CInventorySort;6 K1 \# I8 ?2 w/ U1 C
vector <sItem> vItem;8 i5 n- M' f7 l8 |1 X* j% X
vItem.resize(MAX_INVENTORY);//初始化大小% `& a% i4 M2 i
//////////////////////////////////////////////////////////////////////////& U! O( `4 x: X2 ^( L$ _( p+ [
//填充数据7 Q& j0 Y& `6 k, Q/ \6 s
for (int i=0;i<MAX_INVENTORY;i++)
9 v( @2 j9 D3 T% [) n; g2 | {
% i9 j* I6 |: } V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ G( A" z2 ?7 B0 @- q: g* X8 H
if (!pItemElem)
" W/ J$ a8 a( Y {
R7 T: Q- r4 @% |' u vItem.dwKind2 = 0xffffffff;
2 s- W* ]$ @$ v& t9 } vItem.dwItemId = 0xffffffff;# p3 ?9 \$ _/ E* ~( z% P$ q5 ?
vItem.nIndex = i;: P6 r% A' ^4 A1 \# i
}else {
: x; B. D+ L* ^) X c ItemProp* pProp = pItemElem->GetProp();
& M1 w4 e" q0 |1 X( g vItem.dwKind2 = pProp->dwItemKind2;: c! i7 _$ c) W& X0 j4 d7 m6 q
vItem.dwItemId = pItemElem->m_dwItemId;" y2 ^4 F: A/ J3 b
vItem.nIndex = i;
% \/ c; w4 w, I" R0 u u8 U }
2 @) d: }9 e4 x- D( {$ S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' n j$ l) R _* i7 ?1 | }
4 P: }! y. z1 }3 g; P& `. B4 b //////////////////////////////////////////////////////////////////////////
- J/ E, T4 n3 ?: W/ b+ V6 g# ^! K sort(vItem.begin(),vItem.end());//排序
6 c+ }$ p7 Z$ Q$ q5 Z //////////////////////////////////////////////////////////////////////////$ Q3 \7 h; O4 r* } C
//交换. @* B7 z: C* }
for (size_t i=0;i<vItem.size();i++)
! c. j$ o7 n1 P3 S5 n) m2 ^" c2 _ W {# d! {. V% _3 N* U/ f! D2 Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 q: D' v+ ?! U6 B7 x
pInvSort->Add(vItem.nIndex);
& n# d1 a% Y/ a' Q8 o }
4 q. B1 l8 J2 p BYTE nDestPos = 0;
" W8 ~2 g6 l' _: P for (int i=0;i<MAX_INVENTORY;i++): \, i9 @" t9 r0 J+ p# g* s& ~8 P
{
7 n6 ]' w: k+ ]* d& h9 j% U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ O4 K0 M5 j& F/ a if (pItemElem)1 x T5 R) H- Q! E' O j
{2 O* q( g" Z# B. n
if (IsUsingItem(pItemElem))
, H3 \+ a$ h+ a/ y { X# Y3 m- d; s6 t* I
//这个位置无法放
|! j+ a. k9 B u& w nDestPos++;8 ]; C5 u1 e+ O- g3 F
}! O. r" z |- G+ m8 m" Z/ v4 L
}' e( F e0 N6 g1 e$ o: b3 v
BYTE nSrc = pInvSort->GetItemSrc(i); v' x: S/ u+ ~6 M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 g5 \/ V% q0 Z1 E if (pItemElem)
; A2 ], Q6 ^% P( l3 D {9 e$ q+ i1 M7 W) d
if (IsUsingItem(pItemElem))5 X8 Y7 q1 |- L0 c! A# L
{1 Z& w0 Q6 X- M9 \. ^3 |
//这个道具无法移动,跳过" p! @% B, h7 i8 I2 Y, X
continue;
1 U8 Q: @1 L* M; F }* n; P8 \* w& u) y/ E; }" e+ b
}else{
; K5 w2 S( m) W //空位置 不用动5 W* a' Q: ]- F. ~
continue;0 ~$ T6 w+ J6 h) [7 k' _
}, w1 |; [2 w: J& @
//////////////////////////////////////////////////////////////////////////
+ {1 i$ G% u6 l6 F* V0 O( d8 O //开始移动: C9 h% y3 s! ~( D l
if (nSrc == nDestPos) E& v6 }1 b3 f8 Q3 W
{
$ `+ Q+ A+ \, p: {; p //原地不动5 E9 @, j/ z3 S
nDestPos++;% ?9 a7 | v7 Y5 X% q% U9 y. i
continue;
3 Y. N. @ X# h. y: V }5 ?# M X7 n! j! p' I: {
pInvSort->MoveItem(i,nDestPos);' Q3 \% H! q3 U8 L, X. \$ u1 X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 Q1 }7 {/ F: t; U Sleep(5);0 l/ |, O0 e2 }
//Error("移动 - %d->%d",nSrc,nDestPos);) _6 U7 @* G& d2 }' p
nDestPos++;0 e- [- X. K. d9 `
}+ A7 @9 c5 e* V/ W$ g6 Z( Z
//取第一个元素的信息
1 v d7 d/ _# L- \; c /*
9 e5 K5 U9 }. T: D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- m, ]$ v2 r: {' I {+ j- \$ j$ `( y# k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& r/ ~! s) m- V! _- }# t% m: f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# Y! @' D: ~) F" H! @- H: T
}- t2 |# U! o" a3 J g
*/
: Z& ^5 J' G- C3 S //////////////////////////////////////////////////////////////////////////; ^* I$ u7 w) m. o
break;
- N% \, U7 v, w$ z' X$ } R }( F" W9 d9 @2 a0 q/ F3 @. A
} 7 I m4 F( h7 c7 f9 g
}
0 V' Q( J6 c0 ^m_wndMenu.SetVisible(FALSE);( a5 {0 R8 }" w# [
( y8 A. T1 K- X9 c5 i" a5 u4 v7 y--------------------------------------------------------------------------------------------------------
4 y4 j/ ]; W; s6 |( F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 H8 ~* M4 Y( H' m$ Z# ~
{1 v' @5 W/ [. \
BaseMouseCursor();! @" r5 g6 [3 K
}5 M1 J( Q' o, F B l6 ~- k- K
在其下添加:
- f* g5 D7 {6 b4 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 X# Q, u+ |% P{2 }: L4 Y1 g! I; n- g% Y, I9 `# X
m_wndMenu.DeleteAllMenu();0 ?! L" r' X. A2 B* M% ^
m_wndMenu.CreateMenu(this);& O6 h+ M7 K3 X! X9 k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; U, h( K4 X9 I2 N: q$ P! [
+ l. k4 h# t1 c \ E# @if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( B8 i4 U+ | m+ d4 c4 M
{. K9 c8 o& N! Z' _3 g
//P以上级别才可以删除所有道具' X2 y/ ?8 I" \( `- |" \6 ^5 L- B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# G( v+ i- m6 j7 a Z
}" V) C' Y9 F' n6 D6 t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. n( o# f; g* C* [( B3 Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ Q/ e2 i% {" g: a# k4 t# b% T
m_wndMenu.SetFocus();
% l+ n6 h5 s. j9 o/ @}
- Q, `+ Y1 K% H- q8 A3 X: x0 W7 ]5 g$ u------------------------------------------------------------------------------------------------------------) F- I. {0 D+ h! O6 G9 n0 ^ m
*************************1 ]) N% w$ m' k2 n( ^+ G+ J
WndField.h文件
' [. g2 e1 @. P*************************
# R, o+ T+ F+ L* ?( Y6 ~& U& }搜索:BOOL m_bReport;
2 b. Z2 U- {" z" j, Y9 I8 ^2 k6 E. z其后添加:3 m( A& U( E9 r) s$ g
CWndMenu m_wndMenu;2 j4 H$ o. P$ b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 {$ }$ p; g; s' q. w0 n. Y
其后添加:
) V6 A* g# A8 N/ Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 O5 v+ s6 W+ E4 ]! p U$ F- d- Y5 }
9 I% s9 w; _2 i9 ^. I' J |
|