|
|
源文件中_Interface文件夹下WndField.cpp文件
( A3 Z# R, S7 b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 E" ^5 I+ [: f1 w
# F( P* i% e' ~struct sItem, z9 w5 ~2 X2 y4 I5 `$ R1 X
{
8 X% I0 ] q1 U; yDWORD dwId;9 h+ [: s+ ~6 R( L* n
DWORD dwKind2;
P% [ K$ x7 F- ^DWORD dwItemId;, J' ]! a6 C9 o% r
BYTE nIndex;
+ j, d7 n& ?9 s; z# `; zsItem(){
; G: B* Z" R5 D: m dwId = dwKind2 = dwItemId = nIndex = 0;
6 A3 B: x" G" x( K' ~+ F6 ]: o}
2 t. q0 B* f' `' J$ t8 Tbool operator < (const sItem p2)
1 Q- |$ L0 f: ?# m{
2 V% b& d, @ _0 v3 `2 F if (dwKind2 == p2.dwKind2)" ?8 l( L% n) R& A
{
, N" K$ ^, ?. V: |2 `, Q+ ` return dwItemId < p2.dwItemId;- g1 M% Z+ F1 l+ Z5 S$ r f
}else{* B0 P! D7 f; {9 }6 H6 L$ k# Q
return dwKind2 < p2.dwKind2;# z' S0 {& I8 Q
}
- I& K' ^. e1 T% G}
8 @$ O2 }7 R2 J2 k; W};
/ a1 l1 [$ G: a% ~: U" O' b( Lclass CInventorySort
& h1 ~2 I" r3 t2 U \{1 Y; F& m {7 A+ n* _
public:
; a" [8 K, \1 I' t0 I8 wCInventorySort()
/ P ?7 H3 o4 w6 _# b/ N) j# @{+ Q7 ]! T' K/ L& O
m_dwPos = 0;
0 e8 u# |& K S. B+ y0 t}4 Y( i3 n5 W6 K/ ?4 S- t- u2 _9 a
~CInventorySort(){}
8 Q( T" L4 W; U9 H8 q: R8 hprivate:, @- p) P+ c5 ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( E, n( K* T& n) r8 jDWORD m_dwPos;* n3 P+ `' c9 L3 m( ~/ }; \6 I
public:
- ?0 u0 w7 ~4 o: Zvoid Add(BYTE nIndex)
/ M6 y+ Y# ~* U" Q9 P2 H8 g{
; T1 J+ F/ G$ E9 t3 }+ u if (m_dwPos >= MAX_INVENTORY)
4 d4 ^+ i# J- u1 u% Z$ g {) |3 B0 Z6 q+ R. J
return;7 M' M5 d9 [9 q3 Y4 k, B# W
}* y2 B j+ v" a9 Z/ C" x, `/ |% w$ t
m_Item[m_dwPos].nIndex = nIndex;
2 i: V) v f( Q" ]2 N( D m_Item[m_dwPos].dwId = m_dwPos;& J0 R$ i* a0 L- Q$ O9 j* y
m_dwPos++;" N6 J! ?% l2 z6 I
}
L" K4 [6 r8 W" BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. b' L9 G! {; x3 I# |& O
{" @: T- a1 V" Y; J! ?. [
for (int i=0;i<MAX_INVENTORY;i++)
' j3 N/ ]+ O, P {
" |7 [) u6 ?* \. b5 C: B3 Q if (m_Item.dwId == dwId): q! A* `3 \+ w% M
{
1 r- ]! j9 h& p" w% V# J9 m return m_Item.nIndex;
( k; z6 t. I! f" i' }5 H3 O }
) r7 V% P* c" O } d9 T" q; s# T1 S4 S5 U) u
return 255;3 c! m9 z) e I% ]
}
) J3 S1 b# m9 H |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ V# l' S3 ] j& a, p7 d+ z$ h
{# T# M* t0 c* f3 U* ^
BYTE nTmp = 0;2 _( M. z. V5 b3 T( m3 J; j6 d/ \
bool bDest = false,bSrc = false;4 E$ ~7 Z7 D2 l( p+ e+ S
for (int i=0;i<MAX_INVENTORY;i++)" U. G3 P& u* E1 n" R
{
' ~9 N6 p2 Y" Q5 R' V if (dwSrcId == m_Item.dwId)0 g# \! t9 O+ E( ^! R& w
{
% h, S3 D0 n" R$ m' @6 I //id相等 则 改变对应的dest和src
7 P6 v9 i8 k! @! s: ?/ d nTmp = m_Item.nIndex;
) d9 x7 Z" {. G3 P- g! U8 W m_Item.nIndex = dest;
( q7 ]0 v" ~+ E7 |& h4 x& G }1 y; b- o. G" [# ~0 j
}5 o; F% v. q }! U) a
//临时数据保存完毕,交换开始
) w" p: V% a* L; p, o$ o3 o for (int i=0;i<MAX_INVENTORY;i++)0 j' C' K' g8 b0 Y/ R
{3 I% y1 f6 y% ~5 S6 I/ f
if (dest == m_Item.nIndex)
) V: T3 W U3 e7 L- ^- |9 Q# F$ ^ {. I: q x1 p7 X& P2 P
//id相等 则 改变对应的dest和src
) q$ G0 ~3 }! G/ L6 J m_Item.nIndex = nTmp;
, n. u7 e" y$ G% ~: ^% Z }
2 O3 Q" C3 M' _ }
% b. ?, b4 V* f}
( ^# w8 M( Y& K# p# C$ ]% U};
" K v k% W2 g9 f-------------------------------------------------------------------------
' t& [$ o+ B! }, x- a) j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ W) o" O: s; k% J) f4 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" L4 ?3 M0 s$ i3 Z
紧靠其上添加:3 t0 P2 K, u' R3 T4 ]
if( pWndBase == &m_wndMenu )
0 H% }$ ^/ z6 |% {( m. F3 W, C4 C5 |{
% s( L# P& Z: a' G/ A switch( nID )
) E Q( Y0 X; e! T {
8 o% v' C0 M" o! f+ o+ H6 C P) _ case 2:
% B$ B4 V K# Y$ H* [) G {5 C4 z% ]" ~$ O% m8 ~" S9 v4 m5 T6 a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ u! h3 B. P3 I6 Q# x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! \$ G: a( W. ?) X0 y! r( l
{
6 J1 `5 d" V: [# E! X break;/ U: I `% p- X2 t2 f. A
}* o; r8 F3 B( M! k* K( f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 d" O+ e. J5 L- R6 W1 ]4 L' Q5 b. Y, W {) u, a8 R; ~8 k1 x" h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 E$ x5 g6 K I3 y1 {
if( !pItemElem )1 b& ]) L: T0 v/ O
continue;- u( H. v' g& W5 s* V5 w' v
if(pItemElem->GetExtra() > 0)) f2 b) {" r, X% U* E M
continue;
, G$ a5 n I2 _5 N( [9 B8 Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( b9 p8 `. `% V1 a. b: h continue;
* q/ O- f7 _. y7 z& ?! r2 ?5 K if( g_pPlayer->IsUsing( pItemElem ) )
& c; |) D7 p0 d4 h continue;
1 b- C! ?+ k ]' X% P5 q \ if( pItemElem->IsUndestructable() == TRUE )8 l) C2 J0 Z: B
{
# Y0 z' m8 y; l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 I( L: x! a6 o$ r2 Y
continue;
- _! d9 c" t6 P# o( w" ~: [, h }, V$ O. l+ u# m# S" \: D0 W" p
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, T; | ?9 r( s1 x. S+ l: V
}) ~6 Q* J) |4 }. p
break;
0 C2 V6 v6 N0 C }+ S( u( r5 F* \7 S9 P9 a# x
case 1:( j8 s- }2 Y+ P* g
{ w# V8 G4 |1 z# ]* `: H
//整理背包
- Z1 U2 D" F5 e( T: c# {% C2 I //////////////////////////////////////////////////////////////////////////
% G# S; U3 ~ ~0 y! \" O. R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- W3 {. D4 a2 N! v# B7 z' W6 x //////////////////////////////////////////////////////////////////////////: g8 P/ z b4 T4 M' A
//////////////////////////////////////////////////////////////////////////
! j1 Z4 v0 ?' d m CInventorySort* pInvSort = new CInventorySort;. n: {1 N# C' Z. R, ?
vector <sItem> vItem;
2 x) ~) [" ~8 u( z" Z# a, X vItem.resize(MAX_INVENTORY);//初始化大小1 ~- ]' [0 f, W1 L% x2 L) N- H {
//////////////////////////////////////////////////////////////////////////
; h# k" a( f: g+ D# i$ n3 X( S/ ?; R9 G //填充数据) z& Y, |' {1 B2 w4 o7 j0 ~1 O4 g
for (int i=0;i<MAX_INVENTORY;i++)
, c( f5 e" k( t u& D' @: z& s {
] O8 j' C: [% U/ M- O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- f0 V, d, w" a9 | if (!pItemElem)/ H( k) @, y3 M
{" a( ?' u" f$ t1 |
vItem.dwKind2 = 0xffffffff;
; ?! K2 @1 i8 ?% n8 P6 s( a' {' U vItem.dwItemId = 0xffffffff;
% W$ y5 E0 m/ T3 @ vItem.nIndex = i;; F0 z! O* ~! M4 ?+ I) d Y6 h
}else {2 I$ Y# N2 `5 V, _: C
ItemProp* pProp = pItemElem->GetProp();
: {6 s# I% l) F vItem.dwKind2 = pProp->dwItemKind2;, o8 Y6 T6 K4 e, T
vItem.dwItemId = pItemElem->m_dwItemId;% G6 E8 A& z* T3 i, _& }6 U2 d
vItem.nIndex = i;" S5 u- g Z) O
}4 U1 I' Y- l9 O4 B% {+ s9 I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# R" ^( `9 ^' ?4 G. p }
# B5 s* z* `- I. a. N- F //////////////////////////////////////////////////////////////////////////
1 {7 ]& q3 I. P) x4 | sort(vItem.begin(),vItem.end());//排序, I* H9 L, ]7 `. T
//////////////////////////////////////////////////////////////////////////
# l& U, f4 P6 y* k //交换
" D; D: P9 \ |; \4 @ for (size_t i=0;i<vItem.size();i++)+ x( y% I1 M: S5 K( [: i/ n
{/ E! a# T( F' O5 J/ @/ J9 k3 H& q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ O* D3 N) I: P0 I, P. A0 J pInvSort->Add(vItem.nIndex);7 l M" q. a& y6 `; ] R: K0 @' F
}9 ?6 E. T/ l: y
BYTE nDestPos = 0;0 U$ {7 J) O6 p# n
for (int i=0;i<MAX_INVENTORY;i++)& ?4 L% {) |4 n( M) S
{* R' G# O8 k8 n& e1 r" e' d( g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( u( k z1 {! w! t1 w/ w if (pItemElem)
) S g _- g; P0 k& c7 \+ x: n {7 ]2 a Y8 e( q
if (IsUsingItem(pItemElem))
1 L. ~9 }% p7 m1 c$ P6 S1 w5 l/ { {
8 p& c1 \. u2 L/ S0 d$ U/ O, x$ r //这个位置无法放
0 n& p" O6 l& N W" n nDestPos++;
* H2 B! L" U8 V9 j; m# A4 K' O" A8 O }: t0 O+ |3 W% `6 y
}
L. w# o& ?/ ~* _ BYTE nSrc = pInvSort->GetItemSrc(i);
/ C( J! n- P! S& r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 L0 m9 r- b5 C
if (pItemElem)& p" T' s7 r# |* d: o
{
, U4 Z) M! R! F! D& [ if (IsUsingItem(pItemElem))- I! k7 E* c4 i4 Y! j
{5 _* r4 T5 I2 V7 ]* U6 U
//这个道具无法移动,跳过8 h+ N8 ?; f" \$ F+ T7 _% Q2 `
continue;
, {1 c5 R2 Y9 k6 l1 ? }7 j* h! [% R! ^! n W) M
}else{
( z9 `- f+ s" v, T; R0 R! Y! y5 @3 [5 X //空位置 不用动" d5 o8 e n' s$ ^7 T# W* Q4 X+ E
continue;( K, v$ d; v: i6 j! V
} J- s+ H W; ]4 s" w7 i: w& `
//////////////////////////////////////////////////////////////////////////
% l, O; O: q: Z //开始移动1 J# U" z( @, t% J
if (nSrc == nDestPos)
2 x% {+ q7 Q* q. E5 I {- q1 S& n8 i+ [' J/ o. O
//原地不动
& d# ^% Y: N9 M2 j+ r nDestPos++;9 Y' J, e+ s9 u3 T. M& I
continue;
# H4 p/ o3 z" g m w }9 f6 X Y4 U. ?
pInvSort->MoveItem(i,nDestPos);
7 U9 V1 Q* @: D* h g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ j s: v! p2 h2 R6 C8 E Sleep(5); I/ h8 B# H' ^5 G0 I
//Error("移动 - %d->%d",nSrc,nDestPos);
! |- B1 p: \3 w% j nDestPos++;6 q8 H O2 \7 J+ x5 T% [& ~
}8 h. e* y! E: y# C, H* A
//取第一个元素的信息% Y! ]) V' t1 s# j- P" d
/*& [& i+ ]: z5 t/ L7 ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( G J9 h2 t' n: b6 [" N6 I
{1 W, Z2 o- O. s1 _
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 p" e" a! o" S/ e3 X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 Q4 Y _6 X1 j; G
}
8 A. N! v; [: c */
0 c3 z$ _ t8 D) [ //////////////////////////////////////////////////////////////////////////8 {% c( n0 I, c
break;3 w. {1 O+ L. d/ b9 t9 p7 c. s
}9 _0 O; z) W" y, g. Q
}
0 ^9 K j$ J; U6 i8 ~' w}. D6 V+ i) H' O3 F0 S
m_wndMenu.SetVisible(FALSE);% e7 A8 h5 V& L2 b5 f1 t( U2 u6 U) ]
, _; \* S( K" p+ W
--------------------------------------------------------------------------------------------------------$ \- _; W$ |! J8 F z- {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. \0 z1 `, u* l8 ~/ s6 j7 @: [7 M{2 z( M, u" _ Q: C
BaseMouseCursor();
7 A6 ^* r- j3 w& V9 W# i}: R. k1 U" y. e" h4 C2 F9 @$ _8 e
在其下添加:
$ w. k2 H! _9 N% _( ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 V6 o( [) `( q
{* }& q, x& i- J
m_wndMenu.DeleteAllMenu();
' B, M) U* L: X/ bm_wndMenu.CreateMenu(this);
& w7 g5 v3 J6 Y+ D F3 P7 o. km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! M& X1 N) L( P
6 r3 z. v0 I/ c7 o8 \* Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). X% z) b, M' }/ B) j3 C+ U& [
{
% b$ C" I. Z$ m3 s1 o //P以上级别才可以删除所有道具
7 s: G! f! p. K8 z4 C+ V, M2 t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 q9 B. h) ^: s i}
- @9 c1 @! l; G. J; ^0 om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ H2 [: M* E- M" [& O' Q4 B F: em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 ?! z [( k. T- e9 O- t7 [. Im_wndMenu.SetFocus();: U6 |# m% X2 k1 [' o: C
}
% q4 ^/ V- S* `------------------------------------------------------------------------------------------------------------
: l1 B% [' ~5 y: } y*************************
: x2 T2 y' r& ^8 h( hWndField.h文件
, p3 G: ~0 |* R0 T: S*************************
' g X; ^- ]4 I& F5 i搜索:BOOL m_bReport;# P; b& z3 E4 X' ]. |- Z
其后添加:4 C" n0 @( r: U0 o- X Z. M# P% {: [
CWndMenu m_wndMenu;
5 p9 L) T2 n9 ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 p( t: U) |% e" b/ ]1 L1 V1 p其后添加:- _( z4 e5 m7 k/ x g
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 v2 K4 H+ F' T/ A8 R" U2 U' e1 a) y9 I7 _( E
, p4 E9 m, \/ V, Z- Z
|
|