|
|
源文件中_Interface文件夹下WndField.cpp文件
; T$ b# j5 z8 r( H( R1 A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 |% B- ]* M) H" B/ `+ u; ?2 E+ a+ e) U) G. G! H& q) s. y* T
struct sItem
* u6 Z( I Z; l. z{
; n3 O8 f( u$ x0 J0 e# RDWORD dwId;" B% F/ b7 ]+ n. J# D' I/ b
DWORD dwKind2;
v. N3 \ C7 \! V+ PDWORD dwItemId;
6 e2 }0 v2 [* a, ]3 c$ EBYTE nIndex;( V- z: y {7 A5 A4 z/ K1 c
sItem(){
) h: O3 I0 o2 e1 i0 U; R( a9 o dwId = dwKind2 = dwItemId = nIndex = 0;; t* X1 M( A) A' r) K. Z
}; o, Q* l q& f# z# R) U5 [6 k
bool operator < (const sItem p2)
+ K+ X+ T |& ?8 x- b# ?4 c/ f+ Z{+ B* f! V" f4 _& V4 E' C2 y
if (dwKind2 == p2.dwKind2): s4 j U: i/ A% [
{
, @2 ?2 F. \5 L3 ~5 P return dwItemId < p2.dwItemId;5 @/ {0 s0 ?2 w4 r
}else{0 d; n v3 }% r3 i; ~
return dwKind2 < p2.dwKind2;# ]1 I# k, s1 w
}
% g; s* C- Y0 H1 R- f}
' U5 }; I' y8 e, T* s$ c};
5 U8 C) j r( c9 ?, @) X2 o7 Tclass CInventorySort# T7 L; @& ?: Y1 }; h- s
{* D5 Y$ u1 H; s5 {# |$ c4 E
public:* r& T8 m, W6 W N
CInventorySort()
O6 b; H8 I" N& f{! j# ~8 v# A+ j+ ]8 `" ^
m_dwPos = 0;
7 o1 k) t! c* }}8 a1 ~4 g# \7 a
~CInventorySort(){}
# J% C* t1 F' f6 T; w# c! zprivate:* k h/ c- q3 S4 U: ?2 H9 L/ V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! C2 z# M" q( D8 {$ N. CDWORD m_dwPos;+ t1 J/ d+ \% A* @
public:
, @$ P3 K3 Z. lvoid Add(BYTE nIndex)
# V0 R4 F8 O. @$ |3 x3 Z{3 t# a. p/ P1 I
if (m_dwPos >= MAX_INVENTORY)) p6 z% j! i$ ~4 s, y2 B
{" M) x1 o4 N, b
return;
3 Q) O7 m: O1 a! S ?! g }
3 |6 C/ ? e2 j; C3 V4 V) Y1 |/ } m_Item[m_dwPos].nIndex = nIndex;
) [4 _# X" d+ Y; k m_Item[m_dwPos].dwId = m_dwPos;" b0 f" i. T2 |7 E5 I# U( u
m_dwPos++;( ^6 P0 |5 O( I9 o5 |0 j$ K" _( G
}% {" n* Q& r- Z3 p0 C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' ]2 Z% r) U# w$ t! `
{5 u8 R! M; X+ U2 C; J
for (int i=0;i<MAX_INVENTORY;i++)
- R) M$ P8 Q% \ {
- i1 O! L" e d if (m_Item.dwId == dwId). E: E, U7 O6 M" b1 R6 f
{1 q' K. ]. @& {* `
return m_Item.nIndex;3 @5 V r) s7 Q
}9 H( W1 A2 p# S9 V. A. V4 j
}
9 o- z; i' T: l# I return 255;
% a' W( E0 [9 h6 {) g3 i}
* ^2 Q: a5 d; ], m) S% \( i3 ^2 Pvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& |7 |- t2 z' r* h( z' H{) _ A. K8 S( l8 h7 R, L- i
BYTE nTmp = 0;+ v9 q1 b$ a+ R! a0 p5 t9 w
bool bDest = false,bSrc = false;8 h/ ]3 k* q8 f0 o' I7 H' c
for (int i=0;i<MAX_INVENTORY;i++)
( ~3 B- G7 p) Q4 [3 F! @2 G {- y, i: H9 @5 v
if (dwSrcId == m_Item.dwId)2 o( f1 f7 ]# j0 d
{
# T) `& F* |5 q4 {: ` z" I( P //id相等 则 改变对应的dest和src
3 d4 j$ E+ ]' s. E$ t7 B nTmp = m_Item.nIndex;
7 h, a) n! v9 m m_Item.nIndex = dest;9 Z8 i' L3 }' M. V) W; S7 a
}
7 V& x9 ^' ]( `5 R) i/ r2 B }
J$ [. E% Z/ X; t //临时数据保存完毕,交换开始
0 R. t) ~& t1 h( o+ O: @5 _ for (int i=0;i<MAX_INVENTORY;i++)
9 C' K9 z8 G% k, ] {* b" ^9 U2 }& F4 B+ ]: S
if (dest == m_Item.nIndex)
1 P2 I1 `& n9 K) G E7 g1 a! s: O {
" _' b/ a4 R6 L/ R5 j# P- a //id相等 则 改变对应的dest和src
: x* j6 S- ?: A V# T& i m_Item.nIndex = nTmp;7 X0 S0 d9 i p* E6 O
}
: r- A' f X6 |3 E; H9 H5 J2 q }
8 i O0 \' B& x8 L}
4 y# U: i! ^4 R( Z};
- d8 i- W6 s- a* h3 y- X3 ]-------------------------------------------------------------------------, { K2 j6 l4 k% s' s& H! _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: e9 S: K2 y0 \8 Q5 D3 s" o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* a# R" E; A) g+ U, s
紧靠其上添加:
, t- w& d7 V% B p# F; r6 q, Y$ qif( pWndBase == &m_wndMenu )
, l( r& c7 [1 D' x) D{1 x) o, E$ b/ K2 @& C
switch( nID )" p! g/ c, R/ @8 F! y' ]! u4 g
{) i s; x6 w/ H' F
case 2:
1 e% D/ y1 q% W* e1 Z {9 O9 j9 D& r y* ^' w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 g4 H6 I; Y/ u, t2 G; F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 J8 B2 `# p9 n
{
( d8 C! }8 J8 s0 Y$ M- t break;
5 F0 `! ?( q" H }9 r0 w2 O3 a# I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 V- j" c2 B9 f- j) V# }2 r7 U
{
6 V {) X. G/ i+ u( ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- R8 {# _& J, x+ ~ if( !pItemElem )" j/ T) Z& \2 l2 h+ w. @, I
continue;/ A( s; |3 V3 _6 c A7 X
if(pItemElem->GetExtra() > 0) a9 e& Z+ d) t" f3 R: }& \% e
continue;
0 R* _+ k% K6 |2 s( B7 N if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, h T% w$ i( x& f8 g! Z continue;. M1 s- h* K, _2 l7 @' U
if( g_pPlayer->IsUsing( pItemElem ) )
3 f- \3 C) @3 T. n continue;7 O2 G9 U9 e) T+ o( C
if( pItemElem->IsUndestructable() == TRUE )9 ~9 r. {( U) E) H9 Q
{
; L5 S2 i P9 U' N% x* L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ A5 V( \! Z4 S7 m0 h( u* G
continue;. \: E5 N5 B% P( Z
}! }4 J! z. u2 t$ G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; _8 g& w; e8 u' H& d5 e8 u& d }, ^4 Q( z5 u2 D1 \
break;; W8 E5 V/ ^- {& |) @! I
}
^/ _! [. L) v$ m case 1:+ i# u' Y6 Z) F; I4 `" B& g, u
{0 g( k& D* s% T7 T3 ~6 A4 e G
//整理背包8 F$ w% `' p- B0 b8 `
//////////////////////////////////////////////////////////////////////////( p* l5 B q5 v
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) u* X" a( d2 ]# d5 h
//////////////////////////////////////////////////////////////////////////( `' X( X2 {0 H9 k+ t- p/ t' c" d
//////////////////////////////////////////////////////////////////////////* X( Y* B8 ?8 H! }; f
CInventorySort* pInvSort = new CInventorySort;0 s n" `) n. S- ?" x4 C2 V
vector <sItem> vItem;
5 ^% c- e" u% {8 Q8 q vItem.resize(MAX_INVENTORY);//初始化大小) Z2 j$ Y ?( t z, d% d" m; w3 X q
//////////////////////////////////////////////////////////////////////////+ d* \6 z) d( Q4 o: e% I
//填充数据
) E1 v; n+ o' b- j8 z# }: Y: e8 l for (int i=0;i<MAX_INVENTORY;i++)( B) [+ J; u- `2 F
{; Q/ a! E6 ? ]( ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 z% }7 \ B1 \. B' l, `9 F
if (!pItemElem)- S1 q9 u q4 J( q
{: F$ B' Q5 K9 y
vItem.dwKind2 = 0xffffffff;8 z) a0 d& e$ i) l+ _
vItem.dwItemId = 0xffffffff;0 x2 g1 ?; N+ [: p6 z9 v3 n% E6 X8 E
vItem.nIndex = i;8 X9 v1 B& Z" ?: a8 q
}else {
& m/ b. s( c, t8 R8 k% O$ G ItemProp* pProp = pItemElem->GetProp();
4 b+ I: i1 i( s, U vItem.dwKind2 = pProp->dwItemKind2;& ~1 k( @; N4 i. a; u; I/ L
vItem.dwItemId = pItemElem->m_dwItemId;2 K- D% G! j, ?: O% E) B( e9 E0 N8 \
vItem.nIndex = i;. l4 N* G6 H& e1 x
}
" |& d- h* m: ?" `7 o- d" Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
H, A; z3 B! c, N } }
1 |) e$ ^2 z* l; |4 [ //////////////////////////////////////////////////////////////////////////
% G: }' x. J9 Y+ `2 } sort(vItem.begin(),vItem.end());//排序; m$ M# T1 b# ]6 b) }, B
/////////////////////////////////////////////////////////////////////////// F7 a* h4 ?. X/ e+ T2 |, J
//交换8 v$ l1 I/ H6 Z" h4 m# ^3 R8 g
for (size_t i=0;i<vItem.size();i++)6 E/ A- I `4 F" z v* \! I- H% ^
{
4 U! r6 \( t4 O' W+ X- }: G5 V! o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 j/ O$ L% p$ N) d4 C5 D" u
pInvSort->Add(vItem.nIndex);
3 y! @; }; ^, S9 A$ Z9 n9 A }
2 d ]! \' S$ ]2 o/ D/ K BYTE nDestPos = 0;, f" m/ I& m4 K2 c i
for (int i=0;i<MAX_INVENTORY;i++)
7 @! B1 ^- ^: |) Z: D! C* ]* K {% w. k2 v9 F* A! V5 O& c4 G4 M; N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. m1 T+ K! O1 d. A; `" H if (pItemElem)" P5 P# y! N! x* n6 v) }
{) s9 G+ C+ R+ \
if (IsUsingItem(pItemElem))
; J* G7 v& V ^; U! j" @" s {% c5 ^: `3 \* P; Q8 ]
//这个位置无法放
: U' `5 }9 E+ f8 s- } nDestPos++;# R+ u6 {0 Z! i0 \, Q1 v8 P) u9 S9 x
}2 G, h, J" _' N) B9 z: h" ^2 Q
}
& r i0 `& q2 b( M) b; X1 D BYTE nSrc = pInvSort->GetItemSrc(i);
" ^( n+ ?6 Q* \4 \' S* _# w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 P! M4 i* P2 e! b- ~' C3 d
if (pItemElem)
- L) F& R6 h7 {0 A: t2 P {: w! `* H' y, q( \
if (IsUsingItem(pItemElem))
, \3 S9 w ]. J2 ^. u: o {
' N e0 Z9 D. r, g7 z6 J5 | //这个道具无法移动,跳过( ~" x/ i3 `, J) F1 @* m$ T0 I
continue;
- U7 E+ }, s* D8 Z* U& m }+ R% a" B7 h2 @- ?9 ^2 ^) |# Y) o
}else{, l( j" a+ n- V( Q( G6 n. x
//空位置 不用动* S \% {6 ? P% F' t, v
continue;
( X" U! l; s* p" @3 X$ p }
+ g, n/ A) y# x1 E& L, }' k //////////////////////////////////////////////////////////////////////////8 A& T7 ^" l- j& l9 H
//开始移动
5 B# e" {; E) O* E( ` if (nSrc == nDestPos)
1 p0 f. i3 J0 V& q S( k {( r' F% p- c9 e
//原地不动
4 i) w' i. b6 E- b nDestPos++;, _+ U% \9 |# J3 \. m( q
continue;
+ a8 N% p3 x; z3 w }
( x4 E. b5 z J' n/ M X pInvSort->MoveItem(i,nDestPos);
+ N) V: \: f/ S/ Q2 f3 @& R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 _+ V! X4 Q) F% { Sleep(5);
+ @$ V. L3 W C2 [ //Error("移动 - %d->%d",nSrc,nDestPos);
" ~; w7 a# o6 P) V$ ? nDestPos++;- f' z4 o$ u7 Z. O, W7 V
}- Z0 @2 B$ [# j2 ]
//取第一个元素的信息
4 w' V# ?2 T Q8 z; v$ _ R /*& t9 q! |% B! T# X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 L5 b5 Z8 }+ h C; v6 ]7 `- J {
3 P, _; x: O' v* F$ K8 h9 i9 ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 _: i& k; h# { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, f. c$ v$ w7 K" S
}
4 |4 [- n" c" R5 `/ k3 | */
! h. J# n1 Y* k //////////////////////////////////////////////////////////////////////////
( P, T; O' G: j8 w% @0 h break;
1 F; E; Y6 Y f }
* J' R% h# x/ d } P" i8 c" c: j4 z U
}$ X9 k* G; ^/ _. A
m_wndMenu.SetVisible(FALSE);4 b/ U4 |6 A1 u5 s
6 z7 z# q( G) D8 t--------------------------------------------------------------------------------------------------------
6 o8 c1 v* T( H# ]1 E9 O! ~ v搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
\2 w. K7 ^# t" i' t3 N7 N{# P/ q6 ~* z/ j; Q6 a) A
BaseMouseCursor();
Z4 @$ l9 G( t: ]+ {. x. ^+ X' I$ n}
8 I+ K Y5 Y9 {% m& f; o# ^% E在其下添加:
4 E' \) c, h5 Y8 bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 K/ z4 r" E" X2 j E) J6 m0 F$ r{2 C* ~9 w7 `/ R7 r8 h; u9 }( c
m_wndMenu.DeleteAllMenu();) c; G% }) l- Z9 K0 C$ I& V
m_wndMenu.CreateMenu(this);
" c8 p* V) z9 K4 T J2 J" Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ v; q- _" U% l" N5 I
+ N. b8 e" p! f+ ?7 }" ~
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: g0 r% o, h3 @8 r% r{" C# l: Z" y2 m# X0 O; z( I
//P以上级别才可以删除所有道具6 G" h) H. l3 N% u' f1 f6 q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" S+ [4 S' w0 F
}$ {4 R! D# m$ z' r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); |9 y( ~# V( r4 P& _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( J8 i' F) l/ C" R2 d7 A" e8 o' o+ F
m_wndMenu.SetFocus();
, a. a8 n/ z) I% C5 L}$ Y* @8 J4 g( c' Z( ?: H
------------------------------------------------------------------------------------------------------------
+ i9 ?( M. @7 L3 y*************************
& z; O' z. R& Z! ]WndField.h文件
2 i3 W8 |: O B. M*************************, \* t7 M. c% J7 z5 Y# _0 t7 G* o
搜索:BOOL m_bReport;$ |3 v5 E# B8 v
其后添加:
4 a* i& I+ E0 [% r4 F. c7 z% lCWndMenu m_wndMenu;
7 U7 c5 q+ W$ X! i; _6 w4 e8 Y7 J- ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 h$ X: M- p5 m7 @: G$ {( {* i7 w
其后添加:) E7 q5 I2 L) X" @! e' ?/ f
virtual void OnRButtonUp(UINT nFlags, CPoint point);" u: h2 ^ p2 E7 x2 {3 s6 a
) B; Z' c5 ~5 c4 e2 C, v ]( j, M" s9 g3 p
|
|