|
|
源文件中_Interface文件夹下WndField.cpp文件
( ^$ j2 u& i/ ?. k8 |! ^" l/ S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) M% O" \! U% J: k9 s7 D
% ]5 z0 A* D! w4 Y- U5 Cstruct sItem3 m& Z/ X- b, r) e# w
{) u8 x! o4 G; o/ ?. R0 }7 `
DWORD dwId;
# J5 y: ^6 @9 lDWORD dwKind2;) l0 V0 ~$ H4 J2 Z2 v% x7 [2 X
DWORD dwItemId;6 i" p( q. k+ W# O/ _
BYTE nIndex;# K. I. B4 n) D' Z6 H% Z
sItem(){5 T J3 C+ C" y2 A2 j N
dwId = dwKind2 = dwItemId = nIndex = 0;# Y: _1 ?& E: y. k) Y! m
}$ ]/ \2 a* h' X" D8 q% F$ A
bool operator < (const sItem p2)
( l( ~! N/ }6 y2 ^6 g{8 Y/ u D" e' U9 R$ B" T- Q
if (dwKind2 == p2.dwKind2)
, D Y8 V$ P$ I# A {
1 A; j0 ^! Y3 u6 A- J: c return dwItemId < p2.dwItemId;* V- } G) G4 V& d/ {, ^
}else{3 N* |, k/ x; k
return dwKind2 < p2.dwKind2;
- P! B2 L( \: |; A: i3 Q- U( N }
7 F4 _# p. r/ }2 u8 V, k}
1 U3 Y2 m2 M$ Q' Y};
3 t- A$ c' @. Y- iclass CInventorySort$ I7 i0 k2 H9 U; ]8 Z4 a
{
8 Q, O/ q9 @8 apublic:
' `" `( r) v5 t; B5 n0 y& ]CInventorySort()
; s' C; y( X* \# u5 B8 e; U5 ~{
5 {+ e3 T1 E3 v' p" q m_dwPos = 0;
E' p3 r8 O& \* X" r* `5 z2 a}5 N! u |- y) s7 m" i( R3 J
~CInventorySort(){}
$ D; \ F: Z$ p0 B4 A0 _8 Nprivate:
" h0 ~/ K& V+ ]' r* L2 x/ AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 d- d3 ?( E# yDWORD m_dwPos;
& }- @3 g; d T* B: opublic:
: k5 V+ |5 C: m3 b) svoid Add(BYTE nIndex)
+ g2 b' }" }+ u5 |4 `{/ V" ~3 n+ Q0 d0 h& Q9 a( j. n7 c3 M
if (m_dwPos >= MAX_INVENTORY)
5 Z! i4 r. Q, w2 z {
# a' P& ]) v0 |4 I% M* e* ~) | return;
! S; ^' j$ n! o$ f }" c0 F5 a& S$ G
m_Item[m_dwPos].nIndex = nIndex;
7 D. P( L7 U& v9 ]9 ^5 r S* b' K m_Item[m_dwPos].dwId = m_dwPos; ~+ R# R4 V& F. o0 r% d0 |+ `
m_dwPos++;
9 [ F _$ ^6 C) j$ f}
; s; ]' e1 H$ @4 y" s6 QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 b! C6 x% D6 g/ `- e
{
* {; R0 u; N L, r for (int i=0;i<MAX_INVENTORY;i++)4 B$ C5 g# ?+ o) p) A
{
0 O5 h$ c! q) [7 i, f. L$ f if (m_Item.dwId == dwId). L9 ]5 `$ E ~: Y' p0 k( P( u
{) W; l$ A( h6 m, o" d
return m_Item.nIndex;9 g3 U( [3 X0 t. x
}: A/ l9 p4 P; t1 r, \
}1 m d8 \( a) z" W6 s$ F5 s5 y: o
return 255;% x" U+ ?: B( D) j+ ^7 m' q I
}2 m1 d1 ]" |% ^2 }% z* N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% w' B9 E2 x& C; S{8 b8 `+ L& ?' P! n+ T- N
BYTE nTmp = 0;- }) S; l6 S. @* ~9 L/ d
bool bDest = false,bSrc = false;
$ z$ K5 v* {0 g: {/ u/ s T- i for (int i=0;i<MAX_INVENTORY;i++)5 c6 U8 e( i) i8 \% a# r
{* ~( g) q7 n# X1 |7 x- o/ M
if (dwSrcId == m_Item.dwId)
. j4 z* s/ P" P0 z& f {2 @- {+ r! `7 c! _
//id相等 则 改变对应的dest和src/ Z9 g* H! O( P. a
nTmp = m_Item.nIndex;1 Z1 s% P3 h# G
m_Item.nIndex = dest;
! A! X+ |0 o+ \0 _* e }" f7 Q, _' \3 F" ]" P# r' @
}
8 ~) c3 G$ i f //临时数据保存完毕,交换开始
3 J& J* T- S8 c for (int i=0;i<MAX_INVENTORY;i++), Q' B+ D1 k8 Q- S x" F8 ~
{+ x9 j) s+ \4 U
if (dest == m_Item.nIndex)
0 h/ A) j" ^4 J: U7 z2 B- E0 h {# h; j2 s: Y# T8 V" _
//id相等 则 改变对应的dest和src f( X- ~0 F* f( u" q" B3 C% ~" P
m_Item.nIndex = nTmp;
) p; F4 ^& ^/ D }1 ^$ D" P* H3 m, b, X2 N
}
* o+ `/ K1 o+ J}
: I5 e8 G4 U' i3 ^( J+ }};4 o3 H4 H, o2 }- U3 a3 K
-------------------------------------------------------------------------2 G2 M- |* f" ^1 m% U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 h7 O* R; B& q) M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 m% {( B8 I6 Q7 F8 t7 |# N紧靠其上添加: ]) R0 i/ c# }
if( pWndBase == &m_wndMenu )
6 ^. M4 S7 u/ a# W/ u) D{# w7 [' {. M9 F* H, H% z
switch( nID )' F) o- s" x) {$ R. ?2 d6 Q0 i
{
/ m" K5 `9 r2 X) J: v R case 2:
/ v+ {9 f' \8 ]8 ?1 X% g {1 w' c6 b) D j. m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); @& t* c: @( ^2 _" z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 _5 f0 Q2 m0 A; T
{
0 n' m5 {: z+ [7 y break;
' G" ]' @0 ]" ~* g }
" n1 z$ ^! c' ?& o* {% s for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( t- ~5 U+ D$ S' ` { T" n7 W; u% F2 a' c- e& Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 A8 y+ U* } `2 u: g0 _! x7 S: p if( !pItemElem ): V+ n) P# o" U( q
continue;
& e6 ^8 h6 E& D' ^# W( Z if(pItemElem->GetExtra() > 0)2 n- W* m5 Q& W! \2 p; V, v
continue;6 n0 j2 |1 V% Z1 b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: q- {/ X* ^+ @ j continue;; u1 S$ k# \3 k( B+ ^
if( g_pPlayer->IsUsing( pItemElem ) )
( Y5 R& g% x9 P6 _ continue;- e1 R( r) t# I
if( pItemElem->IsUndestructable() == TRUE )
' N7 v; w0 P) c- B {3 v7 H& V' c8 x' T2 t+ w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# z7 E4 H( p" |0 z1 J R0 M continue;
9 B. D. @9 y9 K( X0 T* _ }
* |; R) y' _( f# P8 @: g; c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 e* {! i$ f+ E7 b }7 W1 w7 R8 L+ P# y' e
break;9 S* D; y( g* ?; x7 P+ b
}
7 }3 T+ P# i, Q3 J- l case 1:
, A# f& `* R) k- O7 j# H {' S# l6 e! Y; K1 O$ a, r
//整理背包
. ]+ v: G. `& o3 |3 ]! @# t$ ` //////////////////////////////////////////////////////////////////////////
8 Q, F) Z" g4 P5 a" R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 b9 L1 Q1 @5 I
//////////////////////////////////////////////////////////////////////////, p3 Y# h$ |( m, |
//////////////////////////////////////////////////////////////////////////; x% Y# D9 m' x# a& P
CInventorySort* pInvSort = new CInventorySort;
8 }: `, G Y5 i1 T' N! ] vector <sItem> vItem;3 |3 Z; l$ G. x. q; v0 r
vItem.resize(MAX_INVENTORY);//初始化大小- X* ?( [( [0 V2 q0 {
//////////////////////////////////////////////////////////////////////////
1 G: z2 z5 {" `# F+ F4 t; }, w //填充数据
; n8 S+ g2 Z" j5 K; i for (int i=0;i<MAX_INVENTORY;i++)
1 J3 f1 \$ m: e9 _; ?9 A3 V" H { h3 d5 j+ H. L! p* H' R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 n, k$ D/ h/ u* Z# }7 f1 Y* Y if (!pItemElem), y: y) o6 v8 ^ Q5 c$ o
{
* O, @' C3 x" p- [6 U- W8 ] vItem.dwKind2 = 0xffffffff;: M& b1 k5 c+ z% n& Y5 k ^9 k
vItem.dwItemId = 0xffffffff;, Y" h; I7 b. A
vItem.nIndex = i;
. _" H" n, E2 B7 y3 S2 j0 g }else {
/ s! n. P2 b7 o: L5 [9 X ItemProp* pProp = pItemElem->GetProp();
) W9 h- }5 u N6 g vItem.dwKind2 = pProp->dwItemKind2;, y. K5 g$ x9 G+ f
vItem.dwItemId = pItemElem->m_dwItemId;
* ?6 @6 J. s/ n5 x vItem.nIndex = i;
7 S4 {( ]% j% `" i# R) `& ` }
3 I1 E. O3 @) Q+ | //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 x7 B+ n. j& j$ q
}
; _. ?; D9 k e ~ //////////////////////////////////////////////////////////////////////////
V2 t& d1 o& e' M6 r- w9 I) t sort(vItem.begin(),vItem.end());//排序
3 \, w9 H' p0 s, \! z# F% Q //////////////////////////////////////////////////////////////////////////: j8 W3 W7 H9 N, l+ Z: ]
//交换
8 G! Q8 D* [, r4 i$ E for (size_t i=0;i<vItem.size();i++)
; i0 _, Z8 k9 h7 Z {
$ _ B# k$ W' l2 N% \& B //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 ^# r' _1 K7 I* X. U% C! T pInvSort->Add(vItem.nIndex);
0 d: z3 i* V9 p- l: ` }
! Q- [, @# g( t% I; m# M e BYTE nDestPos = 0;
& V% l8 `8 m0 g* \ for (int i=0;i<MAX_INVENTORY;i++)
+ g8 j* P8 z7 u' |. K4 f {
2 J0 Q& O! m+ q4 j' w$ W! B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& U5 D: H$ b `" c; c if (pItemElem)
" ]; H) Q4 I! M) P( L {
0 p, u; |! J+ A! ~ if (IsUsingItem(pItemElem))2 ?: s5 E, j+ U5 T# ]
{" B1 L/ d( M$ u8 `
//这个位置无法放) N e, c; @8 L
nDestPos++;: m, H K4 E8 j2 y6 \' K
}) e1 A* Y5 i" g9 }2 w9 e8 h
}
4 J& A8 h& k4 V$ R/ \# I; Z S @ BYTE nSrc = pInvSort->GetItemSrc(i);
( k9 V" W+ h. P" j4 V( ^ N1 H% l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ y3 ]9 S' |" x/ F" O+ Y9 Y if (pItemElem)
& q2 X% H7 T' {" X7 D0 i! { {+ [! t& l% L6 o
if (IsUsingItem(pItemElem))4 S8 X `$ ]6 t4 t
{
8 y, y; c6 E) T6 W) x //这个道具无法移动,跳过0 w/ T+ k' w/ j: e- p* Y! o
continue;9 U5 l+ ^( E1 }$ R9 `
}
" X# B( N$ ^* g( M+ J }else{
- X5 Y, d: F, g; C //空位置 不用动" k5 ~3 g" E- R( ]' B
continue;
5 z9 B, G' P7 Y+ V }$ m5 ?, y7 U' a& w" h& z( i
//////////////////////////////////////////////////////////////////////////2 J$ t7 P: A% j; c, Y
//开始移动- o5 }5 E' Y+ e2 L8 N5 q# w. |6 Z4 [
if (nSrc == nDestPos)
+ o0 w, i0 t1 @( j3 V2 J {. d) @% |, |4 |2 i
//原地不动8 V& G7 \4 ?( @! n
nDestPos++;0 c- j. d3 k8 q! L
continue;3 l0 l M, g! x
}
) P, Y6 H( M" K$ s. x pInvSort->MoveItem(i,nDestPos);: t, ]$ p3 F3 ~# T. z F* A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& Q& C4 E7 U; a2 d3 w
Sleep(5);
( Z: p" K/ ?- b" K //Error("移动 - %d->%d",nSrc,nDestPos);, x& I& }& x6 N9 j6 B2 g
nDestPos++;
o. `( z8 w/ z' {. \. |# Q }
3 T7 A0 t4 s- o$ w, y" n //取第一个元素的信息" A+ @ ?5 G$ c3 @* n/ F# ^
/*5 K% x" u! D, W$ w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ O! U3 [& s7 k( v- W+ {2 e4 B! W. k
{
0 c6 ~5 q5 Q- `# e' S. t. Z" j v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( t7 @# R9 B& v+ d2 y$ H3 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- V% |) T& [$ o* E- { }: f4 W3 @! h3 Y0 B
*// T( E% f% [ J( O$ [
//////////////////////////////////////////////////////////////////////////: u5 i/ m0 e6 z3 t
break;
# N9 Q4 L ?6 h6 H! h' R+ Z. A }
1 ?2 W4 o E( E2 f6 n) j }
/ Z6 Z3 X* G; `1 }- g# I' N}
4 x k5 a2 h; Y: z8 H4 sm_wndMenu.SetVisible(FALSE);* F6 u% b1 M7 Q4 q
8 l5 E. x: Y3 p1 d( A. B8 A8 k! _) T--------------------------------------------------------------------------------------------------------
3 F' L! O- u. }' S; e+ w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- \4 O, q$ n' |( Z
{: G) e% k: ^; h& ?
BaseMouseCursor();
) Y% ~) x* n3 `4 d}( n- D, {2 L6 h0 Q2 G, q
在其下添加:: e- {8 K* N; s6 W& j O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 C9 U% f3 D B J1 ]5 U! v
{
( n7 ]9 D9 | h+ E; b- Y8 D* tm_wndMenu.DeleteAllMenu(); I3 y5 N8 n! e3 c
m_wndMenu.CreateMenu(this);% A9 X, [% B, z$ C6 d7 j3 n5 S9 U8 D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 [; U& ^; N0 C5 ^% c/ F$ l z$ Z/ [. V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; F* k. g* T' K- Z9 v7 c- K{/ L) f9 h5 l' n* c7 i( h# u8 ^& J+ _
//P以上级别才可以删除所有道具! W7 N% |) J* q+ U. R S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, D" _4 U" ~) o7 k
}
& r+ M' p+ i* \) x8 Q0 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ D: G! w: T* O7 `2 {% Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& b* q+ I" D) p& e6 c0 W7 d
m_wndMenu.SetFocus();
+ P2 g8 O$ n' j( v( t7 Q}4 L7 `/ E+ t- _! [$ }1 u' W% ~
------------------------------------------------------------------------------------------------------------, {1 D! z p1 @4 I/ v$ \
*************************- l/ \# j; k7 g" d$ j. {
WndField.h文件
+ ^0 V; u& n' }1 [- F*************************
1 s% N( X! ~+ q, k4 J5 a P搜索:BOOL m_bReport;7 W4 @6 K& g9 U1 }4 L
其后添加:
7 s. z, U @# K9 ?+ Z- ^2 T; G( mCWndMenu m_wndMenu;
( m, H9 ]& e: ~% p% ^* \3 J* a$ j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* f T5 G$ t8 g% V) C) P/ N其后添加:$ K! ~& Y, U& ^9 F1 ~" c) O7 p6 d% @
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 }: y9 E% ~( {0 n3 h0 s
/ H a2 H9 K3 g# t3 t( ~
9 C7 T( D$ U. P$ y9 C* U, C
|
|