|
源文件中_Interface文件夹下WndField.cpp文件1 F& N& B& K! O% f) B+ n6 T( ]$ H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 ~: I9 Q# Y8 b% ]+ t4 F. K) J' o0 w9 O) g! {) s1 s6 W
struct sItem1 U% f' `5 ?0 T1 M" Y; d! ~0 _- ?
{) e( q+ S* j4 h: P$ O& |, P
DWORD dwId;+ u& C. u! s- H" x1 O- s
DWORD dwKind2;2 z9 z& u6 ]0 Q) ]% f
DWORD dwItemId;
0 T2 i) B% K. LBYTE nIndex;3 @% ?3 _6 u3 [ {3 v
sItem(){
# m! `; I2 e' U9 q2 _9 S dwId = dwKind2 = dwItemId = nIndex = 0;" F2 w6 Y7 \# |) ~! I5 l; ^
}
& e& R$ h; s; f$ Cbool operator < (const sItem p2)8 F4 ^+ D0 U2 Y
{$ S+ @9 y! x v; A# Y9 Y$ {' a1 i8 z
if (dwKind2 == p2.dwKind2)5 r5 x/ ^3 a1 `+ Y1 }3 N
{& ~: s4 T* W% Z' h$ S; w; Y4 Y. |
return dwItemId < p2.dwItemId;! ~+ j6 T/ w5 [ x3 y$ B, Y
}else{
* Q$ A6 s# u) ~ return dwKind2 < p2.dwKind2;
( m$ I2 f2 @3 e* O/ P6 A0 m) ? }3 ~0 H" u( b+ H/ j6 c
}
' R7 d0 q6 G$ s( h0 }& O. d. U};- N, H' t+ N% L* l
class CInventorySort# n8 n. g9 o$ ?5 [" J
{# V; I4 U2 e/ }/ p9 ~) I' |
public:
- k3 J* ?6 y1 y4 u; zCInventorySort()
0 a# A! R; c3 n- ?7 D( j{
4 X! K4 D1 G) f( n2 ]* Q6 `; n m_dwPos = 0;( z3 c" j Y. N' ?
}
0 U: z; T/ @( t. S~CInventorySort(){}1 z( T9 v& x7 U% h6 j' ^
private:
: ~0 q% W( o4 m9 [; J7 d* BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ x+ s$ }7 J0 M) X/ P+ kDWORD m_dwPos;
p( v$ E& r7 C8 Q. P1 y; ypublic:
8 d; H$ u6 A$ q/ t, H z( Kvoid Add(BYTE nIndex)
4 X* R/ ?7 ]* ~: `- B2 q* a9 _{( i6 Z! f" n: r5 I9 M$ R# q8 S" n) A* a
if (m_dwPos >= MAX_INVENTORY)( Y0 a; m8 k2 I( f/ M7 ]1 ?& M v6 N; n
{
3 O$ c- ~. F7 W return;
2 D$ z) S! l1 q' j" h% ^4 Z" {. m$ P$ J }5 J( `+ {2 y. T8 F, T3 M8 u" N
m_Item[m_dwPos].nIndex = nIndex;7 f. L, A% `9 a) r# R1 ~
m_Item[m_dwPos].dwId = m_dwPos;
) d+ c6 @; H. U# W7 j& U5 s1 k m_dwPos++;! X$ D% d! Q7 q
}% o$ A- q: y: t4 w# n! y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 F# g+ D2 E/ q{
) g# n' s3 I ?/ r3 g for (int i=0;i<MAX_INVENTORY;i++). K+ `# Y4 ~& t6 t
{: q) i6 e" J4 e& ]9 L8 f
if (m_Item.dwId == dwId)
: R1 e b( P- R4 ~( |# n- \. {1 H% Q1 C {
) r, Y1 L% j8 w- a X- Y return m_Item.nIndex;. I s3 l+ V0 y D0 l+ s
}4 @( j. D$ R7 o O( }0 j
}4 O: k) q' \$ q+ R
return 255;" q5 I8 o8 |) y9 |
}1 w0 q% q9 |4 I3 U* I1 q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 m1 f2 u/ ^ m7 L
{2 l5 @" @* W6 q5 g
BYTE nTmp = 0;. _# ]* v& h+ z, q( a( W$ I; A
bool bDest = false,bSrc = false;
2 H3 h" E. r5 D6 [; k for (int i=0;i<MAX_INVENTORY;i++)/ M& W" k. p3 l
{7 D9 y. {$ B$ c) F' ~( ]
if (dwSrcId == m_Item.dwId)3 j! q. f a6 a; C+ a( O7 ~. i1 R
{
: D5 n4 \0 y }$ l //id相等 则 改变对应的dest和src
# U' _6 z& C7 N2 |' W$ K nTmp = m_Item.nIndex;
2 m- h* k8 ^5 x, W- M) x. n( M) L4 q3 S m_Item.nIndex = dest;
% U Y+ ~& ]6 V0 u% t# E }
# u; G& a0 m, ?) C }3 |5 b! ^' { O c& k2 k3 P
//临时数据保存完毕,交换开始
9 m8 R6 k1 o3 ?5 ` F' ^ for (int i=0;i<MAX_INVENTORY;i++)' ^ ^ l; k; t8 u) ~0 m% \
{
4 u: E4 Y6 N6 h2 y0 [3 D1 }: a if (dest == m_Item.nIndex)
& n2 @) w3 R# A6 F+ G2 k- Q4 c" H {
9 b0 ? K0 i- u //id相等 则 改变对应的dest和src1 Z* x' J- |: _9 b1 w
m_Item.nIndex = nTmp;" E; `8 c5 q0 ]! [9 x8 W& ^: `
}
/ v5 G6 V! _* b$ i r' d d }
# ~0 G% K8 E) H3 p! h}
) `+ D; Z7 K/ N};
; u$ R: |5 W( g. ?- k4 w' R-------------------------------------------------------------------------+ Y! Q- d# w3 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% F7 c! ?3 q; v' L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ a/ P% I8 _5 ]& d* x" N i
紧靠其上添加:3 H- s1 e3 ]" g0 E4 N! d
if( pWndBase == &m_wndMenu )
+ q+ \) t7 ` |7 ^{
' N1 o9 Q7 W; @- v4 p# ^ switch( nID )
0 _# j2 a8 x! g' N. N4 R {
; q( f# e" I$ ] g( D7 j7 F" M" f case 2:, L* X3 d2 j' |6 ^( | _' o; J
{
, g7 [0 S3 \: v. s Y. O$ M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 }% ~1 r! W+ A. y0 @! o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 N0 }/ j+ V, ]4 T {
9 T. ^) {! I# \! O( n- K9 b break;+ Q* ~- N8 d! i. W0 f
}$ G. ~: q, o7 S* u9 f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 B% [" O, ]# @5 `5 W& w ]: y# ` {; A4 U* H' M; Q+ L4 r) U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 U; F, l% y0 w2 |8 L
if( !pItemElem )6 R4 A0 \2 _ J: L8 B- P
continue;$ ^# \- E) \$ t3 v- c
if(pItemElem->GetExtra() > 0)8 f) } U. J# r6 P( I+ q: \+ y$ t" S
continue;
1 p* w# C! A& U0 n! |, {$ c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 G% b' L2 X; @9 Y4 D5 E7 _9 Z
continue;
* ` D; f! R7 u+ `- _8 e4 x if( g_pPlayer->IsUsing( pItemElem ) )
( ?3 `- X7 r) r# q4 Q1 g continue;
% c' e. o# U1 T if( pItemElem->IsUndestructable() == TRUE )
5 x6 U; p' Z. L* Z0 q8 M1 a n( t {
; c: [, x$ F6 w7 x. v2 r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& `' F' y4 }4 m, |. Q
continue;5 \: N2 c) F. T+ ~* A! m" H0 z
}
7 ^) I3 M) h H# G" R0 ^% L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 R! g0 h1 }. a5 D" W
}, e, ^ g# `# F k+ @
break; u: q) Y# Q$ ]# ^8 {- C+ f1 ~
}3 R. K9 r( g$ U8 l: i
case 1:
! L. v2 e# I, `, B5 J1 x {
3 K' m. \ ?/ V& g- D! _ //整理背包) l2 E8 L+ j' y) Q5 p7 U. j
//////////////////////////////////////////////////////////////////////////
?* K9 ]9 z# a5 u. F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' D0 Q- k: q5 l+ Y //////////////////////////////////////////////////////////////////////////
5 a0 V- K9 U7 N4 H# k! W, ]* I //////////////////////////////////////////////////////////////////////////
8 }' t" ~( n& o CInventorySort* pInvSort = new CInventorySort;8 s G) H- F$ {1 V
vector <sItem> vItem;* [# n1 A0 K t7 r) H' q. U
vItem.resize(MAX_INVENTORY);//初始化大小
( \) ^2 a8 o' c' z9 R5 M1 }$ C //////////////////////////////////////////////////////////////////////////
- S1 g4 }* \6 L' z( G" R# b //填充数据
: {: W8 H- v! V& r' D+ ~ for (int i=0;i<MAX_INVENTORY;i++)" [: C6 y8 S7 J6 {. `
{! C/ t& b/ H$ `7 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 b. k" P- \) t1 i, T0 E3 k
if (!pItemElem)5 r7 g' L9 L0 E+ v% e7 e& T
{: l1 ]. v" l7 T3 t
vItem.dwKind2 = 0xffffffff;
; x* e$ N" B; F9 }+ A E# K h0 ? vItem.dwItemId = 0xffffffff;! o& o# @8 V7 K4 T
vItem.nIndex = i;! ^( d8 U% I0 E7 [7 Z2 j+ r
}else {
6 u" }$ n/ Y/ M* @' C7 T( s+ M ItemProp* pProp = pItemElem->GetProp();0 R7 z' V( p& `- f# K7 i6 M2 W
vItem.dwKind2 = pProp->dwItemKind2; D! M2 i" D) f8 g! s; q2 Z: [) @; |
vItem.dwItemId = pItemElem->m_dwItemId;! a3 Y- `3 ~& b
vItem.nIndex = i;
7 z& N1 b Q4 r" l( Y9 x }
: t* K7 `/ }! F2 S: [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: Z4 V) ?* Z4 I3 G$ F }6 r! K% u* @8 N$ M/ [3 u
//////////////////////////////////////////////////////////////////////////
2 U/ |0 C) B6 z# v* t: O7 @ sort(vItem.begin(),vItem.end());//排序! l/ U8 C' u6 H7 _3 T
//////////////////////////////////////////////////////////////////////////( a: a; v. q1 G* u6 j$ \8 P7 `! Y
//交换+ @' N; Z5 F E+ k
for (size_t i=0;i<vItem.size();i++)
# H* @9 a& c m, W* t: Q {& H) q; e% y5 |0 Y/ L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' ?3 l @1 @1 f A pInvSort->Add(vItem.nIndex);
9 P2 K& H# v. X& ?$ b; h6 @* C! V }# {- O) e% r: Y
BYTE nDestPos = 0;$ _8 [, Y1 r* c/ }9 b6 L
for (int i=0;i<MAX_INVENTORY;i++), }% Q3 k3 w5 ]" B% c* M
{, K& V) ?. p# Y: m( m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) v6 ^. Y5 w8 w% R. ~$ ^
if (pItemElem)
' g5 ` |' \: { {
8 q" X8 T+ Q: |) w2 A if (IsUsingItem(pItemElem))% |6 s; q |# I4 L$ a* W
{
% J& H. }9 ^! e1 Q! V/ o) @, Q% k, C0 j //这个位置无法放
# r1 D e: w7 G% D nDestPos++;
, i& m! M! [5 W$ L3 g! x4 r }8 M/ T; m# x) g6 D- J7 p4 E
}
) I' x3 a# e2 X BYTE nSrc = pInvSort->GetItemSrc(i);+ j, m+ d/ I, {4 \4 d+ h4 J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 q6 ]! ^# F. c( P- Z9 U if (pItemElem)
T+ e; |, N4 g/ F j {
- a( g5 B$ y! t5 }, X if (IsUsingItem(pItemElem))# k" f% {- m2 Y
{9 h: d. [0 T& ]' u) a
//这个道具无法移动,跳过
: `; g8 r. _6 [! y continue;
4 w0 E9 _; l- y; Q% L2 e3 N9 i( G }7 w U' e+ v; Q: _* I- U# `! D, X: a
}else{
. L$ f: e1 F3 r //空位置 不用动
# w* o1 M& X: w% n continue;2 b; S, T D5 c
}
* P: _. m5 {; E) i$ Z //////////////////////////////////////////////////////////////////////////
% L0 C0 C0 K, x0 U% n //开始移动
; ?3 F/ M V; r. E3 A if (nSrc == nDestPos)
1 E: k. ?5 Y, }( p6 N/ [& q" J {
! T8 ?' F8 G' A" m* r4 d9 @ //原地不动
3 v" R7 \, `8 P( o2 e' ^4 { nDestPos++;
7 t4 P8 m( Z0 R continue;/ Z% q" X. w# P6 b# r, w, X4 ^2 f
} M" D1 U$ ] v
pInvSort->MoveItem(i,nDestPos);# R+ A+ p: W+ G7 f3 n8 X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 e8 x6 Y/ ^# D; E+ y8 D m) b, Z
Sleep(5);
4 v d/ ]2 \( T( F v, I. Q4 q+ ~ //Error("移动 - %d->%d",nSrc,nDestPos);
5 \/ X# k; A6 u nDestPos++;! v' p8 p- g% |& d7 l
}- B H% M8 |8 X8 a+ m u* [: y! q
//取第一个元素的信息, B+ \+ n+ V& \) ^# m4 t
/*. X2 X" c) w+ `
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' G, ?9 R9 }( I/ n9 Y! Y& L {
4 U* c+ j4 c8 v' | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% r! t5 y) p$ t" ?6 A3 `. E. w9 p- R- ? g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ~# N0 W2 Z2 z' ?- J }/ g" r1 M- a7 s C
*/
% r+ L' i" J) L }5 F: S //////////////////////////////////////////////////////////////////////////
; i* q; G7 y# s( [: \) t1 o* x break;7 l9 S1 u' V, w T* e# f
}
/ ?6 s3 [) p$ l* @. H }
( r/ ^. [! m4 C* Z, V}; G1 J: B, T" ]) {0 _: V& K
m_wndMenu.SetVisible(FALSE);
$ F# v* h% a2 ~, q1 ^4 x! ]
( A I/ @' O9 P--------------------------------------------------------------------------------------------------------# ?* M2 p ]. A$ ?& W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; k8 ], O8 w( T# Y% g{5 I( p* c8 M' ~/ m1 M
BaseMouseCursor();* I# ?2 D: T1 c0 v
}
' @7 E, i; P% `4 l& [在其下添加:) ~! y6 y5 r3 p ]: _. L& X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% L9 G, t2 p, m/ p2 J
{
2 u) _$ P0 a+ t) {m_wndMenu.DeleteAllMenu();; Z$ k1 l& G6 E3 f# ]1 U9 k
m_wndMenu.CreateMenu(this);; v8 k, h/ e6 J: P3 G- U- V, \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& K+ p F; O9 S# w; \% S( ^
6 K) \& p( a' a( a5 i) B! R8 X3 {- pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 x1 E+ h; a$ w) S
{
- }1 T) I k/ L //P以上级别才可以删除所有道具/ o# A* T( F% M, ^: }2 r% l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 Y4 ~2 }% N0 B}
/ g K1 m! d1 T( F7 `' s' Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; x" Z" m; c4 z6 J# i9 um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* h# A% g( [. ?7 c5 q
m_wndMenu.SetFocus();8 A- r; Z+ k/ V# k j
}) b- z9 N) r; q* d' U5 R
------------------------------------------------------------------------------------------------------------8 e9 r8 f$ ?/ N
*************************
. n' J% j6 n$ X. Y) D2 r- ^WndField.h文件: @5 E* a* \4 Y; T( i
*************************
" G: b; [4 }( ], o3 S2 z% s- G搜索:BOOL m_bReport;. a6 Z+ o+ L% i$ v/ u) j
其后添加:% m4 `: m; N& | N S' K9 `
CWndMenu m_wndMenu;" @5 t2 `7 r$ q4 D3 k+ G+ P4 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! m, y& J) e. E- q! U其后添加:
3 s- u( k5 d+ u) ?$ C9 [, _virtual void OnRButtonUp(UINT nFlags, CPoint point);
' U5 w# R1 o$ Y( [& V2 J, I7 B, V, b U$ _$ ?* m# o9 ~
0 f9 J& p/ P" \9 c# o |
|