|
|
源文件中_Interface文件夹下WndField.cpp文件/ {) {# J, U9 K; o% z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) O; a$ c8 j% U" h3 o0 }' }4 C9 ^5 a- x7 d! W( R6 }5 ^
struct sItem6 t9 i( O5 w* N5 Q- a, m
{
7 p$ J, ]% _; r% n7 UDWORD dwId;; E+ P/ _9 n% S% F
DWORD dwKind2;4 u8 L* \9 F D: D* y' r
DWORD dwItemId;- j' t8 N! H5 @: s9 `1 @+ S! ~
BYTE nIndex;! X3 ^3 Y O9 |+ G$ K
sItem(){
, P" f# X& h8 ` dwId = dwKind2 = dwItemId = nIndex = 0;
4 f6 v5 P+ m0 w$ u2 w} Z$ {+ x4 O7 [/ k% s
bool operator < (const sItem p2); m& j; ?+ \1 V; f, ]: E
{
* @( z3 B" p ?8 ` if (dwKind2 == p2.dwKind2)8 U* N1 ~# f% T4 Z: ~! y
{3 f) I) ^: M) u/ v0 P; K
return dwItemId < p2.dwItemId;& Y% a, C+ T$ l0 ~, N; I
}else{, F, f% m: X5 J
return dwKind2 < p2.dwKind2;
0 k d8 ?5 Z4 S5 F) z& e }
. Z# ]# e3 {& b/ m2 e/ o. K}
. o) l9 b$ ]9 b4 [" l2 X/ g};
X0 r2 C$ ]. D3 } @$ lclass CInventorySort- _& \7 N8 N& z: u% R- |+ H
{9 S7 |- t$ h9 H/ l! v w
public:# d0 O1 E0 k. c+ ]
CInventorySort()* }- p* M5 c! `0 b% }# A* Q. G, R; L
{ j1 w+ }; F4 e+ F
m_dwPos = 0;: O9 j1 X3 v; E, P9 M
}
7 O2 }0 n( h* M9 n9 ]9 I~CInventorySort(){}0 ~/ w6 ]6 o& e
private:
q0 q% h8 r. L( \5 a" { X: OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% L/ s6 W# J1 F2 w0 \DWORD m_dwPos;# [2 E* H* x! [' T! |8 E$ g$ n
public:
3 k, b4 E. m# J2 M$ N+ xvoid Add(BYTE nIndex)0 M( G+ T! H7 U: R9 ~6 ^; w) H K
{
' N+ F7 Q/ c# q' Y if (m_dwPos >= MAX_INVENTORY) V3 \9 u& B$ q5 A/ ]( S J9 r4 X
{
2 z2 u, K& _+ Z3 j return;
+ V/ R9 H4 t5 V& P' j1 c; [ }
7 o( Z9 h9 T/ v3 _. w m_Item[m_dwPos].nIndex = nIndex;& h: v3 g, s1 A
m_Item[m_dwPos].dwId = m_dwPos;
/ N B; U, N, ~: z: `, Y m_dwPos++;
& X; L9 O8 X+ s1 W! v% W) C M# p, q}9 Y+ v- I5 h! Z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 L5 T2 K5 b' _% V" Y
{
, P. z+ S" m9 x+ C# \$ b4 B for (int i=0;i<MAX_INVENTORY;i++)
3 `1 B: f% I( S {
9 c7 r6 m9 z5 h if (m_Item.dwId == dwId)8 P. K, g/ Q) X$ Q2 r: O- O
{0 A* p9 J% N; _9 K: z3 d! P R
return m_Item.nIndex;
( G4 P( S: Z4 n7 } }* g3 [# c; A& K1 v
}2 q2 r* W, C% j
return 255;$ @( J% U7 j* F- I
}
: U( P' y( l! i9 k, k! ~, l8 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" D5 _$ |' }* I8 u0 z+ D
{9 w0 y) k' ^2 b$ N
BYTE nTmp = 0;' a/ H- t- I- `7 s3 u/ s
bool bDest = false,bSrc = false;
8 X* Y: N3 ^9 w' o$ c9 X for (int i=0;i<MAX_INVENTORY;i++)% K! k% b4 X0 ~
{: D/ }6 l8 G% F' k" X
if (dwSrcId == m_Item.dwId)# `% e; v/ C: U1 q/ r# N
{# @6 F( h: [& Y- w
//id相等 则 改变对应的dest和src
0 U" l* ^. ~/ T( m nTmp = m_Item.nIndex;) Y! d: Z& \' e& r
m_Item.nIndex = dest;3 ]0 `& \2 Y( m/ Y D; e7 ^
}
4 D; u* ^( a- a. { }/ `, w( F5 _/ Y: \4 V5 N% ~
//临时数据保存完毕,交换开始" `$ m& Y2 d6 W( ~& f; Z3 a
for (int i=0;i<MAX_INVENTORY;i++)
( S- X9 `* W3 v3 |9 v% i' `& ?8 H {
/ y0 g$ J1 h2 O F+ ~! y if (dest == m_Item.nIndex)
: o% ~1 x1 l0 Z' V+ K {# P5 W! F3 b+ w! v( X; ~
//id相等 则 改变对应的dest和src
8 Z+ X* U0 ]! L* _) t$ L C m_Item.nIndex = nTmp;' |7 g% K: F& A/ V/ Z# F
}
7 m( h0 h# f m$ }" s. [ }
& A5 S c6 { z: h; d( Q$ _}
" p+ o& i; Q3 n3 r};
4 Z- {( e B& T- P9 z-------------------------------------------------------------------------
O( O2 w$ @& R2 Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& \* w* h" G" B/ g) N: Z1 q6 Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) ]0 F6 X/ e3 ]1 E- b5 }% g- V紧靠其上添加:2 J1 M2 j. L- q. O
if( pWndBase == &m_wndMenu )
# |" D( F: E8 w) N{
& O% Z+ e% X; w( e i6 l switch( nID )
! Q3 ^. d6 w1 A) ~! x" K {! }8 K0 c, F- B- x/ g" u' }" f" O
case 2:
% P# ] U4 G) C2 J {
: h T/ c* `9 F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- g. M# K* r( C" H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 c9 X3 W3 @5 Z! p% I: K' I
{
1 ]1 E8 n1 a5 ]3 Z) l- N C# l break;
5 e; [/ y" L) X }
8 N! v+ l1 T4 @1 |5 W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 D/ A/ O; o1 }
{! a4 ?1 l' B) F* M1 x d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 @" d/ B' u. q if( !pItemElem ); J: a: T* g2 p, l4 }
continue; R) V& }$ l& C9 g) @
if(pItemElem->GetExtra() > 0)
* t3 S2 b% D/ M. o3 m continue;
% d4 {, a# j* e% ] m; s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 Q3 o8 ^( R# j1 [ X9 ]4 Y8 q continue;
2 V1 u1 ^ p- ]4 \ if( g_pPlayer->IsUsing( pItemElem ) )6 {( Y0 E( E1 {; M
continue;# _! V: u$ A& v% L
if( pItemElem->IsUndestructable() == TRUE )9 R$ u& a' s: l. f4 a+ B$ l! |* r
{# \* w8 W! T7 z8 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); i v. r* W+ n/ Y+ B
continue;
: A5 b* n y; U/ a, f }3 o4 ]- P- |6 Q! x; N4 T6 Q, `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; u; N* q) a' {! E+ Z }/ b9 S! M1 n& i7 {& X# `
break;% X V! f! O4 N; E+ s
}
, V, W, B. S% |8 {# C$ {/ z/ e0 { case 1:% c+ s7 ?* B+ o& U
{
2 w8 S" @% W& d, U. o( ] //整理背包 T2 c7 R8 Z' D" O, M1 V) ~; E
//////////////////////////////////////////////////////////////////////////, X8 t7 e- a0 S# b5 D4 x3 H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ ]5 [& x L" v4 L: [4 B
//////////////////////////////////////////////////////////////////////////
% ^ `& c: m& }+ b //////////////////////////////////////////////////////////////////////////* P8 A: }: W$ f/ |
CInventorySort* pInvSort = new CInventorySort;
7 X. W- C7 b$ r( x( ^1 q vector <sItem> vItem;! z6 K% J z7 G3 r& Q- ]( c
vItem.resize(MAX_INVENTORY);//初始化大小
8 q% j0 B( q. G" }9 y! s //////////////////////////////////////////////////////////////////////////
+ [/ F a8 e/ B" h( y$ [; _ //填充数据
" ?3 ~) q: H8 _. x: G% M* x7 b/ c for (int i=0;i<MAX_INVENTORY;i++)
) T7 |: d1 {& Z* N1 `9 S; m% G: D) l {
- ?4 Q" G" h+ j! P* c( n8 w0 [9 d7 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* y( _- Q3 v7 G if (!pItemElem)6 I; c4 n9 O: @ i6 f; A
{7 w. W+ V% S' P8 `
vItem.dwKind2 = 0xffffffff;
5 F! O D N5 ?+ M, T9 Y vItem.dwItemId = 0xffffffff;8 C7 }% B6 N4 n1 U8 Q% c; r' X
vItem.nIndex = i;( V0 J- y! o9 i1 n% o
}else {
+ e+ N6 |$ n8 m0 U2 r8 m ItemProp* pProp = pItemElem->GetProp();
& A/ c- F8 d! s! n. B0 I vItem.dwKind2 = pProp->dwItemKind2;( p. `2 F b; F% L
vItem.dwItemId = pItemElem->m_dwItemId;
! X8 g( U( B2 \$ s# ~! m vItem.nIndex = i;& x: m' j) D Q0 \
}0 S# V5 _' a9 }6 Q' o
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 n; Q& Q5 g! q8 r$ e$ w$ h$ t1 ]
}6 b( y- r- G7 C# P
//////////////////////////////////////////////////////////////////////////6 M4 x5 y3 L ?. V( R2 P4 L
sort(vItem.begin(),vItem.end());//排序
; `. U& Q5 n7 ]. k' I+ V //////////////////////////////////////////////////////////////////////////, w0 D. m- o5 G- A$ {9 C4 J
//交换/ m5 o g( l' q+ @& E9 ~* M% `$ D
for (size_t i=0;i<vItem.size();i++)
+ m# D0 E' T8 A {" Y8 j, S5 i N. m* M3 C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 R. U7 W+ G( `6 `: W1 A( d
pInvSort->Add(vItem.nIndex);
; [' X9 L& b4 e6 K5 N9 H9 Q }9 A! t* E" \8 j
BYTE nDestPos = 0;' H E- R2 V& @! D2 k+ Q
for (int i=0;i<MAX_INVENTORY;i++)4 H, `" J% J- u: D9 Y9 Y# e
{& L$ H1 J- i# J* W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 L& G/ x5 M. d# c0 r* V
if (pItemElem) j4 ~, H Z6 h# c0 t$ A3 B
{
9 S7 \$ s" K8 I& A: [ if (IsUsingItem(pItemElem))
. A3 m) s/ Z$ {" m% a, k {
3 i [" @' T" e! M6 V //这个位置无法放/ {( B K- g! h* F5 t- ~
nDestPos++;
7 \# |. U' l1 s' m' v% d( y1 E0 Q }
2 q, d5 r0 z( j% F/ K' D C/ R- P5 | }2 j- J" H1 t7 U/ S( j! Z
BYTE nSrc = pInvSort->GetItemSrc(i);
2 i0 p' C' h7 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# A0 i4 A. k ~2 N if (pItemElem)5 x# C x+ p8 Q5 C! u: f, g0 r
{3 U) W* ^! ~7 g4 E: w) W# g
if (IsUsingItem(pItemElem))
4 ]6 }/ L+ Z- C: F+ ^ {( `+ b0 g& J1 j, _8 A0 c
//这个道具无法移动,跳过+ n6 w9 F' G+ e( i
continue;% c" ?( a" T7 W1 S3 a
}
; n! k2 z: r2 @6 L7 a* b$ w }else{* {7 l5 `5 J- p1 s1 N0 ~& k
//空位置 不用动* G9 r7 `) F, {0 A8 G
continue;
' q- W) U0 a9 w' J% c$ t# e }
$ M" M n a$ w //////////////////////////////////////////////////////////////////////////' N( @: U O& s- i" G3 p% j( h9 `
//开始移动
; S1 K& T) p$ ] Y5 `3 W6 r if (nSrc == nDestPos)6 e: S, J7 J8 M" _3 g, h$ }' ^5 k
{
7 `! D# Q B, G$ P, Y //原地不动
6 ~. x0 I" e: S. Y nDestPos++;8 r* }( S: g, |8 ~" k' H
continue;7 G2 f6 I# d, U4 {, e
}
) F+ l& j5 Q; p1 u& ? pInvSort->MoveItem(i,nDestPos);9 |' O8 {& C0 {$ F! @
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 d5 _' \: | S* |# p9 x Sleep(5);( ~2 I" [% k8 c# X
//Error("移动 - %d->%d",nSrc,nDestPos);4 v' Q d& N2 Z, L$ \% ~& d
nDestPos++;" Y: L% q- F! d! ]8 Z
}8 S$ {+ g5 Q/ f8 e" w
//取第一个元素的信息2 Z8 H5 u6 b+ F. |$ D8 x
/*# `( v6 ]* w" w2 {7 f z3 E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, ]2 B8 \, {' d' x+ F {0 F/ \( @8 [! Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; C7 X/ b: U, i8 z0 } T9 J g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 w, H, c/ G8 }5 @6 Y9 M, } }
% A1 |# J5 d5 v% e */. _/ h4 E+ H( N4 f5 D) c
//////////////////////////////////////////////////////////////////////////
7 N" X* I D% ?8 @+ I5 x9 j8 } break;
0 x' t5 Q1 |0 e6 a/ v }6 m4 n7 v; }0 y {) [
}
9 I" `7 g- B' _}# l& e5 o/ t) _
m_wndMenu.SetVisible(FALSE);
& t( }: B9 m% o7 P9 L( N) ]7 q; ?/ \& O* {
--------------------------------------------------------------------------------------------------------
% F7 x6 F& n6 ]搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 t3 G* I! Z5 G i{ |* X. w, U, ^
BaseMouseCursor();
' b. `0 u+ d- C. D7 ?2 E1 }}
( S* W' x! l4 q' |" V+ Y在其下添加:
- k* X4 N" L4 q! ^# Q- l. U( cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 n" m2 |! X. j p{
: G& p9 n7 S+ f* G, F; _m_wndMenu.DeleteAllMenu();) x8 W4 h* g/ h3 e
m_wndMenu.CreateMenu(this);+ {1 `" G5 J2 T" D5 j b I% y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, q) [4 z+ ^9 G1 W8 _- f& n4 @9 u$ v$ b5 ^) l0 h( K
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ f5 ]8 z6 u- F
{+ K4 E' G* }9 G
//P以上级别才可以删除所有道具
' ~1 Y% X. U! ~% J- Y6 q D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ e6 j! h; h' }. a
}% C# |. U5 w B8 y0 `7 d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. m! y% c% a1 ]6 ~3 \4 Q$ c# [- n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: D S7 }6 O) F. p8 V0 y& Om_wndMenu.SetFocus();
, U. `( C8 s8 s) N( c: \}
% D6 \/ `/ o4 Q) I' z1 A: w------------------------------------------------------------------------------------------------------------) j" U0 @) D+ P1 T. W
*************************4 X6 h% F. L# M2 O
WndField.h文件
8 r1 g; d7 f6 i2 }3 @*************************
& J* ?+ H- ?" |搜索:BOOL m_bReport;) |: z4 g$ Y0 c2 q- S
其后添加:' d4 {8 k' G& u2 q/ [4 v! \
CWndMenu m_wndMenu;
0 {" l! w0 `" g2 k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 B2 T( c0 P+ G( S2 b8 v8 x: w) s
其后添加:
; k7 K/ F" ~, q) k Q: L5 |virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 Y* \+ Y7 R$ V+ H! [( m1 v" O3 k
# \1 Q5 O5 W }. K2 E& o
; f6 _3 r( G1 z& ^' z6 s |
|