|
|
源文件中_Interface文件夹下WndField.cpp文件7 D0 ~7 Q! N9 d1 Q7 {% k8 T/ b9 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 A ]" ~9 n# L7 |/ C9 Q8 ?
9 @ Z4 y" v ~; q) T6 Istruct sItem
2 r6 A& }# @, y; G \{* R0 e( B- U8 h5 `
DWORD dwId;/ d! f" H( \0 Z* L7 z
DWORD dwKind2;+ A' d1 I' A% p# k0 H* t$ q3 o
DWORD dwItemId;; {9 c( l0 I# E2 o: e6 w
BYTE nIndex;% S3 J% a0 m5 J
sItem(){
$ |8 M3 a! G8 o# ]- j3 D4 N dwId = dwKind2 = dwItemId = nIndex = 0;
2 Y. B6 d1 _$ c6 w}
: P9 H3 w% i4 w, O1 w. b9 v) }! n% S! ^bool operator < (const sItem p2)
# A2 L9 b% @$ ]" z1 }$ t* H, x5 I" m{
\7 p L/ x6 ^% C o! P if (dwKind2 == p2.dwKind2)
! I6 @7 j8 q5 o5 {9 ]& C: u* K; @7 w. z {
% J$ s) h, E- ~% } return dwItemId < p2.dwItemId; M6 i; Q$ \2 z6 Z8 T
}else{8 {/ o/ k2 L5 i. E+ w! g4 T
return dwKind2 < p2.dwKind2;
% {, L) F+ K! e4 Z3 [1 \) J0 F1 R }1 g1 q3 B+ w. D' c
}4 [+ T' j, @- t# l1 ^( k* F
};* f& L/ ?) g! c: ?/ [
class CInventorySort
' }) \; r0 z) O4 ^{
3 g* F* \& J ?. K6 vpublic:) H# ~- R+ w8 I
CInventorySort()
; ` U& p7 R2 n, N% ^{
8 F: }' H E- i1 G, X m_dwPos = 0;
) Q* H" w, v7 S8 @}+ |" B7 }0 J/ l( j) L
~CInventorySort(){}
- j! s& L* o7 k# @6 a7 P5 wprivate:4 Z1 `3 h, F! l x: Z5 }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) z9 c. n9 |2 x; ]DWORD m_dwPos;) \& |& Q4 k2 m" I1 O$ @
public:1 s6 m/ m# |, V# _7 Y$ S0 K+ Y$ R; T
void Add(BYTE nIndex)
# ~. t: ^# u i+ z{
7 l% p) V2 L* ]# C$ i if (m_dwPos >= MAX_INVENTORY)+ M3 s2 Y& ] x$ _' f
{
8 i' {" `* o+ ^0 b9 ?$ i U return;9 r7 G+ n. Q) Z# t! b/ e# b2 B
}$ C+ w& S' v% n7 |4 h
m_Item[m_dwPos].nIndex = nIndex;: Q! q: Y3 q$ S, f
m_Item[m_dwPos].dwId = m_dwPos;
: W/ i& a% D* y+ n+ g m_dwPos++;
( N/ p% B6 h- q" H. U}; T. `1 I* U- J1 N) m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 F& l) G h5 B8 M1 L# j
{8 I$ S6 q5 C. S" Y5 g6 K+ u+ F2 g
for (int i=0;i<MAX_INVENTORY;i++)7 u& D9 o# J s; P1 y/ x3 ^
{
' i* o) R! X# B8 s& M& p7 k if (m_Item.dwId == dwId)7 @% h8 b% o4 @% z
{
6 [) ~) W1 s @ return m_Item.nIndex;
y. U6 C; k& O/ |/ ` q. Q! W' \4 r% F6 T }
0 d6 E8 ]. q" t) b) B+ V }7 | F, L; M; [) F5 P( P
return 255;
1 b7 e2 O8 \/ i' ^}: ]4 @/ G% J7 r5 J2 A! P# k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 J* V9 l, u' |" `, s0 r2 `{1 f; \* a6 Y0 T- a% B
BYTE nTmp = 0;/ J, f: }" @2 E; i" a7 o ?: M, [
bool bDest = false,bSrc = false;) {( `. h6 c' Y+ T& X4 y
for (int i=0;i<MAX_INVENTORY;i++)% }; f/ W2 Q' z8 S- J
{" ~4 J2 o; S7 l4 M7 \, b* `: j
if (dwSrcId == m_Item.dwId)
* k( W O x, O$ h+ C {2 m# U. G& g' o2 L: j: _7 Y
//id相等 则 改变对应的dest和src, z% m( O+ {! h+ Q6 h
nTmp = m_Item.nIndex;$ R: H4 _2 t: {! D5 h/ k; m1 D1 C' o. S
m_Item.nIndex = dest;
" `( a% G1 {# ]$ E" o }, c N8 T( A: l6 F# Q* A4 P
}
! L$ E* v0 J* [ //临时数据保存完毕,交换开始
% ~# P, D1 u7 _4 H* B4 `4 _ for (int i=0;i<MAX_INVENTORY;i++)
. [7 H$ ?9 {& q7 t! B" o) w { y1 A1 R7 P$ @: W1 Q; `9 p8 a
if (dest == m_Item.nIndex)/ H( s/ n4 k+ Q( H. O
{7 J! L3 \, g$ p0 u: V! n6 K/ z
//id相等 则 改变对应的dest和src
' O# ^, W) I1 ?: n/ Z/ q6 X F m_Item.nIndex = nTmp;
0 z* M! F/ Q& Z, I" l }) k. |( y/ C0 N$ `- h6 l; |* k+ F
}' p3 u* k& c$ }& p( _ y
}1 h& F8 A2 `) {) v; i
};6 L1 g+ K- K9 @) E' A2 ^6 l
-------------------------------------------------------------------------
8 A: H; j) p4 |+ z8 z3 ]- w0 P% r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 ~2 O9 m7 @1 X0 r! m4 h/ `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' R; z) p& X+ a$ d9 V+ F- V* `紧靠其上添加:: N" j# y% _$ S' k5 Y) \
if( pWndBase == &m_wndMenu )4 ?# U2 T; X/ t& K, H5 D" V6 _5 @) d
{8 Q8 O3 ^9 ^* k& E5 y0 h# d9 x
switch( nID ); p( l" f# _' C: U3 W2 d
{6 v7 x3 y: H% t& C' r- n
case 2:: B$ I# d' a% f, n
{1 c* i* X3 i5 h) Y. X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 @, R. p# u" S; i5 F h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ n% q0 [ M; a0 f+ s6 J
{$ R& X6 T; T$ A; p8 b
break;
0 v( [" C0 z8 w/ Q( K }! I% c7 o: m. s, |# s6 E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 j1 g$ j: W" Q! ~
{
+ ]1 [1 ~+ @; Y( M# F3 [( q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! E7 {2 O+ H* w* c& C if( !pItemElem )- _9 i3 k2 ^9 S
continue;! C4 z, G W& O
if(pItemElem->GetExtra() > 0)
* L' {; V' O. `% h continue;6 g$ a, n4 [- v; ?. k5 w7 J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / {+ F9 T: g6 J- f9 F
continue;
6 {2 [% a2 y4 `( L$ h" `5 }2 D2 I if( g_pPlayer->IsUsing( pItemElem ) )( F, {! Z4 v; k/ p' a6 F1 N
continue;
- b6 V; y9 @) S$ E' m) Y if( pItemElem->IsUndestructable() == TRUE )" S# g5 u5 q# ^! c/ c, d
{% ]8 f0 [4 ?% j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ S b* n0 Q9 q0 H' j$ Q! B
continue;
( z4 V! v: r8 \& V" t4 g3 s }# ^. o0 O3 E1 v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 e4 S7 ]% b- [1 S8 @
}2 I2 g1 z: c, o3 z# c! ^2 X$ H
break;( {' Z0 \" V# Z
}
& [, o- o& m, j+ X# g! { case 1:
+ D$ m3 a2 a( e; A6 i7 {4 ` {
7 n9 F. W1 |; q" m# A2 U //整理背包; ?9 L3 k4 D _$ l! G
//////////////////////////////////////////////////////////////////////////
! x* G$ ], @* x) C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* ?2 v' L6 i6 p; h# a
//////////////////////////////////////////////////////////////////////////' |+ {& D2 ^: a8 x
//////////////////////////////////////////////////////////////////////////
& G9 s I, S. A9 n: l CInventorySort* pInvSort = new CInventorySort;
0 t% y2 k& [+ k/ Q2 j vector <sItem> vItem;$ Q9 n- _5 ~' Z; |- C& i
vItem.resize(MAX_INVENTORY);//初始化大小' `6 S; E7 y" E
//////////////////////////////////////////////////////////////////////////
) X3 O1 M+ F7 f1 w& f: N //填充数据% x2 g3 q1 H) J" |3 m
for (int i=0;i<MAX_INVENTORY;i++)
; [( ]" D. n6 U2 K b- `! D {
7 m' t* i7 D% _8 G5 \# Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. E- a9 a; x( }) |0 n; ~. U. ]$ B
if (!pItemElem)
3 C P) E9 [2 s q {; a/ b2 h) ]' N) m1 w2 R
vItem.dwKind2 = 0xffffffff;$ c& e; S, D: L2 r& `$ j' C
vItem.dwItemId = 0xffffffff;% @" j; H8 L0 R" U- ~
vItem.nIndex = i;5 I+ U! ^( U0 F& A
}else {
9 f, ~0 g% |# g" j ItemProp* pProp = pItemElem->GetProp();' j. x) y# p6 M, W
vItem.dwKind2 = pProp->dwItemKind2;
% W: M4 p6 e6 l" q j8 _6 j; @ vItem.dwItemId = pItemElem->m_dwItemId;
- p- P( R9 n! W6 P0 G# p vItem.nIndex = i;
$ o e, v) l$ b; ^9 L }
" x) n9 I' [1 }1 t* s# y4 n //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: ~7 f6 `, _* T" X }. E; B6 y1 G M
//////////////////////////////////////////////////////////////////////////
& ^. l9 |6 }/ S, j9 ]% p* O sort(vItem.begin(),vItem.end());//排序+ j4 T B* j, A. j
//////////////////////////////////////////////////////////////////////////
2 V& n ~2 B' ~% F //交换
0 M. U# v1 V8 N* J# | for (size_t i=0;i<vItem.size();i++)& h" D. t3 T# h( r
{
8 _/ C$ C* k2 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. y2 S# k; t! l5 E( ^& \
pInvSort->Add(vItem.nIndex);7 D" `" C, |3 I( @5 x( q+ l" _, Y- h; V4 q
}, v7 W7 ?6 s: l
BYTE nDestPos = 0;: k/ Z8 E, w5 |4 H& b" r
for (int i=0;i<MAX_INVENTORY;i++)2 a" Q* G( G5 R5 J; V
{5 q0 D! q: t- h6 E# u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 r, n: t9 e, I" ] if (pItemElem)4 _( w3 K1 D) Q& R: G1 Q
{2 |. U; ]% ~+ {. S+ j7 Z- U
if (IsUsingItem(pItemElem))
! ^5 j/ S, C9 E# ~1 a {
' ~% w; d# Z) L" m$ `7 {; i, Z8 q //这个位置无法放
" j% x( G. X3 A+ r3 O2 G4 C nDestPos++;! b. M; A; S" Y
}
5 R; g3 x0 V* o- e) w5 u }8 Y( L$ U, B; X2 ]3 C, [0 ~
BYTE nSrc = pInvSort->GetItemSrc(i);8 O9 o( Y7 z$ \2 g; v: ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ T% _; f$ K( _' Z1 l8 k
if (pItemElem)* Z h8 R, i0 s' p% Q
{* q" ~. Q. y/ Y) }
if (IsUsingItem(pItemElem))
: X4 B) D& J- A2 g' q& g P {, w! t6 v! E6 T6 D
//这个道具无法移动,跳过$ T# q, y3 B C, P5 o: [
continue;
$ c/ c j2 c% Z1 D8 Q- j }
3 w% S; @. t& Z) F0 [( i }else{. `; R, {) b6 q+ A+ B+ N# Q& U5 _6 u# G
//空位置 不用动
/ E( y# M3 G" V0 d9 J) k, k; [ continue;2 @2 h8 W& x* B5 X( z4 W; ^7 S/ o
}3 `, b2 E4 ]' T
//////////////////////////////////////////////////////////////////////////# F* G1 T% w" T' x# v2 b+ H) F4 c
//开始移动
$ p" `" d# c# l) ] if (nSrc == nDestPos)8 o% L, {/ A, m6 P g2 P: B
{6 [, V1 E& X5 y) Q7 o3 V% d; d
//原地不动1 s9 M+ ^" p: a3 {9 l
nDestPos++;
6 P# s" G! K/ L5 f7 Y/ ` continue;
5 Z. \- z6 H0 O7 N" m' c }
) [8 [7 Z0 x) g# F8 J2 Y pInvSort->MoveItem(i,nDestPos);
$ S* ^: E# Y7 m- e* z" U# S g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 G: ^9 J6 _! Q7 ^2 H Sleep(5);
* q) K; x& w9 x: i f3 p: s //Error("移动 - %d->%d",nSrc,nDestPos);/ S' @, A; W- `: J/ H
nDestPos++;
. P4 I3 T% x6 e, i }
( l+ q' g2 T" O; W //取第一个元素的信息& _" G0 e4 k. q$ n0 x8 G# K, e
/*7 I7 F& C0 k z/ m' b/ h- u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 I: V8 b: O& l' L3 x: h, h$ q {& \+ _* h m) s/ ~0 v9 X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) E. i7 e5 Y+ V' N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# @ p7 J# S2 y2 [. F }
& ?; J' w; k+ d! |+ [# N( t( h */" N7 X8 c! X& g' r+ b
//////////////////////////////////////////////////////////////////////////$ W2 u5 S8 U7 }- [+ M( R) [) {0 Z
break;
2 C- C/ P8 f' ^ }
: M. t& L$ b& [% r } 4 n( h5 {9 { E C: z# L c K
}& K% Z$ Z- Z( o) m: ] `, E S
m_wndMenu.SetVisible(FALSE);. x8 P8 ]+ o1 P3 ], w3 y& W. F
- m' p( ^( _# l8 }--------------------------------------------------------------------------------------------------------; A2 q( J. h% _+ M" G2 }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 U. Z& a! G( z
{
" v; \% x& P& [) ?& sBaseMouseCursor();
: T+ w5 C7 L& s4 U}: d6 @6 ]% p) J
在其下添加:
# Y8 v' E- b m3 J/ y/ x. ~* ^1 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ V6 A, q9 B4 W6 {9 G" k
{
: E- K& F: s' g& E# um_wndMenu.DeleteAllMenu(); g- d7 p9 M1 Q8 k
m_wndMenu.CreateMenu(this);
" J$ b" l# G; gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) w p% g7 g _
' v) A2 E; \! t7 z/ q6 zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* r- o3 b' g& _/ a5 v5 `$ R: a
{
& f" O2 O0 w( ^0 L( u //P以上级别才可以删除所有道具
1 B( K- o9 e2 `6 P, X0 z' Z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ b8 S! |- g' X
}
3 G: e$ D8 j( A2 D4 P9 ?3 F% Nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 i% W8 |( {! T. `! x; fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' y/ O8 T% T+ \. `$ a: \m_wndMenu.SetFocus();! J# C$ w9 m( _: x& I8 |
}; g3 }, X k+ `8 |' k4 x
------------------------------------------------------------------------------------------------------------
; M* o; ]! r0 K4 x' \6 m*************************
. r5 ?9 L3 X' Q2 F/ sWndField.h文件3 _" B O: ^+ A# K8 X
*************************
& r7 g' _/ u! S6 w9 E搜索:BOOL m_bReport;
: a: O. Q( w' F/ E- [6 k$ E其后添加:4 x, d' e: _; E$ ^
CWndMenu m_wndMenu;) F- ~$ z0 [0 \/ r; m8 T7 w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; O& o: l! b+ I+ I# n* l其后添加:
7 H$ x7 A& M2 A Z- ~ Gvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ p3 l# l* N6 y4 y8 u4 {
' l& _( Y5 ]. t \
) h4 Q" [# j; F- P! y% _ |
|