|
|
源文件中_Interface文件夹下WndField.cpp文件
0 |8 f ^: M) w/ ]; A- z% ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, v- D2 V, s- n9 {, X; a" w% }/ ?4 H' ]
/ T$ i) ?7 u1 v( B6 K+ }3 x7 rstruct sItem' x. |* Y. S" a& D7 L! C9 `1 s
{: l0 L) T8 A) B3 O
DWORD dwId;
+ j3 c0 c. ~( r1 S+ w% uDWORD dwKind2;
4 x% {- `' C8 VDWORD dwItemId;. L; ] l; @( A# S
BYTE nIndex;3 K" m6 J/ } s8 Q: x( [
sItem(){
* U5 x3 s9 S9 {, w3 t dwId = dwKind2 = dwItemId = nIndex = 0;
& f1 ^) o; ], g* p$ J& B}+ C% M- {# g% _- Y' `2 f) w
bool operator < (const sItem p2)( L" ~1 ]4 E$ L
{% S2 k4 }/ p' ]/ |! H
if (dwKind2 == p2.dwKind2): ^6 _4 U* A8 G; n# i5 o x
{ p+ v: b9 `8 r& ~2 [" ~: g* \
return dwItemId < p2.dwItemId;
2 u2 S3 p; O3 L: k. `' Y }else{
# ?) ~. D# E5 V6 I$ ~; G& b- z return dwKind2 < p2.dwKind2;
/ I" P7 g6 n4 D" N }
- s* l1 n' d7 j; [% P7 Z+ J; g}, u1 E1 _7 u M$ r. @* ?, d$ h% E
};: A* T- n+ |7 m! [- c
class CInventorySort7 [3 ^4 }. l2 a
{2 k4 ^# ]0 S- W6 O$ M
public:( j( W9 ?8 Z, r& m
CInventorySort()
" D/ h9 Q* r7 d0 W4 H, o% o{" j. _; x& P/ a4 H) V+ W
m_dwPos = 0;/ f9 g1 b" e% x& ]1 s4 [% o
}, v* `4 Y9 o' b) d9 E s
~CInventorySort(){}
! b9 Q0 w% \' e/ X* Uprivate:, `% q- w+ o$ ?7 [9 T* C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* f# |+ B1 H8 o" \* E/ ?4 |DWORD m_dwPos;
+ e2 w4 o3 k2 Z b, ~" c% Wpublic:
9 o- L% d2 {) ^2 S9 \: A+ Svoid Add(BYTE nIndex)
* E: p( n9 f0 K% |/ A" d( h{3 p! H& ?1 T0 b8 a1 Y1 v& a: D r* F
if (m_dwPos >= MAX_INVENTORY)
# }7 p5 r T; X X7 L. ~/ ^# u1 \ {
4 j' ]* n" Y2 ]4 D$ g+ J9 S- Q+ Z$ `, E return;
7 D5 }3 M+ O2 U/ X# m+ U }* V/ i. q' y' Y, }! W5 H
m_Item[m_dwPos].nIndex = nIndex;
! p1 D% B3 \) k9 T7 D+ O$ q* Z/ S m_Item[m_dwPos].dwId = m_dwPos;
8 }- n" I, d2 F! W V m_dwPos++;; E3 P+ z1 F- h N# ~8 a" s
}
$ D+ D) G4 c; p- A% U) |$ qBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! d/ d, l- w/ P2 M7 M9 i! T6 N1 `
{
; {* h x4 j1 D2 n+ G for (int i=0;i<MAX_INVENTORY;i++) X* W) z8 Q8 u. [
{% ~* g& J5 ^9 I& l
if (m_Item.dwId == dwId)
/ _. W+ e& Q/ J6 V {
' e A2 ~/ Y1 l( E" F0 { return m_Item.nIndex;
+ k1 H! s) |" o# j }
7 h# n4 Y5 O. D0 v1 W! S* M; t9 v7 U2 I }8 w* w1 C* W$ Q' D* r
return 255;
/ z6 e1 Q' q$ p/ }" t! b}
& i7 W! ^$ K0 ~+ o# ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ a7 p# e0 e6 j, F2 L
{
8 s7 j. h( g3 I& q0 T; Q BYTE nTmp = 0;7 Q* w" H0 l0 [% R( E. J
bool bDest = false,bSrc = false;
8 h# Z& w+ N2 k1 N! h5 X for (int i=0;i<MAX_INVENTORY;i++)* K. B8 d. z) Z
{/ C9 N7 X/ M0 h: n1 i
if (dwSrcId == m_Item.dwId) J3 y+ f5 J7 O7 R3 V: @9 F
{, q2 U% Q; O* C$ U7 h9 A
//id相等 则 改变对应的dest和src
( }1 \) ^* l; _% M- a7 f4 F nTmp = m_Item.nIndex;
( x: g! F& h: n/ M. {8 t% s m_Item.nIndex = dest;
: {0 M' U* r/ @* z G }
& c1 i, q! O3 r; W$ g) C }- B+ x0 R8 I( y" N. m7 W% r- ]
//临时数据保存完毕,交换开始
7 n5 f) U/ w! U2 v9 j) D for (int i=0;i<MAX_INVENTORY;i++)/ q+ e( F1 J6 H, L3 M. [
{
. |; i! p( J4 x0 z3 Y if (dest == m_Item.nIndex)
* z0 t) }* x4 e1 V {
6 ^5 ^7 J, R! G //id相等 则 改变对应的dest和src
1 o n6 O( E6 `9 ] m_Item.nIndex = nTmp;' o; t; v i5 s( c
}7 P# x. {9 u0 } y2 a/ |: \* t
}
" _6 D3 W Q% h1 p( x2 Y( G}: T! B; R4 |2 s0 R8 G5 u& w
};
1 s! O2 J! |7 M-------------------------------------------------------------------------' k/ ^ n! P# [) n+ K. B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 p0 }' V# m# Y5 b6 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 W4 x, g' _# g7 u; N( x
紧靠其上添加:
7 U- x2 I4 E- n" g( V, [if( pWndBase == &m_wndMenu )
- b9 q7 t" a) j{
) m: q, k6 W. i) |1 F0 P switch( nID )
, W. i% w8 B+ p$ _) [ {: }* P7 X7 b8 H" q
case 2:
/ w0 F+ s+ x+ Z8 k {
3 a/ ?. a* }' m ]( C- ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' K7 V0 f8 P, Z6 `9 F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 E5 c/ Q6 t$ a% n2 u% N {' _5 y7 K- e0 ^3 r: g' Y0 T
break;
1 D8 ~" ]" ~. }& J4 t7 U G1 | }
$ ^; P/ x5 u. i& ~: p+ n1 W" d+ ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 E$ }. S7 K( y% ]! F, @
{7 ^ G/ ]/ q" x& v& j4 `7 j6 p4 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- Y6 R* N! W# M" d0 I0 Z$ n e w if( !pItemElem )2 ^" u! _2 u1 F. w" j
continue;
, C/ w# ]7 r) G" g; m% I if(pItemElem->GetExtra() > 0)
9 L' ?! j& @: `& k6 K0 d continue;
* a- Z, P" _3 @ t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , [7 V" s5 G" L5 Q% e
continue;* ~0 e" I* ^6 s! d3 i: X `
if( g_pPlayer->IsUsing( pItemElem ) )
. e6 k! Z& {$ I continue;
! N+ d2 t( Q6 V0 |4 A# f if( pItemElem->IsUndestructable() == TRUE )/ j. L I `2 G8 l+ j9 J% ?; e
{# O9 D% W5 a+ T- i" X% ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 V1 D- w* f' R7 d$ u continue;
5 g8 P& r4 c) q. R( c" x }
' E9 r( O6 ?1 O0 L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# |) Q, k$ C* n4 c
}, A5 l4 s0 M5 d4 @: N( R7 A
break;
* p* h* `8 w* n$ ^$ {' W: D }6 y9 _. v. N. M" m
case 1:2 m: u- Z: o4 q: S* R, N
{
. b6 w5 z1 }7 p# e% k7 ` //整理背包
9 \, Y# m% F& M2 Q& C //////////////////////////////////////////////////////////////////////////
! I) I1 N0 T9 ]# `* Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- v3 B5 j% }' r //////////////////////////////////////////////////////////////////////////
- I1 H ^# { K* V) I: d //////////////////////////////////////////////////////////////////////////
, i! D1 t# h# Y$ d2 R CInventorySort* pInvSort = new CInventorySort;
' b. B; @+ C* N1 W3 v; f0 k vector <sItem> vItem;7 J2 R) l1 I# S& |2 D
vItem.resize(MAX_INVENTORY);//初始化大小/ n/ b, M; ~& ^8 \' j
//////////////////////////////////////////////////////////////////////////
! `$ y8 ?. S" b1 Z0 I+ S; g! U //填充数据
9 r2 z' U E, I3 J+ Z& n for (int i=0;i<MAX_INVENTORY;i++)
. B7 y8 [; h$ |5 m7 R a( A {9 Q6 s- n7 F" x! r1 d8 }' W) q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 q' ?8 ]! s+ p! J7 ~) K
if (!pItemElem)3 R7 S4 F4 |8 u) ~/ E' e: ^4 |' g% t$ @
{2 D5 \) C. k$ h r2 K8 h
vItem.dwKind2 = 0xffffffff;. r# R4 z1 v/ Q2 H
vItem.dwItemId = 0xffffffff;8 U+ O+ x0 k. u* v
vItem.nIndex = i;+ Y+ U4 ~" ?! ^+ h
}else {5 }& u* y! W% u5 R) G
ItemProp* pProp = pItemElem->GetProp();
+ X8 O* {+ ^7 I& X vItem.dwKind2 = pProp->dwItemKind2;* ~& h5 ^1 ~) U1 G4 d
vItem.dwItemId = pItemElem->m_dwItemId;: i! d; [ T. e. O! p" S- J' _
vItem.nIndex = i;
+ w+ W" i) ^* d D }1 g. I* j# }0 _7 y5 F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 f& J/ b- e$ E3 o2 f$ L2 E7 Z' R }# `( a; w, |) W Q4 k
//////////////////////////////////////////////////////////////////////////
" Y l8 k% y' w L+ e9 r. F sort(vItem.begin(),vItem.end());//排序( ?8 ]: w6 k% U( I: J
//////////////////////////////////////////////////////////////////////////
# p$ G# C) q @7 n1 a5 X //交换 f! a2 Y2 Q8 G6 v$ M
for (size_t i=0;i<vItem.size();i++)) l- A* U& H) j8 E: |. S/ p
{5 r7 w8 z5 h+ _, v, n0 R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) o: [# q, q+ u7 W# N0 n, U a pInvSort->Add(vItem.nIndex);8 Z D. l" z7 b7 @4 o
}
6 _- F8 H9 x1 g BYTE nDestPos = 0;/ f3 L- l% c1 p; z
for (int i=0;i<MAX_INVENTORY;i++)8 V8 P7 o2 W% U3 y7 E! F1 ]$ P: d4 s
{1 D' ]1 C6 R* [+ f0 U! J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( Y$ T) l# b4 S! A( @* s
if (pItemElem)
. G' T! u3 |( |' \2 o {. M g0 f; I( w7 H$ @+ r
if (IsUsingItem(pItemElem))- q' ?- d) P- ^, V" y G `1 A
{
% m/ Q2 ~4 F$ P) g, l //这个位置无法放
7 R4 |( n- ~5 O" U( C nDestPos++;8 \( w: C4 w6 R9 n) P
}' e1 n% K) [: k4 t: }
}% H9 j! P d; {8 s3 r" @
BYTE nSrc = pInvSort->GetItemSrc(i);/ I/ o' Z7 q6 d, \" R6 Z4 [& V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; a0 q( q. I$ |- q( `3 F: k if (pItemElem)
0 Y, G' @( p6 d* M/ |/ } a {! {. w/ s/ M% {) F p
if (IsUsingItem(pItemElem))
4 e8 C& u2 X+ @' u }: B' t! f {
; Q+ g- }: P) w //这个道具无法移动,跳过# s7 Y0 t$ c; y3 ~
continue;
. P' T9 o3 ^" S( R( H, y }
- T7 V0 i- W3 c2 y }else{4 h$ g+ |, }( P/ } p& p$ Q
//空位置 不用动; ^/ {0 Z' T" o
continue;, B9 e; t0 C% U
}6 M) n1 i9 i% k; Q
//////////////////////////////////////////////////////////////////////////
$ {4 s4 o- t0 J& S //开始移动
+ }8 Z- C5 ~9 F0 P if (nSrc == nDestPos): Q. `3 c8 u. M! C
{ f/ U' }& E: L+ ~1 Q7 K, Z
//原地不动
" [ ?5 m, [' ~3 M7 |# e' v4 R3 e nDestPos++;
6 _; V8 p2 r0 e% T. A continue;. d# h5 t" `6 n( v: Z! c, C+ c: h
}
4 W$ L# a. s: K* j4 n pInvSort->MoveItem(i,nDestPos);
# H1 s9 i1 P( S% j; q* i f8 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ |6 u# {6 J! |) a7 U7 z Sleep(5);
$ g- x! d+ \3 K4 c) d. u2 t //Error("移动 - %d->%d",nSrc,nDestPos);
' q A% a9 ]; T; \+ I, w! g8 ~ nDestPos++;9 n3 S" E( s& L, Y4 q
}4 u M1 X* v& f" I) H
//取第一个元素的信息& P2 U; F9 Z6 i5 Y& q
/*
, x# b* h$ a" z& M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 n |: i: d6 _( V$ x
{ q5 m. r+ r$ S+ m% V4 v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& X7 v* d2 _ }' l g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: Q( y2 f8 r: X( Z
}
: e4 @" P3 ~: ?2 a, t */
& }3 c. H q3 {1 W% V, m4 D3 B //////////////////////////////////////////////////////////////////////////% }- ? e" P' X, Z7 j
break;5 D+ j5 {' X, T) E, U
}
6 F+ w- X$ ^. }% R0 ^ }
3 [0 p3 \. {/ L! o}$ L" J' C$ ^/ B- D) } C
m_wndMenu.SetVisible(FALSE);
( R6 \8 P" Q$ ^( l/ L9 f0 @# s( A8 n1 |- c" L
--------------------------------------------------------------------------------------------------------& \+ I2 L/ W9 ^/ w/ D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 o' L! [' A0 L8 T8 L1 m- O
{
1 y: z9 E5 c2 o- O$ \BaseMouseCursor();
2 i1 G9 y/ l, ?9 P1 d}
) n# L/ {4 z- I( W8 P在其下添加:* a% F1 x2 m7 r: g& v: M5 w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 ?& ^1 T; G! t$ N
{3 f; n5 b2 w3 S5 Y2 X+ h+ M3 c' o
m_wndMenu.DeleteAllMenu();
' q, S' J+ C: g& x Y: Qm_wndMenu.CreateMenu(this);0 J$ O9 }, b7 K6 l- C% w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
G2 R6 J# H2 j u& p! U! w8 L" {0 P$ e$ t) ?) F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! f+ G5 m2 G7 j2 X
{
8 w3 U7 @- r4 Z+ Y. g I& G, [ //P以上级别才可以删除所有道具6 P' d3 F8 g$ T8 Z. }
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ q# m1 i c) x) M
}
/ r" a: p- O# k! P3 jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! r0 @0 G6 S; w" M/ z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ @( o) P1 _4 k* p! l% E/ um_wndMenu.SetFocus();
4 ?4 x) }/ Z& Q& t}
; w; z" t& u3 i2 r$ B7 p0 s) {0 K------------------------------------------------------------------------------------------------------------
0 H f$ x3 ` b) f*************************
8 }+ i9 f- h" w Z8 t! X; `0 SWndField.h文件
' k1 Y5 y3 Y4 n% e*************************
7 u3 g) _* l: O. F搜索:BOOL m_bReport;; l. g0 M( a1 g1 V# g6 x
其后添加:
1 \- L* f! a% g' I8 GCWndMenu m_wndMenu;
! g6 S' \7 Y0 c$ [( Y) i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' `" d# i, I& f& Q其后添加:3 L% o" N5 ?! W: g) p5 Y5 {
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 s4 Z$ q5 h0 x' R" m( p& B9 b, G
& \' j" u8 T. r: b
9 E9 g( e3 ], |8 `
|
|