|
|
源文件中_Interface文件夹下WndField.cpp文件
s; v: b- u1 j2 N) D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( e c3 ]3 w D
( j$ }9 `0 T; ~struct sItem1 Q: [9 ^: O N4 Z
{
9 _6 V& P/ w. x' a& v5 N; jDWORD dwId;
' i4 V3 a, {/ S9 J! T: _! _DWORD dwKind2;9 ~5 }. C. z. q( c7 O" l$ K
DWORD dwItemId;
# q$ [# ]& g+ o/ P2 Y/ UBYTE nIndex;
; P( R. q9 Y- H1 E) z/ q) hsItem(){
" X* |& V. Q/ Q# u* C dwId = dwKind2 = dwItemId = nIndex = 0;. P+ ]0 h5 P3 m; V
}- W; v) M! p7 L. K4 J
bool operator < (const sItem p2)
& B" w" J6 b, L{( w/ x% C: D! t0 q N- T
if (dwKind2 == p2.dwKind2)$ Q; {% I+ R; ~/ n5 o: d, D7 [
{2 k" G( w6 s0 d+ a+ q+ o# f
return dwItemId < p2.dwItemId;( i: G. e! ^+ Y6 z
}else{* l3 D7 O! n2 ]7 U4 _* q* v6 o
return dwKind2 < p2.dwKind2;
4 q7 O7 {; ~1 Z: _- W9 O7 W }5 h' A# V& a5 y% y e
}8 Y5 p3 P0 [, q# M* c
};
5 C7 q/ e# \# X& Dclass CInventorySort- ^. k# O3 O; H! o B2 ~
{
) \: E0 w* a3 n/ V5 p' \public:
2 I3 {, y8 {& A# P zCInventorySort()0 c1 p/ g0 p; B4 ?8 i1 `$ f0 c9 N
{
- \# e- h. l0 m9 _/ [ m_dwPos = 0;
) k1 ?+ N6 Z2 Y1 R: `2 m6 Q7 W}3 R- G8 C1 t8 T, l3 h8 ]; O s
~CInventorySort(){}
0 [+ |1 d1 \* ]' E6 Xprivate:0 A( B: `+ u m- k6 j( C1 C2 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 j) ~* S0 P+ u, mDWORD m_dwPos;
. ^- D! ^) P, Z* Spublic:. _( ?6 l# N2 W
void Add(BYTE nIndex)
4 k" u5 t- F7 b* ]- T, O+ k{
" w8 t3 D, I2 }% Q if (m_dwPos >= MAX_INVENTORY)% R+ ?0 c, M. e9 Y7 K# @
{2 k9 Q* Q3 S( k3 V0 H, l
return;
3 t$ B: z% f7 h: {' `0 t }* I8 t R: M+ z
m_Item[m_dwPos].nIndex = nIndex;
& n/ Y/ D- Y" w m_Item[m_dwPos].dwId = m_dwPos;
0 [0 v. P5 s& w" k) k m_dwPos++; Q/ E7 C' ?) ~0 ?( O
}
+ [! j/ t6 I* q( s) b$ S1 fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 D8 }' d( ~: R! k
{
) V( h- J4 c0 w* q/ [2 t4 h4 ~9 J for (int i=0;i<MAX_INVENTORY;i++)
' ~8 s, t' V- g! T8 U {
7 w: Y% q# X9 i4 X& l1 Y0 H if (m_Item.dwId == dwId)
+ _. E+ v! g5 W; j* | {$ F Q8 R- `) k6 U$ j1 B
return m_Item.nIndex;
% p% j5 W- C+ S }4 L, y& s( E3 g
}
6 Z8 }4 e" l# k return 255;
$ w$ a9 }- A+ l% K}" t+ M6 p) r& d# Q6 M! G, `( ~ G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- a, p6 r# r; v8 |{" `: H' Q8 ^% G% w. C9 c" X
BYTE nTmp = 0;* Z3 {8 R8 v" Z# E: M/ v
bool bDest = false,bSrc = false;
9 L4 P* X1 l5 b4 L8 J9 }. S for (int i=0;i<MAX_INVENTORY;i++)
. Y/ z& X$ F: t {& m1 Z! {0 \5 r" T8 f; {- T o) _
if (dwSrcId == m_Item.dwId)# k+ E3 ?; [# B' b% X
{/ C# f7 A; w6 l. C
//id相等 则 改变对应的dest和src
& _4 S) |+ y; Q4 Q8 h1 d1 p nTmp = m_Item.nIndex;& {7 d& E- u1 G j
m_Item.nIndex = dest; u& B/ `* }+ k9 S
}
3 Z3 k# q0 `5 D. N }5 S# b- R) U, _, p: S. l
//临时数据保存完毕,交换开始; `9 B+ g0 ^' L) ?4 \* A- q2 \
for (int i=0;i<MAX_INVENTORY;i++)* b" y+ N3 s" ^3 J9 A8 F1 D
{ k. i+ Q9 \) x- R
if (dest == m_Item.nIndex)
: \9 N6 a! g, s* x3 _ {
6 O. `& e; c3 m' c //id相等 则 改变对应的dest和src
3 j. b+ a( W& \, N m_Item.nIndex = nTmp;/ ?6 ]" W4 V4 R5 u4 U( V
}1 y$ @ x& e, g ~" A( R+ A
}+ `" N+ T$ C: n j
}: B Y) l* i ^; ?2 r4 P l \; p
};
' p! e( n0 }' c# g-------------------------------------------------------------------------" \% W" ]1 U8 u- O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 s1 o4 Y, e7 q: _# U* B4 E3 Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, q% |# {7 @0 u4 _ ]; F紧靠其上添加:
' }# Q1 d" x3 M4 d# n% rif( pWndBase == &m_wndMenu )
) F/ s- Q* ^; o8 m{
/ n4 r2 i3 V0 H6 A e" X& t switch( nID ). ~4 ^# B# S# ~3 h
{, p! t0 _' G9 k3 A& w' b8 b4 H+ F
case 2:
8 h H* e$ s' D {# Q5 O% S G8 I. E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, E& o, u! V# F0 p/ Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 p: L) C5 F5 H4 u% g
{
5 j+ Z. G9 V3 ~ }. N6 g1 } break;
: n: n. Y* f8 u }
4 T8 Z8 b9 l4 l( d+ p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 [& E! p. s! g& p
{
3 e) W5 i0 Q! P8 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! A5 Q4 `+ O, I/ L
if( !pItemElem )7 b2 O0 d2 }6 G2 O( D9 b
continue;
, W# W9 [: z" M8 A6 m5 Y* b" S6 ~ if(pItemElem->GetExtra() > 0)
& t4 u0 w+ h" d% c continue; Q' o3 u6 X$ t% u. N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! b3 j5 D3 E8 t5 `$ Z
continue;
$ ^+ g# f2 w- X( }+ G( g if( g_pPlayer->IsUsing( pItemElem ) )
) ?% l0 [$ {+ \; p6 i continue;
4 q- D! |4 L+ H) c8 D z7 R1 D if( pItemElem->IsUndestructable() == TRUE )5 L) I1 V% V$ J- |: d7 z% q
{( f8 m9 s) b$ p7 C9 X, Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& b. A' y8 P* J) I
continue;
) i& D2 w6 o# t1 z4 P5 k% y- k }
& N3 D3 G4 b* H: Y, } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, u4 V8 C) U5 H3 n) ^& M }
! `# D* O7 [% y, i0 @ break;
: |" @4 d X7 b" w- q" y }5 U, s9 W" A: X; B- W& f K
case 1:9 e) J7 O$ J& ?8 g
{- g7 V& ~ @3 @% S+ r# W
//整理背包
5 Z. s3 B o2 }9 L. G, d8 o9 w5 e" M //////////////////////////////////////////////////////////////////////////
/ b! j8 [9 `9 `- w6 E) Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& M( a" Q% y( Z
//////////////////////////////////////////////////////////////////////////- ^/ p7 D% d. q# M$ W' w/ h Q% o5 \
//////////////////////////////////////////////////////////////////////////7 T1 }' H) G, Z9 @ W
CInventorySort* pInvSort = new CInventorySort;
1 H# C, G F' @* _. }: [ vector <sItem> vItem;3 Y' u" g5 f* Y# j9 k
vItem.resize(MAX_INVENTORY);//初始化大小
) q1 [, R+ M0 h- J% N //////////////////////////////////////////////////////////////////////////5 w2 F1 r; B: \
//填充数据" I) ~. K' M! L# S& I5 R- d
for (int i=0;i<MAX_INVENTORY;i++)
5 `" N& u2 s' `) p {
7 T8 R+ g7 D( u; Q5 M9 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 V# _' [" S8 ?- [# S: f) J4 L if (!pItemElem)
1 R- A8 o3 Y$ I+ a {
. x/ E! R: L. n. }9 }5 l6 i+ h/ w- M vItem.dwKind2 = 0xffffffff;
9 Y- {& d$ a% d" o vItem.dwItemId = 0xffffffff;
/ y ?6 n7 z- K( W; U. J5 C vItem.nIndex = i;
5 K: U& P4 U3 d7 e; h+ w }else {
* z' L$ i" E, S' f& F; p ItemProp* pProp = pItemElem->GetProp();
0 c( j% \# I( f/ W vItem.dwKind2 = pProp->dwItemKind2;
* V- R' q4 I( w" e8 U vItem.dwItemId = pItemElem->m_dwItemId;
1 ?+ n3 {6 N" M- U2 a& N+ P, c" t' ~ vItem.nIndex = i;
5 W# s" |6 P/ N* G1 M! z$ z }
* L' W+ o2 r; Y* k3 L7 v$ g0 Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% |7 M6 [! ~4 X9 l# K- p: ^
}$ S2 G4 |1 B% i3 M0 m% F2 u) X
//////////////////////////////////////////////////////////////////////////, O/ D% \9 U$ V$ W8 o
sort(vItem.begin(),vItem.end());//排序
) B4 m2 G6 i# j' c //////////////////////////////////////////////////////////////////////////2 d% Q9 K8 C7 k- v
//交换3 R+ E! O5 O$ a4 x/ j) \
for (size_t i=0;i<vItem.size();i++)
* q0 y$ a9 w9 c0 v- q9 @1 i {# v! [( W3 P" E) m# W( g
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- Q4 d/ F7 g5 r7 j; _
pInvSort->Add(vItem.nIndex);. e5 I' S" o% [1 c7 m3 s
}# J% h) V8 y& L) r
BYTE nDestPos = 0;
5 H# M3 Y- d8 T- ^( w8 k for (int i=0;i<MAX_INVENTORY;i++)9 I3 k" ~$ W5 A
{
# b- m% p; [& {1 R$ C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% C" |" F) A) [/ I( D0 x- D
if (pItemElem)
% m2 t/ k% | {$ B4 T {
& Z% l, _& Y$ k* V" N if (IsUsingItem(pItemElem))
( d9 q& `1 `# H' e4 H% D {, f$ O3 o$ B" e+ V, |
//这个位置无法放
: ^& a& x+ |, B% c" K5 Z L% x nDestPos++;" a/ L! n3 ^) Z- _ n
}
8 }0 \, U9 G/ S. c1 n( j }$ h- e+ H2 d" d) D' w9 b
BYTE nSrc = pInvSort->GetItemSrc(i);
2 F) K! R9 c1 F/ i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 l6 a. b6 o4 l/ g if (pItemElem)
* }$ Q P3 h S" n6 w9 t {& [4 r3 S, r) Y5 P& D/ s
if (IsUsingItem(pItemElem))
3 v- ~# ]( _& @9 \9 e% m& h {7 l& |( _$ ^3 {# ^0 X
//这个道具无法移动,跳过. D/ N1 s6 e( h4 H: u, d
continue;% i! g8 B1 o, [' k. X5 \$ J) M+ g
}3 L) S/ N4 c$ T9 Q3 R8 ]1 i
}else{" G- R8 o8 j! J9 @& E5 V- [- w- c
//空位置 不用动
2 H1 T4 H) m4 N! | continue;
9 O5 a" U! F/ k$ D& N& |# M }
3 z1 g) ~8 Z! W; Z5 ^ //////////////////////////////////////////////////////////////////////////
6 f# p3 X5 ~2 J) F. G //开始移动/ {- | g6 u3 v% k8 U
if (nSrc == nDestPos)( G: d5 {, L1 v- I7 b8 S
{
" T: E# d. I8 e4 u5 h //原地不动- s- C% ]/ u1 l, x
nDestPos++;
. N" K1 Z/ H1 R+ Z) I continue;
$ Z: D$ u0 _% J5 p }' z: E0 z: q: O4 ` n( ]
pInvSort->MoveItem(i,nDestPos);0 }6 u& i: Z- d d: ]- g" ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- ^) x. d! v. r9 j
Sleep(5);
2 J, w; m5 P" Q3 r- r //Error("移动 - %d->%d",nSrc,nDestPos);
8 T& ^- z5 A' V U8 z nDestPos++;
. ?* N7 m5 {, D, [; H }" X9 G* Y3 N2 {: u
//取第一个元素的信息
- B- {# S: Y% \5 C' G* t$ i /*# g5 q; r( V' t7 G3 E `, \& e
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). o* i& Y7 H8 v1 h5 G0 I) m# R
{
; e2 r+ Y+ B% e3 v2 Z9 ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ Q/ n$ O2 T; t& y+ ^# {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 P' w# W- j- T# w/ Q }
* `/ i$ w! {' b- C5 u i8 _0 l+ x/ n4 F */6 w0 d) _" E4 o: B2 O' L
//////////////////////////////////////////////////////////////////////////% }$ i% e( L- Y
break;
; o! `0 v( W3 h$ S! Q5 m }& t; a8 ]/ ~4 P0 z) } U
}
5 R4 ~# S" g O8 }0 M- U}
1 I3 U/ k# h7 m0 em_wndMenu.SetVisible(FALSE);
3 Y( L4 j% t! K( a7 @- k$ C2 A O" g
--------------------------------------------------------------------------------------------------------
' |3 j2 n3 y5 a/ N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! V* g. `' ^5 B+ B
{6 t5 M/ ^( j+ G! U' M/ \
BaseMouseCursor();
; T8 O3 m& j, o/ n( ~# {' F}
; f8 O; D8 S7 d C" }在其下添加:4 Q2 n T7 Q" N& ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ A7 e& @# }; a1 @{- P/ v8 ~7 T# Z# G j* X
m_wndMenu.DeleteAllMenu();8 A2 ~5 t. m+ N# b+ I3 V/ G8 O
m_wndMenu.CreateMenu(this);/ ]' K3 K. ~) ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: ^4 n" a T: J# n
7 l3 o) F e: F: `; Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ V8 u! e. B- t+ O1 }/ f8 \{
5 N9 K/ ?$ Y6 D //P以上级别才可以删除所有道具9 j* v- a$ r' _, m; S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# ~# X/ H! D/ B0 @) W5 R}+ o" _6 x. ]/ K) D5 N' t+ V3 z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: f* r# e" {& ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ w2 I! m2 ^ L+ v9 s
m_wndMenu.SetFocus();
3 J0 r4 d9 h' R6 L# W}
! I" m8 `, u2 p1 o- G------------------------------------------------------------------------------------------------------------- ?8 s: g8 l( {$ q5 V/ j# w
*************************) B' S7 [7 N1 M5 C: K
WndField.h文件8 e6 j2 z5 \! z" p1 x
*************************; j* g; r" f0 L h o- L( ^
搜索:BOOL m_bReport;0 U$ H& \9 D( d! u: b3 D; S
其后添加:9 C7 b" ^+ r$ {/ _ P8 J
CWndMenu m_wndMenu;
j6 m V' w1 k( Y9 g" o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 a" K/ k- l3 Z% A& ?其后添加:( @7 d# W) [/ a, M; d1 S- K2 p
virtual void OnRButtonUp(UINT nFlags, CPoint point);' t* G" h* _" L5 o7 C5 [& e) t
+ b0 e$ g( z" B& x, Y
1 d9 Z/ }5 r8 v |
|