|
|
源文件中_Interface文件夹下WndField.cpp文件
' v4 }8 j9 h3 D% u; b5 P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); f0 I4 Y( [) }+ j: O
Q- p2 F3 K4 j" lstruct sItem
. M8 h. B( B: \1 j{
- l# K* M: q( `' P. p' x$ \" }& wDWORD dwId;+ g% B: l3 N/ X& A1 x
DWORD dwKind2;
- ?, |! h$ V1 u/ {DWORD dwItemId;
. A- u; Q y' G6 r6 `/ i/ HBYTE nIndex;
' z9 G$ @" ]$ Y4 xsItem(){
" `9 ^% g7 R; L: I: @3 z$ U/ q dwId = dwKind2 = dwItemId = nIndex = 0;
- R4 b; F+ |! O7 F8 R}& {+ h+ \8 O* k9 ~& f) g
bool operator < (const sItem p2)$ b+ }% B2 {) t: c. k
{
3 @9 O- I& P, w if (dwKind2 == p2.dwKind2)$ ]& a- _$ O |7 {! \# N* T4 z
{+ B/ m* D' k1 P. W0 q+ c7 W
return dwItemId < p2.dwItemId;( @, A+ f; |/ h& T5 ~* d k
}else{, P" R7 O P9 M1 e0 @/ b# s
return dwKind2 < p2.dwKind2;
% O- f* [) Z9 U6 r5 c5 O/ R }
7 L- k# [6 R+ l3 R0 p# o}8 L- S$ Q) g( X. z
};. t1 T6 \- G8 c# z) `% @
class CInventorySort
9 b, M' z2 d5 F$ ~ E5 i3 S( o( o{* ?2 |% j/ E3 r4 K" E
public:' E C( B* `% l. r$ O) H% J- R
CInventorySort(): u) ?( M1 u( s9 u- W! g5 x# o+ B5 ^
{
* ^$ P; r2 J2 v( z+ a& E" ` m_dwPos = 0;
c, n. O( n) ~( J7 b}
4 R: G& W6 a- d j& u% F, G, q~CInventorySort(){}
( Y/ I1 O$ q, e, O5 nprivate:
" I7 I0 z1 {7 a4 V, T4 X" f; xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 z9 ~4 r3 a7 A
DWORD m_dwPos;( s0 m6 g2 J0 ]4 a- c9 b" s9 {
public:
" ?1 H+ j9 g0 N4 K7 T1 i, Xvoid Add(BYTE nIndex)4 ^( p2 Q v% o- m- b
{% T$ B( w" m' ~( l: S& ^( L% Q
if (m_dwPos >= MAX_INVENTORY)
+ a4 S2 B/ D, ]$ ? d {
, V: e1 ?( V' i* c; Q return;! k$ j+ ~) n4 W' Z: H
}- B. d+ z. Y1 f) i1 O# z/ L
m_Item[m_dwPos].nIndex = nIndex;7 ~3 @/ ?+ r; I$ E0 A2 U
m_Item[m_dwPos].dwId = m_dwPos;
/ j, d# S% D. p ? m_dwPos++;2 c- P8 V+ P% B
}3 m W( k9 _$ V. {7 N- p; Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ b) ?$ n7 ?3 N2 G& S( k{: _0 j6 C6 I5 u/ d0 v- b
for (int i=0;i<MAX_INVENTORY;i++)
2 s" l y$ J Z" c {
: ?0 r5 h- A/ d; } Y if (m_Item.dwId == dwId)
' D% p E. p; F. `8 P, M {# w& Q0 J9 t* d
return m_Item.nIndex;( L' U% ]9 Z6 X* r8 W. l0 W
}
) N/ }: P% V3 ?" l }
4 O/ f% R" \. w; f: `/ ] return 255;, @0 X8 R, ?& h F! L
}4 y- x- [; g* h/ Q1 r7 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* l0 k9 \- O; V2 t, X{0 o8 I. Z# ]8 X9 D. O
BYTE nTmp = 0;- V+ Y$ J, q u0 g, P' R$ M
bool bDest = false,bSrc = false;
1 Z3 |9 g' t4 u! a+ r% S9 U- x for (int i=0;i<MAX_INVENTORY;i++)' R! G# Z4 u t
{
' t6 b6 j% {$ P. b8 ^, o3 [ if (dwSrcId == m_Item.dwId) }; i$ B/ E+ G" l/ P
{
' ^, n7 m" z4 G: p8 r3 m //id相等 则 改变对应的dest和src
q$ L1 J7 [! r \' j. s; u nTmp = m_Item.nIndex;8 n9 o* _& X7 |$ k3 f1 I5 E Q7 S
m_Item.nIndex = dest;: |1 S/ P6 X1 Z6 t# v9 c4 v) A/ C
}4 G0 D9 {. z+ |7 q6 o% C
}# ?& T# g$ r5 K- X
//临时数据保存完毕,交换开始" F7 m1 L2 a% i* e. y- O; Q, U
for (int i=0;i<MAX_INVENTORY;i++)
7 l" R i/ H* ], C, p5 h {& ]- g/ e Q& p1 N, {* e
if (dest == m_Item.nIndex)3 j: y- n% F# L' m4 A* c
{
$ x0 C2 ?7 S# M //id相等 则 改变对应的dest和src4 ^: w2 q5 w- N) ]
m_Item.nIndex = nTmp;3 S/ O a9 g6 w+ W1 K
}
' r" v: E1 x4 X m$ S }9 d4 T9 \5 M4 S; W: U* D
}7 N) T2 Y2 h( W3 u ~8 d g0 X
};
0 A) @5 V" C8 c2 h, w: r: z-------------------------------------------------------------------------
# S3 c! L9 h L+ K8 f: f1 ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 L. f9 z* { f/ B: J( T& o
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ a- ?, s7 M: N/ {紧靠其上添加:
3 u& e4 V& Z3 t3 l; j( Dif( pWndBase == &m_wndMenu )
0 j5 T; [/ Y6 l{& D X4 h" v g
switch( nID )% K) o1 s. K3 w8 V! c! x
{
! a* [' u4 X, J! f5 v case 2:
5 i- i& m/ j9 u' T {! ^6 X- }, c8 r; O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 z" [. n N& O' w3 T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 f1 X% d; [. a; K8 m3 N% E2 M; v
{& p# s; L7 @& D% D- K
break;3 A: v( m$ I1 q- a7 A6 d) r' c
}+ T$ I- }5 ?; T8 N5 {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 v& b( x# m5 A* U9 s C; | E2 C
{: v& u5 N2 ]7 Q3 I P/ }- c) z& H6 ^- u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) Q1 J+ k" F: ?# j* W) c, e
if( !pItemElem )
7 a& L( C& W& m' U" O continue;6 t1 }# \- L4 b& z$ X; d+ H
if(pItemElem->GetExtra() > 0)
3 `0 G+ k: z/ k- C7 t continue;
5 K- z2 c7 z2 | G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 c' h4 e- Y# \ continue;
7 L0 n {. ~+ o# V7 b if( g_pPlayer->IsUsing( pItemElem ) )
5 Q: w, N; x3 `; X( R" { continue;
, \! | W0 X" n) b( n0 v3 @ if( pItemElem->IsUndestructable() == TRUE )( e5 l6 W* }2 H* J1 i7 f! q
{+ e) r, s# F& f7 f$ D c# f1 \& r" x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* b" J4 v6 R* q1 M% F& c' b
continue;, C6 Z) |( N7 f, C
}$ v! g# z2 E# A8 z( T [7 Q+ B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 U7 ?) f$ b( Y1 Y! c: I# Y( o2 ~ }' k* ?4 F! s0 W- ?* I4 a
break;
! Q. i* g- [6 ?6 v+ j! S m }
$ C3 a$ l& Z! p case 1:+ u5 Q# A. }# _% V$ N
{
9 f6 z1 D+ C+ ] I2 X7 V //整理背包8 K: O9 [6 U( v5 B, i- a) e) o$ R
//////////////////////////////////////////////////////////////////////////* o6 G" f5 S: }# ?
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 l' v6 c8 c% J, W //////////////////////////////////////////////////////////////////////////. @. J3 G. W- h
//////////////////////////////////////////////////////////////////////////
9 K8 G# |# n) i+ C" I CInventorySort* pInvSort = new CInventorySort;
) i' ~- P" b: J0 Z! U vector <sItem> vItem;: ]+ p: E3 r% l
vItem.resize(MAX_INVENTORY);//初始化大小5 z8 A# D8 g( X4 P7 c4 W
//////////////////////////////////////////////////////////////////////////7 v5 Y6 C7 O4 r7 \; m4 D3 K
//填充数据
2 a# c( b2 z7 |! D for (int i=0;i<MAX_INVENTORY;i++)3 x7 ?( v5 J. s
{
5 r! M* p+ i, v* z2 v" L, g4 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 f) Z) x$ C5 |1 C& y& i
if (!pItemElem)2 h. ^ w- t5 Y
{
& }; |% P* N2 R5 O2 `& l! o vItem.dwKind2 = 0xffffffff;
$ {% Y4 v+ B! p2 L" _ vItem.dwItemId = 0xffffffff;" v' P6 ^7 R8 Z$ J
vItem.nIndex = i;
. ^2 v: {& N5 d( h( q) J }else {4 m! J" C5 R# X, d
ItemProp* pProp = pItemElem->GetProp();9 J# p( n' N% O2 Q2 e8 ?7 m2 w
vItem.dwKind2 = pProp->dwItemKind2;
+ Z3 M' {% H' D! k, t vItem.dwItemId = pItemElem->m_dwItemId; r8 G5 ~7 [6 V8 B- m0 k/ @4 q: S
vItem.nIndex = i;
7 W9 _; I7 M/ J8 x$ z9 Q& e }
2 [" ~1 [7 Q' Q) [9 m, R" y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ \: X7 A5 ~$ [& r d0 V" i& { }
" X$ J e Q" g //////////////////////////////////////////////////////////////////////////1 M( R6 k ~' z' ?
sort(vItem.begin(),vItem.end());//排序
3 q0 p8 b* h- r# x //////////////////////////////////////////////////////////////////////////
4 @! i/ k2 l% F- Q( b- u+ Q" c //交换- l* [- J& }$ Z9 p) \/ d4 i
for (size_t i=0;i<vItem.size();i++)) X) E8 o! x& Y* V) ?
{0 f2 V, n- O9 C" K0 @$ H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" B4 O/ }1 W' L4 T
pInvSort->Add(vItem.nIndex);9 q4 m5 c1 G8 L/ V
}- W* c* ^, X) \& Z( g4 T
BYTE nDestPos = 0;
2 s" [- a5 r8 [0 v2 L4 R for (int i=0;i<MAX_INVENTORY;i++)( ~% a) S- R% s. C; B+ w! j
{) m1 A+ r$ f4 o2 j. O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ Y. Q1 V6 }. u, S' q/ E( ] if (pItemElem)* T- h- @& a% O ]: y& V j
{
* z, c! e7 A+ z t! W3 [& @! C ] if (IsUsingItem(pItemElem))
' ^7 N" P! h. ?& i/ X* k {: G3 I' ]) S L2 {
//这个位置无法放
- H# q% L; y7 ?' h nDestPos++;3 H) q" _7 s3 b! h2 }
}
8 u4 s/ T# y4 } T4 L. I }4 O2 ^1 F2 S d b) r: X. ~
BYTE nSrc = pInvSort->GetItemSrc(i);
9 X# B4 k* T& x& b7 Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* D3 b/ V9 D2 ?) B; I! h$ q* y% m
if (pItemElem)
$ v) `- _: r, F! S, [9 `' Z {
0 R" T# E) A& V2 ~3 A# { if (IsUsingItem(pItemElem))
; e' L9 @% C( F) {/ m1 ? {
2 A, I# J/ Q% h6 d' n c //这个道具无法移动,跳过. H4 V+ q! B: [: Q. W
continue;
/ q r& P7 h. m0 K7 M6 `0 w }2 ^+ r3 ~% g# C% h* w
}else{
9 [& p, z/ s% y( N: o //空位置 不用动5 i4 m" I* V* F! {
continue;
. W% \# k! j. _- X: g }; H0 p l& ~; \, z+ o2 P# f
//////////////////////////////////////////////////////////////////////////
]$ I% H. @2 S //开始移动
5 R. J+ Y+ w: d5 O0 u& A) F( ^ if (nSrc == nDestPos)
5 o- v: k" d; i7 p {1 n$ @5 [/ b& m8 G2 ^
//原地不动
: u7 C3 M9 z, x5 ]1 j/ p9 v9 J- J r nDestPos++;
6 _$ f% z+ _* y5 Y4 ~2 h- u" v _8 ^& k continue;- @8 k0 |- H g. s+ p
}
7 [! e! p5 ]' {% {# J0 p pInvSort->MoveItem(i,nDestPos);. u7 n; E4 U" S$ c& G C s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 o9 [2 M8 M* L7 {
Sleep(5);
. n7 z7 j5 D9 _$ { //Error("移动 - %d->%d",nSrc,nDestPos);7 G& W# z7 w2 b" {3 H& T
nDestPos++;
+ s4 e# N1 w; v$ ~" b }
_- X; P" z. W. T& d3 F8 L7 F //取第一个元素的信息/ Q8 w* i; d. a: m/ C8 Y
/*% A" Y9 V; E2 J7 ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: j/ T6 P1 |' U; {( \0 b. N3 s/ [ {' L4 d' I$ _! \% _# E1 r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 l: l0 Y3 S7 m9 m$ K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 m6 Z2 }9 v$ \
}
4 d& Z$ g' d( i/ l& l7 \; y */9 T+ ^# f$ a F8 E$ w
//////////////////////////////////////////////////////////////////////////+ c3 ]3 q* `/ }' L& F
break;1 l9 O4 `, s( U- t1 D6 i
}
8 M! _# E9 a/ m1 Z0 Y }
3 X9 q- O: a$ p. ~}
* o$ ?1 ^. U7 l6 Fm_wndMenu.SetVisible(FALSE);, c4 \. ~% e$ b* S2 z/ T
$ c# g. E& \* R+ {
--------------------------------------------------------------------------------------------------------+ {0 z# P d6 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" u0 N0 ~3 h5 U1 i8 C+ |
{" z" D* r# a2 L: N& `/ U1 [
BaseMouseCursor();
* q: o4 ] X# r2 N1 {}
# J+ }2 o# u9 d5 z; x- s0 s在其下添加: }, B: {6 v. v1 K; R7 h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# E5 F( w2 g, S s7 Y& a! q
{/ |) ]7 t ~% i9 v+ D( M
m_wndMenu.DeleteAllMenu();; y$ _0 R/ V1 g
m_wndMenu.CreateMenu(this);
& ^# @) q Z2 `+ P7 U- T: j; pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* R- y" Q# l. z% ^- q) A0 | d
7 l$ m; E" }6 y) M5 ^+ wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- P+ q& W5 ^! s: Z% g{
- x1 I9 L5 l [ //P以上级别才可以删除所有道具
3 V0 z! f% ?0 R3 H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 i0 V+ `- ~0 S: [}
# S6 P* H9 I3 @* z: T; Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 V) h. T; T- m, }. M, ]# S, C" Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 h& z! L) n: m. T6 u' t6 ~0 Q% x
m_wndMenu.SetFocus();4 Z3 n* P/ P8 A, p: P
}
8 W0 B# {1 b4 q------------------------------------------------------------------------------------------------------------/ t* y* t4 F/ }
*************************
2 H$ L# |+ j/ p7 m2 e2 A. rWndField.h文件
. t( \/ q; s+ H8 J*************************
- b4 W* `2 w; E3 e$ `5 H+ \0 R9 M0 J搜索:BOOL m_bReport;% ~# E4 I0 F2 B" E
其后添加:' h2 C7 @& \' e. i
CWndMenu m_wndMenu;9 O$ B- X# t5 Z$ w% }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; b/ ]. [" O. D8 {) ~* L其后添加:4 V6 _) u! s, Y' `' T1 a
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 q. O6 w6 n& e
/ l$ w# e% S/ J. l0 M( G8 p( t! B2 v8 ~7 [9 S: l6 o* z
|
|