|
|
源文件中_Interface文件夹下WndField.cpp文件
1 ^. P& u5 s! a; V$ T* o% d8 r' a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 m3 Y& Z# b( |
, z* u2 ~7 u/ ^% X( gstruct sItem
3 a& c1 z$ S5 B. Y6 @{
+ i1 D+ N' ]9 r1 NDWORD dwId;/ W, k1 p7 q4 V
DWORD dwKind2;& N& [9 u; g5 x( m8 O( r- ^* y& e
DWORD dwItemId;
) Y9 f( u1 M9 aBYTE nIndex;% h! A% B8 t' m: Z) _! M5 f
sItem(){- [7 G+ Q, d+ h! e
dwId = dwKind2 = dwItemId = nIndex = 0;5 M& r# L' t# b5 p
}( V% F6 k5 I) I( V# p2 `
bool operator < (const sItem p2)
, t& U! F# @, @! {+ `* ~{
1 k2 s+ X9 a, p7 W0 X' k% k" W if (dwKind2 == p2.dwKind2)* K& p S3 A9 T& H- I8 k
{
0 O. ]3 g- W/ p1 @* Q return dwItemId < p2.dwItemId;
6 c0 J! H1 `- L8 ~ }else{
: g7 o- |# \8 F" `5 k" D% T return dwKind2 < p2.dwKind2;
; ]0 |+ L1 Q3 O# t: h4 p }
6 k8 X# `: L5 y}
" ~* z( b7 A& U" l, s! h};
& w: e% f7 q$ ] `* _8 }. K' Iclass CInventorySort
& F/ l V+ }+ V9 E* Z{0 C% \7 J/ |7 g/ k2 h
public:
) u" k1 X, v4 J9 pCInventorySort()( U1 t0 r4 F2 P8 X9 A7 `
{
5 I4 O) s S! J. O m_dwPos = 0;5 G( a/ l E" y9 |& q; L
}$ C9 c) w, N5 @, q. n+ q
~CInventorySort(){}
4 l6 H8 ^- y4 ~1 wprivate:; C( g3 `* ~2 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ [* C: a) F$ [( e3 LDWORD m_dwPos;# ^4 e1 J8 j1 ^3 d/ i& ]
public:; a4 x& y. g' h9 B6 O: F5 R5 Q* B
void Add(BYTE nIndex)( P2 l& S) i, k. ?; V
{
! m9 s) r* S# x. \ if (m_dwPos >= MAX_INVENTORY)
0 J6 ~- D/ f f. a; q {( n- N2 F- w9 a$ d! C& n
return;
+ i r6 x& N) d- Z" f }
8 X8 K) v$ F- ^ m_Item[m_dwPos].nIndex = nIndex;2 _, J. E y! `) g
m_Item[m_dwPos].dwId = m_dwPos;
9 \) \. n7 T: A3 o% s m_dwPos++;
6 A6 h- ^: e7 s9 V6 n}* e' n& u6 z& _" P+ o8 {! @* X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ z0 |! x; ^* ~9 Y5 q! o. I9 j% |* U
{
) N& h) D! ?4 v5 r: P for (int i=0;i<MAX_INVENTORY;i++)
* T5 E( I5 b4 O8 t9 `1 C3 U {* t. l" K4 `8 \/ o
if (m_Item.dwId == dwId)
# T) Z9 P! u f7 }8 x; P5 _' O {
( T( R6 q; s, | return m_Item.nIndex;. I2 O5 E9 {8 k6 F- L) {+ m. r3 o
}4 G7 ^$ z/ o4 K, K# [
}% l( i& _1 A9 w7 {# W
return 255;; t; E$ I _8 P1 w3 z% N
}# z" y0 w; b! L- H' j. W# T# g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" h0 I& g/ q) |" Y5 x- d+ N{
$ S2 U$ i) V! ?3 @) U n$ U BYTE nTmp = 0;8 C4 V" |) ^( K! X7 K- J
bool bDest = false,bSrc = false; M$ M7 `3 T% e- K F: {. X+ n
for (int i=0;i<MAX_INVENTORY;i++); z: M8 S. X( v+ Y
{
+ Q. l- H- i" e# i2 Y/ I- n if (dwSrcId == m_Item.dwId)
: ]' i" `( I( ~1 y* e {
2 o; K. w4 ?) Q' z( i //id相等 则 改变对应的dest和src
7 Q! }( w) m' S nTmp = m_Item.nIndex;: }( x% u7 u1 {3 f& p
m_Item.nIndex = dest;
& j! T! _$ Q, K; z( F& b; r }$ b9 M I: l: s8 Q; _2 ]
}3 q; g" ~ R- f4 }0 @" N
//临时数据保存完毕,交换开始
; q- z0 t% H# v2 f for (int i=0;i<MAX_INVENTORY;i++), @- i; w) r' v
{
! J8 o, D. t7 ^- b N; ~. h! Q3 r if (dest == m_Item.nIndex)3 ?4 X& g. t. N, g% `. _% W+ D: M
{
7 T/ J$ h# {. ] //id相等 则 改变对应的dest和src
1 z& q) C: E( I* K% v; L5 y9 e m_Item.nIndex = nTmp;
& q$ g& M/ v; S. K; T }; H: x: V; R# _/ C9 V% f
}
5 ]) r2 J8 b) b4 j! D}! T/ P- B1 q9 g( W% ]* }- Z( u
};
/ I( K' t3 h) x& M l4 l# Y$ j-------------------------------------------------------------------------% [. n' N+ x% H- _' D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" a& W2 z$ ~1 n# i: G; f" }9 e2 S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ B0 v$ Y. N1 Z' b) e
紧靠其上添加:2 C' f4 }: L% I5 A
if( pWndBase == &m_wndMenu )
$ V+ x9 ?4 N' {7 ?9 ]% T{
/ _$ a5 K+ |) j1 |2 t2 \" i! { switch( nID )/ `/ Z# }$ K" l% x4 i4 G) `7 S
{
3 o- ^; R' S9 b: K1 G$ } case 2:! o! T, X% Z8 P
{
% ^: n$ X7 N6 `: a% m' X! y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 Q* @. }6 ~/ u& x. _' M; \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 }: D. E: `3 [* h
{9 ^( v' l1 q5 P
break;
0 }: ~7 {# P$ Z8 u! J }7 B& E6 O1 h7 z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 O0 T7 Y6 a' _- R" s
{3 f2 Z% p, f1 w! S7 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" B8 p9 R/ r3 r1 |% }* i
if( !pItemElem ): @ x/ w+ m7 p2 }# ~
continue;
! F! c' v# e1 O/ `: a3 I if(pItemElem->GetExtra() > 0)
& w( d! n7 R5 }) _. t continue;+ z7 j$ l2 b' v F
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 c9 n# h' F) h0 d2 P continue;+ ]' N( N; o$ ^. I7 n8 b
if( g_pPlayer->IsUsing( pItemElem ) )4 K; _- V1 J- s2 ~$ {
continue;
& C9 D6 {2 r0 k' ? if( pItemElem->IsUndestructable() == TRUE )6 M) f r5 O" l/ d2 n1 J
{" B' `. u8 A# I" l, g- s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ m/ M& O& p9 }, q7 x1 t6 R) ` continue;' \2 Q6 l- k% d9 m. m' `" N6 f* @
}& k k: _6 C# V+ h% }4 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ Z. f! ]- m* u ]% L; t, W }- H6 G9 g7 w7 f. m8 T
break;
) D" b" u0 K+ h6 V f8 f/ C }, N* L+ ?1 {6 O1 ^. a* H. o
case 1:; y6 u4 D3 u' b3 L3 s
{
; F* E4 I4 H3 r: D/ a( s: W0 V7 T, m //整理背包1 e! b' k# x/ G' Q7 \
//////////////////////////////////////////////////////////////////////////
! P; H' \# i- q2 h' } //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ o6 k% X2 P: D //////////////////////////////////////////////////////////////////////////+ o/ P% g& J4 @9 z' t4 _
//////////////////////////////////////////////////////////////////////////
5 O' ]$ V4 G! k$ D CInventorySort* pInvSort = new CInventorySort;
" S+ E1 B; O: D1 ?+ c" ]# x vector <sItem> vItem;
! K& ~+ K& L* A1 a vItem.resize(MAX_INVENTORY);//初始化大小! D! V9 o# v4 A+ W9 I1 u
//////////////////////////////////////////////////////////////////////////
9 }3 T: P8 x5 d3 V //填充数据
- m, r" E& M" s9 w for (int i=0;i<MAX_INVENTORY;i++)6 m+ t: G: I# d: v: d' z5 N8 d
{
- R! Q& ?2 N5 Z* C& S+ M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 l' H1 u8 w- Z# M
if (!pItemElem)
: U ~) y, |' C2 R {- ]+ J& n S/ T4 Z! p; m3 L
vItem.dwKind2 = 0xffffffff;, w& H7 n X. @2 W/ @# |% I3 Q
vItem.dwItemId = 0xffffffff;
& R |) L D f0 ^9 W# d vItem.nIndex = i;
9 a' O- [2 R) Q }else {2 U" @; Z3 ~$ D! Y4 Q; G
ItemProp* pProp = pItemElem->GetProp();, M; X* z) u2 }3 i- A9 R
vItem.dwKind2 = pProp->dwItemKind2;' D# d, A9 m9 F$ j) K
vItem.dwItemId = pItemElem->m_dwItemId;
4 Z% H* W( P4 Y& {5 C% g0 t vItem.nIndex = i;8 Y4 P$ I6 q1 f) ^
}: p+ V) B0 C/ Z* k) \$ e p# g" V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 Z$ L' ?. X9 W. v, j, M
}
8 y3 E" r/ f# t2 P) A //////////////////////////////////////////////////////////////////////////# C4 l5 ]! d% K4 _
sort(vItem.begin(),vItem.end());//排序; G7 Y" d9 N8 s' C) n' W; h
//////////////////////////////////////////////////////////////////////////; ?) |( N5 O0 L/ D: `
//交换/ B0 u3 w- T" ] Z0 g6 k5 r$ ]2 V
for (size_t i=0;i<vItem.size();i++). e* W; S j4 h
{$ ? r$ ~& v+ _7 L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# [7 V5 |. @0 A2 V pInvSort->Add(vItem.nIndex);" ]1 x5 E. M1 H S+ e+ r
}' ~9 |, q$ t5 a z5 C5 J$ u
BYTE nDestPos = 0;
1 T5 |' B! n- ?! \- V# [: V' j; M; h for (int i=0;i<MAX_INVENTORY;i++)+ S3 t: \% _9 n' \$ f3 v/ k! s
{
$ @2 z0 X+ s2 D& v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 x; E; m) J1 ^* [2 G if (pItemElem)3 D* r- ^7 K+ Q6 E& q Z1 L+ E
{
) `% {0 r3 H8 u& Q if (IsUsingItem(pItemElem))1 ^+ w3 h; Q# ] G; e. }
{6 }5 n$ L/ m& y6 q
//这个位置无法放( m- M n% l8 E% w) [
nDestPos++;' x: Q/ [# R8 U
}9 M" m8 C( Y) m6 O. ]
}8 n6 r: Y' i3 N( w* p% |
BYTE nSrc = pInvSort->GetItemSrc(i);
9 d3 a& L, N$ F3 u5 L9 l4 p9 M( v T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) f% X% ?; M# |& l. j4 x2 j2 m if (pItemElem)
0 }; {. h5 W+ |+ T: [* W2 G {
9 Z8 }( s, @& s6 `5 R Y3 `4 g if (IsUsingItem(pItemElem))
. V- p% T8 v0 p9 o {
. f6 T* J7 N6 o% ?; r //这个道具无法移动,跳过
; E. l! K/ I' h4 A; w' H continue;
( m$ r- G+ d, F, W' ~ }
1 c) Z5 s: {; U' D }else{! w% |! ]* J& Y+ n, l
//空位置 不用动4 [ A) D6 t0 e& _2 L5 J; c/ e) ~
continue;0 A/ t+ _ S' @3 z/ F7 N
}
' u0 i. x9 R4 s( |: I& G# u //////////////////////////////////////////////////////////////////////////
1 V- e& S) S" ~( k! d$ L4 R //开始移动1 S/ B3 |# Q3 @; i/ r
if (nSrc == nDestPos)2 l0 G5 t/ D/ p9 ~
{
/ d" c/ |/ _0 j //原地不动
7 p9 V! J# a8 h0 v5 T6 `# v nDestPos++;7 |5 V8 _! }% f; R( N; t) Y% _
continue;3 g5 I7 C, |1 M1 [1 Y9 F. U: r1 ^! S
}
& p [( o) f) r: D } pInvSort->MoveItem(i,nDestPos);1 v' _) D- b+ d% W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 v" y( f7 ~- G8 x4 t Sleep(5); L3 p( E& N N
//Error("移动 - %d->%d",nSrc,nDestPos);) O% V" i @) w, p N+ [+ b
nDestPos++;1 D/ R0 t, o2 A& v& }
}
# S r8 f1 @9 Q5 w( D! F9 G //取第一个元素的信息4 J8 ^" O- P% l1 @
/*( J1 v8 V# |! a+ ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" Q3 b) @7 d+ w k( t4 y' y; B D { O; a% Q1 |+ o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 k% o, h. M3 \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 P8 ~3 [3 y+ O, i3 w; J8 [ }
5 l! f7 f" J& }/ k0 `3 K1 D2 Z */' D$ B5 V: o v0 R
//////////////////////////////////////////////////////////////////////////
! I( y1 k. f8 A: o K break;
7 A* r! ]5 A" A( q }8 W- { ^6 E& O8 \
}
5 q- ^! E: _0 J: w8 Q}
# ~- v. @' p3 ]m_wndMenu.SetVisible(FALSE);
8 n. z0 f0 L# D% w
( \3 T( `2 O) m* o* R' Y+ Q--------------------------------------------------------------------------------------------------------' c$ P' O9 U0 s: y1 r1 C1 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 t; u6 B% j2 D$ S) v7 z{- v6 ? m5 F1 H
BaseMouseCursor();5 Y7 f" b3 ?( t, V% Y
}
, K8 d! v I# K1 j! p在其下添加:& T) T8 @- j) D( X: T" S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). R* x! F @/ A7 C0 F) P
{
- C1 k: o! }% ?/ t$ Cm_wndMenu.DeleteAllMenu();# C* m) G* O! E8 a* s( v) f* B
m_wndMenu.CreateMenu(this);
" h$ O, m5 b; \% \# g: D. b8 q0 f. Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ p) `& X3 A! z$ b! m
8 O) T: S4 R1 q+ X7 q* y, Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ d: ^" q6 x; u8 i1 v8 D{8 Q( {- [8 W# g
//P以上级别才可以删除所有道具
) @' Z: d- k) T0 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& Q( X- f, n" j& j! n
}& {1 l5 v8 a$ K* z9 A" z* J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 R/ Z4 H+ i5 R& zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) _. T/ V" |( g
m_wndMenu.SetFocus();' ?: M; p6 j) J3 ~ S: x$ `
}
4 t. y: C6 c; x, u( p7 D------------------------------------------------------------------------------------------------------------' f0 M% ]4 [" n$ p3 ~
*************************! J3 {% H0 t) z1 O% `# j& I# ^
WndField.h文件' O$ K) i2 H! n6 B( f4 i
*************************
1 K8 v: [$ F; A# ]- i" y' K! Z- |搜索:BOOL m_bReport;
9 z# k1 e. W( X1 l: J其后添加:
" e) }7 w- O7 aCWndMenu m_wndMenu;
/ i5 y' {3 ~8 c! x2 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 g8 I9 p; s5 E; H/ C: Y其后添加:
" c& Y7 c% b2 d& K: [+ e8 j0 \- Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 e$ G/ b" ~/ e1 L/ N
4 {- I5 ~5 n' V# c$ Y* n
) w- @$ G% O% s3 h |
|