|
|
源文件中_Interface文件夹下WndField.cpp文件
1 }' Y" d0 |% q. [% `/ m" [8 W' S0 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' U: w2 j, A2 Y4 n7 c; v1 \4 t0 y5 j; Z" t* `
struct sItem
% k* g7 U6 [" T6 j. Y{
* C! B$ L5 l- T$ EDWORD dwId;9 l8 u/ b! M5 S1 Q
DWORD dwKind2;) K7 u$ X3 r) U: k \9 d1 P7 l
DWORD dwItemId;
7 I4 R' m2 h, xBYTE nIndex;
/ {! N5 {% v$ Z- f8 Z6 P2 lsItem(){/ ^6 g0 {" P$ {3 D7 X: |9 B
dwId = dwKind2 = dwItemId = nIndex = 0;
) D0 i4 _$ @ s# F4 m- {0 D}' Q1 s9 p; R6 ~6 h m
bool operator < (const sItem p2)5 ~3 e! ]5 V9 n3 [: G3 R5 D7 d
{" ^3 P. j2 u4 w1 J! c+ X) L
if (dwKind2 == p2.dwKind2)
. F, Y4 k4 r/ L0 A: Y* Y {
' Q0 ~% B! }# z! v1 Q/ R7 B return dwItemId < p2.dwItemId;$ ]/ }; f& i3 }) x% n7 O! V
}else{4 Q1 ~/ w: T. A7 |
return dwKind2 < p2.dwKind2;
' b& i6 z8 H' k }+ x$ @: Q# Q3 x! s: e3 y" [+ I
}
4 ]5 U* B5 j0 F; O v* k# J: j};
0 H8 H' `# i1 ^class CInventorySort
, V/ W7 }7 f, G* G: ?2 {7 \{
" [1 [/ w. ]4 X4 n, T9 C' spublic:
0 e5 A3 _- O# s6 qCInventorySort()
8 n4 A: [! j. }5 x: s* I{
1 S% ^) N2 T) H! ^5 `3 _ m_dwPos = 0; v" L' B0 ]7 ]# s' N
}
! \! U" }0 H2 a~CInventorySort(){}
1 o4 ?& o- T9 o1 Y' vprivate:- A8 O b4 J" H5 G# z5 \" W7 z: z3 S9 F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( m8 u: Q+ Z& b W( W3 \1 HDWORD m_dwPos;6 K" C9 o/ a7 x" ~; T# h, [) B
public:1 C7 `* z. \! f1 l, `1 F
void Add(BYTE nIndex)
6 J+ }# t9 ~ w5 V; Z5 E$ o0 V{( V9 S$ u8 J6 W$ S) j! O
if (m_dwPos >= MAX_INVENTORY)
! J. P& N) b: y; d1 ]0 ? {
8 e2 ?, o& }+ d return;( _6 t' }( D" g# o7 w- p
}
& m5 d! ]8 e, E5 T* N m_Item[m_dwPos].nIndex = nIndex;% z/ L7 r; t1 c- \0 h3 K
m_Item[m_dwPos].dwId = m_dwPos;; |' A) }5 a' u& S
m_dwPos++;: y& i0 m) }+ W$ o5 `/ c8 f. ?
}8 X8 f A3 v4 S# f# L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 R* {. U1 G' }" m8 W* C
{9 k: V7 m: C. A
for (int i=0;i<MAX_INVENTORY;i++)
0 M3 S( I4 B) \% l6 H. b {
8 J9 b) M- J9 c- x if (m_Item.dwId == dwId)8 z+ R) V, b% {- r
{& H3 u6 N; G+ O( h" H( c
return m_Item.nIndex;
; z- y' h, E$ I M }
$ ^6 }- D4 w# g6 b }
3 n: F" X* m/ x/ [; Q4 ]+ S return 255;4 T1 g5 P% g3 G7 Z; j! \9 N
}! {& t7 s: e D. i0 r( Y% P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ T8 U% {6 K$ g) E9 l
{ I! w) t5 R# s0 P% F' X
BYTE nTmp = 0;8 s* E& A7 R' T8 t, N7 x
bool bDest = false,bSrc = false;
/ v% k/ B G! m5 P) W" O for (int i=0;i<MAX_INVENTORY;i++)
. ^' y& j( z: D, _- G" M7 A" E2 q& N {
2 Z& }$ P% O' L( r: Y c/ e/ o if (dwSrcId == m_Item.dwId); s; m( b: p/ X0 X; N; i: p \
{" }: L( u6 z5 Y7 \/ X3 U. f* t
//id相等 则 改变对应的dest和src
/ J6 ]+ x! v+ R" }" ] } nTmp = m_Item.nIndex;
5 h: `" D# [" f) s6 g m_Item.nIndex = dest;" S) [$ H& p2 M2 ^4 S% i' r" [
}" E+ Y% Y8 D' N/ D5 e: o* s- n
}9 w. L/ V* q7 c
//临时数据保存完毕,交换开始
- F8 v# F: @; i6 \5 R for (int i=0;i<MAX_INVENTORY;i++)3 T0 j+ L. E3 D6 l
{% z5 \. `4 E9 D. v7 J5 `0 G4 {+ ?
if (dest == m_Item.nIndex)* f4 ^( A$ y& c2 m2 u* f3 [
{
8 ?8 q+ o' k* K* _) G //id相等 则 改变对应的dest和src
4 \$ b; ^1 D/ ^/ G' a) K0 } m_Item.nIndex = nTmp;: U8 e# Q- M+ c5 c
}- o5 S- b5 ]' G% t2 T6 u$ ]
}
' x( M2 [+ @; S K( h7 D( E/ U6 f1 j}9 n2 L. F p; A2 v6 z; ?- x% d- G
};
* Y) c1 h9 W- l-------------------------------------------------------------------------
$ k0 y* {2 b# [5 g$ u4 L+ ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
U/ u5 H; A- g3 G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- X# n; F4 G" X: Q: M0 _) v [紧靠其上添加:
7 F2 I1 o7 i+ P" x- R6 ?" wif( pWndBase == &m_wndMenu )- P; G' A) N& q) x0 n! j
{/ Q" ~* s F& w t" [
switch( nID ). t) W {/ y7 i1 k
{- x+ P9 W6 S. m, D2 Z; r2 |
case 2:; N- s4 I, u+ W, O0 V0 _7 {9 ~
{* E# F9 i( t* N" I
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 E+ {8 O$ Q3 t
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- F7 o4 ^0 L+ x; d3 e) p {
+ P' Z, z4 ~. Q! G ?1 e break;
6 v' l' ]' `% u* O9 a }+ f4 o3 Q; s, x3 j. R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
N% w" s- E3 k, u; I {
+ f, ?4 E# x: n" K/ ~& @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ A& [& m& v* q- c) U if( !pItemElem )
* u( G5 h# \9 y8 m' m% } continue;
6 K% l5 v" \4 N( O" H if(pItemElem->GetExtra() > 0)+ I' n% O+ Z) M$ G8 k
continue;
; I3 @0 X; B. A; [9 R; r; a; J if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: O. v& u( r! ?( r4 z4 D continue;
1 _6 d" F3 \ W2 Y8 p if( g_pPlayer->IsUsing( pItemElem ) )
0 d6 _% O% B& |" C" B: c continue;/ W3 K$ s8 b A% [! z7 } u5 H, y
if( pItemElem->IsUndestructable() == TRUE )9 M: L9 m" Z. P
{" I; o1 _8 Y* A$ M# _+ o: d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 o: p8 Q/ M2 `/ x' \ continue;8 y+ x4 [+ t- ]
}
4 _, [( ^" C/ W7 k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ o7 _& U7 p a2 [! v" h
}
W) ]: A5 M/ u) } break;
j( q6 W4 ]- i }) G# \2 |$ H* t% r, _
case 1:0 x) ?4 p1 W( H$ m; ?! {
{4 F7 u4 R' R" s; Z3 u
//整理背包. u" A$ T# v; v
//////////////////////////////////////////////////////////////////////////
* t; t9 L* d% W# p5 r" ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& Y2 ?2 z' M( p& J8 a5 S //////////////////////////////////////////////////////////////////////////
6 ^/ v; l3 P1 M p /////////////////////////////////////////////////////////////////////////// d$ w) u+ I' H# _. g9 G
CInventorySort* pInvSort = new CInventorySort;( O5 r+ Z3 m5 u F6 O& e) d
vector <sItem> vItem;9 P8 j: J9 c" l4 J+ C0 L8 Q0 o
vItem.resize(MAX_INVENTORY);//初始化大小( {5 k; t6 ]2 d# w
//////////////////////////////////////////////////////////////////////////
9 P% j0 f5 a Z$ H% Y& k9 F //填充数据
2 ^8 B. k' H' H for (int i=0;i<MAX_INVENTORY;i++)
$ k5 Y2 _7 f8 S5 J {: @ L9 s8 K7 _- e% \$ ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. j7 m* Z% n2 B7 [1 d- _- k
if (!pItemElem)- ^2 c9 `" _5 S% f8 \
{
/ s# q; C+ D2 V3 q1 F vItem.dwKind2 = 0xffffffff;$ {, ^8 S- n0 R% ]$ B/ m
vItem.dwItemId = 0xffffffff;
6 M, l6 n! k6 A4 c Z vItem.nIndex = i;
7 F) g7 n+ g: x1 q: a& u }else {
4 H% \: f" Z7 E' [ ItemProp* pProp = pItemElem->GetProp();# }" J% N( J& P- r& r6 Y' e! [
vItem.dwKind2 = pProp->dwItemKind2;
2 [6 A/ x* K' C8 G7 K3 K8 b. r$ d vItem.dwItemId = pItemElem->m_dwItemId;
4 w8 E+ E+ }# H' h5 U2 W vItem.nIndex = i;# ~. Q* P5 s6 i
}2 p$ o+ M0 B @0 Q( Y9 }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, [: ]# q* p: e2 K* d( i
}& ? y- \( e, F6 v: o( x
//////////////////////////////////////////////////////////////////////////
. c4 y+ {9 F0 u7 F, T sort(vItem.begin(),vItem.end());//排序4 k) ?: L/ {) l$ q0 R1 o! [
//////////////////////////////////////////////////////////////////////////) m. u# S% z3 o
//交换% O# o/ b0 Q' W! Q; u. d6 q: F
for (size_t i=0;i<vItem.size();i++)+ r% |( A* L% G B1 m& a8 \1 v
{
) m+ T: D' O0 y U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% Z2 c8 h: w( q' A9 b5 ~
pInvSort->Add(vItem.nIndex);) y* |8 J( X. _0 A' Z4 m
}
" z+ w# n6 u( u9 A: Q BYTE nDestPos = 0;8 u! z+ f3 ?+ P
for (int i=0;i<MAX_INVENTORY;i++)& y, s" M0 p1 i/ F4 ~# _9 @
{4 p( F- y0 r# e H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- b) j, t C2 |' a/ [ if (pItemElem)
0 n% a! N" U; ]6 l {; v; I4 t" G$ |& \ D7 y
if (IsUsingItem(pItemElem))# P0 g+ G- b7 O+ I0 D3 Q; G
{: k4 {( H# k6 q/ p6 ?
//这个位置无法放
/ t- I2 } X! ~* J8 d% { nDestPos++;
2 h k3 G0 ]% Q }0 ]9 H8 q& P2 J2 Q* P
}
- r7 _6 l, Y, h+ |& N2 \ BYTE nSrc = pInvSort->GetItemSrc(i);
4 F, k: {, {7 e( Y/ o! E pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) R4 W; b; o6 Z if (pItemElem)9 j5 b3 ?! c5 _7 G$ V# V2 ^
{4 ]* ]5 @% S! ]' G# |( p7 ~
if (IsUsingItem(pItemElem))
( O, u, d% G/ _4 A3 @ {
% y- M" v1 x, n7 O% a( D //这个道具无法移动,跳过: W$ M" @6 q. E9 n# f
continue;) [: H. g e: a5 n. @* H& b2 R( [
}5 Y9 R0 ~5 r5 Y) S: s+ P
}else{
" j! k8 O6 `# u/ n9 R. U6 K; O //空位置 不用动' p0 i/ V: s2 R: m& m
continue;
8 A7 U& y7 z* } ~7 R( E7 | }
" Y( R' C B/ O( w, C( h //////////////////////////////////////////////////////////////////////////
/ A! U6 Z4 C2 r7 O //开始移动3 p( J$ L/ i% T) O4 Y: V
if (nSrc == nDestPos)9 w+ \) C" d m5 {6 V/ W$ t
{( n+ I% O' b$ S& `% A, s! _
//原地不动
' [- Q% u: \3 `& v nDestPos++;7 ]; c5 ]& J. j: c
continue;
4 P' C7 R; y$ \% i( b) ^ }4 H2 R/ A1 e ?8 H3 E6 W1 \3 K
pInvSort->MoveItem(i,nDestPos);" {- V% M/ ]/ p/ I9 v. T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 Z' O, ~% C8 P& W' g Sleep(5);; }+ g$ v- ?9 ~
//Error("移动 - %d->%d",nSrc,nDestPos);
6 q0 r: y' ]% ^/ p nDestPos++;
4 j1 l1 k: _# A! | }* Z! e) m1 w& @ T
//取第一个元素的信息7 Q: y2 w. K0 Z& C
/*
" L, k! _- Y# d X+ B if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 s: G% `% X2 B. ?& D. b- O {
0 D3 L/ ]$ J+ ^% M* q6 Q% {$ ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. I0 d- U* ^- ^7 B9 J6 N$ z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 p$ M; j1 o7 u' Q) B }
+ E, N$ k) G/ ?8 g */
3 m0 H2 @. \- A7 U0 a* K1 ` //////////////////////////////////////////////////////////////////////////8 N, z1 x) x4 k! C+ h) d
break;
6 C. y# p4 Q2 ~6 T, y9 R+ q+ N+ p }3 f# d& F+ f$ \
} , p5 t. H& k% k3 R- L0 S
}; B( }6 x o$ ~* x% Y8 z9 i- F
m_wndMenu.SetVisible(FALSE);
5 |- c; r! T7 {$ d% ?& e; c
6 C2 N; `3 `9 C* X% O: |--------------------------------------------------------------------------------------------------------6 x3 I, o- a6 o4 Z1 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- s7 v- o8 n* q; Y& }/ h
{ a6 k* |* A! [: |
BaseMouseCursor();
: e1 R9 k% b3 X, ~! \" d, K}
7 g) f9 Z4 A' [0 f在其下添加:. ?1 ]/ q& F& N; i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 |+ R S- j* e
{: S* S0 T3 e2 A
m_wndMenu.DeleteAllMenu();
) a3 ^! l& C$ _8 K Dm_wndMenu.CreateMenu(this);
. D7 F8 x, m5 W H; Q) s& w v9 ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 W- Y0 A I, P; Q; [( `
8 f2 z) _) W: B# o. u2 O1 ~* @if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 k) ~6 O. y( B3 p{
" R; n+ w- u6 {) x3 T6 ^ //P以上级别才可以删除所有道具
$ z3 V7 a/ v0 C! }1 R* w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, s+ W" M- p/ ?2 W# [4 b ^}
M- Z' v$ s% }5 z) Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' ~! i3 |1 n2 p1 A1 ^ Z( e# r7 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% N- w7 E( K9 R, i! t4 A
m_wndMenu.SetFocus();% U' O$ x' G0 g7 h1 Y. w8 z7 Y3 }
}
# k) F, x1 P# C( n------------------------------------------------------------------------------------------------------------) D% B8 K$ r( W" a# E7 d( S
*************************% p3 `$ \" q7 G) h; t. @+ i! t
WndField.h文件% j8 ^# j' ?0 i6 [* E8 C m
*************************8 w6 H1 ]1 P7 n9 G6 j. I
搜索:BOOL m_bReport;
. @; H2 C3 Z& q8 ~' P3 f) [% B其后添加:
8 {! r# f4 p& I: R) B2 ~% oCWndMenu m_wndMenu;& _7 ]4 n( P( n0 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( C1 q8 e0 }8 n* q其后添加:7 m2 N3 V' O/ ^, c" P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 f# Z: |' D2 F$ s4 G" H- @" H0 I$ {4 t8 M& K* d% ?
) B% s f) D' ~. e
|
|