|
|
源文件中_Interface文件夹下WndField.cpp文件) A) Q* b) Y# t+ ? b) `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 }% W+ D! Y5 j* F! R
. V( M z a8 o( e1 S0 ?% ]! B2 t8 zstruct sItem3 d- o" T9 c* I5 r% H( V
{
8 B: R9 |" L2 E; O* b; ODWORD dwId;
4 `' j: [$ @) l/ N) P. fDWORD dwKind2;
- g( _$ @2 ~8 g$ ?DWORD dwItemId;
) s, R: s4 S8 r- FBYTE nIndex;5 D, Q# ^5 {: M$ m& {2 |. e
sItem(){$ h1 V6 m/ m- `( t
dwId = dwKind2 = dwItemId = nIndex = 0;
0 C) x: d& o/ g3 }# H* T% e}
; J/ l; I6 ]: A7 u. Kbool operator < (const sItem p2)
1 n R) ?& ~4 H5 r, p. k: Q [{) ~" e, L$ G0 | K$ Y$ E' v
if (dwKind2 == p2.dwKind2)8 w u0 {- ~, Z( d, Z
{
5 P' J, y7 o1 ? return dwItemId < p2.dwItemId;
+ A$ F7 F; b. g s+ F }else{; M% L" W, {* }7 b/ U5 s0 k) l
return dwKind2 < p2.dwKind2;
) L [9 I) E- o$ O }
& P- H& V( ~6 g9 } q- x8 u* O- v}
3 Q- T! e8 ]# [0 s};
; a5 Y. p( g! f% m9 h& i9 }) ^class CInventorySort
6 w0 C" B/ D; E: m/ x: [( c0 `{
7 W( Y! K0 K, e+ D! Z8 r3 U: c0 k6 Gpublic:
' w+ Z# j3 I0 J6 m6 l* ?CInventorySort()
6 s" E( f6 R* y( r0 r; C{
# Z4 S' N# ], k. t8 r m_dwPos = 0;- w4 |; p+ H/ I7 |- R
} I1 c# ]9 A2 a' D( J0 x( f
~CInventorySort(){}$ G. B" e/ z: H' ^! W8 o( Z
private:
" ]9 B5 ^# u2 e! E6 ysItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ Q7 ~" A: A& B iDWORD m_dwPos;4 N; l0 W: M, g1 V- H1 {
public:$ | W; z9 Q* Y: w( _: I- o
void Add(BYTE nIndex)5 q2 P2 D ~ n; @- w4 i5 }+ v
{" T' f8 r& M, }6 }3 V
if (m_dwPos >= MAX_INVENTORY)! z5 r* d8 Q0 k+ b1 T9 P s$ _9 a
{
- D+ S/ D1 c' w) ? return;- Z4 E9 Y: w) s8 I. z
}
9 a# o7 s1 V: B% D' U m_Item[m_dwPos].nIndex = nIndex; X9 P8 j! ?8 m! n- f
m_Item[m_dwPos].dwId = m_dwPos;" {' j8 P0 y. o' _9 J4 J( V( R4 x
m_dwPos++;- q, p! M# }% `* C0 q. u; F
}
$ j9 B/ O2 a3 c* V, uBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" H7 j, I8 s+ y0 r{. }4 m6 y$ f$ v/ K! I8 a# h
for (int i=0;i<MAX_INVENTORY;i++)" Z5 U8 Y: c* U! c$ [$ o7 C
{) P9 u( q1 U; w6 z( W
if (m_Item.dwId == dwId)
, ?+ x6 A0 l5 l1 H" G, i" ~( J {
4 i. V( e) W. r" F; U9 e; J return m_Item.nIndex;
8 a2 Z+ g2 m, f& x }
6 b5 T3 ]: K! d- J( Q2 L }1 V- m" Z6 K! e& E; _# C, F
return 255;
5 |9 n! }& B4 z4 g# i}
& c/ Q# @ I# K) S* @5 j7 H. tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; X3 d" r6 n4 V. P- ^( R1 i. t
{
; f8 l( k: ~: H/ p BYTE nTmp = 0;
; z+ b) L) Z* A2 }& ~0 m bool bDest = false,bSrc = false;$ H. B+ ?1 k% ]: m8 T: H' k
for (int i=0;i<MAX_INVENTORY;i++)
5 ^6 C9 V9 B, ^$ i {
l! j- l& c3 f$ c if (dwSrcId == m_Item.dwId) I* q5 J, E/ T
{
7 O. K5 k2 w' Z, X z: q$ R //id相等 则 改变对应的dest和src
/ V1 R; V$ x: @4 r& Y nTmp = m_Item.nIndex;+ v1 Q$ }: {) t% H# t. b& L
m_Item.nIndex = dest;& I. C& r9 Z, n
}4 K' g7 r' ?6 |
}
6 ?: q; \# N# M; \" U5 n1 _ //临时数据保存完毕,交换开始
" X- q( W7 g7 T4 ?' p for (int i=0;i<MAX_INVENTORY;i++)
- a! `2 M' c, ]4 w" n {$ B, t' a G u. f
if (dest == m_Item.nIndex)6 F: _) u, l% O
{) } b1 {* ^, w/ r
//id相等 则 改变对应的dest和src
8 L' d5 v2 f/ s! l m_Item.nIndex = nTmp;( a$ [( i5 y) [7 g9 ~( o/ G3 E
}. l3 @5 {+ x: b. Q8 a0 ?1 ]2 K1 ^
}
$ v0 M o5 m- G2 T9 Q}. `# a8 ]" M# K2 @
};
5 s3 n! \% R/ Y8 m8 L/ V-------------------------------------------------------------------------* H4 ^3 i! r! l! G2 m
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 G) W% Z0 {6 p- i3 T$ r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& C9 h! {+ e$ W- q
紧靠其上添加:
# V5 y- R$ x" U! C/ f. I1 v5 Eif( pWndBase == &m_wndMenu )
, U! O; v+ J2 _! ] T0 h{
1 B1 G( Y% H6 c. M( l$ z% ]2 f switch( nID )% Q. g+ N. X1 I1 V- S
{
, l* ^# ` I$ K' h' W" R case 2:
: J; D8 v Q6 J2 F4 N {
* Y; \& Q$ c/ l$ ~ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 H- w, [' y9 ]8 T: X if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# Y$ N- l. p2 j& ^+ I7 G
{/ c: D9 T# F1 y0 M% h3 F/ s
break;3 d7 q- |' W0 ?# W8 C
}9 W* @. `3 n# ?7 c% O2 t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' ~4 ] H# q8 j+ L5 n {
# l, g6 @* W* m& K" I; r$ i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 Q9 B# D7 |# M. R if( !pItemElem )
/ h7 X! x6 ]+ V& L continue;! J* E/ W; D6 I9 W* E3 _" O5 B8 J
if(pItemElem->GetExtra() > 0)9 _/ }4 S; e: ?8 w) g; i( _
continue;4 ?4 v4 ~4 ~5 `$ h9 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ G# [! s: D: p" _ continue;, u. Q- Y6 G& g5 g0 I' k
if( g_pPlayer->IsUsing( pItemElem ) )- V7 |+ r: K2 h! p6 N
continue;
1 {$ k, a5 M1 m+ k if( pItemElem->IsUndestructable() == TRUE )
5 C- ?( N1 B5 K# I( h/ @- Q' n3 f {4 d- _, b9 _" w! j0 p- l4 y3 E" x0 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); S U9 ^- L3 h7 c: P% m" @7 G8 y
continue;
( C# T* [1 D( K$ G2 J }
`/ N' @- q, G; K5 ?6 {5 { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# m. g2 ?& ~, b }) y! I# t4 w4 K# o
break;2 q- ^7 ?4 Y a& q2 }" c" P/ u
}
! {2 u) H: w7 Q) r; s case 1:# R* h9 F- `) x5 C. o
{
- ]" R" H2 ^0 }% U% A //整理背包
0 g5 v& u# N$ _( R //////////////////////////////////////////////////////////////////////////% i. |! H6 r0 w# a0 |' L v' ]/ w" X4 b
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 g* l9 d! e& G0 f0 V+ J //////////////////////////////////////////////////////////////////////////
* }/ S! w) [; t( y$ q+ t //////////////////////////////////////////////////////////////////////////
2 j5 b# T8 g* x CInventorySort* pInvSort = new CInventorySort; i+ p* R& w' Z! e7 m% o1 ]
vector <sItem> vItem;
J8 A5 r' }, x, O# G9 J vItem.resize(MAX_INVENTORY);//初始化大小
4 D3 }$ P, M) {! q& c* W //////////////////////////////////////////////////////////////////////////- ^* H$ D7 K6 Z7 ^
//填充数据
/ c$ `& y, U4 H& o; ^5 f$ V for (int i=0;i<MAX_INVENTORY;i++)
5 k3 q: }. F# x8 z {
/ d% o7 v% A7 ~0 g( I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; a' r9 }$ ~6 `
if (!pItemElem)* a, N3 c6 a! \( P
{0 r$ s- o9 z" Q# g5 y5 r
vItem.dwKind2 = 0xffffffff;
' e% q" c- ]; D( u- A8 ? vItem.dwItemId = 0xffffffff;
. z' @- ?1 V0 W% s2 c C! a vItem.nIndex = i;0 G9 R, E- V4 S
}else {
4 x7 x! E1 I) v( u$ @ ItemProp* pProp = pItemElem->GetProp();% C" k8 j _9 d! Q1 B. H
vItem.dwKind2 = pProp->dwItemKind2;# K C% f/ \. d& b2 R
vItem.dwItemId = pItemElem->m_dwItemId;5 L! F4 x) z8 E( ~
vItem.nIndex = i;% ^5 I8 J* g: C% e; ~9 D
}
0 U) Q }, B# S //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) {6 X# ?1 W8 M! { }
8 ?% Y( d7 R; Y6 S8 x: s% e //////////////////////////////////////////////////////////////////////////
k/ \/ v) t3 z7 s) e8 Y5 G/ e sort(vItem.begin(),vItem.end());//排序
+ t F& n# U) p0 f //////////////////////////////////////////////////////////////////////////1 w' o. L! u! T+ d- O: h0 v& ]
//交换, }/ f' V0 D8 p5 @8 }1 E
for (size_t i=0;i<vItem.size();i++)- G3 \! J& f) c! p4 x0 f5 C! _ {1 O
{+ d) @& _9 [+ T* L' L# b
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! i" q- K7 t6 Q% B+ A& g. y
pInvSort->Add(vItem.nIndex);
- d# y0 x; F, e# l9 Q' ` }
" H4 Z. R8 O6 V8 z: Y% x BYTE nDestPos = 0;) d# l/ i7 K( W& I& G6 V, ?1 L
for (int i=0;i<MAX_INVENTORY;i++)
0 z. `- R- N- _ `$ h& @ {# A2 ]" n) l0 ^# [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- D3 b+ S5 T- _# I, N5 U7 }" w if (pItemElem)
0 c; `7 O w6 t3 V& t; N {! P: t. E3 e; b. X) w3 q3 U( t
if (IsUsingItem(pItemElem)); c2 `# V1 i9 L6 }$ V- Z/ J) F
{; Q; ?, Z; f( C$ F- i8 w: u q
//这个位置无法放1 F/ r; l; x* `$ }3 m$ _
nDestPos++;( {( v' d8 \/ E6 _- f
}
S" }* \4 T1 l, k+ V* L$ O" B- I }* v, X! e! p7 I8 A
BYTE nSrc = pInvSort->GetItemSrc(i);
7 V+ V8 V1 \( R; _3 t' H$ v pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 `& i0 e3 g* e" c
if (pItemElem)# n k* X( r0 i+ ~
{; T2 v, r L; u5 M3 d
if (IsUsingItem(pItemElem))
) ?/ o! M* A# I7 k+ q; y, U1 D1 [ {
4 m, [; ?. j) V //这个道具无法移动,跳过
! g/ v' ^6 e! W9 {! g: R continue;
$ m7 F1 F1 c, I. P( D+ S, C, D# l }
1 O2 k$ A3 s, T( A- d% P }else{# T0 v% p% H8 j* C( ^5 N
//空位置 不用动
, B$ `9 ^) y4 | continue;
+ J* X: f/ S! q2 O0 w' W }
1 F! e' m f" e O //////////////////////////////////////////////////////////////////////////$ R3 g4 h, h. p; J
//开始移动5 Z4 v \# p8 W& t+ }3 `8 Y. I
if (nSrc == nDestPos)
3 b) c2 J+ v2 |( S {0 v8 |8 S* F# d# \+ d
//原地不动 P( P4 \. _8 D
nDestPos++;& z" k) [, `4 L
continue;
2 a7 Z* t$ W G" [2 i7 J" Z }( G% @9 G$ g' |& o* j4 s3 y* l
pInvSort->MoveItem(i,nDestPos);4 y- C- ^% ], n$ g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);( J: d, g7 S7 W9 l
Sleep(5);
K5 n8 \9 X8 Z7 G7 x //Error("移动 - %d->%d",nSrc,nDestPos); ]6 w+ Z( ^( D& P
nDestPos++;4 v7 {5 b" A. _' |+ e
}
8 W; F2 S8 l; I" T8 k/ u. O //取第一个元素的信息
* N& _9 _2 {1 b' w+ k /*; G% b/ D' o# P- Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) c9 G; C& T: T# k0 P {0 R5 G( w% `2 B" |' ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; ?+ {6 @" ?4 K, h- S* B+ T& c( G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 y0 O" ^% H: s) M. \- C9 h
}
1 e! R+ K* k5 | w. j */+ P4 J' h2 O% q0 S5 ~0 r
//////////////////////////////////////////////////////////////////////////
1 L& M" ^0 ` \) V break;
% f6 f) |( {' p( D }# @% }) r0 U# h( c# W9 X
} . X z# f" z' M4 v: i
}$ a! O4 {4 p/ |( |! i9 c
m_wndMenu.SetVisible(FALSE);9 K8 w* |5 U4 X% H& c
/ H3 m& K- J% y" i( {9 C& v% q9 ~
--------------------------------------------------------------------------------------------------------, e7 O6 `+ x% ~( w9 E: Y/ m3 j- E: D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) M; ~- [- o1 k5 S# l' ^/ p9 t
{
, I7 M! F: P) k8 _BaseMouseCursor();9 a0 }. ~8 q9 x1 E4 n3 Z
}
% d' [3 I2 [- N5 s% \6 \在其下添加:
8 |/ I. [, k3 V/ X/ y' j9 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): z/ V' U( o* H P7 ]/ N! Y" S
{' t8 @/ m( T1 ]! S Y3 A
m_wndMenu.DeleteAllMenu();; T6 A( ]+ @8 u
m_wndMenu.CreateMenu(this);# _2 T3 o8 i* C% |6 _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- ]- j9 P* M9 _5 `+ \# Z' \0 I- y5 e1 y3 W7 ^' c3 J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# y' S" k& }# T: f8 y{
5 X+ U A3 {; f7 U: P0 q4 ^# Z //P以上级别才可以删除所有道具
1 K9 p5 p- B) } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; B- C5 J* E4 O+ r' v9 @/ O
}
2 F2 O S9 w" b$ km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ i; {$ u7 B2 Z! j6 jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 t- Y0 p1 E6 `( O% }8 Qm_wndMenu.SetFocus();
; i3 y% ^' ]9 x0 N! F, B1 M% Y}
" x1 V; p; H8 P! M2 i/ a------------------------------------------------------------------------------------------------------------1 N5 u0 Q0 `! h1 j5 ^4 l! s
*************************5 j0 G. i9 j- J3 u
WndField.h文件/ m# a, H; @, \ ]* S
*************************! C* ]; Z. B" N- C
搜索:BOOL m_bReport;
5 C0 a0 Y, _& }( B/ }! m% l其后添加:
4 I, A, o. x/ V) { |CWndMenu m_wndMenu;! l3 N9 \- k3 v% G$ m3 E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, Y0 K* w7 J* {! s0 V6 Y
其后添加:$ y6 X( v: k& d/ s2 d, m
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 r# g9 j& k' }: E4 P* x+ e% w
% D5 I, X5 y4 a2 @. E$ n
. ?* @1 o' _3 M+ e7 C5 S9 { |
|