|
|
源文件中_Interface文件夹下WndField.cpp文件1 V2 o* j* B" }' Z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( K3 m+ U7 o* Y! d( Z
- x0 u# K& q3 Bstruct sItem8 g( ~9 A! A1 H( q/ h' n+ E
{6 P$ m# ]- G% g1 @4 }
DWORD dwId;
6 j& W1 B0 Y; L- f- R1 n, vDWORD dwKind2;
/ l/ B/ o% V( @7 n- q. rDWORD dwItemId;
: U9 O9 F' @& y1 w W# l. T$ I/ mBYTE nIndex;
6 N+ t* A. C$ NsItem(){; D5 \9 c1 o' m# b
dwId = dwKind2 = dwItemId = nIndex = 0;
: }1 m: A, w9 V8 t8 L( N9 `' b}
) \1 q4 n7 U" W5 ^- ]6 B# T. o3 Tbool operator < (const sItem p2)
$ r' f5 e- o9 B- u9 y{2 }% j. e& @% G) W7 e4 ^$ X
if (dwKind2 == p2.dwKind2)
( j. g2 O; {8 u8 h' z, T/ c$ N( [ {
. I5 Z7 u5 ]$ c+ L/ N$ |1 ]) R return dwItemId < p2.dwItemId;
! M2 x* l5 b( {! `8 A& x }else{+ W& i9 Z& m$ k
return dwKind2 < p2.dwKind2;
0 f" F' |. [ b- i }
* r3 } F+ K+ ^6 p}* N& Y8 @& } n! }* n4 @
};
8 ]1 v) W# [* mclass CInventorySort, ~0 u- o4 u7 L4 t# W# x6 _
{+ u) i( ?9 h- Z' | i3 |
public:
" q+ {2 c3 ?0 e8 l& @1 MCInventorySort()
0 m6 N+ @% ]' J$ g- _{$ g9 J6 m4 T, S- y: G( {4 m+ Y
m_dwPos = 0;/ p( c6 D. |. d$ D T+ B2 G
}
d* s" L) ~; S: z# o~CInventorySort(){}5 N4 ]* y- l7 D8 o6 N3 h
private:
" Z( O# }; U0 F9 |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
m0 T' n8 A7 C( z: CDWORD m_dwPos;/ p% r' ?. ~+ w% p9 q8 s+ j
public:
1 x& V6 K6 R5 x# q/ }void Add(BYTE nIndex)
! R8 [' w$ A- m2 f& ], D3 k9 V{) Y* k. c9 B# y6 k
if (m_dwPos >= MAX_INVENTORY)
3 [; ^" M5 B4 m( M; m0 r& \8 v# K {
# K; j% w7 H+ g' M& e) t7 v return;
0 e6 v$ o0 i8 Y" l# h }
" h7 b" o4 F% {) n. C m_Item[m_dwPos].nIndex = nIndex;9 q* A: R; X6 p0 _! ^
m_Item[m_dwPos].dwId = m_dwPos;
" t7 _4 U5 o! c2 G: y* j' v m_dwPos++;' t$ F7 ^1 D+ x! G: c3 N
}
' L$ v( s4 q$ c$ j* x, o6 rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ q* P) r0 {$ b g
{' |' e7 ?& M3 C, F7 L# |7 e5 l+ B3 t
for (int i=0;i<MAX_INVENTORY;i++); i0 }) d0 U6 x1 |$ z5 T
{$ X& I1 o- d* V" C
if (m_Item.dwId == dwId)! B$ S; Q, k1 x+ u9 d( L. c L
{0 q* R/ [' k; t, H8 g: Q3 G
return m_Item.nIndex;. k* w: r* c7 g( E5 c
}7 p1 @ f/ R" }
}
+ e r2 k; r/ E$ l. p1 y4 L5 p$ C return 255;
& M: m) n3 E/ f$ P$ t1 R}7 \- a4 c5 _: s, m4 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% u4 c9 L0 L! @- h9 z9 t' a4 N
{
) B4 X/ G, J# j. [ BYTE nTmp = 0;
; T: f/ b" i2 V- `+ M bool bDest = false,bSrc = false;2 v: L: F. f" N2 O" i; V+ H
for (int i=0;i<MAX_INVENTORY;i++). Y4 @/ L2 t1 P; d
{. U! d$ N1 ?* S9 A
if (dwSrcId == m_Item.dwId)/ t2 w0 J+ h/ D2 N' `" l u) s# i0 m
{
9 O" g- Q2 P' w* p q% \9 I //id相等 则 改变对应的dest和src8 E$ Q, f( G( F! R
nTmp = m_Item.nIndex;6 s+ o$ }/ n5 k8 ?* f0 J$ t4 a6 i7 ?
m_Item.nIndex = dest;
( {7 D" @1 \$ ^. |' \ }
$ Y* @& h% R; w3 u }
/ }" m! [: f& ^" I! S //临时数据保存完毕,交换开始9 p( j8 f6 ~! P1 P
for (int i=0;i<MAX_INVENTORY;i++)6 e* z* B6 H1 V/ _
{7 u0 Z' f3 X6 O2 A2 t7 q' m# X
if (dest == m_Item.nIndex)0 T/ L% Y; R/ c% m/ T
{
, t+ C; D3 G0 T* s- k //id相等 则 改变对应的dest和src
1 f# E2 }5 o. s! R4 N/ y0 b m_Item.nIndex = nTmp;5 E! \* T1 V% s( x: N" G
}
4 K+ r& m, Z% a- e9 b }
8 R7 O( w" t1 M: Q; Y}
1 y0 T" v4 L. l* L, J$ z};* n0 |) q' r# k# _
-------------------------------------------------------------------------
$ x* u6 p) m1 w( @$ c! B依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# _% g: z) A/ W4 \6 g$ u9 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! U" X( {( I8 [2 X4 | K- l0 F, A- g, Q
紧靠其上添加:0 S5 q: c5 H3 b; d6 m
if( pWndBase == &m_wndMenu )! W: T0 _* W) m0 B C3 S
{! l( P6 L& ^( Z, @* `# j0 R5 @$ z
switch( nID )
X, I! D E, g/ ^. K* ~$ Z* m {
! ^' t* \4 }, ? O% p9 M" Y case 2:
" |1 f b1 o4 ^2 ] {
7 T1 I0 A9 l1 `0 P/ E0 h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 | ?5 i; \6 J( L# I3 {, |* W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% p. Q7 l0 T9 L* @
{
! Y& N/ p1 K' |( B r) Q break;! \, I+ i7 _6 f
}1 b. ~4 \# g; d0 J; M
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" b" l* B# k2 R% y- q1 [0 d {1 x) N4 D4 l) X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 N$ F! F/ h3 ? if( !pItemElem ). Z* L3 s7 V/ f. T' n. Q! u, ]; Z7 R
continue;) r! U, ]$ n2 Q7 x2 E
if(pItemElem->GetExtra() > 0)
) |* x% Z3 m+ Z% Q" k continue;9 Z x d: Q) j( D9 m" E2 S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 e5 L3 n" B5 K4 r continue;
) N3 ?2 i0 i s. ~! I: U9 P# w" M if( g_pPlayer->IsUsing( pItemElem ) )
! i, r Y, G9 c& ~7 x continue; T/ a$ Q I& p8 B: F& p6 P
if( pItemElem->IsUndestructable() == TRUE )
9 W4 e# X5 L/ }* G3 M0 B3 R- j {
/ o% B7 F! A" c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# g' t. ^6 X0 N+ Q6 N! k
continue;
& h0 ]0 s- L% r# X; R& P2 { }
5 F: r, b% l Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% U& ^. [2 R$ A( W }
2 p$ ~4 c; ~; W! u break;
! |- ^; a; ^$ u$ R' q+ M; M }- j; F- V% F/ h$ _
case 1:: R" l( d. S. A$ z0 G* P6 y
{0 c7 k$ S! A0 q. j
//整理背包" U+ i+ L* K1 _) |1 z$ @% e
//////////////////////////////////////////////////////////////////////////
: C' d. i1 @, T0 N8 s( E6 x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 U6 t! _8 Y$ h //////////////////////////////////////////////////////////////////////////
& G$ k4 g* Z8 ? O3 K7 b2 Q //////////////////////////////////////////////////////////////////////////
, j2 B8 J9 E" M) n: O9 X$ u- H: E CInventorySort* pInvSort = new CInventorySort;8 t8 Q7 ]: m! [0 ^' v/ D
vector <sItem> vItem;* C, t" F$ p5 @9 P
vItem.resize(MAX_INVENTORY);//初始化大小8 Z* O' ~& a+ `% x
//////////////////////////////////////////////////////////////////////////
" q. Z& M. h' o! H5 f7 M4 S, C! } //填充数据( n1 s' M4 e: f8 c
for (int i=0;i<MAX_INVENTORY;i++) O' \" ?- H# `& Z. u9 f
{* v6 ]" O; u3 u6 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ c2 J( B v @: t& y4 [ if (!pItemElem)
* |7 A! c3 t+ p' t" k { {$ f x( f& n0 @' @5 W
vItem.dwKind2 = 0xffffffff; q9 X H4 `9 N
vItem.dwItemId = 0xffffffff;
: Q$ M8 I2 W* W4 p# Y vItem.nIndex = i;
. ?/ O8 @; n9 K" A" G! Q" ^- W }else {/ y/ f+ ]3 x# z8 X' X5 \
ItemProp* pProp = pItemElem->GetProp();
9 O: ^& Z0 Y8 _7 j' @. ]7 t4 ` vItem.dwKind2 = pProp->dwItemKind2;4 F- {( }& I) p. f+ \* s# b
vItem.dwItemId = pItemElem->m_dwItemId;
6 e/ S7 k2 C' u" X& i% Q1 r vItem.nIndex = i;
4 ^) y$ W6 s3 ? b* h. ~: ] }+ q- u$ s8 z- B- r' {' Y+ B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. f" [, ]# m6 f; C0 h- r }
+ I* \) v& T$ i2 T8 O //////////////////////////////////////////////////////////////////////////4 i, i! @: w4 [% O5 h* s
sort(vItem.begin(),vItem.end());//排序
" a: z, U3 J8 r$ Q //////////////////////////////////////////////////////////////////////////
) Q. _. _' Q4 j1 E$ V- ?+ w. T //交换) u* L) Y: w' w7 E
for (size_t i=0;i<vItem.size();i++)/ @9 C X; n, }* {
{
; g; a0 O# L2 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ C5 I# |0 c: _1 S, Z
pInvSort->Add(vItem.nIndex);3 i* O5 x: }7 B5 ]% W. v2 _
}! R7 `" {8 V7 ~% P( Y
BYTE nDestPos = 0;6 m0 c/ w4 r, W4 H
for (int i=0;i<MAX_INVENTORY;i++)! k& w" u/ r% d& W) [
{0 K( _; Y6 s0 N5 O. I. \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. k! a' S1 T" b) B6 h& a* i if (pItemElem)
7 a; h& b o' F! v& a {
8 b5 p5 q+ J1 t3 N2 y. L if (IsUsingItem(pItemElem))1 R* O/ b; r" f6 g2 k9 [" v
{+ U4 ]3 _* P$ u6 c' P
//这个位置无法放
' v; R; k# B! K" e1 A% q nDestPos++;
( U/ }% P: }: h4 D) F2 b) Y% `* ~ }
& ?; G) \# O6 |6 S4 ] }
# Q* m) }3 d- v/ p BYTE nSrc = pInvSort->GetItemSrc(i);: D- t# L/ ^) s" ]9 J
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ c& W2 H, w/ l
if (pItemElem)& b( \4 M8 R4 T
{
# Q8 {2 H5 O. P5 i+ |9 c' C* X/ i if (IsUsingItem(pItemElem))1 R3 g) u5 l/ t; d b% q, W. X+ I2 D
{1 Q2 z$ y/ S" \! a
//这个道具无法移动,跳过
) y9 v& Q( C/ i" ^ continue; u* S P9 o: Q- z
}5 L$ [+ G6 D! c. q! J' _' S
}else{& H: `5 f8 w: g( c1 r
//空位置 不用动6 J" s' Q2 X$ K) q9 ^& J
continue;, ~, t0 B4 D. R$ n8 x# s* J
}
9 k; x3 l) \* X4 @/ d, |, U/ J //////////////////////////////////////////////////////////////////////////
) x$ j1 [% o5 Z5 J. d //开始移动, r# q. a! @/ F, u) m' S5 O% v
if (nSrc == nDestPos)
, b& h8 P7 s0 u q' ?4 Z {* x# x+ k; Q- @9 n1 V
//原地不动5 J+ ~+ t1 u' \3 Y% `2 I% L
nDestPos++;' A* e9 l- U3 ~: W4 n) v* G
continue;9 d b! b* m' K. ^8 @& l/ Y) w
}
) C$ G& o( K Z pInvSort->MoveItem(i,nDestPos);
% h/ L' Y2 F7 ^' O5 b# d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, j c1 k1 r3 Z# v# Q9 j Sleep(5);. r2 u' E# x7 U: Z& q
//Error("移动 - %d->%d",nSrc,nDestPos);3 A# _( _/ {5 |& P& Q
nDestPos++;
6 ^) J1 X) H# t+ d, K* _" r }! t9 u6 d) J" @# s! n7 v& Z
//取第一个元素的信息
8 `( T' |2 _' U /*
* ?; D9 L# j; ]5 E# ] if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* Q3 A% o8 {; B* U8 O, U% |3 t
{
E3 |( y7 J) [" e: C, q1 `1 w Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, _0 c, z/ r- {8 D: N
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" E+ N! J5 ?1 y8 _5 v; _: g$ A
}' n2 A* Z. b; i: m2 L: y
*/
7 V& c, L2 [4 X6 a# x //////////////////////////////////////////////////////////////////////////
. s( F& J; e. U; Y% j0 S break;9 V+ S' q% ~* g: U; x+ g$ N' }% Z
}' H7 J2 s) R8 }( y+ p5 R8 s
} + I5 s* Z; B7 |4 i" ]4 X) Y
}9 F+ {5 ]2 X( }" t- Z
m_wndMenu.SetVisible(FALSE);- B% A. U" N: ^6 N0 x$ j. T# c# y
d& I- N- ?9 e) K1 ~--------------------------------------------------------------------------------------------------------
3 e7 h9 N% O5 ]! f! f* v搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 g- b# z5 d5 N' a n
{- L9 i# f) J! S% O% K# _, U6 C
BaseMouseCursor();
: m$ I: e" A0 y- Z$ o$ [5 R3 D}9 }2 C. ^3 s% N/ g7 {- l
在其下添加:" O7 ]8 h2 G+ ~2 [% z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 j+ e, k. E5 a4 `* H z
{ u$ R5 V; D& ^) v
m_wndMenu.DeleteAllMenu();5 H7 D4 M5 n* G7 |- t' {3 s
m_wndMenu.CreateMenu(this);
% M5 H% D7 g' w; l% Am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 {( t" V0 I1 ~8 b5 m3 d2 _$ a; N* b/ a# {7 e2 D# r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): _5 g1 e+ b" ]# c
{8 p/ ]! v# T) w% T; d+ X1 x$ E5 f' k
//P以上级别才可以删除所有道具$ x$ S- V9 J, E g! \$ i
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) O/ k) Y- z- x7 k7 B
}
2 r6 |: c6 q- C/ C4 @4 Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. n" ?) w/ ~- ], c/ e x8 K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 r- o( u" I8 y: t$ [3 @3 p3 @
m_wndMenu.SetFocus();
2 D8 A) J; Y" ~' [4 K# d}
7 F" E& ?4 Q; X------------------------------------------------------------------------------------------------------------
) M1 B( E w, u, G. |*************************
1 J3 V1 ^) ?/ @1 A* @: t7 jWndField.h文件/ u* _, @5 ~% @2 l" `9 D
*************************, k6 @, o( L2 H
搜索:BOOL m_bReport;
' l) b7 R4 Y( v# j其后添加:
8 Z$ N1 r4 l- j! `+ JCWndMenu m_wndMenu;
& I! s' O0 _" e: ^: F% `$ O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# p5 f) L; N! g% N6 Y
其后添加:) C% `: w5 B$ i& I$ r; \' k" W3 F
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, |4 ~% C7 ^1 D, }5 Z2 O
0 `0 u4 Q; A; g' h: ^% O
6 X3 t+ X$ O* L4 b |
|