|
|
源文件中_Interface文件夹下WndField.cpp文件
: D' X' s- }: Y7 i0 J2 ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 A0 i/ x% _9 M: m1 a
1 T$ {8 ~3 e! w+ }- Q: K3 z1 Ystruct sItem
2 Z T2 p2 C5 }) |6 |{% e% K( O5 y1 r/ f( p
DWORD dwId;; C {: @3 N5 {) e& O& y
DWORD dwKind2;
) S& E1 `$ e6 e8 i9 E. h! e sDWORD dwItemId;
- G' i$ A# l% d2 qBYTE nIndex;3 I* Z1 q2 N# c, i6 `* H
sItem(){% x, c2 Z6 z7 s; @* B
dwId = dwKind2 = dwItemId = nIndex = 0;
7 R; N5 Q! \+ C}1 ]! \) ^8 _7 x3 k
bool operator < (const sItem p2)( K) j! A+ r5 ^5 K- Q( F4 h
{+ r6 E. E$ D% m( [
if (dwKind2 == p2.dwKind2)
# A% y2 D" J% \8 W0 L {
, o% Z2 v4 Y K# i- c: @ return dwItemId < p2.dwItemId;- K& ^% Q n" l9 P! a/ F$ V6 w7 G
}else{
' e; c# q/ f: r& ^5 ?' ^8 ]1 b- {) J return dwKind2 < p2.dwKind2;" O L8 ^7 ^3 m' Z& K8 k' L0 \
}
: c# E4 q7 _2 D/ M}, L( p* W& k N/ J" l
};
6 R9 W) h# ]% ?; f% W* {class CInventorySort1 E0 {& h) U# _2 u- o0 B0 q1 Z$ g
{9 S% y, f% X" k( d+ ~2 Z0 p
public:- Y; E, B, x0 O/ F0 n7 l1 H" n
CInventorySort()
. e4 M- C" S+ @( R" p0 t! I% s- O{# N9 h2 p4 d3 H! L; O
m_dwPos = 0;
( ^0 C7 L8 l& f5 Z- u" H6 L( d}
! r+ D" k) r0 }~CInventorySort(){}
( ~5 f3 X# i3 I+ uprivate:
) }5 @% u; Y( GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; Y6 u; x, @; S
DWORD m_dwPos;
0 W- t7 [/ z# H* _+ e/ d. M O0 ipublic:5 O, O- v" R% E( F/ E* b1 Q: `
void Add(BYTE nIndex)
7 Z; z5 h( o' @6 ~{
, a7 }/ V2 l4 u8 _: P/ m% ?: M& A if (m_dwPos >= MAX_INVENTORY)
0 S( }" `6 R+ I8 P, R { N4 |# ]5 S4 Z' r, [
return;. r# `& X( K6 b
}
& A3 V6 R6 |, w* E m_Item[m_dwPos].nIndex = nIndex;
1 W. @9 O2 D- O+ |9 L* e m_Item[m_dwPos].dwId = m_dwPos;1 {! ?* o1 C; U* N& ^4 E. V4 |
m_dwPos++;4 x0 K6 d; y& {
}
2 _" I% S3 [' Q' q1 T6 k& lBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# O- R: Q' g: H7 }3 W
{7 R* T8 s# Q# e0 g- s2 X
for (int i=0;i<MAX_INVENTORY;i++)
- P+ X$ ~ B( R. ]. Q {
( z" b0 V4 T' @( E0 d. d& k9 \% C if (m_Item.dwId == dwId)0 _ [& Y0 B7 D- K& }) {, {
{2 O# o3 Z& P6 @3 T" e
return m_Item.nIndex;! M6 V# f8 e; H1 u+ N
}
/ d, Z! K; d5 e% J) {& {" A* c }
" o8 V! j$ w: G* a% v2 E3 S/ m return 255;
) v. V0 i! O; U+ S% \& T9 M+ ~}
3 N- I- M+ L4 {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 B G* s8 y8 U' R3 J% u{
" h6 O) p' b% }4 y, R. t9 C2 {9 A BYTE nTmp = 0;0 @: d0 u$ v6 S$ B: e% s
bool bDest = false,bSrc = false;4 p+ H' h# s4 Q! _
for (int i=0;i<MAX_INVENTORY;i++)
( ]2 `' E% f+ [* ]$ P& w& f {
4 q1 |9 b& \/ S* z' I if (dwSrcId == m_Item.dwId)6 \3 _6 g' \- B- O0 v
{
+ g$ R% F# ]" a& {0 ?. t5 e8 T8 N //id相等 则 改变对应的dest和src
5 |! v; F+ E& J8 [ nTmp = m_Item.nIndex;% g& v s. S* L( \
m_Item.nIndex = dest;, d3 J% P+ O0 V( M) K+ z
} [- [, g, g; h
}
& m+ [* t" D( M2 l //临时数据保存完毕,交换开始
, I4 K- V+ p! J8 _! c. e. e& e+ [6 | for (int i=0;i<MAX_INVENTORY;i++)' {0 H0 g" Y0 U- R4 U
{: y. l" R' U1 K: s
if (dest == m_Item.nIndex)- P6 _) l) T1 A0 }) y2 B
{4 h5 l- w! M3 g
//id相等 则 改变对应的dest和src
3 ]9 L: l+ b3 K# k m_Item.nIndex = nTmp;' ~5 R C. w+ R+ C9 n$ \
}8 B0 X8 G; K% A6 |3 X
}: g ?+ \ B- Z V M$ F4 i9 v6 D
}% b% k9 ~7 j2 J' p
};
* [4 L t9 {' b-------------------------------------------------------------------------9 _$ n! S" ~3 ]3 _* f# q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 F0 |, k9 h p8 C' A
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: a. Q q* R+ m7 E# d
紧靠其上添加:
( N5 o% v+ }. G2 R/ J9 D1 f: x- i) `- T" Xif( pWndBase == &m_wndMenu ): T* r- _) R1 y, C
{% o( F1 A; f8 n1 w3 k3 N( ^
switch( nID ): x% K2 Y/ F n$ _0 f6 E' b
{
5 ]# b6 {3 @- ^ case 2:
! s+ v, s. J: z1 b4 N8 S* u/ k {
! N( t% t7 R; f2 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 b7 k6 `3 ~" h% z3 ?& w* s, }
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- T& J8 o4 _/ r4 |
{6 T0 B! b9 P! A& d4 O( m
break;2 P1 r( }+ d* i
}9 I1 n) E7 u9 t$ @2 ~
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* H$ O7 n5 F: L0 j3 z7 }1 F {
- E: V6 m8 h% P- d s. a7 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 X, E4 D5 q- O9 i if( !pItemElem )
0 t7 b: m, T9 |8 I& \. K; O/ @ continue;* L! C) K4 Q( y5 z! Y3 V
if(pItemElem->GetExtra() > 0)
) K# R' C4 \9 @: B' ? continue;
! P- O$ l" y0 [+ X; j2 ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; C; S' a1 G+ g" \# F# d! W
continue;4 W. {2 v# e7 L+ T$ _
if( g_pPlayer->IsUsing( pItemElem ) )* v" [6 [/ u1 w+ D2 z |
continue;
# B/ q! L* M$ y Y- T0 I if( pItemElem->IsUndestructable() == TRUE )& X3 A! K# c2 S
{
! v' m: |& ~% M' j5 a) [4 d1 @ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 s1 F3 I9 ~% g( R* ~1 ?6 a& T- B continue;5 U6 w$ t1 T/ C* ^7 @' m
}
9 D5 i! b! g/ X, U, d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 o$ B0 k7 w; H! n/ @ }
: G8 w" O: K5 B' K break;$ [+ @+ @: @, f! f9 q# c( }
}% Q4 Z% j, m1 R9 f1 t
case 1:4 l) ~3 ?+ n, |* w7 Y
{* f. K, G1 F' u0 F1 _
//整理背包8 ?$ L% h, I8 Q. P
//////////////////////////////////////////////////////////////////////////
5 `; {+ a" Q' x2 i( |( h' p2 O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& g8 C/ t2 w& C4 R+ @
//////////////////////////////////////////////////////////////////////////
% P* @2 S Y f0 x/ Z //////////////////////////////////////////////////////////////////////////
$ o0 a& k# j9 r! ^( H0 v. C CInventorySort* pInvSort = new CInventorySort;5 y0 ^6 G- t6 I8 w) K' H
vector <sItem> vItem;
; v" ?9 Q- w9 Z% B( u1 R: R vItem.resize(MAX_INVENTORY);//初始化大小
5 `; Q, Q3 ]- z- f9 B$ z+ b& Q //////////////////////////////////////////////////////////////////////////
% E/ F ^3 _0 ^. U! J- q( x) ? //填充数据0 s. ]& j2 j$ t+ D0 `' y( t
for (int i=0;i<MAX_INVENTORY;i++)$ t T, j: s/ n% y, A3 W
{
/ d! [$ n5 ^$ S9 T/ Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# a3 {" v/ h+ N/ h' L$ F4 v' g if (!pItemElem)
3 I/ D' g$ Z& N& v/ ~, ?; d { |& z4 m, p4 g
vItem.dwKind2 = 0xffffffff;' n/ p& h- k* A: z
vItem.dwItemId = 0xffffffff;
% u- u; G* Z7 n% c9 ~, r vItem.nIndex = i;( j m8 A6 t" S/ u
}else {
& x* ]- T+ W/ Y3 q, Y3 k ItemProp* pProp = pItemElem->GetProp();
0 e9 s% Z4 R1 ] vItem.dwKind2 = pProp->dwItemKind2;, g8 ]( F$ m" t1 v
vItem.dwItemId = pItemElem->m_dwItemId;1 v% z2 e0 d& K- S
vItem.nIndex = i;' a# ?" l, r. z9 d( P
}/ A4 e$ W! O) s6 ~4 c2 F5 F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, o9 l& L9 D8 N" y5 B* n* i% s' m
}
# c, z0 J, Y$ G3 V //////////////////////////////////////////////////////////////////////////% n0 Q; A% \8 r/ x9 n4 u" O- G" Q9 g
sort(vItem.begin(),vItem.end());//排序1 H/ i: | M B4 p4 d8 ?' _
//////////////////////////////////////////////////////////////////////////( ~ `0 k9 c8 j$ T5 m
//交换# K8 y. |2 ~' F' q
for (size_t i=0;i<vItem.size();i++)
3 t8 p! ]% O+ t. b4 z5 P/ p, C {. \0 l0 H# V w2 G0 h& c7 B9 X0 f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! e0 L: E* H4 ?6 i
pInvSort->Add(vItem.nIndex);- j9 e' T |1 ~, U! _
}
4 y2 q2 D% S: O% V' X8 f BYTE nDestPos = 0;
$ n" M) m) F; u3 B- A" L for (int i=0;i<MAX_INVENTORY;i++)
7 R" r0 w6 d# c3 V7 ~ {. P& M; L% E; C5 ~; o5 N: g% K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. b" @' [( c6 D0 F if (pItemElem)
7 T# `- F1 `0 k: Q$ F+ Q {8 S D' ?0 X8 U9 D* w
if (IsUsingItem(pItemElem))
1 l$ T7 g! K* f* ]- B {: u+ K$ q9 Q; N! o3 A' r: O
//这个位置无法放
3 f. `) l! \4 @; P% F0 O! C" p" N nDestPos++;8 c' u3 z \% G6 Y3 x7 V$ R! I
}1 Y; T B* T" H1 n( D
}
4 x C* Y7 y8 g BYTE nSrc = pInvSort->GetItemSrc(i);$ m8 @* V1 K6 A/ a, `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) u. {; V, A( Y+ N0 b" ^ if (pItemElem)# W: N: \9 _! {
{/ m% R( ^. R4 i' ^( w
if (IsUsingItem(pItemElem)): Y- ? D2 K, h
{# }4 d# n# p& \8 v8 S/ B$ B% m0 o
//这个道具无法移动,跳过
) s. B3 W6 H/ Y3 m# \) l continue;
" X, b c# W0 L }
. f, W3 u8 v5 C }else{+ B3 }: s: h0 Z
//空位置 不用动( E( S& ~1 C3 p2 ~! G4 Z: M
continue;6 d0 R) K) }; b1 X2 N/ L! G* h
}
/ x$ V6 l2 R' E //////////////////////////////////////////////////////////////////////////
3 H J+ n- ?' u* O% ] //开始移动2 D e s1 y. ?" [3 |
if (nSrc == nDestPos)
Z) k, j# N/ l2 q0 x( Z7 k {
( U. A* J( c. r! P% R u; p //原地不动& d; }2 Q k: c( g
nDestPos++;& [9 z2 q, K0 B ]
continue;4 u( b5 z) ]9 q# s
}
0 m0 }/ _& J+ s; \& ~3 ? pInvSort->MoveItem(i,nDestPos);& a0 ]7 r2 Z9 h5 R2 _3 m: h6 W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 N: w a1 e4 [$ A. O# c) p Sleep(5);& M& V; i- T; _
//Error("移动 - %d->%d",nSrc,nDestPos);" \5 U. X& k7 K& e: F9 g* M
nDestPos++;
# ~3 j9 I! `0 e( m5 Z }
( i, ?! y2 M) m: t- ?9 l //取第一个元素的信息+ M" X; n* R6 v8 D3 Q$ D2 |' x
/*
5 b% y. ~0 N. j8 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); X" `: d5 O( Y) [
{. `- e8 s( H! r7 r9 g2 [* H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 f9 p. V0 k5 \3 [/ Y
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, F- R9 ?0 m; G }
+ `5 M8 q0 {8 n5 i8 m7 h */
9 J. D4 z7 e) V8 A5 L9 [ //////////////////////////////////////////////////////////////////////////. _8 e8 `0 t# i: j6 s
break;7 p& h9 V7 X5 I, z, G4 h
}8 V: d( w/ r6 X1 ]* f
} " g+ t- @) c: W: J3 P1 w' w* O8 d
}
) Y1 m" `1 h. ~( U3 p. [m_wndMenu.SetVisible(FALSE);5 l- j! {; f% O% s1 F5 ^9 k
# w0 I# c; w0 S8 T$ y
--------------------------------------------------------------------------------------------------------& ?% L% {: h$ D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) W. n! l2 z+ B8 h
{* {' ^7 R l& f# w
BaseMouseCursor();& r0 d( v; k$ U2 h3 V" d
}1 l: D; N* d: t3 \
在其下添加:
, y$ P( Z$ |: K2 _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# b! Y- J3 a! E; k6 z! [# i{; W0 c3 T6 \! [6 d/ @( Y1 f# Y) |
m_wndMenu.DeleteAllMenu();" t2 r7 f3 ]1 s6 b4 e
m_wndMenu.CreateMenu(this);
% R' Y# ~# b( H) F* i! F7 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 ^3 k1 [' b, U/ Q" }. R8 I
+ r9 f6 v; q; e8 \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 Z# t& P! a# t
{) s! p$ j/ s( e7 n7 M9 h* _: k
//P以上级别才可以删除所有道具 X) }* j/ L/ \! E t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' q: W4 z8 x+ J% N3 `$ k; j}
4 V& k2 A2 x3 ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% n+ ` J- O7 h# f6 ~ n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" m+ v C0 Z) q/ w: ?8 _; j
m_wndMenu.SetFocus();
1 h) c) H! Q2 b6 [" e3 R}2 f% N# `$ A% M8 J% q9 N) B
------------------------------------------------------------------------------------------------------------; c# j9 a$ h) v# ~, p
*************************; Y1 N1 f$ s3 H. k+ E7 e
WndField.h文件
" l" M3 {% ]0 P*************************3 y2 S; n r7 p. E) ?6 M: I" c
搜索:BOOL m_bReport;, W( I. K# E `$ j; b8 h1 F
其后添加:9 Q6 @2 y9 [+ w$ D" q, F% L. ^
CWndMenu m_wndMenu;
$ `+ o& t' S! M6 _) n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 y; o4 E8 n* S6 a& t1 P! J4 q
其后添加:
$ [' A2 U* c1 S1 e6 f) n& @% dvirtual void OnRButtonUp(UINT nFlags, CPoint point);6 d: I5 r! E6 u: A$ H
9 [3 G6 s: z- D4 S; v y0 d1 D- q
7 [- i: h6 D/ B) ~6 C |
|