|
|
源文件中_Interface文件夹下WndField.cpp文件
9 x ?. _ L) j# e( Q- {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 D; h' a4 ?8 S4 `; p5 K/ q9 d
0 d6 ?, g- ?. istruct sItem
( h) k/ Y* L' h& I8 T: s, a% }2 S{
3 O' U# b7 x) s7 N+ NDWORD dwId;: t8 t2 \2 X' P0 Y' U
DWORD dwKind2;
" @8 j% b1 S% qDWORD dwItemId;5 p& H) g$ b6 G( v- N5 l8 J
BYTE nIndex;
! X* S b" N/ Q, j7 b# C$ DsItem(){
/ f, E" P8 u" v, f0 ^ dwId = dwKind2 = dwItemId = nIndex = 0;
% ^1 k2 ^ Y2 U* v8 J}% S+ v- N7 }/ ?* w/ h+ N7 Z* j
bool operator < (const sItem p2)
3 w! t2 ?; T2 d; y7 \/ m: O{
- ^/ i- ^2 ]3 E if (dwKind2 == p2.dwKind2)7 z8 G8 b X( K) S$ M; p* z4 M
{
2 L! Y- o6 w$ i$ G4 v/ P return dwItemId < p2.dwItemId;% k* Z) ?& f+ c6 E1 M" G% v" B
}else{
; A1 ~% r# e8 |5 c1 n return dwKind2 < p2.dwKind2;- r: \& \. z o/ i' m' p0 t
}- g. R5 i& K7 `' v! A$ C6 L7 u/ ~
}4 i0 t6 B. U: X3 ]! \7 h
};! E5 [+ |/ B, a7 m* N3 v& |
class CInventorySort
* n" N$ b$ O1 u! h% U5 I$ ]{3 m: Y! i; X) x' t+ w5 Q
public:% s' B: A1 u' H K" ^/ ?! t" q
CInventorySort()+ t+ I3 G9 }3 i, e" Y
{
* _. [! l0 b% e! K/ h% a m_dwPos = 0;+ t8 @' {8 d, D3 o
}
% l" f4 \+ Y! b~CInventorySort(){}: N4 h; A C7 u2 E* }( H
private: @6 |+ z! e" U) w" }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 ]' b, Y) {9 n5 ^* gDWORD m_dwPos;
9 M3 G' Y6 a* s( _% x/ |public:' C$ c# i: y! Q7 k
void Add(BYTE nIndex)
4 ]! ?$ i1 [+ U ?& s0 s* n0 P. y{
% a- T8 L; Y' u+ P3 s7 `' L if (m_dwPos >= MAX_INVENTORY)/ F. z$ u8 _& u' U( _
{- N. b) o; ^+ s6 e' u- Z7 }9 j( E
return;7 ?1 N( c' f1 C
}
8 C0 T' J) }4 P$ U g m_Item[m_dwPos].nIndex = nIndex;
! @6 f1 i, Z1 p( ` m_Item[m_dwPos].dwId = m_dwPos;
2 H7 T9 w0 o, A4 ~1 g m_dwPos++;
# {+ V, _ r% F& `' d2 k, W; }}. m- R3 A7 }0 W: n4 ~9 q. M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' T: x0 r) O; W1 ?2 Z! b
{3 q& O I9 U' d
for (int i=0;i<MAX_INVENTORY;i++)3 S- x9 D. d7 y: ^& U8 f U( h
{/ S# d4 S6 m. n( d/ o; x. ~% Q
if (m_Item.dwId == dwId)4 F$ y: h. H6 g3 ^& A
{
0 x- J9 A% U' u" y return m_Item.nIndex;% h/ p$ ]+ o& k' O# T$ b- E
}
8 f% H5 U% M- r1 Q }8 ^4 s5 w* K7 m. j1 [
return 255;( I, a; [% |0 ^
}' s! R2 H: G! \( A V4 R/ b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 T* k1 Z4 w1 U
{
. j" K5 d4 G. G5 O& ?, ~ BYTE nTmp = 0;5 ]/ D' _4 j1 T
bool bDest = false,bSrc = false;
* M; z {* I* U$ ~+ ^ for (int i=0;i<MAX_INVENTORY;i++)- f( V+ X7 f* K$ [! o
{- Z8 d; q& ]* @5 G8 L: X
if (dwSrcId == m_Item.dwId)4 H ^) v/ T. t
{/ i( p' V: }) s
//id相等 则 改变对应的dest和src1 [; |+ M' Q0 V3 j' q! |* Z- C. A
nTmp = m_Item.nIndex;( A y; O: `9 ?. t1 L
m_Item.nIndex = dest;
m( K7 K/ @4 q: J+ W, Y }
( J @" n' j* | d5 N2 U! k }
1 y- ^; q9 G" a. G //临时数据保存完毕,交换开始
" d+ z8 R5 c0 F1 d1 ^ for (int i=0;i<MAX_INVENTORY;i++)) q, r5 N) v$ K- z1 a/ D9 J; \
{5 P* \ ?$ d S2 A- S
if (dest == m_Item.nIndex)
4 \" |5 [3 c) I! h- _- Z6 O* W( V! z: X {
# f9 B) o7 O$ M! o9 q3 ? //id相等 则 改变对应的dest和src$ P9 m8 E8 @+ n6 q! w
m_Item.nIndex = nTmp;
, Q, E3 U8 h9 `4 e2 g- l) s/ ]7 E }
* {- ]2 B/ y* V4 q$ q( j. ]8 Y }
% s4 ^; s# |& R# @6 {}; N# Q% `/ h- q1 B- v% u# }
};
: J6 q' Q# ?9 q3 c-------------------------------------------------------------------------% {$ Z( _- L' V J, Z2 s1 O1 K
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): X1 _- e) S# Q) a) V5 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* b1 }2 X/ |6 Q1 I' \, k紧靠其上添加:
5 @3 {" r+ j, {* V) N0 Zif( pWndBase == &m_wndMenu )% O: s0 o) T. W8 A9 f0 h% j
{( ]5 y" `1 z; d e
switch( nID )
7 n; i; l+ I+ @5 A+ B7 m4 I- ? {5 r* G2 B0 @( j9 L! @" Z6 U
case 2:, l( k7 N& z, O: a2 f8 H
{
0 B5 F P$ v7 ]8 ?& Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 _3 D" t" S* T1 x. ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" C: t$ ]! {3 c4 J( m4 Q
{
! q4 K6 {, Q) T9 X8 u. N break;9 Q1 [8 s" E, C
}* G' F4 f4 u; `6 H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 M2 s3 l% U# c3 B
{+ d1 h+ O+ A* y. _! @9 W& ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ `( v1 Z- `1 K- Z
if( !pItemElem )* n% n, c; @6 K+ o* n
continue;! y- d0 } y6 |& f8 l/ {. j, n
if(pItemElem->GetExtra() > 0)6 K4 H* N$ r. F7 s* V6 \1 d! J% D
continue;9 e9 k% e: v( t8 J! |+ C! x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 F9 h& O0 N$ n0 B/ i
continue;
2 `( F* Y/ \# d) t if( g_pPlayer->IsUsing( pItemElem ) )+ z3 w& i5 r: U& P
continue;
3 s5 a7 a' s; j# r if( pItemElem->IsUndestructable() == TRUE )$ }" Q5 r( y3 T( y- ~+ N/ f% h
{5 ]/ r6 n [. ?& `* A
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 ^& ^/ O; B% l# u continue;
$ }+ _) q0 u' y, M }
4 F/ g' u& c' T( P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, K1 U% o4 S, O5 B
}
1 n2 q$ K4 ]1 x, C$ M; U | break;
- M, K2 k2 I8 N7 p% k0 }- a }+ m9 Q( c' O1 \7 A" F
case 1:
/ q& ]: Y/ a3 c$ @( n& K, g* u7 U, y {5 f# r" w& g) e6 N3 Z1 j
//整理背包
& q) [# \! E% S: w W* j3 M //////////////////////////////////////////////////////////////////////////! u$ z0 Y7 c$ D6 L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
J! d: Q7 H4 z //////////////////////////////////////////////////////////////////////////
2 k9 p1 c2 T3 X //////////////////////////////////////////////////////////////////////////
# f4 @- t* K4 \! a G CInventorySort* pInvSort = new CInventorySort;
, s7 s* U) m! y' W/ @ vector <sItem> vItem;: W( \& d* T: A3 u/ L1 P0 q/ g0 I5 {
vItem.resize(MAX_INVENTORY);//初始化大小 N! q, V0 G) x h$ p- r
//////////////////////////////////////////////////////////////////////////
9 I* A. P; q7 l f3 p //填充数据
' J4 T( U, \" M for (int i=0;i<MAX_INVENTORY;i++)
+ O, V) q' S) }: v ^- G! _ {9 o% M9 F3 \- v% p! K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' ?/ N; K! o$ c5 v1 W9 j/ U/ Y5 a if (!pItemElem)- ^, U6 M* g% ]2 [- Q4 U
{0 Q$ R% s5 A+ C' p3 `* M& a
vItem.dwKind2 = 0xffffffff;( z! l- b6 [1 S+ \( l2 Z
vItem.dwItemId = 0xffffffff;
, B) E# H1 o3 F9 b+ D vItem.nIndex = i;
0 W) u P/ Q" h' g9 `' r }else {' t8 |- C5 W) n$ W+ D/ l; _
ItemProp* pProp = pItemElem->GetProp();
: T e9 S5 {8 b0 a; [1 I# U8 \ vItem.dwKind2 = pProp->dwItemKind2;6 A9 ]+ y, h! K1 T% E6 N7 _
vItem.dwItemId = pItemElem->m_dwItemId;% {5 n$ }. p0 G' S/ \$ g4 D+ k
vItem.nIndex = i;
: j% b3 C+ f4 g; b# S& [, E }9 l* ?: p2 ^7 K6 \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ i8 C& d( F/ |' b1 c
}
% G$ Y2 t5 n9 Q; e" n | //////////////////////////////////////////////////////////////////////////6 B2 m8 Q1 P: [( O
sort(vItem.begin(),vItem.end());//排序; J9 G, k# a$ e2 w) ~0 K: w
//////////////////////////////////////////////////////////////////////////. V1 g/ Z; J$ ~8 l: r# S2 k
//交换. }; n O2 G- }. ~7 r
for (size_t i=0;i<vItem.size();i++)( v3 J+ c+ Y: y: m; O( E" ^
{
( H( Y( p$ l. K) j( O( [; N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! d$ ~% @4 E1 X$ d. D pInvSort->Add(vItem.nIndex);
` x0 J5 G/ `' x, f1 j8 _8 ` }8 z1 S6 {1 z; _6 y% j5 E
BYTE nDestPos = 0;) ?& N, O: b8 k O* M- l( \
for (int i=0;i<MAX_INVENTORY;i++)
! K+ O( A) {8 z5 x3 Y {
0 A3 Y5 k- V, ]1 d/ K5 M2 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 f, O2 h8 m+ y o. `7 a8 w if (pItemElem)
$ f m% t- H x U* D5 p {4 Z- m+ T: ~; D/ X) I
if (IsUsingItem(pItemElem))
9 p! V: Q0 J3 @8 Y' W {
: _3 I+ ~' F; w9 w9 Q7 i6 ? //这个位置无法放
9 w. T% o0 n2 J1 b nDestPos++;
) Z+ y) f- |( `, G+ H6 M3 F) |5 W1 g }
& G: g. F- F8 k& L& L ^ }
8 @/ |" Q8 K' \ j' ` BYTE nSrc = pInvSort->GetItemSrc(i);
3 n4 P1 s. u+ T2 z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* k5 e2 N' {. w- V ~+ M' R" X# C
if (pItemElem)
9 j$ x. i- f/ b {- X! D: ?8 V$ C$ B, @9 Z
if (IsUsingItem(pItemElem))
: F4 @& b# B% T9 R {
" U) n! t5 `2 S1 X4 ?. |7 r //这个道具无法移动,跳过
1 i' n/ A% V+ Q( `" b& o continue;! a5 @$ d$ x U0 l: _' J9 L+ i
}; c W, O. ~4 `; m7 W
}else{
, t1 M& h$ W w# S: E" o7 r* r //空位置 不用动' u( j `4 H- y1 f. X: \" C
continue;
+ F" w) c8 H' v1 k$ W0 z; m/ C }5 {" S5 O/ N- N8 X2 Q9 w" O5 A( i
//////////////////////////////////////////////////////////////////////////" M% z ]; Z0 U) \3 M* B
//开始移动
9 Z9 n7 ~5 D: W; q9 y$ `8 } if (nSrc == nDestPos)4 S& r& }5 e5 t6 r5 S" ^# x
{+ E: Q" k! \7 T ^/ O
//原地不动* x& O' E- U+ W8 X1 G
nDestPos++;
; \) b5 e. R1 b+ k continue;
/ c8 P: q! S( _ }. O k4 Y: w% r& \
pInvSort->MoveItem(i,nDestPos);
1 ~! k+ s3 V7 A- U g_DPlay.SendMoveItem(0,nSrc,nDestPos);: ?. u J* v- d4 \& q4 C! z; Z
Sleep(5);
" @5 O+ N$ D$ [5 O" n$ _ //Error("移动 - %d->%d",nSrc,nDestPos);- y3 k3 P5 `$ u4 E/ y
nDestPos++;1 r1 e: p' L. e7 e/ Q4 J* E
}4 v3 n# t+ G. @
//取第一个元素的信息! b5 {* {" l; u0 f' C4 }1 p+ |8 [
/*# T5 |" z: j! i; C0 h0 m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 |3 O" S2 r4 `8 f: Y* W9 m5 c- W7 \ {. F* Z+ {# t2 [4 u3 w$ A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. N y$ n5 t) B6 ?- |* d0 G g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 `6 j0 P) T0 O; _ }
3 L) b' z# A0 K( @% p9 [4 O/ t7 Z5 v */
* F2 S) f8 B$ { R* h; t% Z //////////////////////////////////////////////////////////////////////////; O- _' ~: Y# Q. p$ ?& M! U
break;
3 T/ }, F; Y; O. w }( p" \) K( C7 e9 @7 V4 H
}
1 u, E7 k/ R% H6 f1 b+ W, I}
; n9 |" o. s9 v4 c, em_wndMenu.SetVisible(FALSE);
2 U! M9 R) c7 K/ D y; S% [: Q% f3 P* _. l5 D; z5 w- ~( a
--------------------------------------------------------------------------------------------------------1 j' ^: D0 g7 T0 A
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 ^: c3 J4 _: P& X$ z
{2 X- ^6 Q; u( D' b5 |
BaseMouseCursor();
1 h4 K/ d+ f+ G}. y, Y& }6 [9 [/ \, @5 H
在其下添加:. P: d5 o: P2 m! x( I: `
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 H3 Z! j( r! U{
& c* x6 z* |( |' _) G S" qm_wndMenu.DeleteAllMenu();- k9 t S* ^! \6 ]" |* m! e: [
m_wndMenu.CreateMenu(this);
& }: z& W; i- [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 _. c+ d: i; u7 t) y
& x( n3 O- w8 w- Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); u9 l1 T& A( U% F+ h
{3 `9 O8 `: m; T& Y% I0 _
//P以上级别才可以删除所有道具
' ?- o9 R) V0 h3 S. \+ k9 L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, h" T) L; C% j/ k: t& T2 B6 x
}5 N% p0 a% ^4 Z% D. Z- h5 a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- M3 c/ N4 G4 x$ m7 p# Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! i. w/ O4 o) A M+ E
m_wndMenu.SetFocus();
4 F2 ]& K' T5 G# V E3 w}" P4 H6 V2 J2 a0 q" n+ b, l1 r$ H
------------------------------------------------------------------------------------------------------------
' O3 E1 S( N8 Q, k8 _+ t' P*************************$ B6 _& p1 v' m& J A- d
WndField.h文件
$ U$ a- }! k( B. Y*************************" v; g) M0 J4 o; s
搜索:BOOL m_bReport;
* A" S( b. a9 K3 O4 v/ I: L其后添加:
+ E; e! f# N2 z, OCWndMenu m_wndMenu;) T" j" Y6 e4 O$ [
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 ^, D+ {/ X% g- i6 r& W
其后添加:$ m ]0 y u/ o" Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( [& K( H8 ]1 G( {" z- b
f; t6 W9 b7 |: ~: w, G6 O5 h2 t+ b! a/ }! l0 M* [
|
|