|
|
源文件中_Interface文件夹下WndField.cpp文件: x M. i) H0 N6 K( l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( t% u' |8 Q$ M. ^6 L4 |
j1 I/ a% b R" Y8 ^+ A( G
struct sItem: a" c) ]" b6 H# b0 N
{2 V0 g) U% _( @$ ]% I5 \% J3 F
DWORD dwId;) h' ]; [$ V% ^
DWORD dwKind2;
. d6 g/ }3 \8 v5 X9 {0 D2 j: UDWORD dwItemId;
$ z8 H3 o) v% v) l" L5 p+ dBYTE nIndex;
7 ? J7 s& }1 k0 i( O# ^; JsItem(){0 s1 n# `; R! ]3 H7 z' b: i8 s ~
dwId = dwKind2 = dwItemId = nIndex = 0;
1 i. ^5 u: R4 i}! M: G9 Y. f; L/ b
bool operator < (const sItem p2)
! b- ]! {- H4 C) i0 w{
5 n$ a4 G4 X4 w6 q if (dwKind2 == p2.dwKind2), y+ w0 b8 G! ~+ O# w; H
{
+ X6 |3 h! j3 s, o return dwItemId < p2.dwItemId;/ a7 } _0 v8 u2 X
}else{
' K" |, i" ]0 a& C% s5 r8 J return dwKind2 < p2.dwKind2;
0 V! @ R9 o$ Q4 t) a1 X' y }
- L9 l0 M3 |- Q( H}, r* g& J0 c6 s5 }# I
};
7 x8 M' Y5 o# ~ C% K" |class CInventorySort f3 w6 G& q: g
{+ W% m* D2 E0 @) G0 v I
public:+ z( p u6 F( X; X0 u; K7 `$ u) E
CInventorySort()
$ t ?6 G3 K! G8 n: }6 y+ K$ Z{
( A# R! g; L8 j9 s2 V+ S' @ m_dwPos = 0;
1 d; \# C& \, r E/ {4 P}
3 s$ o4 y+ S( y6 S8 q' K~CInventorySort(){} H% ]4 E# R9 e; r1 J( x
private:; c4 Y# \2 z, W+ O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- ?& X5 N& g. `- b* VDWORD m_dwPos;
4 K# ~* M$ g, Q- [! k5 z- @$ @+ Cpublic:/ W% u" o$ u, k$ F
void Add(BYTE nIndex)
( i8 a3 X! B& L2 e$ m* d{" A, C+ k# r3 o: V# C; v
if (m_dwPos >= MAX_INVENTORY)5 U: q% ^ T h/ z k {
{
% g! q J! h+ i9 O( R0 q1 F8 c) Z return;2 e- N% x! X( @$ g8 V/ @5 ^
}
( t7 J3 _. A( r m_Item[m_dwPos].nIndex = nIndex;$ k, s0 c' q4 c2 Y) o: ^
m_Item[m_dwPos].dwId = m_dwPos;& ~ O4 g3 }0 h9 `) ~
m_dwPos++;: ]; A3 `# s. u
}
- S$ {" J& ]( { G' H: S dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; Q/ b& e9 H- ?; f4 |8 H% t
{7 ?; Q6 h$ m( C, B5 Z* \! d6 L+ Q
for (int i=0;i<MAX_INVENTORY;i++)
# e6 O/ X( k( V, P7 o* E7 P! V$ G {" z! _* C+ O) I# \% N
if (m_Item.dwId == dwId)% |3 n2 z# U. ^
{ w! n, v. ^7 p8 m" r! H% X
return m_Item.nIndex;" V$ s8 X+ U, t5 G) u; x* R
}
" Z5 C; C3 K H' R1 z }% y- \5 _+ @! h
return 255;2 {9 \9 C. V& G" [) n, K
}
- G2 W% t0 L3 Q, n- [4 ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 V/ z9 I' y+ |! P+ H
{
& W5 P) C. t* G8 _- i' m3 C BYTE nTmp = 0;/ g5 |" q! h; x7 m9 B
bool bDest = false,bSrc = false;. b" q3 i' E+ h$ E. }
for (int i=0;i<MAX_INVENTORY;i++). u1 t6 q4 D- G' K
{
( M# d$ L: ?# C t2 X) E if (dwSrcId == m_Item.dwId)
" r) z7 {1 P, V' x, E! W* f {1 ^/ N, G& H; Z. L
//id相等 则 改变对应的dest和src/ s/ F! C9 B; h3 f+ l' E4 s; c
nTmp = m_Item.nIndex;
. O& R! X2 h7 F2 f m_Item.nIndex = dest;
+ J% A& O# h+ I/ E" u5 z7 O }
7 b7 L" x; S u# t( I: E- z }
8 q. d9 J0 q3 v5 v A //临时数据保存完毕,交换开始) R/ K; x- @3 z4 T
for (int i=0;i<MAX_INVENTORY;i++)
0 y; |" k) j3 c) N0 n# O+ e {
) `; `/ a7 b( h" l# Y if (dest == m_Item.nIndex)
8 Z6 P) H. r6 P# B {
+ x+ x6 I/ o+ C' H- e8 v0 t //id相等 则 改变对应的dest和src
2 v7 C" f+ x- ]- S2 j, u7 B3 j; P m_Item.nIndex = nTmp;2 h; `8 G9 ^$ [4 Q
}
5 H6 D3 X9 \* R1 i9 t# a }
* w# _, m+ T0 Y3 H}
( `" h& v9 [+ [- m$ d};% r# {- u2 d7 @6 p4 H- v8 a
-------------------------------------------------------------------------! d$ y4 `% |) h% Y% K) Y/ {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' I( H- B0 J. d0 X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: j9 ?( e% I6 i1 v, C+ x紧靠其上添加:0 n$ x1 \/ l+ P" i" n. w. M) A) s
if( pWndBase == &m_wndMenu )
7 O& u# Z* V, H{# m5 N0 a2 ]: C; _6 }
switch( nID )& t4 j U2 T: R& M: V8 w
{5 u, I; w9 v7 P* Z: k# \
case 2:2 H: z( @: y: |: ~, z* R4 c
{
- a8 b: X, k1 Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; F, `, K# R1 {) `+ T
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# L7 a0 o1 K& J% |0 }$ ? { ?, a6 D; g% Q: ?: } n" I
break;
7 S3 K, T( X* @# ~9 E$ F) ? }/ j f3 L( N3 _+ d
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ j/ p0 _" P" Y0 c
{$ O A* ?- b6 X# z2 m' a& V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& T2 h3 ~" s7 C' r/ _
if( !pItemElem )( n) @' Z9 @9 c) D& g
continue;
% q/ A" ^; c' t1 l2 j# [$ c if(pItemElem->GetExtra() > 0) h7 A1 Y! E" |2 M
continue;) |2 R3 E+ p$ \ a4 E
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " _- d! Z. k; N
continue;
. g# y- T/ C) x0 P if( g_pPlayer->IsUsing( pItemElem ) )
5 _2 I2 m% T& ] P: }, a; r continue;: ], Z' s5 o) |# J' }* Z
if( pItemElem->IsUndestructable() == TRUE )0 ~/ p0 q5 `9 v, Z8 E
{3 `) W4 G7 W8 D' `. \) o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 k" e( ^/ ]- u. x0 @: L8 L continue;
: V4 _+ h3 t; B }. p4 [; z9 \) v$ I9 D
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; y5 b' W$ Q$ C. A
}
! v" w, S+ n; X6 V/ Z/ C5 a break;
; k2 I# Z" h, E6 o9 n2 V" z }
4 K7 e) u G. j case 1:" Z0 z+ `2 z7 D) m3 o( D
{7 S8 _% Q4 Y5 x5 J. s# X: ]4 l
//整理背包
! r8 @1 i. m) H: w& }" @3 @ q7 t //////////////////////////////////////////////////////////////////////////. u6 `- h' D" h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ c; ^/ C- Y7 |& T- j //////////////////////////////////////////////////////////////////////////; N% Z' I3 t3 V" g% T1 |/ P0 B8 O, m
//////////////////////////////////////////////////////////////////////////
! C7 Z8 i+ j4 o CInventorySort* pInvSort = new CInventorySort;% H4 s0 q. V9 P, |7 k& p
vector <sItem> vItem;
) O) O* @% ], p% k4 Z: W3 W vItem.resize(MAX_INVENTORY);//初始化大小0 }3 Q8 O& L2 D% b, x
//////////////////////////////////////////////////////////////////////////
) q9 C1 P! i+ F9 }0 v, o //填充数据
2 h3 s4 ^0 E i! j for (int i=0;i<MAX_INVENTORY;i++)
' c. N3 i* V9 Y" U$ I {6 \# g" `$ l0 N1 a# r: M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 S. T3 e, v2 M9 b
if (!pItemElem)
. _, m9 i1 p3 h! Q" e2 I {
$ ?+ n& X: S) V; ]9 \ vItem.dwKind2 = 0xffffffff;( H( [" g1 ^% F5 W& W+ x
vItem.dwItemId = 0xffffffff;: Y9 [1 ?5 @& ]+ P# R
vItem.nIndex = i;
# g' @& u& q2 O }else {
2 r, s' @7 {# c* W7 V& m5 |- e ItemProp* pProp = pItemElem->GetProp();6 b R- b" i" i2 C
vItem.dwKind2 = pProp->dwItemKind2;
: K! U, x* y k6 \' g8 i) t# ` vItem.dwItemId = pItemElem->m_dwItemId;, m- [; R* T- w+ Y6 t! h
vItem.nIndex = i;
% r1 Z5 ^0 o. m$ p0 e! }- j5 j3 z( F }
$ [8 |! q! l! q3 z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 h" @' J$ O Y6 p4 K }
0 {) ~* l1 ?' W8 J) p8 ?# K+ D //////////////////////////////////////////////////////////////////////////& S4 Y2 S- @2 s6 W/ i9 c
sort(vItem.begin(),vItem.end());//排序( d5 \# R6 C& S# Y2 [7 W
//////////////////////////////////////////////////////////////////////////' C8 E& {. p2 P, T+ o* Q8 `
//交换
8 \2 ]. H9 k0 C2 S; x/ ? for (size_t i=0;i<vItem.size();i++)* H0 \& m5 Y1 w+ Q/ f9 J8 n8 z
{
8 b/ o* u, s6 \1 d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: ^. _9 @5 S/ L- W; \' {+ V pInvSort->Add(vItem.nIndex);) z, \9 B, c/ T+ y/ J2 X, V3 x, r
}7 C+ I+ z) a+ G3 g) B! n9 ^0 Z
BYTE nDestPos = 0;& [% m' |5 M" u9 Z
for (int i=0;i<MAX_INVENTORY;i++)+ n# L1 t3 w' ^( b+ p
{% P) Z- C; U) m# d6 Y& J- `( T5 D6 w+ T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- w4 p; m# p& P0 Q; S
if (pItemElem)
9 T. h" U1 O1 r( A3 ?* N! _ {# l2 `. [0 m, D1 u W$ Y: r
if (IsUsingItem(pItemElem))1 ^3 g" S$ Y: ~3 p: W2 \. y3 A0 A
{: i1 \1 N! R& Q2 T* @
//这个位置无法放
" e" y8 V& X; p# @4 A( o( D: A nDestPos++;0 ~. I7 }7 _; d1 o6 F
}
, b6 k$ K% V1 @4 j" W }# b6 s8 u1 w7 d0 {# { l
BYTE nSrc = pInvSort->GetItemSrc(i);- f9 U0 K2 h0 C7 K9 J( a3 G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# j$ R( B) h- C f* b) I) X" w2 A if (pItemElem)3 a1 D: z# A" R' _5 e' R+ r
{
0 s* ? M9 ?# \9 m$ m% V if (IsUsingItem(pItemElem))
" z) j) V8 F3 }( v6 F4 Q* I7 o9 f! ] {7 `+ Z3 q- s/ g7 X* T
//这个道具无法移动,跳过8 b' U% ]. ^/ i' w. {6 f, g
continue;( s! Z' z- I9 Q7 z- h% Q' U' }& n
}
) p8 W4 ]% J0 K+ N: j- t }else{& R3 N- t9 ?4 m3 s; u1 p( _
//空位置 不用动
1 d. X8 e4 l# g/ d4 b1 f4 F continue;0 T# f9 b X, I$ w s p' X p% C- T
}: k" E( K4 L, i. u
//////////////////////////////////////////////////////////////////////////2 G- x( j: V1 _% V1 N, [% ]& R$ p
//开始移动# p& g3 }' {# @1 @7 U
if (nSrc == nDestPos)( T. } V0 y# n" L/ Q
{
- V) a& D$ n' G2 r: Z$ B5 @ //原地不动/ g" [0 B5 a, c8 S6 g
nDestPos++;
2 a0 g' _7 N) T, ^. G# o continue;7 ?. s# ]1 T! c" w, { h
}
; v6 Q! d, r* O pInvSort->MoveItem(i,nDestPos);7 G: B! v6 G6 ^7 t5 e4 J+ e, ]* ^ P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) |" m( F* y4 f! T$ [# c+ {/ v Sleep(5);
$ p- U: l; g" u5 [ //Error("移动 - %d->%d",nSrc,nDestPos);5 ?# T# Y( |: y2 x/ _. {1 s
nDestPos++;
2 ]% {% g: S7 m+ k/ T2 _ }6 x' G" C% g Z' m' m0 c8 ~
//取第一个元素的信息9 T5 o9 V# U$ V9 Y% m/ E+ t. x1 X3 {# u
/*
! x2 k/ J5 h, Q9 N6 A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ Z9 d/ h v' u) Y$ o. R$ e, H+ v {; Z `+ T% _! G7 K8 w
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& I0 E- y; b& I9 I% U- p
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' Z- ~/ \( m6 f }
/ O# J* {$ O z6 T% N) r/ i+ x */8 [ ]) `- G6 G# {8 c
//////////////////////////////////////////////////////////////////////////
4 p8 R2 B. ^3 v+ b break;
: `% @0 }& w. N! N6 o" ^ }. R. H. z+ n: ^ V, ?9 ^ t
} ' \) ?* ^4 n1 \0 p1 k9 u
}
( D$ `, Q$ a+ q( P1 _$ c2 c; G4 gm_wndMenu.SetVisible(FALSE);& P: r5 f+ W; h3 {
, x+ ~. o( n+ w; z' b--------------------------------------------------------------------------------------------------------( C0 {7 [' j% b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( S+ u. R# w6 Q$ ?9 N/ `. D# F R{
% o0 Q; D8 S5 _; f- R0 fBaseMouseCursor();
1 }, Z. C* N: ]1 H; N}% r6 s v5 O' i8 P$ s9 h
在其下添加:
$ \, M4 }$ q6 Y/ Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 ^& v0 N% W- J I{
. \" `3 a' a- Q. A4 O( lm_wndMenu.DeleteAllMenu();
' H8 z V4 @& j8 fm_wndMenu.CreateMenu(this);6 M4 P+ z' J# `+ A" K. \9 f2 @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" l5 `- O& k9 I; d8 W8 q. ?% d+ J0 s/ `* L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( B6 _$ ?" ]2 h* ?4 r1 |9 V
{
1 ]- s4 z( O% Q P4 |. v //P以上级别才可以删除所有道具
0 ?2 r! z. H; t5 @7 y2 G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* @, h/ J4 y: i
}
8 X3 y! P7 O2 ~m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: [1 e3 T* r6 D S3 R4 e( n$ }8 s) x0 @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# G( X7 q) D1 ]" am_wndMenu.SetFocus();& i3 d$ W% }: |( ~ ^
}
7 @6 z( Y) c: |6 Z" _, s8 A+ X------------------------------------------------------------------------------------------------------------
5 H5 ] z* r8 _% k. o8 i' t*************************$ w; a0 U5 x3 {) ]
WndField.h文件
1 P4 z0 X( F; O*************************% O) d' `. K. _0 V4 d# I4 @
搜索:BOOL m_bReport;" Q& ~- \$ ], c( ] o
其后添加:
$ D8 c% t8 {7 J0 ` T6 _& X! uCWndMenu m_wndMenu;1 [; h5 d3 G9 x7 a$ O; ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' _2 e; h, }) _- x2 R
其后添加:
$ A9 L+ U5 e7 u% I. d7 N6 ]/ {virtual void OnRButtonUp(UINT nFlags, CPoint point);
: M: h) d/ t$ C4 y8 P& m7 s8 ]. v2 D' A) u' p8 x! L! a" R! H
5 M9 R* j4 g" j% i |
|