|
|
源文件中_Interface文件夹下WndField.cpp文件, N& s! j2 l3 [7 d" C4 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 e1 ^. u2 G2 |- ]9 R1 R3 S/ ^3 h2 N1 P( V8 x3 d. Q
struct sItem! W) j3 n0 y5 W9 O- h) q. N9 I
{
; T& o3 Y! i' g* D8 XDWORD dwId;# k+ _- R( X( D/ C
DWORD dwKind2;2 Y0 r6 {+ Q& V$ J7 w6 U
DWORD dwItemId;- J- ~" g$ g- O+ C
BYTE nIndex;
) i( r6 j4 k6 MsItem(){, C8 U) H ~+ D0 Q' W# x6 k
dwId = dwKind2 = dwItemId = nIndex = 0;
0 K `$ z7 \" R }0 S- G}
( ~9 f1 A/ J Rbool operator < (const sItem p2)2 u3 D7 k2 b2 v7 F% q+ J/ R0 w+ E
{8 b" V- ]+ x( A1 j
if (dwKind2 == p2.dwKind2)
/ W& k& n6 D) T( R/ `* @. ?. n# R; w {
! V7 ~! I; Y4 _& q6 G3 G" m* o return dwItemId < p2.dwItemId;1 e ? C. v! o1 v- z
}else{+ o( q/ q; A2 Q+ i- _3 j$ R, q
return dwKind2 < p2.dwKind2;3 _& S, V) @2 Y' X7 b, n
}
& t' W2 u, S T8 T}9 _$ R# N# y; V9 Z
};
$ K( c/ L& _ m+ j% X; G' Z1 Bclass CInventorySort
% H7 w" k9 E" V. V) t* B{
- r: {. ]8 w* p0 N6 Z- d2 C. C7 A& zpublic:
+ M& Z# }) t4 y3 w# V- z6 `' O3 oCInventorySort()) O+ t4 P/ x( C4 r% k8 B3 N
{1 {# |0 n) c! D! Z* H& Y
m_dwPos = 0;% h: X# q1 p. e. A2 F2 Z$ m2 p; E
}
& x6 I& c0 v+ F7 h/ y~CInventorySort(){}
4 J7 o" T! I1 fprivate:5 U3 Z$ u$ j2 }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 `9 [7 `$ X7 K: }DWORD m_dwPos;
) C9 z8 n( c7 a% U/ Q: Fpublic:( f' r* Z( E6 c5 Z
void Add(BYTE nIndex). h0 b* ?7 a+ o4 R
{1 v0 x' I7 q5 N* {- f
if (m_dwPos >= MAX_INVENTORY)
6 ^& g2 b- z9 x {
7 i Q3 ]: `4 o0 G X1 \: L return;
1 x4 W7 }; N2 D }
0 @1 `! ?; t& n; q! R" T$ O m_Item[m_dwPos].nIndex = nIndex;* @. l3 ]% V& @; N9 C' B) n8 T+ {; j
m_Item[m_dwPos].dwId = m_dwPos;
$ X4 \7 C% M0 T8 B# Q5 l+ i e! V m_dwPos++;& H. p: n" c4 c' V2 \
}/ c- s( x' ?; C6 M5 X( p8 _
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 x0 P, ?. o( ^5 j I3 p
{
; R4 Y+ K, h8 e5 u for (int i=0;i<MAX_INVENTORY;i++)3 \* R. I3 x% o1 ]' r$ z" h! r
{
* z8 M! R; Q: K- X- { if (m_Item.dwId == dwId)
9 O! V) u) L' N0 j) }) q+ ` {( F0 F. f+ Y% J& D2 M d+ B: K
return m_Item.nIndex;: ~9 o: D5 m# Z6 l0 a% Y
}3 x7 ~7 q8 h# v, ^" C$ ?. h) V* W0 l& i
}# k, P! \7 r0 q/ K; a
return 255;
7 {& e1 M3 a1 h3 U}
3 c0 M2 I6 R2 k+ gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# X" ]& k: m# ~% B3 P{* J \5 E0 P- R, z: l; {; ^
BYTE nTmp = 0;
$ F. v X! Q( C bool bDest = false,bSrc = false;0 ~- D; H. C, B$ a# W6 M
for (int i=0;i<MAX_INVENTORY;i++)
) [# i- c1 e7 G5 X# P {! S3 p9 U% {' G
if (dwSrcId == m_Item.dwId) D6 h5 {0 k# p$ N2 Q
{
5 b, p* M; ]6 X7 J d //id相等 则 改变对应的dest和src
: T; r: y1 I! Y3 g0 }( K nTmp = m_Item.nIndex;
8 l) ^& _1 |' m m_Item.nIndex = dest;
- r$ v: V9 v. L2 m5 L" L# u }
6 X; H c8 I$ x' S; z! M1 n% @( F+ y }
7 T5 V* g6 i0 l4 h+ F) K% E& x //临时数据保存完毕,交换开始
8 P+ _8 s" B$ V2 e, a1 w for (int i=0;i<MAX_INVENTORY;i++)2 ?" x6 L; u$ E" O
{
5 A+ @* q# n( Y+ ?% e if (dest == m_Item.nIndex)8 U! Q( X9 V8 L$ ~0 ]
{
8 \! E" E7 A5 H" w' A/ G* j //id相等 则 改变对应的dest和src
3 t# S, S3 ^$ g' H, `0 C" y m_Item.nIndex = nTmp;
) K* J4 i1 S( y2 P; C3 f6 H }
& Z3 u0 g' {/ o# k t }
8 l8 q5 C* t" e6 |' E}
! `& N- P' M7 A5 h( n# H};
2 b9 N0 j) f, B' h-------------------------------------------------------------------------
8 g$ `. K/ G1 I6 R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), U# @ M( O$ |4 x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( k! f2 @) k; L$ C+ v! Q
紧靠其上添加:! Q6 ~- l6 R% f; D5 V0 \6 c
if( pWndBase == &m_wndMenu )
* t. l: T9 O2 ]6 k{
. I, d, ?/ u( n. x& ]- `: f switch( nID ); S. ^1 @% @0 d; v" _
{2 I8 B6 V8 v+ |/ R/ J+ ~/ N
case 2:5 p# N" @9 p2 y$ O# Q
{2 {- f1 G8 Y5 W8 {* H; `! l* | r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% H7 T) W. Q* B% ]7 l1 D( U# H
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 i- y' q. a# D! P1 } g3 o {9 @7 ]4 a/ }% |# I- M
break;8 {4 g6 p$ _% I9 G& T: u& [, i
}; G0 _+ j" r' s/ @% n( z" h# ^, u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 K+ K0 W2 F! N
{
% D8 d0 B- N. H8 l% {0 a* l; v1 y$ t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( g7 x- {' ]2 `& \) s' [. P
if( !pItemElem )
# [* B# ?0 l" D( G continue;& w- K' R8 U( p
if(pItemElem->GetExtra() > 0)
* S+ E% c9 ^# b2 Q continue;
; e$ `- d& W d, X. D- V0 J if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
y, S. d2 n" d$ N0 _) w continue;
9 \6 d* z, {" ^7 H J if( g_pPlayer->IsUsing( pItemElem ) )
7 o& o+ ~! X, P3 y) U9 G% W0 K continue;3 G: Y+ O: a2 Y% C
if( pItemElem->IsUndestructable() == TRUE )) B, o, N, Z' q7 A/ k6 Q+ q4 d
{9 T4 y! n) k' H2 @* t2 }4 C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# \8 _. g4 F/ Y6 v' w continue;
% W+ B* R) p/ U( a }* ?- R& u! l$ e) K5 l5 \; \0 j1 k5 ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 E! i4 P, I4 m$ x" y
}
; `; e# \( S1 a break;
8 H, b2 D- F0 x0 ~; R( Q' e }
2 a- o* R; F; \ case 1:% t2 O( U) `1 ?* I
{! H" h! Y( q+ y" @% @" p
//整理背包. B/ l; h! X x/ ~
//////////////////////////////////////////////////////////////////////////: V, l% F) b# Y$ F9 V3 j! g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 s/ m8 V/ c+ y% |* D# w6 v1 L
//////////////////////////////////////////////////////////////////////////
- |5 }8 _( l; E, r! u6 ` //////////////////////////////////////////////////////////////////////////% h( B) i! B2 `
CInventorySort* pInvSort = new CInventorySort;7 C9 z' z" m' |# b# H% T3 j' ^
vector <sItem> vItem;
4 d& R6 d- j- U; Z6 Q" |4 L/ C G vItem.resize(MAX_INVENTORY);//初始化大小( v' ~5 z$ C. x4 Z
//////////////////////////////////////////////////////////////////////////
7 A# c$ ]7 v' w& E ^3 L9 g$ n //填充数据
" z3 a* u! q& ]0 }* ` for (int i=0;i<MAX_INVENTORY;i++)7 Y8 e: `+ R5 ?; m
{
6 w; C+ P/ ^8 e& ^! y6 q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 y1 \! a E, A: M. h2 }+ u if (!pItemElem)
% k0 i2 [ p$ a9 ?# R/ s {# n2 w) F% Z- T6 R
vItem.dwKind2 = 0xffffffff;
; u6 o; i+ o9 l+ G& t# H vItem.dwItemId = 0xffffffff;
$ c# l/ Z$ ]4 ?3 K. @4 j o- m5 O vItem.nIndex = i;2 V5 _. J% h6 o3 R: e* Y. a* e7 S0 k
}else {
7 c g5 g* h! ~& Y3 T7 I2 l O, f ItemProp* pProp = pItemElem->GetProp();
$ u6 ~" T! [. ]! j vItem.dwKind2 = pProp->dwItemKind2;
4 g0 \3 U. k, r4 P) s* O vItem.dwItemId = pItemElem->m_dwItemId;
2 @, F$ ^5 v, l K- U% t( n vItem.nIndex = i;7 A" ? E x; s* q- X, [& T
}) l, @5 [3 A1 b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); w, t) ^; ?* K
}
7 J+ l. B" q4 t, v1 D' X7 t' ^9 r //////////////////////////////////////////////////////////////////////////
* P" w t& |; g/ I# k( x sort(vItem.begin(),vItem.end());//排序
$ f3 w7 b. x" ], f9 e //////////////////////////////////////////////////////////////////////////3 X& x) T* L& ^$ F
//交换
$ e- q3 s+ e1 |# K, u for (size_t i=0;i<vItem.size();i++)
6 ~0 c; ^ m+ ~' }4 } {
: h. [: H, H# o5 R+ e! G) x) z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ \8 u% _ B! {- z2 u pInvSort->Add(vItem.nIndex);
& h F2 Q' x" x! d }4 P; ?/ p. h% j- Q. l, @' c* f
BYTE nDestPos = 0;
3 m: V1 G$ y0 Z5 G* @5 t for (int i=0;i<MAX_INVENTORY;i++)
/ J& m0 w& H: z: }* ` {0 b5 G& ]; X4 e1 C7 G' j- d5 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ y' {7 P$ d' V' c" M& ~4 _
if (pItemElem)
5 t* ^/ Z; I2 Q5 i {
! {1 c! W9 [* x+ i if (IsUsingItem(pItemElem))
; _! Z5 x1 b0 {8 j9 N1 @ {8 L1 Y7 q' X' v' g* F. b) H# P% Q
//这个位置无法放, ^, s2 G' E# f. Z9 l
nDestPos++;
\2 H* U, g" Q% B. H. Y! M) U* Z }8 x1 D' Y9 ? v! f% n
}! y3 Z0 R9 n" V7 k! V
BYTE nSrc = pInvSort->GetItemSrc(i);0 h0 V0 W0 k; S' A+ T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: B% c' A% {0 |' e: D
if (pItemElem)
- m+ A7 V+ L" ?; Q {
D9 q& j& Y5 ^# e* P3 ~' x if (IsUsingItem(pItemElem))
0 x; |7 i# Q* G+ E! R5 A {
& @& j+ t5 b; z0 w* ] //这个道具无法移动,跳过
k E8 h1 P5 @. t. E8 q' z3 F continue;6 c- R" i' n% N1 s- W
}
# J& F; n U& C1 \% ] }else{4 K/ w1 N( d3 X0 Q
//空位置 不用动
# O8 Z/ Q" V6 {" n continue;
: O7 p& x8 C$ G7 t) t' ? }% }8 @$ d% L' `4 z- v
//////////////////////////////////////////////////////////////////////////
+ u8 u+ K! ]0 s8 y ^1 r0 h: E //开始移动
% \* y, H7 G' S1 y0 I) e if (nSrc == nDestPos)7 q* ^9 |4 I0 j& _) \) q, V
{& c1 n% A+ D9 F- J# O, N9 e4 Q
//原地不动; e* V1 y/ K9 S5 f7 [
nDestPos++;
+ I$ K: B- X: n, ?- X/ q0 f) E9 C continue;
" y8 G# C3 P; T }" U- |0 X. U1 I6 p; Y8 P
pInvSort->MoveItem(i,nDestPos);
0 \ u2 L- }" m% \- } B g_DPlay.SendMoveItem(0,nSrc,nDestPos);% n2 I. X. A* \+ H6 q+ W3 _
Sleep(5);) K$ j' C# @. A# ?3 a/ V! t
//Error("移动 - %d->%d",nSrc,nDestPos);, l$ g- h n1 l! A& ?; N' \
nDestPos++;9 H0 q5 b. w: D7 r+ P) o
}
* g6 F( ~" E' o' n //取第一个元素的信息
+ Z+ l2 X; Z- q) R. ^- {2 H" _ /*
# ~# ?2 K* I3 K5 i6 ^ r9 F if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" t: e. o% d1 n/ Y& K# Z/ u2 w {/ F( u3 C, I; @$ k/ @2 \, X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! X0 D% {4 X% `% e- Q/ q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 V# J1 X' C: T( Q( ^! k
}
& d ^2 V/ z9 N! l; `+ S: ` */# H) q! ~) g- A& D t4 C
//////////////////////////////////////////////////////////////////////////
" M! X/ ?% c" b: z# W2 }3 j break;! o2 O' ^) i( y. |4 c' k+ I
}- m8 i5 P+ j2 m$ V. K) O( Y+ a3 k
}
) R) i7 q e. _3 u! ]; U i}5 T% b: {2 A! Q
m_wndMenu.SetVisible(FALSE);9 [6 c. r c8 M: s3 s" p3 U
/ E( \; j1 h, h! {- d- Z: q4 x--------------------------------------------------------------------------------------------------------' Z4 l: ? ]' q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) Y/ q4 o9 R7 v! [$ u) W) J{
- C% r, O; `- J; z5 NBaseMouseCursor();, P7 E# [, Y" s4 ?' h# S U/ M
}4 W. d( g& r' {8 j
在其下添加:! i1 f" j4 B! m3 b! c- j$ k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) t" p" w/ A- ^1 K; R
{& y% M! O" Z5 m$ m& T7 W) }
m_wndMenu.DeleteAllMenu();
; u t8 w7 ^, Jm_wndMenu.CreateMenu(this);
: ~7 {% s! t9 [) H* o$ r# Y( dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 G4 M6 S5 Z$ |' w0 J1 g% g( M
. b( S1 e0 |7 e' j0 ?2 tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 {3 D/ s3 o1 n+ }! `! m( b{7 [1 U. N8 r+ y6 p
//P以上级别才可以删除所有道具
- C. k' _1 Q/ B2 o4 B. k4 [7 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' v4 n% C( r% ^/ f}1 O/ R) q, b9 g+ A" n: n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" d/ q+ P! v, J0 Z( B% q3 Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ R+ x' \' X3 _6 q/ O1 Bm_wndMenu.SetFocus();$ i4 _, Y+ M; [* N. T
}
3 i4 B0 A5 J0 b6 h; l y9 t, _/ D------------------------------------------------------------------------------------------------------------
r4 r+ _/ X7 I0 p m: B* d8 l*************************
1 S- A! }& T# q3 z! U- eWndField.h文件 x# v- A/ m1 o* R6 q a- z
*************************' s% l; Q, Y1 l9 e0 B# T+ t
搜索:BOOL m_bReport;
% c5 X" f- g% j2 m其后添加:! R' p+ b z) a! |* H r
CWndMenu m_wndMenu;
) n, l2 a% P. ?1 R# l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- [+ z2 r/ _+ R3 j* ~
其后添加:
& ?8 H3 h5 m' o" R2 u6 H B Cvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 @" S* P% C$ B h! @7 Y i
) o5 ^. c T0 H. }; W
1 E. p: ?) q- ]4 Z
|
|