|
|
源文件中_Interface文件夹下WndField.cpp文件
) G4 j; n o% @+ C4 I) S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! D" m/ `) ^; n5 {! u# J8 d1 ~
* m3 ^& ^. B. ^" h$ G- m- @
struct sItem
" o. `2 [6 e0 b9 m+ Y{% N% b* l; O3 L
DWORD dwId;' V; c6 u% D6 g' a
DWORD dwKind2;) Q1 _5 L. `& r. W) v+ O
DWORD dwItemId;( t& c) I# p2 o! E3 u
BYTE nIndex;
3 q) S% V4 {$ g' w0 _sItem(){" g4 ]0 c' }. i h' V. X* H V0 Q V
dwId = dwKind2 = dwItemId = nIndex = 0;
/ q1 o# U. Q2 O1 I P; }}0 d. q+ s: I9 y* V9 \8 z, H
bool operator < (const sItem p2)
2 }, f; s# K0 K% X( K0 u{3 e+ K6 r% d) `% M. m
if (dwKind2 == p2.dwKind2)* }+ R6 ?8 ?9 G( p& G0 c! {
{' a+ _3 U U: L$ H% J$ s; ?
return dwItemId < p2.dwItemId;
7 G! X+ I. B' d- z) i }else{' f: m# v& j9 N5 l7 g
return dwKind2 < p2.dwKind2;
: F/ w. W7 S2 k; Y$ J3 s" {7 O }1 U% S$ e1 |7 Z: ^
} n3 S# r: d, |8 w
};
- T& S |( I- k) }0 L7 i, gclass CInventorySort3 X) L- y0 ~) Y! }& F
{! ]1 G9 f( x7 {2 M1 C
public:
( ~; T" F( |5 K4 U3 S% ECInventorySort()1 z" A! U6 b+ X* Z) S
{9 g2 p0 c$ f8 P, N$ _& W
m_dwPos = 0;7 \3 X9 Y, ^4 C5 {" d+ C7 _
}
" U3 o! u3 _: _( t o$ p" T~CInventorySort(){}
) D( Y8 V% @9 ~: ^; {; p& gprivate:
! B" X" b F7 |; ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! d, Z: w' ^7 x$ ^
DWORD m_dwPos;# j; p" S4 x; U& T6 ]& A
public:
# T- G" d5 d8 t. L7 ?0 @- ivoid Add(BYTE nIndex)
& o) b, l5 {2 d1 p2 q( I+ v{
6 [* g/ ?0 J4 O& [' B if (m_dwPos >= MAX_INVENTORY); U7 J& G% Q, F1 e
{
1 D8 J1 i; ]8 U# ]+ x return;( [ Q! @- z3 [) k2 ^2 ^
}
I5 P( V) y8 ~7 E) o" b# k { m_Item[m_dwPos].nIndex = nIndex;6 q4 {+ H/ f8 t, }" g( h1 t2 F L
m_Item[m_dwPos].dwId = m_dwPos;
; w4 K+ \- V; d( g) \ m_dwPos++;
6 |; {) S7 q3 U) C z" ?}
) c& p. y$ I( h. Y0 L3 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ I+ M1 @8 ?# W6 `% w$ O- C{+ j1 K3 z9 m/ r' f6 h
for (int i=0;i<MAX_INVENTORY;i++)( V, }& H# f; r) [+ v$ W
{$ C! C! i' [3 ~6 v+ Y
if (m_Item.dwId == dwId)4 y3 }5 U! [5 ?4 Y
{
7 E8 C5 B) \0 F" X$ _& _ return m_Item.nIndex;
# q! B, D2 ]# m }) N) c! o" f. p: C: y
}
) a# f# ^- l2 ]$ E3 k return 255;
" V" A5 X4 p5 u$ K1 R5 x}
! t. C& |- ~1 f( h6 r% H6 Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 Y( P$ {6 l# t# o; }. Y{
5 E8 d; C+ L2 W0 K BYTE nTmp = 0;
! f) Z' J7 k: _8 c2 R! _6 o bool bDest = false,bSrc = false;* j* U/ o* r; F
for (int i=0;i<MAX_INVENTORY;i++)
, V$ @/ r$ h& X8 w2 S, k, n" a {
* ^) f. S+ H. n$ t% G$ e- g if (dwSrcId == m_Item.dwId)9 ~1 O9 @) n4 V0 Q5 F
{1 k; v% o7 c; N& R( K+ w
//id相等 则 改变对应的dest和src
3 ~1 | w( u+ H! f& Z: F' N) _ nTmp = m_Item.nIndex;" ?2 E6 L. {( ?$ v& T
m_Item.nIndex = dest;
% u/ a0 _% w f. T8 l) t8 g. B' j }
. d; H1 {& A& s+ }% w7 |6 r3 l }+ B8 d4 N7 D9 D& z; Y
//临时数据保存完毕,交换开始
: l; L1 T% ^ e% W for (int i=0;i<MAX_INVENTORY;i++)+ _( ~) V1 [* I5 D4 l( Y
{8 I8 H f: [- | W7 Q8 }
if (dest == m_Item.nIndex)8 }4 {4 b% f$ K
{& j3 e6 |0 K1 m( [$ |) P' V
//id相等 则 改变对应的dest和src
3 z( N; B9 C$ z4 S p, g+ d. E m_Item.nIndex = nTmp;
5 |' t I- m- X6 ~3 k$ K+ x }2 t1 I" |! Y0 Q I9 G
}
, z& x- n' L1 F- Y$ V}8 Y) U. s. G% y3 [; i
};
7 s4 Z+ M: E, q F1 Z% b6 L-------------------------------------------------------------------------
! E7 M+ C( U" n+ \8 e5 O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: I/ t: A$ y* J |- }5 L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- a+ n: D K5 E- ]5 C紧靠其上添加:6 G6 P$ ^) [) G0 s* O7 Z) {, m
if( pWndBase == &m_wndMenu )
; @* p' j9 _$ \' T7 e7 _{
+ S; Q+ d% g! r0 W4 e switch( nID )- o& R: w' [, x9 U
{
T, [( |$ v/ N2 `2 ~ case 2:8 i4 B. u' N( E p6 D# h
{
1 N3 m4 g# u9 n" Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ S* r; k$ v' J4 Y* j7 h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); W3 }3 {3 q1 G: Z) x- @+ L% f/ `, J
{4 A K) d$ J6 n n! R8 s, F
break;
/ F( q7 x: V5 r }1 B. \: n: k) P5 P, n6 B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 x. W- j7 C' t* s4 _3 L; n {3 [4 d1 B8 W. N/ {" e1 g* I! x( f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! I5 r; w8 Y+ V' h( d3 V) H
if( !pItemElem )
+ c# p& B8 c' { continue;
2 E( Q( v- o( T& B3 L! A4 O1 N if(pItemElem->GetExtra() > 0)
+ B; q2 Y, z; j5 n. e1 G# @* h continue;
1 s1 e& L# b5 ^% @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 ?0 Y. I3 c: P( e. F8 Y continue;2 n9 y" t) O' ?' S
if( g_pPlayer->IsUsing( pItemElem ) )
& I- z) e& u& _/ A continue;
) a# O8 P- s& ^# Z if( pItemElem->IsUndestructable() == TRUE )! ^" }( p7 Y, Q, S
{
5 n. R( C% F8 F5 u! }2 D% ~3 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: H* {7 c9 A1 M3 s& H5 Y
continue;
! c: `7 D q4 A% Y" `8 E; ], I }3 j* H9 \* p7 }4 U2 H
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% y4 Z/ K3 W" [; U; g
}
% A* @- f9 C8 j: \7 U# { break;
+ F- k2 p6 M' V }3 e' B! l) q6 U- j, ~" W6 V
case 1:
) k2 b0 K8 L* [; P& E {7 G" v8 ]% Z6 V: E
//整理背包
6 n9 H1 Q p. o* x/ L, X0 ^ //////////////////////////////////////////////////////////////////////////0 Z$ r/ t( \4 M) d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 y0 n& y7 G' ] //////////////////////////////////////////////////////////////////////////
, W4 K" R1 C e! x //////////////////////////////////////////////////////////////////////////
) i8 s' h3 }; I4 G# M; ^ j( \ CInventorySort* pInvSort = new CInventorySort;
! F# n( k' T$ F. D3 a: f6 G5 k+ ^ vector <sItem> vItem;+ g8 |5 M K+ R. i" P9 Z* T
vItem.resize(MAX_INVENTORY);//初始化大小
) b; i k w6 g2 i1 g0 h$ {& h7 g //////////////////////////////////////////////////////////////////////////
4 m( T; {( V0 T5 w; c( L6 ? //填充数据
0 H; t6 D& B' i# a. v# z8 A for (int i=0;i<MAX_INVENTORY;i++)' O" `% z. {, P y: ^5 k/ U3 _
{
! Z6 b+ g5 e% k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% A; ?$ [. R5 k5 J( I; Q if (!pItemElem)
1 B6 A* r3 s7 \9 S! _: _ {
0 F6 B4 j' O9 c2 x vItem.dwKind2 = 0xffffffff;
( b/ v7 N; Z5 X) e& K" j$ ~# E vItem.dwItemId = 0xffffffff;
- @; E0 ]* @1 f! ^ vItem.nIndex = i;" g+ `4 ?. t( H( h* @4 N) \
}else {
( V% R6 {8 s/ K5 t; r ItemProp* pProp = pItemElem->GetProp();
/ L& A4 q" f% L vItem.dwKind2 = pProp->dwItemKind2;3 O6 G0 t/ ^& P9 {( ]8 \% k
vItem.dwItemId = pItemElem->m_dwItemId;- Q, x% Y7 T4 @. ~1 F
vItem.nIndex = i;
" {5 d% Z- o& |' B, S7 e }! N3 q2 q7 V! i |3 F* L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& G+ O# Z* r' C& F }
' N; d% d0 M6 o& h9 R //////////////////////////////////////////////////////////////////////////5 U( a# B( }" G0 a
sort(vItem.begin(),vItem.end());//排序
/ }/ X) N$ c$ y* k& w. S //////////////////////////////////////////////////////////////////////////
- ^0 w) l( f# {! c5 _ //交换% f6 T) P+ q9 ^8 x4 `' P, x! k) h2 P
for (size_t i=0;i<vItem.size();i++)+ X/ A4 r3 ?, q' ?8 d+ x; k! w
{
' V9 s0 _/ R: A5 f, L( L6 q, ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% M2 R* ~- w( w' \' W pInvSort->Add(vItem.nIndex);5 x- \5 m7 y, q1 ^6 `: h; {: M, M
}
- }7 D6 n1 ^$ u, U) @1 e6 ~& y BYTE nDestPos = 0;
2 j4 [; @0 @+ D' i for (int i=0;i<MAX_INVENTORY;i++)
8 }% A* H# e/ s {4 i; r3 C1 ~% A) Z3 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 X, O1 l: m; }+ S/ a7 @9 h6 o
if (pItemElem)3 v7 x5 B- P/ r" ]! x
{
6 q# I9 }- N2 g if (IsUsingItem(pItemElem))
5 d7 K) d* l ~8 ?) R {% c3 V" r) q6 Q- `1 c8 c
//这个位置无法放
( o6 {; @' v0 x' x nDestPos++;+ Q9 A' [* S% k/ n
}+ B9 u0 D: S* a l% ^) f
}9 R( n8 |# k; s' K2 u+ I
BYTE nSrc = pInvSort->GetItemSrc(i);
- Y+ @. P4 `; b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 u( d0 `" e. ?6 C
if (pItemElem)( G1 K `7 o; ?+ _/ y: q3 n( i
{
3 ^( B6 W; b" [. v& e if (IsUsingItem(pItemElem))3 U. E5 B3 i" D8 g
{
$ m$ b6 @# E0 c4 ~( D" ` //这个道具无法移动,跳过
+ W% p; P8 u6 r5 o2 ]5 |: `2 K9 F0 ~ continue;
1 G7 X7 P8 s d( Q- u: D* G7 L7 { }- `. o: Z/ F: N7 D% \
}else{1 _4 c- Z4 C6 {( y# W2 E8 W
//空位置 不用动
$ |; o0 k& V- w/ h continue;0 I# ^0 l* }+ @, [$ ^
}3 B! i& ^! l9 Y6 V4 k& x
//////////////////////////////////////////////////////////////////////////
8 l( y/ ?/ ~& m4 p+ _ //开始移动! o% Z, [" |( z' [
if (nSrc == nDestPos)
& ], ^* `; E3 d- u3 v% R {0 j. }; T+ B! Z0 U0 v' m* r+ ] w
//原地不动
1 I# z: y# M; T nDestPos++;5 _0 Q+ f9 U; B: U
continue;
9 k1 U5 n5 D' Y7 v) s0 Q1 N }
0 I! o2 J9 @0 g pInvSort->MoveItem(i,nDestPos);
# J4 S% O* s4 u: q* p) k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 |: I% `$ F+ h: T; k. m Sleep(5);$ I+ R! t8 b+ X' X3 f
//Error("移动 - %d->%d",nSrc,nDestPos);( w4 ?$ k/ \1 t$ ~; |
nDestPos++;+ X# \# [0 S/ w1 w* h1 V+ m
}& R4 _) z* n6 t$ T( Z
//取第一个元素的信息% h) i+ l0 V H6 L y- q
/*
; n" R8 |9 k) S* U# H7 }4 g, C% { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& U3 n# i/ J* O; X {
7 o, a) W. q+ R2 Z2 d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ X; h8 H, G; c& s! A T: q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 P+ B6 W3 L1 O) C2 H$ c
}! M. ~2 l M8 R+ J3 D5 A9 g& q
*/- Q/ k& Q" F7 V
//////////////////////////////////////////////////////////////////////////
% Q2 U0 m4 ^1 A# r: f* z, j break;4 f y8 R, }, `6 U
}& z! \: {& j" ^: i, \" f% p' u
} % z6 C- [7 R# n/ K& `: h9 C1 X
}
: b* {7 p$ x, A4 Im_wndMenu.SetVisible(FALSE);* v9 \1 V5 D/ n5 N
! |0 p7 \, e) n( V+ ^3 n5 ]--------------------------------------------------------------------------------------------------------
- U7 B. W) d' l4 h* J2 R6 I E: o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- Y" |7 X& E' q2 u
{
9 [2 g8 D9 f( r- Z9 @7 [! DBaseMouseCursor();3 C- X& Y2 h5 u' _
}
' i' F( y0 H% V3 `2 A在其下添加:
f; V9 P, G+ C9 x1 L, ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
m9 a# f+ j9 t2 C{8 ]# V$ A! r+ u" ]" h
m_wndMenu.DeleteAllMenu();, I5 z! e( ?5 m8 J& Z* U) n y
m_wndMenu.CreateMenu(this);
. H! f" j! A7 Q( U0 ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 ]" [+ g5 h% b/ Q$ Z
( e* v. d% B, Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% {( [5 [% S, A% W$ \
{
$ D# M" }- y" ]4 V% F& l9 K //P以上级别才可以删除所有道具
" {" {' b5 s. g! n* h g$ w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 E0 A- h1 I6 g/ e! }' j
}
8 n. A3 G% t' j3 z* ?% }/ r2 Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); u& ]+ S7 M- z B$ G1 {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 Y) C2 S7 ~% T9 d/ p2 Om_wndMenu.SetFocus();
# R/ y' _# z/ P* l}
z" h" v8 J5 K------------------------------------------------------------------------------------------------------------2 Y7 p, e: w, J4 R: w- O
*************************9 b- K$ {& N6 ?) V& Y1 Y
WndField.h文件; A* c! |7 M; d
*************************
) p' U+ B# ?, F. X8 H3 J9 p$ X/ I搜索:BOOL m_bReport;! |, D" z9 r3 ]; W& G. I
其后添加:+ e" D# f# D& p& I
CWndMenu m_wndMenu;
@- x2 q! E6 U8 I7 B. y* M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& Q4 J. P: b2 h* M* ]9 w+ \3 l
其后添加:
, o2 S; v7 l6 l& G9 W+ Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);" U, ~! g% P. @: R* q( v8 e
3 H2 z4 v, Z' G
. U: G# s1 `6 M/ h. x! R |
|