|
|
源文件中_Interface文件夹下WndField.cpp文件% `) ?0 {: \9 J1 p# G8 e" v0 \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, a: q* Q6 G" C* i9 A5 i" n# } l
& A% B/ v( j6 L- u- Q0 M5 |struct sItem
& F& b& _# P; C3 k- @; ~{* Z0 k. K% _1 k/ i& Y8 h' o
DWORD dwId;
$ K( y: R7 P( ]: bDWORD dwKind2;* v% l6 g: i9 M7 p6 G8 u# R
DWORD dwItemId;
5 L7 ~( m+ Q/ B, V; ~1 d, ?9 qBYTE nIndex;
- V7 _* Y- {' [" hsItem(){
/ A/ Y; y: c) {0 Y6 v3 N7 D dwId = dwKind2 = dwItemId = nIndex = 0;1 x: T( V* O1 A$ v2 H. s9 k$ E: p
}
, Q! V# g# [2 k% d0 zbool operator < (const sItem p2)
+ B! s2 R, F [( Z1 |- x{
+ V* [: ^, S( I. B0 j! B* i if (dwKind2 == p2.dwKind2)
: M% ]0 G9 _- ~( Q, A {/ U5 {( R" L M4 w+ W" U
return dwItemId < p2.dwItemId;- [5 n- p& t, [1 M
}else{
- t% ?! v, P% @/ y5 c0 X* ?5 }( a return dwKind2 < p2.dwKind2;' T$ E4 B0 c+ ^) U7 f3 h! g$ k
}' G; I# G) Z; o
}
8 T P; g' m8 u* t2 D};9 ^7 p- `* F, k% U' s# v$ g
class CInventorySort+ `8 s: J! X# v5 X) e6 w* P
{7 ?7 \5 P3 w: g2 x8 T" m) U
public:" _/ P+ g" R: C% |' t' V3 a
CInventorySort()$ q9 E/ C8 D; q2 |1 T- f
{
) m \1 N1 K* }5 B6 w6 b. }4 N v m_dwPos = 0;. {8 m+ {7 j' q/ q X
}
% o/ m" X4 x \~CInventorySort(){}, b0 U5 |' y# w. t
private:. H) J; K/ L$ b8 }1 F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# i2 ?* ?( j6 ?, I: g. {& l
DWORD m_dwPos;/ T" F5 O% {% d: T2 H4 F8 A' h( D
public:
( J% y/ W) k- C1 _4 s2 G, F# [; L `void Add(BYTE nIndex)
! V v C5 v" F( N3 f{
0 b% }( h2 [9 U: B% V( |) {+ v+ V. p1 X if (m_dwPos >= MAX_INVENTORY)
. Y! u e% G3 m3 ^( g" F' k' { {; z/ l$ k8 M8 h. @
return;4 O" m/ n& v5 A. v8 q
}
7 l7 |8 v6 y1 }+ n) D# [; \ m_Item[m_dwPos].nIndex = nIndex;4 s4 o2 J0 r2 Q& a
m_Item[m_dwPos].dwId = m_dwPos;$ D9 ?6 n& h7 o' _- y% T3 d
m_dwPos++; ~. N9 X& L, ]( V% n7 ^
}) }) U/ A) A' w6 k6 s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* R' R) ]7 G. C( A5 B2 C$ U6 I8 _{5 H. m- C3 X6 S# P/ X
for (int i=0;i<MAX_INVENTORY;i++), r( y6 V0 n- ^1 j
{
, j8 P6 `# t( f1 \# r- X5 }4 q if (m_Item.dwId == dwId)# y+ H7 ~3 {2 ~7 j/ i
{
+ M$ f+ u9 d% m' m2 h return m_Item.nIndex;
2 H# k% L2 c* ~* \6 c, J3 n7 {0 D1 Y }
! B5 @9 V1 N1 [ }
) x; C$ w& I& ?0 M return 255;
- U( v% h* q. Y* F4 r, j6 K! q% V- h}2 z4 s8 d0 m1 W5 j' J+ Z7 @1 v( {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' q8 B1 w5 `+ t* Q" o# P7 S3 h* K6 \" K
{ l4 b' d1 A/ f4 I
BYTE nTmp = 0;; u1 u/ A5 D; P
bool bDest = false,bSrc = false;7 X+ D1 }1 q% g; ^. j# `. g9 @, G
for (int i=0;i<MAX_INVENTORY;i++)
" b' S1 V1 N- F; ]1 [2 M {
1 q2 Q @- Q& s" i: Z; M if (dwSrcId == m_Item.dwId); F9 r! x& t3 _5 T
{
- G; Y4 t* \& {- ^; [2 I //id相等 则 改变对应的dest和src
% d, ]$ I6 s% L& u nTmp = m_Item.nIndex;; e" e. o3 K+ i) H
m_Item.nIndex = dest;
4 F7 V, ~( I1 t) }3 q }7 E6 _+ I& Z5 i8 [$ Z5 V, F7 x
}
! O5 ^$ v, R$ [' r0 C# D* A //临时数据保存完毕,交换开始: Y8 W3 r. z% B2 D: e
for (int i=0;i<MAX_INVENTORY;i++)
2 r- s7 B+ ^9 }# R! Q4 w {
8 B! B7 ]# V# w* {# A( }$ A8 \ if (dest == m_Item.nIndex)
9 Z3 ^( t( R0 e" o- K3 x' k {
9 @0 J) R. _8 w* B9 h+ f; i7 q( ^ m //id相等 则 改变对应的dest和src, m! t5 T' M& l1 u* j+ U* T3 ]
m_Item.nIndex = nTmp;
, L$ ~$ n; J; o& h' i; a }
; f1 Y. w+ T- M4 m }
& ?2 u+ t- `7 s- m% w% r}
# Z4 t, Q% c9 E};
2 |/ n+ `/ Z3 M4 V) L2 w( C-------------------------------------------------------------------------
4 G7 v7 B. I0 M: I5 k/ g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 O; y' q1 b' E! d! v8 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 `% @- H0 J* V2 {4 u; \紧靠其上添加:
9 a; X* p" t' e/ Jif( pWndBase == &m_wndMenu )0 i2 G* x* p! m+ i( b
{
: I* R( G- q% D4 j switch( nID )& N0 p2 y# r E/ ^3 {
{' I1 `3 f- u! Q* n2 B
case 2:
( T! a8 E |! z% t) o {, H8 i" W" p ]8 S7 V4 c3 n4 L* K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" r. Z8 Y8 s& T9 s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& `/ R8 ~, V- n% N$ i$ H+ `3 [$ h { x8 s/ A. P" P1 R
break;; j: U# ^7 ^' A
}
+ w1 M) R) ?: k, f6 S! W2 d# a7 Y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 b% _, m: u1 Q+ \4 Q {
- _3 _) ~: s% ~* c0 ~& O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 E) l5 x: G- E9 {! O7 J% s if( !pItemElem )5 }" a- C$ i& @; l+ u0 V. V
continue;4 c% M6 `3 _ R2 z/ I5 f' t- Z" W
if(pItemElem->GetExtra() > 0)
$ `- U k. x) O9 t continue;4 x0 g* ~' E# s% q6 M! Z: Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 t9 C8 `1 y0 C continue;
% A! w7 H2 F7 L. b* Q% `: M if( g_pPlayer->IsUsing( pItemElem ) )7 U: p1 d4 \3 r1 w# m: y* {' F
continue;
) c; C+ L6 S7 c$ `6 s; x/ k4 I/ l if( pItemElem->IsUndestructable() == TRUE )/ }' _/ l: b3 G$ t5 b
{
" d( g/ ^! o/ W. W2 L: F! s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 Z/ M/ b5 f |6 s' P continue;
5 ` e A, K% U v! s2 k9 q }% M; s# ^9 ]. w5 M* M1 g$ f5 |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 k, Q! v; Z N
}3 H& Y: E% w2 o. q
break;) F' S: t1 d N; M3 p# `- O% u
}$ a) }! m: m$ ]6 ]
case 1:
. x8 L& r( ^; c {7 X/ [" i$ Z9 k, d( h- Q4 ~ d
//整理背包8 l, F% F. @% h& v. K a
//////////////////////////////////////////////////////////////////////////
! W& y+ B+ E* B7 x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 A1 a4 x! T' l! [1 n6 l: h //////////////////////////////////////////////////////////////////////////
& u- [# _+ a: y/ X7 j4 f/ ` //////////////////////////////////////////////////////////////////////////) `! ]0 P4 s7 Y, \
CInventorySort* pInvSort = new CInventorySort;* N' w* d% L2 q) F( N$ e7 {
vector <sItem> vItem;* O6 H/ r: h7 }4 G- J* n, T3 E
vItem.resize(MAX_INVENTORY);//初始化大小
# L7 j! d" |. {; G. L* E/ Z //////////////////////////////////////////////////////////////////////////! F8 N# i# ~% k# W3 C4 @
//填充数据, c( ~+ Z* d5 w3 g8 ~; g; o
for (int i=0;i<MAX_INVENTORY;i++): R! i1 I3 Y: r, e$ q6 _) u; J
{4 S( `# c. v* p4 |' `1 l* m) Q. m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# X5 `/ C* d- {) V' g" ^6 R7 n if (!pItemElem)
; g- S6 M- U# {- B4 h4 s {, R* n6 T* G7 W; V' E" g
vItem.dwKind2 = 0xffffffff;3 C% d7 f( b M
vItem.dwItemId = 0xffffffff;
2 | s- T0 W- x4 V& _ vItem.nIndex = i;. e4 Q5 `8 p: `! q0 `' g+ M
}else {3 r9 \, x0 n2 ~- L- F
ItemProp* pProp = pItemElem->GetProp();
\, N' H" M! p vItem.dwKind2 = pProp->dwItemKind2;" F9 s. N/ x5 j* W4 ^7 C( y
vItem.dwItemId = pItemElem->m_dwItemId;' T0 C; F* @+ G! Z7 a R' x
vItem.nIndex = i;
; T2 n0 p* f0 N }6 F2 S# P: q( H. F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! v0 r, o6 e5 g- Y& L }4 b4 f" T7 A$ m
//////////////////////////////////////////////////////////////////////////
4 F6 s. h4 P3 s9 ?6 } sort(vItem.begin(),vItem.end());//排序
, m) o( s; Q4 z //////////////////////////////////////////////////////////////////////////+ v4 l% I' n4 c! m. i
//交换5 ~7 w' P4 J/ g2 B6 L5 k8 ?
for (size_t i=0;i<vItem.size();i++)
% K" Y! E3 A! ? {* l$ r4 _1 t. O* N) U6 ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' D, l* T7 B7 T: ]7 U; _
pInvSort->Add(vItem.nIndex);" D; G9 X6 k e* b$ |3 a, q! Z3 x9 P7 y
} k$ y" L( b" R$ Q
BYTE nDestPos = 0;
, Q, a+ U: P2 v for (int i=0;i<MAX_INVENTORY;i++)$ U: B* z: u" {5 k$ h
{# W$ E9 M$ L! p4 t; v1 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; P% Y5 Q3 W& w; U; Q4 s
if (pItemElem)8 X( _4 w9 D' j3 O0 l5 d& `* F
{9 T& f7 d' s* y4 Q6 X) _ V
if (IsUsingItem(pItemElem))4 c/ C7 \# P: L" m& b
{
0 w* _/ V) A" [* n //这个位置无法放, W7 Z p- r$ R6 D% s; i
nDestPos++;
/ k( h3 Q7 Z: c! C }
; }2 }8 Q# X% _" Y: r' O }
. T" @8 S3 Y) n' _6 i BYTE nSrc = pInvSort->GetItemSrc(i);
$ c: G' O( U; [: \" o8 l1 } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 }$ G3 x. k3 Z q2 l3 [* e( G: X
if (pItemElem)
9 b7 q" A# a4 [) v/ C# o3 C3 a& K {, {) n* ]) C1 J @* ~$ T
if (IsUsingItem(pItemElem))
6 Z) X4 m1 v* a {( z7 @; S: e+ h: W! G( f
//这个道具无法移动,跳过7 K* Q9 \% J2 C# O
continue;
$ o7 l. S1 H, p8 [ }! q8 P3 d2 Y+ _% F( K% ~, D* d
}else{. J2 j, N- ~! v; R! U
//空位置 不用动) }$ k4 T/ R4 r: `2 T! v+ J
continue;" t( F) {& B* g/ m0 e- g6 D
}& S1 M. Q7 S! j6 { U
//////////////////////////////////////////////////////////////////////////
1 {3 B4 K- g- c% M0 M S //开始移动
$ F8 D6 l8 {/ P' r, c if (nSrc == nDestPos)
0 ]2 I! n1 b% j7 O- O, J {" U$ T+ g" j% N- F" K( R
//原地不动
6 e% r6 g% M. F( Z2 p nDestPos++;
; ~6 A4 w/ s' G- ^; ^1 ?6 a continue;, H1 o2 k+ e5 P; I' ^; t+ Z
}2 q W- Z9 q# y+ C! w0 k
pInvSort->MoveItem(i,nDestPos);
6 D& ?- F* K, i6 _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! G2 J9 D/ L B1 N Sleep(5);
9 `1 J5 c4 F+ O0 C //Error("移动 - %d->%d",nSrc,nDestPos);" z3 x* k2 p; I8 E8 ?) @2 A
nDestPos++; E- \, O/ l' i$ r
}0 x, H6 C& Q. \) J6 \: e' `8 J5 Q
//取第一个元素的信息$ q- N/ |9 K. H# q: I' \$ T
/*& x3 ^2 @- H" n, a( m$ i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( M* h9 ]6 \7 l4 Q/ e
{# `9 c3 X$ s# a, G/ \6 h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 C( P4 N+ l. _4 ^- }; @) V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 m3 D# |- w1 ^' H* f
}' R0 V8 \+ R( P1 s
*/
, ]. P* o- W( a/ o5 h //////////////////////////////////////////////////////////////////////////
, ]8 |+ i! F/ c1 B' f7 D break;& p# w1 I4 ]) c) t. i
}
, Q! z! \) |4 n3 N8 X8 ]2 Q }
7 L* H. f7 J4 x' m( z: d}) k+ ^# K$ f( x8 O. R; S- x
m_wndMenu.SetVisible(FALSE);' P: v* z$ D0 k H& Y$ J
9 _0 ~1 q) H5 E3 ~0 N( u; L
--------------------------------------------------------------------------------------------------------' V n: Q" z8 K- }1 d. L
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 o! d! e% \! Q5 e{* e6 R' S Q, k- q
BaseMouseCursor();
2 ]3 Q- T( P" I i f9 ]}/ l4 D N) M/ u& C. m
在其下添加:
) ?# I6 F3 H" ` evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 f& X" ^. E( H$ d{7 P. X: S1 v+ d! {+ A
m_wndMenu.DeleteAllMenu();& y5 N9 q- ~1 R/ m6 }0 e4 |9 Z
m_wndMenu.CreateMenu(this);
4 s5 v1 U. ]4 l( e B7 F; N9 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 S) f$ h( C A; S6 H5 t; {2 ^, o7 {
8 p. c L# D e5 ?' `" g) H7 Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 g) s I; W. s
{
+ O7 Q! H" t# ~7 n$ G% f: `9 U //P以上级别才可以删除所有道具
* o8 i) o3 v$ {& J$ n1 T8 r' M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; v v% |' n- v" ?0 x& `}5 _! u' _* C5 j |2 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* Q: B' Y, O) o& y! C2 p& |: Z- Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 `. ~" V; W. y c$ L; D: {+ |
m_wndMenu.SetFocus();
: t) l( w6 _1 f# G/ s4 p5 I. D+ e" f( x}2 a, q2 u! s" l4 o
------------------------------------------------------------------------------------------------------------
$ b' A. [; K! T- k9 j8 `*************************4 \/ ]( h- ~% U# n) g4 |( @0 \( t0 J
WndField.h文件
/ ]9 X8 g1 q, X/ L1 }0 a*************************
. ?+ F- c( l% O3 }, w! h* z* R搜索:BOOL m_bReport;$ j2 f* n( ]; \
其后添加:
4 K$ V3 o n4 C0 gCWndMenu m_wndMenu;1 I: \1 x, G! T- {6 e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* D2 i: W" S; c
其后添加:
3 f$ T+ q% ]' |virtual void OnRButtonUp(UINT nFlags, CPoint point);& z$ i+ }( W. l3 T: A; i0 X! \! S8 z, R
: |0 \* y8 S+ x0 u, H
. X K7 h. g5 B |
|