|
|
源文件中_Interface文件夹下WndField.cpp文件1 x$ x1 T5 V7 u& Z: Q8 @* C1 b. g0 R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' J- |5 x. c$ T; g7 |+ G8 D' u/ O6 h
struct sItem
+ Y7 o7 W; D: ?9 \( ~( m2 g{
5 B; ]. K" Y A5 V! d* a) nDWORD dwId;* `) C$ w. k9 L* {& u [" [
DWORD dwKind2;
% ~ Y2 h3 }2 k5 p# e6 gDWORD dwItemId;
! z7 _; {1 f" A9 u7 fBYTE nIndex;5 H, }2 @' S4 K Y
sItem(){: h9 P! w0 L4 n. u2 A. r4 k# y; ?
dwId = dwKind2 = dwItemId = nIndex = 0;
6 {( e+ c% V A6 i! ~6 l}
) w- {% L: v$ C2 Sbool operator < (const sItem p2)' T6 d) p- g" t( j; p2 p: W
{
7 G8 |' w# f$ i( ?& j! _ if (dwKind2 == p2.dwKind2)
- Z% w+ }( p5 d9 L* j3 j* X2 K {
' C* f# Q6 q8 \/ P: |: D return dwItemId < p2.dwItemId;! ~/ ?* B* [0 g1 A9 y& o
}else{8 t+ L% K" c" c7 _) {
return dwKind2 < p2.dwKind2;- K, W% t. @1 y3 \+ b! H3 a- J! Y
}
# E% j: o4 r6 a& e, h% |}
2 g8 o( D& R% Y) G3 L};
6 h; [+ m3 L1 j- Aclass CInventorySort
4 c# Q9 L3 a2 {8 A! o6 X{
2 n! v& v5 \3 q1 m) B( Z) ]: C5 U% Cpublic:
4 y- Z$ Q2 I+ x( v* s' XCInventorySort()
% ^9 A* ?& k, T2 M6 b2 ~{
5 C* Z8 g7 b; V5 s+ Q. [5 B) e2 P$ M( f m_dwPos = 0;
* t& s9 L5 e, ?, ^9 ?}1 ]5 \* ]5 W% t9 l& R) T) U3 F
~CInventorySort(){}7 t; L. P4 h+ B1 J
private:7 c& Q B% G1 O' [# A0 u/ \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( e7 P* d$ S* f- Q5 }
DWORD m_dwPos;5 X: {) D7 |3 k6 C8 q# B
public:
3 o3 |' \( z5 q cvoid Add(BYTE nIndex)# [# }, H+ Y5 q. R# t4 L6 ?' _
{
# Y7 P( ^- Z" \* k- k if (m_dwPos >= MAX_INVENTORY)
0 F" Z/ h6 o, m: _; G# s: p6 B/ Z {* ?$ i& k' u- P/ E
return;
% T6 S+ @. }) X$ E* s a( t }/ t+ c$ Q) |: T7 d: x5 O
m_Item[m_dwPos].nIndex = nIndex;
8 M3 H# g, U! H m_Item[m_dwPos].dwId = m_dwPos;
- h( L: i3 [6 p7 L6 | m_dwPos++;
- Z( @8 L( G1 N3 k}! N; P3 Z$ ?# V" \: A- @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ y, v' d, n( I& G! _
{
% o9 j, k+ E1 ~, A5 N# l for (int i=0;i<MAX_INVENTORY;i++)1 M# k) `; c9 X" A g" t
{
( {! | m$ f* a% ~0 ] if (m_Item.dwId == dwId)
5 E: W [5 x7 P4 E4 _( j {8 s; F9 k5 o' p$ F0 B% o2 U
return m_Item.nIndex;) @, D! I4 T' s: K" B" M$ `, ^
}
$ R. a( s/ c6 e% y }
( E5 x/ P8 M2 z; W1 T return 255;
' C$ R% Q( Q& U2 b' J* K# X$ Y}
5 p! x8 N/ ~3 y Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 n) Y5 M8 D2 E1 T$ R$ Q
{
0 w% K. q( Z/ c6 B9 U BYTE nTmp = 0;
4 h' ?5 \! V* e8 g* q1 E8 q! @6 z bool bDest = false,bSrc = false;5 r5 w% Z# E+ g% W, t
for (int i=0;i<MAX_INVENTORY;i++)
8 |: t) L2 x* G {
% H) R* {; C' D2 W8 F" j if (dwSrcId == m_Item.dwId)
* e3 W( M! k4 y- p+ g3 a9 |: [ {
2 @% M7 H! M3 L/ ` //id相等 则 改变对应的dest和src
, b& _$ d% y; O) P6 q9 p nTmp = m_Item.nIndex;! _1 R: K. l$ i& B: U
m_Item.nIndex = dest;
- n+ {, O! H6 I5 o) N, g }+ \. g! L" p0 ^3 r
}
; n" Q8 k& w* g //临时数据保存完毕,交换开始
% X5 w g7 j& s+ w3 ?2 Y& `; a/ O- A! u for (int i=0;i<MAX_INVENTORY;i++)
" I$ d, Y5 z/ m* y, E {
5 ~ W0 ~4 K( t; e, H if (dest == m_Item.nIndex)3 l8 A3 b2 u# \3 ~$ }
{) l+ B/ {0 i3 _/ p4 |8 Q% {( A+ m1 H
//id相等 则 改变对应的dest和src- n1 \) J& A$ z2 j0 O- g I
m_Item.nIndex = nTmp;
G9 _: |8 f4 e }# q, ^# H3 n4 @, e7 g
}
' W2 J2 l5 Y& a5 z6 r3 O}
! V+ h! d& ^) @# P6 v% N& Z};
" ?' V g! _, e: j! b+ s6 G* b6 P-------------------------------------------------------------------------3 B; e7 n- d( J7 ^4 f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 S; }# T T! T4 K3 L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 T: H) ]& P+ f. q0 }) {
紧靠其上添加:
7 N9 N+ l+ g! g. c9 L b( _2 {) Q- ^6 Eif( pWndBase == &m_wndMenu )
# {3 k: G# T. |- {# x{8 v6 _, |& d4 G
switch( nID )
% J& v! e t+ a- d5 x {+ b N% y5 a! x' b" ?
case 2:
' y! W" a! S/ \* a3 I {
" b1 N' H0 R) b# N! n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 ^4 G' _% h% G6 k6 x. U) \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. {/ V3 m1 U% Q% j {6 ], u2 l9 K! a5 K% u. F
break;
1 G P6 Y# G6 k @+ b# E }& Z% [6 _$ p/ V T1 l9 u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), P Z" c6 E0 [3 i) S3 R. |
{1 e. L( D7 g: n0 c0 A; L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 ?2 w+ G7 g- G/ m
if( !pItemElem )) k! i8 U" T O7 [) a+ I; x& o
continue;% H/ f+ L* \ ], d0 v3 l
if(pItemElem->GetExtra() > 0): T4 u$ B( k7 T) Q9 n6 \
continue;# [5 W7 Z9 s; [6 L0 \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 g8 I9 R( N }8 s9 n
continue;
& a/ L9 l5 J% K- _( x if( g_pPlayer->IsUsing( pItemElem ) )$ @; `' E7 b8 |9 ~' l1 ^6 r* P: L
continue;% E: v4 G9 I8 I) ^! }
if( pItemElem->IsUndestructable() == TRUE )
* Q- \8 r) I7 W8 I {
8 c. A) _; Z, V. u4 U4 L+ l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ E4 |4 s7 `- W5 C# T continue;
: R, p5 |9 U. @9 S }0 L7 x- M! S w: g* m- Y [4 |7 |+ Y/ w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: h2 p& O) z6 e( e
}) n0 h" c8 p! T' f0 E* Q' V4 j0 ?
break;
$ @( l" B" d- `$ j4 j }
. n8 w4 Y' ~! d- V case 1:
% d2 r% j; V7 i, N {
6 i" h2 u- P4 V' f; n0 B7 U //整理背包5 d/ U1 h. o+ |9 x# `6 k2 z# _+ a1 z
//////////////////////////////////////////////////////////////////////////
& ]1 t) a1 U& N4 y3 a o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 l- B* z- ]9 e
//////////////////////////////////////////////////////////////////////////
7 v9 D1 Q1 v0 `" T$ @: U2 I. s //////////////////////////////////////////////////////////////////////////
% n' n4 `0 t1 p# ~7 W8 [ CInventorySort* pInvSort = new CInventorySort;, b" A7 Q& t# C
vector <sItem> vItem;, O; R/ J4 J3 b" u
vItem.resize(MAX_INVENTORY);//初始化大小
# s( W: l0 f* y" ~! x w% h$ ` //////////////////////////////////////////////////////////////////////////" L$ G- L) j9 _! A; F1 A
//填充数据
. j8 a! B2 N6 A for (int i=0;i<MAX_INVENTORY;i++)
+ e! c8 a$ c& [$ ^ o {
4 z" n1 T4 _2 L9 S$ H1 L; ?& \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: Q8 v8 X- x0 _4 t
if (!pItemElem)
1 z$ l% S+ O" n" L/ y' f1 M- h {
: x2 d% h) d# X, h vItem.dwKind2 = 0xffffffff;
+ v1 @7 s7 v& O' V' V2 c! U. {8 L vItem.dwItemId = 0xffffffff;) r% P6 y% y0 A/ m# f( a
vItem.nIndex = i;
! ]' t. ?0 [& l% {+ \' F! y% x }else {# b }4 K( y, M. w% r, I
ItemProp* pProp = pItemElem->GetProp();
9 Q i0 I9 c0 O6 a3 Z vItem.dwKind2 = pProp->dwItemKind2;
% L( k+ _/ M, V% } i0 M5 z vItem.dwItemId = pItemElem->m_dwItemId;. z2 q8 H, ~" A, K C" ~
vItem.nIndex = i;9 q5 p- I% C% K P- b( m' c {. x
}$ {3 j- X/ ?2 r$ r8 X: S' X7 H; ~! U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 M1 e: m8 M& Q a+ c+ M0 ]
}, `9 O7 U( m4 x- U) p
//////////////////////////////////////////////////////////////////////////7 `8 z. W! C' `, h
sort(vItem.begin(),vItem.end());//排序$ J. z, \: K5 a1 n7 j' K
//////////////////////////////////////////////////////////////////////////0 ^3 f( W2 [9 X" j/ k: o) i( R+ j
//交换 B. c6 ~3 I/ }: s+ _7 g! W
for (size_t i=0;i<vItem.size();i++)
: j q% G% b+ H: I! F: T" P& }# L {/ V) G- }5 Y& ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, j* r3 ~. U3 y2 \1 ~4 h+ D
pInvSort->Add(vItem.nIndex);' O. U8 Z7 |( L
}
& } O+ G Q2 [) g* l. m3 ` BYTE nDestPos = 0;
& m. R; i; e$ D9 N for (int i=0;i<MAX_INVENTORY;i++)
0 E; Q+ ^ i: p* [, R1 h7 t& I {; ?! B" v6 m2 _: ?2 r i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ u" z# `2 O, _! u0 d( o
if (pItemElem)3 e: r- q5 |: R# v3 I$ p o" Q
{$ c9 e) \. w+ A5 ?+ W1 R( v4 G
if (IsUsingItem(pItemElem))
6 j" U. z; I% ^1 G" \' L; v {
# O1 Q( \6 `9 E2 b6 q6 o/ N0 j //这个位置无法放) r, f7 A+ n2 ?
nDestPos++;$ \: |7 z: c$ _ y) _
}, d4 Q3 [+ e9 N1 f: D
}
& ]3 k, _$ [$ \ BYTE nSrc = pInvSort->GetItemSrc(i);% l' n5 L& s' [" Y* q8 v* Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. i7 r' ^! T: N) U2 I if (pItemElem)9 e! T/ O! q: c
{5 Z8 @% S5 w, ]6 C* l
if (IsUsingItem(pItemElem))8 y8 S Q2 i8 M1 s8 L: }( s; r" k
{
& o9 d1 l2 l1 f/ ^: V" ]' r //这个道具无法移动,跳过
; H: |* A, C% E2 z+ h+ O9 a continue;- r* I# H" G5 t( a2 _- G
}
# p* j+ H( U0 x; B }else{1 V3 x' f8 x, D: m, s& f
//空位置 不用动
6 I/ n; C7 x7 h5 f/ o. \) J: S+ @- `2 ? continue;
4 D- O1 I& S9 M7 e2 J; \ }
6 x+ G; x% y3 ^9 D- A //////////////////////////////////////////////////////////////////////////1 m' @) L( S! s- f5 M
//开始移动2 ? r) B$ t7 S6 h4 b& w
if (nSrc == nDestPos)+ j/ i" ]( W( g& Z* i d. x- n
{ a! E& ^* T6 ~- @7 h3 O6 w6 u1 c
//原地不动" f ^; G: L: A7 z
nDestPos++;
# g' U. r& B) d1 I9 B% |! L continue;4 A: `/ @+ z: Y! d7 ~
}
4 O1 W+ t3 p$ w0 F5 X5 ?4 ` pInvSort->MoveItem(i,nDestPos);5 n- P/ O' V2 s, n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ L0 Z5 R/ W# c- q. K( S
Sleep(5);
" r3 z$ F" \+ r! ?/ k' n) | //Error("移动 - %d->%d",nSrc,nDestPos);& o+ g0 N' F2 {+ }4 I( y, E
nDestPos++;* z0 B0 ], r* }9 ^
}- J X4 L) O2 F+ _) G% i# f3 |4 Q
//取第一个元素的信息
% Z) j7 r1 D; M( u4 z: k' U /*
! H4 x7 X! N5 |/ G. k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 C; }# ^9 P. d& X9 U {
! K- L3 `3 j/ } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 g7 \5 M+ X1 i7 Q- I A' E
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 w$ ]6 L2 n$ ^; O" e, T* g
}
4 H" }6 H. l/ E */) U Q4 t- k5 A% \" ?
//////////////////////////////////////////////////////////////////////////
) t0 T# ^$ B5 G0 m+ @, p break;; R/ i% G1 Q# N6 n1 }4 k! r2 u
}% L1 D8 M8 I* d$ K
}
1 g0 y* \# N, b7 v}$ ?. E( [9 [, H, v4 n; d) Q6 c: Z8 Q: \
m_wndMenu.SetVisible(FALSE);
+ W* D3 v; v7 N! u7 r% L
- @7 ~- w0 b' @4 Y' B; W7 t( G% A$ W--------------------------------------------------------------------------------------------------------0 I. e+ B! ~2 F1 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), `6 `) f0 a1 [* l9 Z/ L3 \# V: m
{2 X* g1 S h0 k$ a% C( `# n# s! K
BaseMouseCursor();: @, Q: ^7 _ ~6 T* Q
}' e/ y: s& y3 [" q
在其下添加:
9 m7 B7 \8 D# c& I1 D! ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 B( o, Q o: W- l
{
8 w. F n2 f) S2 B% @. B) um_wndMenu.DeleteAllMenu();
& h( r$ { [! ~: Dm_wndMenu.CreateMenu(this);& C+ Y* h1 f6 Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 a- r( F6 O) l! G5 I+ c. @( V) J% R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 T- ]2 b, P6 b5 o# v: J
{! J' b4 y c5 p
//P以上级别才可以删除所有道具* I! g8 `: A; e# b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 u" m# U# V7 C
}
/ v5 Z9 Z' \/ Y* q& J! g. lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 n* J" L) F# y }7 b) g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ r* y a" J5 _/ O- }: Bm_wndMenu.SetFocus();& ]5 q1 A6 z& R( D7 i5 B
}/ n; q8 I7 q b7 Y% ?
------------------------------------------------------------------------------------------------------------/ D. N$ S# T4 A5 w" t0 Q
*************************
. i9 \5 I" f& W- bWndField.h文件' }$ G4 L6 J. V% @! H
*************************) I2 S j' e. R( a! F0 E5 b
搜索:BOOL m_bReport;
8 f! A7 j. I* |2 j: w7 l其后添加:" S* _( v; G" d9 x
CWndMenu m_wndMenu;* @3 v$ ^% J$ s: j0 M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# p2 D! _6 Y1 O5 H8 c% A其后添加:( j. T1 ~. {2 z; _
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 Y8 J3 E/ r3 Q4 _( F3 K6 d& @, E9 u% e4 o7 ?1 J
+ v9 ? g0 D7 R* _3 D |
|