|
|
源文件中_Interface文件夹下WndField.cpp文件) L* }% I# b. V7 g3 F) ?1 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- J/ H! c! P. E: ?: [" R' \- q
9 ^/ N* F) |! B9 K F: Pstruct sItem" E2 o5 M9 d9 e, c. D
{$ v! \" J3 p$ I- B' B
DWORD dwId;
" [+ e% E+ ~, l) B- WDWORD dwKind2;
# Y/ a7 L3 D- y9 R& ]( T2 ]DWORD dwItemId;
- c& c' ~4 M* q5 UBYTE nIndex;
; D0 c8 Q8 T. ]* v, ^8 T0 TsItem(){
* t+ \$ X u% S8 o6 Y& ] dwId = dwKind2 = dwItemId = nIndex = 0;) v- Q' r$ \* j; {2 S
}7 v9 G9 ]* I- o' }
bool operator < (const sItem p2)
. l6 z# j' e2 r2 Z: P7 h{! t/ E* F' |% o3 [# }, H
if (dwKind2 == p2.dwKind2); i- n: Y2 K2 @
{
6 H) _+ R2 [* p! x" [ return dwItemId < p2.dwItemId;
8 j1 A2 }# Z) d- ` }else{
' o! X) a% U4 X7 ]8 o9 r9 s0 ] return dwKind2 < p2.dwKind2;% N9 J8 N6 m! `7 ~
}
% X- e1 G' h! ^0 M}! c# i' S+ d/ t" V7 Z9 J
};
6 H" U0 M W: W# j' Rclass CInventorySort
( j( K9 x, ~4 |8 E# a{' {: o' ?5 Y5 U7 r1 u; [3 `
public:
% l# p) G* m# ~CInventorySort()
7 d% V1 g! E& i0 d( k1 W3 A{
3 b2 }" K, Q. k5 N7 q9 O m_dwPos = 0;
& o5 {: ^9 J! ~, B}
6 W: t- @5 Q5 ]~CInventorySort(){}& ?# x4 V' {- | |' h
private:
% T7 b. m W6 c2 CsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 D, I$ k+ V3 t9 {$ E+ m8 W
DWORD m_dwPos;
8 E1 h9 A; U+ W( w. Y3 rpublic:5 M$ A4 G; ^5 [3 ~. ?# V. q3 k; k
void Add(BYTE nIndex): E) ]4 o: T! P$ L( G2 I
{! M9 B1 ~7 |$ h
if (m_dwPos >= MAX_INVENTORY)2 u' {& f9 a) T, i
{6 N/ n/ @' [7 q
return;
9 D7 c. t; Z5 y+ U9 f* ^ }
2 y8 C x0 o6 Z5 b8 j& a4 s m_Item[m_dwPos].nIndex = nIndex;. |. I. ~9 T+ ^/ c. }, h, P: u% V
m_Item[m_dwPos].dwId = m_dwPos;7 l( X& G2 g4 V) X$ p9 J3 [" H0 T/ T* r
m_dwPos++;9 C# C; o1 m! ~
}2 R3 d) j1 A# h- V, F* v- j" H2 I: `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 o) c; G( [: ?5 H4 f) r3 T
{2 ~ c' E# j( S5 N! ?5 X
for (int i=0;i<MAX_INVENTORY;i++)
) P4 b8 @' u$ A$ e' d {" v2 U, I. S0 f0 o# V
if (m_Item.dwId == dwId)
4 L8 f2 V: t" v9 V {
/ w$ b* M5 I9 ^6 V9 j" V return m_Item.nIndex;
( U! V1 r* \5 d; E }9 t8 {1 k1 J( O. W" s
}
( d1 w6 }' F" y4 O$ C, K return 255; b, O8 R5 _7 M$ t G
}' @6 Q T! z3 f' T4 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 G% K4 P6 _6 {) B: z( N) H. O
{$ p9 \* A# u# |6 O
BYTE nTmp = 0;+ p0 C: D5 ]: b8 @! F
bool bDest = false,bSrc = false;2 G) X v0 [4 `: {: g# J6 q
for (int i=0;i<MAX_INVENTORY;i++)- v2 g# a1 |2 D& w, l
{/ ]& k, d; R2 v: ~8 p @5 {8 n
if (dwSrcId == m_Item.dwId)
5 B; x8 L( {0 f+ `: j/ k9 a( W9 E n6 C {. J4 }2 O1 G+ a. d& U
//id相等 则 改变对应的dest和src
6 k, s" E7 f! _- \5 O; ~8 Y nTmp = m_Item.nIndex;
' ]6 c! c6 W: W( r6 ` m_Item.nIndex = dest;! [# k4 Y7 H. \) X( @
}* X0 u* @! G4 Q1 L: k- G
}3 H6 g( E# O0 I
//临时数据保存完毕,交换开始$ p8 O- @0 [# T# o8 O! x5 C6 s
for (int i=0;i<MAX_INVENTORY;i++)
$ t$ r% o+ X9 y# L/ K) Q- X {% ^: J( a B7 U% c* E, I
if (dest == m_Item.nIndex)
4 j7 j* H# _7 G# A: k, m% D {
+ t; s0 \! m" k* o, c; f+ \6 Q" K //id相等 则 改变对应的dest和src* @9 Q6 K# l. O2 c& |: n% I1 o
m_Item.nIndex = nTmp;
9 |3 V* s N& H+ F }
, p% G0 z; m' r1 _* x }
+ N% k. i( \, g( i0 S: e9 A}
4 K2 w) B; y o8 m: Y* Q};, d: T" c# m; j# X8 P7 W6 z8 U
-------------------------------------------------------------------------( b3 d+ V! |' p$ H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ ~5 j- |: F) e& }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ h/ K M o- G7 M3 v
紧靠其上添加:
5 ^' C6 q1 ?& t" k3 |) j. gif( pWndBase == &m_wndMenu )9 h, r" b4 J7 R, { S
{
% _! w2 Y0 \4 E4 [ J9 U4 R switch( nID )' R) n9 O5 m( D3 P! F6 m9 U$ i! u* }
{# k- @. q2 {. }8 k3 M8 r0 V
case 2:! l0 o- y% f+ m
{4 B O/ E+ d1 x' t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( M1 C2 p s) N" `
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 E N% z/ {7 b! r' x. z {4 r1 j, v2 v6 y! c0 w$ |
break;
) V. d8 k- ?2 r% X" U8 t; y, Z. ^ }) m5 S8 `( ?# T' D) G8 F
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 y" I4 S P7 E {& \; p6 {4 U* H. ] c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ x: {, J; I% A' C$ K. c
if( !pItemElem )4 E" y. M( f4 a2 R' b
continue;
, H2 f; d: s5 a, X. I8 p/ B7 p5 h5 Y if(pItemElem->GetExtra() > 0)" x3 N6 j. G( m' r; C& ]
continue;. ~: L9 c v7 h4 B7 H9 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; H, C' {0 o; h- ]) [' U1 @
continue;
. x( b! ~0 h0 ^2 s6 s if( g_pPlayer->IsUsing( pItemElem ) ); V$ k' S& z3 j5 s7 [9 [
continue;
* X; \! K+ m) H& v0 a; F0 W6 S k* R( g if( pItemElem->IsUndestructable() == TRUE )
" V' f" D- [5 ~ {5 J: M! ]: H0 D+ q j, R" A( u* r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 {+ X* Z% c0 ^2 t$ h
continue;; N" L" Z3 Z; m7 l" c
}) S7 O0 K# [$ c; X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' B4 F6 }& A7 N7 b8 {1 ^" k; _
}
! R3 Y7 w/ x5 s break;3 p- b7 q* o/ d9 `4 E9 d
}
X$ H" s1 R3 Z4 m4 s0 `+ P case 1:5 c( V& z) i% x
{1 y6 F9 b! z) O2 O
//整理背包* U' v+ I; X; |% J/ E6 U- m" W9 x8 N
/////////////////////////////////////////////////////////////////////////// `" e+ ?7 B, ?; c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 J5 }' k, ]$ Z- g4 @ //////////////////////////////////////////////////////////////////////////
) M* [: F. B5 q3 ^: j$ @: d //////////////////////////////////////////////////////////////////////////
4 L) O5 E6 B9 U3 V CInventorySort* pInvSort = new CInventorySort;* t/ G) Q8 G. F7 }( Y
vector <sItem> vItem;
* }' N6 k0 }0 P vItem.resize(MAX_INVENTORY);//初始化大小6 Z) v9 E- Z* ~+ `! Z
//////////////////////////////////////////////////////////////////////////; ~) x- R! z7 N; C- Q
//填充数据8 x$ h- q, n: t
for (int i=0;i<MAX_INVENTORY;i++)
! R, F0 {3 r) u/ f% G, p1 e {& k. p+ Z& [% S( T* C' W6 b0 W# X. t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* |2 p: j- I+ I: L
if (!pItemElem) [7 R0 o% J* k! e. I5 @6 J
{
; N9 ?+ R& }/ k4 }! b7 F vItem.dwKind2 = 0xffffffff;# h7 s, t' ~: F4 W
vItem.dwItemId = 0xffffffff;; e, h. e) Z3 k6 S' @1 [8 }
vItem.nIndex = i;( T9 f% B/ K: x
}else {
( H1 Q" M/ {; V+ l ItemProp* pProp = pItemElem->GetProp();
( {; y# M8 @, q' u2 N8 R vItem.dwKind2 = pProp->dwItemKind2;
; O8 [4 z0 Z: Y vItem.dwItemId = pItemElem->m_dwItemId;& W. O1 a8 H# @
vItem.nIndex = i;
C$ @7 Y0 B y+ E9 X& A }
- G1 @' X3 z2 H: [3 I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% c# a7 H- ]; A
}9 V @3 c( D% ~0 a
//////////////////////////////////////////////////////////////////////////
3 V' ?) e# g6 i1 |" b sort(vItem.begin(),vItem.end());//排序4 u$ K$ C0 f4 Q7 \# `/ A
//////////////////////////////////////////////////////////////////////////
8 S$ G; [( z) g7 l: N* y( @ //交换
( e8 U4 B" M+ o# T5 U5 b$ ` for (size_t i=0;i<vItem.size();i++)- @ V- L; y# b3 n" E
{
u; I% M- M$ Q6 X- z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# t! l/ ]) l! w; F* J4 R pInvSort->Add(vItem.nIndex);
- S4 S: T' O* ?( U }# v" d& S) S; k# i! l
BYTE nDestPos = 0;
, R9 z- [( o6 G! c' J3 b* P1 P for (int i=0;i<MAX_INVENTORY;i++)) ^5 f& q" C& j, N+ P5 y7 L0 S' L& B
{% [5 d0 H* q2 J ~3 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* ~1 D2 J3 E, G3 D4 x9 P if (pItemElem), c2 X- o. ~( I0 @- \
{# t+ s4 Y" C7 r+ N
if (IsUsingItem(pItemElem))% u$ w( |' ^# ^
{
/ p! e% z4 F$ U //这个位置无法放+ r3 i/ ]" U& `, w+ [
nDestPos++;
) J7 V$ Q9 E( h$ V0 { }8 O9 u) B4 X) h R2 L& q
}
- y5 O$ c2 t% T) ~: v/ j& a BYTE nSrc = pInvSort->GetItemSrc(i);
' Q. u8 I. v' v* Y" ~/ \, } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 d5 p" k- r0 D7 A# S) \2 X
if (pItemElem)
$ F% q/ \+ h% u+ t/ p {) l$ `. F/ Z: U8 Y
if (IsUsingItem(pItemElem))
3 w; `7 r, j6 p: g& c1 ?1 s" V {# r, ~/ z4 _- l2 O
//这个道具无法移动,跳过$ P' a& N- g8 h$ [7 p ~1 k
continue;/ o2 r2 q5 C9 l# t
}- n; W/ I. N' b8 c6 [
}else{$ ~: M7 o+ J8 i* K
//空位置 不用动
0 c9 t- w6 A2 C2 g# { continue;
: h5 D- U; X# Q7 C; E }: Q8 Z9 A4 T1 D9 P, O# F# c2 s
//////////////////////////////////////////////////////////////////////////! O! ?- l$ l- D0 S& u1 H3 f$ S
//开始移动
( U( i! S1 g4 I if (nSrc == nDestPos)
7 `2 W6 F5 I. m" J {8 b4 d0 @- ~9 c) }
//原地不动9 k7 ]0 e4 W7 Q1 S* h
nDestPos++;
& ~; v. s+ Z$ F, z- t continue;
6 ?2 C* c# l+ o5 w$ P' p' j B }
3 u W, r; V' [ pInvSort->MoveItem(i,nDestPos);8 }2 ]) O+ h% X5 b( V( B2 n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. s1 `& h4 p) w S
Sleep(5);
7 V" C: h- V, B# j //Error("移动 - %d->%d",nSrc,nDestPos);+ l5 u) l7 J" Y4 y+ ]4 w- W
nDestPos++;; {3 H! G+ o+ J. v$ g
}: y# Q: S" n" r, S' f
//取第一个元素的信息
+ y6 B- ^8 h2 W0 h! a2 D4 P& U; ~4 ^ /*/ E" V% T4 p/ P; v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( D, d0 @2 X# D: A
{
+ S0 g- Y' g1 l1 d( y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- c" b o- x* H3 ]* g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; u+ z5 z: o2 r: P& m }7 d; Y* T+ [: e' |0 O
*/
, |4 w( E# U! d& V0 J% k //////////////////////////////////////////////////////////////////////////& `" L4 g6 ]6 S0 L& j! t
break;
# k: {" m7 A1 D p }9 C7 e$ H& E' R# u8 i1 B
} 7 R, o( D9 y$ q2 u" l
}' h/ i& ^. g) l8 B
m_wndMenu.SetVisible(FALSE);6 v M; N2 g" z: D6 W
5 N- e* D7 I, V
--------------------------------------------------------------------------------------------------------/ C+ [; \$ _8 T- B q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 X) x+ b/ z6 V! v8 I4 ^7 Q
{
7 e1 P( T* ~7 q- \0 D- RBaseMouseCursor();
" t$ H; J' M6 p* \}
7 _4 p1 M1 E+ c# Y& G5 G; a在其下添加:
# k2 h8 ]$ E8 [. P8 ?4 S" \' Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* D' C! w6 U: r1 h5 y{$ |/ g( T# L+ w- m7 E9 U& M
m_wndMenu.DeleteAllMenu();
7 e! R2 w2 K, y9 z3 a; Um_wndMenu.CreateMenu(this);- E7 I7 o. |' `2 o5 x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, z/ p* d' h. L b- k( ~1 j5 U
. _! |3 U3 P9 j# gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 M! @7 J2 l8 H+ o1 n' A6 s8 x{" x8 D c% g; ]8 v% G/ O
//P以上级别才可以删除所有道具
2 w' H: H4 b2 C7 t" E1 x8 s' | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) L! |0 b0 i" D9 u! w, w}
+ I! q6 ]8 c3 q0 a# Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, C% s+ [. C+ {5 i0 O' C2 ?. Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& s3 @# a1 Z& i6 x) B
m_wndMenu.SetFocus();: z3 V7 r/ v/ v* a# n
}
- O# n3 [# {6 d4 K% ]# s------------------------------------------------------------------------------------------------------------
( Z; Z6 v0 e/ u5 ^1 X$ V*************************
4 B6 r& l8 R) r0 f* pWndField.h文件- N( r# b5 R# ]# g+ }5 [3 `
*************************9 R$ i( O: N2 ~! T/ f
搜索:BOOL m_bReport;
7 L) J5 [& I) n1 y0 Z其后添加:/ Q/ P0 @$ f! \' W8 v
CWndMenu m_wndMenu;" N; J }- d8 b& {6 s6 M" K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; C8 h3 i' x% ]" U其后添加:
; c" W, P+ X0 ?( [! B1 f uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 z, A, K' x/ Q% w
! x" B8 R+ w/ s. D7 u5 D
* s, P. O0 l8 E. ] |
|