|
|
源文件中_Interface文件夹下WndField.cpp文件
, w5 \2 V4 \; t8 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" i, r+ X- N+ n; a
5 F: u" s% ~( L! R9 g% |
struct sItem/ P- h7 Q1 z0 _/ {* r5 A
{% z0 @3 B3 ]' M) X9 w5 c- k7 v6 r
DWORD dwId;6 p0 R& f3 ]* U+ c+ E
DWORD dwKind2;
p* \( X5 @. l) N" C# G# k9 NDWORD dwItemId;
1 N! r6 r$ b% B4 k. oBYTE nIndex;3 O7 h5 f/ x8 x9 Z9 w. G, Z% I
sItem(){2 r6 y, h. G! ^/ T6 f% q- o
dwId = dwKind2 = dwItemId = nIndex = 0;
9 z( P6 l7 u" M" A}
9 d. G" {5 T4 t0 m l$ _% V5 Zbool operator < (const sItem p2)
7 V9 e& M1 E- w9 T{/ @8 c$ E. ^$ A3 @3 v1 T4 q
if (dwKind2 == p2.dwKind2)3 v+ \- r4 z- ]: l6 b; X
{1 }' `2 c: [ U+ o* _
return dwItemId < p2.dwItemId;
: \; P! |/ L: \: E3 b% u& B }else{6 r; } _8 D5 p' j, H
return dwKind2 < p2.dwKind2;
2 N( L9 O; g6 L% b* @ }
& j" v; e1 u/ ~' i8 X' h2 T' `}
6 f m$ j' I# B' R. J1 s};- Z, g9 }1 D: L1 n8 L
class CInventorySort T8 `" p: R: X/ H& L3 Q6 p
{- p! U8 ~3 \* X& a1 ], o- i9 z1 l
public:0 }+ ~5 T8 M1 T/ p7 f( s
CInventorySort()
4 G' |$ ^6 r1 D' [* Q{0 `( z% @4 H& {
m_dwPos = 0;
. i2 Z' \& B: h4 `3 q}1 x0 ~$ E: A* `7 }) w( _7 O5 }
~CInventorySort(){}
) [7 v' }; Q2 J# qprivate:0 l9 \3 t1 {2 n$ y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! F! u7 O% {" G0 a3 w
DWORD m_dwPos;
% g: t0 v; Q2 _/ k2 kpublic:& q: _' v: m0 D9 D9 z
void Add(BYTE nIndex)3 p2 x* c8 T! w/ l9 R, X& O
{) [8 }1 O/ z! _2 d! @
if (m_dwPos >= MAX_INVENTORY)
, K L/ M( P; _" z) V) w6 s {
4 g) |. Z0 Y. V return;
; t1 p$ b. x; D5 m. H- ] }
- O9 U* Q E) D4 W9 J m_Item[m_dwPos].nIndex = nIndex;: M' `7 j/ i3 P, d% h$ Q
m_Item[m_dwPos].dwId = m_dwPos;
' C( M" I' Y9 v" h m_dwPos++;
7 q% o4 O3 E: O; Q0 j8 _}
7 }* m' j9 f+ L4 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! p/ X- q" O3 u/ e! g7 W
{
. L" Z. g* s9 F( M7 A& P/ { for (int i=0;i<MAX_INVENTORY;i++)
: r, [+ P3 y/ }9 Y {" A n9 p8 W# @* j
if (m_Item.dwId == dwId)
* L- { Z0 }# W( H& c: P {
# B% m# D) [( t' l, U return m_Item.nIndex;
' T6 C9 T4 P& Z$ d$ n: x3 @ }
# B/ U9 z- x2 Z8 e }, f1 y6 w( G% U* D# X3 I6 b' L' S
return 255;
. C/ f- F( n# Q2 x# ?6 N6 p5 y}$ A, X. c" U; O2 L# J* G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" G/ Z. _( V; C. U{$ o9 V* m; M6 Z- D: X3 Y7 T
BYTE nTmp = 0;8 \, h( Z5 {% }6 W2 ?" }
bool bDest = false,bSrc = false;, o1 L( o) m. l
for (int i=0;i<MAX_INVENTORY;i++). p; E7 O) F1 D
{& n/ ~; V# c8 P- [4 b4 d2 B1 J5 Q6 U- X
if (dwSrcId == m_Item.dwId)
. J4 `& j c4 x/ A' N {
3 H9 E4 x/ f7 Z! }7 A //id相等 则 改变对应的dest和src9 `; C' t% {) P6 l+ {$ h
nTmp = m_Item.nIndex;
' V) _% c" `- h1 |% ]' M m_Item.nIndex = dest;
% N e. d/ b# q _9 n6 d9 r }" w$ \3 Z% a% T/ Q0 a
}
1 F! j$ s7 O' E" K& U) L' ?3 f t //临时数据保存完毕,交换开始( {2 p% T9 \ N( X& z. [3 D _- p: s
for (int i=0;i<MAX_INVENTORY;i++)1 u, J2 E! u/ H% d9 a5 e- s5 \, E$ \
{) P/ T. B+ J0 C" M
if (dest == m_Item.nIndex)
$ b6 m$ l2 u2 W. l; N1 l {" D$ k6 \% v9 @4 \' ]8 a- i
//id相等 则 改变对应的dest和src
. r+ i7 N: {" |% W0 g m_Item.nIndex = nTmp;2 {" O: [% O U6 r% V. d
}' J0 h+ r; }' K" P" @! j% u
}" X/ L4 a7 F2 [: {9 i7 C& P" B6 W
}7 U" j/ b/ I: E. r: n7 V2 M+ u
};( r1 F) I+ Z3 M8 j( _/ J: l+ G2 q
-------------------------------------------------------------------------
/ z6 h% Y8 K G$ m* S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) H" Z' w- j( l# F! L/ a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 M- A, ^) R9 u% N
紧靠其上添加:
+ Q6 |5 ~" }% n6 fif( pWndBase == &m_wndMenu )
" e# y3 n8 J+ D* n/ Y) x{8 c! ~6 a. U# T7 T6 `8 O
switch( nID )* ?' |: p+ V$ A: b2 b" U3 F8 w
{0 x9 U/ ]7 d, R F7 h# Z
case 2:
, S1 S( k2 `* K8 f, v) ]. ~! w {
/ @, U- F& {% h+ R& v. E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 H0 \; P# K Z7 _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ s* q8 i( `3 }& g0 W f {( K% q1 g2 U- r: @! d+ s
break;
# }/ L6 C5 T. f. V }" N* U' r l x: T- k. I1 [: u1 o
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! t3 a6 c% Q; { g1 X$ i9 ^2 X {+ X/ z5 H$ `- C! C4 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& J+ P$ z/ d$ L
if( !pItemElem )" M' h& ?8 o. M0 A* I1 z5 d
continue;
1 `1 M! L1 U7 ?. A" b if(pItemElem->GetExtra() > 0)
" S0 N3 n$ _" k& n( R/ w continue;8 q( s1 P4 f5 t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , a& i9 {0 b* D/ N2 f6 Z4 _* C4 D
continue;
. { T; [* V6 V6 Z if( g_pPlayer->IsUsing( pItemElem ) )
( E1 _ @) j* ?8 J" f8 R continue;4 w, d! P4 n- Z2 c8 @/ m9 m
if( pItemElem->IsUndestructable() == TRUE )
M* Z' }( _' }! q R2 E; Z# T5 T {+ o P7 h1 H( ^. M/ }8 Q) B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
A+ ] s, q: {9 U% L continue;# X7 e' s1 s5 O1 d, N* E
}
/ k4 J/ {9 F6 J+ `2 B4 Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& P2 R, p) u$ W2 |- F }
5 A& [' A% u; `6 k break;
2 [ Z: J4 E$ e0 _! Z' d1 l3 s- Y& n ] }
0 J# w7 H8 |2 L# w case 1:. f4 `6 b: s( G! [( y% E
{
; T& v& F) x1 E, z //整理背包# ]: A$ K1 v T. m8 K% L
//////////////////////////////////////////////////////////////////////////
5 W$ d+ K9 B" O* @, ~2 P1 _ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: Q& ^) _' N. ?, R3 Q
//////////////////////////////////////////////////////////////////////////
8 ~1 [/ |0 W4 f/ t/ J8 \; _8 k3 v //////////////////////////////////////////////////////////////////////////
& d* ? E+ F8 w, u1 e; q CInventorySort* pInvSort = new CInventorySort;$ e3 A) G$ n: K3 d1 S! b
vector <sItem> vItem;
# _; A+ p# `: m9 J+ p vItem.resize(MAX_INVENTORY);//初始化大小
# n" _& |0 R6 e, B u9 U/ q //////////////////////////////////////////////////////////////////////////
) q& f0 z6 o+ B4 z) d //填充数据% Z W: M I% L% m2 Q: N, d
for (int i=0;i<MAX_INVENTORY;i++)4 ~7 e y) p' v! o
{
0 |% Z) ~, b6 x5 Q: v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# n4 ~/ ~$ S+ ?! u if (!pItemElem)
# s d @5 u4 q3 t* f( C* U! y! H ? {
9 r4 t' g6 d+ c: j. Y7 u vItem.dwKind2 = 0xffffffff;0 b' l6 g% V+ j6 M: d$ R4 ~
vItem.dwItemId = 0xffffffff;: s3 L" h5 a6 f: r+ R2 c
vItem.nIndex = i;
" d- m/ e* |! i$ i }else {
6 m# Y$ _2 f/ s# X; B ItemProp* pProp = pItemElem->GetProp();
8 _- F* U! S( e0 ~: ?( h vItem.dwKind2 = pProp->dwItemKind2;
) F9 O* E0 j8 n0 J& D vItem.dwItemId = pItemElem->m_dwItemId;
/ Q) G4 s. `, S0 ~ vItem.nIndex = i;
% O: D1 J/ I W9 O, b0 [ }
3 T* i& i2 J: t9 [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, j) |9 n5 S4 l+ u, r/ v$ V. k }3 H+ x- ?+ E) S, Q5 M6 o, y, c: y
//////////////////////////////////////////////////////////////////////////' X N: b+ j6 s1 N
sort(vItem.begin(),vItem.end());//排序9 E: P) H& v/ N" T5 T
//////////////////////////////////////////////////////////////////////////+ W0 ]! C8 f5 ?, e3 _6 v) q2 X
//交换2 d& Y4 ~3 N) N$ `" c; S8 T
for (size_t i=0;i<vItem.size();i++)- H5 ]4 Q; ^' }
{7 r7 y$ O7 Z t) g( t9 `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 ?; C5 Z, Z: U1 g7 o% s3 @ pInvSort->Add(vItem.nIndex);
. n- R+ Z* U2 L6 l8 |8 D }
2 t" D9 v; |5 ~- V BYTE nDestPos = 0;& N" ?! p9 X% v) b) k
for (int i=0;i<MAX_INVENTORY;i++)
' v7 y2 m% @6 Y! F& F6 t! r) |& \0 [ {. [- g( o" d6 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 m) m8 p; [7 H
if (pItemElem)' u2 j& J" V8 N4 e
{
7 S* b9 d! C9 F if (IsUsingItem(pItemElem))
) ^' \! |6 f! R- _6 o+ m& [ {. I8 ~" s, V: ?: R$ I8 w7 z q
//这个位置无法放
& w. [ P2 `6 J6 r ~* ^ nDestPos++;% U `( L. t) G
}; U( v m, O8 T& ]* ]
}
# {+ {6 {! e9 e/ o9 H/ Y' m& ] BYTE nSrc = pInvSort->GetItemSrc(i);4 `* S& H! X3 R# i5 i9 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 \( V# C- @8 ], M& z+ M! W. u if (pItemElem)
% v5 G& D" n6 q1 f/ y {
" U4 U3 N. ]/ A/ g) f' } if (IsUsingItem(pItemElem))
( g! d; P1 c: U ^$ v {/ Q/ d# p$ O/ D+ T
//这个道具无法移动,跳过
1 S9 v' q# L3 m$ k7 u continue;$ _4 O( R; J1 H2 e5 X7 m
}
1 o4 C: Y$ i' ]- g1 N0 } }else{
! X5 z- X' c8 V //空位置 不用动 q1 X2 J' \- g3 x7 |# ]0 Q
continue;
8 y/ Q+ w% z* I; c: E* { }0 R" ]) O2 X9 y G. V% Q5 n
//////////////////////////////////////////////////////////////////////////0 I% d2 D0 R9 U& M0 o! I
//开始移动2 P+ t. `9 B$ V* A3 K
if (nSrc == nDestPos)! |% ] A& [+ A# H
{
# v: i+ r- s1 o$ i7 l4 Z, V //原地不动9 ]) c6 |4 Y8 O) a4 v: {2 B
nDestPos++;2 P( x5 [/ v% D- [
continue;
3 M. b( g, J1 s1 I }
# {& z7 Z. Z! @# \5 x pInvSort->MoveItem(i,nDestPos);. ^" Y" K, w, g' [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 ?" o' Y" s1 X, P. S* M8 t" C Sleep(5);
& o9 M ?+ d5 L _5 ~7 x( H/ \0 c //Error("移动 - %d->%d",nSrc,nDestPos);
2 z0 |9 C- m7 D+ @! b4 j nDestPos++;; y3 _0 Y- S" y
}
& b( h/ I1 D& C) O" Y3 d) Z$ v f- \ //取第一个元素的信息* a' m) _4 N7 t/ O0 s
/*8 a K2 i: ~1 Q7 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* u$ Y1 L$ [" Z" Z4 i f
{6 n4 t" o9 H9 G( [7 x( n6 h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
Z: n! k6 U/ C6 ~/ Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) U# j, b% p L( Y0 g. D
} k* o; @ u2 m- V% U
*/
; G6 p: Q5 ~. I% z' M c* ^& K //////////////////////////////////////////////////////////////////////////
7 r+ Z7 e3 O: h' m5 w( a break;
" K" |/ `9 g. |% R8 R6 V }) \7 Q9 d% b* h
}
2 m" o# v% Q( [}" D! k! D7 E+ l7 K0 e S
m_wndMenu.SetVisible(FALSE);
; E& k$ l/ u8 p: \; ^0 n! X
1 x) E) ]0 ?( {) C--------------------------------------------------------------------------------------------------------
7 v }6 M- e! x6 q7 X8 i, K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" T/ [6 f: {: a0 z0 T2 T
{$ m1 S/ D& f& Y' n2 R3 H
BaseMouseCursor();
2 u/ k9 @* y$ J5 o/ A8 t" K7 V}/ F7 D' N6 J9 z( n# n7 u5 e
在其下添加:6 w1 ]3 E, B0 k7 g ~% Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 f$ V( o; \ B) R8 r0 D& s{+ t3 k8 P; }1 Z3 w1 B# ^
m_wndMenu.DeleteAllMenu();
8 N8 a) ]8 b3 d$ [# A( ?, |6 ~m_wndMenu.CreateMenu(this);
3 }7 G; }; c# N8 O% rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% B( v9 s0 C3 X, c& D* E! g
; _/ t: s, z& xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 z* j/ h7 v; f' G4 q{
8 |8 B# ^, z: m9 f& W5 g5 u //P以上级别才可以删除所有道具" p* X X! r! b6 W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 l& c) J9 N* u8 n$ k2 m0 r) \}
9 d% ^1 m! I o2 hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 l- m7 ^/ g Z5 f' p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& G+ O3 }% |3 K0 n3 f( d
m_wndMenu.SetFocus();% v9 p v( e5 s: m# p
}
' c6 o0 j; t4 \- C+ _------------------------------------------------------------------------------------------------------------1 C0 w" T4 o8 t
*************************
6 A0 b. _3 L. ?+ @0 yWndField.h文件7 d- a& `# \( N* e
*************************& q( K- {* J6 m, P3 t# W: F( p S
搜索:BOOL m_bReport;
* \* |( {1 W! F* F2 }$ {其后添加:& C# d L7 O8 u& J1 C/ S
CWndMenu m_wndMenu;
2 B3 a; X) o( H8 P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 X* S" u& M0 r3 J, |! d其后添加:4 u! q- |" G" l: C( h j
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) U* N* ~/ v) X/ h) r: T- m* o0 v9 M- S% ?% w4 \
; W# I R; e& N6 x7 J |
|