|
|
源文件中_Interface文件夹下WndField.cpp文件
+ _7 B' ^$ f- r: D1 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% R2 i, y( F4 k
3 F3 p! _4 g" f. _
struct sItem
" C3 P% ^- d% K1 N) o) v. F{
2 V( }. E$ [: @* bDWORD dwId;( `) R- F$ H7 H$ q
DWORD dwKind2;
; z2 R, c) n1 o, r- mDWORD dwItemId;) G G9 O1 f/ c2 r$ m
BYTE nIndex;
& g4 L4 L, h2 Y" E; i* ?sItem(){0 d: e5 |0 c6 q1 C
dwId = dwKind2 = dwItemId = nIndex = 0;5 e! d0 w3 f% ?
}
8 e) H7 c2 e' gbool operator < (const sItem p2)9 j4 }( I' N$ {' ?6 R- ^
{' p& b% b- q5 L9 Q% r" J- @, C
if (dwKind2 == p2.dwKind2)
1 P {- \6 G; g, v {8 `: I! M- e# W9 F4 {) d& @4 Z9 i
return dwItemId < p2.dwItemId;
5 a R& z0 @1 S7 g) W1 C s4 B }else{
$ l1 S3 W0 ?3 m& \ return dwKind2 < p2.dwKind2;
( [- z# z# u- B3 y }9 @% ~0 N8 [4 A) A4 j+ H$ C
}
1 j( f8 s% A: ]4 w# b% h};
) n- ^* }% S1 @, F, i1 ?" mclass CInventorySort& T. S" Z U& u5 u/ l, S3 n
{7 S7 E+ o& `. l8 y1 G
public:
. w6 v' h# a- k6 x0 hCInventorySort()4 z- P' H b! s) _; A/ ~% o
{' D! [1 f, f) e1 b; m9 x8 P
m_dwPos = 0;/ c) B7 v8 P' t. ^! L
}
- J7 a( z( C1 n4 Q" W5 l& x" _+ T~CInventorySort(){}
# v; P$ X5 V4 F; M7 Tprivate:' W& Z, T( [) b5 }' i6 Y: \ C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; ^: H2 w7 H/ ?' u. B t4 vDWORD m_dwPos;1 t1 |, R N' m' [" y
public:* l9 [, w- q7 m* n) q, k
void Add(BYTE nIndex)# _/ M; h5 I J3 W) I
{
# |+ F0 ^4 d4 S& i; q3 q if (m_dwPos >= MAX_INVENTORY)
7 q1 ~* M* l5 z {0 ?5 M$ p. @8 r
return;
o9 ]0 [7 d0 O" m. U6 f }7 _7 H/ t1 F/ k# t5 D: N
m_Item[m_dwPos].nIndex = nIndex;
& c% Y x) @: i" k! } m_Item[m_dwPos].dwId = m_dwPos;
$ R4 I6 K# z9 F: |1 g! y+ v m_dwPos++;
0 t0 p8 {/ l( F3 f) {7 e}" |. g6 k5 s, J( s1 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" N$ z' b% g8 ]' H9 y6 T! H+ P{
8 p: O+ p8 P# l" C. {8 N7 a. c2 q+ x for (int i=0;i<MAX_INVENTORY;i++)9 C5 H. L& _( _0 f, F
{
6 K/ Y# I* U7 u+ A- L if (m_Item.dwId == dwId)+ ~6 W' P: P3 \: S# v6 y/ ^1 k7 w7 [
{0 ^1 O+ |* i" q
return m_Item.nIndex;
1 }$ ~3 R9 b+ y3 A- L5 i6 u }0 T' _" S( D; y
}
8 {9 F8 i7 Z# [! K$ F& P* ~5 I return 255;, F; m& p4 w; v& X( D0 E
}7 ~ I& o" B% e6 ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- E/ a1 T7 ?0 ]7 z: v. g- C{& C1 u- j1 N+ v( v
BYTE nTmp = 0;
: v- S3 q+ ]# b$ f P5 A& N bool bDest = false,bSrc = false;
2 n/ I* c7 y1 ]$ x# k( X for (int i=0;i<MAX_INVENTORY;i++)
. `7 V. a5 p7 H: a# h% b {
# q5 ]% G [9 B& ~ if (dwSrcId == m_Item.dwId)
8 E/ _. X! ~7 S- B4 z {
# ?) @: a$ T* {' G+ F- a, J% q7 Z //id相等 则 改变对应的dest和src
" R$ G; Z: o9 W0 R, T. z# O nTmp = m_Item.nIndex;+ z3 F/ w, n1 A% v% F% Z
m_Item.nIndex = dest;
2 h4 P$ i4 J# D- ^& w$ ]; V }# f3 i3 e9 Q7 ?& n8 v/ j! S: \4 O
}0 K$ ^" \* A' U; u& K
//临时数据保存完毕,交换开始, _! i: U# _3 g
for (int i=0;i<MAX_INVENTORY;i++)( W% u" N' j# L" t4 t% y) ^
{
- O7 K/ ]4 c- r4 K; | if (dest == m_Item.nIndex)
: ~. `. ?8 q) [ {
0 T: [. S4 C0 l9 G5 n1 h# }: z# y //id相等 则 改变对应的dest和src+ D, i& l7 A( Q1 @9 u4 V; Z
m_Item.nIndex = nTmp;
; S% C5 r' B% _+ I- Y }+ Z3 b* k Y) [3 {, J% f
}2 C" x! q; C+ [) E
}! y$ Z& [. m1 R% p2 H# E9 d/ P* _
};4 J6 B7 ]9 x! T; H: v% Z( i/ L7 U M: G
-------------------------------------------------------------------------
& b* U7 E8 n5 B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 M, Z$ E. {9 \: [! F7 V7 D搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 q! u; j- s6 `
紧靠其上添加:
. T, k7 ?$ L. p2 g. X Rif( pWndBase == &m_wndMenu )
8 e7 O f2 \# _* d- m& Y5 Q: R{
$ G' x4 }1 _0 E" M# D, ? switch( nID )( h* K& P; `2 |* X' K6 N
{+ |' ^/ X' {7 [& W
case 2:
# r7 }) I- G; S1 I6 @: Z {* D% A0 D- w' g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 A1 j. l) ?4 V: g8 f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 O4 C* O5 R" Q3 F. L. _3 q$ i
{9 {( B) o9 ]1 p
break;- o. y" f7 u& N* f
}0 x- T0 L! n. N% S' N/ N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: Q$ e7 K% |. x4 S/ K: H' J: i {2 w! S' k( m+ A* l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 V- Q+ N5 k2 w, Y5 k- z4 v5 |
if( !pItemElem )
5 Y. V0 y- Y- @- p& F; m3 U continue;
7 h; W. B+ W% P; Z; G& ]7 O if(pItemElem->GetExtra() > 0)! ~' X9 E ?& ]! B* Z& q8 k
continue;9 z( s* G3 r! W: M5 d5 L) @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* O+ _- O4 F6 l) ~& V/ ?1 `; w1 { continue;
! U8 g6 p7 ~8 q! l3 l$ J if( g_pPlayer->IsUsing( pItemElem ) )
: f9 q$ o" q8 a) k' m* B continue;
2 _* y/ I9 M) F ]/ u# [6 D8 N if( pItemElem->IsUndestructable() == TRUE )
: X4 v. M0 S6 ] {
8 d* V: h6 K+ C- L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 b8 D3 l7 \8 w
continue;
0 q' b7 k' Z% D' j$ z; I& K; ` }" \6 l. c9 `3 z2 l+ C8 ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 P2 s/ m N2 q/ l, g6 c+ J }
3 q% }9 W3 i, C& z8 @$ Y2 T z9 U" v; ` break;
2 m- Z9 n9 Q+ M8 l: _0 [( Y }9 h" m, {! ^2 d
case 1:
' g4 n8 e% k, \) x$ F) _ {
; x+ R& X" X5 |5 r0 A# b( ?( } //整理背包' U4 |7 Y4 m4 K& n: Z
//////////////////////////////////////////////////////////////////////////
' J! \. P8 P2 w, t5 r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" u) y( h6 T2 u) a) t A! b
//////////////////////////////////////////////////////////////////////////
4 E3 j3 F/ p7 U: k8 h& i' ^* U2 ]7 c //////////////////////////////////////////////////////////////////////////5 r0 d! R2 h" B. u! Y
CInventorySort* pInvSort = new CInventorySort;: R, C: K& g' O& g+ i( R F
vector <sItem> vItem;
1 ?# q/ d7 x1 x! j( `, f6 _) a vItem.resize(MAX_INVENTORY);//初始化大小4 j0 s& t5 L& _# L( O. }, Q, u
//////////////////////////////////////////////////////////////////////////
0 Q# m6 I* z! W T3 G' [3 A //填充数据
6 O9 `) t2 }4 l4 Y$ {% Z for (int i=0;i<MAX_INVENTORY;i++)
- a% W# O+ A1 L3 B* Q) \ {
) c8 m0 K' O$ C2 z; P V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 f: B# x! M/ P. ?- a7 B6 c# O if (!pItemElem)
& E" y) c i) f5 K& ^ {/ v a$ [& G" ^% L) T5 p; X; v
vItem.dwKind2 = 0xffffffff;2 t( W# q: w: N0 `6 x: Z/ U( C
vItem.dwItemId = 0xffffffff; f; N l) t$ E( U% v3 ]2 d/ E
vItem.nIndex = i;) m7 _- D% f* N( R* O9 E* S/ D
}else {
7 S( }# g; m1 `; V7 _+ i ItemProp* pProp = pItemElem->GetProp();
5 v. Z8 g" Q, z2 N- B8 A- S; D2 E vItem.dwKind2 = pProp->dwItemKind2;
& L5 k/ h2 c" k1 v/ K vItem.dwItemId = pItemElem->m_dwItemId;
" [; a8 X9 m6 G1 J vItem.nIndex = i;
' Z& N* b f$ y+ U* {+ I. l7 d }
/ l- _( T' A" ?; C v# \0 M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
v w3 d6 p7 v" }6 G1 U, j) e" G }
: w2 S, k: i- Y //////////////////////////////////////////////////////////////////////////
' {' ^' x0 u: [8 f( t sort(vItem.begin(),vItem.end());//排序
( e& R5 E5 W3 Z. g0 Q+ t //////////////////////////////////////////////////////////////////////////2 z" t! b2 t2 w( m5 v# `7 J, I
//交换3 i( w9 N1 B+ ]0 o
for (size_t i=0;i<vItem.size();i++)0 l$ f, o' f3 c) P6 N0 J3 p }- }
{' X6 q% o6 X* u$ ^' a- f7 v0 \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 X" }' ?* ~8 E2 c' J* X3 p3 E pInvSort->Add(vItem.nIndex);) ]. r% G& q6 D8 y
}* A+ N$ b9 C$ D* |9 z; h% U
BYTE nDestPos = 0; P, H& N1 \$ O2 U
for (int i=0;i<MAX_INVENTORY;i++)
% Q9 V# X, Q! j9 e7 A) S% j; A2 I {/ W; g5 J- O" U: }5 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 b5 {( @, Q* ]; F! g
if (pItemElem)
+ g5 ~+ p. R- W# d; \% v6 j {! D: s. _' f( {& P
if (IsUsingItem(pItemElem))+ W$ r" z5 _8 v
{- j& K! y& p Z$ X2 W
//这个位置无法放
8 _* }+ o5 s6 G3 H4 a nDestPos++;' ?& h. H$ B7 |6 E
}: w( W0 w+ h2 j1 A
} `6 E( a% R( X1 e
BYTE nSrc = pInvSort->GetItemSrc(i);
1 _9 i: e c% a% P" H' n* {* y& K( f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 V: {8 `8 V- T) o& T& o2 r9 C6 @" c
if (pItemElem)
% P( v% j e! I, K% ^' |, z" Y& D- _ {+ i _* z! Z. M0 Z8 \- c8 k2 U
if (IsUsingItem(pItemElem))6 P% i6 J0 g& j6 v- D b5 X9 N
{
i9 D+ d# a2 p8 t //这个道具无法移动,跳过
3 j* b4 g; |5 F9 z continue;, {# w8 P- J- G7 Z" i: x
}2 n; q9 V& {$ \+ a$ O; F, }1 A
}else{" K# X0 q* N+ f- V( A4 e) f/ E
//空位置 不用动. m( N& H) G" |0 j; D
continue;. d' b' N' Q/ p" u. }, z
}
1 h$ e, s3 z3 A, J5 N3 L: ]1 _ //////////////////////////////////////////////////////////////////////////
k+ X0 {1 H; |( x `( \1 W0 ? //开始移动' l( W& u' Q- b+ ?8 ], ^4 g
if (nSrc == nDestPos)
8 V$ z6 g% E; K% ^! r9 F {
G3 j2 `% Y `) |6 ` //原地不动
3 i) J4 r8 p" H, u8 I* Q nDestPos++;
) C, p4 E- O# N0 @4 ~: T0 Z continue;* `: X# P. A1 T/ @; ?
}6 I4 }: s( T; N0 f& i j
pInvSort->MoveItem(i,nDestPos);+ s% W! r. X m9 j5 h6 T5 P3 I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);" x5 ?. q0 d" w' R1 ]+ |2 b
Sleep(5);7 L& E: E+ v L& R
//Error("移动 - %d->%d",nSrc,nDestPos);8 _/ m3 Y; a3 O# g, N. p n
nDestPos++;1 f4 E4 e0 O4 W! J( @4 `1 E
}, h. u- }; g/ ^
//取第一个元素的信息
/ A0 o$ B$ ?* V' N2 E /*# X' L* F6 z8 s i' b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) F6 h# i4 }4 H1 E4 O1 a {
! U7 e y7 x0 r% t0 _. | | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 N" S4 ?, t. n8 H4 a; ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 K, G/ g, ~' h+ o5 L/ m
}( u! y2 l" _8 F& ~! ?" u
*/* ^9 D9 n3 E5 w/ X R0 K6 H- \( G
//////////////////////////////////////////////////////////////////////////
7 [5 k; G9 w7 }% W7 W$ T break;
2 k; D, @' A& D0 W }
& Q1 o4 X+ T4 W- y1 @ }
0 R' X- I& F& l0 [}
* N& s9 [4 m: ?m_wndMenu.SetVisible(FALSE);8 f% f2 K: b8 V! _9 R
0 P1 T) v0 V! O, w# z+ z5 x1 ~--------------------------------------------------------------------------------------------------------
E3 N+ v. z( o6 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): |1 M7 H8 S+ H7 L8 n
{; t( l$ u4 L2 P
BaseMouseCursor();
! V! v9 M/ f5 H) h}0 N& i# H% M6 b' }' w- D& r2 X( C& U
在其下添加:
; x0 ]8 S( {3 |+ y2 g5 kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): q& U0 b/ Q" D% P* Y1 \
{5 `: q: l) D% B2 D! I2 r4 D$ H% d3 Q
m_wndMenu.DeleteAllMenu();) D2 k5 M A! Z H( z
m_wndMenu.CreateMenu(this);" ^4 h4 b% z+ d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" v' Q$ e) g( M5 v
& F z) L2 g& s3 Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). `; z, W$ x3 d0 U
{
0 s* S+ |/ v% ^4 H; @9 i; u //P以上级别才可以删除所有道具2 M" N* T% M H- x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 Z# Y9 h. I2 b$ g6 b1 K' f
}' i! l3 n! W0 u' v; e# ?8 w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! U& t* z0 ]- F1 ~! c9 K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' ~; j! a6 l/ n1 S$ \' T& W& B. U5 pm_wndMenu.SetFocus();
9 X, r- {+ y9 G; Z+ `}
$ ?, U, C, v' D( x! E------------------------------------------------------------------------------------------------------------
3 D- D& K) t6 ?0 v/ }1 b*************************1 P0 M/ v7 T6 ^2 {' g" E' h" `/ B
WndField.h文件( V# r% |& G/ n8 L+ o
*************************
& J' o0 ~" Q3 K* K搜索:BOOL m_bReport;
8 Q8 M1 P2 K# g* A# k+ O0 F! k其后添加:1 Y5 y: U" v. y3 V$ T8 H
CWndMenu m_wndMenu;/ e. v |+ t7 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 K' e4 x! g3 t& e$ z; o其后添加:
2 `9 V' t [+ W2 o9 V0 Evirtual void OnRButtonUp(UINT nFlags, CPoint point);( L, T1 ^% M2 T( c) s/ c, Z K% v
" @* z0 L4 a$ n) e+ s, v- C# |
+ z! n& P: L* j |
|