|
|
源文件中_Interface文件夹下WndField.cpp文件 k+ i, ]9 l s1 O. r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 z& V7 N0 R) s, F# d$ z2 ]5 V6 T) v
9 b; Q0 n. x& T3 d4 L8 e" ]# K
struct sItem$ n0 \: G. p1 F5 h
{
+ L) W" L1 r7 YDWORD dwId;
! E4 r3 M. k0 H( J% U, @1 oDWORD dwKind2;! F. Z9 L8 u. k; Z: x' I7 u* ~" f8 |
DWORD dwItemId;9 `4 h4 w0 n9 |+ B
BYTE nIndex; a9 h( p9 q9 P
sItem(){
1 x* k4 F6 d. g/ Q dwId = dwKind2 = dwItemId = nIndex = 0;
; @4 P! U5 a* F3 d! g& x3 U7 C- ?. C9 m}
' ^3 L6 ?+ k$ }# H- s7 gbool operator < (const sItem p2)
# H+ s r& E$ V V{( F' X: `, ]7 T0 X; Q
if (dwKind2 == p2.dwKind2)3 _" \( l$ x. h. ^; F
{0 y/ Z8 |; L& i6 E/ ~2 S9 o# k
return dwItemId < p2.dwItemId;
0 E! Q1 B7 K8 Y% z; j* w0 t }else{+ \% E; C: B# C' V. a
return dwKind2 < p2.dwKind2;) Y% A( Q2 p1 g. V4 W; l7 R
}3 u8 {" b* B/ I( K( W2 a( ~4 Z: d
}! Q4 o* T. O- U; K
};! V! ?1 D7 N+ S" j" p) w+ v6 p
class CInventorySort* ~! i$ }* D5 P8 R
{
2 E' T% K1 u& g1 c1 Fpublic:
! N, q |( T9 G6 s2 B, H1 sCInventorySort()
! W% a+ v8 V% Z9 u; E{2 x% P% m/ |3 d% L
m_dwPos = 0;. F# }0 r6 h: v/ N
}
$ P6 s0 N: Z: G8 M& v~CInventorySort(){}- Z# V: s" o2 }$ O( I, J+ \9 h
private:# b: {( {; ^. P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; {4 j7 \0 Z3 A9 \. s w$ gDWORD m_dwPos;
$ i% q+ f1 V6 I' _/ u* npublic:4 C$ y& B4 }+ c, ?- e( f
void Add(BYTE nIndex)
6 T5 s' i4 ^, X. Z$ | Z+ m5 _{
1 P7 l; K$ e* q if (m_dwPos >= MAX_INVENTORY)! q, k7 A0 D3 g/ d* b4 ]
{
$ R0 }" x0 L) \4 w- X1 w return;
9 H4 [2 _% |6 {# `* p) h, b. q }- o. |3 x& M2 J- J$ P8 d
m_Item[m_dwPos].nIndex = nIndex;6 y) J0 P& j2 ?
m_Item[m_dwPos].dwId = m_dwPos;
+ K" h( B3 F3 s8 K, d% k9 ~( h m_dwPos++;# B2 K1 e& s+ P( Y) L: P) p3 ^
}; x! {- r8 w' m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! M8 G9 h8 ^+ y8 J1 R1 e{
' C- c! r( j% t7 c for (int i=0;i<MAX_INVENTORY;i++)1 q/ k2 O# O) P. o+ p
{; K7 b- z( u4 H
if (m_Item.dwId == dwId)
( D" N- I! w* B9 s {, O+ Q: Q" w8 Y; _& j3 W* d
return m_Item.nIndex;
& E0 X8 s' g& ` }4 R ?: J$ R' M8 r) a
}$ O) h9 C) c0 `# E1 t+ K
return 255; g$ g$ l1 e! C6 d% W, j
}# Q/ x: [2 C1 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 W) J0 E: [2 \) y& N- l9 d! W
{
' O8 j( Y( z4 v* y0 m BYTE nTmp = 0;
3 U N0 T9 ?8 f6 ] bool bDest = false,bSrc = false;
* p( l/ n. P5 g- {& P1 W! n( k for (int i=0;i<MAX_INVENTORY;i++)1 s8 ?$ o8 C& q6 v; c+ Y
{( U8 ~" K' f+ d8 r& k
if (dwSrcId == m_Item.dwId)( e$ w* @8 K: T# P
{
0 w% z! R" D _, y& ~ P //id相等 则 改变对应的dest和src, C1 H$ [- h4 o$ |
nTmp = m_Item.nIndex;6 u! h( I1 I7 N& s. I: R% Q) A
m_Item.nIndex = dest;6 a; ^8 h: l! Q& G! Q
}4 ~# ~0 p: g O" Q7 z, Z
}
. `( a1 r3 t1 Q- X$ \/ n- _ //临时数据保存完毕,交换开始
) X* e) f9 ~4 l9 g! W for (int i=0;i<MAX_INVENTORY;i++)2 [' O) j( ^- g' W, ]3 a
{
3 ~6 L4 s# @8 P5 p( A& ]2 D* D if (dest == m_Item.nIndex)
5 d% f4 e E5 Y5 r {* A0 @: r! t2 Y" O) G. y
//id相等 则 改变对应的dest和src
( G+ S# i# f( Q4 K. e m_Item.nIndex = nTmp;
- w( T- i" J: [2 @5 f }
8 D2 h5 {. r( x' W4 g( f7 A D }
9 t% c$ c- s3 q6 v}1 F5 V% a; n# [, L) S6 C' A
};1 t5 C4 b) E1 H3 g8 @
-------------------------------------------------------------------------. c; A F2 v- T M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, n9 K1 V C9 a, W* e. r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 N2 \( e* [2 O/ E' O3 R
紧靠其上添加:
) h2 y# O* u, |if( pWndBase == &m_wndMenu )
4 u7 ~" ]- W- E+ ~1 y3 j, m A{" V0 A6 E& U) [! [4 L9 s
switch( nID )
( y# p1 T4 y w2 f& w( y {
2 G1 v; B; z7 K$ V case 2:% o- R$ y1 J: D$ Y' K, _) j
{
0 y+ T7 o1 K& E) E1 @- o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
L5 c. S6 w, |; Z& ]2 o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 b( x2 U) B, m3 M" j {
, @9 S; l6 X2 r) z/ ]5 ~ v break;2 W1 `' |9 Z; h5 N
}
# Z" }) @7 ~! m, N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( ]- N, Y" d M5 H- B {
1 r# K7 X, `! B! b5 J+ I, C4 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ m1 L& ^; i& l2 G. o7 ^5 x if( !pItemElem )' A4 ?7 J1 G: G
continue;/ E& t+ k3 g! G9 `4 z, N
if(pItemElem->GetExtra() > 0)1 h4 |# V" B! b7 A4 P) D4 c
continue;7 t% i0 L- E* M) t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 [1 d, M% U4 f" K$ n! } continue;$ {+ f- b |8 O2 U5 i+ x# t! L( l
if( g_pPlayer->IsUsing( pItemElem ) )
; F* B. K# L5 _! j! J: h9 Q continue;6 e; P$ d5 o, E& s0 z
if( pItemElem->IsUndestructable() == TRUE ): w \, F$ O' Z) h9 u* u x
{
# e: c; W" D* j6 m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 b, J) L& I9 G" e continue;
! o+ Y r2 ~8 e }! ]) V0 o/ R$ n! w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. L: ]3 e: F- X6 f0 g }
6 Z, L5 i) R3 `# ?9 A break;2 V; d$ x0 d" [2 t
}. M& C# ^4 K+ H4 r# V6 F9 Z
case 1:) U" {! o. w, |; P1 N. J
{! T1 B5 H; \; e$ j! x$ V+ r
//整理背包
7 v* h( v. v Y$ o& u- G //////////////////////////////////////////////////////////////////////////. f) D- |2 C3 Y. P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ E2 f( r) H# r; g //////////////////////////////////////////////////////////////////////////' t5 t1 i0 e' J9 b* o3 v6 X; N- u
//////////////////////////////////////////////////////////////////////////
l* Q% ~3 K2 M CInventorySort* pInvSort = new CInventorySort;1 P" o, q. P' E6 V) a: \6 e
vector <sItem> vItem;- _4 j4 T1 { o1 `
vItem.resize(MAX_INVENTORY);//初始化大小' O3 T, y m6 D
//////////////////////////////////////////////////////////////////////////
2 k% x, u+ P; ` n+ i. b% t //填充数据
7 Q7 }9 N; E/ J% U7 Y for (int i=0;i<MAX_INVENTORY;i++)
+ N7 e" Z. M' \ {
4 n& t, K3 i3 |2 X7 j, i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 i0 ~! X; d% b% w9 l if (!pItemElem)* ^4 [5 x/ D8 e# A) |
{
3 j# |* q3 U. I9 X0 a. U1 g3 B& G vItem.dwKind2 = 0xffffffff;6 D4 U3 f- A% A5 `& g% d+ \
vItem.dwItemId = 0xffffffff;
& R2 S& @ [' H& T2 L vItem.nIndex = i;
+ t# |2 J1 G3 q5 c0 A, m }else {1 c; d" q7 f3 E( o; l! N3 |6 p/ h
ItemProp* pProp = pItemElem->GetProp();9 P% N* y- X8 O* i
vItem.dwKind2 = pProp->dwItemKind2;
% y; |4 q( | T2 u2 U vItem.dwItemId = pItemElem->m_dwItemId;
( D o S, k$ A* w7 f. p9 Q vItem.nIndex = i;) |/ S. ^* \- X
} B! K& N/ b) j1 [4 q; {+ r' U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ]# l9 d$ M/ \+ M. E9 L5 \2 A }. N4 u4 |, I/ @+ ]) R( [6 D/ M
//////////////////////////////////////////////////////////////////////////; Z8 a% }& l7 T6 c/ A8 X B
sort(vItem.begin(),vItem.end());//排序7 E1 ^' N" I* e i2 Y, s
//////////////////////////////////////////////////////////////////////////
! D% U$ H/ A3 ]* I2 H+ ?$ _ //交换
! k4 t& n) E8 Z/ C+ U: b p O! d for (size_t i=0;i<vItem.size();i++)
) [7 D1 g( I2 Y3 f9 ? {
0 Z! b2 `0 v) t! w$ s$ ?7 z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 q7 E/ _* r) X6 ]7 X, |. ]
pInvSort->Add(vItem.nIndex);
4 C: V/ I; H* u& G, l0 o }
- |( p, c8 a5 w1 T' \ BYTE nDestPos = 0;
( j' R$ Y# g( X& T% ^/ F for (int i=0;i<MAX_INVENTORY;i++)0 d+ r* `& i9 z+ U/ ?
{
2 ?- a6 w& k3 r% c n- V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ Y# T# L6 X% A& o' c" [" p if (pItemElem), E Z$ |- b+ ^; p8 r: }, G" [
{' O3 \- u9 s2 S$ `
if (IsUsingItem(pItemElem))! F& V! u7 [9 V7 l$ i
{, ^& p' q, `" K
//这个位置无法放
2 W0 v; i* P* Y+ i0 q) D nDestPos++;
- h( j- l( s" B, ?, N6 x" L* R7 Q; n }5 U; k r: i0 s
}" Q$ W. u0 e5 m/ @. \
BYTE nSrc = pInvSort->GetItemSrc(i);8 d8 R, C! J5 P; A6 w+ o! b$ O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 P$ M4 T6 C+ I: H# h if (pItemElem)
$ I/ G) v1 ~7 F |" H4 y {/ |. h4 x9 p9 T* y8 X% ]3 z
if (IsUsingItem(pItemElem))
3 Z G# m5 z' k3 f6 i; H; Y% ^ Y { U; W! \7 \" ~/ {: a
//这个道具无法移动,跳过% h: L1 Y1 t( O7 D# Q9 |
continue;- M6 v8 f; b" O; J/ c- }$ C' f
}
0 D0 W' }6 }5 A# H" q }else{3 r. C4 h, }8 V* }! T1 J
//空位置 不用动3 F; Q9 G+ T6 C3 G+ h) }1 [6 F1 g
continue;+ r5 A. d$ A6 P j; q
}9 ?% ?1 _/ E6 z- [3 y% @( P
//////////////////////////////////////////////////////////////////////////" g% H: h8 F; |9 S
//开始移动
% a. N5 F4 U: h" F if (nSrc == nDestPos)( _" M4 J/ t; ^9 a- m, K2 ^
{
9 M8 W6 c( }# `. Y: Y8 G+ Z //原地不动
2 I7 T% t. v. b nDestPos++;
! {* D6 U* x! l continue;8 Q" ]4 [% } Q9 }! h6 f# d
}& k. R8 x n0 j& h& J* d
pInvSort->MoveItem(i,nDestPos); C. J0 q% K3 X- g6 c6 }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: w# t9 K$ C& Z0 X1 c Sleep(5);
y) e; D7 }- t //Error("移动 - %d->%d",nSrc,nDestPos);
7 ]) J/ |2 V/ |( E8 A J! w- Z) U nDestPos++;
# u+ L, }, k( q& E- N( a }
' Q( S0 ?! z: v9 U( M$ x //取第一个元素的信息
% w1 O5 Y/ H' w) y /*
2 H6 v' C, S0 e- d: d2 f5 C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 G0 y+ o' Y; |3 d) P8 D( r6 p
{
- K( q" R; d6 m, p7 e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 T4 ]9 |; s0 G9 F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ {, u) `. F% J: k. E
}9 F+ ?. E7 \# W6 n3 A" M
*/- m4 P# `% O8 T. }
//////////////////////////////////////////////////////////////////////////
( S' ~# Z5 v; X2 O0 f' e8 M break;; {* X$ E; M4 n% `! D8 s- b1 e3 g6 a
}4 v8 d* a+ p6 [6 k }& T4 H
}
" e5 ~3 ~: O9 ^4 ^: v2 I0 d}% o% ~3 n) S; ^
m_wndMenu.SetVisible(FALSE);9 {: l2 \9 }% _; a# r
# U! l7 j. p+ I4 O, _2 S--------------------------------------------------------------------------------------------------------
4 c8 L1 A+ | m' [+ n. l- K& j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 h8 l* b& S7 P, H& H{+ O5 G E+ R! [ D" l8 k3 Z& U$ T+ d
BaseMouseCursor();/ A& M4 v# H9 r, w& x/ O' w
}: T- B8 s: J& _( ]3 t# f; r
在其下添加:' E$ H; a- ~5 |$ P' H" _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) c9 u6 J# V' r' U/ W B5 M. _
{2 p' l0 S& |8 L
m_wndMenu.DeleteAllMenu();
* h" \( I" F7 Rm_wndMenu.CreateMenu(this);
8 ~+ G, @ _! Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ `" I3 a0 `: ^6 T3 w2 z% ?# a- i# n( [- ^: |- D' S' L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ {; F; C+ K9 Y( p+ @1 {5 g6 U
{) k/ f7 ^5 F( N/ S9 ~' W
//P以上级别才可以删除所有道具
# o( `7 G+ y! w# ]& W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 W& o! A0 L+ r6 W5 H5 J. z
}
8 R9 j4 G: C+ U) Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 F, z5 d! V& ^7 m# _' N/ o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% ]! W0 J8 ]# U, d) ~: ?/ A$ h& Lm_wndMenu.SetFocus();( n/ s) V8 L' H T
}
' q4 n, ~6 ]5 R9 m------------------------------------------------------------------------------------------------------------) U g( S# Y+ v5 |8 x0 ?
*************************
X: H; V8 _! T( z2 k. }WndField.h文件' {5 M# v c0 ?. c
*************************/ F8 z2 F. D% g1 Z# ]: X% L6 n+ Z' L
搜索:BOOL m_bReport;
% A. t/ @2 p# ]$ a% |$ [其后添加:
2 j, D/ }9 Q. o/ C; X wCWndMenu m_wndMenu;+ K2 H7 t! @( {4 p' C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 D, q' r% O" @: \! `! N+ T: o: |
其后添加:4 K, p$ f7 G* C- i: _( k4 n
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 _. U' R/ ~9 Z% t" m& \6 C0 Q! K7 [" Q* b
4 f& d# t9 s& g$ e9 d1 k- G% t |
|