|
|
源文件中_Interface文件夹下WndField.cpp文件$ C) p3 V/ ?6 F. C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 j" `$ n5 Q( @$ m3 i9 G
9 c! `8 x0 L" ^, r2 D7 zstruct sItem
) r, v% @& N# g: Z: B{
, _6 x: v ~) {. _1 U; yDWORD dwId;. Q+ W V/ s9 z. {: S
DWORD dwKind2;
) \# I" Q( F9 Q4 ^: EDWORD dwItemId;
4 x4 |$ U: `" B/ I$ H) bBYTE nIndex;- Q: u) s5 M2 d7 C+ ~$ B& t
sItem(){
, U, ]! N, m) P dwId = dwKind2 = dwItemId = nIndex = 0;
8 L& c. N7 l; M6 x4 B8 @! T}
; R& x6 p" f9 ]; `8 Hbool operator < (const sItem p2)3 c0 [- \6 f( [. X( E
{
2 }% i/ F1 B8 F. d8 Z- r& Z& e if (dwKind2 == p2.dwKind2): S' ]# h" J, a6 Q: s
{
/ B4 J; i1 U( C% l return dwItemId < p2.dwItemId;
6 S( b7 V: W5 m- \3 G+ d" v }else{
- K7 X; w) U. Q3 N9 k return dwKind2 < p2.dwKind2;. n6 R7 @) L" m7 Y( A
}
- |( r, A. K9 @ R}, F4 X* o4 p4 H9 }9 Q
};
0 E) ]" p; {( b" k; J5 mclass CInventorySort+ _3 a+ |0 s w* I7 r e
{
, P. f$ [2 D' j0 ], O2 p1 ~, Cpublic:
( k* \6 B3 T9 e9 p' BCInventorySort()+ Z+ F7 W1 P; M
{/ h5 n* M" D* Q! l# `% P& O
m_dwPos = 0;
, V+ O1 a. l+ u; Y) ~8 _, A}
! i+ D( q! f7 N4 p5 e! A, i q: m~CInventorySort(){}- t7 C: v- L) A3 q
private:' r6 p8 j; Z x# V/ M4 D' l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 q: i* b9 \, Y
DWORD m_dwPos; `, b, y# j# F& j
public:! A* t |# x, S# a. Q% s8 A
void Add(BYTE nIndex)
' X/ S8 ?% e- N8 l{1 P$ k2 c$ p0 z; V% ]# C
if (m_dwPos >= MAX_INVENTORY)
- G! L7 r, [7 }( a# z {
4 T5 c/ E" \ m return;3 ^4 |7 `& J% Y) X% E0 N
}# H1 P- y; o" s, ~8 H
m_Item[m_dwPos].nIndex = nIndex;
* o! X( C- \7 u m_Item[m_dwPos].dwId = m_dwPos;
+ X) X$ g E9 C8 r m_dwPos++;
, D1 |/ c! _! q& e# O5 m}
. @" P1 D$ v% f: `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 S& m8 w F5 n, x8 Q
{" S L9 W! b9 f" i* J2 z
for (int i=0;i<MAX_INVENTORY;i++)
8 u1 j: {- h4 g2 b0 c' X) h7 u4 | {/ }" r9 c V/ J' V) s" X5 s8 X
if (m_Item.dwId == dwId)
! ?6 h4 D4 p$ Y( { {
# V# I" s& O. N5 \% w- c return m_Item.nIndex;
4 D, d' |" v" u$ g8 X/ B" r8 r" f }
( ^9 _0 c* q6 K) e2 o& S }
& V& c) L6 Q7 d, o& U* Y+ E. ?6 Y return 255;$ j" m: P/ q u- b
} y4 c! c' y* A. }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; ]' H. G9 b5 k7 V2 I8 w( X N- H
{ Y# L1 Q# u$ S; @+ \
BYTE nTmp = 0;
6 P& e: T( x0 h- [ bool bDest = false,bSrc = false;6 X. K9 ?, z0 I5 @& H6 z
for (int i=0;i<MAX_INVENTORY;i++)
* X: {8 I6 h( s) S0 O* Q: [ {/ d: Y, x" o& X/ G
if (dwSrcId == m_Item.dwId) z3 Q$ K% _+ e y! v, c
{4 J$ f! i- F# m& r# O, V, n' [
//id相等 则 改变对应的dest和src, A' }0 W7 r: j- b) v4 B
nTmp = m_Item.nIndex;
; P3 i! W- W( j m_Item.nIndex = dest;3 S+ }8 ~; K4 r9 C/ h2 q( z4 c# M
}
' f# ]% x+ a4 q: N) j H5 ~ }; P5 E G" |5 ^" I( B
//临时数据保存完毕,交换开始
* f, P8 N$ @8 p4 U/ U; G" X# x for (int i=0;i<MAX_INVENTORY;i++)
7 d1 v o/ c6 l( b {
. u: ]9 ?0 W" F- J+ s' q4 m if (dest == m_Item.nIndex)8 ~- P" L0 b5 o6 a: b% G
{/ w) b! |( n! E3 {- _* \
//id相等 则 改变对应的dest和src
; ]- D o# e( @6 | m_Item.nIndex = nTmp;1 W" L( O! S1 ]
}
1 W7 E7 p- v8 Y; f4 X* d5 B }
0 B( B) M1 y& }1 B# v2 O5 g}
+ B$ L9 Q/ E" p. i, f9 Y, ~};* }7 r3 K& q6 p( A) L3 f) e
-------------------------------------------------------------------------
$ K" B$ d, R o" g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. J# A& F+ ^2 d8 C I7 [ r$ I9 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; I$ A2 y, _& }9 q I! c/ w! b
紧靠其上添加:( D2 m9 A3 `: I% Y- }5 f7 o& p
if( pWndBase == &m_wndMenu )/ y( R/ z* P: g, V% O7 u
{
8 {4 ~( t. H9 m' N switch( nID )
, O- E0 N# ^, b) k" l+ }0 f { w5 V" n( e, K$ x$ C0 p
case 2:; q: V$ p+ I; u1 W F
{
7 c- {& J. i0 [5 D5 Y9 W/ D4 ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# N' c% b/ f; c* |/ d4 k0 q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ I3 j0 f7 ]# ]6 W: E; w* Z
{, Q/ j" O& F5 `0 k
break;/ M) q# s. m5 r; i7 H# `" a
}
6 U; d' p6 R2 u& G w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). t: ^. C! z1 X5 W# f" p8 M
{
9 }) J# i R9 l" [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ A$ e! j/ c0 _2 L3 E5 |
if( !pItemElem )0 q0 D. n6 k P9 u8 D
continue;& R1 P) L& [7 n
if(pItemElem->GetExtra() > 0)
) A6 O1 X5 J+ q1 O3 h, v$ A; E8 A continue;
! ^5 O W7 [0 _3 H: }" W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . Y9 k& i9 i }) H" v
continue;
" \' k# w- k/ R; G% }) }. h( b if( g_pPlayer->IsUsing( pItemElem ) )- X- J* X- O0 B) S- C7 Q% M& X
continue;
6 O$ ~: J% ~& c& y) s' m if( pItemElem->IsUndestructable() == TRUE ): p2 ?7 a1 o3 `! V* U% L
{# u4 [9 P; `! b& s5 U% _& U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 t# q! S8 m& w8 Z0 K
continue;
! b7 j' K$ E& J' X1 i# E; G/ Z4 H% A }
5 }0 Y0 I L: L6 G' M1 X$ `' ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 s3 E, m1 g, q9 b' N
}
3 S, F9 r( _6 b4 Y: T9 a break;
3 C, B* m9 Y, X7 L/ @, V+ E }1 v; i! R* Q2 v6 t& @$ L
case 1:
" d k3 q$ I# o6 K, x* A {" s: \: E7 b8 n! z |- x* t% @
//整理背包3 s8 a5 w( c0 c2 G7 i
//////////////////////////////////////////////////////////////////////////
) y: `4 ~' R: T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" o5 i( ?' t+ [
//////////////////////////////////////////////////////////////////////////
- Q2 _# e4 ~+ c. x2 J. J# J //////////////////////////////////////////////////////////////////////////8 `. B2 V# e/ L0 a- a5 L, ]$ ]
CInventorySort* pInvSort = new CInventorySort;! s/ T7 v2 I4 H# y$ G' L
vector <sItem> vItem;
4 `. _9 e- S& ?3 H vItem.resize(MAX_INVENTORY);//初始化大小6 p. w$ {$ S9 L" j
//////////////////////////////////////////////////////////////////////////
6 s, f" ?# o' w# f) w2 \% G4 I- G //填充数据
$ F5 B) {0 [0 a4 X( l for (int i=0;i<MAX_INVENTORY;i++)9 A* E. |$ ], f4 ~ @
{9 e0 ~# s1 O2 ?/ y+ \- C2 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ Y7 `+ ~4 _ u if (!pItemElem)
C0 z3 N( t, v& v% @+ S5 e {
# h' C- _( ] ?, [# t vItem.dwKind2 = 0xffffffff;
N, i$ K/ w6 p: w1 q1 K2 a vItem.dwItemId = 0xffffffff;! m3 N! z x3 H0 \. n& Y7 F
vItem.nIndex = i;+ L, `# ~. I- V' c+ p! \* `
}else {( @% x7 F. y& P8 s
ItemProp* pProp = pItemElem->GetProp();
; z4 @) K* N1 l2 l9 t s5 i vItem.dwKind2 = pProp->dwItemKind2;! N1 V- m- u1 [9 d! O& v; D8 U
vItem.dwItemId = pItemElem->m_dwItemId;
8 d% b+ l) U( Y" L0 K. T vItem.nIndex = i;9 b% L$ Z% t2 _0 R1 r- e+ U
}# u- n, y8 c" W/ `/ s0 W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- W) m1 h$ g6 }0 m }
6 o3 G! Z) A2 q8 B //////////////////////////////////////////////////////////////////////////3 B# C3 M6 G3 v, R" |
sort(vItem.begin(),vItem.end());//排序
2 N- v. x4 ^8 K- Q- w& v //////////////////////////////////////////////////////////////////////////
5 X: x6 \7 x. h3 ^ //交换
T Z' e5 J/ P+ g) n for (size_t i=0;i<vItem.size();i++)
( j4 s; ^! d% w4 s: B; ` {7 m4 f( T% r. v/ X
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 s( A1 [" ?& a6 d/ o
pInvSort->Add(vItem.nIndex);2 n" e/ u, T8 S* b( Z* ]
}% L7 j6 J/ f, a: k# M" M- n
BYTE nDestPos = 0;
1 f& n8 U) L) G3 p5 E y6 ~! e for (int i=0;i<MAX_INVENTORY;i++); b7 R& f4 Q0 o0 S3 q
{
2 n5 R- @+ E4 F3 j5 E# q1 q" Z3 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& w. N4 X! N$ N2 v5 Z7 } if (pItemElem)" u; v& B- {) A
{
. d* [ D: `' r if (IsUsingItem(pItemElem))
3 Z9 v5 N0 N, T; W {" g# t+ {0 ?/ r' p; }& P* B+ ^, ?
//这个位置无法放; w! F2 f( G% D5 K! ~
nDestPos++;
& A" {/ ?7 I6 `- }# }2 Z5 K8 ^ }
1 C# Z5 I3 t, W C6 ?" G5 T9 q }
. _8 x$ h6 J$ @/ r' O BYTE nSrc = pInvSort->GetItemSrc(i);. E7 O5 G8 ?# r$ e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( t' q5 f5 R% I if (pItemElem)2 g0 T" c7 p5 n0 `! H
{' f& i3 |3 m! ?: [" ~7 B! ]; ]" g# S
if (IsUsingItem(pItemElem))
" C8 B! C# g- x4 H {
& [, g7 c5 Q' \- k4 r+ T3 d; B0 n //这个道具无法移动,跳过3 S, n8 g- I5 b
continue;- T; O# ~3 |, w/ O; ]8 R( }/ t8 H
}3 A+ f' ?4 O! I+ _: A
}else{
' u& d3 _* e" A8 V* A //空位置 不用动! ~0 a9 |$ U4 h: K/ T
continue;
: \2 T# @+ z5 h5 c }1 o0 o5 p* \1 e1 {2 Q: n1 K) }
//////////////////////////////////////////////////////////////////////////" R9 R: z1 s" V7 d0 e8 U
//开始移动
6 m+ ^! f, I0 \5 u, V( F6 u if (nSrc == nDestPos)
: i, m- ?4 I, }# r0 E: K6 i {# n: h4 v' p1 K) W: R. c; E: L
//原地不动
/ M, X5 S4 s: S' ]3 ?8 L nDestPos++;
3 v& X+ w/ n/ N @ continue;
: l! `/ E b2 P* x }
$ f% O* Z7 ]# g& ]0 j' F' A3 n3 K pInvSort->MoveItem(i,nDestPos);$ J" b, v3 P# E* p" C
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 G* z% G7 c2 w E Sleep(5);# |$ Z! d8 S# d/ O- _' a- ?% W
//Error("移动 - %d->%d",nSrc,nDestPos);5 G t, a7 |) ?% Z
nDestPos++;) f' F4 W- U, _# v% u
}
0 c, S( ]8 z+ H. d9 U$ \% c //取第一个元素的信息( j2 c& }8 O+ V0 m# {1 u! z
/*; `- i* h3 Q- A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 \! i( u, p4 \- z% |3 l {0 t8 s N# |! \7 x$ v# Q4 {4 e
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
r5 W( ^* ~* Y# W5 J3 v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( ` ?( d! f$ i! D
}
1 b4 D6 ^7 ^: L$ M' m' | */# g% v. C/ p: Y; y
//////////////////////////////////////////////////////////////////////////' h6 i5 B3 T4 S9 k
break;; m$ ]# y3 b; P
}
2 B0 B3 w! o4 X! I6 j }
9 C: T+ d! T" ~$ {' I) A4 O0 }3 ]}
% L2 f! M# A1 v. X7 S2 N; L1 Om_wndMenu.SetVisible(FALSE);4 _; B* y1 B0 G6 `/ u' h& p9 Y
% L$ ~/ @- z8 E; e: }* D--------------------------------------------------------------------------------------------------------
) I# X& G/ _2 ~9 [! u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ S/ n2 S, N# x& J{8 m8 h# n5 U3 ` ~" `3 B0 O& F1 i
BaseMouseCursor();
4 v: S4 O5 @ ? B3 a/ W( |. u}" z+ C) S- D4 j
在其下添加:% ?4 K7 s, Y. ^: S$ A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 h: U9 r1 T* _: i) Z
{
# s2 A' ]8 u& J' H% _6 Zm_wndMenu.DeleteAllMenu();
$ x5 G- T% B7 u8 _m_wndMenu.CreateMenu(this);
w7 @ M3 ?6 q: c: Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* |3 j1 u- [3 B) T' ^7 m% }# N' Q# D
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' a( a( I" g2 |/ s) n+ I2 G. z{3 f W( z- K% i0 K( S2 n6 O
//P以上级别才可以删除所有道具1 x. x, G$ [$ w2 O. Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 N0 X3 n% V6 `4 B% v* L}; _; B- g0 g% t8 ~" x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 m/ j; ^8 b7 H+ _& X( y! F# _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% Y* d* ?% Q7 c" E1 f: g: H/ A5 r
m_wndMenu.SetFocus();
0 r0 M8 ?. @+ S+ P}, w- ^4 k/ `4 _9 h
------------------------------------------------------------------------------------------------------------) a/ S1 ?+ s, L \3 \) J
*************************
* y L1 a' [/ S1 UWndField.h文件& V: I! _* G- {2 R( M; E4 g' @
*************************
: O, w$ K. r7 r) b搜索:BOOL m_bReport;+ n, |1 W3 D" f: i
其后添加:
* N) G9 Q; i* J7 mCWndMenu m_wndMenu;
; ?( h3 f) B) `9 ?! A' m& w: h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; c3 k8 b# j) w' a Y4 w$ p
其后添加:. b- F. R9 k* ^. ^) X0 u3 S5 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 k z7 C! s# A( h$ j
6 z7 d% k( a. I4 ^' u8 k! [
$ l B" Y6 O) D" M- O/ A
|
|