|
|
源文件中_Interface文件夹下WndField.cpp文件; y8 q3 g6 [9 B. p" b& A0 r$ t. w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% C* y* |% ?$ @4 P. Y! j
' B' s! V+ K) x- z5 M" Gstruct sItem
0 l6 Y1 N$ P6 Y& U{
/ M" l" a m) u6 ~; VDWORD dwId;* e" V$ A9 P( F$ O$ O' _! K1 X
DWORD dwKind2;
. p& \4 P1 p: o2 l4 S/ `. I- QDWORD dwItemId;( O! m5 k# H6 l0 S
BYTE nIndex;" L$ B2 I" ]( v. b
sItem(){
: u: x: ~" { u) P dwId = dwKind2 = dwItemId = nIndex = 0;5 I7 |6 d, {, M' \* C5 T' B
}
! |7 B0 I; @; v4 N4 p1 Vbool operator < (const sItem p2)6 {6 u5 V6 R+ L8 N- D& Z4 Q6 e
{5 |; Z* e' |* `
if (dwKind2 == p2.dwKind2)
1 @' M2 Z+ r$ H5 B {
) }0 e, e7 E Z0 U$ o1 { return dwItemId < p2.dwItemId;
: Z, u3 x/ I; u! ?1 p }else{ u# y$ ]! V& Q' v" F8 o
return dwKind2 < p2.dwKind2;
2 x/ N5 n; i( ]) @ }$ y$ L+ F. i% l q
}2 E. r$ {8 q6 @1 H, ~$ F
};1 ^4 ^' ^9 L# _4 P: f4 ]
class CInventorySort
' }- m$ K% f0 F$ W{
2 T3 ]1 w7 m, b' \* y3 Y0 Lpublic:
6 X8 @2 {& Z b+ x5 s8 h! _CInventorySort()
9 E: _2 F8 D+ G% x{
) v" c& h( `3 C" d m_dwPos = 0;
# H- B+ {9 `/ F4 r! T}
& g& C, Q1 H, y0 {' m. O7 z~CInventorySort(){}
+ O3 c# a3 ?- s2 T! z7 Hprivate:
1 f0 Y. v; T5 V3 m+ J8 [. ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% Y6 ?3 D7 Q5 ] O8 MDWORD m_dwPos;% V. ~# _7 N6 x
public:0 `( S1 m* D4 j! @4 P$ L
void Add(BYTE nIndex)
4 j! _8 B$ @ u& K$ g{/ [ ]5 [8 c* E9 s/ \' y8 p
if (m_dwPos >= MAX_INVENTORY)6 b) _5 Z* N# e% H4 i
{$ K1 r( A T% W \$ D1 L
return;
8 c; G% `4 I. m: Q& [) q3 R }7 w0 l2 B/ H$ R0 V+ w
m_Item[m_dwPos].nIndex = nIndex;7 r- G8 z* ]/ O Y" N
m_Item[m_dwPos].dwId = m_dwPos;, d# X# |* |" d: s! L7 K; c" K
m_dwPos++;
0 z' ]9 ^" _; P8 w/ {$ Q}+ O+ s ]! Y4 U9 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 z* r( a, K/ J1 g9 \: _{
' {4 X8 ^) e6 W4 k' q1 c4 U for (int i=0;i<MAX_INVENTORY;i++)% I0 p" ~0 P& O% n" r- ?+ Y
{
+ E1 o0 b1 ?# G+ x if (m_Item.dwId == dwId)
8 ` i+ M3 |, k) M$ t5 R4 L& N1 V {! D- W/ X1 c7 f! ?) w6 O
return m_Item.nIndex;, x8 z( j9 P6 h0 _( @4 [
}: u$ j; w, N# p* c4 u! \) V" H
}2 [) f% [) U$ J" p1 X
return 255;
5 `. Q8 L- p4 l+ q5 G/ b}
* r% p! \6 a; `3 p, _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 K' P2 t( ]* i# d; K. X( Q
{
, m3 n2 N! s% \3 i z1 R BYTE nTmp = 0;
8 b( D8 |6 _0 `$ a; x k bool bDest = false,bSrc = false;
; ^. g4 p$ \& h9 v6 I* g for (int i=0;i<MAX_INVENTORY;i++)
) f9 `" q" [/ f" k {1 x) k0 W& O% H. m4 X7 L& x
if (dwSrcId == m_Item.dwId)1 Q# C) o9 E+ l
{( |1 U/ ]: c& X6 j! t
//id相等 则 改变对应的dest和src
( p8 z: C9 F* O nTmp = m_Item.nIndex;
% S* @' @0 U# W8 Y9 h1 E, y" { m_Item.nIndex = dest;& J3 |" d. d! W. J- S% E3 D
}
! }* t8 }0 R; \6 p } g$ }! m& g, M4 O1 y
//临时数据保存完毕,交换开始
; Z" ?7 L' \2 S5 e for (int i=0;i<MAX_INVENTORY;i++)
9 f* P2 M- e# f* s* g1 @ {
9 z3 m2 V# u/ k+ ~( k% q if (dest == m_Item.nIndex) O, u, A9 e! t+ E) `" C8 a
{1 j6 n) Y+ j7 _8 Z0 L& K
//id相等 则 改变对应的dest和src
- V1 ]6 V6 p" d; k6 B$ J m_Item.nIndex = nTmp;; ^0 G' R. |: D2 d$ b3 E
}
9 `! q: ]7 S* G/ v }& m) T& ?& ?9 i. Z
}
; i( b9 ^# ^2 o+ Q9 C};
. c9 q# I1 }. |, `" z-------------------------------------------------------------------------
0 b! D8 Q7 t' K% X7 U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): N$ x1 s* |: K! p: a( q& d
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; }' u, q& f5 z8 x: ^
紧靠其上添加:, m2 |( r" g4 y+ f: t4 L
if( pWndBase == &m_wndMenu )4 l- F% w' J1 a: ~5 @
{; Z. v. G+ r$ d4 W* d
switch( nID )7 }5 ?) Z- s8 `: [
{
- I7 y: L2 h* u( W* I case 2:
+ |6 H4 j% a! F5 U" h+ t {8 V1 q+ p, j9 F0 p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ B U3 X8 y* ^- j/ R A% a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! Z5 @+ Z3 i5 y7 g$ h: |2 S
{
T+ \0 [6 I# {0 O8 F: R break;
0 @, g, L* D( x- T: L! q. m }( v. |0 m' m( N" r9 D* K1 I" m. ^
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& b& {" Z! ?# A, Y; m6 ^7 A- G {+ C9 |0 W0 C# ^1 H0 D* o5 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 {& E7 x% m2 k% N- c" H) n4 u$ e if( !pItemElem ). ]0 T5 V) p$ M+ j% o3 C! O4 _
continue;- q9 H; I! |6 s" O% Q& s) W
if(pItemElem->GetExtra() > 0)- K0 |4 ~& H& E, K1 A2 r
continue;4 M7 i% w5 |) K n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 z7 L" U) o8 [# ?
continue;
/ Q0 Q- y7 ~2 N8 {3 q5 G, k! Z if( g_pPlayer->IsUsing( pItemElem ) )
0 Z+ E+ X% K* s continue;
7 a1 F8 |! J$ k) ?0 a if( pItemElem->IsUndestructable() == TRUE )
( a0 @, n5 [$ \( d4 \3 q {
' ^) v/ e- m7 J6 I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) T; y' y: j8 ~# ^1 O continue;
- H7 B9 `" ?. U- A8 F1 B B }
' S/ j p& \; r1 J1 i g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ Q+ S6 {. m$ f$ M+ ~
}5 U+ O" W9 B' j/ X
break;
) B- o. z. O4 c( N }% l3 l" z: _. C+ z# `
case 1:
+ T! r- Z/ s3 l6 H: Z {" H$ ^$ |) E- i2 k/ T! N
//整理背包0 e3 v6 L- F4 v6 {5 i, b
//////////////////////////////////////////////////////////////////////////% R: A- Q/ Z/ v# o5 K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 X2 `& T6 j/ ^" U+ |1 ? //////////////////////////////////////////////////////////////////////////( }+ a9 m6 A! l2 U3 \6 K. x
//////////////////////////////////////////////////////////////////////////
H6 u5 K( C" ~% w+ d( K CInventorySort* pInvSort = new CInventorySort;( {& J, { A; |, B% s6 n! D
vector <sItem> vItem;
$ _0 G7 [8 u3 Z9 [" A. r$ K vItem.resize(MAX_INVENTORY);//初始化大小. N0 X% T$ `; O' z* }* Z8 k' | t
//////////////////////////////////////////////////////////////////////////
7 V# ~. J7 J# Q* j //填充数据
+ }& n/ I" t {2 N; @ for (int i=0;i<MAX_INVENTORY;i++)
4 v+ j7 V% c+ a0 b# [3 R* s {; y- P0 Q; p2 ]+ n0 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
b1 l9 ]2 N. l. k if (!pItemElem)6 \6 {/ S( M% g; ?: T
{+ A+ [3 k' L1 Z2 [( T
vItem.dwKind2 = 0xffffffff;7 p# j& `3 m D% O7 Y
vItem.dwItemId = 0xffffffff;1 G/ Q. A+ W( {" A% ^/ M( P
vItem.nIndex = i;. s3 l3 L* C; t" k/ O- n7 A
}else {
$ e9 {8 B9 E7 s' C+ [; d ItemProp* pProp = pItemElem->GetProp();
7 {& z! J4 K: W, ]5 u vItem.dwKind2 = pProp->dwItemKind2;
5 b- ?* {6 ^! ?, |8 \# D, n. h vItem.dwItemId = pItemElem->m_dwItemId;: L' q1 H& ^- G" k3 B' B
vItem.nIndex = i;
+ q+ u0 N: v' [* c; P F }: m- P, a% o1 \6 o; C. f1 z+ t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 Z% _; ^4 r5 L$ W! _3 `
}! o: l& W+ ?7 G7 X3 ~+ a) I
//////////////////////////////////////////////////////////////////////////0 ?3 u' H7 o; w$ }7 A# B8 c1 V
sort(vItem.begin(),vItem.end());//排序
8 X4 b \( z( n$ {; g9 I( k //////////////////////////////////////////////////////////////////////////
4 d4 s2 i" ~7 I4 I @1 B$ n; V: z. i //交换
, q: A1 O8 `1 S# G" A0 q5 G6 y for (size_t i=0;i<vItem.size();i++)
. u7 D0 R3 }% {. Y3 j {1 r9 L" ?* k5 L0 K1 b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 g7 |+ `8 W) ]) e- a( F6 K! x
pInvSort->Add(vItem.nIndex);
* u" F1 M3 n9 ]7 P& Q1 |1 W# O2 x }
* p2 C4 x/ u/ E BYTE nDestPos = 0;
( n- W# q: q h- O for (int i=0;i<MAX_INVENTORY;i++)! @, a t, O, O0 w+ y7 l& _
{
1 m" v& _% A: \ c( D2 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) o* x8 o M! J D2 t: T if (pItemElem)
( G5 Q: p; {1 c8 Y" H5 T' y0 _4 F2 X {
! c n: l! x4 D( N) @+ k' ^" S if (IsUsingItem(pItemElem))
0 X4 b4 F- f: _; `: R2 L {
5 M/ N+ M% u! J `9 ^ //这个位置无法放: t* C+ P2 ^' j3 K; d
nDestPos++; C/ @ q+ o! q9 B) M! c4 m4 @
}
( R) \8 D8 |' O }6 W/ @; v4 z6 l; w+ K! [3 h8 a
BYTE nSrc = pInvSort->GetItemSrc(i);$ m) z- n* a0 B3 }; V% q3 z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 I: j7 O" Q: W) J# b if (pItemElem)
3 ~/ m& p, q6 G6 j {
$ e( e# m2 g$ R& }0 q if (IsUsingItem(pItemElem))2 o1 P& p" M4 A- m* q
{" I! o7 I( X7 y D7 Y" d& t
//这个道具无法移动,跳过& b n4 a! T3 c
continue;0 D9 |/ r+ Z9 A
}
. X- M' y- T4 r' d1 H# S }else{
- z8 B; L0 ~( T6 q1 U$ `7 q //空位置 不用动
& x7 o, k3 p$ W% q( J continue;7 l/ I& t6 c0 l5 B8 [
}
5 K- o$ f7 u, z$ I. A9 t6 _ //////////////////////////////////////////////////////////////////////////* ~1 n* I* n1 G4 @/ I! _
//开始移动
4 D) S8 ~7 g5 j! y if (nSrc == nDestPos) ?# f6 u4 c1 o/ ~6 c
{
8 C% E2 \4 f d8 o2 q+ h- M3 F' U //原地不动. a8 l, j, T! T- Z
nDestPos++;3 D# z! U7 {7 X* C) E
continue;
8 A; x" T' p; {; B% l }4 E9 [7 s e/ c* r4 F
pInvSort->MoveItem(i,nDestPos);
9 H+ _. |: ^9 m% Q9 i* f g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 o2 U: {- F' }7 d2 ~, |$ w. c
Sleep(5);5 a6 O0 E& F' Y/ t3 u5 G% _! L
//Error("移动 - %d->%d",nSrc,nDestPos);
$ Z4 s! H9 Y2 ?6 E" [; I nDestPos++;
% a/ ~2 L' V4 p2 i9 h Z }
/ G% R& g! F+ X/ \8 F //取第一个元素的信息% i( V p8 J, I, R. _, Y
/*0 }* ^& \3 f; u! ~: ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 c5 }+ c5 S# `8 [8 G {6 {- W! Y1 o# Z, P9 Y' Z; O& y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! \& J$ I3 U% V+ m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' F8 n9 Q1 E5 {/ r5 t* |
}
; b3 {- y4 d, D* ]4 I! c8 F; X2 f */2 ]8 E: Y8 D9 h. F8 @, c: v
//////////////////////////////////////////////////////////////////////////
$ Z8 d& f0 C4 i" r% G# b4 f3 X break;& k s- x8 _2 q |8 x: ~9 x
}
& O5 [# p2 q4 y' P4 L: B7 v }
/ u% P3 d8 s: L+ L. Y}
! }5 Q% H( b4 s- u, {m_wndMenu.SetVisible(FALSE);3 w' ?6 O- ^4 ]# S3 j2 K+ u6 f7 c
# \ \" X6 g- I/ Q0 H, X
--------------------------------------------------------------------------------------------------------
: ]& a9 n) x- W3 d( f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 l% H; u3 p- @) B6 O0 \& |/ g
{
! K! m& \# T* Q( @3 v! W; n2 yBaseMouseCursor();* t/ I" s) d! g2 K$ r
}
, g" Q* [6 N2 F- g在其下添加:
, j5 ]) R, m+ K) E/ E$ Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 L0 h+ z3 j$ H+ p8 W{
2 i- y L9 ^6 ^ F/ z# |: ^7 Fm_wndMenu.DeleteAllMenu(); Q7 w7 @/ A4 t: f/ `. a
m_wndMenu.CreateMenu(this);, x5 u5 f: t% M0 ^+ F) ^$ \" R. y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 p# @/ r7 R1 d/ B$ E* U# W
; }" D( a ^ T( f. [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' D3 ?& E+ i. k! i9 `2 [{
' w- c/ @8 {1 C2 N8 x& x8 C" R" V8 U //P以上级别才可以删除所有道具7 l. U3 q; A* t( o4 p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 W- m" {( P6 {}
) t1 G9 C( n9 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ p; z( ~7 b$ fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 \" u. O8 {6 _! F4 u% ]% \m_wndMenu.SetFocus();- g' w) h9 L* j2 n- n- }/ P
}
$ L) c: |" s) C d1 X8 C5 [8 w------------------------------------------------------------------------------------------------------------
" O$ i& V% K5 v% f7 s5 L' B0 v. f*************************
/ ]7 P$ g: L, A; tWndField.h文件
; n+ ^5 A" f2 L8 l8 K# T9 v*************************
# O6 V. C( w2 R1 A W搜索:BOOL m_bReport;
: Z- Q" l ?- o( J H! Q. J其后添加:
& e" w8 _" k8 _CWndMenu m_wndMenu;
3 u3 L, s; [ v5 ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 _/ Z5 g& N3 ]
其后添加:1 x% ~0 ^# p A
virtual void OnRButtonUp(UINT nFlags, CPoint point);
t1 r, b* u, O; @) ?4 P, f: S% C( V, h+ W7 b" F
. l8 w& H6 {3 z# _. i; {6 c
|
|