|
|
源文件中_Interface文件夹下WndField.cpp文件
9 R2 | U2 Q* X( }1 Z9 r( b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) e# i( d3 U3 ]" z( X" q' ?2 d) h
8 b9 \# E: m3 A& ~2 P! S4 u- F
struct sItem# W7 m4 ]; H+ Y8 b# g
{4 G7 D- b* u: j5 N6 k8 Z: M" r# Q5 n2 V
DWORD dwId; n4 E9 l6 i8 S; L2 }
DWORD dwKind2;# U, j) h# L v6 a2 x, ` K6 q
DWORD dwItemId;% q+ y; D$ o1 Z. w8 v
BYTE nIndex;
! k8 \2 n4 c) Y5 n: s; d) VsItem(){
0 T: c: H) @, g) c dwId = dwKind2 = dwItemId = nIndex = 0;
9 t, T, n6 J2 J/ w1 E}
* U- O7 M. n- ` e+ y" Z. Sbool operator < (const sItem p2)
0 y. }; A D2 Y/ J: n2 i, ?{
7 Y4 F8 [, Q; [3 n2 u! K3 X0 J if (dwKind2 == p2.dwKind2), f! I' @5 t7 i# r1 O H
{
2 \* F1 P0 z, V2 G return dwItemId < p2.dwItemId;
5 J# E3 ^9 z8 }0 A9 ]+ r }else{4 _. S* q1 V' a# {$ z3 L# Q
return dwKind2 < p2.dwKind2;
2 v1 x2 t6 U) p: F3 t0 r }6 r/ g6 J. s( F( p z0 d9 ^
} u0 [+ [; a8 p; b. t- {
};
; m8 X, \- P# Z/ A. T3 x$ pclass CInventorySort
3 v! i! F% W% x: c{+ s9 A" E1 I1 D/ W1 z
public:; S i+ x( K# K6 S1 Y5 O
CInventorySort()# P9 i0 k9 F+ D) N- H9 o
{5 G) F. U6 k7 w' |- a5 R8 V
m_dwPos = 0;# `: W! r8 Z" O6 x
}( ]! }; M8 ?0 b& v
~CInventorySort(){}
/ l2 B2 F2 Y8 s7 \private:1 H( c% Q4 V3 m( R- F- R3 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 B) h; C: O# J! A3 p& y" a
DWORD m_dwPos;9 \6 s+ E/ s- P5 f
public:
$ Y# ~0 p7 [5 I+ Y- jvoid Add(BYTE nIndex)
$ {/ V( A* T2 O% F4 v$ A! P{
7 O' l( X3 f+ G L& V/ b# h5 F: q if (m_dwPos >= MAX_INVENTORY)
, X1 \# j2 k+ O: D2 y {
" I' I% b3 G2 i! `7 G return;
6 w( b6 ? q+ E' q& g }
' M2 w+ u5 l; P# {, D4 U m_Item[m_dwPos].nIndex = nIndex;
0 a4 F/ Z0 t9 N' { O5 x! M' S9 N m_Item[m_dwPos].dwId = m_dwPos;
4 R2 F; w& u2 x) _( S m_dwPos++;, e* O8 K! v: a8 ~# w/ n$ z5 l
}) A) V- ?& i6 s( l, v5 r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) _2 T% n& O o{1 | Y5 v; \) |% M+ d8 ^- _6 z
for (int i=0;i<MAX_INVENTORY;i++)
' m( i! u$ k" _) P4 `3 } {
" b. t; I& c9 o9 B$ t if (m_Item.dwId == dwId)% w7 @6 N. E+ B/ L9 d. k! n
{
: u+ ]2 E* O* o5 j9 h4 }8 K return m_Item.nIndex;4 x% U# a1 r5 A, }4 b3 f1 F
}
! x- z' e; Y$ S }% _( l3 K! K9 w4 ]& k7 P
return 255;
2 o$ ^& ^: X0 l9 {6 ]4 j" T1 ~5 C1 t# u}
c: u+ e& r' R/ g+ L4 e7 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 O( `3 {1 U6 ^
{: Y$ W. N6 [6 @) Z q
BYTE nTmp = 0;$ G- B) [! B: C% f R% e6 D2 w
bool bDest = false,bSrc = false;# {$ O7 V, t' Q. j r
for (int i=0;i<MAX_INVENTORY;i++)
$ Y3 M8 j s3 ]) d5 \* N) y- t {
" w! L8 q- _ x' J if (dwSrcId == m_Item.dwId)
9 b( I2 w6 B( @" x8 W {. O( i- ^/ r v- z
//id相等 则 改变对应的dest和src9 S2 W# _0 D$ N9 j# ?4 ], S, v2 h4 r
nTmp = m_Item.nIndex;1 h- ^! n- V% t- _
m_Item.nIndex = dest;
( i: t' I( x* X8 D1 q0 E }
: M1 d+ R% V$ y* } }
* n9 |' L5 @- I, V1 _" ^ //临时数据保存完毕,交换开始
$ _& R) E+ ^6 ]9 i for (int i=0;i<MAX_INVENTORY;i++)! B- o' f5 i. h1 k
{
8 s" J& q+ j8 G if (dest == m_Item.nIndex)% Q T) n, T3 u/ O
{. { _5 ~# v0 c9 c: V. w# S, R# j
//id相等 则 改变对应的dest和src+ a% Z7 R8 L m6 {2 Z5 m8 P! X
m_Item.nIndex = nTmp;! z& c. r6 ^3 p* |
}
. J2 S3 _' y" g4 Z: B5 T }
. W. R w% `/ R* w) p5 U( S}
4 w7 h; A, p* l& g y. O9 z};
1 w1 [% o) t7 ~. T$ g-------------------------------------------------------------------------% |7 W' u8 X) i- s7 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 r% Y# t( M5 T7 u) L* {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! n! G3 N3 u3 A+ u
紧靠其上添加:
3 E5 @1 F5 c7 }- G+ g1 Z0 y; sif( pWndBase == &m_wndMenu )
9 w: C+ n* u; R7 @% j$ M{2 j ?! ]& {+ V$ t4 O1 d! a
switch( nID )' s m' ^: A; M# a3 Y' W& ]
{
' T" _: ~* u: N% a1 A: \ case 2:4 s8 M r. x! J/ N+ [0 U
{* @ f0 d: F& ^$ @ f) w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 g- K: ]6 }8 e1 N$ y3 u
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* l5 p" ]- \) ^# p
{; V: o- M0 n5 l! J
break;
, b. j; ^# c1 n( U+ d( B( o }
: A$ S7 J; ~7 p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( D# h% }' s: \6 I0 l( F% Q2 _ {
! Y+ |; Z' l! h3 p3 v% g- D' c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 `& m8 }, [9 y2 L
if( !pItemElem )
2 R: X5 z8 [/ ]% ] continue;; v$ K* Y9 U8 V9 y0 Z
if(pItemElem->GetExtra() > 0) V# J" Y; |7 r+ j s9 l( g
continue;( u% R; _0 D% m: l- ?/ Z( }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' N. B& ^3 i0 _# n6 P1 C; a. T4 h
continue;
- Q& `0 V5 Q* F! r( i8 ^8 f+ r* V0 _: R8 o if( g_pPlayer->IsUsing( pItemElem ) )
7 X& \& L; w C) W2 a0 I) f continue;
! u* g3 D) m/ `0 f if( pItemElem->IsUndestructable() == TRUE )4 q2 U. Y# k* E% O# ]
{( L: F) \3 N, ]. H, I: d$ K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
k, T8 o: a6 r7 T7 a* c continue;
/ C" ~$ d3 ~, N( w) P }! p' t/ S0 L9 O6 k% i+ P; p: R& |$ R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ u% K9 F/ ]0 H- O
}3 m2 n* C' R) R, Y
break;
- R, L" \; D$ P% A* W }5 ~* E/ l4 |4 P& a. B9 ~; M" O7 p
case 1:3 x% [" y# [$ H! c
{
0 b/ L* [- Y* P4 C2 f0 [ //整理背包- F( ]0 @: a. J# u- X, |+ E
//////////////////////////////////////////////////////////////////////////
- n' f1 k5 s& C. s; O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 D3 O: t _" m- ^$ C //////////////////////////////////////////////////////////////////////////7 h1 @. c1 M& r/ K
//////////////////////////////////////////////////////////////////////////
, y; N$ E, h( s+ O( z4 H2 [2 e6 j CInventorySort* pInvSort = new CInventorySort;
& D2 q9 f& H o- T vector <sItem> vItem;2 D* A2 |% s* P$ w9 q; T
vItem.resize(MAX_INVENTORY);//初始化大小
8 I5 { ~( j( O$ d- c9 ? //////////////////////////////////////////////////////////////////////////
) ?, O) u5 N1 x8 t: J. b //填充数据0 \' J. {# L" K, w. P/ i
for (int i=0;i<MAX_INVENTORY;i++)
3 ^ E+ h% g9 x2 p! {" X {8 O8 y5 i7 r$ [7 K0 \% R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 N% j$ {2 x! c; N! s8 ~( e: h if (!pItemElem)" O! e. h. b$ j1 c
{
0 h* _ {8 l; ]6 E( [& C2 g! ]4 o vItem.dwKind2 = 0xffffffff;& M5 e Y1 o& @7 e1 C8 f
vItem.dwItemId = 0xffffffff;; s6 X( [' y# g
vItem.nIndex = i;
- J% c& V1 @2 \+ ] }else {: v% \% E. f9 J0 J" ?5 T; q7 r. e
ItemProp* pProp = pItemElem->GetProp();6 _0 N6 _. ?" l+ ~; _0 t
vItem.dwKind2 = pProp->dwItemKind2;
+ r: C. b3 N9 w$ a" x1 _3 _) d vItem.dwItemId = pItemElem->m_dwItemId;
# I0 {$ T z3 B! h, T# t vItem.nIndex = i;
2 g' a w" x3 n1 v" ^ W }
$ ^: A1 V. t3 l8 F3 z, w5 u. h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 @+ {* m% R2 Z+ p' D( J- \& ^ }
% Z0 Q- j2 F: ^ Q- [" g //////////////////////////////////////////////////////////////////////////- O# Y& T' T( }7 j! S
sort(vItem.begin(),vItem.end());//排序! ~1 f2 p7 W( y% C4 I5 z
////////////////////////////////////////////////////////////////////////// P: V2 o0 @, V/ C0 h
//交换
$ G2 ]# p- i0 D7 t6 ]/ a8 J1 I4 | for (size_t i=0;i<vItem.size();i++)$ }# G, p3 i( t' U
{
i: n9 t& a: W$ B0 C0 T P //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% G$ z* Z" o" r pInvSort->Add(vItem.nIndex);- U) g. h$ k$ ]8 q& [/ _
}
" c" ~- b! j# j9 T BYTE nDestPos = 0;: ]* I, a3 {$ P! Q9 g. W1 f
for (int i=0;i<MAX_INVENTORY;i++)1 y( e1 \6 }& {" R- h1 [0 U
{. ^8 D7 j4 Q' a/ A Q; d) _: J7 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ ]8 V I( x/ i8 f9 i4 G; G
if (pItemElem)! y* u" Z! G# x" [* x
{
: d+ s p" o! _, P if (IsUsingItem(pItemElem))5 _! L5 v m" f) e l9 w0 y
{1 S4 F9 m( I2 c3 H t! i- |5 ~% n
//这个位置无法放! |& u& g9 D' [8 J- k! Z9 \( l
nDestPos++;
8 s! Y; t9 l x8 d3 J, T. R }
. p& D$ k9 w5 ^& d, {. X$ z, y( | }
! e* L, }- f5 H) c n/ Q4 Y9 P BYTE nSrc = pInvSort->GetItemSrc(i);5 Y" B0 c8 p' w; ?" R/ O# Q* K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ ~: B8 T: ^6 [" X' v9 e+ }3 O# G if (pItemElem)
% l4 S6 `$ v' R# c8 F) r {
: A$ D1 j9 N' D% U- P( @# T if (IsUsingItem(pItemElem))
8 Q+ Z% w# S' Q6 t {$ v' e3 R. d' `0 Z1 D
//这个道具无法移动,跳过
; A8 ~6 G1 \7 D' k; Y continue;
, }& A: o0 J$ O }) p! y7 i* J5 G: S
}else{
* `% r1 Z& ?; V) v //空位置 不用动
# o4 C4 e$ D! j/ O2 |& X continue;" o0 L' @- I- C, b' I# c9 O
}7 |% H4 ?" M) Y. R4 A- f- s7 r
//////////////////////////////////////////////////////////////////////////
3 c$ W* S( B! H$ @3 ` //开始移动! u5 F3 R1 [* m1 R: s# ^
if (nSrc == nDestPos) }* _: _4 G+ ]3 l' a% M: _; H, M
{
& H4 P! x: v1 X; ]! `1 u //原地不动
& I5 `1 Q3 m. J, g6 x nDestPos++;
' H; }5 E- K' v1 @0 p- x5 m6 l continue;
b! S* @7 \1 B3 r6 x" n8 ` }
4 ]( x( t; l; l% a. @; k% | pInvSort->MoveItem(i,nDestPos);
* i, }& a/ p! T, g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ \$ B ^3 U' P4 H Sleep(5);
6 |& N+ N& }0 J7 o' j2 w& z' Q //Error("移动 - %d->%d",nSrc,nDestPos);/ _" V+ g1 S4 |0 F
nDestPos++;
, O9 U9 d- t: y7 L }
6 ^: h: ^9 R& S0 ^4 E2 Z //取第一个元素的信息
% j: z' ] C5 N /*
) `% B# n; j2 m2 s. ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 C/ X. n$ t3 x: C q- b
{
6 u; W% Z, u6 k* L Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' [ N0 K! I) G; a
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. Y; e w: T: V: I* v' { }
N' O* F8 H5 o3 o */* R& @" ^: o9 E
//////////////////////////////////////////////////////////////////////////
# e; Y! V4 m1 i; } break;
, A- S5 s; r6 x5 ]0 M$ J }
" _1 R8 ^* Q. V. ^; Z6 U9 M } 3 _. {' b3 @! T! M$ w$ f
}! S. t1 U3 i2 \/ g6 j* r
m_wndMenu.SetVisible(FALSE);
- J- c1 U0 \- B* F: _5 {! x& G% n" x
6 {' C% P# ]5 M" ~5 t--------------------------------------------------------------------------------------------------------
% N: U! \0 Z8 \1 t7 s- Z' E2 k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# ]) Z6 {1 W4 d& q. H# G{
8 l, |9 w; r5 B! h: @+ HBaseMouseCursor();; ]/ V1 P, H. ?/ K- d
}
- H( m0 ~2 o( D* V' Y在其下添加:
2 a/ {/ n- i1 b% Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" O3 _0 e& M$ J, R+ q
{
* y" i* D6 g) [8 y G7 bm_wndMenu.DeleteAllMenu();
0 F+ o9 h0 c5 S% d1 e! [5 n1 xm_wndMenu.CreateMenu(this);
8 U( F* M( B) V% c- jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 K2 ]9 m! L; L, ~
& B7 O' E5 W4 ]' Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 A+ ^9 N* a: W$ {
{* ?; I9 K' K9 H; Q2 n( p
//P以上级别才可以删除所有道具; V( Z6 B$ m& _. R p3 ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. n; |& _' W: Y* P
}/ z# {2 I: R* n# [) X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 _6 ~! a! \2 h0 ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% N6 [3 Q( T) G& {. {, a
m_wndMenu.SetFocus();9 U$ Z# W- n& k% K8 H
}
" t% A) f! h O% K------------------------------------------------------------------------------------------------------------# [ z% t( N" Z% F2 a/ S- U9 ~
*************************# u: _ V0 z l0 k' U
WndField.h文件
& u# u- S# N9 `/ H6 H*************************) h+ @: [& V3 G! M/ D, U4 E7 ^
搜索:BOOL m_bReport;- e3 M1 s; G# e. g2 L1 R Q5 u
其后添加:, q! _* x7 r, n/ F6 T
CWndMenu m_wndMenu;6 ]8 M+ ^7 Z2 d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, N$ q' \2 B/ F: p! b9 F) U( G; i其后添加:
/ f$ r5 L% N6 H9 N) ~ y6 u( nvirtual void OnRButtonUp(UINT nFlags, CPoint point);- f8 C. C7 \$ C* h4 a
" _3 @) v6 b* P( q! v) Y% s+ `5 Z5 D) k m
|
|