|
|
源文件中_Interface文件夹下WndField.cpp文件5 M% e6 g) v5 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. e$ Y+ ]/ O7 B5 ^4 v+ Q3 S) H( B: f7 Q4 f& Q/ I* I; s2 a2 y
struct sItem& h" N# Z; {6 {' a6 y
{: r+ e9 D1 Q6 j+ m8 f8 J
DWORD dwId;
$ [6 W9 Y: h0 kDWORD dwKind2;9 A' Y3 n7 G" V. s4 {4 @4 @
DWORD dwItemId;, Q4 `9 G; c4 q' l6 I" `. i
BYTE nIndex;' E/ }$ k0 D' c# Y* l
sItem(){
9 d6 j- r2 T" B' C dwId = dwKind2 = dwItemId = nIndex = 0;* ]2 `/ d) W/ n
}% P3 }" @8 b* W' n2 M3 w7 g
bool operator < (const sItem p2)
0 V3 _$ O2 |, G7 K0 C* q{
`/ o7 ?3 K+ _# e& [9 g I6 j if (dwKind2 == p2.dwKind2)$ S* K7 K. E3 }
{
$ ]- A f, R, P5 z/ b4 T return dwItemId < p2.dwItemId;7 I7 @2 X5 o' ~! |' T
}else{' H5 V* W' P- d( T% E5 I
return dwKind2 < p2.dwKind2;
; N& S" D5 T9 N* f! m7 v- A( w }
1 [' @' a; ^7 c) \- b, h+ J) H}" L* |# d! z6 T
};7 J8 p! I" e5 Y2 m$ [5 H) i4 ]0 r- z
class CInventorySort+ N9 n- H( k$ u$ J6 X
{1 V' H$ r0 {; U" d) C
public:
$ x$ {3 i# F) M, qCInventorySort()8 N" k0 Q+ F0 ^. ^
{7 C( z, P0 |; }+ P, |) g+ B6 V8 r
m_dwPos = 0;' s3 I! n* g2 x
}/ v$ _5 e8 @" ~# M* ^% l" w8 e
~CInventorySort(){}
! ~, D" f- k7 t" B: `; Bprivate:
5 t! w% G7 w6 ~' p- `) JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& t/ f( ?6 a8 f: ]1 H6 }* }4 h. Z$ A
DWORD m_dwPos;, p0 \- A9 M: h9 D( u+ ~% s/ y+ C6 K
public:( e L: i" y/ U3 i% D& W
void Add(BYTE nIndex)# @9 Q3 @ g# r2 t" V6 _: H
{5 n( [* B( @* ~# x/ _
if (m_dwPos >= MAX_INVENTORY)
2 D; q7 I3 d2 m; \3 k; _ {8 P- y2 C k+ K5 A" H- E
return;8 b4 ^- |) n' g! Y5 q7 h- \
}
5 Z$ Q. L% K& B# U3 h m_Item[m_dwPos].nIndex = nIndex;
/ z0 V$ E9 S" C G& R; y m_Item[m_dwPos].dwId = m_dwPos;" Q2 A% e( r/ c* @& n
m_dwPos++;+ E% X( T! ~: D4 ]; x( z* k
}
& U, r& W0 ~' R: jBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" p$ k3 k) O4 W{
4 t5 n- }2 l5 e( O* \ for (int i=0;i<MAX_INVENTORY;i++)* e8 B% v' c, G" \/ T
{
7 w8 _' ?2 R2 U9 O* l! B: k/ E if (m_Item.dwId == dwId)
( K6 p/ i9 ?) [( p2 W {+ }1 }0 B6 w" g0 r& S
return m_Item.nIndex;
( c E" q" V3 ? l, x4 g. E+ P }
+ p/ k& U# r1 w7 ]9 ^. W3 U1 D. I% ] }" \7 [& K6 Z" Z
return 255;
" \5 w6 i3 f8 D3 x" D}0 K! r! E3 N ]. f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! k: R4 ?: H3 c2 B3 \( }3 s{; u1 U& Z5 g0 J2 s9 P8 D1 a
BYTE nTmp = 0;
+ N; [, b L$ E bool bDest = false,bSrc = false;
9 c3 W8 m, G- X8 G8 _0 F9 o for (int i=0;i<MAX_INVENTORY;i++)5 t/ \/ \* s( I
{
, L" R" ]3 b! |- L9 |7 Z: ?2 l if (dwSrcId == m_Item.dwId)
. K4 ~6 |; P0 t/ \" q$ B# x {
" I: B. e7 u" G" f3 P' G( N0 E //id相等 则 改变对应的dest和src
8 p( e* m2 C, E6 \ nTmp = m_Item.nIndex;
0 [8 U# m& V& f: h m_Item.nIndex = dest;: B1 K& b9 j3 A: |! J
}$ o2 V; O X8 U$ J+ n2 k
}
) h- p" q9 j3 B7 o* v //临时数据保存完毕,交换开始
: m* S" A8 V5 P. j; K for (int i=0;i<MAX_INVENTORY;i++)
) X; D' Z5 u5 | e {5 T6 R) L# d; {
if (dest == m_Item.nIndex)( X# J$ |4 N( }- a4 B, p' S
{6 u, G- [$ Y9 T9 g3 w
//id相等 则 改变对应的dest和src1 p- K# D! H2 u3 Y9 x
m_Item.nIndex = nTmp;7 p. e9 B) Q& v N$ o# n- s
}
+ ~+ z& G( y; U }
/ P+ |# J/ n3 H1 k$ _$ ^}6 Z: n9 i. g! [2 B [+ \8 `
};3 g/ X; o! k1 z+ |4 @
-------------------------------------------------------------------------
X Y+ [ E* p" n2 O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" X7 M- u7 V6 E/ h. X2 }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* t$ H- ?: l$ T) Q6 o
紧靠其上添加:
: V2 b) h; w8 }. T! r5 f3 }5 Eif( pWndBase == &m_wndMenu )
5 o% x3 a0 m+ O+ K' S{; Y2 Y+ ^2 w7 Q! `8 {( b! P
switch( nID )/ S4 F7 w" K6 m0 L
{# F# Y) v7 b; F, ]% c
case 2:
9 O% z. J0 X1 e: [6 ?( g* m7 r {. v8 j7 k& x1 W
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 n/ ? G' Z0 N: A6 s# \4 `9 y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 r: Q3 q9 U: J3 h! {% o* ~- S+ q
{1 K2 ?2 x; T- h9 W2 k
break;
8 Q; k2 x' O8 O }
+ w4 D+ A( n3 o4 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" _& K5 E A9 n {
( }& }6 i5 g- V9 _7 j5 @2 r3 `8 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 i1 ?3 ~# ]. {5 B3 Q# ?. Z1 N+ h if( !pItemElem )6 ^( n% v3 V# Y- w8 Z3 Y+ n
continue;
' F$ c5 k4 L% J% h' B! I if(pItemElem->GetExtra() > 0)
" |4 v5 T, s0 a5 F continue;
: l5 {3 \) q X! J1 V y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % w) h+ w8 e3 ?8 ~: F
continue;
`2 G U# X j! g: E% s* } if( g_pPlayer->IsUsing( pItemElem ) )" x% H. W, c" v1 }* X
continue;
, i8 C/ }( g h! {- n0 l if( pItemElem->IsUndestructable() == TRUE )2 S" Q# V; i% `
{, ^: A( q& Y9 D; p0 E4 z( E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 U6 O# [9 ~2 k- V& M
continue;
9 U. D+ i8 I3 { }0 O+ K. H" g4 l0 i0 J, c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ f9 `1 j. k9 N: u, Q }3 s4 E$ d1 U0 b- N! z6 G; g
break;! \; s1 D; I; q" p; a/ y
}
2 a) n4 u! m. w; @ k case 1:
, J) y- A5 P {$ h* \4 Y: _ {& J ~- ^# s9 H! U; z- A- U2 B
//整理背包3 T, k& ~2 N' M, f
//////////////////////////////////////////////////////////////////////////& M6 d1 f$ Y! J
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 H2 K* D/ S+ Y1 `
//////////////////////////////////////////////////////////////////////////+ X1 E V9 q9 K9 }& J- A' r2 @
//////////////////////////////////////////////////////////////////////////$ R" T, m# C7 f h b
CInventorySort* pInvSort = new CInventorySort;
k& w0 g3 V3 H" z& N- j& \, U vector <sItem> vItem;
! z& b0 B/ p2 R/ r) p9 o5 W vItem.resize(MAX_INVENTORY);//初始化大小
% Q6 C K* r, E8 `# F9 G //////////////////////////////////////////////////////////////////////////! C h0 f: ^8 l4 d4 A0 ]# _8 i
//填充数据. l: v. `5 M+ g
for (int i=0;i<MAX_INVENTORY;i++)* T4 Y3 j1 F: R6 E8 h5 d2 v/ L
{# G1 ~* c, I/ p1 y0 X0 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 Z0 d4 g. ` t s) E6 E% @
if (!pItemElem) a6 m3 k" w+ N" |' m
{! I1 Y/ u+ W0 T( y( C; `
vItem.dwKind2 = 0xffffffff;4 y S6 e' K* }( K0 e$ i% }; c
vItem.dwItemId = 0xffffffff;8 M- H0 _- Y* {" H/ y
vItem.nIndex = i;
% h; ~, p2 }% ~6 F- }: o8 F }else {
9 ~/ q* p7 ?' i$ ? ItemProp* pProp = pItemElem->GetProp();) S$ @! o$ k& B
vItem.dwKind2 = pProp->dwItemKind2;
. J) z" M/ T6 t vItem.dwItemId = pItemElem->m_dwItemId;# S+ }- N) H3 j2 I. A* q' c
vItem.nIndex = i;* o3 v$ ^8 }2 R+ x
}( Y! h) M, B ^. g# z" e6 z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! K2 v: n. Q" h2 F7 ^! C
}. i2 O, b; C o+ _# B; O
//////////////////////////////////////////////////////////////////////////
+ _& }% t' L4 o' B sort(vItem.begin(),vItem.end());//排序
3 K6 f) {& P7 N9 ~ //////////////////////////////////////////////////////////////////////////- U5 V3 S! x0 g% N9 B% ? }- _8 k
//交换
, V; B: {# O. M8 ~" x$ R, R for (size_t i=0;i<vItem.size();i++)
6 c% A% |6 s3 }7 s {+ D5 Q: ?$ ~5 x+ K3 i) v- Z' I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' g# p# [+ o- |6 N& c pInvSort->Add(vItem.nIndex);
v! z* y4 C1 Z) L! G }
- v+ {. [( ?% `! | BYTE nDestPos = 0;- x! F0 _6 x" Q3 {5 K
for (int i=0;i<MAX_INVENTORY;i++)
- U$ m6 ?" x2 J) ` {* S3 P3 G" u0 g: L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 x4 ^! C% A# U+ b }" z if (pItemElem)
# y q9 {* h5 a1 ]5 |5 a" L! A, p {
# a! I4 C2 ^% c9 u, H% F$ }: C5 ? if (IsUsingItem(pItemElem))
, d* [( t$ l# x, P {
1 |4 y7 L2 c4 v# `% t //这个位置无法放! ^& @; X3 `; Z. H9 X1 U
nDestPos++;
' J3 a. B6 a5 A* _- ^ }& p! }# h( X) C
}6 L9 [' @% _! B4 |7 k' d* s% R) c1 @
BYTE nSrc = pInvSort->GetItemSrc(i);. p4 Z/ r5 p- \5 e& G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: r2 @* i, k6 \7 Y# ? _
if (pItemElem)
, n7 t" Y4 P2 u, I3 Z- L% X9 A9 } {
7 F5 t5 Y* x. T" v if (IsUsingItem(pItemElem)): V8 i8 r! L. |
{
! l, J9 X7 c8 l% ]# C //这个道具无法移动,跳过
- o2 M y7 U( h continue;, y. X6 |& x; }) Z8 ^* V/ t4 J
}
# P& e' h# e/ Q( W }else{! k3 S2 B& o' s
//空位置 不用动) o8 C K' v# R* k4 i2 D: R( U
continue;
3 f3 n( e; \4 e9 i }9 {9 z. J' d: t
//////////////////////////////////////////////////////////////////////////
) W2 o4 O0 h- C1 E, { //开始移动
" p. c8 ~' z% Y: s8 L- r/ L3 k if (nSrc == nDestPos)+ v" }& |0 s5 S6 u2 h$ c
{1 z. f' Y! {' A8 k$ P7 q$ ~
//原地不动
' {5 K" ^: s. S+ S! e8 }% ^ nDestPos++;
; k0 n% D6 r' g2 e6 x5 h3 s# Y continue;
; S/ s2 `/ i5 @7 e }, Q) d/ g; e) s# b
pInvSort->MoveItem(i,nDestPos); u( r9 R& F6 Y* e4 `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. ? x2 v5 ^1 }. \
Sleep(5);
$ ?6 E$ Q/ ]8 A" L) }' Z/ y //Error("移动 - %d->%d",nSrc,nDestPos);" a; B v' N% Z3 y% F+ s
nDestPos++;, V. q# K, k/ ^( J h2 k# Y# j
}
9 m* Z7 o V4 m //取第一个元素的信息 c' _. T; d; v# S! P$ Z5 ^7 b! b8 L0 j
/*8 n; N$ x; F" L, ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 @: G' x4 }: h' K1 A- { {3 ?8 i% u+ Q. Q; `
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 E n% i: V$ G1 h9 H8 ^
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& b" S4 v+ [- P$ W% T2 z* q' i }
) C& s/ H5 ^/ n u( h$ R1 G */
2 w4 [0 n0 H- r6 O3 c2 b //////////////////////////////////////////////////////////////////////////1 J$ J4 B; J% [3 M7 g% d, n
break;4 a1 x7 k" W) N
}) O8 Y) v# o* y f. L4 t4 y
}
1 Y+ ]3 i" N* m, _5 H}+ G6 p; Q& ]0 s1 O
m_wndMenu.SetVisible(FALSE);. V* N; G, w! [6 f3 N, s; R" Y, o% R4 f
7 p+ C% N/ G6 k- Q: v& v
--------------------------------------------------------------------------------------------------------
) q! |9 L: J" a3 f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% g1 ]/ h# ^2 v" y# x) j2 \. C1 q{
" h1 A: C/ `. o8 s1 }1 a) m0 k% [0 [7 ^BaseMouseCursor();, F% Q9 o v4 t+ }# v: O8 c
}
' O! S/ g4 q3 K+ Z. D Z1 N) M在其下添加:$ Q" M% V2 P9 m5 s, F u
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ f9 `. S1 I# g' |% }% X
{
" K0 T( ] \5 ~! Y2 Z& pm_wndMenu.DeleteAllMenu();8 s( T' g' x+ l G$ i
m_wndMenu.CreateMenu(this);
, p! y- ]% W/ S/ ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 [; O& p. j7 \5 C$ U2 o, x. a) N
: q6 C: l# H$ x- j- f/ F t' wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& i! n: h9 a e3 s3 H4 D{
, z' O7 \; D. y. z //P以上级别才可以删除所有道具$ p: f& d" t @& [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 o4 N# b F# k% {* @5 p, [
}
4 A9 A" w; H3 s' u- S3 H2 v4 hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 b7 B! @, t- c0 n4 \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& ^% z: U) n& P, D( r! S" J2 q* km_wndMenu.SetFocus(); _- v. p3 W/ O; w# c* |' n
}
2 |5 k2 l! V5 |------------------------------------------------------------------------------------------------------------ [: ?& l! _1 H1 D8 L) T% q R$ y
*************************
% Q& v6 w8 J! B1 I3 s4 x# I/ EWndField.h文件
$ J* F2 O' N8 y( x' X' X************************* L' L1 o# C' l% y# h1 g
搜索:BOOL m_bReport;
" \! o- P. e7 Y W% R其后添加:' p1 S6 E$ t" M' |3 p' ~ u! ]
CWndMenu m_wndMenu;
7 x& M6 p p3 n: x7 |" a5 v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ p" W, |: |/ _0 ]1 e9 z! s
其后添加:
- f. N0 n8 d6 _. ^4 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);* _. }+ J8 g% c5 ]. A- C8 L- f# U
7 h2 n1 h6 G7 X2 R3 D9 b% g0 ]! I5 I
, B! b2 b0 e4 k |
|