|
|
源文件中_Interface文件夹下WndField.cpp文件
6 K. B6 H! p, r) Q0 @, T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ }; x' W$ v" X( Y+ {: Y
+ d P2 [2 N7 O" ?9 xstruct sItem
6 [, w& l& K3 _: v{
/ B8 q& a6 F) n1 p) E% |( ODWORD dwId;$ m5 X+ \/ u1 h5 V% m+ A
DWORD dwKind2;
3 p7 \3 ]: Q0 F7 a! h7 [DWORD dwItemId;
7 L8 g U3 }) i' G9 x2 H- pBYTE nIndex;
# U1 s: F: H9 m3 R2 z' wsItem(){0 x$ o7 z* I4 c/ a+ v& e7 C! y
dwId = dwKind2 = dwItemId = nIndex = 0;
! P% P: I+ _ t7 p; W* i5 ~$ N}
4 S9 I! J7 ?# \1 ]bool operator < (const sItem p2)8 O. R; ]8 D3 g3 \+ t, \! v( F
{
/ h9 ~- C* j9 S, V, z if (dwKind2 == p2.dwKind2) [3 p3 O0 X$ K n4 R6 l1 w
{
, P0 w# S8 ~- H+ d' Q8 ^2 H3 O return dwItemId < p2.dwItemId;
# I! H; J) K0 L5 Z: B3 ` }else{
& q: ^; R) i" ^/ @8 z9 J! k return dwKind2 < p2.dwKind2;
2 A1 ` V. Z) K7 ^2 {# |+ D }
& t0 ~5 r9 F/ r& X/ |}
/ b4 s( }$ N: G8 a7 }7 e" c( [" ?};" G4 ^- ^$ F" `9 C7 q
class CInventorySort. A' i) r& n* L& X$ V. u/ ~+ v: ]
{
3 t3 R p o5 ?( G$ W( j' jpublic:
3 j# m# H" ~+ g L8 dCInventorySort()
6 X0 u. ?7 f" O3 d- Y( M; [{
6 {- ?" U& v2 Y% h) I1 v% k m_dwPos = 0;6 @3 O( x1 n( L) z! @9 X
}
0 e9 Z$ a- h) X, B* j) g3 T4 R~CInventorySort(){}
1 F2 Z' c$ q- G8 S! y Sprivate:
8 C' r, d4 n! D" c5 Y8 H0 ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 X6 o# T" w4 q8 @' H/ NDWORD m_dwPos;2 q3 s# x6 V: A$ J; X3 h3 `6 Y2 T
public:
% m( {5 y/ e- Z. f6 Ovoid Add(BYTE nIndex)" b& a0 m; T4 l
{
9 ~+ s( M0 i6 Y# k( h; A) T. X- ` if (m_dwPos >= MAX_INVENTORY)! Y$ Z$ @! N' z& [
{
4 `- V# `5 e" S( P) _9 J return;- Z% l2 W+ \; n5 x6 m8 J, z: j
}
8 R4 Z; B+ ]" [; K& k1 S5 t m_Item[m_dwPos].nIndex = nIndex;
1 [& W5 \$ ]: @$ f4 n9 J: B m_Item[m_dwPos].dwId = m_dwPos;7 _3 e g$ o1 C: Y6 s7 }' H7 {
m_dwPos++;
2 b- {5 U m* e2 X/ r; \" ]}3 B4 |! T' u u: ]# ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
C7 Y9 f% e( ?) j{
7 n, x: a7 X& v0 v; F2 B) | for (int i=0;i<MAX_INVENTORY;i++)
8 l- ?% o- D' [* @7 Q {
}. {$ Y- r' Q, k2 q( z* ? if (m_Item.dwId == dwId)% n& W' n# Q7 z5 H5 U
{
: Z0 M& H9 Y2 x$ b7 g return m_Item.nIndex;
) F3 N; I2 l/ `# B( c; i) W }
' w$ Z9 O' e" P" b. c( s, n2 p }
7 g' z5 b) @. w1 x# F4 Z4 U6 @ return 255;5 i! z: P3 j9 N" x( A5 V
}
7 A( Z& ?8 x$ ^' f% ^) ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
k. |3 h4 r n4 E, ?- Q/ a3 H{* _" c% }% ?. h
BYTE nTmp = 0;1 q; n* M( t+ v
bool bDest = false,bSrc = false;
* \; i& \, o$ `+ N for (int i=0;i<MAX_INVENTORY;i++)
0 i- |& t; q) o: Z, u7 x {
# m$ f1 n3 z# t& h, y# _. D; ? if (dwSrcId == m_Item.dwId)- v$ m( A% v/ t
{1 y3 ~6 T9 J/ G
//id相等 则 改变对应的dest和src
, r* ]& A7 T" ]7 w nTmp = m_Item.nIndex;
8 O- [. `) U4 y$ i I1 m m_Item.nIndex = dest;* V6 t# t, r% M# D! j
}
2 M4 G3 p2 E3 t2 ~ }
. F6 y) S% |! J% a, F! x$ `4 \( @ //临时数据保存完毕,交换开始
0 i) R$ S# F- U& R$ N; @ D! o7 y( W for (int i=0;i<MAX_INVENTORY;i++)
$ t7 m; P. P+ e* g# | {
# c& f3 V. L3 Y+ @" I* v# ? if (dest == m_Item.nIndex)9 F1 h0 O* X0 m: a
{
# n( |. r& p3 ?' T; ^4 {$ ` //id相等 则 改变对应的dest和src% O- o" O* y( D) v' ^9 r
m_Item.nIndex = nTmp;
! a) D3 U8 J7 P4 b/ i" Q }
) F" ^3 `- S2 U g! _4 d* Z }; l" ^& v- U# d, q
}0 W% c% g0 R1 E7 X
};; ^/ e* i6 F4 O/ l( L3 K, S
-------------------------------------------------------------------------
, [, n) ^5 V' ?- N4 @4 m8 J依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 j6 ~# i. w: e. c$ J5 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 j& Q& F, y8 X+ p% E1 B紧靠其上添加:! P. ]1 l% x! ]0 O9 R
if( pWndBase == &m_wndMenu ) J# a' d* U- ?
{
/ |3 \1 b/ U% E' m: K switch( nID )* y# N. d Q C2 ]
{9 V: W9 T' e+ s# R' Y
case 2:/ f; k) j' Y* ^' }4 r
{
) F. X4 Y% J0 s- E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* z: |# d4 w6 b/ Q. O& Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, m7 f2 T3 `# Q: G: @ {% U7 d: ^8 i& n N0 T
break;
q/ a/ J2 v7 J1 q1 H }/ v& P r6 j4 t+ f9 ~
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- W$ F9 h' ~0 M+ S6 d0 V0 k- j' Q {2 o& ]1 `+ F1 z: X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 _; E$ A3 b; r5 A( P1 g/ d
if( !pItemElem )
E0 m! |# u/ z9 m$ y. I/ ~ continue;
* y2 L+ Q% X' c0 R: d# D if(pItemElem->GetExtra() > 0)
1 ~) I! k, u8 F$ m z+ ] continue;
0 @9 v5 ^6 f* g- e( E if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 d0 w& k& ^' }: T8 X4 n( C continue;' i% u0 q% Z' S) Q
if( g_pPlayer->IsUsing( pItemElem ) )
$ S* E! K6 Q0 O! L# } N continue;
' D: @/ }0 T0 ?0 {3 V if( pItemElem->IsUndestructable() == TRUE )( H) [+ v# x) ^
{
8 z1 _2 y3 @- b2 A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- Y7 B7 C. q8 W continue; b. x* R. ?* Y5 a: z. j' p' l
}
) `3 ~! m9 V( _ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ Z' L5 d0 R2 D7 [: T& P% y
}
# p' i- b2 ^& x E break;
8 P M4 p( j ~- i! x9 u4 R }( }+ b. ~' b$ m- @
case 1:; e9 f# D# L" D
{0 `$ Z! @* N' s) j( u
//整理背包( D( i7 q( n' p
//////////////////////////////////////////////////////////////////////////
2 {! U3 D Q$ Y, ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); {# j. f, C+ y4 o( |* g
////////////////////////////////////////////////////////////////////////// E6 G: o7 u- d# N9 h9 j- |
//////////////////////////////////////////////////////////////////////////( C) l l$ C5 {7 |. z1 W; y7 ]( v
CInventorySort* pInvSort = new CInventorySort;( a, m, b" K. m) ?4 k
vector <sItem> vItem;5 u5 i9 t( r$ m9 W% x$ x# g
vItem.resize(MAX_INVENTORY);//初始化大小
$ |0 s8 G2 |- z$ W) R4 c. i% b //////////////////////////////////////////////////////////////////////////; ~- Z3 S' J6 {. @
//填充数据! G" I1 z: y& G% _5 i: Y# Y4 E! o( ?7 l
for (int i=0;i<MAX_INVENTORY;i++)
! _1 J% s0 u' m" j5 g; C+ v+ e {' e {9 E8 c; v+ k2 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) \2 r6 I O, L7 o1 \! z$ S
if (!pItemElem)7 Z3 R* e2 v. c$ ^4 F1 x
{
& N* \5 T1 h1 J, b vItem.dwKind2 = 0xffffffff;9 _! g) L: z& k/ r& ^# Z# w
vItem.dwItemId = 0xffffffff;, d6 g! c! S* c: w# T( a7 ], t
vItem.nIndex = i;0 K/ |) ]) r5 o) U: }- l5 w
}else {
: ~' u8 e V4 H5 D9 \) o: M ItemProp* pProp = pItemElem->GetProp();
$ y" ?3 s/ u* P vItem.dwKind2 = pProp->dwItemKind2;
. F! S- p3 G: u7 {2 h6 R vItem.dwItemId = pItemElem->m_dwItemId; u0 U7 V7 k. ]- b
vItem.nIndex = i;
% [* Q9 X4 L$ l6 t1 u5 d4 w }/ {' V: d0 B" S O: t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, D" g5 f" W8 F" Q1 D }0 l3 ?( Q) E8 M8 ?5 V7 J4 Q
//////////////////////////////////////////////////////////////////////////
2 T& A8 |5 Z3 O2 X sort(vItem.begin(),vItem.end());//排序
/ t, w* O3 ^9 f( {- Z& V //////////////////////////////////////////////////////////////////////////% O# x9 N0 K, q& u6 z6 L& ~3 Z
//交换
7 L2 N( S( Z( }8 ~ for (size_t i=0;i<vItem.size();i++)% R" N( o" g' t4 P+ N
{ S4 B9 c/ n4 E- N/ X
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 ]/ Q4 G) A1 Z: O$ n* B7 T1 J" } pInvSort->Add(vItem.nIndex);) F3 _& r6 P- n& [4 y
}6 x1 b8 l$ y6 I3 ~( [( u$ t
BYTE nDestPos = 0;
1 N: Y7 p1 b; h; i, }5 f @ for (int i=0;i<MAX_INVENTORY;i++)% T% }. ?3 Q' o& S! ?# O
{
" \- {0 a2 C3 A" B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; U* V4 A+ F' y5 D% J- ? if (pItemElem)( C( |0 O& [8 h [1 _6 s
{
; M" K0 ~0 S6 f; R if (IsUsingItem(pItemElem))4 u% S- t2 _5 F6 f) z$ _
{
' c/ N: K6 S m //这个位置无法放; H9 |4 D/ o7 D% Z
nDestPos++;
: A9 y1 W' A; {, r }
& U+ |# W& c9 O }2 M+ W) X( O! c: p& u p
BYTE nSrc = pInvSort->GetItemSrc(i);
3 _: D2 W: `9 t. ~5 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( ^7 ]- [% H) V" e7 U) v0 X8 w& ?
if (pItemElem)
7 I: M, P! N& B( d |" i: r {
3 p$ d" _! u2 i! I9 I3 F$ f5 J X if (IsUsingItem(pItemElem)). x7 ]1 r$ O$ T# m- V5 p1 A
{
& x% k4 V; n X) C //这个道具无法移动,跳过
g% i0 m2 M. X. o0 [# d; X continue;% I H7 w3 _& |% a
}
5 f2 O! ?- h) n. y }else{
6 Q% z h0 e, m# ? //空位置 不用动
( Y/ I( z( S1 [2 ` J5 m continue;
3 c+ e. f" o3 h7 \1 Y } v' x8 u) U/ V2 [# e
/////////////////////////////////////////////////////////////////////////// c7 R' D9 g/ F' L2 S E
//开始移动
0 o- k$ z9 U7 c, x if (nSrc == nDestPos)7 I, N% N- _& s
{
@$ q3 s8 M3 K& t //原地不动) l* j2 _" O$ Y3 r6 W4 W
nDestPos++;- M' W+ M+ [5 c, O
continue;$ B8 Z$ B% g; a- I
}% t2 I! l" k e8 D* o( i: Q
pInvSort->MoveItem(i,nDestPos);
: ]9 Q$ ]% t5 Z* A- I% g6 l g_DPlay.SendMoveItem(0,nSrc,nDestPos);# W% G9 X8 ^6 |. A$ y
Sleep(5);
: _8 q0 I& }5 E: l7 c //Error("移动 - %d->%d",nSrc,nDestPos);
- l) m# a j: J6 m" d nDestPos++;, u& V3 z6 T( g& G6 Y+ g
}# e E! `# M6 {2 w
//取第一个元素的信息
R9 d. A0 F& K) x /*' ]. _4 B6 n% |3 N, b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! a) d0 b/ @- P: k {
$ H! q' \& H" C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# f7 {4 @# y- y! n( U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 X% a1 E- u) ?4 j7 g$ P
}
4 z+ _/ I) s- W: H# ~$ q0 I5 T */
* r$ s. w- _/ l+ q9 _ //////////////////////////////////////////////////////////////////////////% s- x* J3 u/ I. I7 ~+ b2 }' p
break;/ R$ y% `: d, `/ C+ X! T- m
}
" N1 q% f( O g1 I3 e }
+ V0 c$ v) `5 x8 l9 H}( @( ] g$ \- f# ~4 @' W
m_wndMenu.SetVisible(FALSE);4 A* |4 h. f0 o- v* u* q
, X @/ I3 V. t, ]9 E6 _. L. J% C* \$ j+ t
--------------------------------------------------------------------------------------------------------6 i$ i% z" M# ?- S6 I+ k# `5 n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- K3 l" z/ n0 j+ _8 p# ~9 i{
" b7 ~. ^7 r% A5 }/ `" d) `BaseMouseCursor();3 B7 o2 O n t4 }1 ~' w+ w
}- l' d1 g3 W' L$ [) r i3 ~7 o! `, d$ @
在其下添加:8 U# i) @( _0 C) u% g N( i1 w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 b" o/ @0 {& @
{
L, R$ T9 W1 m: om_wndMenu.DeleteAllMenu();
$ L: N9 S) R, a# \* d' Xm_wndMenu.CreateMenu(this);! y: V$ S; r% j0 e* C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ P$ L4 k2 U! D _6 n2 C5 r. `/ \
4 W& C5 W! c+ S! s1 R2 q; V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 F3 L: K! F) c r( v2 f
{
# u ?) O/ d8 @% m& k" Q* X //P以上级别才可以删除所有道具; u, `6 P: z8 S) j* Z1 o5 `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ v9 }+ U/ g9 I, x+ [8 x; y
}
2 w. e& g2 u8 R' i* Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" _; d$ U4 ~" R; a- B5 |8 [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 w5 h7 H# s6 B$ B9 A4 w* V# Om_wndMenu.SetFocus();
4 E e9 H# \. T2 ? O}; e% g/ r a2 b' X0 [) Z% l
------------------------------------------------------------------------------------------------------------" U0 u u2 g5 I0 W8 O) ^3 |
*************************
) i/ \ H% D& ]WndField.h文件
2 W6 g t& @5 [. G7 x5 z+ z*************************
: w5 i, A" p% k+ _4 `( `搜索:BOOL m_bReport;% S$ f& X# x7 L: a% q3 ]9 ]
其后添加:
. U. s% _+ p7 ]/ X! }, }; v8 nCWndMenu m_wndMenu;
, ~/ _, }4 s# v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. N. }* N! d" `7 G
其后添加:
# t1 y C( l% }7 x9 d6 l. \virtual void OnRButtonUp(UINT nFlags, CPoint point);8 n: P* N! ~8 s
) _7 Y/ H4 u8 w2 H4 n8 @9 j9 _2 J
. `9 r6 K2 d) P7 W5 H8 @% A' j. h |
|