|
|
源文件中_Interface文件夹下WndField.cpp文件
; Y, _4 ^0 l# s6 _5 R7 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), ~* G3 t" {* ^. U4 _2 F: K( c% R) R
# Q; p0 [. z c7 ]5 n
struct sItem ^/ _6 q: ~. ~
{' u; Q( a, z) Q& r6 S
DWORD dwId;4 q. Y& i% m% ~2 r+ f& f& W, l
DWORD dwKind2;. b2 g+ f4 f+ d
DWORD dwItemId;4 l% z' a7 ?4 `2 n
BYTE nIndex;
$ L. p, k1 Z6 R0 ]' P/ P4 F, IsItem(){2 `' E: l! Y0 M1 @: h7 V9 f
dwId = dwKind2 = dwItemId = nIndex = 0;
9 j) B5 C% Q& T# e& s}# p+ g* ~- T& R
bool operator < (const sItem p2)
$ \' x8 E. H* B; T{
8 d4 i) J2 C6 v if (dwKind2 == p2.dwKind2)
: `$ t0 ~4 I" Y: M8 G3 F; H {
- P4 F) f0 L% k" _9 w# o( \9 [ return dwItemId < p2.dwItemId;
* ?6 k% \7 c& X# R7 P8 i }else{
( u& Z4 n# H$ H- o return dwKind2 < p2.dwKind2;
5 K4 X5 ^5 }9 Z3 \6 r s1 @ }
5 s* ?- x; X7 w+ N" L. O}; n- T* _+ @- W1 ^
};
( t' H) R! k/ a0 {; }9 Lclass CInventorySort
p8 x9 }9 a* y+ _# W5 x{) I- W- J# v5 A- \$ P
public:
5 ^+ S, ~2 a' ]# eCInventorySort()
( `" ?( @* Z$ z; O0 Q8 U2 Y{
6 o4 f/ k; C' b0 _ m_dwPos = 0;
. F' ^; g- q8 f4 h$ Q; z}/ A2 w# i$ n& J- F
~CInventorySort(){}
7 k$ `9 f0 h* q {private:6 h( ]* H) Z. r% H: }2 k6 I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: X z6 I" G& Q. S9 z6 u& w- F5 h% WDWORD m_dwPos;
# W! O0 ]" ^# `public:# p. p- q, |* n9 J+ O
void Add(BYTE nIndex). x2 g5 }/ w5 I
{
. K5 c+ |2 W! X! n: I if (m_dwPos >= MAX_INVENTORY); o* G) L N* a0 U% w, G
{
; g- r5 P8 U4 J3 y/ ~* x% K return;
; ? {, B! A G9 r, z }3 o) C+ i4 _& \
m_Item[m_dwPos].nIndex = nIndex;. m ?5 E F# {' N3 |% q
m_Item[m_dwPos].dwId = m_dwPos;
# I" @1 S/ o. l# w m_dwPos++;5 F1 n8 z: H% x& [" V* Y
}: z2 ?( s( G3 q" e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: O( ~4 r7 e8 y6 Q2 t7 q' M
{
) s* g4 X8 \5 O% T3 M/ H for (int i=0;i<MAX_INVENTORY;i++)8 M( N5 H' A; d3 F8 L8 d
{0 j3 v2 |: H: c4 X5 l
if (m_Item.dwId == dwId)/ h, T2 o" l: k5 n
{! Q" ?1 Y9 n5 ^5 g; n' s, R
return m_Item.nIndex;
: \5 \$ u' r6 W! ^ }0 a l( z. [# r7 ^4 t0 L2 b
}
' t6 Q* X! F+ G2 v return 255;' O$ L5 V/ r& w6 F3 T# t
}) T$ C- {3 L" s! g, Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 I- _$ u2 }0 M
{
9 G. O) r$ B6 Z# _; H6 ? BYTE nTmp = 0;
1 k( p. n# `( u# [2 p. U bool bDest = false,bSrc = false;
- U9 q: A9 w5 [) S for (int i=0;i<MAX_INVENTORY;i++) T" r; C s. |! [+ x
{
9 d3 Q3 Y5 s+ b& y if (dwSrcId == m_Item.dwId): x. |3 e) w! }
{
3 X# j# ~# h5 Z# q3 ~: A7 F //id相等 则 改变对应的dest和src3 B) c5 v2 h1 {) r$ j1 w: D* e
nTmp = m_Item.nIndex;7 z! ^4 Y0 ?/ I; F R" L* Q
m_Item.nIndex = dest;* c( Q. b4 F& h! j0 f% Q
}, ]- @( ^; O% {3 e
}
! a+ C u- ]8 F- A$ o' n //临时数据保存完毕,交换开始/ S' z; P8 T( @7 o/ U7 Y
for (int i=0;i<MAX_INVENTORY;i++)" t8 D. f2 O& Y5 C) [$ X
{
, m2 K& y/ b2 p4 |& c if (dest == m_Item.nIndex)
# ~ A( I4 ?5 x: H {: i* V& O" c6 W' F) y7 z5 a* z
//id相等 则 改变对应的dest和src
3 i9 [8 J, n4 `& R% [1 l0 U2 x. @ m_Item.nIndex = nTmp;
7 I x, j. N; Z# ?# O8 q }+ Y- m2 U% n' E* ?
}
, K7 ~" C) z/ z' F; a}7 p6 @( A; F6 o& x
};. |2 H* d, X+ j3 `
-------------------------------------------------------------------------
3 U! g/ [* h) i$ C9 `! R7 z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* h# J0 c( @0 ?& V7 Z0 p搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 s8 w' O, C" H
紧靠其上添加:7 P% }& C0 M) X" j* ?) o
if( pWndBase == &m_wndMenu )
! C& i: `3 L( d4 I/ X+ A; U. c{
; h. C# g" n( y; X; A4 W) {$ X switch( nID )
8 c% V7 j4 ^4 R0 x8 |; ?3 b {+ _6 }; y3 L$ k' w
case 2:
) a/ k9 ^% F7 i8 g) Z {
0 e/ t" V! T" x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 y" R$ B0 w. N6 z/ I6 Q, x( L, y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 K- w* [6 x1 v: } {
' e: A" l# \) \% V3 J break;
9 _# ^1 O y a. P% C }. R2 i+ H$ y9 o' O4 Q8 \
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: V! p$ |9 s- p" R; J- s! v( ? {4 m7 x G7 l$ p/ C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 N# h) z% z% a9 o+ j1 f# a
if( !pItemElem )
. u3 H2 U; S( u! g continue;
5 y3 A4 h4 V% L/ ^2 |" s7 C( v& o if(pItemElem->GetExtra() > 0)
' U6 t; y- r% J# f4 b/ q continue;; j" y8 G/ Y' L; O( e
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : A, Z0 i( t* Z! h) }. M
continue;; z5 G# O- q* ~: k! P
if( g_pPlayer->IsUsing( pItemElem ) )7 ~9 e* z+ R3 { ]
continue;
5 O, y0 F. A1 N5 G( m7 U if( pItemElem->IsUndestructable() == TRUE )6 s$ K* O5 v4 ?) U \3 o
{
{! b2 U/ M; C4 t- V0 C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- l4 p4 d6 B) }& P9 Z! |
continue;
- Q6 u. g! B7 G$ @8 t3 v& ~& P" k }- G x/ v j9 k) T% N: D
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% b8 k- a. I) p8 S9 X; z }7 L0 ~3 t/ V$ {& x) V8 t
break;( [6 o" ~+ N' }" G' P
}5 {9 w4 i2 _, f* P
case 1:
3 Q8 B2 _8 e2 Y. M4 h5 k7 \ {
6 H: k* r7 b7 d, V4 E //整理背包
" K& ^( o2 A2 [" ^ //////////////////////////////////////////////////////////////////////////* s, X2 W+ ~$ a. V! `' Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 F" l! s% Q4 l4 X3 a$ A
//////////////////////////////////////////////////////////////////////////
( p, a+ V1 s1 o' w+ A! G //////////////////////////////////////////////////////////////////////////" r% \; p, g3 h9 p* L7 a
CInventorySort* pInvSort = new CInventorySort;
8 E8 I8 y6 O& m+ U, ?) Q1 l vector <sItem> vItem;8 n! O! S* [/ Z p! W4 f6 y
vItem.resize(MAX_INVENTORY);//初始化大小" r3 w1 r2 v/ c
//////////////////////////////////////////////////////////////////////////
1 x3 I+ c9 [* L3 U! Q //填充数据 Q4 Y$ Y, U6 o
for (int i=0;i<MAX_INVENTORY;i++)
: G7 o: {3 x! E4 R8 L0 d {( `. p( O3 b. K. _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: V5 h' R# W4 O2 w# G if (!pItemElem)( Y) V* N7 r& O$ x
{. H! T0 u f( C& k8 l% E
vItem.dwKind2 = 0xffffffff;
& J8 X* ^ e8 w3 L; y5 E$ ^ vItem.dwItemId = 0xffffffff;% ?. R0 W4 F3 i! O6 u1 l1 g
vItem.nIndex = i;9 P( U4 C" W( [! s# r2 w1 |1 v
}else {4 Y0 l/ p( g4 y# r% }+ R
ItemProp* pProp = pItemElem->GetProp();
; |' Y9 I7 _. `* R4 T! ^ vItem.dwKind2 = pProp->dwItemKind2;+ v, r3 E/ z/ k% T
vItem.dwItemId = pItemElem->m_dwItemId;
% n" d3 ]! X0 D( |' M- f" A vItem.nIndex = i;
5 P8 ]; _1 B0 w" ?9 ^' @1 S }
+ U$ W( p/ x! ~& T) ~ T0 p //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
p, y; P2 d7 n$ _4 E& y }: d3 d q* o: I7 @
//////////////////////////////////////////////////////////////////////////
" B& t4 q- [1 o* r; y* D" \ sort(vItem.begin(),vItem.end());//排序
3 [, S) ~/ T2 P+ r! } //////////////////////////////////////////////////////////////////////////$ M1 N @: a4 `. a
//交换
6 L- s2 g6 N X! d$ C; |3 i for (size_t i=0;i<vItem.size();i++)/ H, K! x. L5 E
{
5 u6 S# B' h6 ?/ k //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ^ p% N/ m" o8 x8 c' O7 m
pInvSort->Add(vItem.nIndex);9 R* e; K$ J: l' Y8 y
}
3 ?3 [9 c7 e) j3 K: ~- G BYTE nDestPos = 0;
. Q5 Q0 v) ?' e4 o for (int i=0;i<MAX_INVENTORY;i++)1 ?9 o) T1 u$ N- j1 V
{
$ z; k- |# v5 G8 p4 z* ~; K7 c* {6 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: G+ V9 i. Y* [( i% A* s if (pItemElem)
7 F7 G$ O7 z1 c. B6 J {) B/ N+ O& J1 W) k
if (IsUsingItem(pItemElem))8 @) d" s- c9 V
{, J. A! [1 B4 u# @
//这个位置无法放
a& B8 o* i: q4 I q nDestPos++;
7 G1 s. ?# h& f4 [3 j }% ?4 x0 ^+ w% H/ L4 J3 X
}
- G( J: W t5 o2 ^9 P% o a/ X BYTE nSrc = pInvSort->GetItemSrc(i);6 w# Y }' X- x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, d1 Q8 A) S0 e- T4 j8 q" Y if (pItemElem)
/ t5 Y+ v& m" d- e4 {% Y {2 R# J4 z. D, R7 r. O1 Z
if (IsUsingItem(pItemElem))1 U! l- k7 ]0 ^+ C/ y. Y+ ~4 M- V
{+ S" z3 d4 N" r4 ?
//这个道具无法移动,跳过
' l2 V: z4 E; u# n1 X( T continue;
% x! ?6 o9 J8 x$ Z0 Y& E4 l( M% n! ^ }6 F1 q( w+ ^ S1 [6 c; s8 ]
}else{
$ ?* U$ ?/ X7 I. Z4 O //空位置 不用动% q. o& ~) t- n0 `' F4 G
continue;
6 | Y) [% F+ {. b) H% h5 ^ }
) y8 h4 B' |9 H0 Z" _ //////////////////////////////////////////////////////////////////////////
( ?" o- D* j, e l4 d //开始移动 a3 P+ d) d+ L2 x. ?$ O
if (nSrc == nDestPos)
7 w3 R0 r4 u @2 b {; s: k9 Y( z( w5 s5 E2 V1 Z' ]
//原地不动/ L/ ^6 @ `) O# t' g
nDestPos++;2 J* W" R3 z+ r6 Q3 T5 `+ s) o7 G
continue;- |6 M @- J. k( x$ G) ` Z
}( V' Q6 |* T9 [% b5 |5 h, Y/ \7 j4 v
pInvSort->MoveItem(i,nDestPos); O. w0 p! @/ }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: \3 }6 j# Z0 f8 l/ [
Sleep(5);
' w% q. d I) k# W h' _/ q( Q //Error("移动 - %d->%d",nSrc,nDestPos);
Q" a$ [3 E: K nDestPos++;
3 ~5 Y' k7 ~: i! ^ }+ y7 K, r1 [! W, ? M
//取第一个元素的信息8 i7 P' O% o0 k
/*
3 W* j3 s( {5 `, t5 B% C" d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. {1 M) ]2 w0 n: v4 ~ { Y( G5 W# K+ w9 w* U8 x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 @- I+ m/ e3 B1 s* s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 R. c6 \+ W6 m% Y; o# q }0 o' K" Y# D* m( a
*/; S4 h2 w1 `& x0 K, \
//////////////////////////////////////////////////////////////////////////0 O! t9 G( e2 E/ ~
break;3 Q( K' E9 |' t3 \: `6 A+ h/ ^ e
}
( u7 |' M: x! Z% I; T$ m }
) F8 I6 Q9 r2 v3 U}
4 Z6 H& i+ j7 Y; Am_wndMenu.SetVisible(FALSE);4 O6 q- D; N4 T' S# b7 K
- w% F9 p4 L% s1 Q1 w
--------------------------------------------------------------------------------------------------------
! q1 A0 I; y: i2 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 U5 r1 E' o! `" o& a; x
{! q) }; n7 v b
BaseMouseCursor();9 a4 W, w! v) W! b7 h6 N
}
( A4 _! x1 U* m3 |* N在其下添加:# Z5 ]/ R' z% p) i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
E6 J6 M4 D' n7 Y# n3 K{
. \- h( m1 [. D8 N4 i g, W$ |m_wndMenu.DeleteAllMenu();( `1 z2 y1 q& A* [7 e( H
m_wndMenu.CreateMenu(this);
7 F9 y0 H' u' h% Z5 b' T9 K* g; L: Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* \# u8 `1 ?% G8 Z" d( A; Z7 z* s2 b! c- K& j4 J# r: W; G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" p2 V, o$ x3 \4 k: o
{8 {! w% C: V: i- X p2 e
//P以上级别才可以删除所有道具
9 D1 \* b: D4 Y2 t* z& l. e m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# r9 ?1 v- l2 g" i Q
}
/ b# T. s. x n A% s2 Cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. }3 U- }0 @( am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; u, [0 y/ l% B6 j: t; C
m_wndMenu.SetFocus();; C1 Q8 U* n& b3 z" A) T8 Z0 M2 x4 w
}$ t2 _: C8 }# e. D
------------------------------------------------------------------------------------------------------------
! l. j3 w9 U/ ?! T7 T; P o3 A*************************) R: P) Y" I" f( i7 J! J9 [
WndField.h文件0 }+ L8 o7 p# M# P8 e4 P
*************************$ d* r- U0 R+ @+ k- ~6 w5 P& j
搜索:BOOL m_bReport;
& F$ e ^5 d" [) P% z其后添加:% [ m$ v0 e2 T+ E8 T2 M- N
CWndMenu m_wndMenu;
2 ~' p" w0 @& u9 M q2 B$ P7 R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
^9 Y% _8 `/ u7 }" W) @其后添加:
$ b" k* c% r2 m; ?+ D: Hvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) S0 x* n2 L4 ]1 M8 I3 i# Z: V5 K$ [6 H$ |8 F7 [6 V& @
& Q, r' Q7 o, E+ }# d+ G) ^) N/ a6 ^ |
|