|
|
源文件中_Interface文件夹下WndField.cpp文件
; ?' v+ L1 H* C- H3 E搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ V1 Y" n( n% W4 x
* _1 b( t- `2 n# U) v Pstruct sItem! b! w& S3 \- s& h9 e
{
( G J) x* u9 W2 ^% @" S. QDWORD dwId;6 w& n. y# h+ _. W% j. }
DWORD dwKind2;
: [4 g9 T/ w7 I& ]3 `DWORD dwItemId;
3 R8 ^- C: T( C- CBYTE nIndex;& V. X* \4 U# B2 X: x+ C E
sItem(){
m; ]5 l K T z/ A+ B dwId = dwKind2 = dwItemId = nIndex = 0;' W0 j; i5 a# i, l
}8 c+ c$ z q7 _& a' D. r. a& X! f; q
bool operator < (const sItem p2)/ ?% \6 K o1 b6 Z
{
$ |- i7 |4 E3 k8 O q if (dwKind2 == p2.dwKind2)! W U4 L) K* T3 Q8 k* `. U
{+ `& x, V0 e. w0 Y# ]6 I
return dwItemId < p2.dwItemId;
! ^$ Y* Z3 J1 a% X; @" k+ x }else{
# J2 w+ ?3 n" ?1 u9 l, ]' } return dwKind2 < p2.dwKind2;
' v8 n% n$ U/ g0 }% n }
( J$ i3 q) |1 C3 [" [6 K1 H}
2 \" t. N1 n1 f};# ^5 |* S& r, z- ?6 z5 q) \6 A
class CInventorySort
/ i$ F4 S7 e' q8 b- V0 N{
& J9 C4 @2 T! Cpublic:4 P1 A$ X- {" @ L$ F L
CInventorySort()
: Z+ ^, A8 b3 s2 s! i{
) K! U3 T) k# f8 Z1 ^8 k# d, u. x6 v m_dwPos = 0;- x$ P7 v/ E; c" v. } t/ p
}
" `& l9 Y! @; Y: g( v~CInventorySort(){}
& C! N2 c: d, \9 x& |private:/ c0 E9 v8 g' @. `" y3 b' f
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, C0 O% Z' P0 ^; q
DWORD m_dwPos;
2 u8 h Y7 R% ?6 t- F% [public:: ?0 O1 R, r- e- `/ g
void Add(BYTE nIndex)6 r+ P3 X" t. q& C+ a
{
9 ? P0 o4 b% P, ] if (m_dwPos >= MAX_INVENTORY)
7 z: E7 ^& [# N" t% L {
4 g4 a. H3 v. D, e! {: x9 B return;/ a* J q3 X$ x- H
}( x# E N4 K( y0 m D1 w
m_Item[m_dwPos].nIndex = nIndex;
- m7 \4 A4 P! W3 b m_Item[m_dwPos].dwId = m_dwPos;4 d5 o8 }, G- Z" ?0 X$ J( e
m_dwPos++;2 w% q* E! n( x+ c$ R! @
}" j) V0 R5 |0 o2 V6 ]" L+ y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& y% Z: `( D( n, ]{" g4 Z, S E$ [% V9 k, z1 A
for (int i=0;i<MAX_INVENTORY;i++)8 ?# A8 Y/ C2 [- t9 M n& @
{
2 }% z3 M( {" d, w" |8 n* D if (m_Item.dwId == dwId)
1 h$ ~+ k6 z6 s h {
$ C4 W8 ^* Q$ U: r4 p1 l return m_Item.nIndex;
! O( J" Q/ ~/ o( n( v }
" }& U1 D3 S) `% r+ H }( k7 ?$ s% b& j, u
return 255;
7 q3 {. c2 y6 y3 W}# b3 D! y# a0 n t' w, p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! S( e1 T' g& o/ T; j% b- [{6 _, Z7 i; g. l
BYTE nTmp = 0;
; _& \! i+ r, s {+ ^2 h* Y1 b$ s7 F bool bDest = false,bSrc = false;9 ^8 e& s! m$ z: I E
for (int i=0;i<MAX_INVENTORY;i++)
0 c# K$ D2 W ]2 r {
; l: ^ t) h0 \2 n8 A. x if (dwSrcId == m_Item.dwId)$ H: f6 h( }- |' ^5 ]6 k
{
% \! X* ~- t0 J! O* G( W //id相等 则 改变对应的dest和src
8 f6 g* P% C8 g! A nTmp = m_Item.nIndex;
- ~0 z$ ?( B1 M2 T B m_Item.nIndex = dest;
) K( [+ Z5 ]8 Q# R) u }* N' y8 @( X% W3 K2 i4 N4 S6 P
}4 L* |1 u' C! R Z {/ @; l
//临时数据保存完毕,交换开始
# u" L" H9 A$ o x m" o for (int i=0;i<MAX_INVENTORY;i++)
$ Q2 ~! _) L- R( C; g+ C {0 t9 Z( u) f/ G3 w% \
if (dest == m_Item.nIndex); ?6 J7 k! ]' [9 h
{
4 [) [0 F6 F, _8 f f8 P% W //id相等 则 改变对应的dest和src/ \5 N3 O, ~0 t i" F
m_Item.nIndex = nTmp;
( |, _# E" }8 b+ V' r* |6 p0 N }
1 ?9 Z' O7 k$ ]6 Q8 C5 v8 _7 q }
3 B+ z3 H3 ?- l/ r" @}
& l$ f, Z' t( F0 B' ?$ a};
% w' n& q& n7 R2 l1 [! |$ @-------------------------------------------------------------------------. M9 [" o' q! F: x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
Q" N( h' C9 R* S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 [# Q. X- U1 C& n
紧靠其上添加:
2 d" c* R) Y/ U- L1 ]. K9 xif( pWndBase == &m_wndMenu )
9 B: d; Q P3 m+ B9 B0 L- _6 t{! R4 M- \5 ^! @4 n( Q$ C2 W
switch( nID )
6 @9 L3 M7 J" k- M9 N! d {
w) t6 K: O* d case 2:' q& b' n+ n6 v8 Y7 A+ U7 U
{* F& D) X" i+ K6 H! ]" R+ v2 P
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 J+ t5 G) j! K: y, M" _; {
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 S1 Q" h; Q, [+ e" v+ G
{1 z; b5 ?) @* N) r
break;
* \4 y0 R- A/ [/ w4 A/ [0 m% z }( o( s# d1 w5 K, e" {; |" p+ Z, J7 O0 @
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ ?0 j( I& R# w" i
{
3 Q% W% u9 m+ } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) ?1 W+ K3 o7 r2 p3 v2 U if( !pItemElem )- Y: {1 u7 _1 \* H$ T: v9 Z
continue;
# |. f {0 t2 E! G5 | if(pItemElem->GetExtra() > 0)
. V. F; }# B' W c/ s' L continue;5 U, [+ ^8 E) ]- a0 }% }' U9 N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" Z' q3 z/ l8 z( t% P& G |. r; m) m$ M continue;" ]% e8 v0 p6 L% P8 n) V7 j$ E
if( g_pPlayer->IsUsing( pItemElem ) )0 Y' c. ~; E. P6 B6 b9 a
continue;
3 q3 @4 T9 E( J7 [# b* p if( pItemElem->IsUndestructable() == TRUE )6 R' r: a2 r E* u
{8 ]/ G( h( k X% S1 ^, B) I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); P* j* F5 I" r/ i0 r. q8 o) `4 L
continue;+ b/ J" W6 f* ^* g: C9 w
}
. x2 |. G A' S: ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 s+ q9 Q" W T' q- U* n
}
" D' _7 H) h: ^& _, n# ~ break;% X' o, |5 K, _" c: y
}
0 z! _5 s" ?0 I$ g5 L, n/ v5 M L case 1:
. r$ C4 p: k% {+ q {# q/ f7 e) K% X5 O/ s. c+ |2 k
//整理背包/ I- S6 \$ E0 [) w; m3 o
//////////////////////////////////////////////////////////////////////////
# e# X: Z J. q+ U4 n h3 J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# R$ D2 h* p8 q% r //////////////////////////////////////////////////////////////////////////) L' a7 h5 v5 K' c- Q* E
//////////////////////////////////////////////////////////////////////////" L+ r$ }9 e- ~+ d# [5 t& W/ R* y
CInventorySort* pInvSort = new CInventorySort;
9 @( h& G' b* Z6 Q: y& M; R vector <sItem> vItem;
1 ~" o. E- B" s' X$ s2 q vItem.resize(MAX_INVENTORY);//初始化大小& S7 i9 `# b, N h
//////////////////////////////////////////////////////////////////////////
& ~8 I- U, Q8 u8 {. g: `& u' [# \$ p //填充数据5 ^: E" q* ~, F& N; j/ n# k) _
for (int i=0;i<MAX_INVENTORY;i++)1 D' r4 r) f7 x. _2 p$ O+ C/ B
{
+ P1 A/ V: W1 ^/ }- g5 G3 d. |9 B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! [# Y" a% |8 g+ W
if (!pItemElem)# j' t6 |3 G0 P2 G3 X; F1 P
{
' G) ^& Q+ ]- ^1 v1 w vItem.dwKind2 = 0xffffffff;( x3 E0 _# p# z' q7 O1 n
vItem.dwItemId = 0xffffffff;
6 m7 `6 T) `' s% O vItem.nIndex = i;
7 l& B; h! ]: G6 | }else {& Q5 [, p+ v2 R+ |. {3 _9 ~
ItemProp* pProp = pItemElem->GetProp();
* u d( c5 C- F% Q vItem.dwKind2 = pProp->dwItemKind2;3 P0 _# r' j5 U( I; z) ]. |& g/ _
vItem.dwItemId = pItemElem->m_dwItemId;) q/ ~0 R- T$ N+ W! H* s
vItem.nIndex = i;
* J0 z: K( a. ~& R2 \! T5 @! q' H }/ |! e% P3 n$ E# w! p: ?: A* R( k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ ?: U0 B: z. Q. D3 R }
! {5 `0 D% v* u //////////////////////////////////////////////////////////////////////////
7 d9 H& z, N' R2 W. a sort(vItem.begin(),vItem.end());//排序
, V7 A- e; J9 C) p. ` /////////////////////////////////////////////////////////////////////////// q; R8 E9 f1 Y- ^6 ^& d
//交换
$ H1 d, E) y% E, A7 p" l for (size_t i=0;i<vItem.size();i++)
. \ q& n7 J4 V* D G7 f {& S; F, U4 s4 \' ^: G9 t! d: n
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- x9 V* h! i' h/ W; K
pInvSort->Add(vItem.nIndex);
9 x! Z2 h6 p: l# S5 z8 h }
- X8 o- Z* N, c: B BYTE nDestPos = 0;
7 K% P% Z- z' s for (int i=0;i<MAX_INVENTORY;i++)
1 J8 X9 O* n) W- D: K" p {* l( o; x& y0 m9 p5 z/ Y* _: j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ q2 o% G+ \2 ~& f
if (pItemElem)
. w$ B" L* T7 _+ r {
5 U1 R3 d7 k' R2 j if (IsUsingItem(pItemElem))
0 g2 ~. a! Z; z9 @ {) k% j9 h8 ]# B$ X, f+ X- O
//这个位置无法放
0 {, e6 U; K6 o X; N+ z, r nDestPos++;
8 X% I- g A8 X6 h }
% \) `% H8 I: q& p% F4 { }
- ]) M$ `+ _% C! {/ u4 A+ b0 F BYTE nSrc = pInvSort->GetItemSrc(i);, n5 R& g2 {5 y3 E; c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 E% V. h- T# f# [ if (pItemElem)
# G! g, N0 O# x( Q {
2 c% H! a0 I6 K9 s4 H z& | if (IsUsingItem(pItemElem))
1 C# c. z: o$ U" h, y! _0 S& g: n" [ {
9 a5 C+ `. }, i0 }7 i& i //这个道具无法移动,跳过2 X7 [5 w- h; I2 [
continue;
2 t3 d3 }( ^- ]9 E! Y2 N }
$ N' K9 a$ C4 o" }4 O! O( S# ^8 N }else{
8 c9 W. }' n+ n4 |+ B //空位置 不用动% u) e/ G' \& }" j. I0 Q# t
continue;7 L9 L4 o3 ]6 C& Y* D' p! B8 C3 M
}( F, F V2 ~- h$ g* k) R- R6 ]
//////////////////////////////////////////////////////////////////////////" J% T9 ^5 y+ k# j# b
//开始移动 ^+ v* }- P6 @
if (nSrc == nDestPos)
7 @4 l3 M) ^0 G1 e# [7 C' i9 Y6 n {9 ?7 \6 I+ I: y+ a4 }; U2 [) a
//原地不动6 {7 a1 B( X- l
nDestPos++;6 ]9 x! f; x3 j) x" M; o1 E" v# [) e
continue;
0 X& K n5 Y& ~4 S1 a* l9 z; b }
- M: I2 V' G) g; D7 S8 X1 F4 h3 g pInvSort->MoveItem(i,nDestPos);
; u( `1 ~/ R/ N& B) e g_DPlay.SendMoveItem(0,nSrc,nDestPos);' |# r$ k$ U- G1 Y8 t
Sleep(5);& S7 f2 N: I2 o# O$ Y
//Error("移动 - %d->%d",nSrc,nDestPos);
# ?+ O% t B3 J y+ Q& m1 Q5 j nDestPos++; Y0 a& {2 S0 Y1 t$ F
}- b) H1 `$ I; D! U. V# z! \( ^
//取第一个元素的信息/ F+ ^5 v) H* @
/*: A- R% F. N* B& |- b7 v" b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 L' G+ T. C+ ~
{7 m0 c" C% n" K9 P+ @; u
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
T" ]5 u$ b I) ` V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: q" k' l( b. }5 f$ y6 ] }
" V; d. N/ W1 `) k1 v */3 e* |# h; c; H4 {
//////////////////////////////////////////////////////////////////////////1 T# c! P% A2 R, \, d, I8 r
break;, Q4 ~, S: G) |* ^) u( L
}
- P7 Q( J4 u7 X5 g. h( F6 F+ I$ T } * p( K. S9 n9 ]9 y% B1 X
}1 H8 j) P. l' B* H
m_wndMenu.SetVisible(FALSE);
. z* X! e5 g( X y1 `2 A2 B8 z6 p R: n7 @3 Q
--------------------------------------------------------------------------------------------------------) y6 v9 S, o- b6 E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* m8 C8 y) ~/ o e9 {. k2 y" h4 I
{
' J9 X+ }+ J' e% X, lBaseMouseCursor();
$ O* m x+ u+ P3 u3 ^* D}
3 z- P7 H/ [( m' G# T7 s& I& x' b在其下添加:
; [0 M) X# n/ {- y+ r1 v dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); t! K% ^ p% D2 _& x: s0 i9 q
{% Z& B' E: q, a3 Y$ h
m_wndMenu.DeleteAllMenu();
/ a7 c6 }( }/ @m_wndMenu.CreateMenu(this);% s) X7 n& C+ {/ f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 \( y9 z4 a8 G; I- { R9 n8 E# x
' t1 O. z/ `, |' w8 Dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 c5 } l' }# q3 n5 \
{" N5 k" k4 x3 x. V
//P以上级别才可以删除所有道具8 K) n E( l' y3 N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* p: r; Q9 d. g1 S}( s8 ]0 W' B. d2 U+ o* q4 i
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( T; t0 e5 ~. |m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! h0 s4 r5 D, E1 I
m_wndMenu.SetFocus();2 O; G1 S# q( n* Q/ u# a
}
5 h" D$ K5 Z' Z: E4 ^------------------------------------------------------------------------------------------------------------
! o8 d6 U$ @/ _1 G8 h5 I*************************
, {5 J" E/ D3 S! xWndField.h文件$ b- C% Y6 T& Z2 L' _: Z; w( a# T" C8 p
*************************# u1 e4 k3 |: P2 V
搜索:BOOL m_bReport;
- B2 ?0 I$ j7 F% U其后添加:
: y. g. x, P, e1 p9 G. J3 NCWndMenu m_wndMenu;, {. I5 x' X+ r0 L) [
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 {! g) k- i1 j; ?
其后添加:! e- i- S: }* p5 Z( E9 @ L( D# \
virtual void OnRButtonUp(UINT nFlags, CPoint point);, }* l: t: p* G' Z5 J, ^( H
1 a3 n7 L. `4 u% T7 b
( E+ H: L8 f1 J8 C _" r9 {- z0 w- i0 ^, F
|
|