|
|
源文件中_Interface文件夹下WndField.cpp文件
) N. E! R& S+ S4 g f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' K6 q. d' C& o4 ]# n; a3 ?
( a( D+ e" D/ J3 Y8 T' y* w1 E3 f7 s7 R
struct sItem
4 k6 U6 G% P6 R4 Y, U& V! ~{
7 g. A; P H0 |6 I( P, | O Y$ }$ ^DWORD dwId;
Y$ s0 @' k4 _, Z4 ADWORD dwKind2;8 V7 T5 G+ I9 X& r0 d) B" x# A* Q
DWORD dwItemId;
0 u0 N0 A7 p0 Y' D7 W; TBYTE nIndex;
5 `1 N3 O4 t. x0 r! G/ O7 s5 N9 a* HsItem(){
# ^) N$ l) z2 X9 p8 B: i% Z% J" B dwId = dwKind2 = dwItemId = nIndex = 0;+ N/ d# a# S P; F" U# ]
}. N \2 z) ^ N1 M+ q' f
bool operator < (const sItem p2)
2 ]$ R+ L H$ [2 R" u) V# ^{
1 ~- Q% C, d) t2 ]/ B if (dwKind2 == p2.dwKind2)
7 z8 c# s5 `% k$ T$ a {" r; ~! j+ d3 R2 S& K
return dwItemId < p2.dwItemId;: }6 g9 r2 a. _# C& D) z+ \' U+ K
}else{
3 [: R7 j2 }+ W. g( n return dwKind2 < p2.dwKind2;
" z( g2 z( c3 N' F5 }0 ] }3 h5 T1 ^$ r) J
}
6 a# g1 b' ~, Q- u- I' z- f/ Q};
$ k: U M3 f! @9 H lclass CInventorySort
( W$ _$ U ]% d0 y: c{
7 s: g: H1 m4 L* P7 G1 xpublic:
) n" l7 X) x8 E7 h5 L* _CInventorySort()+ j6 m2 I+ c( w
{, D! _# J# c+ i, k9 a4 o Q
m_dwPos = 0;
0 n" ^" u3 v3 f- @ ?7 Q}
# p6 e8 X7 o& ^- T2 M~CInventorySort(){}
. W+ y5 f3 Z" E, U' |+ jprivate:
9 B+ i9 P5 |1 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 e% H" v0 x2 s6 IDWORD m_dwPos;
+ j* G6 m3 J/ r6 r, Cpublic:
. v' n2 e4 @. `: G- O1 }* {void Add(BYTE nIndex)4 B5 ~% d1 j- i( H/ ?4 Q5 P% x* i
{
1 f3 k" C3 s% o1 u' k* P9 x if (m_dwPos >= MAX_INVENTORY)
+ J/ }) Q* U2 k# e j {
% D. |' h% k# W( h* Q( i return;% ^% f' h E2 C
}3 V- `% P' b4 s* O2 _+ u
m_Item[m_dwPos].nIndex = nIndex;3 ]5 k D* O" I6 |6 A4 M
m_Item[m_dwPos].dwId = m_dwPos;8 h8 g# i5 e: m$ \( N
m_dwPos++; g, f9 G. }3 v( ?7 W9 U; d
}& p6 ~# `$ I7 u; n: M0 o+ x! m
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 @; ^1 P" a+ E, t2 ~3 ?4 K{
! K; \+ h3 c4 J- M for (int i=0;i<MAX_INVENTORY;i++)7 \) w8 v; i( c& ~( ]
{3 G2 H% T7 {1 Y+ d. `% u: o8 o% d) i. O
if (m_Item.dwId == dwId)) J9 }9 i: ~5 c; o) R+ _7 A$ i9 L
{8 p3 L( G$ q& P, j) n0 F" L
return m_Item.nIndex;
7 K, J1 S; O' D& p1 Z2 N* R& e) i }: e: j5 C* c2 w) k7 o4 g+ o% ?
}
- i9 w, N& D# g return 255;
) m# j1 I5 q. U7 \. s& Y' z}- p( `) @2 v+ Z, I' _0 Z1 n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 u1 N- `' r# W! _ d
{6 C8 Y" j* e: T
BYTE nTmp = 0;
* N0 W$ G" f2 B* c) I bool bDest = false,bSrc = false;& g# M0 {) O$ Z" e
for (int i=0;i<MAX_INVENTORY;i++)
+ F2 Q; d& @, i+ C {
+ ~/ D6 P: S) ~* Q if (dwSrcId == m_Item.dwId)0 m9 ^: u2 { _8 T ^3 A- G& f
{
6 l+ b5 `2 [+ F. N. N //id相等 则 改变对应的dest和src
: T; n8 N0 O% t6 t nTmp = m_Item.nIndex;$ e4 o1 H" Y+ N0 H( j0 T& `2 u
m_Item.nIndex = dest;. B- y! F' D. w) c* ^- d7 x! V
}/ h2 d6 p) l$ H J7 K9 W+ m* e
}
4 M$ @9 [7 I& B Y9 q$ H; r //临时数据保存完毕,交换开始5 W4 R& {( I$ @4 s) V/ O) q
for (int i=0;i<MAX_INVENTORY;i++)
% E) {# [2 ]9 o. h2 B; l {
" `7 ^+ x T! y6 y4 | if (dest == m_Item.nIndex)
: ~: _& G m& b! b' f* ` {
2 d/ k, f! v6 A4 [: `/ W //id相等 则 改变对应的dest和src
% s' x! C( u( I* r- U$ r1 ~ m_Item.nIndex = nTmp;+ x M3 \7 X6 f/ K0 q
}
" n+ C$ L0 ^0 n1 _" n, ^- [, L }
& Q$ ^- D2 u3 ^% J" t2 d}
4 a3 n8 f3 G% E2 r' p) Z) l};
$ p* o; A* b1 F( h/ i6 }' @-------------------------------------------------------------------------; ]- R8 D, D# ]. _* D C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 n9 ?2 W( O3 h* e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 D9 m. x7 L: O2 h; `! Y l( C) T
紧靠其上添加:. {' O' _$ j+ {+ `% O5 t6 h
if( pWndBase == &m_wndMenu )9 a5 z- [4 s9 u2 ^" A q
{1 S. Y g6 H4 h% ~$ M
switch( nID )
5 h* @9 s4 S1 }" B% u# S4 i {
3 p8 u0 ?) F7 _2 w0 _0 o case 2:
$ R: {1 v) q8 k$ i {
% A: D" e7 e; x! ~0 H. d( R; W( B4 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" r5 _9 } N! g4 V' @5 q }% y- @
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# R& m, `. `% Y* h" H3 n$ E {
. f1 h; K( [4 x& _; h break;
8 D* d: h( {8 W( {# P* g( L1 t }
* P5 \5 ^. x* | for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 [% k" s& z) r! H" M$ { {0 N8 M9 P1 d, F. ?, K" D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 H1 x7 ]. v9 |$ \1 q& u
if( !pItemElem )
' k6 L; u# a. I' A; S/ s continue;
1 x1 k0 {2 g0 ]; h if(pItemElem->GetExtra() > 0)
8 y; L' n. X! T T6 O% @ continue;
: C" Q; y" n$ H, u; J4 Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) n7 v' D' T! x, ~* x8 U% f
continue;
) i9 f; m" J0 M+ H6 d if( g_pPlayer->IsUsing( pItemElem ) )+ q, h: _8 A' `5 ?2 W; |$ M# b
continue;
2 F/ b, h( h* r if( pItemElem->IsUndestructable() == TRUE ): h' p: t7 _4 @) I6 C# L6 d
{9 a2 e% E& z3 M; t! \' I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& C( n9 u( |% Y7 ` continue;9 C# W- b) F s
}: M4 X+ ~: L: S$ R U. }7 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ y% X# n5 B: J- W) \6 @) R. L; G
}
( h5 Q9 O% \ P0 P! v I break;. _7 N8 O# Q2 X+ w& n- `0 V
}8 Q ]4 p# V; u! L/ ]" h; S
case 1:
0 e* L( ^& k$ E# g- h" G4 M {7 {) g* b( k- T1 L3 ^! S4 ^( F7 N
//整理背包
% g2 A! \7 } S5 U //////////////////////////////////////////////////////////////////////////
5 g$ @+ ]! i3 j: o/ h //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ ]( B; R$ d8 w1 Z8 v //////////////////////////////////////////////////////////////////////////1 J% b( C5 L5 B3 R; {1 u) b! S
//////////////////////////////////////////////////////////////////////////$ V+ U7 |5 w! `+ a, v
CInventorySort* pInvSort = new CInventorySort;
$ i3 _3 l; \+ l5 D; K- z+ J3 t vector <sItem> vItem;0 @/ s/ _# e7 P4 k, j/ {5 i
vItem.resize(MAX_INVENTORY);//初始化大小0 M N6 @3 _: s3 J
//////////////////////////////////////////////////////////////////////////2 t! y1 _8 ^; b7 ]
//填充数据# [! d+ ^1 I: k V" Q. m& @
for (int i=0;i<MAX_INVENTORY;i++)
7 R% }1 q3 _$ q! G: D3 }$ s7 F( G {8 d9 n" Q5 j7 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ T1 Y0 f. Y. l# d* C if (!pItemElem)
9 T9 {( I3 Y" \* R {
* F+ t. ~5 C/ ^5 N! L vItem.dwKind2 = 0xffffffff;1 p( ~8 F: o: x" K" U& G8 E9 i- k
vItem.dwItemId = 0xffffffff;
$ s3 ^: _* z& y2 @* J' b' Y. ]& l vItem.nIndex = i;
4 j" d( B, g, R5 ` }else {
: Q" j- x7 E+ y ]1 q4 p ItemProp* pProp = pItemElem->GetProp();2 v+ c2 @# z% {4 D/ b
vItem.dwKind2 = pProp->dwItemKind2;
1 {1 ]( U5 r" v9 S, v$ R vItem.dwItemId = pItemElem->m_dwItemId;
5 A& s, N; H) g7 Y Z2 ` vItem.nIndex = i;, ^+ {$ C% d+ h
}
7 F8 c4 R, U7 B2 E) s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 F, V/ Y# R( r7 [
}8 m7 s4 y( Q r- k* Q
//////////////////////////////////////////////////////////////////////////
3 m+ n8 ~1 e7 a. `" L sort(vItem.begin(),vItem.end());//排序
! V- N6 h* w* k! g //////////////////////////////////////////////////////////////////////////! D( o- U( T" x1 G7 J! Z, e
//交换4 P7 X% ~- ^" j; b/ F2 m
for (size_t i=0;i<vItem.size();i++)
* w0 J# e% c# J3 { {
7 G+ o W* |9 ~# B% l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); N# F) L8 O/ ?& \2 h7 f
pInvSort->Add(vItem.nIndex);
0 C4 r( L- ] U: H: M }
' Z1 s& X" D, L J0 H. S6 s BYTE nDestPos = 0;
d. ?, z1 `. M' Z3 j6 B: \2 @ for (int i=0;i<MAX_INVENTORY;i++)# @! h( n! t* G X3 A+ R$ `
{' @/ Z6 E# Z+ q0 ~: D! \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- ^1 m+ u% R& \2 W
if (pItemElem). z/ j3 N* F3 l. Y7 v4 P
{! E+ Y6 q6 k! c4 c/ X0 _
if (IsUsingItem(pItemElem))
. f. {/ O4 \& m; ] Z4 e {1 k( a- D. c0 G/ j8 h
//这个位置无法放
5 g. U( ^+ c: k- r) g! [ nDestPos++;, |% L0 l) `; a; Y) s# @
}
$ b) G, P0 X. } p }
$ j; E6 a4 ~& k8 C BYTE nSrc = pInvSort->GetItemSrc(i);: k9 y4 U1 o: u% g9 c3 e
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# ^- z( [& X" b
if (pItemElem)2 W9 K5 E: o4 X4 p# @% [* T7 |
{
- G7 _# Y% d: {: r" L if (IsUsingItem(pItemElem))
2 O3 J n( v q9 f9 s K {* E. c: k$ X+ k6 t# n Y3 {; B4 K+ \
//这个道具无法移动,跳过2 Z4 i- h( `( G6 Q" y$ I, }# d
continue;
. Y7 P- J) T) M8 `% K. L# h }
/ v; V& t4 g4 Y3 {4 g' u }else{" q# i6 {8 ], q& J4 {
//空位置 不用动& p0 x% V3 J3 }3 j6 u \% b
continue;" L& o* J: b$ l, f
}
" r" K$ [; c8 @ p* J; \) c9 C9 Y" n ////////////////////////////////////////////////////////////////////////// `3 s4 e1 w1 y9 o7 z( y; r* ^
//开始移动/ P3 j; A P3 q2 U/ j
if (nSrc == nDestPos)" T0 O' P) D7 |1 {4 G
{
0 h) B" |- { l/ K5 b5 s6 o6 F //原地不动
1 m Q3 I1 b" h) V1 j nDestPos++;
9 ^7 s2 T4 [% R! E continue;" |4 t0 i0 s3 F9 a2 o" w6 W
}
' h) l) a8 S5 V pInvSort->MoveItem(i,nDestPos);
8 X; ]8 K* k& ^ _; v' B) N g_DPlay.SendMoveItem(0,nSrc,nDestPos);( M+ x1 @: l3 _
Sleep(5);
6 h, Q N v U+ ~7 G' I P, Z //Error("移动 - %d->%d",nSrc,nDestPos);6 A% f; A) _5 b0 L" |3 t
nDestPos++;) k9 R) _9 c4 M3 I6 o; A5 e1 T
}
8 j3 A+ Q: \6 S7 I+ w | //取第一个元素的信息
- e" X9 i4 S" P1 Q% u /*; k: B' d$ t0 S6 r/ J" e
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 m0 W/ ^1 ^: B
{
3 u+ ], k0 E& U( |. O Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 j, e% U2 T0 i5 v+ P" } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 {/ |) `( M, [& n
}
4 z, J/ |" L; w8 ?, u1 I */5 h7 l- Q7 ]# R- ]" T1 Y2 n
//////////////////////////////////////////////////////////////////////////
" X9 c0 h% m2 U, j break;
* `5 E! ^1 o0 G N } o7 |% `+ E) A( o9 d* l4 S- r
}
6 u+ D" d9 b' w}! w0 T+ u$ W: C* e) y: ?* I: q, K
m_wndMenu.SetVisible(FALSE);( {( n. g% w2 h
* J7 D$ T/ w" H! [. I( _. S
--------------------------------------------------------------------------------------------------------
5 L7 y1 M' |1 M+ e9 g1 {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 P: R: r3 X! p7 p
{4 l+ ]& k& T' C7 c- b8 l+ F
BaseMouseCursor();
9 t/ S# X x1 p. J}
2 ]" r, Q! ^ {1 l. i3 N4 y在其下添加:
' j w( [7 p, c# x+ c9 K% B( \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, K- @3 G4 N2 t4 u{
# D. x+ B5 U# q& U. ]m_wndMenu.DeleteAllMenu();( A) d% g& M! y
m_wndMenu.CreateMenu(this);
$ j6 r _/ ~/ o ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ u; U4 q( I1 f+ P3 U- w9 A! P. f$ F+ V- r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, U/ q. |7 I& `+ @" e: E8 S6 g* j' m{
- M% L8 P, n6 D/ T3 e //P以上级别才可以删除所有道具
, E1 p! J: c- q! _0 { m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ y( Z- A# z9 g- l}
7 Q+ }7 }) E/ \8 P" v* xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! E0 v. ~& A$ V6 G9 P+ T6 [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 {6 ?: A9 F5 ^& H/ T% pm_wndMenu.SetFocus();. K* Y; s) `& {7 V2 x! W) B
}
9 X% k1 V% q, D; c; o------------------------------------------------------------------------------------------------------------
# Z: _, Q0 P* _ J+ D9 M7 S4 z% e*************************" r) j% W* G% ?% {
WndField.h文件4 N( ]; q7 V5 \7 E
*************************
6 j8 }; C- R! Y; `5 t( E搜索:BOOL m_bReport;* e1 }6 K% K+ h
其后添加:
8 t8 j( j9 B. d; U, NCWndMenu m_wndMenu;7 s8 O" r9 R$ F K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& A9 R5 B- |* p, r/ a; [其后添加:
# j) u5 w$ }6 s5 [) K) U( `+ lvirtual void OnRButtonUp(UINT nFlags, CPoint point);, s. s/ a9 @% j6 q! }
8 b, V) y( r1 z
' n2 l" s) L6 c# b; c
|
|