|
|
源文件中_Interface文件夹下WndField.cpp文件9 x6 J4 I/ r5 Z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 q) Z1 P5 T- k: h/ U6 g$ |& a
# M$ |6 _: l3 y9 n8 Z) @
struct sItem
. k' C+ K! ?7 j" x5 u' T{9 ~1 f* \6 D+ w% D' J
DWORD dwId;1 d6 Z/ m, e* a) _) G5 b3 @
DWORD dwKind2;
9 ]1 F6 p. o9 l6 s' x/ H) kDWORD dwItemId;
* q. \ i; ~: j' ^- k# cBYTE nIndex;, X) W9 A8 |3 j* ]1 ?/ Q6 g6 d2 I6 n F
sItem(){
) F) z; J$ L l" u! V! |# V dwId = dwKind2 = dwItemId = nIndex = 0;) { a/ j9 V }" O, t j
}0 d- N0 V8 w6 L# G2 t, [. T' n
bool operator < (const sItem p2)
, r$ o g4 ?1 O# S, `{* T9 z# c2 @: B! U& k: F
if (dwKind2 == p2.dwKind2)
+ K0 V. b- ^9 ^: r' l* q {4 C# s0 e% W0 p8 n
return dwItemId < p2.dwItemId;1 K. J: D+ Q' e; m# U+ i7 m
}else{( _9 k6 c3 c& D D$ H. p
return dwKind2 < p2.dwKind2;8 p8 i# Q$ q. ]3 r
}
+ e- k' | p$ ~$ A7 b}6 m, O7 g7 v. i+ h, m
};0 p+ w& Y! u; a }! H3 L5 d+ `* r
class CInventorySort* L" _: R: l4 y& ?/ d1 i: ^
{
2 F q5 E* v6 a n8 ?4 qpublic:* R& L9 k/ n$ k8 w* l4 [. h0 S
CInventorySort(); X6 H3 m! W% N5 }* \" m
{
8 g: P# {5 Q5 |" }! N% N: J m_dwPos = 0; Y# S2 a( b9 [3 D1 T1 E/ n
}
! R- D, ?7 y; P) l( ?5 ~~CInventorySort(){}9 M, z# T9 Z( ^
private:
4 g3 q8 p- m* q/ M3 q# {8 Y6 }4 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- p0 s* `9 _4 E QDWORD m_dwPos;( I# J6 m+ O& u/ i& ?1 L2 s
public:6 d6 u% P2 b+ `3 L' c7 ?& W
void Add(BYTE nIndex)
I, x$ _+ g; y4 _{% t7 I0 E% q$ {6 C
if (m_dwPos >= MAX_INVENTORY)
- M6 c v& }+ L( Z" k {; F: a0 ?/ `9 M
return;
+ b& _1 c# j. \! z }, ^1 v( y4 }9 ]# }8 g+ k; S D( D9 U
m_Item[m_dwPos].nIndex = nIndex;
+ Z( v8 ^" I2 S9 E7 A p- D m_Item[m_dwPos].dwId = m_dwPos;
5 o$ C+ }2 X/ I m_dwPos++;
% t7 P9 l* @' \7 T8 S' x/ q}
, n) X$ @( p2 W" W I0 oBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 e5 y4 o* D, J7 o- V{% c" n: f& D& y! S$ y
for (int i=0;i<MAX_INVENTORY;i++)$ w9 I+ B8 g5 \ h
{
/ M% U: G% A2 h) x* x, s- c( D if (m_Item.dwId == dwId) Z ?% k' ~5 C# g2 e- r
{
5 G0 B/ R) Z! ?! m return m_Item.nIndex;
; B# M" ?, f) x2 A! }1 Z }
. m+ X1 i b0 a* [0 o }: z8 h$ N1 k6 o+ Z! P+ X) B
return 255;
; T" ^' N- N& A- F q. L1 s' d}
) f! W$ f( F: {9 Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 u; S4 t2 G2 N' Z{
) P9 d" y l5 B6 L- K5 f; Z1 r" p+ G- C) X2 S BYTE nTmp = 0;6 V t7 [3 V7 W B @2 {/ C
bool bDest = false,bSrc = false;
{/ W: O* R ^- O1 x/ {! Y" \9 x for (int i=0;i<MAX_INVENTORY;i++)
2 u) z4 z' G" c) H/ d8 @ {) ?8 |0 o) d$ {+ H' ?
if (dwSrcId == m_Item.dwId)
) t* D* L- }& v$ a9 U {9 s; x1 p6 ~. P% C- h* {
//id相等 则 改变对应的dest和src0 I; X; N3 h; W. l# q! @2 [
nTmp = m_Item.nIndex;8 d8 M4 g' r* @
m_Item.nIndex = dest;$ ~$ T' {, j; @3 C+ Q6 a) X
}7 J; C. [: S# B1 P8 K) @2 N
}
) }( z. c9 x* D! \( {+ J; R4 J+ f/ L6 \ //临时数据保存完毕,交换开始
1 y1 T0 b! ?8 o7 W; j; t( w+ x for (int i=0;i<MAX_INVENTORY;i++)
, }# e7 y. E3 L {. G$ f9 }: Y; Y# Z
if (dest == m_Item.nIndex)' Z) M, T- L% Q e7 f/ W6 K
{
4 @7 r" v- X2 Z, y& ` //id相等 则 改变对应的dest和src$ K, G# _+ ^9 L2 d
m_Item.nIndex = nTmp;! v2 S8 {, I" Y
}/ B/ p' C3 u1 N, ?8 m& P
}4 d1 ^3 O5 ^" V( ], C* _5 ^# T
}
; ?& A8 _: ?* r; y6 ~};: N. ^5 `- H* P; S7 b- n
-------------------------------------------------------------------------
' W# W$ s; X: x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 U- ] x; z2 b2 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 A9 H, D/ z0 Y* u紧靠其上添加:8 \7 y1 R. K3 o& F, S! g7 E# n. o! h
if( pWndBase == &m_wndMenu )1 p! \& Y* d- o0 t, d0 M' R
{' f: @6 l; _1 a, @
switch( nID )# M1 x7 h7 D+ L$ |4 k
{
. \. k8 E4 D9 |$ c, m case 2:
9 ^# C" k3 n+ N( K' n% s3 ~ {
5 }3 s% d/ {" _" \, X2 a# h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 r- |) p& G) j" U* A7 a+ D* ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 `6 ]. w# C, f3 o' D7 \4 ~9 s {
& T6 z5 L: W; M8 [& q3 A* f$ i break;9 ^$ Z! j S( u6 ^4 h
}
( z) O' S' b. Z X* A/ ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% t( A+ b& I0 K+ J! |4 O {2 I+ F, q8 |2 |1 x$ |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) h U+ h/ g4 k4 A3 M% J
if( !pItemElem )
& `1 U9 { k$ N9 n' n- T continue;
) f2 T, [( K* _* X if(pItemElem->GetExtra() > 0)$ L" e% P/ u; F V( q8 a
continue;
5 e$ A6 y$ W4 O7 A! d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, _$ m- V" P# a3 L+ N( t/ c continue;
% ^% g- L; L6 t [( P7 n( s3 Q if( g_pPlayer->IsUsing( pItemElem ) )
, ]4 L7 ?5 Z3 ?& n: i5 M) { continue;
\! Q" y, F" T/ Z if( pItemElem->IsUndestructable() == TRUE )
$ c5 L w& |& x" B8 ~& E/ u {8 [% o! h) Y( Y; t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 `/ {: X9 S# ^3 k: A% i( U
continue;% I2 d |, d' j3 H
}
3 n6 ]5 j! |& E$ }! B4 @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* q$ ~, u- q7 h! k6 x }
9 e. M6 W' r# u9 R2 m+ N break;
+ U1 g3 E; h" z }
5 k9 t1 m; j% n9 E! n! V" W/ c, a case 1:# y: _6 J6 t* q" \9 V! s# C
{) S, r$ z7 i3 v5 ?
//整理背包
* _0 ~& N0 g# c //////////////////////////////////////////////////////////////////////////$ W# `0 C1 j1 ?. ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ ~3 B- M! P) Z' q5 Q6 }* _
//////////////////////////////////////////////////////////////////////////
9 m5 z: ^7 H) a& T2 Q! L4 O //////////////////////////////////////////////////////////////////////////
$ A5 p9 x. ~" _9 K N) P CInventorySort* pInvSort = new CInventorySort;
& r5 |" Y' K# t. h6 n2 G vector <sItem> vItem;! G( V% a3 j/ M" D" V
vItem.resize(MAX_INVENTORY);//初始化大小
$ h4 n& M6 M4 ^6 h; ~: t& S- L //////////////////////////////////////////////////////////////////////////
7 k+ b% `/ \/ ? C //填充数据
' z) S8 M3 L% x+ p ^% r for (int i=0;i<MAX_INVENTORY;i++)
& m- H$ q6 E0 C. |! j' q {8 D; j3 g5 I1 ]( q0 x r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% s( [( o0 ~) h( K if (!pItemElem): d" M$ }- ?' f
{. l t1 n& C* y
vItem.dwKind2 = 0xffffffff;1 ]8 k" H# ]% W$ i# Z1 g) G
vItem.dwItemId = 0xffffffff;! @0 [5 b0 |4 c/ w( y% q
vItem.nIndex = i;* X, S1 P+ h( ]' r; ?3 _
}else {
' s- o* E9 G v' i7 v0 p, A ItemProp* pProp = pItemElem->GetProp();
3 N, v; x- v. N# E5 t4 O2 w vItem.dwKind2 = pProp->dwItemKind2;
# a2 J9 l% y1 c i9 Z* v vItem.dwItemId = pItemElem->m_dwItemId;' @2 E8 |0 b5 @' J" o$ w& i
vItem.nIndex = i;# T- g% E, C$ Z. U
}
% ?# f' u3 d. M/ l& i$ W //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; V d; t- u/ e' u; j/ |
}
6 |( l, [' y# S- M" a" y, z //////////////////////////////////////////////////////////////////////////
. S) e2 A& F$ R! Y7 z8 J* s3 d# | sort(vItem.begin(),vItem.end());//排序
* ?/ H9 |7 L1 N! ]: P8 G9 m; Z //////////////////////////////////////////////////////////////////////////
. q/ j8 D5 f7 G# J" x% G) J& _ //交换& ?* L' m9 t7 g% [1 M/ i' d
for (size_t i=0;i<vItem.size();i++)# x9 [2 f+ V+ t
{
) b% K5 f$ j3 \& [2 B! ? `2 ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" o! `. @. T% Q2 c, u2 d' t pInvSort->Add(vItem.nIndex);
4 \( B4 ]6 T) g& j% U }2 v- ]% I! z% X; p9 G& d% Z4 d/ s
BYTE nDestPos = 0;
" Q! N. Y! V8 L4 I: p* A for (int i=0;i<MAX_INVENTORY;i++)) g8 j# K7 V, F, D
{
! ^& L, P' B$ R% `/ O. Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' z0 f5 k$ k7 Y
if (pItemElem)
' x. e9 n+ o% N! r; Z' i5 r {/ i5 A/ N8 x6 [( m' s: H3 i
if (IsUsingItem(pItemElem))' R2 w' \5 {* a" }/ z1 a( V
{
8 Q K! z& V/ P5 p, F //这个位置无法放1 p+ l }- V. `" e* n# q: r+ K
nDestPos++;0 J$ M3 r# q* t& Q
}3 R3 Y& m \" p0 k' F
}% r, N) P! V& x3 l: r
BYTE nSrc = pInvSort->GetItemSrc(i);
0 n! c8 Q: Z3 k- f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; m1 a: _5 F+ c% e5 x# d) O5 A
if (pItemElem)
6 B- t/ z* r9 K, @. H X {
8 i: W0 M# i5 S; G: t7 T1 Q if (IsUsingItem(pItemElem))
8 U0 ]; g" `; W: Q {
( C) p. Q& k3 c //这个道具无法移动,跳过* g3 w, i; V# b/ g
continue;# V+ z) {0 \* \) G
}6 o* b H. d- V! `8 X8 x! C4 w
}else{
. s* z9 x: H9 M& Y/ C6 X. |3 h //空位置 不用动
9 v$ L1 m9 n2 M continue;& g$ o$ Q2 C! u; Y+ Z3 p7 i: p
}# d! t) {" k; Q: U$ B
//////////////////////////////////////////////////////////////////////////( p5 v2 a8 m0 p) F
//开始移动6 `8 r2 }( J7 b$ e
if (nSrc == nDestPos)
2 h( e7 ^" b3 L! F/ b4 Z) F& x2 Z {
+ v5 x: s- d7 d1 ^2 K8 X& V //原地不动
! D1 v6 {- F6 D4 P2 i7 l. A8 } nDestPos++;4 `8 [, F, n4 I0 T
continue;, f3 ? c" r4 W9 L
}: [& P; Q K2 ~* ^" M
pInvSort->MoveItem(i,nDestPos);
6 p. Y6 B/ G& D+ | g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( A. j* U! J9 N Sleep(5);
9 i* O+ L J2 f& s8 y //Error("移动 - %d->%d",nSrc,nDestPos);; q. d0 X7 x4 o4 l' }- Z
nDestPos++;3 `/ k. k" \4 {) ~
}
6 L4 C" M8 d0 P7 z& M //取第一个元素的信息8 k5 e1 K: l/ X5 y
/* f( [( p7 o2 o$ s; P3 b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) i6 `4 D/ j( q
{8 F% N! ~. a( `1 Z4 ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 y( R( r5 K0 n6 E9 @8 }$ w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 Y1 P; v/ ~' \: w }
: A) V/ B: S* x. g. _1 X */
+ J- t, U8 Q6 F/ Q //////////////////////////////////////////////////////////////////////////' |" C. O% {( [+ L9 N; |& g
break;) g9 L3 ]- o9 }1 ?3 {
}* ]% P5 ~. |3 T/ \9 m
} % m3 P" X4 w' R& _' e3 j; Q# Q
}9 v7 q; H+ x( e4 K8 t% z
m_wndMenu.SetVisible(FALSE);
4 U) E8 Y* z/ ]% D2 c2 x" s/ ~; E" M) Q
--------------------------------------------------------------------------------------------------------
6 A6 P* {- @$ j- x7 E$ ]搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 s/ N+ q/ `2 F! m. m" r$ e{$ ~$ v! P0 `% r/ R' q
BaseMouseCursor();
' ~8 t y1 c7 q& b$ w- `}2 b. b! l8 P7 ^: f
在其下添加:; q+ g4 }, {2 p2 U8 G$ O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' L+ o: y' @, T2 A- y
{
0 g! b2 V$ k8 Q9 s) c, [m_wndMenu.DeleteAllMenu();
- f; I! ] n1 _* I: @m_wndMenu.CreateMenu(this);) b ]9 c$ q' J% u+ S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. X* |* @* W3 ]. t }8 R& v
! y! K1 E6 J: e( z8 |/ i0 Y( hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- d/ }1 v4 W$ w8 w: b9 d- c2 [{
% U9 i A) m1 g, d //P以上级别才可以删除所有道具
) U& P, i% G1 w& S: ~' s. t! H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! k; W5 b+ F/ K% }}
1 U5 v; s: C/ C0 N y5 _6 ]& km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' `; p! k2 T* d9 D# Z! o$ em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 q3 }* Q% t U1 p$ zm_wndMenu.SetFocus();
: J1 V" ?) q1 K0 `! {}
' d+ e' a* N) v- a7 v------------------------------------------------------------------------------------------------------------3 u2 k3 F f7 q% d9 p8 Z6 j/ Z
*************************) G1 N' p9 V4 N3 S# B
WndField.h文件
- w- Q) F& y! j' V& n************************* f I; R2 W* ^' q% [! ?# d2 E" p
搜索:BOOL m_bReport;& R! c' @- I4 x
其后添加:
7 K5 |7 k6 V; T: r! E/ g2 uCWndMenu m_wndMenu;3 T& U3 M+ N2 R* p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% @) Q& C; l8 p% o) s2 e: u4 p# G
其后添加:
/ h9 m4 s1 X3 Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);- B8 A J# R, O2 k4 |4 ]( q
* l; R( o8 W2 w0 K. w( g. \- u1 j
|: u+ W" U4 ?0 h. K( t |
|