|
|
源文件中_Interface文件夹下WndField.cpp文件* J) F+ S+ A$ {1 |6 r$ \7 y( S/ P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) L" s$ a5 Y9 _- D2 x- b- Z$ l9 u2 d7 e( b0 h" b8 l
struct sItem4 ]. @1 Q1 z' t2 j2 i! L8 W
{
( n2 j; f; I6 k0 bDWORD dwId;% i4 x& R' i+ R. N! r& c) W
DWORD dwKind2;
, l8 e& a; a) u- }7 vDWORD dwItemId;7 z5 Z; p$ C: Y
BYTE nIndex;
" p/ |: n! {, PsItem(){
# v" m6 }0 ^& s# h) x1 F: t6 v y dwId = dwKind2 = dwItemId = nIndex = 0;7 \& v" X1 }7 r& x7 H p. @0 ^
}
5 p1 V6 D" @3 R6 Y4 w3 G7 mbool operator < (const sItem p2)& J% t$ f' f1 Z# O( K% Z
{8 a7 p1 l. R, T) q. k6 m9 r; M" g
if (dwKind2 == p2.dwKind2)
, p$ [+ k! U! z K/ j3 Y: @& N: ? {8 K$ X& @* R& | R2 n' c) d
return dwItemId < p2.dwItemId;. L/ }7 L2 v) Q" V$ N
}else{- y) t& Y8 H7 ]8 W
return dwKind2 < p2.dwKind2;& _5 u* a B" |: {3 P
}
0 h6 _* D4 B* q8 e' A}
' B3 s/ @9 u* J8 V1 G# E4 X" `};
' m/ Y$ P3 S4 @& q* Eclass CInventorySort+ P1 ]6 g/ S. U
{4 b; t9 g% a. r. p8 J6 Z9 H" j7 {) Z
public:
- j+ k. k7 k2 d9 X2 g# ^) JCInventorySort()+ a" E+ l9 B$ x. ?
{
9 w [1 E- ^$ \* e m_dwPos = 0;+ m- f' L# _% ^; M
} l; J( P2 f8 \* A" S! w: W
~CInventorySort(){}
/ T& s( N; E7 k9 ^. V4 q$ ?! Jprivate:
X4 ]& M8 `3 n9 K, N" ]8 _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% l1 o5 X9 M x5 P
DWORD m_dwPos;
, [4 t; s) [+ U6 npublic:
! B0 E% g( a) }5 C3 w$ }% Avoid Add(BYTE nIndex)
6 u {* I; p9 @$ J L4 D{9 ^, N; I& `7 H2 p; ~* J- v
if (m_dwPos >= MAX_INVENTORY)1 B% j: Z( [* [+ t# E: l+ J W4 a5 a, Q
{% e# Z* d) w4 p+ l
return; o* J: e- J' O
}6 I: K6 \4 k/ E! j/ G- I
m_Item[m_dwPos].nIndex = nIndex;
# ]) ]6 |) m j m_Item[m_dwPos].dwId = m_dwPos;
6 G" g# V, P, O# i9 n m_dwPos++;/ @& B4 _; x+ J& [
}
$ ^! c9 K" n; Y5 ^' D+ w, }% T5 uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" ?* [- b$ v4 s) X
{4 L8 v3 F! C4 f$ `5 S$ Z
for (int i=0;i<MAX_INVENTORY;i++)( W& y% Y; `4 ^3 V7 E
{
7 E; P( y# O& Z' B5 L4 p if (m_Item.dwId == dwId)0 U/ g+ {7 {: W1 o! x
{
( k/ a. y; [- e+ k6 U return m_Item.nIndex;8 r" X: G1 x0 J) `; O
}
, z+ |- k, j& U/ D7 o( l }
1 w9 p: L& Y' ^# y& q return 255;7 k+ Z2 Q+ B {6 |
}
) s* Z. B9 S! ?! ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% J: Q0 U2 z1 z
{
( z% Z Z, e/ g3 D4 { BYTE nTmp = 0;7 f5 Z9 D( |: \8 U% j- S
bool bDest = false,bSrc = false;
5 Z* f v9 M; m% U X for (int i=0;i<MAX_INVENTORY;i++)
+ g6 O7 _* J1 ^ {
9 d0 O$ D# U4 j# _; H if (dwSrcId == m_Item.dwId)
0 X Q. M$ n' ?, X3 w {* k" r( w' C x' ~3 I6 L8 M `
//id相等 则 改变对应的dest和src& f& U% P/ k( \8 E/ ~; u
nTmp = m_Item.nIndex;
2 K* r u. a& u4 a0 C m_Item.nIndex = dest;
+ H! F1 @% a0 h2 a9 g' y* \ }! r1 d% \2 `: E& B
}
$ o( ]) F7 Z5 k6 E' j0 g2 i0 ~$ x //临时数据保存完毕,交换开始! J/ J) i0 U! V4 ~7 k
for (int i=0;i<MAX_INVENTORY;i++) n; b f( A8 W* @+ h) X
{
# _! l' Q+ i/ A- H; [. k _ if (dest == m_Item.nIndex)2 W4 E7 M3 s& n- M1 w8 }* _+ |
{! L: F4 q/ }# D5 o8 q
//id相等 则 改变对应的dest和src, P4 Y/ q' ^9 ^1 l
m_Item.nIndex = nTmp;+ p% g$ `/ ]. Z4 y+ a) u
}8 ~' J2 r- [# h2 c4 W6 O O0 H5 o
}$ A9 }3 J2 p S
}; k( ]1 G+ n& c3 l+ D
};
5 Z. ~- l! j/ L$ B: z-------------------------------------------------------------------------
5 ]6 S* k4 J8 g# H! L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" e6 t$ @! O5 x9 f) `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ _4 i6 ]6 E" }3 R4 j; t# s" o紧靠其上添加:
) W Y7 b8 J& S4 c) eif( pWndBase == &m_wndMenu )7 M* `- R# t: {! Q O( o: G
{
: v7 H0 l4 e m' R7 _7 P- T switch( nID )4 P5 A1 o9 s9 s% ]3 B C! q3 ?& Y
{
4 t. x8 y7 P1 a# ~7 X% I case 2:
. F$ }1 Q, x: H- n# d {$ \% S, T' k* o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& q+ s1 ^0 H$ `. Y. W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), y4 }/ N" A9 j! Z
{
8 X. f% [3 O3 q, V! e! K/ a break;
* ^& n* e4 P. Y% B+ h }
8 a' h/ O6 q1 u1 c" c# d. @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* n# i4 S4 Q* N9 y4 }( t {8 ]" W! } V) j) y0 k2 |6 I& \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 f: v9 q; h; a! m
if( !pItemElem )
5 n, J5 U/ ?9 K4 k. [: d$ v! W continue;
1 Z$ B1 I2 ?; k2 d if(pItemElem->GetExtra() > 0)- r7 Z8 t# G2 g/ N# z, s
continue;- ~; M A/ w" K0 Q7 A9 Y" V
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 t6 ]3 t% E7 t; {5 E8 S- [. f continue;
! I! i$ g, d6 M3 n d/ W if( g_pPlayer->IsUsing( pItemElem ) )
& E+ K5 y( o" f5 X$ b! X" U continue;" s& Z! F+ f, u
if( pItemElem->IsUndestructable() == TRUE )4 _( z) S. N# X7 _! H: ?3 w
{4 G, B. b3 k8 U8 M* a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" E9 f7 ]/ x( c0 i! e continue;/ b; j; V* s: w" D
}# Z$ z6 V( Z& V0 R2 s
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 X N3 o3 h+ t- ?5 X }
2 T- {) W0 Z6 @8 y0 T9 @2 c break;
. `$ d/ P" |( D }
2 _' F7 I" I7 y+ b: q case 1:
; F+ }6 r7 V) {1 \' o! K, q- h! v {! K- R: J# H( Y i- u5 s i
//整理背包
O* U7 w0 E& P/ b. y //////////////////////////////////////////////////////////////////////////
8 T* b& [4 q# k/ M6 i1 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ d$ W, p7 r3 }4 o
////////////////////////////////////////////////////////////////////////// o) v2 H6 A" r% s0 |/ v j5 }$ G! Y5 u
//////////////////////////////////////////////////////////////////////////( P# b$ @2 p/ ]% h1 z/ J' Y
CInventorySort* pInvSort = new CInventorySort;
9 P6 v& }8 s v+ P3 j vector <sItem> vItem;( w, v; k- q* |( z: z% Z V
vItem.resize(MAX_INVENTORY);//初始化大小
. {! K n" l/ i9 r //////////////////////////////////////////////////////////////////////////
( K3 x% E: H( l3 z5 [8 o //填充数据
0 L2 M4 v4 M* r# e' N& W for (int i=0;i<MAX_INVENTORY;i++)
9 _4 n: d3 Q7 f9 C4 c: F2 P {
7 I% p- u- b- i) x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i); B% r: V( y+ l4 b5 f, |7 b P/ J
if (!pItemElem)- t5 U( E( G+ Z* d4 A* I
{
. f' \- ~( N+ u% i# i E! s vItem.dwKind2 = 0xffffffff;# G8 ?0 |8 H( c6 X) Y$ u/ {
vItem.dwItemId = 0xffffffff;, Z" o! \8 p6 H. L& X; N- X. t$ \
vItem.nIndex = i;; x4 R5 D3 w" @- h$ S, D/ e# Z
}else {
0 J0 a2 _" F8 O0 ?: K3 s ItemProp* pProp = pItemElem->GetProp();8 u$ x+ ?5 |% j% g# Z
vItem.dwKind2 = pProp->dwItemKind2;
3 s- ~( ?& i8 Y- X2 K vItem.dwItemId = pItemElem->m_dwItemId;; a. F J6 r+ ~$ e' E9 F3 J& j) k
vItem.nIndex = i;: |) q* }- s5 T9 E* Z! D& ?
}
$ v: p2 |8 h* u7 `) b9 j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 U& ]- x# j9 M% g7 Q6 r
}
- B' q: T* [( n ////////////////////////////////////////////////////////////////////////// p% G1 i3 p$ l) f: G$ f+ G7 z: z4 I
sort(vItem.begin(),vItem.end());//排序
- t k4 H! z: q* n- @5 [( w /////////////////////////////////////////////////////////////////////////// }6 n' R% R* v- w4 o- y# y" ~& t8 V
//交换4 G) n) K: Q1 ~( X+ {9 E ^
for (size_t i=0;i<vItem.size();i++)5 \& T' S+ M. r6 V
{/ P O" P" ?7 Y% o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) ^0 h A. v3 x
pInvSort->Add(vItem.nIndex);) \% B O1 O6 X8 P
}
& j' n( ^! y) W' K' H BYTE nDestPos = 0;
, {" _2 C- u6 Q) v0 F for (int i=0;i<MAX_INVENTORY;i++)3 C* i! M9 z7 a. G* M
{1 Z( v, f# I$ V9 L8 A2 u9 n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# X+ J5 j9 g, B, W' B
if (pItemElem)
' K K3 w$ v/ P, S {" Y+ }# ^) m$ b7 w; N" b
if (IsUsingItem(pItemElem))- K, i: g4 i% W+ L- T
{
6 P* P0 P* I& ]) F x$ o' o F P //这个位置无法放
- [: O F5 b. N$ S: ^3 ^. J nDestPos++;
9 L' @# u) v+ P+ ~- c/ k }
- Q7 P( B7 @" c4 ]$ L7 S0 ?! z }
! T' w# s" Y7 y6 E4 M2 n' J BYTE nSrc = pInvSort->GetItemSrc(i);" k% k$ S, u3 a+ x+ U2 m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" Q" u) X: o/ z
if (pItemElem)8 d8 x" d: Z& `( f
{0 O& H8 f3 n5 s" Q' W2 B
if (IsUsingItem(pItemElem))
+ g2 I+ {+ H- T$ ^2 W {+ X- m" r1 I" |5 x1 P4 L! }
//这个道具无法移动,跳过5 _/ E% [$ J% r, V: H( Z% f% M
continue;
$ |" ~& C% I# z3 P+ m1 ] }6 }+ w! x2 A3 a+ o% W
}else{
- g4 o. ~1 j7 g //空位置 不用动
6 t; t* T: f2 v# ?. D# r continue;
% _9 k% X' e& o8 W3 \( V }
8 R4 N. T' @; s //////////////////////////////////////////////////////////////////////////
, \" ~) P! L2 e# m+ `; M# e //开始移动
" y, p3 H6 }: D9 ]3 p; R if (nSrc == nDestPos)2 z; d) y" Y; K/ I8 ]! t8 ?
{
( @, T/ Z2 ~% v7 V# i //原地不动+ S. Q" }/ F7 s' v
nDestPos++;% u$ R1 ^% s) C/ X8 C1 t
continue;& i1 h$ R& R6 ]# S3 M; T
}
) f( l' }7 |6 I* o/ ~8 `5 k8 e pInvSort->MoveItem(i,nDestPos);/ l! ]0 _. R ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. Z2 h% M: w* Y o# D/ {/ v Sleep(5);
% U+ j% k/ G- p, Y% ]! m8 P. L //Error("移动 - %d->%d",nSrc,nDestPos);
- r& Y1 I0 G: ^, A6 j nDestPos++;6 s5 Z! d1 h. q# x( y, {
}5 {2 k R/ c L% W# a" F8 k- h
//取第一个元素的信息
6 ~7 [0 m3 J3 d8 g/ v" Y% _- ~6 o8 z /*4 u4 h8 j$ E9 [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% D% v6 ~: `0 h+ U7 N {
; G2 B+ j( R1 k1 O( D( | Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: x% {5 Q \+ x& F% s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( |. [: E# |& L. P4 i2 y& I) Y2 Z/ e
}" j# a7 `+ p( E4 z9 i. h
*/# h& f! c$ S8 Q( `+ M
//////////////////////////////////////////////////////////////////////////
/ E' s6 J x- [0 T break;
. Z5 t2 ]% [0 x# b5 T% d }/ J" I4 j' D8 O, J# \4 Q5 y2 B+ Y9 H
} : a: x+ Z# O+ z3 W; \" B7 h6 k
}- g/ O n3 x2 D
m_wndMenu.SetVisible(FALSE);
0 B" Q9 q+ p! |
6 s! [) Q% p) |; O4 `% ?9 i6 j8 \--------------------------------------------------------------------------------------------------------0 H0 W0 Q4 `+ _: j2 [4 s7 z( v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 w4 u7 L3 {5 u9 J! p0 G' }- l% }
{+ q" h2 h& O: ?2 S) E( p4 Q
BaseMouseCursor();
8 `/ L- @* l% G' `6 w4 ~# s$ D}' Y$ N( t* }+ \2 i4 _. C
在其下添加:/ v `9 @9 ]. `$ b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): W! y' w8 _7 ]$ s$ G/ |
{( P8 W( e3 ?3 a7 u, V
m_wndMenu.DeleteAllMenu();
# C% @" _) \1 e8 dm_wndMenu.CreateMenu(this);/ b3 N# D* s4 n8 p0 n0 e' l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
s3 f, Q1 ]/ g4 u2 Q
3 [0 A7 e$ K5 ^if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' A. m" x3 R, N5 l% ]$ C7 N
{
- c$ H7 p. M7 O4 f2 Q% n" f //P以上级别才可以删除所有道具
7 X; {8 d7 w* A2 `% U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# P6 J+ i8 F! a$ P- y# M}8 f7 S) e- X% G' `1 d- q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 ^3 p1 o% d& `, ^! j3 @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( j7 i5 \/ }6 G; l! T, J: sm_wndMenu.SetFocus();" ^4 ]9 G. B8 `& Z; W
}
5 i3 y: M- L9 C% _0 T6 `: O {6 g------------------------------------------------------------------------------------------------------------
0 Y# k0 }2 D, |*************************( B- q. Q: y& @9 o$ `) @
WndField.h文件) k! @6 p: X& m# N0 E H! u
*************************# X [9 x% R- t5 l
搜索:BOOL m_bReport;
) i4 L1 Y3 E5 D/ v* W3 P/ M; y其后添加:2 P" v9 b w/ [/ O) R* q
CWndMenu m_wndMenu;( @- Y% q( U8 `$ X$ L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; e% ^9 g% d6 _% H* H+ \其后添加:
, m R7 Z& e( }# @% {: p X; ?virtual void OnRButtonUp(UINT nFlags, CPoint point);
. G% h/ y8 B8 B5 k
/ Z" S0 z) x k- e6 l' E! L& _: Y; C! Z* B4 g0 c
|
|