|
源文件中_Interface文件夹下WndField.cpp文件
; a, }9 \& x1 M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 h4 H) m) w% K- A. B# X
2 I, o% e }% }) ^* Xstruct sItem
' S* V6 ~( \8 u" _( c+ u& H% |) F{1 b+ _. F3 X% W# D& ~0 J7 t6 b
DWORD dwId;! V; y K! C+ R3 @8 W; R
DWORD dwKind2; p0 ]3 J2 w" n3 Q; w
DWORD dwItemId;
. k( v5 ~! @. wBYTE nIndex;2 a" j s2 ?, u ]
sItem(){
# F+ n w/ E) u9 ?' q4 U dwId = dwKind2 = dwItemId = nIndex = 0;8 C- v$ Z7 i2 o) K, k) S; W
}
, a9 L8 }; w3 L: b& j. H, l V; B. ubool operator < (const sItem p2)
2 E* G! I) C) l{: p6 f& J4 |/ P) e5 f3 ]# S
if (dwKind2 == p2.dwKind2)8 f# L; Q8 ?9 i5 ?4 p$ x `
{
! W5 _% X6 @5 a. { return dwItemId < p2.dwItemId;
0 X0 u" \; v3 y0 S! _6 t }else{
; U |' e$ F. a) I" d7 A. J return dwKind2 < p2.dwKind2;4 S Z9 i w' G/ m* g; {
}9 Z% b5 t) S, X
}- L- J. Q& x0 H/ \# U3 q$ V
};' D$ v/ s# D$ r4 Q4 M
class CInventorySort
" d4 C2 F- p( S{
: i+ d5 G' z: Zpublic:
- \5 n; f6 h( _! k- ^- jCInventorySort()4 u% h9 X7 p L+ ?& `/ e
{1 y* `" A. L1 ` g9 a- R
m_dwPos = 0;, c7 Y; g5 P+ ?( d9 _* Z1 G
}
4 ]" v9 m, \! ^/ [~CInventorySort(){}, Y( h, p* `+ k- R- h% C
private:
7 V5 N6 w8 z* X/ p3 bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ^9 k F7 j2 w# {5 E5 gDWORD m_dwPos;
8 U9 A9 N9 R; T. Z' B; Y `public:
: T4 x9 m% T Z8 x' m4 z4 x4 N5 O+ Y" {$ Uvoid Add(BYTE nIndex)3 ~ s7 G# R8 b7 Y0 y3 d
{
% X$ J) s1 q8 N4 R$ L if (m_dwPos >= MAX_INVENTORY)
- o# @! H0 Z2 q! s) q7 { {
, G8 q# B- s+ L3 k, j6 Q return;
' _. O5 m0 R5 B7 r/ R7 [; L }
4 G1 Z' C* Z" E/ z m_Item[m_dwPos].nIndex = nIndex;
7 k0 j0 q& W b( ?0 Q m_Item[m_dwPos].dwId = m_dwPos;
) h/ ]/ `! a, M$ `3 u- ` u6 ?9 t m_dwPos++;
: y4 `, X1 q% R8 E, x7 b# F4 @}: Q; t, E8 \' q/ \# D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 ^6 ~/ _ s. G' g5 `) Q$ B{ t+ I, @/ b5 [- P: M# W% `
for (int i=0;i<MAX_INVENTORY;i++)! Q( d" q) a) F
{
/ a {: t+ I' P if (m_Item.dwId == dwId)
- ~# T X( _' V" F' ` {
" m, ]: R- T* L. o! {6 a8 w return m_Item.nIndex;5 o7 f- o8 P/ T6 e
}2 i% B4 f8 A+ S! y
}
& l! \" p& Y7 V. v" Y' Z6 L5 ]' e return 255;$ F0 b; G/ x Z2 x
}; q" Z; }. ^* L+ [- i/ ^6 `6 |1 s/ ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 ~2 @7 f4 l' z& X$ D/ |
{
( o5 U; j* d& I1 U7 b- z$ h BYTE nTmp = 0;9 H: O. r$ | q& [7 e
bool bDest = false,bSrc = false;
8 j. W( x' g6 K for (int i=0;i<MAX_INVENTORY;i++)
# }! M. v- Y5 u8 Y {& Z* H: Z9 h5 u" }3 K$ r% f. S9 u
if (dwSrcId == m_Item.dwId)
# f2 ^5 h5 c* K# ^/ T9 G" o {
S n' C! k9 G# ` //id相等 则 改变对应的dest和src
& O, l4 c0 i' d2 u' ~ nTmp = m_Item.nIndex;. o q6 R( {7 }
m_Item.nIndex = dest;
! K3 a( l8 z8 e5 T# A }
8 d! g" R2 C4 H& b9 ] }! G+ s" h: k! h9 `
//临时数据保存完毕,交换开始: r9 e& z5 d; D4 \4 h
for (int i=0;i<MAX_INVENTORY;i++)$ J! r5 r+ h# F
{3 z5 s! n+ q5 S( M% C2 [+ O
if (dest == m_Item.nIndex)" B6 `3 @- i. A/ U$ g) k4 C
{( ]$ \8 x2 g% D0 a9 B' ^
//id相等 则 改变对应的dest和src
1 o: w* D3 u$ x+ r$ G% Z m_Item.nIndex = nTmp;
2 S% J# t. ]1 _ }
2 d$ o3 A$ ?* v( _5 c: q }. F2 n& Z3 G9 Y7 {
}) S' f# H3 e. [8 q. G
};( U7 y5 H3 \3 M1 h0 d
-------------------------------------------------------------------------0 W2 `; C3 J$ y% Y: ?) i4 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. H5 B, k/ z5 G2 c E, q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, \/ C; l9 q% _. I紧靠其上添加:
4 d) R4 X0 d; y7 S5 t" a: V7 Wif( pWndBase == &m_wndMenu )
$ H" m$ H# B$ q* \* x; q{
9 u, T* K/ P% w% p0 b2 O switch( nID )0 b7 R& C. o2 ]
{3 G: T0 ^& v& t( `8 G. \5 t
case 2:6 \4 T2 s3 [- O5 t6 d
{
, G8 N& F: r' w9 R7 M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; V& g" [3 ^) M s8 K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; [% \+ T. H( |& _ {
( d! ~/ U) g. C; y0 R% f% q3 D break;
% a+ b6 |; S* N2 P* b- w0 ~4 u }, [" A y+ p j' P! N4 n. m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 g8 ^. X1 o1 l8 j5 J! ` {
( a, i6 f+ F/ O `3 I6 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- n- b5 ~, H3 k if( !pItemElem )
1 \: X7 Z- V; g continue;
3 s" _8 t4 Y7 z+ k if(pItemElem->GetExtra() > 0)
! l& I% k& q2 ^( o' w continue;
o' @' A* d! H. ], Q; ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 k( ^) p1 f* G% ?: V7 a4 m2 N continue;
5 k2 c' \- ~6 b! L7 \2 i* x5 E/ [ if( g_pPlayer->IsUsing( pItemElem ) ) U+ |/ }6 g+ d) g0 \
continue;! x* G, ]: @' s8 X$ V; n- P/ D
if( pItemElem->IsUndestructable() == TRUE )
0 `& ?8 ~1 N' e2 I {; U9 v4 s* E Q) H* [" b, |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* `/ y1 A s! |% G! J* \
continue;1 O w2 r3 G& c/ r
}
3 l0 @8 D8 D# W- \% A& G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 }! X i( ?+ C/ H& l }( X: h& @& B( B! u
break;# h# h8 e( L! ?
}
K$ ^6 O# y3 l t5 K case 1:6 D+ m% q& @2 q5 n4 q) U
{
2 \/ K. U0 D/ P& ?. V. A8 i //整理背包
) C/ l+ s! _/ C/ p2 V$ W //////////////////////////////////////////////////////////////////////////
8 L2 S; F# B3 R+ P, ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, W6 U% _! K" _
//////////////////////////////////////////////////////////////////////////
. v- `$ W% w" Z W Z1 p5 Y6 F //////////////////////////////////////////////////////////////////////////1 Z& o# c" c9 X, _ O
CInventorySort* pInvSort = new CInventorySort;
/ g: A* k* r/ ?$ I" T vector <sItem> vItem;
4 M3 S( }2 z+ f vItem.resize(MAX_INVENTORY);//初始化大小
1 y+ b6 {. m6 d' W6 K2 X1 Z //////////////////////////////////////////////////////////////////////////
5 A7 z5 A- h9 k# N, n2 |: \3 b4 p //填充数据
( {: `7 W. @1 }* a8 S3 V, | B for (int i=0;i<MAX_INVENTORY;i++)8 l, [1 e }4 @7 x6 B! i' s: M# O
{
$ F" O- M1 Z. S6 ~% W' f6 k( f" }0 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ {9 ~& w/ V; o" T3 n+ a if (!pItemElem)
* p4 `8 V% I( Z {
7 ]/ j( r/ K) K& q2 Y6 W vItem.dwKind2 = 0xffffffff;( e: [+ b6 d; Q: N& \* P
vItem.dwItemId = 0xffffffff;9 s" f' x+ J1 S& @
vItem.nIndex = i;
7 B, F& _* n: Z) q4 K! V! S$ m }else {8 T Z; G2 @5 ?, m( `5 Q, ^
ItemProp* pProp = pItemElem->GetProp();
% o2 Y) a# }; d! v d+ u3 l" s7 q+ o vItem.dwKind2 = pProp->dwItemKind2;
9 W9 P/ L! k _! q/ G- Z vItem.dwItemId = pItemElem->m_dwItemId;0 Y* U. K% V" @* k1 t+ T# z
vItem.nIndex = i; X* B9 }& G- L4 W1 o) @
}
( m7 k$ r( J: [; Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 b2 i# j! u& a6 _5 V" I; z% V }+ K. L* B8 u. m) i J5 _7 i# a- `
//////////////////////////////////////////////////////////////////////////
' T5 d' i* q8 l: H8 r; ] sort(vItem.begin(),vItem.end());//排序3 l9 e+ x) f7 P2 q) {
//////////////////////////////////////////////////////////////////////////
! ` y5 T) |3 }5 E, w l //交换$ g, }3 Y: `0 ~3 t0 ~" ^5 q
for (size_t i=0;i<vItem.size();i++)( b0 f }9 i7 P7 g; G
{
, p; g/ Y( o; v2 [9 m e* D0 ~4 ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' J" n% E+ K7 w+ s pInvSort->Add(vItem.nIndex);7 O* L* p( n# }' k3 P8 ~4 j* L& i& b% T
}0 W7 r% e# g+ }. w& Z
BYTE nDestPos = 0;. S+ W6 C3 M( j4 N# Y! T) J. O% g& D. D
for (int i=0;i<MAX_INVENTORY;i++)
! [* ], f' f; J6 ^* j {
# F( T, A, i/ b* I X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( ]0 i- v, ]- {3 J6 }9 b l( Q
if (pItemElem)
! P* L0 o8 B1 { {
/ F+ z8 v. Y8 ~" M6 H( m( m# p if (IsUsingItem(pItemElem))" ]/ o1 ^5 m1 a) B5 w
{
. ~9 v3 f% c8 `7 A2 L //这个位置无法放- U' V: G/ ?! A( J2 w* E; `6 j
nDestPos++;( x) I- G4 s: t' W3 _1 u
}( c; f. j d- V' r
}
1 f% i: F! t) ?' @: P BYTE nSrc = pInvSort->GetItemSrc(i);) p4 t: q$ `1 R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& U. C% o; { K. c; H if (pItemElem)
4 S& n2 h% i, K1 Z& t. `+ Q* R {4 y2 J3 q- ^4 ~% Z. E6 J
if (IsUsingItem(pItemElem))% Z$ o4 a! f7 B% {7 U
{7 q& W- _0 {: w5 r5 p
//这个道具无法移动,跳过
& I9 a V; ~( }0 ^* E$ f) Q6 b continue;
: }% s4 }8 _9 u3 t }
3 [8 d- O; g ? }else{1 K+ @/ |) d5 H7 \% t
//空位置 不用动. {7 U" x5 u8 E w
continue;* T+ N. Z& z6 u# m7 J2 [% n; x8 w
}: Q2 d0 M% P" Z, N2 |7 k
//////////////////////////////////////////////////////////////////////////% L/ \0 f5 U+ A3 y- S, z( M1 [$ x
//开始移动' H) ], V" B4 ~1 u' @
if (nSrc == nDestPos)
" _0 F8 |2 k T7 A, m4 O# s {0 n% r' w; n2 K) O* W6 s
//原地不动
+ S9 i" v) Q9 @" W nDestPos++;- K7 o6 B: `# j8 [
continue;7 ~6 [' Y( w% U5 i7 T) F5 I& o
}% C/ G! m# I, S+ G" k8 L
pInvSort->MoveItem(i,nDestPos);* }; k1 Z8 T/ @( u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 Q1 n- N9 C- r2 i% u Sleep(5);1 i4 T( o& l8 P8 e1 W
//Error("移动 - %d->%d",nSrc,nDestPos);' V$ W% C' B' |% i
nDestPos++;; k+ z* X5 K- H, N" g$ F9 b
}4 t; p! C; \. p( b2 E' B
//取第一个元素的信息
1 J9 l6 m/ |$ p# ]2 M /*
; L/ U7 D2 U2 \& g: U: w# `! T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), _5 D, G6 Z/ K7 D
{
) ^/ k" z# M' S6 Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) ?" s+ U* E+ ~5 s- a* O, t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 A+ w4 K* b* `
}
1 D' B+ w: _: q0 V */
6 Y2 Q8 V2 i- D. H+ p /////////////////////////////////////////////////////////////////////////// Z' T+ N8 z/ [7 n
break;5 g$ S; `+ a, v' I6 E) ]$ N
}/ U1 g8 U; [( ?5 @* p
}
$ N, J# x! Z, l; e}! w' z* S$ w; b3 l e- x
m_wndMenu.SetVisible(FALSE);5 X, T4 ]; x' U$ s4 V1 J# g
9 p/ M% ?3 F$ ~4 K/ v--------------------------------------------------------------------------------------------------------0 Y X+ n/ p( ?1 t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 ^% L! d' M0 ?) E- J$ L
{/ `1 ^3 I1 W( m1 o7 Q6 O
BaseMouseCursor();: Y) r6 v4 Q- Z
}
0 ^ y/ l* p. N$ F' [" A. F在其下添加:
1 X6 T6 ]) w' xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: x+ u9 j) C/ \# K9 ?{
) e& B: \9 Q1 |% v% n' nm_wndMenu.DeleteAllMenu();
$ ^* `7 [0 L$ }. D9 L: C! \' Wm_wndMenu.CreateMenu(this);
. k7 S+ |/ B9 {& d; O k/ vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# j$ \7 |4 ~" S1 }' P$ [) U$ S0 @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 |$ o- c- {8 k
{
- [1 t! `+ }1 k/ z7 Z7 Q/ s) c //P以上级别才可以删除所有道具
# z6 D. X" ]% s- d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( x2 L1 K8 }% Q- Y7 X6 L! z1 H
}
4 g4 X! u* C2 V3 l* c# P! u h7 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) c# p0 \1 y0 B- p& q" z7 v2 r6 mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% w* {6 c9 | g7 ]7 i( i
m_wndMenu.SetFocus();- _" `. j) |* z, l: O7 @& L1 b8 ^/ m
}& u7 ?7 N: _6 g- J8 n
------------------------------------------------------------------------------------------------------------
$ v8 t' o4 @* J1 j. r*************************
`9 P- w/ b4 L/ p8 V' ^WndField.h文件 ~" @0 v7 b1 P2 c, M
*************************
/ E. V' {3 S) e6 R8 I$ l( k$ X1 A搜索:BOOL m_bReport;
9 h+ e s8 f7 O3 U+ U" r2 I4 w5 `% w其后添加:' G6 M8 x" L' t3 K9 ?+ F
CWndMenu m_wndMenu;7 K2 y8 ]6 r3 u& F$ K7 C+ _3 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 D) P: @+ m1 V. \# o( c7 Z
其后添加:) ^- a& w+ @+ H1 [2 U P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 Y3 ^8 V/ `- d$ m) Z9 k1 K) Z& E* ]6 B. X
8 {) i5 C' h& [/ U, q8 w
|
|