|
|
源文件中_Interface文件夹下WndField.cpp文件
r( K7 `3 A! i! M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( p' T8 g4 q2 g+ a2 l
( m. W$ A4 `; P+ [# }struct sItem
& s, o, l6 P7 |6 O8 I{
; X- p' |6 Z* r0 c( B. u H4 `DWORD dwId;
6 N, e, t0 s9 WDWORD dwKind2;; E- S' t$ o; a- p1 Z% v
DWORD dwItemId;7 x$ @8 g3 ?% u4 _( J
BYTE nIndex;
* I; h4 F6 t# C5 o, r/ RsItem(){5 ]$ U2 f9 ~) y' ^" N, G/ ^9 H
dwId = dwKind2 = dwItemId = nIndex = 0;) t9 D+ }* h1 T3 Q- b" F6 W4 g) S
} R2 ?$ S/ [9 x
bool operator < (const sItem p2)! N( |) g- ^5 u* M' ~4 }6 k
{
% c7 V9 Q. A: I$ X7 ? if (dwKind2 == p2.dwKind2)3 e/ O r, M8 M" P) m ~7 C
{) Z! k/ m6 M' A
return dwItemId < p2.dwItemId;4 R5 f" Z3 o1 |$ O5 s. j6 R* _: j6 F7 [+ F
}else{( n# }0 j9 e# n2 k7 D! `
return dwKind2 < p2.dwKind2;
9 v @8 l* R- a1 D2 y6 X3 b P }2 N( b) s. O7 W0 T6 ]% G2 g
}
' m1 i1 d0 f% A9 K, O2 h};: i3 Y! I& h. z& W. x6 W: {. b! E7 @
class CInventorySort% G, x6 [' C8 K# A2 ?! h
{) X! D7 u1 R( |5 N: w5 u& b
public:% q) G5 _, w' @3 f
CInventorySort()
$ X) c D; A6 t- y; p7 l7 l3 l1 }{
2 T3 Y- ?- z2 _. P" U1 a m_dwPos = 0;. K2 l' |- b3 f6 o7 G
}8 a% S+ Y U% M
~CInventorySort(){}4 b& p7 X2 `& v o6 L2 D
private:
9 L5 h5 M. U; [* Y9 xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 u, Z) u0 x4 p8 c- PDWORD m_dwPos;6 C1 r9 I! E$ z( S, f
public:
$ K8 x: E& O! `+ z- S8 hvoid Add(BYTE nIndex)+ A4 d( l0 h) e* }, _# N$ I
{
& x; F- H, K% \& X if (m_dwPos >= MAX_INVENTORY)( N7 d) \6 i5 x3 W3 a
{5 \( q5 X0 b% c, C
return;
/ V0 C) Q2 Y0 c% s/ { }
2 I( i6 W2 @/ f R u m_Item[m_dwPos].nIndex = nIndex;! R9 c% ^7 {' A. U# M* q
m_Item[m_dwPos].dwId = m_dwPos;0 U2 {5 O/ X. R A4 h* [; x
m_dwPos++;
7 o( w7 C+ G5 A3 Y' K2 I}
8 ~3 K* i) ]; ~% X$ a# {3 d6 WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 V: _8 k+ k# t& z2 a: V
{# X; B# a: |" C) z( ~8 p4 z( q
for (int i=0;i<MAX_INVENTORY;i++)/ R% j4 D3 ]+ y
{* v2 ^9 n4 Y/ u/ |9 g
if (m_Item.dwId == dwId)
Q3 s$ n2 I) Y& X {3 o8 w& k3 @, l( Z/ ]& [
return m_Item.nIndex; I0 `0 X' ~; {% }
}% L. l* J1 N+ z* g
}+ R c9 q p+ `( |: |) A
return 255;
5 S6 s) p$ h7 X- X' a9 U}6 Q: Z Q/ O& N5 k8 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 G7 V3 ?( W) V) y) ]% x( R
{2 N* d& H2 u9 `
BYTE nTmp = 0;6 w6 y/ n) `3 L" L9 I9 q9 \! T
bool bDest = false,bSrc = false;
- X9 A# F9 Z0 ]- ^' i$ n) h8 g for (int i=0;i<MAX_INVENTORY;i++)1 n" \! H8 s; G$ w' E% ^! n0 ^: G
{( Z- J- W. e+ Q
if (dwSrcId == m_Item.dwId)
: a/ b$ p( _) r. x" S {
4 }& U& M4 l A. k& J6 b% a //id相等 则 改变对应的dest和src' ^0 Z+ X1 f9 T8 c9 W) n
nTmp = m_Item.nIndex;' }8 \% ]" N9 S- Q7 k2 R
m_Item.nIndex = dest;
$ J, t$ }+ M" I }
8 p3 D. o( r0 \& ?8 A }8 Q4 T0 o: P7 R' G1 }: J4 ]: C
//临时数据保存完毕,交换开始
! m3 L8 V* w, t! H for (int i=0;i<MAX_INVENTORY;i++)
5 `3 t- ?5 `* v { Z ?4 r p: K0 U8 {4 \$ q5 c
if (dest == m_Item.nIndex)# i( ~3 [+ s4 M% q
{
5 ?4 U9 ?6 l4 c2 j/ s- W //id相等 则 改变对应的dest和src$ k: J; X% {) n, G$ ^
m_Item.nIndex = nTmp;$ _6 L+ A' R( i
}
/ r, x. n: q3 U: B. ]+ c, l: r2 o$ z }
, b: U& t1 z- V) x1 |2 B% y2 `0 A}
8 x9 C |" b2 |};7 J4 @& e U$ X7 t& S) }- R
-------------------------------------------------------------------------
+ h4 k! m# c/ `9 ~/ K- k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 A% R$ m0 {9 f" i/ X: ~0 v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, L8 I! E5 ~8 F O T# ]
紧靠其上添加:
% I9 z) U# f+ y& ^if( pWndBase == &m_wndMenu )
- j) d) O' X1 P+ I{8 S$ {$ m \7 T; B) i) X1 T: b
switch( nID )
7 c2 B) M( o" ^/ I- b {
; ^3 l W* B+ I) D6 z0 ]3 P2 K case 2:; x% A% a' F+ h$ R! x
{
) H7 r' _" N/ n6 G7 ^3 K. p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: i# u8 |3 K, Y4 `: f2 B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ Z1 M4 H h1 A
{; H4 J& Y" A8 ], r( Q
break;
. q; ?+ c3 F2 e. v5 N5 l0 q }
$ V C* T9 L0 O! A5 ^ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), F4 W5 f" W& R
{/ W' w& M5 P$ z# F; Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ g3 p9 x x) A4 |& r. [' ]% x+ |
if( !pItemElem )
$ l7 B/ V/ k' J3 }0 _" G! ?8 l continue;
6 X4 [+ g5 x+ s* A5 [" N) U if(pItemElem->GetExtra() > 0)
. d1 c; S5 g4 R$ I continue;
! Q3 B! e& w6 V e- c4 ]- x/ T% g7 _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # S1 T* k ]2 O$ o$ \9 |
continue;- t- o* v6 S T* o" {$ u+ \5 M
if( g_pPlayer->IsUsing( pItemElem ) )5 W: l2 B; R1 F- E$ p; c. l
continue;3 v3 l# h1 e. c. {
if( pItemElem->IsUndestructable() == TRUE )
1 I1 W6 L2 T! \4 a0 e$ k" D {
( N" o8 y# X, r8 ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 s' z2 ~: b) Q7 E5 x' r' z continue;& F2 }( z. ~# s! |7 o+ R" v. H% u
}
% F3 l/ }! b' S0 f7 t% e g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# _& q0 X+ O w _* R& T2 j( P
}4 k% G* w! y# W$ i
break;, \& Y O' G/ ~& C5 m- e: T
}
% @1 Q5 z* x7 ^ case 1:
7 v r; i# J) `' P1 p {* z. c+ s" ]9 e: I1 N
//整理背包
* k H% K1 P! s& V% A //////////////////////////////////////////////////////////////////////////
3 ? A' H8 s. [# H' F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 v H/ C: I' T: J) n7 O4 v
//////////////////////////////////////////////////////////////////////////5 E9 H, ^& ~6 n3 m6 n
//////////////////////////////////////////////////////////////////////////
* k s3 y3 \+ N$ {3 B; l. } CInventorySort* pInvSort = new CInventorySort;, _7 B* F) A' Q: r' r
vector <sItem> vItem;
% x$ d- r: n9 r9 U3 k# @; T vItem.resize(MAX_INVENTORY);//初始化大小8 c# D; f) J# }0 Z
//////////////////////////////////////////////////////////////////////////) r8 s& [4 A& d- J8 q0 ~- m
//填充数据
: g( D" r8 `7 d for (int i=0;i<MAX_INVENTORY;i++)
/ ^- A8 y* H9 ]4 i! v; s {
: Y. a0 b5 m# t0 s# N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. o( j B9 x' b8 U: G$ s3 W
if (!pItemElem)- G( F$ h: Q, p) v) `
{6 A! ?* p( r% C+ G" D% L' s
vItem.dwKind2 = 0xffffffff;9 I$ c# A, @. W ^2 y7 a6 M
vItem.dwItemId = 0xffffffff;
8 ?3 Y# @: t* s vItem.nIndex = i;5 e. ~7 O1 y4 X8 P
}else {
2 Q" M4 B E% u2 Z2 h. e4 y ItemProp* pProp = pItemElem->GetProp();# G$ { h4 h, E
vItem.dwKind2 = pProp->dwItemKind2;
& o1 G; }. E/ d) ]8 N vItem.dwItemId = pItemElem->m_dwItemId;$ s- c5 A( Q2 l% i/ p4 u
vItem.nIndex = i;
& ~+ c% r2 w+ @( ? }" N' ~* {' j2 j! g3 A4 c/ u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) O6 w! _: @5 h$ r! ]
}
" H. t% D! w5 G% B" M R1 U //////////////////////////////////////////////////////////////////////////
6 n9 S# @4 u+ \1 n0 Y* v sort(vItem.begin(),vItem.end());//排序
+ D. m5 a+ s7 ^' ], X1 s+ K6 Y //////////////////////////////////////////////////////////////////////////
. v& \* P" Q4 U' I/ _ T' G5 c //交换' [4 G6 d5 H% {% z
for (size_t i=0;i<vItem.size();i++)4 I" m5 K0 v$ B
{1 i+ K% H7 ^- F; p! `9 q" q1 A6 V1 J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: z( S5 K" d5 `- m- `2 Q pInvSort->Add(vItem.nIndex);6 L w9 d5 P5 E7 k6 M+ F
}: k. x, W% |' h% Z6 K7 [: ]
BYTE nDestPos = 0;
& T0 _* u4 M0 S/ {; W, I4 ? for (int i=0;i<MAX_INVENTORY;i++)
4 V7 w a, ~% |# G' C( {$ ?2 B( e! G {
9 j( s, P. R, |% C4 W" c5 |, K7 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) r _/ J* T6 Z if (pItemElem)8 H8 A% u, U* y4 y
{
* i$ R {& j! f if (IsUsingItem(pItemElem))2 `9 B8 B+ [* b4 U$ a% P. \0 W7 }/ ^
{1 g! X/ K$ E7 E3 n; N
//这个位置无法放
# n4 ]( ?0 i* j; z1 @1 u( T" g nDestPos++;
& t7 L4 q; W1 Y: }! ^4 \ U }
" R8 C6 h3 q# h: g/ c) o }
5 Z" g9 x/ i) ?3 Q2 w/ T BYTE nSrc = pInvSort->GetItemSrc(i);
( {4 H) \6 ~; u/ ]5 o# E. O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 A8 z- Z5 W1 s) p; y: S- B' I
if (pItemElem)0 n$ i1 G8 {; A. Y3 h" {- q
{
. V# ~. a" j, s* Z7 x% X- k. |5 l! l if (IsUsingItem(pItemElem))
! M% U e- b7 J% I6 _ {
6 r0 @- k0 O+ T9 ^+ ] //这个道具无法移动,跳过& ?9 t* Q* F7 E/ Z5 C# O
continue;0 y* _, g5 j4 S) U8 w5 ?
}. T$ C8 z3 k5 d6 H
}else{
' i2 w! E( ~0 z, g( h3 N- q //空位置 不用动
1 ?" |0 W5 X0 i: U$ v5 k; m continue;6 x* z: |7 z% B: A7 ^
}
' d/ C* A$ u8 ]+ H5 Q; _ //////////////////////////////////////////////////////////////////////////
) @# x# A2 C. l+ h. x3 Z2 D6 | //开始移动, D- b7 q6 S1 i: @7 ?9 E G& i
if (nSrc == nDestPos)1 e6 }, N: ^5 \9 ~% x
{
8 l3 }, k: L# q //原地不动
1 g: V+ f1 k8 w; k) Z nDestPos++;
! H; m U/ `, Y6 u* S% R continue;
* E% t# V* i7 Z" S7 S3 d }
[; _7 X- Q( X0 P# L0 X3 U pInvSort->MoveItem(i,nDestPos);. t0 O/ N$ m1 L3 U4 U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 p, Q" n. Q: _ [+ j& O Sleep(5);) A: [' `0 p. z/ [/ M6 L, k# G# H
//Error("移动 - %d->%d",nSrc,nDestPos);
9 K' O$ v$ ]+ i. a' r nDestPos++;
! S7 C; w) D$ k2 o6 j9 O$ P' m }
" d5 c, W, S$ ]4 P //取第一个元素的信息
: Y* A6 S' s9 A) v ]5 O5 X4 M /*
- _6 W* X4 [7 k3 M- h( C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 }5 F0 p$ t4 ^% B2 Z! }0 K
{% T/ T& q1 D2 D, M0 C+ K) l' X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% F3 ~. L2 y) f! J$ n; |6 }* K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 E) K9 Z4 N# ]! J% ~ }1 ?3 V( A8 u+ u h/ ]
*/' Y$ b: z7 V) f1 F( L- o2 \0 x
//////////////////////////////////////////////////////////////////////////
1 r3 a2 T$ A. z# e8 J0 _% i: F; Z! G break;
( V2 f" v- O$ R5 Q2 n }
, }% f1 i) V$ g } ) s4 B2 r7 p% T( @* W
}
/ |" n1 C5 o* J2 Wm_wndMenu.SetVisible(FALSE);
% f1 t' ^, ^- c3 q* `
, v8 N: c' ?0 \4 ~$ v--------------------------------------------------------------------------------------------------------
* k% Q M. U) e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) x# i6 ]% g( w- k1 D/ I5 s
{
3 Z- p; P0 Z KBaseMouseCursor();
9 |8 b' r& \$ E6 H, T: O7 N# Z3 P}
# R6 N. r; q/ o& c5 t8 U- t在其下添加:
: Z9 t, c3 U+ Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 t6 a7 ^* C- I4 I{; R, j- ]/ }+ n z" {
m_wndMenu.DeleteAllMenu();0 I2 X i( a% ], ~3 ^" V, \
m_wndMenu.CreateMenu(this);7 f- X- O; e+ {, B z& a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 X1 q1 W, i) k3 G+ N
8 y7 O+ T' g, q+ j1 W0 f8 \( }, sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& t' |4 \# Z0 p3 t0 O$ {9 v. C
{
$ F- ^9 F" y/ G- H, e% B9 m //P以上级别才可以删除所有道具 @9 \' |5 w6 F5 B2 \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 F4 D( x$ R/ H- w: q}
9 @* K4 o! E! Z: d& Z! `0 [& wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: `; X6 P' Y# S
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* Z4 }; x! D2 y/ ~( A6 om_wndMenu.SetFocus();. D. O2 P5 { Z2 B6 P. b
}$ s/ y# L5 p/ X" u& _- |0 G2 h4 y
------------------------------------------------------------------------------------------------------------4 C4 Q+ d8 S; j9 U( X8 O y$ O3 h
*************************
$ P' [8 ?1 Y% |; PWndField.h文件
( \. I$ D& e7 v4 H0 A! @*************************9 |" ~; E3 m# p0 S9 F M
搜索:BOOL m_bReport;/ b$ I/ |+ o6 p2 r4 h
其后添加:% K3 p0 |* Q- c& K+ g, [$ g% A# b
CWndMenu m_wndMenu;# j% f1 _ v9 w( H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: Y- x# Z3 o1 G2 Q其后添加:
1 G9 k" q5 y# g3 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 L. A" ^/ v/ n9 l' M! M& y( c) L: O
9 {/ e. }# I }, w$ _ V* V) M* [/ X8 i6 s8 G1 R9 T# u
|
|