|
|
源文件中_Interface文件夹下WndField.cpp文件
0 ~( H& R5 o9 N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( J% w8 P5 T" j0 t, d- Z/ i1 t- t) S9 B. V( I( R0 { Y& | U
struct sItem
( ]: v3 c* Y8 s; A9 y{9 R- M' L' p! n/ Y, n+ u
DWORD dwId;* |/ J+ E$ R" X( X8 X( u
DWORD dwKind2;. r: @" Y2 g Z/ Q8 f/ n6 T+ V
DWORD dwItemId; `) G+ r& q# ?" Y: \- e
BYTE nIndex;
' O h; t; L: c+ s) k+ I8 D/ UsItem(){! E3 G$ D8 s z/ f; M; u! j
dwId = dwKind2 = dwItemId = nIndex = 0;6 Q9 H: |9 {, `
} X. r8 z: D7 J" n' ?# ]
bool operator < (const sItem p2)
5 V) I7 i" j2 W: T{/ l0 T9 Q& o1 `& M
if (dwKind2 == p2.dwKind2)
5 P+ F! |9 r6 H- q) S2 Z& z9 ? {* X6 e1 O4 q) \1 M: h' l/ E
return dwItemId < p2.dwItemId;' U! S b4 D- k" t( v0 v
}else{
8 x _2 x. T0 G- K1 R0 _& l return dwKind2 < p2.dwKind2;
7 \+ ]* N# }! I3 Y& z9 Y }( V/ z( m* k. Z5 T! `5 p% Y) l" j" [
}# i; |1 ?! I6 R7 z
};
6 k% Z4 ~) x: qclass CInventorySort
% i, K& p _' `3 l+ U; z$ U{
/ o b5 i; L9 ~1 ypublic: `0 N1 O+ m- I7 f3 O8 W# @
CInventorySort()
7 D: k( f+ f' J8 i{
; f3 _8 d8 B" n. B m_dwPos = 0;" V% s: I. }+ z) ~9 u# E5 j
}, n5 Z* V) U+ c9 m1 v7 D* |
~CInventorySort(){}
' Y: h' J7 `6 m/ r ]2 P5 ]private:, ~- t1 N" t' {* R* R2 S* c# S
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 Q* Q5 i& n+ V/ }; h4 kDWORD m_dwPos;
& f% C+ W; j( r7 h! J7 d0 spublic:+ k* P9 B$ {* B1 ~. K, p
void Add(BYTE nIndex)
$ Q* L* T1 D2 s6 S{
& v. d: y7 W/ {; T2 R% a if (m_dwPos >= MAX_INVENTORY)
k4 f- u. n( Q" T+ g {* B+ u$ H# i0 m2 V9 E8 C
return;: H9 W) Z3 r F% s4 A' b6 |
}* v& c! F2 e- g
m_Item[m_dwPos].nIndex = nIndex;0 C- R' K' |( f$ \7 ]$ f. W6 r
m_Item[m_dwPos].dwId = m_dwPos;+ E1 m9 s+ _4 _* ?
m_dwPos++;
& f+ `/ S' D* M! `; m( N}) A4 h3 s$ [- D: F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 i' N2 q s5 `5 ~1 \3 U: n
{
# u" f# b; E" |. m$ x for (int i=0;i<MAX_INVENTORY;i++)' Z" z) ~8 E- K% y* Q7 x
{
9 Y# }* _( } ?5 L% F: i if (m_Item.dwId == dwId)
( K# @ A3 F1 S9 }0 F( R9 |5 n {
8 V& x, s/ h n; R' u return m_Item.nIndex;$ s" c9 m) l' N9 }
}
6 D( Y* f9 A, C- R3 {6 n$ G# u0 z9 P }6 l/ X5 J' i, N! G- q
return 255;
) }2 d/ D& p# ?; z. Q4 ~ n6 B}$ S6 Y; {+ |6 H" A: y; X" ?4 D% j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 }! M6 e7 |& |2 `0 l' F, f$ K{& C/ U% S3 ]( l
BYTE nTmp = 0;
) ~3 r9 a5 A6 t/ L, w bool bDest = false,bSrc = false;
" ~# P: b) Q6 V* T9 B3 ~% O, E2 H for (int i=0;i<MAX_INVENTORY;i++); C# x/ e% h4 \
{
8 b6 B1 F3 ^5 u9 F7 L9 D if (dwSrcId == m_Item.dwId)
# f! x/ c/ u: m: c9 O {
9 d' f! v9 V8 C9 g+ p //id相等 则 改变对应的dest和src! E% R# U7 I7 b- o4 k1 U
nTmp = m_Item.nIndex;: c+ p$ j) Q' \0 ^
m_Item.nIndex = dest;; Y- `, U" l! t( h4 a
}! j" s* K8 l' w' y
}
& M) n/ X+ r7 C4 Y$ X //临时数据保存完毕,交换开始
6 g) p2 P* {/ x3 I for (int i=0;i<MAX_INVENTORY;i++)
! t" g' y7 }8 A1 i; z: p% @ {
# O1 t' Z& [( ^# X% @ if (dest == m_Item.nIndex)
" X/ v* k- i' ?. O, O; b$ b {* D$ [6 @) F! ?' B( B4 f' s
//id相等 则 改变对应的dest和src
, d& d0 T0 j5 ]% X6 f m_Item.nIndex = nTmp;
f! s& |) h6 f5 o }
! z3 [+ a! j& S" ^' o, [( a) J1 e }' g# m8 s" G3 I! o7 d; F- i. h
} R/ |9 K7 ^) u
};5 C7 Z+ b- t3 z; f$ h5 F7 Z6 O' Q+ |# c
-------------------------------------------------------------------------/ I6 T, t- b! j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 N% W& g( m+ S ~1 D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 Q q+ W! C8 F1 v" D+ }9 u
紧靠其上添加:
3 S- v- W/ \: g: @+ ~1 Pif( pWndBase == &m_wndMenu )
9 B& Z4 |/ @: }( O( F{* s) D `7 o' @" W6 F. S" e3 a
switch( nID )
$ f% c! L3 Q) }/ T; H: R# N/ G& k0 B {
' F- q4 [6 U) a case 2:
! j& {- A9 u; B7 Y% T$ h5 P {
+ l; t* c5 g& S z) p' H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; O7 g/ y9 X( b0 O4 H
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' w" W- S# T6 K
{
: F9 i# h/ ?) ]# P8 l3 j break;2 }" K9 ~% p2 O) c; l* y! y7 S+ l
}
$ i2 S7 u9 T) _6 C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ r+ r5 J: f$ x: k" P, @' Y {7 |* T" D4 G& \, i. q I! H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% w j; }# ]2 _5 Z+ m, w if( !pItemElem )1 }) L3 o# X+ N+ }. h" l4 f% B. c
continue;
( k. j3 m9 h* d- n8 r& s8 M if(pItemElem->GetExtra() > 0)
# A3 @% S" v6 A( {( k$ T: N continue;6 e f- Q5 U0 J4 X( z& p% ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 z0 T6 s9 D! M4 @
continue;
9 ?4 G, S; A+ [8 x% L# y3 J5 c if( g_pPlayer->IsUsing( pItemElem ) )
- a5 O7 z* W5 n$ c2 H n7 j8 Q continue;
0 w5 H a8 y( O* M if( pItemElem->IsUndestructable() == TRUE )
% @/ u8 v0 i, g5 z {
8 ~7 [) i6 Y. v, ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& B3 S& I# u ?0 j* Q1 o continue;" S; h8 |5 |2 [ a% O/ w+ O
}
! ?; Q$ X8 S" E# U) T. | _8 ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 t6 m1 c' P! A% `( |) F2 E
}$ c- j3 J: _. H- X
break;& X8 V& e* s4 B$ Z4 G& d
}
, g2 ^1 p5 W0 r+ Y1 Q I: K case 1:2 W/ L2 m. b( c1 t1 M
{
! G9 g/ k! f7 Y" c //整理背包
0 G6 K+ |- p; E7 P$ E+ t //////////////////////////////////////////////////////////////////////////) m+ F! M! R2 d& b% o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. l5 O; y4 ^% D2 [ //////////////////////////////////////////////////////////////////////////8 I; x4 s0 A( }& T" m
//////////////////////////////////////////////////////////////////////////8 ?, k" h( D8 x" `/ x3 d: `
CInventorySort* pInvSort = new CInventorySort;
7 m" Y$ J+ A) j Q" V) b9 d vector <sItem> vItem;
0 n4 M) ~0 M! a7 g% A( t vItem.resize(MAX_INVENTORY);//初始化大小5 f* f I5 [5 y/ r( m
//////////////////////////////////////////////////////////////////////////7 V/ M4 g# F3 e3 ~1 O5 r4 h
//填充数据 @5 ~1 F4 l( X8 e$ J
for (int i=0;i<MAX_INVENTORY;i++)# C: ?; O* y4 m
{+ ~3 |' h/ P/ K4 |# r3 x& e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- s% {* A* t( F4 M3 U/ C7 L" c9 @; W% w
if (!pItemElem)
; d, h; E* y4 ]% L% I' E {4 X- ?! n |1 F- `, a
vItem.dwKind2 = 0xffffffff;/ r( a0 L: T" G! j% n
vItem.dwItemId = 0xffffffff;8 ~! h0 V7 j0 b# S7 f9 o: Z
vItem.nIndex = i;$ N- F1 Y# I$ R q
}else {0 W/ z9 |8 F2 W9 L0 {0 ^' [
ItemProp* pProp = pItemElem->GetProp();
5 D4 _: N# ~ Y( i8 G1 r vItem.dwKind2 = pProp->dwItemKind2;0 U' {; O$ |* S2 W: W; h0 p, Z
vItem.dwItemId = pItemElem->m_dwItemId;
7 x8 r8 t( R8 { vItem.nIndex = i; T1 Q6 F, g6 x
}
% k8 l$ I s* {' r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! S/ O, Y# O8 p: |0 J
}
7 j7 E3 ~" V. Z //////////////////////////////////////////////////////////////////////////7 |* K4 U. Z) x( C0 v% _3 a
sort(vItem.begin(),vItem.end());//排序
* @: u/ S! j% ~/ t8 G0 J //////////////////////////////////////////////////////////////////////////
. @) A' Y' B; }5 I* h: h //交换
, A; C7 O5 k, | for (size_t i=0;i<vItem.size();i++), O, X: K/ s- R2 p
{
u4 l8 w6 n5 D //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ B- w4 r1 y! s$ Q( E2 @. m1 G pInvSort->Add(vItem.nIndex);# p. }2 Q5 K8 S; R2 s
}/ W4 P: l6 j/ X3 y2 G, q* F
BYTE nDestPos = 0;3 i9 P2 f# z' j! {5 X+ }- c9 e
for (int i=0;i<MAX_INVENTORY;i++)
2 f) S+ }6 I: J5 w. A {
9 i5 d- [' {. X' ?* C k+ l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" s4 l( [$ z, w2 j3 z) g if (pItemElem)" ]( p' e. y$ O# W7 }
{: F: {$ f, L) `8 T% C& R- x8 g
if (IsUsingItem(pItemElem))+ \( \, a- v, w! G+ Z) r# X
{
0 B! u( i$ D+ W2 M //这个位置无法放- f7 u# q7 g: f7 f% ~- a) A5 ?
nDestPos++;+ g0 p, t8 |! ?$ W+ {* ?
}6 k6 {: b6 f6 Z& m+ D
}
7 u, e' E# I3 i" T BYTE nSrc = pInvSort->GetItemSrc(i);
& Z* S8 Z6 A$ J7 ~' V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); {2 O E. _' ]- R" C
if (pItemElem)
+ S5 Z: H5 F$ D {
a9 ^6 C* L# L! @% v if (IsUsingItem(pItemElem))8 H2 H: p" p% Z: [6 ]
{
, m. I5 v, ]( ]0 U$ s$ l B //这个道具无法移动,跳过
0 j, f! {8 v8 H" j) r2 x5 t continue;
U+ B, z4 O) |8 ]' l& b0 r7 }6 x }
7 T) B6 A5 c6 c+ t/ C ?8 F }else{
5 P$ [0 }6 m. b$ c //空位置 不用动
$ K: k& ~3 v1 q: n! [ continue;- t: f( R5 R7 K' J
} @' _1 f/ p- E
//////////////////////////////////////////////////////////////////////////5 M9 a3 W4 ^ ?, x c+ n
//开始移动
" b6 ~( ~# X5 _) k if (nSrc == nDestPos)
8 m F; E# N8 u/ |$ Z9 E {) O6 L$ u! w. Z% }8 W _5 s
//原地不动3 L5 P2 q; ]/ v/ }* P. R
nDestPos++;6 c! ^3 I( ]: |8 [9 K* I1 [; }7 F
continue;+ H$ @+ _4 c0 N4 z8 ^( q0 \
}+ x6 ^1 w9 F3 a: S0 c5 `' T; B
pInvSort->MoveItem(i,nDestPos);
/ s/ o8 u. V7 @: e( u% X1 N0 N g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- H* q7 j$ h% {8 E4 S% w- M- V( a Sleep(5);
" f& z) ]# J; n/ {* C/ X/ A& c //Error("移动 - %d->%d",nSrc,nDestPos);) r3 {4 j2 [& B h1 \
nDestPos++;# D* H6 c5 p$ \4 ]
}' {% i" }+ n k
//取第一个元素的信息4 G9 Q* c+ \% n! y2 {
/*+ E( M& u q4 X7 U1 m2 [' D1 Q! s5 r" E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ [ [" W. A% T3 o A" V
{
9 c& `8 U- s6 ~2 A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ n# j" h: \' \1 P9 n) q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* L1 f* {: C5 V) e5 O, A m
}
5 h- R5 D$ Z* X& k% ]5 E */
n( ] i s- d2 L9 _( ]7 {: h' I //////////////////////////////////////////////////////////////////////////
& G9 P2 R. [9 J& U! q _, r" i" D% f4 t break;
7 b2 C* H: _8 [7 j6 q }- y. g7 n3 ]4 `4 T5 w1 F
}
8 |, F: z9 D' c6 ^0 N}
9 N* ^4 c$ @$ S; U4 Km_wndMenu.SetVisible(FALSE);
k) r# m5 f$ \! K' g
, e7 W" Q' j4 w" p) b# u--------------------------------------------------------------------------------------------------------
" `. J# {- V5 v$ F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ ?. ~9 I- a2 u9 n+ _{& S: f( ]$ k2 K; k) b
BaseMouseCursor();' b0 ^5 u- x1 m5 q$ b
}4 H6 Z/ v( c/ Y7 u8 R+ W
在其下添加:
+ N" r& m4 J! M- B$ L/ ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) g' W" a+ s" k" I
{; X: ^& P6 O5 |; k7 a
m_wndMenu.DeleteAllMenu();8 ?1 Q$ U$ d; E1 }$ b7 t
m_wndMenu.CreateMenu(this);
~ N4 j. i0 i6 A d+ f6 i1 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( ?4 X3 [# k$ s9 c$ @
1 H" ^5 W' E6 \: F Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 R, X' l: z0 m6 W7 G1 p% U{
9 Y/ {8 K4 G2 W$ H //P以上级别才可以删除所有道具
/ \' `9 m d/ a0 u' ^6 s1 a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 L. G, o8 e, Q/ N- m6 e1 X}$ \& R% c9 r3 S7 {$ W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) c/ F/ [, B" N. Q6 O' H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) G4 M! L( x& E6 v- G6 I7 |m_wndMenu.SetFocus();% P6 H; q1 T. `5 C. T0 e; y( o/ _
}1 e5 t+ K9 r: P# g9 ^
------------------------------------------------------------------------------------------------------------7 G; z+ }+ e. b2 o
*************************
0 R+ q1 i' s4 ?: vWndField.h文件
0 Q& {9 o! l1 h7 N, L3 r0 h- x3 P*************************
5 b( r1 d* R0 A8 O) a搜索:BOOL m_bReport;% F2 v, v1 }, E, ]) H
其后添加:
& \% L5 d0 H( x9 k. \CWndMenu m_wndMenu;
' Z H. N" X1 M" f+ |2 |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, z) d. H3 v, d% h9 M其后添加:
: e1 o5 U, X3 X5 i' t' S& _virtual void OnRButtonUp(UINT nFlags, CPoint point);
% I2 u: Y' G* @6 m- }' V$ S, c6 @
2 {9 d, d6 W& F7 X# W |
|