|
|
源文件中_Interface文件夹下WndField.cpp文件
J/ X% a1 W+ k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 c# X v- o- j
2 t. H- G+ s' P
struct sItem
& V5 X: Z% _- j1 \9 _ C{
. x1 U& g2 R! J) vDWORD dwId;
+ o8 ~9 j0 N3 D8 D: B) KDWORD dwKind2;
) H* }7 r+ v2 m3 m7 g; c" V( h0 oDWORD dwItemId;
" e6 B! k8 B7 U0 Z: |' MBYTE nIndex;: S5 W4 O! y0 J- O" J+ Y
sItem(){
5 \. w! ~. @9 b; D! O dwId = dwKind2 = dwItemId = nIndex = 0;- V! ^( d0 h; f- |1 Y1 j; G7 ?. o/ H, I
}
/ T! F' ~1 Q( @8 h# W; B: gbool operator < (const sItem p2)
0 @8 r; V3 \4 O9 d1 }: y{
8 ~* d& ^" M9 k: R" u9 m( D% R4 I if (dwKind2 == p2.dwKind2)
# W2 p" v. F9 F1 B {& s: K2 E( M6 A) }; z; v% V
return dwItemId < p2.dwItemId;
3 i4 X# b/ W) S j: E! ~ }else{1 u# o/ v- I# |5 b: E
return dwKind2 < p2.dwKind2;
5 V; J! T3 O5 O; j) ] }
9 m, Y% K" [& R$ f+ s6 d}
* e$ l4 Y6 V6 i& w6 G( H};/ E8 Q1 J& `. L0 e0 g \% Z4 S8 `# s
class CInventorySort% c; l, v' V6 Y7 j) S
{
. t0 v( H t, B/ t- e% N D; w" Qpublic:- r' R; I+ c- M* J- V
CInventorySort()( N$ w2 N- U/ x. ^; l7 y" q- q) Y
{5 U0 m! h- n; d: ?0 A
m_dwPos = 0;+ c0 b0 ]" ~ i6 D5 X3 Z8 S2 n
}0 C1 A: \1 Z* }8 q/ T/ {$ t$ E- B
~CInventorySort(){}
6 B( o# {2 w9 ]3 h) `! X% Kprivate:. o+ r. K" j: B' t* V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ Y! b2 s+ c% M. l2 ?9 GDWORD m_dwPos;. l7 R+ p; ^4 A4 [& W9 ?
public:
6 W1 o% f, l, wvoid Add(BYTE nIndex)0 Y, Z0 t% E: k k2 V. s1 i
{' o9 P% Y6 n( U) A, H$ z! z
if (m_dwPos >= MAX_INVENTORY)0 ~6 P7 O4 I% j; {
{
3 A, A7 Y: y, b return;8 m+ M$ r( ]2 ~6 A
}0 O" W. W4 n" X5 r- Z& T/ H5 w
m_Item[m_dwPos].nIndex = nIndex;
9 s) [7 H( `; v0 o+ C. V m_Item[m_dwPos].dwId = m_dwPos;3 k; r G3 u! M9 M& s
m_dwPos++;
' S7 }* K- U- s7 w}
% g' \: M- U( y/ o z; PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" @( M' v( G/ g# }2 J+ ~{* e6 A0 ]- M3 e8 U% p3 k7 ?# J- z
for (int i=0;i<MAX_INVENTORY;i++)9 c7 B% ]; E+ g) J4 L
{% R# { h+ Q6 A# R) c9 _0 G- K
if (m_Item.dwId == dwId)( D: e7 V1 \* b* G2 G$ z$ x
{
- K+ m: w% r" V! S. U return m_Item.nIndex;$ ]2 B j% w0 w8 q( C
}) V3 K0 Y5 A+ c4 m
}
" @$ N+ E& [ t return 255;3 p0 `9 o- f0 h; R; E3 u
}+ `; }# ~" b6 v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- V6 N) @. F. D
{
1 k' l/ v l w4 \6 L4 G ]; {1 @ BYTE nTmp = 0;: t* b1 f, ]) u) {( A$ {) _
bool bDest = false,bSrc = false;) ~9 c9 E+ x x3 G* s& u
for (int i=0;i<MAX_INVENTORY;i++)
?4 K5 [+ P4 }1 X2 Q/ ~ {# i. R0 i0 f7 U) Q* H) F0 U. ]
if (dwSrcId == m_Item.dwId)( d/ x! ~1 j7 v( y% X1 v+ T/ M
{
& z4 [' s' d9 l/ z3 Q$ n //id相等 则 改变对应的dest和src: Y% O7 Y3 F- U
nTmp = m_Item.nIndex;+ \. x2 Y- h8 a V- m! C
m_Item.nIndex = dest;, v$ v4 g- H8 {, V f
}
+ C9 c* z8 J5 |4 B. W8 p }
% x; _; f) Q3 L# r% d( D //临时数据保存完毕,交换开始( C- b& k: e0 o+ r3 i
for (int i=0;i<MAX_INVENTORY;i++)! M$ v. ?) |9 Q6 O# ?+ Q
{
+ n8 f4 R/ t K# W* r' x if (dest == m_Item.nIndex)
! b* {" x& N% q9 h9 c {1 w4 y4 X3 e. U9 |- R/ |
//id相等 则 改变对应的dest和src( }% X! `' K3 m$ {6 ?5 c
m_Item.nIndex = nTmp; J# t* e+ q4 R7 p" _9 X
}
" F( q9 j7 M' X" |& m }+ A4 E3 W5 S& M3 \( S; g3 T8 w
}
# p& t6 G3 E) j( O9 V9 ]; X: C! l ~};
: i; h; I# I# l \/ L+ I( |-------------------------------------------------------------------------
- E* g* ^" {( P# C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- N: P8 p+ S% @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 ^. v: w7 h- I" g
紧靠其上添加:; v, s F2 i" |- A9 v/ }1 ?5 s
if( pWndBase == &m_wndMenu )0 n0 n4 x) v, Q* N. ]
{
$ C: r; H8 d! ]2 l. M' m, _0 `' g switch( nID )
. H' x& g& w2 Q" r {# u$ ?% Y( S' j* y0 A# V5 X
case 2:/ m+ m v4 w4 c9 d. _4 Q" v
{0 y+ r: S8 `* ?! V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 j( Z, J0 z6 A) E! g0 F' a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 m! g. Q3 x% Z! | {
$ |; g$ q$ A9 C3 t- {- X0 p break;
3 b; R) {2 B9 O9 B _3 @ }* o* j7 N4 P( k) E9 _
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- T* n2 _! i9 x* z1 j/ O3 V, ?+ M
{6 y6 w/ Z* ^( Q5 C3 K; K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' m! ]1 f+ j4 w3 D
if( !pItemElem )
( ? m: R# H" A" ? Z# }5 e1 E continue;
4 P* d/ }2 i- a if(pItemElem->GetExtra() > 0)
4 w0 F3 R5 F. F, x) \ continue;3 Q9 M* t0 F2 {; \+ u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 U# y, d" s3 x& Z. j! n8 Z
continue;! N9 k8 j! g2 O9 P/ l& |( L( k
if( g_pPlayer->IsUsing( pItemElem ) )) y9 r/ b: A& f; y
continue;
& f- [# c1 s# z: v if( pItemElem->IsUndestructable() == TRUE )
: l: C; k) w$ \- u& z. n: } {
1 {) ^5 n0 C+ R( |; F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 H: s6 I& T3 x+ m+ V. o continue;- d% x" @5 `8 w f. q8 G7 j: h$ u
}& @; a6 P& `: J! f! z; ]
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ L) }0 k$ k H; @
}
& w) u2 k0 ]" G) n break;% ], l5 c7 K" q
}1 t, k8 q- H% M! O; M" I
case 1:
# H" _/ o% Y; H- y- {% ]4 Y n- A A {4 b% k2 h( E$ ^( L! k; j' _% C
//整理背包* j! b; O# V, ? B3 @
//////////////////////////////////////////////////////////////////////////3 X2 [% s5 D8 G# F" G0 c P" i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% u X5 r' B( @5 c( Y) X
//////////////////////////////////////////////////////////////////////////
! S" X/ J2 N7 D& \3 X% I //////////////////////////////////////////////////////////////////////////
; X1 |% t- c* N( }# U: V% R CInventorySort* pInvSort = new CInventorySort;. M! f! ^3 f5 E9 J3 n- C
vector <sItem> vItem;: R/ }; s/ N5 \( C; ^
vItem.resize(MAX_INVENTORY);//初始化大小# l- c8 M$ s5 j' F$ E% r+ \
//////////////////////////////////////////////////////////////////////////
' d" \: g* P# [% t% M //填充数据. `. |: v9 G5 {1 }- V2 @" B: F
for (int i=0;i<MAX_INVENTORY;i++)" d. M; t9 G6 i, G
{1 G. @/ a# |6 E r- H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ C+ L3 x, f/ E/ w7 F2 v
if (!pItemElem): \9 a- `- [# J* p! c! x8 y; y; Z
{# K2 v2 U7 K2 q; I, H
vItem.dwKind2 = 0xffffffff;( u- P! O8 j# \
vItem.dwItemId = 0xffffffff;, E( ~, U) R! ]- {) q' N
vItem.nIndex = i;# U- @9 S+ ?6 l0 v* _/ B" A
}else {
, V$ F6 y7 n: T7 ^; O- o6 S! \ ItemProp* pProp = pItemElem->GetProp();
. G) y: V4 J* d6 D" i vItem.dwKind2 = pProp->dwItemKind2;) y- ~0 `, V* Q; I
vItem.dwItemId = pItemElem->m_dwItemId;8 J g3 i+ `7 `6 z7 K$ T/ b
vItem.nIndex = i;5 K! p9 j- F9 Z) \6 b$ |9 d/ q0 [
}9 g }; N* ^: g$ t' o
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 \% F" P s5 x5 }: Q$ M+ V }+ A F8 Z0 C4 {" F$ O1 h
//////////////////////////////////////////////////////////////////////////1 g0 B1 G; {: \, Y" M% }
sort(vItem.begin(),vItem.end());//排序& ?5 L- u" X7 X
//////////////////////////////////////////////////////////////////////////
/ @! G3 k2 |5 K& X) a! ] //交换
/ \6 z, }; k. B$ F* [. J for (size_t i=0;i<vItem.size();i++). ] a5 q8 S4 `6 ?# r! c; B
{" a! M1 d* I0 _) ^* X4 V% t$ b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ D1 {7 q, R1 S4 g pInvSort->Add(vItem.nIndex);5 h: |( ?, o5 }) F, _8 k: r( {$ K
}1 q% E6 ~- n0 L, H5 B$ ^
BYTE nDestPos = 0;
) n" b" X1 J; U' ^2 K( a for (int i=0;i<MAX_INVENTORY;i++)
; U) q. A9 c* ?& C {2 Z5 J% o1 q: d% g* S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 a2 e3 i1 }8 e2 e" z% ?
if (pItemElem)% Y7 g. g% V8 ^
{- s3 P/ n3 \2 ~' N8 c% K
if (IsUsingItem(pItemElem))
/ N3 L8 q! b3 s6 L( e, {% N U {6 J) A/ ?0 a% y# r) w
//这个位置无法放) B# a( M) ?: N% y8 \
nDestPos++;
4 w3 X9 Y: `0 C/ g9 k8 x& e, M2 _ }
; K; w- h e$ y+ j" z# v5 k }
8 s3 ]4 ?- P( Y* J' U. f5 ? BYTE nSrc = pInvSort->GetItemSrc(i);3 z! i3 C8 F# f8 Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 x# T+ M% d* K if (pItemElem)0 X0 M. t4 [; w* ?
{ V, y* Y( H) h" j5 F1 | c
if (IsUsingItem(pItemElem)), q& | n- |; B
{
& y m, [1 O. B: E7 t7 J6 h, v //这个道具无法移动,跳过
3 w' r% s0 m- B; W continue;
0 a3 @; t1 c3 I1 W2 g3 Q, I# H }. [+ j$ C( j0 O. H5 h7 G" ^ m
}else{& O. {) ?* b0 {& Y6 O {5 g
//空位置 不用动2 x+ I" ^! ~5 p5 ^
continue;+ a( p$ c3 y* g" \" Q
}
' q0 R- Z, ?$ T! b) ^' K //////////////////////////////////////////////////////////////////////////
+ |: C, J% |2 H+ y% J+ H. G //开始移动" r7 y" c* @( ~+ F) p
if (nSrc == nDestPos)
9 a* O, z: [6 o( |# a6 o {' Z1 m8 K- C' ^+ k6 Z/ n& R
//原地不动
0 Q# O" ^8 h% p* Q+ m/ o7 r, t' N nDestPos++;
4 v2 D8 H; x- {. N/ C* P continue;
9 h+ I9 a! e( k B" p8 R }5 P+ ~2 _) A, B0 Z. q; K, r/ [6 j
pInvSort->MoveItem(i,nDestPos);
. `$ }) ` P8 d) g g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 `! C" _; w4 g6 o9 l0 p( t Sleep(5);' B' e6 z( Z. I& p9 W
//Error("移动 - %d->%d",nSrc,nDestPos);
1 y: T7 n" [ m' g8 [ nDestPos++;
' k [8 M4 e4 R }% f+ Q1 @: W: b$ H. c6 T
//取第一个元素的信息
9 S4 _" \5 D$ `% q7 z/ { /*
O- p4 P8 l- p' M2 j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 _3 [- J9 I8 b3 I8 z {% V D1 E# m$ [. k2 D6 w5 }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" K* Z3 G$ N0 y0 V: W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 \9 o/ z$ o# \1 N# |& b
}7 N' w$ B; h6 {8 f
*/
7 N( w+ F) C5 O //////////////////////////////////////////////////////////////////////////9 h9 O: I5 c7 e- D/ L/ p2 ~3 c7 X
break;
8 Q W+ p" \1 V% q. L/ x }+ ?& I/ F2 V$ {- }
} 2 o" N# ^: e1 s6 V7 n% J5 }4 B
}+ s7 M. h% z6 T/ a' S8 C
m_wndMenu.SetVisible(FALSE);
; p2 B. Z- Z. m* a u* f
( O6 B: s' h9 _% g6 b--------------------------------------------------------------------------------------------------------
# B! F3 x( s" J( J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# {3 ]6 ?' h, h+ q% y' G. U) S{, P) n* ~* J& S
BaseMouseCursor();
6 q# r2 S' }2 E, U5 m}
% w4 C$ X' c8 k8 T, I在其下添加:
( c& v$ v. l% N9 K, n. H5 |% ]! ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). _1 ~: o: a. s& v# ]' V4 v0 i
{* S# A& E! x3 k9 x% j+ R
m_wndMenu.DeleteAllMenu();
! z1 Y# R, w$ m7 L6 zm_wndMenu.CreateMenu(this);
7 }' e7 N' D9 y5 H' n7 @+ Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 c' c( x% t9 H2 |! R8 K
' u, @+ k3 U% C. Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) E' S, e9 y! ]& J6 s0 r. J- q* {
{. o2 `' W' P6 u) u8 c: D
//P以上级别才可以删除所有道具 \ {1 w* Z: X" L2 i. D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); g% z: a& m+ y( z) a; O" p
}
5 g( a$ r; g" p: t" F* q5 Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, }2 B2 c% o2 I2 t8 m! i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 [7 J& G9 ]' ?7 ^0 ]4 o1 T' Y
m_wndMenu.SetFocus();
( v j8 F0 P1 A! v5 T S1 W6 G0 n& F}
* l$ n# M+ V* |& M* s/ H------------------------------------------------------------------------------------------------------------
' L3 y+ z% J; _9 q3 @0 d*************************
U. ^1 \- S$ a+ lWndField.h文件0 w5 ]5 A b& i8 h# c/ l
*************************
' P, n' c5 B$ O% d9 ]4 z( V搜索:BOOL m_bReport;
, @& B- d/ A: F2 d# `( ^+ { N其后添加:. N$ L) B; |* M
CWndMenu m_wndMenu;
' }/ V: C3 l+ Y% V- V+ m0 j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ D; l* F5 W% y0 ]6 V其后添加:
' W" ?: H% q/ j) Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);* r% e0 r! E, [: z" l6 a) C
9 y# g& u- M, ^& k# N
5 @/ N( T$ g6 x |
|