|
|
源文件中_Interface文件夹下WndField.cpp文件; c9 e+ C6 O1 h# t H$ X. h) F
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* b, _3 ^# q1 h- [" N+ o
/ U7 `4 J" A/ y# \
struct sItem3 G- g" x- X' D; E1 P
{+ d) V& S3 Z; X x/ p& g
DWORD dwId;" w: ]$ ]. R8 J0 \3 P" \9 q
DWORD dwKind2;8 B$ V s2 ?' z+ N. n1 T
DWORD dwItemId;
$ c3 } C$ d. r Q8 U0 k" nBYTE nIndex;
" c5 x$ K; P, _$ S/ y1 }! p. r4 L0 KsItem(){, c2 \; C) O/ Y7 m- x
dwId = dwKind2 = dwItemId = nIndex = 0;
4 K" f* j% b3 t/ q}
) C; k9 I; M( Y9 z. k ^1 `/ xbool operator < (const sItem p2)
: G$ x4 y# @# E* c( Q{
# }1 e- C4 m4 k; K6 H if (dwKind2 == p2.dwKind2)
2 {0 F, ^7 _6 B. G, [ C0 h {/ ~+ s% L t5 U5 p5 m1 [
return dwItemId < p2.dwItemId;
0 [8 Z! L0 w5 k( V0 C: G5 t }else{
8 W3 I/ N: D! M return dwKind2 < p2.dwKind2;1 y) ~# l" q$ R
}: ?8 t# j* { r. t
}7 `/ f' Y% B* J6 P; U4 ?
};9 Q" d! I( B3 ]% P4 A) u
class CInventorySort8 u4 u5 N+ @& ]0 E
{
X2 @2 Q f2 O( X5 ^+ {2 Jpublic:
- |, z( B% _1 u7 Y( ^CInventorySort(). a) l$ p3 `7 S( _- G8 f
{& ^4 c, _2 b, h6 a% k# x! o
m_dwPos = 0;
5 |$ S. }. v/ O& K$ G}! y# J% |$ w3 u" `+ Z$ F, k
~CInventorySort(){}
0 | P @: \: U7 E' j( W+ K5 Qprivate:
; L6 L6 X! }4 K: o! V0 F3 Z7 ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& m/ u& _" S1 G" Z
DWORD m_dwPos;* i R" _9 b% ^* ^. Z( q1 \
public:
' h, y% ~* T8 k/ V3 R' U( jvoid Add(BYTE nIndex), D2 s3 | }1 l- A
{
( q8 f2 i$ L7 X if (m_dwPos >= MAX_INVENTORY)# e. I# M4 f9 t! Z# h. v
{
7 k! t8 D' p2 H% x; y0 S; P0 p return;
) E* w. K2 R. }$ n8 m* x }
* g8 C& M+ d/ G5 L m_Item[m_dwPos].nIndex = nIndex;
: w) v0 V4 Q5 D/ l m_Item[m_dwPos].dwId = m_dwPos;
( N9 {6 m2 C4 l m_dwPos++;) j$ [! Z9 {) ]7 V+ s0 h7 L
}# R' I. `0 M$ b8 |2 }. b% g% O" N
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. X- q$ e2 E6 V
{
# m/ f) M2 H- [) b8 Q' a9 M for (int i=0;i<MAX_INVENTORY;i++)6 l: ~) j; A9 d
{
0 _. u7 v% d& t0 t if (m_Item.dwId == dwId)
! ~5 l Q8 ?- R: A+ s9 y0 |6 F {% P5 A" }/ u) s, V! ]8 H
return m_Item.nIndex;* k0 d* I, u! d; k+ c
}( B% k6 b: R% u
}
# Z0 u3 M) W, {6 A return 255;3 ?; ], |" I8 t! ]
}
# s9 g1 |; h7 _' ~* Mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 K6 @; _$ O/ e7 x
{9 F1 c# m% m; \2 R* R2 G
BYTE nTmp = 0;% J2 b3 D0 T" v- q$ V: v
bool bDest = false,bSrc = false;
- H- b5 k- l! ~: I+ v: x for (int i=0;i<MAX_INVENTORY;i++)
6 @0 `7 F& x/ Y9 { {
7 i+ w9 u1 q+ _0 ? if (dwSrcId == m_Item.dwId)4 p& u+ u( }( h( `+ B
{
0 w2 e) ?. s; I1 n# A+ I //id相等 则 改变对应的dest和src
, F. ^4 c7 J# d: [ nTmp = m_Item.nIndex;: W5 ?) A) q p9 V
m_Item.nIndex = dest;+ o- v" R7 ?1 ]; S7 c
}
$ [- w& S8 A5 I6 q }
( M, u1 P1 x, |0 A4 B& T //临时数据保存完毕,交换开始
3 ?0 t, F; v* ^0 a/ E$ Y+ ]3 s! o( | for (int i=0;i<MAX_INVENTORY;i++)
! S5 c' ^& x/ L# \" t( o+ f {
5 v& o, b b, p3 Y' W if (dest == m_Item.nIndex)
3 Z) U/ g, N* D/ u! T( J% ?, ? {
9 F: X x$ J" | x q //id相等 则 改变对应的dest和src
- V+ g) D) A& K m_Item.nIndex = nTmp;3 Y. ^0 ?1 c1 e5 q, [
}' s# [# q+ _4 a+ ~* i1 E% U; j$ a
}
! l/ N; T5 H' l! J$ i) u3 S}: L) k" ]1 a& Z
};/ ?: A& _& K2 q
-------------------------------------------------------------------------
- |6 W( P, p! i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); C/ R# o' Z6 t) k) b9 n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 ^% W. u9 \. w' J: K; I紧靠其上添加:
, [/ E6 p# M9 l, ?: Dif( pWndBase == &m_wndMenu ) O# Z* N$ @0 M$ n& u6 O
{
' g4 p0 |; t$ m% P switch( nID )) |% M: e+ f' H* }8 `
{
4 p2 C$ F, Y( x case 2:
$ d* w4 c5 }$ s' n! f3 [ {; u# n. @& E3 p j: Q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 M7 `. B" o' B0 H: Q# c5 F# { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 E$ f1 f6 Z& u% N6 \
{' v9 @* y2 K2 p5 D9 t
break;4 Q( M8 e2 F% m6 k6 [2 |! {% h, M
}, f% n8 H" N$ X% z S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ g6 q* q) ^6 J/ Z0 h- V" s {
4 n& b! H' m; r4 } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 w( ]3 I' K3 Y- C7 W9 _ if( !pItemElem )
, a5 M+ s) d3 e# ^& u) A) h3 B% K$ } continue;9 q+ q; U3 i1 M. [' E
if(pItemElem->GetExtra() > 0)
: o8 r7 I/ i7 u% u continue;
: |+ S0 s/ y) E; J9 Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 p- _4 v5 _% l. n- Y
continue;
( ^$ X7 e3 ~1 I+ u if( g_pPlayer->IsUsing( pItemElem ) )
9 g4 _$ Z7 @9 [4 Z1 I( { continue;6 j. p3 I1 c8 y3 ^' Y H1 a9 o
if( pItemElem->IsUndestructable() == TRUE )# S% Z) A7 x0 M% u2 l' n
{
4 @( @/ U; D& u% c( I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% Q# a" m$ w9 B! O" a1 A+ h9 w continue;: {6 E; O5 L" w7 E) b% [
}
' ^3 r6 j# X( h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 ^9 U! Z! D0 {3 T0 ]4 Q. O4 z
}4 m: E6 L8 y! q# Y7 @; t
break;
9 j" V' X c5 k/ Q' A }* g6 H1 L4 w( a. i7 h% a3 d
case 1:$ i- }. f( C- I3 l& m2 U/ O; S
{
2 f& H& I# Y- B# e //整理背包4 {2 c E1 L* V( r
//////////////////////////////////////////////////////////////////////////
" x" q! t% E4 R& j9 ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 B6 q7 F& k1 g //////////////////////////////////////////////////////////////////////////
0 e5 N: f+ k# D //////////////////////////////////////////////////////////////////////////" _- x. s' Y4 y$ }/ ^! |4 X
CInventorySort* pInvSort = new CInventorySort;" H" j% ~8 |- s4 V" l$ f
vector <sItem> vItem;
1 E l( ^3 B" o& }6 \) p7 N vItem.resize(MAX_INVENTORY);//初始化大小2 ~2 I+ R, ]( H/ ~% M9 I
//////////////////////////////////////////////////////////////////////////
" H U; c! X: z) ^- k) H //填充数据4 U: l; h/ _9 T5 `' m X" e4 y: `8 t& U
for (int i=0;i<MAX_INVENTORY;i++), u* }; x7 f& s
{' s1 _2 C6 W- s+ a0 \" i# X5 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) j* P: l3 y+ D; I( p
if (!pItemElem)
& \; J4 _5 A( P f. r( i! d8 ] {7 x4 t. F8 Z- @9 U) g
vItem.dwKind2 = 0xffffffff;$ [1 F8 o. A; x, L: Y
vItem.dwItemId = 0xffffffff;
5 c3 u( T; _' g0 R vItem.nIndex = i;
4 h5 }' F$ } D& A }else {
% g5 `$ \5 t7 e, b! t: E ItemProp* pProp = pItemElem->GetProp();* X( I8 h$ ?# n6 P& L
vItem.dwKind2 = pProp->dwItemKind2;6 R3 w8 s( Y, @4 K1 X
vItem.dwItemId = pItemElem->m_dwItemId;
/ t Y2 s* N1 F) Y# m7 O* Z( J) W vItem.nIndex = i;" N3 Z. S& G/ d$ J5 x' m, [; S
}3 s$ ~) R# [7 s. F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; |( l- C1 \# a2 O* Y
}
4 n$ |% o& v1 d. a) e //////////////////////////////////////////////////////////////////////////8 l" _3 @; D/ I5 F3 U3 ?4 d, K6 g
sort(vItem.begin(),vItem.end());//排序2 S/ K \8 I& B% b. h' P) C
//////////////////////////////////////////////////////////////////////////- F9 E# g1 I# i+ r( P5 N! j
//交换
, s( D9 H, g# R1 m5 D for (size_t i=0;i<vItem.size();i++)
9 f; B' j+ I# c. {5 Z {+ K- n2 I& i* V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 Y) E: F# ]& W& R* i: g8 Q pInvSort->Add(vItem.nIndex);
: F) L/ }* P* ]8 @ ^ }$ ?# ^- J2 b( e7 N# `$ {# V
BYTE nDestPos = 0;0 U; h) D! |$ j0 V) J
for (int i=0;i<MAX_INVENTORY;i++)
$ G: D/ W7 c+ _" a$ X( { {
& p6 X( b* M4 U- e: ]: F T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ F0 `# g; r- v
if (pItemElem)
9 i- A" V$ ^' M3 _& c. F8 B0 J7 | {1 M( }5 m5 g7 f# x0 _2 O9 ^
if (IsUsingItem(pItemElem))
5 Z6 i/ }, X- M6 C, l( H {
1 Q7 U9 t5 J I" R0 J //这个位置无法放* ~& P( `' @! y: |
nDestPos++;
5 K( w; L, J) ^2 ^ }
8 {: A7 O6 y0 a. P ^) Y }, m1 X$ k* O) Z- w% e" Z
BYTE nSrc = pInvSort->GetItemSrc(i);7 }) N) P3 i# u2 x7 L! e& ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: f: l9 i2 o2 |% r, D% ~6 {
if (pItemElem)
7 q2 f+ i) B. S5 q* K+ A& L {
0 H$ D+ X! o1 P9 s- p( U if (IsUsingItem(pItemElem))/ V' u/ c* w0 m# n
{) ^3 J/ i5 [, [" L6 f
//这个道具无法移动,跳过! b) B/ C7 h5 F; u) s
continue;
- p# @4 t1 ]5 P, _! x6 p8 o8 C9 G }* ~% Q5 Z0 D1 y" H8 ~& U
}else{1 i4 w, y H) ~0 k- y# u4 m
//空位置 不用动& i. M% S @% i! X- g, M5 ]) S
continue;5 G$ @- W( r) W8 N5 E7 v
}
* F, ~4 j+ n4 Z' t( @7 Y6 V //////////////////////////////////////////////////////////////////////////. `3 x8 Y4 \" @; Y4 W( r
//开始移动; P, N* ]8 w2 [: Q1 f
if (nSrc == nDestPos)
" ^ ^' R+ o q4 r# f4 X {
" {/ {2 c; L2 p" |% C: d1 c: ] //原地不动
% I! q X9 y) m, x T. V+ n" [# u% ~ nDestPos++;
: |& Z( ?' Y% Z continue;
2 Q5 P; u5 i/ k- V* X9 T }8 J' j; B' w7 V. @- G7 q% V4 I1 _' v
pInvSort->MoveItem(i,nDestPos);" x( p2 e* }) \7 n$ Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 V3 Y/ W* f1 D
Sleep(5);$ C9 l7 v" t( n/ A) i4 J
//Error("移动 - %d->%d",nSrc,nDestPos);
* P0 m0 X E, z) l0 T9 l nDestPos++;4 ]: b; w# B" Z
}; }' M- E" Y; b
//取第一个元素的信息
6 ]' j% r& ?! S+ ` /*
" L7 N4 d0 h; E; i0 ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- c9 s8 l, H, y- [8 W+ V
{! P0 |" q6 B( g k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! o$ ^9 D* f" w) ~1 `' K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ U2 ~; B& o0 @; m k" b4 ~* P }8 {2 O! C B5 E( j
*/% K% } q: f) f
//////////////////////////////////////////////////////////////////////////. S( [2 c6 l" c
break;5 \! J* Q" z4 D V
}
9 W# ?# G, h5 ]4 K }
4 N7 x/ H3 i, r. |}8 `8 D" E( _: X; V
m_wndMenu.SetVisible(FALSE);
6 K* ^+ @; q# L
6 @9 E6 t& `) }; I) W2 y--------------------------------------------------------------------------------------------------------( L; b' a& q5 M: C+ g( b. i+ V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ S: q" @1 P. `2 v{
/ q+ n' w1 ]0 V% O- Q( qBaseMouseCursor();
) }; R" ~. P7 F6 l8 K}
6 ^* K* A4 b3 @+ \在其下添加:
' o1 M( Z( ?% Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 p- H3 k/ ~+ u/ ?1 ^2 |1 L{
7 _7 V5 J2 z0 ]1 m) P( @7 K& dm_wndMenu.DeleteAllMenu();# P8 N$ e* [0 E4 L+ n! n
m_wndMenu.CreateMenu(this);
6 n) A8 q" K, t$ [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 E5 q4 n$ ]* Z0 ] [1 a% R3 o9 p# ?7 M$ G" D7 @* `1 i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 m9 U1 F( v; m9 o1 j
{
9 o' Q$ o, D, Q- G' X8 \' m) @ //P以上级别才可以删除所有道具 R5 u6 _/ r& }0 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 m1 j7 t3 K% N/ K/ z$ U}
d6 f. j7 n* A; o$ J/ Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 m) w; ]9 q. R% ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 [+ ?8 x/ w) \2 b% W0 z6 Um_wndMenu.SetFocus();
; t h3 S, P2 Q0 A- o2 u8 O. G}
. J: J7 k7 @! M, U9 M& g------------------------------------------------------------------------------------------------------------
/ P8 h: r: c/ h5 {$ f*************************8 _8 f9 \, r% j" V1 F$ {
WndField.h文件
& x8 ^) g6 b3 E' w9 |# y*************************6 V& F: ~: o6 V
搜索:BOOL m_bReport;
2 b& n2 }* l# w ]. k5 z4 Q* f其后添加:
' z% G7 E' P# q1 R hCWndMenu m_wndMenu;: Y& B( O$ l% |2 Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 U2 P2 c6 q% y* T( `* C1 I其后添加:
, ~, v& P; v3 U; A$ Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* l0 i/ t1 w+ ^& A4 L5 q: i3 r" o2 i4 f$ N2 Y. ?8 K
2 q; q5 m3 w. Y. W, G5 A8 ^
|
|