|
|
源文件中_Interface文件夹下WndField.cpp文件
. Q$ A2 }8 Q# N" ]* W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 S% G! R4 ?2 s3 N
o2 b& I5 `/ T, k& jstruct sItem
* \' m+ {; j; P- H; ?; a" R/ h; D{1 T9 l0 Z4 a, @2 L1 T: x, p
DWORD dwId;
/ s) E* L! }/ Q; G! ?! T$ C9 X4 I& iDWORD dwKind2;) e5 S$ @. B* O0 H9 w
DWORD dwItemId;
9 Q3 L( z8 R$ H2 i* M' W" Q2 YBYTE nIndex;
" J3 e( v. ?3 f$ a% YsItem(){% @/ _+ V. R) X$ ]% b4 w I: w
dwId = dwKind2 = dwItemId = nIndex = 0;
2 ^2 O: Z8 q' P1 s9 l' U; l# c- p}
* f) W: R! {7 }8 o: x3 F* z5 Fbool operator < (const sItem p2): d4 t! o0 w1 h2 L+ F( C6 C
{
$ s: E/ e8 ^8 U if (dwKind2 == p2.dwKind2)# o" Q% @; `7 Q5 h, e
{
& K6 `. Y5 O' H( c7 ~9 v return dwItemId < p2.dwItemId;
% ]# _6 Z* o. _. V& K }else{- r; F* J' ~! ?3 L# d4 _4 Q4 c
return dwKind2 < p2.dwKind2;/ V0 H4 ~9 i7 A8 d
}" M( p& m1 M. I. A
}
5 h1 f3 ?4 @' ?. R# f; i};! E1 b2 K, f" ^/ E
class CInventorySort
% I- b* n/ I5 e$ ?- P0 p# \! T{0 L4 Z9 l, D& P8 u& ?$ ?* c
public:3 c; v% P' h P6 z, r: D) o/ D
CInventorySort()8 {7 D" x7 b+ w$ k" X% _0 j7 d" F
{% t9 \' W8 [( K/ b9 j6 U
m_dwPos = 0;4 M- T+ q( w: C
}
5 ]( d, { O, c8 J7 X$ |! A~CInventorySort(){}
" o$ j7 A- n& I$ A: J- u- d* uprivate:. E; w( @: d- F, ?/ J1 p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 S& s4 V- s+ w D
DWORD m_dwPos;
3 L _2 d7 E7 q! E' r0 ypublic:. F; K; V7 j6 E: j% l9 K
void Add(BYTE nIndex) [3 {! Q9 v* v U* ^: f% p1 X
{! }/ o# m3 i. E; _# u! K
if (m_dwPos >= MAX_INVENTORY)5 Q M m, N7 J6 q
{3 ], Q& h4 l6 G3 W
return;7 T, T7 T/ t7 p- v
}
1 @$ {: s. W& b2 g' J m_Item[m_dwPos].nIndex = nIndex;
+ f6 |0 L( a' R. j3 g m_Item[m_dwPos].dwId = m_dwPos;
: p" s W' _: m9 p, e9 P m_dwPos++;$ h& ~# Q/ q a& V
}; P# |+ z: {0 B8 D; j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 F8 k% D" s+ E. c0 c. i7 u1 I
{2 i7 b6 X+ {+ c; O! J7 s
for (int i=0;i<MAX_INVENTORY;i++)% \3 T" i* q, h4 a: E. O
{
/ i n8 ]% l( Q6 G- e$ k if (m_Item.dwId == dwId)
& Y0 }6 G6 y* q V/ @ h! h: h7 c { u3 j) B" `" I8 H2 F' v4 e/ j
return m_Item.nIndex;2 _: |8 u g% Z/ E* A
}
4 r+ u5 F- W: V- [2 p: f$ {/ T# D }
: ` g1 `0 p6 e. l return 255;
# S- I& f- @' t' q( L; ^7 A}
/ f1 M: P, q: A& i% kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ a& g$ J1 ?1 I7 j+ }; [8 {
{: n/ ~4 {+ d9 c* W
BYTE nTmp = 0;6 a& T6 V3 u: _0 l3 u% Q
bool bDest = false,bSrc = false;3 c& s9 y5 U- t/ |
for (int i=0;i<MAX_INVENTORY;i++)( C' m5 P: g; f$ ^; _
{
1 U! {5 A' h, t+ I, r if (dwSrcId == m_Item.dwId)
5 H8 D# g& x1 {- O1 v, e {1 F! t+ [& ~ E/ e7 z
//id相等 则 改变对应的dest和src
; i P# F1 X' L% \6 H nTmp = m_Item.nIndex;
. x d$ ]# r* M$ A) t9 P m_Item.nIndex = dest;
4 `2 x! q7 c0 M) X! Y }! l" Y) |6 z5 f- V0 s
}; {5 @" Z- f+ C! E. o% [
//临时数据保存完毕,交换开始8 g" y+ s2 }, {2 [# V, a' m6 u9 N/ p
for (int i=0;i<MAX_INVENTORY;i++)1 b% W$ R$ X+ \! S4 M2 u. u, O
{ `" a, w8 J( X _
if (dest == m_Item.nIndex)
' h1 Q8 q8 a2 ]% W" i' {6 v {
* k; R2 h4 N K/ }1 b! w //id相等 则 改变对应的dest和src
/ k& u) S z& Y" q m_Item.nIndex = nTmp;
3 C5 Q0 t0 N3 O/ i; M }- L! i/ O) X) B/ M: c; F; k
}
0 S/ F3 R/ T, M# p" n3 O}: I$ y& |! U! X" g$ s
};
3 w/ f/ l6 D9 X( C; A' P, N# n-------------------------------------------------------------------------
; v s% \6 D+ ~$ d% a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 ]4 H2 F( D* }, }) T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* _7 z9 P- l8 [; n
紧靠其上添加:6 Q5 K" D: \3 \
if( pWndBase == &m_wndMenu )
c2 d, E0 u# F{/ x2 Y+ |; y6 g# Z; t
switch( nID )% v8 I! o! O3 p, L7 t8 z( e
{
- i9 }8 G" F/ z6 n case 2:
{7 l. G# I0 S1 d) ^ {
( `5 W: F4 W: Y& u& j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! m% o0 X$ w: B: O1 `4 w: }, a
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ s2 j: v6 b1 l( p
{: X& F8 Z4 }& y" R
break;+ }. {, Z6 g2 h7 g$ |# [$ @
}: ?; W2 J- r2 b9 S
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 ?4 a6 j/ W) v, D" `) O4 y& P- X {7 S$ d% ?1 [+ j6 K+ g, t& e- [- e# ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 B: ~3 @* y B( X8 Q' n if( !pItemElem )
3 i% n( E* o1 l7 ` continue;
9 Z- w7 t; a7 D4 P, F% } if(pItemElem->GetExtra() > 0)5 Q) @3 C7 n! M: S5 A" p8 k
continue;
3 _4 d2 ]) M+ ~6 N/ k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! P# i8 E4 [6 S% {$ s continue;* e7 n) n% G, ?9 q' u7 j( h
if( g_pPlayer->IsUsing( pItemElem ) )9 K$ k/ E+ |+ R$ B0 E: F9 L4 [: l. I
continue;
$ R/ A& x, D: J/ A if( pItemElem->IsUndestructable() == TRUE )
( i8 D- r7 [; A3 P' ?6 ?( j7 h& W8 l {# n' o6 B& }2 `3 l
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! d1 d7 F6 M4 U
continue;3 `) m$ J. ?! m1 F& u* D+ @1 x
}
7 w6 \2 S" [8 o6 x0 ^, d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" H; P3 i4 ?( d! a2 ^3 ?3 {
}
' k8 X+ n K' Q& N5 X break;
0 ?7 T$ _# x# i' W }! e% ~. `3 U* B& y
case 1:6 H' _' H7 ?0 j. G. \
{0 W. v. {$ j, D# w; T
//整理背包% F- `8 N8 r5 H7 \( V# R% m
//////////////////////////////////////////////////////////////////////////
" [) z$ }/ ?( n) j+ P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 a' G; @6 y: I: P
//////////////////////////////////////////////////////////////////////////
% I* [3 j# {7 t, T! b- o }+ Q4 N3 y" G //////////////////////////////////////////////////////////////////////////
) r9 A+ {( R# s' j4 K) ~% A% N5 g CInventorySort* pInvSort = new CInventorySort;
5 G0 i. ]3 Y" F. M4 I! j$ d( x vector <sItem> vItem;0 U5 I& z* A5 O, I* j2 a3 w
vItem.resize(MAX_INVENTORY);//初始化大小$ v' d2 F: Y' R0 k3 r7 h
//////////////////////////////////////////////////////////////////////////
1 T/ s3 L: U6 f( k0 \- N! l //填充数据0 Q; g }2 B/ Q# G1 R$ h. v6 I
for (int i=0;i<MAX_INVENTORY;i++)
0 x" i* {+ ~" O$ @3 F1 t {
+ H4 k! |) q0 P" z; y8 F- Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 W5 k g2 y& s. L* i
if (!pItemElem)
6 ]) V2 v" W; Q5 G {
; e! i( M8 f1 t0 n* Z. m6 g' f, q vItem.dwKind2 = 0xffffffff;
U( }; s4 r+ _, k vItem.dwItemId = 0xffffffff;
3 X) r6 V/ k. ?' g; Q0 o vItem.nIndex = i;
4 w; w+ p& w% L( `3 @5 q A$ p" v0 f }else {2 Y/ m+ H! d( C
ItemProp* pProp = pItemElem->GetProp();
1 K4 c2 d% w- k( W vItem.dwKind2 = pProp->dwItemKind2;
' U p+ o. p% r8 z vItem.dwItemId = pItemElem->m_dwItemId;- P8 M8 }( P3 v, f
vItem.nIndex = i;5 {: a2 j; _2 ]" t: V. V
}
4 M( I# H% ]7 y7 _- P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ u5 T5 k4 g- C# Z% f c# d
}
$ B* ]) x! P/ y2 Y& @+ D( `: Q+ f //////////////////////////////////////////////////////////////////////////, w6 M+ T" D9 q: y- H0 F
sort(vItem.begin(),vItem.end());//排序. y1 y, P3 S1 t% b
//////////////////////////////////////////////////////////////////////////7 T1 }, V8 G4 m
//交换
. a# o; o1 V7 c& ]+ T; b for (size_t i=0;i<vItem.size();i++)
6 g$ ^$ u5 x! f {
0 a1 ?' V V0 ~1 S1 ^% U" Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: D% M- I+ J' ?7 @# B" v
pInvSort->Add(vItem.nIndex);# m. N" d% g, t8 p2 U- } P
}
1 V# ~$ K$ J7 e# f7 | BYTE nDestPos = 0;9 f# y3 r+ `* P, \$ n, @3 \% l! p
for (int i=0;i<MAX_INVENTORY;i++)
& o t* W6 j& {& f# {; }% m; F! Y {3 s6 `- z! z, F8 s0 j1 o3 n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 L( Q" {% A# u* Z, M if (pItemElem)
c' D0 j7 S* P2 U7 _2 y' d. O {& ]8 d0 z! U, x: ?# W
if (IsUsingItem(pItemElem))3 ~- c# ^3 K! q# l+ t6 ]- \
{' x7 ~, O1 T) ^& B5 b
//这个位置无法放$ q# V% K* T& F" Z5 y
nDestPos++;7 e- n5 {' \8 d
}" X0 e) B' L! W$ a# s4 z
}
+ E- U1 y( \4 X2 l: g4 W2 i0 y BYTE nSrc = pInvSort->GetItemSrc(i);/ K7 h. _) \' o4 u# Y) @2 k# z5 }1 u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' k4 g3 S1 P3 e m5 w2 p if (pItemElem)
I0 D" z/ I+ [# t {0 n* \" y0 c) v/ U, H. v
if (IsUsingItem(pItemElem))6 i9 M/ l f! u2 O% M
{6 ^. c2 T4 C$ V9 @! b
//这个道具无法移动,跳过
6 I7 @0 z; ^. S, W$ d/ U: r& x continue;
3 M Z1 A9 C9 }( }: _ }6 H6 e4 k2 m5 u, X3 |' @( J8 f+ U
}else{
& E' h6 o$ H: Z" F1 T. U; I4 b6 h5 b$ n //空位置 不用动& W5 k: ?6 _# X% r
continue;4 @$ p: `6 @( h" R! H% l6 t" b
}% R& U5 o( m- T% T9 H1 G
//////////////////////////////////////////////////////////////////////////
' o( ^; \! e9 h% I! s3 t //开始移动
% i5 k% X8 c1 L: L% v" i if (nSrc == nDestPos)
1 h( p' s8 @; N5 x+ o/ p {
$ L$ T$ I8 s) s( W Y. q+ l, z' @+ a //原地不动
$ B# a- A" p5 F0 E) \/ D1 K nDestPos++; }' h" p; T/ F: _1 E
continue;: i! n. w7 Y: l
}
( R$ r% h4 A; B) e5 \ l pInvSort->MoveItem(i,nDestPos);' r- d0 m1 j8 v1 |3 b: a2 X5 F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 A+ S( p" |4 N% M" t. ?9 j Sleep(5);/ @1 \. } k' L3 `$ i& {
//Error("移动 - %d->%d",nSrc,nDestPos);9 d( B2 G* Z7 w2 t
nDestPos++;
. `) R) v& b4 m! a" N% A }8 [8 B' k; w+ K$ V) V; t
//取第一个元素的信息# a! i$ A1 @/ d6 O
/*# G3 |7 z7 \% X6 e% o+ n7 {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 W7 D/ `- T- A/ y$ i( i" c
{
0 l3 |7 w4 _7 t b" v7 y/ ~: ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ O5 U. i+ W1 D1 t4 Z# ? g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ M3 N3 u/ j% P
}
& V" r( e" ] y% T s */' {/ f; d; L! P+ q6 @ A
//////////////////////////////////////////////////////////////////////////+ w7 M' u# J0 U" o9 u: h
break;
+ p& l0 U, W; Y. f& u }( d0 S; G7 d4 o8 \8 ^( o
} , k$ \: w# K! G1 |: t0 A
}
" b* a' ]; _3 U7 x& V9 n7 [7 im_wndMenu.SetVisible(FALSE);
: @( R5 d, q2 r$ _, K5 t& U4 U7 V# b I9 m
--------------------------------------------------------------------------------------------------------
4 j' @1 K' }/ \) O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 a5 f3 e" O/ K2 ^; r' B' \6 T{
% }$ W/ |) ]! L: dBaseMouseCursor();1 l, V6 \7 d1 I/ @ T2 }
}) @; ]/ m& q l! c( C3 d( p
在其下添加:# K# |' L. X4 }
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) m; x! l$ s O) K# e{
1 w0 u7 }" e6 N* |( Om_wndMenu.DeleteAllMenu();
8 o% n2 p, v C: Fm_wndMenu.CreateMenu(this);( F& B. D: k6 d
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; x/ _, ]. [0 Z2 Z, q7 R) O: j5 F; h0 I( m( q& u: `! u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ F. L: ~, G4 c/ r5 g/ \{8 b; G! B0 c9 l( V P
//P以上级别才可以删除所有道具
0 \$ F$ {" w W: E4 U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" X# h1 G4 u5 z, @9 g
}, R1 i4 r2 j8 A S/ Q/ J& G+ e' i
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. l! {0 [3 X. A* ?! ~; X! jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( U, P- z. U; C; A3 _
m_wndMenu.SetFocus();$ i, T& C+ J" a2 y+ W
}
$ [5 v. x% j+ k& N( r* ]/ j------------------------------------------------------------------------------------------------------------
5 R# w! d: m% [*************************
; W2 C4 d: o+ v* E, C" X6 PWndField.h文件
: x* p& j/ q# n4 y8 L*************************
# X# N+ I, a- |! a搜索:BOOL m_bReport;! [( t# ?! l7 F2 S7 Y
其后添加:6 y& x8 ~# G* y' _
CWndMenu m_wndMenu;. y4 W' w! z, F. F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( u+ j6 L5 F/ q3 b" Z其后添加:; B( r0 p2 W. T2 O
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 \4 I4 i8 h0 P6 @. }* h7 c; \' a& f4 b' S" ^2 e
; G; F( c% e/ f: u |
|