|
|
源文件中_Interface文件夹下WndField.cpp文件7 j# }. ^5 m- L% F! U8 a, _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
|, f; P9 a3 L4 _! j8 R! x; E
3 c7 T. X( [6 Rstruct sItem
% }9 r6 c. t) e' N; ^{
( X K' ]' w/ oDWORD dwId;" W* N- R5 w4 e$ t2 _" K0 l7 ?
DWORD dwKind2;
* I6 G; O( f3 d4 E5 ?/ ^DWORD dwItemId;9 R- j4 I8 l5 x. E/ j8 r4 e5 J
BYTE nIndex;
5 g0 I# z, k) `; K2 B! q* tsItem(){
1 |2 N/ B4 _- ]$ T( s* ^! S x dwId = dwKind2 = dwItemId = nIndex = 0;9 g# g: N) g: a) |
}
, ~: }4 {+ j8 ?7 gbool operator < (const sItem p2)9 i" Y# M9 \- ]% u
{7 A3 W& u. T; d, u; Z6 K% @
if (dwKind2 == p2.dwKind2)- F& K9 a4 a/ d% x& b
{
& R% [/ S+ ^# F2 S return dwItemId < p2.dwItemId;
+ |8 p P( B ~3 Q) w$ g4 S }else{
{) @! d! q% W return dwKind2 < p2.dwKind2;
% w- D8 i; a" z }
, }$ `# ?. O2 q. m}& O; O# z0 @% J
};
v/ g' J* B) \) nclass CInventorySort
& R9 k/ b# i6 g% E3 I{
: t: I3 y" h' T4 }' D) r4 p" epublic:
- K1 O/ Q: q! xCInventorySort()
0 a, C% h2 `1 f9 P, y- p9 a! N{1 ?" y5 V! u: o) v
m_dwPos = 0;
$ R1 t% O% t1 y: Z! f0 W}
# u) l5 H$ o! w6 @# p" g2 n~CInventorySort(){}
W2 R6 @) R9 Q' E$ W) c6 Cprivate:$ `( o& {; h% T) S3 \. |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 O) V: `0 s+ R. w) wDWORD m_dwPos;* l* k6 |, a5 @; H# q# F
public:
1 l/ [7 [+ Y; [. k7 Ivoid Add(BYTE nIndex), S3 g/ D1 g* [, n
{& q$ w! E* c0 K# [ s, i7 H
if (m_dwPos >= MAX_INVENTORY)
% `. V9 ]0 |7 K! y+ u {, r/ E1 f2 {6 G3 i: ^, c
return;
' k: F" m+ E2 i; ~ }
4 X& b; C, ?2 o3 k# d* j, J; n m_Item[m_dwPos].nIndex = nIndex;+ P' b3 y3 Z5 _$ X, G' B: o
m_Item[m_dwPos].dwId = m_dwPos;
. \8 b1 }6 k L3 i m_dwPos++;
) A1 x* }6 |: H4 C1 p" x}
+ f" L. `# z7 B! ]" X1 F/ wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 F; m7 M" }$ Q+ W
{
* L6 i) u8 U& e( g- Y, T) r \, ]1 X for (int i=0;i<MAX_INVENTORY;i++)
" q. |& y& h2 O* ?4 P& w- U {
% k0 j# |+ n4 C6 V8 S if (m_Item.dwId == dwId)
2 i8 I( z. ^4 Z! R$ ?: F {
$ E; C& Q3 Z, O; Z7 `5 g5 Z return m_Item.nIndex;. {) Z( h2 s. u3 [: p; }
}' B* Y' S: n, L5 O" F
}
" j4 v x- d& |+ B return 255;) w L( W$ A6 l+ i, r/ x2 @
}) a% N# U# ~/ l' H' V- t9 S+ |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: W% {7 c; T/ o8 i' q6 @1 {
{
6 z& g+ F. L& @4 { BYTE nTmp = 0;- S1 g9 k% K6 o! p# ?# O
bool bDest = false,bSrc = false;
v7 h1 ]! N$ g5 K for (int i=0;i<MAX_INVENTORY;i++)
3 M% t$ s# V% X/ @+ i2 D {3 w' l8 m; y$ q3 n! J3 k% n4 _
if (dwSrcId == m_Item.dwId) j: K1 E! L( Z/ e {3 X
{
: e/ M8 p, n' Z. O/ f& n+ f //id相等 则 改变对应的dest和src
* F7 \1 G' N' B* G0 l9 Z3 q) N nTmp = m_Item.nIndex;* \1 h) Y+ { n J/ I! D4 w; S
m_Item.nIndex = dest;
" e0 o' ^$ H9 d1 r/ E+ Y F# W }
; L7 B$ I/ H& |, e0 } E }
; S) |1 `( T! _% N& W6 p; m //临时数据保存完毕,交换开始8 N2 N$ S- I3 k- b
for (int i=0;i<MAX_INVENTORY;i++)) ~/ o! |5 f2 K- D& U7 b5 c
{
% o' _! U; L1 y1 y8 A if (dest == m_Item.nIndex)
% i6 ]3 @5 o- z3 L0 O$ P {$ B! o c( m8 i$ `. {0 M
//id相等 则 改变对应的dest和src" i, g. `9 Z0 D8 X: Y
m_Item.nIndex = nTmp;
. O7 y# Y0 v. F; G* [ l }
6 U- I1 {" \ a3 z4 c; t }$ @$ P; k! `- o4 O8 b7 M
}# ^/ j. r4 z! B
};
$ {: b7 {7 i/ \8 o* a( o-------------------------------------------------------------------------) K) U5 O/ l* m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ Q* G) q2 k9 L3 B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! Z! h, j: @* [# ?+ `, K3 {& ]* o紧靠其上添加:
- M3 `2 q) v' X9 b* @/ tif( pWndBase == &m_wndMenu )% r, |- T3 x- O2 Z- m! H
{
) v% M! m: \1 a switch( nID )
$ K: L, G9 [. r2 J9 k. l1 U( L {
+ Z2 a m5 z; b! b3 ]4 R case 2:; v! B. M. L# ~" O& ?3 F
{
/ ~( r3 B; N, d( B/ L8 H //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, X& }! R; m7 q* F5 ?- K+ L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ]3 S. X# H, K2 H- C& h
{
' l# J0 A2 I0 g break;0 K9 i' j6 }" K# e9 Y$ ~- ^$ W# o
}
& c. C; ~6 H8 ]1 M2 J0 z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 M6 V7 F s3 s6 i! S* D! @ {
4 O" t5 N. Q& O$ k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 b$ Q l! O7 F* u+ a
if( !pItemElem )
! @! C: L ?4 S: U' Z# s9 T continue;
0 M- d4 l; I* s if(pItemElem->GetExtra() > 0)# ]3 q; X+ n0 a2 r6 v6 ?) c
continue;7 x) G, B) x; J* c0 G/ A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " J2 [ U' \2 I
continue;" @* I# g( g% \) Y5 a% g
if( g_pPlayer->IsUsing( pItemElem ) )9 n' {) v" x3 h Q
continue;8 j% ]1 m4 M9 }1 k2 t9 y- W2 U
if( pItemElem->IsUndestructable() == TRUE )
4 R1 ]8 z* e+ g" R$ B {+ {# ^% q+ y5 o" z/ X: J
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 e% E/ s, Y, I7 C/ Y- q
continue;
2 S- S; v+ |9 a$ }6 s5 B4 Z }. a* c* S' t0 j. C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 q7 i3 q0 N: {7 F
}) a4 i: ~8 q8 x" l3 `3 s
break;
$ G' ^! _; f* q* Y: a# X }0 @8 B1 I C9 |' e% y* k
case 1:$ I, d& p3 s3 ]& W" Y: _
{' U0 y2 }" X8 Z! M7 f6 k- u
//整理背包! g, B# }# ?; x h; W
//////////////////////////////////////////////////////////////////////////
$ z0 \- _1 G7 U0 K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, G G5 [& }" A" e) n
//////////////////////////////////////////////////////////////////////////
) ?- {9 X8 m* c$ A# ]7 D //////////////////////////////////////////////////////////////////////////
; m; w& o+ B0 x0 i4 e; N4 g5 q CInventorySort* pInvSort = new CInventorySort;
1 U7 {5 e# c% |" M/ D, H) ?) W: [ vector <sItem> vItem;$ s3 T a' I6 F7 Y3 c3 _! h J
vItem.resize(MAX_INVENTORY);//初始化大小
5 ^ q8 @+ s$ a* F" D# p //////////////////////////////////////////////////////////////////////////
2 |$ w3 X+ N/ G, K* A' w6 C& { //填充数据/ F, v0 Z; q K2 Z4 S# |
for (int i=0;i<MAX_INVENTORY;i++); V9 ] S* M* [% f
{7 D( i5 \/ v" u6 N: }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) X- ^1 Y; L; A- G8 a0 N: l6 } if (!pItemElem)
0 }- \6 I& h! M2 z1 @# s {0 z% K U; I* b
vItem.dwKind2 = 0xffffffff;! }) n: K4 X$ I: n9 Q% X
vItem.dwItemId = 0xffffffff;
* P8 X$ s) t$ y$ y' U+ \0 Y vItem.nIndex = i;
+ z! X, y* V b6 ]# L7 J+ \ }else {
0 E" [4 g, \2 y! K7 A+ v3 _9 W) f ItemProp* pProp = pItemElem->GetProp();
4 M; l) O! D8 m! Z X( J8 L vItem.dwKind2 = pProp->dwItemKind2;
5 ?- G& c. q- t6 }4 A vItem.dwItemId = pItemElem->m_dwItemId;
" O' B+ P0 x+ k! i vItem.nIndex = i;
2 y$ h1 n! H/ l. K [0 p3 T! } }5 X: T6 a) x$ S& q0 @% S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ z. p. L2 ?- v) |
}
. n& P* ]3 ?, ^7 x //////////////////////////////////////////////////////////////////////////
& u& l6 p7 [* t: R- |* {4 H! X sort(vItem.begin(),vItem.end());//排序
1 m' q4 g2 o0 x! Y- w //////////////////////////////////////////////////////////////////////////- a) z' F( E) U, n! M" u; F* E
//交换
) I ~; _' T k1 A9 P# Z% l for (size_t i=0;i<vItem.size();i++)1 h8 }# X, v9 a7 g: d( ]( A0 H
{
& G/ S. g1 T$ b ] //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 \8 i, c4 Y9 C" R8 T3 `9 Y; z2 p% M pInvSort->Add(vItem.nIndex);; J, ^! M' z2 x/ J) `0 @$ v! U
}
) F. d- r% A2 L BYTE nDestPos = 0;
- F0 f B4 D' b: ~6 \. u for (int i=0;i<MAX_INVENTORY;i++)# I: ]6 q4 B# ~) K! M- L: X' B
{& n! U# s- V/ Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 \5 h5 r% O* _5 e R, z if (pItemElem)3 ?0 u: ^$ Z: k8 A8 J
{
- Z" j5 L: L0 f) |. D; \ if (IsUsingItem(pItemElem))! l6 h+ T) e1 I2 O: |
{# r5 V7 t; [! s$ h2 x/ v
//这个位置无法放" L* N* `4 N0 Z
nDestPos++;
; p, B, o0 @; x+ C. _7 H6 u }
! L1 e: Y9 h+ r }
# H" ^+ @5 _: r& u# e BYTE nSrc = pInvSort->GetItemSrc(i);8 r/ w2 e/ l5 k3 Y2 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 @& s Q, m. q- w
if (pItemElem)" n+ F% x9 S, |2 j
{
: c Z; z1 h" C" U if (IsUsingItem(pItemElem))
0 R* |; T2 H' @& B$ s( q" l# N {
! D) K( a; S0 ^2 i/ ?" p //这个道具无法移动,跳过3 `7 m+ `# ~8 z9 J
continue;
; h6 s. E& j: M8 m& J9 j' k/ I }; |0 b" \- R' A
}else{5 _ C6 ?" ?3 X
//空位置 不用动
0 K8 {- Q; ^+ j) S2 k6 z% m: G continue;2 M, v$ o1 n; o5 W- P
}
" \" B/ z1 n2 S //////////////////////////////////////////////////////////////////////////% C6 B, v6 n+ @+ @9 ?6 H
//开始移动
' p- e6 q2 G* V" }2 { K if (nSrc == nDestPos)' ~" |. E2 v$ B1 t+ V/ {
{$ S C" }2 W7 ~
//原地不动
* i8 l2 K% w1 }+ K0 n nDestPos++;
1 F y6 x* p5 a' k" {6 P8 a continue;
; K3 }) c; b5 X( f }
% ^ l3 }3 M9 M: c' d/ r pInvSort->MoveItem(i,nDestPos);
2 Q/ M- L9 a3 K1 Z9 P7 O1 v7 F0 N0 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 a8 ?2 d' ~$ p- f, F Sleep(5);) M5 P8 W; d, e4 j8 F J
//Error("移动 - %d->%d",nSrc,nDestPos); Y0 u0 p) i; z6 k' x
nDestPos++;; {" F8 j) i9 }/ U1 k# {' u& f2 c6 l5 ~
}+ M# f. T) w. Q. v( i0 ?0 l4 o
//取第一个元素的信息' e4 s& _0 g# l/ g
/*5 u* | d1 Q/ I/ h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 b7 Y; l o3 Z {: Q+ Q! Z7 @8 @* k e4 R2 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ D5 E6 l" n m8 y$ Y7 g1 J; }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" H5 g- D# Q: _' v3 r }7 V$ S7 p( H0 b3 x* y# e
*/
: G4 Q! Z9 B( g, {# ?, g //////////////////////////////////////////////////////////////////////////9 ~6 W% h8 t) }% ~7 R; u% U/ E
break;
9 D, w: n5 Q6 P }+ ^* A7 f" Z8 p+ O5 K% f
} - f. ^7 L, d: U3 r% s
}9 w2 F. E9 a) N( L) q3 ?
m_wndMenu.SetVisible(FALSE);
8 V% \: C. T% x( D2 ^3 V2 d( |( r) `4 \2 C3 `
--------------------------------------------------------------------------------------------------------
M5 G) d7 I8 E2 l- \5 s Z _- i- n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 r, s* J" Z0 O) l+ Q8 ~5 u4 {{
9 Y4 b! g% [7 f, f3 f" d0 \BaseMouseCursor();
. E: _. Q& y- {: p6 H}
0 a. b3 l. {" b, v( `+ Z在其下添加:
9 e' }5 C4 Q$ f- O, S8 {; q& bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 m/ |2 f o Y2 r
{) D) L8 z: r/ r( P" G
m_wndMenu.DeleteAllMenu(); L% v! F+ I8 h$ J* R
m_wndMenu.CreateMenu(this);
- T) b0 P9 l& x% A( m4 E. F2 Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 ?3 l! K" S( {" t6 R2 J- N/ z6 P# E+ d: x7 p5 k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& S' a' ]( I0 I+ e{- `$ I" M# s/ C( @4 `
//P以上级别才可以删除所有道具
. J D, v& `: r) a B h+ Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! l+ F+ ]" ?3 M7 r2 E
}- E/ N/ {. a2 G' k( r9 v+ i6 l! a6 ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 t+ M n2 T6 T" H6 h: z9 Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ N) n X0 g& A8 c. \m_wndMenu.SetFocus();7 I' G/ i5 x) e& C, n
}
9 A, F5 L& X0 F- U------------------------------------------------------------------------------------------------------------
/ R$ T. q* N: O4 b, `*************************5 C, W5 x* G6 S
WndField.h文件
8 Q; W9 {5 C) u& d7 I*************************
2 @! o% B: M! c7 V+ D0 @搜索:BOOL m_bReport;6 @* z8 o3 _% |3 B) I
其后添加:
3 G- Y4 ~' r O! s6 P8 \ GCWndMenu m_wndMenu;
# {) r/ H- r+ P0 k/ ~搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: a6 h$ h% {7 x其后添加:. s2 l" x7 j' P. X
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 V# Y3 s! Y( X7 |. f4 x0 W, }% M! Y) h
8 Y) h2 v w5 U% F$ j9 T2 a: k d
|
|