|
|
源文件中_Interface文件夹下WndField.cpp文件- U. o/ C# G% d5 i# T& G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) X5 t* X, b" U. [) x. D
9 j- q) X u( ~* f$ a6 o, i. Nstruct sItem7 ?5 J& d4 e0 g1 @. o0 W! B* W8 R" U
{+ O0 y; [. a- w! G y x: \6 u# o
DWORD dwId;# V% ?( U) |. H
DWORD dwKind2;+ U" \( z d; T; c3 R2 Y0 Y \7 t% E
DWORD dwItemId;; g/ V+ E5 B$ i; K" Z% X
BYTE nIndex;8 G. N: g& I* |3 _0 x5 \6 w/ m
sItem(){: n$ R! s" N6 A9 b
dwId = dwKind2 = dwItemId = nIndex = 0;
# a. B$ O O) m9 I) o4 W* w}; E% v! R I; q/ l6 l+ k8 k
bool operator < (const sItem p2)
0 U# s: v& V% b{
2 O) T4 C6 @0 ~% }5 s9 t* P6 J if (dwKind2 == p2.dwKind2)$ W$ k% F/ I- G8 u2 \- j
{
2 k! s0 v& o7 p- n$ p# n0 h; t return dwItemId < p2.dwItemId;* D$ Z* Q l& ^
}else{
$ a' W* C# N+ ~) r return dwKind2 < p2.dwKind2;
& n. x* K8 E/ i" I) O }
9 Y! o x, H- C}
+ }' }. H" G7 ?0 {: l};1 T, ?' x. l' f0 N7 X# I
class CInventorySort
: ?9 e6 N' h/ ?5 S{
* y | T! m+ gpublic:
$ ?. Q8 ?+ v: T+ }& b6 E# UCInventorySort()
% O* L0 r% e: }. q- y! E5 [{
( T/ W6 w* m# I m_dwPos = 0;7 |. K7 d e7 P( N" l# q0 e
}
4 i2 H% e. Q& j~CInventorySort(){}: ^( z$ p0 l2 s$ f1 R
private:5 f7 o2 m1 N# p4 \4 O/ Y- W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 D, L$ j6 k$ Y4 T' g r
DWORD m_dwPos;
4 U: N) M# o& w& N0 opublic:
: @* G; V9 M( A; \6 ~: Qvoid Add(BYTE nIndex)2 S- B* {0 V$ g! w
{
1 }& _3 U2 |6 Q1 _- a% I- X; B p if (m_dwPos >= MAX_INVENTORY). W8 M6 p: k1 Z
{ Y* d9 B1 l/ W! ^! @ m4 x+ O
return;8 B' C1 ?2 v8 d% x3 }
}+ h7 l2 S4 I- I: F- H" Q5 U
m_Item[m_dwPos].nIndex = nIndex;! }) \0 W$ g/ f
m_Item[m_dwPos].dwId = m_dwPos;$ A3 z1 p9 X* A7 F
m_dwPos++;
2 ^% x9 E; I$ ~1 P6 ~3 [4 W}( P/ [! `; Y- J" e) ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; M6 g" h M' b) R{
r/ o# f) G" P8 k1 F for (int i=0;i<MAX_INVENTORY;i++)
+ M& ~6 x; b8 _/ G; p+ ^* P {' L, b9 [7 l1 w( V1 w) H
if (m_Item.dwId == dwId)0 m. }9 z- |( h$ O* T
{
$ V8 z' B! M9 D& K return m_Item.nIndex;
1 {9 @) e6 K6 ^+ k }
3 @6 M; {: q3 U3 R( O! l2 c }
g1 A0 ~' F& P; n) x return 255;
2 u. g' u8 }/ Z9 ]}- `8 c- S w6 ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 _8 _) ?. u) j& X% {{
: q0 E: R' S, X9 x7 D' L! X BYTE nTmp = 0;7 o; b$ V1 R' F$ r$ Z
bool bDest = false,bSrc = false;
9 S7 Q; p, |, A/ { for (int i=0;i<MAX_INVENTORY;i++) D& F7 H) @8 M% o: l" ?1 X
{& |/ X6 A2 ^, r
if (dwSrcId == m_Item.dwId)% W: k# ?: Y1 r* u7 g2 e5 T
{- A: ]/ D/ @ {
//id相等 则 改变对应的dest和src
! {% H5 l$ S* E8 R1 g# u, I7 h nTmp = m_Item.nIndex;
; E$ W2 I1 @8 Z i+ }! O m_Item.nIndex = dest;0 n- E z* D9 Z7 @; s) Q5 `% X$ Q8 e
}( l" w% x3 a! l$ W) _6 N
}
, E; m. p1 f+ ?7 t //临时数据保存完毕,交换开始
4 e! Z; O- Z `& |: X for (int i=0;i<MAX_INVENTORY;i++)0 V& q2 d* Z5 s' L
{- Z, L# i& a9 r( z
if (dest == m_Item.nIndex)
5 s. r1 p) m: `/ F7 V {
* L3 e4 v. ?+ |$ v7 h3 W* Q //id相等 则 改变对应的dest和src1 Y& I' \) T& i% W$ K5 H! s& Y7 X
m_Item.nIndex = nTmp;
, t$ A! K1 F( r3 s6 B }
# m9 Q& \ l J m w q) [ }# ` F$ D+ m: n1 I0 Y( n9 B0 _) S
}$ x, K b! f; H" ]; ^" F8 a
};$ s0 T: o& H- `/ p* w& J
-------------------------------------------------------------------------) J2 K& I( Z3 r- r( y. o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 F- u& n& [3 t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 _4 e. x5 v A5 h1 |紧靠其上添加:
, F: H, e# T# V- X( Gif( pWndBase == &m_wndMenu ), l' }8 A: a* h6 F& M
{
% ]& K* `9 Y- `& H8 f4 Z switch( nID )
. X* @4 m! f0 U9 G& r6 x {! u; s- u! z5 o) U
case 2:
' X9 s% H' {* `7 [. u! y! T {
- }! \2 I6 }! _) Q4 v. } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); E5 S4 K$ l4 l3 q8 h% |4 X* x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), I1 y7 ^3 ^& a0 l( ?5 ?( [$ r
{, u, ~! ~# T. H f+ m R8 `- {
break;' q4 \5 p2 c$ s, ^0 {; |: c" s2 m
}% Z+ `# w4 ]0 Z! n) r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" r' K* L3 V4 g1 K( F
{
7 P i" M$ z- ?7 c3 K4 W% F" r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' Z; G$ ]. n) M2 ]/ d: B1 P1 { if( !pItemElem )
0 S" Y, A2 k% z* C5 O$ Z9 I continue;
) q0 D0 Z2 ^/ d1 [% B) g1 { if(pItemElem->GetExtra() > 0)8 k) W$ ?: T8 {9 ]2 {
continue;
/ F5 j$ w1 t7 {: u5 r& ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! X$ v* v. H. L1 z1 m: w. h% o- p* y
continue;5 f0 l, J4 e# B0 o: u6 ]
if( g_pPlayer->IsUsing( pItemElem ) )
1 G' R- b3 L" m5 X4 L n: E, u" I continue;% R# U5 \" a2 y+ W: z; Z- ?
if( pItemElem->IsUndestructable() == TRUE )& f0 p1 V! `+ D* O: t& d4 s* ?
{* @) Q6 h5 S* b5 i) U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 @' ]3 k7 G: `0 y* G# W continue;9 }5 ~$ ]2 e: w5 {7 D3 c
}
, |, L2 t5 u( ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( K- J) j. u' e, m6 G( v. R# _3 M }
' v0 d* R, z/ O$ G5 W break;% _* d1 h: Y) B8 v F m c& C
}
1 _2 M- j x5 L2 @' B3 l4 | case 1:
7 \. U- x9 {& I0 d# T3 B {/ [) o! s2 H2 ~
//整理背包5 Q9 B3 m2 L3 @4 T& y
//////////////////////////////////////////////////////////////////////////
* P3 q! X6 `2 c: g$ g) T% f* p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 Z2 x# o; `/ u //////////////////////////////////////////////////////////////////////////
+ m X& B3 }, ~" {: A6 b3 P //////////////////////////////////////////////////////////////////////////' ~( ~6 J! D( _9 |8 q; D
CInventorySort* pInvSort = new CInventorySort;+ K% E* M+ ?; X7 r
vector <sItem> vItem;# Y- h* w3 i" J9 C$ v
vItem.resize(MAX_INVENTORY);//初始化大小
) M+ [9 w* E0 t; X, I; R* x, s/ W //////////////////////////////////////////////////////////////////////////8 H' ]$ Z+ P" h# ]. G6 R
//填充数据( d s5 k( E& i* P) J
for (int i=0;i<MAX_INVENTORY;i++)1 ]: [$ ~' d# X2 {" n5 o' C8 H
{
* x5 ?: ?" W- P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 ^* O# p3 @/ D/ w& V- u if (!pItemElem)1 |8 V/ n) C* P
{! k$ I# c' [# ^0 S+ G2 A
vItem.dwKind2 = 0xffffffff;
# n% t/ [6 m4 s vItem.dwItemId = 0xffffffff;6 u1 h2 j4 m7 p6 s7 ~5 S0 l! G
vItem.nIndex = i;+ }7 b; C& B' t- r
}else {
" {+ W( r3 {) n% L- s ItemProp* pProp = pItemElem->GetProp();
% |7 c9 ?3 b: ]; u& O- q8 A vItem.dwKind2 = pProp->dwItemKind2;, }- a4 w- c' o
vItem.dwItemId = pItemElem->m_dwItemId;
+ l+ b* G1 x7 v; M/ d' v! Y vItem.nIndex = i;) ^: [ Z) c# C
}
1 Z7 p/ ~/ T: f* g4 x8 _5 W0 F* h# a, n$ o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" d' V$ f* t w+ W }
2 P7 f% Y: ^) E; x6 P0 [ //////////////////////////////////////////////////////////////////////////: \/ V3 V* `+ \# G. h9 V8 \7 N
sort(vItem.begin(),vItem.end());//排序: O8 N8 v) k& }% q: x d# `
//////////////////////////////////////////////////////////////////////////. C! n6 L1 u- Q! Z
//交换- |) b2 ~9 [- b4 r
for (size_t i=0;i<vItem.size();i++)
0 E8 V8 U, u% S4 l8 A {3 z7 o6 R2 n& E1 |5 C6 C+ |' X
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 |: x. b# @8 l1 i1 D' a
pInvSort->Add(vItem.nIndex);3 X3 `( H3 g( @% O
}: A4 z+ k% H8 J5 o
BYTE nDestPos = 0;
, u# \' T2 p4 I V3 @ for (int i=0;i<MAX_INVENTORY;i++)2 v8 l; C2 |8 w. H
{% l3 g$ e: f6 b0 C' \" |) F9 A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- k7 m5 z) b. R- U
if (pItemElem)
, j% ^6 p! v$ Z6 Q {
7 Y( w8 `0 ~: L4 o: y# R if (IsUsingItem(pItemElem))
$ i" k. c) Q& F# [ y9 I3 H {) _' K) p% [( Y6 |+ j' M6 \1 c* \
//这个位置无法放7 m9 j# @, u" L' k+ t
nDestPos++;3 V. Y+ E8 X7 A @7 H0 s" G: R
}( h2 l, l; s4 O: D' P- H+ [
}, N/ [. f6 T) L* q$ x+ e* H& e- N
BYTE nSrc = pInvSort->GetItemSrc(i);7 Y: Z9 r& J/ e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, X, U5 _9 i. y+ r0 W0 F
if (pItemElem)! O; c2 w+ \3 Q- g# O
{
! @& y! t1 {1 A9 W+ U4 V3 i if (IsUsingItem(pItemElem))' \1 ^. H4 W* U7 u& }7 W
{
) y5 u# B+ ? K. S5 p8 T //这个道具无法移动,跳过
( B# l- y6 S Q continue;
6 @# K. U1 `( s2 |1 Z- m }! w( J" K4 n( k( r7 c5 X0 ?
}else{/ d, c) ]$ F( {4 K/ O
//空位置 不用动' e" j4 p; d/ i# H' s: _# M. ? H
continue;$ p$ T2 H/ r* b9 x
}
2 h9 C! b% M: {, I- ?0 |% z //////////////////////////////////////////////////////////////////////////
5 p( m+ j8 N' v$ ~1 N1 }/ [* `7 S) S //开始移动 I5 F6 R: h2 F
if (nSrc == nDestPos)
) I8 O. u7 c# @$ I {
; V K1 X) y) w; ? [ //原地不动- y) Y- n2 |, v, o+ Y; ~
nDestPos++;
, b& O: v. _( ~" O- n$ [5 h continue;( [! P, Z+ ]" o/ K7 n( ^+ x
}
' y# }7 |$ ^ ?* D# [# N+ E) T+ \' Q pInvSort->MoveItem(i,nDestPos); W5 i* P; J+ z, S" R! f+ O7 @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ E B5 z4 U Z/ y# x4 N
Sleep(5);
) a$ a' m3 |: _7 |! s* V- Y //Error("移动 - %d->%d",nSrc,nDestPos);) k9 a4 B' w$ i% l# t" m
nDestPos++;4 P$ N' d y* Q+ z/ ^
}
7 E' F2 o l6 [( h; | //取第一个元素的信息
# ~9 F' @: W9 u6 I9 E4 { /*+ u5 K; E+ Z2 I$ E; j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 n, i/ W" N9 e/ R4 @' K
{
# G0 _9 ~& T- M* L# O8 c6 N. g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 W1 y7 k* t* n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. j" R5 l9 H4 z( M. L; E+ w
}
7 E s; v' y9 ~. ]2 K */1 T+ j* v ?& P1 J3 A: G) s/ u
//////////////////////////////////////////////////////////////////////////$ n* X4 T0 k! ^* c7 M( P
break;
' `4 P; a1 t9 `9 h8 ? }# i" e3 k, Y& W- C: o
}
$ R, `/ w+ E9 ~( j( d: P1 x1 O$ A( ?}- z, E4 T2 D" C U* f
m_wndMenu.SetVisible(FALSE);3 Z8 u7 {9 S8 h; _; Q! d
1 x! m: Z5 c' a# N) B# h" {7 J
--------------------------------------------------------------------------------------------------------
( ]+ y% p+ f/ r7 ^" i0 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% |) n/ f9 j! i* R& {9 @% P{
7 z3 q( W( D) ], ?# q; p/ EBaseMouseCursor();! k) q# a$ J0 \
}
" y6 d: S/ f; l) \1 B6 [; z- z在其下添加:
" X5 \2 r% H* k" {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" g# i! t- g4 f" {( W" @{
; [3 p1 L- V% I2 u! Zm_wndMenu.DeleteAllMenu();) M: X- R3 ?$ J
m_wndMenu.CreateMenu(this);
$ i7 R5 @+ O% u/ P5 um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 m5 ^! Y9 k9 Z7 E0 }3 Y1 c% p
- s4 a, }" B- p6 z. T4 k$ v) h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) q$ N! r2 w6 d+ ?+ v$ K) y, i
{
- c- d# l7 I; j //P以上级别才可以删除所有道具
7 h$ I! m8 |6 y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; b1 d- }) I& i% A
}6 P7 o7 h. Y [0 P6 D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 K2 D% K3 r" B# `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 z7 i2 p. ]0 G
m_wndMenu.SetFocus();
: w5 }# j7 w2 J! ]0 j$ Y9 M2 t}
4 @: e' a' c0 y* n4 C O! J+ a------------------------------------------------------------------------------------------------------------
9 y. I6 c7 G8 x) c5 e; ]. m8 ` [*************************) _( y, j' P2 o1 j
WndField.h文件
9 f7 D8 u. x$ p. D1 p# F*************************
; G/ }0 c2 R1 R' t2 j0 B4 W搜索:BOOL m_bReport;
: w1 u) a9 \: w1 q其后添加:3 l" _5 Y! l: V3 j- o$ {2 S' [
CWndMenu m_wndMenu;4 J( s) z% K. Q. b, q" g, ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( R `$ F6 k1 _% T9 ]( R1 G) u其后添加:/ o8 s8 l$ e( _3 U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, y( l% ?" z% p% J
6 Y+ C! ~8 e" e v6 X2 u# B
' L* f$ i" K) n+ ] |
|