|
|
源文件中_Interface文件夹下WndField.cpp文件
! R: J) q3 Y) }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( O8 t* r; X2 N/ J* X, r
) F+ G O* g7 M
struct sItem# S# {6 {0 M& {7 q- f6 w
{
" z# Q! R% b5 b: EDWORD dwId;& G8 I% x( K7 M! j
DWORD dwKind2;
1 P2 a8 \5 ^4 a5 q( FDWORD dwItemId;
; e0 q1 ~, v9 V3 Z5 U3 G! GBYTE nIndex;' x; t3 r: g0 ^: E" s/ t* u
sItem(){* k) ~+ {; F: A
dwId = dwKind2 = dwItemId = nIndex = 0;
9 s! r( ]1 B6 T, [! s}
1 S N* i: l# N3 n( R: a( g Dbool operator < (const sItem p2)
5 r) x }' A2 @5 }$ ?{6 Z: K3 y- N- g0 p- Q9 g& A
if (dwKind2 == p2.dwKind2)
( l8 r- w' \8 v* D( ]7 s {0 C- g6 D! h) p' E" V% V' Q
return dwItemId < p2.dwItemId;4 d" T- u& x4 G7 w$ Q! k
}else{% B/ Q( `, t6 X% R
return dwKind2 < p2.dwKind2;: }! G2 h2 ~) G' Z
}
: R( L e' x( U}
5 I# a: ~0 N- R+ S};
& n; d. n, @* G; uclass CInventorySort
- s, B# |- R" l, v7 M{& X* z' d! }4 d$ @+ }( B
public:' S5 S$ }0 l8 a) v) p* S
CInventorySort()
& U, u6 t* w, V/ X* D3 I{7 r5 z; J# u0 D# d5 h8 z
m_dwPos = 0;+ \( v) E9 t: {; H
}
# M' e' w/ y# H! l0 I~CInventorySort(){}
1 F: `3 _8 O, y* f9 q4 t- ]private:, ]7 B: V! x6 f. P8 b$ ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 v, B. ~& R% SDWORD m_dwPos;8 E. X, c) s! u! L6 F6 j
public:
- Q# {# E5 ]" [. d2 Lvoid Add(BYTE nIndex)
% ~( e$ r+ z5 H4 W$ \{
, Z. O& V# ^; N7 G0 _/ z* D, k) _ if (m_dwPos >= MAX_INVENTORY)
- b" d# _( D {# P {9 Z' G7 q/ k5 b! a Q
return;
8 D6 y6 G, w. W5 O5 N }
3 P# N) d: B. F, I m_Item[m_dwPos].nIndex = nIndex;3 A; z/ K2 ?' B1 [: w( f' [- ^( o
m_Item[m_dwPos].dwId = m_dwPos;: o$ Y6 e! d3 j! I7 R; b
m_dwPos++;$ [) g5 E3 x& A6 j4 p
}
1 Z: [" ^! `. Z$ r: E: ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, I; p0 D6 }: H( B{7 o5 ]7 @7 J3 a1 q' Z5 ^. D \
for (int i=0;i<MAX_INVENTORY;i++)+ R. ~/ m; M3 s! X: h4 N" r( b
{7 u, s9 `/ S/ {) B
if (m_Item.dwId == dwId)
: B/ U1 Y( Q, M% L3 K {
: d+ D3 m- j, a+ \* z return m_Item.nIndex;
' i U# j+ S' `, j. w. r5 H2 W }) K/ }5 _! Z o- _$ I1 g5 F) ?
}. A: e7 a; V+ L. H- N' T* I2 Y1 L& S5 A
return 255;1 F3 ^. U' A* G
}
! q8 T/ [9 G& P; q" uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' ~- ^" j$ x% s+ c( H# |{7 [7 w* S- p b" R+ E _' o5 ]+ E
BYTE nTmp = 0;
+ r I, g- i- ` bool bDest = false,bSrc = false;
9 B3 p. d6 R+ i4 G3 K6 F for (int i=0;i<MAX_INVENTORY;i++)
. K$ i: }" t v& m% n {
; o5 z5 Z8 h4 G( A' N v2 s if (dwSrcId == m_Item.dwId)
\% \8 Y) D% V. x4 R" ? {
$ e! R- o% m" [5 N7 g/ l1 S9 ` //id相等 则 改变对应的dest和src
, R* ~+ h( C6 F nTmp = m_Item.nIndex;- F3 @% \: T8 N( T
m_Item.nIndex = dest;2 l' o4 Z5 U* ~5 }. U. n5 d
}
# h- D! X" h4 Y% C6 e& V }
; V9 w! ~/ Q' d/ h( \% L7 H# n6 d //临时数据保存完毕,交换开始: G/ P1 @# t9 Z) `2 h2 o8 M
for (int i=0;i<MAX_INVENTORY;i++)
2 {' T1 W! j+ F" L0 c4 L( j {
8 ?8 T+ f! N3 g0 @9 h S if (dest == m_Item.nIndex)
9 ?9 k6 E. x, ^" E2 i- w- _: C {
: ?; N- d, {1 n$ N% R //id相等 则 改变对应的dest和src
. ~5 v& K- c! x( F/ O. G+ n m_Item.nIndex = nTmp;4 i8 o- ? I7 }+ w
}
) f; v: u2 n/ s- T5 d }
+ K1 _1 s9 }7 V) x6 Q}0 e2 A: N d2 k5 s1 m; E/ ]: x
};% q$ n5 Z8 ]' `5 l; p% k& A2 ^
-------------------------------------------------------------------------
, n8 ]2 E+ t- o t. ~/ y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 Q {3 a3 U4 R$ W8 Z1 O3 T$ P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& i. y B- v3 r4 g! f6 M0 X7 V紧靠其上添加:! x2 x, V) y% y* ^0 M
if( pWndBase == &m_wndMenu )3 c8 e Z1 X; N/ f; \) h8 m% H9 i
{/ L3 K; K) ^7 x' [2 b7 c
switch( nID ): \$ [1 y6 F/ N0 t
{
- Z+ X |8 L9 o& h0 F case 2:
1 p8 d H; X1 H* y9 b0 A, { {
4 \( I- p! R& K$ e" q3 q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; v+ ?" ^; s& ~' f
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# o9 o9 _4 h# |3 ^$ Y5 ?
{& p- X% [9 P% M; J
break;
0 h3 w* Q" B9 K5 v. S }
. i9 |; {2 c) X0 M1 r: `, p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& t% g A. C) K4 m {# \6 N7 Y: X% a5 U, f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, @5 Q( a1 _5 v1 ]* y1 r* ? if( !pItemElem )+ I' o% c) C+ n' k9 y
continue;
) a6 I, D- _; g X if(pItemElem->GetExtra() > 0)
% q8 A) Z3 _" n3 A9 ]+ i continue;
3 Q! S$ s, P: W3 o- ?" g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. |% x" k7 g: ]! d* p; r5 k continue;6 m4 }4 Z. p; a) O6 A% |1 G
if( g_pPlayer->IsUsing( pItemElem ) )2 E8 k! [; v- u) W+ I. ~9 y' W
continue;
+ @7 ?$ M$ D. p1 j* l if( pItemElem->IsUndestructable() == TRUE )* n5 T, {4 S3 S% H6 e4 `
{- k+ F' U7 a+ o5 v" O: v+ U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ R$ s/ ^9 s7 G; @. Y1 s/ m( O
continue;9 q3 b( E8 R# B$ r& O( K
}0 ~4 w2 |1 w' P( n" `/ [- O
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 E3 E/ I, M2 l# u3 k, c- e }& b; T7 m5 B" h* T( \1 n. k
break;/ @0 p9 T' }1 I4 ^+ f6 v
}2 y {' L5 C8 N' R1 V" v
case 1:' a- g8 u1 O" k3 G% o+ |' R
{
- u/ M$ m2 C" y% v2 c4 `) ~ //整理背包3 j! ~" F* M# x
//////////////////////////////////////////////////////////////////////////1 [2 }% f- ^! j9 P
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ P) k& L( [; D2 u% U //////////////////////////////////////////////////////////////////////////
& g9 B5 M5 `5 u; i //////////////////////////////////////////////////////////////////////////' L! _( W3 m- S# V. I/ v) T
CInventorySort* pInvSort = new CInventorySort;
! W9 ~; {# F/ x3 l/ a vector <sItem> vItem;% s1 w" v5 K6 i0 k! A0 o
vItem.resize(MAX_INVENTORY);//初始化大小
$ [& Q2 z. n( l# _$ b* ] //////////////////////////////////////////////////////////////////////////
. z3 |9 K, q. i" g! J5 N //填充数据
& N, Z8 r: [0 q: H/ k- k for (int i=0;i<MAX_INVENTORY;i++)
/ K0 {0 `% r, _' m) u) ]( T: i$ Z {4 G, V# ?0 x, l1 e. k2 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) B5 m0 r W9 _! h2 ^" z6 T. v. O if (!pItemElem)
3 B& P2 ?) \# W# s7 B6 o/ V {6 ^% s' h, k/ m
vItem.dwKind2 = 0xffffffff;
9 S) A2 a4 ]. O. \% g, B" G vItem.dwItemId = 0xffffffff;
# M! D- B. L1 }% | vItem.nIndex = i;
@# o Y3 ~* o0 k. k8 x( R" i6 q }else {" J8 R& S6 l; s4 r. K/ u" w A
ItemProp* pProp = pItemElem->GetProp();
' V: U. ^3 S7 F2 l$ e6 m& U5 I vItem.dwKind2 = pProp->dwItemKind2;
5 E6 x0 |, E' j( {& L8 K vItem.dwItemId = pItemElem->m_dwItemId;
7 y9 J8 f5 ~! L. Y( m9 q vItem.nIndex = i;. ^1 ?8 G7 i$ M4 ]
}
7 H9 t2 s) N% z" w) X" l# k, N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 a9 W ]$ L0 C" P, y
}
) `" c' Q# N, R% J+ T7 F //////////////////////////////////////////////////////////////////////////
. v2 {, ]7 x) G. h( S sort(vItem.begin(),vItem.end());//排序6 d( x& s! c' z( P6 Y. L3 b
//////////////////////////////////////////////////////////////////////////
& [% \& V C' z8 y //交换
. {7 g7 H, F0 x& J+ q9 z for (size_t i=0;i<vItem.size();i++)- {7 k( K& A6 J, b3 Y
{
1 w- M8 g) b+ x% w- J+ U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ b3 C' l% }! M: L pInvSort->Add(vItem.nIndex);: z9 F8 a2 \# H. ?; \ d6 \- [* g
}
7 @( c7 b$ _* y9 G& t BYTE nDestPos = 0;
3 x& s7 U1 y- ^" X& A* z$ r for (int i=0;i<MAX_INVENTORY;i++)
0 r2 E _$ y) O {0 d+ q! \# t( r5 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); Y# q4 w9 t; P- a2 B
if (pItemElem)- @" C, e6 Z- Z
{
" a" E9 K; V! z7 w$ K if (IsUsingItem(pItemElem))* a0 H8 C3 @1 e% J3 {
{
7 J q# _4 j( L8 ^4 J //这个位置无法放# |3 ?9 ?( _- _, X9 |
nDestPos++;
6 x& d, G. f/ V }$ O- N; Y9 C4 n4 [) ]
}, j1 g$ C7 j" ]+ w
BYTE nSrc = pInvSort->GetItemSrc(i);9 Q& X( x. B8 B. S" W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 \, a- t/ \: e1 G. o
if (pItemElem)3 u" m3 r6 }$ W: ]
{
5 o2 j3 D2 C4 }2 A; e) r9 v/ Y3 t if (IsUsingItem(pItemElem))
3 \+ \/ ]( z8 k0 k# I {, R% U$ I6 o2 M* m
//这个道具无法移动,跳过7 O* X& {4 s' _, X, p6 A9 o9 q
continue;2 e% d! m' n9 \4 ?
}
$ u( h3 i# m/ I- _: M }else{
9 E2 X L$ V- ?. b, t9 x& x //空位置 不用动
1 l( Q% V+ G* h7 |, b+ c1 ` continue;" g/ w1 _- }) B$ N- Y8 q
}
9 I- M: U5 H+ J0 D- f. H //////////////////////////////////////////////////////////////////////////) V y- x% I; \0 h6 J
//开始移动* n0 }- Y, y ^+ ?, I; d
if (nSrc == nDestPos)5 V5 y; T0 }' M5 W& _9 g7 c8 c
{
; n, D$ T" t! f& C //原地不动$ ?; X% f. G& X1 a q( R
nDestPos++;
, P# y% x+ P2 e/ l% V" s5 W! P* ^ continue;( e% e7 o) t4 q3 `! J9 z; }. A
}: X' S" z+ y$ G( A" [2 R G2 h; f
pInvSort->MoveItem(i,nDestPos);& F6 {8 ^/ l' ]& A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, T$ J. H/ l( R$ r$ |2 f Sleep(5);/ j2 Q& ]2 }! K4 w U x; i
//Error("移动 - %d->%d",nSrc,nDestPos);6 Q* S0 p. O4 @
nDestPos++;
. t) l1 F9 `/ g# a' P2 F; p3 \9 s7 { }
' o9 M" O$ l# e$ P Q! X8 M5 L //取第一个元素的信息+ Q9 [ H" m, J8 r( i
/*
6 I% z8 [$ {( c6 Z- z( g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) y1 g" P' p2 r% q {2 O& ~* u3 y2 A3 L0 Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 L5 Q6 H" L/ ]$ q$ O$ g$ u g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! n# g- ~( M& Z5 `' Z E* b1 r* k
}
8 {5 W" m% ~) d( [ { */
7 \6 `% J: I3 C6 {% D3 B //////////////////////////////////////////////////////////////////////////; K6 x. F- P" L% a
break;
* I; C3 }& q$ r* i- h }
( U0 ^5 ^% y" K3 V1 Q) @8 R& _ } 2 Y0 w1 G# G7 u" f3 Y O. u
}1 s) m1 v- \) A& Q! K* @+ U
m_wndMenu.SetVisible(FALSE);/ ^" l% Y! o' W/ O/ i( ?
. P; Q! j: }5 g" ^: t* h* O
--------------------------------------------------------------------------------------------------------" w9 X- t! G: X M6 r9 k. T i% U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 s# k4 i5 s x( Q' E, G( i{
9 m" G4 |7 j1 PBaseMouseCursor();# {" L E# @& |1 N3 l& T& X
}$ p U- X( _1 ?) {' \$ Y
在其下添加:9 n, J: }- j7 d) Q. Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: w/ l2 @5 l" Q/ c5 `. J" o( I{
) c- J Y& f2 c8 f7 Q4 ?$ G7 Vm_wndMenu.DeleteAllMenu();% p# ?- M# e3 {* H5 ~. {7 K
m_wndMenu.CreateMenu(this);
; d8 ]/ d _+ M. N0 t! x! b# mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ {- s& U7 R' g( c. z
% k0 x$ S, f, M8 c- t2 F" w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: \* \9 ]( _0 s{) g: t7 O/ O1 R' |& L, L
//P以上级别才可以删除所有道具
" k N1 p1 W0 Q) _8 t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ ~$ D2 N: ~8 `
}9 X# j+ Q+ b- a1 \- m, B- l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 W; f/ e. q0 E& [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ h5 C% o) |* o/ E- u
m_wndMenu.SetFocus();3 |% C) @5 v! Q7 d! D- ]
}6 S8 F# I9 H6 ~- B3 R
------------------------------------------------------------------------------------------------------------
7 v% V! t* R2 L*************************' g: ~9 j6 _( a/ A: G1 d
WndField.h文件
/ k+ s& C1 T# m {*************************8 {. t5 h. V T9 I: \$ j
搜索:BOOL m_bReport;
3 D8 r1 `& N. D# d) X其后添加:* J3 [$ B3 `7 f. H
CWndMenu m_wndMenu;: r. v) ~* a; y# f* H* \# I w, h( @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 {9 b/ H" T. r其后添加:" g; H+ R, b! U. J3 s) @! }" H1 H! x
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 ]4 D9 h* U) t3 G5 H
: n' ]" I* f; l6 a" \1 b2 e
y1 ]! J% Y- I( K5 m. [ |
|