|
|
源文件中_Interface文件夹下WndField.cpp文件
' p$ Z) ~* b( e' L: U0 l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) j, Y1 c7 p: x4 b8 i4 Y& }9 @( c. ^+ ^! d
struct sItem
5 S- x" @2 h# E* o{
% w6 W2 F; f3 Z) n; X6 w$ CDWORD dwId;
1 a) Z2 F1 B4 Y: d& C' ]DWORD dwKind2;+ n7 O0 g; ]7 T6 }1 F3 w
DWORD dwItemId;
* J" |6 f' B! g6 }0 y8 [! y* b( GBYTE nIndex;
6 t% d+ \& z, K2 FsItem(){
; |; y% @" y; y/ @ dwId = dwKind2 = dwItemId = nIndex = 0;
; `( W' f# z4 M! J}
3 y& Q+ y6 J, v) P: g+ tbool operator < (const sItem p2)' t/ ^ d1 J9 _; k, m2 B1 Q3 M
{
$ R6 Y9 q1 n# n9 H! }! y if (dwKind2 == p2.dwKind2)$ Z. ?4 d+ k/ q. @
{* o& a8 M4 E+ u7 T2 H: H" k% X) P
return dwItemId < p2.dwItemId;
3 B. o: Q! r* c- J }else{
. J. K9 [; X4 M/ O n) C return dwKind2 < p2.dwKind2;
6 s' G1 c. S2 ?" u8 m8 G2 b }
( ~, t1 L+ t/ f6 I}
j# @/ i0 q7 O' o! U};
+ r W1 K2 z6 ^0 c/ J5 y* eclass CInventorySort* M( Q# `$ s+ n0 Q- D9 o- ]5 }
{
, s0 B P) q, `8 T( }' Z7 I) ^3 wpublic:% o1 |' t' W0 ~6 }* n3 } x* ~, j! n6 j
CInventorySort()7 v0 Y* I7 H/ c* I2 L. ~
{
0 Z$ U+ l# ]9 T# \! s4 l: n m_dwPos = 0;
- N1 m1 \8 Y# Y" q& ^3 ?. X: R}' p2 y. U. k" h& f
~CInventorySort(){}
3 w b2 g; T% \3 Sprivate:
8 ~- z6 X- A. J, ^sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 ]1 X- Q0 Q6 E& p5 }4 k
DWORD m_dwPos;, ?* c8 O+ J) E! o* T
public:
! j* |6 Y `; j/ D/ G7 r$ J0 G% n6 Ivoid Add(BYTE nIndex)# C9 s7 n7 S- q5 M! X
{7 T" Z. A9 _$ ]# |, X) x
if (m_dwPos >= MAX_INVENTORY)
: W/ O' h- I3 A1 F0 V {- B5 ?7 N, K6 }$ ]) a7 c
return;
# \ l: i* x; z }
2 t* C2 f a$ j# r5 T m_Item[m_dwPos].nIndex = nIndex;
2 a; H- [: p: S' Z2 b+ [ m_Item[m_dwPos].dwId = m_dwPos;' i) P+ K- _8 h& T9 B. ^
m_dwPos++;( P9 O2 y& J, P! x
}
7 u+ Y0 E" ]2 |! L0 O& l& UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 @+ A8 p3 e/ R. b5 v& c{
i. W! Z7 a* L( r for (int i=0;i<MAX_INVENTORY;i++)
) W6 L- A( E8 u7 b. {9 P6 E {/ G5 n3 U- ^) e" Y% a+ e/ {8 a0 `
if (m_Item.dwId == dwId)
! m7 l, L* Y+ h$ X; S( d1 n# h {
0 W) o/ p' k) E- b) | return m_Item.nIndex;
2 I2 l! i$ z. H" }. n; B, L$ X4 j+ T }$ `' b# x& m* W' J! h
}; q: e) M5 ^, p8 ~
return 255;
; h" d( b- Z4 x. ~5 U0 Q& [}
2 }. S8 E/ T! O4 [/ \$ evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 E) _! q+ U/ J, c
{& z' S; M( U9 d% C
BYTE nTmp = 0;& q( C3 D: x% ]3 N% ~
bool bDest = false,bSrc = false;% h' l' F2 O/ b* q, L
for (int i=0;i<MAX_INVENTORY;i++)
: Q- K+ l I$ ~" \4 u1 m3 _ {3 _( Q4 F: o; k
if (dwSrcId == m_Item.dwId)7 H, @6 E. z' w, Y
{
3 Y6 J7 }. P+ m" I2 u' {0 |6 g //id相等 则 改变对应的dest和src H% Y, r$ c0 d4 n8 c2 c2 J0 |3 K
nTmp = m_Item.nIndex;# _- b2 K \7 E h7 P+ u
m_Item.nIndex = dest;% A5 O) R R5 M& d9 X
}
0 [) w& x. C/ E1 f6 p }
& d- e5 ?6 N( q2 V8 u% p* ]4 N7 w //临时数据保存完毕,交换开始
/ Y O0 h0 W- O for (int i=0;i<MAX_INVENTORY;i++)
1 h- Q( A; o( Y% A# H/ M( i {
0 d: {7 x, S( \; x/ f! `5 r* z' G if (dest == m_Item.nIndex)+ h; }: c9 N i8 B
{
6 U. b8 x: Y$ L# w. @3 n- L //id相等 则 改变对应的dest和src3 U; ~6 o2 ^3 L9 H- l
m_Item.nIndex = nTmp;
; a2 w* Q+ X, |( S& O% Q }
$ j% j$ u* D' } T }' _4 @6 H. a3 t" B
}
7 r8 a$ F- b5 i% Y( R3 \};
, Q* b0 b8 t& J6 ~: i-------------------------------------------------------------------------
7 A( x" `+ o3 U6 ?( d M- {0 ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: h. L. D3 t4 A B- g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 ?4 B& \# s- w# ]: {- `
紧靠其上添加:
0 E; r2 X% q1 Q/ Q4 Nif( pWndBase == &m_wndMenu )- G+ q3 _. B- K3 I
{
( s9 ?* t- r: @% W( u; Y switch( nID )
6 d' {& p) b5 ?6 r {
4 {0 s8 F0 q. e case 2:
; ?8 r5 b& ], s' c5 ^1 B; w {
( ^, J4 t b) ?, C+ z0 ? //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 z" ]1 ~7 i6 T1 d if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 j! N5 ~ @. t( ^* @5 O {4 L/ f) h; s# p6 t; ?7 _- w
break;
8 v, a( n; `7 b% o G }, J/ D; g) s9 L/ }; L5 s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* U! \/ t8 b }9 B
{, e. E4 [# X/ Z$ F# i0 @ o. b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! m9 g! ?5 E( o* a8 l1 B: C, p9 U if( !pItemElem )& M8 W7 \9 b5 u
continue;
; I( E% z" @2 X5 j5 G" P if(pItemElem->GetExtra() > 0)
. ~3 `+ m; n8 q: b$ U, B continue;* L0 A+ k' E7 R0 t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! M. ]. \1 L9 i) U continue;
% u# h* @( Q% [+ m; p+ S! T' S if( g_pPlayer->IsUsing( pItemElem ) )
* V( k4 s( u% N* T continue;1 n$ r! L, B1 g
if( pItemElem->IsUndestructable() == TRUE )
2 n; C$ M# ~/ M {
9 V8 O2 u1 ~; h2 u3 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); r: v- W n+ W
continue;$ g+ r* P% ] p3 ^$ N( }, G# L
}' n; L& T/ p# U( ]: K a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 l9 W" k) m9 d5 D$ v }' ~* c/ J1 }# j/ ?8 i1 h
break;4 z5 }8 `) w" X
}0 {) W( v) E+ K
case 1:
# T4 D8 x' W" H b# c {! x3 b5 \8 [' U) p; u
//整理背包8 t/ f" s1 B. a) O! v
//////////////////////////////////////////////////////////////////////////* o3 M; o. t [1 ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, P P- | L/ \0 [ //////////////////////////////////////////////////////////////////////////2 k( w; A( R7 Z( X
//////////////////////////////////////////////////////////////////////////4 X1 I* r0 u' H( t1 O. W
CInventorySort* pInvSort = new CInventorySort;
& `( w) n- y' @ vector <sItem> vItem;+ s& ]& U. I# S/ v6 y0 A
vItem.resize(MAX_INVENTORY);//初始化大小% y9 d$ G' \/ A9 y3 T1 m
//////////////////////////////////////////////////////////////////////////2 ^* O5 k7 B9 W3 x
//填充数据
) q4 U! o5 f1 G! r1 G" H2 n for (int i=0;i<MAX_INVENTORY;i++)
0 j: B f! s" O9 m {
{: x4 k$ V, ]0 G0 W F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: ]; \2 X5 R9 {/ g, n- M if (!pItemElem)
* D# Y) Z6 V" s; L {4 i' D2 A3 @! I
vItem.dwKind2 = 0xffffffff;( f7 @5 O8 t3 N/ D6 Z' v2 \
vItem.dwItemId = 0xffffffff;
Q+ f, \& l3 k& F vItem.nIndex = i;
, Z5 f( w% y# f0 g }else {
+ h* d, v4 `, y/ b- [. L5 L ItemProp* pProp = pItemElem->GetProp();
2 h! Q+ p* k {! U% J; Z vItem.dwKind2 = pProp->dwItemKind2;
# B/ _' v* s" k vItem.dwItemId = pItemElem->m_dwItemId;9 H3 s* D6 j A( P w( E( ]
vItem.nIndex = i;/ q$ N( S2 b+ r4 ?/ D
}' J. J l r" Y' o
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* ]$ {6 { b) u }
- ]' J! W7 p7 D7 c //////////////////////////////////////////////////////////////////////////
0 D* X& f6 e! g( c sort(vItem.begin(),vItem.end());//排序# T' Q; I( _& x) `4 E+ E% m/ N6 Q
//////////////////////////////////////////////////////////////////////////- V- i" d* G4 v' l- p
//交换1 g( H* @+ l! J( V; \
for (size_t i=0;i<vItem.size();i++)
- ]% `1 }7 `; M3 b, {, j1 h, Y( ^2 d: b {
! k( j \9 {/ M" f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" _5 @- U0 M# o% y; @2 P; @' A6 ^ pInvSort->Add(vItem.nIndex);5 ]# F$ [! }8 y# C: T' r3 u3 G6 a
}
) I$ H5 O5 U' E: z% T7 d% F" O BYTE nDestPos = 0;( o Q2 N+ J* t3 V0 o8 d$ R
for (int i=0;i<MAX_INVENTORY;i++)
- X, D7 N6 U$ o. K: s: l {
. K. Q7 T- W0 K. Z, I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& ?: S5 C/ J2 y7 I3 C if (pItemElem)
5 l2 \* r _( X {/ ]1 C3 K1 q. p7 I3 U+ k$ J K
if (IsUsingItem(pItemElem))
. Q: _$ r5 p2 H! ~/ \, _ {# ]" w. x' w" C8 p7 h4 ]
//这个位置无法放, ^6 k: C- J& ] d
nDestPos++;
8 {3 b9 @7 T) @1 M7 ^ }
$ j6 ~% Y! W) q3 Z N }
) j: K+ j G6 w. [- | BYTE nSrc = pInvSort->GetItemSrc(i);
( S; h# ]& h! M; R7 R7 H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: S7 @- J7 a2 s; m$ Y# o% i6 p if (pItemElem)( _. s' L& V% \2 r
{0 ^1 h' M; ?. o
if (IsUsingItem(pItemElem))
1 d! O, ]! g* h0 i0 p: { {+ [+ Z& i7 Y3 N- s
//这个道具无法移动,跳过6 d8 D8 ~ c6 b, k2 Q" t. k9 z& f
continue;
+ }4 ^% X$ b% A9 N% J }# G( K9 A8 ]! H/ q
}else{2 l, t4 G% z1 s! L% e: I
//空位置 不用动
M6 z F. d! I7 _* G C continue;5 q5 j( l5 x5 ]- F
}6 S8 x7 F: O4 h2 A) l
//////////////////////////////////////////////////////////////////////////
" D( ]6 ?, V$ x0 { f //开始移动, r r/ z* N1 U8 x5 U' @- g" Y
if (nSrc == nDestPos)
0 x/ f, w9 r5 j {& q: p( w6 ]! V7 J4 D
//原地不动
( w H( E* f- L- P. O2 I0 p nDestPos++; }/ i3 s+ P; b) o0 [$ N5 D/ j
continue;
/ Z* }8 y w4 I) N( ~ }
1 n( a4 T6 F" X. C pInvSort->MoveItem(i,nDestPos);4 w6 f; S& D4 R5 B; Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ M4 Z6 e# ~) V Sleep(5);
5 r% f1 s# g! D* W9 w3 y, L //Error("移动 - %d->%d",nSrc,nDestPos);+ L1 Q3 u$ e* V8 P& v, J
nDestPos++;
0 N* K, W; @4 @; K }
& z6 K( N9 t! `% B //取第一个元素的信息* I4 V, h, }# ~5 L+ f: W
/*( r1 b, E1 c9 Q' D5 A6 f X6 \# T. r( ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: i2 N# s& [- M3 b% [! V7 | {
6 K( s6 \4 m9 N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 y- n4 i7 l( a$ Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; j8 M$ H% p" w- V+ ~ G1 q
} K5 F% }; P1 J- l5 w
*/
4 |/ F7 q! A. _$ }5 W! d2 u2 T/ e" j. n //////////////////////////////////////////////////////////////////////////. U! {" l8 Q' j; }# K$ ^' I. Q
break;4 A- \2 _+ Z4 _" m8 i) N. O2 w
}
7 X# f# d! f) t6 m } 1 T! p' n. A; [' A; f' v( Q T
}' z' u$ v. X" O" a& P' h1 J
m_wndMenu.SetVisible(FALSE);
) A" X( G! A5 n( t- M/ @/ H$ K9 @# B" k3 T3 w$ b" l0 [
--------------------------------------------------------------------------------------------------------
2 X# q% D) l; x I% ?7 H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 Q' z/ [/ X; @/ ?
{
3 b1 }8 s% u1 t* j7 {3 oBaseMouseCursor();
; ]' g( s4 ?. Q* \& l9 f3 e! S- S0 H}
0 t4 Y8 i$ x( A. ]9 K5 H& p在其下添加:' n2 j' `( ~# ~( M1 ~$ W3 J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 }/ I6 m- O+ m) @
{ V% L, V) \3 R: H( u7 |
m_wndMenu.DeleteAllMenu();
. ?8 x1 x8 ^+ n/ n; t. im_wndMenu.CreateMenu(this);3 W& Q" B4 Z* E6 ?1 h4 k( F+ x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; n5 e3 O! c: I2 ^) u! w
# C/ A( B, {" mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" P1 C4 h0 b8 X" t0 p/ h+ s' [{* x z& R$ { j( H
//P以上级别才可以删除所有道具
' K: i v+ c3 `$ ]5 T+ L; F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 f4 z/ K7 o/ Y0 B/ U
}
" ]5 _. M/ N0 Q) em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! `9 M& ]7 g8 @$ F+ W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ m h. d$ E5 i, |
m_wndMenu.SetFocus();
; d2 [) Y3 `- h}
8 K8 R$ f4 }* l% ?# A7 J& P------------------------------------------------------------------------------------------------------------% l. c: e7 v' I/ N4 h+ d
*************************2 s) |: y4 e* o
WndField.h文件+ B' k3 h' s; n# G0 F. d7 {/ x
*************************: @1 c6 Q0 v' \
搜索:BOOL m_bReport;$ D" H1 f4 X* F& X; q$ ?2 w4 B
其后添加:
1 D' E5 E2 H" H$ OCWndMenu m_wndMenu;
& P9 w$ x; m. b. w* U( n6 w1 u" `搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, z5 L1 q {; Z# `其后添加:! w0 c+ }- @% f) y. @. O% M
virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ U* S9 u$ i4 A8 X
- y. P# B' X. [) x
7 Z h& y6 M8 ]7 |) f |
|