|
|
源文件中_Interface文件夹下WndField.cpp文件
7 V6 I/ Y0 M; r4 A搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ o/ Q$ j5 K' G& N# @
1 S$ B, @! P. f2 W, M
struct sItem
- S0 y: F7 ~* l* j6 A1 X, e3 f{& F0 j8 A% y' j4 x5 ~" q- x
DWORD dwId;& A2 I) i# D& O
DWORD dwKind2;+ f6 ?8 U) E4 ]% N2 c F# ^
DWORD dwItemId;
/ i( ^. C; T& I$ S, ]1 d' DBYTE nIndex;
* U) Z% S4 p7 E6 j, x- U6 T+ rsItem(){2 L0 i0 D+ N. }- ~
dwId = dwKind2 = dwItemId = nIndex = 0;
1 Y; v& Z* [% ]& @8 W! F E}* E2 r- l c, N) a& \# O: h E. a
bool operator < (const sItem p2) p3 B/ u" b- r0 j" h
{
* _$ t$ a# C; n! q* l if (dwKind2 == p2.dwKind2)
7 G' {% y% u9 E {) T7 v. K' c% O5 C* g* z. _* {
return dwItemId < p2.dwItemId;
; d, w O% d3 Q- y }else{
, W) G1 }$ Q4 h: C0 x, t4 w1 { return dwKind2 < p2.dwKind2;
( ]' ^) L, `! F, _9 M$ @& d }& M8 x+ ?) B; t ~3 U2 a
}
+ B6 X1 g! T$ u6 |! _- N};
/ e# C, o9 {7 bclass CInventorySort
1 I9 j; ^7 X, g) V, M8 f{
' D! l8 ?8 G1 l& zpublic:& y8 P V- a! n+ R. @ \
CInventorySort()
+ [, C8 q- A0 Q' |$ X A{1 }* | s7 m# v
m_dwPos = 0;. `+ t) s5 ~/ t% D
}
8 }; w) B$ x. ]4 D* \& X~CInventorySort(){}* i2 L. E0 Q7 O% A( P
private:" ^% P; Q5 m B& q2 l2 l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, O. S* c; ^9 K: T7 ]6 ?4 m1 m& {DWORD m_dwPos;' O3 P [ G& _% t
public:
9 t7 }9 U8 t, W* b0 yvoid Add(BYTE nIndex)" T0 @0 Z6 F2 M$ y
{
9 i6 ~8 }$ I5 G( M2 C3 \ if (m_dwPos >= MAX_INVENTORY)
: L5 k2 T+ d+ \. R3 U* Q* |% } {
) Q5 K( v5 C, I0 B4 `, K return;' Y$ W5 g# P7 J2 p! V6 a1 |9 z0 ~
}+ w2 S- q9 x% t; \' V+ X5 f5 Q- O4 F
m_Item[m_dwPos].nIndex = nIndex;5 J4 B0 T7 O, b6 ?
m_Item[m_dwPos].dwId = m_dwPos;
; ]& p) N3 M g2 |( c, H/ M! W$ v m_dwPos++;4 Q; T# Y/ v$ d$ N d4 D
}/ A( h1 v3 Q6 S h" F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, I i# W. r; D. n* I
{$ R5 q# H" e2 X2 `/ }+ S
for (int i=0;i<MAX_INVENTORY;i++)2 o# l; _: R2 ?- X- i
{6 A5 @, @8 V' i4 e; w& f
if (m_Item.dwId == dwId)
6 ~3 |; a/ {4 a0 Y% w o2 `4 X5 t {
5 s2 F; |& Q( P/ U' L8 i return m_Item.nIndex;0 e/ t4 j+ J2 D
}
/ o! C7 V' [+ R! w+ r3 u& o }
9 P Y% G; g. ]6 t; J+ ~3 h return 255;
4 j/ }, l% ~8 w}
3 Y' d7 I9 ]3 L" ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 A. r3 P: c# p0 f{" |# \: ?6 z$ c# z* L; M( Y/ D
BYTE nTmp = 0;
' j) {& q( j) A r# ~ bool bDest = false,bSrc = false;
0 m- t \) x7 ?! K) q" y6 B for (int i=0;i<MAX_INVENTORY;i++)
) G3 u6 P5 ~2 K {/ n: l+ W- h" I( I/ N& u7 v2 A
if (dwSrcId == m_Item.dwId)
% \% C& f; t4 F$ `7 @5 u {
% {7 T/ V' |; Q* C9 V) p+ i1 _9 y //id相等 则 改变对应的dest和src
' g6 J+ d- \7 N nTmp = m_Item.nIndex;
3 K3 L- }0 ^% U m_Item.nIndex = dest;
V, g$ @6 f5 e }9 e( P+ n; D: F+ F; x
}
* W. \+ Z2 S) o! ~& I1 {% v //临时数据保存完毕,交换开始9 L. B" }2 }6 G
for (int i=0;i<MAX_INVENTORY;i++)
& @+ t$ T6 Q3 X4 m* { {
7 Q' F- V! u* L1 k0 {/ j if (dest == m_Item.nIndex)
. H' L. @' ?: I/ F {
+ N6 ~5 e+ M: Q, W4 g3 \ //id相等 则 改变对应的dest和src0 P! {6 s( Y9 S3 o! E3 S
m_Item.nIndex = nTmp;% u7 k3 I9 k" r8 s
}
4 ]( e2 `5 {) B) S }
- T5 x0 Z4 K7 d% V r ~- [* F}/ n. x+ i7 V) R4 h: Z( s, e( c
};
: R* }9 W8 G, @0 H5 f: n0 h! w6 v-------------------------------------------------------------------------
2 }* ^ c; d1 v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 U1 e/ @; @$ B2 o; e; m3 D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 ?" S q X: V% K) y/ H
紧靠其上添加:4 @9 }) I' e$ `: h0 ^) `
if( pWndBase == &m_wndMenu )
: D9 |: g: C6 r0 D: H3 q{
% r% K9 z. d* _1 P; n switch( nID )
6 _9 |7 k7 m% Y' i {8 v, _ }! R$ ^3 O" L. _3 ]
case 2:
2 c# b: x3 b0 @5 d$ @ p) S {' @- o2 s1 w3 k. V4 \4 A+ w$ K7 Z# y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. }' a5 d5 i8 j Y" M6 m4 g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ j* O9 i& A) _/ t' b6 Z4 J {
7 G. m" G" g1 q0 e% w" O: m break;# d) z6 U0 e% ^5 D3 ]
}
2 X: a2 Q( O* C* r. i/ {! c+ N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 S4 c* B) |- ^ A0 [) W {8 [, n( K# W: o+ {0 h& O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& Y9 b4 }3 X$ k" N% g: f
if( !pItemElem )
8 i; l) _1 V( O H" b2 B1 f continue;5 ?4 S8 C# l- n
if(pItemElem->GetExtra() > 0)8 x) w8 Q# i2 c9 G# N
continue;
! t. `& R" ]1 Z } if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 g- p8 ~3 f6 f) v! T) K) y
continue;3 w# q$ _+ r5 j6 ]- c- c5 x0 x
if( g_pPlayer->IsUsing( pItemElem ) )
; Y+ q9 K' D7 A continue;0 f& C% p9 J! d" I. S, K
if( pItemElem->IsUndestructable() == TRUE ). k) L/ a. M i
{
% Y& a3 U3 [( g: \: r8 o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 K$ F: u+ Q: {& t# B& } continue;
2 O5 A2 R0 j7 C }& h2 f" F3 F( l3 R' N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- `/ T {4 G; ? }/ y7 V E P7 N4 a6 G, U
break;
8 Q/ B' M8 B# }' \7 N }9 {4 }0 M* h3 J/ ~
case 1:$ n9 M4 Q6 k, G8 D5 `
{
n" }0 h9 g' g) e3 W //整理背包 |4 y5 w5 n) S% v
////////////////////////////////////////////////////////////////////////// R, m! Q. f& j m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( W7 S: [/ Y1 P$ T //////////////////////////////////////////////////////////////////////////! r, [2 i4 l1 M
//////////////////////////////////////////////////////////////////////////
& \: F4 `) v, u* |$ g5 a CInventorySort* pInvSort = new CInventorySort;
8 l( }8 V1 w8 @# A vector <sItem> vItem;
: J2 x7 B- n' m3 O, A A vItem.resize(MAX_INVENTORY);//初始化大小
1 s8 M+ {4 `: }/ ^3 O- i //////////////////////////////////////////////////////////////////////////( i# B: \' c8 Y Y# T/ t4 ?: s5 Q0 H
//填充数据
1 z, V! X# F g& Y2 B6 q3 Y- d, N for (int i=0;i<MAX_INVENTORY;i++)
. V8 Z/ u ?0 o0 s; R0 ? {
3 S6 p% e7 S2 E% Z; p7 `* J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 y6 \% I2 u9 T( r if (!pItemElem)
$ Z7 W; |9 E, t, ?8 Y" e {- m) s& G+ T- k0 I. k1 R; x* P
vItem.dwKind2 = 0xffffffff;
|2 L0 s; H U1 a. r# Z) P+ w vItem.dwItemId = 0xffffffff;
9 G# d. M5 Z% y# | vItem.nIndex = i;+ ]# {5 r% a, W& s) @ |. l0 n
}else {
% o; c: Q3 r& Y, i ItemProp* pProp = pItemElem->GetProp();: z9 m0 @9 J! U9 |0 Q8 q
vItem.dwKind2 = pProp->dwItemKind2;% d. y1 u! Z+ X( H3 Y) x
vItem.dwItemId = pItemElem->m_dwItemId;
6 \: S/ y2 n9 M& y vItem.nIndex = i;5 U7 L* f$ P" d2 T$ [5 @
}8 S! `3 g3 d& P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 X3 Q( a8 f: w" Z& j4 H5 { }/ C# a8 ]+ u% z! i
//////////////////////////////////////////////////////////////////////////5 R) y9 O0 J6 H8 I$ g
sort(vItem.begin(),vItem.end());//排序. c0 T! n& ]2 ^- P* _2 Z% k7 C
//////////////////////////////////////////////////////////////////////////
7 s; i: E% ]# ?$ {6 x( L //交换
- b& I) Y, {9 `$ r8 [ for (size_t i=0;i<vItem.size();i++)
- f* f* H- _" M* c& ~ {' S( q$ @8 c9 ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( u5 o; X; T+ `7 P) ]9 N pInvSort->Add(vItem.nIndex);8 A# \2 y4 f# f, K \- u
}+ T8 P) ?5 R6 V$ J' I, w
BYTE nDestPos = 0;
2 G" }: G9 v) j' Q6 R: Q' Q: f for (int i=0;i<MAX_INVENTORY;i++)$ n) c4 U. s l$ I. f/ ?0 j
{
% I2 d" u ~, X9 z& _: n+ d) h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 ^% P& L5 ]- v% P* w i! a j% z9 [ if (pItemElem)$ h' F' s) Y7 r$ l- f$ s
{
- W4 H8 V6 ?: Y( {6 B if (IsUsingItem(pItemElem))
6 B- p, y/ U' ]' Q+ ~ {) \/ S+ }/ x# P% w0 }4 h. n% i
//这个位置无法放
- f4 U1 d& f* Z1 x nDestPos++;
7 Y+ y8 u! d! ]8 l& o' Y# m }1 a- l1 g5 q$ O) ~& D
}8 M- N/ y' W( P% e( P# K
BYTE nSrc = pInvSort->GetItemSrc(i);
8 f3 f9 I( v$ o9 Q' N7 a7 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) W# L) T( ?, k) Q* `4 \ if (pItemElem)
- T4 o& ^- L8 I& O5 x! j; F5 t( {2 g {
u! G, u2 h, L7 ^! e: c if (IsUsingItem(pItemElem))9 I0 l L% A7 }0 y: B4 z
{
" a7 D" g0 `/ i+ G1 N5 ] //这个道具无法移动,跳过
" u, \5 b' k6 k' p7 ^+ N& v0 r continue;
# f5 U0 M) k! z$ F7 M* g% ^) G" U8 k+ l }
' N9 b% F0 ^) O$ G& |6 K2 y2 \ }else{
+ d. }5 T9 k/ f4 F' }6 H, F( p //空位置 不用动
0 v* w) P2 K- n {8 l1 r continue;
+ \7 s& A2 O, B% T6 I( | }, r7 R8 e7 g' N: p+ _
//////////////////////////////////////////////////////////////////////////* ^1 l) ]/ E" c
//开始移动' P3 r3 `6 }7 w. x& X& k* p
if (nSrc == nDestPos)
/ a" G1 d1 c! w* t {7 Q+ J* N' w+ H3 | q1 p/ m
//原地不动; Y8 L( G. W- v: P0 K) ?
nDestPos++;( Q4 |3 c. z+ T1 f! H
continue;
9 r- n" {1 F- A1 Y3 b9 U P }) \- g! E# H x' e; D2 c5 y J' j3 F
pInvSort->MoveItem(i,nDestPos);
7 {% r8 z! O9 w, i; ]8 _ g_DPlay.SendMoveItem(0,nSrc,nDestPos); `. }7 G7 c3 L% o, q% d
Sleep(5);
! l: q- b, y& T# ] //Error("移动 - %d->%d",nSrc,nDestPos);
% s5 a$ W9 U/ F5 l# g) T1 Z nDestPos++;
" c+ x0 a4 Y; ?) q }
% b+ R% t7 u4 d) Y6 c& D( R: \ //取第一个元素的信息
! P; b' B% O/ \ /*: o$ {0 e- q* v; j, @ ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 t( |" M/ J5 i- D {
9 f6 `3 H5 ~3 A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( c4 m. [. h# {& U& @/ |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. h, z0 b* }1 D" H* c* N; m
}- t/ S2 m8 O: W( |1 ~) u
*/" c# }) i& b9 v
//////////////////////////////////////////////////////////////////////////
4 A. p# U5 H) F0 n0 s# T break;; w) x9 }% `/ _2 R3 f0 h& c
}
' N7 ?6 p9 W! Y+ N- @$ o } + S( r! ]5 W+ l
}
; q, G7 s2 K8 B" Q+ Um_wndMenu.SetVisible(FALSE);
; F* j+ e' \" I0 q3 M0 s
/ h0 d, l* u8 |) [0 P! w3 z--------------------------------------------------------------------------------------------------------' s; J4 J! @. s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 K* y/ l# O" w; G3 m$ c) e
{. U# B+ V/ ]! B6 j/ ~5 v
BaseMouseCursor();! D$ U' y0 ^) Y9 \- ~
}
4 p" c' ?7 ]7 N0 x8 ^' B1 Z在其下添加:
: l) @3 \' L9 r* i% T2 vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, {7 A$ A I( J9 t{* l4 C1 i- |- w+ i+ u8 U8 v2 U7 U
m_wndMenu.DeleteAllMenu();7 ?1 W0 t+ ~/ j+ T0 z
m_wndMenu.CreateMenu(this);
3 ^+ L9 ~, g5 g* E8 A; D5 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 i- E: a% X1 t' B+ \
9 y5 H% K0 Q% I/ f$ ?! e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- [; l! @, g* m9 l+ `+ H, ~{
9 W( ~% r* `) F, f C7 G //P以上级别才可以删除所有道具1 E, e( g" s+ U$ ?2 w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 e8 `+ R& U# P6 P% h+ p}
0 ]) V- }- i0 J; ]4 _! Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ l& ]8 l! `+ ]7 e4 Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 D7 x% m7 ?2 ~. qm_wndMenu.SetFocus();- I2 u% |( B6 v+ k. {
}
5 r2 o! N$ ?7 k1 i, b! c# h------------------------------------------------------------------------------------------------------------
+ P3 E7 R; Y0 W: b*************************
8 @: j& D, ` u& f7 ?( R% wWndField.h文件- d0 b" i" N4 p! J- h
************************* G& d, S' J5 V$ y( V
搜索:BOOL m_bReport;- X6 X2 H* t: m" f. R( C
其后添加:
' k) E) }. a+ r, |CWndMenu m_wndMenu;
" T. ]+ s7 C3 p/ y9 F- a搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 p3 W. k" S) a其后添加:
i0 G& h' N+ I. o" R5 k* e" g3 `! ivirtual void OnRButtonUp(UINT nFlags, CPoint point);& o6 a* y3 k% |% @4 \* g$ ?8 P
+ _4 o, }( ?7 q7 n. B! d4 h* m0 w
) O3 w0 S ?4 ?1 K, n, l1 }" a |
|