|
|
源文件中_Interface文件夹下WndField.cpp文件/ M' [! ]- _0 _" k z2 c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! P& L2 L1 c- Q9 t) G/ U' A' B% F1 H3 \. ~" u
struct sItem
3 k. ^* j& v. U# }; B- v1 N. }{; [6 y, N2 z8 k& u
DWORD dwId;
& H1 S1 l# B# t4 IDWORD dwKind2;; B! B6 A1 _3 V0 S, J& ^' i4 c
DWORD dwItemId;
: v0 w0 w7 m' w0 r cBYTE nIndex;
+ P; Q5 p1 C: ~+ |+ ZsItem(){+ L7 H' j3 w# G& y' q/ Q' v
dwId = dwKind2 = dwItemId = nIndex = 0;
$ F# ~& G& Q8 ?}, x. j/ I+ i& ~) [0 ]. e+ e( P" |
bool operator < (const sItem p2)
3 g- V# D9 j$ z" o f3 U" `7 A{
0 W% L; J" n. ? if (dwKind2 == p2.dwKind2)
w$ Y+ P) q% L( V W9 o {( o3 w( r% G% Q7 n$ X% @& H9 n
return dwItemId < p2.dwItemId;. ]0 f! B; j! C% ^* b2 f
}else{- r7 N, S3 Y/ t$ N: c! l/ k8 G
return dwKind2 < p2.dwKind2;4 h4 }, r- N2 K# o, _7 N& i% S
}
3 ]4 F( o, V* `, B' @- m* J}# A8 h; r! t$ O' X
};, k2 ]5 T1 k" p3 i: Y8 S- b
class CInventorySort' [" j/ T% c+ V* G8 W; P$ |
{
& s7 K3 L% I. r3 L# {public:
* @3 A4 M: ~" ?1 x8 YCInventorySort(): n/ m9 o+ M1 w
{
. U$ V% e6 T7 F% w/ C m_dwPos = 0;% g" Y& Y0 p/ i* ?
}
" g8 x! D2 \* Q1 L" M~CInventorySort(){}6 _+ i6 D# v% V5 v/ A: F& X$ \
private:
! ]9 Z) {9 r. j) G4 p& m$ O) TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# F* @; E0 W, ?1 B' [, U; V9 M5 T
DWORD m_dwPos;
& U. H7 m% j8 b0 npublic:
( p7 P3 s3 Z4 `+ L! @, b' _$ _void Add(BYTE nIndex)) \; e9 Y U& y
{2 ?3 R% x' W5 b: i9 t2 {( w
if (m_dwPos >= MAX_INVENTORY)" F* @% _1 x0 t: V K2 {! ]
{% _/ m- Q" C: d
return;3 b; x1 X2 B; t, C
}
$ g. R" Q# }9 h9 b' y+ K3 H m_Item[m_dwPos].nIndex = nIndex;
( e) L* a8 N5 U, i m_Item[m_dwPos].dwId = m_dwPos;! G' E( r& I7 l4 y. h( u4 Q# O
m_dwPos++;7 ]5 ]+ y z( `) s1 c: Q
}9 g/ `$ ] J2 d' [+ ~4 [4 W5 e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- P! H! U$ T- d
{
! ^; o; B2 q. ~& a5 f7 k9 X: S for (int i=0;i<MAX_INVENTORY;i++)
" j5 K% p X' L' Q {. H, Q# o& ] C% b
if (m_Item.dwId == dwId)3 M+ V2 G$ B2 P& n
{
3 X) P9 ~+ X4 S( y' g1 b: U: u6 ` return m_Item.nIndex;% s% i# {" F6 h% u+ k+ b8 E
}
/ X4 h) c9 p7 c7 k }3 y2 O7 @9 Z0 a+ G8 |- m J7 x
return 255;; J# N/ G5 m+ {' ?* p2 ?
}
% c% @- ?# ^$ v! `7 u, cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 O t% V+ a$ A) j3 t9 ?{" M7 z; f9 ?* L1 C
BYTE nTmp = 0;& ?- z+ \- B6 j3 N, ^% T, ?
bool bDest = false,bSrc = false;
# [( G& f' y) y" V4 I; y9 p6 i0 ` for (int i=0;i<MAX_INVENTORY;i++)8 _. T' N& o: C4 j7 [8 Y
{
! A. T2 {5 X. e1 w if (dwSrcId == m_Item.dwId)9 i" |6 |6 Q6 W
{
4 H9 d; @" w; m3 L: C9 Q //id相等 则 改变对应的dest和src2 }7 _. B% l3 F! a
nTmp = m_Item.nIndex;' D+ [) L" z1 o% J4 H7 u
m_Item.nIndex = dest;4 r8 F8 N8 z7 W2 c
}- j; K8 D; e4 w7 }# p" r- O$ p
}3 W' A A& T% A" c) c; Y+ n& ]
//临时数据保存完毕,交换开始6 s: |; t% M7 m8 |# B/ G3 a( H
for (int i=0;i<MAX_INVENTORY;i++)2 l) U4 ^$ k( `0 Q/ P9 \
{7 s' P+ u& h8 r+ _" q8 e9 e
if (dest == m_Item.nIndex)
& j* j0 d2 ?8 X" ~" l. a4 `8 H {
9 m- T0 J- [+ E8 P //id相等 则 改变对应的dest和src) X/ n9 S( i- _! \
m_Item.nIndex = nTmp;
/ J% ~6 q/ U3 \; P }( f+ P: i7 V$ o! B! v8 @
}
7 b/ S @! Q9 S( h% V6 {+ u}" e( B# h( W! u* H
};5 z. f( T$ g7 G9 ]
-------------------------------------------------------------------------6 z3 E; X) ? h( [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; k8 v; M8 H) h& B5 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 ?1 e3 N* V m0 `+ K, A/ L
紧靠其上添加:
/ b" ?* r$ C0 S& R$ }if( pWndBase == &m_wndMenu ). M4 E. t- B/ {- r: h: M
{/ K* C q5 A( R; h$ x' v* D1 Z/ p
switch( nID )# X) L6 @( ~% b' ^ F" f
{
! [/ m# M, x. j1 G4 h1 @ case 2:
7 T6 t- `/ N! R {
w3 ^7 ]: b- U [9 `4 E3 D& Y$ b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: \2 p: p6 E$ z1 a- n7 b
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 v; g2 g7 N! T
{$ I" p+ y u4 {# e( ~
break;. G! u/ P" W/ t+ F* f
}; x$ D' ?# G, H# v- M! s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ E' |5 w& Y m. v) J8 Q; H
{" f, P" w. }, `- G- }" S6 r8 } Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 V* Q; M! k }2 Q, C% o+ W1 Z
if( !pItemElem )
0 m) ^$ Z5 i- H# E, T; O5 ^* q0 y5 J continue; }2 k: l+ t% M& {. [- H% g7 x
if(pItemElem->GetExtra() > 0)
9 q+ F2 M1 R$ d3 Q B continue;, G0 S2 }1 E; a& a( o) s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 N2 V! I4 z9 i3 d continue;7 c; t( G9 c; C/ G8 j
if( g_pPlayer->IsUsing( pItemElem ) )( d- ^; p# t+ i, @* G' w% [! M
continue;2 {9 C4 K4 D, @8 W
if( pItemElem->IsUndestructable() == TRUE )
* L) ?# e/ T* |: }* N( F {
' B0 q% R# ~) M% |1 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# K- h1 u% E% \, A4 u
continue;' } N5 B8 j+ @6 }( B$ n$ M
}: b* \; Y; B2 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 M3 O K8 M1 n1 p' A3 J
}/ F# i; K2 t0 W+ X+ [2 I
break;
v4 X) _" Y1 Y# K# h }
* y, V& i' B; L- H. y8 t case 1:+ ]4 ]( l; i4 I' @
{
+ V5 U2 Q" |2 U3 c7 |6 m //整理背包
: U: C9 A$ F! J! B. ~+ b //////////////////////////////////////////////////////////////////////////. U6 H+ E/ V, i7 E% O; O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( N4 D9 ~2 m% t" Q" [
//////////////////////////////////////////////////////////////////////////
8 R1 l8 a/ c' c //////////////////////////////////////////////////////////////////////////- F7 u" f: ^% m/ q" T3 M# w
CInventorySort* pInvSort = new CInventorySort;
9 @: N/ j$ y; Z vector <sItem> vItem;
6 \: u9 b6 e& i2 t* Y' h) k vItem.resize(MAX_INVENTORY);//初始化大小
9 |2 n, g0 t8 }$ U) t //////////////////////////////////////////////////////////////////////////
) d, n0 r4 _9 M) H# I //填充数据
/ s1 K9 g/ E4 I) _4 P1 D( M for (int i=0;i<MAX_INVENTORY;i++)' M% P* U5 h- q! S$ \- K6 j
{9 r/ Q7 n3 |( ~, t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 t8 |. ~/ a! B' c+ T: ]( M
if (!pItemElem)
9 |4 {4 a6 v8 C3 U9 f+ ^2 R4 q {2 G" G% u( x9 {# E! S& g' y
vItem.dwKind2 = 0xffffffff;
4 S: j; }0 y0 E1 j% R vItem.dwItemId = 0xffffffff;
: O6 t" Q* a: C vItem.nIndex = i;/ w7 x1 `; X7 O* a2 x6 a6 Q
}else {
$ ~" e0 \% |+ T/ j* y4 ] ItemProp* pProp = pItemElem->GetProp();* [" l2 Y+ e+ _6 |/ H' f# h
vItem.dwKind2 = pProp->dwItemKind2;+ Z/ p- x, g$ |1 c
vItem.dwItemId = pItemElem->m_dwItemId;2 M' A: a, k( B* S
vItem.nIndex = i;
7 P( E7 K8 ^+ a2 N }
( |& N- n) M( Q9 ]) V //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 b/ S0 p6 l' z1 G, i; d }6 z3 m* _; L. F. K0 x8 l; @
//////////////////////////////////////////////////////////////////////////- N' O7 i" Q( m* W
sort(vItem.begin(),vItem.end());//排序
" G% b9 j$ Z8 ], s! r' V# @ Q3 H- N //////////////////////////////////////////////////////////////////////////
& n: H' l# \9 r1 L, p: u //交换* [# T( T5 ?! r6 s
for (size_t i=0;i<vItem.size();i++)
8 n w0 V# W+ b S/ j {
`/ ?! `: }1 }4 s* Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* I& S6 z; r( Z. x9 a# ]/ S) c
pInvSort->Add(vItem.nIndex);/ v7 a4 a3 f P9 e; L- m
}' P( M8 u' j. i w6 u
BYTE nDestPos = 0;
e- O- `9 g$ `8 E for (int i=0;i<MAX_INVENTORY;i++)
6 o* Z' e! F, _7 r3 s. ? {
) s4 N0 }! l4 f5 L7 O! W( s2 H2 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ e" O+ u5 q( X2 a- R- M3 L! |
if (pItemElem)
+ z" p$ |/ I7 k5 v* U V {
$ i- ^# M: c& a if (IsUsingItem(pItemElem))
+ P0 O8 E# w! D7 q; H9 }4 H/ s1 J {
0 P1 }$ r- |0 R1 _7 | //这个位置无法放0 i$ n7 ^! @* c# C! \. O7 R1 ~, R
nDestPos++;
$ D; f6 T1 T" M: p+ e$ Y }
H9 L8 g: T2 a3 o/ E) A" D }9 ~9 C/ K, ?8 r( ?1 U0 ]
BYTE nSrc = pInvSort->GetItemSrc(i);
7 M: h( ^( S; M3 z3 ] pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 x+ |: @" [2 W9 L( r% Z9 ^( C if (pItemElem)- M6 A3 I N) ]
{# z0 \0 C% \9 `* B
if (IsUsingItem(pItemElem))3 S3 K8 R' W- R# W2 g& e- G
{
$ [( }; J/ r% n% N) p5 p) b5 F //这个道具无法移动,跳过
/ L1 Z8 T4 [* a- w9 _! ]( L continue;* b7 U( z; L, R# u
}
y4 q9 i+ E R" U2 l6 { }else{# e/ L6 N6 @8 j" d8 M) n# q
//空位置 不用动0 Y ~0 d6 \' ~
continue;
4 ]" l$ f7 _' ^. Z9 x8 ? }
1 H6 v. X* H% K0 W //////////////////////////////////////////////////////////////////////////
( H# j! u" O/ Q //开始移动
0 w% k0 K. t% ^% F6 w8 N! e/ k if (nSrc == nDestPos)2 }- I8 J$ e8 M+ X5 I
{ x0 j7 f$ S0 c" [" s' R2 B
//原地不动0 `/ G9 F& _9 ]8 N5 h
nDestPos++;; a: y5 h/ ]/ n7 e8 X, ^' ?
continue;
( ^5 n3 C3 r' U: | }
6 C4 r$ v1 S4 ~- ? pInvSort->MoveItem(i,nDestPos);
7 S+ H W+ M# @; l" s: e7 L g_DPlay.SendMoveItem(0,nSrc,nDestPos);* O8 m# H9 C) b' ]5 J& S) H/ m6 g; l* c
Sleep(5);
* t: A, n; {5 k, M //Error("移动 - %d->%d",nSrc,nDestPos);. r A# J: Y) u- O' Q. U1 x; V
nDestPos++;& h& n8 E- k$ Y( T
}
1 |& G* i( A3 ]: @! k //取第一个元素的信息
4 H% q' X2 p" ~5 R /*
7 U. V7 u, C9 E% a" ], R7 X- ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ @: U$ b! N) \4 X4 D9 S) ^9 b {
7 D' [! ~! }& ~0 a) R0 H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 h, \2 e" a: v4 w" q I2 c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 z* k2 l2 m% O6 k/ f! L
}
H+ o4 q% r6 r+ w* c% f */
6 M }' ], B5 y" ^% y2 T //////////////////////////////////////////////////////////////////////////) U, \# r1 g6 X9 d1 m8 [: k
break;
& d; H7 _% r& j1 s6 w9 ~4 P }
. k: Z7 h1 |. w6 R0 E }
9 V% B( T& U2 Z2 P" ]1 q6 S+ g6 Q$ p}) ^7 u, A+ t# k
m_wndMenu.SetVisible(FALSE);
" E$ z( {# s- y" X2 I# q1 R# F7 B/ P, f8 i1 G
--------------------------------------------------------------------------------------------------------' E; L; _6 U6 N( i+ B: T5 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
w1 @ @* f5 y{9 z! a# O7 l) W3 ?+ C/ P5 m
BaseMouseCursor();0 R" Y9 b: O$ p
}
% `, ^0 u, S" ] C* H' ]在其下添加:" P& O3 _8 w! ]( B* Q5 a" _+ A, V8 z x$ p
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 s. @! |, D! {/ y/ y1 D
{
# k5 C+ \9 x6 i, V+ l/ A1 [m_wndMenu.DeleteAllMenu();
. x* y, Z5 _ u# am_wndMenu.CreateMenu(this);
/ K/ F/ R0 l' nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 P/ \, I8 r8 C) ?3 U8 Q, @! u
7 W3 w4 T6 f+ n L6 P1 eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 z/ \" ~& n X+ a. @ l: R9 i
{+ }- ?4 q4 L- F% B5 f
//P以上级别才可以删除所有道具
1 u3 D9 q3 f! l! y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( G5 o' T9 J. R* h% B }2 n: ]}7 b+ b# K& Q' E" ?$ q# _- m
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; [( e# R; Y4 u% r* z* T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 a' v% T4 s* U; N3 M6 ?( Qm_wndMenu.SetFocus();' I( z! w1 b6 O$ q
}, l) n- l" a F$ i- T2 h
------------------------------------------------------------------------------------------------------------1 F8 b7 N0 U2 s% ?# J; a! b/ f4 c9 ^
*************************
2 F y0 G& t1 ^! k% zWndField.h文件" W- d* ?" @) I2 a! G( c
*************************
! }% S1 Z9 V/ }9 F- W搜索:BOOL m_bReport;4 v1 V/ l: M( u Q6 z3 G
其后添加:
) ]! d" t: H% e: ~/ _CWndMenu m_wndMenu;/ ^/ p; R: J) C9 Z2 |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. N z; x% ?5 S* e" `) U8 [
其后添加:
x- G6 r% \ \; ?virtual void OnRButtonUp(UINT nFlags, CPoint point);+ A% |1 I: w2 B5 ]
8 O- u! A) `: E1 C( U, q. s! Z
$ M8 I- @% v4 s
|
|