|
|
源文件中_Interface文件夹下WndField.cpp文件1 W$ } b& l! A/ @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 x. o" \! o' x: [+ b
6 N6 a3 r) c2 Y& m# u( k7 X3 K
struct sItem
8 B/ f$ _# F' c# H) d6 ?8 T% C{1 g! R3 _+ n4 e6 t8 M% @
DWORD dwId;
8 h3 B! K! Y, wDWORD dwKind2;: g$ `3 O A3 o: ?
DWORD dwItemId;5 j/ y/ }) L% R) l# ?7 f3 z! V
BYTE nIndex;
5 m! n3 ~& X1 `& o9 r9 n+ b! `( msItem(){5 R7 l* n. o7 ^
dwId = dwKind2 = dwItemId = nIndex = 0;% K2 @/ }# @% P
}
- Q! _+ i' H: h+ ]8 |# bbool operator < (const sItem p2)
n& Z6 \5 y! a4 ?% Z$ F" a+ ^* B{& s1 [1 K4 f+ e+ N( T1 J7 i# K
if (dwKind2 == p2.dwKind2)
1 ~; W! \; v9 n, _ {
( \# P+ M4 ^. {) ^( c- B6 K) i return dwItemId < p2.dwItemId;
2 m* V6 Q8 v) Z# c) P+ {! G2 p }else{
' ^% R |4 \# ], s- Y2 W$ B S return dwKind2 < p2.dwKind2;
4 z( B+ L4 H9 X" d1 T2 k8 }- | }( ]1 U3 | {5 c6 U
}6 f2 ^: A& r7 y+ y; m. \
};3 B3 N& B: C" U% i# T3 n, D
class CInventorySort
4 t7 g3 h2 g3 w5 a) s+ t' g b6 I{
0 t# A# {# j5 v! a8 j& ?public:
! P0 N: u6 `6 RCInventorySort()2 c" j8 B. W/ q7 M, ^
{8 M, H& c1 A% J" ^
m_dwPos = 0;
9 B7 a- I9 P, P& s. K- D5 X# Z9 `2 ]}
! R4 d+ E. _; U# r1 K7 z# k! p~CInventorySort(){}
) H4 D) \# z [2 C1 Fprivate:4 m1 w, o4 C# j' e3 k1 z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( j, X: z( X3 Q' f( Y+ U) xDWORD m_dwPos;' d/ F. b/ L, E+ D) K
public:
0 _4 ^; N4 B5 n. C8 Kvoid Add(BYTE nIndex)
8 [+ P# |9 ~ O& X5 g0 Y{4 v- s0 d6 e+ ?* M; l' P9 C
if (m_dwPos >= MAX_INVENTORY)# u5 \3 `- W( j- }" u
{
/ \8 u" w. L1 p }4 p! q return;9 v! {* G+ v$ @1 S0 T: v
}
3 u4 _0 G6 q" N0 H m_Item[m_dwPos].nIndex = nIndex;' N e: r) }% U! [+ C% O6 S# ~* {
m_Item[m_dwPos].dwId = m_dwPos;
/ T; {, V, x5 `, E5 F) ~ m_dwPos++;
. z' c0 d; k5 @8 w, B}
! _* \0 U& N. |, E) a7 g) ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' _5 y# d. [; E/ v
{' ~# ~8 S0 O% \+ \
for (int i=0;i<MAX_INVENTORY;i++)+ S# _7 H7 K q- f
{
$ I* B, \* | A2 i5 c* v if (m_Item.dwId == dwId) u7 B' l1 u9 A. H1 P
{
5 G) Z7 o# I, i5 K- \7 l2 Y return m_Item.nIndex;
8 }3 g2 `3 G- w, i! p3 Y }$ r4 b- b( p1 S' j1 M
}& Q' g6 o) S# B9 V
return 255;
2 @. X9 ~9 }/ R/ O: k S2 o}
7 ?: e, ~* @5 q! \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& a- E" n2 m; e! c
{4 U ^8 H% b+ x9 ~9 @
BYTE nTmp = 0;
2 F% ?/ u* J. z) K2 ] bool bDest = false,bSrc = false;
1 \% U* B* _- y4 Y. u for (int i=0;i<MAX_INVENTORY;i++)8 x, ~. I$ C0 n' \
{
$ b- s( F7 s. e, t% r if (dwSrcId == m_Item.dwId)
# X0 i4 W1 ]) m {8 y, a% u A3 {* F6 g
//id相等 则 改变对应的dest和src
4 L4 K8 c7 v( {2 M7 y8 u" L1 b nTmp = m_Item.nIndex;
* p! ~8 @- {9 s6 P$ I m_Item.nIndex = dest;
, I' p0 E3 F( Q }
1 N! X6 \, h# M8 { }
7 y; c% U2 U! Q9 N4 _ //临时数据保存完毕,交换开始
4 p) ?7 E2 u! j3 R" w3 f for (int i=0;i<MAX_INVENTORY;i++)
* C" |, G8 e9 Z {- u6 a6 D+ [# D# C( Q
if (dest == m_Item.nIndex)
& j4 J r) Q$ c {% w6 j) l: W; A, }3 v
//id相等 则 改变对应的dest和src
# F5 R3 x, D$ I! n m_Item.nIndex = nTmp;
7 y; y9 z7 o0 _0 r# A }& k* X4 L& o" ~, c R4 Z: @% _ y8 \
}2 |4 P; B J0 n0 c
}, v& c/ `/ H r# @' n) Z0 {
};
Z- d9 Y8 v' w+ B5 ]-------------------------------------------------------------------------
. n" X1 F/ [$ V+ t" I$ E# Z$ I依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 a3 C# Z% }' h1 C' p8 C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 J t1 g! O" D# g% o5 Z" j
紧靠其上添加:$ B! D% f& s2 s# `% S2 X
if( pWndBase == &m_wndMenu )* l7 Q1 x8 t" e2 k0 D; U& S* K9 s
{
& X3 R' b* x: c0 V, S4 } switch( nID )8 b) _: Z% w8 N" j
{
4 }+ u& y4 j. k# b* K( v; h! G case 2:
3 Q+ ]3 U. J# ?7 a* }) i: j {
1 D; e4 O% O) y, d5 ]+ ` //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ H) D' ~: E& Q! _3 Q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), f6 l4 Y+ [7 E2 ? ]; l
{0 S8 [% q% V; V- W9 u2 R8 c
break;
p0 ~0 k. k ^3 P8 [7 y- G }& o% p5 C. A6 Z( t+ I( k, a8 v/ O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 z% n: L# e9 Y7 R; B {
7 v- v+ p9 S) y! K7 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# r) B, ~- k; j: L; z if( !pItemElem ): `2 R: K. V, t) l# F4 I3 r& J. @3 f
continue;2 l" Z5 R" b- {+ U9 L
if(pItemElem->GetExtra() > 0)
. ]4 d8 ]1 ^; a continue;: N I* Y; s& n' y5 a: y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) x+ w: B6 v3 a+ i1 M1 \9 E continue;
/ P( b4 t0 C0 r if( g_pPlayer->IsUsing( pItemElem ) )! F- \" R A$ U. c& L ^. a
continue;
/ L7 E1 d6 W6 c. U4 H: e; R if( pItemElem->IsUndestructable() == TRUE )
6 y5 T4 z* ~, O& E8 D {
+ r& L+ E1 j* P; v5 @ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; d0 i: x: y% h' O. i6 q continue;; Y+ o+ N! p" l9 |' N
}& h9 E5 l/ _$ i0 u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" S R6 g. D! t# f' l( ]- L. | }; `: D8 T0 \1 U
break;
6 Z! [" ^. ]0 \ }! B( A# I1 r$ x1 L5 Y0 z# g
case 1:- v+ Q7 C+ A1 T2 W- X
{
/ B/ V6 `0 @* Q" }7 r9 G //整理背包
6 H6 J$ d3 d B- |/ K( d" _1 @ //////////////////////////////////////////////////////////////////////////
4 r1 J" e; I& u: k Q3 B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& V/ a* Q J+ R5 f# s8 G) E
//////////////////////////////////////////////////////////////////////////3 o o2 c2 U2 w) s% m& G
//////////////////////////////////////////////////////////////////////////
7 |! i9 l9 m" @, R; q3 f( h! y& N- C CInventorySort* pInvSort = new CInventorySort;
0 E9 E k9 s. G4 r d vector <sItem> vItem;3 \7 r- y; A1 ~& F
vItem.resize(MAX_INVENTORY);//初始化大小4 j! `! x. q. b" S3 I1 I
//////////////////////////////////////////////////////////////////////////
f' R- F) q$ R; [8 J& m, k //填充数据4 a$ x: o; h c1 q/ L7 G& V' M5 i3 M
for (int i=0;i<MAX_INVENTORY;i++)
+ X/ h) Z! ]5 \. o. |" c$ { {3 A, U0 P' X- Z; k9 k, s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) T" D5 U( s k if (!pItemElem)) \- U% N+ U, J0 e# @
{$ `! h; v3 Q' L% X& e1 m* g3 S u# N
vItem.dwKind2 = 0xffffffff;
* M9 z% U3 I/ {( h# U. g vItem.dwItemId = 0xffffffff;, W4 ]" ^4 f; J! S% ^. R
vItem.nIndex = i;2 t! a8 K0 a( Z* r; ^' Q+ C1 A7 U
}else {
! S" e- G* o0 n" [$ ?; S9 s8 c- M ItemProp* pProp = pItemElem->GetProp();9 G$ [' {( z# x( W
vItem.dwKind2 = pProp->dwItemKind2;, Y# T! \9 j' o4 o+ B
vItem.dwItemId = pItemElem->m_dwItemId;; E8 Z) [0 T- e% L
vItem.nIndex = i;
% K" ` Q, m/ F5 Z }
: U, W5 S3 ?3 N0 [ A( q' k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' {$ R) i# o9 R8 \
}
) w* J; H( r( Q: {& D //////////////////////////////////////////////////////////////////////////7 u, t! e# k. A! b" K& e1 L$ p6 d
sort(vItem.begin(),vItem.end());//排序
$ \ K6 o$ \$ `3 A4 H% U2 o //////////////////////////////////////////////////////////////////////////- Z7 N0 _# U& a5 a3 X2 e9 v$ D# F
//交换
. G/ \$ C# A: I2 P for (size_t i=0;i<vItem.size();i++)
, c/ [, }0 Z8 C0 C% a) h {# g4 h8 B0 V$ O' N; `# e; m
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 c5 A0 }* R4 Y4 a$ n3 p pInvSort->Add(vItem.nIndex);
0 F5 E9 h9 t. z, ~5 R* D }
3 g+ u1 d9 T6 ~$ T r BYTE nDestPos = 0;
; W# ~9 s1 {; D$ @2 h for (int i=0;i<MAX_INVENTORY;i++)6 G# {: |2 o1 ?; N; S5 O
{7 ?6 N, g2 M, |- p0 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 E4 l; A+ p( n
if (pItemElem)
( P+ P) r# C# S1 y {2 {0 w3 x' }$ U9 ?8 O% K
if (IsUsingItem(pItemElem))
: x3 c; _; Y5 q$ ^ {
0 n. z3 L$ s2 d# s' a //这个位置无法放
4 t& J" @/ c' D: I9 @2 v% X nDestPos++;. G' G: l2 H: d* s3 R( k
}
/ S9 v- n' f3 K6 V }
0 D1 q3 m5 g Y3 z& R/ H6 A# D2 I! n5 v5 E BYTE nSrc = pInvSort->GetItemSrc(i);9 X s1 i) E" V! P
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! i! \! g& x( ?" V' A, y/ n
if (pItemElem)
* Y5 m- p( R, _4 P+ }+ K1 e {, w; R0 o& Z0 h9 p
if (IsUsingItem(pItemElem))! s" A, t5 q. o- s% X
{1 A. w1 z/ U; n7 W5 [
//这个道具无法移动,跳过
6 L3 J' ]$ V. I l7 j+ A, V: S continue;* {; w! T8 n7 g! p6 e
}
, j8 z3 l6 z, f7 \5 O }else{! u) m* U+ I1 E& d; F: T
//空位置 不用动% n/ M, M* O5 k6 M U! j
continue;+ d- m6 ^3 z* G# [+ u" d8 V2 G/ c
}' p* E9 X1 U+ V) ]9 A% w
//////////////////////////////////////////////////////////////////////////
9 L5 U: B/ J' c+ n2 B2 g //开始移动3 B1 r& U1 C4 T
if (nSrc == nDestPos)
& S1 g6 b8 X) x4 m: d5 F- s {9 H7 M& q$ f' U/ v- |# `
//原地不动
, z" [# C" h) p% }# o nDestPos++;* l( u" l# k! ^* P; A) W
continue;
5 V! e6 i+ }: y2 s5 w }' M. [+ ?3 U4 L3 ^
pInvSort->MoveItem(i,nDestPos);1 r& Y( Z# d3 t
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% X+ w( M8 _3 O# @7 M Sleep(5);
; b' \* b! U1 [% X% _! t+ u //Error("移动 - %d->%d",nSrc,nDestPos);
- P2 W, T' l% r3 ]' x; p4 O' [ nDestPos++;+ `8 a- h) Y9 V! S
}# ^5 W2 J) M t
//取第一个元素的信息
5 M/ ? @6 z n; `3 G* M /*% `9 y4 [2 `8 ?& n( u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. N ?* P) q6 d {# ~! Z4 ~; s1 h1 j/ C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. q/ g5 o& }8 c' p1 |. L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 d0 G8 r2 ^# R, R, D }
& z7 r- }4 M2 {- B" l */
, H8 h4 |, C4 I# D$ R Z, s5 [ //////////////////////////////////////////////////////////////////////////1 `- U y6 {+ H/ h
break;% O* Q% S6 Y" q0 |
}
# |7 q8 K( L( K5 Q' R } 6 W# V1 x8 k- c8 x
}( a% x! X. G# {) j
m_wndMenu.SetVisible(FALSE);
3 a. c* f# ^1 W$ j+ l# i& I; |9 s3 q' N7 J' n( _9 m. G
--------------------------------------------------------------------------------------------------------
( T+ _( l0 }5 K5 _( N7 `$ f% d% p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 J$ F T9 t, k, J! u I4 F! G
{
0 d. V, \* f, q, X. rBaseMouseCursor();
+ B Y1 q" ?; M5 C}" d. V* w* q, u5 y @6 D' @# @
在其下添加:
5 n" }$ L! h1 k7 B0 fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! s8 a2 ^( r# R0 Z& y8 L1 W0 f{
( y& ?, C( L& y( c! F! F: W, nm_wndMenu.DeleteAllMenu();( g3 P/ c9 A9 n6 H! s
m_wndMenu.CreateMenu(this);
. Q" q" [1 {8 a& Y- z+ O' E! j3 Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* [& o& t$ n5 z, x3 c- F
* ]8 h) v; s! ^0 l+ {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: o" m$ X* ^! N3 F% E* g$ p1 N{, Z+ O' ]6 W3 V' S
//P以上级别才可以删除所有道具+ \( \* i$ y+ C: t- B a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 w3 b1 w% ^0 i( V' _8 \}
0 x) {/ s! q2 F2 F2 V* r5 h& w5 h$ s3 ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" p: q! e: q/ t& P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: i( j: ~4 s8 l x0 W! d
m_wndMenu.SetFocus();' z! @1 K, k" x; E5 I2 I: T8 o
}
4 G O* S% V4 _$ U* v1 e0 y------------------------------------------------------------------------------------------------------------
' b( m$ T* u. a*************************
2 U/ r) D6 N, SWndField.h文件
. h- C% }+ T2 M*************************
1 V0 h; M% r# `1 q" u搜索:BOOL m_bReport;6 F2 R1 K2 w9 [; ?* V* j; W
其后添加:1 y. _; V( T& h. t* ~3 v2 @
CWndMenu m_wndMenu;2 m, P P( j$ M, F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* U# Q" x6 {- F2 p5 u
其后添加:
7 p: K# @0 P6 |4 i7 m/ rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 T2 i: }6 G) C
# L0 `2 y( v: q9 J% t* W4 X9 G# Q, F
|
|