|
|
源文件中_Interface文件夹下WndField.cpp文件6 {1 m4 |* o- C- q5 _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 U! E! J% i/ v3 ?$ J5 y9 m* _' J9 t& l
struct sItem
8 B3 A+ L5 w8 |9 c5 `4 g{
' F y8 H, k. r. W2 z3 |DWORD dwId;6 v+ U3 P/ m$ R5 x% t7 A% Y
DWORD dwKind2;( r& R# P6 i4 [" R
DWORD dwItemId;, ^" B+ ?. r+ F+ s- c
BYTE nIndex;
- ]& s f/ N" fsItem(){& B' E0 z+ g) A, W( z
dwId = dwKind2 = dwItemId = nIndex = 0;1 Q+ T7 O, d, m0 ~: S
}
, w( l1 f9 N4 h8 j1 s0 K; Hbool operator < (const sItem p2)
$ {3 c6 Q3 @8 k" T/ n# A ]- E& t{) f# C, e4 _8 z. p
if (dwKind2 == p2.dwKind2)
: D9 f8 h, E% P9 Q7 E8 n; j# y {
; M3 n+ i- z6 l! w3 M+ } return dwItemId < p2.dwItemId;
0 r( D1 X% J) V( a }else{4 O) Q8 d( G" _; ]) O
return dwKind2 < p2.dwKind2;; g; Q6 X2 c: y$ ]. I8 D6 g) v
}
/ t6 W' {( H$ \1 ]}; H* Y/ Z3 F% b* Z% ]8 v( q7 v, k
};
9 Q2 J- _6 ~8 ~" X( bclass CInventorySort
4 y# w$ R1 I ^# v1 ]* d{
' L9 {7 U0 ]4 |. C5 r- npublic:
! A# e9 t1 ]% a1 j |5 w7 G9 |) _: xCInventorySort()
& v3 g9 z$ m% A9 Z{6 H- p: w. c5 e% P
m_dwPos = 0;
4 _& u n5 w1 n# m' E, a) [/ N}
2 W) I/ I; d7 W; _& m~CInventorySort(){}0 E+ o/ N2 f( `1 Y: a
private:( ~5 l( m! N6 z( ~4 H8 f2 Q, m6 u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. a- z0 f5 j$ v
DWORD m_dwPos;
$ i% w" T" G( B7 ]8 Rpublic:
) t, R& ]% H' n7 fvoid Add(BYTE nIndex)5 Z9 G8 X/ A' C5 y& j9 ~) T
{/ {' T- n* }2 F2 o3 J% @" E; Y
if (m_dwPos >= MAX_INVENTORY)
( T$ G# I' t, k! ^( } {
: {6 V; u% z T$ ^& t L return;3 _) [+ J- k# C4 ~
}, u, u+ l/ h* l: o7 R$ b& K
m_Item[m_dwPos].nIndex = nIndex;
8 m) e( C" ]4 D2 | m_Item[m_dwPos].dwId = m_dwPos;, P2 ^; s$ M. w. S( j# Z
m_dwPos++;# c* ~! Y; j6 C
}
" h) W5 Q6 _1 }9 z9 v" a }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" C( u( w6 c2 W, f( v$ J0 G: m
{
G: Y6 u: i. m* |( G1 T ]6 g for (int i=0;i<MAX_INVENTORY;i++)
. E' g% C0 s( b6 o6 }* P- w( } {
. H% l; P3 \2 I0 T/ c; G! M3 B) y if (m_Item.dwId == dwId): S8 o4 S7 L# Z) Z" H4 m) l
{
: O0 l1 S f0 u# p, A return m_Item.nIndex;: u% H* r# f5 f/ L6 Q0 y h) c* t' a
}: b8 e- m$ P) E7 ^! N
}
8 h* g9 A( Z5 s return 255;% a. d* z6 u" e; s
}
5 b/ \1 e1 p q) a2 I; C8 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. U" N) X- C% {5 C0 E, U
{
( D( o2 A" _4 j( ?; o0 d6 v0 V; S BYTE nTmp = 0;; r& x9 ~0 H5 ?2 |1 B- o( z# P
bool bDest = false,bSrc = false;
5 q, M# H0 W" y2 {$ r: K for (int i=0;i<MAX_INVENTORY;i++)
8 c# H g7 g8 K8 h {
, u2 m: E# `4 }, Q% L if (dwSrcId == m_Item.dwId)
8 S9 o- z. O6 B0 m/ o. R0 A5 D. g! W {5 q3 P4 z: u0 h9 U) R% w
//id相等 则 改变对应的dest和src
1 x9 V/ R. ^. x2 w- \3 _6 ?8 b nTmp = m_Item.nIndex;( G5 c2 F; L" N+ \) l$ T
m_Item.nIndex = dest;( h/ f! I ^. A8 r+ z
}
+ ?' Z- B0 b5 v& n% Y( n. f' B- R }
# _3 r$ |0 i* c* E" m //临时数据保存完毕,交换开始0 o# T, N. P4 y$ R/ M) i0 b( Z
for (int i=0;i<MAX_INVENTORY;i++)
5 A, D0 v5 C. C9 c) y5 a. k {. y8 o( d$ a# X+ C' ?
if (dest == m_Item.nIndex)' Y/ `0 A4 V1 H k. c8 U+ t: M
{" ~0 G r) n% C$ C- H
//id相等 则 改变对应的dest和src
8 \6 r, S* H. J3 O# u m_Item.nIndex = nTmp;
; r C& L# q# _0 M5 M: ? }7 [1 j$ f* N; V; z7 L( [1 ]
}
+ N, f; F" S. W: u0 `}7 ?. ?- V+ i8 B& l0 N! h% j2 l1 i
};! J- l2 S) q# T* E2 }* N. ?- n. g
-------------------------------------------------------------------------
0 |$ e; u- c* t+ V5 M! p8 f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" s; g) A7 f3 w# c3 V" b! r- t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 m+ h7 r; X; M- P+ z
紧靠其上添加:
& l* @$ ]" R/ O; x, jif( pWndBase == &m_wndMenu )* |! K6 O4 @& ^, t" ~, B! U
{
1 C/ x/ b$ t: }0 e8 _& N6 a# L switch( nID )
4 V7 l2 P. _/ I! t {0 L6 |& a9 B- a; q
case 2:
) ^! v+ _7 d2 e& T/ g {* s/ [( v* C7 S" N# M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 {# Z( M# ^. M7 f" g) K2 v5 K! N4 n# J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! K2 `# v4 `, v9 h' R$ N; \ s8 Q {
1 t( R3 }. p1 i) N1 W; h break;) o+ S( t/ N+ S7 j) \+ h( V, G
}
4 J0 i4 {/ y7 a* K" ^& p9 ]( z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' |/ B9 O* e6 ~
{
( S& z m& s B, n; ]7 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 a+ H6 t w+ { C) m6 D if( !pItemElem )' q8 }' [- v; Z3 ]4 o7 Y. M
continue;9 S K) O& v* d/ s) V' A
if(pItemElem->GetExtra() > 0)% r$ Z0 a& h& z1 V$ L. ~6 W* C
continue;
, k/ r A! m7 k. L if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, f4 d" U3 r! l0 Y4 u continue;+ v& ^$ T3 u# S4 y4 K
if( g_pPlayer->IsUsing( pItemElem ) )- U8 o; h9 q* ?1 k7 B- X8 V$ `
continue;, x( q$ M# }* p) J" c' e
if( pItemElem->IsUndestructable() == TRUE )" ]7 T: K1 i, f6 b9 |; X5 r
{/ R; m6 C3 G3 P- J+ a# V
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 X" F& ^5 V+ l! O continue;
1 Y: p: }9 N" a/ u4 i }
B& @9 I" M; f. D# s( A9 \" f7 {" E g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, v0 ?8 H; j z" k }
; e6 E" N2 u1 T. F break;1 U V& O% @6 L
}
- D% |1 P) D0 x J' @: [6 V case 1:- W @: [2 b* c0 D9 K m
{
* t! V3 x" S6 h2 r' q //整理背包2 K% ?2 G3 d" |' o: [
//////////////////////////////////////////////////////////////////////////# s- l) e/ M+ [0 ?" U* P5 L7 N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 G% A- t8 H' M( ^* i9 s8 t! U //////////////////////////////////////////////////////////////////////////
2 V" Y$ _9 [6 k' U# N) \ //////////////////////////////////////////////////////////////////////////
. L: o2 `3 N( O- |: b/ M CInventorySort* pInvSort = new CInventorySort;
3 b d; p' B; D( u. j' ^% F0 ~ vector <sItem> vItem;: c7 o5 T9 B9 Z6 j" C0 e
vItem.resize(MAX_INVENTORY);//初始化大小
6 o8 G* b1 b9 J3 u7 X1 s //////////////////////////////////////////////////////////////////////////% b: h4 y# X9 F* l6 ]
//填充数据. q& S1 j0 o, r
for (int i=0;i<MAX_INVENTORY;i++)5 a4 ?# n6 J0 a& {$ D) o! w
{
% j( A _! f+ E/ P0 o1 c. _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 U$ v; W) v$ w, v7 n
if (!pItemElem)! x1 d. X) Y' X1 j; C
{/ N" N0 v. C3 m5 l
vItem.dwKind2 = 0xffffffff;4 t: P( }% D4 [; Z2 m6 v6 A
vItem.dwItemId = 0xffffffff;! X' L8 {& Y8 A: _
vItem.nIndex = i;
% \8 J% a# m9 P6 m }else {) E! l5 d' B, O/ ] t& K$ w
ItemProp* pProp = pItemElem->GetProp();
$ g0 ?) e, i: }) q: J vItem.dwKind2 = pProp->dwItemKind2;- D, ?0 [: n7 W0 r: h- q9 q
vItem.dwItemId = pItemElem->m_dwItemId;! o( ^% G$ q1 }7 x
vItem.nIndex = i;+ `% G6 g; m; Y8 A% h
}
C6 W) \+ h! M6 t3 d4 U A7 h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ N- j5 k x2 G3 ` ]
}
: q- V; r e" J3 C9 c //////////////////////////////////////////////////////////////////////////
# S+ m, A9 |3 K8 T sort(vItem.begin(),vItem.end());//排序3 [6 C9 \5 B* O( o, u$ p
//////////////////////////////////////////////////////////////////////////3 n, i9 @' {8 y% u# \
//交换
+ ]( t( \8 x& [6 C+ D- } for (size_t i=0;i<vItem.size();i++)
) t2 x1 P" b+ ^4 V0 G; { {
# `- J/ Y5 |: L* e! U: { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- B) Y4 P: b; E" o pInvSort->Add(vItem.nIndex);
2 q5 }: Q: ?( p: @ l" R }
2 z: |1 p: K* Z' a7 @* S1 b& f& P BYTE nDestPos = 0;$ {$ d& {& j# z; ~: G! m1 ]; }+ w# d
for (int i=0;i<MAX_INVENTORY;i++)* L: C) ?/ O8 H
{
3 z0 ]$ `7 S0 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); F9 L4 [% |: N8 A o8 y7 Q
if (pItemElem). ]7 d9 _1 y1 j4 ~5 z- O5 n
{: c) a3 ?7 K/ G( @: V
if (IsUsingItem(pItemElem))
/ m# d% W1 {* j `9 Q {
5 T& h$ Q/ b! z6 C4 T //这个位置无法放, S3 z" D$ N* t3 L' M# n
nDestPos++;* n5 w: W6 J5 \' |. W
}
- m4 m4 B, ~0 Q, l" t }' u; q% p3 e5 f5 _, G
BYTE nSrc = pInvSort->GetItemSrc(i);! o; J- f$ c6 w& ]7 }0 d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 J& O+ c) O% U0 a0 \9 E if (pItemElem)
6 K7 T4 z! F4 i1 X {. E6 y" E* w' z5 J8 {) S
if (IsUsingItem(pItemElem))
- {$ H& \' `; e( q {
: }2 J E" |- p2 Q //这个道具无法移动,跳过
. x U# `1 a1 D continue;
7 O5 v4 {0 _1 D }
1 b! d* o, `' r- e0 l1 t }else{5 l8 e- V. x8 i7 E
//空位置 不用动
! n3 C' s1 Y! x/ z0 x continue;+ x1 K; q' @5 h# ?; u1 w: N
}
$ s1 `5 s/ x, t$ z //////////////////////////////////////////////////////////////////////////0 {7 v9 E3 [( Z; N4 V4 a' E
//开始移动" @: g& g: g4 C- ~! P# X
if (nSrc == nDestPos)& K/ S9 A4 X$ B: d5 ~# b0 a
{
+ l4 L' e- r3 e, `* h% h //原地不动9 Q- D4 [- O# `; C
nDestPos++;' Z8 p o1 |8 a& R5 ~ D+ ^5 Z! F
continue;
9 e5 }' Q$ J+ B7 r, _ }2 k* _. Y* c. H$ b
pInvSort->MoveItem(i,nDestPos);1 w% y7 ~; j: \: |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! r: P8 a' t& O) H# A- T- O, z Sleep(5);% G, d# b8 v! [2 T& J7 u" ?% M; Q
//Error("移动 - %d->%d",nSrc,nDestPos);. p! u- F( \9 I* r
nDestPos++;
3 T2 E4 Z d' S3 y2 h& T }
* P$ ?3 n# Z. {+ M2 L- L1 m //取第一个元素的信息. e& a. a2 C- f7 I0 P) {5 r
/*+ I" t/ v4 m( L- b0 e
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 j0 V+ j" ^& o4 ]( O2 \! G {
^# K% _/ ]6 m _6 _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 ^+ a( |$ B2 v* R& D; o% K. r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 h: b' W, q" d; P; w }( e! r& G# v2 Z. Y% b/ L
*/+ _8 |* Y3 n+ m" K: L$ Y. V$ J% R
//////////////////////////////////////////////////////////////////////////
4 `/ q4 L1 T8 T7 n8 q/ j0 I* w break;
T/ |% k: N' p }
# k7 X( \( Y0 X- v } 9 i3 Q- K1 R0 n6 z$ ^
}5 S; s* F4 u" q( e( k( I
m_wndMenu.SetVisible(FALSE);1 w) G3 T2 ?7 V6 W
3 K- u4 T8 c. _, j
--------------------------------------------------------------------------------------------------------2 r) }. R8 C$ c* @% a& H6 O5 s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 L f% A- n9 ^5 E; f
{' K6 t U* s @7 n4 ?" F/ @' }
BaseMouseCursor();
" }$ w7 c3 r5 w" ^}
! s) E; r! v% b- J! g0 s2 g* Z在其下添加: o, k0 j( w- B* c+ R1 }$ S+ Q. ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# I# } T: L6 h) k( p6 A* C, Q
{% I- i1 f' P+ L5 x/ V) Z0 k
m_wndMenu.DeleteAllMenu();
7 J1 I% R4 O! q. i* ]. Z% r& l/ H# hm_wndMenu.CreateMenu(this);3 r# p0 g/ @% p( y6 L7 z; R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 m }& G/ }5 b& ~* m1 o- }: D- q+ i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 Y- D" H7 w# x' q; G/ a2 R! z2 X
{
& V) p2 d& \1 M, L //P以上级别才可以删除所有道具
! E4 r% T5 n3 X% F' G: U m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 `7 P' v( r/ j; K2 I" Q6 b}4 y+ v0 P/ `4 P5 ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ T1 j0 z- g; U" ]% am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 V' x8 o) k5 ]: S* U
m_wndMenu.SetFocus();
" w, W ^1 U# G3 K}8 t. ^5 M9 |) l& h
------------------------------------------------------------------------------------------------------------
" N5 i V ~- V5 Q4 t& T3 V*************************. |. L- s$ S% B6 g3 d
WndField.h文件
+ |7 r/ y8 H, h- ^" C0 H' V*************************" J! [- @" m6 U5 K5 J8 E7 L! l5 z
搜索:BOOL m_bReport;
: x; [5 h$ n( q4 B5 g, g其后添加:1 H- a3 C" {" K. o+ r( P* k) q
CWndMenu m_wndMenu;
# u2 ^( J, e2 K8 O. ^7 [5 ~6 W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% M7 H$ z9 D$ s9 b7 ?
其后添加: D5 }* ?5 ?9 e( w4 Y3 @4 X9 K
virtual void OnRButtonUp(UINT nFlags, CPoint point);- W/ [- m S3 ^% Z+ c! D% u
* l1 H+ `( n/ c( O
0 H# J% [/ \7 S: @! ~/ k |
|