|
|
源文件中_Interface文件夹下WndField.cpp文件
4 ^# G/ g; P1 {; i/ P5 g7 Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); L2 E! P/ Y# |& q+ @5 A" W! Y
) Z, J% n0 K2 r' N6 xstruct sItem
- R3 f. B, Z1 ^5 u{
; }) _* J, W6 x- R9 J; PDWORD dwId;
5 }& f/ M% y( ~* G4 n. Y# V% eDWORD dwKind2;1 S3 t1 U7 k$ y# n* O- a8 E
DWORD dwItemId;
% J9 R* r. k1 \! \. N& VBYTE nIndex;
7 z8 [% F6 j* l4 _9 `, EsItem(){
) R! ` U6 w- O g* t: k2 U dwId = dwKind2 = dwItemId = nIndex = 0;3 B r- I' O5 X
}
' S4 C6 M" R1 S* H3 _ Wbool operator < (const sItem p2). F- D3 p" |2 @# }" U7 M
{$ {5 ], K! B6 d0 ^ j+ n8 ]
if (dwKind2 == p2.dwKind2)8 i1 ^6 _- ^ C0 h: H9 O) |
{
0 F# d# y9 |# ^. S2 g+ h/ A* f return dwItemId < p2.dwItemId;" O2 u7 Y, {5 y3 Y
}else{
4 k0 b2 S# R' u k return dwKind2 < p2.dwKind2;
4 e2 S$ _ e& M8 e( l6 H }
" \" k( ^3 [9 y. z6 a8 n2 q. x, ~: l}
0 p0 t7 y5 A6 n- t5 q. d};/ R8 Z1 }% f/ q9 T" l
class CInventorySort
% ]& K; c2 B2 h' X! ?2 B{" } y) y, P" x; j. c" q% x
public:" v: R3 d* J/ m3 Q
CInventorySort()
$ S0 d5 J' F8 X% j) G{# p2 f' `5 L' t E2 H( J
m_dwPos = 0;
' Y6 W6 z- t1 S}2 G5 X& R* a/ @! z7 v
~CInventorySort(){}4 ]. ^& e& ?. k- [) o1 r5 \
private:
; x2 s+ p/ f3 o$ M) ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! r) t5 k% }3 F- y7 _0 i: k
DWORD m_dwPos;
+ V2 m& K! T: W1 R. J' T6 {public:
2 m( y; z0 Y& W# Mvoid Add(BYTE nIndex)
% D9 m* ~. A9 a6 f# J5 X{
) T$ d8 L) ?+ { if (m_dwPos >= MAX_INVENTORY) w# ]; M8 D) Z% L' U5 s+ b% m' a% E. }
{& h8 ?( K" J8 _* y
return;' s1 I, R }+ p$ p. X- r3 M1 o
}* L) J2 }; w3 F$ D! J3 E9 t
m_Item[m_dwPos].nIndex = nIndex;; A0 p9 |9 P6 w) P, m* o. J
m_Item[m_dwPos].dwId = m_dwPos;# G( E& A3 x+ ^' A |
m_dwPos++;
\) o& s& F5 S5 \}% l& N- q6 [6 h$ ^" L3 A( \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# s/ P; z) }1 n% ~( }( C! d9 S
{
+ P2 Z, @' ?' d( R5 V: I for (int i=0;i<MAX_INVENTORY;i++)9 c5 V# q% c# r5 U
{
# F! a/ [1 i( ^! v3 H) F" H if (m_Item.dwId == dwId)- _% @" ^8 w8 l. J# ^# \% \
{$ j t) r: i3 ~( r4 u, o
return m_Item.nIndex;- a7 X! H4 ]. `1 L
}8 V3 V9 j- s d( I9 a
}
# [ B) e, I2 f) f' o; O" F% G return 255;
1 S& g9 C ~3 W9 A. n2 q}( m D3 s8 K9 C5 I$ y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' M! G/ O4 r& S) |
{
; ]/ H8 q! i0 U BYTE nTmp = 0;; ~: ]! H* C6 q8 ^
bool bDest = false,bSrc = false;
, J: g% S1 V5 y: o for (int i=0;i<MAX_INVENTORY;i++)- i" D; t+ k) E9 V8 h1 j% G
{
, z9 G; @- H: t$ t6 V if (dwSrcId == m_Item.dwId)
! q. J' `, n) ~( N" C/ E8 b6 p5 l {
. @' w3 Y8 @* Y( R$ K5 J+ A //id相等 则 改变对应的dest和src
7 n3 q- I' e6 J nTmp = m_Item.nIndex;
% a4 t# m# k+ V! W* |' G0 N m_Item.nIndex = dest;
% J. A9 h8 g0 U* t: N9 i( O; H9 D }9 R1 }7 j2 H5 a+ l" N
}
* o# r* L6 w- T: [- j- d //临时数据保存完毕,交换开始5 A3 x7 t' h/ L3 V! O
for (int i=0;i<MAX_INVENTORY;i++)
2 q3 e$ i/ a4 N' M {
3 T1 ^' x7 D, E( b. y) u$ e3 Z if (dest == m_Item.nIndex)
# y# y; |' u: m- R* p' y# v {
! S/ V% u: S+ y% A p //id相等 则 改变对应的dest和src: B% X& g- h8 f
m_Item.nIndex = nTmp;
/ o7 J4 b/ ~; ?4 |, ~2 M6 m }& B9 i3 d1 b5 x6 a5 v( x
}
, l, {1 C0 ~8 e9 {}
1 L( c' w# A: E}; E) I f# Y. ?
-------------------------------------------------------------------------
) y5 T! N8 Q; [9 f# W: c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 D8 d; `4 R% R4 m) n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); s- c7 a3 e7 \& e6 e' W
紧靠其上添加:7 A, c! k5 A, W: u0 T
if( pWndBase == &m_wndMenu )$ y( [% k) \3 v0 S, M. w
{- N6 B3 p; G" m+ r- J
switch( nID )
; [/ E1 c5 i4 Y1 G: V {
$ p( O# h! T2 c6 z2 f( O: M; ]0 v# ] case 2:1 @! r" L( H& n3 t# f
{7 G6 o' y6 M( V2 m6 W& f) ~2 y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" O5 [+ E7 \1 E: O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 [* S1 j d& R0 d {
' V: s, U1 `& `) ?4 J& z# f break;
, R0 y6 i4 C# r$ b* ^ }, @% |$ ~- M4 v* T1 B: J9 M: U* `$ _4 r" A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& G: H( R' c) g. a2 ^ {- ^4 f$ p7 }' f2 P6 p7 e3 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! k# d3 [7 ]. p; \. L2 O; Q if( !pItemElem )
. T: K& R7 P) e5 ^; k; M8 ]+ V continue;& J1 ]: K* u4 ^$ t
if(pItemElem->GetExtra() > 0)1 z6 S/ v3 U) x; b; G( C
continue;. V* O5 L$ P1 s) A1 r7 _; P2 {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, i% N1 }( M- A& f6 j. V continue;4 w5 \7 v5 s) C6 t: Q) }. h
if( g_pPlayer->IsUsing( pItemElem ) )
* s$ G% G6 x' d; p1 B6 D! u continue;' y5 D }$ O4 {9 d
if( pItemElem->IsUndestructable() == TRUE )
5 X1 Z% t8 F+ O1 r& P- S! ?' r {! i- S$ A v- A4 R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) U, Z* ~) Z) s/ P$ D9 w7 d: [- _% \
continue;6 R/ M- s/ P7 @+ n0 i$ _4 G5 \
}( U) i2 p) E/ j% [, o* J0 ?; U
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! Z* ~8 W2 n' K/ a4 f
}: F) S5 {$ l( I# Z3 H
break;5 ^: r& Y) ]# i" a$ A8 o
}
$ k% q: U9 b' R! s' O K case 1:& p o; ?/ S9 P" O4 o, z" i
{
/ e/ a" H& ~" f4 V" V8 Z" Z7 j: q //整理背包
7 ^- n1 A$ Y5 ` //////////////////////////////////////////////////////////////////////////
7 [3 W) D% n: h4 H9 s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 u, y5 f0 `/ s
//////////////////////////////////////////////////////////////////////////
, k" {/ g- D+ w, R+ Y* Z //////////////////////////////////////////////////////////////////////////1 L `! N# D1 u% J
CInventorySort* pInvSort = new CInventorySort;
* _; i0 w# j; F' X( W vector <sItem> vItem;* U7 f+ v( i" ?8 }
vItem.resize(MAX_INVENTORY);//初始化大小
) u* ^) o) e* i u8 X& D //////////////////////////////////////////////////////////////////////////6 [/ ?" Z9 y+ ]& p
//填充数据1 y3 g$ ~- a5 {9 n! X" w* ^
for (int i=0;i<MAX_INVENTORY;i++)
. A7 X5 Q- ]; B4 V7 [ {
3 Y( P7 ~2 {. a( k. d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& D0 M, V8 C7 i2 y5 d- {3 T
if (!pItemElem)
% C3 q/ A! w7 J0 K$ B: l {
7 B) P) v% J) y* a( w2 h vItem.dwKind2 = 0xffffffff;6 P4 L( d: m& ]" K" d
vItem.dwItemId = 0xffffffff;. w' D! E$ N7 N+ K5 @9 W$ W
vItem.nIndex = i;6 M, h6 y2 n. e3 C9 e
}else {5 q) f4 x& _/ {
ItemProp* pProp = pItemElem->GetProp();
) T" G: W; I! q; h) ~, S vItem.dwKind2 = pProp->dwItemKind2;
6 ^2 U2 a# K! o! c: T7 t. U vItem.dwItemId = pItemElem->m_dwItemId;8 }3 k* ^# \: V; O( o! W
vItem.nIndex = i;
8 a# `7 w; ^* P4 \$ C/ N }
# g8 [+ o; Q; x& K+ V) I' f/ G* H //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ K* v3 q1 s- H( L( l: b: s7 q
}: e) q3 V. z" P9 Q i) S0 B% c
//////////////////////////////////////////////////////////////////////////
/ Z# f4 w# R/ D1 Y+ V2 l9 E- I sort(vItem.begin(),vItem.end());//排序
, O4 j6 `6 I' L- ]: a4 ~ //////////////////////////////////////////////////////////////////////////
% B) m& J! E2 {' F3 w //交换
+ M3 D/ r/ H% N' Z1 w! {. R3 g% f for (size_t i=0;i<vItem.size();i++)
4 e0 Y, |# Y8 a8 F/ W! b$ _- h {1 k2 O) u0 D5 J- m. v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) p1 V* L/ H. l' Z. I) _
pInvSort->Add(vItem.nIndex);
/ I: b8 ^1 K% w% J1 q; G }' G- C8 D! b! W5 m* e
BYTE nDestPos = 0;/ ~3 @1 b8 m V) h, s. \; l5 ]1 A
for (int i=0;i<MAX_INVENTORY;i++)& a! H5 S2 T8 o: z+ ]* z
{
8 z! o# [1 ^% C; I, | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 \6 V/ V. V# I, I1 d4 o8 t6 w
if (pItemElem)
: k/ R. r8 ^1 y( C. X( d4 N$ q6 H {5 u8 @9 X4 l* B; M
if (IsUsingItem(pItemElem))
$ I5 K: X7 Y6 t C/ b7 ? {3 M0 B% b) X6 {$ X' \# Q, X1 f
//这个位置无法放: ^7 y0 D c g: M
nDestPos++;. F1 T l' O0 U. u2 F& b
}8 F# X- f4 _6 f/ j; `$ r5 e" y3 ^
}
- z2 z* \+ u \ BYTE nSrc = pInvSort->GetItemSrc(i);
' J2 M) [4 @8 p' I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 X2 a2 F Y/ T6 W if (pItemElem)3 e+ P" n2 Y. U( s, L1 K
{: C: \0 v4 m9 ? D! Z3 ^2 @
if (IsUsingItem(pItemElem))
) r. q- R& @, O {0 K+ |; ]) Z( M6 x3 }! {
//这个道具无法移动,跳过5 j: I& J; a% H8 g/ v+ L7 S) X
continue;' \$ l& H0 J' s* L& \2 n7 F
}7 V; N* G+ D! `0 J. q
}else{! [5 {) t0 a/ C$ \, z/ s/ M" I) D
//空位置 不用动
0 Y) ~1 I7 n0 p, y continue;! J3 s, L6 v) `# c+ r1 B7 d6 e& R& R
}
0 V9 ~& d; K( G' d //////////////////////////////////////////////////////////////////////////
; }* G* I; x/ L+ w. R //开始移动' B0 j# |0 A0 ?
if (nSrc == nDestPos)4 h5 x! L$ w2 h( S) A
{! V1 F; V9 d) p# c5 M4 h
//原地不动3 A/ K: V3 @& S; A8 q& _# c( R
nDestPos++;4 A" m& d( ~7 R. ^
continue;+ O- t5 V% i* @" A% r
}6 C7 H7 z8 T8 t' r) G' F. m5 s- ^
pInvSort->MoveItem(i,nDestPos);- m5 B/ S7 t# ^* }6 j
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 n& o& f. \" [9 J7 p Sleep(5);; S* `5 A/ t* ^8 n1 \
//Error("移动 - %d->%d",nSrc,nDestPos);
. S J5 H& t( a+ T$ s3 m nDestPos++;
: o' B0 ]: ~ D }8 e5 K5 ~) i2 g9 F! L$ d4 o8 f
//取第一个元素的信息
3 k9 Y2 t* |) s% s W- A& b# T8 J' B /*
, ` `0 ]! h. C" B5 _: j1 |% ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 N( B7 W- X4 |, {: v5 p {) d7 S, K/ {% m0 y: P2 u8 a4 Y9 ?9 Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 e9 f3 ^8 e. w1 j
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( j0 d- J# s; }3 z) `4 [+ e
}
6 z2 l, |( |0 S1 |7 l7 O, R" ~& _( o2 L */. P5 D- O0 {& S' E( r! H
//////////////////////////////////////////////////////////////////////////
* v% r: Z! p& E( [" z5 C8 U+ T8 r break;
! W4 _% k3 ?- n% ~) \ }; a l! l4 J4 v9 `! p' j- t
} * ` {7 `2 a- h1 O5 w
}9 I& e" }3 E* a8 e5 u2 N
m_wndMenu.SetVisible(FALSE);. F$ m2 S0 k/ d
+ j V( q/ ?" d" n9 K
--------------------------------------------------------------------------------------------------------7 k! S6 M( c: ^
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 r9 c" N! ^/ M# k/ I{
3 @" S* b! [7 x6 n( v4 j2 E5 Q4 w) jBaseMouseCursor();9 }/ X' o; d! @* J, B
}
- b+ F" Q; j: J" c$ @5 }+ O在其下添加:* C1 ` z' y7 f; k% i' s- i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 R, e; o( d( f4 E) @% V4 j# S{+ f ]& [6 J8 f7 D% ^/ Q0 e
m_wndMenu.DeleteAllMenu();" `" j2 g& X8 @* @6 N$ t. O0 O6 X
m_wndMenu.CreateMenu(this);) W, z1 A( S8 Z0 n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ L0 Z( d/ n- X- n$ z, } b9 ~
0 g1 V# O2 \! z$ rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" \" a) y0 E5 W, ~: G, n
{
5 J! k/ S" O8 u. z; P //P以上级别才可以删除所有道具
; Q) \5 K0 W" l! S9 w# Q& ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ X- j* x6 ]1 M2 T# w: n t, y}2 n, q2 t+ j6 |) W' k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- ]. {2 g- T6 W- _1 v7 M, w0 Q0 cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 K4 J- t& u: a1 r# `
m_wndMenu.SetFocus();8 i+ C }% Y# U0 _* s
}
" D) v/ x. d3 g! ?$ Z------------------------------------------------------------------------------------------------------------, X) C6 a- U5 z# x4 c4 K& w
*************************
1 N0 x$ Y- j+ T0 i! B! _WndField.h文件' I" a9 X7 J( X# L; h
*************************
* [8 m3 R4 W7 o2 s ~8 t搜索:BOOL m_bReport;+ S- Z& y4 p0 U8 H! d
其后添加:6 ?8 f7 Q2 F4 [. Q& C, _
CWndMenu m_wndMenu;$ Z3 ?! ^1 V: h( r6 r; C! k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 `3 ?+ U* L' \$ L# {
其后添加:! m7 Y0 t7 Q3 H/ y4 b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# k. @; [; R; }
5 n b: K: K& M- Y' e, H6 S. X4 ~$ R3 L0 Q* L6 u
|
|