|
|
源文件中_Interface文件夹下WndField.cpp文件 b! F' {1 z7 o0 U" E9 ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: [5 W# _$ z) i7 A, R& H i6 _2 G# X, P
struct sItem
8 `8 ?" w2 |/ u2 C D' O{: r7 ?9 ^5 Y b2 m- \. L# F
DWORD dwId;
# v) [- [+ E' {# m; p' GDWORD dwKind2;
, | B. h; F' @# l" wDWORD dwItemId;
o" X0 H* [' mBYTE nIndex;
3 ~3 z3 ^: K5 p8 DsItem(){
" _6 @7 J2 `* S' \, {& K% b dwId = dwKind2 = dwItemId = nIndex = 0;
" a% a6 ?1 I- i+ m}
1 m8 d& N j2 g pbool operator < (const sItem p2)1 q- \3 u r3 t4 I- a: x8 _0 p
{
2 l6 z# Z8 ~9 P. L x8 A if (dwKind2 == p2.dwKind2)4 Q' p2 M( c; h: a1 O, ~/ b4 H/ E4 `0 M" h
{
( w8 r" O0 \$ K# @ return dwItemId < p2.dwItemId;
% Q! I* b' m0 p8 g3 h3 U }else{
+ U1 G+ l, C6 Z) s. W return dwKind2 < p2.dwKind2;: Q& F9 i6 k' Y& W- ]
}: q& T$ ^2 O- I7 E( f s( g5 L
}
9 Y' w1 `7 n* B: s! u1 T1 C};6 l7 e% @ v5 ^2 j! D- q4 Z( X
class CInventorySort
/ B- t' B: \9 C% m8 S8 ]3 |{/ b8 E$ \! k# C3 ~, J" o ^
public:
* q1 C# L( v5 C8 C+ QCInventorySort()
3 I3 y5 _) | G- D{$ }- v- e1 T/ N+ z9 a6 P
m_dwPos = 0;* w. M2 q- N5 n, K5 [
}
0 h1 r% M4 p' n. W5 A~CInventorySort(){}0 o' W. S; I5 H5 \, j
private:5 T3 E# s" O8 u0 p* o, \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 T7 F& o" _+ ~1 {% }DWORD m_dwPos;
7 r; ?$ M6 f7 h8 |+ apublic:5 V; o1 v/ z) T) w5 P3 _
void Add(BYTE nIndex)5 A0 N. H" |0 v
{
* H' t8 l! o0 H% X' [2 c if (m_dwPos >= MAX_INVENTORY)
, X( J% o. S! N, c& k% F! }2 g, k {$ e( q% q, s" D
return;
`5 d3 F" ^; [% n& @0 @% Y2 R } s+ q; o- L" M e7 w+ e
m_Item[m_dwPos].nIndex = nIndex;1 c# S2 `) T$ |7 x8 x
m_Item[m_dwPos].dwId = m_dwPos;
' o5 a% L$ n4 O m_dwPos++;
/ Z9 k1 M' R3 G# f# K( [) r Z}% h5 H/ {9 U' }# [4 q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 L2 ^# D g; R8 D
{
. H% |# I$ {% W for (int i=0;i<MAX_INVENTORY;i++)* Y/ f) y9 p& h. u5 X/ c
{
. }2 T7 |+ r1 T: _) L) R j if (m_Item.dwId == dwId)
& J b' v5 f* e* F: n) [# Q {1 k7 s; p+ E5 x+ n$ l
return m_Item.nIndex; T& Z" {: p9 K( f
}" K' z- ~/ }7 h; g4 w
}
9 Y( Y. Y% H1 C* l3 d return 255;
h2 q, B6 b/ v}
/ P0 J- r% }2 ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 ^6 t" E3 S) v c{, V2 N7 |6 a! t y
BYTE nTmp = 0;
3 c t6 j. _2 S8 x& a4 q1 f7 e bool bDest = false,bSrc = false;
4 {: ~6 x: A r' ?3 f for (int i=0;i<MAX_INVENTORY;i++)
# q, K; ^! p! ~$ c* O. @ {
1 s& m. T& z3 `/ ^/ S' G, f* z if (dwSrcId == m_Item.dwId)! b, ]' k6 J, Q6 K( ]/ v
{
- w4 [# D2 p3 N( W" A2 j //id相等 则 改变对应的dest和src
# u% e6 O! J: D2 r, w$ ]3 M' u7 ^: Z nTmp = m_Item.nIndex;
4 e% T" h+ f# l m_Item.nIndex = dest;8 C0 _8 P, a, F# L
}$ z2 c6 G' J1 B! Q% R' ~
}
2 \; o# b6 N- Z; q# |6 U( f' o( b2 w //临时数据保存完毕,交换开始* | ? Z3 K `9 }" ]8 ?/ P
for (int i=0;i<MAX_INVENTORY;i++)5 p' {; `# l3 r9 g& O) ]. e( A; ^
{
: O1 s1 I; @# g; {. V3 J if (dest == m_Item.nIndex)
: ]; W, W, y; K( p {' i5 K0 U8 j: N* U5 c. J( v8 n+ U
//id相等 则 改变对应的dest和src# w: N8 g/ t' {
m_Item.nIndex = nTmp;( Z& d; e+ ~- V4 u {+ D
}3 ~5 o. c8 K b, }- `+ ]* h
}
8 Z: b& O2 w2 Y4 E! N# {; I}
( t5 }; i1 v4 n8 `3 {};
; N/ l4 d* T3 f6 z& |-------------------------------------------------------------------------
, ]6 s: l* T: Q+ N+ W5 g ~7 t# O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: I8 u7 o: P+ q: I& ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- t7 H4 C5 l, b) B/ `3 a G8 Y
紧靠其上添加:% ^6 f2 B& m- i
if( pWndBase == &m_wndMenu )/ P' n; Q& i8 K6 ?: A; \. u" c
{
: Q% i m8 v# x% W- q3 C6 A9 M1 t6 W switch( nID )
( {( N7 i4 @6 M" Z4 A {9 W- d/ a2 L9 p* p+ o* w
case 2:
1 q+ N: y1 @5 |7 p+ {9 O& Q {
S5 O$ y, w5 ^( A4 U //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 M4 ]( y& R9 R( U* B# X if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 e+ g! J3 ]0 d: L1 p {0 a. w1 L& h H
break;" {, ]! U- T5 r
}
: |- M/ d! w+ l" I6 R8 y6 m4 X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ X; x: p6 U6 c! | {
# X5 [; ^/ s' R' s) | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 m* O7 c" S6 P, h# { if( !pItemElem ); E7 p* D0 ?+ }" J, C3 S
continue;
7 f# q S O7 B if(pItemElem->GetExtra() > 0)! ]& L: h- g. j
continue;/ l o% C" S2 q5 }! ~/ ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 I1 i4 Q7 o. C$ T
continue;& Z5 _, V E. v3 w6 a+ y: T
if( g_pPlayer->IsUsing( pItemElem ) )
2 m: S7 @6 W7 q* p; P3 N2 D continue;* i/ e2 Y5 v: v1 d9 O/ _( O' @
if( pItemElem->IsUndestructable() == TRUE )5 }" N% [, ]" D+ V1 Z8 o4 U- U
{9 H; |5 q# H7 L6 ~1 K& E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* z3 ^ i% t: W6 H# {2 h! x& p
continue;
' U' W; J( b/ G, b, | }* ^. c- C" M9 I& A# @, h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 |/ ]1 }5 O4 `( z( C3 @ }
2 i; G) q0 X/ d* m/ G) R break;
( R! o0 F; l+ t+ _, J# s5 N2 c }
4 Z; f1 C# R9 R case 1:" P# t. X' L; e
{0 w: C6 P8 c# r4 }% g
//整理背包0 V4 H- R- {: D" X
//////////////////////////////////////////////////////////////////////////. r* j' n1 q8 `, C
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ W: C, K3 W+ ~% x& [/ O //////////////////////////////////////////////////////////////////////////' t F) G. j7 `1 t& w
//////////////////////////////////////////////////////////////////////////
o' | S) ^5 O CInventorySort* pInvSort = new CInventorySort;
. t0 L9 _6 \/ v! x: Z: j4 d vector <sItem> vItem;
7 { F7 Y% \. G. C9 P7 b# i vItem.resize(MAX_INVENTORY);//初始化大小8 y4 V/ J6 Z; ?% `" y9 {
//////////////////////////////////////////////////////////////////////////8 |4 v; a) F6 w' P# e
//填充数据
& d/ v2 i9 v( Y& O" O% X* }# [" n for (int i=0;i<MAX_INVENTORY;i++)
7 z1 j6 e! c* c8 z6 R {
S# _8 h: v. {; l: i9 R2 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 O: g6 o- c5 ^$ J
if (!pItemElem) ?' `$ r2 r2 l4 F/ |. r" e/ Q% d( }
{
- \. l5 x$ X( ~, K( p vItem.dwKind2 = 0xffffffff;, X a; s! Z& D
vItem.dwItemId = 0xffffffff;" j6 R% m; p( Q3 W# H' _) w' C
vItem.nIndex = i;
) }% i2 c m" P0 i }else {, s" e" E( F2 b' K. h
ItemProp* pProp = pItemElem->GetProp();; W# O$ p8 u$ d) s# h
vItem.dwKind2 = pProp->dwItemKind2;1 |+ C8 f, t$ n) J- P
vItem.dwItemId = pItemElem->m_dwItemId;/ S# r" F% u. H( _- |9 n
vItem.nIndex = i;. p- @4 m& ~/ P1 j" H: `7 J
}
: V' W6 q/ M }' I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 T6 [5 u) X X) v
}
7 S" |! y {2 u8 L7 i5 N //////////////////////////////////////////////////////////////////////////6 @$ Y, @ n, w- G
sort(vItem.begin(),vItem.end());//排序! J8 @; Z) A6 u# c8 \8 h: F
//////////////////////////////////////////////////////////////////////////2 a' r: Q# r3 {7 ~7 O8 C
//交换
3 n5 U V6 L2 [/ Q for (size_t i=0;i<vItem.size();i++): E, w( f8 G( N5 S5 |
{
2 x% K' q1 l; I: P/ s% o //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, T6 o8 D4 ~- v* E# n" {9 m
pInvSort->Add(vItem.nIndex);
7 X2 q! @/ C2 o } A" e* G/ @7 p+ W
BYTE nDestPos = 0;
8 `, z5 t( M* r+ L( G for (int i=0;i<MAX_INVENTORY;i++)
& E5 i) F- p0 t3 i {8 k J R8 `) x" y$ k& i- F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ k9 `- k6 I* i# o if (pItemElem)7 ^$ A$ s6 x3 y/ v- M) v
{
, ?( x+ C9 v. T3 h$ s. \ if (IsUsingItem(pItemElem))3 k4 W, [1 g3 C, ^0 x4 {+ @9 k0 }, z
{+ |) g' D" v s- q, G1 G
//这个位置无法放
' x& C3 b* f5 d$ L nDestPos++;$ f) y" _. q6 I0 ~% r9 `
}0 l( j) a# O" S& t; }' C
}1 [2 Z! T0 j2 f5 L
BYTE nSrc = pInvSort->GetItemSrc(i);# P4 U2 @/ {5 _9 @/ r) j& ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( f R3 e$ G& y
if (pItemElem)7 n% {* J6 u* R& c
{5 I; ]3 b$ Z/ K) S/ Q$ p
if (IsUsingItem(pItemElem))
$ n1 q' E5 ^: `$ ^4 a0 A5 D {
: ]7 }+ y4 @! T5 w' M- _/ ]" E //这个道具无法移动,跳过0 [: ]$ |/ @6 {! q5 e
continue;
9 A) G3 Y6 H) p( `: l6 \% q+ Y }
. f+ h1 Z; {; M8 j! S }else{
4 r+ o; h+ S+ U$ U# q4 O //空位置 不用动' ^. ~+ B$ x: v: X3 p1 ~
continue;" s% i) r* Y* d! {
}6 [$ K; T( [# r: u) q
//////////////////////////////////////////////////////////////////////////& u8 w/ l2 Y. d/ R( k
//开始移动 |* X3 l3 s, z# k- w7 h
if (nSrc == nDestPos); [& g8 M* N8 w3 [
{
& i2 M; m8 E% f8 [3 t' k" L5 _ //原地不动
: y& }4 P8 j" {$ |7 ~4 Q, p0 r nDestPos++;
% m9 z8 d7 X8 O8 f+ J/ D" D( W+ e continue;2 G7 t& j' _+ c1 l5 I& e% O. G& r% J
}. x5 S( d8 b3 `
pInvSort->MoveItem(i,nDestPos);0 a* D; H1 c, x' q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 q! Y% |1 R) f& n, m0 Q, y
Sleep(5);. c, p- Q* a& F% C9 _
//Error("移动 - %d->%d",nSrc,nDestPos);1 W3 E2 B; H2 t9 k" K
nDestPos++;6 t. K) f( ]- ~
}
9 I. H, j6 r0 F- Q- S3 a //取第一个元素的信息
, `0 Q- a2 C! O Q0 d /*
1 M7 E/ }) ?' R8 @, _. J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ O4 }1 w J& `3 z {5 Z- L' [4 K! e% f) Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% }& A, p9 k$ z8 }& U3 O# j2 R1 @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 h$ M7 c n1 ` p. f V }
7 d4 M9 c" u( w */; t- {( [( P8 T
//////////////////////////////////////////////////////////////////////////3 d4 w+ e: n; _ g
break;" j% B! E }; D" K. n
}4 V" A6 m$ w9 [7 c2 S
} 4 Z3 T! s* \8 b: S! s7 _
}7 @2 E+ Z9 l; J+ K5 R
m_wndMenu.SetVisible(FALSE);6 c+ d$ K0 L! z# |
& A* F; U3 s, o% r7 z
--------------------------------------------------------------------------------------------------------
4 L2 X/ ~: ?% C) H6 V& n, A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( @# Z. _# I. P6 [{
* z* I' B1 v9 T+ CBaseMouseCursor();
% G% j$ p+ F2 w7 P}
3 ?0 o' w. q( A. `在其下添加:
9 d/ J3 r: ]' D' ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; D8 l2 ^' ?+ x9 j! F: v1 c$ u{4 ~. w6 @6 }6 T; v; Q
m_wndMenu.DeleteAllMenu();
9 k4 t4 |, |" s$ m, H* M( Cm_wndMenu.CreateMenu(this);& v) s/ _) ^5 n4 |# R+ r, p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! g: a9 Z6 N$ h e& Z+ [! z
$ ^& C0 M$ L; N0 R( Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 R$ E$ n! s4 ] ^( a
{
% y5 d% _+ [' [! { //P以上级别才可以删除所有道具& N4 b- u$ Q3 z3 [* @, c
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) w: f1 |5 X+ W& z8 ?% w9 Q}
8 p5 {+ A9 g4 c' Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' l ?. f* h; @" w7 c1 J) b( x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' M4 Y6 L7 j% m9 i
m_wndMenu.SetFocus();
) t6 c8 w- p! C! @# u; P}1 W4 W& _4 n( m3 n9 h% ]$ S. Y
------------------------------------------------------------------------------------------------------------+ T0 D8 j+ b# \( W6 J$ p
*************************
2 d7 p+ y; ?1 w t; h9 d) X7 xWndField.h文件% J6 \3 R' x; x2 Y3 s5 _7 n6 c
*************************1 t! E7 s, x- v$ U8 X
搜索:BOOL m_bReport;
; `1 U- o) Y) K" M* e/ i" J其后添加:! x+ t+ Y2 X$ J5 P7 m4 X* }) ?1 r
CWndMenu m_wndMenu;8 A8 H& d( a5 `/ |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 X" J0 d/ [. c) x4 S, k- C! D5 S3 @
其后添加:
/ h, y: m& Z0 g. ?8 U/ tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 R* z2 M6 N5 U5 A
- D1 m7 Q5 X2 q, u {
$ ~- u* b x+ |+ i |
|