|
源文件中_Interface文件夹下WndField.cpp文件
' G! `0 I; p- h2 e0 C6 Q4 i8 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& `0 y" [4 A' O0 ^* b1 K: A
2 e: S2 I6 X* `6 E* B0 I3 {! K
struct sItem- f$ X6 s, a3 @! x6 P* W4 \
{
' Y3 @8 l5 H+ H( ?+ kDWORD dwId;% s' A) S6 q8 Y! T1 T7 |
DWORD dwKind2;
, ^! e, l2 w7 Q. vDWORD dwItemId;% u3 p8 B7 S, `5 l% p5 d) R
BYTE nIndex;
. \9 _8 r2 g( U7 S4 y- {1 GsItem(){% u. J( v& M- d7 B9 p8 Q* [1 `
dwId = dwKind2 = dwItemId = nIndex = 0; G2 b5 B5 ?2 m, T! \, B
}! m& P1 R/ i9 _; @
bool operator < (const sItem p2)0 n1 U8 T" {* v
{
( B; p$ V( p9 Q1 W; b8 W7 f if (dwKind2 == p2.dwKind2)' P3 c2 v" s' [# n" e0 f; T
{3 }# ~$ e |0 ]+ E" E) ~7 W8 I H
return dwItemId < p2.dwItemId;1 V6 ?0 ~0 O+ c& m8 U
}else{
( f8 w- `' l/ C5 v( t, H9 D return dwKind2 < p2.dwKind2;7 ]2 W7 E$ h# W- o: @. h4 A
}6 [0 Q. q1 N2 h1 d2 i! H
}4 u: M/ R/ l5 B; x3 i
};
# b" r, `: x- Z0 \* A# a: H& Jclass CInventorySort
7 k( M1 Z& q8 e# r: T{& O3 Q2 w2 O8 J8 _# Q# g
public:
4 D+ v h0 v9 k' h M5 Z6 CCInventorySort()6 ^/ c. g3 A/ P8 n* ?# U% }* e
{
, R7 E! K0 i. e+ F$ q0 i m_dwPos = 0;" W3 n$ D. M- W% y$ [4 h3 x; n& i
}$ G6 L8 n) O2 c- a0 z0 f3 d/ M
~CInventorySort(){}4 `' y6 U* Z" P2 n7 L6 U
private:
% h% F4 y+ \& {9 YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" e4 I, {( D3 k/ `; z# O
DWORD m_dwPos;
% q1 E2 r9 w, m0 W( [6 Gpublic:
& w$ b' l# L# H7 F5 }! vvoid Add(BYTE nIndex)- A- i! ^" [, H( j, {
{
; I6 j$ A! c8 e; S5 f, ~8 l if (m_dwPos >= MAX_INVENTORY)
, c! P% j5 V; F- ? {
) D% z) |0 f5 T2 \5 K( j return;5 G& Y& @- V& R( Y0 ]
}
8 L9 X) k$ _1 b O+ d) F m_Item[m_dwPos].nIndex = nIndex;
2 {# A9 Y5 H4 S# U+ V m_Item[m_dwPos].dwId = m_dwPos;
$ w$ Z, O0 G* R$ R* @( J m_dwPos++;/ V+ v! C( u% g3 N* V' g! F
}3 j$ Q. a% r& j3 m8 V( s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ M: g, G; y# B% W6 Y{
8 @- n, J6 ~& L- ]6 s$ N" {, G) l/ K for (int i=0;i<MAX_INVENTORY;i++)
2 n! ?$ Z3 [& [& R- k5 Y, ]4 J {" N! {" h4 K8 j
if (m_Item.dwId == dwId)- Z% Q, G+ D8 N8 Z
{
2 p: N' T4 g$ V8 Y* \' p. B return m_Item.nIndex;
; _! s% F- h, ~* Q }; Y! v1 r# ]! t0 C1 B
}
& r" V7 _( J+ h return 255;7 Q1 c; L5 k8 k! P% B2 n+ C
}* L8 P5 N; v/ x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& w7 x! v$ `/ T9 \7 w5 h
{
( K9 \: ?4 x/ x% t" C2 u$ U BYTE nTmp = 0;" h* P5 p. N/ K4 G& d
bool bDest = false,bSrc = false;, k; h$ q7 f+ _$ Q0 E& s4 ?0 {
for (int i=0;i<MAX_INVENTORY;i++)9 V7 Q- j0 ^1 |2 e
{7 {! ]/ b v' D q
if (dwSrcId == m_Item.dwId)8 k: K4 a" n! d7 |& r7 v
{. ]9 `7 e+ d- f! M( X( W, l
//id相等 则 改变对应的dest和src# e. ?% P+ W8 }) p# n
nTmp = m_Item.nIndex;' @4 d! v/ q t! _3 D0 e
m_Item.nIndex = dest;" Y5 _4 Z' p* R1 O0 x) N
} }1 X! E0 _6 D) p' K
}- I4 k9 ]" P, j
//临时数据保存完毕,交换开始
9 k ]: l3 B$ P) g Y: l for (int i=0;i<MAX_INVENTORY;i++)
' T8 _6 U$ G6 `9 c2 L {" E& p7 o+ }6 ]
if (dest == m_Item.nIndex)' Q" h+ b- \2 Z; s
{
1 Q& p) O8 v. L/ `! J //id相等 则 改变对应的dest和src* ~$ e4 X! U. P) T& n# g8 A5 [
m_Item.nIndex = nTmp;/ Q# G- O% y" p9 k
}
* l% K- g4 h: z# j {" k }' I6 H) ^3 F& x {
}
$ F, I2 N- u0 _. d' |7 ^};
: S- J1 c, {8 [$ ]-------------------------------------------------------------------------+ b4 ^6 h% F1 @9 g z" {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ H- }# [3 T4 s) m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 F" _$ [- v; h+ j# e8 ^. e紧靠其上添加:7 l+ V! H" P5 ~6 K- x9 ^- ~
if( pWndBase == &m_wndMenu )$ _/ G4 F8 t4 ?0 d
{) g+ o9 S: }+ v" }) l6 o/ k
switch( nID )
r7 f/ |% O) G7 x, r; U' s! O# { {/ Y, o; [) x5 R, Z
case 2:
0 a2 e0 G1 \4 T# [* l B: m {
1 Y" h! B% j d; _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" Y* V0 g7 B* l& r/ Z2 `. z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ E* H9 a( b. @2 K' J
{2 R1 R1 f- q8 ?4 M9 B
break;1 M4 e3 W5 N+ z4 |2 Y1 Z
}
0 E2 j8 a# [5 v. @6 D; y/ K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 o+ f# {4 J" j% y4 N/ E" m6 a {
" q0 N" S8 y5 L' I7 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# M; B3 T. {8 H: P4 T; M+ F if( !pItemElem )
* [3 y0 S" u, ~ continue;+ q1 M2 _% I6 I
if(pItemElem->GetExtra() > 0)) c: o2 O! j: h5 a& p$ _8 a6 X
continue;, l* J) N3 E) Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* E. Y: y- w9 s: K) r continue;
X3 W4 S3 |4 q$ k6 f: V! W if( g_pPlayer->IsUsing( pItemElem ) )8 w& ~# h$ F1 X& |" w% [4 Q
continue;- {' L: R, n0 k1 N5 ^/ v6 ]
if( pItemElem->IsUndestructable() == TRUE )
3 E/ m v* i$ a. H- e& d* a6 R" g {
( m8 K& S* `" N* p/ D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" |0 z' u: x; ? continue;
8 K6 ~ H+ S1 [) n& y4 ? }: A, c* k) S) g# `4 Y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# h( B' Q! V+ y$ s w s' Y4 t }
6 o9 W4 n. n9 N0 S1 X. c8 _ break;) M+ @, K# A) c$ @1 s
}9 `7 \ ~, p+ t/ o) p
case 1:$ B. _% R/ P. E! S8 W8 N
{6 X/ O. k/ T& I+ P. W. z$ s
//整理背包
+ p1 T2 T, ~+ _* u2 Q, `2 W5 r8 } //////////////////////////////////////////////////////////////////////////! z& G! o0 w6 ?( U7 G8 l/ k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 y# ]0 S- \* C% q& `& q6 I$ `
//////////////////////////////////////////////////////////////////////////4 v7 O5 E: j7 @4 T$ G# r
//////////////////////////////////////////////////////////////////////////
0 d8 V1 }1 ?6 q6 u V) f* u CInventorySort* pInvSort = new CInventorySort;6 Y- H& G2 ^0 e6 R7 H4 }
vector <sItem> vItem;
3 o. a- ]- _$ t( C8 c/ l vItem.resize(MAX_INVENTORY);//初始化大小 K( W. S' c. e% i% ~& f+ J9 x
//////////////////////////////////////////////////////////////////////////
, B* B# P; G- @, \; S& u! B //填充数据
" V' i5 C9 v( [4 m7 q for (int i=0;i<MAX_INVENTORY;i++)/ v( i# M# x) ]$ v3 T! R) M1 d
{
% H1 ^( J! s0 U. C W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& r4 W' _6 Q3 u# e
if (!pItemElem)
9 _: G: {7 |3 Q: F! ? {4 Y. u6 `! M% U- q& B
vItem.dwKind2 = 0xffffffff;% A4 s' K6 i& J6 W' l2 J4 ?
vItem.dwItemId = 0xffffffff;. f1 u( L* n. ]2 o8 n
vItem.nIndex = i;
0 Z- f$ |# y7 r# ^( n }else {
/ g( p0 A* y8 O+ @ ItemProp* pProp = pItemElem->GetProp();' J4 w8 O% g7 W8 J: \$ c
vItem.dwKind2 = pProp->dwItemKind2;
( z8 @0 \2 x1 r1 A vItem.dwItemId = pItemElem->m_dwItemId;7 D, G3 x; \- N
vItem.nIndex = i;. Y4 ^9 T3 G: M5 m! H$ t
}
+ A" ^& J; A7 o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 |& K; y) ?; _2 k* J2 `! E) T }+ T4 d! c) F H* o2 G6 B+ ]
//////////////////////////////////////////////////////////////////////////
( L' a8 }+ S1 P( P2 g sort(vItem.begin(),vItem.end());//排序
I$ L7 V; ^2 o. P# e5 N9 X //////////////////////////////////////////////////////////////////////////& Y* q( t- s' x5 O& X( j2 p
//交换
$ P; v0 v7 T: V; X! y for (size_t i=0;i<vItem.size();i++)
4 o. u+ b0 h) {+ e6 I {! m# w5 K6 Q6 `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' I N; e4 u# l2 {
pInvSort->Add(vItem.nIndex);3 O9 k" U: z; A
}, S( u) ~7 J; J! p% j3 ~
BYTE nDestPos = 0;
) U, O% E" g, n for (int i=0;i<MAX_INVENTORY;i++)1 c/ _9 v6 Q! A
{
- R* l E/ Y$ V5 }9 Z5 z% C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' c% _0 p% q9 F/ M if (pItemElem)
0 E0 [9 ]9 }# I- g' t8 ]8 ` {
O/ X( L: S* w& A if (IsUsingItem(pItemElem))
* G$ O9 V' X, E/ S7 L/ y( L/ M9 u {) b6 x8 H$ S# R: S5 a+ b
//这个位置无法放; Q+ \4 {1 ^: ?0 O* X
nDestPos++;
5 K/ k, ~! A/ y }0 J6 O; k# X. H+ `* i" u! Q y
}" \( j# R5 K1 ~/ _9 P% `
BYTE nSrc = pInvSort->GetItemSrc(i);
7 G( ?2 I' I9 A, N! W0 e2 O/ U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# |( P4 F2 m5 i if (pItemElem)
6 a; D* A' V- o- u' ? {
$ m' V* W _) Y6 l if (IsUsingItem(pItemElem))
9 V2 Q2 x" C6 l1 }4 e' w8 w {! o7 M- L& ^9 T: @+ Z6 g
//这个道具无法移动,跳过5 [$ u' L% m/ Z/ ?( L6 l
continue;
/ L- }/ A# y6 n9 b2 f; n# v* R }
* H' `/ m) u5 ` b& n0 C0 ?7 x }else{ H1 ]. O8 a v0 p3 i6 V
//空位置 不用动9 ?5 z9 i4 O( a! |( t" i4 G
continue;& K$ K0 r9 B. a! [5 L- f- F& }
}5 f9 f3 B$ O- {" r3 n
//////////////////////////////////////////////////////////////////////////
7 w8 b5 B* W: W //开始移动
P, ~& P3 x1 L4 a: [8 `. A if (nSrc == nDestPos)1 q% V! O8 t8 y5 y! x* n4 G! T
{" b, H" D6 x, y0 [0 ~7 N6 ]' w2 i
//原地不动
, z3 q6 z9 z' v) w x8 c nDestPos++;0 e3 R* g% r/ {0 X* R' P3 n
continue;
& C) r. \* P0 K2 M }2 f/ X- v- R% h: c# z4 s. O1 R
pInvSort->MoveItem(i,nDestPos);
, W! J+ V5 v3 J- U0 U9 { g_DPlay.SendMoveItem(0,nSrc,nDestPos);( H# j. Z2 ?& u. `9 H/ I
Sleep(5);2 U' p/ d" G# o: t
//Error("移动 - %d->%d",nSrc,nDestPos);
6 ^! b" d: V* i t- k$ w nDestPos++;/ z2 B1 { T7 l! K8 j/ p- ~
}$ T# i( z" L8 }9 S" i* ~
//取第一个元素的信息1 O! y$ L* |; X' R+ X4 G: u
/*% L/ F: `2 s" e1 l4 B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); y+ I# X' D. e3 n! i" ?- v
{
5 W7 E M$ E; ^, R9 R2 i Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ O; I+ h9 Q4 V4 |- i( a1 ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 v& C2 ?- V6 s/ J
}! s8 N* ]3 L* P* K& E
*/
1 I% Z" F2 y1 s% C( z. v //////////////////////////////////////////////////////////////////////////8 s" B) i" W. ~4 P4 ^
break;
: a- G" k, R5 u; K0 o }3 o: r$ x3 f' [/ X
} 8 H0 R0 M- N& F1 p( ?
}2 h3 q) Y5 X0 X1 e8 Z
m_wndMenu.SetVisible(FALSE);
0 }" j- Q% P b
1 i; k1 q; |" R+ }* [& c6 Q5 ]--------------------------------------------------------------------------------------------------------
& `* q7 ]4 d! F! `$ s( y6 j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 m% q2 l) h$ R3 O0 d{
, F' M) F8 z9 S# T$ f1 ^BaseMouseCursor();% R q; `+ D6 H" w
}
6 b( h4 y# o+ i: C在其下添加:
4 e/ r1 s8 b' q" {8 Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
^% z8 P% T2 j; o{
" e. u2 _! ^; am_wndMenu.DeleteAllMenu();/ l1 e- s7 k; M; F
m_wndMenu.CreateMenu(this);
5 W' y. O, {# c# fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' W4 t) I' d5 K" [: Z
2 e9 x; s0 e6 R. }. e) `) `3 I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 ?7 {- P) G% d# c( S{
$ O# X$ u9 O' Q' V( p3 n: O' [- R+ Z //P以上级别才可以删除所有道具, ]/ h3 @) c2 M2 \: u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 J/ k/ Y8 e9 y2 [, [. B
}- b8 X- Z5 M2 c' c* G3 P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) G8 g/ `8 k- P; `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( _0 [, Z1 X+ T
m_wndMenu.SetFocus();! x# j8 {' Q" U+ `% q/ J1 N4 b
}
/ u! ^1 ~- p. t, O/ h7 A------------------------------------------------------------------------------------------------------------$ B: t' O5 h0 D$ N
*************************( ~$ d: X" O- \) x
WndField.h文件- l4 j2 ~4 x/ o+ h/ A
*************************
6 Z e# r' l# v4 @( v% L搜索:BOOL m_bReport;
i4 _$ r: }/ \& ^其后添加:
1 G. P3 [" ]6 N: xCWndMenu m_wndMenu;
, A- t# }+ } N2 Q& W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 L7 [3 M$ ~ V% l) ~9 M4 N8 M
其后添加:$ k+ i1 N; ~+ s3 v3 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 o7 Z+ Y) J7 b9 A: M h
1 K& w5 J3 t( a$ @/ ]
& H& U8 O# ?$ o5 q9 a( I |
|