|
|
源文件中_Interface文件夹下WndField.cpp文件; [7 @8 p* O: |( L! V0 |+ w: [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 I7 b: S; Z8 ]" v; Y9 x% i' _9 }, I
& }( h# W( b! L8 P; B& y, [
struct sItem
6 _; N- u7 }, w# s) F1 c0 o{2 ?$ {, v }2 R" Y0 i; g+ }+ l {0 W
DWORD dwId;
! W! ]( o- ~" a/ a8 b: kDWORD dwKind2;
1 v( t% t+ `6 s" Z' ?DWORD dwItemId;8 V, |) o. X1 r8 Z# U
BYTE nIndex;! c8 c1 r6 G0 z& ^6 g
sItem(){2 x* s$ ~; x0 y+ ~; p" D
dwId = dwKind2 = dwItemId = nIndex = 0;9 X- y* I$ G: K
}$ y, V/ Y. M1 _/ N
bool operator < (const sItem p2)
' t3 V# C7 U9 v G8 t{" I% |% z+ [" l$ @
if (dwKind2 == p2.dwKind2)" g& E. G8 p' i1 L! ]$ H
{0 w$ P4 k' O9 q3 W# H# J6 r' w
return dwItemId < p2.dwItemId;7 O* o+ ]* ?! R9 v& d
}else{1 L$ B4 E2 W( `* q+ Q
return dwKind2 < p2.dwKind2;
0 r2 v- j) t% H( z: L( x: o }
) `2 z5 r% g2 D% d}
4 y1 x. z( U0 M K% Y0 t};% W1 Q. U# P1 m7 L# |4 C
class CInventorySort
$ R& I0 U5 f9 {: D! `{
' k8 f5 s- n/ E$ _$ `public:; O; _ Y3 W+ z6 \& U7 K+ q
CInventorySort()2 o& ?. X4 p: k( n
{# g; M7 Z) M$ @
m_dwPos = 0;- p# j* r) P7 o4 u0 }! w ^4 Z8 b
}; x5 \0 z/ @9 K- X. }% u9 l: C- c
~CInventorySort(){}0 E# }; M2 k p9 f; q
private:8 y1 _/ g9 B1 Z% _) t5 C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 f) G2 y3 w3 Q+ C# R: dDWORD m_dwPos;- l% L' X/ V% h1 b
public:; O& ~- b6 x2 \0 f" a
void Add(BYTE nIndex)
& d" f2 C. J A{
' @% f8 ?' x; s% ?9 O7 ~4 a' w2 F if (m_dwPos >= MAX_INVENTORY)
- c8 Y- S: H W: l {
/ c( l$ r% H/ G" T return;
v9 f5 r/ F- { y }
3 F$ S' w8 H' [% P) s( E m_Item[m_dwPos].nIndex = nIndex;5 d2 a; S# F+ P) O5 c/ `
m_Item[m_dwPos].dwId = m_dwPos;
" F1 Q% i$ l9 h$ J+ @ k* F$ R m_dwPos++;
/ R% e0 X2 @1 o}+ U0 J6 p5 V& i2 A5 W+ h- C _" u/ t' o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' n5 b9 }1 E6 |: t$ u. B8 z
{
$ k; }4 [- M6 z7 o for (int i=0;i<MAX_INVENTORY;i++)
; D# T/ E) P. W) h z {, j5 V9 H4 C# A V
if (m_Item.dwId == dwId)
, z6 \ h5 z3 A. j8 B- K2 g {+ U, Q* ?# _. t* u- G0 q# H
return m_Item.nIndex;
* k* q* y7 `- y7 p }
i+ ^* l. K3 D2 [- S$ y6 h$ L }6 `* q+ N+ ] h
return 255;
' J. N! Y0 X! W% a) ^# H}& p, A4 T! u# y- t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' `) m" i1 Y- J" z. C! Q{: Z1 O$ q( i& V% J
BYTE nTmp = 0;2 G7 \' p9 L! u3 Z4 a% [8 d" ]8 V
bool bDest = false,bSrc = false; E6 ~% `! @) _) P. s3 h) c
for (int i=0;i<MAX_INVENTORY;i++)
, r$ c; M! S1 X B* ` {% n+ z0 F9 }3 D$ q* W# \3 s3 }
if (dwSrcId == m_Item.dwId)3 h9 B3 S2 ?3 @/ \) P6 @
{* G$ F- B- N1 z6 c
//id相等 则 改变对应的dest和src- M$ _. V2 s) G: s' p
nTmp = m_Item.nIndex;) _& R% _5 s1 U4 n$ ^4 [7 C1 E. t
m_Item.nIndex = dest;" ]6 @* l5 U- X1 ?' U! m
}) ]2 y2 s1 k& \# m& {) Z- d
}
8 ?! X8 i. \8 o$ ?9 C8 W5 g, f //临时数据保存完毕,交换开始
+ b2 M% d6 i% ~; M" S' R0 [ for (int i=0;i<MAX_INVENTORY;i++)* Z$ Q: c% d/ y- A: B
{
5 a& I/ W! _1 g* |; c8 N if (dest == m_Item.nIndex)% r; z" a: S" j( m
{
% {" E8 a7 Q3 ]9 R' y3 t7 Q //id相等 则 改变对应的dest和src
! {5 ]& Z+ y' }+ p9 d$ v m_Item.nIndex = nTmp;% {2 f# j* d# B* P
}
1 C+ D2 B8 W2 x% J: v) u }
5 e2 ^& w7 O- {}; R2 I" d; O9 @
};* Q( r4 F p- z
-------------------------------------------------------------------------0 R6 [0 r, B6 U- j6 W
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 Z5 Y5 H; }3 Y, P/ v# W4 J. L' P; ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 n. R# _% y, ]8 l$ g& S紧靠其上添加:, v1 I3 D8 b! O2 s) R ?; ^9 Z
if( pWndBase == &m_wndMenu )# N8 ]. c6 P5 G8 U. U
{
5 {$ w& \& g( f4 C switch( nID )3 U. w- l8 u0 h. w
{
, t7 `5 x( P9 {, H case 2:
$ N' K7 K$ X6 \" `' I$ F7 d {, Q7 }# ~" f9 |: F9 D/ |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 Q% @6 l4 Y/ E" S: @2 [ P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 x7 m- l( _& H! x- E ?) h( ~7 H {" P; d) f2 b3 G* N( m
break;
8 }# E$ W, V g7 P, C; M: D }; P6 X' ]/ P' o' F W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 E( ^/ j1 m; j6 g- u {
5 K# b* l2 b$ M8 a, r3 s2 Y4 u* V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 t6 N# T1 C" f7 a( T; N
if( !pItemElem )
: Q4 p" v1 r# Z* x6 V: I continue;
, `% W3 W; q% v8 b if(pItemElem->GetExtra() > 0) _( U j0 U* z" E( f, C' D4 ~
continue;
" G% s$ N7 W7 l0 s. ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & b3 _; Y+ b6 V
continue;. O+ c# J$ W2 T5 t- P" T
if( g_pPlayer->IsUsing( pItemElem ) )
& D$ ]. r5 q! X" u/ \9 [% u continue;0 _ w5 Y2 x1 E# ?4 R/ e8 g# o
if( pItemElem->IsUndestructable() == TRUE )% u/ a% w$ ]8 Q8 M: w3 |
{
6 q" `* B6 y! p5 F6 T) n2 G3 o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 _& T" O. e, n0 q1 f; J! }9 m1 k
continue;
0 _( v3 ^; ^6 ] }) g2 [4 R$ P2 A8 k
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); ]& } v, U( L8 l: F# t
}6 s. _, V3 I, O! N. B# L0 ?; h J' {* v! z
break;* E% E+ u5 t% j' U( h, H. q0 u- q
}
, @- H* t0 n# q6 W+ i8 o0 s case 1:& p ], m8 T, `' W7 x! v4 G4 L
{2 Z; _9 M" v: S4 M- g, M6 L
//整理背包8 v% f5 }# |. p' j4 m& c$ y- ?
//////////////////////////////////////////////////////////////////////////
' a- Y: g; A6 O5 q" X7 N h& t- L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( S U5 _! o3 J6 e. E# y/ f( e" { //////////////////////////////////////////////////////////////////////////
8 A# k* i' t! ^' A* t; H) T //////////////////////////////////////////////////////////////////////////2 n& T# ^ e" \* ]0 l# e! V0 [5 {
CInventorySort* pInvSort = new CInventorySort;- G' c2 a0 i' H; M9 m
vector <sItem> vItem;" j$ |* ?, B5 Q. c
vItem.resize(MAX_INVENTORY);//初始化大小
Y7 i) ]6 ?( p/ n$ l( o* t //////////////////////////////////////////////////////////////////////////
& k3 F, ]5 n/ a8 o$ P6 w //填充数据
9 ]# w: _) f2 d3 x! ~ for (int i=0;i<MAX_INVENTORY;i++)
# b: S4 D$ e: q! ~0 l8 \: } {% h1 a" F; v' K# c: R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 _9 t: l$ x9 q3 |/ R if (!pItemElem)
- p7 Z, E! `% @" D2 h' | {. M* u5 M- S( y6 z' G
vItem.dwKind2 = 0xffffffff;
' H) G- b* O; ^" U* o vItem.dwItemId = 0xffffffff;
/ U8 O1 i+ |6 d( F4 n6 B& Z y vItem.nIndex = i;
% ]& v% m) ?& {0 G6 z r2 g }else {
$ X$ K3 o; u% ~- c- @% j% S3 P5 Z. J3 c ItemProp* pProp = pItemElem->GetProp();
) l; r8 q9 ~& N9 D. j vItem.dwKind2 = pProp->dwItemKind2;
" f& A: \! ^: T: E vItem.dwItemId = pItemElem->m_dwItemId;0 `% M' I/ ]0 \1 l
vItem.nIndex = i;% x" G0 r( D( v i6 ?% O: \
}6 C' o! i9 A& h; U! P1 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: z( H( e) z9 y' Q: s, n D }9 m0 h/ E# Z, C" Y/ O y5 ]
//////////////////////////////////////////////////////////////////////////9 f+ P0 @" q9 C a) _
sort(vItem.begin(),vItem.end());//排序5 z! y" \% P2 L5 n* p' _
//////////////////////////////////////////////////////////////////////////
" J3 ]* m, f" e8 S! R' d$ d$ U3 S //交换
1 `7 o! T, W6 ]' O for (size_t i=0;i<vItem.size();i++)0 g& y1 e9 j5 z Z# `8 C
{% E. R! S! c6 b/ R' q2 E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 L# w9 }7 V6 Z. M$ S3 y
pInvSort->Add(vItem.nIndex);
. X$ u/ ]; l! ~9 h& _. z }/ e- V& K. r$ d& v h. f% {
BYTE nDestPos = 0;' C$ K7 [8 O8 a* o& Q
for (int i=0;i<MAX_INVENTORY;i++)2 `2 m- q8 ]+ O& b
{
) V9 l- r1 l4 w* N" v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ D9 u1 R: D; H0 O9 V( ]/ h
if (pItemElem)
0 p. B) N5 } ]4 d. G8 q4 ] {' A0 O' D8 ]' {; k' A
if (IsUsingItem(pItemElem))' C. _* y( W1 W* J+ c6 }+ S5 p$ L
{/ c! ~" J6 Z. g; M! C
//这个位置无法放
2 ~* T: {8 Z# e) J5 U7 m nDestPos++;) d5 E8 n% N$ }
}
- N1 }5 A8 |( y6 b: q$ y) c9 O0 d }
, ~9 }9 D, B# a4 M BYTE nSrc = pInvSort->GetItemSrc(i);' W% W/ b) G# B! u) T8 ~2 y$ t! X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% X3 w' l# R% w" f if (pItemElem)
% T3 v, T. f# P1 c0 _ {
2 H; K1 n( P$ J" F8 c5 T if (IsUsingItem(pItemElem))
7 a' c; {: Z, O& _: p& R4 @ {0 T$ @5 I1 D: }; V& W2 B
//这个道具无法移动,跳过
1 E$ H5 p9 }5 {; Q! r# p: ?# L continue;
, A) i- @1 ^4 n0 Q$ F; I& ]+ m }
& G( g3 F! Z% O' ~: C; [7 \4 d1 ~" d }else{" T. A6 k$ I/ `! x! n
//空位置 不用动
; O" |# n* h3 i8 h+ N& j e: w% N continue;
9 ?6 E7 x% H$ _, L- j3 V2 {4 ] f }$ W6 D; T% I$ M: A/ v3 L3 h7 R ?
//////////////////////////////////////////////////////////////////////////
0 y% W/ ]0 J8 S1 X# h( n" K //开始移动 F0 ^9 u& ^ j
if (nSrc == nDestPos); h' U) }1 u" Z: ]
{
! q. }/ o' ]: j8 {/ C7 R //原地不动& [, x8 R# J1 o5 w6 F
nDestPos++;
/ Z# `2 ?) C2 D4 _! @: H- L continue;
# V+ z' l: b! B! U8 |% o }
6 x5 c$ E, K) ~$ L6 _, P5 J( \- I pInvSort->MoveItem(i,nDestPos);' I$ e5 n8 N( [' m8 C! E' b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ g, A' L3 @: C& F Sleep(5);
. h2 M' R( W# E" V1 J( O( j //Error("移动 - %d->%d",nSrc,nDestPos);; e1 b8 f V" r+ |4 q7 m* M
nDestPos++;2 n/ Z0 F" I- j' m: I, \
}
7 R$ Y& Q) f& D" k" w1 a //取第一个元素的信息
0 F5 t, x, W& N$ M% ~& \6 Z /*
* h9 g7 l8 y0 f1 N: R' Y% ?# H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 A! s! ?# ], p/ ?5 s {, {' N# X& ^3 Z9 t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, U, s y2 m: u8 I5 ^4 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" h* r. l0 I5 l! L1 v3 L6 I% K
}
1 \ I0 [, [ B */ N7 z- L7 |* e" y
//////////////////////////////////////////////////////////////////////////' x5 ]) A% N5 V' y% j7 }
break;
I6 w$ |# r5 @( ^4 E+ ]' h2 @& k }
8 C( L+ n7 X) A Z0 ?* N7 ] } 0 C% _' o+ ~& L$ }3 g
}
# E0 l; ^9 q) ~ om_wndMenu.SetVisible(FALSE);3 ]& P4 c9 b/ A4 | c* F
9 [" O% t3 @& G% w* u4 `% g% g4 S$ l--------------------------------------------------------------------------------------------------------
2 i7 v( x* J E7 l- Z- Z4 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 {' l @# f$ T- }1 d: y2 ~: u! J
{
" h/ U- q7 M& B+ @# R5 KBaseMouseCursor();& x! y2 A4 T: Y" Z* ?+ ?
}
; W$ K( s) J& J6 @5 E在其下添加:
; [. J4 d: M) E# V6 O4 ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ M7 F7 r* d/ M) H& i7 a" b0 ^{
) R* F' g$ O: n3 Fm_wndMenu.DeleteAllMenu();
. W. e1 b' l, d6 D# ~" e5 Am_wndMenu.CreateMenu(this);
1 L$ T! E$ U$ D3 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% X0 O/ b: H" U9 u% a8 g) w
' k, K1 D: b8 U6 G6 C2 e; S
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 }1 F5 J4 K- k" a
{
: D7 p, Q3 B, i& K0 G& H$ R2 M //P以上级别才可以删除所有道具" u4 e% @4 ^1 i) @" U* ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; e9 L6 J4 c! f- j4 Q( e6 ]- C
}
8 y& n# A' B% ?# v0 Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 V* Q/ Z3 b# }2 p6 w0 ]' C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 u& p0 O- E | n9 q- l5 t; v
m_wndMenu.SetFocus();7 }3 ?; N8 Z* }2 V. e# f3 {
}
8 N. o( o: A F/ f7 ]# J" i------------------------------------------------------------------------------------------------------------
2 a- H5 b/ x0 g: d. }* J# a*************************
0 U' }0 X+ C3 F3 Z' SWndField.h文件
8 q, T1 n2 U2 J' k*************************
' t0 ]1 K& S% T搜索:BOOL m_bReport;2 G- E! W/ H/ k9 L. F
其后添加:
" L' i' Z+ a" lCWndMenu m_wndMenu;
1 d% H' ~$ W! k( A& d7 G) O搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 D' N, y) W3 m& ~/ X/ e2 s其后添加:/ X- V! ?9 p# p8 o+ B
virtual void OnRButtonUp(UINT nFlags, CPoint point);) ^+ z, ]) B) Y$ R) Y
5 G b" }* Z. B% x+ f- [6 J" o
, ^" b, c$ b2 U n |
|