|
源文件中_Interface文件夹下WndField.cpp文件
, @, g, S) j0 s [- M1 F( m搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), E7 t( b, p6 d
. w Y' \& N& |3 T! e- b2 D. Jstruct sItem$ h2 \2 x. n) V6 ~, ^
{/ {' K& L5 W: y4 p# a- R+ I
DWORD dwId;- R- m3 T5 t. c( J
DWORD dwKind2;* J3 b8 ?0 K3 P# J
DWORD dwItemId;
1 J: O3 \+ F; U- g- q, p" m1 vBYTE nIndex;
) W1 f( \- T8 S* T+ p$ Z7 ~sItem(){
& \% A' b- D/ z! z5 } dwId = dwKind2 = dwItemId = nIndex = 0;
: s8 Y. k2 c& W# {2 |} h3 E! a/ N) n) r/ E6 S
bool operator < (const sItem p2)
8 Y. P/ y$ \- I0 K- m) Q& I{, m3 Z! Q& A5 J, @0 e
if (dwKind2 == p2.dwKind2)* E% E" v3 [9 P7 U5 a
{% v, v3 b/ k( V; X" j/ i3 X3 u
return dwItemId < p2.dwItemId;
2 T9 F3 ` G3 b/ K! t8 J/ K }else{- c% b8 L- y' R: _, M/ \3 y- W- S
return dwKind2 < p2.dwKind2;
& E. _0 A' a8 H2 z7 m; G0 d5 y! R }
5 _7 k8 e8 X) i: E( S( L}$ g0 N) y; A7 R" Z
};
" A8 U6 U0 s1 k3 |1 Jclass CInventorySort
* ~1 R/ e2 I+ h$ `6 a$ `: G{
+ W/ b9 m- u- o w, l" Jpublic:
, `8 p+ B _- U7 ~6 r) B) RCInventorySort()
# }( {! i! F5 |1 ]+ d{
" e3 U/ Y& g. T9 O4 [. @9 p' @ m_dwPos = 0;
# s2 ]- J" Y" K6 N}
- ?) Q6 `* k g5 n~CInventorySort(){}# K4 d& O# N8 E' N+ ^" ~( O) G
private:) ^( k, N, f( U9 V" Q4 ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: }# y' l8 q" t4 Y7 GDWORD m_dwPos;; w9 R* @4 K" y6 W% b/ D* }/ p
public:
5 @; i/ G0 @# W% [: svoid Add(BYTE nIndex)
: \* C5 d+ @- M0 x/ u [( A{' w" W+ z }0 p* q G/ |3 G' C
if (m_dwPos >= MAX_INVENTORY)
( i/ D A) K2 |9 A f {
; F* h: q2 G _+ {% O+ [2 K return;
) [. ^" K% @) r w6 Q. m# g }' y5 N8 t4 {1 c/ i2 f8 F* v& G6 P
m_Item[m_dwPos].nIndex = nIndex;
7 O. H1 e. |% [9 Y- J% b0 U' w m_Item[m_dwPos].dwId = m_dwPos;
! l! W( ]/ V2 ^6 M m_dwPos++;0 W% r+ O2 v9 l, v! t9 v, O
}, v# K6 A* O3 T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 P, H/ U: Z: t% |. K' @; V
{4 W; e$ o7 [. k2 c4 }3 v* w
for (int i=0;i<MAX_INVENTORY;i++)' [. v0 C: G/ s5 l
{8 b( A( [3 [" H, Q) M5 N
if (m_Item.dwId == dwId)
4 ?/ S0 b. d7 u& f' h# D" y {7 e9 ]. k V. P: E1 ^
return m_Item.nIndex;
0 y* E7 i) X7 m( w6 s }) }+ t" @# _) h: D. d
}9 z* w: n2 n. Y; f4 y3 `( ]
return 255;9 x b" u4 {$ N4 E, j3 }, l
}+ e$ Q8 l6 B' F6 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 c# g; I- S: k
{
( d$ R5 A5 \6 P4 C% O, D4 x; O8 M BYTE nTmp = 0;( Y" U5 a$ {4 D
bool bDest = false,bSrc = false;
/ K7 `; K T6 {* [* P for (int i=0;i<MAX_INVENTORY;i++)
: z( Q% K- S0 K {( X: p }3 |6 ^! r* ]
if (dwSrcId == m_Item.dwId)
# D/ Q$ l( }# j( i {
9 r' w8 A( Y5 L //id相等 则 改变对应的dest和src
( ^4 x5 G0 z( s& C8 q& ~ [4 F nTmp = m_Item.nIndex;: v: l4 G) ^! ?, C
m_Item.nIndex = dest;# a/ C$ d8 j/ o/ W6 g
}
9 ]4 w) |% Y8 _$ ] }" x5 p9 z( d' ~& l
//临时数据保存完毕,交换开始# z5 D& ]9 K2 k w, `1 y
for (int i=0;i<MAX_INVENTORY;i++)
. q) S. g: K' D% Y {* K# M6 C3 B" }5 \+ B7 K
if (dest == m_Item.nIndex)) k3 ^( E/ H+ v I3 H7 W+ C: t/ H
{% ~) \1 x% _) ^9 Y* h9 q: C! I! @
//id相等 则 改变对应的dest和src% z, T6 ^5 A3 ?* x8 `- C
m_Item.nIndex = nTmp;
# B3 N. |0 u) h: B9 j9 I9 I( N E: n }6 `1 g& M8 O4 L5 g$ D$ o
}
p4 ~. M9 E1 ?$ Z! c}
* l4 s! Y! g. X* n e};
6 M1 L7 l) G- L. I$ Y-------------------------------------------------------------------------
$ t: D. ?4 ^' }- [7 F3 |( m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) [. C J: M4 e3 P$ Q; V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 y! o. T" o6 E8 Z
紧靠其上添加:
" h# {. b) Y! |3 C7 f2 ~; _if( pWndBase == &m_wndMenu )
; Z5 s( p: q# v2 E# c+ l$ O{
+ N+ Q# k/ `7 w& B switch( nID )' p2 V2 n8 d. c" z* p$ X6 L
{
7 D$ u& _+ m! m. ~2 J% j case 2:
% E/ ?9 |! A% @# T. Y, }" a) N* ] {
# [" z9 ]9 p! w# Z# r9 ~2 k! u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ t( W* R4 R$ N" E/ y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* b5 d% N f; F {- J+ H( b6 n n Z0 V* Z2 U+ b3 ?( Y
break;* f4 e, i" a, o) c, w
}
! U# @& U( i* g, l2 q: s+ B/ E* [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" _2 j e9 Q2 U$ n5 y {
, A( _3 s' v" t, u& D9 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ k$ ]3 I+ s8 g if( !pItemElem )
% ?; d8 C2 S- [4 w continue;0 p+ M' B6 ~$ c4 B' O
if(pItemElem->GetExtra() > 0)
6 x- O+ v6 R; e6 \ continue;
# ~* n* E/ h: O) r4 m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( V) @ G5 J/ ^- Z7 I0 F8 _$ f1 f& {
continue;0 g K% Q- | `" X; ?5 u$ @
if( g_pPlayer->IsUsing( pItemElem ) )
3 K2 }1 }0 M$ ~$ d7 ]& |% t continue;
) J5 D- G6 j; T+ I6 N F if( pItemElem->IsUndestructable() == TRUE )! G. N# @. J8 g/ E- G
{, { @& v5 {3 _- O- _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' T# C( ^0 p- y continue;
H" g& O( y4 `; O7 j }
; ~+ J' l3 E! ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 Z/ h0 c+ p q$ i. V# M1 i/ e }
& |5 d. ~3 [# V break;
' Z4 o e: }! e: y* \/ q }7 s" w U: `+ i9 y
case 1:
( M: l8 m. M5 q& l( ? {, Q7 Z7 o9 _* y# _
//整理背包- h5 K' J0 k4 a4 y( w5 M
//////////////////////////////////////////////////////////////////////////
+ W; P- D( @$ h$ g8 m4 B9 \3 `/ j( T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 B+ b1 n. r* w$ W //////////////////////////////////////////////////////////////////////////% _# A. s3 m2 X4 m, h& z
//////////////////////////////////////////////////////////////////////////+ q& H* F5 n1 v4 t1 S
CInventorySort* pInvSort = new CInventorySort;' F# k1 D6 I4 r2 r, n2 L
vector <sItem> vItem;
! S: |* v+ Q* S$ f* ] vItem.resize(MAX_INVENTORY);//初始化大小$ D1 _' M9 `9 n: \/ ^1 d- ^
//////////////////////////////////////////////////////////////////////////) H% o6 |' r% u) Y& v0 j) k E, B9 q
//填充数据& ]8 [! a* A2 B; Q5 t# _
for (int i=0;i<MAX_INVENTORY;i++)
1 f* d& s3 L k1 L+ P {1 R8 E9 i( G+ v9 M/ G5 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: j1 a: g8 D( v if (!pItemElem)% R: R) J7 V3 s0 x$ f$ \
{( {" b7 Y( N# F, S5 i+ P5 B
vItem.dwKind2 = 0xffffffff;. S2 J. o2 m7 ~& M. @4 f
vItem.dwItemId = 0xffffffff;
1 C D: H A' j& T vItem.nIndex = i;
/ m) l; W8 a7 ^- I5 Z }else {
0 `, k" a0 ~# Q1 w ItemProp* pProp = pItemElem->GetProp();. n! }" M: V$ t3 v6 o5 |; N
vItem.dwKind2 = pProp->dwItemKind2;
( f3 e0 o2 ^2 f5 T5 R vItem.dwItemId = pItemElem->m_dwItemId;
9 o9 G9 k- m/ R) I% E6 | vItem.nIndex = i;
3 r. @9 Z! O7 i }
" ]- U( v& W& [5 C" O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 c& O( O8 J. i9 S/ y) P
}
+ ~2 D% [+ b4 P+ G5 i9 H* c //////////////////////////////////////////////////////////////////////////* U! V/ J$ x3 w
sort(vItem.begin(),vItem.end());//排序( N; d) w6 J) ~3 e2 t. N: z
//////////////////////////////////////////////////////////////////////////8 k% \+ t3 {) |( y
//交换
6 `8 w* q4 K3 I: A2 i for (size_t i=0;i<vItem.size();i++)5 c: c( j/ p5 [
{
/ q) K, J, ^6 ^: N) M0 Y3 | //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- U7 r9 ?0 T l4 k6 @ pInvSort->Add(vItem.nIndex);
$ L- D7 c' E7 h) l7 f2 S }: {2 }6 v- Y( n7 w7 w1 O& W! A
BYTE nDestPos = 0;
) x7 S" K/ Z3 M9 o8 c2 H7 t1 ~ for (int i=0;i<MAX_INVENTORY;i++). T0 L% F2 p1 U2 {" i6 u& X- u
{
$ l7 S- G; K9 O( m: B+ ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% @: d; u# Z6 v& r9 z' u, `! x0 M
if (pItemElem)
8 T6 p% t7 n# g; n. s9 i+ n {
, s, @% s) f2 L if (IsUsingItem(pItemElem))
4 h" C1 q, m$ {6 q" T {! s0 I; S' s( h' } I3 G4 w
//这个位置无法放
; F# g3 m/ S- }1 y8 _ nDestPos++;
/ z# h6 o' ~! v' D1 ^+ `# f }
( g' n2 R7 o! N5 c: F } v0 @: B# I2 \8 ~- o
BYTE nSrc = pInvSort->GetItemSrc(i);4 ^# t' s G/ X$ i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( D" L/ C7 H3 Q6 S/ a
if (pItemElem)
# g) l1 h q: n( S5 N5 L, T {6 e( N6 O3 v: x! H
if (IsUsingItem(pItemElem))
- z9 z' Q. B: F5 [, e6 c: G }7 l* R {+ m' `! ^4 A1 `, @& I
//这个道具无法移动,跳过
+ w' U s* ~: B( v6 k' H! A N continue;# U" R) N# {' k; d: Q" E. K
}0 S' c' c' K+ E+ c; S# Z5 S
}else{8 }, A; Y! d9 q' t X
//空位置 不用动
3 Z6 l! Y" w5 Y" t continue;, J& I5 v! l% q3 \2 h( N# q; [/ `
}$ ]- P/ G' E# N5 u; D
//////////////////////////////////////////////////////////////////////////
, C [; J% T* D' x; O: [7 P //开始移动1 v- s9 T& w, K
if (nSrc == nDestPos)
- x2 K# I" M$ v) f! g1 Y7 L {% ~* i' M {, u$ \- s
//原地不动
8 E& g5 r) e8 H5 d3 i nDestPos++;
1 ^$ i! O% C& N; t8 a4 u! m! @ continue;
: H# }$ J$ S& u1 n. g; A$ q }
% F6 i5 c5 U; b1 L# |, ?# d pInvSort->MoveItem(i,nDestPos);# G+ A1 n5 V, G4 m8 `! B$ }0 i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 M2 z6 x/ a; s/ [9 E) g7 ^$ x Sleep(5);+ I. U; j; x/ K* X
//Error("移动 - %d->%d",nSrc,nDestPos);
7 E" b( ^/ {, H8 @5 {$ b nDestPos++;
; _+ _& o* `! A9 I$ K3 | }4 s3 {8 r; V- _5 X2 s
//取第一个元素的信息& J5 L/ P0 ~% W6 j, L6 G7 Q1 B
/*
8 \: U) e( Z! h: K" j4 _ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 U$ H6 U- [* V) Q: C2 J( L: m' g
{
" @) A8 s# P7 J, i: U Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* K- y$ o6 G3 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); }2 P1 B# ]2 v) J. E
}* o6 W! R3 T- N0 y; N8 o
*// s+ _& j* A& y+ |# i
/////////////////////////////////////////////////////////////////////////// n: s1 l0 e, X& {& F
break;
k, h: A- D' T0 B4 n }
3 q {9 m( U" a" O, {1 j }
7 g }/ }# Q0 P' L4 c}
" @; {5 n% ^' J: ?9 m& R9 }m_wndMenu.SetVisible(FALSE);
3 t1 O0 W9 T0 C2 z/ M8 c: r! ~( E5 }6 t. W- ^" k
--------------------------------------------------------------------------------------------------------
% B5 C& l. m# b6 T搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 ~4 \, Y1 w* t# `{: c7 p) t: F/ X! j0 F- ?
BaseMouseCursor();
~! {0 V2 y( ~: V}
. T( B4 P( M X8 x9 H5 B+ a! m; O在其下添加:7 d0 T; J8 c1 {' ^: Y1 D+ o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ u: z- m0 l1 O% E% a3 X{
1 \3 \! }! o! b& @* Om_wndMenu.DeleteAllMenu();
% L* b/ V5 X1 t5 a( s7 c$ G& ym_wndMenu.CreateMenu(this);4 A' k9 ^/ A: M! s! p+ [$ \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 |8 N7 T- k0 p. C) v% ?" J. j8 X7 u2 L( H! X: I$ z) S3 l+ |
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% ]6 c& Y" _3 _8 G: j. y6 P{
s9 R: |6 _% J //P以上级别才可以删除所有道具
9 J H, t, {' x$ L5 W, W2 } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! W% ]6 U8 D0 j3 {; e0 I
}8 S& O! a# e3 A$ \$ V, V1 J5 U. e& K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 O0 F9 \8 F6 k% L) O* a% Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 A% b+ a" {" \% t H8 Lm_wndMenu.SetFocus();
G. I+ T) s! @$ v* ?2 V0 ^& R}
& u" T$ p4 A9 V" G& J, D------------------------------------------------------------------------------------------------------------5 u% q, _# d% F) n
*************************. j/ x- ^% K; F z6 T. t' @
WndField.h文件5 H8 b# I7 \2 @4 L% |, w6 S
*************************8 x3 {2 A) H$ o8 l
搜索:BOOL m_bReport;" ]5 N: O6 @6 F2 }( ?: l
其后添加:2 Z. e$ P( ^( B- E4 R
CWndMenu m_wndMenu;$ C( ?5 m9 e$ ]2 a; C, q7 m9 M' Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 z# U" t% s2 C0 H6 [
其后添加:
6 t! m& z* D9 e+ \virtual void OnRButtonUp(UINT nFlags, CPoint point);- E0 z6 U/ A U& l
4 y5 O) y# z+ m
, \8 S, g" C3 n( H# ^/ l' h9 x4 @ |
|