|
|
源文件中_Interface文件夹下WndField.cpp文件3 F6 G4 z4 S5 f9 F6 a2 S
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 v9 q+ \4 ]% C |/ C
8 i" B2 e: d) b+ x/ k- A& cstruct sItem
6 W/ y1 w! z% s1 s# i, e+ [{
' y$ \5 B# r# e, r5 `DWORD dwId;
4 ]' f3 Z5 n$ U( v2 a# LDWORD dwKind2;
" _, s! x" Q0 u( d! GDWORD dwItemId;
3 P* [" S- ]* ~' {! I0 r* L. OBYTE nIndex;9 C% k9 S, Z3 h1 n/ Z0 A! V' x6 n/ M
sItem(){& u' i9 R6 c$ n( P% e/ {4 Y* A
dwId = dwKind2 = dwItemId = nIndex = 0;
9 Q$ j( Q7 r* g; X( |" }+ |}
2 J* {, N( n% hbool operator < (const sItem p2)
) U' |, I) O0 Z2 ?0 x3 X. E{
* c0 ]( ~( L% V( S' l6 h" ]% X if (dwKind2 == p2.dwKind2)% i$ L" W6 ^; c( W G' ~% ?
{
" `* x1 T6 G2 m# O; }$ _& W2 k return dwItemId < p2.dwItemId; n( Z* [1 Z3 l6 K, z# c- W
}else{
- l: w( [% a* h5 X x7 N return dwKind2 < p2.dwKind2; `3 y* D7 G! t3 e: r/ ?
}
0 B/ r( s: X' f) J}. q9 C1 R: o$ ?( o
};% ?% [. a* O6 W8 s/ K4 S
class CInventorySort
) f: D1 `. c8 {/ P4 ^. r; Y{8 _' {0 B- X- z( O
public:0 k2 l: K, e! v/ ?
CInventorySort()
- {: h! v1 @& u{
+ X1 r( n; y: s m_dwPos = 0;
5 u, ?( F8 Z! d/ B9 k3 p}1 w0 g9 r6 {7 O3 k
~CInventorySort(){}
* u9 N, A, r' f/ l9 S1 T# sprivate:
1 g+ }% Y+ |* j% B7 l, t8 C1 w$ p; usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ J7 C9 Y, ^' Z+ x* ~
DWORD m_dwPos;
& x" v% j# X9 \3 p2 y: @public:1 }+ [% s3 N% R
void Add(BYTE nIndex)
v: ~5 G4 ]1 t5 ]- ^& F5 }5 G7 f! ~{
2 Y& W& U5 i7 d3 {% M% s if (m_dwPos >= MAX_INVENTORY) D3 _+ G I6 i' E9 i! l! S
{
" a R, e- l) ~8 s8 y- z return;6 g+ O8 u; t; Y+ ]) w3 c- j
}
9 R5 x" @2 n/ t# D7 c- t m_Item[m_dwPos].nIndex = nIndex;3 ~; [6 \7 d( G5 d4 ~
m_Item[m_dwPos].dwId = m_dwPos;
% Y3 \' s2 t3 v% I m_dwPos++;
4 f6 U8 h1 j/ W}
# z) ?& Q1 H1 z$ v- R0 ]! N) w: QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& c; K* T% c4 U% A# k5 @$ f1 U- r
{
) L% `" v7 y. A) S! [ for (int i=0;i<MAX_INVENTORY;i++)1 p, u0 e& N: f, M; T! J
{
9 {( Y1 E: Z, E9 o if (m_Item.dwId == dwId)( G# e# K& S4 D2 e
{" G1 M0 D$ C% R; l& h# {
return m_Item.nIndex;2 X) j: u8 a& D" D$ ~, i B2 w( O
}
2 v2 c" C/ w0 d, X6 d% S }2 B3 d( W Q4 L1 j
return 255;. q( z. R% X2 y( ~
}
" p$ B1 r+ g1 M" ~1 Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 }- V! V k; i2 G
{
5 Q+ H: \6 F4 q+ i1 L BYTE nTmp = 0;' s9 H4 @8 b' Z- j
bool bDest = false,bSrc = false;$ _' |( D* l. v/ w' d
for (int i=0;i<MAX_INVENTORY;i++)/ d o7 A: m: N6 N
{3 M7 i4 o$ Y3 ?& N$ k
if (dwSrcId == m_Item.dwId)
. I$ R' |! K% o) i' y- N4 X) H {
7 B8 w* V! K1 L1 u //id相等 则 改变对应的dest和src
2 u: H, b6 r* N nTmp = m_Item.nIndex;
5 n1 ^# x3 m+ N: A, } m_Item.nIndex = dest;- F/ f# h3 C6 o' @
}
" L& U( e$ B3 N( z+ O }
! b2 L, v$ M5 ^* I' O* N1 _/ o //临时数据保存完毕,交换开始$ T7 u, O0 b1 P
for (int i=0;i<MAX_INVENTORY;i++)$ R1 k; f7 L8 t, m; q
{) w( J. x( o* M' Y
if (dest == m_Item.nIndex). Q; y2 E$ D; e7 T8 F; J
{& B% A4 W l# e) H
//id相等 则 改变对应的dest和src
4 ]$ C, T, h) M+ v2 K6 i m_Item.nIndex = nTmp;" I/ x3 i5 F9 X8 k& q
}
2 }7 [9 m9 ]$ P9 C: ?' y6 ` }
" i. q6 P$ [3 s3 h: F0 l} N) b/ l( }* [( s7 V6 L: A; d2 u
};
8 h! N7 ^- N9 l$ Q6 A2 _3 G7 a5 }-------------------------------------------------------------------------
/ M: K, r0 j/ |/ h( k4 J, m1 W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( F1 j# c- B% E' a8 c3 E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 o* Q$ i; e+ C9 p6 N. ^ J5 f$ r
紧靠其上添加:
7 y. T: N: a- t, T4 O' m& N1 R. Fif( pWndBase == &m_wndMenu )2 M( K z$ z; B% Q0 ^4 u& ?3 u
{
. d$ }: y4 A" n: ]( h switch( nID )
. N ^" u% f/ U% C( Y {
; u0 G- c7 F2 N& `3 c- P/ L case 2:
7 w; Z! @+ d& j5 `+ K- r {
- r8 ~" ?1 H0 s- g; k! [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; b+ L5 m4 u; x9 ]" N2 o4 ?! v% g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 X4 l) S' D R2 {! z8 Q, k3 ^ { ]9 N8 S8 A# H. W
break;4 ^6 O1 ?6 L7 }
}- Z6 q+ j. _, }* J4 O" j% E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ K8 h' e% ?" D0 _2 L( s) g7 z {( R) d5 x( o1 f. @; }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" ^- L( M2 u. _! m
if( !pItemElem )
6 f( M- O# W# E# W8 H; E continue;! z1 B% B6 s; O) i" r) A
if(pItemElem->GetExtra() > 0)+ N) q# U. Z) ?% ~. t* l3 _
continue;5 _( M; ? F" |2 v; p/ J3 N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . ^6 z. Q J( y* ~
continue;7 N& [' K, D, [% [" O3 O0 h1 b2 V
if( g_pPlayer->IsUsing( pItemElem ) )
' n3 m. ~8 i* g continue;+ k( ~! S* ?8 C) o# C2 D% W
if( pItemElem->IsUndestructable() == TRUE )
' N6 {# d; m0 d. f/ d* F5 Q {
' g" c% A/ j: \) {" r/ y; V! ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( M4 x! W' ]( w! w% x
continue;
$ S' Z+ N2 z* |) y/ k; F. s }
' l7 j" K \+ u" S' s8 V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# U; R) ?0 \2 N6 ]1 `# R% j }
- }5 Q4 n1 v* v3 G' K break;$ D& j9 `$ L* a/ n2 R5 P
}
) O' {; e8 G d, L9 |6 Z, v case 1:. G- ~ F8 b( |5 U+ @# e- H
{
- F- v% @) \. V1 a) K/ q( I //整理背包
8 h! i$ F) ~$ } //////////////////////////////////////////////////////////////////////////* n7 C x, O% L( S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" ~6 Y" ^& k. I' J //////////////////////////////////////////////////////////////////////////' E/ w' C: v R
//////////////////////////////////////////////////////////////////////////
$ ~+ o3 ?* J+ k, L CInventorySort* pInvSort = new CInventorySort;: m# S+ @; _& i& a, F
vector <sItem> vItem;3 X& U2 F7 V, R" p2 h/ b
vItem.resize(MAX_INVENTORY);//初始化大小
2 Y N8 j3 m" A( D //////////////////////////////////////////////////////////////////////////
' ?, u( _' d% v //填充数据
; p n; |, x( {8 c1 C; r5 J- Q for (int i=0;i<MAX_INVENTORY;i++)
; u' Z" R( `; K5 P7 z {
6 K @! D* S- l# h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 g) G2 S$ J1 v% l( e- G
if (!pItemElem)
0 L" _- O# Q( i" k7 b {( A4 T3 m- x* O# p- X
vItem.dwKind2 = 0xffffffff;& s" G/ m: Y2 U5 C# E
vItem.dwItemId = 0xffffffff;
5 `7 Y( k: y2 k5 S: U vItem.nIndex = i;
7 ^1 V: Z0 x. J8 u7 [7 ]. [ }else {
1 L% N# h. i3 f+ b/ T ItemProp* pProp = pItemElem->GetProp();! T' H+ z6 l8 Q; I
vItem.dwKind2 = pProp->dwItemKind2;
- j$ `* U4 F- @( M, ~# A* y+ r! S vItem.dwItemId = pItemElem->m_dwItemId;
- h5 V" g$ L7 z+ r6 u/ k1 j5 a: a vItem.nIndex = i;/ J+ e% q& k4 K. R" X
}
1 d* D! d. o7 L* ]7 { _5 W //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 Y7 {, y3 P( W" \
}
; V& D9 v" g5 H2 A X //////////////////////////////////////////////////////////////////////////
! j( j5 V$ l" T: ~ sort(vItem.begin(),vItem.end());//排序
2 A' ?5 S7 m. F& J* x* b //////////////////////////////////////////////////////////////////////////
1 Z; E& m* W8 e( X5 o# A //交换
% ~' l& m* \& v* w/ {/ ]' m. L/ J for (size_t i=0;i<vItem.size();i++)
a& y! `- p; S* G9 q, x, r w# H {
7 K& Q. `2 I2 {# m: I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 `7 X" a5 G3 x) X5 i+ S pInvSort->Add(vItem.nIndex);' K9 e# [$ D0 c% i: i+ c* @
}
/ L( h+ w; F+ C) k* N BYTE nDestPos = 0;- j F9 e1 q: A- T' H+ {9 K
for (int i=0;i<MAX_INVENTORY;i++)
& U4 Q0 k2 O! N( s. {% J {5 Y( G2 ]4 E+ [: q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! H4 Y( ]3 b N% K if (pItemElem)
- Y9 X% M3 O) \. Z) c7 y {, A6 P! t* Z2 q; _
if (IsUsingItem(pItemElem))
5 u4 ]4 _# Z. g9 t6 d: o, n3 ` {
5 I) u" `: S+ U* b8 X; w j# { //这个位置无法放/ U; g T" q q4 }' J- c8 P5 b
nDestPos++;
% {1 n; H& ?( A7 o: N, ?! I; f }
3 D0 K7 n2 f* k" f }
; k5 }; u7 P- c6 q BYTE nSrc = pInvSort->GetItemSrc(i);# k+ x1 e3 O4 q" k$ ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ j; _$ A) O+ p( } if (pItemElem)
9 Z& {5 c4 l* x6 [6 j& e {
7 x8 e- M# {! e3 V+ ^1 R% H if (IsUsingItem(pItemElem)) S9 x; K$ ]$ k" f& ~( U2 l
{) S( L; `6 W1 S/ e- S Q' i6 ^
//这个道具无法移动,跳过9 f' T% I A }- D* @
continue;1 f6 o1 `* B9 B6 Y" i) h# F) q" l
}
1 W z' ~8 f/ Z% t# J8 c }else{
/ `% f( m. l5 n6 p7 F% { //空位置 不用动
* s% [5 B6 `' w: B' r6 ~ continue;. p& g9 N, Z0 p2 k7 {7 W& D
}
' G2 C/ H6 O; H1 a //////////////////////////////////////////////////////////////////////////! u0 C& Y: }8 H1 u- k5 W
//开始移动7 s, l+ y% t% o& g
if (nSrc == nDestPos)
' L9 ^9 q) Z1 P6 }# G! L) ~ {5 @5 x+ {( d% v3 j
//原地不动1 K* K$ r( y3 u' q: v# S0 `4 k
nDestPos++;
3 v: g* ?- B9 u' N, | continue;, _; Y6 R$ A+ m6 `9 Z/ c
}
. T0 s7 V+ ` z4 J pInvSort->MoveItem(i,nDestPos);0 S0 } u( k, d
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 M0 H8 [' Z1 m. F) f
Sleep(5);4 V9 F* L" @4 F4 Y% Q
//Error("移动 - %d->%d",nSrc,nDestPos);
# n, R- ~; S. F nDestPos++;
7 B* u* w! m# t6 ^ }% F. P3 A% L/ ^1 i. i% J
//取第一个元素的信息+ P3 i, m% w) Y4 I; c1 ]7 _" \& _' P
/*( n! l! r: S3 x% I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* a; r, t3 l% l
{
! R& f: }3 z9 p) v- g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 |+ { g, ]) O8 ]0 ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, y/ W+ c: I' X4 r+ |5 E% D
}0 O: y7 L! U" ^7 v) P
*/6 U) D6 \/ j% {: j
//////////////////////////////////////////////////////////////////////////
% k1 x; {1 y: K( ? break;: X |% e$ g4 y4 P! |/ v
}( W( T% U+ x8 v- J0 j2 x
}
- N) i! F: u; C F}
( D1 j& c Q- r( u! t* P+ _/ G3 }m_wndMenu.SetVisible(FALSE); q, H) r1 _7 ?
2 c9 H: i/ }0 s+ @$ Q& r
--------------------------------------------------------------------------------------------------------; T2 [3 k" A# V+ ]* I: R5 i% ?$ p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 |5 ]% Q! t: |) h/ G. H{' [$ s k" \2 T2 s/ S
BaseMouseCursor();" D# X7 |# {+ Z
}
, O7 j- X4 }8 U, H$ h2 @在其下添加:: s" K# H' L& R& I ]0 `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 A2 d6 b6 V9 C* v
{* i- h% P0 a- w' r4 ?9 ?
m_wndMenu.DeleteAllMenu();1 V# v' X3 ^ d3 ?# v. _: o
m_wndMenu.CreateMenu(this);
# E5 l" K% E& h' lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 L( ^8 [6 W. m, ^, ]8 U; ~ x8 X0 H9 L+ X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). W7 X- g$ e' e* ]9 K. _: k7 e
{+ g) M. a& G, x0 a$ g
//P以上级别才可以删除所有道具8 _4 B. i6 `; n6 G9 f" d, J! b' F' I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ ] t" j: ]$ X$ [' ?* z4 Y}/ S* v% u! E, B8 n! b3 Y- h7 K0 D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 d, j2 Y4 B! t5 S2 V7 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! w6 s b5 |/ `" |+ L- l' q9 \m_wndMenu.SetFocus();9 f( W6 Y- t) F, E/ W8 P
}
4 M6 L% f! ?* K3 V% O* s------------------------------------------------------------------------------------------------------------2 Z, d0 u& z- j& V( l
*************************
0 S6 u! H3 k9 v. O) T: b; VWndField.h文件( l0 U9 l" B: s( R- A0 Y
*************************
3 S {! I; z2 `: f$ ?9 P搜索:BOOL m_bReport;) `/ {2 O& f: \
其后添加:" _( t2 U" i/ X
CWndMenu m_wndMenu;
- a: {+ m9 | f/ ~0 u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 C1 C: {0 B2 i% s! i1 R其后添加:
: e; ?: m; l# _5 S* U C$ K, ~/ @virtual void OnRButtonUp(UINT nFlags, CPoint point);8 ^( Q2 }: ^6 h5 u" i- v, ]" K
& m- D6 S1 {* p; {6 H, f8 o* E
: _. }/ V0 v! m% ?2 j |
|