|
|
源文件中_Interface文件夹下WndField.cpp文件
0 H8 v# F+ [, q" m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
s* k* w# |# x8 `4 L( l3 u; ?
5 E% u# L$ d& a: _( wstruct sItem3 Q" p, b9 a5 [" s7 |: Y
{
% A G; n* g- sDWORD dwId; E/ b% h. u" Y! R9 A$ V
DWORD dwKind2;9 f T1 V, n- e+ q
DWORD dwItemId;
4 p$ `; Q* a" Z2 YBYTE nIndex;" g/ V* o2 V* C
sItem(){
) ^# z9 i, x5 K( _! N dwId = dwKind2 = dwItemId = nIndex = 0;
( r( ~3 n) J+ J}
+ r& H# T& l6 Y$ g$ v' y. @3 q$ v& Zbool operator < (const sItem p2)
/ ?$ Y; W0 W Z8 I{1 R: `3 }. I0 o/ X) F
if (dwKind2 == p2.dwKind2)$ k# P# M3 A6 v+ ]
{: D6 e; J# ^1 k$ k
return dwItemId < p2.dwItemId;+ a( h8 w4 k$ Y
}else{
7 W+ |9 a4 ^- ]0 {6 u) z return dwKind2 < p2.dwKind2;
9 K" ?( y( w) U0 v( e }
- [4 o. U! S2 t' ]}$ X8 t' G2 _. b/ f: E, ]0 z+ ]- z1 V
};
' Q% S6 F* V a2 R7 H8 C Jclass CInventorySort* X# y. |) B, k* d) Y
{! `! g& W/ ]3 w8 v/ G" H" x3 T
public:0 m, G% G/ d4 R$ q; H
CInventorySort()
& E9 n6 I: V0 ~, {+ p{5 a/ ^" e/ A" |1 T: }9 |
m_dwPos = 0;
) y5 b8 G [- H2 d8 F# h}* b- V( x) j- @) D, U0 b
~CInventorySort(){}7 Y# d' S ]8 \9 \5 G, O
private:0 z0 Z8 c; a+ O* e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( R0 x6 P7 _- ]# h9 }DWORD m_dwPos;) W% k# s* Z+ F" R3 |& r
public:
5 E7 O W3 F ?" ?9 Tvoid Add(BYTE nIndex)6 l2 C, J( l$ k5 n- r
{, `. h- l3 \3 b O0 d% x2 U0 j/ q5 |
if (m_dwPos >= MAX_INVENTORY)
) P& z+ I; ^+ Y* r+ T/ I {
* j! q* }$ V9 w) B- O return;0 ?1 G" q/ d1 r$ U( r+ ^$ V
}' g" U- X! F" F. _( ~5 w
m_Item[m_dwPos].nIndex = nIndex;
5 R6 I' x1 l9 J4 r |# x; ] m_Item[m_dwPos].dwId = m_dwPos;
% k) {% @. A2 y# E Y" o m_dwPos++;
4 M7 X- R: F! O$ w}
: e) L# `: ^& P; Q- Y: OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 H+ M4 |( G9 C{
4 w9 |9 i% N9 R9 |+ U0 Z7 f for (int i=0;i<MAX_INVENTORY;i++)/ E( B! V- H, y! T
{
3 N9 x( r( o6 ~1 [& a if (m_Item.dwId == dwId)& }; {) _% y6 C( ^% {( k q
{
* J2 O' N( y, i v# I- D return m_Item.nIndex;! W( F% w$ f% {3 N2 ^9 h
}
8 y4 m x& F0 k/ h }% J$ D* Y( `" p/ j% R( A% P2 F' |
return 255;
+ E: ^, ]& P2 g) W& o7 q. T}' I$ e) V" m( s+ H8 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 q o) w9 S6 t9 n7 R) L* i- ^
{# l$ X }( s" Q" k* s6 Y
BYTE nTmp = 0;& M0 l% T3 D4 l7 m4 s/ B3 \4 u% h
bool bDest = false,bSrc = false;* j) c) w% q% R3 S
for (int i=0;i<MAX_INVENTORY;i++) l% t7 F# b$ |1 Y) I& K
{# r" r: m6 t& t& R+ o7 S' l
if (dwSrcId == m_Item.dwId)' X. ~: A) a( u0 b
{
" p; G+ S2 i, Y! t //id相等 则 改变对应的dest和src2 s: M$ a) F. k4 r( Z ?
nTmp = m_Item.nIndex;* ]) S+ w4 a- A- w4 d& O. x: x
m_Item.nIndex = dest;
; q* i/ |$ W) r; P1 M }
) B/ S% }; `' O& s5 d }
1 d, a' {' B- _5 x, f E' e //临时数据保存完毕,交换开始; u9 V8 f- r4 H2 X3 V. p1 h; X
for (int i=0;i<MAX_INVENTORY;i++) ^, j x2 W- L# T7 a7 f5 Q
{
' Z. H; A$ q/ _; v- F# W' Z3 B if (dest == m_Item.nIndex)2 F) n* B. \2 ^
{
3 p. X( t$ w" f& ?) s- i+ r3 S //id相等 则 改变对应的dest和src, m3 s+ F. S0 [' i( E# j
m_Item.nIndex = nTmp;9 q; W7 j+ k3 A7 A4 b
}
; P" ^+ V V/ [( r4 R9 @ d }
% |& s+ M: s9 K+ R* n' l}9 d( a4 i" h+ v& {7 d2 {& W
};
7 @7 G) G" E4 d" I6 T-------------------------------------------------------------------------
" G0 z! D* O5 G* ^3 [* C( B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 c0 d1 ]9 V3 h7 Y# ?
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 Z" N1 ^; Q: ^" q+ [紧靠其上添加:' d* Q0 Q, N; C" t3 J6 G
if( pWndBase == &m_wndMenu )
/ O/ e/ H; y! T1 ~{
& x2 ^7 H1 N; e3 K# |6 V0 R switch( nID )
6 ?; B' q' m, S# I {
1 T6 h" Q4 ^# V5 a+ l case 2:4 S6 t( T- r1 X6 [/ |: c& P8 ^
{
/ f; ~! q" V. _% D5 J8 I( k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 d& F& K3 M8 ?/ l- d- M, q* }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- W+ D" f4 j) X$ p; W
{
/ Z/ I1 k9 W+ c+ w break;$ \, a- l7 U: q9 K M3 a6 {& u% f
}
$ k6 g: W! I! W7 V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 z: P# a& t3 s" f {
% |$ z5 |% l* I3 ]7 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& m, D2 G, K# b) }# [
if( !pItemElem )2 [. W4 j/ |% q8 S9 \, T7 i- y
continue;
+ W) |( Z- k0 N. h if(pItemElem->GetExtra() > 0)6 p/ I: ?3 `( y
continue;
0 Z: A7 O/ ?% s- Q) o# h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # ~8 l6 l3 C8 A8 v- ~) c
continue;* n+ N5 {4 M! n) v) N
if( g_pPlayer->IsUsing( pItemElem ) )* X, n" E# L6 o* a/ ]' K- U
continue;* ]( D( h3 K8 K) ]/ D
if( pItemElem->IsUndestructable() == TRUE )4 U9 B4 K( u1 V; {1 P: E+ `
{
0 \! `* g, ^' ~ ` ^1 l5 M6 S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 A2 J' H1 D6 ~6 v7 C
continue;5 F) V' l2 k9 u6 j" g1 v9 J4 ?
}) s5 a" ~! s* z; T1 \) [3 ]! E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 n' D1 N0 {9 E) a9 [* k" K }4 A5 ]) a/ d" @/ @( V
break;
/ C8 i0 ?! v- Z) X; C | }
" s1 [ x8 _$ ]* Y! ` c @6 s. ` case 1:: `5 j! }$ i; l0 u* h0 u
{
; x6 K+ P# a; k/ _' I" M //整理背包6 z# q0 m0 s5 ^
//////////////////////////////////////////////////////////////////////////
; ?- N# E4 W- V& ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! c3 M! | I" z8 i /////////////////////////////////////////////////////////////////////////// y/ Y9 e: E9 v1 v C5 E
//////////////////////////////////////////////////////////////////////////
* N) V7 N7 V7 \ q2 v0 ]( i CInventorySort* pInvSort = new CInventorySort;7 [8 k, X6 x' J( y. c/ x' s. b
vector <sItem> vItem;% ^2 r' s/ \1 {' G8 \
vItem.resize(MAX_INVENTORY);//初始化大小4 n3 i ]: G) u2 X
//////////////////////////////////////////////////////////////////////////
' H5 R. M1 v7 Y9 F+ ?/ ^; c' @; v# J //填充数据
1 u- [& P+ V2 b1 y/ y% M( a7 H for (int i=0;i<MAX_INVENTORY;i++)1 o/ c/ b6 z C: z* @( l6 l% \
{6 ~0 S0 w, L X8 {! e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 `7 L9 G8 E) |. `- k6 x+ T if (!pItemElem)3 Z4 E, K7 J9 Y" b7 f
{! B: Q# K& C4 G' v
vItem.dwKind2 = 0xffffffff;. P! v9 S( R' |" j
vItem.dwItemId = 0xffffffff;2 e( u& W' H+ r# l8 G" r
vItem.nIndex = i;" p: v8 _2 P; s; _/ S: h' b
}else {# T T7 m' a4 ^5 G
ItemProp* pProp = pItemElem->GetProp();6 J8 d0 y+ |; P* Z; C. |9 y: e$ Z
vItem.dwKind2 = pProp->dwItemKind2;
5 p4 ` o+ r% l: s8 M vItem.dwItemId = pItemElem->m_dwItemId;4 P9 \3 @) t) o# N
vItem.nIndex = i;/ ]$ @0 Y$ J$ ?4 B d. `( z
}- i: h2 J* i& h+ [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ ]1 a& X8 j a: x }& X$ @+ V7 D. I- g `
//////////////////////////////////////////////////////////////////////////
* d9 `* E& I- T, \8 \* s6 D sort(vItem.begin(),vItem.end());//排序
9 @' |7 o3 Y! M3 u6 a //////////////////////////////////////////////////////////////////////////% M. D/ V( s7 J$ q) L% Z1 G7 i' Y) i
//交换8 `" e* c4 ~9 O3 M3 I* s
for (size_t i=0;i<vItem.size();i++)
' X- S& }8 v9 \1 a1 e {# s7 _/ K. }( h+ X7 K
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. p5 T& V/ i9 \0 g" z) ]
pInvSort->Add(vItem.nIndex);+ @; X. T3 E, L! `/ N9 x* D
}! s+ {' U Q) X/ _! b
BYTE nDestPos = 0;
) {2 p; l. H- h/ W, I5 e y for (int i=0;i<MAX_INVENTORY;i++)
; Z: M$ k+ f# y+ O {
' k( \# d4 E) g4 {+ ~( i- q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 e c! U8 L. ^; i f if (pItemElem)
k) Y! U3 ]& E* L8 K {
# r8 y( Q$ I! V5 I7 U- j if (IsUsingItem(pItemElem))
; ^& r* o' k a: y6 k, j$ S' x {
( z- d( `3 S$ m8 ~ Q9 t //这个位置无法放
0 f0 s5 x# `8 i6 z- { nDestPos++;& u) R2 ?' o5 {& z4 ?9 U6 t \
}
$ V& y. e, k; P2 r$ U2 r }% `6 [. Y; }& d6 y
BYTE nSrc = pInvSort->GetItemSrc(i);
" D# Q. y( z+ p: l# s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 Y( D" {$ y0 N0 X7 v5 v if (pItemElem)
& G$ Q) s8 u4 Q* W z% Y' V' E {
' l/ ~2 @2 q0 l9 d2 J$ i if (IsUsingItem(pItemElem))
; V) R5 K* }. \3 J6 y% d- [0 G {- Z' \: F& A- Y
//这个道具无法移动,跳过! H. a+ ~- f5 \" w: P# X& z" s/ L
continue;
) i% b5 \9 Q5 | }* {) p" Z& t6 [
}else{+ m# U' C9 R3 G _5 h" T
//空位置 不用动
+ M8 V5 T0 w& y& }9 c) r: e continue;- K# j: b; }6 Q) T
}
7 H' {8 Z+ Y; P& z* q //////////////////////////////////////////////////////////////////////////+ {- N% ^' }* i9 g5 u5 j# h2 r" Y
//开始移动; o" x4 H$ M2 X5 w, N' B% V6 G! d
if (nSrc == nDestPos) D9 d& Q% k$ h8 P( C5 v4 U
{8 i c$ k, n0 N
//原地不动
* w+ {+ l' M' W* ], r nDestPos++;
- \0 e& F- x6 a$ x. m5 P9 L6 i continue;% {+ O. k1 N) _1 E8 k- W
}
9 ^: f& h: f: R4 _) w: S8 V* P pInvSort->MoveItem(i,nDestPos);7 E, W% W- Q9 M3 u) d% {0 A$ j" l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: t1 e9 ~* A7 [0 t9 n Sleep(5);
/ E" u7 ]; ^, G2 I) E0 X //Error("移动 - %d->%d",nSrc,nDestPos);
* a" H4 j. J Z" Z nDestPos++;
" d0 b3 U7 { Y1 {0 `; j }
% E) i4 y; K5 K# y0 F //取第一个元素的信息
7 `7 [& H) S- U0 o& | /*
% Y" ]# r- H2 C% Y. ?5 Q2 e2 w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: B0 N# Y" y9 D% w& p9 a {
- s4 ~! y5 [9 y! P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 o2 y+ Z( Q) n3 i) R% q8 Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' ]; t: m* X8 Z' ? }6 j! e! M$ V3 ?) e% o
*/6 |! S) l; C" a1 u2 z9 K, T& e
//////////////////////////////////////////////////////////////////////////
) M8 @; O- ~1 e5 f( y+ U break;
4 D, R: G. ?0 ~3 x# a }- f# @) H, \; b+ F+ V. e
} K, Z) J4 \; F. }& H9 R
}; H9 c' F( v# C. ^4 a J% g: h
m_wndMenu.SetVisible(FALSE);
% A& n$ I# h! j, d
4 u& ]; m6 c6 }2 a--------------------------------------------------------------------------------------------------------3 ~/ Z2 W% n& j, i6 e- {+ M# s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* R _& [# _% s3 i4 u: X0 I{
) _* S4 t3 K* G) A& Z# |! s2 K% pBaseMouseCursor();+ C& I9 `/ @) }0 @% G1 Z" T
}4 }9 ?1 \) F: V, _* D; z! a
在其下添加:
E: L; V' T1 e9 hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 o& K) |, b5 Q! J
{; u9 {8 y6 d! r9 h4 Y
m_wndMenu.DeleteAllMenu();; X- U& @* j; t8 x$ K
m_wndMenu.CreateMenu(this);
/ y3 q5 y+ v2 F, @, M8 E2 lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 m5 Y0 ^- t9 ~2 \8 H( F
; E% N/ `: w6 ~; jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 \) V9 H" }0 u2 l6 O9 u
{
7 t: Z- O% Q$ O# a& X9 G //P以上级别才可以删除所有道具, {6 X* ]& s9 V# B$ x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ g) v) [) o! Q8 Q& w1 q1 G}8 a( H; U- q( P6 p( \# G$ ]' v; ^, Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 v4 H8 m% C( h+ V1 R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: I. ^7 U7 `+ e H
m_wndMenu.SetFocus();
+ O4 j% s8 p& _" i+ K/ [}+ o8 a7 c$ S+ q5 F
------------------------------------------------------------------------------------------------------------
' F3 u7 z8 w' _5 \*************************! P( X$ I9 G5 L/ f! ~# p' L
WndField.h文件
/ }3 c0 @& F, E, `*************************1 @: a1 h- O& O C# O" N
搜索:BOOL m_bReport;
# X, v* S/ |. U) W7 [7 b其后添加:; x2 b* R4 a8 @: }" p: P# S
CWndMenu m_wndMenu;
# W9 |) ~# w" Q7 R) [7 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" B2 _7 \! g# r I5 \5 k3 c9 y6 \
其后添加:
" \7 c( Q+ ?! l- Svirtual void OnRButtonUp(UINT nFlags, CPoint point);
% B3 G' T2 K$ G+ Y3 d9 f9 ]% a X
5 C: o9 w' ]3 ?0 e: {4 B6 J4 H+ G, h4 q* _! d
|
|