|
|
源文件中_Interface文件夹下WndField.cpp文件
& W# X6 J r# G7 ^4 N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 p; e% k ^" b/ w" T% U1 O* v- t( _
struct sItem/ _$ I! @( q/ m: U) ^3 B
{; p6 J# Z+ h/ o" v6 m
DWORD dwId;
6 b2 W- O& r7 `DWORD dwKind2;
5 g) ~9 N2 @3 R' VDWORD dwItemId;& J/ j" k) U W3 O% t2 G; h
BYTE nIndex;
/ R3 S( k1 J* a# u1 ~. e F" msItem(){
# F! C1 M1 a* \5 k+ J$ C dwId = dwKind2 = dwItemId = nIndex = 0;4 l7 Y' C; V, ~/ } T% S
}
8 K6 b1 M: w* Xbool operator < (const sItem p2)
. D" ~" v' B: e3 v! Z{% \8 v# P4 ^6 r! {
if (dwKind2 == p2.dwKind2)
g* [/ ]+ K: Z1 c: I4 Y0 J {
" S1 S2 S. z$ {7 A9 x+ E* e3 W- h return dwItemId < p2.dwItemId;# d7 k% G, N7 w, P, K
}else{% m+ \9 _$ ]: r4 A" u9 m
return dwKind2 < p2.dwKind2;
6 b. U" C |1 Y' N% |( o }, }& [) K+ }( x7 U- \$ ^0 R, z- L
}. E3 W X& G$ a5 f. v
};( [2 H2 t2 S9 z' F6 g9 e- S5 q
class CInventorySort
) ]8 A6 ?+ P, O2 `* W* c+ H- g' N{
5 `( h5 _1 r5 `" c; G( P2 k1 G1 Dpublic:
2 F/ b8 \5 ^) J/ W' CCInventorySort() ]9 L% r* A* F
{% z9 E/ f* Q$ |: B- ~
m_dwPos = 0;
4 F3 `" Z2 e) j7 l( Z% J F- b}
' W) `! y: a$ C; b" x~CInventorySort(){}
6 B* Z( H+ \0 \9 B1 \private:
4 z& I/ H6 Q# `! SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! c8 O6 G9 C$ H3 ~
DWORD m_dwPos;
2 }4 ?6 {# Z* \, Zpublic:
% o+ {1 v( k& b7 Z( Dvoid Add(BYTE nIndex)) s1 X% G/ k& L1 D3 b3 p5 j
{/ A1 Z% B# ]/ K( `# l
if (m_dwPos >= MAX_INVENTORY). q; n- y8 D' R& S
{
6 U! e( t) I& n4 Z return;
6 s& } E/ ~2 N: P, K: S }
( v9 n0 N! _8 g m_Item[m_dwPos].nIndex = nIndex;6 A) [! L/ w v! N3 t d5 e2 r
m_Item[m_dwPos].dwId = m_dwPos;% o) `, k! [7 |( z. v
m_dwPos++;) ~. c/ ]: R( s" b! v' o
}! W9 }1 _6 }$ {% D& ^7 u. Z2 h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. a3 V+ A9 X2 u( q{
, u3 l1 c9 T. D3 K3 i( @' ? for (int i=0;i<MAX_INVENTORY;i++)
9 @! E, w9 _/ ] {
4 R$ t o; y8 u( P8 i if (m_Item.dwId == dwId)
4 w* z& N/ g$ x {
, L! w# Z! ]' c$ d. X8 E return m_Item.nIndex;
2 d& X+ K+ P0 k* h7 z4 e }
5 R% _1 X- F2 ~1 m" G }+ l2 z0 \1 \( K6 y# t- n$ }9 ]" @' n
return 255;
0 {2 N4 C' W' M# b& s}8 F9 l! {: n0 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 q# U3 I& z, K
{6 P& A; i& T$ c- N( }
BYTE nTmp = 0;
* z: t8 @) [ M' g2 s6 Z bool bDest = false,bSrc = false;0 x! _! V# { v8 V
for (int i=0;i<MAX_INVENTORY;i++)8 d9 z- _: k9 h# {% D
{1 k7 T) X7 \7 e1 v, ^
if (dwSrcId == m_Item.dwId)1 v6 l7 C4 ^- N7 g# y! i' M
{
! q! _ C4 M1 x" y //id相等 则 改变对应的dest和src
6 o; A2 J9 ?* z: q* [ nTmp = m_Item.nIndex;
8 G3 B; P* K6 t' }2 t3 I1 M. l m_Item.nIndex = dest;
" c3 h) }9 @ o2 T! j }0 R$ U$ {3 ]% Q
}+ |& v5 T. z1 o, G* e( M
//临时数据保存完毕,交换开始
% j, w8 Z% @3 E! W% H% ^ for (int i=0;i<MAX_INVENTORY;i++)
: u( p3 {+ ]& V2 v- m1 o1 m {% p9 W9 A) C! V" i. F
if (dest == m_Item.nIndex)
; j: j* @0 u; O3 [! ? {# Q, y5 L) P7 e* A; e$ P' o1 z% C" y
//id相等 则 改变对应的dest和src- M7 M, ~' m3 T! S+ B
m_Item.nIndex = nTmp;
* n* e# s) P e( l" s# a }
& g5 |- y( m6 f7 b }
. l( v0 Q! Z0 Y' A$ A' _* V}$ \+ G6 c5 @9 D" M
};% [: i Q( }! y( X3 Z1 x# `5 S$ r* F
-------------------------------------------------------------------------* q0 S5 t2 B6 A9 g1 I7 M) y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 e& H) m0 o+ x2 b% {. i! x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& y* l. h. F5 ~9 o4 ^7 |+ D& c紧靠其上添加:
0 P# N; R0 b- ?! P* \1 _& `6 |* l: [8 bif( pWndBase == &m_wndMenu )
8 j! z8 ~' R: l6 s4 Y9 l{! [- `# p6 H* e& ?; v) Q# \
switch( nID )
: @6 G; _6 ` T# a" A {
. F$ i* f) j4 J8 ~) J M" d0 T9 F7 Z5 \ case 2:" ^, Y1 F C( w* l& U" E4 [
{
: f4 t3 m N4 J ~9 A' d+ c. B1 O* Q9 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ |" [3 |& Z% } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- V8 s/ f8 l) r5 P {7 f/ @. B' @( G& \( q$ S9 e
break; |% }' x) c' |2 J3 C
}
4 u# M" s2 Q6 J% Q2 ?! D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& X/ \7 X1 r' L2 | {
/ v" {+ Z& n7 w' I1 T0 D& j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; j- K; o* a5 k0 v, j+ Q: j if( !pItemElem )2 [+ x' M5 r* b t& \& m: B' j- a) D
continue;
" K- ~2 G: a' Z! b* p; S8 U if(pItemElem->GetExtra() > 0)
) a# F9 D; h2 W! t0 d! d7 o2 n continue;* e7 O- {6 g# s2 @0 J! K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 k( G; c9 t3 S/ M9 h continue;( l& }% R! J3 F/ x/ Y! |
if( g_pPlayer->IsUsing( pItemElem ) )! H) u# m ?7 R9 q
continue;
, S6 z2 D# Y. w' @8 j if( pItemElem->IsUndestructable() == TRUE )1 O4 n( n( w0 r! ~+ I
{! N6 Z) G g l; N
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% P1 p2 I( v e) W
continue;& ]/ [* c6 y# |/ g
}+ u9 [* l) T- G) h' ?- s, O% f
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 b# q p0 i, I/ }" Y) y }
' r f6 p, u- Z2 E1 x4 [) I break;
: k& Q7 N+ R1 K% s }
" i4 ?+ D0 {8 i) r' `5 p case 1:
; q% U0 U" E9 V {) j$ E" L: p( Y/ f1 L
//整理背包; p" c' m7 R2 v6 J r
//////////////////////////////////////////////////////////////////////////
1 Q& f/ j3 d* B //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 _8 [ e- q1 i! w( L7 G2 [! i, f- g //////////////////////////////////////////////////////////////////////////
2 q- i `4 K. b6 i+ r5 B //////////////////////////////////////////////////////////////////////////
( U1 _8 ]. Q' `. y/ G! J6 | CInventorySort* pInvSort = new CInventorySort;
6 R6 u5 a% r) }: I: s vector <sItem> vItem;! E6 y8 Y {5 N% g) z
vItem.resize(MAX_INVENTORY);//初始化大小. D( ]0 @8 G. e" q
//////////////////////////////////////////////////////////////////////////
6 }$ o' p7 d5 b- L5 [+ | //填充数据
# k2 r g- J+ ^. I# y$ S for (int i=0;i<MAX_INVENTORY;i++)1 q3 @! [, q0 T7 s0 {8 ?
{
8 B9 [( K- v | F) K) g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% |- U( v( _! M/ y1 u1 g
if (!pItemElem)
" f9 ~% P% x. o$ o' V. ^ {6 l1 H/ F1 w) {5 u# h" A4 |
vItem.dwKind2 = 0xffffffff;
- T& V+ N9 M" D1 I( ` vItem.dwItemId = 0xffffffff;* k$ c# R9 y1 v9 I
vItem.nIndex = i;
+ D& l, G( I V& [ }else {) M0 b* d: {6 D+ Q. U
ItemProp* pProp = pItemElem->GetProp();
/ O$ G T9 O$ X' I vItem.dwKind2 = pProp->dwItemKind2;4 \& j1 Y2 j' _- h( \3 a/ G
vItem.dwItemId = pItemElem->m_dwItemId;
. g8 ]! d r0 |8 t% D0 S vItem.nIndex = i;4 Z/ f: a B/ ?
}8 o2 N n: v: [' k0 l/ _) N, H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 E T9 G* V9 _4 F( b! e( F. e2 J# r
}
3 M+ l; `; E- n6 i! q' x' F7 R. s //////////////////////////////////////////////////////////////////////////
0 Z6 V9 F; f! [3 u9 d) T4 @ sort(vItem.begin(),vItem.end());//排序9 a- Y) ~7 t' d5 s) a2 P/ D G% \
//////////////////////////////////////////////////////////////////////////2 k" | M% d9 Z2 _9 ?$ M* s' r
//交换8 W1 a2 k: |+ P8 ]9 O. G
for (size_t i=0;i<vItem.size();i++)) J* C' Z; f$ ~2 I- y
{
) z' I U" M \( Y" l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& l$ `/ I. f) s5 b' H
pInvSort->Add(vItem.nIndex);
' \" g" j" Y: c3 o, s4 g8 X }
' h% B4 n; W) f1 ]( Z; _ BYTE nDestPos = 0;
4 o5 g' O# r) }/ V( V: \" a" ?8 C for (int i=0;i<MAX_INVENTORY;i++)5 R( }5 z; K9 ]1 d% f
{
+ r9 S. Z$ K" k* E$ a7 p6 t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' N+ E% J+ s. Y5 ]8 P if (pItemElem)6 S# Z7 I! `- Z6 j$ h: q
{/ a, x$ ?: v' y; S
if (IsUsingItem(pItemElem))
& x7 M( `. c' C% ~ {# S: H* ^6 B0 G9 F `1 S
//这个位置无法放
4 s& F {& \2 W) H; o' b nDestPos++;6 f& u3 g- h* l: j0 H
}
8 h1 D# p6 E" i }
; S6 z! d1 P' e2 O& v BYTE nSrc = pInvSort->GetItemSrc(i);
) [3 p3 c# U7 m0 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# G% \) K& m( N7 [
if (pItemElem)
* c3 w* k! _2 _ {9 f" [1 J4 I7 L+ ~
if (IsUsingItem(pItemElem))
) a# G2 o: Y5 Y$ [- U {
1 z1 e& {, E$ D+ `2 [ //这个道具无法移动,跳过 L! {7 c& k# k7 A8 }+ m
continue;
' F! V" f6 n5 i }" i* S* l& K2 h
}else{' u" J% \# s- G) j
//空位置 不用动
* ]% J6 L4 e/ K, F$ l continue;) U% o* f& E/ }0 i+ e
}
) q9 F3 O7 P8 t+ X I0 S //////////////////////////////////////////////////////////////////////////
' Y' l( I7 t% y //开始移动
+ x ^- s8 o- }. M$ E if (nSrc == nDestPos)
: `/ }, ?# ]( V& L: P s {
! A0 f8 i+ A8 ~ //原地不动
, L7 p9 m( l+ y' e, G' e$ e- e2 l# O nDestPos++;5 \8 G. v6 f0 h" D7 V$ h! l: V
continue;7 P% W1 l8 q; U: w8 N& a$ H# y' S9 E
}/ ?8 Z0 V4 i) v* t+ T
pInvSort->MoveItem(i,nDestPos);: H" m! a, V. {: A
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 q% _7 `, W6 m- O9 T Sleep(5);( S2 B' R* k. I) B- z1 ~% x
//Error("移动 - %d->%d",nSrc,nDestPos);
5 i2 M4 }# O* H$ ^8 Y nDestPos++;
( N; C2 q# X4 g" D, i% \ }7 g5 P" f/ {8 O3 o) z0 L% Z
//取第一个元素的信息
0 z: w# ]$ e3 q: m' l /*
. B) r P/ |6 c. y; j: ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; h" ?8 g8 ~" n' b2 m) [; r$ q$ x {5 U* O# \/ j! S+ V) q" r7 _ S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& J0 u) D8 x! {! b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ m4 x4 e: C8 e4 Q& d4 z }
) c: G7 T0 V3 S8 u: \6 @. h */! d( B1 A- `6 G8 Z- x8 j" n
//////////////////////////////////////////////////////////////////////////& d1 O K+ [! {3 u* l
break;9 @2 j; b1 E+ K. J9 Y+ c( z9 U
}7 ]4 @! x3 s; W8 _: {7 V9 r
} ! Y/ J, O0 E" X" O5 d; `; u
}+ b N" U5 l& @( y* f7 f" ~" g
m_wndMenu.SetVisible(FALSE); m( M9 D+ Z2 p1 G8 ]
% P8 J7 [7 ^; A* p. ~4 D2 ]0 n-------------------------------------------------------------------------------------------------------- V6 V0 ^9 o/ ^# @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* u# y: m- j+ I5 O5 X& D1 t$ H
{
3 C) y* i8 @1 p: }* Q) f9 nBaseMouseCursor();' U: V. z8 N+ k- Q5 b" K
}
9 d& F% `- x5 z在其下添加:
+ H ]6 P5 o" w+ F5 E G3 jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) y0 H# N. D* P. n0 J2 [1 O
{# ]( ?3 g% `( {! F
m_wndMenu.DeleteAllMenu();
# I ]% f* A- U% z0 X: Lm_wndMenu.CreateMenu(this);
) Z7 ]* w$ f6 k. J1 d4 j) _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 J" Q9 o1 Z. M/ |! P( C- k1 |
: \& g8 y/ {2 K, a: p1 P1 Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' ~0 h: K6 x* x3 F{' l& I( H6 @+ A5 x* [
//P以上级别才可以删除所有道具
1 @; O- [1 q; _" b5 X# R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 p! {+ ~* V9 Z9 e
}# D2 o0 s5 R7 x6 r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 c1 \& ^; F- Z) T0 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' \4 W1 p3 B8 k# E
m_wndMenu.SetFocus();/ q- C \# k+ m/ {$ \9 d5 v
}" d7 ?% n; I( \$ k
------------------------------------------------------------------------------------------------------------
/ Q9 I! y3 I$ {*************************
4 a3 t* H5 ~( O5 OWndField.h文件
?: D @; O% o*************************
5 `3 q2 C" M% |* N5 G* e ^3 o5 B搜索:BOOL m_bReport;( ?/ Q2 _6 `7 Z7 h# p" T" X
其后添加:
3 O1 O; N4 n2 d2 a) i& \( rCWndMenu m_wndMenu;5 z! |/ y6 ]: f# k. E) c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 B! R p% e4 Z* h* a
其后添加:, D/ N" C$ d% a) o
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 [- z! a/ t j" s4 P2 i
& A! @4 g( `* `( Z! l
+ E1 e' S: y6 C: l |
|