|
源文件中_Interface文件夹下WndField.cpp文件
2 e W9 ?7 X. H: B3 D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 N' ], W8 O. t* w
4 E: h+ }/ {- s Kstruct sItem& Q9 n2 v' z" q
{
p4 Y* ^" v1 u& A. H& @DWORD dwId;3 R1 N8 s2 h. o2 z
DWORD dwKind2;; S. K8 c1 Z8 B" a) a, m) ?
DWORD dwItemId;2 P+ }$ h9 ~: ~! h7 v0 V
BYTE nIndex; N. \; o8 z- Q9 Y& S+ o# \
sItem(){6 Z! q: a+ Y9 x1 `
dwId = dwKind2 = dwItemId = nIndex = 0;
- D( n( I2 F! V( |}
5 N6 j" Y& q* B; {bool operator < (const sItem p2)( ]1 Z2 r* ?+ S/ z
{
, f$ V% u6 I. m. k9 E if (dwKind2 == p2.dwKind2)
7 |# w3 @' V+ ~ {) q. y* }% c. c* W' I0 ~3 x
return dwItemId < p2.dwItemId;4 Z8 g0 n z2 \2 l9 s( ^ _
}else{
* Y( Z$ l5 `( W5 A/ z4 I3 p return dwKind2 < p2.dwKind2;7 C, S$ p- T) U( ~
}0 _% D) j1 { ^* u1 w# w' X
}/ A+ h) Q8 }+ i9 C9 [. }% C
};/ d1 U, j/ [ C$ ^" Y: w4 f
class CInventorySort
2 S- Y- [$ _" i/ T' I* e" F* z{
4 i9 N' l$ \# I$ Y% V Ipublic:
4 `: c- `' y3 L/ @, Q& qCInventorySort() R5 c8 N' T! D9 j
{+ f% u% ?5 M7 S7 p
m_dwPos = 0;
( k1 f% K {; b4 l}
. ?. m' Q; I! I( Q~CInventorySort(){}& E) X% q: }& s7 o# u
private:0 i9 W0 V. f! l R6 p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' |1 { {& }4 c/ u+ X3 @+ l' Y
DWORD m_dwPos;
& p$ l& d, R3 N; a; l$ s# o4 ypublic:. C4 p3 w( K8 I( K7 R
void Add(BYTE nIndex)6 O8 z4 |+ \/ N T9 c
{' [5 o! c: C( x, y
if (m_dwPos >= MAX_INVENTORY) N3 I* f6 y B4 R/ L3 }& Y
{
, ]+ I) D; y& L3 a return;1 `: ?% W' u. X' h3 K* i
}
& S5 U$ @& K" Y& ] B m_Item[m_dwPos].nIndex = nIndex;+ e* U* i% H' v! _0 F% b3 |; X
m_Item[m_dwPos].dwId = m_dwPos;! @6 H; N! Y! H9 w! F$ s5 p# _
m_dwPos++;/ }+ @& B# {" a: M
}
3 H6 A, G) j8 M2 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, G( ]+ ?; z! @$ }7 Z
{
( ]) {: ^, D- Y) ^0 p for (int i=0;i<MAX_INVENTORY;i++)$ }% T% u- g9 }7 |! \
{
o; [8 r6 P0 m2 L; Q5 \ if (m_Item.dwId == dwId)
; l- d1 |: E6 H) }& K8 N" l, ` {: K0 M' o- `/ q* U* Y9 T
return m_Item.nIndex;! q5 l# \& _3 k4 X- |5 k! |% B$ v) N
}( s+ K3 X& D+ O. a5 b L
}
, g3 _+ c) m4 b% R return 255;
% m! K- G1 G1 X( e `}% M/ ^) L1 H" |3 ]& R8 r7 x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 I$ E @. M' _4 h- \$ x/ T: B9 s. t{& ?3 ]% i: b" \" x! u/ ~" B- X3 S
BYTE nTmp = 0;
; Z# W, I) b' a; M8 U4 Y5 G5 h* v bool bDest = false,bSrc = false;
- d* Y3 @. g! D2 a' u f for (int i=0;i<MAX_INVENTORY;i++)- t$ B0 C- i1 u! ]* s! h
{8 ]7 R9 _9 W! t, m
if (dwSrcId == m_Item.dwId)
5 A# @- N- Y: W/ Z* C0 k! k {
& ? @1 G9 U. J$ K" i //id相等 则 改变对应的dest和src
u. _( ]# r: B- v6 ~/ V& c nTmp = m_Item.nIndex;, @1 Z- m! p6 h$ A1 C$ s8 w
m_Item.nIndex = dest;8 L. |' w/ J, B* Y: p2 j) g% L
}
2 v+ @0 j0 J- x3 v% @$ b }
; @6 ~; T o5 |1 I# _* Q //临时数据保存完毕,交换开始. p( f) S! j6 A2 _8 B
for (int i=0;i<MAX_INVENTORY;i++)
2 ?1 \3 I# _2 U. e! }; W0 | S8 n- X {2 B, _0 i) q% e. M3 k4 ^3 _
if (dest == m_Item.nIndex)) U) w, ?( Y% M$ H' |! d+ A# s' t
{) R o- x, ?$ F `1 s2 q; s( t
//id相等 则 改变对应的dest和src
" ]$ C8 m6 t. U$ ~2 v! y m_Item.nIndex = nTmp;
0 B& d* m/ j7 j- m }, Q) o. Y0 x! i7 Y. X
}
( t! p: h6 @4 j' t4 T8 O}: u8 @# g3 _2 q
};
3 h I' e0 `1 C-------------------------------------------------------------------------
- A$ O/ a% f" B1 `) A* |5 t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 d2 |" H& G! D3 S1 b* p搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- J3 y8 x( E' g) Y. ~4 n
紧靠其上添加:
: H; c3 S3 {( |7 S# \if( pWndBase == &m_wndMenu )
/ [" Q Y! e7 Y7 X( F, o{; |6 y+ S: E0 E5 S% ?, R; c
switch( nID )
4 X$ V0 O8 x7 @- l, Q0 U' ~ {
, U# v/ f9 F% Y# `9 r5 d, R/ H+ s# e case 2:
0 `. X. \4 K2 d! ?' ]0 c {
5 e; O' u( R3 g. A# W5 u' { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ ?/ e, U+ f% p# L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 ~( G1 Q) R3 b @' c2 @
{, z5 f) p7 u8 T$ s" T0 w
break;
3 t, g. v* A, } }
% ?. |0 i& w1 W% H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 d3 \6 U3 R: a6 M7 f
{( `( v/ g: y0 p/ O2 B1 `7 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ p( z+ x" a5 ?! j) l1 E# q3 f$ ~: p
if( !pItemElem )
! u* Z6 n. ^3 ~- ?0 T& j+ o continue;
4 o+ ^% H- C; U* h5 J. o+ Y" V if(pItemElem->GetExtra() > 0)9 N* v" \# E# Z& y, ?+ r
continue;. X s H- T# H* ?8 F) v2 c2 J8 d% \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - c: m0 D- y [
continue;
( P; Q2 ~) _" A if( g_pPlayer->IsUsing( pItemElem ) )4 c( w* q% g9 R8 R. K8 h, n
continue;( J" e* n" W- r9 [% K1 P/ j8 b# ]& x( L
if( pItemElem->IsUndestructable() == TRUE ): X& ]9 Q( h* o7 {
{0 {, O; p5 s! m2 Y( _, D# e0 f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 O- D, i/ O2 L1 C: @9 Z3 _ continue;6 }! @" ^* l( v3 d# B
}
4 [: e3 ?6 q. z' f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# d: V* j6 S6 n- i- s* o
}0 r5 t5 C2 V% h3 j
break;& y' U+ N- z3 G# h" S) w: [
}. p4 D" }/ m6 o O+ I$ K
case 1:
9 G, p- P& Y7 O. h: U {
$ l' n; M- v! R3 j' O7 v8 [8 B/ Q( j //整理背包/ [0 a( z9 m% C5 L* W% ^
//////////////////////////////////////////////////////////////////////////
* s/ W+ h% b0 k' P/ a //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% L2 j% o* }; l( O7 u" H
//////////////////////////////////////////////////////////////////////////: W/ q: ~' V4 D' Q, T6 j
//////////////////////////////////////////////////////////////////////////
; m6 A& y K2 |! n) }" ~ CInventorySort* pInvSort = new CInventorySort;
6 P6 x4 l2 T+ T0 U. L vector <sItem> vItem;
# v# S5 a: x$ m; p0 U" w: P! l( G vItem.resize(MAX_INVENTORY);//初始化大小. ~# F2 ~4 ~. ^: S6 B Z# h
//////////////////////////////////////////////////////////////////////////. a$ l* @/ O/ x8 A$ J
//填充数据
# `& a8 v1 [" f' z7 |2 E+ G% `# g- U for (int i=0;i<MAX_INVENTORY;i++)
; { a0 t6 y; K) ~5 q { d+ B( h- R. ]( q9 z8 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) O( m0 k2 U5 \ if (!pItemElem)
6 ]& ^" `: G6 l: H) ` {
4 a9 M& p+ A" p5 z3 R+ U- f vItem.dwKind2 = 0xffffffff;) U8 O5 P6 o, z/ A# N
vItem.dwItemId = 0xffffffff;
. m1 i8 V0 d: l( c vItem.nIndex = i;- i* L6 x5 w0 w4 I# P& A* ]) m- t
}else {
8 W7 c3 a2 t- s6 y ItemProp* pProp = pItemElem->GetProp();
8 U. `% e7 }' G1 f' Y vItem.dwKind2 = pProp->dwItemKind2;: K0 N4 @# [% G5 t
vItem.dwItemId = pItemElem->m_dwItemId;: [+ y6 o$ S, d+ d E5 w
vItem.nIndex = i;7 L+ I% w* K! L1 m# C i' t; ]
}. n. U4 K* H9 J5 m: s+ S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# q1 X7 i; f' G6 H3 y) U
}0 N, V% H; V% `/ y& T, Z
//////////////////////////////////////////////////////////////////////////& ~6 O% P" D" c
sort(vItem.begin(),vItem.end());//排序
% M0 F9 C- \* H) a8 B //////////////////////////////////////////////////////////////////////////
1 s1 e; d3 ^6 X! C4 o9 G! K //交换
3 }8 ?0 T; G" ^; Q8 h$ G- N for (size_t i=0;i<vItem.size();i++)+ Y% _1 I+ z: W" M
{* v% k1 x* ?- h9 S( v& O
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 }8 V N% Q1 B9 l, F5 E0 F
pInvSort->Add(vItem.nIndex);' L+ g$ G4 F7 ?4 p, r$ ?
}* _6 {: D4 z: S* m' s0 {
BYTE nDestPos = 0;
1 [& s/ L1 c/ ?* c4 i for (int i=0;i<MAX_INVENTORY;i++)
' H4 C0 _" h+ r2 f {2 ~4 N; ~- l& G! |/ o1 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ V4 M" k+ d8 j% h
if (pItemElem)
) C& L; v% X5 p0 [9 { {2 |; J6 p9 l7 ]% l$ c) z
if (IsUsingItem(pItemElem))
- M2 u, Z* v% _6 o { b: z# @$ A: S
//这个位置无法放+ V$ l7 m% Y7 c. I6 l
nDestPos++;& H. i% J. q5 ~* O4 G6 Y
}
/ I! E$ t) ?. b5 a$ H E* @ }6 w5 B! E' w$ E' {- v
BYTE nSrc = pInvSort->GetItemSrc(i);( W' }: ?" Y. F- O; e5 \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 m' q6 r) X9 k4 ? if (pItemElem)
4 a: ^' |& J9 M9 C$ S$ Y8 A {
+ t- v* k! D+ |) |; r if (IsUsingItem(pItemElem))
# u# q" ^* `7 _: @" [" M {
3 H1 f Q" g( z //这个道具无法移动,跳过) a8 l% {' |1 D4 x
continue;5 ^# R* u# B0 F! g' W
}
* n1 n- E! H) B2 x9 D- w }else{; t9 A; ?4 A; N! H3 d, x. ]
//空位置 不用动
# T1 Q" _1 i( I# X2 e6 u# N3 X$ }/ w continue;" g$ S; Z$ J) V& }: S
}
. v% [. Y1 n. J* ~5 g7 {* Y //////////////////////////////////////////////////////////////////////////1 D8 T( C% H) g6 M; a
//开始移动. K& m: p. z6 x' X3 y0 h3 q
if (nSrc == nDestPos)- B. V! F: o( o1 u& P' n5 \) c
{
8 n; \3 h; n( ]! U. N- ~ R6 V //原地不动
4 E) T O Q7 A! e nDestPos++;
/ D! i5 C; ^3 [7 k9 X7 S continue;4 k* I; g$ }; h& k. G1 O: }
}! ~6 E& A$ I. S" c) `: |9 @2 ?
pInvSort->MoveItem(i,nDestPos);2 }/ \ U$ K) m' X8 X8 u2 c
g_DPlay.SendMoveItem(0,nSrc,nDestPos);# j( Z7 J' K R' a+ W8 k
Sleep(5);
$ ?. s6 }8 A+ o0 S) U8 w) r h+ O //Error("移动 - %d->%d",nSrc,nDestPos);% E0 h; Y$ i, S9 O* \
nDestPos++;
$ |+ c4 |8 b( t; J1 s }
5 N( `6 O! q$ h4 p: `, y //取第一个元素的信息
2 s) l' ]3 G: }+ E/ u( s /*8 t' ?" Q; r, h* m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). g+ T8 B4 D/ I6 F& } j
{% K' ~) J/ |$ E/ b: T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 c5 q) z0 I$ |$ I0 b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 d- H/ d7 ?1 Q k
}
! N$ H3 }1 X' j */% Y. G! [% M; A9 i5 e
//////////////////////////////////////////////////////////////////////////1 x1 h1 f; C; K
break;+ ^4 F/ ~ u; a. m) K4 B
}) O/ | S0 C' R' ^
}
. V: Q6 ?7 d& p* K6 N T}( ?( p) _4 U4 w! L$ v+ X
m_wndMenu.SetVisible(FALSE);8 ~6 B) u7 Y1 m
5 p8 K. U0 P/ q6 k+ J1 H--------------------------------------------------------------------------------------------------------! t, {3 B4 v3 y5 K2 O9 j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 T: ^2 A% I8 i$ E
{0 a2 s4 d% V3 m" Y, T) [8 L3 r
BaseMouseCursor();5 Z4 k; O/ a0 q2 d; s* w6 ^$ r
}5 O! i1 O& N' d5 z% x4 f2 o1 ^* W
在其下添加:( p0 O- D" J$ `3 ^
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' p! t) c% _2 A0 t1 y* W
{
( S* X+ k" }, A4 vm_wndMenu.DeleteAllMenu();) @. A& u# w+ Z& u
m_wndMenu.CreateMenu(this);
# x! [5 y; x" p4 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) m$ E3 b$ \; U# Z) a# K: _
0 H. J3 g' m0 n% o
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; N* i6 {: G9 N0 e{
6 ?& V* f# J7 d* g4 t$ Q+ o //P以上级别才可以删除所有道具
, ]5 |3 @6 e& Y3 {0 A$ m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 \5 r% w2 M! b0 p0 }( F
}
8 G! @6 \9 {9 m; @4 k4 F% m* u1 Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' {- s0 x) P# y. ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# J! {* P8 N/ f% R' J) [" D8 dm_wndMenu.SetFocus();
2 j+ u5 h. r2 s1 {- E; G}! b: h/ o; C' {- ^9 p% Q8 Y: M1 d
------------------------------------------------------------------------------------------------------------) h$ y+ Q$ |: Z/ l" r
*************************
( J l- S% Y+ B# d) vWndField.h文件" ]) v+ E9 R" T' b \
*************************# e9 r( Q" O u! \6 Z
搜索:BOOL m_bReport;
6 n: N. {, N9 G' v' U5 ]5 `% d其后添加:! [. Q- m. p3 k; E
CWndMenu m_wndMenu;
/ D/ B0 _/ Y0 Z" T% e; C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( |* y v$ P0 {) U6 M: Y! d8 _
其后添加:! u/ o- K/ Y+ `. ~" p+ p" [; d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. T4 f$ j2 L8 S$ B: n6 e1 {) f4 h! {9 Q0 l& h! u' i
" K5 C/ o: H& E0 j* E( E
|
|