|
源文件中_Interface文件夹下WndField.cpp文件
+ y) K3 b( }1 \; l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ F/ M& h! J) M6 V( A! v
- L8 z$ I1 g! Q1 B7 l
struct sItem& k' O3 Y5 o: j* j2 ^3 H; N# R2 n& o
{" P! \" s- W* M' g" N. s. z& o
DWORD dwId;
* x6 k1 I6 O" a" r0 K% x; lDWORD dwKind2;: w4 J$ L, ?' U+ J
DWORD dwItemId;! g7 m6 j+ `. c
BYTE nIndex;9 t, V4 z. ?2 \% y# S5 S" P
sItem(){
5 r* m' w0 w' B8 Y: V4 t2 W dwId = dwKind2 = dwItemId = nIndex = 0;5 }$ K! M! K# h% _
}1 P/ u" Y9 S( M0 f1 B& Y0 @' G
bool operator < (const sItem p2)6 a! @7 |9 h! s5 f9 V
{1 K$ _. z7 g) h4 C8 N/ M7 Z. d/ ?* t
if (dwKind2 == p2.dwKind2). e; F& P7 t: p8 g/ ^5 ~; n
{# U v* v+ K" L% w5 z6 M
return dwItemId < p2.dwItemId;4 w4 R+ o) F" p
}else{" q& Q; @8 X* |' t* J4 B! J
return dwKind2 < p2.dwKind2; d3 h! U. i) T- ?$ h" {8 h
}
$ s7 M' \' n4 E* H}
R) G* g2 x1 {; [" V};5 ~2 x1 F4 ^& T D1 c/ O! Z; l' o, A' w% c
class CInventorySort5 p7 _8 g2 l' U8 [, R
{
9 Z- X, B3 t. c! H" g- u$ @public:
- `* k/ b* Z3 H% X, HCInventorySort()9 P" K9 Y! R# J1 e- C2 |
{# S# u% P, p. p. N/ F, n
m_dwPos = 0;
3 v. n2 _- R6 s}
, Y6 p( e3 Q- H/ H K$ \( b( \* K~CInventorySort(){}
" A1 @$ ~2 \/ T- R7 w% G' tprivate:' E0 w4 k" f( W, {1 p& j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 K7 q. O( {) Q' _ r4 A9 Z! s2 n
DWORD m_dwPos;- L8 j1 p1 O% p3 K6 G4 E
public:2 X7 Y y7 L3 L# `, G( g+ C
void Add(BYTE nIndex)
! v8 [( N7 }; {( J9 m& ]{/ t) ~. e! k, K0 p
if (m_dwPos >= MAX_INVENTORY)
4 y/ U' r6 J7 c9 f {
4 e8 r6 Z$ Y- \) r F; q return;$ T f7 K9 I# A; X7 a0 F5 i
}
7 K& w( a+ y2 N9 Z+ ? m_Item[m_dwPos].nIndex = nIndex;! p( \* |) X9 H6 k" _1 g
m_Item[m_dwPos].dwId = m_dwPos;
5 E$ I5 k9 [; s2 W$ W# ?& X m_dwPos++;/ \8 ^2 _8 R0 L+ h
}
9 U" w6 u: d5 W6 A( }! `# R+ ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! g- {, G- ~1 I' t{
3 L! W9 J8 m. U for (int i=0;i<MAX_INVENTORY;i++); p9 g, A+ |6 L9 \$ y% K' b
{' j) m/ r4 |0 ]6 z) {
if (m_Item.dwId == dwId)
! h) `% T( v! U2 B% D$ t5 a/ `9 C {! D7 n0 z `# \% Z# T- I6 Z
return m_Item.nIndex;" u& N2 f8 z5 r5 S! Z2 s4 t
}
9 O0 K) P, T5 q E. n }, C. p9 X& J1 v. S+ @* A- i8 K
return 255;- ?5 p# v3 n, p, D3 r7 Y2 [' U
}
% X8 z E# K: {! i* O$ u1 tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ w( N. ~; N6 ?# U9 n: K1 l2 p{: Z' y6 Y- B/ L( X
BYTE nTmp = 0;
. X4 J. L( ]' m$ k bool bDest = false,bSrc = false;
- M4 k1 v; ]6 B$ H$ Y for (int i=0;i<MAX_INVENTORY;i++)
1 g* p* ]5 X8 j ~9 a b6 S G0 M* y {
, W+ _- T' J% k, x+ P if (dwSrcId == m_Item.dwId)
' r, |. s* S I% I, |' x w {
- R* b8 Y3 y) A; g! A' O //id相等 则 改变对应的dest和src
, F+ e* x4 W; V3 `% E9 a nTmp = m_Item.nIndex;5 L/ R3 `" t( l" U( I$ C7 w
m_Item.nIndex = dest;
8 i: B2 s# P+ B4 q$ r }8 p3 `5 z6 E4 S7 f' o( X9 a& T
}& U6 o" M$ m6 l8 D, P D
//临时数据保存完毕,交换开始
, J: Z. Q. k, ~" Y for (int i=0;i<MAX_INVENTORY;i++)
0 Z9 \4 c) D3 ^7 u/ T2 |/ y) D8 u0 n {
5 y" d* m' X8 M( G2 Z! d if (dest == m_Item.nIndex)5 d) G; [! }8 `- M4 t5 t
{; Q+ A6 Q6 r1 D3 m8 q2 l
//id相等 则 改变对应的dest和src
6 ^% ] a" j/ u8 x" O! F+ y m_Item.nIndex = nTmp;# E: x$ B: B+ d& K+ F4 K
}
) v9 n3 n6 o4 N0 | }
- A l$ G( S* `2 `6 t: P}
# j5 z9 [$ L: D9 B: L' x9 \/ v. _# S};
! F& n1 _, }+ S-------------------------------------------------------------------------
9 k. N0 M4 C4 e" p5 x; a5 \依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! g* B$ Y! H% Y2 }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ P) c, |% r, b" k+ n; [% {$ c4 a
紧靠其上添加:
& R( h+ z; Z# I; F- Q6 |) F$ }if( pWndBase == &m_wndMenu )
( O8 s' R! v) l, o" o9 w. [6 ~{
% Y0 j+ F+ \# Q; ^. W- S5 h' d switch( nID )+ I4 Q: T2 B3 E- m! Y
{% F1 I6 t/ X* W' e+ M/ A
case 2:
; m8 E% I4 k( F' s$ d% R/ h# U5 ? {* p2 G' ~: F4 o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& F/ ~2 n$ q7 A
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& I) F3 h7 @' R) e) Y% l, C {
; Y5 A. g3 T9 U# }# u" T, a: { break;! f" ]7 l: d. }% o* Z2 I
}
" g% T9 d+ _# G3 @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) J6 b$ A. p5 ~& f7 n" P, q6 \5 B {
}0 U( R2 h1 p6 h& u6 m! t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& b; b* m8 ]! ?7 M$ @: O if( !pItemElem )
( r# C& `4 ]2 N continue;5 C6 ~+ B: F- @* E
if(pItemElem->GetExtra() > 0)6 A* Z+ x3 Y, w, C; V9 p
continue;
9 S! Z" o3 e8 s* N7 S0 _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' X: _' [+ z" j2 [ q1 K1 @* w continue;4 e- G8 U0 M! @
if( g_pPlayer->IsUsing( pItemElem ) )
4 Z7 m4 f, {8 O5 B, k# A# w continue;, k5 f( f' ~# t' j6 `
if( pItemElem->IsUndestructable() == TRUE )" ]/ e# c2 O# G5 C, ^
{
$ l- j0 q$ T# ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" S6 U. S8 i: q( u
continue;
9 R( O; p( a6 C3 v) o }! D7 P* W0 b! S5 _3 A' A7 g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 N! O. { I4 g R0 j( Y# } }5 ]) J: t8 V% r; x3 W! g
break; ~* S# c( u; y% T/ R6 B: D8 m, G
}
! @; t+ W; S4 _6 i case 1:
8 \# f! B6 w# ~- {$ L8 a0 Z {
) r+ q9 w" x$ F3 e( O# F //整理背包4 ]) }8 h" P" d7 Z
//////////////////////////////////////////////////////////////////////////- F# J% X3 f( `2 J( R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! j: O! G! R0 z6 q //////////////////////////////////////////////////////////////////////////* ^. |3 t4 t Z4 a" h
//////////////////////////////////////////////////////////////////////////
/ F; P- j, T e M5 n9 f# ~# j CInventorySort* pInvSort = new CInventorySort;' j" l1 {* U. K8 [* k: C. N
vector <sItem> vItem;
) P& X3 G' |. Y1 X* u9 e: R vItem.resize(MAX_INVENTORY);//初始化大小( V' ]" |+ B! f: U' [
//////////////////////////////////////////////////////////////////////////* v& C0 u9 w+ K) h9 [
//填充数据
; }2 I& u7 L' Y+ O- w) R% A; B# l for (int i=0;i<MAX_INVENTORY;i++)# P# G! X c% C6 B, k. l) J6 a
{
% R7 g$ l- D- f: [, m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- P1 [5 V: Y- i" z
if (!pItemElem)
/ y# u$ Y" t& J' |6 b- I {
( h6 X6 T# e5 x$ a, p vItem.dwKind2 = 0xffffffff;
4 m! x! z6 J9 y* A$ j vItem.dwItemId = 0xffffffff;# p0 S5 e( |+ L
vItem.nIndex = i;
% {1 G# Z3 l, v( W& R }else {3 n5 A: w+ A2 C& H$ w2 D
ItemProp* pProp = pItemElem->GetProp();
+ [, |- _: k( n3 @; @ vItem.dwKind2 = pProp->dwItemKind2;0 f/ Y; C4 J6 S2 E4 A' I
vItem.dwItemId = pItemElem->m_dwItemId;' d5 a3 F+ W5 M* w- q
vItem.nIndex = i;
0 f0 ~% z; _* c2 H$ ^; B }: _" X i# W/ L3 C" a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' R. }5 `* o) E5 q# G8 u9 o }
5 D/ L! V1 M/ T- t! P: C5 S //////////////////////////////////////////////////////////////////////////& p v( g7 q% l) }0 |" W+ l
sort(vItem.begin(),vItem.end());//排序
7 j$ ^* N3 z3 P4 P4 p( m8 J //////////////////////////////////////////////////////////////////////////
8 N, H7 X# l5 V/ b T; ?- f //交换- L H7 d& R, |- i
for (size_t i=0;i<vItem.size();i++)
6 ?# b. G9 i6 c+ ?/ z7 j1 x$ t7 m {
, A0 t3 e' d+ `3 f) r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 y% ]8 c+ b O4 {: H. e pInvSort->Add(vItem.nIndex);
0 G" V) r( c1 E( e' n# m }! D) ^, o% c7 j* l# ~/ t
BYTE nDestPos = 0;
9 A9 J' X6 F; z4 u4 g, |# g for (int i=0;i<MAX_INVENTORY;i++)# T7 \8 e. P: C& w
{
7 r2 c9 d3 Q- J4 i8 _: \$ r- x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 n; F0 p/ ?& A% w, _0 i, t if (pItemElem)! N' b3 l1 S+ w' j/ _ J
{
4 W0 ` u* T; J* }6 G$ R* Z if (IsUsingItem(pItemElem))
; F: O q8 j( C { Y5 R7 r( n, _2 _6 f
//这个位置无法放
# y9 i- `2 Q% i5 X3 ~0 U nDestPos++;
* z, \3 a! b' n! y- X6 P/ f2 m }
( C7 t/ J$ Q: T8 Y9 | }
& {1 @. S' }) D+ q. T0 k8 c [ BYTE nSrc = pInvSort->GetItemSrc(i);: `. S I$ Y0 o9 {; J1 |/ O8 [
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) K) e0 f4 u5 V if (pItemElem). q O1 j# \& f7 F9 \, x; x3 H% J
{
* v- s( [+ f8 [+ G( @5 ~1 A7 a if (IsUsingItem(pItemElem))/ G- m# L! p/ R
{
- m, f6 f- ^! ^8 p //这个道具无法移动,跳过
% U4 w; ^; G+ G' r" |; f. M continue;
: _/ u8 i" p2 }% U }4 [' F# f2 [0 U6 Q% p
}else{& h+ L' i" t- ]6 p
//空位置 不用动
- \$ j- G& w$ y4 x; y, C0 } continue;1 c7 g3 n G d& f3 j* W$ ^1 B/ J
}
/ Z& S, F* N" u; |6 M# g //////////////////////////////////////////////////////////////////////////
) [& ?3 V N% F% W //开始移动
: D. \8 l1 Y& I' _ if (nSrc == nDestPos)
g2 @2 L% w! z0 C5 w2 E" I' m; _ {
/ G, V1 ~+ _8 r( @ ?4 j //原地不动
6 M1 l. Y- y( `/ i& D nDestPos++;; Q: i# t) G2 i% n6 {! B1 A, ]- A! b
continue;
1 R" g1 Z% m" W2 K- _. \7 M" d }
8 z4 c8 N: y; @, \. N9 ^ pInvSort->MoveItem(i,nDestPos);
3 P; Z0 M" e1 q7 W: s! L g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 L2 C/ p; e& V" }) u6 }% F8 } Sleep(5);+ D1 y. }! k7 @, y
//Error("移动 - %d->%d",nSrc,nDestPos);
) Q. y) W' i0 e# j. C7 [% R2 f) G nDestPos++;
( Z2 C' @2 u; y: c# {& K }
3 F6 }( k, t$ n* D //取第一个元素的信息
2 R2 o8 M6 q6 s1 ]( O /*# n, f5 G& D0 w- c5 X- _4 T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 Y, m ?; c n0 o$ j2 Q
{
8 G3 W, p: [! g( p" A8 p! {; Z5 Y( w( p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 ]9 t/ D9 |( e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" x7 v/ E) r: ~8 ]% Q- S e }
6 r9 @) U! s3 Z1 G* J */: D( y6 D; h% p$ ?
/////////////////////////////////////////////////////////////////////////// W* ~5 h& p% }5 a" o: `
break;
% t5 g1 t* r" J' _ ` }+ \3 ]2 s5 x. H# y, O6 V1 N" V
} ! g4 Z/ _' k/ D. S$ Q
}
% p6 c w2 r$ f |m_wndMenu.SetVisible(FALSE);1 H$ f6 I, a* p# d9 ]7 ]3 R' l7 u
7 }. e, m5 o" \% O--------------------------------------------------------------------------------------------------------
' P7 I0 h5 @0 g8 z- f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! F0 m$ x5 {( L# |( Z- U* _{
" ?1 r( f& V9 _" T! g/ ^$ t8 a! yBaseMouseCursor();
! B! W- u7 ~; o |8 t- f}, a; ]) J* T+ e+ }% i6 g
在其下添加:; C+ ~" s9 G; D4 Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, H# O* n1 a3 s' Z, q2 i{5 o# C. C9 W& ]
m_wndMenu.DeleteAllMenu();
- h2 H" w" z* ~5 ?6 B- B9 {9 Nm_wndMenu.CreateMenu(this);
' ~7 V0 ~7 x; }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* j- ~' F3 V2 m! D- _. q7 C$ P& f# }
8 {. F) w4 i" E$ Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, K0 t7 C; J0 ^{2 f* ?; f$ V& q7 V9 W- n( b
//P以上级别才可以删除所有道具" g: e& o0 w8 F4 ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 a' N$ e$ Q) v# ?8 o
}( _0 Y4 d) U9 c- v! ]* P; s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 O: C$ E" O# H- Y% P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' N G* U+ t& Mm_wndMenu.SetFocus();) A1 Y- p- y ?6 x' U
}
7 J [4 N7 A0 u; {------------------------------------------------------------------------------------------------------------
5 A' u* Q$ H. A; s*************************5 E p/ ?* A3 U) Q+ O$ j
WndField.h文件4 m/ i. q: r4 R5 P
*************************
/ ]( n3 i, W3 z7 z搜索:BOOL m_bReport;
1 g7 f& t( F2 L5 ^+ T其后添加:
3 L4 C5 j$ } J3 b( Z* {" GCWndMenu m_wndMenu;4 o' U" L0 S3 S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, j5 ^ ~2 g, [( p! o
其后添加:
: V* n! R0 K \7 V6 y7 {virtual void OnRButtonUp(UINT nFlags, CPoint point);8 y' S1 O" s- v9 D& R
- X% \5 @# ~8 F
5 ` N3 I1 h. X) M2 s% W+ w9 X |
|