|
|
源文件中_Interface文件夹下WndField.cpp文件
6 ^9 }2 J# }1 M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ F" c+ i2 P9 D0 r5 w S
; s9 n9 r7 h% ~struct sItem
1 a4 }3 X8 K( e/ X{
* F0 I1 ~( N1 E8 k6 L( |DWORD dwId;
9 i% w2 } ?/ T' h- a4 G6 bDWORD dwKind2;
+ L3 }: f1 g# h- O9 E# U1 @/ DDWORD dwItemId;# n& {9 X; |& W: g# A# v
BYTE nIndex;
0 R8 Z! r- B+ xsItem(){
2 [+ b4 `( X2 \+ h dwId = dwKind2 = dwItemId = nIndex = 0;
6 Y$ Y# f- M: \* {/ X0 Z# O}
9 }( u2 Z% t, f2 n: i- ~bool operator < (const sItem p2)
* q. I3 N) i# M{- Z4 N2 ?' F) u$ P. r. c& b; v
if (dwKind2 == p2.dwKind2). J1 I9 G' P7 `+ C
{
5 E' n8 ?4 S( `: ^) [/ Y3 L; |" z return dwItemId < p2.dwItemId;1 Y7 W4 c$ c! {, `# B
}else{; C8 n* S N2 E- A% h
return dwKind2 < p2.dwKind2;, V! X: o5 |) y- l! W! U
}
9 T, Z5 X0 [( P9 B% R# |- @! z9 e' K}
- V1 D! o# T% a+ Z};
2 ]7 m, y0 F H0 kclass CInventorySort/ H1 ~* W* M# o: o
{
3 X3 ^5 P) I5 |$ ?/ W# Spublic:; g" H- y$ m# M& v
CInventorySort()
! K9 q& @& G' |/ S+ S5 ~, E" T! n{3 Y- K) L7 V9 k" o* q4 X
m_dwPos = 0;- x8 S7 s* D* N) R$ r
}9 O& g* W0 o5 K" L T
~CInventorySort(){}
! m0 A. O6 j7 e; d pprivate:$ r6 I7 L% l& I. p2 c
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 F& D7 a1 w( x' a
DWORD m_dwPos;
6 I% y" z- X3 G3 z+ b1 opublic:
. _4 @! \+ {6 G# P) {' Jvoid Add(BYTE nIndex)
. B9 A. r/ ?. C; `' L! |0 w- A- }{
% _/ v0 _$ w9 H0 B/ x4 Z if (m_dwPos >= MAX_INVENTORY)3 N6 q; x+ W# I; n- n. q: q! x
{% h* K& n6 O3 m8 e0 ?# ?4 c$ l1 M4 D
return;
# G9 O( f5 Z8 z4 _' z }
" [/ p" C# D3 K: s' U m_Item[m_dwPos].nIndex = nIndex;8 `$ m/ t) B$ ~3 @: \
m_Item[m_dwPos].dwId = m_dwPos;6 K0 S( Z% a5 w) _5 ?
m_dwPos++;
4 E, ]3 I, h. n5 x}
' e$ n3 h" V8 p7 q- y, b" V1 qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 m3 F: Q! B& K0 _ R
{& d" v% f! L e* v$ V2 x# Q, @
for (int i=0;i<MAX_INVENTORY;i++)8 T, M) J8 l! e+ r9 F
{( k0 y5 a; v0 K
if (m_Item.dwId == dwId)
% R' \2 J& V8 _. N, y {
3 i5 r5 q, S) l* ]* Y! ^+ D& a return m_Item.nIndex;
* H6 J" ]: K9 N2 f$ a1 W5 H2 J% G }. O" g$ H' [1 s5 a
}5 W2 z% |! f5 I, J8 y: B$ m
return 255;
0 o# R& _% z+ w7 v+ x1 z}, t8 C1 ^# ~0 r
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: D) y: b1 P0 C9 ]0 h0 M' p{
# C" r) q& C% E BYTE nTmp = 0;/ e+ J8 c2 x! Z8 B+ z3 p, i" F( U! l! f
bool bDest = false,bSrc = false;9 Y4 X& Z7 L0 } V2 _1 q# f
for (int i=0;i<MAX_INVENTORY;i++)- Q5 i/ d- v& `
{
" {5 M# u6 g' i% \. ]- i if (dwSrcId == m_Item.dwId)
6 k5 h9 Q5 v) [7 Y8 j8 _4 S6 [1 ~ {: l2 N$ r/ |; M# i
//id相等 则 改变对应的dest和src
/ d5 J) ?; C7 s/ L nTmp = m_Item.nIndex;3 C2 u' F, N( I$ U( q, B( ^
m_Item.nIndex = dest;+ q% H. q3 |; q$ }8 h$ f3 Y
}/ J% x4 i9 q1 t% J
}
" L0 N6 N9 _9 f" E //临时数据保存完毕,交换开始4 Y5 e' C' u3 Z+ z% `+ A4 M7 [
for (int i=0;i<MAX_INVENTORY;i++)
4 L- W% h i7 o {
+ D) R3 G7 M0 m6 o if (dest == m_Item.nIndex)
; ]2 q3 Q4 H, t* \1 l# _$ `3 m {4 E+ x% @( M; O' b- c) l# n: U9 w$ U
//id相等 则 改变对应的dest和src
/ ]/ N, [; N0 {( G% u) ^ m_Item.nIndex = nTmp;
1 j, p y7 N8 U- ?7 b6 R2 D0 _ }
! c4 [# V/ o0 h9 Z5 A7 z& b }( J+ c. b; v, V ]
}: g$ t1 Z4 s$ e- F3 F% M
};
) K1 q& V* K: i0 Z7 _' _-------------------------------------------------------------------------% R0 [) M2 j) K8 p- z% t8 o8 A1 |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' `* f9 r1 I2 `: x4 `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 V0 Z; Q- u+ g; w
紧靠其上添加:. J/ f& Q' G& V0 d
if( pWndBase == &m_wndMenu )! J/ Q' m: g B2 E6 K7 ?: x2 g; b/ k
{4 j3 d3 W; J2 v
switch( nID )
4 m( V# C! W. }' e, i. { {* R9 g0 {% s8 d
case 2:" `4 e, o+ J! F, N* T# c, }, o
{# q) f6 n- R# ~/ ~1 T/ ?
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
O% G* T" h5 e d; Q4 [. v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ ^+ ~+ d, _9 J. N. c D+ Y8 l {, W3 e+ }( ^9 R0 c. D
break;: y/ j: s1 n. U; T" k3 o
}
' a: r9 `$ X7 a `( w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* x, V# p2 e) v+ H# W5 M9 z6 u {5 r+ i u- F! U- }5 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 v$ e1 C3 e& h4 i/ b! e; D if( !pItemElem ) s o' X |4 W7 C! L* E
continue;( A' Q2 N) \ u
if(pItemElem->GetExtra() > 0)
4 W2 R2 E& N2 g! ~1 F. d( _3 k! R continue;
6 F, [& P0 P' R3 c2 ~& ^" v* C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) _! H( Y" d9 ?% c
continue;0 X5 n9 ? G6 R0 P( V/ z# j/ {
if( g_pPlayer->IsUsing( pItemElem ) )2 i% S* ]( Z1 K& B( X3 m4 L
continue;/ G5 b0 ~% J; a# ^! d
if( pItemElem->IsUndestructable() == TRUE )/ e; G) {5 M% t7 u8 A- ?0 H
{
! L- s& T5 Q& p0 A9 Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! Q; V3 n) q8 b* ~& y continue;
$ o: F6 f6 b1 o, m' p }$ t$ C; z3 B/ m% c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. z: ]! O, R' e4 p1 p) \# B1 L
}; J5 o) t! [4 [$ g, Z0 ~
break;1 K, s" t2 w* {$ |; p
}
$ n- ~. \: \! B6 d2 Y: Z case 1:/ k+ f% g' r; \% y9 c
{
1 X/ \& P) B) C6 ? //整理背包
x0 ^# C% m. g" h! |- A Z //////////////////////////////////////////////////////////////////////////9 t+ X/ P% Y# P4 s7 z( I' C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, Z/ s( y/ w& N. Y1 x" T! g# A
//////////////////////////////////////////////////////////////////////////9 i6 _! D. y9 S. V# M8 [
//////////////////////////////////////////////////////////////////////////
2 x" s* y0 i( d% e* i) F CInventorySort* pInvSort = new CInventorySort;
+ j5 S2 I6 \; @5 t9 c: k vector <sItem> vItem;
, R, d) |! m7 Z3 @2 y vItem.resize(MAX_INVENTORY);//初始化大小9 z# n" H- l! i e+ j
//////////////////////////////////////////////////////////////////////////
; W' J+ c' j, z$ z/ n1 b# ?$ a //填充数据
( M! X2 v g& ~: w V9 _/ c1 Q for (int i=0;i<MAX_INVENTORY;i++)
K3 g2 a3 ]8 t9 c! W3 j {
0 x! E& W5 D2 B; h; ^$ Z/ W( F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 T) K8 T8 j3 G
if (!pItemElem)
[5 @0 p5 p R7 E {1 H5 F2 Z x: f7 _
vItem.dwKind2 = 0xffffffff;6 J$ o- l S; t4 [
vItem.dwItemId = 0xffffffff;
- x* \% T6 J+ w3 k vItem.nIndex = i;
4 J) H8 ?& W$ u) F: B: ^4 T. {) r* H }else {: _! {0 f1 S" F+ d8 I/ }! [% e( x' e
ItemProp* pProp = pItemElem->GetProp();8 u) M, _3 I( Z6 a: q
vItem.dwKind2 = pProp->dwItemKind2;: _& a+ n! C* h1 w$ Y1 k
vItem.dwItemId = pItemElem->m_dwItemId;
6 f2 p) U8 |) l7 ]2 m. L vItem.nIndex = i;4 d5 G3 {! @, S
}, l$ U' ?& {2 M5 y5 u% k& _9 v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 e _& a/ \, E2 y8 [4 ^
}) y& j3 p4 N' r& ]* W7 W3 i1 p
//////////////////////////////////////////////////////////////////////////
8 P" E/ }/ o, O3 O- E sort(vItem.begin(),vItem.end());//排序
6 c9 t( z7 p( | //////////////////////////////////////////////////////////////////////////6 L3 E9 |( _& k9 m; X+ G
//交换
8 ]2 c6 e& H( p; j5 ^+ t for (size_t i=0;i<vItem.size();i++)7 A, |4 l1 }* s' q2 r9 h% p
{
5 c8 d: ]. C6 ~: L$ }# Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 L$ u+ i' ]* q8 Z" V% D pInvSort->Add(vItem.nIndex);* Y \: {2 Z' a- ^5 b0 u& z: t( _
}
: e- k5 L B. ~! J5 P5 c BYTE nDestPos = 0;! E, m" K! |- o/ M/ l
for (int i=0;i<MAX_INVENTORY;i++)& O' F1 P. E0 v$ }
{
& E6 f. J4 T3 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 M% R# G8 X, x2 J; Q if (pItemElem)* x( S- {' Q% [8 c
{
' c. d9 l8 `3 c1 r5 A if (IsUsingItem(pItemElem))
. M) y. s# _5 c ? {! e( f& J. f5 a( b6 x/ \/ U
//这个位置无法放8 x% h: q/ u/ O; i. l
nDestPos++;
5 [# T: J! V5 o: E8 e- J$ Z% L }
' C! T# O" S) i }
( v1 x6 s' U6 V BYTE nSrc = pInvSort->GetItemSrc(i);
- @, D" R% b' N pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: P6 i# ^* H* r2 c3 p; o
if (pItemElem)
) ?, `7 H' y- @9 i* Y1 B( S' d {+ p/ u5 O( }- B3 S* b" F) j" V
if (IsUsingItem(pItemElem))
- Q+ {. f: `, z; L {
+ `" b. x$ c' h$ X* Z8 J6 w& k1 B* s- k/ [ //这个道具无法移动,跳过; {+ Q' [- X! P$ m
continue;
& F2 W6 g# j4 o1 y }8 M+ |; v7 {2 Y1 O! D9 E" d
}else{1 K* B- g/ C& p' I% J3 h% m
//空位置 不用动
0 b) |6 L1 l+ t6 C) D1 @3 W5 \ continue;4 S- U' d8 `% g
}7 A% P/ H( H& L3 A; ~$ M
//////////////////////////////////////////////////////////////////////////
! B4 s! z" W4 S4 B" S& k //开始移动2 k7 \7 h8 |( [2 i4 G% C
if (nSrc == nDestPos)! c- n, Q$ D e7 b, W
{5 j3 p: ?$ v3 L8 p
//原地不动
: {- m+ L2 N7 X2 ~8 i nDestPos++;
/ V2 F2 }; ]8 W8 [, w, d6 e7 S continue;7 d0 q5 Q* x4 }' ~; ?3 N
}8 P+ ^1 \7 h( t5 l7 u# a
pInvSort->MoveItem(i,nDestPos);2 Q% |7 e! ], u$ X7 ]) D- }/ F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);' {$ c( C6 d. J2 ]4 @/ @. y% T
Sleep(5);
5 v+ `, v3 |- N //Error("移动 - %d->%d",nSrc,nDestPos);" t+ K4 l$ `/ X" D: h; D
nDestPos++;
9 ~! E9 g; D4 G }
E. V/ M: ^8 r C2 Y( {6 ^2 `6 Y //取第一个元素的信息, ^: z6 q! S" i' ?. H t4 C3 W
/*
# D6 u% L. P. `# n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 m8 R n1 w& w3 S; J9 Y- |/ D4 u
{; E3 p9 B% }9 e" a, I: Z4 ]7 y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% R1 {1 r- l/ U r) p) M3 D
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ q' l" H4 O7 s$ P! ~, \8 y# N
}
% |3 Z) S7 @4 h2 e* [5 D+ W *// J7 V1 h; j6 U0 q' m* R4 ^* ]5 l
//////////////////////////////////////////////////////////////////////////7 c% S% v& Q. ]$ o6 ]
break;
- }# D2 H8 }1 [9 j }0 S/ j! O+ e% a" M
}
" e- y2 H! A9 I+ ]* E0 @, ^}
" T' q. F; ]$ n z; g9 Nm_wndMenu.SetVisible(FALSE);7 X" i7 t7 u9 v% E; J- A) \7 v5 L( n
' o3 Z- U/ `$ `8 N--------------------------------------------------------------------------------------------------------+ ]" p% K) U: Y5 G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* S% T" a9 f$ g- g( `4 ~
{7 q; b$ U: Q5 S) j8 O: Q
BaseMouseCursor();- \ e) @7 m7 v# y8 b% A4 t$ m
}
2 f; t7 h& ?! s. N1 X0 J在其下添加:( P- @5 B: W" N$ t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ^! d) s7 M) g" N9 ~1 P
{
) p6 z$ J% X x4 `$ N" z5 G! G# em_wndMenu.DeleteAllMenu();+ k$ L$ h0 w, v% e
m_wndMenu.CreateMenu(this);( A) y6 j- y0 g( m$ B& s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 d' N1 O3 |, u; m+ E% d+ a
: d0 L# o h4 Q6 }4 _7 q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 Y T+ e; q/ n. T& I' ^, A{
" R+ w& }6 g0 q5 ^ //P以上级别才可以删除所有道具
& Z0 [' N' x6 n q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 e( i0 f6 S: |- I- t% G; O! F1 P}$ h# b: W2 W/ H" x6 f& Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 R) w) c" ?$ u! X" c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ N! ^" u ]$ Y7 r1 d
m_wndMenu.SetFocus();
0 k" A* @2 _% U/ M3 ?}7 O9 a+ [: d0 l$ r0 O/ M
------------------------------------------------------------------------------------------------------------1 M; L# y* L" h5 P- ^
*************************
2 P& d5 s& t( v2 h# k" bWndField.h文件, H6 ]8 }- ]9 t5 t' I1 U, S' }0 Q- X
*************************
" Y6 f6 ^6 m' j; R. W1 y搜索:BOOL m_bReport;& v0 h. e! ^6 J9 U
其后添加:( l0 U7 z1 t/ K+ a/ A9 t' P% P
CWndMenu m_wndMenu;! X9 d. K& l6 F5 E1 Z" }" `: ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 k. V5 l. F& `4 ]' l1 D+ w
其后添加:# `; n. g6 F( M0 M$ P
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 J- X& q& m7 @
* V& k( l, @9 m4 L7 K
; F+ Q0 ~7 w; Z6 ~% t9 ^ |
|