|
|
源文件中_Interface文件夹下WndField.cpp文件
: T. `2 f9 l( T8 Z0 v8 e& F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- R @5 Q6 o, t
0 @) m% M+ o; d: u/ C3 istruct sItem5 {% l+ y/ S+ K
{$ |' n8 K' U! L" {; i
DWORD dwId;+ m9 Z' v+ y! l* D8 l/ m& o
DWORD dwKind2;
& \# [8 G) X: B8 N+ _0 ODWORD dwItemId;2 h! V) d: c: n3 t1 ^
BYTE nIndex;
, |; u4 T; v' O7 EsItem(){; C+ N0 Z; Y" B3 x* @" k5 w* X
dwId = dwKind2 = dwItemId = nIndex = 0;
# H7 W# y3 `$ B Y}; k1 r4 c) C3 r' a
bool operator < (const sItem p2); x9 a- ~+ q: O1 E* j' r3 Z* T
{
( E: g' x( A# H1 I. P# A if (dwKind2 == p2.dwKind2)
0 Z* f# a- a$ U" C- C& R* D# d {
* J, ~4 I$ ?4 h return dwItemId < p2.dwItemId;7 E4 T, ?" A) v8 K7 D
}else{6 c: A% i* b% X$ m9 M
return dwKind2 < p2.dwKind2;
" l/ v6 u1 c- A }
9 X0 r- P: V w* S9 h/ }}- ?/ }8 w: p& s0 ~' a7 Z
};
% u* J7 p5 h' H M* I5 N6 n% Jclass CInventorySort
% E1 K5 P0 ?3 k. W/ b{
2 K# H& N a7 Ppublic:
3 m2 Q: ^" X1 w1 ^* L5 s& |+ OCInventorySort()
: R/ o3 t$ k9 j% G. N- {. i{
. t$ B3 q2 I5 X1 X, E! U1 K m_dwPos = 0;) n: E/ o7 {8 r( H7 |9 t
}4 I6 N8 w/ v/ D+ V
~CInventorySort(){}5 a6 a Q+ b/ y' K
private:) r5 U5 {# V$ `- p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% a( r+ ~+ v+ b; o M! MDWORD m_dwPos;
# z9 ^& e- d& E- spublic:
0 Q6 t. |& ?/ A! Kvoid Add(BYTE nIndex)
: L! I8 l L6 P \! M0 j{0 M# V, g5 Y X4 L, H
if (m_dwPos >= MAX_INVENTORY)1 ^1 K3 A( g9 S# v7 z% e* N
{
2 a W6 q0 V! m4 P& P return;
8 `# \' a- i/ s; }/ M, ]# q' L }
. u. J$ X! m$ S m_Item[m_dwPos].nIndex = nIndex;0 H. j8 a0 c+ r8 _% C
m_Item[m_dwPos].dwId = m_dwPos;1 N5 W3 _6 S1 Q8 n- }
m_dwPos++;
1 X6 d0 I" P) o}
$ ~; \# u3 U8 y1 {" eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( |+ {' t2 _( o5 c! ?, _. D
{- A6 y9 t1 k3 Y- ^+ _
for (int i=0;i<MAX_INVENTORY;i++)( W% G2 s8 r( _) L0 D
{4 M4 M+ K4 H- W! s; ~5 `" ~. F
if (m_Item.dwId == dwId)
, T: S4 p" u" Y {
|+ w- h, O8 A# m+ Z' ^ return m_Item.nIndex;
% C% r' A. ~# ^0 o/ n, ^ }
& V Z5 \3 C% ?; J8 |/ W# s }
' `1 z. D. d% @ C) _9 W0 _ return 255;
4 _2 s! d; k; ^}- k) ]4 b$ v |- ~; U+ y5 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 `; w5 q: `- n& a2 w+ B{6 y9 o; G9 `/ l% {
BYTE nTmp = 0;# r, `2 C' M# y4 T! `4 P) l
bool bDest = false,bSrc = false;7 _' _) G% b4 f$ @, u
for (int i=0;i<MAX_INVENTORY;i++)
5 l: V" L2 p m/ I {
5 r+ W8 Q6 A% {( v- N if (dwSrcId == m_Item.dwId)% o8 n; _9 p/ b' @) V: S; D7 ~
{
5 W; J; P* i1 a! v //id相等 则 改变对应的dest和src
) e+ y# ? i o2 I! _ nTmp = m_Item.nIndex;0 B9 ?4 G) S L6 J. t u
m_Item.nIndex = dest;
! j% P! B9 p- g3 V0 E e }( H; P" g6 p# \$ p M& n; ]
}
9 l' {4 }2 R/ _ //临时数据保存完毕,交换开始+ x1 m6 S1 L3 @/ ?" y9 D$ Q
for (int i=0;i<MAX_INVENTORY;i++)$ u; j; m$ {& @
{3 S- j2 H1 ]! ~, |- {6 q H
if (dest == m_Item.nIndex)
0 z+ x% |; t! v, p2 R( P {
: @9 `; |5 A: f% p; M //id相等 则 改变对应的dest和src
$ R! P% c" x, b, Z m_Item.nIndex = nTmp;
0 f" e* Y/ V$ J% u$ G+ \ }
/ Q" u; ]& |9 n8 o) a* C- a }8 Z) {! f/ {/ L q' Q# M& U9 h* D# }
}
6 X- H) |1 _5 y/ e, A};+ w/ D0 N7 T$ S5 V
-------------------------------------------------------------------------; u6 q: P1 T B9 e) Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 n; q- u; Q0 X/ ?. e. Z4 m1 |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 A6 V7 M) q1 z紧靠其上添加:
5 Z& n' C$ k% F- R0 C' f, j% rif( pWndBase == &m_wndMenu )- L! T/ X2 k0 j2 |% V
{
/ e' s- [( `/ o. j+ A switch( nID )( X) Z+ a' d# v
{
- I1 @9 u1 S9 l& A1 T* e$ ? case 2:# b5 v! a! x9 O7 J2 ?4 s7 j, N5 }
{5 Y) Q3 Y6 T6 d0 w$ r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
Q' H/ P* [6 N& Y& ? if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 ?$ d) ]* q7 ]& R) P5 r, C {; M- N0 j/ O8 [ @9 G" N
break;
3 r) c9 w7 o* _) V) q# ~* I }; x, E7 {) R8 k) u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& k. h, S$ Q) K1 T, E# \8 d) M9 H, B {
5 Q' ?- o9 @; v# j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* L& t& ], K" D0 L M' {: N if( !pItemElem )9 A8 T W! B/ B8 y9 j
continue;! a/ E* L# X" a: s+ Q5 w5 r0 _
if(pItemElem->GetExtra() > 0)
/ h4 ^ q( ~7 j) e2 l9 R continue;: e4 K. e5 L2 m c6 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% D, h4 R8 O1 E4 n8 ^ continue;
; s& S! n5 W+ z b+ K3 e) X if( g_pPlayer->IsUsing( pItemElem ) )
% ~8 p2 b: ^, s continue;1 K: k5 l2 Q" q+ W: J
if( pItemElem->IsUndestructable() == TRUE )
9 F3 g# J! S* h {9 J! t% P6 @3 c
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! n \2 Q q2 Z& p0 s6 s7 @- x4 u
continue;
, ?' \ e) q/ I2 k }! a; B, p. K1 v4 s5 n/ O
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 O2 L# L; G, T! [4 J) C5 c }0 O) T6 W" G) W3 S
break;3 q+ s+ j6 d: v" c( t7 ^: }+ E
}" F# o+ p. q6 E) p" j# K
case 1:
, v8 z2 q: F* Y! i4 {- u {
$ Q- s9 p: K% d7 b! |+ t+ M6 G //整理背包
9 y% p: H# L) U9 F' | //////////////////////////////////////////////////////////////////////////
% U# ]4 R& B2 } o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& w. A, F9 s9 }4 _ //////////////////////////////////////////////////////////////////////////" x) l9 C0 a& y" [ e2 z: r. E1 R2 h
//////////////////////////////////////////////////////////////////////////6 U6 U2 X, z O
CInventorySort* pInvSort = new CInventorySort;' O. ]: \; H; m- c6 A7 P, [5 K5 G
vector <sItem> vItem;
2 A9 q/ ~6 E; ~5 Y vItem.resize(MAX_INVENTORY);//初始化大小
' W8 }4 N% o+ g) d# N //////////////////////////////////////////////////////////////////////////! ^; C2 Q- ?/ E. @7 R/ N3 n+ E1 n. d
//填充数据
( E; p& p0 z, s3 b2 j* r7 } for (int i=0;i<MAX_INVENTORY;i++)
: ^! @4 n3 r& ]+ ^( H' Q$ [ {7 m2 W8 {5 I' Q6 o% S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* U, s' V6 {2 @. I if (!pItemElem)
* B1 l6 t, n, x+ e {
& b) q) J0 f" J# O, b2 A vItem.dwKind2 = 0xffffffff;
$ _; O. Y+ \. D m# s vItem.dwItemId = 0xffffffff;4 V0 m3 d& x& B7 V0 d7 u; q# t. ^4 }
vItem.nIndex = i;
- R3 n0 G4 {6 K) [: L+ d }else {. ~) J: X s/ x0 ]) O
ItemProp* pProp = pItemElem->GetProp();8 \1 z: h9 h H
vItem.dwKind2 = pProp->dwItemKind2;3 l/ J/ C1 |, H9 K
vItem.dwItemId = pItemElem->m_dwItemId;* t8 S0 ~) M" x: V8 W6 H6 X
vItem.nIndex = i;% _1 p9 ~0 _7 H1 M) V+ ]# O
}
) u' P% S* r" G$ e ~( Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( h" a' B+ c+ a+ n3 W) n% X
}
9 W" F1 L* c+ q5 r //////////////////////////////////////////////////////////////////////////
. | K' E: T7 b- f# K sort(vItem.begin(),vItem.end());//排序
% U) v0 v d" d //////////////////////////////////////////////////////////////////////////
5 o" I p, o% h/ H8 Y //交换/ x- E; W" H P% Z
for (size_t i=0;i<vItem.size();i++)) D. @+ S8 @0 ~* G7 D- l5 k
{- z5 V4 V. W6 n# Y8 ~! U& q& }1 c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& ^2 a& b4 e2 a
pInvSort->Add(vItem.nIndex);
. K8 [7 d/ @* G. \ }
, a: C& h3 _, Z BYTE nDestPos = 0;
) l% x7 T# n" L8 x for (int i=0;i<MAX_INVENTORY;i++)! g9 ?, x) L C" D
{
( T" x1 B4 I1 E. Y, \' L p) c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, e. t8 |1 s. r& H$ m$ t
if (pItemElem)6 M+ t8 G, t0 d, y2 R
{2 ?8 G7 _9 L: A1 X, j
if (IsUsingItem(pItemElem))
0 e. ~! d5 ?3 b) ]. \- l {
. d# D( ?( U. E" I1 c //这个位置无法放2 x' x+ d; i2 ^, k6 g4 n2 y$ {' f
nDestPos++;
2 a/ O5 u$ `$ V }
! ^% v9 C5 { m4 M0 d }
+ \5 [* C/ P: U! y# V6 F2 H BYTE nSrc = pInvSort->GetItemSrc(i);
" a- B) i7 ~7 ?8 U5 s- j8 P4 u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 r# ~4 q% M9 O' G @! S if (pItemElem)! K6 X/ ?, Y3 v2 T6 V
{
7 T% N, F/ s- F' X9 V; M if (IsUsingItem(pItemElem))
& L) u. U2 i9 ? {. g1 h6 u. X9 r% I! ^2 k
//这个道具无法移动,跳过: A& p. a% ~7 R {. i
continue;
6 w- E# u3 w+ m }
! Y# A: |2 N- M }else{. @8 i+ c" Z5 x) @
//空位置 不用动
; U9 f8 ?& E% O* N' h continue;
% \/ d9 p7 G+ D. G: i }
2 F' X) N" J9 @! E7 ^ //////////////////////////////////////////////////////////////////////////
' W4 F2 p0 u, x. O( a- L2 W4 `& {7 z //开始移动
, E$ k/ ?1 U: } if (nSrc == nDestPos)- {3 y) {4 K( _$ [) S4 K7 [
{" x( o- o3 i. d
//原地不动, B6 g& Z6 d* I) t, `5 z
nDestPos++;
' w( k5 M7 S$ q continue;
* h$ i) s) A5 X/ }/ k- W }& M5 Q" w, m t0 R- Z
pInvSort->MoveItem(i,nDestPos);
9 @' ^+ |1 y8 S/ H g_DPlay.SendMoveItem(0,nSrc,nDestPos);; T. |% a1 c( e" i9 N& ~, f+ C- i; A
Sleep(5);
' v. s9 D6 E) {" y( z! D* n* \ //Error("移动 - %d->%d",nSrc,nDestPos);
A2 C. D: B0 T& j9 O nDestPos++;8 x7 A- O- G4 D' @/ ~: P" N [; S% q
}
+ ]" M+ I' j% P- e+ F //取第一个元素的信息' F S, n# `3 s$ |% f
/*& u+ r2 J) C" j; _1 _# J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, z6 [2 x8 ]) Z( j4 ^4 @0 }0 U/ e {: M# m+ d4 F/ e# T. Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 q ^1 `/ T) U ^; j
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 r# N' p6 I0 w1 W: [6 V; i9 ]" B }- `. m1 q6 i& m; Z% a- ?
*/4 q" L4 L5 S$ ~& W' M8 ?) V# T
//////////////////////////////////////////////////////////////////////////0 ~8 l6 D0 L/ G# d- C/ G: N( b: U
break;& ]) Z, g1 h7 Z" D- Y: M/ a9 F
}, n- u8 A% {- q! \, R |2 w) M
} 7 B1 x$ o" g5 z2 ^0 r8 W
}
0 b6 t+ f" p5 c8 o. i% f% km_wndMenu.SetVisible(FALSE);
, z( E& Z5 w% Q+ j) }/ u
* O1 Y& b2 `3 f0 s; R* f6 N--------------------------------------------------------------------------------------------------------4 m8 F5 u5 F! _ l3 f# `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& k7 P+ W& M5 v0 [
{ h2 q* T' l' s3 E: J- V3 O( e
BaseMouseCursor();" y+ x4 h6 O4 ?- Q
}5 v5 g( i+ _# F9 J1 A
在其下添加:4 q$ {' Z2 R2 l& E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; @* C6 a: b0 ~7 J7 m3 J{# \2 l3 s# H8 h7 N2 K+ E
m_wndMenu.DeleteAllMenu();$ k7 B- p/ J6 B! }: |
m_wndMenu.CreateMenu(this);1 Q7 M8 l* n7 m2 p/ T7 z4 W& p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: K+ `" J& D# O
0 j3 k# z. j0 b! Z( [8 [$ ^1 Nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 r# Q: ]3 s5 t& q% [* f; ?2 ]6 o{( a' ?: s, p8 d- T% `
//P以上级别才可以删除所有道具2 G$ c8 S$ v* K3 I- B; j l! m: |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! {! e9 O% w$ `+ X}
' Y) X$ s! p' T% z5 E( Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ v4 X) |- a% i4 {5 lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 Z, X# Y3 j) {$ Rm_wndMenu.SetFocus();) H$ c# T) n: \- m1 Q, N
}2 G/ ` Q. \2 A, F; @* }6 W
------------------------------------------------------------------------------------------------------------/ u) `7 ^& t" P0 O4 O% g3 E+ _
*************************
4 k( s" w; p% v1 ZWndField.h文件4 {. J8 ~ R& R# A u2 r$ q
*************************6 y6 [3 }' m/ c
搜索:BOOL m_bReport;
9 y' i2 t- }* M3 `1 {( ?( T其后添加:
' P2 j$ Z5 u( ~% @" G% h1 k$ vCWndMenu m_wndMenu;. g* I: }! j0 a0 X2 q; R6 k+ T1 ~( O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" m9 W# a8 K: Q
其后添加:
- Z. x5 r9 @6 {' d$ q, ?" xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 o _/ A+ z9 a/ w/ ~9 ^7 l1 O
( \2 E0 r `2 ^3 G Y1 A7 i
7 G8 ?6 ]8 S$ M/ N1 g1 G |
|