|
|
源文件中_Interface文件夹下WndField.cpp文件3 k) E9 _5 I# x3 \9 h4 ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# R, H; `6 v: Y1 ~+ h, a2 M
4 R* P1 V5 @! ^! l+ p0 t/ Hstruct sItem
2 @) D$ U3 B7 H# u3 n{
) o/ m2 @7 O; N: xDWORD dwId;
1 }& u# p+ Y3 Z$ gDWORD dwKind2;; G# ^+ Q" R# e
DWORD dwItemId;) N, E8 [, Z( U# E8 K
BYTE nIndex;
; d1 }( ~- g. G: @& U$ AsItem(){
@) p+ t. [$ m+ p; l, t dwId = dwKind2 = dwItemId = nIndex = 0;# A& c( Y# d: o4 ]
}
) W) d3 f6 k( k+ `3 A0 ^bool operator < (const sItem p2)0 |1 s- x' D* V! p' |
{
+ R* A o) @/ e2 m4 f. S. g* f h if (dwKind2 == p2.dwKind2)
& ]( m( ]& \" t& K0 N: A {
& `* u% _+ L& r; T6 W return dwItemId < p2.dwItemId;
& v9 l; y8 {, W ]( p0 p }else{
5 p& f; {/ c; W$ X7 W return dwKind2 < p2.dwKind2;
. K! s/ K" |7 |, u: i }6 h& A3 e, p# s6 p2 N8 L
}1 {3 B4 B- h9 t% F
};
( j, Q8 |, l0 S/ r5 R9 K- T' yclass CInventorySort! y4 L: g! ^1 T
{
- _7 e% d1 p) [public:
$ b# U6 Q) L1 Q9 ~2 A% T( GCInventorySort()* L# D% c3 w; C6 d. q$ x
{
+ O% o" p/ e! t* \- A$ j2 {; ^ m_dwPos = 0;
O+ q3 V& R$ y6 K}" z6 R) S0 K' ]4 n2 k6 w4 a- \
~CInventorySort(){}
+ X3 m% f0 ?) ~private:
) ~' B, O; b! rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' N8 F' W: Z" f1 ?2 m iDWORD m_dwPos;1 U: l( x3 h# Z% T5 ]% Q
public:
/ D" Y) b& s9 D4 e2 b0 t ~- `void Add(BYTE nIndex)5 X ?4 d4 A! l; r& U6 ]
{" E5 L- n2 {, m5 j
if (m_dwPos >= MAX_INVENTORY)) e8 \3 m/ \& p. q7 F) Y+ [
{. Y J! ]+ z x, t x; k2 j5 S" ]
return;
) |: ^! a& A$ u1 `( k }) C4 S) ?, S1 U: t
m_Item[m_dwPos].nIndex = nIndex;- @6 a; ^% ~% ^$ Z# l
m_Item[m_dwPos].dwId = m_dwPos;
; W0 E2 M i. ]- h m_dwPos++;
% P8 _, W- V q& N6 ?}2 \, E- x( E) V8 f* d# Q6 ?1 L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- m5 h0 V6 ?) [9 A: ]* U{- S! x. l& x4 F
for (int i=0;i<MAX_INVENTORY;i++)' U" T9 w9 l9 ?# J1 C4 O
{
, F3 L# I! { Q6 r if (m_Item.dwId == dwId)- s' M+ h6 C* n+ b
{; ?5 |- B# b, a
return m_Item.nIndex;' K7 ~# n4 O# x& V" ?/ ^: f6 w
}5 Z! H6 s4 w( r& w! f3 }2 q
}( m. _( p+ g% [( L* b' l
return 255;
Y+ q/ n. O6 x}
6 ?" n( u2 J. H0 Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& j# w8 j7 q% g( f) P( ]) B
{
* w) R* X- `; Y1 b; u7 M BYTE nTmp = 0;
# ?: _. i l$ D bool bDest = false,bSrc = false;+ a* l4 k, m( o
for (int i=0;i<MAX_INVENTORY;i++)
3 R, k; i, ~* V2 Y( p {
" \1 j6 Q$ `/ M. t; Z) W5 S i3 o if (dwSrcId == m_Item.dwId)
, a4 D3 {/ w, j4 Z& { {7 r! Q+ J4 D3 H" @' E i
//id相等 则 改变对应的dest和src
# e1 o/ X$ \5 p nTmp = m_Item.nIndex;
2 ^! _# M3 N. s- e* |" J: n m_Item.nIndex = dest;( r& b% v$ I8 U @8 d& G5 J7 N
}
`, D `: r& ?: h }5 [# E' w+ d8 i* p, g
//临时数据保存完毕,交换开始 Z. m7 S. T! y" P) Y) s& o& V
for (int i=0;i<MAX_INVENTORY;i++)3 j3 u6 j, A4 o& b" R
{
2 j$ ]$ Y/ ?$ @# z, x& ]6 Q, l if (dest == m_Item.nIndex)( y. U9 V9 X) }% w
{
# ]( k R# S# C8 Q5 d/ c- ~8 ? //id相等 则 改变对应的dest和src
1 E# W. r/ \# a% x# { m_Item.nIndex = nTmp;
5 u- z. Q6 P+ C9 [ }
# X0 E( S+ j; t. s4 o+ e3 w( ] }' _( L3 d6 W3 ]$ Z
}- L8 Q- X4 G/ }3 y' s
};
- ^* ^$ `8 C4 m/ Z* W-------------------------------------------------------------------------: Q5 a O8 C8 l( q9 c
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ R2 u7 ]; I! n' |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 E# x7 u$ W3 C6 t4 \
紧靠其上添加:' b( {2 ]9 I. d6 P: O/ W2 l
if( pWndBase == &m_wndMenu )( M, |! {) Y1 `) i3 u( m; |
{
6 B, K9 Z: G! y* [/ {6 Y switch( nID )% @4 F ^% H6 g+ t
{
6 M- F+ c6 Q: u9 b case 2:
2 g; `5 W$ a, e" ?1 y {' |3 H: y7 ?2 X3 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 l; F* Y6 E& l1 x6 V8 ~* @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 c: |+ n7 G) [0 q% v! ~$ t; U _2 U
{
2 ]* f7 l$ a# t( k- m break;5 l" Z3 ~, S5 ?, I/ |
}
& H7 ]4 D$ s) m9 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, \; F7 q# g) ^6 P7 g8 q+ f {
6 Z. R2 t5 u J7 [- U4 i: b6 Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 S0 p6 G8 M# n7 f$ `. {6 H7 r if( !pItemElem )
8 t/ \; |$ o5 E% w# ?1 o continue;
0 ^' M3 F1 Q9 w8 Y! ] if(pItemElem->GetExtra() > 0)
- U! G8 Z/ I/ Q continue;% G4 z+ @ C* n+ v0 ]( c
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, S4 K; _+ |5 @. [/ l9 N continue;
! A( g0 q; r8 T5 l9 K5 G5 x4 s if( g_pPlayer->IsUsing( pItemElem ) )+ t$ [; N: M J1 J# R1 K
continue;5 k6 B. C$ d# E, o' u. Q* g5 R
if( pItemElem->IsUndestructable() == TRUE )
! {5 ]. ]! u" ?# y0 w9 ~2 T {. n u0 `" s2 P8 |! T& a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& j) T" r# S- z5 \+ n
continue;
6 p8 k k1 q$ G }
w: d! O+ s% C' V$ X! @2 n g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ W+ w1 z: @9 ~) I' B" i6 f }
% `0 L: i2 [% }( h0 ]& y break;
9 x# |5 ~! ~0 j% s7 m }$ \5 b' v% P" ]5 W2 G
case 1:
y* o: k- _( M1 B5 p$ h8 W {$ g+ ?! T" ^' [1 L+ f" O6 p
//整理背包/ ]" c2 t2 h( q8 o* Z
//////////////////////////////////////////////////////////////////////////
" A. B) K8 A6 q& M" J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% i4 u5 i* A8 P. a3 s
//////////////////////////////////////////////////////////////////////////
! s) s a( @' W2 @. B" D! r0 ?, B //////////////////////////////////////////////////////////////////////////3 I! s9 S2 o" r0 W+ E
CInventorySort* pInvSort = new CInventorySort;) V+ W" y( p8 V4 F
vector <sItem> vItem;
- R+ i: b3 q( m% B: P vItem.resize(MAX_INVENTORY);//初始化大小! Q0 S* \, I, S8 J9 J& d
//////////////////////////////////////////////////////////////////////////+ P+ L! K6 A- Y1 A" X1 R3 T
//填充数据
+ z7 _) a }$ x2 h# n- d4 _ for (int i=0;i<MAX_INVENTORY;i++)5 c) E! j- i% E( Y- |3 o
{9 k8 t: ^1 k# D7 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; t# ^- U9 ], T+ u/ k! H+ ]
if (!pItemElem): y4 F- K" R; B( ]4 S I8 t( V
{
g3 ~; ~' K) q7 w4 n vItem.dwKind2 = 0xffffffff;' d2 q( l' l9 \: C$ g( b' J
vItem.dwItemId = 0xffffffff;
1 q; }# ^- D# ?! X: ~( s( y1 X vItem.nIndex = i;' {7 V! ]. K! F6 i
}else {
- {, |! _: I) ^8 I8 X ItemProp* pProp = pItemElem->GetProp();" I; k9 y x/ Q8 q
vItem.dwKind2 = pProp->dwItemKind2;
7 [- @7 I) o( u5 [: ] vItem.dwItemId = pItemElem->m_dwItemId;
" y' u1 U" J# q2 S ] vItem.nIndex = i;
& l% j o( u# J8 f$ q" ~. {1 l8 I }6 M5 e _1 x' `' u) L9 j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 Y5 }* l8 }! B" F/ F' V1 d }; t' g4 K% c5 m) y* }
//////////////////////////////////////////////////////////////////////////0 a7 n8 w8 Q6 B. B6 j5 t4 r3 e
sort(vItem.begin(),vItem.end());//排序
, }) Q" @9 x" D- _& Z //////////////////////////////////////////////////////////////////////////2 Y0 U7 V+ I/ v/ ?5 ]2 D
//交换/ V2 D7 G+ s- o' w& c3 T7 u
for (size_t i=0;i<vItem.size();i++)
. v W: O; V# o {9 e d6 S, ?, m$ L& i0 x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; [4 X8 c7 u3 p pInvSort->Add(vItem.nIndex);
/ E. S% J* Q5 }2 E, m }
8 y" _& `- s' a+ O6 I3 M BYTE nDestPos = 0;, i9 p; O$ O7 z% K2 b: Y4 j
for (int i=0;i<MAX_INVENTORY;i++)
9 n. m7 N; k# ~& U {
( ?0 W* F& L; A! H6 \) u2 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% |& a; |: z( G# N if (pItemElem)$ w$ w0 m: H* Q& Q- w* o* ?3 o5 N9 D
{2 S$ W- _% A! [* r% i/ t; G
if (IsUsingItem(pItemElem))
" g, b9 B. J5 x% C {6 e' L) e* B. P) `/ m6 S
//这个位置无法放* v9 X4 y) P L$ q3 K6 ]- \
nDestPos++;
9 }) T0 j* m' y# ~% c* z" N }, {6 O2 k$ V8 t Z2 |2 U1 @
}; J& X- B# ^1 I# [! F- X: \
BYTE nSrc = pInvSort->GetItemSrc(i);0 B- Q# ]+ Q$ B$ Q W, w& _
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% P _+ H7 j. p5 [. R: i if (pItemElem)
- k6 @7 @- A% \ l& x {1 V3 q5 k; x7 N7 W5 Y9 D. S
if (IsUsingItem(pItemElem))* a# k+ O8 n5 E: e; X. \
{
4 e/ N2 X1 @, N2 `3 \" M //这个道具无法移动,跳过) d# x# o6 ]0 ?; o2 Y6 F
continue;: B- x) W" Y% k, | h
}
2 N% O0 D9 H# o }else{
% {, Y$ A' P% V3 G9 F //空位置 不用动8 ~4 M! G* m: i1 p% N- z" l
continue;
& h+ z0 b8 G' B' h) F4 i) L# b; u7 _ }
7 v. o' A2 u5 s* ^6 ~3 g# F9 n# a" J //////////////////////////////////////////////////////////////////////////0 m: A. G5 U) x8 j R" P
//开始移动
. s- S* P3 W& i5 h6 [9 F8 d if (nSrc == nDestPos)
) ~, _0 [# [ S$ {. L {
" O/ \7 _: d% h% { //原地不动
2 a% B; g0 ]; x! _0 j8 ^- m nDestPos++;
6 e; S) p0 O, I8 Z" d& t continue;
& F( o4 ?: V# g$ Z9 d' F( }& R }; ]: O. E3 b5 R7 b* h1 p
pInvSort->MoveItem(i,nDestPos);3 p) E8 s3 s/ v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ ]" w6 W3 H; |$ T& E& x1 N. i Sleep(5);
, H0 g: p3 P/ w //Error("移动 - %d->%d",nSrc,nDestPos);
# }/ B- \$ O4 z( P9 C nDestPos++;
4 t. O5 | @4 A; H2 a9 J }. A9 m5 }" b, o, z1 `# }
//取第一个元素的信息
8 V% U4 i2 _8 r# {1 ]) w' Q /*9 f8 s' l6 e' ?0 i- ]
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 D; k) }" F, k$ S8 c {
( F/ N. b5 E7 {* m8 l2 E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% F. r9 z; C* R# ^3 I; O, ] p6 j4 f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' ]% w( m0 h% y% l5 v }. c2 X) Q7 M {( o
*/8 u9 J4 D3 N: R: f, ], e
//////////////////////////////////////////////////////////////////////////1 F" E% k0 w. D& _' M3 V
break;
2 r" H( ^) s2 |* T9 }4 s }* W7 P% G- x2 j" P
}
( |0 u$ h( Y9 X% l}
8 f; k3 C# c) e# \: Mm_wndMenu.SetVisible(FALSE);
/ ~$ x7 I; X$ b
$ T: G# Q u8 L1 f1 W) |: ^--------------------------------------------------------------------------------------------------------4 y8 @+ i5 ]9 ]- Q5 r& W- d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' L: { d' `$ U8 ~# u$ P
{9 H/ I( O9 w) i) a+ O
BaseMouseCursor();2 ~$ u& d; S& I% h5 b+ w8 F
}
6 ^' H3 ^& H( m' l" y8 F/ E: {在其下添加:8 V8 A5 |; i! O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 l, \4 D% z N: P0 d4 V
{8 u2 l& |5 \# h) s
m_wndMenu.DeleteAllMenu();
1 l( [, d1 @# Z+ _m_wndMenu.CreateMenu(this);% m, o1 l, T6 L+ y/ @+ M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' U) u- ^. e9 Z( q. O, u6 _! V
9 E6 C$ k+ s! q3 |8 n' i
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# M0 k( X g) U( ~' N: D2 W% A
{' Z- q8 Z0 K4 I/ ?* v8 U+ `% c+ t
//P以上级别才可以删除所有道具
& l c* c! `* g3 M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ H* @' q3 t, ^; L1 f2 h; F
}
/ ?# T1 g' R3 L" Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 j" t6 P# i- t: ^$ e( b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 C/ w9 L Z$ r/ M( pm_wndMenu.SetFocus();# A5 t% B0 J5 @6 D
}
9 Y! d! r4 c* C8 h) I8 j------------------------------------------------------------------------------------------------------------
3 w( I+ s# D, t$ Q" ]0 F*************************
7 \) Y- f! n1 k& G7 @9 sWndField.h文件
0 R: a( G( O0 T. m( E2 |) D*************************% I& d- X, D5 O9 a, C* A; R0 ^
搜索:BOOL m_bReport;
9 P: F2 H$ a' u' @4 [- _& H其后添加:& A6 C3 B: x0 P. I
CWndMenu m_wndMenu;
2 e" n5 s. G- h+ S2 l9 M8 P! Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, ^& q8 I. v- { ]* ]5 |
其后添加:
q, Y7 u) X- r0 Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);6 G: C1 ^. N7 a" L7 W' ~& c
# h" a. N _+ S& w3 b: @: a
" E$ x4 ~# r2 Z. r! A |
|