|
|
源文件中_Interface文件夹下WndField.cpp文件; k5 u6 s3 _# e0 Q9 ]' Q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 [, Q( F# Z) f) v2 K( L9 b1 h
( Q1 F' v. f2 I; e. y5 S5 istruct sItem
- ?0 x4 [0 e/ |9 ]; t{
6 |7 h; B) d4 ~' o9 k8 ?2 c) kDWORD dwId;
( `0 h& x8 `% l! s( P2 EDWORD dwKind2;
5 Q6 E6 B5 _$ Q( O% qDWORD dwItemId;$ q; i% _2 e( }( y" z$ F) [) n- |- {
BYTE nIndex;
~! ?$ b0 N* G( E1 xsItem(){
2 Z* i5 M" D$ S dwId = dwKind2 = dwItemId = nIndex = 0;' o- J: x4 s$ Z" k/ N1 R. I) r# E# ^
}* ~4 J7 p1 `' }0 P5 F/ W
bool operator < (const sItem p2)
& w8 N# z% z9 r! o. m; |{
% i8 E8 @: s d' J _" R if (dwKind2 == p2.dwKind2)
7 z T- w/ {6 A, O {
D" H2 _8 i9 C( P) y" l/ i( E return dwItemId < p2.dwItemId;. e) A. m; v) G. y& P3 h$ O
}else{
( j6 s/ l- y/ U: R4 a( a) j1 q) m6 b+ l. a return dwKind2 < p2.dwKind2;, D# m1 S5 V: m3 w: j# s, D
}
" W- w8 W; u9 ~}
# J k Q/ s$ J+ M" T1 d, A8 e ]};* U. w0 O x: q( M$ x! z' z' H7 }
class CInventorySort
4 `1 O/ W) ]. h+ R# v$ e{/ O3 d+ w9 N3 {
public:- }: m6 T# n9 t
CInventorySort()6 G5 k; @$ m: R2 j6 R
{
- h2 r* u7 d7 _5 X9 N. i m_dwPos = 0;
9 p5 Y: N/ W4 f- k7 _3 O, L} R) M- Y' w/ g& j7 W9 h
~CInventorySort(){}
( q' [# i0 E" u! W& c% i6 eprivate: t% C- `, J5 Z7 ~! k% S* j. `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 _$ `9 V8 k( c; R5 c! Y* J
DWORD m_dwPos;- Y9 V) k2 ~) n( P- q; X
public:5 _' N2 K8 y3 Z7 U2 ], q3 u1 a
void Add(BYTE nIndex)
; J0 X2 ]% z. z( z{
1 C {0 \7 R/ \- W+ I+ W if (m_dwPos >= MAX_INVENTORY). F/ |; a9 p* r
{* G7 Y) w4 J9 G9 I" d+ Q# f' E& l
return;3 z1 L8 y# W9 V+ K& ~, x0 ]2 A# k1 A
}) C2 ^. N& D# ]; p2 j5 q
m_Item[m_dwPos].nIndex = nIndex;
; Y4 q9 |# C. R, {* M( C/ O m_Item[m_dwPos].dwId = m_dwPos;) J1 r' N7 ~' d3 z' E- ~# r
m_dwPos++;
, q% E' o. d0 H: q# z# ?. T. o}& Z1 S: X. d/ s3 `' T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 ]- f4 r+ I! t1 v1 C. i! [ [{
9 w4 h4 C7 B- f J% c for (int i=0;i<MAX_INVENTORY;i++)
3 S0 T; U. B- w+ E! g {4 {% k2 R+ c8 V4 G
if (m_Item.dwId == dwId)1 [1 O- v3 K$ `. e% g8 T
{8 G4 T3 Q1 F* d* s& `8 f
return m_Item.nIndex;
4 B- Z x, r9 t7 x1 X; I }7 ~* p S6 ^# o" y
}
; y" F P m% f return 255;2 u7 G6 S; `5 s, G: L
}' i4 k6 O8 l" }' v4 g3 [
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! Z O- s& q# V ?" {
{6 F8 o1 ] x4 A3 |
BYTE nTmp = 0;7 W# [+ ]4 x1 G
bool bDest = false,bSrc = false;
7 u# @% T) y9 G' G/ H for (int i=0;i<MAX_INVENTORY;i++)
% ~% B5 z9 k7 W {
1 A" B8 c: P- }& f0 j9 _ if (dwSrcId == m_Item.dwId)
% b! P; D" X# `) @4 J4 ^ {
: m( D& _( V( j7 {" | //id相等 则 改变对应的dest和src
8 n) W& d3 Z* E( A. Y9 E) m nTmp = m_Item.nIndex;# S6 m$ F6 r5 m* [9 D
m_Item.nIndex = dest;
; j3 w, M! x3 J/ A% D4 U }
$ B. M( O5 c( p N' c4 \ P }# p$ z6 b. o: @+ @' E- K
//临时数据保存完毕,交换开始: I7 {( B* r% x$ N9 T
for (int i=0;i<MAX_INVENTORY;i++)- g! N& k; ]5 x, P) O
{& g y! D* Q: C2 e: _! C5 ~
if (dest == m_Item.nIndex). G* b+ B: n( `$ d7 ~
{
" ?( I F/ m. k; ~% d9 u //id相等 则 改变对应的dest和src g! `, O x+ A/ N" `4 O- L1 `
m_Item.nIndex = nTmp;9 z8 K! Z9 a) F, f0 c0 G( `/ n
}' g: t0 H3 r1 k y" z
}
) U4 q/ ?$ H& o- [! s}0 i8 W/ Q& l' I1 g2 ^" y8 S
};
) t9 a/ g/ A8 a# O-------------------------------------------------------------------------
) E3 h. x6 R0 p `) N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 @5 ~9 }% G9 t- V/ m! z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( i3 y! x4 u; l
紧靠其上添加:
3 ]) v$ u9 _. U5 e Z2 r" s V& b" qif( pWndBase == &m_wndMenu )- W" S9 ]5 i7 g0 A) x
{ {4 G7 z2 ^4 `% P* M% {5 V/ E, p
switch( nID )! A- q, H; w# M3 n# n* C# `) o+ h$ j
{
% f3 w- C) U$ r+ Q* v! _6 B: { case 2:
, z5 @+ \" M# ~- K, E" } {
, Y, b( | `1 R. g4 G2 V: R: m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ b5 y- _6 V3 D& Q) K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
e+ S* B0 N* \8 N! u6 f {* e6 }+ ~- O+ x. E5 n; z; p2 B
break;
* R% R! `3 E: n- @3 j }% [4 d* P7 L6 u8 D
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" H/ S, s1 O4 p C {3 R( C( x% Z k/ h6 E9 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. g" M7 {2 J; x) X" N if( !pItemElem )/ x. Z+ T2 y- h$ I* L/ ~# o
continue;
2 B5 p7 N2 A8 f9 l' s$ l* W if(pItemElem->GetExtra() > 0)
& |/ @+ S! V( S# l; y7 u continue;$ m5 J3 F$ L" f$ c( L3 D9 X( u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 r' o8 T z' c4 y1 `2 }2 T9 x continue;
. |- a/ T- o+ ~1 n if( g_pPlayer->IsUsing( pItemElem ) )
; V: w* s" F/ L$ R: @ i; Q) _ continue;
( C4 M: J# o8 y/ K( P& T if( pItemElem->IsUndestructable() == TRUE )
B# K+ E8 W/ M$ `% K7 I) i {; d& [+ @, W( C6 y' u$ M D9 @3 X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) Y' f. w: M5 A$ o continue;' M; a( T: k4 [' K- l* K3 r, d1 F
}8 {) Q- u' |" w, c: L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" L$ i7 _/ U4 |$ k$ j
}7 D3 I8 @/ K; A
break;( i, M# C2 C+ _4 X% e0 q
}
- f9 t2 z9 s6 f# Y3 `4 v' ~* L; o case 1:
: j, |6 I/ J$ C$ q {$ j6 E/ j* `0 K/ x7 G/ G/ ^7 p
//整理背包
# g8 ]: [ R& S/ h; Q1 l9 U //////////////////////////////////////////////////////////////////////////; h* H. e* p. f" P9 ]* F5 X/ n! u8 }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; b3 T6 @9 a" g0 g+ x //////////////////////////////////////////////////////////////////////////
2 S5 n; t9 S2 z4 ?) W- h //////////////////////////////////////////////////////////////////////////8 |) Y+ {/ W/ z; u
CInventorySort* pInvSort = new CInventorySort;
* t% W0 x* f* B+ w vector <sItem> vItem;
/ r: y+ O X- F- d vItem.resize(MAX_INVENTORY);//初始化大小- h1 P5 ]/ |5 `# x+ |
//////////////////////////////////////////////////////////////////////////+ C; H0 \( y& x+ h [& b+ f( B
//填充数据
& U( n4 d* @3 g) v B4 C* Z( Z for (int i=0;i<MAX_INVENTORY;i++)
: ^. p5 u8 v) O- ]3 r9 T5 O {$ A/ @) [0 ~) T; V, u' Z) m0 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% o9 A" j4 `3 L/ _. O( }% ] if (!pItemElem)( Y1 h2 ]! }. B9 N# D
{9 E2 x5 W. z: b- K4 q8 A, Y7 q
vItem.dwKind2 = 0xffffffff;0 W2 W, W6 L6 p$ L7 p* P
vItem.dwItemId = 0xffffffff;
! u. N0 h, b i8 f4 S vItem.nIndex = i;- _6 y% P9 \8 T1 j" r& A2 j6 | z
}else {" c" C% H2 }$ O" c
ItemProp* pProp = pItemElem->GetProp();
' |* `( L4 r) T2 Q# g; @5 ~9 P vItem.dwKind2 = pProp->dwItemKind2;
) q' _* B$ Z# L" s! t7 k vItem.dwItemId = pItemElem->m_dwItemId;1 v5 s3 O" I) ?2 j# X9 \
vItem.nIndex = i;
5 X) G1 P# M! C4 C& l1 ^# B3 a( [ }
$ j. @( Y) ~5 Y: s) v1 k //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; ^1 q# `3 J- C+ W2 b3 K }- h& B- G% J/ ?3 I; f# [
//////////////////////////////////////////////////////////////////////////
( `3 T5 e- H t" g- [ sort(vItem.begin(),vItem.end());//排序
4 y2 w5 Y) P' g' x M //////////////////////////////////////////////////////////////////////////! f+ m- T" X" v' B' s$ w2 b j
//交换
- n# X/ {, d" G$ Q for (size_t i=0;i<vItem.size();i++)$ E& Y7 H4 w1 n# m) U+ a; A9 o6 L+ ?) g
{
, x+ @4 o- G: [ E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& v2 C0 b; H, H% y
pInvSort->Add(vItem.nIndex);
6 G) N _0 H+ E' \# `1 H* }0 U }. B" s) h% B7 V C* x: {: V
BYTE nDestPos = 0;
( l/ P% N0 u8 K! G; @0 q, s/ x for (int i=0;i<MAX_INVENTORY;i++)( @! N5 A D7 z
{# F: c6 a3 s+ x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 ?( v/ X6 S7 a4 Y: G! o' W
if (pItemElem)# {/ Y; l8 l+ X
{" [) t3 M0 s, n: W. Y2 S: ?% O
if (IsUsingItem(pItemElem))% V) b/ j$ b7 i& e
{* N; ?$ |% q6 i
//这个位置无法放, j# Z2 l. U4 D4 L* u6 k" Y. }4 g
nDestPos++;
# m! d4 \- ^( ^7 N& V4 F) |5 l# h }0 n+ X8 v _# ~5 T* A
}
; _+ A4 h) C$ j6 J- | BYTE nSrc = pInvSort->GetItemSrc(i);
& F- l' D6 c) x; v! a8 T w/ | pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 C. l3 `# M# x/ J! G9 |' d1 s+ m3 E
if (pItemElem)
+ e7 W* |' M; V2 `: q6 R {
: z7 t$ o" i3 I4 M. U( Y if (IsUsingItem(pItemElem))
/ _+ _5 B6 f3 c3 s! b/ T" p {0 D! H/ b c. W5 z4 J
//这个道具无法移动,跳过
d# j, k" |0 ?" @. D/ b! K. E continue;8 {0 `5 E3 E" f- Q
}
0 P* [( X& ~: t, m' B }else{" U* z0 W2 o7 ~9 R/ B# g4 }; ^
//空位置 不用动1 Q) u# j1 |. o# G* [# T
continue;
* y4 h% w, m! n# b& i4 a }+ f, |6 c: J! Q j* v: {6 J
//////////////////////////////////////////////////////////////////////////
1 R" G" }$ d/ H- A1 }9 H7 c# G //开始移动
- a. `$ _' X' W. }+ ?9 x0 _( S if (nSrc == nDestPos)
0 q5 l( Z/ k2 F9 q- i# t {
) P- k9 b3 `0 n5 p: S( S# F //原地不动
6 \$ M! S/ j8 X nDestPos++;
d2 d; v9 M% d/ W$ a, W4 n" v. C# N% W continue;
y, _! l r7 @# W3 ~+ G2 M. h }
1 n T; E2 P$ ]8 ^ s5 n pInvSort->MoveItem(i,nDestPos);+ z& W4 ?3 g" I6 g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# {2 E5 p' i) } Sleep(5);
9 A& p) Q: y4 j; |% n //Error("移动 - %d->%d",nSrc,nDestPos);
8 J( L4 c( i4 @: n: M nDestPos++;) t7 o) w) a8 p2 [; F
}7 b- a6 x8 t# o8 n
//取第一个元素的信息7 P, K; `2 q% A7 r
/*
9 C# h3 W) B- s4 o* \% P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 q- m, P0 M7 V# f
{) D% K" P) |/ V6 V% J7 I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ C; C& s$ R8 _+ w6 H( U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" `$ V1 [* U* n: Y. m1 k
}- p+ A. H- j! A3 }% a! Q. }
*/
' Z" W5 h( |$ |8 Z+ O //////////////////////////////////////////////////////////////////////////
7 k3 Q+ Q* D' P$ [+ W break;
8 d; D+ D8 k: S }" B8 z' G: x& V# l+ y4 I5 i
}
. k4 ]/ H7 f9 y! N0 _1 ^) n}
1 o$ `5 q* Y% [# b) Y7 }m_wndMenu.SetVisible(FALSE);0 M# Z- N% q0 k
1 g, M# ~. G* O# a
--------------------------------------------------------------------------------------------------------
) G/ k! V* j9 J+ j& s; R6 W3 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ ~ E9 P8 _) o& m) T{+ R" X. d# j3 P; O6 V8 \; B7 V2 L+ ?
BaseMouseCursor();3 r% P. R8 }, S) g0 C+ ]8 D
}) I( u3 N: M; z w8 q
在其下添加:
6 V" U8 a* T# Nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 j) u4 w" Y9 l. s) ]
{
3 q. J2 M. F7 lm_wndMenu.DeleteAllMenu();
9 N: x- w4 I) d% {% ^m_wndMenu.CreateMenu(this);6 G! K% m8 {1 h& Z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ n1 L0 \3 |" q- ~" a0 [5 S2 e' e4 Z! A& t/ Q- V1 g4 L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 c3 s, C( L1 i$ x. `9 p4 L
{, I2 Q+ o& A, r& C, e
//P以上级别才可以删除所有道具) j. f0 A2 L. d' w6 t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 g) R& E- l2 ^) C' a0 u}
7 }" Z; i; g' [; @; @8 j3 V1 gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ b* f+ k4 f. I2 X9 L( F: j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 Y3 k9 \# V1 A" h: U% h3 Sm_wndMenu.SetFocus();
4 s! I, v5 v$ F4 ^}
7 M) ]" x! L- \: W! i$ \0 ~" y------------------------------------------------------------------------------------------------------------
) _2 s0 T; C0 C*************************
. h. i- M/ `+ v2 S6 tWndField.h文件# q O& r9 n m2 j% J* ~
*************************% P, b. M2 p9 T( Y
搜索:BOOL m_bReport;
/ C' s3 q( V; }其后添加:: f" K# |- w0 h0 e5 d. g4 Q
CWndMenu m_wndMenu;
: `% n, e7 n" R( h: D' p4 {6 w6 v& O. @搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ c; O" F: ~' v! u4 N其后添加:; H1 X( R1 J! c% F) M) X
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 Y5 Y& k7 @% r0 Z+ o( B( g' p" ~
, X4 F$ n! g+ d" t5 d( y) Q5 b, l3 P% O( A& a9 g
|
|