|
|
源文件中_Interface文件夹下WndField.cpp文件
" s. R6 M8 ~( c1 f, A$ d: T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 r$ {& l9 O# P( Q U7 T `
) m9 l$ b6 _4 I% [struct sItem9 p% q1 a/ l5 N* S0 z3 ]
{# d! V. o" N' W- s! X
DWORD dwId;
/ U' X- U" Q4 Y9 l1 a7 X: |DWORD dwKind2; j3 D+ j# B% D( `/ g
DWORD dwItemId;
) r- y; H0 D0 R3 u2 i$ lBYTE nIndex;
3 V9 f$ u& f! Z5 S' y/ T" o2 `. _sItem(){
! G1 ~ B7 X2 X dwId = dwKind2 = dwItemId = nIndex = 0;6 P3 i5 G1 H0 `8 A+ L9 N
}3 {* ^% x7 i6 ?/ x( S
bool operator < (const sItem p2)% p/ S, d' b" y* [) n7 j7 X
{
# Q8 ]9 \5 D5 P' n if (dwKind2 == p2.dwKind2), ?4 ~1 R, L& X$ w- R
{ ]; S. I( W& @& S4 u
return dwItemId < p2.dwItemId;
# D6 \# s. ~7 p. W& o& A% K }else{" l& ~- z" o: m Q# d5 R
return dwKind2 < p2.dwKind2;* C6 V% c0 V$ }) u! c
}" h. k, s7 E4 B4 n/ d
}
% X* S. D5 T) q. h$ M3 ]2 e% \};
% d: u4 D% t; Y" h( n; sclass CInventorySort
; j$ E* [# h. x4 y w" A8 a# y{
4 X+ `! O/ L0 |: Wpublic:9 n/ f, O. d7 H
CInventorySort()% ]+ C3 @; r3 B- i+ a
{8 _2 J. R6 ?+ U( i5 f
m_dwPos = 0;
8 Z, U+ H: {. T6 w* [+ e I}
5 |$ D' G5 t7 x& y# W' I+ O% ?5 {~CInventorySort(){}) @( j" L$ i; |4 Y+ E
private:
% V) @6 \0 b D! i: A4 z; k0 ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! G: \- s- L% G' n" TDWORD m_dwPos;
# w$ E' v4 ?% z. H) ^4 tpublic:0 }/ {% a7 O8 z( P. G$ M
void Add(BYTE nIndex)( N$ X& d$ K' J
{; t; F( D0 Y5 L7 x- d- U
if (m_dwPos >= MAX_INVENTORY)# G$ D8 g% x( H) `; D" E* S$ P2 m
{0 }3 i# q8 d, T3 e
return;% ?* u3 I9 G; S, N# H
}
* ]& \0 t6 k6 |& @) k" N! } m_Item[m_dwPos].nIndex = nIndex;
8 u! J7 y3 l9 R m_Item[m_dwPos].dwId = m_dwPos;
8 `) E4 a, ?+ x4 ? m_dwPos++;. e- p# m% h: N. z) D1 t- ]
}
' g* D4 o. A5 w8 xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 ~: {: a M) n
{% v+ l! i, J6 @3 i% I/ j
for (int i=0;i<MAX_INVENTORY;i++)
8 c3 K$ k9 k" b H% y {
; y+ L, ? t) i2 |% u- G* ], ~6 G if (m_Item.dwId == dwId)
' i' a- E# M% V. P {
8 \0 Z6 [9 t z& s. R, k; O U. w( B return m_Item.nIndex;1 l7 j1 r) @7 F: r8 J) x
}
" J5 g4 x; ]7 c( r( s$ S- ? }
# p: ]8 {9 f9 p return 255;/ M, S- x+ B' i
}
* g5 f; e' O$ \/ O* l& p9 uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; u6 p! j1 Z" p, \7 U- ~. L
{3 m$ ~" i$ c3 {$ z o4 H! S$ b
BYTE nTmp = 0;
" N( i# |6 }# }7 b/ V1 W/ f bool bDest = false,bSrc = false;
0 e ~( a. y$ Q+ x4 s for (int i=0;i<MAX_INVENTORY;i++)
( q* G1 L! \! X0 ]2 p& ]/ g0 K {# B, J$ t' \' I% r
if (dwSrcId == m_Item.dwId)7 }0 ~/ s6 C6 t9 s5 q9 I
{( C/ o1 e% p8 G5 j: m
//id相等 则 改变对应的dest和src
( B/ R# u( ^5 h* p2 m- H nTmp = m_Item.nIndex;
0 W/ e T1 F% K/ f+ r m_Item.nIndex = dest;9 Y$ z' V1 {9 D3 \5 J3 j9 P# x
}
: R7 Y0 k+ P8 C3 N8 ~1 [ }, H. D# c3 Y3 S! q& U' S
//临时数据保存完毕,交换开始
, K2 Q; w" w# K for (int i=0;i<MAX_INVENTORY;i++)/ j/ N" @: S4 r% e( `8 O
{
& e* _: c7 ~: k4 V; p: A if (dest == m_Item.nIndex)
( f2 X; @8 b" T6 ] {
( M# [% p% U& U q$ H+ d: g //id相等 则 改变对应的dest和src% J- R( P8 E, Y
m_Item.nIndex = nTmp;
3 Z9 L( D3 k h6 K2 s2 \7 x" E. D }$ a/ [8 D; S X+ q! e( `% v8 w
}. q4 A: N- o. `2 C5 c S
}
* K4 q/ J! `1 w3 ^ X};1 @+ V; F5 C6 G+ }( h2 a' ~
-------------------------------------------------------------------------! n- g" Y: v. E9 r9 C! L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( U0 ~# J% q# j0 @5 h* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- h, d& @. X k9 \: q B" Q$ p紧靠其上添加:
4 J. P$ r7 [. b% q9 L: @+ p( ~2 g! Pif( pWndBase == &m_wndMenu ), T/ Q: n+ U% E0 M B5 a
{
, K/ A$ z' F4 [. r& p. Q7 q7 ~ switch( nID )
% Q/ e4 N* b' g! g4 [ {( U5 A- o4 C' f0 J$ Z
case 2:
- R8 g: N1 F$ v5 o1 ` {
4 s2 L. A; ~/ \! V* ~2 N1 m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" S$ H$ d* |/ f& G/ s: z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( P4 q, V F G! @ V; G {
# k1 r# H+ w% B* j0 j3 M& M break;
$ W V4 X" O" l, S& V }: L* N7 S& w% |/ |/ n+ M
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 E8 @" D2 y' w3 _ {, w3 [* k) U/ p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 P6 K d% h) ?6 t4 N- A4 b
if( !pItemElem )
& Z* j3 n3 Z K$ a" ~ continue;, _: C) Z8 O$ P0 m1 O L
if(pItemElem->GetExtra() > 0)9 d+ _3 w# D/ @, z! v8 i& ?1 i' v
continue;
9 H; E4 K6 B& t if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" U6 p" W0 _( ]' a$ I4 p( s continue;" M2 k8 B8 T! l0 U7 S
if( g_pPlayer->IsUsing( pItemElem ) ): g8 p% h `# Q; V" j
continue;
& ^5 O4 O6 U ^. J G* a' P6 z if( pItemElem->IsUndestructable() == TRUE )
& x$ ~% O) y$ W4 c3 g& L- J {
' f0 ~0 v) Y9 ?! B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ Q, ~! c+ ?, v( L1 }. i3 k/ ? continue;
5 S) M( S0 F) o$ s5 `! F }
# {' ?2 f. ~8 f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 K8 A& o: l. T* N
}
F1 b5 x4 g% T" z break;1 k: T* |* L, h2 M
}4 a! P1 w! q. ]: X% Z9 } |
case 1:) i4 A u$ ]1 Q/ x) a
{9 W& N. q& H6 r2 S
//整理背包
- y) V8 h X/ i8 a //////////////////////////////////////////////////////////////////////////. Z, s4 M( ?+ m! R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 H- s+ t) K* B$ C0 ` //////////////////////////////////////////////////////////////////////////
; G" V7 l/ J' ` //////////////////////////////////////////////////////////////////////////1 R+ w' O. r# {7 z$ p
CInventorySort* pInvSort = new CInventorySort;
/ e" f7 I3 @( b2 p. N vector <sItem> vItem;
+ k* m/ E" ~. W3 v& j7 \1 h vItem.resize(MAX_INVENTORY);//初始化大小! o7 D; P/ y1 B1 Y" w$ w
//////////////////////////////////////////////////////////////////////////
! @/ m5 Z; F* l$ Z) y ] //填充数据
- U, T+ B+ R. U5 d9 E for (int i=0;i<MAX_INVENTORY;i++)( E2 j" i, [$ k: Y8 l5 r+ ]# j' w
{' Z# y2 @2 R1 }( k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& Z4 m5 F" E: u* k. y
if (!pItemElem)
# z1 t# X( K. E4 \7 w3 a {" O& O: j4 U5 h
vItem.dwKind2 = 0xffffffff;
- Y: t* @5 g% l% E vItem.dwItemId = 0xffffffff;
, x s& } N& T vItem.nIndex = i;
) L3 Z) u) @: I% ?! p5 V }else {, {3 U" s4 z$ \5 b1 A/ m6 t3 ?+ i
ItemProp* pProp = pItemElem->GetProp();5 X( n( P5 C4 H1 w
vItem.dwKind2 = pProp->dwItemKind2;
6 V6 E9 r9 F( E9 o vItem.dwItemId = pItemElem->m_dwItemId;
; ?1 X) Y- n2 @9 m6 Y vItem.nIndex = i;; } {% M6 w) O/ `2 ]1 L- }! A0 l
}
; Y5 k, K+ O' D) e/ r; u; O3 h/ q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 U! c2 E0 V7 b6 } }
$ v2 n+ u2 a; ]- ?: L0 W //////////////////////////////////////////////////////////////////////////5 W" ~% m7 r! {( B5 k, X; u: |
sort(vItem.begin(),vItem.end());//排序
7 ~# j* N. W1 c! A/ i //////////////////////////////////////////////////////////////////////////
" w: V0 E' F! i( ~. P! O1 i, _ //交换, l! o4 G8 [( r& ]2 ~1 A: F, K! ]" Q
for (size_t i=0;i<vItem.size();i++)
0 [' j, G1 `. U' i {
- X4 q5 r+ q' {) }% s8 [5 h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- l, A& q4 _: P4 H; S: _ pInvSort->Add(vItem.nIndex);
1 m w' F. w4 ]/ Y8 P/ k }9 ?1 ]3 |% D8 m( @, w7 w
BYTE nDestPos = 0;, y2 a$ n' d$ t4 }
for (int i=0;i<MAX_INVENTORY;i++)
+ v' Z7 a3 P0 ?! F {
: P) g9 M) x! M& |# r. c! R7 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% f( b, [7 A- } e% b if (pItemElem) S0 u4 U& P, ^, @! v
{9 M7 q9 W! C5 V* H
if (IsUsingItem(pItemElem))
. z8 z9 s' L+ I8 h/ A0 g {% \( o6 c/ G% [1 c8 Y$ b6 s) P
//这个位置无法放3 ~! j6 m9 x. N9 D6 K ?5 w7 ?. O
nDestPos++;
1 q% `) t8 t& V& i/ ?* h }& S7 t7 P- k' d: z1 ~2 u6 }
}
0 E( K9 @/ Q8 Q( {) c BYTE nSrc = pInvSort->GetItemSrc(i);
* }4 B$ _9 }9 m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ J" c1 X) s* v j4 C3 @
if (pItemElem)
! P2 \2 X1 \0 Q {
+ n1 X$ Y' c: c9 i A if (IsUsingItem(pItemElem))
, R! P- s v- d8 F/ u {9 G1 N7 G, S) V i9 q3 }
//这个道具无法移动,跳过* ? j, R: z& p) [
continue;
, E( f' J0 g7 r2 i1 F: Q, l2 `0 ? }
/ W: y" J* R, z }else{% Y- t7 X% P( r
//空位置 不用动3 W. q, c4 b r* x( V* k8 t: [1 x
continue;( x5 x1 u( L* }5 y
}
& B+ @- o* C0 R9 U$ Q) L //////////////////////////////////////////////////////////////////////////
0 p, `+ Z4 A' F# c' W //开始移动
# Z8 p" Z' v9 c! q5 t if (nSrc == nDestPos)& E5 ?( H7 f O% q+ J
{4 o1 T1 V9 Y) Q0 G
//原地不动- n9 c' C6 M9 k/ U
nDestPos++;
3 r7 A3 r3 R4 Q7 a0 u$ ` continue;) L# j( }+ F" i) W7 ^
}
( h$ J$ ]" b( G2 }1 z3 i9 V pInvSort->MoveItem(i,nDestPos);
, [6 ]" t' Y/ p4 v& Q/ P g_DPlay.SendMoveItem(0,nSrc,nDestPos);# I9 ^2 q2 W' [4 f
Sleep(5);! o% a' m" c5 p+ Q. }* n( I6 V" [, l
//Error("移动 - %d->%d",nSrc,nDestPos);1 E# L( [' q6 ~/ k7 I: |" m Q0 A
nDestPos++;8 K. U. T! j8 m/ Y5 V4 p) d V
}
" V) Z& d+ E# s3 O //取第一个元素的信息8 o' {" d& G/ o8 ]! `" \
/*. L M2 t% C: Y% Y3 G4 j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 i4 e" a$ s7 q' F, J0 {$ S$ D
{) |& q3 q9 c) B' r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 J* ~. ~2 C' ]0 ]- | ~0 Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, S; L/ |' _3 Y0 ~+ `) n
}
# `- C1 @' i; e9 w4 u* S7 p, C7 { */. K6 q& I! @" I* P" ^2 E b7 i
//////////////////////////////////////////////////////////////////////////
- l/ j$ y8 I. F( Z5 N6 \ break;3 i( c$ K& f {. y2 W
}
8 T5 f% x7 \; O ]. V7 x } ! Y4 Z* S2 C. T5 \/ D
}
% A; h2 O: N6 c8 k- ^; z% }8 ~m_wndMenu.SetVisible(FALSE);: u0 R) u* j, E2 I
8 B* @, Z4 D- ?- }" L" K- Y
--------------------------------------------------------------------------------------------------------. k! L" U" P% Y* c* `0 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& j+ g. h0 y) c; |, G5 V: t! j{
$ y% t+ T, q) v. i6 l. v/ xBaseMouseCursor();; O6 w/ _1 U6 Q% E
}
. K X) m% W9 g/ s. ]7 G在其下添加:
, U& B3 B6 }. R) X! C7 O7 Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ J4 y. F0 {8 Z{! R' Y+ d7 F! R' h% s' I) p
m_wndMenu.DeleteAllMenu();
5 ^' [' Y( M; `( l3 S' im_wndMenu.CreateMenu(this);
}6 s7 o, e) E6 C$ qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 ]3 A5 ]; }8 S2 I5 T
3 y- T, R2 {8 @1 ]$ K- k( yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' u, b) C3 e' \( k) j/ ~
{ ~& x0 E4 b$ S3 [) T+ p
//P以上级别才可以删除所有道具% ^2 Y4 M3 K* @9 a$ |5 N2 ^0 g0 Y9 \ y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: n2 K# L) O" x( Q! _3 V8 S0 R/ L! w}) T, V! s8 P5 N9 i2 C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( V, b- E* e. d- ~; k) a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 R$ x6 ?# M: a1 D# q# I$ ?/ c+ l6 pm_wndMenu.SetFocus();, P' U0 n3 e- }% _3 |! E; A0 T
}
8 a& _7 h! i( V! y6 R6 J1 ]------------------------------------------------------------------------------------------------------------
! z! l3 j( H6 D*************************
) U9 S* e& a" ?; QWndField.h文件! F& W8 N8 `3 \- ^5 U$ s) `
*************************2 j7 M' F% A: X; S8 v( W$ ]
搜索:BOOL m_bReport;5 ^8 F, O% v" s9 w
其后添加:
9 ?3 w6 N( I/ E7 K6 R' `6 K. ICWndMenu m_wndMenu;# J* E8 Q( ?* \* z/ A; k3 a
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: b' q$ c- @ L9 V- Z7 N; A
其后添加:$ l @; t; N% [& n, X. b
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 a& ]4 W# x; }9 {8 Q4 k7 A! d
$ m" f) Y7 Q3 m0 ?8 R
4 Z) K! x, F z |
|