|
|
源文件中_Interface文件夹下WndField.cpp文件; C9 k* R# T& A" P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% n! N3 J5 v" y0 Y( i. `& | o& t$ K. D4 i5 ~# N
struct sItem
0 {. }6 O6 P7 I/ ?{
* f8 c/ l" w+ d0 fDWORD dwId;* ~% B( g- k6 `
DWORD dwKind2;5 m1 r/ X Z8 o, S
DWORD dwItemId;
, v8 g4 K' A' R4 rBYTE nIndex;9 N# _, ?; N/ `* ]+ `
sItem(){
) x" X, `$ P8 G* B5 n dwId = dwKind2 = dwItemId = nIndex = 0;
- b% N7 ^5 m! h: w q6 ~3 p* G}' k4 M$ u& e6 j8 d# ~. W, z/ g
bool operator < (const sItem p2)
) M6 S$ ~3 q; O) J{
& n9 u; t: n2 n* v+ e Y if (dwKind2 == p2.dwKind2)* q7 s% ]( E# B" D0 o+ |$ J
{6 P5 H" L5 [% z' y; {0 k
return dwItemId < p2.dwItemId;/ | _6 b+ s o1 L* g
}else{% D! B6 ?. c3 C: |8 f6 T) @* N& Y2 t
return dwKind2 < p2.dwKind2;1 h" \6 I- W P
}0 E. v/ B9 v2 M' A
}) G+ K- ~2 M2 i% e8 }" P
};: m7 O3 R7 m# I) ]9 G Z
class CInventorySort5 o$ E# ^* Q, n" u1 Z
{
3 e- [" u+ Z7 _public:- E- q. ?. h& C3 _5 U* t r+ y
CInventorySort()! Q0 C2 y2 s8 j: Q1 u
{
' e' z1 d3 N# F J8 X; s w m_dwPos = 0;
R4 x- ]6 ~# C! N* V6 `3 d}
3 }/ p4 L. i$ a5 L9 a~CInventorySort(){}
3 Z& w1 f1 N K" @9 Hprivate:6 r) m* \# w9 N7 D; N3 A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ K. Y, m8 G( w' d- g* E* mDWORD m_dwPos;
# ^2 J3 H* A$ {4 j( K& n1 H; Vpublic:) c8 U. \. j1 \
void Add(BYTE nIndex). U0 @4 O; Q4 }/ E% e
{% R; @% J; C" @. L% F' s
if (m_dwPos >= MAX_INVENTORY)
9 G9 i5 A) w- i {5 f/ g4 ?4 }& u
return;
+ X7 F1 `# ~/ q+ P! t9 ] } W3 [+ [8 u9 K% P
m_Item[m_dwPos].nIndex = nIndex;% G( d0 j! Z! ]/ d
m_Item[m_dwPos].dwId = m_dwPos;
8 }* ^$ _* }5 V+ J2 \ m_dwPos++;: a2 R' `* e6 y
}
- b. Q/ ~7 r! D7 U! K4 D5 HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* ~% D% C% C: u/ I' \{# L# c. t; F$ M6 b# u
for (int i=0;i<MAX_INVENTORY;i++)
( H; x* |0 q( s( E/ ~, K3 a* r {
' m6 ~+ C z3 h: j! ^& L0 c. p if (m_Item.dwId == dwId)4 X4 ~) F1 |" P+ S" S+ f
{
# k" o! w3 B, S; p return m_Item.nIndex;8 V1 p" J( q3 C" |- u6 B, l% h6 l
}
; j6 l+ ?7 X2 G1 L } y' |) a) P' r6 i6 _5 \
return 255;
% B1 E- p/ i" A6 T0 {2 {- O% a}
1 L7 E' m0 d2 M- N- P- g+ V5 ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 }. E8 c* [2 q0 k
{- G( w! L9 J: l; z6 V# v- b1 S
BYTE nTmp = 0; \) Y5 ~# G' K$ v( }: @8 y) R! [
bool bDest = false,bSrc = false;* }. ^3 E; F" @7 z- A8 R! X% l
for (int i=0;i<MAX_INVENTORY;i++)
0 U6 m/ c4 [6 Q$ p A5 J {3 R k9 ?( @" T. f9 X9 b
if (dwSrcId == m_Item.dwId)' z+ e9 B7 n b! p- s1 x6 k# {: b. l0 U
{
: W/ H% G P; X* r' l" u //id相等 则 改变对应的dest和src
" ?! Z1 o' w% h, W0 ~, ` nTmp = m_Item.nIndex;7 n6 M, @1 i; j0 [4 X
m_Item.nIndex = dest;
$ ]0 g, j1 `9 `9 U6 s3 V }3 {1 U4 X |, {6 w# q/ j" u2 s
}
0 ~4 E5 z0 m! F/ R8 J2 N //临时数据保存完毕,交换开始% i1 w2 v% F8 Q/ L* E$ V& r
for (int i=0;i<MAX_INVENTORY;i++)( s3 t) z1 \( `$ W9 ~& `
{
z: {+ v& Y+ T( h" h( B if (dest == m_Item.nIndex)
! k. h: ~8 `+ k {! S5 Z" f. n5 U7 t% e& ^; C* W- i
//id相等 则 改变对应的dest和src
( J8 |; W* ^4 s m_Item.nIndex = nTmp;! e; v; D n) }2 Y" g7 c
}
( j- e2 h7 N1 [# v6 k* c, U }- D( }) M V; ?; V# i+ T. z" ~
} T; L' }$ [+ z# O# P* g# _
};
8 X/ B: c( {" @- s' u8 T r1 P* @-------------------------------------------------------------------------
/ j' O) T5 }* E6 P# d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 F( b" W9 f6 b1 u$ b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 e8 k" N) Q8 f2 R
紧靠其上添加:
' z. G; n$ x* o- R4 k4 T* \if( pWndBase == &m_wndMenu )
7 R1 z$ t8 v; x" L{
4 u) X5 L/ j4 j0 F/ L switch( nID )
6 u/ h K& b" W1 D* v4 ]9 _# W4 j! q {$ p, l8 D- T- l& k# u ]
case 2:* ?$ w' `8 K7 Z& E* X) p; _
{5 Q" [" \# o+ [: m$ L: G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! |! c8 e( x7 N" @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& w2 m5 c: y" }, Z3 t* o2 |
{
. J% y* }, K- M( r& D2 P8 v' C break;
- r" r( t% j8 o+ X- C/ A- _ }: n' n6 ?, D. Z: y- V( |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) }$ |: |1 [1 ~' u; O3 F; C; u
{1 k1 t+ F. |: R. H0 d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& e+ [- x% _( N6 @
if( !pItemElem )
. Z! a( E& U; Y) W continue;
. ^; F2 E3 q7 h+ v/ w if(pItemElem->GetExtra() > 0), V. i, R6 ~5 p) A# X+ E
continue;
* U% h2 ]9 L. C" k* E( d3 ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 L, f) w* e6 ?8 I. S
continue;
1 d( t5 p$ ^, |) [, P1 w if( g_pPlayer->IsUsing( pItemElem ) )" X" S4 h+ }7 f% {
continue;, x5 v9 j7 @& `4 U7 T" e5 b
if( pItemElem->IsUndestructable() == TRUE ): }% E+ O$ s6 S1 ^3 F
{
1 [6 T- r/ @; P$ P# y5 G% Z" u: c9 U7 q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 P) {+ G' G) F continue;
% K' K9 T! |: b1 X: F* d }
& f* V/ J# X: m8 y& ~5 [' [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: x D6 \8 n! I. u. S }
( M/ }7 S* ^; ?% Q0 }5 E; K+ d; P break;; j, u) j, u8 i3 P6 l5 q
}. ^2 ^% N) s j
case 1:
5 Z, D# M* y5 U) W2 k# m2 c# j {- l* @& [& W7 O4 e7 l0 Z3 B9 O" C
//整理背包% E) X' }" h' r; }; B1 w. C
//////////////////////////////////////////////////////////////////////////9 M$ [ |6 z( x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 Y/ Y& k5 r P( N //////////////////////////////////////////////////////////////////////////
) h6 S5 p" G* L( \! B: U# T+ R; r //////////////////////////////////////////////////////////////////////////$ z* C$ J. |5 e$ p: E
CInventorySort* pInvSort = new CInventorySort;7 a6 x/ o# w3 Z, t8 h. q( b
vector <sItem> vItem;7 l l7 N! l6 u1 H
vItem.resize(MAX_INVENTORY);//初始化大小9 W5 s$ z# c7 n( f$ K8 j
//////////////////////////////////////////////////////////////////////////, W2 \7 Q+ D$ z
//填充数据
* ?' m6 h" X7 h( m5 t for (int i=0;i<MAX_INVENTORY;i++)' Z5 u; }5 _( H
{. I- u; S& d1 ?0 u0 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) q7 G- n) Q* J( m5 y if (!pItemElem)4 g5 M4 Q: U. o) r/ W
{% F2 S: H% d( J: y& V. ^8 V2 Z; v
vItem.dwKind2 = 0xffffffff;
* C$ w+ z* W$ F+ D vItem.dwItemId = 0xffffffff;4 q, g/ a) u5 I# s$ Q' @9 j
vItem.nIndex = i;
- Z) Q; O* r4 w, x% D& n1 |, E }else {; C) l0 Z# U8 r6 u$ _ m( w
ItemProp* pProp = pItemElem->GetProp();, q' `2 U9 S1 g6 y- B1 R5 _
vItem.dwKind2 = pProp->dwItemKind2;+ N! l5 {1 h( a: V2 l2 k7 @: }
vItem.dwItemId = pItemElem->m_dwItemId;
! i0 t" @9 [* O, p vItem.nIndex = i;( N4 p; N; ~4 W. t7 M
}
5 D, U; u2 j" h' A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 C9 c7 j/ w, m, W: s4 ~" O1 T }2 X. ^& H' t; S2 A$ j L
//////////////////////////////////////////////////////////////////////////
' C( {; t# K# k6 Q. k) A* ^/ z sort(vItem.begin(),vItem.end());//排序
5 D$ {1 D( i, I% N /////////////////////////////////////////////////////////////////////////// v" _& R: {$ L1 q
//交换
( h; m& j& h1 L4 H8 W) \; i1 W for (size_t i=0;i<vItem.size();i++)- ]( C" n! a, g9 z; c4 a: ^9 k$ V$ @
{
9 F+ q" W0 P1 j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, b8 z d$ ?+ U pInvSort->Add(vItem.nIndex);% v5 r) Y) J7 N8 O
}
$ J, T5 T" h- x3 B W0 X BYTE nDestPos = 0;
9 Q" ]3 u+ X- ?% `* ?+ z for (int i=0;i<MAX_INVENTORY;i++)
4 v) S$ Q) L- x' \% { {1 `; Z+ J4 F3 b- l0 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, L# i! u8 T# B/ h+ ^ if (pItemElem)
, Q* }$ E/ N' h- {7 L {7 i# ~4 k0 n5 a
if (IsUsingItem(pItemElem))
5 M: I7 H o8 G: u% j% { {' |, d( n6 I/ b3 p1 U3 o
//这个位置无法放" i& l* a6 Z& I+ z+ S, r
nDestPos++;, f: {3 R' r5 N1 H
}
6 u0 K+ w- a/ ]& `' `3 p5 a }& z8 \9 P3 `( m/ y
BYTE nSrc = pInvSort->GetItemSrc(i);, N' }8 p, H9 v& `5 x2 M- Q8 w* R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: P. a' A) W) ?+ ` if (pItemElem)
: N3 \* u2 [; Y1 |' ^ {
9 R; y# Z5 |0 D- T Q if (IsUsingItem(pItemElem))
- a5 Q# G. a2 P {
6 l) u: D' Q( Y. X* ^6 F //这个道具无法移动,跳过' e9 m% Y1 r: c% K5 [% e; Q) c
continue;
# |- r; G2 v; M9 [/ j5 \. I# s }0 P3 m* L" T6 j! A) P# z) ~
}else{
2 _5 A* C, ]+ ^2 _9 \) N, @ //空位置 不用动; y: ]+ C. ]) c2 J! \& p- z
continue;
: `/ C" I' ]! L }" s2 b- \' R$ Z4 D9 ]# n: j
//////////////////////////////////////////////////////////////////////////$ x0 E) B F o6 K6 T# L
//开始移动2 ?! x6 k1 a5 B, g* T) ^
if (nSrc == nDestPos)
9 Z$ H: w4 d; C! T8 w$ Z' p {
- W! c( ~9 Z) {! g# \, R, A& Y! Y* J //原地不动: n) u7 ~; V+ p9 l- S( W
nDestPos++;# f8 n$ V6 L+ O) C2 v+ z4 q
continue;6 a, T4 F7 _7 d6 ?# ^; B! B- G. S" @
}
& E+ X6 Y+ B: y+ q8 a' T! |, z( V pInvSort->MoveItem(i,nDestPos);& P4 p. W) a3 y' ]8 e8 c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 M/ u, q+ s# s& r- I1 `0 P Sleep(5);8 o' T* h. t( D& C
//Error("移动 - %d->%d",nSrc,nDestPos);
' ^) |" E" h3 H8 Q& V( Q nDestPos++;. I2 ?* @4 d" z2 T! @8 ]* _
}
0 p% b/ _ I. O //取第一个元素的信息
2 K/ }* M3 T$ }+ {# y* } /*
, C$ V, R! d* @- w7 g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 A1 k8 ?& K. x2 Q; A
{
% ?( D, e! Y3 P/ h8 H' c/ _0 \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: S5 H7 I$ g7 f) ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; d8 A1 ~+ V* N1 |2 c8 ? }
5 g$ S H+ @- w* J* y/ v */; N. K4 q& a ` [0 `+ Y1 u% T$ Q
//////////////////////////////////////////////////////////////////////////. z) D1 f4 h% U% k% M
break;
+ K6 X# |9 d5 f- E# Q% X5 x* O }" H2 N- N$ m% [
}
4 p9 N$ U& V* R, m}
& s: v$ q/ r/ w4 T) sm_wndMenu.SetVisible(FALSE);
, F8 I, e" p ~0 a9 s/ J. A5 Q% u2 ]1 i
-------------------------------------------------------------------------------------------------------- f3 X, g" u J
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 X$ n" v) T; q% `; |* Z
{ ^/ z; Q, u P( h3 n6 P& H
BaseMouseCursor();
6 r) O+ R8 W$ O& D4 R; U}/ d* M* M" a; U: l9 P
在其下添加:8 a( K) a$ e) a8 B) }; |. `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 \+ a2 V6 K# v8 l9 c{
+ E( O, I2 p' u, `& tm_wndMenu.DeleteAllMenu();& a8 N+ U4 }1 ~4 v% j
m_wndMenu.CreateMenu(this);
% ]$ [( [# x. t7 } x& B, n/ cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' \2 k+ B8 k* |0 H
: V2 \7 e I$ w K s& Z$ \$ C* L7 Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), L0 x9 w: \4 \+ }
{
2 V9 J' v. t; W, W- v; u //P以上级别才可以删除所有道具
d. [ H }- L4 w7 R/ _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ]* l, M T7 W v) r
}
1 K+ z/ M! e8 h5 tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! D" d; O7 H( }/ Fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ R4 {5 I6 t J. Y' u( F) Z3 P$ b
m_wndMenu.SetFocus();3 x% p( t# d0 o d C' p
}
; V+ v' {/ K8 N------------------------------------------------------------------------------------------------------------
# L1 Q1 K6 l* M( N: q9 R*************************& z. ^' ]8 |5 g5 ^; E1 o
WndField.h文件! s; q7 q+ ~" R3 V) D: h
*************************0 m3 e3 z1 P5 t0 p5 Q$ e4 ?: {
搜索:BOOL m_bReport;9 A* u6 Q4 I" X; }) M$ Y$ M
其后添加:
0 o) e; Q. [! n/ [# G% D0 Z2 PCWndMenu m_wndMenu;8 `! V4 u) Q9 C5 ^1 @5 M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- a# e/ }! w: n2 o. h* t9 V其后添加:' o5 R3 I8 g$ z* B' e$ S
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' S" c* C5 Z5 x) h/ m Y) u$ o( ]3 u9 }, N$ B5 h4 n- S7 z
+ p( _) I ~+ D8 p1 ^% q! X |
|