|
|
源文件中_Interface文件夹下WndField.cpp文件1 J7 L& y) E t) i6 \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ z, h9 M3 j2 `! f; ?' ^ y4 G8 n5 Q6 I7 V& ^9 j1 z; ~2 X
struct sItem8 ~" e4 o& W/ u& E- R, L: s
{
% Q& @, }+ D( r" H7 v) eDWORD dwId;# {: o Y! ^, V7 ]+ x
DWORD dwKind2;+ ?& L1 Y" W+ f% Q
DWORD dwItemId;
, B# w0 }* `: S- V) F* D( ?BYTE nIndex;
, S+ x* C5 @3 l W$ h* F$ SsItem(){8 z; P( U( ~- L9 }1 M1 Z2 K9 g
dwId = dwKind2 = dwItemId = nIndex = 0;) j6 z7 p2 Y5 A5 @
}
; @! r5 j1 ^; o/ J! |& g9 u; M* qbool operator < (const sItem p2)
; ~- k) i3 T6 k: }{
' o# @5 {* ~! M if (dwKind2 == p2.dwKind2)7 A5 o6 }9 y7 ~
{
8 J# x2 D2 s9 ]+ E: G return dwItemId < p2.dwItemId;
/ }9 l( s5 t, G4 e }else{/ J) m, ]/ R+ O- a
return dwKind2 < p2.dwKind2;9 ?/ j; E3 B( W$ q# d- B
}
4 `& \# k I5 I/ p; O5 g- w}0 E) w; f1 k) E; W8 z
};+ N- W8 x$ t4 N! p) U$ J
class CInventorySort2 N* v# h G& o J( U: U
{# X4 ~( i" o+ a3 h
public:- L5 c6 C5 u% [! o0 M! e
CInventorySort()- F$ s6 k3 O2 u9 F! N
{) {& z4 T. q: r4 e F( U- R
m_dwPos = 0;
# O5 O9 e: @% l9 |}/ ] Z3 i% o9 b7 T1 F6 Z( y
~CInventorySort(){}
4 ^$ V0 F/ @$ C0 _( Xprivate:( H6 K3 Y) W# e4 |: I0 ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 c* K( Q3 o5 W4 y" ODWORD m_dwPos;# ^: V, \ S/ b8 ?' @
public:1 [1 d+ ]" j7 b2 e
void Add(BYTE nIndex)+ Z- u! T- A: z3 q0 q2 B
{3 r! E. k8 \* ]5 z
if (m_dwPos >= MAX_INVENTORY)
. v7 I8 j5 E' ^ i {
. V: x" Z. q- }' T1 f0 m5 ^ return;
) q) Y- s/ S9 E: q }
9 D) k! X' q: E5 D0 u: [& U2 {# P m_Item[m_dwPos].nIndex = nIndex;) q4 u1 }9 z; e9 }( D; `+ b1 `
m_Item[m_dwPos].dwId = m_dwPos;
5 X; g- b; k1 V' O9 V7 o2 u m_dwPos++;* I, J% s, J# {, ^
}* ?, u2 x& k% H" S& M. H5 w4 d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& F: _. f8 G' u) P5 n U{" t) ~0 ~% S! g# K1 b$ d5 W
for (int i=0;i<MAX_INVENTORY;i++)8 Y" z! P1 F* O0 b6 n+ Z
{
2 ~. h8 W- Z/ p( s+ l. ] if (m_Item.dwId == dwId)
2 Q# r1 }' g6 W. ^* s$ t2 x {
6 p8 _4 g- U/ `, d: d8 m" a W! N return m_Item.nIndex;
4 K. h! @4 L5 u% S& \" D- u }
# k0 [2 ^" t8 K# S- I% f4 L }
2 K! R: C j) Q5 b+ F return 255;8 b9 e d4 j; z! i: Q
}
6 `9 W0 h+ K2 u" e' Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" ^$ C8 O# N; y5 y: I8 o{
* ~& u3 o8 [9 H5 _5 Z BYTE nTmp = 0;
* ? L/ n4 z, B2 P- |4 u2 Z/ f bool bDest = false,bSrc = false;
$ Y; N, U5 w0 a i for (int i=0;i<MAX_INVENTORY;i++)
5 L9 V- h/ o+ P8 r% d {
% ^# D9 }: m4 @/ p if (dwSrcId == m_Item.dwId)
, C3 [ s+ F* f) M! c; E {
/ m2 u& s' b* V! ?; l //id相等 则 改变对应的dest和src; o( G! i& f5 z: ^
nTmp = m_Item.nIndex;
, K. @% Y0 x, T" i m_Item.nIndex = dest;
4 n, ?7 l! y1 T( N/ ?. H' R, { }* M4 J5 V$ `: }! X
}; A9 a; Q! a/ j7 Z* G# Z" \1 ?
//临时数据保存完毕,交换开始; d* t* K M5 f
for (int i=0;i<MAX_INVENTORY;i++)
@- J. j/ Q8 Z2 _ {
4 c( o" u4 M. K$ N3 n4 X if (dest == m_Item.nIndex)
' J7 y/ z; A+ K7 L$ d" [# \ {
4 S: E1 ]9 F. t z' ? //id相等 则 改变对应的dest和src
' a* x) R7 J' x( e1 x m_Item.nIndex = nTmp;! D5 D) B6 i2 i5 P
}
+ r0 e$ _. M; u' Y' K }% Y) f' N7 f+ d- E4 v- u1 J3 ~
}9 M! r( Q5 T A, P8 A2 g* M
};& P( v; e k1 ^6 M- f. U
-------------------------------------------------------------------------
9 P" w9 Q$ A7 X0 {- e; ], t- N% E3 _) ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- @+ T' @% W* F, h4 a7 v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 w+ @3 ?9 R# v2 R紧靠其上添加:
" f- J& H F5 Q Qif( pWndBase == &m_wndMenu )0 P9 X7 u! N9 j% F
{ t) D3 T7 {9 Z& I. R* C
switch( nID )
, ]7 [: J, J3 e0 }, Y# T {' z- B) W% I3 d2 R' s: u
case 2:
/ ` j* p! P( @4 U8 d8 ` {9 T4 F3 Z, I( n9 S0 [& K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ P9 S3 a% i1 I+ j" F9 K% [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 `! e# S( r% K
{* W k' g- `' l. I9 l: ~* K
break;
5 V X0 h4 ^. v4 [5 b9 l8 I }/ \9 ~ L3 @. o4 C9 S* R- Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 ^4 j) H+ v7 Y" _3 a
{
( M; \0 M- h% U- G( x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: c- x+ ^4 S5 R* S
if( !pItemElem ), a# l4 f% e9 i
continue;8 x0 G+ H) i. F/ l2 K7 `
if(pItemElem->GetExtra() > 0)
+ [7 W% r4 z7 }. \# D continue;
! s. ~+ ?. x- R4 s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 c7 @& U& | e5 V6 [# O- Z continue;
3 t6 g) I7 A3 B( P/ d if( g_pPlayer->IsUsing( pItemElem ) )# d2 L5 L5 z3 b& j9 p
continue;4 O% b2 J7 [/ `8 c9 E1 w9 S D
if( pItemElem->IsUndestructable() == TRUE )5 T+ q2 c8 @7 g
{
+ {6 L: L" F& t9 O3 ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 A' |8 c& \' Z" N% _8 C
continue;, ]4 G4 @. u- m! ^
}
' ^: O7 S X- a4 p- b# I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 E5 [$ r& Y/ N1 `7 _5 T8 @ }
/ L; J8 S9 o& U [1 v# r& Y1 Z: K break; m" [7 @5 @, X* _- h5 E
}
0 t: C% R- a, ~0 k case 1:+ ]% J* d3 b" T
{
* G% Z+ F* B1 M$ w //整理背包9 ?6 I( p) O5 i* P: @
//////////////////////////////////////////////////////////////////////////, M* z) O; h# q' f! J5 A k: l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 S. u) K# ]& Y2 } U" m. `
//////////////////////////////////////////////////////////////////////////( X6 r7 ^& z+ ~
//////////////////////////////////////////////////////////////////////////
& d1 p3 f- M* b7 U CInventorySort* pInvSort = new CInventorySort;
5 j0 D# ]0 ?3 T) b vector <sItem> vItem;! y: } c1 W# F/ M! c8 [( m
vItem.resize(MAX_INVENTORY);//初始化大小6 J. v7 S, i; q8 M: e8 ]8 |+ q
//////////////////////////////////////////////////////////////////////////
8 f7 s+ u1 w0 M2 F+ D' x; s1 S //填充数据
! [3 I. J$ e' l& b$ r$ z for (int i=0;i<MAX_INVENTORY;i++)
6 ~5 u) W+ B9 i9 v5 K8 ] {6 B7 @6 e6 s1 e% E& p7 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" _1 v2 i0 m% T) a+ Q7 [! R
if (!pItemElem)" H2 b3 R- A2 f8 U5 u% y
{2 J q/ s9 f) r. u }
vItem.dwKind2 = 0xffffffff; D7 u" ~; U2 Q4 U. C
vItem.dwItemId = 0xffffffff;0 J8 y+ I9 q0 b- e Z
vItem.nIndex = i;
& v* e7 X$ X( x* n1 i# Y }else {0 y j+ g/ ^8 S" c: H- ~+ q5 N0 }! ^
ItemProp* pProp = pItemElem->GetProp();# \. U/ c. ]. w% f# P+ E
vItem.dwKind2 = pProp->dwItemKind2;# ^+ X% \ J2 {3 v
vItem.dwItemId = pItemElem->m_dwItemId;
( Q& [# j @2 H Q1 F8 u# [ vItem.nIndex = i;
+ w9 G I! j3 X! N }1 c% y1 ~7 l% Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 }& F' f" M2 K; @1 @
}) J$ m% h5 f& e4 s4 l5 q
//////////////////////////////////////////////////////////////////////////
+ Z# _( Y y8 { sort(vItem.begin(),vItem.end());//排序
( b; X" [$ P3 a8 N# r6 s6 ^3 D //////////////////////////////////////////////////////////////////////////
/ v8 `" j2 |3 a. X* X //交换
: f9 O- r, ^( E2 U6 R0 V7 R' E4 S6 P for (size_t i=0;i<vItem.size();i++)
5 E% Y3 \$ V4 l% y {( |* w1 Z+ h6 r/ r, p6 j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 b, {( g2 P: y; m, j pInvSort->Add(vItem.nIndex);
' s1 V" D: Z4 T' [! e0 g/ a( b }
& D3 C& W3 f- A# U A( ~' K8 J4 i D BYTE nDestPos = 0;
+ c, l# M0 v' P' k for (int i=0;i<MAX_INVENTORY;i++)
+ x/ [9 L. q! D6 z5 F' O9 v {' i! w% f* j0 v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. L5 V6 E6 I1 Z& a0 v, a
if (pItemElem)
) l; [6 w. Y2 @! p' l& B( l! R {8 M- H. J& z, |
if (IsUsingItem(pItemElem))
; C d9 V" c9 F+ i& h% R$ T {( a8 T s, y3 Y- q5 F
//这个位置无法放
' l- t& J" h2 Q" h6 v# w, _ nDestPos++;
1 |4 U/ P1 b o. N: j' N* Q }
5 D5 X6 [$ | E( O7 F* R }' x, L4 s p2 o4 a
BYTE nSrc = pInvSort->GetItemSrc(i);
% N/ L9 w; |7 S+ y& o! S/ c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 | g6 W9 _2 \$ r# N$ u if (pItemElem)
% K. L) I! j$ y4 H( ~- y {: N" b( y" S' u8 R
if (IsUsingItem(pItemElem))8 e' f5 j+ `) P% N2 `* O' M9 c
{) h( A2 r$ u& D6 @0 x2 O' D( z: ~+ @
//这个道具无法移动,跳过
3 \6 c# |* I& q! \ continue;" E9 E d* ^7 _- _6 a2 Y
}6 ^7 d) K( ]9 ^6 D
}else{
% O3 \% P: g; [1 o8 K //空位置 不用动! R' z2 D. G; c
continue;
$ w/ R6 n5 t, [7 A# Y }
5 c: p! [) g* ?, C( q //////////////////////////////////////////////////////////////////////////
' ]7 q, Z: b0 I, v+ a! t: K //开始移动
$ l+ @6 i1 c) c; H& o9 t if (nSrc == nDestPos)6 C) J9 {4 p1 G& e. J
{
6 ]4 f; O" c- W- n! `1 C/ L //原地不动) w; D4 J& [/ x9 b8 p6 `% O
nDestPos++;
. [- p* R0 D ^/ i' N x7 ?4 B- o continue;# @+ \4 L/ i* N. l8 N
}; ^% x# Z" j& K" U5 u# g3 I
pInvSort->MoveItem(i,nDestPos);- Z8 `, u5 `/ E/ m6 z" f8 W. f' n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 q& n. U0 C$ i
Sleep(5);
* |' ^4 p" i0 Q# g+ w //Error("移动 - %d->%d",nSrc,nDestPos);# S+ F( U5 S/ o8 H( c- B6 D- o( P
nDestPos++;
/ C( h8 t2 Q# { }# r) B# A1 f# _/ D' t4 K
//取第一个元素的信息5 d" D1 @ S1 N% p/ J' f
/*7 J$ I: T" z+ p$ o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 y- w Q9 I- K7 J% x7 n1 m% ` C; V
{
2 @1 m& A: S* {- |1 D Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& y% p# c. B/ z% }: F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); c* b- }4 x, q6 p4 O( B
}
2 a/ C: c& o! Q3 A3 ? */
6 L, E6 i7 r5 V( A9 {: g1 \: ^ //////////////////////////////////////////////////////////////////////////
9 p* C6 E/ ~6 B* T$ l break;
" n2 F8 u- l+ o5 g, M6 ~3 I# }4 e }5 g. R+ R$ e ^/ r9 @; I
} + B" _6 }% F, M" \7 d Z
}/ _3 ~! t) y9 G/ { L! ]% D
m_wndMenu.SetVisible(FALSE);7 C& e: @& k5 q4 |
2 W3 _ @* N% n" d9 B--------------------------------------------------------------------------------------------------------1 j( |$ g7 m! p; Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 d- U. Z; N, ^/ Y+ i! d a$ T{' J) r0 f6 q5 \; h& z
BaseMouseCursor();1 @% j$ H" E9 F% f( P0 e- I" T
}
- Y4 `* h3 F) o9 Q5 J8 w3 Z* _在其下添加:' i9 F$ y& Q9 y, y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ]( A4 F1 i0 q2 `9 O
{
2 H: R, m l- m4 Im_wndMenu.DeleteAllMenu();- K8 i* ]( ?( Y+ {
m_wndMenu.CreateMenu(this);* u, v% H' e7 k6 c$ W7 m. x2 K' g/ i
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. X& O5 Q8 M6 Y/ U) y2 z
3 l: c8 B0 x0 K" N/ J' Z0 Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 J4 t- Q7 ~$ j: i/ [
{
4 t! w2 A* [% L6 y //P以上级别才可以删除所有道具
! P. `- b) z; o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 q1 L) a3 u& y" o) [2 g/ o" ?* F
}' R% @" L- ^" n0 ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 u5 X% K. W/ x$ K" U4 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 h [# w8 i* [) R: Fm_wndMenu.SetFocus();. P4 M5 r+ |2 Z
}7 v- Z1 c, ^ K4 f2 k0 J* \
------------------------------------------------------------------------------------------------------------
2 n& E8 r; I8 S z*************************3 F6 ]2 e. O; Z" F
WndField.h文件
2 ^; k4 v/ D) Z$ [8 x1 |*************************9 t% R# d4 k* C% Z7 Z
搜索:BOOL m_bReport;
( L9 f% }! I" X: M/ i其后添加:3 _% H6 G) W w. a6 g2 @; o
CWndMenu m_wndMenu;- U) W6 Y$ m* ~+ I$ L. | I; ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ g5 {7 D: k9 a; N1 [
其后添加:, m$ f6 t O+ D4 c' |8 d4 y
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: M( r: \& {! y F' S9 D* C* k
9 P/ F ?" L* [7 R
, m4 M/ o( n& c# {+ R# q |
|