|
|
源文件中_Interface文件夹下WndField.cpp文件
7 K9 J; ~$ O0 t1 M) _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 V% \3 O# F% L* G2 B$ d7 l
- k% t" m2 l; E. b! w; xstruct sItem# w' [& E4 ~ V) X# E
{9 N' \& x0 k8 b( Y. _# Y5 y
DWORD dwId;/ j4 h6 P) p- m& F i% \
DWORD dwKind2;
1 Y0 V5 i5 k8 ~' b2 L/ O+ m6 \DWORD dwItemId;, s9 [0 S' ]( o1 J: G' O
BYTE nIndex;1 ], ]1 z6 Z* S; n9 I+ Y
sItem(){
- r( H3 s( k- V3 x3 o& j5 c dwId = dwKind2 = dwItemId = nIndex = 0;! O* e2 o8 x2 x) i" r' z7 f
}4 V1 @; `- z" M
bool operator < (const sItem p2)
& F2 |$ Q' M! Q& F f% b8 |+ p( o* O{/ p4 T9 D2 g& x* c4 y& T
if (dwKind2 == p2.dwKind2): ?( X7 o( J* @+ a( m# i
{, i" K$ A. r, T- k. ^' T6 d6 V
return dwItemId < p2.dwItemId;( o9 V8 V. M( C' W
}else{9 ]1 M/ B# f/ c. O1 x6 \" C% @
return dwKind2 < p2.dwKind2;$ V! H7 u! L. g2 d& h5 f ]4 Q% E
}
8 U) ?1 l5 T# c6 `2 y2 ^' T}
- J9 X6 i$ m/ K1 z& [};
; D! B" K! r5 q* q- q9 w! zclass CInventorySort
" r. H `+ h6 \{
4 J S2 e9 A9 d2 N5 K+ i% ~/ [: Hpublic:
* Q/ m: H# ?9 g& C8 \7 b$ P BCInventorySort()
$ B* ~" i5 z* I4 d- @- A{
3 m. w8 B( `" f+ v m_dwPos = 0;
4 w% ?1 E3 [7 v2 g}( e0 J. F9 a5 S& Z% Z) T
~CInventorySort(){}2 u# {# U1 S; k
private:6 K2 E+ q9 I- D/ _0 A# h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, t" x9 `: ?' N0 W+ mDWORD m_dwPos;4 y$ i/ G! h4 c
public:$ L& C) U# M9 F! k
void Add(BYTE nIndex)
! x9 c( U4 O) H a1 G7 {1 H* ]{
/ X. @; ` j6 J if (m_dwPos >= MAX_INVENTORY)6 [1 z3 r2 g/ r' w/ g9 f* L
{
7 _% u9 @: D. Q) M6 p5 w7 H return;
3 t! v2 u4 O5 ~. m; T8 | }
/ |" T* ^2 Z. d$ ?1 L* c m_Item[m_dwPos].nIndex = nIndex;: x+ }! u' p7 ^3 u8 u) r8 ]
m_Item[m_dwPos].dwId = m_dwPos;; C" S- ^% t- b0 S
m_dwPos++;- q' F: N# L0 F }9 b
}, v. k, h2 Z. Q# G% Y1 \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& \* W- v( q$ U2 M" n4 v
{
3 a' j' z0 L+ @# u+ |7 e for (int i=0;i<MAX_INVENTORY;i++)0 x6 q1 u p' \$ l
{
N* |& S7 h0 u# f if (m_Item.dwId == dwId)- u0 T7 o/ G5 L
{) r" E4 r" W& R! @
return m_Item.nIndex;
0 W1 N |$ z o2 n- [/ u J- _ }) g$ L9 }: }& |3 h
}7 V/ F, R( @' d; Q4 J$ ?7 a6 j! x' K
return 255;
6 H& N! ?& @% O6 Z8 f$ {( F}- o1 _+ w9 v; i M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 g3 r% i/ ?' [% B9 |2 z, |{
8 D8 I( k' q4 w( h" ]0 k- [ BYTE nTmp = 0;# B: j7 t0 \2 s7 `7 x4 b
bool bDest = false,bSrc = false;4 O( n" j- i! a# C V) L
for (int i=0;i<MAX_INVENTORY;i++)
; `1 K& I7 t. ?. n {; ?+ d- L V9 f5 p
if (dwSrcId == m_Item.dwId)/ x7 W7 m- C" n0 {
{2 H6 j5 I5 [# G+ N
//id相等 则 改变对应的dest和src1 G/ p3 c4 J: n
nTmp = m_Item.nIndex;* B+ y8 ?1 r% S1 v
m_Item.nIndex = dest;
0 \4 u+ P0 I( w% H! r! b- g }. W, v. G, _/ f
}9 ^) q6 t9 S3 d5 L0 t6 {; I( O
//临时数据保存完毕,交换开始
! T/ {/ C! F {( X. A& x/ @ for (int i=0;i<MAX_INVENTORY;i++)
+ u# Q# T( |/ \- J% o {
' s/ k5 q3 K l5 V8 s if (dest == m_Item.nIndex)0 J- i* t& U$ n; h5 }% Y# b
{& } ]. @/ U7 a0 ^% K
//id相等 则 改变对应的dest和src
; d5 r) t* ]5 t w# A- k m_Item.nIndex = nTmp;+ S/ x1 n" f# M, r
}
3 V. b+ s3 a" K: K }
. B; s& g- I/ H& a1 F+ J}& \/ h0 x) Y4 [
};
7 O4 V, C! }' }3 Q4 P, r) g-------------------------------------------------------------------------
+ [- K5 t- m/ w6 i2 o T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); {& S! J3 F/ ?# i0 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" J- l2 S2 A0 H' V( N- S
紧靠其上添加:9 }6 E" L/ L1 F2 a, M. X+ M; E1 v
if( pWndBase == &m_wndMenu )
0 s/ ^4 T1 e" `3 l{
! ?# \6 m" \1 b" [7 w" J* s# g switch( nID )
3 B) D! w ^3 c4 E7 X6 H {
$ i3 ^3 J, f& ~. Y/ R case 2:& l/ s" _0 H5 x: N( P' h6 E
{
8 K7 W* R- t3 P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# V6 h. J) t \0 @& T6 S
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ s! M9 W. g' N) H4 t# v. S1 u0 x {
% Z s7 J7 s" }6 A0 {8 N% N break;
, M% q, D' o* n ^9 Y, J& p$ r }
5 ^+ D% a+ R+ k8 Y' @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 D. E" o1 R6 U @4 p) [
{- l. d3 H% m" u k" D5 c% { O( X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* J& n2 u& u ~5 E2 s) q
if( !pItemElem )
. S& o- |1 {- J continue;
7 M& `, H. m' _& H2 `. v: p( z if(pItemElem->GetExtra() > 0)0 E j K- J5 b8 b5 `
continue;; |# X9 F0 O4 c/ B L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 o# f, X/ d: ?5 B continue;1 C. c6 L$ E" \, {+ A5 V
if( g_pPlayer->IsUsing( pItemElem ) )
. J3 Y. `" B" t continue;* c) t' ]0 t$ @9 D, V1 E
if( pItemElem->IsUndestructable() == TRUE )% s& `. j1 D+ s& H( p$ I8 F
{/ A1 V' [$ H; P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 f% l/ ^. X7 l8 ^* G continue;
! {( n7 T2 Y# U, q } G( G1 z, u8 N& m' b8 _4 `2 Z7 P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 y; o2 F3 l/ Q. P) O$ D
}: y: P, y) j4 H( w4 w
break;, z7 x2 @& Z- G }* ?
}+ a* a1 ?. A; B# o1 l+ G+ g# h: C
case 1:
" x* }6 @- f5 G# A8 |1 t6 d {9 p v$ h7 S; M( G4 M7 V1 E, g4 v- R
//整理背包
$ b$ ?7 G, @7 b6 h. S4 }8 V" v //////////////////////////////////////////////////////////////////////////
* A# F% H# b: u+ |% l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" }4 H& z* y! x& H //////////////////////////////////////////////////////////////////////////* o8 G/ K% e5 A2 [
//////////////////////////////////////////////////////////////////////////
+ N5 a* m4 C; B8 r r# k CInventorySort* pInvSort = new CInventorySort;: Y8 |4 Q7 R2 w; i8 c) F: G) s
vector <sItem> vItem;
$ W' Q' o# V. U/ d } vItem.resize(MAX_INVENTORY);//初始化大小5 _! Z# }, q1 [0 m" u
//////////////////////////////////////////////////////////////////////////
, @) W2 i7 @: C% Y //填充数据
" o6 S# Z& x9 E. \ for (int i=0;i<MAX_INVENTORY;i++)
1 P5 d) C m% S/ D& J8 G9 C {4 L1 a" v# f4 x; \0 K4 b5 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: x* U$ y, H) d1 Y. W% ^
if (!pItemElem)! e4 B% }, {8 J4 ^ _# o+ P
{
" h8 H& P/ A# E2 p* M7 Q ~ {) _ vItem.dwKind2 = 0xffffffff;
( K3 [! H* ?1 t5 d+ @& {8 ^+ t3 m- ] vItem.dwItemId = 0xffffffff;
) b' S( X g6 }0 ~- v* q, C) c vItem.nIndex = i;( E8 Q2 T5 ~3 P! E4 w: _
}else {
4 { [, J3 X% ^9 t ItemProp* pProp = pItemElem->GetProp();
, c) Z& M8 |- x) ? ` vItem.dwKind2 = pProp->dwItemKind2;/ O3 I) N' O( S P+ X( K" Z
vItem.dwItemId = pItemElem->m_dwItemId;
' r+ ?+ b# G8 s- j: o2 y5 C9 c vItem.nIndex = i;
7 [; T! {0 `7 Q/ | }# _3 }6 l V0 w- J. K. a+ D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 {% [$ n0 e# |" L0 r0 u
}5 M( J* e: }. ^* V
//////////////////////////////////////////////////////////////////////////# ? u; f# a2 K, z
sort(vItem.begin(),vItem.end());//排序# s- L0 ]9 x/ u' ~$ [5 M$ R
//////////////////////////////////////////////////////////////////////////5 N7 X3 m, ^7 Y8 S* Q5 L$ [( X
//交换( ^% a, D/ h% q8 {3 t' g* d [
for (size_t i=0;i<vItem.size();i++)" ~: [2 x) [+ r. f. V
{: y! j7 r. b2 H0 Z) p
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ O' w D" k4 r pInvSort->Add(vItem.nIndex);1 R4 S& z, X3 G
}
6 V" j3 g! s0 a& i# U BYTE nDestPos = 0;7 |) Z& l) r8 R7 R( d
for (int i=0;i<MAX_INVENTORY;i++)
" _ }' b+ y. h6 X9 ~" \- p6 O {5 A6 g" h* M- P0 v L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 U7 {' M& ]+ R! O1 A+ z! ~: E4 x" i
if (pItemElem)
; Q6 H/ e. ~2 m$ i4 K5 W3 n% K6 s {
& h! R( w8 o1 z8 ~& Q L if (IsUsingItem(pItemElem))
6 ]# u7 f; K! W {: J3 a$ N5 G/ J4 G* P8 q! ^6 k
//这个位置无法放2 \1 Q5 z+ I8 `8 P |" @+ d& o A
nDestPos++;
3 [! u2 | K+ e a( s" I: ] }5 R+ e% Z, ~" l+ h% v$ Z( w0 a
}
" x; X; L( j. y+ X BYTE nSrc = pInvSort->GetItemSrc(i);" ^4 F9 S3 f; w" K: k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# t6 j6 u$ X7 T6 S5 A
if (pItemElem)) j- R" b" `1 j, h
{" |+ x+ C, l- T9 r( q
if (IsUsingItem(pItemElem))' E" H' _1 Q! D6 O; z# T: e
{
4 E7 `' { y! }- u //这个道具无法移动,跳过
; g! |6 ]/ v4 M+ | continue;
& c: G( L b/ `8 h4 ]: [) i$ L }
; N# H$ _5 K* W4 e, g }else{9 j' l# r/ S- C0 t; I
//空位置 不用动; W- d) Z5 y! B
continue;. d! G# R" s$ Y9 A6 }0 P
}+ B ^4 {$ \. g, i; E4 N. C
//////////////////////////////////////////////////////////////////////////: Y v; y$ k: d9 C9 e( `4 E6 k" _) ^
//开始移动8 G* e1 Y- K" L0 X5 Y7 d2 x
if (nSrc == nDestPos)) K8 B. M: ]4 ~( ~
{: ^% |/ M2 V2 c) M. t# ?5 M
//原地不动
: w Q2 T8 w- Q! Y1 T5 @ nDestPos++;/ A: N, e8 G/ Z, Z7 t, J0 h
continue;
" m6 Y9 A$ E! h% p- Q' N }' u0 t2 G2 z* m
pInvSort->MoveItem(i,nDestPos);
7 a) D1 `1 o$ @1 e# t g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 Y* j* g; }, W! O" t5 U! ^+ t
Sleep(5);
2 M0 g. w, S- c4 t+ F) ]7 F //Error("移动 - %d->%d",nSrc,nDestPos);
3 n* E, r. w1 b9 v' y7 N( z$ ~ nDestPos++;& p$ c8 z1 t/ x7 z! P+ F" @
}, _% B2 U$ d; R9 z: N+ A6 P
//取第一个元素的信息
7 e, W; h! x. }$ ^- w7 n0 _ F/ s /*
9 X' Q+ R+ h; U# x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ v* R; }0 u& s3 u, O" V {5 X" E! j \: c4 n/ b% ?: s7 z: u
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 O0 M8 C0 h; P! P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 Z# h& m- v1 `, ~$ Q5 }
}
5 q6 O2 T! w7 r2 `0 d- Y */
( k: y4 Q _! {0 g# s0 J //////////////////////////////////////////////////////////////////////////5 g! S$ [0 R4 y n2 d+ {
break;' p: Q6 |! ^2 r& F
}: {: p% t; `- \# ]3 w$ V
}
3 O* @, z6 V, j, n) i( P- {}8 B7 D6 g2 e& W6 \: [
m_wndMenu.SetVisible(FALSE);8 k9 ?& b+ ~. Q+ Q# ^
$ Z% q- }; _/ X( m
--------------------------------------------------------------------------------------------------------5 Y) C6 h; N" S) d7 [9 @7 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ F) O& D2 y$ s1 }; y
{6 t* S, W8 U$ i2 K5 K5 w
BaseMouseCursor();2 F( X4 C9 y; c9 n
}
% _, g7 E5 [3 A+ I. U0 d在其下添加:2 g ^7 `5 x2 H2 t( r6 \4 ^" W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 i. S, z: T4 I% d{
" g+ y& d" `3 Y+ {. E9 lm_wndMenu.DeleteAllMenu();
& Z% y, H; v7 x8 f) z4 T3 q+ X* B/ Jm_wndMenu.CreateMenu(this);
0 U$ p, l6 A" F: r6 ]. im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) q% q3 a% |5 u2 b; }( {, u
( e: _4 ]& |* c, E& E5 x: ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 ~* ]1 O( b+ q5 S1 ?) l# d: s
{. {. U/ |- w) K% ^1 t6 N8 R% ^
//P以上级别才可以删除所有道具
3 s* d& D- b' D% n8 ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- h& N, n( d# e3 q, @0 O; a, l' E4 F}, ]' n8 O1 k2 ]- A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 W$ k6 K& v2 _3 ]8 Z0 R7 zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 i! W0 D5 u8 F) g% t4 Fm_wndMenu.SetFocus();& m, q5 ~- X2 G1 G) p
}" O$ e& H5 C) \* f. T+ e2 c
------------------------------------------------------------------------------------------------------------5 O+ v$ ^ }+ e( K( B) Z
*************************' s. ~9 Y% b- a5 [
WndField.h文件, C. |5 ~- n* r5 s- }# k _
*************************3 v2 S: c' f% V% b. w& g( N0 F
搜索:BOOL m_bReport;; ^& Y$ s2 Z/ X6 m
其后添加:. w( C; @5 G$ q/ w! I
CWndMenu m_wndMenu;
' v3 B4 d" U! ?/ ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 @1 L7 P, N7 t2 p+ C其后添加:
) E, _: T% z$ I$ e* ^virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ Y Q C* g5 a, ]% i+ \- v8 |/ z* S1 v6 p8 n
! ^- y. k+ {2 Y( ]) ?2 S |
|