|
|
源文件中_Interface文件夹下WndField.cpp文件0 F7 B, E2 S* P6 _1 e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# ?5 `4 j6 S; |) D) ^
! M0 z9 a5 Q3 i0 s/ Nstruct sItem* Q3 G+ e% E! j, ~6 X4 z/ p7 f/ }
{1 }3 B9 k" M% n: z; F* L
DWORD dwId;( ~4 i; \7 w5 v2 V
DWORD dwKind2;
/ J8 p. f; }+ e8 f& A8 Z( W, \- UDWORD dwItemId;
# a% H9 j7 V7 r _* `; _' d% {5 S u4 NBYTE nIndex;
1 Y$ `7 S, p: Q: R. K, e1 }sItem(){
8 |' J3 D6 ?# |7 D3 b dwId = dwKind2 = dwItemId = nIndex = 0;, k) w9 L9 \4 h$ Q0 X
}
6 u' a$ K3 n: i" B2 {$ lbool operator < (const sItem p2)
: b' e7 k# I, }{
( q2 @# Y. \+ p/ z, e if (dwKind2 == p2.dwKind2)
9 G! }+ A7 B2 m/ g" L6 k6 l {
9 W; \. @. u0 U! o" E! |0 ~ return dwItemId < p2.dwItemId;
8 X, v2 f) y# r0 H4 \$ h8 H }else{
( M, L9 l$ ]: ~+ g- H return dwKind2 < p2.dwKind2;% ?0 ]% j! k+ S- m( [7 D. b
}
; B+ E# d) o4 n' Y/ i* m8 {}- ~) s0 I# M) P
};
& N7 U! |0 i( \2 C7 h0 z; lclass CInventorySort" M' M* `% A* q( e. W2 G
{0 x9 y& O; @, y% f) l
public:1 R2 |" J }; b! O
CInventorySort()
, V4 g) E( d+ s9 |{; @3 z# }+ g- E/ z6 Y7 h& u
m_dwPos = 0;+ \3 L% R2 J. q# h: ?5 j* q7 c
}; b: a/ e9 u: ?: ^8 N5 u
~CInventorySort(){}
a; o# c6 d: W9 u+ b6 V- u# Cprivate:
! l" R$ H8 }' O9 J7 ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ }2 s7 y) J; R dDWORD m_dwPos;5 @- O4 d( E/ p9 u$ I
public:6 r- e" J2 s& J" b& ~. m
void Add(BYTE nIndex)3 G4 R3 q; E% u$ i+ ^6 v
{: F& Z( w% v6 Q5 v
if (m_dwPos >= MAX_INVENTORY)
9 g8 j4 h u" H t- G# o( B1 W {
* n. d7 N! f9 l; o return;- ?" I" A$ h' v' T
}
1 h f8 q; s7 m2 B$ m6 x5 v$ r2 n m_Item[m_dwPos].nIndex = nIndex;' k U% `% [4 S. h" V
m_Item[m_dwPos].dwId = m_dwPos;$ R3 ~; ~5 V: Z5 _! E8 x0 C& M0 l
m_dwPos++;
* p, _ a( @& B8 q} ~8 m, a2 o+ p8 O3 V6 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" M- C( f# o8 `/ v6 w8 v{+ S0 w/ q+ H7 Z2 M, H
for (int i=0;i<MAX_INVENTORY;i++)
4 c, X& r, J# K; I7 z: Y6 |7 D {
2 b& p4 s3 \5 E; i( f, M if (m_Item.dwId == dwId)
, I3 H! x7 K2 @& A% f9 F, z {# C& i# o% g! ]8 [, ] o
return m_Item.nIndex;2 n6 U0 h7 K5 m% H
}5 h/ b0 N, U4 L) B8 R3 H) [% r
}% @- ?+ @ B, U
return 255;
1 M& f0 y$ d; I# _* s) h6 e3 u8 A2 ]}
* Q1 J' S0 m/ o0 j: l" f! Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 \0 d2 ^7 v( S1 v7 P3 t{
; x3 }$ G+ V/ i! b BYTE nTmp = 0;& D- i- L/ x D: S! [% V
bool bDest = false,bSrc = false;) Z {- a# S7 ~
for (int i=0;i<MAX_INVENTORY;i++)5 V6 \) X4 S( R2 e% C0 i5 p9 T& `5 C) A/ _
{
; Y3 k7 b8 P Q6 C( E! N2 K/ n if (dwSrcId == m_Item.dwId)
2 q. \. T# X- p. p8 v G* w0 z {' A: g' z& D) ^( \+ t, w5 D9 n
//id相等 则 改变对应的dest和src. b; c5 _8 C9 n
nTmp = m_Item.nIndex;5 z/ n2 A+ {$ A7 p: V- m
m_Item.nIndex = dest;: M9 }. z% r8 T2 T0 F' r
}
# h8 \( Y5 ]3 [9 ?% t% n$ t2 o% L9 B }
4 o1 R3 p0 B3 e5 x. F- C8 S //临时数据保存完毕,交换开始
% D6 j0 q6 w$ g$ |. g for (int i=0;i<MAX_INVENTORY;i++)1 x- E: j( d4 T( v1 o i
{! Y5 m0 f" t* N* Y: Z. l' l
if (dest == m_Item.nIndex)
% O+ X+ k/ z6 i, H/ @2 w$ s {
3 t3 Z' V* U! B) F //id相等 则 改变对应的dest和src
, b) Q! q% L Q' k m_Item.nIndex = nTmp;
S& d2 j& m" X! ` }+ t- o6 Z6 h \. `5 f, V6 l
}, C( R; z* g+ \# s; M8 a+ e4 [+ Q
}" z0 `6 ]" B( n+ r; e* _2 F0 R4 J
};1 E5 w7 d9 X$ b
-------------------------------------------------------------------------
& L9 T B' J0 D, b" Q1 [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 u. T0 u# g) }, h d" m# T' q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 U2 q' T8 h- q6 U: n2 |
紧靠其上添加:9 l6 K$ [9 b! H, I, @
if( pWndBase == &m_wndMenu )
; d4 @6 R; ?& r0 Z% r+ r{, g! S, s% v5 V8 b
switch( nID )7 j5 k" X U2 |( B' ~
{( Z+ E2 m+ q# _6 B6 r2 M0 P
case 2:
" _- Q& ^) T6 c/ g. |; o {
9 y5 P) ]0 m0 R k* V" S: m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, `2 B# x4 b H: L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ A! x5 {* X( A7 I- Q
{
; }% C9 N d. N7 c) p break;$ [" j* [, S0 l
}
9 ~$ e! n) r# o# z8 V1 e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 d. o0 V" I6 B+ I7 Z4 E
{% h8 l0 l N' m0 `) \9 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' l" M* b' A6 C8 u3 Q8 w if( !pItemElem )
2 b* g5 ^1 S( V' l0 w3 L$ y continue;
! Q) O* j8 V) i( P, o( m if(pItemElem->GetExtra() > 0)
9 j- N h: ^# F6 L' ]' U3 P* U continue;" b! Z! u$ c7 G' x8 O. l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 S% T7 J4 n- j c% B2 u. n9 h
continue;' h A6 n& @# ^# `- o) ^5 x) F
if( g_pPlayer->IsUsing( pItemElem ) )5 @+ G( ]1 D$ w7 e; m9 l
continue;
{8 N1 w% \( i8 \$ a) S/ h if( pItemElem->IsUndestructable() == TRUE )% ?# q$ ?% l* L* n
{- R8 y+ u: E, H' ~- f. A3 p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" ?, g0 ?$ q2 |& B, Q; Z
continue;
8 Q) N/ z h+ E- o! B* P; [2 K }
& O" r7 U3 e$ T1 ^: J2 L7 ]7 w; M) z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; G2 l* D2 a5 ?5 ]3 e }
& x& E L+ T) X, @ e V- u8 u break;
" J# v5 r* Q' O; m1 Q) e: Z }
* o! R$ H: J: u7 U/ L case 1:
9 M, I# `" N$ ?" G" ~ {+ P% j% s, h# ]
//整理背包
2 b. T# ^0 J. v' j! x% j //////////////////////////////////////////////////////////////////////////* f" X% P+ H% v. q% D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 A3 e3 X @. a$ ^* f# C! A
//////////////////////////////////////////////////////////////////////////2 |0 T: W3 V1 h& \
//////////////////////////////////////////////////////////////////////////- ^+ y& k9 U' Z$ y% C
CInventorySort* pInvSort = new CInventorySort;/ {8 X, W* d5 z4 r
vector <sItem> vItem;
% I/ r. F$ q9 w vItem.resize(MAX_INVENTORY);//初始化大小
# `- G( Q: @! ]9 |5 i% ~ //////////////////////////////////////////////////////////////////////////
; e! k0 M( P/ g* C" h/ o7 E3 E3 o //填充数据
, P! p& g6 r1 j; }. P! f+ c2 d for (int i=0;i<MAX_INVENTORY;i++)) R) O; N# M/ {" |) l2 b, ~
{
0 i+ ]9 s% ?3 T0 |/ r; L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 A# @9 b4 N4 m# [
if (!pItemElem)$ \8 B- U( j( i4 B0 T" c3 ?* P
{
1 n4 g# [8 A( D0 P* I; c vItem.dwKind2 = 0xffffffff;4 `' C8 f- V+ c
vItem.dwItemId = 0xffffffff;5 _. v: M5 t3 a% i) D: M+ U
vItem.nIndex = i;
/ m. ]* Z2 u* W- x0 J, p8 O" | }else {8 }9 A/ b q/ f8 j( O7 @) f2 ~3 N
ItemProp* pProp = pItemElem->GetProp();
7 d2 ?8 e$ j+ u, `- t% Y vItem.dwKind2 = pProp->dwItemKind2;* W. H) R1 B: t$ W% t8 x
vItem.dwItemId = pItemElem->m_dwItemId;
0 e3 U0 u) S5 w6 Y) B vItem.nIndex = i;
/ X# H' E. J; h& r }/ J; ~. q; U$ C) p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 q* t, u! S+ E3 t& r- j: d, { i
}
, [! Z3 ?/ M- B: Y k //////////////////////////////////////////////////////////////////////////
8 {* K0 H% O: h; V sort(vItem.begin(),vItem.end());//排序
B/ [) Q1 G3 J //////////////////////////////////////////////////////////////////////////2 j1 E! F/ A; U3 R: {/ x4 W6 e
//交换
+ E1 C; n& e6 B2 A for (size_t i=0;i<vItem.size();i++)) z7 U9 `# r! f: }
{
; H4 w4 |- f( @6 J; `$ B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' O8 D& [8 H1 e7 f) M' O7 g
pInvSort->Add(vItem.nIndex);: x$ N3 ^8 r3 U0 R4 N t
}
6 P, U1 S2 C& v& J BYTE nDestPos = 0;
+ @ V! u- Q4 R/ y- u [' I for (int i=0;i<MAX_INVENTORY;i++)
, i, y- |+ I9 f. l, h* ] {
/ b: U, f3 \' K3 c2 `* u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 F2 S) J+ W* Y( T* g if (pItemElem)/ t `( `, x" Q1 j
{! X/ p: A% h% H) B" n1 U4 }
if (IsUsingItem(pItemElem))
, J- U0 P/ K$ ?! X! \ {6 B d3 ~( b6 I1 G6 n
//这个位置无法放. X) i( q( m+ M4 [$ I
nDestPos++;% i, f% a+ D: C" V c
}: r8 |( S/ C+ U- m* ?+ H' x% k
}
8 Z+ l: i3 q+ s) U2 J# p% l- i BYTE nSrc = pInvSort->GetItemSrc(i);6 [ |8 A# @ F. o( M8 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ `3 e0 D7 J2 ^% u# J0 q
if (pItemElem)
9 G! i/ M$ N3 w4 f {6 a# J4 U f0 \6 t' ?
if (IsUsingItem(pItemElem)); n" l7 h2 p; a- o
{
; J5 W5 B! j! D) q3 X1 d9 f+ K //这个道具无法移动,跳过
) p6 K% C& \% L- I1 f5 ?$ Z% M continue;
: b/ ]# O3 \- ^% P2 s }
9 ]: ?- H# I! o }else{
2 \7 D& v" i7 D //空位置 不用动
6 l9 g w% [5 o9 Z- Y7 H' p* a4 C* z continue;
5 f* M1 q2 m; T" c }
4 ~# L6 C: |# c2 j //////////////////////////////////////////////////////////////////////////. V. B7 A! q' p I6 |
//开始移动6 l. f+ n' S) |$ N1 ^
if (nSrc == nDestPos); x7 t: | B: N% G5 Q$ Q8 R
{# }: h$ D1 {4 w7 y: y* x
//原地不动6 `1 F& b/ ~9 ^- t0 \: u: Q
nDestPos++;
# |- N2 J; n; \ |9 L continue;/ ]( P' E6 a8 {3 ^, Q8 ~
}
8 I& o, ?* m' ]& A( O) \ pInvSort->MoveItem(i,nDestPos);
( g" E1 a: U% c* z& K) a g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' p* y7 s. p0 C# C. `, v Sleep(5);
; L. E) \( e. o+ ? //Error("移动 - %d->%d",nSrc,nDestPos);% E3 Z- g' w* H
nDestPos++;$ k$ X0 A* f" @1 w% i0 n. b8 ]& S- n
}3 ]$ E( B! L: W4 b
//取第一个元素的信息
, W d8 S, C$ e* i% G$ e) J. p /*
* R( b4 M4 T* I; G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( m# R0 K' V z* P: C$ _& _! Z
{! T- o* l, u0 c& I7 x4 s- J8 k& y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 b: k A$ q* U& v" _: y) \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 W! r% c, ~% x2 G+ M; o }# }: R% [/ f7 Z4 E. V0 R9 t. L! v4 ~
*/
! L( C ] [; d' c //////////////////////////////////////////////////////////////////////////
' d% f3 f+ @" t* u2 M break;
6 n- W% ?6 m- A3 Q; p }
5 N& B+ J9 {, v1 K } 7 z9 O# O: V- u6 ]
}1 R* M0 C$ O. @
m_wndMenu.SetVisible(FALSE);0 W" ? c6 j9 \6 o$ Y
1 v* v1 d j5 Y# F5 f8 K$ m" N--------------------------------------------------------------------------------------------------------1 `" F& Z# Q: v% f# ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* g; a6 ^+ _; g: p3 w) R* u{ t+ d( W0 C2 X& A( a* D* C
BaseMouseCursor();! @7 v$ d& U) M0 m7 i
}
% U/ W! z0 P# Q9 e- u在其下添加:3 z% ~- y2 v6 L" h6 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& H( X4 n& R1 U. {, m2 s
{' x. e$ I& R4 m% k' f5 j
m_wndMenu.DeleteAllMenu();
G0 Z% ]1 o& G: U4 n9 x; |m_wndMenu.CreateMenu(this);% W7 k/ A* z1 h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: [, O; [# U1 G" O j9 I- }
5 W* J, _+ W* m! A @, F6 Sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 K' ^; w' A7 R4 W
{
- U/ w9 z2 `! S0 A4 O7 y4 f9 K //P以上级别才可以删除所有道具- Y/ v: ~# f; i0 {4 t: c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% _1 Z1 t0 z; P1 I}9 _+ o, \* V9 A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) I" M) z# P4 \( c( B2 K$ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, {0 X5 ?' w A3 o& P* V7 q: em_wndMenu.SetFocus();
+ |5 _( e+ b; X; O: |8 O}
3 \- n* e1 d1 I# \( x" a8 ]/ a------------------------------------------------------------------------------------------------------------
. \: @; I0 c: O% B************************** ?$ k! ?! `) N3 o6 j! P
WndField.h文件% C$ o$ h1 S; D Q1 x/ p' {
*************************
9 L% k' Z8 T- Y( f: f搜索:BOOL m_bReport;
) u4 A7 c+ X5 J, D8 \& `# R其后添加:* [( V' n0 Q* K2 Z
CWndMenu m_wndMenu;# T. `# N0 r# u$ ?- g2 v) U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, l8 Y- K7 q! \8 K V3 [% y& h其后添加:: y8 E, Z& e' q; u- {6 [% g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 ~* P0 @, @% v* K0 j0 T8 j- W. W& U0 U+ o" e
& M# D$ R' x& Q! X. d |
|