|
|
源文件中_Interface文件夹下WndField.cpp文件
( t) V0 n+ S# a: {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* E5 M; X4 m+ `$ t* R2 ~/ r$ E/ v8 K, @6 G+ g" p
struct sItem
+ @* D( c( k: ~( s( ?) R7 D{
7 K0 P4 n0 j& e. [! A! b2 |, @6 r9 DDWORD dwId;
3 O% O. n: ?) B& ~7 ZDWORD dwKind2;8 y" N; b8 H" N: y5 g" u0 ?2 b7 D% c
DWORD dwItemId;
# ?7 k2 c% b9 [5 M" oBYTE nIndex;
0 V& i! H+ Y5 j' Y* @! w2 s# YsItem(){3 V' Q% _9 `; I& {9 V& L$ O- Z
dwId = dwKind2 = dwItemId = nIndex = 0;( Q4 L. S- E* j, W4 f
}
# ^" }) |% x4 I+ k$ E/ mbool operator < (const sItem p2)# z D0 r5 q- s: q
{! p! }3 h9 ]5 ]( W. ?( g
if (dwKind2 == p2.dwKind2)9 G2 g I* Q Q" L
{
+ o) S4 T: G# C' g0 V return dwItemId < p2.dwItemId;
3 I% m0 y5 u2 G: f7 R8 E8 N }else{; [/ D, _. z$ f4 `( G1 N9 g
return dwKind2 < p2.dwKind2;$ K0 e* j1 m! v3 U# J* L- k
}
2 t6 s; Z+ ~# I4 k7 c}! g. ^( S8 T' o( l0 [( ^
};
/ J& c2 y! f4 i" h7 U+ A6 u+ Hclass CInventorySort \ N- E7 V4 c0 U
{
/ F1 G+ R! Q! K% N( |) `$ Ipublic:
1 g* c7 d1 Y* z5 f3 oCInventorySort()
% P: b1 D, b! K3 h9 J" }* Z& r{. J' p, C9 ^0 S8 t
m_dwPos = 0;' R4 @! @+ h+ X/ M9 s
}
( b8 Y9 K( B7 ^6 f% D~CInventorySort(){}1 ~0 \9 ]6 U3 A" S( v
private:
% B7 A2 P X* Y! r9 [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ d0 N+ V& d( d( u
DWORD m_dwPos;$ _: f8 b7 @. U4 Z% M6 X+ `9 o- a
public:1 G' y5 p2 K* @+ v" j4 l( i% }) q
void Add(BYTE nIndex)
' N; E$ `$ C# R, Q/ T- [) t{0 r) B+ u8 `0 K7 g# ~6 G# E8 K% B' G
if (m_dwPos >= MAX_INVENTORY)
/ ]/ x( m7 Y' Y {; b2 }% K4 E# J2 c8 Y3 w! d
return;
$ b+ e1 F8 l7 N3 z6 }' Z" w% ]* W }
, q R3 @7 `3 l( a# ? m_Item[m_dwPos].nIndex = nIndex;0 V/ \: G6 `3 ~( X0 r0 f) V. U8 v
m_Item[m_dwPos].dwId = m_dwPos;
2 A- J% B$ x# y# X m_dwPos++;: w. W; T% ?) _4 J1 ~' y
}5 ~- o, _% L) s' e# z# J, ?
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! S( S! P+ U, R( L{2 m4 V+ c# g2 @; s: K: w
for (int i=0;i<MAX_INVENTORY;i++)7 W6 s: G- t! X
{
" J* ^' J( Q; y3 Z if (m_Item.dwId == dwId)+ t, X; b3 `5 K m& q( `; i
{8 R: T0 Y/ g% w" ~/ q
return m_Item.nIndex;, w% F* B' h9 Z) ?. c
}5 t% ?" X' q7 t( V5 E* J% v* k
}3 p x3 s4 |. S. c1 z1 D
return 255;5 B+ J% M, ^2 r( d; y' a
}2 ^! s, W# k* q% W) }) v: M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& n2 c& V- i3 }0 r6 n{
p+ e. O+ b0 V- L! g2 _" d3 m. z BYTE nTmp = 0;
+ K' O9 A3 C4 v: n; r: \" z bool bDest = false,bSrc = false;3 O+ o7 P1 ?; |8 O
for (int i=0;i<MAX_INVENTORY;i++)
& w, d1 B: i5 Y* P {6 p5 ^8 Y, ?- X* {" k9 b/ u _
if (dwSrcId == m_Item.dwId)
8 F2 _3 W9 @6 y( ~; o {( w0 C5 v& C- i! q& }
//id相等 则 改变对应的dest和src* G8 y! B. S9 `) Z9 `/ }4 V/ ~
nTmp = m_Item.nIndex;
2 f. D) `4 L- \2 s( P m_Item.nIndex = dest;* K. l, l) D( d1 ^- n; X
}$ p% t3 V. O3 g. p# H% f5 e
}% W* d- ? i0 N% h8 e9 t; ~
//临时数据保存完毕,交换开始& V# {" D0 t3 t7 V; U3 q" E
for (int i=0;i<MAX_INVENTORY;i++)
- m( c4 t( f* A {' s0 K2 h: T0 \1 v: j1 F
if (dest == m_Item.nIndex)
! U0 u$ {& j; m4 V0 ^5 Z+ K: T* H {# p7 }; y9 X( g
//id相等 则 改变对应的dest和src
7 w- c+ |5 T0 P m_Item.nIndex = nTmp;* M7 k1 K/ G$ w) H1 r5 G9 S
}% r* F. [, c2 w9 H" v
}5 Q+ ^* G7 p) y# C$ O2 z6 V
}1 r. T$ }5 O. D- B9 a' M
};4 z# C( y+ j4 W: g x4 T$ Y
-------------------------------------------------------------------------+ `5 O7 p1 @4 ^* q5 f; A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ Q9 B$ z1 Q p, L$ g# |. d0 O/ h搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 Y& V3 j' n7 X0 C! ~/ `
紧靠其上添加:( P4 v/ x) ]& S; c
if( pWndBase == &m_wndMenu )
# L" H) S. i# z" P/ q{, n) i1 l. l* m
switch( nID )
6 c( ]4 B; b) s3 c! M {, D" X: h! X: A6 S" w3 Q
case 2:
; v4 F& q- k9 Q; F! \ {- l# Q" {, }6 `; {5 d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 s8 @( {7 p: u; c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. M% ]7 {- z; z% Y q {! {/ c8 ~2 R) b7 z% V# ]
break;
/ `8 J: Q0 _( A }
9 V# l8 u" f- t+ X% k for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 D. J# A, ]# K0 F3 g {
/ u0 s1 o/ m9 I; K, z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& Q0 c4 [* {6 G' Z8 f
if( !pItemElem )
( o5 f* s) Z2 Q; x8 a- Z+ T continue;
" ^ B# y3 P' d0 N& J7 C if(pItemElem->GetExtra() > 0)
0 E& ]7 `- L8 I( I) J, z. b* z0 m continue;
5 W/ u' P8 U3 B; j7 p0 K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ V( M8 h* |) {$ T4 c continue;
# r4 i5 G$ V( _0 w if( g_pPlayer->IsUsing( pItemElem ) )1 j) d# `+ I8 F ?7 d& f/ A
continue;
! D6 d4 c* y' Q7 U+ ]7 t1 d; ? if( pItemElem->IsUndestructable() == TRUE )1 S6 I w8 Y0 L# p
{. I8 _; F/ f2 v: h Q& m" Y7 L
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' S* ^1 N# h& V continue;# d( [8 c! P, x' P4 f% w
}) f) \7 y# T3 W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) i& ?- l, e2 \1 X/ x; ^
}
7 a4 Y4 Q }- ~# g break;
7 f* o$ N) @/ o/ ?. G0 b } p2 c& l/ U& S0 ?2 }+ r
case 1:
" B3 e5 T# i, X( N9 P {
. F" @6 y9 B0 _, _4 f" x! }4 b //整理背包+ Q4 s; g+ E( P. _, k
//////////////////////////////////////////////////////////////////////////
- E& T- x7 o; ]: h- T7 W+ l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, I7 ~2 N$ ^3 W5 ~0 O0 ?" e' ~ ?
//////////////////////////////////////////////////////////////////////////2 G4 `) F0 Q9 G% E+ O$ A
//////////////////////////////////////////////////////////////////////////; o' z1 _% g1 {2 G
CInventorySort* pInvSort = new CInventorySort;# }: A2 Y& C; k* h& g) ?, |
vector <sItem> vItem;
( z. Q. F/ X$ o0 @- K. J4 m vItem.resize(MAX_INVENTORY);//初始化大小* v1 \, k0 u; e1 ?6 Z7 a
//////////////////////////////////////////////////////////////////////////
) }1 d V% m# D0 ]* S6 ` //填充数据& c% f- q1 ?, ~
for (int i=0;i<MAX_INVENTORY;i++)
3 o# [, @$ }$ E! Z E0 \8 j {
' F$ U' Y+ i |* b! ^& M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- e: C' r# I6 V, a. E
if (!pItemElem)5 f$ H5 |& S, a: z% I2 } i
{
( w2 z& L( I5 ^; ~$ S vItem.dwKind2 = 0xffffffff;8 |' J: e; b) z
vItem.dwItemId = 0xffffffff;+ g4 [! ^8 `# {( x
vItem.nIndex = i;
/ u) Q2 T1 l* T: P- j2 Q' n4 H }else {+ \! u# _! |6 x( t0 ~
ItemProp* pProp = pItemElem->GetProp();2 o- v [1 a, o5 Z/ y5 [9 D m
vItem.dwKind2 = pProp->dwItemKind2;6 h) i$ {. g" h4 u0 D% }
vItem.dwItemId = pItemElem->m_dwItemId;0 L. w6 G7 x, p( _! K4 q- d
vItem.nIndex = i;1 J; n# P* [/ ?0 @0 X
}- e8 `0 }. p, a; F1 a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* V& q2 q5 w1 C* m
}
0 d. h* f: ]- I K1 ~( x, U: c ////////////////////////////////////////////////////////////////////////// \' F" j% e4 ]! `3 B. |$ y6 Q/ L
sort(vItem.begin(),vItem.end());//排序
+ n' G% h6 L* S //////////////////////////////////////////////////////////////////////////' m/ x3 W3 E. [6 o* O
//交换: B( y( `0 n4 H, {6 H7 V3 F
for (size_t i=0;i<vItem.size();i++)
, C1 r; Y$ t. z) a9 I {/ D; }; B7 I4 a( {" y2 [" f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, I; ~% [: M) ?8 I8 n1 X& e
pInvSort->Add(vItem.nIndex);! X0 Y+ v6 A \
}
- {4 o" \1 l: e+ M' z BYTE nDestPos = 0;
7 I4 d y8 C: ^. q9 b+ h3 y for (int i=0;i<MAX_INVENTORY;i++)
8 M' l6 [" c( B0 R' `! @" s {
5 A( \, q' n/ }1 R t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- k8 Y. e" p- o" i. p% ?
if (pItemElem)
2 e0 l" D9 H1 `) Z$ e: C {
2 p' C* N ^% c8 D- c5 G if (IsUsingItem(pItemElem))
2 h( _. Y$ m( ~, o8 s6 K, [; \ {7 O/ z4 I4 I0 U5 g! h+ x& C, e
//这个位置无法放
2 B3 y. k8 k5 ]/ k N7 _ nDestPos++;
4 j1 m) M5 H0 V" | }; B8 |1 [6 v! e I
}
7 ` F# |' `& ~' I1 b BYTE nSrc = pInvSort->GetItemSrc(i);1 N5 o& r5 E8 @+ G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ O |8 H, X4 O/ C. _! F if (pItemElem)5 z( T, }' j1 H4 v: l) i* _8 h
{8 c0 C9 `- A2 v' t& ~ k
if (IsUsingItem(pItemElem))
$ v2 h5 D( U- c& D {
, k1 k' ]. L3 i& ^0 t9 M+ T2 B2 T3 Z //这个道具无法移动,跳过
8 p6 f. Z1 y7 e. i+ W continue;# \, H- g, ?" J- y* U4 M4 [
}0 Y/ q8 j5 \) w4 Y; T5 G
}else{4 B, D* y2 r2 {6 O1 \" v$ _
//空位置 不用动4 _3 g0 G& Z/ N( _4 n" i
continue;
" t X0 P2 e9 R0 q }
+ d! v0 X" O1 e# r/ N0 D //////////////////////////////////////////////////////////////////////////
% L2 P( `3 t" G! y+ g* U //开始移动! B8 e& e2 p! O0 i
if (nSrc == nDestPos)
4 b" M5 I+ T, x; p V {6 k6 I$ E* X, `1 t z4 X! |
//原地不动
0 l- K% |( L8 I' U5 i: b nDestPos++;& k1 B4 V9 q# `# E( } n$ l
continue;
/ W1 [% ]9 X4 J' w. _ }
3 h' v% t* _9 k% @/ m pInvSort->MoveItem(i,nDestPos);5 G) a. e1 U5 u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, ]. w$ P6 ^+ d; u( M% y Sleep(5);/ c1 ?& q( S" C
//Error("移动 - %d->%d",nSrc,nDestPos);
" h7 j1 L7 ?1 Q0 m5 |1 P9 F nDestPos++;
: Q- K9 i1 R3 j, Q4 _ }* L! g8 q, {1 _' L i% w
//取第一个元素的信息
: g( I6 ^, N% w0 a% b+ ^2 d( j: L! X /*
8 X" ]; c% `; _1 ~' r- z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 q: y. I6 j) I {. ~' A0 _8 L K& Z( S. A9 K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 |6 K* S* M! d9 i( t9 s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 c: \, z* B1 e+ ]- f5 N) p }
" N- t* |, r, E: l" W5 j- D */
. Q1 E- p* P {4 U //////////////////////////////////////////////////////////////////////////
7 C; m6 S4 ?! L break;
9 M5 F( ^* A# t- O }* G0 j& ^* T9 U. T& p
}
& D8 T5 C! I7 `0 V" {}
# q5 Q6 J _) N3 Mm_wndMenu.SetVisible(FALSE);; x3 ~. a5 A+ [
1 {7 y1 o$ q7 U$ E
--------------------------------------------------------------------------------------------------------! Z7 s( w8 O8 i( Y* _8 ?2 a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 }* P1 F5 e) C{; h) P8 y; `9 v) O1 \
BaseMouseCursor();2 g/ ~9 k; o, P. V0 ^& Z5 J
}
/ q" O1 u! q3 W0 v! l' v6 H在其下添加:( r) W( }% v, k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" ~. ?" l: @+ C: `, r- R6 L{4 i* Q+ c* i, i, e
m_wndMenu.DeleteAllMenu();
0 d7 w; v9 b, F3 Mm_wndMenu.CreateMenu(this);' K& A7 H; R9 X/ T8 O7 x" N* t5 f5 O% Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; W9 R( Z; g7 i _
$ i) M4 d4 L m$ vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: s3 s7 O: j) ?1 m{# u' z5 g4 @, e2 b; U; Y
//P以上级别才可以删除所有道具
. _* T4 o3 p5 M1 |' Z1 U' E- H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* l5 s1 q+ Z) q
}- I" {) D! T @1 ?$ b6 H8 ?5 E1 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) O* ^1 E! p% s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 A6 f6 G; F: H3 x
m_wndMenu.SetFocus();! N: D* g7 I2 |9 C
}% |7 p- r. e5 i( C
------------------------------------------------------------------------------------------------------------
* W7 v( {2 n k+ }*************************' } M0 t" k+ ]) T+ _9 v
WndField.h文件; D4 w7 M& W# U: x* F8 W* p v
*************************
2 _3 r; N9 Q% R; ~& f- P; ^) w搜索:BOOL m_bReport;4 `8 _- b1 Q' L
其后添加:
: u- v+ i0 o; D8 H4 k* LCWndMenu m_wndMenu;
' \% g" {: Y+ D* }, O4 D" z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 l- [, b% b) |/ x2 f$ t
其后添加:, l2 ]- U9 Q+ Z+ j" o2 B% i
virtual void OnRButtonUp(UINT nFlags, CPoint point);, v. |& I6 y' f- C& P5 e1 S. d
8 M" m1 U4 Y; {
( _5 z: W. x& m; }) U+ {# E' s# m
|
|