|
|
源文件中_Interface文件夹下WndField.cpp文件/ o" Q# R. H8 M* a0 w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 x e# ~3 v; U$ O {2 I3 k
% {4 F/ }& F% d) y6 A+ Dstruct sItem
* A, O9 J G: z* |+ s0 _% e @" E1 |{5 _: u' z5 H$ B T2 a
DWORD dwId;4 _- ~5 ?* b. b. \5 Y) m, f
DWORD dwKind2;
! Z1 ]: @9 `5 Q9 z7 fDWORD dwItemId;
; a4 `" ^+ N4 HBYTE nIndex;
3 n+ w6 x. F, Y Z; S& fsItem(){ ]; b* t9 c0 g0 [# X& h7 E& p5 F
dwId = dwKind2 = dwItemId = nIndex = 0;
- E7 L7 L3 X! w; [}7 T: E7 o5 {2 T A+ _, F
bool operator < (const sItem p2)$ ~4 Z/ Z( ?+ y. D2 q: I
{2 T3 l. K/ w$ P9 ~/ b, D8 Z% i/ d
if (dwKind2 == p2.dwKind2)
; B7 ~% l+ H' T/ H, j {- O8 D7 [. C1 S/ _$ P
return dwItemId < p2.dwItemId;
- Z% B3 g8 d5 _" d3 \% M3 Q }else{
* O4 N# J" o, T5 Z2 G* Z4 }3 l return dwKind2 < p2.dwKind2;+ F5 F9 s5 ]1 u& @. T
}3 I. ~" v+ c9 _) p5 {
}' r, E4 {# E/ D+ L; B
};
- ~9 I2 R8 K# @2 x- F; qclass CInventorySort
' ~) A! `4 ?$ T' \% k( t. _7 y0 e) u{
) X I4 n' \' p' d, R" ^- S, Z4 E4 ppublic:1 G" C5 z; N) y* Z8 p* V4 p
CInventorySort()
8 D, d' J1 e; J$ ?" e4 w{ L a$ | x P3 H
m_dwPos = 0;
6 ^! Y+ _( o- H; R9 x9 q5 o}+ Q7 a; w) P4 z' |5 `, f; @# t
~CInventorySort(){}! {+ H' j( t% p" u
private: n- t$ Y/ Z% }0 w6 l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( i: O3 ^5 o( C8 T1 v, R6 ~" TDWORD m_dwPos;
) v4 g, a1 F& h' tpublic:; }" W+ a+ y7 C$ g
void Add(BYTE nIndex)# a% [) k' t3 `# W" y6 |
{
# {& l% P: E ]* y3 _; } if (m_dwPos >= MAX_INVENTORY)# X) f1 p$ G6 U; D
{
) E }" k! d2 m8 Y# `) c return;
( _4 i. T% e' i }
+ M% {* P ~2 [9 n0 `+ G m_Item[m_dwPos].nIndex = nIndex;
5 x, A& ?* Z- F; c m_Item[m_dwPos].dwId = m_dwPos;9 M: z- c% R1 `6 i: O" c
m_dwPos++;$ m; t1 E) H2 S
}( ~( O1 @6 Q3 p; ^8 i# M7 n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ r* s6 w( s# G2 F3 G
{
& o5 P6 D6 Z' i% R$ l7 u' N for (int i=0;i<MAX_INVENTORY;i++)4 Z$ e0 b0 B! |/ y e2 l3 s
{6 E! N! f! a* O( T% u% h
if (m_Item.dwId == dwId)/ e3 s' P+ j8 @8 E
{3 c+ f4 m. s& H% P% N, N
return m_Item.nIndex;* D% N- Y+ ^6 a! S" H* f( d
}
9 B* |; T: W" A2 T6 G: g }
: ^' p8 K) O: J9 m" O return 255;& y* C& O G2 j, _ b
}& r1 [( V7 {% X6 v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, }5 i/ t& z( i& r0 Z' H2 L
{; g( D2 f7 L, x6 ^# X9 s5 ~
BYTE nTmp = 0;
2 n0 o. y/ ~& D3 h+ q bool bDest = false,bSrc = false;6 {) i. H: P* `- P2 o
for (int i=0;i<MAX_INVENTORY;i++)
: b- ?$ D; ]' _% F {9 d+ { F0 C- Q6 P
if (dwSrcId == m_Item.dwId)6 d7 b+ u9 v2 }/ O( c
{9 V5 L; ?' D/ y+ }$ H1 @
//id相等 则 改变对应的dest和src: B- f" h9 ^9 J8 U4 |, }
nTmp = m_Item.nIndex;
* n8 r \7 H8 R& w m_Item.nIndex = dest;$ D* V$ u) {! v* S/ ?
}9 I$ P/ ^* U P
} U1 q4 a4 @8 ]+ s2 o
//临时数据保存完毕,交换开始
i: l* a8 ]' N u$ S for (int i=0;i<MAX_INVENTORY;i++)$ o- J; {6 J7 R1 P- b, }
{
( g( ~ G7 h: K0 {: L6 }6 \( U if (dest == m_Item.nIndex)
" h& N% S; x# O( h- M- C {
! A2 g7 b7 [" B //id相等 则 改变对应的dest和src1 {0 W' T e4 M2 l
m_Item.nIndex = nTmp;8 G3 {$ h: V- V6 O$ S3 L8 J& M N& u
}
% C0 ^$ t3 c% R7 k1 H; s }0 U. X, g; O/ F8 c h+ r
}$ }9 d, ]! N. o/ A
};' g* N( `% A$ r' f' D* e
-------------------------------------------------------------------------
& f. H; z: b: d5 }9 f6 G& Z- X4 o$ g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 C8 M9 x1 Y" V6 J9 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 I& U! \: i: ?7 S, d# r
紧靠其上添加:
: U' F( b8 b6 Z& gif( pWndBase == &m_wndMenu ), c& S. d( V% w2 I* L* a% O
{# B3 B* }& m& M, j; o1 G: T" _
switch( nID )
8 p! C8 f4 r* a {' ~9 h/ ~& l: L% K
case 2:1 }" H4 W7 g5 G# F/ P9 f$ T
{4 X9 Q' k: C- S0 b, D! R% W
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 k. b& r8 J2 h0 D8 `
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); X6 m) [' c) @# V, t. L6 d( z9 |
{
8 ^0 j) L7 L2 ~ break;1 C i; V8 E) ]: x0 v- G% a. K7 [
}. `! s( _ v' l) g$ d+ I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) o% ~+ D5 `( R0 B9 }! l
{
8 S7 o4 ?, u& n# }4 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 D, l0 J' h" b! `2 m' F5 B
if( !pItemElem )
2 }3 j, o2 p8 [+ X: j continue;
% W- \* F1 A: X4 k/ j4 a9 N+ [ if(pItemElem->GetExtra() > 0)
8 ]9 P8 X" ]2 D/ A" F. @ continue;
+ I# l8 @! d( P g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) ~6 x9 `: j: A5 o" [2 W' V continue;
6 E# G1 [9 L5 o d" _& u% h if( g_pPlayer->IsUsing( pItemElem ) )
% g. \% U3 p. k: x( k1 |$ L" Q" g continue;. ~0 z( c. N2 S6 I* ~+ o$ m
if( pItemElem->IsUndestructable() == TRUE )* [: N+ ?( t+ Q: o0 m: `: N P9 o
{! y6 o2 D, y% [4 Y. t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); f! y0 t+ a3 @- C
continue;
! U4 Y/ F/ M) m: e; b0 N }
8 t2 m* }1 k" C, A6 X- ]6 c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 h3 D4 i" ]( q+ N E( q, V# O( Y }, C4 i2 n; j0 C f& |1 m: h
break;
& q: z& l d% _2 }4 k. J: B4 w* l }
" m! |$ D; _9 Z- S7 l( g case 1:5 c# _6 P" S* A( H
{8 p. B/ g1 K4 u8 S7 G; ]
//整理背包9 P; w+ A3 `: L' E
//////////////////////////////////////////////////////////////////////////7 j5 Q' R/ S& O3 P9 z9 |9 g0 Q. D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 U7 N! R( q" N2 V/ ~ B8 g c //////////////////////////////////////////////////////////////////////////
, `6 h2 M. z! m //////////////////////////////////////////////////////////////////////////0 N \2 y! q: G: Y3 @2 ]& N
CInventorySort* pInvSort = new CInventorySort;
) l) |3 w6 l) i' P0 B I0 P! Z9 s vector <sItem> vItem;% E) H; G- ~) D
vItem.resize(MAX_INVENTORY);//初始化大小5 g: r; B- p% ~& e$ Y
//////////////////////////////////////////////////////////////////////////5 [; @" E7 b% \2 N& ]: F2 g/ H
//填充数据
5 Q6 N9 a4 W% Y: ]1 r+ L: t$ @ for (int i=0;i<MAX_INVENTORY;i++)! v# |, Q/ b5 A
{
& f% @, D( V/ ^: A- @/ U1 T5 f4 l# f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 R6 t4 C* w4 b) m+ Q/ u( j
if (!pItemElem)
4 z! _% n4 L f: w: v& e6 m {4 h9 s1 g9 D" S& o/ j
vItem.dwKind2 = 0xffffffff;- V- s, b) T; @( r+ X
vItem.dwItemId = 0xffffffff;- K( K# A! |* q2 W
vItem.nIndex = i;
$ R& i9 O H: a+ m8 W- y+ Z }else {) E4 j0 q @7 e- u6 m( ~. J
ItemProp* pProp = pItemElem->GetProp();3 L# o2 m. t0 P2 l
vItem.dwKind2 = pProp->dwItemKind2;
" p( @: r. J0 v/ R& d9 W vItem.dwItemId = pItemElem->m_dwItemId;3 R( e" b9 a& v8 C( R1 A4 v% C7 F$ m
vItem.nIndex = i;& J& E5 f) F0 \/ \ O! E
}
' u0 t- Y- `3 @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ M; G+ k$ W1 ] }
5 S% n9 b5 q/ T //////////////////////////////////////////////////////////////////////////6 ?$ u% T6 i* M/ X
sort(vItem.begin(),vItem.end());//排序5 Z( v, g y* H1 b
//////////////////////////////////////////////////////////////////////////3 V1 f3 @; n- \: k6 K
//交换
6 t* e! k, [' c* y+ r# z for (size_t i=0;i<vItem.size();i++)) F+ C8 X1 _- r* ~
{4 N# f1 @; l; @% c) B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 e* _1 E; C6 W6 U) E! d" u pInvSort->Add(vItem.nIndex);
2 w& l) F) Y8 | }; y0 }* x @1 E7 I3 m9 o& E% x+ f
BYTE nDestPos = 0;- f/ Z; y, n/ D: i! @# n5 [5 }/ ^
for (int i=0;i<MAX_INVENTORY;i++)+ u6 @/ g$ N( ?4 E9 E
{" Y9 j$ O/ m+ v6 g+ J1 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 r* }. [7 M! t! H3 t7 Q8 {
if (pItemElem)5 A7 _, x* @/ R( N' T0 {
{
6 g! h0 q7 U$ e& Y' q# J* E if (IsUsingItem(pItemElem))3 M4 v, c. X* e5 S) L
{' l/ v+ _: n5 `- A, ]$ @8 J
//这个位置无法放) O. _: Z) R" k1 X
nDestPos++;$ t6 Y8 e; ?2 P( y2 k; n9 h i
}9 F1 c3 M o. U. G4 H$ J# a; T2 s
}
4 M Q& T$ k, P BYTE nSrc = pInvSort->GetItemSrc(i);" b# @1 }0 y; Y# t8 ~0 F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ u0 f" r9 q) v3 Y if (pItemElem)
8 G5 a: \' Y" J7 W {
' D0 z% R+ q- q% }( @# l if (IsUsingItem(pItemElem)); q5 p3 d. W( x: d' i5 G Z
{
( g9 }* |9 v: h9 c //这个道具无法移动,跳过
; m p) h6 V1 D continue;
6 Y% ~ @9 m! i }
5 x. H4 o: Q# p2 K% W5 O* R5 s }else{
. K2 X3 \- w* m; r- m$ g7 D //空位置 不用动
; d% l! i' [0 w; i3 g, Z* x: B% l continue;
/ N& \" W0 k- s- X0 }& b2 B+ i5 w }
+ H$ H. X% h9 M* T //////////////////////////////////////////////////////////////////////////
l+ c/ q6 s# I //开始移动
s6 X8 d( b8 g' _ if (nSrc == nDestPos)
7 ^9 o5 z5 [/ Z6 R' k6 C {
r0 a: u. x6 O( C2 [ //原地不动
4 B. E7 {/ x3 e9 ~, A nDestPos++;7 k" s$ A( w- X
continue;' ^( P4 e1 l9 _* U! B0 |
}
. O/ _7 z! F4 k pInvSort->MoveItem(i,nDestPos);' S/ i6 D4 k! u6 Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ w+ ]4 N& F+ U& v Sleep(5);
j. \% h+ B; }5 p //Error("移动 - %d->%d",nSrc,nDestPos);
5 f$ Y9 l% O7 K1 H nDestPos++;
6 ?: o$ X1 O* i) @ }, I# m" T7 B1 M# ?& S9 ]( Q
//取第一个元素的信息* X. d7 ?, Z6 N% a# D3 e
/** V2 ? ^( I; c) j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! k' N. t. p$ K! I& e1 Z
{
' {7 b( c6 ~* e6 T/ j: W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) @ c6 l) O0 K) l; y( M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- B* Q/ f) W4 O: R6 f; F9 F }7 ?! }" X) b9 |% e& v) }
*/, |( T' _" y: Q( F+ r* _& o
//////////////////////////////////////////////////////////////////////////
1 J' u" W8 N, u0 b' f0 o. O( q break;' Y3 w, f# h( g, J' w
}
1 [. ]. \% s# D8 S y8 b) A } - n) `7 R$ C* B. B6 V* u( ^
}
6 F# x1 a" B+ g2 p* |/ xm_wndMenu.SetVisible(FALSE);
. S7 x, n5 F7 t. L c- n0 O. G
$ T+ |0 v8 j$ {, L--------------------------------------------------------------------------------------------------------
$ y5 I; I" o- ^, F' ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* w) j+ g- h: T4 N6 }* U7 P{1 Q0 x. r4 `6 B% ^. O: k& k
BaseMouseCursor();
0 S; C. N* u7 G. ~ B% a# X' z6 b}
; w( C% `% F( D* I: k7 w: V在其下添加:9 y2 g: j4 Q+ d( L# `/ |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 {3 A; b: y) _, J( G
{; [3 x% O7 P7 ` x6 b/ d
m_wndMenu.DeleteAllMenu();
% g0 Z+ {! ]( Y$ s: d; H6 _3 Jm_wndMenu.CreateMenu(this);
- k) C; q7 s' u9 w* L: t& ~1 y/ wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. o7 a: M: C0 b7 s3 N# \8 @8 Y8 S% \
% q5 X" U" _5 I' R' q \2 q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): I& ]* X0 \9 @* t; m6 _% W
{
/ ]2 b e/ m' g. y3 Q+ ?5 [, @ //P以上级别才可以删除所有道具& k& d* g3 x2 L8 V2 p/ V/ }, {4 B5 K' i9 i8 t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ F+ w5 D( c) d8 k* [0 @5 e}
+ d+ j# O) H$ L( [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: Y0 f3 `3 Q( Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 u/ T- e! u# a; h
m_wndMenu.SetFocus();
/ z5 V* Z# h/ s+ D4 z- o3 [7 ^' d}- g+ e3 ~$ r5 Y# y; t+ v
------------------------------------------------------------------------------------------------------------
+ d- h& ]. r0 W( F8 K*************************
( W) r' k e) w* }( S! FWndField.h文件
4 \- O7 A0 U0 t8 [: L*************************
, R4 f( [9 b1 T% X e1 G搜索:BOOL m_bReport;
% j* u% w! u2 u# B* K1 f其后添加:
]5 S7 G: e8 y6 r8 z4 ACWndMenu m_wndMenu;
' }: |- M- B3 N* W1 E$ o* Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; U# W. J/ |# l a其后添加:4 R& K$ U5 `# c3 Y8 X0 b/ U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- F# `* T: Z4 l1 a0 O, O5 {9 b1 I5 Y7 ]' ?6 n
( {- m4 }& B1 y9 h |
|