|
|
源文件中_Interface文件夹下WndField.cpp文件
8 @/ R. O7 m: s% J. s. L( P! j( Z. o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 t% D; K1 M) ~* k; a9 W2 f& q+ g! G: M: n
struct sItem
- d* B. W- X- i% f{% o5 ~- p/ ]7 A
DWORD dwId;2 `4 A7 l0 Y$ f \6 L! `+ O
DWORD dwKind2;( z$ L% m/ x& y' ^$ ^
DWORD dwItemId;
: a$ p2 n ~, l. B4 r8 P6 c9 r' P2 @7 [BYTE nIndex;1 J" c5 h/ t( L6 r
sItem(){
! N" `' C2 L. v" n9 S' U dwId = dwKind2 = dwItemId = nIndex = 0;
, t4 l% E$ A: G4 A) `) L3 I}2 f# K4 F" k# T
bool operator < (const sItem p2)( ~, _# p8 v, N' B3 h& Q
{+ z0 g! }0 g: f% F9 e
if (dwKind2 == p2.dwKind2)
. `! Y8 e- e l8 @ z8 | {$ u8 Y" C+ I& C% O/ p
return dwItemId < p2.dwItemId;
+ h8 p) I" X) }1 P* s, V6 [9 k, M }else{6 ]' d4 G- D; |# F1 B$ d
return dwKind2 < p2.dwKind2;" g) b: U, _7 h6 G
}$ _6 Z4 d3 r* @- r- s
}
& g5 Y# l$ U: K5 N5 T0 }};
+ Z0 ?& O& u- dclass CInventorySort# D6 K- p. |" a* G# W% \" U
{
" t7 R( R( c. Q3 K. X+ F) gpublic:, U9 Y2 a( w0 }; V
CInventorySort()/ o- e! S9 u6 H" L9 P
{
; |. w7 h$ ?8 h! u) y m_dwPos = 0;9 g/ n C( V" ^) L
}* p, a* J. z! V$ t
~CInventorySort(){}& T- R$ v, N) E& @2 S
private:
+ W! L2 j8 R' X @; ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& n( _. T: ^# ~4 O' o0 e
DWORD m_dwPos;; M; Z4 ~- m3 Z8 I9 N) i
public:
8 H7 Z% A; Z7 Evoid Add(BYTE nIndex)9 y `" |! _2 V$ ]0 m- Y
{; x8 U; G1 P. P Z5 F) q+ a
if (m_dwPos >= MAX_INVENTORY)
+ \; ~1 e1 L1 h {8 {+ |5 Q; Z- y. Q1 Z
return;: P+ H( S& u2 Y+ p0 S& |- _
}6 H+ w6 j; _, }: ?5 [$ N. K
m_Item[m_dwPos].nIndex = nIndex;
" B1 u6 k8 C0 l% R m_Item[m_dwPos].dwId = m_dwPos;' {. I. G4 D& h% G2 o% P
m_dwPos++;: {$ k/ O4 S$ ?2 B" v' t8 ]
}
) f1 ^4 v" P* E6 eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: n: k; o; c" l$ x }
{6 j R+ f! |/ z9 z
for (int i=0;i<MAX_INVENTORY;i++)* C* T, U8 [4 X2 ]4 v% o R4 _
{
3 V, F5 L- P& i4 p, C4 Y! V/ K if (m_Item.dwId == dwId)
% |: ~4 p; F: m( F- n {
: \7 Y4 ~: C% L return m_Item.nIndex;
$ a5 {$ h9 k' R8 Z }
3 F* R: h0 R1 s& }& F; c; ^& p }7 R. l$ T" P! C- C
return 255;/ o* M' d9 W( ~' v
}
; o. j5 K, y* Vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 Q* C0 Z$ U3 _{
: |( O6 R7 `& ^) G$ a BYTE nTmp = 0;% M, n# @3 n4 W/ R* u) |2 d
bool bDest = false,bSrc = false;
3 f& g. R: Y s0 y3 H2 ~ for (int i=0;i<MAX_INVENTORY;i++)
8 A) ]& F: q* B {
/ B- s; L* g) B y2 ? if (dwSrcId == m_Item.dwId)
+ X1 T; b9 t$ h: K/ q% H {
# |$ D- r5 Q5 B+ P //id相等 则 改变对应的dest和src
3 [: g( o. j. E" I* b nTmp = m_Item.nIndex;
9 H- o: l4 U- f4 m5 o% e+ K( U m_Item.nIndex = dest;6 f7 L1 p/ I2 b! K0 h$ I) A
}$ O% J) K; h& I$ ?# e& q
}! E/ D6 `2 \5 A/ t; |& o% i
//临时数据保存完毕,交换开始( f. ~& \2 j5 C" H5 C; J3 ]
for (int i=0;i<MAX_INVENTORY;i++)" ~1 ^/ i3 v" }
{
# i+ t x: k& J/ _+ l if (dest == m_Item.nIndex)4 x% }% c" |! L) n+ L
{. W% h$ L, V! H( J0 p% M' x" A, G
//id相等 则 改变对应的dest和src6 V$ \& S3 ^6 f
m_Item.nIndex = nTmp;
$ Y: q# \- q6 S4 f; e6 G }7 ?- t. g& l8 ^/ M
}
+ z9 n2 N' T) @/ ?; z- j4 D- @* L}
* ^1 |5 E9 k7 h C};
1 `$ m! j* J. {, n-------------------------------------------------------------------------
* ~: [) ^$ D* c* `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# F7 ]$ V" g2 _* A% f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% `! F+ E2 d" u' m0 k$ G紧靠其上添加:4 w- `# h9 f1 w( d/ V$ K: {- }
if( pWndBase == &m_wndMenu )2 K3 R+ @1 B D/ N
{
X/ e& R9 b8 N$ D7 C* U; \; v! v; L switch( nID )
8 M, p( }% q! e {& s2 P8 i* t( M: g5 J }* W& e
case 2:
( p: z; Z& c8 k' i/ H" n/ U3 L {; i! z2 ]; {9 t; I0 ?. g" o* d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- M2 H% K2 A9 c* j% o0 j+ J7 W! w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: X3 v" c4 [& \- m4 H+ F {
0 v: o2 W4 m+ U+ P0 @4 ` break;
( v% j3 b$ M5 h E9 C }; q1 A1 p# T, M. w5 Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 |" a! e/ {( m8 {9 O! q
{" q0 l3 C2 S& W% ?2 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- a- ?: C% R& o if( !pItemElem )3 N9 b8 h, ^: u* W
continue;
: o+ l( \7 o- g% `5 W" c& H. { if(pItemElem->GetExtra() > 0)9 c3 Q' N! G/ R/ ^* u; U6 b0 Y
continue;+ B m' Q; j% Z4 H7 D' e
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 w* j7 r: Y4 c
continue;
- G: Q% A, W) Y* E( [ if( g_pPlayer->IsUsing( pItemElem ) )8 ~/ Q4 V7 v& H
continue;) [/ D" b2 S$ L# P5 F4 h B
if( pItemElem->IsUndestructable() == TRUE )
+ B- ^3 W1 j# `3 B {" l H% l. @% F- }4 z; |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; Q! _* n$ ]* z$ T6 ?8 X- a# A6 }
continue;/ x# k F: y: D; D% t
}+ H( g7 }2 `9 p* @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& ~1 h3 m7 Z1 A2 _ }
: ]! N# x9 q6 z+ E$ J break;
# f0 S2 d* b* L5 _ c i }
9 z2 h! t* I5 d" Y5 C case 1:
* z3 q. N( h/ `, ~& ^. P {
7 a9 O# v+ Y' b" X, _ W //整理背包
% f1 J7 M v3 H /////////////////////////////////////////////////////////////////////////// d4 y J4 W* f. y0 ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 E4 U4 z5 {( Y3 b6 ]' Z
//////////////////////////////////////////////////////////////////////////
/ e4 I+ B2 E( @, U0 E //////////////////////////////////////////////////////////////////////////0 k9 X- S: @ ]4 s
CInventorySort* pInvSort = new CInventorySort;
( x: M; P% H- a% ]: ? vector <sItem> vItem;& r: F0 k6 g7 `& q8 z0 F4 u
vItem.resize(MAX_INVENTORY);//初始化大小0 h" t* P: i: T7 V0 b- f
//////////////////////////////////////////////////////////////////////////
3 y7 B0 @8 B6 @! H6 X //填充数据
; B7 E. u6 U9 V2 S j v0 j6 T# N for (int i=0;i<MAX_INVENTORY;i++)( w9 E1 V% c1 z
{
0 O) P' }% k$ \# d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 A) X. O* r( ]1 r- X. j if (!pItemElem)" _9 P d2 s; b n" A# C z2 C
{' e4 p: H: M9 G/ C
vItem.dwKind2 = 0xffffffff;
6 a4 Z0 y, @* ~ vItem.dwItemId = 0xffffffff;
5 c5 O& W1 p6 Q, |: P' A vItem.nIndex = i;# d6 i6 w* w) t- P
}else {9 ]! Q% X0 b+ e7 a
ItemProp* pProp = pItemElem->GetProp();' c" S6 _( K9 B
vItem.dwKind2 = pProp->dwItemKind2;
' ?: F3 b- e \- m D2 F3 L# \% Q vItem.dwItemId = pItemElem->m_dwItemId;
7 g6 Q/ G# S4 \2 w2 j# P$ `% k* m vItem.nIndex = i;
+ m( Y( L p, ^ }
2 r F9 p$ r% h% \, N! Q% B* s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& k2 D: u& o' {! Q1 \0 Y7 X9 Q' s } {' E- x- X7 n
//////////////////////////////////////////////////////////////////////////5 l" \6 z5 f( q5 N1 R* {
sort(vItem.begin(),vItem.end());//排序
8 Q g1 u j+ @/ a# l- _ //////////////////////////////////////////////////////////////////////////
8 J: {7 K" \- k. P" e) v7 v2 \7 s //交换& b4 U5 l9 ^! @9 O% m7 ]
for (size_t i=0;i<vItem.size();i++), |5 e/ E% R1 Q/ c
{0 g' [* J% U7 O5 v& I% \
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 _) z( w9 @* r f5 h) k
pInvSort->Add(vItem.nIndex);4 a9 e5 p: g) m. Y( F' e: _* s) H, ~
}
) m0 C4 t# f A) X/ ]4 g BYTE nDestPos = 0;, F \9 m- V4 A& ~+ T
for (int i=0;i<MAX_INVENTORY;i++)" z) w: s2 @9 t5 u
{
+ g8 P; Z) Y- y1 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. {" h. `9 a8 [; {; b" Y if (pItemElem)
4 {: Y* s5 W- b% A {7 p( P( I1 b) {& I, T9 F
if (IsUsingItem(pItemElem))
+ C0 c% f% q5 p% I6 j& K1 r {
! [) [$ M( m, A' w //这个位置无法放2 I* n* G3 y8 v' k; ^* D# |
nDestPos++;
+ j6 Y1 O# Y% L; d/ @! j }
0 g( v; { U7 E2 X }
8 P; x: c/ b1 n& l BYTE nSrc = pInvSort->GetItemSrc(i);
' z2 f* ~7 [2 S5 ?2 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& q9 e% ~1 |' Y6 R2 u# M" l
if (pItemElem)
1 D/ X8 d! U8 M {
# v3 Z4 E2 S( \ if (IsUsingItem(pItemElem))" D5 E" C$ _ c6 H" ^- K/ k5 U
{( a& N- Q$ N% y4 b$ `
//这个道具无法移动,跳过5 B! ]. D4 _8 q
continue;- m9 V0 F" u2 s O4 S3 Y
}
$ S" z0 p$ U1 A$ i }else{
; a& A- g! j5 \. ? //空位置 不用动+ Y; ]- N; ~* m+ Q4 y8 Y/ B# ^* O
continue;
( w6 g1 M( L# l" U# ~ }8 u( Q8 u3 l; r9 H( E
//////////////////////////////////////////////////////////////////////////
3 u+ t8 ~, o# o. M //开始移动1 L7 w9 |7 ?' T; o! X' T( K
if (nSrc == nDestPos)
n t$ Q; w& S" B: p {
8 ]" C( S K5 W7 Z4 Y3 A //原地不动
$ b. ]: I7 X2 K9 S( G; t/ c4 N nDestPos++;
/ ?# M9 q I7 [6 c# a continue;* k' R" f, U4 W; u: s
}. V& E( a5 V7 w
pInvSort->MoveItem(i,nDestPos);" r9 K7 |, F) m; W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! f5 x9 H. y! A" ?. @1 z2 O Sleep(5);
& V0 O( y. D$ I. F* `+ C) S9 \. I) Q T //Error("移动 - %d->%d",nSrc,nDestPos);- M, i* t# ] E% C% U2 q
nDestPos++;0 Z: n4 t6 J3 R% w8 U* Q+ i6 a
}
% f H) f: \) t) i, o9 b //取第一个元素的信息
6 S) S( u2 t: @, k* R /*
" M: K7 k# @$ Z4 @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 x9 z( C9 R9 N5 }( t {: o4 E' ]/ y6 P7 X- m" O6 `- r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 O3 Q$ j7 K( L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- w4 r* @% _8 J6 G6 i8 F }/ u' S2 Y1 e, J( b# D( e
*/( G& l7 \ r2 {1 `( B! K
//////////////////////////////////////////////////////////////////////////
( X: k! q; U+ G: L4 ]0 y$ l" }# z break;/ L: x, E+ h* w% Z
}$ w0 r* t9 d; R2 C
}
3 g7 k" |: u4 t- ?}
" l5 _4 p. V+ S1 S9 `m_wndMenu.SetVisible(FALSE);' Y% S8 y% j8 Q& e: L& o3 g' c* K
6 S" t: T1 h4 i0 A$ L--------------------------------------------------------------------------------------------------------
+ y7 b) t7 K1 N4 P2 \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 f0 G4 h* t) B1 M$ F+ D5 |% F L
{
4 Q6 B& Y) H3 r/ }2 o; B+ tBaseMouseCursor();
! d9 Z1 @2 }7 R+ d' q8 k- d}
/ i& N; z; ~" l$ c q: t在其下添加:) D. h% W" g* [6 V$ J$ w* K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 I8 X5 z% ~' F% U5 B$ q{) v6 q+ T1 }+ X i/ ~
m_wndMenu.DeleteAllMenu();
+ a l4 D$ U/ `7 C2 O+ \m_wndMenu.CreateMenu(this);3 M! b: D7 R. u+ o- D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( w- p8 A6 T. d: l6 Q2 I& B3 d
$ }6 _1 c! u9 Y: y1 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 r0 E7 i" x+ W, S
{
2 K: H; o! {/ q //P以上级别才可以删除所有道具
' y4 x9 }4 ]$ S9 D) E6 X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ?/ H$ b: w) c0 ]( _% s8 n
}' O U4 x- @8 }( r$ j
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
! z6 `7 e# F' V' D8 S9 w- Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* H$ s* M D. L2 Q8 d! pm_wndMenu.SetFocus();4 M8 w/ V; `' Z, z2 }( I7 ]8 X! ~
}- h4 V( r# U: C
------------------------------------------------------------------------------------------------------------
9 z6 p- e. n0 i7 t*************************+ M3 K% x* @3 J
WndField.h文件2 z* X, J9 }8 w
*************************2 t$ ~( y9 b' ~! U3 g' Y% X: P
搜索:BOOL m_bReport;
4 ?6 o$ s. |2 N& r: Q其后添加:
3 h- z3 ~7 q l+ c4 M# |CWndMenu m_wndMenu;! l" N% l5 B" a6 d- M7 q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 j6 s" w. f( a% I, \/ B
其后添加:
" p' f5 s5 b+ o6 uvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 o; v8 h% k8 @2 f
( V: d- R5 b! b- b9 u9 q, _# }7 s5 t
/ A& n: |( E/ A' \ |
|