|
|
源文件中_Interface文件夹下WndField.cpp文件# j. c* v' j4 W( V0 O* W' T' [( o' o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 ^- A0 r" s4 y- I7 F$ N! Z+ U8 w3 }. h0 v0 Z+ H6 q) M2 I& K
struct sItem
9 v* G2 r8 E1 U% Y) ^3 I/ p{
6 W( ^' L x* Y+ `DWORD dwId;6 V# D3 I' d( r% ~
DWORD dwKind2;% t7 m G9 \9 ]' }% k; j; H& |
DWORD dwItemId;
. S( v# d% Z' [, ~: s% `' H7 RBYTE nIndex;6 B$ P$ ~& M+ l! _! q( [0 ^: y
sItem(){9 V( K! U8 b) K8 ]2 h V0 O! Z
dwId = dwKind2 = dwItemId = nIndex = 0;
* Z. ^1 {$ S1 S( a0 V% P) B" [* F}
4 |$ @4 n8 F$ }( d' u; ~2 }5 m1 _7 G& Ibool operator < (const sItem p2)9 p+ Q- J* t) U' f3 i' @7 P
{
& h( Y5 d" Q& ]2 R if (dwKind2 == p2.dwKind2)
1 Q% J- @: w3 c {0 w7 @8 Z, w. b. e( y& r( x
return dwItemId < p2.dwItemId;' e( m) _& `4 [$ q! V' n& J
}else{% E/ L) P0 F" E
return dwKind2 < p2.dwKind2;
9 |: ?! C: d. }3 E9 | }
% M; y. s8 Z2 k4 r6 U& h4 Z9 R+ b}
4 e% `& F8 p \3 l2 ]};
+ Y6 M9 b3 r) P7 [class CInventorySort; z6 p6 k% ~ l4 `7 W2 F, x
{- y& ~0 w& d: \# d* ~ j I
public:
) Q# {$ V9 O: r% |/ ECInventorySort()# Y. M. Y/ R/ n$ e! W
{
& U. o2 P9 E1 i m_dwPos = 0;
5 G% b+ O' n0 } h0 H$ n5 S} p. O% Y1 h* N! Q O4 m
~CInventorySort(){}
0 W1 }- s% H- M0 n4 Fprivate:& m3 r: R: e5 W3 w% G/ }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. ^5 l0 f# V3 N2 VDWORD m_dwPos;
* T4 j6 p$ ?' X0 fpublic:# S. `( ^, M4 }
void Add(BYTE nIndex)
2 ?6 l: L. H1 M' ]/ k- E% C( p) o{, H5 a+ L! Z0 X2 h7 c3 Z# I
if (m_dwPos >= MAX_INVENTORY)
6 v4 L' i+ \* M6 K- l1 L5 { {
6 W; D' `5 s5 T' w- K return;( H( Y8 j! ?+ x) k" f8 e
}
; K' F$ N! C" J$ ]8 j- D! e' M1 s m_Item[m_dwPos].nIndex = nIndex;
6 h4 Q" P1 {7 L( j% t, ~# J0 a9 F m_Item[m_dwPos].dwId = m_dwPos;& f l( v5 ^3 {( I& Q4 v
m_dwPos++;% ?$ O( t- z2 e7 x6 ]" c
}: h4 @+ z+ V+ z( v9 K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( \% o! \; R# M2 C8 C8 K
{4 p5 @- b/ g$ r: {1 W+ ~. P
for (int i=0;i<MAX_INVENTORY;i++)
' T! `3 c% K4 ?; h0 M: i {$ n: S* |" Y: ~# ~& m. u1 ^" S0 ^
if (m_Item.dwId == dwId)
! T! U' N2 u) o6 M# o. H! i {) R2 @5 y2 g: ~' N4 A# U' K
return m_Item.nIndex;% l' e0 V( D" ?2 ?- ]
}7 j; ^* V2 N) k" C- X
}8 L% R/ K# d$ {% b
return 255;; k7 W \: @0 q2 w: f/ c% W
}
8 `3 x( b5 B+ T1 h$ G) Q1 `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% u% b2 H% b5 L5 H
{
' w( z! s7 q( b) Z2 L0 ?$ [# \ BYTE nTmp = 0;. z( Z: u d- G' I/ E1 b+ u. o
bool bDest = false,bSrc = false;0 f, ?$ M! @; ]
for (int i=0;i<MAX_INVENTORY;i++)% t, }6 I2 k1 A
{
7 p1 h% Y) i3 M+ ~$ a: q if (dwSrcId == m_Item.dwId)
U" c1 E5 O1 a. F( e3 X5 g {. v* y' W+ F1 J, W# h
//id相等 则 改变对应的dest和src
- J1 l1 W/ [) }; w8 u nTmp = m_Item.nIndex;
2 h) B- d9 v0 `( q; ?. G6 m m_Item.nIndex = dest;$ ]7 u( w, h; a5 l% u& I
}
) Z B! r3 Y5 v- V7 \ }
" [% n" v# B9 O! S1 f$ C6 C, D //临时数据保存完毕,交换开始
2 M' ^$ H6 C" R for (int i=0;i<MAX_INVENTORY;i++)
" s6 R! Y5 c, l: v1 P* H {
" T+ Z8 F# E+ Q if (dest == m_Item.nIndex)1 J2 B1 z* Z5 x
{4 T6 ]# W8 A9 q2 V% X
//id相等 则 改变对应的dest和src, z) p {% H5 ]3 p% c# D: r
m_Item.nIndex = nTmp;
. m" |& m% k2 q# {: N }
) \- o6 k0 U1 m2 i9 K& ^, R }8 J1 r. b& |$ r' F/ S
}! _6 c( _$ g/ \6 x8 \! i; P
};2 x# w8 [6 W5 {6 ]# [- C9 Y7 r! \
------------------------------------------------------------------------- J! h5 k5 N: H5 S" P: [' E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 ]7 D# s' H% ]! p+ d* i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ {( e* c9 v& }# e2 i4 Y紧靠其上添加:
! O; o6 D4 i1 q4 v1 kif( pWndBase == &m_wndMenu )/ y$ F! U, ~8 t' x0 s% E9 ~' W7 X8 R
{
# {8 I' T; h3 F5 X+ n$ R switch( nID )
8 v5 B# G8 Z5 ?$ I {0 b* }2 v0 y' ^ ]; B) `, ~
case 2:
9 `/ H2 r' K o& O& U9 z {
+ \$ N4 {: w. c& p" z+ Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 e; f' ?# N% G t8 g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); }0 O }% C i2 |" B& P" t
{2 t* }" s1 M% G: B' q) L
break;# S8 N% Q% I \/ U" `
}
i) H m$ |3 F$ q4 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 {( P1 Q9 X) y* B1 @ {
2 p6 X) }* P) d3 _9 _" U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 l) h1 E* e, d3 r; {: ?
if( !pItemElem )
/ E$ p1 M& B8 L6 g8 [ continue;$ `0 C9 l# R0 k% b' W8 p
if(pItemElem->GetExtra() > 0)
) W5 U l& m- Q$ M: V9 U continue;) G" p3 R$ J2 L5 D* k
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! C- X. C. K* ]; }8 m' l
continue;/ j2 b7 I) C% R( z
if( g_pPlayer->IsUsing( pItemElem ) )
4 N+ b8 s# y- z6 m: v continue;
1 y5 U) p [+ h# V7 @ if( pItemElem->IsUndestructable() == TRUE )% M0 x$ y- |6 d1 Z9 `
{
# S2 L3 Y9 @2 X7 f' o+ I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 K. S2 q/ P6 @8 z( p/ l continue;
+ A+ \: ]) \8 X3 @ }
. M9 |/ U" D: X2 f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) d0 C" D' P- l! Y4 S d6 J& C }
9 [# V7 I7 G3 ?) ` break;
2 [# r9 l: V- ?8 p6 n* q& ? }; N4 \+ L9 a, v) r$ r
case 1:
# l0 q( m% n Q# Z' ?( @7 U2 t {
5 o& w& m* K3 w! T( u0 g& J( ^8 s //整理背包) x0 k4 b8 c' J
//////////////////////////////////////////////////////////////////////////
* s" @( R4 B9 V0 o, q$ B7 r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, T8 v$ X# A! q/ }! j //////////////////////////////////////////////////////////////////////////
4 r: Z2 |6 m* H9 ] //////////////////////////////////////////////////////////////////////////( V. m/ M# W W6 Z. t# f4 o
CInventorySort* pInvSort = new CInventorySort;
3 Y. `3 T. _$ S* B2 g/ c; {- E vector <sItem> vItem;, t" ~8 {3 r! N+ ~7 a( a1 N
vItem.resize(MAX_INVENTORY);//初始化大小2 W7 [# T! c/ e+ m' t, J* Q
//////////////////////////////////////////////////////////////////////////, A# X' G, a6 ~
//填充数据4 h. J L- N" {: o0 I
for (int i=0;i<MAX_INVENTORY;i++)
$ w- X2 X2 B( B% z& ]( D {* o- y7 q! _0 o; L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' u) h, j4 Y) R" ?
if (!pItemElem)# C: z; o3 Q" k! Z1 l! |+ z% s2 ^
{
8 U; [. P7 Z$ y vItem.dwKind2 = 0xffffffff;# n, m! E' y' ]9 }
vItem.dwItemId = 0xffffffff;
) ~! {9 o! Z( a/ |2 S vItem.nIndex = i;
/ m7 u' `+ T# p* y0 I: `; o) Y# E2 ~8 u }else {- `( }9 j4 \2 Q8 r( r% _0 L
ItemProp* pProp = pItemElem->GetProp();( F" w' W% M+ y3 Q
vItem.dwKind2 = pProp->dwItemKind2;
0 m% ]' y, ~$ f+ \& U, [9 ~ vItem.dwItemId = pItemElem->m_dwItemId;
& ^; o: @" {9 ]6 _% X vItem.nIndex = i;
; V4 E* c) @! e: e4 p }5 f9 E) L- |1 b& g" f9 v, M
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 j1 \+ @7 ~/ M# @ }
% n# ~& j4 ^ q! B2 u0 e0 c9 R //////////////////////////////////////////////////////////////////////////
' z4 O7 T5 N& Q sort(vItem.begin(),vItem.end());//排序! U/ ~8 c& N8 n) T7 v8 V! Y
//////////////////////////////////////////////////////////////////////////
% c/ V9 D6 o, _4 T: ? //交换- [3 M+ t2 _6 {- _9 F/ k3 @6 k0 H/ h) D
for (size_t i=0;i<vItem.size();i++)
, v* Y: u0 o6 V$ {: Y( X: E& G {9 T8 b9 N" f. r- `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: [- u9 c7 _* u: W; ~$ j" `- _) h pInvSort->Add(vItem.nIndex);
1 C* n0 @8 B4 D( S! d2 P) j }
8 ?0 M* r) _# w# V' G6 L5 i( N L BYTE nDestPos = 0;2 X' S* o1 U+ e
for (int i=0;i<MAX_INVENTORY;i++)) t' l( g5 ?' W$ Z6 V, D! _1 f
{8 x4 C& M0 {8 D w+ }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ Q% i+ K4 }9 o9 x) C6 i" ` if (pItemElem)
' E) z; s8 y7 Y$ }9 V7 t {: R/ `3 Z7 S, w+ l1 _& c4 P- [" j
if (IsUsingItem(pItemElem))8 r& x5 N( Z( d- e z3 X) P2 B
{( N- L/ W+ V9 n% c+ R; A- i
//这个位置无法放, R6 \# q2 |% A' X! O- B2 c
nDestPos++;9 v2 G- I7 H6 r% |7 u# V, g
}
% n* G% f5 H% ?; D T, \) w }
; Q9 S5 n! L0 S9 s, I- h BYTE nSrc = pInvSort->GetItemSrc(i);
/ `, S. y/ F k0 i+ b1 T9 Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. o. q% a! K% z& p/ S' o if (pItemElem)$ M Q( r# }/ K8 J
{1 }7 L$ ^- z7 o' _4 R
if (IsUsingItem(pItemElem))" ~- a/ D f ]1 Q! s# H1 q: A9 [- P
{
8 L1 o0 A4 E+ O. y //这个道具无法移动,跳过; X; B5 l$ R/ h$ k- Q
continue;% l y: }6 E9 n; F* E0 ^" B8 J6 F& Q
}: U( f& t0 V2 K( X' c0 l/ e9 \
}else{! J( z; A& Z% b K& _2 L9 {
//空位置 不用动0 J( W/ l1 _! G
continue;
7 K4 c; Y$ f6 _' d1 n8 v }
2 ] E N0 }+ P/ U. L8 r$ l8 B //////////////////////////////////////////////////////////////////////////8 C- P% j- y l" G1 b2 g, x
//开始移动
& P) Y; a- B: \. A% q7 v: R6 m" ] if (nSrc == nDestPos), V- C* w9 l2 ]% c, D9 N
{
$ v7 T2 q. H7 \. Q6 D" b3 s( g0 K //原地不动0 f7 e$ [3 f0 B5 D O) P: q
nDestPos++;
6 L/ h$ j" f& S- [: P continue;. f1 w* T. Z1 K
}
4 k6 A& `3 l+ Y2 K) O5 I pInvSort->MoveItem(i,nDestPos);
# r, H, g: q% v9 q g_DPlay.SendMoveItem(0,nSrc,nDestPos);: D5 P4 a& e; M
Sleep(5);: p( c. d: C$ r2 q9 j
//Error("移动 - %d->%d",nSrc,nDestPos);
8 ~& w1 X# h9 i6 j7 f" f nDestPos++;
* W6 n. y! X2 h3 d9 r }& s$ X' }7 b8 t& G+ H4 c
//取第一个元素的信息6 U: _3 o/ _0 G' h u, l
/*
; z _) \! Q; a# Z) l: u' m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 }. \# u5 J3 |$ }* Y
{
$ o0 P* N& R2 Q+ B, E0 P0 v( u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& ~4 |1 G# z1 @2 Q @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% W' I/ k& T% e6 A. L+ q
}( {. @1 T: j, Y& {- u" B
*/$ X2 h! R9 I& ^& f g
//////////////////////////////////////////////////////////////////////////
+ H V8 O, K( I9 @, \ break;
3 d3 {0 Z6 A0 x# x }$ d. |$ n/ I, Y2 |/ }6 f
}
; |, n$ y: N5 @% @' z; B}+ ~% n0 P: F: w& G% G# `9 A" v
m_wndMenu.SetVisible(FALSE);
: u/ U$ D4 z# f4 K" B. |, t5 D2 h3 l% E" r t7 F7 g, q
--------------------------------------------------------------------------------------------------------: ~: |: m8 Y# Q7 i1 S q0 Z0 Y8 W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! z$ z" p# J E: X+ Z( J' F* L9 B{
! t3 y# U/ ^2 H- VBaseMouseCursor();
) y8 G" L, R, f; V}
5 ~# B# R) Z! ~# o在其下添加:! y. a3 s5 X7 H6 v' t6 {& U) W) `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 {( w {( {9 | o& O
{" ~; c( k# g; {( s5 W
m_wndMenu.DeleteAllMenu();, l/ N* i) s' s P
m_wndMenu.CreateMenu(this);
3 N4 _# U4 C9 R+ Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 g3 g: {: s/ e; A$ P I7 U m
5 q }- ^8 t) J) Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 p8 B/ Q. }" ]2 g, W6 @, }5 O{( Y) M3 Q0 H- {2 n- m7 m0 f) q9 V
//P以上级别才可以删除所有道具
- G& G% s0 d5 H9 V0 q5 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
s1 g! ~% m4 s. T* g1 E0 F}
; s8 P! V! I* F( bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 [& C, G3 \- z" i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" I$ f3 I7 b' G; R$ `6 Dm_wndMenu.SetFocus();
0 C: v; x: o+ B* @4 ^1 x a/ V/ ~8 u}9 u U ^9 I, Y( a
------------------------------------------------------------------------------------------------------------/ a: b4 f: o7 Z2 T4 b/ \: f/ P. _
*************************7 d3 \7 ^1 t/ d( k. f
WndField.h文件) f* g0 x$ n! u+ z1 s+ e
*************************. V# R- q1 R7 {7 m' K6 i Y, h
搜索:BOOL m_bReport;6 [: S4 w, M( f' {6 P$ }1 t
其后添加:. @' I% A$ j% l
CWndMenu m_wndMenu;
! v% \5 T6 j! C: G- x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, w4 F4 ? p7 p$ }3 N
其后添加:
4 P8 V9 B- ^+ z0 ?virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 x3 H- K: v& o- q8 q, o' b) b0 n& {1 ^
: U0 F \- J: M& `. Y F! N
|
|