|
|
源文件中_Interface文件夹下WndField.cpp文件: o: ~# I* W! l; k
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 ?8 Y* e4 i: R# E7 h5 e8 O
$ _0 A3 V* Z, j, b# `' E
struct sItem
9 V- _8 f6 p3 e5 N{
5 v0 M( l: |3 F3 e) ^+ }DWORD dwId;6 n* G9 q, g! w/ s- [* B
DWORD dwKind2;+ b0 o" g& v5 x; l7 M5 |& u
DWORD dwItemId;
' C3 A% G9 B+ Z& _* p' cBYTE nIndex;
T: V! s- t# LsItem(){* f b z* `4 X4 p' B! O$ L
dwId = dwKind2 = dwItemId = nIndex = 0;
$ P# X( s3 f1 H}+ `4 Y* j0 D3 V- U p
bool operator < (const sItem p2)/ B! U# F' M7 T5 ~ h1 R) {) C0 i
{) p& C- [# q7 i- I: c w3 {: U
if (dwKind2 == p2.dwKind2)1 D- u# P6 ?5 J
{- R5 ?0 S( z6 K) a& g( `
return dwItemId < p2.dwItemId;
! d: P, E; ~+ P! i m/ g1 b! | }else{
6 X. ?+ x! ~$ u( j return dwKind2 < p2.dwKind2;; l* |/ L2 h+ q0 v
}
: j/ Z- D6 z* ]$ o& ?}% @% k1 }$ W8 x9 u' i
};
0 m a9 M+ ` }' s/ zclass CInventorySort
" i1 k3 A+ v7 U& v4 q' B{
/ ?- I7 c( H( k# m) l9 Fpublic:
K8 Y+ v3 `* n6 ~: D: VCInventorySort()1 n- y+ G2 v% [% r, }( r5 t
{8 c( H7 L, Z1 N) ?" J
m_dwPos = 0;: b9 r0 m, H% G5 y2 P! P3 M
}
5 c- V1 ]0 B' ~) A- I1 Z~CInventorySort(){}
: Q5 T) S+ m, Lprivate:& ^6 K8 T( d+ [$ N5 s2 r- T1 x8 E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( ^% }# b9 F z$ o2 E9 o* C7 n2 Z& JDWORD m_dwPos;% Z3 m& Y* W m3 C# [; ?! \$ s
public:- J1 Z I8 k' u, O( n
void Add(BYTE nIndex)
2 T7 l+ f) b- S; {1 w1 l0 e{! q: Z* A" X( X
if (m_dwPos >= MAX_INVENTORY)8 ]3 W5 u. O8 c- O
{
; f; O7 o5 Z$ j& G return;
* o- z" G/ S/ K2 K! k& [% E0 C }
! E4 d& v$ |5 {' V" _( {1 f1 P" |- Y m_Item[m_dwPos].nIndex = nIndex;4 `' k X+ J& y) I
m_Item[m_dwPos].dwId = m_dwPos;
) A" `& Y) M# E. ?3 P6 e m_dwPos++;; |) m) l7 i, G4 a) z8 {
}' N( R9 G/ x9 c$ X9 Q8 `! p+ D. ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 O+ e5 m) V+ q9 h! S; E: {: k
{ X3 w2 E4 e: A7 r7 ^# M& J
for (int i=0;i<MAX_INVENTORY;i++)6 K/ v' E4 t' |. ~
{' @5 c9 g# z1 ~6 }2 j
if (m_Item.dwId == dwId)
$ A. K' p# i: J7 Q% V' C7 b {
; ^0 D2 i5 _7 J- y return m_Item.nIndex;- ^0 q7 H9 I2 R5 C
}
' V1 U' E9 k3 s+ z' O2 T }
1 m% j3 t1 q( }: s8 q" ?1 [3 u return 255;2 q+ O/ \ I' u; m! j
}
' I" a( o( J5 R6 `% x2 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ o! u. E4 k/ w) m" I
{; s9 Y4 [; x* Z7 `
BYTE nTmp = 0;# @$ z& B2 z$ X
bool bDest = false,bSrc = false;# ~1 l$ b: Y3 m# _
for (int i=0;i<MAX_INVENTORY;i++)* M, P( \: K2 A% [) a7 F
{* \2 r$ P3 m. P# b" \8 Y+ P
if (dwSrcId == m_Item.dwId)
" L: ?! ?/ N+ q" u" r {) G8 l4 n: n& c% s- ]7 d
//id相等 则 改变对应的dest和src
' S% j0 F9 N% |+ ]( t( n2 v! ~8 e nTmp = m_Item.nIndex;
: }6 d# s" T6 f( \9 z& f m_Item.nIndex = dest;+ n) l0 c; T; M" J
}
3 \, a+ P4 N" ~ P$ I }* ?" b# E' R8 i A( Z
//临时数据保存完毕,交换开始
7 f5 V, ?( X7 k8 {8 E for (int i=0;i<MAX_INVENTORY;i++)
; I1 x5 A3 W! n4 N {
! s a( R2 Y1 a' G: r H0 A if (dest == m_Item.nIndex)
$ W- F4 L0 y. N# }+ p% J {
1 [7 I) q* W5 t+ G# I# D( {% I //id相等 则 改变对应的dest和src+ H( X4 K% m [( V: h
m_Item.nIndex = nTmp; l' K3 }9 o6 P8 l
}* e V4 ]/ Y& m" C) f$ z3 \) }2 z* g
}, m4 H4 s- Z- A+ U! y8 _& K& N
}; c; \1 M/ r- Z3 l' K, l; B
};0 ^0 ]6 _1 {+ ?, g+ |# s: C
-------------------------------------------------------------------------, Z8 @% W w+ x1 U' I/ U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ q- T4 g9 L9 y& i3 i- @! n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: n4 ~% a0 l3 h" } K
紧靠其上添加:
| p( q+ }* Z( K1 ]if( pWndBase == &m_wndMenu )
2 G) R' ]0 X k; h. Y! s6 H1 \) Q{
2 N) P6 [ G9 Q l$ R2 i6 v switch( nID )& R1 Z) `0 U8 ^
{
4 R4 y: D/ p! K, Y0 |. D- ~ case 2:7 ?. Q; X: d+ L* x, K' y
{! H# n7 b4 `2 c7 R+ N* B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) Y/ L6 v- r0 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ l5 N* u. [7 D L {$ S2 \/ f% u% X/ d2 l3 ?$ }
break;9 r7 z" Q) n4 c- E/ B
}
# y. }6 v- w. ~- {- A) L7 c1 w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 v) w, s0 n V/ F/ \; h {5 ]# S; w' k! W4 C6 Y: b9 Q Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 _5 r+ y; n$ u r n. N- r5 v
if( !pItemElem )
! g) u; f/ U5 D continue;9 G5 ]% K& L; Z1 \
if(pItemElem->GetExtra() > 0)
2 z4 L7 C; |0 Z' C7 s1 U6 R3 l2 |& g continue;; g, V2 p& I4 e( i9 G' i+ J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 B7 A/ R3 d0 p5 t) j$ j9 x continue;
9 S7 I- X9 K. }: X1 ~ if( g_pPlayer->IsUsing( pItemElem ) )2 b8 n$ t* z, T" u
continue;! v: U; {9 H8 ]2 {0 c
if( pItemElem->IsUndestructable() == TRUE )
5 m0 ~3 i# x+ G {9 D4 N* O3 Y8 Q( a I) h1 M; _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& m' x+ a! R4 N* s; j/ j, m1 M continue;
* L' L/ N5 _) `7 n, Y: d }8 S. Q P& p7 o' H1 x" q0 S
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# ~% q4 r1 F; b) N
}4 \6 J5 g- y7 K; o9 a
break;, g2 c; Z+ c0 Z8 {, o7 K
}' X! ` z. c& I" @) y7 m% [8 j: v
case 1:
8 z, E2 B; `: F% N3 y/ c) S* T {
5 v2 w( T, x$ J2 l2 E( \* i //整理背包( @, C; O6 u- V
//////////////////////////////////////////////////////////////////////////: x- b$ X: Q' u
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 b- n6 L( ~" Y3 ?0 g+ D5 x& x* E
//////////////////////////////////////////////////////////////////////////) I$ k, c8 F: o, `5 {( D% t
//////////////////////////////////////////////////////////////////////////
* Y4 e; W6 b6 S2 g8 G CInventorySort* pInvSort = new CInventorySort;6 n; l) O; \3 `1 g3 I
vector <sItem> vItem;; a+ ^1 g% l" t; d# C; m$ }
vItem.resize(MAX_INVENTORY);//初始化大小
" D J$ W$ b: b& o( q6 F/ }+ T //////////////////////////////////////////////////////////////////////////- T7 D0 T1 S3 l+ x
//填充数据$ u. g6 e7 @1 ^7 b9 u+ j
for (int i=0;i<MAX_INVENTORY;i++)
( U' s: R' i4 c' r5 s& J {
9 p. k6 w1 I8 @7 H( v/ c( p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" e# G$ d9 I7 `% @
if (!pItemElem)8 T5 }. _# `5 i( w$ C0 K/ ^
{) }3 k6 h v, X
vItem.dwKind2 = 0xffffffff;& @# ~% m5 C+ P9 t
vItem.dwItemId = 0xffffffff;
' @* q/ r* ^8 b' m$ N2 A vItem.nIndex = i;2 ^; X( v# G/ X* k2 M
}else {
, e# }# N! |8 m0 T0 W ItemProp* pProp = pItemElem->GetProp();
1 T7 D/ I- Q. w+ C6 l0 o vItem.dwKind2 = pProp->dwItemKind2;" v" S# O% X, R5 E
vItem.dwItemId = pItemElem->m_dwItemId;
2 X/ p N/ V) y. i! q" { vItem.nIndex = i;
3 l! S( R. x3 p! ~ }& W* j4 h" d: e ?$ |/ {8 k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 X5 ^5 L7 Y3 H7 l6 k; C1 s- p! ^
}! E0 U* K- [ |+ @% \, @
//////////////////////////////////////////////////////////////////////////4 L$ ]" t8 {# ]+ t: ~7 X" P
sort(vItem.begin(),vItem.end());//排序4 L& R5 B/ Y' P. K- H% B$ w M
//////////////////////////////////////////////////////////////////////////" ^& G" y6 }9 ]" r
//交换7 V$ o9 _ g7 ^0 M% Y
for (size_t i=0;i<vItem.size();i++)
+ C5 z* ?2 I8 r: Z! p$ ~7 c3 l {
! }# M' E% l I2 u% D //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; x7 N! a: v, J5 s
pInvSort->Add(vItem.nIndex);4 ?6 I1 O9 t& F8 k J# G8 P) r* } Y
}0 a8 H* H& ]" W7 c& H+ }/ k" |
BYTE nDestPos = 0;
# J9 B6 G0 {& l9 l for (int i=0;i<MAX_INVENTORY;i++)
; o1 X" t* N3 |9 q1 h {3 ~. m. i2 v5 O- f) v4 ^+ u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& l, F- \- @1 T B }9 D' [" o if (pItemElem)" O& d. D3 e" M7 r0 A. ?( A5 H
{
/ R! z4 a6 j9 O, M. Y if (IsUsingItem(pItemElem))
2 d; W) ? o3 z* w$ R- @3 H {
, _ n8 P a/ M0 X1 A. p: p //这个位置无法放6 ?5 s8 p" @1 W
nDestPos++;2 E3 m1 |1 P. { H N
}8 {# T: t: \5 k* S: P7 p& W
}
. i& T& H* Y3 b* H; h; p, W& |& S BYTE nSrc = pInvSort->GetItemSrc(i);
) c# Y3 b- K: s1 V2 p( j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; q0 T x: r1 \/ s
if (pItemElem)
3 q6 G. I& m% x: \0 a {
{% n5 g' d8 k! ^ if (IsUsingItem(pItemElem))
$ q" u7 ?3 v: M9 t! m" R- Z {" }# T& I" [) B o% ~; w, o+ N
//这个道具无法移动,跳过
2 |# C% X9 Y5 c' G5 v; q0 @ continue;' X8 O! E, l; F
}
2 W' z) Y8 K ~* o% J- o4 q }else{
g+ Q4 Q4 g$ v, | N# Q& V1 E //空位置 不用动, \ f/ J" G8 c* W- v! r7 e: z2 W U
continue;: I8 E4 W9 v4 B1 F& c# x; r4 P, h
}5 Q- q! v# `% t2 D6 z- g( }
//////////////////////////////////////////////////////////////////////////
" z9 d* p4 ~& Y v) v+ D, A! k# B //开始移动4 D9 u& d3 j, z( ?* o2 c: f4 v; |9 Q" [
if (nSrc == nDestPos): O9 J3 x6 \$ M$ ?2 X( h; \
{7 Z3 n: o4 g/ P6 C
//原地不动
L: o- q/ X& B: Y- ]3 ^! `3 ^2 j nDestPos++;
) f5 w! P3 X0 Z4 i9 k7 M continue;2 e9 ?2 t) V, C0 }. r; i2 K
}
4 Z* C& y1 @8 ?& p- N P pInvSort->MoveItem(i,nDestPos);" v2 _/ e; W: G n9 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# n5 c b, J1 B' m% ?. G
Sleep(5);0 t6 ]1 j. v# x/ P( U
//Error("移动 - %d->%d",nSrc,nDestPos);3 p3 |6 y" K _ M
nDestPos++;2 ?( x; U' N- D) y$ F( O) j6 ~8 T
}
6 G9 u( Q. k' n# }- i" N$ I //取第一个元素的信息2 g7 j- `: g/ R0 F9 D
/*
8 s2 `. {8 [- u, N) ~9 \5 { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& O4 n. ?+ o; m5 o {8 A: T; [$ s+ }) T. t8 v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* @2 w- Y q' ~* \) k( B! y7 Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! \: N9 W+ _/ G1 I/ P/ ~
}
* _# r6 Q0 o0 y */
0 I& L; a. P5 u L8 a //////////////////////////////////////////////////////////////////////////
/ ` L0 R/ b# B6 c( i0 \, U" j break;
( B. D& m0 _8 o! u2 s$ C# ?$ x }
- \1 \' s5 ^4 @9 P } . ^- P& i2 }8 H9 \+ J" c2 `, W- p- S: |
}" l$ L4 {4 F/ k+ ?9 @8 t
m_wndMenu.SetVisible(FALSE);
: F& T$ \6 r) _" f. J" V t6 f4 B; Z8 d+ K
--------------------------------------------------------------------------------------------------------2 x( p) m2 a" Z! e& b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& e: g; X& ]3 T5 p{
( }3 | H+ m& ^BaseMouseCursor();: R" \0 d0 d7 H. t9 N" a" B
}! ?4 k, f( g: x9 A `0 L( Z* p* G4 ~# t
在其下添加:
+ V- u/ W, z7 h: D" zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ w& d( m; \; U; q$ ?6 q. L9 h{
5 O- i6 h8 H2 u; Tm_wndMenu.DeleteAllMenu();8 H% m) ]1 `& ~8 T
m_wndMenu.CreateMenu(this);
: [, `1 u" D0 K8 t" lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ A, t# _3 ]+ |& D
?+ T& F j& m; w& x$ kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 C J' m) D4 o* U4 [{
4 k7 c+ P0 |# u# @- c( t //P以上级别才可以删除所有道具
( ]' J" s H s; ]6 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 x; r3 R1 N$ Y8 U6 S5 z}
% X9 Y5 d+ S2 a) n" Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- l5 N9 V& e4 ^9 {$ ^+ Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* n. y1 X( D+ [$ w; A; _
m_wndMenu.SetFocus();
4 x3 P) o5 e( A}3 G$ s% U3 a* S5 p
------------------------------------------------------------------------------------------------------------1 U" N6 p, s3 ~6 [; B5 _7 c& P, K
*************************" t9 E5 L$ U( D; |6 a) {/ u
WndField.h文件
% b2 p1 U& O& H7 n0 S; k*************************6 E: d. r+ i3 t
搜索:BOOL m_bReport;
! Z7 q, ~$ S# N' k其后添加:
, g5 F) a: X# d/ a/ ?4 tCWndMenu m_wndMenu;
! J0 `5 A* v% k' W: ], `( Q2 O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, T m' D% R/ [! X$ a, @其后添加:
9 V/ i \2 c% M5 Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);: ^2 S: C) g& l: ~
4 F& U8 S1 y7 L- A8 h. t- p: O
; ^7 j9 W" I1 ]( L+ w' h+ s
|
|