|
|
源文件中_Interface文件夹下WndField.cpp文件
$ x9 r f& c' M1 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). Q8 G+ _8 @; @+ u
2 r- r- {3 e. D! s! w: s
struct sItem( P- I- S* h1 C) T Z
{
4 c8 x& d3 V+ d. x+ g4 \DWORD dwId;
) d# V6 |2 V$ Y. v+ t1 kDWORD dwKind2;7 Q v5 T. I% E' U& o' c' y' z d% i
DWORD dwItemId;
- l) U1 k6 r4 \5 XBYTE nIndex;5 e* y! I# \ [
sItem(){
# F" w) l {, `, J" D dwId = dwKind2 = dwItemId = nIndex = 0;' A3 R4 ~: t# b% w, k6 y3 S
}. T4 T3 K' M% @6 W2 N4 w8 D
bool operator < (const sItem p2)
$ ]7 ^5 b b4 m$ Z x, V{
& u* ?+ b# L v if (dwKind2 == p2.dwKind2)
2 l) t) @# S! H1 S2 x5 k* x f5 P. H {
2 x' u, P w8 e! g- I return dwItemId < p2.dwItemId;$ a2 w& k3 J+ C/ U- e5 o- o( q$ H
}else{2 }3 R0 U- ~9 Q3 Y
return dwKind2 < p2.dwKind2;
4 R: q* C4 R; ^1 R( s( ]$ w" k }
9 v# z! M2 T. ^8 |}! w! C, K6 S2 Z
};
, r' Q' x0 o+ v, J! X4 mclass CInventorySort7 K4 i" S8 @- V& J
{
- Y }9 T; ~- Rpublic:5 Z3 I9 b4 W% I" I7 {; N( K
CInventorySort()2 l0 H0 a9 _9 c$ P6 G" N S8 l; Y
{
- b7 G8 n* g, W9 x% [. @, }: ^ d5 e m_dwPos = 0;
U- o: f- x3 K* @ T, a8 i}# g1 ]7 _3 j! B* S* x- K0 k$ b
~CInventorySort(){}( ~4 L. C, K. g, Z+ D8 d
private:
/ U- ~+ y9 a" F* N9 @sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 s- P. s: t Q8 B* D
DWORD m_dwPos;5 H! u: w Q& S* }4 [* F
public:
" Q+ a" G# K4 K. |+ Vvoid Add(BYTE nIndex)
# Y' \/ e7 J# y/ |{
% [# [5 B1 \$ U6 k% I2 @8 x if (m_dwPos >= MAX_INVENTORY)+ G8 x: E5 I: Y
{
' W4 y' M' O1 A7 c& i return;6 K1 T% g* k8 V; N6 A# E; l
}. I+ n; }8 h; q; G4 o9 H
m_Item[m_dwPos].nIndex = nIndex;8 k- y: U7 I* z- J
m_Item[m_dwPos].dwId = m_dwPos;* u% t4 i) X; a
m_dwPos++;; ~$ L) T+ {8 o6 ^2 b% W9 M
}$ x) J9 b* ^5 \' S$ x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( X5 q. F& z' ]{9 D, g3 L1 [7 _6 _
for (int i=0;i<MAX_INVENTORY;i++)3 N) O r: S% B/ T
{- P1 ]% Q; o% \+ W5 G2 `
if (m_Item.dwId == dwId)& m5 w' k# c7 ?! C& D5 a
{) w8 H8 C4 U" T+ u( W1 `! V$ N
return m_Item.nIndex; {1 O2 s9 v {1 |
}% Y+ j* L& m& O7 ?
}
4 q9 k, U) }0 a: q+ O" g" R return 255;
8 ], N- a' f- z5 D+ h- p, u}* H! U. t7 |7 U" P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; y# `* w4 \" _, W{+ \! P! H5 |) V/ c. ]7 x' l
BYTE nTmp = 0;
0 j4 |% g6 w0 a7 {7 b( w' s3 h: O bool bDest = false,bSrc = false;0 J' j! k7 r- x! o5 Q: ]
for (int i=0;i<MAX_INVENTORY;i++)+ P1 a4 y$ W- g9 C/ N7 n! t
{
# H7 z1 _+ s( U9 d2 g if (dwSrcId == m_Item.dwId)
# @: M8 z. |) D9 _0 ] {
8 ~/ ]3 L) F3 D; g$ u+ K2 v //id相等 则 改变对应的dest和src
& i }. Y' y. K6 k. f nTmp = m_Item.nIndex;
3 j V2 {4 x0 ?! S- [+ t7 Z m_Item.nIndex = dest;
3 K! @9 `) ^% Y, |/ P# ^ }" K0 a8 q' p! A3 X7 i# A
}
( }. m! s7 R i S6 P& D1 |8 [* T //临时数据保存完毕,交换开始% H! t& h5 v" L0 t6 l5 h: D! S
for (int i=0;i<MAX_INVENTORY;i++)
7 U& x8 f9 g+ R! Q- H( { {
6 b: W6 w) E5 ]" B if (dest == m_Item.nIndex)
9 ~! e& c/ k& l" N {" U4 \- o8 V- T Z3 h
//id相等 则 改变对应的dest和src0 `, H% ]/ ^ e8 q3 F+ P
m_Item.nIndex = nTmp;0 d& F# C, f+ J
}8 z' Y1 e* }2 l2 U" n+ P/ ~: f6 N* c
}( H; D- H9 ?" W! n
}
9 ~+ h4 P$ ~2 f! j+ h) {};) m/ h( C# p) N" B4 \9 K' d/ x
-------------------------------------------------------------------------
3 c# r# C* t* f, L4 `* k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ x8 s. s9 g+ z# a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 G2 b: K! x% l+ a' O
紧靠其上添加:& G0 H6 Y, P+ M7 m0 d
if( pWndBase == &m_wndMenu )8 |6 f/ G% ^% z
{
* a+ E, U5 O6 x$ H4 m switch( nID )3 y; b* R8 o# R- M
{8 d6 {% ?, k# g* b% k6 X a$ Y
case 2:
- l' c3 w6 Z( g! N: k! G {
% p$ x% s! k Y- v& x2 k% a- q. P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& l2 U& H) q+ C% A2 A9 X& @1 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* y, G& _. q4 K$ ~4 P& F* q {
) D5 W u! @/ W$ j, H break;/ g; G' o3 n( N2 \
}
/ J8 |& \5 q& l! Z; }' C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) |! A% |' @8 \$ V0 @9 \. Z" W
{
6 Q. w5 J8 X8 Q, w' L) e( b# f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. Z- w7 p5 K& e Y* u% ]
if( !pItemElem )
8 @8 E) j0 \7 a# T" S continue;: ]. V. [- d8 \; O- Y. ^
if(pItemElem->GetExtra() > 0)+ `6 ^! _- D o, i# j4 k
continue;
+ `9 n6 k8 ~3 A! e$ i, W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 B5 L' d2 h, U( K
continue;
5 x: ^; ]/ a2 r4 d% A+ L if( g_pPlayer->IsUsing( pItemElem ) )
# A \2 w: A0 Y4 b- J' W) O* w+ } continue;9 e, H* w3 ~9 l3 v! R
if( pItemElem->IsUndestructable() == TRUE ) l* y4 h8 l0 S* a
{" F4 x* I2 E# X3 {% e" F4 x9 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 _3 N0 ?- m0 \
continue;$ o' V5 _2 y0 ^, l! n
}7 N" d# _6 w- D$ E! U
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" q( Y7 I; H% T4 _
}
: u# T1 A3 W) C2 d break; C7 }% ^, {' c. m2 a8 {
}
2 R! {+ h9 s4 o! k$ F case 1:* \/ t2 p7 \6 ]2 ?; @! e0 R
{( S& W. y8 j6 V- y9 o, Y+ C
//整理背包6 ^$ |6 o- S5 G# \0 a" r0 ]& z
//////////////////////////////////////////////////////////////////////////
, ^- J" b: x( V) Q( b7 Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 m" M0 W; s2 \9 D) @
//////////////////////////////////////////////////////////////////////////% k. _; v: M! k. i1 a# \
//////////////////////////////////////////////////////////////////////////
" k% a: E$ X t* c' C2 _4 A CInventorySort* pInvSort = new CInventorySort;' t% u- q' ]" ` q: o
vector <sItem> vItem;
/ s0 g h h- p% b5 O2 b vItem.resize(MAX_INVENTORY);//初始化大小
, p1 r0 {* d5 J0 V) Z //////////////////////////////////////////////////////////////////////////
c6 K0 A0 Y( o. \3 f7 {+ U8 f //填充数据6 b9 }: N/ q! O" W
for (int i=0;i<MAX_INVENTORY;i++)
9 n2 o1 {+ y) i( W) a {2 Q. m* d- r( V z8 z$ A8 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 y" A( A7 N0 K5 b" _; }) H% ] if (!pItemElem)( x! q! Q X9 ?4 J
{" a3 |/ F' {" v$ N+ ~
vItem.dwKind2 = 0xffffffff;6 D2 y% Q( Y) d; y& P3 ~1 ^ \
vItem.dwItemId = 0xffffffff;1 [3 o7 f7 f6 a0 q r
vItem.nIndex = i;/ A! Y5 _$ o. n% q
}else {
, ~" c! j& N1 P, p) d4 ]% x ItemProp* pProp = pItemElem->GetProp();1 H& h8 P9 M) G8 O6 p) f% W0 k
vItem.dwKind2 = pProp->dwItemKind2;
4 U1 U" m _! O* ~ D vItem.dwItemId = pItemElem->m_dwItemId;
7 h5 N4 e6 I/ b& g vItem.nIndex = i;! ~- p1 ^( P% \
}
+ u" ~) G( {+ p1 G! R" H/ E/ C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ a3 i% w' s) A$ K }
# m; d7 M4 k) R- }8 X5 G5 l //////////////////////////////////////////////////////////////////////////
- R- E$ z X3 {3 ~, Y sort(vItem.begin(),vItem.end());//排序0 N) A" H( [7 i, i9 S, d+ K+ z' p9 K
//////////////////////////////////////////////////////////////////////////
+ A, R* G, E2 |/ W9 ] //交换
* a% p' ]( B* \3 y; K5 c5 a9 h7 d for (size_t i=0;i<vItem.size();i++)& q' \' F! ~* K; A
{
/ N8 t s- n6 i0 n& s, Y( d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 g$ B" F2 v" Q; B pInvSort->Add(vItem.nIndex);
3 e0 [0 ?2 {- x. c' h/ ~4 c }0 ?: v# G. c+ t1 G2 l% x5 n# H- c
BYTE nDestPos = 0;4 F6 j* j$ P, l; Z
for (int i=0;i<MAX_INVENTORY;i++)) b2 D7 w8 ?+ H& C# T, o+ ]# q
{
4 E- O# J2 W+ i4 R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: B" Z8 F( U. S& \! c if (pItemElem)# S- c* i: q5 P! ~* I# C
{: l8 H# _# H8 i2 s, C7 U
if (IsUsingItem(pItemElem))* X" G& D: j9 o' \+ }
{- m2 k- z' Z W, s
//这个位置无法放, Q, S, ^7 Q$ D9 \' z7 f/ b
nDestPos++;
& |, h+ w& l+ h* ^/ k" y$ k8 P" n }& w. ^ }+ Z3 |- T9 c
}4 v! n" P2 N, z; k
BYTE nSrc = pInvSort->GetItemSrc(i);# b9 D2 D. u6 ?; a9 y5 m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ G* K: t9 k5 ^9 \( f$ M* m; @ O
if (pItemElem)
( W4 Q7 _* |! L( r7 `5 N {9 G/ s0 ?% G: L5 D5 v. n# R. y
if (IsUsingItem(pItemElem))
5 r4 t% _% C7 Q) G& g. [( Q' C {) I* z! V- W1 u- l. Q& w" I- Y7 L
//这个道具无法移动,跳过5 J5 D. }/ v3 Z- D
continue; T) y1 B8 Q% I, x- v: a, U& n
}( `) {; J \+ N. F! u" O6 U/ B
}else{( d7 c( @8 r$ s, k5 s
//空位置 不用动
j6 [! K1 b- G# Y9 _) h continue;5 A" r4 _0 i1 I
}
( F3 ?" E6 y5 t( W: j //////////////////////////////////////////////////////////////////////////2 O1 R: L( n! V
//开始移动
" s" g9 D' U# R. G w; ?- K$ \ if (nSrc == nDestPos)( w5 q8 A9 v: S2 p3 X9 Z
{
) E) N# K+ J+ Y" v //原地不动$ I9 B/ V* n0 A+ ?
nDestPos++;" `' ?0 c, f4 T @$ @/ x1 q8 M% {9 E5 i
continue;" C6 C: r5 H9 V+ P4 s
}% n) b* s }: H% C! ^
pInvSort->MoveItem(i,nDestPos);
: `9 n# I0 \) r5 O+ O g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 F# |+ b: c1 L6 _
Sleep(5);+ H/ s" ^; P- r8 a4 B- E X4 ]
//Error("移动 - %d->%d",nSrc,nDestPos);
3 {: D1 g% L- j: s nDestPos++;
' k6 v, ~! x2 Q }* M- C; x8 z! D# w: s4 _# n
//取第一个元素的信息
2 J4 m: z4 r, \" U0 X# y2 _) ^ /** `8 P9 }3 Z8 c1 k" E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 i4 `9 t. ]3 I, E/ a5 x1 b
{
! N) j" m C9 Q+ z' s8 k' A3 { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 S* D' A0 p3 H0 U# N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% e& p8 c' r5 R2 @+ v6 o
}/ R& {. z4 z( X: n9 U4 }
*/
7 N% {9 U, Z) \* x, p) B //////////////////////////////////////////////////////////////////////////
1 H1 `/ [$ Y8 U6 \ \ break;& a/ b, o9 F. h4 g' [% R; ~
}
6 A3 a8 }1 n$ z' u% s } " ]& c: ~9 J1 ?6 {+ k
}
6 k: a" B. Y6 t1 D% b3 C2 I2 O4 {m_wndMenu.SetVisible(FALSE);
5 _5 ]2 d% Z9 L7 e( [3 m- Z. c
, R! B/ m. E% F. w' M, c+ k- W6 y2 c--------------------------------------------------------------------------------------------------------
! F) A1 c4 r4 V ^. }/ b# w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 O5 I# J! l' r; g P, P
{
) F4 a; S4 P9 R7 [5 j; TBaseMouseCursor();* w- v" U( W( c2 X* h
}
: G* m6 B3 B0 Q$ C在其下添加:
4 f7 o B" L4 n8 ?! Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' I* `' }* O9 {
{$ @2 E9 v5 ~ e& r+ ]; i* p
m_wndMenu.DeleteAllMenu();
; j9 k/ T" e8 Fm_wndMenu.CreateMenu(this);1 y3 R& _/ @1 M5 b b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# l. z* _. H# H# c
! Z" o. R5 I. c* l: K/ t2 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' p+ L# C" C- W {( w{
+ f: K% b( _1 Y, _% {+ o //P以上级别才可以删除所有道具
$ R- W; x( |1 A C4 T' ~3 p m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 I1 P! U9 {" W! p, r
}
t3 ]" g3 H( b& {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ y8 G8 n& Y' u1 h" M1 G6 `) ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" G5 Q3 I& k z7 jm_wndMenu.SetFocus();4 ~- ~6 g: t- N8 r( C& k- \7 r
}
% u4 c3 S' j: K7 I------------------------------------------------------------------------------------------------------------: [" F/ B) T% P' I! l! [
*************************8 o; f, m' F3 X) @
WndField.h文件
5 J5 d! y% P) b, `*************************0 ~* A) J3 S [5 d, b" x/ S. X
搜索:BOOL m_bReport;
9 ~! O8 E8 [; J3 D/ s m+ W& x5 e& [其后添加:
# B5 _9 K& R, h3 tCWndMenu m_wndMenu;& X9 V) M9 b# s6 {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# n& B& u- o$ Y$ J
其后添加:
- R; R4 p2 @$ N! I nvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ Z% F* Y) `! r0 N
- D5 i6 U. K) F( p7 v0 I
5 I/ ]" x* a1 v/ A( U |
|