|
源文件中_Interface文件夹下WndField.cpp文件
7 p9 o) W+ }- i N( A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 h* I6 V0 H4 _- P5 U" k
1 i0 ]) b, u" g5 n8 `" F' q
struct sItem
; Z, z+ A- `9 n9 I{
) o9 R9 h; w) B9 \7 l: a9 u5 j, S# EDWORD dwId;; I* X* f$ Y! T8 v' S) t
DWORD dwKind2;
( J# q" W5 A$ P; [, @DWORD dwItemId;6 e. i0 H2 }. a0 s% H P
BYTE nIndex;
% k4 t6 S1 x3 s$ PsItem(){3 S2 F8 @. |) i$ j2 C
dwId = dwKind2 = dwItemId = nIndex = 0;/ R$ X6 l+ K+ `4 i, D
}1 ?$ L" L% g4 d/ |2 n# ~' t
bool operator < (const sItem p2)- ]" A W. U6 r p5 J+ e3 n- l
{/ \$ i8 ]. ]3 Z3 B9 [
if (dwKind2 == p2.dwKind2)
- @! V' I* E Y/ {& r {( Z3 S3 u% x6 Z2 c
return dwItemId < p2.dwItemId;: b8 O5 P; ?' }7 S' e- @* A
}else{$ ]3 ?, }6 V/ w
return dwKind2 < p2.dwKind2;
5 n2 S) P W1 o+ w' x" I2 d5 t }# l# K) {* i4 Z0 Z
}
( N+ m; P0 w$ u, _4 {! q e# I: }2 Q' ?};- o0 Z/ [7 _; M [& y$ S/ }: C0 A$ i
class CInventorySort/ E; l7 o/ J# @: E, @
{
& D2 \8 P P ~public:& {5 S) x5 I# s1 N, C4 i
CInventorySort()5 U0 n$ k1 }+ o4 A* c8 ]
{& X& s3 X2 T& g1 y/ E
m_dwPos = 0;
: Z2 d- F& W3 C% P, A# b0 K( C}9 o7 v9 V0 V, I5 C8 d+ d& P3 B) U$ V
~CInventorySort(){}
# {: I2 ^- P) t6 r6 R1 C r, mprivate:
+ z- f$ L P) f3 P# B# S5 wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* I# s% v8 ?* r2 pDWORD m_dwPos;
! [, ^5 Z, k7 u3 ?3 lpublic:
7 Z! E' d# I- ?' `0 U' V, t, Q- o9 z" @) Rvoid Add(BYTE nIndex)
. A1 V/ P+ _$ T% n{
! s' ?4 L- W/ r M K if (m_dwPos >= MAX_INVENTORY)0 A, C& d4 O6 e; G0 M9 N
{# A4 @' s2 n& A W. e
return;
$ W1 E4 _$ w8 q2 f( [ }
# ?/ ]; p* ?0 S- k7 k m_Item[m_dwPos].nIndex = nIndex;
N6 H+ p8 Z: r0 F. l. Z% H m_Item[m_dwPos].dwId = m_dwPos;
. ]/ J$ `" E; w/ \% U# g m_dwPos++;
& p) J3 z9 K }}
5 w6 }1 U/ q$ I0 [4 L& w4 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' ^6 R) v- a9 m$ U6 ^ Y. ?8 r: m- E
{: ~0 P& h A$ [2 t
for (int i=0;i<MAX_INVENTORY;i++)
+ H8 F* x3 ]; J3 h U: i! ` {' e: n0 G3 t8 S
if (m_Item.dwId == dwId)
6 F' O, P4 m' w {0 s, ]( f# m1 o' a: B/ P5 p& ?8 g
return m_Item.nIndex;" t( q: ?1 ?, b, _- ~6 S
}
) M* ]' ?2 b& ?: A, `5 [$ [ }
2 C% \5 ~$ O3 s) O return 255; t& V: }6 S5 s# B, L
}
5 m E& I& e3 [1 w" z& {% Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. f6 {) U2 Q7 b3 b* @/ W" G
{
( u0 U- s$ e6 p- r BYTE nTmp = 0;0 N& q: z* i2 z) L
bool bDest = false,bSrc = false;8 w& f# l' `5 B$ e" ?
for (int i=0;i<MAX_INVENTORY;i++)! L: A7 l: B4 h) d0 s9 R
{9 M9 ]3 t8 M+ W2 H% @% F
if (dwSrcId == m_Item.dwId); ], Q( N0 \8 l% V6 T
{
9 {( o7 K. U# L b1 q8 R/ u //id相等 则 改变对应的dest和src) B- ]6 k4 f% {# R6 i0 M) M
nTmp = m_Item.nIndex;
# X' k& w0 D! M) [2 @9 s m_Item.nIndex = dest;& \" C7 }! {. C4 }. q4 j
}
1 E1 N: h( b7 c3 G }
9 Z, }! ? ` n r //临时数据保存完毕,交换开始; Z+ `- j7 L8 ^+ E, J' @$ N0 q% u9 E6 T
for (int i=0;i<MAX_INVENTORY;i++)
9 f# o1 m8 E* I8 G9 B/ h" z {0 q: u0 D( y$ v4 U9 h3 k1 z% S
if (dest == m_Item.nIndex)
" q. C! a5 @! b T- j r {
+ `; p* i) S b2 @ //id相等 则 改变对应的dest和src3 I2 B0 X2 X9 J/ N B+ H
m_Item.nIndex = nTmp;
8 B; K! N5 c7 h }
% @4 N$ y9 n% b( C k) N }: h4 ]. h; g7 P& e8 ~
}
9 w! B. [) D9 b$ f1 d) N1 C9 [};- h( e. R8 h' J( Y
-------------------------------------------------------------------------, X+ n7 _ i! k4 L8 I8 ]. z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* o; k5 j; F# w$ m3 L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); L3 I9 N% ] i3 S% U6 g
紧靠其上添加:# M2 f* H( ]- w q. {
if( pWndBase == &m_wndMenu )
4 t# W- i8 h7 e5 [, ]+ u' f3 ^{
: Y# a/ q8 \1 b switch( nID )
# X4 Z" _, I% k0 [0 h* a {# }4 D+ r* f$ b
case 2:
/ Y$ V0 y7 M& Z9 D) I: ` {5 n H. a% t) ^7 M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. ?* \9 L$ |/ R- M5 ^ {0 X2 `/ d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ` @% J' f' @( O- h2 Q
{
1 N, U m6 b4 I" i9 M# A; y break;
: f7 i7 S9 v6 W/ }( f }4 v4 l2 d5 T6 K7 q4 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 b/ D h4 m! U& @' S; H& i j {
5 m( e( D( y5 d4 i( N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 H. L6 e! y& r1 E" L0 F7 L if( !pItemElem )4 M8 F' x0 `6 v0 u8 `9 N1 X
continue;( ^% b0 m8 p2 N# O% i* m9 C. t
if(pItemElem->GetExtra() > 0)2 M5 t: c! l2 D U0 X
continue; i. E2 F; _) p* ?; y! y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + J* y0 p6 b8 x/ ]
continue;
8 j8 i" K; `8 a0 ^ if( g_pPlayer->IsUsing( pItemElem ) )0 I% l0 f) X( l) z* m( ^0 W
continue;
) X( g- @" F0 M- C) J. A. L4 Q. v- l if( pItemElem->IsUndestructable() == TRUE )
" T5 C1 N6 O( K/ V& h/ { {
4 B3 d8 | S4 @( x g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ \% t+ U0 z7 _7 P) Y4 Z7 J continue;
8 _" T/ i. Q8 n }
) \* g0 U) m" k, L4 c" d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ _% e, r6 e+ w/ s* e
}
9 t: ?3 a/ |0 g& G: k break;$ e6 K6 f1 h0 q+ k& P
}* |( \1 Z6 C }4 ?% L
case 1:
. Q# m: I0 a& t: P: u! C3 W2 l {
" C* t1 G5 B4 o! ~* Q //整理背包# R" L1 f0 z# w2 j
//////////////////////////////////////////////////////////////////////////
( X: C1 K# O+ N: t. d* l' G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 u/ V( T( z- R' m9 p5 B4 c //////////////////////////////////////////////////////////////////////////7 ?" K6 }( q. @* e$ k
//////////////////////////////////////////////////////////////////////////1 j0 j* a- f. ?6 s3 b2 A% ^) ]
CInventorySort* pInvSort = new CInventorySort;
% A5 b+ v) H' M$ v4 V8 c' `' T) m vector <sItem> vItem;+ n2 |( H. V8 `' G3 Y, K& l3 ]: a: r
vItem.resize(MAX_INVENTORY);//初始化大小* ]" v; X, D G0 Q3 U* ?
//////////////////////////////////////////////////////////////////////////
4 X2 t; ]/ w5 u& i7 ^ //填充数据- r D" b& f+ E% ^, M- M9 Q
for (int i=0;i<MAX_INVENTORY;i++)4 r, P* J$ Y, T- }: f
{/ c2 [5 t. J2 a4 P0 J2 T/ g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- z: Y4 Z0 B/ Q3 V
if (!pItemElem)2 V, \2 b. u. g) `3 p
{' f# O, f0 H' p( g5 F
vItem.dwKind2 = 0xffffffff;' b5 I+ R; H8 i. h3 M& B4 L4 e z
vItem.dwItemId = 0xffffffff;
2 N; u0 D; \( j( p }$ _ vItem.nIndex = i;
+ s/ V9 g' [' X# B5 K# \. e }else {6 Y5 m' h& {& n q& L& A
ItemProp* pProp = pItemElem->GetProp();- }( k8 ?9 q( l( t9 w5 t% A4 ~
vItem.dwKind2 = pProp->dwItemKind2;
/ L# N6 i, u( r( r' g ?' i! ~ vItem.dwItemId = pItemElem->m_dwItemId;2 f' j0 M9 I0 J' o, ~* G; T w% M
vItem.nIndex = i;' @! i9 j( S }3 P$ |0 @/ O
}- l' [& k2 i3 n$ h% ]
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% z1 z) q' a# L% j {7 C }- N9 I' f+ T5 o. B1 z
//////////////////////////////////////////////////////////////////////////* I3 y) w" _. o! k' s% h' h
sort(vItem.begin(),vItem.end());//排序
' q7 K, A3 D6 I/ ? ////////////////////////////////////////////////////////////////////////// P- v% w! H# c( Q7 T b
//交换
. u" @& \$ W4 y$ z6 F* w for (size_t i=0;i<vItem.size();i++)( \( |" A: W& }0 E: l& N
{
( N: W$ t; a+ H8 n+ U b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 h$ D3 H( j, ]% k% ]$ ~
pInvSort->Add(vItem.nIndex);7 _2 ]- O1 Q, o% \ g
}1 Z+ m$ S$ O- h
BYTE nDestPos = 0;9 b0 l1 A1 I# W5 N4 ~
for (int i=0;i<MAX_INVENTORY;i++) \& h7 d: n7 l+ A6 R
{8 V- S* e) \3 t' E6 E$ E. d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 B5 j0 @0 F: S m5 z
if (pItemElem)1 j2 g* h) v# p
{
6 H7 i; a- ?$ I0 D% k if (IsUsingItem(pItemElem))
: \4 R7 i, w% g1 z( \ {
/ P1 G% n; x$ X4 {4 A7 ^8 S //这个位置无法放
! B( F5 j6 m1 i' X nDestPos++;) i4 \4 F G" R& M5 ^! B
}3 e8 f7 p' M* h! D
}. U' w7 ^0 R" a ]3 H: F7 W& d
BYTE nSrc = pInvSort->GetItemSrc(i);/ D. p% N; k7 @& j, `" E3 V8 T' T g8 M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 t3 O% s1 f, ]" o+ [6 F$ ~5 q
if (pItemElem)8 w' c0 y+ k- o$ ]9 C3 D; p9 b2 P
{% R/ y0 r0 p5 A P/ G, E8 o# y/ F& O" [
if (IsUsingItem(pItemElem))0 h& C( l6 q: ~* h
{& ^' o1 W- a( |: \: M, U
//这个道具无法移动,跳过4 H6 ~3 R/ _- T. o, ^+ X
continue;
8 R& I4 A. h( d5 ^7 [4 V* N, s. ~ }
+ a3 L0 ^% O }- G; y2 l }else{0 p5 c& [* p, E" Q
//空位置 不用动- f+ i1 d1 A7 t- f: j
continue;9 e) t2 h: ^' J$ P
}! T9 j9 c$ N: I) k# g
//////////////////////////////////////////////////////////////////////////
`; _9 i3 b4 O0 r5 ` //开始移动. D& t8 e: b( l$ d9 x1 W
if (nSrc == nDestPos). C$ x0 a% Z5 c) `% J$ u
{2 K+ ], g& x2 K" Q
//原地不动# I. y& D9 B/ s8 S( I
nDestPos++;
) P" F+ G1 P) [' P- K* N; B4 o' j continue; ?9 a3 m6 d# f
}
" s. q# p' F& B1 g8 k B" x4 U8 f pInvSort->MoveItem(i,nDestPos);
" z" _' ?- \% K g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 L8 i/ s* n& y2 @2 k
Sleep(5);
' p& i' `* S* a //Error("移动 - %d->%d",nSrc,nDestPos);
7 A1 F7 L' l. j& L nDestPos++;$ B, n' o$ w' ^0 C% y( X0 r3 {
}
* h4 c: b5 F2 J2 f, p$ \3 I //取第一个元素的信息$ k2 u6 g' E: \$ C+ c
/*1 O1 p- ~+ a& r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 y l/ K: O' u {
1 v8 |+ P8 D1 i3 G3 ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" o5 M5 R* |* d" m" L0 p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; A4 b6 A* P3 A0 ^' J7 e+ U1 v }1 Z6 Z3 o \* y2 T0 g$ f
*/
5 w6 w: `" T2 C //////////////////////////////////////////////////////////////////////////
. n: Q1 g$ D o6 \ break;
|) G" G% G' }9 `) Z& i' R2 } }& N$ c' g( u% `* ^! e( O
}
$ {6 v$ \7 V _. M+ U8 O}
, e2 j9 {; |4 y' @# e4 k% Am_wndMenu.SetVisible(FALSE);
* l1 r6 Y4 X0 k# v* I
! W8 \: b4 m$ y--------------------------------------------------------------------------------------------------------$ h2 `6 _9 j c }8 J+ ^% C
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: n. B4 ~# ?+ w7 X2 K{
5 ~. i! Z7 C( ?BaseMouseCursor();8 N0 T2 L. p0 A0 `1 L/ u/ i# Q5 k6 u
}
1 p% f4 s+ j2 F5 W& e$ R在其下添加:; q2 L9 b* [' Y/ G5 Y) z; P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) P! ?7 c+ X( b A4 P
{3 c( `: l1 A/ \
m_wndMenu.DeleteAllMenu();
! q1 l: K: f( L* Vm_wndMenu.CreateMenu(this);
. O7 e5 O9 U4 K, f1 f$ r4 hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) ~ C) I4 U4 Z0 X5 J4 L- | D B r7 }! M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# I: h( W4 O2 X H- b& \2 K. D
{
' m& Y! |$ Z0 m+ O9 I$ Y2 u# T4 U+ o //P以上级别才可以删除所有道具
( ~1 v; s$ K5 R* X, ?6 e6 U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 m: O- n7 Q j o# f- o7 C+ ^}
9 N- L H, u+ R1 O) pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
_/ {3 K7 C2 L9 I3 M% C3 Q% l2 v3 R, ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); g2 J' E3 H0 y3 [( b( @
m_wndMenu.SetFocus();0 |6 s, t0 a) v) ]4 _/ @
}( ]! Y" M0 ^5 \; g5 C( F
------------------------------------------------------------------------------------------------------------: E% R, f3 j: l0 S1 T) p5 d) |
*************************1 P3 g, ^0 P- ~& O. n+ @/ i) c
WndField.h文件+ N5 q: m7 S" O9 F4 ?& T
*************************' Z0 r8 f' Y6 C# C$ Z( _( k
搜索:BOOL m_bReport;
; F. o+ g1 ?6 s) K' g3 x& S0 I1 p其后添加:& T9 L7 h( I$ C1 n! [9 |- F
CWndMenu m_wndMenu;
0 P) S/ C+ z/ Z6 P5 `# w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 b4 K9 A, ], F: _" ^( _7 f
其后添加:
; v( ~' d% n. x1 |$ w( svirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 ~# l# P2 U+ H$ T( z9 d- @' o5 U; G) h* y' r* H! r! ?% I7 U
" ]" s$ Q) O7 O1 Q |
|