|
|
源文件中_Interface文件夹下WndField.cpp文件
* j: g( I% A& }. D2 s$ L6 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ M: \4 C1 m1 A& j, Q
# T' V* c2 d; i/ U$ O4 H
struct sItem
2 d, A7 D# [( u{( ]) U% ~/ Z% u5 x
DWORD dwId;
3 u7 R- A C- @' @0 y7 cDWORD dwKind2;2 I& i6 s; F5 G: M7 z, H" [
DWORD dwItemId;) E7 d" _( i. @1 k- U2 P& h
BYTE nIndex;
) F! }2 w# x! k! R R% ksItem(){
' H* B0 b) Z& u4 Y! r4 o; z. T! s dwId = dwKind2 = dwItemId = nIndex = 0;. v W6 l% }: _( `3 o
}
) v6 ], f' L6 h/ bbool operator < (const sItem p2)! C$ a- w$ o$ J0 M% E
{
( ?" z0 B) Y8 Q$ j& w6 ] \/ S if (dwKind2 == p2.dwKind2)
, `/ n7 F) }7 l; c) m' ` {
) A" Q* e9 J- S, v5 C2 l- s return dwItemId < p2.dwItemId;! o& C/ o+ q% E
}else{5 U- Q# A' y& X, c1 y
return dwKind2 < p2.dwKind2;% j, f5 p! G8 ~6 S( o4 d
}# }! `& |- H5 u1 v. e
}, P7 S/ l9 r: f! e
};* F/ A7 Y1 f5 P- q/ N# d: O
class CInventorySort: R7 e& ]2 |0 [& G
{7 M! L; _# A4 J, _. U& ?4 W
public:6 I; S0 Y9 ]" P
CInventorySort()
: `8 Y7 e) g8 H2 `% t0 S x{/ @+ m8 K3 A0 Q$ w, a4 J. @* M
m_dwPos = 0;
+ W$ X! r H" T9 V5 q! b1 ]1 m}
8 D3 k* `0 ?, p% \~CInventorySort(){}
7 H ^6 w1 V/ C" T. o9 K9 f0 Uprivate:8 g6 h; X! T% a, J" S1 j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% D, E( U, ?$ l% q
DWORD m_dwPos;
! Q0 |/ n, X; n1 Z' x {public:" q) A: Y' ?9 e/ f% J6 Y- b9 @
void Add(BYTE nIndex)+ D* m. G% m! E! h1 s. T
{
/ J* C4 Y7 [9 s0 S if (m_dwPos >= MAX_INVENTORY)* _3 Q0 q, ?* n/ R2 O
{- o! W4 e) x. c j) [
return;
5 Q. q' B- i1 B }9 n; N3 }! _# {5 i
m_Item[m_dwPos].nIndex = nIndex;* {- K" a. I3 e- a1 g- L. G
m_Item[m_dwPos].dwId = m_dwPos;2 w" e: ?( }8 C9 v; x/ x1 M0 a2 `
m_dwPos++;
4 u4 y) T/ y a6 R; ?}
: _9 Z% P5 P' a1 z4 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ R9 r q" e1 ~+ y1 _8 j7 c/ d6 R{8 e5 v# A/ ]8 G1 C, S' }. }$ G
for (int i=0;i<MAX_INVENTORY;i++), L1 e/ b8 }3 H9 @+ L& R0 E. d
{) j; C% v( S; T- g6 c/ j
if (m_Item.dwId == dwId)
1 C9 u1 S& G, ~* [8 E- W8 V {
, k* r) q9 o7 e# ~7 s7 c return m_Item.nIndex;
+ q9 P- r* e5 R1 S6 ^6 m$ d }1 C/ e8 d1 K# h+ j# y
}
" Y; M; W2 {& S' S6 N return 255;
% P" K2 }2 j; L9 n" T1 K* q}
' t6 u* x" k9 _' l& A$ nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, m4 c; V. C4 _' l- t; z& B+ f{# s) _' t1 d; r: f7 ^" }" Q
BYTE nTmp = 0;
. X( x; k* P9 Z, J4 r' ?) @$ c bool bDest = false,bSrc = false;6 h! }% ]5 d- I+ i* X
for (int i=0;i<MAX_INVENTORY;i++)
7 V: e I8 c$ A {
c" V4 O+ T6 b; Y if (dwSrcId == m_Item.dwId)
( _! ^1 W4 l2 V& Q/ ? {& P# z* O# T. V/ |4 p: H3 s
//id相等 则 改变对应的dest和src
# T& A3 v) E; A nTmp = m_Item.nIndex;
. R$ r: G: i8 X V$ o1 l' c m_Item.nIndex = dest;6 w% _0 y0 h8 b
}
0 y5 \& N3 j8 n) ?+ y2 r }
% f6 m7 ?7 ?$ F; K1 _% \6 F8 \ //临时数据保存完毕,交换开始+ O a2 M2 }3 u1 m1 W5 A: T# N
for (int i=0;i<MAX_INVENTORY;i++)
* R7 K3 u5 @* I9 M/ _' b' w+ X {2 c: c8 U q# r" Q" V
if (dest == m_Item.nIndex)
4 D" H* J) ~5 F {
+ U) c$ {) c! @6 X //id相等 则 改变对应的dest和src$ F; @7 z u/ w8 E9 R
m_Item.nIndex = nTmp;
+ C% `, [3 x3 Y$ u+ H# f, Q# m }
' ^8 v5 T' k: e }
' O8 r- N0 Z$ v/ f( B}, V0 i3 l+ F5 i
};7 j1 p2 |, s, m4 U8 s/ Z
-------------------------------------------------------------------------
. t1 }' ~/ f4 j. y3 B9 Z* K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( l5 b/ d# G" m' U/ v4 e/ A0 q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: m% ?& L6 o7 x- H. m/ q8 {$ Q6 Q
紧靠其上添加:1 l( s( ?. N! w
if( pWndBase == &m_wndMenu )
. I+ d& k0 s1 U{4 y$ {/ a; T; @
switch( nID )
; x' `# H @) L+ ?+ W {
: k6 h9 _1 k F% D3 {% G case 2:
' `/ G9 A( x, }; K- S) L$ r {/ q; I, p! E X: Y* \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 u7 z5 M: s: A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 `" R" c2 O, n: y9 i { ^. h8 D1 K! i6 t% G V
break;1 S+ o n! H- V$ g
}5 X+ n: G% E, w* Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# ? e# N+ ^, }: |; J: ^0 b
{! V% N8 x6 D' L5 D9 Q+ d$ I4 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 f4 i9 R6 X7 p4 o1 [9 V( g8 \- k" r
if( !pItemElem ); t; ]" I- Q2 p
continue;
) R- |7 e; w' X* u0 J( J if(pItemElem->GetExtra() > 0)0 W T+ n6 T# p( ~% D! v
continue;
: C+ W" f2 g* }" O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* N* }2 B- c% G+ \* t* b# O6 N continue;7 [- {( ^& U$ g$ g2 S; s3 `
if( g_pPlayer->IsUsing( pItemElem ) )
5 F+ |* U2 M' p# E* K continue;
5 f# R6 E' _$ S* p/ k* J& w if( pItemElem->IsUndestructable() == TRUE )
6 G$ E2 T, [) Z7 \9 d {0 ?0 i1 G% }4 ]5 n) W* Z, t2 T: C. d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& q* R M( X% o4 \# U continue;6 `8 g0 o) e" z( v5 D
}
! r/ E+ F5 r% z P8 R g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. T; f7 ~4 y, y
}
) P; u0 ]8 U! d break;
& I; k2 E" P, ? H! A- j }- c/ ~$ W* R8 |& E
case 1:
% j& w* E. c) v, B( ?" n2 O I# ?# h% L {
; Y" M4 l+ @& c+ z+ O //整理背包
- [; I9 K3 K- Q4 S* v' T' f# B( V //////////////////////////////////////////////////////////////////////////
, N' z) R1 [# a$ k2 ?( J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; K# E/ ^) \2 _. ?4 [) q
//////////////////////////////////////////////////////////////////////////
. x* C" z+ u4 T$ @) ?, s l6 k //////////////////////////////////////////////////////////////////////////6 g) K( Q( {7 j' X* ]; f* n. l. i$ y
CInventorySort* pInvSort = new CInventorySort;5 F9 q6 @" ~, B8 b9 q2 g6 H1 ]' o
vector <sItem> vItem;
$ x( H, K; j: C2 N! M$ c9 Z vItem.resize(MAX_INVENTORY);//初始化大小) X% \5 J2 e, G3 |' B
//////////////////////////////////////////////////////////////////////////( @7 V! Q# W' r( L3 P
//填充数据
t$ @+ E" x& K/ R, Z! s+ a8 R for (int i=0;i<MAX_INVENTORY;i++)
+ W7 Q& s6 O7 d. L7 L3 [! G5 A {' j" D. T4 f8 }; D+ x% Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 l5 q0 J' {- G' G h if (!pItemElem)
: y% }; F( i) x { c3 D `2 ]1 m/ a
vItem.dwKind2 = 0xffffffff;' b3 ?; N& `% z6 S( y: a3 a
vItem.dwItemId = 0xffffffff;
* ]3 n2 b0 l" o" l/ g4 Y+ j$ Y7 P vItem.nIndex = i;
* w* [" R w* H& f$ f; } h' _ }else {, `* c; R3 a# Q' i- f5 b
ItemProp* pProp = pItemElem->GetProp();3 Z. a) z9 g* c9 P) D1 R) t, D3 @
vItem.dwKind2 = pProp->dwItemKind2;
4 N9 Z( j9 o8 y3 l3 p$ u; j- C vItem.dwItemId = pItemElem->m_dwItemId;3 O% z" ?! z9 m8 L6 @) [
vItem.nIndex = i;
$ Y3 n" Z8 t$ P% t! ^9 S3 v; s }
. x' l0 I& i+ q" U/ @% S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% g" G, B( O0 y; ~/ E }& U! F1 N/ F; j
//////////////////////////////////////////////////////////////////////////
5 Y* j; b1 @$ C9 e1 b sort(vItem.begin(),vItem.end());//排序
; S% z" m) y6 M( c8 s //////////////////////////////////////////////////////////////////////////, b. e9 b. V; N
//交换
" q! S1 y8 T8 k6 k for (size_t i=0;i<vItem.size();i++)
9 b. H4 u: A/ z+ E# b/ n; r {
1 Z4 ?; c9 x5 A# y8 [2 e( g5 F& ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 s4 y" R* a9 p, D8 ]4 _/ ~
pInvSort->Add(vItem.nIndex);) m! G, d/ ?" w7 }4 D/ A. j
}: w$ [( j4 F) g! K
BYTE nDestPos = 0;
% D! \1 Z. A) s `0 u for (int i=0;i<MAX_INVENTORY;i++)
, F3 `4 t$ m( {- Q. t {
' ^) i, k$ y/ F6 N2 r6 D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 Y: j3 f: V+ M- d2 q! S. B7 ?
if (pItemElem)
/ B$ p; c X% P! F+ k {
* L$ D4 @2 p& r& I if (IsUsingItem(pItemElem))7 Z+ K" _- `" n7 f. v" }
{1 o" S+ U& y$ N) |8 R t1 u& H
//这个位置无法放' |1 N" D y# q) m: {) v
nDestPos++;& s( N0 b/ f2 K& L! N* U
}
# Q- N' j" E. }0 \; _4 B, m5 c }
# X& q; W t5 _ BYTE nSrc = pInvSort->GetItemSrc(i);
* _0 W: T: \- b" m/ P0 V: i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* P5 ]. H& h# ]" d if (pItemElem)/ j' ?/ W8 t3 g' C* K" W' ~. @
{8 Z1 |6 s: Z9 Q) s$ z1 x3 J0 a+ b" w& N
if (IsUsingItem(pItemElem))
A6 ]) n0 @" o0 @+ ?1 q7 f {
7 U7 b2 C" T' p6 B7 t! x( Q$ o //这个道具无法移动,跳过
8 X: M( y/ a6 ~7 J" l b continue;
7 z3 f7 b- Q8 T+ p6 S' {2 b# j }
3 G# j" C- P0 l9 _ }else{
. {' v' B2 F8 \5 e! g7 }. { ` //空位置 不用动3 n+ p: u* p! j* z9 \+ y1 G+ F
continue;& P! [8 J* C9 j3 k$ S, x. ?5 v
}
6 G; f! T, b2 L4 k" c# n% P //////////////////////////////////////////////////////////////////////////
% C& P; X% ~- \ E, ]3 T8 b //开始移动
2 l9 u/ Y( _" Z8 k0 D6 l; k if (nSrc == nDestPos) S4 z+ Z0 O6 b* E
{
/ p+ v9 F! T/ \2 f U //原地不动% Y2 w- G& N: Q g
nDestPos++;
0 p* z% @- m! h5 n8 N0 I continue;
+ t$ n" z$ e0 v. M6 \ }! e: U. j4 [: ~
pInvSort->MoveItem(i,nDestPos);
# G% q$ f" e- h2 x) t g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 W) X0 [( @( j1 }5 ^ Sleep(5);
# o4 H2 O" M' V4 `+ f( O2 _8 b //Error("移动 - %d->%d",nSrc,nDestPos);& J! o0 Y* i' v ~
nDestPos++;, L$ G0 m5 m5 o; d6 V# l+ U
}
5 W5 D' u5 T$ H. D @# d. Z //取第一个元素的信息
~1 | @) k" C3 ^) F5 p2 @ /*
! {- g1 l3 Y3 ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ K R9 o2 l2 ]. h {
- _7 N' z* ]4 `6 l: B! A# s7 b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 j3 T7 s1 b# [3 o0 a6 V g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& P2 T! S6 M. V B }2 R3 f- Z* X. w% ^
*/0 h) L8 C# f# T' J* W) P4 K
//////////////////////////////////////////////////////////////////////////
% X7 `8 Y$ f1 \# C break;9 C& K4 A, @* k2 v; a: h$ i
}
7 \& } U/ M# V/ u( V }
% A) h1 g) Y! c6 X! m! W* W4 ]' v}. T3 f$ {! K( X$ A ~
m_wndMenu.SetVisible(FALSE);
. I2 {1 Y" q2 v: B% S3 w5 o, c" S
--------------------------------------------------------------------------------------------------------3 R: {6 W: X0 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 {" }. j1 c. H4 O$ c{
* \ Z1 x" h& cBaseMouseCursor();, X8 J/ m% a+ X4 h) v/ q& r
}
) ?8 t' m( P2 M3 _在其下添加:4 o) n4 w, A+ t$ W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* o3 N9 M/ X1 p/ v) Z& R
{, [8 u4 V: m! r; d
m_wndMenu.DeleteAllMenu();5 m& [, Y, G+ m* ~( {
m_wndMenu.CreateMenu(this);/ s% ], D7 s( l& w' ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 k& v% M: c5 B: I" {# X. V$ O1 u* d/ k+ [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% {( h B4 ^8 |2 [" p9 ~- F1 C9 ]! ?{
3 }4 A2 Z ~8 i) W7 c //P以上级别才可以删除所有道具# B( w2 J% W, J8 B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, l: P5 u7 Z+ G+ q$ S9 A% w}
: J+ d, o4 E7 N5 Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) y+ S- y, o* L1 `/ Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 I b8 R$ l2 M- J
m_wndMenu.SetFocus();* M- P8 z$ ` T
}
3 r0 h" h4 ]) s, }4 ]8 B------------------------------------------------------------------------------------------------------------4 w1 q! B. {) p9 o! s. u+ }
*************************/ {/ M/ H1 Q: C$ ]4 r/ t
WndField.h文件9 _2 a* c" T7 [( g0 e' M
*************************
6 ` D |& v: w9 X& @! n( C搜索:BOOL m_bReport;: X0 w7 m6 R' ?$ S7 Z9 c+ X- l4 V
其后添加:' v- m* U, D9 w/ M
CWndMenu m_wndMenu;
6 V7 {/ ?- I. u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 f; k; I) q& N其后添加:
, W' ]& o' a* X9 Q& r) X1 Y$ E" gvirtual void OnRButtonUp(UINT nFlags, CPoint point);
; S. Z; J% C! ]* E1 n; \
& o8 \% @2 t6 \5 [; U1 h/ P4 D8 y1 g2 j L
|
|