|
|
源文件中_Interface文件夹下WndField.cpp文件" L8 U, E# [" s5 R" }9 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ F y" o5 Y" W8 z: ]
! j* H. k( P, [8 B' p9 G& t
struct sItem
6 @. I% J, `/ o+ f8 D& [{
, @( r1 g- Y* ], S6 _2 YDWORD dwId;
. e3 P7 t7 W& `+ e2 l! |) `+ w8 UDWORD dwKind2;
) d7 D+ U7 J. R; ^1 o; D9 X0 VDWORD dwItemId;
( H' I/ y, N" z$ P6 w: ]* }3 ZBYTE nIndex;
5 V+ I2 F# \* \/ j) b1 HsItem(){
) O0 B( _6 f: y+ {5 x7 X& X& M dwId = dwKind2 = dwItemId = nIndex = 0;* q3 k9 k' @ a" c, D8 R; W
}. k w0 h8 O: b, ?! T/ O
bool operator < (const sItem p2)7 K5 u% Y" M6 m9 ^
{: x: f* ?; M/ Z% o
if (dwKind2 == p2.dwKind2)# Y. a3 N& O0 l
{
; e" O* O& `2 c9 i. K% I return dwItemId < p2.dwItemId;# i9 I" D @' M" Q" G
}else{
% P. I2 H+ j: K; c- d+ N return dwKind2 < p2.dwKind2;
: [( p, J: U, V. b/ S }7 U' y. p$ l& S ?, y
}
5 G/ ~" ~! V* i};1 t# w, M9 x! H2 o, O5 A9 g( s
class CInventorySort7 z( z ? J+ q( O
{
' q: }1 B. J, @' r' Jpublic:
& G& K* i( G$ _/ V) `' L# hCInventorySort()
! y7 w/ y, p, `{8 ]- J" ?& K7 K! |
m_dwPos = 0;7 n# U- d8 m+ I) J# \
}# r' A4 _+ l7 ~+ W" k& y
~CInventorySort(){}
1 T5 ?) v8 ^; p! pprivate:
( N( x; [) f4 k: e6 f, \sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# p8 Q1 [+ P. c h) p fDWORD m_dwPos;; I) ?5 S" ^" U- Q, N
public:
+ S- e. W- t$ U2 d2 p; fvoid Add(BYTE nIndex)1 [; U9 u) I+ C0 J, V; p( P$ Z: Y
{0 _* a- _7 v1 I1 h* P* @2 F
if (m_dwPos >= MAX_INVENTORY)
) ?( l Z) i+ {3 d ?, W0 \ {2 u* {1 J3 F7 V1 i" n- ^
return;3 }+ ]+ c2 @8 V1 f# y. ~
}
% r+ O7 [# o G9 S2 I5 C g9 n m_Item[m_dwPos].nIndex = nIndex;
* F$ s0 }$ G# J5 ^ m_Item[m_dwPos].dwId = m_dwPos;$ R: P: N, J8 D( _% r g/ y4 O
m_dwPos++;. p" G$ n( @! z0 ?, q# |
}
2 ]( f- q2 B" G& t$ `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& x5 b& S7 X0 q! O{
3 Z) y6 R; Z# R; G# \) { for (int i=0;i<MAX_INVENTORY;i++)( s; _( T# l! E8 T- w
{; P+ m$ ?7 J/ j$ ^
if (m_Item.dwId == dwId); M/ G4 ^# i# ^9 Q" {
{4 h( W0 D X# t; b9 f
return m_Item.nIndex;
: ~, p6 F$ R/ R/ o* X }/ ~) }( P6 d. r2 V
}8 k. x2 G; k# K* L
return 255;# Y- C. [0 r' P* }
}, r; Z7 ^$ w, w, l; W4 b5 s
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" R' ~7 S0 U& v% o5 F& x: q/ T
{% B: h9 a8 j7 }( A
BYTE nTmp = 0;
8 p1 z* g9 C. ]: Q$ m bool bDest = false,bSrc = false;
9 @: c4 c7 W& G3 h for (int i=0;i<MAX_INVENTORY;i++)4 m4 ^4 B& l9 u, Q3 p, _9 v; ?
{& I' I; a! a) M: N2 G+ R0 H. h
if (dwSrcId == m_Item.dwId), l, I! A; l4 ^0 W _
{
9 g/ f8 a0 {# H4 Z //id相等 则 改变对应的dest和src
4 `5 \2 d# c% _% R3 o z# m nTmp = m_Item.nIndex;0 N# L/ |, i9 }! d
m_Item.nIndex = dest;
7 H1 E% D5 Y6 i0 s }9 O. ]' p' x" t! ]6 A
}
4 }/ e% N6 b6 B3 U3 _8 b //临时数据保存完毕,交换开始% D& { O. H( G6 J( X+ t
for (int i=0;i<MAX_INVENTORY;i++)
5 W, z" W2 g; J2 w {
% E) C/ J+ d H4 V- ?/ D if (dest == m_Item.nIndex)$ Y+ h3 P0 h: t
{
; J0 w3 k$ F" ]7 a% z5 s4 l //id相等 则 改变对应的dest和src
% M0 R( F! |4 j2 T- { |6 S m_Item.nIndex = nTmp;0 X0 ?3 G) }/ K6 G
}2 H' u% K2 K- G4 J0 n! U, z' E
}
0 h. K0 G z1 Q3 F}
3 ?+ d2 U2 |% }* t# D};
9 }6 w1 k; R: w2 k s-------------------------------------------------------------------------
( U) A2 C! p( E8 g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) u4 o0 l. Q! n2 Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& P, W& z/ a5 H8 {紧靠其上添加:
- ?+ w- j H. O6 M F8 b9 t, Sif( pWndBase == &m_wndMenu )
+ H6 E6 z' P' h) X3 Y5 N{
3 W6 j) n$ U2 k( q6 f s switch( nID )! J2 m; Y4 V+ T& g
{( s$ G U) U% ~& @
case 2:
& ^, P+ e2 k% w- l' c( b9 [ {
8 F+ m. \9 o4 i# |9 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; e {! `* n' E% E ^: C7 U# j
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 W; z% Y$ T4 _7 } z {- F2 X' x2 l8 x& K5 g$ t, z( r
break;
& d, b6 t: x* | M, B1 y. H9 ` }( D$ `3 F, W( n6 r3 t- T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& }, Y" s* O+ i7 }. a& O+ i {
: _8 o, a2 U } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ M9 @6 L9 x/ A2 c if( !pItemElem )2 y9 ^3 b5 S( h8 i
continue;
, G4 G$ ?0 d% F4 v8 n* W if(pItemElem->GetExtra() > 0)
0 s) P4 t, y; e, G6 d" ` continue;5 U ?& {) Z4 a7 q- G% v4 H) `5 h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) b1 m0 g% c Y8 D& U1 G continue;
& x% g3 t% X$ `0 k$ p+ R* t" } if( g_pPlayer->IsUsing( pItemElem ) ) C2 \# s0 t4 Q9 O2 S) I) q
continue;
9 ?5 a, k4 a9 m1 p! f1 |; O+ y if( pItemElem->IsUndestructable() == TRUE )
! Y" u9 |' q" z% f& p4 ~1 Y5 I {
. H0 V `) Q6 L- H, V; } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 g6 C N5 h9 j" {& X& W7 G
continue;+ q, y! b# d* o7 |- V
}* p) n% m) }0 {" e. b6 v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; H2 c; Y3 E5 e0 c% R$ k
}
7 c2 @# x+ u5 v# T break;9 B- e/ v1 g& o% ~* Z% W. C5 s6 f
}, n' U! W! t t. T
case 1:) p- y. h: v/ }" v) \9 Z8 n% n2 s
{4 l+ y3 r9 i; |2 f1 J* P
//整理背包9 H) g$ k& P& w9 R N3 K
//////////////////////////////////////////////////////////////////////////* F# t a- ^0 I& `5 o! M# t# ^, h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# G: V2 u4 n* b/ X //////////////////////////////////////////////////////////////////////////. A5 }4 _. E4 j1 {
//////////////////////////////////////////////////////////////////////////
, x9 P9 D$ s, ?4 O7 R, n3 U6 j CInventorySort* pInvSort = new CInventorySort;
# L8 E8 e+ t |8 d vector <sItem> vItem;
% b3 U! W4 M) _0 [ vItem.resize(MAX_INVENTORY);//初始化大小$ ^! f7 K. ~+ O# S$ N4 ^' _
//////////////////////////////////////////////////////////////////////////" j# A% |+ n/ Q. W2 f' G9 f) j6 ]" |2 O
//填充数据
# @! w3 X% ^ Q4 ~% R9 e& x8 T/ ]" d' X for (int i=0;i<MAX_INVENTORY;i++)5 F& V) o& a8 p
{$ k& O9 o n( B/ ^ H: M6 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 V7 P: |1 b' ?. @( w8 T' D if (!pItemElem)9 m2 W/ ?* M4 V) {7 N
{
2 z6 T6 S& j4 O7 R: Z. A* j% Z+ w vItem.dwKind2 = 0xffffffff;
% y0 [* O+ M- M, u0 Z4 f0 ? vItem.dwItemId = 0xffffffff;( [4 J7 q) z9 ~/ Y6 \$ V
vItem.nIndex = i;0 C. z- P: N! V! n
}else {
$ j* D) {) I7 m! f5 o: L, { ItemProp* pProp = pItemElem->GetProp();
2 T6 b4 d: E) P6 }# Z! T% A vItem.dwKind2 = pProp->dwItemKind2;# J1 z, b; B) f( {0 K( F* F
vItem.dwItemId = pItemElem->m_dwItemId;
! o3 ^! m* o$ [' z( ?; Y vItem.nIndex = i;
* s8 L4 o7 V p D: |$ v }4 y; C9 b1 w4 a- L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; c9 A4 r. l4 e; L }0 L/ W) I+ T% }) j
//////////////////////////////////////////////////////////////////////////
0 {) B, ~5 ~! U- P8 y, _* G* q sort(vItem.begin(),vItem.end());//排序
+ b; d5 O, {- @/ u //////////////////////////////////////////////////////////////////////////3 f y& l1 [5 f" g& q
//交换& X. b" n( c) y7 `
for (size_t i=0;i<vItem.size();i++)
- H' {4 [9 P6 [+ t {! R/ M' u& C! Z) z0 V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 e+ k; V3 y( w) M pInvSort->Add(vItem.nIndex);. @+ w+ b; M& g G
}
: M3 V9 y2 A' E% f. c BYTE nDestPos = 0;
+ |2 m7 K( w0 a8 l, L: M for (int i=0;i<MAX_INVENTORY;i++)
' r/ z# q7 N* z2 B0 S {1 s. D- w% C4 L* X7 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ W3 R) V: w8 W* n8 v `. D) R0 A if (pItemElem)9 p ]# |1 `9 g( L1 N
{
2 |* j# n; F r% G! z if (IsUsingItem(pItemElem))# e4 O5 ]/ Q3 k+ z
{
5 s3 Y: F( W, X6 {4 a //这个位置无法放
7 f. M3 M# X6 n" a' ~4 y nDestPos++;
3 M% @% Z, |, q6 Q+ N5 Z2 j6 o) w4 M }
/ l! }2 V2 I* c: s" \ }
6 k/ A3 g* i: f6 m# g BYTE nSrc = pInvSort->GetItemSrc(i);
( M( a8 S) |, I! X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* w6 Z/ m' m0 L( Q9 @- H: ` if (pItemElem)
- Q, Y8 u. h$ B {
, Z/ U) Y1 a' g$ t! `5 { if (IsUsingItem(pItemElem))
: d( c1 ?6 N3 z1 l4 r& c; v {
# X2 m+ A8 V" D7 C& w0 s' G& t //这个道具无法移动,跳过
2 q. k. ~% V3 h, r% { continue;
0 i0 k& R+ q- x: e1 \! F! R }% N0 x- j# B8 ~; @: X
}else{+ p! {# ?+ k; t- H* l
//空位置 不用动
# |8 G1 ~3 P: m8 S continue;0 s9 Y' ~4 a. D6 S
}# Q: y9 B' e* t
//////////////////////////////////////////////////////////////////////////0 l' `" K2 O# v+ }7 A- }
//开始移动
# d% n2 v9 U) t4 W. }7 G if (nSrc == nDestPos)
& G$ s X, l, M5 | {
, M: p! k3 r2 D6 U. P8 l" ~ //原地不动7 x7 s0 k# S8 ?8 T3 y7 x) ^
nDestPos++;
" z X! M6 G4 s7 O5 k H" b continue;
* D4 ?3 B2 ?% u( c7 Y4 n. p }
2 |( [, o7 ~: c% P( v pInvSort->MoveItem(i,nDestPos);5 K" Z; s5 l1 s; r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ x) X; ~ B* c) ^; N2 ^. {; q
Sleep(5);
) p8 f7 l" x: G //Error("移动 - %d->%d",nSrc,nDestPos); q; z% J& b4 O2 C) W U x
nDestPos++;( ? r; d. n: }
}+ y# ~4 I$ |. M, e* W( C2 w
//取第一个元素的信息
9 m7 s4 T# L1 c( T h /*3 [+ ?- R1 l s8 V4 l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 {& S3 W1 ?, u! U) o
{9 t' z. b8 `4 G+ M3 K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( s- Q- f# s5 Y" R. _( d2 R2 z6 r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 h) X- }" d7 y$ L" [
}3 b/ O [8 `" R$ x
*/5 n. d! ?, E. U9 z$ {+ x* r
//////////////////////////////////////////////////////////////////////////7 S! q5 @% P: s1 A' m. ~
break;" r& M+ e0 u9 y' X
}$ b* I" L8 H6 u- `& {- o
} 0 _: [/ I3 N1 z$ A* _
}
M8 c I3 \+ F. ^! d, Um_wndMenu.SetVisible(FALSE);- g% G2 t3 W- Z7 X! b7 n* d
, H' I" Q! B- o
--------------------------------------------------------------------------------------------------------
/ T% _' n/ g$ b! f) n' A2 z搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; r5 i8 H8 B0 \8 w+ N- ^{: ]$ ]& n9 v2 X' _5 u* e
BaseMouseCursor();
+ M* M: V$ M* J5 ^8 i" \1 a}
8 f# I6 a. i- m) u8 a$ _" v9 o在其下添加:
7 |# L4 B$ v1 w7 W q1 b9 Y" @( Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! s0 _6 v1 [. J7 x6 [/ n) V
{( |* J# j4 d- ^1 c4 |" `# l
m_wndMenu.DeleteAllMenu();' }. S; S3 }1 M( T' q/ K
m_wndMenu.CreateMenu(this);' j3 u2 K W. `9 K: l4 \$ n
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 k0 I$ F7 z- I; h& D9 A# y/ j" E+ ^9 ~7 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 _) e( j6 F, N8 c9 w
{
0 j- p# I% `7 e8 z" m7 @ //P以上级别才可以删除所有道具
% a3 f8 s( M' L- m4 Z) r$ q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: ~" n5 N6 u$ ~& ?
}
3 q) l m$ _* w1 ~m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- n" I8 P# l1 v, n6 G8 ]. g9 mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 K' T3 \' e G' E' ]1 k" P4 xm_wndMenu.SetFocus();" W5 c8 R" w6 Z( d# t4 I; `
}
1 z6 I( s* c6 Y------------------------------------------------------------------------------------------------------------
8 t" s4 i7 E0 Y9 B*************************3 \- w8 l9 n% H9 ?
WndField.h文件
2 p+ D# z; W* h3 \' }*************************; Z/ r7 Y! o0 ], E4 e
搜索:BOOL m_bReport;
$ j \/ [6 X5 l$ k0 K& `! M其后添加:' p2 O1 W0 `. ~
CWndMenu m_wndMenu;7 C+ |$ I, W- Q0 V" h! w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! r o- S- @% x6 `6 @% t其后添加:! W# N( Y2 o, P. N
virtual void OnRButtonUp(UINT nFlags, CPoint point);3 X0 v- H9 ]- C2 u
5 G5 x# @* M% Q2 @% u6 H
1 J8 ?$ c) j) `0 }- F# G# N) Y |
|