|
|
源文件中_Interface文件夹下WndField.cpp文件' J% e; U0 n5 I/ \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ h9 e0 `$ R P2 t4 N* T
+ q1 K1 n# [( M* E8 {1 Rstruct sItem+ h6 y6 F5 P2 w; `1 u" d* w
{
* V" k* L4 [4 IDWORD dwId;
$ W' j2 L" y2 sDWORD dwKind2;" q0 m1 q$ n) e& ^/ T. x
DWORD dwItemId;
' \ c/ C. W! _ M; s) a1 bBYTE nIndex;2 t1 t+ q* W2 i. C/ _; ?& f$ p1 Z
sItem(){
3 U- m9 W( K) Z, ]0 p1 Q# T dwId = dwKind2 = dwItemId = nIndex = 0;
( _( J+ R& @4 \& d: b}
# D0 ^8 I: v1 K u# abool operator < (const sItem p2)
/ I, M$ _* V5 U3 {9 x4 q{
' m$ {% b5 ^4 }& l6 b0 F5 ^ if (dwKind2 == p2.dwKind2)
6 s8 U8 P6 _/ ` {
% n+ G4 d# c9 \& o; D( D return dwItemId < p2.dwItemId;0 u0 \9 a; T+ C% R
}else{
, p1 ?/ ]' E% T7 u6 h return dwKind2 < p2.dwKind2;8 \& B6 T4 k+ H/ v' Y8 J& v) W% b
}" \, p3 b& j5 a3 J! D7 T
}! T6 G, c d8 A9 k, j. ~. ~
};
9 d( E0 i0 o+ x" S' V3 z Fclass CInventorySort
$ q2 ^, a* V2 D: j \- P{; G9 q5 Y2 Q n1 H5 z8 x4 H+ `5 j+ |
public: s1 h- I& |- Z5 O0 P
CInventorySort()8 R b( Y+ _% j/ U
{2 T4 u! p; K4 k' E
m_dwPos = 0;; F* C, U: B i) D5 U* U. ?, a: F
}0 ]$ i% ]* b: |3 _+ O
~CInventorySort(){}9 g) F, J3 d; b7 }
private:7 d5 k4 R: T& c% {) y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: n+ M) O4 B. U2 k/ J
DWORD m_dwPos;
5 L, ~1 l; t. spublic:, Q: ^5 X4 ~8 ?) I: k' e
void Add(BYTE nIndex)
) x. z2 g$ r; m( p7 M{
) C0 S6 F7 B8 m" W, u if (m_dwPos >= MAX_INVENTORY)
) l4 ^( g6 S1 `8 _$ a" |! z {
2 T" F% t: d( ^! N return;* s& a# z# o- P4 S" y
}
2 Q( m2 I( q# L m_Item[m_dwPos].nIndex = nIndex;
1 E- T" K! G/ s& z, g m_Item[m_dwPos].dwId = m_dwPos;
- b! S; W' |' W& Z1 J+ [ m_dwPos++;
- ]' m) u& s3 Z+ S}
+ w2 S7 B2 d& C. hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: \) v0 W# Y9 X% V% y
{- e9 z7 d) j. W8 ~
for (int i=0;i<MAX_INVENTORY;i++)1 U0 Y5 r: ^: A9 w4 F, z
{
& i8 ~+ \8 @0 z4 @- ]6 ]8 F if (m_Item.dwId == dwId)1 p9 n( n( \& G8 X' a) F
{
1 P+ E; Q# h: ` return m_Item.nIndex;
! ?! s3 A7 N4 o- ?* o }
4 Y5 i% V6 r/ ^0 V) s }1 {: _7 T& w) M- I2 N2 ^- P
return 255;) \$ V3 G0 Z/ O3 T+ b1 T" P4 f& k( x* q
}
$ S/ M# H( I4 C, w1 K* ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ e9 a0 [+ ^' U" T% N8 {{& \ x) _* `4 |1 K( Z9 W. p; D- f. O; J6 v
BYTE nTmp = 0;
) z/ X, X' ^: h4 e bool bDest = false,bSrc = false;
4 ~* W6 i) n x+ V3 C+ C for (int i=0;i<MAX_INVENTORY;i++)3 u; Z; ?9 N& e
{! x' F4 h' X3 p4 k1 g/ S
if (dwSrcId == m_Item.dwId)
$ ?$ L& h K( j o. E {
5 h! r' O. }# q+ q //id相等 则 改变对应的dest和src
; Z2 F! T* Y7 a0 H/ L7 a1 | nTmp = m_Item.nIndex;0 D; d2 I1 Y1 K5 P, \; ~% S
m_Item.nIndex = dest;! z( n+ T$ y. ]# j- T) n
}
; n8 j& H3 X) A O) ^( J }) S% R5 X# ]$ h# P6 v
//临时数据保存完毕,交换开始
; B# C( _; s* g4 B* z$ y( q2 a for (int i=0;i<MAX_INVENTORY;i++)' \1 r) F- C( R$ S9 @
{" Z3 \; I2 q/ V) K# F+ ~4 c
if (dest == m_Item.nIndex)3 U! P/ C% N# t" F
{
8 A/ a" S* _6 `/ [ //id相等 则 改变对应的dest和src
1 w" j# V `# p, i" G0 l m_Item.nIndex = nTmp;/ l8 R* w, u0 v. C5 F; \- \6 n
}
0 ?8 [# H/ G6 z }! n: }1 d+ g t$ i
}' j0 L9 X- o: W! S8 D
};
7 J1 z/ J L4 @6 Q( g! `/ {-------------------------------------------------------------------------, z3 K: ^9 J' f, H6 S
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 }/ |( n% E; \# u! N& R+ f1 b, D( `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# d B7 l3 a$ v7 b% c紧靠其上添加:5 }- J+ D' n& d
if( pWndBase == &m_wndMenu )4 ^! F! z4 G" o( P
{6 v. p( O4 ~. p5 o1 G+ L/ n
switch( nID )
4 I% ?6 D2 w) }7 n1 [3 ? {
( c8 E/ V; {7 W/ |! g case 2:8 t1 e4 f5 D6 N' c$ _. j
{
2 x7 d0 i/ C6 Q# _; _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ f6 Z- T! x& \( T4 _% x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ D5 z$ {! d# Z4 c2 `2 Q {
5 D, w4 s2 _. Z* K7 B' J4 D" B break;
$ U- ?2 i5 m0 i% C, ^3 B }9 n$ O: Q* {3 f, `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 M5 x0 p, \( L$ y" Y8 S {
3 q+ p% j2 m6 [* u/ n% v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& u( ^! X* `* @" f+ A
if( !pItemElem )
! c [* u4 \. R. k' v8 X( G$ e continue;# R4 }* ?: j$ W8 K
if(pItemElem->GetExtra() > 0)
( {) e$ F) |. n6 i continue;
( \ ~6 G9 M, X5 h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 ?+ G& r$ M" t" k% X1 q, V; z. u3 [
continue;5 A3 d- j) \9 C3 R4 ]; t! N
if( g_pPlayer->IsUsing( pItemElem ) )0 _7 D) l+ X2 \( A
continue;; S# g M3 l, R( H+ \ h/ s
if( pItemElem->IsUndestructable() == TRUE )
7 ?( m8 D% }9 x- b# @ {
% b4 i/ g0 B0 g% w g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% e- W7 Q- }: v1 z0 i5 l* A7 [* t
continue;3 R/ f+ `. s' R! P
}
. o5 q1 c7 k0 ^. l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( D! k6 x, p$ n! n& A1 M
}- T5 R P9 Z% A: Q( ^$ Q
break;: g. i& y% p6 i! p! K0 G
}
* `! r- G& H/ J) n- u case 1:
0 L7 X0 t+ w, ^% G {" _8 U7 j" a+ Q8 `+ r( f
//整理背包; B4 N0 p8 ?" a3 s. h" h9 Z
//////////////////////////////////////////////////////////////////////////
& A p5 {: o* h: f. s: i //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* E& o! K9 W) ]- N( Q } //////////////////////////////////////////////////////////////////////////8 ?# l/ G/ m: P
//////////////////////////////////////////////////////////////////////////: L8 \1 B) o- _# C* u; q7 l
CInventorySort* pInvSort = new CInventorySort;
- |1 f% B* A: |1 n3 o vector <sItem> vItem;! _( M8 c9 m* O3 x
vItem.resize(MAX_INVENTORY);//初始化大小# t; h9 S2 Z6 Q }( b1 a& C& R* a
//////////////////////////////////////////////////////////////////////////* G2 d- F. D# ~/ W* h3 q4 U) R, K3 A; h! @
//填充数据 |7 d# X. |1 c5 `- c; ?) u! {
for (int i=0;i<MAX_INVENTORY;i++)& Q( W* N( X7 I) V4 i% @$ @
{
8 b% } z4 }/ N, j a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 ^( d2 l) ]2 A" Z8 P) _
if (!pItemElem)
2 Y! A$ ]4 f4 Q! O3 | {
3 }+ _: Q* g, z: R, i% O vItem.dwKind2 = 0xffffffff;* s8 _# g" o3 Q& O0 R5 s: Q
vItem.dwItemId = 0xffffffff;
3 }- x& G' f2 r8 H vItem.nIndex = i;
( S* @% @' R" S }else {
* c, J9 E" J! N5 L5 M7 a) {# f ItemProp* pProp = pItemElem->GetProp();
- p8 [: g, Q( X6 x4 M$ r vItem.dwKind2 = pProp->dwItemKind2;
- i2 k! T7 O6 s% j9 r vItem.dwItemId = pItemElem->m_dwItemId;
7 n( R8 ^1 q0 p/ C. } vItem.nIndex = i;
3 ]7 o- J) ^2 u( @( s- ?' ^ }' Z1 r8 Z. b! |
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 `. N, ?& P3 H) V+ F
}! M) g9 P. }* {# F
//////////////////////////////////////////////////////////////////////////3 K5 u# _ r. J+ }3 h3 T
sort(vItem.begin(),vItem.end());//排序
2 X7 q8 j; _; o+ i //////////////////////////////////////////////////////////////////////////
* G5 @, `% G% O& A# Z+ G //交换
/ O8 d/ ^- T# O9 Q* z. i for (size_t i=0;i<vItem.size();i++)
$ I* H0 [0 Y& m) e$ I( r8 h {
8 B+ y$ B x: Y: g7 Y1 s8 o2 @% g //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% ^$ M4 a6 ?+ P3 w W3 |: m8 w pInvSort->Add(vItem.nIndex);
5 B, n* a% }& t, F- g6 V }
% p: h+ a9 a6 a* d: `+ t BYTE nDestPos = 0;4 ?% W" X9 T/ O B3 _0 N
for (int i=0;i<MAX_INVENTORY;i++)3 F- @' P$ ~% n
{
: L4 t9 f2 m+ S( H- z7 Z+ t& n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; _, |; G7 e, _7 M$ i G' x
if (pItemElem)
. U( b% w+ L$ J% n$ {: m2 w/ ^2 B {
& A% f! S' Y3 N. v0 l N if (IsUsingItem(pItemElem))
3 @, W) _* V6 Y- K9 G {
! V, W! u$ `( F5 p //这个位置无法放9 o/ V/ e w1 O0 d3 u
nDestPos++;( z1 g, ^& `. M* }' ?. R
}
9 V" Y$ ^4 F- S! u& s: i4 e }
" M/ o" T! Q! ?; |7 f7 k0 C' ? BYTE nSrc = pInvSort->GetItemSrc(i);
( j8 u9 a# x; A4 ]- x) @: @6 A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) w; {- }4 @' g6 u& k
if (pItemElem)
% O9 ~. S3 H3 F; ?' I+ w {# z) G4 i! {! l8 n, `
if (IsUsingItem(pItemElem))
& ?2 G4 J" j; H# {" f5 Q8 n {
) E: j" j) w8 L8 Z8 @% m& E- [% } //这个道具无法移动,跳过
) m9 R5 `- l! n, n. J$ c& V continue;
2 V& J0 l( J+ V0 b& E }3 Q- o, ]" d( j# k* x# P5 b
}else{! k: g! ~1 H, B( e4 W: d+ Z
//空位置 不用动
o6 @( P. O7 x0 i' m continue;1 [. \, N* H) o! A: D' l5 \
}! n- L0 y5 K* b. F
//////////////////////////////////////////////////////////////////////////
4 b* N* P6 @2 _* D* E7 j //开始移动
/ T+ K1 `& M2 e' @ if (nSrc == nDestPos)5 [' n% L- c& G* C
{
- x" a: `- E- _1 L" J4 ^ //原地不动
2 m* x0 E' M1 [& M nDestPos++;. w, R+ D# J+ T
continue;7 T' J M+ ~6 d% I3 b& Q- u8 U, [0 Z: Q
}; J2 a* g* \/ J- e
pInvSort->MoveItem(i,nDestPos);
' h5 |* i c! l) ?% p9 d g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 Y- {/ m% z0 B" l0 @ B' S
Sleep(5);
1 q3 Y' q# b6 g1 s$ m //Error("移动 - %d->%d",nSrc,nDestPos);- c2 c# S8 O% T4 F& V1 P' \
nDestPos++;8 f8 z) V. _) J% ?
}
2 r! K% d. b7 L7 R& b5 d) Q7 X, K //取第一个元素的信息4 a7 b; Z' g2 l- H! C
/*! K$ A$ p( m$ j& _% F& F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ f( o! G# q% K6 [/ ^: d
{2 t5 M9 y" [: h [& D
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( T: E% r, j3 y# }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; s$ N P* T b% ]4 }
}
6 c1 I w% ]$ u2 J# L% b! @ *// x; q4 e3 R2 ]$ q
//////////////////////////////////////////////////////////////////////////& G- p/ B- j- f7 Y4 e, W/ A- z
break;
% R: h' h1 j; I# N4 h c }
; F" V3 l- O$ |+ p8 y } - y: z+ _% a6 ]3 L( ^
}9 N0 w0 H' J, V. U& A
m_wndMenu.SetVisible(FALSE);
$ A/ y( v$ K3 `; _3 x) p+ o3 q3 O+ x" @ x! o U) x
--------------------------------------------------------------------------------------------------------, y+ A% E) d: H$ c) [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" F3 O+ X/ X+ K) V$ n& A+ e# e6 Q0 {{5 k* ]4 Y5 d* b3 x
BaseMouseCursor();
) N' t) |+ P9 s* P% L} b1 m# W* W1 O( K/ G" |$ v1 Z
在其下添加:7 `- D7 Q' w# b u
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' c( B" J h# Q; d: |{
; f; D6 f' @8 [* Z; ~% bm_wndMenu.DeleteAllMenu();
7 i( ?# }# u; s* U% v" em_wndMenu.CreateMenu(this);0 u) k. d X+ T. H1 ?9 ]1 V% P. X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" `" J5 ?3 _ O( `$ d+ _) B( ^; I' U$ L4 k" m( [: h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 j L' O+ P0 x+ e( G
{( Q( w% u4 U3 f2 [6 m3 `
//P以上级别才可以删除所有道具
: r5 H. `/ o' c# B: F3 T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' j* h Q, k' P0 H5 o6 L}# w' [+ b0 i7 n* V* n5 @, `% \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 z* H, c6 D4 c. c6 Q1 n) R3 sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 J" F2 n+ h8 Z. x. v) r. I6 |! r0 u
m_wndMenu.SetFocus();0 ?( C, J( i4 A, \5 b# D9 w) j3 p
}
& g" N, Z. i. v% m------------------------------------------------------------------------------------------------------------- V7 e& E0 f( {" C8 T# o
*************************4 c# E2 g; E0 I( u% m" q4 E; m* a9 `
WndField.h文件' N1 x( E5 ^: W! U/ I' v" j! v# a4 ]
*************************
4 ?" Q- h, z9 e3 }5 _; ~搜索:BOOL m_bReport;
8 h8 a! F% n! a$ Z: l其后添加:
( X( P& V0 V7 H' I# _; gCWndMenu m_wndMenu;
: m0 b4 S% k4 a* B! Z/ J; \) S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' Q9 L$ ]: f, M
其后添加:; _: K4 X2 F) y& [& l
virtual void OnRButtonUp(UINT nFlags, CPoint point);0 T/ F& c4 H" }8 I
+ U+ I9 s" i4 S* S4 L1 O/ M, }" s* k
|
|