|
|
源文件中_Interface文件夹下WndField.cpp文件5 v, f1 q0 X8 m9 _& I: @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 t4 N% N9 t5 e9 W6 c
1 b( t% o4 @' v
struct sItem
+ s* R5 ` E% y4 \{
; P) G' q% H s8 nDWORD dwId;
* e- ?5 n; v0 i' p) nDWORD dwKind2;
7 E! m9 J0 g4 xDWORD dwItemId;5 w6 H) g, r' Q2 z8 Z5 h ~8 O+ o
BYTE nIndex;- o, Q+ h$ q3 A
sItem(){% Y/ k. l2 Y m
dwId = dwKind2 = dwItemId = nIndex = 0;% @, g {% i9 W" m" w: X
}- B3 n v$ X1 \: @. a; t
bool operator < (const sItem p2)
( L3 P! x5 w h1 {! O3 ?+ p{) k; \! \+ U4 J$ O& @' w7 N& n
if (dwKind2 == p2.dwKind2)
1 `- y/ S# E. o" a3 W9 } {# v( t2 Q( K' a8 K6 @2 d
return dwItemId < p2.dwItemId;0 g9 r9 }# |4 ?) t
}else{9 O; t& c/ t- e7 `" a8 w2 }( J. Y
return dwKind2 < p2.dwKind2;! Z& i* r; j/ ]) D# s K
}" J% w3 O. R- q0 i
}
( J% |7 P8 b0 M0 O};9 R1 k, R! c1 ?/ D
class CInventorySort
% F9 `! d5 r) z2 r+ _# a" G{$ E7 X# R2 f g
public:
4 [4 v: g; E6 b6 nCInventorySort()
7 Z9 X% S# N# B7 V! C: V$ S{- {3 @" V9 X7 f- j0 s
m_dwPos = 0;: G7 w! a4 O- L( p, Z- r0 P
}
- \$ e9 y/ e; {~CInventorySort(){}
8 b6 B- ~, g; y( \( q% |private:4 i7 ^- S7 b, ?; a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 p% m6 x7 l, X8 _! X7 y% }* y% h
DWORD m_dwPos;( E" a% O$ }$ h; M1 a4 T
public:
/ [) {- A+ c7 \8 j9 ~/ T8 }- j8 ovoid Add(BYTE nIndex)5 z8 F1 m; m4 p* l3 c$ e- o
{! B$ x+ S, T- I# Q. v" @+ {
if (m_dwPos >= MAX_INVENTORY)
9 F* }2 u& N2 j9 j {
2 y( p3 J0 G( S6 b3 g return;
# a$ x! {, V# k; b1 x+ j# B }( ?) |$ L8 v1 E$ {. `& x" N+ b
m_Item[m_dwPos].nIndex = nIndex;
( N& L! c5 E: c5 S8 E1 {6 ^ E m_Item[m_dwPos].dwId = m_dwPos;/ y/ Y3 a! c( K/ x
m_dwPos++;7 |* Y) Z v2 R
}
/ n9 H T5 V$ `* wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( X/ K0 l2 r. {- f1 c- F
{
1 K6 c1 V `& \- i8 s for (int i=0;i<MAX_INVENTORY;i++)
[4 } f5 W, M; e k {
# Q8 e8 J( X6 z5 `8 k9 `9 { if (m_Item.dwId == dwId)
0 d- f$ M8 p- e a {
I2 s5 E& f! o& O/ V: c9 T% O1 g return m_Item.nIndex;
' y" L; i: i: @9 g* d: w$ l }
5 J5 V ?, V( e6 D7 V& h }
. ^- ^& H& t( e0 i2 \ return 255;
* W/ Z8 Y2 N$ ^+ Y, M) O% n5 W} b; g/ Y4 y9 }4 q$ G
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 Y6 L: e% u- {! i. ]4 N( g9 j
{! i" c- A0 H7 J
BYTE nTmp = 0;8 y* C; w+ Q* t
bool bDest = false,bSrc = false;% F( W, P- ?. |. h; t
for (int i=0;i<MAX_INVENTORY;i++)
1 e" W) a. a- K4 N s+ ]3 I* J8 s; g {
( n) k" ~" p. i3 e" e if (dwSrcId == m_Item.dwId)
m5 }; i. J, @0 l T: D7 l {
( |# N& |4 M/ |8 I5 W, x# W //id相等 则 改变对应的dest和src
( \+ C" |0 B. @& y6 C nTmp = m_Item.nIndex;- B& F0 j" d6 j) F; O2 M0 D
m_Item.nIndex = dest;
% B$ \* Z2 Q$ E }
# U2 ]9 v7 l% `+ V& |! j7 g }
3 q8 s7 t0 S% B: |8 R% J2 ^1 _ //临时数据保存完毕,交换开始# W1 w1 A" k& O1 ^: g
for (int i=0;i<MAX_INVENTORY;i++)' X5 p; {3 }5 ^( s$ _( d
{
* _* o. f. N6 v4 m if (dest == m_Item.nIndex)8 d& T7 ^: D% k% a3 ?4 o
{- J8 E; i! J, L* B; W, R x
//id相等 则 改变对应的dest和src
* Q( T- ~! h5 p; ~, N m_Item.nIndex = nTmp;4 k4 R9 ^2 c+ i6 x2 B
}' w7 l+ }' s" [1 x$ L- B( t" k* e
}
" n0 F4 k' i6 O' [9 d5 [}
2 |3 V* [6 x7 g# i1 y6 I" \/ |. [};
2 J2 p% E; k/ `! W7 K-------------------------------------------------------------------------
) r9 E6 t$ k. c8 m; c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 D' A) S, \: |, B7 \$ u. R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 @- n" L% p3 c9 s) p& t紧靠其上添加:
. L( \6 x- c. N/ @" fif( pWndBase == &m_wndMenu ); N; e. _, g2 o: I7 @' I
{
" p6 \( q% j3 e! F9 m d( } switch( nID )
! R' e( P: Y) |, h( }2 u) k {
( B; ]9 V. _; b4 C9 z4 j/ p case 2:
. h# w) E6 i( v7 k {
5 S2 z: Q7 h# f+ t9 ~( l8 a' W, o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, Z6 l. m; o( K3 L! X6 n7 { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 d+ Y; e# o- Q3 p u- ~ {9 |/ v! n( z8 ~# s
break;* [* N) G/ O) t0 i
}
8 w' N/ j. F0 R; S6 q+ D9 y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 }7 y# W9 ]9 M9 F {
0 v( z6 a2 T* e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 S5 u3 g) \, _" L if( !pItemElem )
; ~! e/ a8 O1 e0 C( O$ e+ f' d- b6 g3 t( x continue;
0 v1 |( z% ]: B if(pItemElem->GetExtra() > 0)7 p9 k) ]" p+ {# m2 I
continue;" y1 D% |$ B# O, I( L2 g6 n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) k# a) S+ Y7 ^- \( k" S% D0 V
continue;) s. L$ {$ S' r% s: |5 \
if( g_pPlayer->IsUsing( pItemElem ) )
: _8 L$ ~1 h# ^. L9 Q continue;
. S$ V& p, c# J6 O) D if( pItemElem->IsUndestructable() == TRUE )& m' W) H3 W% G
{
! G+ r x, M5 o( r. A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. B0 R4 V* [. `" V
continue;! ]7 M; r. _/ V3 E
}
0 _+ C( i8 s$ a `' Q+ { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) [* J9 |5 L w }& g5 [+ k& W* H6 L; A! G/ Q
break;2 E% f3 F$ V8 i6 V+ s
}
0 r: a: y! x5 i7 U# p case 1:- A* k6 L! u0 x; `1 p" g# c4 U
{
( c8 T# a X: u' L //整理背包: I6 H" [+ s1 |8 q4 T- B
//////////////////////////////////////////////////////////////////////////
z; h. R/ v9 C5 s0 ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. P) T% ~$ @" f2 e, ]
//////////////////////////////////////////////////////////////////////////: K9 T0 {7 s- z( h8 W7 z) \8 A. }
//////////////////////////////////////////////////////////////////////////6 L+ n6 N6 ]6 e! @5 ?7 j2 p& b
CInventorySort* pInvSort = new CInventorySort;
7 M$ |" N7 Y, M$ i0 D" Y8 h9 B vector <sItem> vItem;% Y+ X9 Z( h# B; y( W/ B" ]* _
vItem.resize(MAX_INVENTORY);//初始化大小
, \5 o0 ]; \ K9 ^0 F) n //////////////////////////////////////////////////////////////////////////
# F5 m8 e4 a' D8 D% G5 d3 I! r% _ //填充数据5 Z& w! }' b! t; m1 r
for (int i=0;i<MAX_INVENTORY;i++)+ U" H" H4 L$ [, _& J
{2 c, y! `2 \, h" c% X; X) H% z6 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" D% x- r j2 \' r5 \ if (!pItemElem)
: u& |9 ?9 R+ e8 E {5 F0 r$ P0 t) i9 y* a
vItem.dwKind2 = 0xffffffff;
# |) }& f% Z6 g9 w9 d `1 d vItem.dwItemId = 0xffffffff;1 U' C+ R) Y8 _
vItem.nIndex = i;% W: d2 g* n6 W+ A* t' A
}else {. e7 \' E0 B8 E8 |
ItemProp* pProp = pItemElem->GetProp();
* h s7 \3 b, B8 @9 d' X" _ vItem.dwKind2 = pProp->dwItemKind2;: ~8 F$ V) [! u" W( t; p) T
vItem.dwItemId = pItemElem->m_dwItemId;9 T. A% N" ]: n" m# a
vItem.nIndex = i;7 X+ L0 E, K; T1 A( w- c4 H' Y
}
: S C. O7 b% k2 P6 t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) D6 ~' |8 @6 G" b4 y }
5 }, t4 y" _1 N+ ^9 u5 q7 u! p //////////////////////////////////////////////////////////////////////////
9 l n9 [, Q* y% K sort(vItem.begin(),vItem.end());//排序6 F8 G3 l+ C. P% X ]1 ]
//////////////////////////////////////////////////////////////////////////$ q8 I2 n6 r. U% Q
//交换
0 j# }7 l, Q- I9 g! C {* R for (size_t i=0;i<vItem.size();i++)
4 S4 |* u* M5 Z3 o+ Q) J7 V {3 m( H4 z, F+ N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 G) c, D+ @: A4 J K
pInvSort->Add(vItem.nIndex);! @- Y; z. X T( O" v: X6 g% n
}
P/ f2 k. v2 r& a) C" e, ? BYTE nDestPos = 0;; f4 B/ X0 X, Q9 z- m# C# m
for (int i=0;i<MAX_INVENTORY;i++)
9 N5 @( Y7 y: c, O* h {
8 `0 k5 C; F. n# I/ d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 a8 g* D: P3 A9 V' h# s% A4 }, }
if (pItemElem)
3 y+ x* g5 U# I4 a {" {! q- _6 g& m2 [' a! Q2 Y
if (IsUsingItem(pItemElem))
" L1 j) ~+ q' `) H {
5 o) E" f* \5 K //这个位置无法放
' H+ C; ^6 V4 [ nDestPos++;
7 R. H5 U9 b P% {, d* R2 Y! Y& Y }3 K5 A, k1 X( V/ U
}
: [) v$ _. L \/ d; t BYTE nSrc = pInvSort->GetItemSrc(i);
5 i( Y: y7 s* }( p8 f( m- m, W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! Y/ z. K+ T. A9 r3 f
if (pItemElem)
( l7 W! Y; f- m( A) _ {
, W- {9 R9 y. C x5 p* O; @" I if (IsUsingItem(pItemElem))
+ {8 V5 s5 X0 u `0 Y* i9 ?" ~ {! X+ x4 h4 J+ w" E: Z
//这个道具无法移动,跳过( |: m% ?- @0 {3 D. p% E$ g. M
continue;
; v, q+ F8 W* }/ \" j" A! A5 ]" D }
5 I9 W( J$ s! i! Y w }else{1 t1 F3 Y+ ?5 v
//空位置 不用动
$ @% v$ f! c# f continue;# k2 s) @- J1 x$ G
}
+ \* D& X0 ?/ }* u, i0 t' d- N //////////////////////////////////////////////////////////////////////////
/ c5 k: H4 J7 }% b. L. h5 z: k" x k //开始移动$ @8 R* P% W5 ]! b* i7 X0 a
if (nSrc == nDestPos)" w8 o# z2 k/ M4 a, c
{; |$ r# Y$ ?- h0 h1 R, B% G
//原地不动7 W# d; y6 @: M2 o7 B
nDestPos++;+ o. O0 W7 Q" @& i; g' O% o
continue;6 ?6 D) T- m2 F& L
}
2 t9 `$ ^% f4 z! D( B# { pInvSort->MoveItem(i,nDestPos);2 l; p8 b& c; d. t% P( W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ N% q# t. s: j' p. z2 d
Sleep(5);, ^- ?' q: z) U! Q+ @
//Error("移动 - %d->%d",nSrc,nDestPos);& m, M2 ~+ X( M1 d8 c9 x
nDestPos++;. S' Y! P, \; n! P% _ F
}# A& V+ t( a5 s2 t( C7 }! |5 U, X* Q
//取第一个元素的信息0 P4 M* z$ Z6 V/ I; b
/*
! ^: A N) V! J" Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 s* l4 B( w8 f4 K
{
6 c& J+ ]. ?' v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; h4 X h3 f7 x# U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ S. a6 N6 |$ T" o, Y }
2 v. t" ?3 q! `& _5 {8 ] */$ `, z& |; o: ^ X+ G$ }
//////////////////////////////////////////////////////////////////////////
+ A2 T9 q, d- Y! e break;* T! _; _2 e( j: _( C8 ^
} H4 `9 u( U/ H) i2 }' Y
} 9 c& m- y# ~, T& |) R0 H. _
}, ?6 u1 Q/ ^' C( ~
m_wndMenu.SetVisible(FALSE);1 C A$ O9 y( }& v5 g, ^
- S( Q3 P2 }9 {# }9 W9 C0 o--------------------------------------------------------------------------------------------------------
7 }& n0 _. V$ n+ i+ i: L# m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 n( l6 D% E" }! G" Q{2 {' c7 n. N+ ], y, t$ i
BaseMouseCursor();. h5 v) Y, w7 r3 h- N* u u* x" v
}) _: T2 _% i" K3 B) a: ]9 _: i- M" H
在其下添加:$ G! D& G5 `0 H; Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 f( W# w6 n: t{
! T+ T( B4 ~4 H, im_wndMenu.DeleteAllMenu();
# W8 L& {, }5 p( k. Pm_wndMenu.CreateMenu(this);% y& ]9 d7 T& B [1 A7 N/ P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, t7 W3 t2 ^3 l+ D7 d; c. K
: a& r$ m" G$ d& { |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 V) }6 G* g2 G b{
/ |- g6 C7 l* b. C //P以上级别才可以删除所有道具' c e2 ]# Z' o& v) o& s6 d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 X/ r- ~" l1 J. H( R& ?8 J4 B
}
. C( V% l/ _/ ]5 P2 ~5 wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* X- y! j9 ]: M! U4 tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- c0 r# k' Q' p/ P3 em_wndMenu.SetFocus();3 z! V' _4 }' R9 U1 F, d0 n& x
}
; o- F1 ^: s0 ?6 Q3 q0 [------------------------------------------------------------------------------------------------------------
; ^' T: \# w5 r& w* v, ]7 L5 @+ M*************************
3 s0 S$ O1 q$ H2 W+ NWndField.h文件1 ]. w# m# b0 b$ s
*************************/ q* r5 W7 f- I0 M, P/ k3 ~
搜索:BOOL m_bReport;
- Z! @# S% Z) B; d5 V4 g8 U% f其后添加:% C! q* t; B K
CWndMenu m_wndMenu; @ w* c" U) b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- u0 X: a5 z$ i其后添加:1 p6 d0 S$ e* A4 u( |" f- s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; B, F+ a6 e8 T4 d6 x" U! @5 E) X9 Q/ O$ ]* I0 X* V
0 t" G( Z% v9 f/ L( F' Z |
|