|
|
源文件中_Interface文件夹下WndField.cpp文件
3 I6 O$ y$ e; v- G搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) I- ~2 ]! e6 X
7 p" r1 `* r6 u ~* w/ n
struct sItem
6 C% ^( w8 Z6 E{
: g' b4 B& i4 a+ q* |7 E$ S8 l4 FDWORD dwId;
: e3 ]4 k# @& u$ X4 QDWORD dwKind2;
: {0 Q! Z2 o9 _# u9 N1 V1 @DWORD dwItemId; ], u) S3 M3 W+ L: A5 s2 V
BYTE nIndex;+ Q$ h9 D; U5 e0 K' j" G% `$ @- e
sItem(){' Z( e, |! E4 l) R) H% ]: n& ?1 Z
dwId = dwKind2 = dwItemId = nIndex = 0;
: P& V( y# y1 k4 j: U}+ z) a4 `3 A/ n
bool operator < (const sItem p2)% N+ w0 r4 B8 C8 F+ ?/ d4 o1 D
{$ C. n8 c6 V r& @8 \2 t
if (dwKind2 == p2.dwKind2)
7 ]* Z% V! s/ T/ U h$ ~ {/ i7 m& R y* C# j% l: H% g
return dwItemId < p2.dwItemId;/ z, S6 o) r/ B* V U1 R1 o2 |
}else{: Q7 F# U! h0 D' [9 A6 }
return dwKind2 < p2.dwKind2;
* e2 [, E3 @9 o7 w$ s }2 D! T% R, F; p1 Z
}
% D* F( @& ]3 w. P' V};
7 u7 z4 N6 M$ `( m; F2 eclass CInventorySort
' J: w' T6 ?9 d/ Z# @* J{% ~0 X3 i+ A# f+ ~8 A# ?
public:
3 c( K" M# _. Y; x) [CInventorySort()
( `# k+ V4 m. N, T( p8 Y. Y{5 B/ W5 I2 U7 P3 E
m_dwPos = 0;* b0 B) Z6 }% \& q2 n7 s& @
}
4 V- T& j/ G( ~+ R6 S+ D~CInventorySort(){}
! a" w! c7 X! S, `( |8 fprivate:5 X* N, T8 z/ p6 m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* U6 a7 }+ M1 d8 @- ]& d) U3 }DWORD m_dwPos;
" {5 t1 L* N4 U6 c3 r( C# T0 Wpublic:
3 @* G; z- {( N/ c6 @void Add(BYTE nIndex)
0 j5 F6 ^6 X3 q6 a& z; K$ a{- w- i" C5 g# T0 L e/ d1 o! d
if (m_dwPos >= MAX_INVENTORY)
6 U4 M, U. H3 [" @4 W1 x7 o- R. c3 j {
" ?, f( \* C& l- O( A& k: Z return;9 r# i R+ ]3 d+ @- J7 J* {! W5 G
}1 o) c) R% j! ~2 ^
m_Item[m_dwPos].nIndex = nIndex;
% L4 q5 ?* m4 d1 ^! X4 \& q m_Item[m_dwPos].dwId = m_dwPos;1 W! E6 N7 M: j! N8 k
m_dwPos++;
' |- p8 E4 h7 H; a# F U}
4 \* w) N( o/ N2 \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# ?! z% R9 ], e{
5 \/ f3 w0 z3 @- q$ z6 K' C% X for (int i=0;i<MAX_INVENTORY;i++)
/ w. s! ~9 z; c( O8 x( a4 p$ x5 ` {
- k, z4 r9 Z1 x+ g if (m_Item.dwId == dwId)+ j3 U/ P! w ^6 z2 L6 @
{
9 q# L% f8 O3 h, A$ u, D+ u return m_Item.nIndex;, c2 B: u3 `, _ y/ G- s
}
; _1 ^% c8 F4 Y$ Q4 t3 l3 ~ }+ Y+ w: s9 ^, Z1 V6 T& `) i' t
return 255;
: Q- u" v% d1 E9 F}
9 M1 O9 B8 [: P5 }, dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. l: n! c: E( N0 n! M6 V j
{
m) z& K2 K) n4 j4 x) e. ? BYTE nTmp = 0;
& C; H( v" T& _9 q9 I bool bDest = false,bSrc = false;$ e4 @1 B& E* \
for (int i=0;i<MAX_INVENTORY;i++)
- {( J- X4 L6 r! J {
) ?: H8 q: F3 Q( m7 ` if (dwSrcId == m_Item.dwId)
) {( k9 R4 f4 v2 h+ B' f) m1 N {9 ]+ y0 F9 K0 Y; L4 R/ [" N! i
//id相等 则 改变对应的dest和src
1 A2 a! A" g5 Q H) k) s nTmp = m_Item.nIndex;
) e, Y8 d# ? W0 F- A m_Item.nIndex = dest;
( X8 v$ v! L8 t6 f4 i }
* X( H% n% e4 Q }
6 {0 B9 [8 S" H% |4 H7 e //临时数据保存完毕,交换开始
, v4 d; |2 n8 L2 ^2 j" X for (int i=0;i<MAX_INVENTORY;i++)
; w" S: I6 q' n5 z7 o7 E {& v# V D9 b- J: C' ]
if (dest == m_Item.nIndex)& {; [ o; f) I
{
/ q. o S9 \" N0 e" ]7 t //id相等 则 改变对应的dest和src6 g' T* j- H3 A1 D* D l
m_Item.nIndex = nTmp;/ ` E1 Z% U- W* {
}
' g+ h4 `' f& m/ ` }
3 M- f: l* G; f7 P7 d}# N! ]1 {! E0 }/ Y* D) `& g
};
+ n- E4 F! v2 g/ J3 p9 h, b6 z-------------------------------------------------------------------------
8 R* Q$ A! m8 Q" m1 M1 N+ b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 \8 D; {% s7 N& D5 D- @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); m+ p0 c1 M: e w$ a5 d! f" l- Q+ Y
紧靠其上添加:* ^7 U- `9 A7 ~: L% @
if( pWndBase == &m_wndMenu )
, G. U* p* P( m{8 Y9 w0 S$ r/ y0 ~; Y
switch( nID )9 M: }% |* V9 f
{) S: }6 b/ t: @2 R/ C. `" s
case 2:1 X: v# r. @( j9 `
{
( `6 @7 t+ L" ], H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 A# _3 O2 X3 w; f6 I O4 x if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& ?9 W( i8 a% p. v! L: c9 L {. A6 l- f% b+ H
break;0 s! z# H9 t, C+ C {
}
& g8 T" N+ C4 N3 j! d3 } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ T* R: L9 w. ~ {
' x2 n$ v6 m$ b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# ?6 W- P: Z0 g' A5 y# P
if( !pItemElem )' j; j9 s% ?5 k# q
continue;6 H( S2 s5 P S6 V+ y
if(pItemElem->GetExtra() > 0)7 v- J9 n% l/ ]7 I
continue;
% p# J o+ L2 E0 s# p if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" _9 W4 A' k6 E2 ?2 m% _7 s continue;
6 V/ n' f. g# p( X1 M9 q8 D0 Z if( g_pPlayer->IsUsing( pItemElem ) ): k2 m! o4 A6 H8 z& Z" K( B
continue; i! P* Q8 ^( v5 W
if( pItemElem->IsUndestructable() == TRUE )) C* i2 w1 m* ~$ i0 y
{
' N0 H k8 g0 J8 G- m _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ I+ ]' A, V# r- }( V
continue;
; |2 h+ Q& z/ h: t+ y }
0 {# H* I( B0 v# M! @$ N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& j& {! y4 O% _$ J( ]" J% @/ r0 d }" Z# j5 u3 r4 v9 g9 i9 v% K5 F
break;* m3 [( G& _" \' X4 v V# M
}7 J- b# s2 g2 n; Z3 p9 L y
case 1:
) H" l' y; f9 N! ]1 x/ l8 g2 `( b' x {
4 n2 T* z* v9 n5 H7 i( r //整理背包
4 Z1 G' i. u: K1 R //////////////////////////////////////////////////////////////////////////
$ c0 W, _' u0 ~ M0 i* E. k% D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
n9 e8 e3 v' z5 u4 m3 v: E //////////////////////////////////////////////////////////////////////////5 T& d( m' c* @- t( B6 h Y
//////////////////////////////////////////////////////////////////////////( g! m/ `5 d6 S5 {5 V( \# _
CInventorySort* pInvSort = new CInventorySort;
7 c+ t; Z. _# Z- q" V# A4 w vector <sItem> vItem;# z8 ?$ q, H9 L1 E$ c
vItem.resize(MAX_INVENTORY);//初始化大小
& s/ I) ^# ]) _& i" m //////////////////////////////////////////////////////////////////////////
9 J$ I& ?' ]" u H- B- S //填充数据
2 R0 ?0 l# P7 U8 |" ~2 N- @8 u* r for (int i=0;i<MAX_INVENTORY;i++), `/ t& ?2 e/ {) N( Y5 K
{/ @/ Q* f5 ~. p' p( @) O8 d* ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 @6 b6 t$ }. T4 M9 C4 @& X if (!pItemElem)( J# m9 a( a# t8 \! I5 _4 h/ E
{6 J7 b6 \8 v" u, N/ r/ |. `
vItem.dwKind2 = 0xffffffff;6 h; T+ h2 A6 O2 I
vItem.dwItemId = 0xffffffff;
: b$ P) i q1 @ H' G vItem.nIndex = i;
6 q! X# X* U& J }else {
9 p+ y. q& B! s! a) O0 E t# F ItemProp* pProp = pItemElem->GetProp();2 _; @. b/ m# \( M# x
vItem.dwKind2 = pProp->dwItemKind2;/ h1 g' p0 S+ h* q4 n
vItem.dwItemId = pItemElem->m_dwItemId;
- r7 f7 A% |% w& f. V! s vItem.nIndex = i;1 p. H( s! n) ?* n0 Q3 M
}
' g3 H! n2 Z/ P' \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 b: }- n2 q0 y9 {
}
8 D9 y0 b8 ?0 s$ o //////////////////////////////////////////////////////////////////////////- I: Q- P/ m: u! }: n) J5 X n
sort(vItem.begin(),vItem.end());//排序2 H. a! s% E* e( Y( |# S
//////////////////////////////////////////////////////////////////////////, ?$ G% `6 B8 m
//交换
+ e+ G7 R4 J, Q; g for (size_t i=0;i<vItem.size();i++)) m' A- y _) U. j3 Y3 l
{
9 s/ K1 |$ ?. ?; [4 ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) S$ ?, _; H+ w9 ^7 Z& Z' I( d
pInvSort->Add(vItem.nIndex);& b/ _! m7 N. x# M$ n9 {
}
* S, t+ o0 Q, r( ~3 o# x. ^ BYTE nDestPos = 0;
/ `2 e7 {. m1 X: Z; O2 D for (int i=0;i<MAX_INVENTORY;i++)
/ }' h! \9 B& `. ]+ ` {7 E5 x) W# X# L& Y6 o1 n9 d" D' a8 R/ P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. A6 p- I1 h/ _! X if (pItemElem)$ s# I% ~: E1 e. U
{
( q$ j* P3 y |; L if (IsUsingItem(pItemElem))
0 P: r' ^% Z! t. H) ` {$ y: Q3 @$ @- h) `
//这个位置无法放9 z6 [) E: E; D' m
nDestPos++;
$ I9 t2 T& [' J! t6 D }
! }* {4 v2 R$ S; S8 A1 b) E }
: e" Q+ j$ p, v0 g3 c( A7 o5 s BYTE nSrc = pInvSort->GetItemSrc(i);
" t$ R% V7 y0 f. E! p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ H- o. S5 j* P: g3 e if (pItemElem)6 A: k; G' h0 }1 ~4 `
{
7 u% e1 E( U- |9 g* ]; G! p+ N8 {2 M$ x if (IsUsingItem(pItemElem))2 G# I* @4 J% |
{
% L) f9 g3 M2 x( J$ l //这个道具无法移动,跳过( `0 h I# }. l$ u2 ?4 }+ v: R
continue;3 e5 S/ s1 }1 z( `" ^) I( E# t- ]
}- S& m' _9 o, N' r. k" n
}else{3 U* w; w- J- W8 L O5 l
//空位置 不用动
; J/ K. h. `7 J/ ^3 n continue;
% @3 k; X* s. `9 }& z6 c }! ?+ @5 w- [# O2 M H- o3 N
//////////////////////////////////////////////////////////////////////////
0 B2 ^9 E3 X* p; D. M1 c$ M1 Y //开始移动
+ C# ^- U# O' X* Q5 _ if (nSrc == nDestPos)9 X3 J. X8 K2 P U, M* c8 Q
{
" Z* `1 c3 U! T //原地不动8 \: j( T$ ]5 m5 B& ?
nDestPos++;
% f" `. @( _4 \2 i continue; n9 z- m l& f
}
4 J- N9 n3 N' `" m: g6 V6 [ pInvSort->MoveItem(i,nDestPos);9 D' p. J1 h0 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! ]+ F# ~, ?, \9 I- A Sleep(5);. S9 W% k' d7 k% R. \ o
//Error("移动 - %d->%d",nSrc,nDestPos);
+ L8 C- b+ Z# M6 j" n( Z# e, @ nDestPos++;; ?0 B+ b" P: W, {3 `
}
& C* r/ z& ^- M1 s //取第一个元素的信息/ `! b P9 M# t9 {$ f. r/ Z `5 Q
/*: {! ?& E4 f7 F7 \) B$ {' H0 A9 p
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) c v1 c6 f0 M( \( `# G
{
4 k0 M, J2 j$ {$ O' ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( J7 X; Y- W0 @& F. Y, T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" [2 g" S0 n [% |& v- S }/ y9 N% o5 ~, M- J# J# ?$ g( u
*/& ?# i& H* `7 s0 f* t
//////////////////////////////////////////////////////////////////////////, U, i% H$ K7 E& C- N2 S1 K( K
break;1 \0 b. I, D3 E2 z, i
}
) l6 O( V, U* Q7 p E } 3 D2 F; j5 a4 _+ z! G0 M, O
}
" U. p, w" t# M( gm_wndMenu.SetVisible(FALSE);
8 F% @+ b& H! g6 d/ F _4 e8 J$ v- {# P: l
--------------------------------------------------------------------------------------------------------
+ _! }5 i R0 @. v* V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 l9 ?# J0 U- v( r' \0 w$ _{
$ o/ l; X# R, S7 _( @BaseMouseCursor();
" e, l. ]; z; ^( {2 K}! Z" \9 a4 i' A/ G
在其下添加:
( E# V; D7 F; I/ v- w9 l2 j. Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& d& B) R2 F- Z+ L) P
{
! n k+ w# B# a+ wm_wndMenu.DeleteAllMenu();
7 z z& x% `9 gm_wndMenu.CreateMenu(this);
8 _& E/ r* n6 P5 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& | d1 q/ w; ?5 I
3 ~, h& n6 |# Y) [7 N% I! _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' g4 [' }- s% Z) c* K
{
) R2 V3 I2 W& k- f1 j+ k" z8 [, { //P以上级别才可以删除所有道具
1 I' U( G. N" ] b0 B m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& { B) J4 Z& v, U( X; ?& A% `
}) N- X) P$ b4 p; {. C) R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
X+ y6 Q `( E- ?9 |m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" }; _: G" B0 P7 D( X8 V( R" @/ ?
m_wndMenu.SetFocus();6 y: d/ }# \ K) {; `: G$ I( T) I
}
+ I3 I. w4 b1 _6 u1 T------------------------------------------------------------------------------------------------------------# W, [: J. k( z3 L+ h. i' q/ G& X: j
*************************
9 l. l, X4 _9 t( n, a' ]; }WndField.h文件$ ^ W9 ~2 P9 T# E
*************************
4 p3 T" V3 l# n' D0 ]搜索:BOOL m_bReport;
. ^+ g# g; e& \$ @7 K* p其后添加:
5 g# q4 p0 A: N* v h2 dCWndMenu m_wndMenu;! f" y t- R& V: \7 ?
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ g1 K+ \4 o9 p l/ W6 Q6 n* R; v其后添加:
$ W* B. q/ ^. g# X1 h0 O' t( Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
, G* _: m! l- B! s
" t8 k& m( l" V1 N, j
+ t. u0 v R8 D0 n' e2 r6 ^5 } |
|