|
|
源文件中_Interface文件夹下WndField.cpp文件, w! e9 O& z, d) {5 E6 s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 m: E$ G; @8 r
: a) M- p$ Y9 Q* |( Tstruct sItem
9 O. y$ \+ A! r e{# F0 D2 g9 E& m: `& U
DWORD dwId;
- I1 r4 y' w. C7 j$ {* HDWORD dwKind2;
6 }0 N- \5 S9 O* i8 V: F5 VDWORD dwItemId;5 @# N) w- x; S/ R# |* V
BYTE nIndex;
: F) s& G8 _8 `7 s$ e5 |sItem(){+ O/ L h* m& s0 w F; J4 {" [
dwId = dwKind2 = dwItemId = nIndex = 0;
! V% M, L' p `) Z; T}
4 R, F, D p- `: O: ]$ Kbool operator < (const sItem p2)
" @' W" i% K: C) x. a{& ^- u1 ~4 ]2 v4 N) c
if (dwKind2 == p2.dwKind2)
$ V7 Q- P& s* M/ T8 ~$ f {# F4 A' w% {# x* Q# v; N
return dwItemId < p2.dwItemId;
/ B( x( j" C6 r7 q }else{! M$ S/ p2 b" X: N V; W1 ^6 F/ ]2 ?
return dwKind2 < p2.dwKind2;4 A X8 ^2 B, G8 F, x% @
}
2 S' g& T& H/ I$ ~- P' R5 E M7 @}
/ K; V5 h/ x% x- o# `# i};
2 F; g3 x( F+ s8 L0 X* l, \" F6 jclass CInventorySort( d; i \% M! h, R* p6 q
{
# _% J, i B' l3 [public:
* v8 V, ^) K. f9 N7 p( R2 i7 FCInventorySort()# L0 H2 Z; Y6 ^6 b/ Y
{: D* a4 t' h$ R2 \
m_dwPos = 0;7 t" B- Q) a1 u, Z& p# ?
}
* k# l- G) _* x& d# g~CInventorySort(){}; t! `. \$ X# W* o
private:
! n( |( g2 w9 f; O# s, l5 |% {8 KsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* P6 [# ` Q3 {0 [' Z
DWORD m_dwPos;
2 L! @, G5 d% Z4 S" cpublic:2 B. v. K/ y e# n' R' }
void Add(BYTE nIndex)( }8 B; S. M2 U9 y% P) Q3 }
{
$ [% i. r5 `& _ if (m_dwPos >= MAX_INVENTORY)
/ q) T% x' c+ B' j% R {' O7 m& ]5 r( r% b' R& W: R. m1 s
return;
, W. b" B2 S( u6 j3 ~ }5 h7 ~& C9 m! T/ K' ?" c
m_Item[m_dwPos].nIndex = nIndex;
$ b ]5 G% T' [; n m_Item[m_dwPos].dwId = m_dwPos;7 X) {* E% d% z
m_dwPos++;9 ~5 a6 I' a) y- Z: G9 ^
}! l6 L$ }& `5 d ^! F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' M; e1 o8 L( j: s{
% ]; Q k2 r& V2 E# N- x. j for (int i=0;i<MAX_INVENTORY;i++)
" q% i& r! z- a" _0 G$ e7 w {
% q$ U/ G/ w( a) i2 o if (m_Item.dwId == dwId)+ Z v* F Y! D$ k% n% Z
{" V4 G, E8 i7 `$ K- W
return m_Item.nIndex;
2 q, x+ k9 F4 [: n }/ T; L, b/ T$ F0 \+ n6 d) F+ p$ p) Y
}% ?! T3 \$ Z4 M) }( h, K
return 255;- |" y, D$ f# p i2 j$ s5 H
}
6 i z6 @7 W' W/ f: `* F. p- \+ s) rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- \# Y F p" H: }/ G% }# L{
9 r/ E% e( h2 a BYTE nTmp = 0;# m& T$ u/ N' i) `) j/ P
bool bDest = false,bSrc = false;6 _. @! |: p* S: I% N/ F
for (int i=0;i<MAX_INVENTORY;i++). q+ Y7 f% Q4 w' D0 j6 K0 R7 S
{
7 V2 `# ]% @" c* B% ? if (dwSrcId == m_Item.dwId)
2 m9 J5 E0 f) K3 y1 s9 _ {# R, F' P$ W" g
//id相等 则 改变对应的dest和src( C. C) V6 h+ x" P) o( i- Q
nTmp = m_Item.nIndex;
3 C Y* p0 `2 i# Z7 t* c& {4 D0 G m_Item.nIndex = dest;/ }0 L0 |' L1 b: B, u& Z( _& c& D
}8 {' t' Q4 F% O, D6 M
}
, ?# v$ E/ I) I- U8 V- g( z //临时数据保存完毕,交换开始% q7 G% m; z6 t, \' r0 `
for (int i=0;i<MAX_INVENTORY;i++)# ~/ ~* [/ n7 x m1 ?
{
! Q6 B( E0 Z7 F if (dest == m_Item.nIndex)) W( A7 h" g' x
{
* M% m3 O1 B: ]/ L* R/ z //id相等 则 改变对应的dest和src
1 a" ~! X' J; Y9 J7 w m_Item.nIndex = nTmp;
0 \1 Y7 J' C: q! @ }
, c" l( Z9 `( _* T# I2 _0 P }- B+ f0 O; O5 P' h$ V/ b
}
- B3 X8 ~" r0 O3 U G};
: E4 n( K+ Z" D) g6 _& f) p/ Q( X+ b2 _-------------------------------------------------------------------------) @, n; Y! P! H' b1 }( d9 K# b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 A8 h' w# ~ J# e8 G; W$ g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* E$ B" L$ I* v+ X2 d; b
紧靠其上添加:
8 b1 L7 L0 O" I, c9 S, `* Rif( pWndBase == &m_wndMenu )2 m, [) m- ]+ N) J4 ^" Q
{6 e+ S8 x7 B/ P* {; w' B
switch( nID )
2 t: r$ m0 ~6 Y% g8 c- e {. v! _& A7 b l- ]* g
case 2:
+ j9 K+ `1 b- m# j% k l {
3 I, `% s0 f. p) S; V2 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 f. B4 s' B7 F/ U
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 |$ s1 y# Q; b* c' I/ f
{9 P* g b# Y- ^; o6 e6 q6 y
break; {' a0 L0 |, j* ~/ `6 m4 q: D( i
}. `/ m, X* x* U+ P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): s/ g3 R- R0 u& h
{
' v z# B+ S# r/ w! H; H+ k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ r* e* }7 B' Q. `' H4 a) o. W
if( !pItemElem )
. K8 x! {; I% k( m8 E continue;
8 j3 T# X8 `- h9 a) K- h if(pItemElem->GetExtra() > 0)" l+ i% j& }; x, \7 \% P& w/ h6 b
continue;
$ I$ S/ j7 m4 N. h& x Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: ~; [% o: A- [: B n+ O3 D P. B continue;6 V5 X; M5 T& C5 u
if( g_pPlayer->IsUsing( pItemElem ) )
" u1 W" O- E6 w" z+ j: R continue;
1 m9 w, T: E+ p; q9 W8 v if( pItemElem->IsUndestructable() == TRUE )( N8 k* D: U5 ]! Y( v! k$ N
{
- N, u; \+ v" m6 u5 A0 O5 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 a' a# A+ D. W- b0 U, G continue;
7 O/ M& s y. D! Z }7 m1 I9 A$ {9 p9 P. I1 `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ z4 y O/ A5 K6 x* W4 M }5 _: o! q: m# S
break;
9 i, N; o3 ^5 B) z9 x# B }
: I$ U3 B$ D0 e1 h# G" f) C case 1:, q, p) H2 {6 [% J. X0 W ]* ]
{$ U* ^+ S, _7 [! `# w% P
//整理背包
/ V& j5 i3 S' a0 c$ a. X8 S //////////////////////////////////////////////////////////////////////////
$ {3 I( a( }% W' }( j$ S! E. r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; Y3 N7 Q( |% r# k //////////////////////////////////////////////////////////////////////////! x8 F# E/ {' X) x1 o) c
//////////////////////////////////////////////////////////////////////////
& i2 y6 {( @# J CInventorySort* pInvSort = new CInventorySort;$ I& j2 y% F* V* ^
vector <sItem> vItem;
$ o0 x$ L& F& Q. c7 V vItem.resize(MAX_INVENTORY);//初始化大小/ Y7 n+ n7 |, Q' l6 R
//////////////////////////////////////////////////////////////////////////
6 X, M' G J/ h+ A //填充数据
. v) S# i( Y. z- Q' ^2 O0 U* b for (int i=0;i<MAX_INVENTORY;i++)8 r) f! U; n { z" @$ K: {. G
{9 p: n- h! |. r; K2 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 \" r! \% K% s ~$ _: I/ _" C2 m if (!pItemElem)5 a2 W7 G3 h% F0 G2 r9 t+ x+ b
{
3 w6 x, o! ^4 }7 J$ ^3 z vItem.dwKind2 = 0xffffffff;
1 j2 d z |) e0 ~5 A4 q vItem.dwItemId = 0xffffffff;
4 p! ], _! G {9 K- ] vItem.nIndex = i;# W4 l( a0 o& p
}else {
; u1 t9 E% I' R, n ItemProp* pProp = pItemElem->GetProp();; Y: e4 z9 W5 Q3 n
vItem.dwKind2 = pProp->dwItemKind2;0 E7 a) H/ Z3 P& g. X
vItem.dwItemId = pItemElem->m_dwItemId;) e2 H$ P9 ~+ F+ e+ g( M
vItem.nIndex = i;
2 t0 I( p* e3 }2 G; n' j4 E4 Y3 S6 u }
* r: Q- t0 L- v9 T B6 m //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% E7 U) N" E$ E" a }
6 ~% v- M6 g) g: c$ \' y r //////////////////////////////////////////////////////////////////////////5 }# F* |" \# I" ~' a" _3 X
sort(vItem.begin(),vItem.end());//排序$ M6 |8 a) r4 j7 B$ ~
//////////////////////////////////////////////////////////////////////////9 c2 P: G( s# o2 D! V
//交换
2 V8 L8 |7 O# E; T7 a- L for (size_t i=0;i<vItem.size();i++)9 E* S3 C9 G+ H8 P& T" j/ e1 C
{
+ j6 @5 U+ Z1 t! J) P9 u, G* F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* }5 P6 u5 h" G7 @4 @! m+ j
pInvSort->Add(vItem.nIndex);
& K# G- C. F; m }/ n+ D; T+ T- J
BYTE nDestPos = 0;+ F4 D8 x* R% Q( T3 f/ W
for (int i=0;i<MAX_INVENTORY;i++)
! U$ }0 P" O$ R3 h {7 `! N) j+ c7 x2 J9 K: ^( \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 z7 Z) x2 r; H if (pItemElem)
% _* m( L, Y' ]7 w: y {
1 }9 j }1 q% u- O if (IsUsingItem(pItemElem))
) Q( o6 v2 o! e% y# Y- F {: h; I( B- G( p( ], r
//这个位置无法放
9 }0 L) X( f! g( x; s, i* f nDestPos++;5 ~' r7 J% Q0 g1 P% M0 P/ e6 |
}
+ m* h6 L) M" \- b5 e* b8 u } @: P8 s' j; \7 O' w l
BYTE nSrc = pInvSort->GetItemSrc(i);
; i% C! c7 o0 u; N: p( d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 [; ]* Q3 t% M# m9 n$ [& s if (pItemElem)/ Q l0 {2 _+ j
{
8 K( ^$ v% Y8 a v if (IsUsingItem(pItemElem))# H# ?$ |) h! @( g8 R8 _
{! _( t9 X/ |1 [
//这个道具无法移动,跳过
2 o( X# ]3 i' H6 N% v% z% U# j& ]4 B0 \ continue;
) Z3 {, t; ~. r) H }
/ n7 \- N9 r3 A6 ? e" Q/ x }else{; p8 H8 O z8 g$ {( M' d
//空位置 不用动6 k; `/ X9 K# O% e' @7 T( d4 v' V
continue;
' |- e* W m: V1 i }
. ]1 N/ k- u% o% q; s7 y( m s //////////////////////////////////////////////////////////////////////////
. D: k2 R+ i1 \ //开始移动4 J, b3 |* M/ y6 z
if (nSrc == nDestPos)! s9 w$ Y2 P; E' Q9 P# }! k
{& L# Z A" g6 Y1 b( X
//原地不动
- Q7 b+ \+ {, T nDestPos++;
# R1 X. C# d2 N) m& h) b continue;
: t7 p3 W, |) U! P: i }: ^% g m6 m/ _5 q
pInvSort->MoveItem(i,nDestPos);; R9 b/ t2 z. F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 ?: E5 @# t4 B* j# Y$ g3 L* ]: r! ~ Sleep(5);' ~; I) `+ j) S! X5 M
//Error("移动 - %d->%d",nSrc,nDestPos);
S* R4 H( I9 M, A% o6 i7 Z nDestPos++;
) F+ v& b! m; W | }9 `* r O2 j+ l! @
//取第一个元素的信息5 O1 N# ?% ?8 ~* w0 M) }
/*
3 x+ L. K+ i2 @! \! [' b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), a6 ~# s# ~: R' v
{
. y" ^/ N# \4 |8 U; R, a: ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x); k, A# e; d" c1 `# X) I [0 c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) Z) W: E! i. Q# `& K7 {! H; s
}
; ]) u1 v$ s& n/ K4 k- J2 @ */0 K! I+ F! h! [* M/ X# |) i6 V1 l
//////////////////////////////////////////////////////////////////////////- U5 I, n5 ]9 Q, }
break;
3 R: Z9 Y# B# U+ m4 A* U0 |- N# a }! A S/ s4 l% Z3 x. l% g
} F. O, i$ d. Z3 c5 o; l: Q
}
|. s7 U7 b( Y9 [m_wndMenu.SetVisible(FALSE);
8 W* H7 \& K3 H( Y, e: C9 E2 T9 L) N4 f2 Y/ `1 Q
--------------------------------------------------------------------------------------------------------
' X& l* Q. V# E0 [/ w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 J o$ i" J' L$ l& e, w
{
5 z; X z- `$ q/ u8 `9 s: SBaseMouseCursor();
9 z2 ?) |+ r" |9 P0 B}9 R4 _8 T i9 h) C" Q% `* r$ p8 ]
在其下添加:7 F1 k' P6 P. _' {1 r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 `( Y3 P7 L$ c9 X% v6 J6 w' i
{
, n6 @9 Y: s& Dm_wndMenu.DeleteAllMenu();$ b' e1 h# e3 g0 `
m_wndMenu.CreateMenu(this);, ?# u" n9 A+ K+ i& b& t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 X7 D2 T, |: m% _, ~
2 {: j/ B f0 |7 I1 J% tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 X" K% j) P; p7 H2 ?2 N$ Z
{
) {! T, P7 j& r //P以上级别才可以删除所有道具
# v( ~4 O7 l# s1 o3 T& ]& J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 A5 @5 v( Y" ^: {- U
}8 ], I" k" R' ^: |3 X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& {$ R, ^! Q; Z8 g9 M2 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
f& P4 Y% E$ y4 Q" om_wndMenu.SetFocus();
7 B$ R8 r2 x; {' W/ v}
# S, C/ Y/ b2 P6 p5 @; w. f------------------------------------------------------------------------------------------------------------& {+ m8 a5 {: ^- j5 S7 G
*************************
a8 e. Z- [2 `* AWndField.h文件% F' r; T+ V. g
*************************
9 v% n6 y% b, J; V搜索:BOOL m_bReport;/ j, r! Y, S0 {3 p5 s7 C9 \
其后添加:& w( N, T3 K1 w! Q8 R
CWndMenu m_wndMenu;3 t/ ^) T; w- ~: K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- e0 |. {& w q7 \& m) H
其后添加:
) H: ?% b! P1 ]2 \4 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);* Z2 T% z( A. u, d
/ [, F7 ?9 D n
9 M% G/ A0 B5 p6 A& T; r |
|