|
|
源文件中_Interface文件夹下WndField.cpp文件& \# i; E$ d& I r+ g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. C! n2 F" N; B% ^! M8 o+ C* [0 K% ?: B/ T7 X: ?. S- l
struct sItem
" I! {0 w! i, }: [$ q4 M{4 y! x9 f7 g- K# P' w
DWORD dwId;
+ ]2 _, h3 f. |$ U+ g* X) ZDWORD dwKind2;
) P, X) f F% f* M- j NDWORD dwItemId;
8 h( N4 A( t/ s, T9 U& O6 i, c7 T; fBYTE nIndex;! V# G7 v8 q( O* g7 V9 ~
sItem(){: M0 Q# o( G; W: T. D
dwId = dwKind2 = dwItemId = nIndex = 0;
$ X9 F* T j4 y- P- e5 a2 B1 a* c: `1 a}
& m: F; P: o3 ]. l0 Lbool operator < (const sItem p2)
" \2 Y8 z8 z2 \1 `+ t9 q* y{% t( s U9 V1 c8 a0 q5 @2 |
if (dwKind2 == p2.dwKind2)* ?7 O; f5 L/ f* \
{$ J8 o3 Q |' ^3 A6 ^# Q
return dwItemId < p2.dwItemId;' F: E( n, o) E' W& J9 T
}else{# @0 Y3 b- v: m5 t
return dwKind2 < p2.dwKind2;
3 p; D$ i) A; |: v$ [ }, J# r g! n- I' q! A- V5 ~# B
}
- K" C6 D2 s! |$ _) D1 g};
) u5 W5 k+ h/ Y" P$ Jclass CInventorySort
; N6 `) R4 ?. H/ {% l8 i{2 }3 B! ^) m b& m" z; Q/ H
public:0 o5 c$ N2 R- a8 I
CInventorySort()9 B- Z# h& c+ y% D, o; J# I& H
{
1 v( Y# S! E: v$ K* O m_dwPos = 0;" G: t5 u2 J% `7 z; ?
}
" {/ X' n- v0 I) ^. i/ V~CInventorySort(){}. ~+ z; c) k" r& M1 y u5 }2 `6 f
private:
, g6 Y2 P- _+ O5 B. `sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' P' q! L: n I# E4 }( i
DWORD m_dwPos;4 z7 ^$ D$ ?& v7 k0 O8 C$ z+ _
public:! B4 J2 d3 \3 b2 E) ]8 X
void Add(BYTE nIndex)
) \/ A# D, y4 G# u% I! E" U{
& ^8 Y* s5 @) i, s$ T; c if (m_dwPos >= MAX_INVENTORY)
0 a) m4 q2 B2 @% _/ \ {+ o7 ^8 B* C8 j0 n
return;
6 j) ^3 `8 H1 I: X! _ }
) k# U' C: S& I7 V m_Item[m_dwPos].nIndex = nIndex;) b* \# ^' ~2 M1 x& P2 U& T; L2 c
m_Item[m_dwPos].dwId = m_dwPos;& U! R! x7 W) v; k
m_dwPos++;
( V$ \% B7 J \3 J! `$ \& m}
" Y( k9 ^( K4 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, M+ a% V9 a' c4 |0 s{% ^( i' J1 D% y* l6 [/ E$ p9 o
for (int i=0;i<MAX_INVENTORY;i++), m1 I1 s8 B3 J; X7 A# H. a
{: ]. Z$ ^! N4 B4 I& V8 v( [; R
if (m_Item.dwId == dwId)
1 \; g7 @: z) X7 e. [- Y8 f J {
' _+ E% a8 Y/ B5 ~7 e+ f9 M return m_Item.nIndex;2 l1 o3 p* F& o" A! t# [& f
}
; a9 d8 L& }9 S: n }9 g7 N8 R# u$ N
return 255;
4 Q3 z) A" G! f. ~1 }1 U. _}3 w* W6 x( E' ^: W5 q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- h2 ^0 j( k% ^& I3 n; ?
{: q, j' @ g' G M" N+ ]
BYTE nTmp = 0;
9 b, E. E5 F! J" w bool bDest = false,bSrc = false;0 ]- Y- e( i+ q
for (int i=0;i<MAX_INVENTORY;i++)9 o$ P* B% i8 y! |* X. T, A
{! O5 G5 E$ h0 F1 ~/ B4 j) r/ l
if (dwSrcId == m_Item.dwId)
) Y- u* ]. n* D. x& K* F {" }. d3 z1 N t0 `- Q
//id相等 则 改变对应的dest和src p! M& k! V$ y% f1 m
nTmp = m_Item.nIndex;( u. k' T: |: Z0 v0 v, a- ^
m_Item.nIndex = dest;* ~" E. o$ g7 [9 J
}% q4 O# o n8 U, |3 `# S
}
' T$ o* N! g1 U/ P& _, _( X0 o //临时数据保存完毕,交换开始
& @* }' R( B" d6 a0 g9 [ for (int i=0;i<MAX_INVENTORY;i++)
' e6 {) n; E1 G, S- F% @! J {3 s* |9 C: Z! A
if (dest == m_Item.nIndex)9 g1 C& w8 }; G+ \3 _
{
2 m6 t* F; g) ^9 g6 q# {8 C //id相等 则 改变对应的dest和src# m) }# [5 S7 K9 r" z
m_Item.nIndex = nTmp;
3 e" K2 |( m/ D }
$ T0 k5 T5 d# z0 p4 n, s4 r }% k; G6 @: o9 c7 E4 c5 T+ K
}
0 C" M, U$ W0 x};. r% y: X# ^* E T5 l; G* Q
-------------------------------------------------------------------------: B, G! `. \5 e6 ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# u g: v( f# j! P* q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) S4 B* e) ^) w" j8 _
紧靠其上添加:) m+ |4 |' w/ ~& Y- M
if( pWndBase == &m_wndMenu )
$ \* w7 Z, }- e) s4 F5 b{
) R3 P+ C, u0 A6 w" G switch( nID )8 b2 B% c5 I" n) V2 \
{
& x. s5 V; R$ B( ^ case 2:5 s/ T7 ~1 [9 q' M O0 C
{
! H. I I% h( H4 X5 E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 j, ?, \3 y. y' ?2 B3 H+ k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" u4 f' A8 B6 y5 D& \ N {
1 S5 p- c; ^% H; Z break;( k- I; H1 j. }- `
}
* M* B! x. B7 g. Y+ W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ C2 c$ I. T2 Q" O( J
{# ^9 P; u% Q8 b& c4 B: Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% s! {7 A6 j- v8 u" w$ G5 k* K, N4 z
if( !pItemElem )8 H( C3 Z1 y9 @* c9 J$ \- ^! N8 U% b
continue;
: }( ^: L4 [$ y/ C; r if(pItemElem->GetExtra() > 0)
0 I/ J' J* x8 s continue;9 m1 H7 D5 E& ?( o, b! K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* M' Y, x* a D7 Z+ m$ k6 |7 _ continue;- J% [: |5 Q1 u3 {* q
if( g_pPlayer->IsUsing( pItemElem ) )( Z3 ?9 E" |' |+ S) _4 `% [
continue;
+ `7 a5 }8 n9 R' C8 { if( pItemElem->IsUndestructable() == TRUE )
9 A4 R! E, Y3 F {
0 i/ L8 ^" X" I: W. E4 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ U$ _2 d C, T m$ M continue;
: N% ~+ A2 M9 T8 e! z" W% Z }
! o0 Q/ u/ |9 M2 I0 y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" ]' s: f2 X" m* Z }
3 t2 W) Y* k1 x/ X- h8 n0 w, I break;
; r% K; s5 o5 {# U5 q8 g }# }/ L# z) y' {4 `7 |* M5 v
case 1:
0 T' Z: B# N8 W& P! c( }+ d; ] {
- n6 W4 Z3 N; J. c) `0 @ //整理背包
+ [1 S) b- C" E# p6 C+ O# } //////////////////////////////////////////////////////////////////////////3 V* T4 o3 j$ | W- ?. h$ N5 a" s& [! L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 i9 i! i3 l* q" t
//////////////////////////////////////////////////////////////////////////
) @ t. D1 ~% _7 h5 _- \/ N //////////////////////////////////////////////////////////////////////////! n% w: H; S3 i5 |$ x# w
CInventorySort* pInvSort = new CInventorySort;4 `) M7 f4 ?) T* w9 N. r
vector <sItem> vItem;6 g1 ^8 d& n" J" ?3 a2 T, ^3 O
vItem.resize(MAX_INVENTORY);//初始化大小
& @5 _: R% o; j6 [" G4 L //////////////////////////////////////////////////////////////////////////
. W3 G* r5 M$ q$ i; O; R //填充数据
& c) Q& k0 m4 ~5 _+ G for (int i=0;i<MAX_INVENTORY;i++), I0 [: B$ {( a+ s/ w
{; S6 S/ Z& W* O! ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 y9 x% k v9 {- q( X$ C if (!pItemElem)% b7 d' R7 ]8 N6 d8 f5 w; q' U
{9 F8 x, r; b& Q% y5 H9 ^
vItem.dwKind2 = 0xffffffff;
6 R6 U/ X% W5 {7 ?/ q vItem.dwItemId = 0xffffffff;3 l7 q# C1 ?& k% c
vItem.nIndex = i;
: v& K) w2 l E* X0 h7 N3 O }else {: M5 x, q# ^( S( Z/ F; X
ItemProp* pProp = pItemElem->GetProp();" u4 B3 Q7 F8 U8 o' A" L
vItem.dwKind2 = pProp->dwItemKind2;& m# J1 C( ~* @
vItem.dwItemId = pItemElem->m_dwItemId;
6 Q8 A1 M) T' j7 r% |6 B! V vItem.nIndex = i; ^& e$ z% L5 F2 h5 @
}
! `1 h* f$ m( I8 s6 w. _2 g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 Z" r1 Q/ I& v$ T) T0 g& P: y1 O; t }' [/ ^( g$ o1 R) l. h' N
//////////////////////////////////////////////////////////////////////////2 t$ L$ n: ]% J2 Y/ F
sort(vItem.begin(),vItem.end());//排序
" {/ ^+ q' N H+ R; X4 Y //////////////////////////////////////////////////////////////////////////
6 ~2 h2 f0 T% x: _5 r5 Z //交换
c, m1 F4 n# |4 R4 b# { for (size_t i=0;i<vItem.size();i++)
, l" {! X# P6 j% o/ F$ d {
9 s4 P' E. D( p0 }+ x9 _+ Y# K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
Z6 ?8 ?" F' ^% x8 f0 q8 ] pInvSort->Add(vItem.nIndex);) }( a5 f1 N1 P4 y6 Y2 Y' \3 q
}
6 P4 M% \% {, P3 T BYTE nDestPos = 0;
. G3 q; F; W0 e. ~ for (int i=0;i<MAX_INVENTORY;i++)* P' b# l* D. H; h# l% a
{9 U) |% C9 R4 J7 k1 A) w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ e- H$ v# \9 v if (pItemElem)4 c/ r" V; {/ i# D0 K" @+ ~
{
k5 b3 q0 v# E* ?, B4 `8 |/ _ if (IsUsingItem(pItemElem))
% F0 o! b+ B; _0 Q& m {
) `8 [6 @. e8 ` //这个位置无法放
$ W0 S! b+ O1 A F5 W nDestPos++;
5 D2 z$ M$ z% _$ N: ~' Y }
7 C9 c) X8 {/ Y7 V2 S }/ K: w: d. A& [; h
BYTE nSrc = pInvSort->GetItemSrc(i);0 I/ R6 f1 e& R% ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 S4 ^4 h8 Y8 r" A$ b" } if (pItemElem)3 j2 |* N3 _6 S* X+ o: R& t
{
. U+ C! @7 J1 X$ l if (IsUsingItem(pItemElem))
+ u, I+ Y d8 u2 w5 B4 } { t4 p9 C$ n5 `- _- }
//这个道具无法移动,跳过
" [1 i# f- v% V& q& U* X" t' X continue;( o6 i7 y9 t! w/ q3 D z' C4 ~# K
}- {$ q3 e7 D. V6 x- `
}else{+ B0 C1 K4 e. X1 `" x2 ?! f
//空位置 不用动1 y4 V* D( `& l% `0 g: x. i
continue;
3 f% c, X4 w) w! n7 i }# \! k/ ]0 X" l* a% _1 J! P
//////////////////////////////////////////////////////////////////////////
7 _- g; F1 w6 h$ ]; B //开始移动
, M6 @! J' D* E0 B( O8 l9 g if (nSrc == nDestPos)& P' Y! J/ r4 h8 W! f# N. H. s
{
8 j; C+ E9 G1 B! q& G //原地不动
1 V: a) d- g8 k h nDestPos++;' L# ?4 T1 P+ N$ _) x/ ^0 o
continue;* }( a! d2 ^8 d0 m) T
}4 H& j" F$ f, }" H
pInvSort->MoveItem(i,nDestPos);
# R2 q/ I$ f. ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ S! P* A2 B* ~) x. y' k Sleep(5);( [% {3 e+ L& ]8 z1 a3 j
//Error("移动 - %d->%d",nSrc,nDestPos);, U8 l5 Y1 ]5 x- \0 ?
nDestPos++;
0 t" ]; _1 h, ~& P5 m1 F0 w7 @ }/ C" u/ x5 i/ t- k% r
//取第一个元素的信息: F3 ~* O$ ]7 K: x6 v |4 \6 A4 y
/*
9 Q5 S; M+ m3 v; i, p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ y' s( {6 m5 v4 S! C {
& ^# j! S1 b, ?" ~. L A) A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 x" j" v% \/ `' U7 p) D1 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" [" r a0 D" Z1 {3 T8 M2 T/ k$ ~
}
9 B: j9 z- y* o- L4 T% i6 W. j */
5 o# @ B& X/ h/ g- n/ Q j( y //////////////////////////////////////////////////////////////////////////
, L# x Y" K/ O' c: M. ^ break;' l/ i! s: R9 O+ A# y& t2 @
}/ M9 O+ }2 z2 |* d7 s
}
6 r+ A5 j* T# t [; G}
0 ^1 H) P- C. {% G" K9 h! wm_wndMenu.SetVisible(FALSE);" L$ @2 j$ J1 D6 g4 W
8 o3 J3 Z: T7 R+ D" K3 v
--------------------------------------------------------------------------------------------------------) ?( R; b4 `4 P! [+ a$ Z/ `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 b* | i/ ^0 n. w{/ a* A0 c0 f/ ~5 g" \
BaseMouseCursor();' X7 h. t: c7 o* v$ g, A
}
" s: V! m# u3 h7 T A/ x2 \6 h在其下添加:/ e* o& J7 V3 v6 `* F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
K( U1 v1 v/ P( K. {4 a3 _; O* F9 g{0 z! N2 F# R5 n3 y ? |( E( F( d
m_wndMenu.DeleteAllMenu();
, c1 C. @+ K5 C4 `5 F' ]m_wndMenu.CreateMenu(this);
7 G* T; e: u' ~4 R& }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 X0 p1 U3 z) b0 ^
A7 ^# N0 U& U2 mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. m9 b( f, Z8 Z. o8 A# F% M$ i{0 |( k* ^! g$ `
//P以上级别才可以删除所有道具3 x6 h+ j; P. B0 N) K9 E" r8 T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- s( @$ \! a9 _
}- X8 g! T! c* r% \9 `) Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# l, j4 x4 p F9 am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ S- S. ? o$ ]3 dm_wndMenu.SetFocus();! ?3 |' D! Y6 }. C9 e
}
& ~! m5 ~; I0 H9 P* Z: E0 b8 y------------------------------------------------------------------------------------------------------------
* F0 Y3 k) O1 K+ | G*************************
. Y" Z$ R2 V, H6 c0 pWndField.h文件
; e& k( H6 z7 s6 M" s9 _*************************
g! t8 J; g- s1 |7 L搜索:BOOL m_bReport;& S8 _5 b8 O5 z, O
其后添加:9 S; {0 l: w0 \/ H# ^6 d
CWndMenu m_wndMenu;
1 g. b' @! ]7 t5 W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# u2 E/ q( v/ ~/ n
其后添加:
$ l. ^+ E( ?7 uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' G& R( c# J( u- r$ N
, r! m$ ~! f) p3 q& [, X
# M4 m, O* C& ^- \2 u |
|