|
|
源文件中_Interface文件夹下WndField.cpp文件
- @% }$ F3 L9 {% a! {6 J6 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ V s* Y% Y5 j* @3 u
9 C; y) k- B1 n9 p& i3 t% q/ o
struct sItem7 @& S0 D, b0 b5 g: o# G- |
{
, I7 G# |$ E4 r% l7 tDWORD dwId;3 k C, K/ Q. w! I9 Z c4 X
DWORD dwKind2;; W; A! A/ c4 ~
DWORD dwItemId;9 u% i- Q7 [/ ~) q( s8 S' Z
BYTE nIndex;
0 b3 s8 N& _* r+ l) TsItem(){
% A7 V& t) B% ^% W& g5 V {1 V, G- {& f dwId = dwKind2 = dwItemId = nIndex = 0;
: N3 ~2 b4 V) W}3 Q: r& l8 K/ f/ W& x# g- q0 [7 v0 ]
bool operator < (const sItem p2)
! q3 R1 w: ~, i% U! i9 U# z{
! y: x; K5 z4 {6 V: y6 n. t+ U if (dwKind2 == p2.dwKind2)
; F. o( c, W, C u! S {; a6 v# C1 I8 X2 {* v) y( H/ E
return dwItemId < p2.dwItemId;; N' m% Z5 p; \3 z/ d
}else{; X/ @/ q! Y' K) u D8 F
return dwKind2 < p2.dwKind2;
6 j' r c ^" }5 M }
3 V* [2 P/ u& \, }, F: G' N}
0 n' c6 V. G- s( H- f3 s- n. ]8 T};
) W; `; L- r/ |; k5 \1 Aclass CInventorySort# g# k0 c# m4 r B _
{2 D0 p, ~# {7 M. J! Y; Z O
public:' [( K& s5 l( E) }
CInventorySort()
6 |' i" x; k# v" y6 ~4 u _* C3 V{# h+ X) s+ g x( I g% R
m_dwPos = 0;
4 b3 A( F$ C; \/ O) @: a& J, M}7 h' K% N4 C1 O' t
~CInventorySort(){}
1 Y( v( k. a! a/ I2 C9 kprivate:
0 p+ y( ]% X: j7 |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. ?' y" m' S) ^
DWORD m_dwPos;; ^# E& C& R4 F1 L! k
public:
. v& X+ W# \1 j4 ^6 l$ Q/ Jvoid Add(BYTE nIndex)2 C8 n& v) s0 c! r0 @6 y
{7 @9 q( N3 O. N" x# ]% s# R$ q0 i
if (m_dwPos >= MAX_INVENTORY)
: N, e, B; d4 u {
7 ^" ~0 V2 r( O# Z5 l return;2 V& _" p& V; T
}
3 R: q s; g; a8 G2 T' { m_Item[m_dwPos].nIndex = nIndex;
# [ p7 i5 f7 I4 |! ?: H' } m_Item[m_dwPos].dwId = m_dwPos;3 B2 E2 |3 _, Y" U
m_dwPos++;
$ {+ l; {, p9 D; z4 u* e7 B$ F- H}
3 i! P+ K1 K2 A# S% Z7 N2 e. ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 R+ j2 x8 D% R4 A
{7 O5 Y$ B, A4 G! X5 o
for (int i=0;i<MAX_INVENTORY;i++)
0 p# c0 c" K1 z( h- ?) V% E, {# y {2 o; G( g' e* C. _9 z
if (m_Item.dwId == dwId), j: c" `: o. X+ K/ j7 d
{! b( N/ |: C5 w% }9 [. I9 `( Z
return m_Item.nIndex;
9 s$ p7 s; N% a. o6 o* a }1 M: ^1 Y/ R8 P9 c$ G
}
" P7 E' L4 D9 _4 m' y return 255;3 ~; {( O6 n8 H6 P' J
}
0 P8 W1 ^! S( g7 j* v/ H# p$ t Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 k) E1 R4 j1 {) B{, |/ f2 A+ G. K3 y2 s
BYTE nTmp = 0;" k- F+ u2 o2 Y" E7 w+ X0 M
bool bDest = false,bSrc = false;3 C8 x; S2 u: G6 m6 I6 c8 w
for (int i=0;i<MAX_INVENTORY;i++)
# Q5 |3 s& A$ ?; ]1 Q {
2 j& _. l% h# S# R% u( m if (dwSrcId == m_Item.dwId)
# M* R: ]/ c7 h+ @8 N {
+ g" H" F: h J$ i" ^ //id相等 则 改变对应的dest和src
$ D- x$ E" T+ q nTmp = m_Item.nIndex;
% M* G. L6 w% X m_Item.nIndex = dest;
: l. n+ b* j: I l& o$ S6 L# J% ^ }* V! [! E3 I6 e3 y1 u4 R& I2 A# z
}
4 [9 S9 r! p8 q //临时数据保存完毕,交换开始 Z4 m& L6 f3 [# P& L
for (int i=0;i<MAX_INVENTORY;i++)4 D( G8 t# y" h+ o0 q4 r0 ^
{
* {& v! Y+ o$ P' W! T# W if (dest == m_Item.nIndex)
, a! t8 \8 w$ F. X' p4 m6 h {
! @) U% T+ l2 B9 ^/ o F- \ //id相等 则 改变对应的dest和src
: v% m7 ~7 t2 o. D0 b! ^# s" k m_Item.nIndex = nTmp;
2 ]+ s6 `' {5 i9 {, s, |0 e$ l }
! b9 j7 z5 M" h( W4 V- [ }: D% p4 O" m) Q: {
}
, s5 z. }- i- k, I* P8 m; d};
' o2 ?+ [, B) y) v* h4 Z6 I3 k-------------------------------------------------------------------------0 x* q2 e6 P) ~) Z" ~% v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& a6 C( o, q, m& x1 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' R+ N8 u2 e$ W+ e# h' B紧靠其上添加:
5 G- [: t2 i0 `" b0 v0 s6 M& Nif( pWndBase == &m_wndMenu )
1 i& x/ s0 J6 d% k{
* p3 H$ y7 J9 [+ t7 F, X switch( nID )
, H0 ~( N1 R! Y4 Q9 L! E {
9 H1 Z0 `" F+ a case 2:
# n* x9 k4 l1 r3 `7 V" s% o) Y {
1 m X; R+ {! m) e$ L! b; `6 a6 B0 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) q* w( a( v( M N5 A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); x4 S7 I# S0 C$ H5 ~' d4 d% ]/ s
{. I( d0 N% w V t: M1 L
break;4 h. O J6 R2 w0 b
}
) T w0 I5 G( ~/ \/ m& ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: B ^5 |1 c7 S8 O {
0 k9 c" x; K, l! a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 m$ J* ~$ X$ L* l& A if( !pItemElem )6 S, h! P% x, \0 Z8 n
continue;
: D1 J( Q, N3 e/ x G# j: F. ~ if(pItemElem->GetExtra() > 0)
" N5 r1 M4 x& u% o8 v continue;# [4 ~0 X' A. [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, S3 D. H% d$ h2 Q& m continue;# |% e6 }. y X
if( g_pPlayer->IsUsing( pItemElem ) )0 j) M3 a( t& \; o1 b4 M1 q/ J
continue;' w% U6 L* ?. t3 F
if( pItemElem->IsUndestructable() == TRUE )' p4 n! r7 S% d! X7 _3 ?
{
. o! l. X% }, O1 I5 \* Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; Q9 U( y! J$ ]( q& O7 k
continue;6 U7 Q" U- t* R0 d2 [6 k3 V2 ~
}; [: G: T# e; c7 E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 Y5 s) O) e7 t3 G) T/ R7 Q! I- `
}
- C/ G2 [2 o" m" Y) ^ break;
7 ], R0 N& r( Z- }$ m' Y }9 v6 A( l- \3 n1 k
case 1:
" m# p" v3 P. g; K ~" S% f6 ^ N {
8 a k' l1 F, x' ]2 o! X //整理背包
, o* z2 t7 f2 X //////////////////////////////////////////////////////////////////////////
- I( {+ g% X# Y4 X9 x3 W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ _3 T& [9 m" K- [! M& {; K
//////////////////////////////////////////////////////////////////////////7 F/ F' m* U" \2 J9 o
//////////////////////////////////////////////////////////////////////////
. ^9 D9 e4 G) g( I) M: @9 j CInventorySort* pInvSort = new CInventorySort;
2 F0 _, e; U( w5 C' G$ e1 A vector <sItem> vItem;
( O# K# @0 h4 K/ |6 @4 o. x( i: h+ q, a vItem.resize(MAX_INVENTORY);//初始化大小
# f# J$ \5 g2 y+ x3 r //////////////////////////////////////////////////////////////////////////' c- t- a& n; n3 l5 U
//填充数据* a. m6 P$ i& ^8 w
for (int i=0;i<MAX_INVENTORY;i++)" t3 ^) \, O m0 N; E# u( G
{0 a/ r/ h9 l) E7 c" ?! u/ ]/ j6 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 X4 W# C0 E7 c/ p" E# y
if (!pItemElem)
* w6 P5 j: C" \* Y% c# @ {
$ j4 [+ A: N4 a& Z, b: i8 ` vItem.dwKind2 = 0xffffffff;/ Q4 i0 [+ A' I8 l
vItem.dwItemId = 0xffffffff;
, s6 s) C( J+ U- ]' x vItem.nIndex = i;0 \. e8 J! Q+ X
}else {& U7 B1 }% x; Z* ]
ItemProp* pProp = pItemElem->GetProp();
1 p1 d: b/ i: D vItem.dwKind2 = pProp->dwItemKind2;
0 l; b! W, h# y+ [3 p vItem.dwItemId = pItemElem->m_dwItemId;
) d: A0 u9 p9 T+ Q: b/ ~ vItem.nIndex = i;
$ ^/ U' D% K6 Y) S2 k9 M }
) f6 b3 p# f! ]. H' [1 O# g. G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! N* n+ G$ a/ z0 F6 S0 f }
2 k% S* X# d8 w6 S# x; A' u: r //////////////////////////////////////////////////////////////////////////: _9 \# G9 S. a! n* O7 b8 s$ g
sort(vItem.begin(),vItem.end());//排序3 Z9 p& B, F* m$ |# }! F, N
//////////////////////////////////////////////////////////////////////////
5 }$ b" J- C7 v! \6 R. D* o; T9 m //交换# S, d y! q7 E& T6 G
for (size_t i=0;i<vItem.size();i++)" ~! I, ^; y# o' n2 b. v! a
{
. [8 [- S7 N) X* K1 f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 G1 h7 C* s* M6 m1 K) l' G
pInvSort->Add(vItem.nIndex);
5 Z/ w0 B, u8 k& A+ e }
% j3 H) m9 r$ y* H2 T1 }* w BYTE nDestPos = 0;
1 S4 L3 i5 G ^) G' G for (int i=0;i<MAX_INVENTORY;i++)
- O3 _$ p# C: b, E! c {6 q9 o' b+ j, H( o/ j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' F4 X T" P4 Z0 k q
if (pItemElem)
+ [* e; ?: r7 k4 C8 k {
' H$ v2 C4 r. ?3 [0 O* z8 n if (IsUsingItem(pItemElem))% L' I% p' S: G$ F7 Y! e9 g
{
/ f- V! @ s' Z8 o //这个位置无法放
* m, q0 C: B: v' ]7 A4 J nDestPos++;
0 c8 p5 N# h( ~2 ]8 m }
! E y& j' c5 k }& N4 L! F2 \2 H) C
BYTE nSrc = pInvSort->GetItemSrc(i);
0 ~ R, A1 {% j0 R" J7 X5 f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 u% {- H& @ S3 | if (pItemElem)- \ j. s* ~+ R c% T b N- m1 a% x' k
{
$ F) J- v' b$ c5 m: K/ ~8 e if (IsUsingItem(pItemElem))2 X1 `) [1 }9 N3 M' m' d
{
" \6 i7 b# ~0 u+ G! u8 h$ R //这个道具无法移动,跳过
+ t" D3 h. |7 m6 n6 m& X continue;6 `8 D9 A9 j( r% b6 T/ ]1 @
}
9 Z: O8 @9 _5 ~6 X2 t6 G2 H6 J) }& { }else{) ?% _% X" T9 F3 {
//空位置 不用动' y+ ?% Z# f, z4 y7 G
continue;
z5 h) y6 l e4 l }, J& {+ p3 d7 X% O8 r/ ^5 r, o, ?1 R$ F$ |
//////////////////////////////////////////////////////////////////////////$ V8 e! l( U1 m4 r+ _
//开始移动
5 a$ C- S) O* `% P$ u* N. @ if (nSrc == nDestPos)
( R7 k* {6 a4 [) ]/ f4 E {" e* H f) }7 A
//原地不动
! E* ~' I$ F. a* D3 D) y nDestPos++;
4 M3 d/ c, \8 x6 v$ Z2 h continue;- g4 e9 I1 p9 P! Y+ L1 d
}+ c% ^; c) v6 C- d9 X
pInvSort->MoveItem(i,nDestPos);9 s* ^8 d' [# E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);( W( i) ~8 B# ^! j9 W7 B
Sleep(5);+ H. ?. p# K5 t2 B
//Error("移动 - %d->%d",nSrc,nDestPos);& o7 M! @9 Q1 B; L$ q2 Z
nDestPos++;
$ Z/ Q( g' {, Z9 q) D) g }1 m$ X/ K* r4 T, l
//取第一个元素的信息
$ G0 u- J; V+ ~! \- X$ R /*. Z8 c$ L( ~; m& v* l$ W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' O& R/ k3 ^' i2 m; d+ S) k5 ^ {
0 }- q& \! H; ]' g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& `3 k7 N3 h1 f' t, w# ^; z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( Y# J j+ l7 T3 M5 _$ }: l. [8 H* F }9 H2 B1 E' V) X
*/, Q# q; }: `! D% i7 j
//////////////////////////////////////////////////////////////////////////
* H* o' \& m0 G* d! P$ Y$ d2 V9 Z break;
$ X% l o' h3 u2 f }4 `) K2 ~. Y+ W1 ^4 _
}
3 l+ g# P& p# g* ]! C3 }4 }}
7 @3 V/ ]8 D i) S+ o9 k0 Hm_wndMenu.SetVisible(FALSE);& b. N) K9 i0 j Q
5 O% L# F5 d9 |4 O+ d--------------------------------------------------------------------------------------------------------& I- `; v% j: I* a. S& ]3 R) V
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; y; Z! Y, W- y6 Y. J4 W% O{
. a* [9 c- }# e3 e q8 D7 d( d6 aBaseMouseCursor();
/ R0 ?; p4 m7 u% h}8 }2 V, ~. S: K1 c, ~ x7 }
在其下添加:
4 E2 ~+ d# B' J8 K) U& zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. {4 w' J% I. ~; q' f{
}3 k! T7 I: F$ T0 ?m_wndMenu.DeleteAllMenu();
+ r1 r" _ H9 um_wndMenu.CreateMenu(this);
6 Q d% v, W; L5 A9 ^0 b1 t2 @$ W9 jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. M: `$ [' @2 g& \$ r3 g/ j% v; x1 h/ w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). P9 t: \ G& {
{. m1 U' l7 y( Q2 C4 t
//P以上级别才可以删除所有道具2 r& Q" U5 {2 D3 o( t' ~( B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" m7 U. ]0 C% ?9 Z}
" j+ ^3 C+ W, U# h/ j( wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" g* ]1 D. O7 m- [6 b6 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* S5 |5 i4 ] `7 Z) d# l
m_wndMenu.SetFocus();
# P4 K2 T. k2 ^8 j5 d' y}
* I( I5 r' F+ {* D* i, Q2 {------------------------------------------------------------------------------------------------------------
+ o1 c6 d: J- o$ s*************************
$ T* O2 _: n2 J/ @" T& R2 I- \2 hWndField.h文件
! ^8 Q0 P5 v/ Q7 v*************************
1 q3 n, U# }" ^* ~9 r6 l5 r+ X搜索:BOOL m_bReport;" J. g- E& u4 `: R4 H+ t
其后添加:
. b/ f+ Q8 Q& a/ XCWndMenu m_wndMenu;& f7 H0 B! W# \ D0 h. C! J/ c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, ?" |' P& Z( C0 y/ @" W
其后添加:
( P* A! M1 p5 i- h# dvirtual void OnRButtonUp(UINT nFlags, CPoint point);; ?: n2 u( m# Z' Q- I7 ?2 w+ ?
4 U5 x$ W) x O1 F1 v2 ~; X" f: O w' J9 V$ Y5 D9 k. n6 Q6 |" e
|
|