|
|
源文件中_Interface文件夹下WndField.cpp文件: [( } i. J* _0 ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 d( X: g. ]. j/ t) ?1 _
+ U$ t5 o0 d r2 D& H6 ustruct sItem. t3 b6 o4 E0 }8 N
{
: c* ? W, `4 ~$ |DWORD dwId;
0 q' T( A+ ` i% h* Y8 I7 t. IDWORD dwKind2;
7 U+ p+ ?! _" p) x, u* k0 `DWORD dwItemId;4 O9 {& s, v9 }( J& ]
BYTE nIndex;" I7 B0 ?$ P+ m
sItem(){$ `- x& `7 S; ^* a0 @3 P/ Y; S
dwId = dwKind2 = dwItemId = nIndex = 0;
3 A9 w" W8 d5 c9 o/ n9 W# c}. h( c3 O: j+ M' P5 k+ H$ N; F
bool operator < (const sItem p2)2 z6 d1 A% U* `# z5 q- L% k1 B
{6 a( k) J1 Q) s# b( ~
if (dwKind2 == p2.dwKind2)
6 o4 u, L* v1 a) ]! \$ K {
% E c, n8 |* D4 G return dwItemId < p2.dwItemId;
& X$ h# g! V+ X/ e& Y* L$ N% ] }else{2 T- J- j: B$ i; a
return dwKind2 < p2.dwKind2;
+ ]7 ?6 \$ H4 o4 b }
( A z) f) ~5 n6 ~/ {7 a6 o" i}
2 r& J% J5 a( B};/ t2 A$ k$ l8 K/ j( N. w; {
class CInventorySort, Q( {- ^4 r& h& N: r5 K
{
* F! G! V( L% `public:0 ~6 Y0 {8 p' P: X' }2 t- z0 P
CInventorySort()7 {. `- r* d% R" i+ }4 A/ O
{8 K3 _( m2 V" r: E8 }
m_dwPos = 0;
. `& {' a3 I+ \2 B0 X( X8 t9 t3 w}
* ]/ z) ~3 Y7 c! y; V) s~CInventorySort(){}
- n2 v# ^* T0 X) jprivate:
3 C2 z0 _2 z o2 R6 z6 L0 _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; ]( P' M" }5 ?DWORD m_dwPos;
0 q& y6 u# b; X& Xpublic:
. o4 X6 u7 l! p- w' J3 z! i" Nvoid Add(BYTE nIndex)
) |3 G% {: }! _) L7 {{+ M' e: o& R9 l: F7 m6 e2 B. M' i
if (m_dwPos >= MAX_INVENTORY)( d, X$ O7 w. c( z1 O0 e0 k9 {
{
+ i" a% ?) E, b$ j return;
9 k& Q/ V9 h& {) G8 H- l, X }
8 @& ]5 }1 M& t0 e m_Item[m_dwPos].nIndex = nIndex;
3 J; g2 [, O/ Y1 g0 I) | m_Item[m_dwPos].dwId = m_dwPos;
: A) X: R, p! o: `' h* z2 S m_dwPos++;
4 E" h5 T1 _. M& r% `8 z' _}( a y; p! ]; V* f# A2 V) |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ |/ k( h. l+ [5 v. u- D{ T! d. G( ^2 h
for (int i=0;i<MAX_INVENTORY;i++)1 D1 `- v9 f! Y+ @5 N' F
{
: g) d: }! v6 ~% v, w7 j8 c if (m_Item.dwId == dwId)+ P% U# V' Z( t7 r1 t) A
{8 D' O- n% @1 u+ L# X
return m_Item.nIndex;! w) A5 d# f; j5 f$ i
}6 v5 R s* a0 Z( R; H# ~
}
1 v. }8 v1 Z# ~+ Z return 255;
* H3 v y. L# }0 l1 j% l6 ~( S; F}4 \: H, c2 [9 D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 P8 ?/ N e5 m{
9 ]& D. }. b3 ^0 u$ u BYTE nTmp = 0;3 b6 ~! P6 ~4 l6 A9 i m' n
bool bDest = false,bSrc = false;
9 M+ P- B$ y* I, f* H- L for (int i=0;i<MAX_INVENTORY;i++)8 C* D: [0 {7 S6 R
{' _* `; L! C- \& H: |$ j
if (dwSrcId == m_Item.dwId)
7 Y# k; o0 ~2 R- J1 j1 |" D {
4 n: r, N! O S- i6 w //id相等 则 改变对应的dest和src
7 G- _; k0 W9 L% G. z9 u- [5 t+ N nTmp = m_Item.nIndex;
+ t8 E- l# Y( _6 q! r3 O m_Item.nIndex = dest;! m" V) r" ~9 X' j! c& `! @) M
}
6 B; j7 \" t! p }
6 e" z+ k x3 p- @% N. q //临时数据保存完毕,交换开始
, K' y9 z! z, I, O5 b( R7 A for (int i=0;i<MAX_INVENTORY;i++)
5 g9 `+ [0 F$ Z; ~6 {- i {& a t0 {" g: ]+ C. [8 u* u; u' ]; H
if (dest == m_Item.nIndex)
1 I3 [% H+ Y$ }1 q {
0 Q. _1 u, e! F8 r- @9 B //id相等 则 改变对应的dest和src+ g6 R; E: c y& k! m8 H, N
m_Item.nIndex = nTmp;
+ [; }% u, E8 p0 j9 d0 t }
4 h2 U* u& M. E5 l1 Q }% X, y J+ N8 n, P6 |
}6 k1 J+ M/ [1 C3 i: ?* _, w( y* j8 M5 X
};
( v. ]; S0 P$ s) [; t-------------------------------------------------------------------------
- B- t2 g4 b0 K$ o. V8 U" Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 G9 h4 E( |% J9 n7 b8 C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* D) |" b1 Y, c. S
紧靠其上添加:
5 Q% B2 [& `" n5 K$ Mif( pWndBase == &m_wndMenu )
_4 r" W3 m% K! R& |) l# j{
6 ?; N4 P& e. _4 P, \8 l* _$ a$ M switch( nID )
9 g# k8 ~; U: l- A {
- F( J0 o& ^: [ case 2:6 o; i! K2 k3 i. ?" m
{
0 i1 S* [' ^0 p4 r- }5 B //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 j1 R/ d9 P7 A0 Y# G/ W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" [" ]3 Z6 K1 h# A {$ w, |3 J5 V. Q6 f/ X: r
break;
4 H" p+ W0 s! t- Z3 s9 f0 S }
x( M+ P4 [; @( l# J for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ ^. X; @ c0 u D {2 @) t4 D: K! Q$ V; `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. G, A. c$ O5 o# G( k& ~- q% T# | if( !pItemElem )
2 D q/ ]) N3 Y+ {7 t/ g1 S continue;
" Q9 N/ R" S. Y: y# t if(pItemElem->GetExtra() > 0)
! T( Q6 d9 g: }: R( a7 y continue;+ |4 d. Z3 C6 N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) v5 G! _0 H) X/ m! H continue;
8 _* J5 @7 ]: N0 p0 `# V if( g_pPlayer->IsUsing( pItemElem ) )
2 I, A# l6 N. O4 W" o continue;
b, p) ?/ o. Q \( U if( pItemElem->IsUndestructable() == TRUE )
+ |, x( W" T2 P' \ {
, b* ^: ?3 b1 \5 C% c2 n. l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ J) R' S3 E2 y& E* A continue;
! v$ }5 W! U" `+ {* M }! M+ g, `" J x: _
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( M) A! {+ h; F
}) C# p# r7 K. X4 V3 J m
break;" ]: J4 ^1 ^# U" R0 s" l, u
}, n4 z% y0 j% r& t | o. D& E- I9 R
case 1:0 q( Z; M* L2 e. ]0 {; H: Z) B
{
7 ]2 n/ _% K# X/ P/ s, ~4 H) q //整理背包: w( W! P) r( q5 _" c
//////////////////////////////////////////////////////////////////////////
( {, Q" _* C' K# Z- a7 h5 m //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( K5 x7 @7 M) J //////////////////////////////////////////////////////////////////////////- j1 |- }1 K/ }
//////////////////////////////////////////////////////////////////////////
" V3 `$ D8 l, O% Q; W CInventorySort* pInvSort = new CInventorySort;+ e* ~5 N9 x' o1 G) X
vector <sItem> vItem;9 b. j; V7 I, {& u; L
vItem.resize(MAX_INVENTORY);//初始化大小# y; s+ v3 D0 w; K7 N9 b" [
//////////////////////////////////////////////////////////////////////////
+ } |9 T+ l) s9 I# @ //填充数据1 }5 H2 {/ P6 g4 a. s2 q3 B
for (int i=0;i<MAX_INVENTORY;i++)
8 A/ x n, Z2 q* v+ }: i' J {
1 L' N0 A& H s9 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 Q: |- ~) s [ j
if (!pItemElem)# {9 g5 I( F! u& z
{
7 `1 q3 j- z6 W% ~6 f vItem.dwKind2 = 0xffffffff;! s$ R" P t3 w" [
vItem.dwItemId = 0xffffffff;
7 x# r, P: p8 j0 g vItem.nIndex = i;
% F0 ?( a x' D7 F( l* K }else {
. b0 r/ O- d" g/ Q! ]4 O ItemProp* pProp = pItemElem->GetProp();
% r- n+ _) D8 c r4 y vItem.dwKind2 = pProp->dwItemKind2;
9 f2 M/ s' Z) M0 p! B4 { vItem.dwItemId = pItemElem->m_dwItemId;) I9 |, P! g. R4 _6 o" Y3 \% \
vItem.nIndex = i;
5 h( l3 d8 s0 v7 S5 Y% m } t& x0 x) s$ i* `0 {, C! f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& ^8 S7 Q$ D" W1 \( H0 k
}
1 D& {+ X: j" `6 r6 Q+ I$ ` //////////////////////////////////////////////////////////////////////////
+ D) V: n0 s4 v, X- n, F( M. M/ A sort(vItem.begin(),vItem.end());//排序
3 W1 v7 A2 a$ t, @' ` //////////////////////////////////////////////////////////////////////////
* B: p" G7 y4 ^6 q/ t //交换) d; z2 l- A9 R
for (size_t i=0;i<vItem.size();i++)
" {# c# E; u; ]* u7 A {
% o# ~! B) r9 U4 L% { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: t9 a% m: K+ P# ^ pInvSort->Add(vItem.nIndex);* j* \/ J4 D8 b* Y. g+ {; h2 F) v! ]
}
7 `- p' G9 M9 t3 } BYTE nDestPos = 0;
: z8 D* y$ q. a& q* K o for (int i=0;i<MAX_INVENTORY;i++)! f2 B- g1 { N
{! Z5 I6 W! _( m! U8 r# k" Z1 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% J9 ?3 q6 ^2 r% n4 p
if (pItemElem)
7 Y/ w c/ {1 w% T3 y {
: C( {% A# e, p) O$ T% n5 T if (IsUsingItem(pItemElem)), \! ~) a! @$ {8 u Z
{
' }4 U6 K/ q. \! ] //这个位置无法放9 u1 x: I+ T( @7 ~' Y" q
nDestPos++;1 u5 [4 N# S) }# z" J( w- C# L! y$ a
}. @% N0 P! G% k! k. G5 C: a# s
}
* N8 S8 D/ k2 D0 f; l2 W( T, o BYTE nSrc = pInvSort->GetItemSrc(i);3 j4 o. m# z0 h' I' v& ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' h% T- X4 T: ?) K" Y3 X9 j) f, x6 a if (pItemElem)
2 @5 ~1 O2 a1 m: }( G# h {
/ g" q9 K5 v$ z W' j if (IsUsingItem(pItemElem))7 n& g2 `9 ]* M8 ?% b: r8 t' |
{
, [) n" m: y+ m& Y //这个道具无法移动,跳过1 H6 R# A$ p9 a! }* \5 ` Q7 B
continue;+ l8 _5 u/ d- Q3 V
}
6 ?9 K2 T% ^* l& t) O }else{6 t" j( |& Z( t; U
//空位置 不用动
% x$ |# @! e0 ]: y5 T% { continue;
# ?: s+ R) F3 P6 Y* d8 _( L0 ^ }
" D) W) n3 p/ \ /////////////////////////////////////////////////////////////////////////// S* C2 @" ^8 ? m \
//开始移动0 d9 T5 U) r' ~* @" E
if (nSrc == nDestPos)
. Z6 L! ^% s$ Z3 d# j {
$ h, p& x( v5 E; T6 Z //原地不动3 U2 `. }8 x6 B5 B# K& Z4 v
nDestPos++;
: ?5 u: X S B6 f9 h( M+ V continue;( g# m1 z% f/ k- n! R/ j6 p" e
}6 G" X& D4 }3 S
pInvSort->MoveItem(i,nDestPos);3 A5 @: t2 a9 d; _8 d6 W+ V
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ g* `& c. s0 A3 u: ^ ? Sleep(5);
: y: c1 `% U, q" l& i- L //Error("移动 - %d->%d",nSrc,nDestPos);
) W5 Y2 T' U5 @8 B nDestPos++;
/ g4 J' g$ q _. a; Z }
8 X/ M" o" r, k% `( a& T //取第一个元素的信息
/ \. g& n7 r8 Q& l /*0 E9 N$ `7 q2 | p8 a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 @' A& a! X0 b o( l {
# o$ H E3 ?' E/ R* F& h1 M Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 t% X; x/ I5 B- U w8 B( C2 n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# E6 |2 a5 N @1 s5 S) V }% @& V' x5 g8 q) B
*/
! d! ?& y& S: F0 [ //////////////////////////////////////////////////////////////////////////
( q9 V9 N; Y' [ break;
2 C' n& I/ L. W6 _) P& D }
- O+ v' N$ D' i }
* f; Z) k# T1 G" p! s" J/ `}6 y+ c! w1 f4 D2 _
m_wndMenu.SetVisible(FALSE);
6 ^9 J5 d& h. _6 I. |0 ?6 z
4 I! b" u* r: _" G--------------------------------------------------------------------------------------------------------
3 R0 X1 {4 K# Q7 J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 x8 Y; C% y) \$ t. h* @( w{
& @& r, G( t# p) @4 N$ p8 qBaseMouseCursor();3 }$ a: \) S1 \7 ~: ?
}7 F/ m- V' T; n/ D3 L3 i4 m
在其下添加:
9 \' \ r( |: A( y' I+ c) ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 i8 W* z( B* S" v- B: V
{
' p1 e) F0 U, lm_wndMenu.DeleteAllMenu();
+ T- b# i2 N4 \' r. W9 q2 Gm_wndMenu.CreateMenu(this);1 f( E) f4 q5 ~8 I) l+ \* e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); J0 _5 E1 `1 c0 h: i9 A
/ a9 T, q0 G& W- u' V9 q$ K- mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 v' A, l9 q7 k8 c5 Z) K& U
{. s5 U% F: P$ _+ \( q6 c7 @
//P以上级别才可以删除所有道具' n4 n$ }( N( H; a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); N5 {6 p( L- m
}
' ]% X' ?8 e9 \' b( ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) n, S9 s2 p: ~: K) [/ r7 p Z0 Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, M/ \: b1 v# q c: `m_wndMenu.SetFocus();
) M8 M2 ?0 A9 d}
1 C6 I8 J( k( w* K: Y------------------------------------------------------------------------------------------------------------- P$ y+ f, V) y2 L# B
*************************- b0 J) H+ y1 x; }
WndField.h文件6 [0 E O i: V6 J2 [6 F
*************************; Z$ B! H0 H0 ^3 L. ]( }7 V
搜索:BOOL m_bReport;0 A! e( d' c1 C6 S6 W2 Q z
其后添加:
+ K! R. ^6 `2 BCWndMenu m_wndMenu;3 X% W- Y) j0 G: }- j
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 h8 C; y& U" r7 W [5 ^
其后添加:& y& D R/ ]! A' {$ ^3 g$ g& N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; V8 w# H& V" ?$ d0 c: Y! P
% W5 o1 b0 u# M* G% L) h. E, u0 m8 D; H0 |: ~# Z
|
|