|
|
源文件中_Interface文件夹下WndField.cpp文件7 j0 P( J) C ]) O/ Q3 }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! m) T9 W: D. Q4 I8 K. ]
+ B$ [* E" w& S" O; H
struct sItem
( X8 L& W+ C: A" S0 I, i2 X{9 E Z6 m+ X% }2 p! S7 z
DWORD dwId;
, l4 s" n) _0 K% F" P7 dDWORD dwKind2;
+ T& o4 g: Y O( `+ N3 UDWORD dwItemId;1 k& S/ }4 C+ [7 {4 B
BYTE nIndex;
7 R: {* v8 M9 Z. ~* T' psItem(){/ ]! Z( ?; |' R- Y
dwId = dwKind2 = dwItemId = nIndex = 0;" g, V, o) @$ y0 E* E9 N% s1 v' N" q
}, ?0 V3 N2 ^# F0 ^' _4 {
bool operator < (const sItem p2) A5 W, k8 E: z7 |
{
( \# v5 z, r& Y6 l" S if (dwKind2 == p2.dwKind2)
- g, U1 {+ \/ @$ K {+ C0 b2 V1 r3 z) o/ N
return dwItemId < p2.dwItemId;' R, w. W9 o t" r4 @5 a
}else{
( ?/ H/ v ?; X" Q return dwKind2 < p2.dwKind2;4 h+ Q2 ]" z4 j% l( L" Z
} U4 t( O- Y2 o% r5 k
}& X% y6 i: s2 `* a7 n! ]! u
};
" y2 t* N; S8 _3 Kclass CInventorySort% ^- D; a- M' k0 ~! T
{
( g" `* J& P. Y- z( B x* j2 { lpublic:: c4 \' ^, a4 y
CInventorySort()
9 s% j; `) W) e; ^2 ?- V/ K{; f4 p1 ?1 c' `0 o# j! m# a4 P
m_dwPos = 0;
( ]+ v: u; O) r% ^% _" v8 ]3 X2 `}- `0 O7 r( e8 f, _2 T5 @
~CInventorySort(){}3 k8 W( g( Q0 R, t9 i
private:$ u) C" \. f2 r; K, K) c
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) m4 _4 W/ H9 o1 Y: R
DWORD m_dwPos;
) P) N* x b }+ }* f. apublic:
, T; e4 C) \5 Z: `! X+ gvoid Add(BYTE nIndex)
9 ]5 ~% m- T! a! [ Q/ _1 g{: b; o1 N7 p- R7 K, _, X
if (m_dwPos >= MAX_INVENTORY)
- G' O) U1 E5 a9 c0 z- A3 h {
6 J% H: i; m5 H( G7 C: i, S return;4 {$ r. w- U0 ?9 s
}
* @7 X4 h. m) i1 f8 p m_Item[m_dwPos].nIndex = nIndex;1 S9 `# `6 z/ h) `' j
m_Item[m_dwPos].dwId = m_dwPos;* p9 V, I1 p e
m_dwPos++;
( g0 `# B! _' ]: ]9 P" b. ]8 i}/ x/ z; \( X! h3 D6 k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' e) W3 [: r) \3 L! C- l5 a y. @{% j0 S& q. t4 h! E
for (int i=0;i<MAX_INVENTORY;i++)" l U5 H: u0 ]
{
" G E: |2 q; U/ A8 v if (m_Item.dwId == dwId)$ _9 k% o+ y: H; b3 G
{% y9 C: C, U4 D$ k" N
return m_Item.nIndex;0 }$ Y2 q" |- h+ G7 m# @/ W
}. A. s8 ]0 @; p6 i; |' y( N
}8 K& z/ N4 _2 b! v. B
return 255;% H u6 T+ Q; e$ z+ H- L9 N2 Z. N
}
! H9 U5 a- C- V- `4 evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 v% F# U' } n, ?7 D+ J/ c. r5 A; B{
9 a+ F# U7 r) l. f3 y% J BYTE nTmp = 0;
9 p. G& f& B% s5 ` bool bDest = false,bSrc = false;) x; a8 R5 w3 h1 N0 A+ @$ J
for (int i=0;i<MAX_INVENTORY;i++)+ k. A; e# X- @; {$ W; G
{
0 `4 N3 Q" L3 u7 F5 S& U/ { if (dwSrcId == m_Item.dwId)1 g, T+ P7 a" G& {) }- ?
{7 D+ u, P4 F0 R) i' s/ f* T. D
//id相等 则 改变对应的dest和src2 n% ^. @ P4 Y4 [) S3 a2 B8 |
nTmp = m_Item.nIndex;
! X) e# |' \/ V* p m_Item.nIndex = dest;
4 Y/ X; l, U& [8 m+ L" N* U }
/ f2 c! s, Q3 D; N. Q }
# j) l0 J, H$ a' p! m8 C$ S7 K //临时数据保存完毕,交换开始
}+ e m) w" A+ \, ?4 u for (int i=0;i<MAX_INVENTORY;i++)
9 ^$ |6 p4 y) ?! L0 K& h {
1 _6 z( z& P/ [3 U' K' |2 }% P4 g. g if (dest == m_Item.nIndex)# R- M5 s' `# C! U$ k, }: ?: ]8 R0 r% f
{5 I- R) n+ V9 @& H$ G6 T. ]6 J* o' n: u
//id相等 则 改变对应的dest和src+ h- \/ \4 R% {7 ?) r* }; X
m_Item.nIndex = nTmp;
s& S+ b8 _) h8 K. y" I3 o }1 m+ ^) K$ {! l
}
- _3 i j4 C+ w* r}
* z3 Q7 k1 [2 S+ _' Q2 Y2 L4 E};
' O, z, F. V$ Q# _5 a+ E-------------------------------------------------------------------------
1 S2 F, J) }3 a7 O: l1 T. r3 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), l: \1 o2 u9 K. [
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& K6 P) Y! t, j; V6 h/ ^& K紧靠其上添加:
; S' S- ~3 f* a1 W8 L" w. aif( pWndBase == &m_wndMenu ). p% C5 z. F( M. k/ X5 I
{
, ]5 h1 X" d: A5 S! ?; c switch( nID )
: ~2 c' q( m- ?1 @% V+ A( q0 @' Z {
. z v- D$ C3 u) \& K case 2:
, l* U# P: J/ W4 D {
( _( v% z) V0 J! v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. U5 J+ Q$ y# d6 P: Z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 B- k% r/ c. t, v/ n( k {9 }" J1 c; k+ ]1 A3 y; p& O" O& }
break;' ]" i5 K) k. }- }9 o
}: i5 W" Q' N8 {* @, v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 P; F) v# x+ u' E* D" i {
\; X5 a4 T/ P t/ f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! s" G1 U( N J if( !pItemElem )
2 h. K2 T; ^& w6 _ P continue;
# O9 x ~/ N( r# l if(pItemElem->GetExtra() > 0)
' h! j C& w' [' d+ S* v3 l4 m continue;# G, p' _5 F! ]& y8 o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( A5 o) n& j7 g" K' O) N continue;& t% ^: O& l% l2 @
if( g_pPlayer->IsUsing( pItemElem ) )% c9 m2 f9 I1 a5 Y& ~" y) L
continue;6 |+ t0 Q) f- T+ l \9 A n* |
if( pItemElem->IsUndestructable() == TRUE ) U e1 u1 y' y) p2 e
{
0 n) C5 \6 p7 Y+ X* S g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ i7 m9 n! I R# V continue;9 Q P8 A' R$ E8 B4 G3 b
}
# P9 Z3 H5 N* R8 j# P% L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 F+ \- V9 c* X& t) }: u }
: N5 g% f; Y% ? _ @ break;+ q) ^* k( c: G- |- Y( S9 D2 v
}
1 {$ Y$ ?1 v2 p case 1:
( A9 W* p8 [7 [4 z1 _ {4 x- `9 b' Z& l4 g4 i9 f
//整理背包" f5 [/ b+ u0 d- i9 S, g
//////////////////////////////////////////////////////////////////////////
2 C# I. p6 e! w3 O0 E1 E7 s. U$ U# H //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 L. y0 L' Z" } //////////////////////////////////////////////////////////////////////////8 g& o9 i" e, p! l1 q
//////////////////////////////////////////////////////////////////////////4 k1 j( m2 ]1 F
CInventorySort* pInvSort = new CInventorySort;- [$ H5 Z* x; \, k) g
vector <sItem> vItem;
2 J" A! n R5 T0 f6 m vItem.resize(MAX_INVENTORY);//初始化大小; U. u( a% R P4 M8 ~, o
//////////////////////////////////////////////////////////////////////////
3 {# ^- ?8 ?8 n z //填充数据
+ N6 \# W" e0 K' z/ T, o) r for (int i=0;i<MAX_INVENTORY;i++)$ }7 D4 l* \. s" l
{( M/ i: h- H& i6 q- L+ m; Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 e& m: c [( p [; k4 h if (!pItemElem), j6 J X+ M3 b( |& W* ^9 E9 ]$ k
{
5 H- `7 @8 o. D1 R vItem.dwKind2 = 0xffffffff; D/ W& A: _5 ]& v
vItem.dwItemId = 0xffffffff;
8 B/ N5 M* n3 l# r- I vItem.nIndex = i;+ w/ f( L3 }% f# J. K8 S
}else {" j# E. W5 }9 W" d
ItemProp* pProp = pItemElem->GetProp();
7 }$ ], h7 S k, ^- Z vItem.dwKind2 = pProp->dwItemKind2;, g! L; y8 N( Q
vItem.dwItemId = pItemElem->m_dwItemId;
9 k5 W" J( |) Z( L: ^, d vItem.nIndex = i;# S4 f- A0 a* }0 Q. {, F
}
& g/ [0 w( g& b# i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) o; Y& B$ z% t4 [: t \8 D }
' K% y& [* ]+ ^, V- w //////////////////////////////////////////////////////////////////////////
; v' S3 D) t% h0 z: V3 |, G1 r" g sort(vItem.begin(),vItem.end());//排序$ [6 q8 s9 A! [6 P5 U
//////////////////////////////////////////////////////////////////////////
f* W3 W" M1 [& l+ @ K, B //交换
1 E! y( v2 h" L/ D4 ]! `2 s for (size_t i=0;i<vItem.size();i++)
9 N& l+ {7 t4 k0 g; B: g3 u {# {6 x4 V, b1 L9 K9 F B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" A+ a: a$ ^) h
pInvSort->Add(vItem.nIndex);
# a# I/ N0 t9 ?6 m' U }
7 }5 [0 a" w+ s0 c1 X7 L3 S, Y BYTE nDestPos = 0;
; u! |0 E6 s% m) ^/ R% @5 t for (int i=0;i<MAX_INVENTORY;i++)& t- q9 K6 G4 Z$ K0 W8 g
{
; ?% {" O- `7 f$ u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ _1 L! l' ^) r" E- `' j2 l' M( u if (pItemElem)* L5 Q+ T" l0 z' Q
{
' |- h& l; S8 v3 M/ r2 \ if (IsUsingItem(pItemElem))
% v; S2 n1 r+ C5 m3 W {. d+ E; \: X. g% ]0 ^3 W" {7 g( ^7 Z
//这个位置无法放2 \% D) S* }" A+ @
nDestPos++;. [5 M3 Q2 P8 D# H, `$ b w
}9 E2 L( O; q1 m
}
) Z+ V6 Y; v% c4 R! Q" q9 G BYTE nSrc = pInvSort->GetItemSrc(i);
6 A! R8 T5 U6 S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); |0 a" \4 Q0 b- D* P( ^% o7 v
if (pItemElem)( r/ X6 A% F! k, X
{' D( F& o- c/ _, U* z; Q8 Q4 u* H
if (IsUsingItem(pItemElem))
* ?/ \# @# [4 v% u) e+ [4 ] {% B) ?% n2 B8 ^: X, s6 q; k
//这个道具无法移动,跳过
, _) G2 P* t- W: r; H continue;
3 W+ s7 y4 |; V0 C) v, x }( K& y; Y {9 [2 P( u
}else{( ^/ \' @/ k& \' K; k5 ?) N0 S
//空位置 不用动
" l( [5 Q8 v" _) \$ u4 s d& o7 [ continue;' c5 v/ X; G% V& f4 I
}( u3 ^9 ]" v7 G. y3 N, J
//////////////////////////////////////////////////////////////////////////
$ G* M) Y/ W* Z* u //开始移动9 ?0 E/ d9 A# V5 v9 g
if (nSrc == nDestPos). _, t9 Z$ s5 z* M
{
: E5 a$ Z. d7 z: {% K# s //原地不动
$ H$ y4 U* t) T. [ nDestPos++;$ ~+ u0 i& ]. t. F9 \* r0 `
continue;/ a2 H& m; Y/ L) @( c8 d5 P. H4 F X% u
}
2 |, @4 ~5 i0 @, b# ?: ]! p, [ pInvSort->MoveItem(i,nDestPos);3 Y! c: N9 E- @: P8 t5 u, @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ G% ?8 ?; g2 N( B/ C8 N; U Sleep(5);
, O, S# _: r% A //Error("移动 - %d->%d",nSrc,nDestPos);; X/ f$ w( }7 y6 R
nDestPos++;) y( i) C6 E1 u9 f1 n6 d$ ^1 {$ [* }
}
6 y' p7 K, x1 M4 D2 u4 Z //取第一个元素的信息1 A* ^8 ]4 j. }) n
/*
( _8 @, P% t$ ]$ i1 Z) v# _2 f if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( j+ W }0 F6 S1 w
{5 o/ l& [5 s K# Z+ y( W/ d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' r4 _9 y' x! l' S5 _6 N/ Z" h3 {) \; a g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: z/ Y: u$ b: h
}' \7 B/ U4 x D8 `9 f
*/- ^# a! `4 h* S9 p
//////////////////////////////////////////////////////////////////////////
9 \& Z5 w1 `4 E9 Q3 n break;
. A& d \1 ?3 u' k }
3 L. i6 V Z- V: w! y8 L } % ~4 |- g( y* \" w, U0 v
}+ F* C4 y7 H8 i( X
m_wndMenu.SetVisible(FALSE);
3 @9 G5 P; m# @! L- r$ h4 @2 H. D* F, b6 w+ a2 P! t
--------------------------------------------------------------------------------------------------------- O2 z" C( F* p; i' Q% @+ O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 q# Y% M; F) i( i1 a; z$ c{
; Y3 U$ }; S/ D& NBaseMouseCursor();
; E7 w; r h" k$ K4 I1 I6 C}6 G' _/ m/ v2 m) [! w6 N1 G
在其下添加:4 T! F5 ^+ Q& t7 ]- L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 Q% T1 W7 l& ]1 _( e1 J1 I. Y{
' T8 I' F% Y) v9 ?' ?m_wndMenu.DeleteAllMenu();
( R& w" j* i. u9 T! w2 Tm_wndMenu.CreateMenu(this);6 J5 p0 j4 V$ U; }* t, Q. i( A
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- x1 q* Q7 }$ R# `) ^. z- M4 Q
7 T* v) B1 O& `) U' gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 M# G: ^. k, }" s* t& b. T{
5 O' K- N K, A6 }+ D% S G //P以上级别才可以删除所有道具
/ e- a+ i$ l+ S) S6 s$ `2 f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 t, I$ e: _ X% I5 w8 ^/ U$ ~6 z" D
}/ f I. T% r1 l* [6 j6 t
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); L G0 |9 ~4 ^* S: {0 s+ w& \- p5 f
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" _% o+ c$ x8 n4 _
m_wndMenu.SetFocus();
8 ~: Z2 R- i, \$ g+ |6 @}
; {) o, U9 v2 o, N------------------------------------------------------------------------------------------------------------! ^7 O- h9 I9 d) G
*************************# l/ Y) P5 \, S Y" h2 q
WndField.h文件2 U y1 K/ ?. I8 Z. C& { _
*************************
( D2 A T9 M9 x5 f% {" C搜索:BOOL m_bReport;8 `; i! U( b$ }
其后添加:& r" N, q) I2 H. @' |& V% \( n
CWndMenu m_wndMenu;5 \, |. z3 c% ^% H, {+ Q3 k
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ]4 y% r2 ^" @+ J7 z其后添加:
: u3 K6 J/ X/ m9 S6 `0 `8 { ]virtual void OnRButtonUp(UINT nFlags, CPoint point);. c) B$ Q+ A. Q6 u- U
l: P Z$ h; s2 ^; f
0 K" O% N/ ^9 _1 O
|
|