|
|
源文件中_Interface文件夹下WndField.cpp文件, t- m0 A; ?% X5 ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). P, L) I2 {; I
- }4 ?+ h5 g" O' n( Kstruct sItem
3 w8 f4 [8 j& P8 E. s, D{
6 @- W0 x4 F( bDWORD dwId;7 R: M( I7 C, h% f" v
DWORD dwKind2;
3 ]3 f7 G2 ^6 ]# b$ fDWORD dwItemId;
, Z3 W# Q! R4 T4 {3 Y Q5 x4 SBYTE nIndex;4 S+ u' q0 ^" I! i) J
sItem(){2 n2 ^4 M% Y9 {& }9 x
dwId = dwKind2 = dwItemId = nIndex = 0;
7 J$ f6 y$ }; f, h9 o8 ^( D}, C% G5 n) I Q$ V8 r) H+ \
bool operator < (const sItem p2): f/ m) x0 N( s
{4 G7 f( U# ?# ~8 q
if (dwKind2 == p2.dwKind2). r; P; ]- y" B$ o5 w1 n
{
' F; G4 S! e( d) N- J return dwItemId < p2.dwItemId;' H* n7 ~9 ]+ T. h( q/ J n4 \
}else{) g( l v7 U) K( q! }" f
return dwKind2 < p2.dwKind2;3 N1 I1 X2 U' J6 U$ @
}
( w9 J' O4 Q$ n0 d# P9 _}# j+ i: O& Q+ t5 i9 U5 [
};6 T. A. q5 i1 E' y
class CInventorySort
2 |2 v& x {: O# W{
0 W9 ?, O& p+ ?2 t: zpublic:2 E' a, _, ]4 u2 ^
CInventorySort()6 ]5 d m" X0 }4 Z) ]
{ e$ C% W$ R4 A* ^7 i8 R1 d, ?
m_dwPos = 0;9 k- ~' M% J. }1 J" a0 F N
}
! I' l8 Y: e' {7 z" q+ y~CInventorySort(){}$ F* e$ P+ Z: ]6 e; G3 `+ z: v
private:
; u: ^. a- z; c1 M7 H, XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- E1 T6 ^0 l. K) F: s2 }0 B
DWORD m_dwPos;
8 @4 Q2 X) ?6 ]% c' D* h7 N/ C2 jpublic:4 A! f1 D" { B2 [
void Add(BYTE nIndex)$ P( `' p0 Z& R# v4 Y) U/ e
{
& g* O, t1 _/ y) G8 q v5 ^ if (m_dwPos >= MAX_INVENTORY)
! q& K/ ]2 H f {
# c5 `, G$ G8 s% R7 X" ] return;/ A- O/ [ Q# J6 x
}6 r6 e% d& m7 w7 _! k: R- r. o
m_Item[m_dwPos].nIndex = nIndex;
9 L+ `$ u6 _" f6 I# l' \: Z m_Item[m_dwPos].dwId = m_dwPos;8 t, e1 Z, b) f7 `9 N
m_dwPos++;$ M& C' u ^+ o# P
}
% Q( J$ Q* W, I2 l% q fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) G3 u( D" E$ |1 _{
+ q) n# n0 u) b+ j for (int i=0;i<MAX_INVENTORY;i++)
5 S7 e. T8 B% m# p) U3 ]" R$ s {
$ t# z) {8 H4 e" ]' v! ?8 m9 \$ s if (m_Item.dwId == dwId)( d/ Y) \- D! t; D$ f
{
: e/ D5 y. t8 j5 @ r return m_Item.nIndex;- }: \ } n" R$ Y0 B+ [" U# ^2 K
}
( {2 X( m1 R' h/ L+ I. B }9 J* |3 d' J! b* v/ b! K9 x/ D9 L
return 255;
7 x1 ?6 c. l% M: P}- C& E$ F6 U- J, N# p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 t0 Q. f7 ?. o: }8 V8 U# i7 ]) Y
{
@3 v D; Q* N3 h, Q: K. }; _ BYTE nTmp = 0;
7 j' F4 {' @' m bool bDest = false,bSrc = false;7 @% K/ q, D s) o" _
for (int i=0;i<MAX_INVENTORY;i++)* P+ G* c- f1 C4 L
{ y* ?$ V6 m. c7 Y* s _3 Q
if (dwSrcId == m_Item.dwId)
/ Z+ X6 f- x$ ~0 z& ~6 |6 H! e {5 L# B) Z3 N) ~% s/ H' J6 ~2 [
//id相等 则 改变对应的dest和src
+ I c }/ m% k, D. X nTmp = m_Item.nIndex;
6 \2 S! U+ t" R; Z4 G, t# ^* b m_Item.nIndex = dest;( v: R' S$ U; s0 k
}
' A& L( E7 C2 c" l }8 \1 J, U( K7 q& E4 @- S5 E8 l( _
//临时数据保存完毕,交换开始) R4 x3 F% ~ R. W
for (int i=0;i<MAX_INVENTORY;i++)
2 }9 |9 W% J. W# h s {' E) m, q: c* h
if (dest == m_Item.nIndex)
3 E. q y, N4 t* p% r4 Z0 K8 Y) | {. j! H, A2 w3 j% @/ o. S
//id相等 则 改变对应的dest和src' X( X# K$ y3 ^8 ]
m_Item.nIndex = nTmp;
8 v% z% |) ]+ G0 N }( B0 Q: f' |. N+ z6 |" r+ Y$ u
}
! F' z9 {% F6 r5 M; r) b- C I}
1 b/ ~' D! s/ O3 w! W8 t};/ K, ^% f. b V( d1 i; D6 q
-------------------------------------------------------------------------, P$ h. S' {* h$ s$ s: F8 ^# y l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 I2 z" y( o' ]. m, h6 `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* e. J& t5 L: H紧靠其上添加:5 S) r [3 c2 H: p0 i. y
if( pWndBase == &m_wndMenu )
( k3 t) S) {- y5 g1 k4 ]{; E$ M/ K( A h/ m1 x" y
switch( nID )" z; u& ~) }' v4 I O! f
{+ b, U/ i, l' }0 R! _
case 2:1 z4 ^6 M" |1 ^. G1 D- I9 }1 u
{
* Y. K* X' {' t; W4 O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ ~: v0 ]1 N- n2 d0 Q% r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% I; O6 ~/ \+ W C& c {
$ p( j4 g$ w8 L3 _3 ~ break;
6 V0 |7 \. r) C( k* o& P" P" K }; G/ U% }2 o$ N- m$ E+ q- L& L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 r$ [, f4 z8 C4 K# o4 C/ l {/ I: g8 i' H2 K2 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ ?9 G7 {# E- b1 j3 M if( !pItemElem )' K, t" I& a1 _8 g
continue;
, k7 ?% y6 R8 a7 @) w& D! c1 `$ y if(pItemElem->GetExtra() > 0)4 v+ q( b7 J J w7 d% E# p
continue;
T$ H% s! o0 R2 u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( Q' P% m! \ |) m; b continue;
" {+ J9 o# f. I' `; _ if( g_pPlayer->IsUsing( pItemElem ) )
7 v; A [3 h# w continue;
& p1 ?8 j, {- I8 i, n if( pItemElem->IsUndestructable() == TRUE )
. S# }. @+ b% H: r8 \' m3 y* j5 q- [ {% ~! A6 ?0 z" M* E; J7 o0 l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 M! M; J% C! j) ^" [) @# Z& [% M& a3 g
continue;5 C% j4 d3 ^0 e! B3 g
}
0 A3 e. ?. M' k1 a; _ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 m( R0 z, u8 ]# V
}
0 M. A; v0 l+ g" X break;7 D) s: F2 a0 B9 e; C4 t: m
}1 l7 {& U, V& l
case 1:
# Z. U9 y; l6 h. J% b" {6 a {* |; G; z/ b1 L. Y6 S: A2 ~! ]
//整理背包
% h6 R5 C! {1 t( A* r* q } //////////////////////////////////////////////////////////////////////////
6 s3 C' E3 }9 \/ @2 s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% P- A# l% o3 G //////////////////////////////////////////////////////////////////////////
8 M, c6 g* [) `/ u! }* X L1 D //////////////////////////////////////////////////////////////////////////6 {- J/ F! c$ w
CInventorySort* pInvSort = new CInventorySort;4 G5 B `7 g+ j p" j M
vector <sItem> vItem;. J- d! f0 ?! I
vItem.resize(MAX_INVENTORY);//初始化大小
* {" ^( W' ~8 }/ v, i //////////////////////////////////////////////////////////////////////////" z# Z$ h: q0 F0 g3 Z* c
//填充数据" a( I. G7 D$ t
for (int i=0;i<MAX_INVENTORY;i++)1 r) b5 H/ x9 g5 e5 L
{" J/ ?' J( H, K' [$ k# z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* g, Y& X- S' b! z9 q/ ^% R if (!pItemElem)- k8 B5 f- F. G8 ?6 j
{
, X& q6 \/ a' n vItem.dwKind2 = 0xffffffff;. S( F/ H! c# S4 h& z, w
vItem.dwItemId = 0xffffffff;3 }" Q5 K! h! F5 `
vItem.nIndex = i; a7 N1 o H% ?; B# a
}else {* I! M, }$ O+ W G
ItemProp* pProp = pItemElem->GetProp();
X7 e. [& c/ L; V* W# F) [ vItem.dwKind2 = pProp->dwItemKind2;
% w1 ]$ ?9 u& I2 t/ R9 Y- u) Q" k vItem.dwItemId = pItemElem->m_dwItemId;
5 E/ L1 L$ L8 U p0 S4 g vItem.nIndex = i;3 R9 V# {" d) H4 a9 y$ a! y
}, t$ D( z4 k7 z$ {+ X& \( R% E( |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) }3 v# ^8 ?' l1 N }1 u4 C% L; N4 Y* r3 e+ w+ `
//////////////////////////////////////////////////////////////////////////
7 ~ Z, z$ @/ L5 T3 w sort(vItem.begin(),vItem.end());//排序
% K; B; C: G7 d$ |" F; v9 k //////////////////////////////////////////////////////////////////////////4 ]2 p7 h+ u3 D. o: r' `
//交换/ Z4 a- W7 L7 n( ]. {
for (size_t i=0;i<vItem.size();i++)6 m, s0 k% ]1 Q. L/ I9 N& l
{
1 v- n! o( u0 c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 D, C( e1 v8 _
pInvSort->Add(vItem.nIndex);
1 g- ~0 c& z f* m% H' J6 D }7 ?. G) t/ P& y9 U) a1 k
BYTE nDestPos = 0;
# t+ k5 t4 ~! u& H6 ^ for (int i=0;i<MAX_INVENTORY;i++) {$ X7 ~ E0 ~7 w1 u6 [ [0 o7 g
{
& E8 d+ t7 m7 p M( R$ X; K) r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 S4 N7 @$ d) z a2 l9 U if (pItemElem)
' l, s; s! ^6 B! I& W9 l {
* r9 @- z) e- J. G if (IsUsingItem(pItemElem))( M7 e6 u4 m0 [" [' [! o- N, P+ e
{
, u3 F' H1 j0 z //这个位置无法放
& {: ^, j3 K# L. s nDestPos++;
( l! t3 S, K8 B3 `8 _2 C/ Z$ w7 ` }- T) P e! u% X# ^
}" G& _9 F A5 B9 ^6 U! z
BYTE nSrc = pInvSort->GetItemSrc(i);# D' t* F; E& k, Q- U8 K \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( G; h" x( `! C* e
if (pItemElem)
+ A5 M5 J, N' i+ _+ |6 e {
: I; _4 L# @. y4 R if (IsUsingItem(pItemElem))
1 I3 d! v) d; f4 X' ~' C8 g$ U+ L7 _ {
* v2 Q7 e$ n$ r1 y% t: K //这个道具无法移动,跳过4 i y+ o$ B' ]- x: Y
continue;
S( B2 ~4 A2 h9 _5 B }
/ v$ J3 b6 B# F2 L" T' ?0 }0 F }else{
! W4 k5 m1 y F& O# c. ?0 x //空位置 不用动
5 s* b0 i1 j- l) J$ k; \# \ continue;
4 o& g O! Q( C: c( R; O }. U) s9 u' S; L x7 c: V% X8 c
//////////////////////////////////////////////////////////////////////////
) Y$ e% l7 P {" K0 x6 c //开始移动( M+ f) t8 r% e5 U0 y \' d, _! X" R0 Q
if (nSrc == nDestPos)
6 F8 E1 t( _! |7 B* u7 B$ ^! C {
! V. J1 H e: Q9 O- u //原地不动
" R' s3 z9 s- \/ V8 }0 s! J nDestPos++;- q3 |8 {0 A9 E8 A( L
continue;! Z- H7 V; L. Z1 A3 v
}) b# v2 B0 S% d) [/ t
pInvSort->MoveItem(i,nDestPos);5 R; h% D! N8 ~& d# y4 A) _9 v. ^6 G Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" s/ ^9 j* n c Sleep(5);: `# l+ U# ^0 W2 X; |8 m0 i2 S
//Error("移动 - %d->%d",nSrc,nDestPos);
. d& J7 H/ P5 l9 Y6 P nDestPos++;
) ?! b, ^% \) E; x# v }
3 u9 ^8 t+ Q# a5 w7 s2 P) a //取第一个元素的信息
- ~8 I7 S$ r; G" q /*5 U) m9 ?$ V+ K& R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ o( [9 Q+ `% j. h) G/ P: b
{
; G/ \$ G* a, u+ L! V. i: ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! B4 N/ p. ~2 h: q+ j @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ X) r2 ~, i/ i" \/ b
}, b4 W% g9 J, Q( P4 H
*/* E, @3 k2 q3 U) P+ D! F
//////////////////////////////////////////////////////////////////////////+ G1 u8 @& v/ L" S
break;
+ P; f' J& k. T, `+ B! d }# v. m x5 B: I6 s( m
}
8 i) k- |9 \$ A" |}6 k. [$ S( D( d5 i2 O
m_wndMenu.SetVisible(FALSE);9 q: b, X7 [" T8 @
' ^5 c) j- R0 z- `! V" ^/ f) T! P--------------------------------------------------------------------------------------------------------
$ R' G. ], P6 F, q* W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 r Q8 |9 U- i{
$ w/ T7 Q/ e# e" H' n, i3 h c8 D3 UBaseMouseCursor();
+ q% o8 ?6 [* n% H `6 ]- X}9 X n" c% M3 A& m2 \
在其下添加:
, C0 w4 j8 u! t; O, U5 j" D' Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; {* O; @. \4 D% d& _) ]4 Q% N{
( t4 `! I, V% H) [; Y$ O$ e0 f5 ]m_wndMenu.DeleteAllMenu();2 m/ z8 y7 W5 E
m_wndMenu.CreateMenu(this);
5 M! `! @$ u3 }0 R4 E: x) N3 y- em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ c+ @5 y* T, ?7 @9 ^6 J5 m
$ H W8 A, n5 ~( B( H* Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 \1 U; w/ {7 P. V1 X: s{
7 w# L" v' W( [6 A //P以上级别才可以删除所有道具
( {8 \% Q) n0 j) q N, y4 @( A1 I5 x m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 D/ B4 K6 M$ k}# }5 R9 T) M" S( v( w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 S7 z1 Y! `# H0 L9 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ l8 K1 b0 G6 |1 J8 X
m_wndMenu.SetFocus();
& b3 T! u) g% d# k8 l2 n}
H3 h, q( J, f* O------------------------------------------------------------------------------------------------------------
. v) p- y( ~5 R3 q" v: W*************************5 W$ m6 R% k2 y$ g# p
WndField.h文件
) U9 C& j8 X; L s# S3 E*************************1 X2 p, G R \9 h& J
搜索:BOOL m_bReport;* G- [7 P! f* H/ _
其后添加:6 ~9 G0 P2 S, I+ R
CWndMenu m_wndMenu;0 ?' ?( Z$ E0 |4 w% Q- V! ]- f% W( k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' g) i" G, l) {' l/ q其后添加:
1 ^ B! J% j& A1 ~1 j. h& mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 ^- S1 x( Z; j0 B% T8 i, c5 p) W: y6 ^/ u# q3 O- q. p' ?
# \6 ^0 i8 p3 K
|
|