|
|
源文件中_Interface文件夹下WndField.cpp文件
: C0 b) \" z1 j* D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 g% H2 f+ W: n+ J0 Y. ?
0 ^0 i' u# P7 c" p/ B
struct sItem6 [( p% A9 j1 q/ j9 {
{& C6 j2 @# o {0 H. c
DWORD dwId;. y R& n9 p. f/ t% s; L! g8 o
DWORD dwKind2;* r. o) p7 }5 `3 }5 A3 V
DWORD dwItemId;2 L7 B3 R: E/ l5 {! B d. s$ k
BYTE nIndex;
# S( i7 K: ^" n) p* D# [, P1 z, ZsItem(){
, g" F1 \# [5 A' E; L2 q0 x" N dwId = dwKind2 = dwItemId = nIndex = 0;( [7 T; A) ~- x3 Q- I" W
}
$ i# M* X" P5 \. ^1 `bool operator < (const sItem p2)
$ ~5 ], f9 L* P9 C{
1 W7 s' b& S, W8 F5 K if (dwKind2 == p2.dwKind2)
+ `! z- [8 Q( Q3 B3 D {
; S3 U' d! g: E( ]7 ] return dwItemId < p2.dwItemId;0 V) x1 d+ y. ^, Y7 S; _
}else{
% c9 l8 k# R0 ?# h return dwKind2 < p2.dwKind2;
+ O0 c! m! y$ t- t& |- J* P0 c }/ Y7 B5 _7 `7 B, e5 W* B
}0 A8 k+ T- e% ~# J5 W
};
. E( `' w v; U, Eclass CInventorySort, n, n4 \0 P$ K- _( C1 T3 t
{
& g+ {. Q( D$ npublic:
+ M) q! c0 E! g8 _CInventorySort()
% r! G) V1 F# P# @6 V{# i, I; q( P! K8 }
m_dwPos = 0;
; w4 T2 S' Q9 M3 B/ ~}( D. U+ n A5 S" j
~CInventorySort(){}
" |" O5 [% s' n' Z* X" aprivate:
; w E3 [; f- \5 EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) H6 I" }+ [5 f w8 E) a
DWORD m_dwPos;
8 P* U# V: P. h, N0 Mpublic:6 @4 ^9 S3 g' v4 r3 Q- K
void Add(BYTE nIndex)- I" c* k( h& N: O/ V" c
{9 E9 s! I ]% \9 }4 b
if (m_dwPos >= MAX_INVENTORY)
; O5 u/ J Z$ ` {) f% P+ H% Z8 u$ t1 ? i: n z
return; D' z/ ~5 q* n8 a& |8 x) @! r2 U: r3 T
}+ B5 S7 ]/ t+ C
m_Item[m_dwPos].nIndex = nIndex;
1 `5 M) P h1 b! \1 C' H m_Item[m_dwPos].dwId = m_dwPos;
( m$ U0 T7 N. e m_dwPos++;! T7 D6 z$ E1 ~) n3 T8 Y
}
* ^7 N1 Y; v* ~- c: f5 ]! f5 r2 D: DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 s& Q. Q, T; C# _9 \{
! K: M' }9 U$ M) |2 m for (int i=0;i<MAX_INVENTORY;i++)
3 l; D5 D# w; ` Z {% `2 a" Q, a3 m8 U
if (m_Item.dwId == dwId)& {4 D$ c" j2 H; ]
{5 x7 h* T! y! P
return m_Item.nIndex;" j8 W, Y- _6 Y- ?% ^1 M
}
) o& m' L! T6 {5 w* E }
, {% A0 |' ]3 d3 p4 I: h return 255;
) k, n1 G; E; \+ n}
% n2 Q0 U0 t3 j3 n1 V- Q% n$ `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 P6 D$ f9 B1 \) C. T
{' k0 K4 j" g+ p+ n3 d/ H: ^. f
BYTE nTmp = 0;) F. b2 w0 |! n/ S) d/ U: z9 _* z
bool bDest = false,bSrc = false;; G( g: y: m0 q7 T% P8 E. b: |
for (int i=0;i<MAX_INVENTORY;i++)
# y7 U. L8 [7 R, Y {0 R3 r$ g* ]3 ^9 n7 G' {8 i
if (dwSrcId == m_Item.dwId). U( c1 ]0 K; Z3 k# k' C* [
{4 S8 z B3 V" }7 h
//id相等 则 改变对应的dest和src; b( b- x; I; ?! p& t/ |- ]
nTmp = m_Item.nIndex;
( g$ w8 ~7 v) B m_Item.nIndex = dest;
, ?% _ @5 n% @- a! R5 {% ] }
& Q& m& ?3 L: u u( p; Z }3 n3 g. ^1 t& l9 d+ g/ u2 B
//临时数据保存完毕,交换开始
- C1 r" J4 |" d# W+ k for (int i=0;i<MAX_INVENTORY;i++)
/ L. v1 b6 z" ? ? {3 E7 I, u, z' O; Q. `9 e
if (dest == m_Item.nIndex)
" Y% Q8 M3 l6 h9 N( b% N r$ l1 W {. m, Z7 h2 `8 \/ l+ ]% R
//id相等 则 改变对应的dest和src
; V: W; P' w6 f- Q n7 B m_Item.nIndex = nTmp;( e% H9 v8 P5 Z
}
; P" w# o' A: n6 R6 w" @8 }, c }& _" u1 }, X/ [% V) Z
}3 o9 C1 d* ?; Q5 v+ Y: m I& q Q
};
4 b4 e: Z) v) H-------------------------------------------------------------------------
/ P3 a, T$ k" m! \& |; ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), w1 ^8 P' M6 v& ]. ?2 Y* ~, e5 ?" t! ]* F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: \$ f: @% j) j7 ?5 e% [4 R紧靠其上添加:$ P: j4 s+ Z! d# @" R% ~ h
if( pWndBase == &m_wndMenu )2 P9 M3 k$ B n4 u2 e% O3 g# M
{' o7 T) S# n! I+ H, G/ X( R
switch( nID )$ W. S2 W3 M1 W6 ]/ f8 R
{- I/ g- Z' \5 t
case 2:( y4 G$ m5 N4 s; O
{
" z! ]3 j0 g, _- I$ k: S* p4 Z% P$ d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
|( q+ X' x- A: Y: l5 [ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! j. x: j( {) m, C" t) _+ @7 { {6 J) c. t' A" i! w- O# T d- f
break;6 P& r4 X7 }7 k' R, x" A
}, U4 r6 H: K4 r/ r6 y$ m: U# s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 H8 R2 ^5 H5 V% V, z/ P3 X
{
4 i v" |$ |( p) M7 D$ D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# B* R3 Y% ?+ t: H if( !pItemElem )+ ^3 O+ u* G. g* d2 T" d$ n
continue;( c, d; [ b+ w( [
if(pItemElem->GetExtra() > 0)
" r7 I+ j9 D! a- B) Q g continue;8 K7 s1 F4 ]2 R$ ~5 w
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- o2 ~0 r6 q+ K0 | continue;; I+ x2 X0 K& m' u: l
if( g_pPlayer->IsUsing( pItemElem ) )
! R# {; ~& M% v+ m continue;
( I4 l0 G- p w4 H/ |5 K/ h6 P if( pItemElem->IsUndestructable() == TRUE )" }! \/ M" Z/ B, p! C
{( {; g$ P' N7 |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 b$ y3 r6 p& R- ~- Y: T continue;, E0 u' J- G, j' G1 P5 m8 m1 I
}: l8 q; E5 \( o; h* {4 z! ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- L7 L2 m) | y2 P0 G' S/ B* l; o+ v
}+ B2 A; B$ u6 h* L, s
break;
+ x o( z* D! y }. S6 f& o; [" R7 r" m% h7 x
case 1:
6 R5 Q2 r5 I+ d% {0 q( G$ @& P {
( Q1 `, y; y8 }' x. o3 h //整理背包, ~" p7 Q* d2 ]% c7 @$ d+ m6 d
//////////////////////////////////////////////////////////////////////////
" L9 r& S6 l" k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- ` C T4 d& D) B //////////////////////////////////////////////////////////////////////////% W! P1 Z8 `0 v% F' `9 k
//////////////////////////////////////////////////////////////////////////* _. k Q1 G8 D- ~% Q% {5 z
CInventorySort* pInvSort = new CInventorySort;
+ y/ c5 u$ e4 b! Q vector <sItem> vItem;
" z9 t+ ~0 s% U. a! D# x vItem.resize(MAX_INVENTORY);//初始化大小# o+ Y) k; f9 X" i# q7 Z
//////////////////////////////////////////////////////////////////////////! X- z" t2 q2 Q0 l( E% E
//填充数据3 `" J7 M7 ^ a6 ? M! K
for (int i=0;i<MAX_INVENTORY;i++)
( H' n! n2 c: y* ^ {1 b) {" A! G/ C3 S; A0 p. L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 X/ J) E. f6 n% g if (!pItemElem)
3 d& L8 s& B9 c5 `+ v7 T/ s. K {
) U0 D" v! x) U s0 L& X vItem.dwKind2 = 0xffffffff;2 }* M+ S; w* w- `) C
vItem.dwItemId = 0xffffffff; x' h, J" [8 V8 q: f& ]
vItem.nIndex = i;
. u `& T2 ~; E* Q2 b s }else {
( \; h/ t2 ]( r) ^3 M, z# {( e ItemProp* pProp = pItemElem->GetProp();& M& I: |( q, V5 J0 M, x3 i! \: U
vItem.dwKind2 = pProp->dwItemKind2;( q( B& H7 ~8 v/ Y
vItem.dwItemId = pItemElem->m_dwItemId;. f8 f# {3 e" i" a! {" j, L
vItem.nIndex = i;! E7 D. A- v8 ?* ?, V! g
}
" b3 ^+ J* |, o0 `# p, z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; z: ~. l- a# O" D5 }
}
) @$ y# [7 l! n& Q2 H. x. q //////////////////////////////////////////////////////////////////////////
" x$ H d5 R m5 K5 i sort(vItem.begin(),vItem.end());//排序; S" v7 y& ]* t, O0 ]; o
//////////////////////////////////////////////////////////////////////////. e8 N" S. H. ~3 f8 V
//交换
2 Y$ K! i9 | l$ o U, N for (size_t i=0;i<vItem.size();i++). i6 y+ E. `, }3 A
{
: `; P& }# q; [7 X9 ^- Z. B7 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); h9 N9 |3 V1 w) ]. ]& u0 F9 {
pInvSort->Add(vItem.nIndex);# F5 u b# W6 u( R/ |$ b
}
4 A9 ]. E' v. ]/ T BYTE nDestPos = 0;
s0 s; y& I3 e$ _5 Z1 j for (int i=0;i<MAX_INVENTORY;i++)
* i6 W2 @3 @2 p3 S {6 C( B# b+ a4 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) L7 [" _& G4 x8 x if (pItemElem)
+ p3 B6 b4 w# V0 G& e' B+ i& [ {8 b9 H# I. P. X6 C, M, v
if (IsUsingItem(pItemElem))
& J; T' _) \5 I# z, G { r6 v0 ^7 D, I
//这个位置无法放) f2 G$ v9 A' F1 ]
nDestPos++;( b7 ]/ R) C8 i4 W0 M
}" h9 J7 N! t1 R. E& `! \
}$ S7 w6 U6 n3 n( f4 ]
BYTE nSrc = pInvSort->GetItemSrc(i);( S. q+ w, D( X- r2 x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, L$ U4 q8 m Y$ }0 Q
if (pItemElem)0 n. u* w# I# k9 x
{
3 I3 O. W4 ~2 K# _) ?% G1 l if (IsUsingItem(pItemElem))
! B( |7 k: v ?4 T% S7 q. Q# r! Q: k {/ P1 A- Y" l# p2 I/ B
//这个道具无法移动,跳过0 n1 N0 F9 z' B! t% }4 R) j7 l
continue;$ Y& \- b% J& L% p- z) b
}
- v# a$ j- N, Q% {& \ }else{
. V- p& o, R( {0 J4 V/ r# e //空位置 不用动
; {% g3 g. Q8 x1 l k continue;
/ {; a5 ?. o4 R/ c$ [ }. W. P6 J4 {8 Y+ l4 T
//////////////////////////////////////////////////////////////////////////
2 A, p8 B1 W6 D( h //开始移动" ?- Q" z: T6 V f0 O$ n
if (nSrc == nDestPos)
7 p l1 m/ Z( {' Q7 d5 E {9 q# b+ X9 }$ j
//原地不动! T% W& v( m5 }. ]+ C
nDestPos++;
4 T, b( x, g) ] s! ~; g continue;( A* w2 `0 f. s
}
7 M3 r% X- F3 T+ g pInvSort->MoveItem(i,nDestPos);. j/ Z# b( {1 e6 Q% ]; I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 V2 u; B1 w3 ~5 b- \
Sleep(5);
+ Q, e- \- }1 j; |0 B //Error("移动 - %d->%d",nSrc,nDestPos);& t4 r* v# I2 Z3 W
nDestPos++;9 ?- P% I, n" r% l+ i& o+ B0 ~
}
/ y* Z m) t1 f0 W //取第一个元素的信息0 z' f; W9 m& @( v4 \# L4 v* z
/*: f6 h+ I: y- t3 t5 Y2 F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
a( s9 g6 d7 H {
5 }4 s. `2 S/ y$ p4 n) ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 [/ D' p+ I4 }- K9 @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" i) I0 ]0 u/ ]. e
}
5 ~- ]; h A8 \# u; q9 b */' h2 a$ R& I9 U
//////////////////////////////////////////////////////////////////////////
) Y) y/ m$ y1 \1 ? b, o' ]; G2 d break;
: }% {1 Q. l5 {2 T1 | }+ q) }! L, O3 b! V5 M2 x
}
% `4 Z. }: {' k}7 D; I2 A6 k+ F1 Y9 B9 Q" N
m_wndMenu.SetVisible(FALSE);6 L" p8 d5 o' l9 c6 H/ ?
$ u9 h* w8 A0 F2 G, o$ N1 Q$ d. f5 z--------------------------------------------------------------------------------------------------------
, O, z% C9 g' ^! z: c; ^( x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 v5 [' e7 H* @{4 u; v6 G# q! R# H
BaseMouseCursor();$ I$ [5 f4 S' W4 B ]- m% T2 {
}
( M9 \: {6 b% k, a$ r/ a在其下添加:
; r$ x( ~7 z2 q6 qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 Z2 r7 g. m- D* u6 t: |- z- n" I0 d{3 w7 O/ l) l4 S5 |- o) T
m_wndMenu.DeleteAllMenu();
0 k$ ^0 Z0 _3 x4 `$ e* A4 km_wndMenu.CreateMenu(this);
4 g( Q+ `; | g, i9 O/ I$ Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 u5 g7 u- Y1 N$ F; P7 T2 F
. S; J* `% O( W+ y& v) Q; o. Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" f# q: [# @! m: B2 b9 G{
8 A0 I0 I- `/ ~4 K3 {/ s% s$ G //P以上级别才可以删除所有道具/ d$ Q9 V e! Z" k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; v N; z8 C" h3 s: G$ I/ l- z}
5 U* Q' H1 R* J a1 N. j; b7 S4 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 u( w* q$ q+ G g- xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: g ?5 h6 l" U. C9 ]3 T d: t* o
m_wndMenu.SetFocus();' m7 ?$ M5 r# x8 m+ F# f
}# l7 K! w- q/ Z5 E7 W" U
------------------------------------------------------------------------------------------------------------" H( G/ |' p3 ` ~) @
*************************3 r* M7 r/ h- p# s# r3 X
WndField.h文件- J8 G" B+ |+ l) S* E6 Z
*************************
/ w. N7 f. e% i6 }& Z' E搜索:BOOL m_bReport;
, I; Z- m! U' ^5 i! s7 G2 ?. r其后添加:
1 Z) e- j; }* n% _CWndMenu m_wndMenu;7 U0 Y; `' W; G1 l6 M" }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; l. l0 o. z5 u7 ]其后添加:
) [# h3 @8 u9 I5 g! G' I( Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);) ]5 ]$ H$ W* t
" I+ A. w6 Q) h m; d
+ e- ~; A3 o3 B
|
|