|
|
源文件中_Interface文件夹下WndField.cpp文件
' z6 i2 n9 r8 D/ o) }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). o9 j' m$ F, {( Z) d' `
8 X% [2 p) J# O% v4 b% m- h
struct sItem/ G# r! {: n' s5 X) l; ^
{% a! I9 C$ q& B' L1 h' I! s
DWORD dwId;3 V* t0 P6 n. O0 Y1 J
DWORD dwKind2;9 x& [2 M! q0 Q% {* E. G
DWORD dwItemId;; X: e N' x( g2 @. Q+ [( V0 g0 t
BYTE nIndex;2 n1 T* u# J) _% X, c6 V" x
sItem(){+ Q; _7 E* \9 `/ b
dwId = dwKind2 = dwItemId = nIndex = 0;
* m7 Y0 t# Q; Q- X0 \, S' J6 x: G}1 d7 r, r6 h) S o# i4 \
bool operator < (const sItem p2)
6 ?6 ^' j5 O: D& N. t3 i( A{/ K' K, W8 k- x( w+ j8 h1 Y; ?
if (dwKind2 == p2.dwKind2)
& H' i/ a+ y4 L; d {# X/ O) Y# K7 B5 j
return dwItemId < p2.dwItemId;% ]9 L; ]9 c+ u3 J- E3 V* v
}else{
9 @8 Y: c5 @' ?! _, n' U return dwKind2 < p2.dwKind2;
; `6 w+ S; b6 z! u }4 D9 w4 {( s6 B# K3 c
}
# x3 }; J7 a- f4 ]4 g};3 p, U2 Q" S5 r: A$ X
class CInventorySort
; J! g% q# K$ ]% U% g9 ]5 {6 {* k{5 h" n3 i5 L2 l& i
public:7 k8 e! a0 X3 i+ W- G
CInventorySort()
; W6 L2 b8 _$ a/ w{" ~* q7 [3 X+ d8 H) ]2 o
m_dwPos = 0;( E8 N0 o! B+ F" V
}* T! O( y2 k/ M' H5 i7 V _$ u5 L. c
~CInventorySort(){}
. P' u( d+ e5 I2 e0 v) {/ `private:, x m# B4 n" V( W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) q, l! r8 h3 o6 Z. E
DWORD m_dwPos;
?$ S! o$ C4 P5 wpublic:
. J9 W& T7 ?3 g( uvoid Add(BYTE nIndex)* ?1 S7 D8 @ F# l% K& u
{
3 L9 r. G$ `. s1 V if (m_dwPos >= MAX_INVENTORY)
. \& a; ^ s" y, \ {) H2 _' y" i6 a( H0 i G
return;1 u# Q1 N2 N1 N6 n7 z; N
}
. H7 A6 i* |! B) ` o0 A m_Item[m_dwPos].nIndex = nIndex;
& ^( G# j2 @: J m_Item[m_dwPos].dwId = m_dwPos;- T. v; [) r1 h
m_dwPos++;
G- t, S7 p* B, R/ G: m6 o' p}9 A& B- Q/ L; r5 M5 f: w$ Z: d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 k/ ~1 h$ a) g+ u( M+ T" C* u. ]{
4 g, q7 a% a9 k9 G/ o7 V$ P for (int i=0;i<MAX_INVENTORY;i++)
% _+ B7 |8 J) J; V! d: D, F: R {: k, w3 @% E$ O4 a% l# j
if (m_Item.dwId == dwId)- M- J$ f& \# o. x* X! D
{" i: { i1 W! x% \
return m_Item.nIndex;9 b4 |! v7 S7 |$ c3 o' c: X0 x
}5 X9 X2 v! m. B' [! E
}
0 B' A7 s$ H2 d. x- v$ W return 255;
- [0 A0 ~" H) m. G9 V6 l}$ }* F p' d' ? o' |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) ~. P; r1 \5 t+ J2 M0 Y0 y{
+ f' V; o9 Y- B$ p% _% G BYTE nTmp = 0;
3 E% l$ g, L; N- z7 } bool bDest = false,bSrc = false;/ c, R' r! [: C4 t, U+ T- O
for (int i=0;i<MAX_INVENTORY;i++)/ Q" R, W7 W. ]/ |9 [
{, l5 L- Y3 v9 b5 z$ T
if (dwSrcId == m_Item.dwId)5 j3 J& x* w) c7 J0 O8 L/ p
{: P% C) C+ P* {3 T0 g
//id相等 则 改变对应的dest和src" h; r( N5 \, R- E! L: }9 C, ]
nTmp = m_Item.nIndex;" ^9 w9 }2 h. k( }
m_Item.nIndex = dest;4 O; o5 J% P3 A
}6 t" {3 o# Z: i" J$ `( _4 ^
}
$ }4 b+ N$ C8 x, t9 c //临时数据保存完毕,交换开始8 \4 ?+ T& o0 J& i3 T
for (int i=0;i<MAX_INVENTORY;i++)
7 b! F2 S9 }5 q {
- b$ N. ^. o/ d* ?$ ^: p$ P& o7 k- k if (dest == m_Item.nIndex)
4 K( X1 r' F6 j) ?8 ^/ G5 Z {
# ]# G6 i1 R8 F, K5 H //id相等 则 改变对应的dest和src1 P) E$ `( J! E7 I, O/ b* z; l- _
m_Item.nIndex = nTmp;) F% D M# ]% e* U6 @) u) s3 R' K/ C
}
9 w% z* n/ ^/ q) {( U, a }2 T1 }, V, Q5 U' Y! @
} ^5 w! \$ l( |1 f" a. J3 b
};2 {6 L1 O! ~5 ^ [
-------------------------------------------------------------------------
' H! ~( [+ {8 Y0 x$ {依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 g: n9 a0 R8 @+ A6 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 K3 ]+ {" {& e0 \* x: Y7 E紧靠其上添加:
! x, j/ H1 }5 G! ?9 e4 yif( pWndBase == &m_wndMenu )4 q" M% e" t' G
{, F' h7 M5 ^: F+ L) D
switch( nID )
9 K; b! R, G' a8 G* W) d& S/ { {& F4 w; h0 o0 S8 W* e- D/ c
case 2:6 M! C" ~( U" E9 y; y
{# J2 s7 [! n' R7 t' [( l7 H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) C& v' u1 q* W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ G6 P% p$ {. M8 `" ~0 j {" ]* W% f* |. Y- {, }
break;
( |5 @ b& [4 j9 X }
) L; L; D' ~' [ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 o6 B2 f4 v' D: X# z# i {0 ]. T, _' w! G1 X1 ~5 T! L1 w3 N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. Z- d1 N6 ?! w: q) x, N if( !pItemElem )
! D' a9 I) W1 o R. s8 X/ Q continue;. r w. k L! K) [+ ~
if(pItemElem->GetExtra() > 0)
. J% R2 Y1 V* J, {: T/ T9 ?6 a continue;& X+ b- `; I+ v" O$ ~# }) S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 ]# Z8 N5 [9 C7 P2 o* L. C/ s* d continue;. l ^' _& }$ |8 }
if( g_pPlayer->IsUsing( pItemElem ) )6 N( v( K5 @1 ~# r* j$ w4 O
continue;! \* j3 N6 J+ a! B( P
if( pItemElem->IsUndestructable() == TRUE )! d" y/ n$ F7 n- I7 S
{
: A9 b. r( g! Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 t; c- T0 Q6 j1 ^* z5 m+ u continue;
( u, a8 E" J4 q5 }+ N; X% k* N; o }/ }4 X# h, ^3 `5 R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* k! }- B: ^! s+ D. }8 k }
0 i# u) n% Q3 R- x7 W9 ^. [ break;& f. |6 c5 f+ c7 S# S2 Y2 S
}5 L- S! ?. T' {- ^, f3 H- w
case 1:
5 \+ U. d: @6 I( s {
& Y4 J( O% l; F9 t! H) S- i3 ~5 {' O //整理背包' E5 ?- B; i2 c3 o
//////////////////////////////////////////////////////////////////////////4 Y+ u& H! H. ]3 F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 b# _3 L* C, O; s
//////////////////////////////////////////////////////////////////////////
_2 b' t2 V. N9 A8 }# P; F /////////////////////////////////////////////////////////////////////////// G, V( z, ]( _* y- Z, n
CInventorySort* pInvSort = new CInventorySort;
: N. d0 @ R" k# J8 P( [ vector <sItem> vItem;
8 D Y4 T) P5 a. U' j vItem.resize(MAX_INVENTORY);//初始化大小
0 O* a1 O; T1 n6 @+ O0 ?7 V( k //////////////////////////////////////////////////////////////////////////2 ?" h9 `3 G+ z0 e. O' E" e
//填充数据% ~ p& B+ \0 U) l4 L" B* e1 P
for (int i=0;i<MAX_INVENTORY;i++)
6 S3 l8 X! l( o5 ] {
v' A& ?% K, O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
I5 z: Z$ a( k C2 _* h4 U if (!pItemElem)
# k9 D! H5 B3 g% W# m* f2 C {
" |% f# |) n C% I% Q* I, m vItem.dwKind2 = 0xffffffff;
' \% n! a5 R- B5 k7 G1 i vItem.dwItemId = 0xffffffff; H' R( ^3 R+ L1 T( f1 b
vItem.nIndex = i;
) Y& G9 Y- y+ K' @! R e; b }else {7 B& t1 F- t, R6 H! `
ItemProp* pProp = pItemElem->GetProp();) h9 [' K2 z; T/ U l1 g
vItem.dwKind2 = pProp->dwItemKind2;
7 T% P$ {0 h9 n! @ vItem.dwItemId = pItemElem->m_dwItemId;
" ~6 ~( U" P0 g; y vItem.nIndex = i;) m1 i" x) U# b+ R* o- X+ H; B: d
}
+ ~% p3 v5 L% C, D! B9 s: e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 {' j Y& H7 G: g1 G# }
}
& h6 }6 }( i" A& i4 q0 y. t //////////////////////////////////////////////////////////////////////////
7 E! Z9 c& J8 E6 q sort(vItem.begin(),vItem.end());//排序. f- p5 J# m, W; Y7 I, Z1 j$ t6 j& Y E
//////////////////////////////////////////////////////////////////////////
5 ?* A7 L1 w9 E& N, Y //交换
8 b. b. q% q" N6 r$ k9 o for (size_t i=0;i<vItem.size();i++) k* K% b0 ~' i1 O/ o
{
8 O5 q. A6 m4 {( l$ R( j- Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, _: Y1 d$ }) g5 C4 _0 ~0 d
pInvSort->Add(vItem.nIndex);
3 A- d/ W+ @. M9 W) n v }! b' }& `2 S% v9 q% t
BYTE nDestPos = 0;8 N( t; I9 j2 I3 p9 d
for (int i=0;i<MAX_INVENTORY;i++), ]- o3 A; m1 b3 ?% L8 x- z
{
8 W* K( }4 r2 {2 V3 K/ Y3 P, P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( w6 w. {; d c h3 F* Z
if (pItemElem)
; F% @3 N n" E& _3 ~! t' w: q {8 i- U, K: M* w. {" t& g
if (IsUsingItem(pItemElem)) e: W, ?; o+ S6 F2 ?% d
{1 Y" v: ?# m9 u5 m, e1 K
//这个位置无法放
: q5 F9 h4 O7 b nDestPos++;& X. M+ J- o6 Z
}
+ b- J+ J0 ~! g: T$ |, F( ` }3 q+ r7 H& t+ P' H6 s5 p: V
BYTE nSrc = pInvSort->GetItemSrc(i);
2 c, X! o# K# e9 R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 K$ y9 c' h% C2 ~5 ] if (pItemElem)
- ^% @0 h) t; W2 L0 ?' n {
/ ]( R+ M9 V$ d% s if (IsUsingItem(pItemElem))( s0 Q$ J+ s1 w+ C
{7 n: u! Q$ \0 ]; z
//这个道具无法移动,跳过2 _6 N' ~ ]' i. c, _
continue;9 Y. P1 _; @! I2 E2 w
}' P" N, y. z4 L4 {9 |
}else{
' }$ k5 g7 ^4 ]7 J' }4 y; y! W //空位置 不用动 y0 z) C6 r* N3 |
continue;! f' W3 i& S& H4 T
}
/ m* _$ I+ Y" I //////////////////////////////////////////////////////////////////////////- p6 D H4 U0 r$ @+ _* \; _% @
//开始移动
+ L: x- s* t% g if (nSrc == nDestPos)0 e6 I; H5 \" p4 {& Z9 `
{- g; p& t8 x' Z* V& j- _
//原地不动
+ H! T. b+ Z5 G: @ nDestPos++;1 n! U3 L% A" M
continue;
7 v9 W4 P3 F: D( t. H k" Z! N }
- h$ L: O8 _$ o1 x pInvSort->MoveItem(i,nDestPos);
- D9 o% R8 x# h: I( r g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 F! v+ {7 s" |( Q" g7 o Sleep(5);/ s* ?% `) _5 K8 d
//Error("移动 - %d->%d",nSrc,nDestPos);8 ~8 J7 O) e4 b; l# f
nDestPos++;3 Y7 T7 {+ _3 Y# _! E
}
% J) a. n7 k5 X' C //取第一个元素的信息
9 \. B1 f+ G) |3 X: \$ C% }% B /*) C* F8 P7 k& \3 T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 b1 l. G% ^' D6 r% S {
5 H+ {; x5 W3 g3 w$ ~& J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 t& m) W5 ?. T$ ^. [7 S5 b# S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( @0 j( w; D9 D* x# p! `) _
}. c8 D5 m8 T: B1 r; E4 z% g! u
*/
8 E x% |6 D* T, U. d1 v //////////////////////////////////////////////////////////////////////////
5 V; R" T; @( b break;
) O. c9 a$ I4 K# V% ^5 r7 } }
* ~2 I6 S0 N* ]) x- V$ T }
$ u/ O/ a" U, }& c% d}6 v% Y: i7 y! L& R6 `
m_wndMenu.SetVisible(FALSE);
/ m! n A. C# e$ F1 _- H6 x. e! S% v+ b
--------------------------------------------------------------------------------------------------------# q* b9 Y. ]3 ]/ x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% R. V# x4 ^$ K) ]3 }1 d/ E: H7 |
{* M. d8 b( V0 K2 s2 Q" ]$ g
BaseMouseCursor();
0 M$ F7 B9 I$ ]1 B0 R3 n}9 a5 ]; G% E t7 D$ P
在其下添加:
8 N4 K& G; v8 I5 U4 hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# s# `, A, S: U/ a+ d+ x' Y+ ?, m{8 t' Z! [" S( O: e5 H* T8 n8 u
m_wndMenu.DeleteAllMenu();
2 K. J9 {' i! N Hm_wndMenu.CreateMenu(this);
( P+ ?' D' y( G: k' t: j6 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- e/ O/ I& T+ Z6 s" T$ N; X1 d) Z$ s
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# Q6 y6 k- H+ ?/ ?3 G/ q9 u
{
e' j2 p% I+ x3 u* F: ? //P以上级别才可以删除所有道具
, {1 J& K9 q8 t5 N2 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- T! h2 p. ` k2 i" D}1 g. \# K" F1 k) C0 C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); G5 Y. e" g1 f& Q' h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 N. C4 X3 W9 u0 y% j5 m. p5 }" A
m_wndMenu.SetFocus();
0 X/ _. Z9 U( |}
& ]: R) a6 L0 n e% a------------------------------------------------------------------------------------------------------------+ P: b Z; k! c) w7 \& q) t# L
*************************, z5 V/ |8 C: b" H8 ]
WndField.h文件+ [( b5 H( v" b- p
*************************
. y7 \7 Z; D$ w" b5 B8 i) r搜索:BOOL m_bReport;, t! Q( Z. g B" m0 A/ E
其后添加:3 o' f8 H2 S; l1 ^9 l x; H
CWndMenu m_wndMenu;$ w% q9 O/ C: s: j9 I
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, B: m) d; m1 a4 I. I+ F
其后添加:
6 _) g3 `7 _$ z) I: C) @virtual void OnRButtonUp(UINT nFlags, CPoint point);- b% @& q2 b2 }" M/ ?
8 K" d8 Q9 e6 m
& K% h3 ]& V0 m2 h; ?: D' r |
|