|
|
源文件中_Interface文件夹下WndField.cpp文件* x, `% D, A6 m& e3 W9 g9 I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 I4 A, I- ~7 ]: }: r& ^+ F9 F2 m7 ~# c# D% r/ ^% d( l& f
struct sItem7 M" r: z7 m1 b7 V' W2 w
{. d% M9 p3 {! |. p
DWORD dwId;
$ ^5 s& u6 h" E% k' }DWORD dwKind2;1 x8 y! U# j, L
DWORD dwItemId;! s9 J5 M: n; ?1 T( ?6 V
BYTE nIndex;
! b4 v, C2 g4 j7 E9 R6 A6 GsItem(){6 g( L7 D) s& S" b) b
dwId = dwKind2 = dwItemId = nIndex = 0;
$ R* d" K: o& w# T}8 q1 X- o/ B; Y: c
bool operator < (const sItem p2)
9 P8 c( }1 [% m3 _{. m6 C! g3 t8 o1 @4 ?( s
if (dwKind2 == p2.dwKind2)
9 [! M j0 n C {
8 I. Z, q# i; A9 U) v: Y6 D return dwItemId < p2.dwItemId;" j* b# G ?( k3 G. W
}else{
$ ]$ y: @# H' ] return dwKind2 < p2.dwKind2;1 n U3 Y$ d& n( l8 C c
}9 D, I: z+ g7 q' V
} \6 ?; V. O2 r5 _+ R) h7 Y; O
};8 L1 I% U: g0 {( ]" y, _7 O
class CInventorySort
, Y' t) b" H+ x C( Z$ h) y{
% x+ s7 z# Q" Cpublic: H: [3 d2 L! h% d$ p& A
CInventorySort()
8 X7 }9 o; Q5 J" C; _) B{
0 D% e7 Y5 |" e" P" F& t m_dwPos = 0;
/ K1 U' B' ~: Q; u: |0 R7 l}
6 S/ L/ U1 V! t5 i~CInventorySort(){}. v9 i8 a& e8 W- l! T3 @* d9 v
private:
' x0 D7 z! B3 ^' ?: Q {/ Q+ h" OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. l( _+ N' B$ t9 P- Z
DWORD m_dwPos;
* B9 R; M/ P& d& A& Ipublic:
) [ c9 u- ~- C5 u( a) F) Mvoid Add(BYTE nIndex)8 V+ Z; G0 Y9 V c; G! s1 I
{
# N9 R% i. K# y. j if (m_dwPos >= MAX_INVENTORY)
0 W" e8 u- \8 Y9 D6 C6 f {
8 t9 T1 M# g( T% Q5 y& z/ r return;
" P( W: b& x. a7 p. g0 M }* [( D. h* l0 m/ `( Y8 `. ?+ M& f
m_Item[m_dwPos].nIndex = nIndex;
1 x; D% U6 k; c2 K2 O m_Item[m_dwPos].dwId = m_dwPos;
3 n; @ Q- l7 S( q. H" D& Z9 r m_dwPos++;! t8 U& ~! O/ g# Q6 A, e. Q% \
}
& U* z, F d+ e& W( DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ t4 K+ y8 y) p8 W8 _
{
) z. H& Q4 Y% `8 ` for (int i=0;i<MAX_INVENTORY;i++)8 W9 `. k: b: h5 ~ l4 b
{
; Y$ B1 Z. u2 f4 Y0 N9 `. m if (m_Item.dwId == dwId)
* H! k& \: S5 P {
2 S# s" Q" W1 q. a2 _7 ?) c4 c return m_Item.nIndex;
, Q. I8 i8 m0 t$ S& S }8 G# z6 k& Y3 e7 g$ ^2 W6 H
}& E; F1 w% s/ N1 y. l
return 255;
2 B4 P* {% @; Y4 R}$ @/ G6 m+ |( u' C/ w# Q2 G+ f$ v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: ^1 G. F- N% h8 }
{
) G7 P4 A- a% | D BYTE nTmp = 0;& @; Z; O$ p/ S/ t: N
bool bDest = false,bSrc = false;
) S5 n; s1 M' r: @3 ~! z1 o! u' J9 r for (int i=0;i<MAX_INVENTORY;i++)
+ O- o' [3 {. f$ Z# n {1 y# @: W% M9 v/ O
if (dwSrcId == m_Item.dwId)! n# A0 Z4 r- a
{
! ?8 z- b0 n, \8 y+ R$ n //id相等 则 改变对应的dest和src
+ R8 L2 }& q+ x1 |& C nTmp = m_Item.nIndex;
' t1 v6 b: o/ D7 l m_Item.nIndex = dest;, b$ I& ~& j* d" H8 E% T+ B! s
}
4 G+ v) x/ d) } }* [8 z. M: J+ i9 n# T' e
//临时数据保存完毕,交换开始* z9 f s) ~5 o% x- x% S' z5 e
for (int i=0;i<MAX_INVENTORY;i++)2 w$ T1 W3 W% i' S& y
{
9 ]7 g5 t- u/ H+ B8 }) ~8 L8 L9 t" q( e if (dest == m_Item.nIndex)
1 V( v4 ]2 |; a4 z {
" D$ t: ?; g# x2 b //id相等 则 改变对应的dest和src
3 u* A" F' P4 G9 X" n1 ] m_Item.nIndex = nTmp;
) Z' q8 e% Y1 G0 @4 A }
/ X! o8 ^; ?1 I0 c& @/ M$ `, {9 E }
: [( D; N) G$ S2 g( T* f}
; ~$ w: r3 \. A, k7 _! M+ v) \};& C2 Z, ~. W5 V
-------------------------------------------------------------------------
. {! u6 S4 p! R" n1 ] [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 X# w) [6 N3 \0 x' F3 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ j, ?& ^4 @# O! W7 a; ~# G紧靠其上添加:0 T* f3 C5 W2 U
if( pWndBase == &m_wndMenu )! @1 ~# u: t% R- q6 C# [0 x5 z' s
{ E6 ]! I6 }2 k
switch( nID ); O/ J/ ?$ I# W# k5 J3 k5 _* s. @
{
7 z6 o/ c/ v! `9 g/ n case 2:* I/ |$ J; I9 U Q
{6 z: X% h, i* }' S+ r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 n5 [8 V q; e. d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) X' N* V Y2 k5 ^2 L
{1 J7 Q; g2 ?9 ]6 G9 A, ~
break;
! h/ P& {( t3 ~2 c" @" E# d }
, D* z1 X# V$ o" b! z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); N3 x; o E$ b5 b0 E, Q- O: @
{/ }- a0 h6 a1 P! x# {" @5 z1 u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! A2 Q; f. Y+ c" h: R' V4 C0 `+ l if( !pItemElem )# r" c# q- T! n3 N0 Y! N1 Y) G
continue;* I2 N6 _; R# Y! U: K; O
if(pItemElem->GetExtra() > 0)! Z! }1 j4 ^! N0 [" M
continue;4 t6 r' I7 [: I# z" C) ]9 m
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " c* G& w# j3 G- v4 b
continue;( h) {" X) U/ U; I8 J0 P9 C+ B
if( g_pPlayer->IsUsing( pItemElem ) )
( q5 a) ^3 A" C: A% } continue;2 b- k. r" ]+ q! S( w
if( pItemElem->IsUndestructable() == TRUE )
" e: _, |# f2 K( k1 J {& w. c% p( k) \$ |6 U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& R" V" _" S! r" Z- O, x$ ^8 r
continue;) ], |7 e* g- i9 W4 c
}
" |) Z' c$ b) @% o( t* Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ?& l" v6 [! A" K7 i }$ K1 q5 }3 J; I8 D- E
break;" I, j8 a% S* B5 x B
}
6 F5 w0 V$ d" k5 q2 Q case 1:
; t- ]; b/ q$ }7 d( l( j; ` {
/ Y1 F( W- g" H& k: e% w9 ^ //整理背包
9 r: f5 x2 x( k /////////////////////////////////////////////////////////////////////////// O7 U; D2 x( A! `
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* n3 S5 r. Q+ T
//////////////////////////////////////////////////////////////////////////
$ b0 m4 Q1 J* a" O; t" L //////////////////////////////////////////////////////////////////////////
- b6 D9 v5 x. x7 i4 w+ M4 g CInventorySort* pInvSort = new CInventorySort;# [ p6 t. [) ` q5 Y3 h
vector <sItem> vItem;, P6 h) U+ C! v: F7 s- i
vItem.resize(MAX_INVENTORY);//初始化大小7 T% Z( m* b; @, j
//////////////////////////////////////////////////////////////////////////, ?2 |/ C& @( }: |3 R8 O
//填充数据0 a( [( @! }9 w* ?% k
for (int i=0;i<MAX_INVENTORY;i++)
# [1 d! H, p& p {
3 N" T+ z) j( \- g2 n8 M' m. A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 r9 ^# r: x# V# U- M% d if (!pItemElem)2 D% x" A. C d. U* N. v; U3 I: i m
{
2 ~ M! G: a5 ]; v: |/ X8 e vItem.dwKind2 = 0xffffffff;
- H; {/ i7 {; C2 u2 j vItem.dwItemId = 0xffffffff;
# J: l: { ]4 k) J1 v8 y l vItem.nIndex = i;. P- s+ W: h, }( d2 K
}else {. [( U" ?. r I
ItemProp* pProp = pItemElem->GetProp();
7 u2 O) g1 {( _ vItem.dwKind2 = pProp->dwItemKind2;
# m' }2 q# m5 [( M; o$ a5 p- Y vItem.dwItemId = pItemElem->m_dwItemId;
2 S9 j- C8 e& v; \ vItem.nIndex = i;. @9 Z. I8 `5 x$ P
}
; ^ V) f" H( t2 c0 U3 b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Q! Z0 h: t* z/ ^0 F( R$ x
}3 P" b$ n6 j1 x
//////////////////////////////////////////////////////////////////////////, M' L/ y! m( V3 Z C& z$ J, b( _4 d
sort(vItem.begin(),vItem.end());//排序" a$ z, G5 K3 G& {
//////////////////////////////////////////////////////////////////////////
' }) R( G& u! T2 l; [5 n //交换/ z* h: M) P7 E, p( w8 a4 w; p
for (size_t i=0;i<vItem.size();i++)
* ~& T, f; |7 `, V0 h3 O5 d- N' x p {# l- ?" |5 o# o7 ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& @0 r4 S0 T9 [9 E" K
pInvSort->Add(vItem.nIndex);" X v* `8 x* v0 R& E/ B# V
}; Z% v7 q& l( b% a( l( n
BYTE nDestPos = 0;
, g$ x4 x8 G; S) v. |/ c! i for (int i=0;i<MAX_INVENTORY;i++)
& C0 q7 Y" N- {5 ?6 }- Z5 z- a {
9 w$ r$ e( b# R9 t9 H6 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ L0 l, |, D, R
if (pItemElem)1 r) P7 i" S3 W# g! I' f
{7 X! f5 s! f' o8 X
if (IsUsingItem(pItemElem))
+ Y: g" j2 j7 a: D# Y0 o+ ?( m9 k {3 \3 W }$ `) a
//这个位置无法放7 f% S0 e) O; ^ h/ c
nDestPos++;
3 \) o# E1 I0 K3 X$ [1 r' [: o, H+ w$ L( S }8 H' c( i. Y4 N2 t& c
}
5 j0 T1 a3 |/ T# T BYTE nSrc = pInvSort->GetItemSrc(i);
. K, r9 U( A" m! U6 C" g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 |. K2 D$ o# y$ u# K6 o- G if (pItemElem)! y& H5 I, a4 g# ]
{
2 b$ ~; C/ N( b, l- j if (IsUsingItem(pItemElem)); }7 k5 ^$ T- T: A- X
{9 t" d7 q9 |4 ^- O8 F
//这个道具无法移动,跳过
3 Z+ X* L. G; v+ V continue;: U3 c4 c' G" _( v2 H
}: W3 O( ^* O2 d s/ n- r" V
}else{2 t* S" A! B$ h0 j6 p
//空位置 不用动# x1 G" y7 M6 B8 @" e: P' y
continue;
# v D3 a! D, W8 w, N }
7 c+ Z# [5 l K! N4 o //////////////////////////////////////////////////////////////////////////
& q* x9 p9 z: x //开始移动$ ~3 Z6 H$ n* H8 q5 E
if (nSrc == nDestPos)& H: d& c1 D. S8 ~6 H
{
& @" R5 A: Y' f6 P( _* | //原地不动0 T* {8 G& m1 s! [
nDestPos++;8 p" B2 ^- o+ ~: M: l
continue;- r3 b; }7 C3 N
}
% D; B% Y/ x: F- H pInvSort->MoveItem(i,nDestPos);
9 z9 q& R; |- _3 k- k g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 E0 V8 b, O' ~$ q G Sleep(5);
0 z! I& }6 e/ A4 d //Error("移动 - %d->%d",nSrc,nDestPos);
4 m) z" T: n: y* R; u nDestPos++;
( i. [3 V6 `$ M: ?) x% Z }
" Z+ |, N0 |! t) } //取第一个元素的信息8 t; b, B8 {, x1 O: v4 |
/*
9 d# c' f7 b6 y- ~* r if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' N' v0 F I0 \) T+ A' t2 Y {
4 z) H% O( H9 V) |1 | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; M0 X6 P) Y, j! S" L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 c% M. o j1 l n1 Y: z4 K
}
4 R4 a5 O- K9 |1 `- w- I% l" S- \ */8 x( J, \ r5 J* d1 [3 Q
//////////////////////////////////////////////////////////////////////////% ~' }" @0 @# Q3 d% X. k" q
break;
5 L% ?$ G% k7 L0 H2 \# Z }
8 L0 [0 d* t& [; _0 L2 ?/ ^( |$ Y# A$ P } 7 t) [/ V/ B! i9 t5 b
}
* ^1 Q2 W. s7 J* k. n3 E6 K, e4 ^m_wndMenu.SetVisible(FALSE);9 y) p) A* v0 `# k
% I5 \ \) I5 P
--------------------------------------------------------------------------------------------------------
3 N( m$ b# C) p8 z! N" A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* y& [9 v! V% M7 D
{: j2 u' W! u: R0 R: y
BaseMouseCursor();* S6 {/ B# ?- ?: f0 m9 n# g o
}; F* }) w. G; C; x2 K
在其下添加:' l) E' q- w1 H5 D' A% i: G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 B' l% g4 Z, R7 }3 `{* z2 V& V& M2 {! L% |: E; q
m_wndMenu.DeleteAllMenu();3 T2 r/ B! k0 b' ` D H" g
m_wndMenu.CreateMenu(this);
, s; l- R0 g9 t; Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' a' m; F f5 k% d6 _$ T% S, \0 x, h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 t. i. j$ d: T$ W{
4 G4 R, G/ O. o4 \ //P以上级别才可以删除所有道具9 q3 c! w' u; R) e; ~$ K7 Y0 C" f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. `; @6 W6 m6 D2 k) S0 t9 w5 v
}* o+ N# l; B4 `5 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# w0 Z. y1 E _( z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& _: a- d( i c4 z1 }; [' q( em_wndMenu.SetFocus();
5 E: l. U, C3 G i" W}
, @+ A3 U3 M5 q1 i& ]) D------------------------------------------------------------------------------------------------------------
& i8 Z# Z. V; m1 K4 U*************************
K g% \ L! a0 h+ OWndField.h文件8 K0 f4 n9 u% X& S" o9 P9 G
*************************8 ^/ E7 m d2 @# [9 i
搜索:BOOL m_bReport;$ z* O% r6 `# X9 v6 y. u
其后添加:5 M4 Z5 `2 |! y, b7 V
CWndMenu m_wndMenu;
0 Y) m- M/ m5 K8 M E2 X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) w! \* s h) o6 X8 ?! b3 t9 @
其后添加:* H, M3 m4 }( N/ G0 J7 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);% Y2 q$ h F# Z u
9 E' z1 h u: }# ^: v
, [9 d! p" R+ s& w4 N" _2 u
|
|