|
|
源文件中_Interface文件夹下WndField.cpp文件
2 F+ u R" Q$ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- t0 a7 j0 @. ~0 r, D. T
6 }, W( d, M% M m$ K* c" Q% T3 kstruct sItem; s" O2 f R3 S+ s/ g+ ^/ G
{
2 m3 Q0 e* A; Z0 q/ m M7 _DWORD dwId;
9 Q, \# ]& S% R% k0 _/ }DWORD dwKind2; D: c* d' I h4 s! w3 m" I
DWORD dwItemId;8 I G( H) ?% y* {8 {
BYTE nIndex;2 D" @0 E- G+ d6 C% r
sItem(){
( L+ t0 C$ c* f% v/ H* l7 q2 ~ dwId = dwKind2 = dwItemId = nIndex = 0;
+ p; r# w7 ~6 c4 K! n6 N8 x. g}
* Z( d: M! \. Dbool operator < (const sItem p2)% C6 D0 q) G4 O/ U
{
+ }! P+ N- [4 E2 ~* x+ G if (dwKind2 == p2.dwKind2)$ R: g( g8 Y) J1 _% T
{
- G* C' ^8 n1 ~! v- q! Y return dwItemId < p2.dwItemId;
. r9 W% ^2 j2 j7 k) j$ Z }else{/ M( {) @. I c) }5 f
return dwKind2 < p2.dwKind2;( d! c- J1 m8 c
}% v |9 N6 v# J. l, L
}* Y0 S. W! j) B; Q
};" W! K) V9 m7 ~5 |7 J
class CInventorySort
0 u7 n- c$ C, |{- D& R2 j d' p5 k; z/ Q+ l+ F
public:
% p0 B' O0 _4 B- \: RCInventorySort()6 {2 f7 Z( r8 b$ g) w
{, y- ^0 P- a3 d* Q
m_dwPos = 0;! _4 V. y' S, M( `0 k& d
}
4 {& N0 y5 g P~CInventorySort(){}
0 t6 B5 }( D8 f! y n4 iprivate:
8 y% w: E Z( M) T3 u, v8 q" ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 `4 S3 A' s9 I! [5 ]
DWORD m_dwPos;: w/ J; k. f0 T. |8 f- T; y
public:6 X) G' C# |7 k: l
void Add(BYTE nIndex)
, Z- W- }" \8 I& N% u: j( u{7 q v. [: D: B9 `& V( @
if (m_dwPos >= MAX_INVENTORY)* r$ A8 H" `1 r; j* e
{$ z( ?% S" i8 C5 i( ?! @
return;' f5 x' w+ A+ p
}0 T& L* B# g+ S
m_Item[m_dwPos].nIndex = nIndex;: d2 k3 i6 J. f
m_Item[m_dwPos].dwId = m_dwPos;. g- X0 [+ t7 J7 D* s
m_dwPos++;
( Y: j" g* P% [ ? N}
5 F* S4 T# l! q$ p" Z- jBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" a) [. W0 ~& c3 u8 w2 F# P7 _
{
U, \; \' x1 `- u6 X- x+ N F for (int i=0;i<MAX_INVENTORY;i++)
+ V& A2 U6 [8 a7 [: Y. B7 E {9 d8 v, o# y2 M+ x7 ]" i$ c, f3 Y0 g
if (m_Item.dwId == dwId)# A3 Z8 m# [; e2 @! \/ ^
{4 u) E9 E! y+ [$ N: l2 A
return m_Item.nIndex;
+ \" a3 d! ~1 S6 V6 ], R }
: c* y: c6 n; z. w }
( }1 |9 Q7 D" O( R6 m7 N7 a7 } return 255;+ f% k' _% g2 o9 C: z- h j
}! m( b4 ~3 Q' Y+ t3 c
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 a# E0 A: u' n
{( d& {3 r- J z. T
BYTE nTmp = 0;5 W5 R9 Z; b, ~! Y8 N7 w* h2 l
bool bDest = false,bSrc = false;
, o# ^! z/ n7 H; v/ |4 ] for (int i=0;i<MAX_INVENTORY;i++). t2 }- b$ ]+ m6 a
{) A+ O+ \9 Q. l8 }. h- P
if (dwSrcId == m_Item.dwId)
1 B( ~" W# I9 s' q {
! Z6 m# I. r s4 D. O8 @ //id相等 则 改变对应的dest和src0 V! C: @' \. N6 K; }1 I% s& w
nTmp = m_Item.nIndex;
7 l i+ q: B( t, |1 \! [3 V m_Item.nIndex = dest;
5 a/ q* N2 b1 E, F! Q2 _# ? }
1 _8 q1 z m) ~3 ^0 m) T }
* H2 ^9 `0 R) C# Y$ S //临时数据保存完毕,交换开始, U( y8 _4 D; i& i, e
for (int i=0;i<MAX_INVENTORY;i++)
+ A. o/ W3 V! y( X# x+ n. D" W6 _# Q {0 z ?# N9 ^5 ]) l: V- r t
if (dest == m_Item.nIndex) w8 P8 ~3 z% J5 J6 r& k
{
m& Z2 H9 z( Z. n/ n, i. L //id相等 则 改变对应的dest和src
e& d' S1 N9 b w m_Item.nIndex = nTmp;
/ v# d# K, A# K' ]0 ?& w }
( g; W' W: e1 Y8 ]: x0 m, d }' t! o; |5 j3 Y1 H! v
}" c3 |' R$ e4 H6 ?
};1 f0 ~& G/ e1 M& e
-------------------------------------------------------------------------
# z; R1 N9 k8 p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- b! ^* M; h& Q9 g+ S* k
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& n W( q6 b h# X3 {( f5 s: x- n+ E
紧靠其上添加:$ T E. p2 ~8 }9 X. a
if( pWndBase == &m_wndMenu )* k$ [6 b& w1 s: d( i" \! k
{. ^9 F) f6 y6 [% b) G' h
switch( nID )
N7 f! m7 A- y; j; _: d4 [ {, \' T' V G7 E) f, t- ~. Q" M3 F9 {
case 2:3 P9 s/ l* Z* w2 L2 ]9 f6 e9 q8 J
{& {6 t7 _- A9 K! ^! C4 l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 f0 F4 S( M0 X% b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 W) ]+ P* d+ U( c6 S
{' ^9 @" x3 y* \$ y
break;# N8 T, P9 u) j/ W' D* a" Q# A
}. B! h7 d& l( P( a+ h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' g, ? R/ N/ G9 w5 o/ F- N# g& a {, L; a5 w9 P( ]6 M- Y: i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" [6 I- R3 y3 A0 i if( !pItemElem )
# z* \) a9 c) j6 M! T) M' e F/ | continue;$ W# L& U) w3 a8 l
if(pItemElem->GetExtra() > 0)
" v, P; j5 M* H. z continue;
; |5 t6 H/ _5 W( S4 F! T/ y: ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# C1 m: u0 C9 b/ {: t; F2 K7 U9 P* K continue;
$ z" ~8 X! P1 o, w if( g_pPlayer->IsUsing( pItemElem ) )
5 r) Q% s" ^* ]5 o continue;4 u) V# \" {3 y5 V5 g f
if( pItemElem->IsUndestructable() == TRUE )9 v6 D; s, \$ q9 n- I" G
{1 X+ W2 z) J. M( Y& Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! `% X" W' T0 {
continue;
# I+ Z* H% a/ ?7 v% @ }
% j% u' K" y$ F' H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; k% l/ Z$ u$ y. m }
& z, X: c, G( [! I2 j break;
+ k" H# |: Y* R5 _2 ` }
0 c( G9 G) u, }$ M: M case 1:0 x6 t: A- U7 |1 s
{
4 f2 k) f+ z+ ^8 v: m- | //整理背包
. E: W4 j2 Q0 S& p( R% M //////////////////////////////////////////////////////////////////////////! X* d1 a3 w U* Y }8 t" o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 |7 \2 N' E6 v, i6 ]
//////////////////////////////////////////////////////////////////////////
4 }3 j5 o2 {: U/ s //////////////////////////////////////////////////////////////////////////9 n/ U; m; W$ z) G1 B" h
CInventorySort* pInvSort = new CInventorySort;
; m0 d( E; _. X' S9 r6 l0 `6 z vector <sItem> vItem;
& t7 {# D) l) }: T7 S8 J. N vItem.resize(MAX_INVENTORY);//初始化大小# h3 a0 I! r& I$ I( T6 @5 o
//////////////////////////////////////////////////////////////////////////6 R+ P1 L9 U4 K. e' A, ?
//填充数据* D& g6 s3 ?( b3 P' d
for (int i=0;i<MAX_INVENTORY;i++)" g! s! k, l4 }2 r$ Z$ r
{
7 H0 @ T- X3 l$ Y3 U- a# }# E y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( O; D* w* L7 l8 ^3 s- G K4 g if (!pItemElem)
5 H d% u1 O) z2 I8 a1 Q0 l8 t {
( w1 q& D3 ^7 C" ?6 j' V vItem.dwKind2 = 0xffffffff;
! K. N" @: I" t7 t3 f( u3 R vItem.dwItemId = 0xffffffff;6 V$ n3 a# w/ x
vItem.nIndex = i;/ t" G Z5 ?' m6 S% ^ e2 z2 p* o
}else {
0 Y) p/ C0 F' G0 v+ t* e3 _ ItemProp* pProp = pItemElem->GetProp();# ]4 M( [5 }/ ?5 C+ B* H
vItem.dwKind2 = pProp->dwItemKind2;
0 C0 F' n0 T( _ k4 r; i2 m/ r vItem.dwItemId = pItemElem->m_dwItemId;2 ^# ?& @ j4 F
vItem.nIndex = i;& J0 i- i6 S: L- o$ B& k' T. {. v3 M
}9 V( y5 O' _7 U% V& x
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 x# B# E9 Q9 K- _3 } }+ B1 S I; a, y8 d! }; j
//////////////////////////////////////////////////////////////////////////
$ s6 P: r4 ^8 ]" \ sort(vItem.begin(),vItem.end());//排序
9 {5 \2 m- @0 S; S& V4 T/ ]5 a //////////////////////////////////////////////////////////////////////////) v- X: D3 x. {' a/ M P
//交换
$ H! B4 ^* `; m! A, K) s- u" Q for (size_t i=0;i<vItem.size();i++)% `8 X; R o9 k! k" @
{
" v$ N; M: Q" ]- E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 ?0 J% W6 h( \# n
pInvSort->Add(vItem.nIndex);
8 c$ \. }; }) o6 v/ l' D }
. ~* B U7 m. q9 R; u BYTE nDestPos = 0;
4 K+ H9 {; O9 Z) z8 u8 M Y7 } for (int i=0;i<MAX_INVENTORY;i++)
u' M" h/ A0 o. j `$ u2 U {
" j; @, B) U* z, w$ j0 z/ ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 F& w; g; L) p' f& B2 G( k- r if (pItemElem)
: D2 L6 i- P, G- g9 H; ]4 W {
( u8 N9 B. W+ `3 R$ ?+ j if (IsUsingItem(pItemElem))
# M0 d8 b) O! o' _ {/ ~, `- o* E% X. _2 ]5 e+ V
//这个位置无法放1 P# V' u0 l5 L R; i) L
nDestPos++;
8 X% g4 X/ u+ B6 R+ R: P8 h; G$ J& G }
' V2 S: n) i/ Q }
9 D0 D$ P/ w1 n B BYTE nSrc = pInvSort->GetItemSrc(i);
4 d1 [9 F( P' Y) N5 a# e0 q' u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" a* ]' I% Z' g$ ~" C
if (pItemElem)
/ ?) _' O4 i' m7 ?' h$ O6 B% p* v {4 A5 n9 X4 F4 q8 d1 ?" F4 c
if (IsUsingItem(pItemElem))
* M+ t: A! P. K: _2 g$ c {3 ^, N5 k7 v0 I+ F" O3 b' U
//这个道具无法移动,跳过- F/ l0 h' W' w1 l$ u5 P
continue;" E. F3 u4 S2 v
}
- R G# y' g9 ~5 V }else{
+ g7 i7 r1 E1 u5 h //空位置 不用动
7 o2 {9 k- E3 C( s continue;0 B: {) n! q7 `; \
}. k6 P [7 O! ~2 L. x ^! M
//////////////////////////////////////////////////////////////////////////3 A3 O. t4 J2 O Y
//开始移动( g7 I0 U+ [9 j$ z5 ?
if (nSrc == nDestPos)
' g% m u1 }5 _* c: C! ?; t ] {
5 T/ W R* N. J; ^. K# c& g" W! D //原地不动; x. C/ H9 R, U2 j5 `4 E4 f
nDestPos++;
0 k7 w/ C5 z6 f2 E. L: C! ] continue;, _9 W% [) M) ~# J7 ]" Z
}
. }, k- Y+ W4 | H i pInvSort->MoveItem(i,nDestPos);
9 d6 W( T6 F0 W% d: R! x# N0 z0 h; R g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 J3 E0 F3 ?" K0 p# R' n" R$ \
Sleep(5);5 Q; o9 o' g; `2 j D+ p# ~3 o
//Error("移动 - %d->%d",nSrc,nDestPos);. F5 v& y0 I& m8 A+ D
nDestPos++;: E* _; K+ e* O
}+ b9 w, L4 U ?' }0 C- I) A+ z
//取第一个元素的信息
. c$ S9 N8 r9 @: z. R5 c- {/ V: H /*
% i) A5 S5 N' c# Y% R; D* V; R* m- J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) c: n3 L4 h+ H2 p5 e7 ?9 f {6 O% H! j- f- b, Q1 l" k& Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 Z5 U2 r K5 w( W0 J2 b T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* D8 I9 I5 o4 m7 U5 Z& l }& N/ _& T: ~+ C$ ?; \% G! }
*/! p8 d& }9 M' X) ?
//////////////////////////////////////////////////////////////////////////5 Q' z. c3 H3 M3 Y* t( U! U
break;
4 T: o- t ~9 T5 T! t8 s* |2 \* y. O$ D1 k }
: e/ ^9 C7 J. q } : W$ D- B* l) z
}" u& n" a7 `7 Q
m_wndMenu.SetVisible(FALSE);
9 a/ ^8 O& }1 ]4 [3 v2 C$ }; Y o. L, e
--------------------------------------------------------------------------------------------------------
9 V6 c4 I* ^$ E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ `# o/ N8 E' g0 e{
. }3 D7 |7 ^$ @" K+ M2 n8 M DBaseMouseCursor();
2 G9 h$ p' B4 A$ ?' W! N}
! L& l, a9 k% m( b! h9 |6 }在其下添加:) } E6 E! P( [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. }6 S3 m1 K. O! b4 Y{
$ S; }1 D# n' ]m_wndMenu.DeleteAllMenu();; B I: i5 r/ w9 [: S
m_wndMenu.CreateMenu(this);
4 f4 s$ f1 O3 k z6 sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; I4 V1 J* V' E( Y) O$ O, a5 N$ C! |" J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 h# G! I$ I8 G2 y{. u. |" \4 f5 A1 x. T, K
//P以上级别才可以删除所有道具
4 x! m2 P- v' W( T: Z- C3 O, P; n m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* q0 Z9 R4 ~- d$ [& h: S& m
}
, |0 ]) l! V* c" \m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ i. d1 h% v0 p# X0 lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 ~+ Z6 n% _' o6 o/ k& g5 x" {
m_wndMenu.SetFocus();3 R4 R0 X6 G. M: L: G/ x" j
}2 q% A% f1 A8 t& M% y
------------------------------------------------------------------------------------------------------------' M" H; B; Q0 O
*************************
* x/ j* _9 h8 _. F# s) ~WndField.h文件
) z( h/ z5 p6 m/ @5 Y7 v*************************% Q9 K6 `8 f/ l5 T9 y3 ?% v8 j
搜索:BOOL m_bReport;5 l2 M5 _. v; }5 `" `
其后添加:$ _' h0 A7 t) D
CWndMenu m_wndMenu;
0 w" E, D2 y& n* Z. N; ^$ X# A. e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% E$ E6 ^0 M) f2 j4 E& y& g- H b, C
其后添加:
, ?7 S! ~, R' c# n. m& v% Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
. s* v+ x9 o* F4 d/ f
' t. V: h0 _/ Q
0 \+ g7 L3 q( `! ]" m5 n |
|