|
|
源文件中_Interface文件夹下WndField.cpp文件
0 o% l) X1 l8 ?1 s3 ~9 C. a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' n4 n9 \6 V2 K: p/ W* W
$ n4 F( C. @/ w( l
struct sItem8 |! z% r1 r1 O) o" C; T
{( U5 l' {) M0 x4 T, n
DWORD dwId;
0 ]) u6 D" x6 o% n; [5 w# @DWORD dwKind2;
* h2 y3 A( c1 C1 F4 G xDWORD dwItemId;+ o+ W' Z, Z( W# D
BYTE nIndex;
& j: N' o( j. ~" |3 a& _sItem(){1 ]) b: T4 H k! K0 ~
dwId = dwKind2 = dwItemId = nIndex = 0;
, R: Y9 M5 _# e% h}
7 P! m) u/ g) }( g/ h1 Lbool operator < (const sItem p2)* e; S/ {9 Q0 `* I9 d$ n" J& K
{ C; I0 h" @7 a0 N9 ]+ \" `
if (dwKind2 == p2.dwKind2)
! |8 I# O. r* Q {+ K$ ]% r- v/ O/ N6 k( e/ s
return dwItemId < p2.dwItemId;
( N N3 @6 F; Q. }2 U2 O1 R$ j }else{
_7 M0 H3 u9 U0 R0 S4 f return dwKind2 < p2.dwKind2;
9 n0 [4 i3 U6 g8 G+ K6 p. o }% C6 n3 s4 H# @. _# J, Q
}/ X0 Y2 E) ]' J/ ?
};/ {! W; d# ~, I, D# o0 r% ?/ e# m
class CInventorySort& M8 f: _- A0 B
{
0 l4 a [9 I3 e" q# h, Ypublic: T) D2 w1 o" { |3 |0 V8 P0 x
CInventorySort()
+ @, a4 r7 o9 s& }: S1 S{ R! k' E& x8 A
m_dwPos = 0;
5 K; W, a; r, R0 ~, z/ m+ \) f8 b}
+ e) h! z5 X$ \* L" a7 T~CInventorySort(){}4 c( b4 I0 A; r; A4 E: H* g( ~
private:: E" W* u; J6 V! L- ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ T2 B' z- A5 N& }/ p3 u
DWORD m_dwPos;
0 C& P+ H% k$ b" ]public:
* U; H8 m; ^3 m+ Z2 h& Qvoid Add(BYTE nIndex)
7 Y; M: ^& \6 B( N" n6 i{( {% m; s' H3 z( p, M' Z
if (m_dwPos >= MAX_INVENTORY)# [2 f, g; f! m$ x* t
{
5 ]8 C4 N; Y- Z6 w7 e# k return;
0 Y7 q+ [$ L8 S* a+ A, i" R I }
7 p0 d! P- K( v# P5 x6 A! x0 w m_Item[m_dwPos].nIndex = nIndex;
. x ]- ?* Z' n \9 j$ w m_Item[m_dwPos].dwId = m_dwPos;
. ~! h( \% `' r m_dwPos++;" t! Q4 y% M% u9 S3 z$ Y3 D
}" V N% G* F7 M0 z+ H% T! I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) s/ o6 B0 e- {
{2 Z/ l' p: I2 F% w5 a- q) `
for (int i=0;i<MAX_INVENTORY;i++)
( {. B; }# X( f {" d4 n' H) W1 H
if (m_Item.dwId == dwId)
4 P) }2 q: |: d% ^ o {# K( A& K+ q) \
return m_Item.nIndex;8 F8 p: W/ N: ~) w; ?$ K$ L
}
( |5 X# ?9 V8 N4 J* |+ o! n8 s }! h8 @. c* |! X+ }' n
return 255;; E4 r; @7 E$ B7 S0 u$ k
}
& v8 G: D: C" i8 _# Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
X$ W: a% _% O1 p1 I{6 O) J: |, u) b- t7 {* ^
BYTE nTmp = 0;
. C0 V; [4 E, J8 x" |. Y$ Z w bool bDest = false,bSrc = false;5 ^( @# q9 n3 p+ `" ]
for (int i=0;i<MAX_INVENTORY;i++)1 U/ I2 v. t, ]* g% c
{# J* j% E$ P' W. q
if (dwSrcId == m_Item.dwId)
5 i( g" a( y. k {5 d5 g- M) \! o
//id相等 则 改变对应的dest和src
$ q9 g4 {0 T9 a Z nTmp = m_Item.nIndex;, i/ ` k3 x: h. w- R
m_Item.nIndex = dest;; R' Q& n9 T/ }- ~( @! x# B; k1 _
}/ O3 ^" t6 I& [9 u& \0 H
}
* l: E8 B9 c( O! [ //临时数据保存完毕,交换开始7 y$ H9 p$ t7 @& B& |. C1 `
for (int i=0;i<MAX_INVENTORY;i++)
: i8 _' Y, n; l5 d( I {
! R' E! \* l! U0 k1 I0 v9 F if (dest == m_Item.nIndex)
. _" U! r' ~. |$ ] {
' p7 I2 J, ?, Z3 i9 T //id相等 则 改变对应的dest和src
0 j |$ J! c( c T1 c8 @ m_Item.nIndex = nTmp;/ O( a4 i2 `$ l# l, ~% g3 T0 a, w. X
}( t( G% D0 Y! A
}" V: L& E, |/ u
}
( ^- G1 y; K" J3 x4 ?};( U$ k) W! W* Z
-------------------------------------------------------------------------
* D$ W/ N7 u6 j! ^+ l* b依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& b% V+ _) I+ O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 [4 }/ k6 ^( z. E
紧靠其上添加:
) o& g; R2 D4 }* w# Gif( pWndBase == &m_wndMenu )6 E7 M% z+ j, N5 i1 E7 J6 B) f2 ]# G
{" y \6 ~9 | t% g3 v
switch( nID )1 E- s: f5 ?" ~3 v: g
{% V: [" T$ W9 j) K, F
case 2:4 B) b& R+ K- A3 X2 `, P @3 ~
{
' u6 |4 ^6 M8 ^ s; K8 e! A) m //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. m( @& Z! }0 ^9 b& V
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ `1 \) k1 E, x, O7 g {
! J# d1 c9 g9 l7 I1 B break;
" L6 B# A" l/ ^, L" e9 g4 w7 A: ` }
3 y" j$ O, T- N+ | for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 C/ z+ [1 ?8 K/ J* X1 P+ c {
+ s* m. w( G3 B3 N7 M: l8 J4 L- w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 k/ \) H2 t! O' G. \: B# T/ T
if( !pItemElem )
" T6 c0 e4 [; n$ z continue;
+ ]" \6 k) [8 U1 n2 _ B& \. G if(pItemElem->GetExtra() > 0), v5 L" ]0 Q- w/ J! ~, `& G, z
continue;: K4 g# E# c( x9 b1 Y% C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 t1 s8 v& Y( a* S+ W3 ?5 f continue;
# i4 z; x) w* `" x3 D if( g_pPlayer->IsUsing( pItemElem ) ): y, ~6 Q0 @8 D( V2 Z o
continue;
# C: H+ B8 V, Q+ w+ Y: w if( pItemElem->IsUndestructable() == TRUE )$ s; A: f2 A- Q, p! {' ~. a `
{4 r2 C6 E. c! ~( s A
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) I( U; k" ?7 @& B( F9 R8 K2 z continue;
" H* w) l8 o( A0 Q6 V" Z! T4 ] }
4 p1 q$ ~& L" F g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 A" S: z8 U+ A- O1 Q
}3 ^& W7 v7 |! h
break;
0 Z6 r9 L7 H" n }* U0 b' l/ r5 c$ Q0 f1 A
case 1:% w. I! j3 ?1 p' c. O
{' X7 q! I7 R6 O; O O
//整理背包9 o7 @1 a- a. _
/////////////////////////////////////////////////////////////////////////// i! @6 @4 u0 R8 ~/ c `, u
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 a5 r4 g6 W0 N ]& x
//////////////////////////////////////////////////////////////////////////
; h8 H! S( v' s+ u7 t! q( N. ~. B, z //////////////////////////////////////////////////////////////////////////( w& o% A9 z! E( F: G L
CInventorySort* pInvSort = new CInventorySort;' G+ O) U6 B* I, R4 p
vector <sItem> vItem;+ b% f5 u% W) a( O3 X- F* e9 }- q
vItem.resize(MAX_INVENTORY);//初始化大小& J' S& b( h: A9 A
//////////////////////////////////////////////////////////////////////////
% }0 y% O R! Z9 h7 Q4 q //填充数据2 e% T& o" F/ g+ Y
for (int i=0;i<MAX_INVENTORY;i++)3 {# g" u6 V' K: b; M- p% L% y$ E
{
- @7 M6 l# l% Y4 V# s3 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( ]; o. Z* C( ?1 o
if (!pItemElem)- K1 M7 S! E0 U! K9 Y1 d& b
{, E% p2 I& u6 H/ k5 b% _ M
vItem.dwKind2 = 0xffffffff;
+ U( G. R2 M4 o2 g vItem.dwItemId = 0xffffffff;9 t/ \/ F" k1 \, ?4 @1 R
vItem.nIndex = i;4 c/ c3 i5 z! u2 U, a
}else {* u5 ?4 c# V' s2 F) e
ItemProp* pProp = pItemElem->GetProp();
6 ^" e I* N+ l3 X; Z9 i vItem.dwKind2 = pProp->dwItemKind2;
, j* Q# b/ S) h) @9 n: ~2 J4 P vItem.dwItemId = pItemElem->m_dwItemId;
; T% e( D3 B/ ^3 Z vItem.nIndex = i;( a' q: p a" `: c: o5 h
}' _# w% A/ N, k2 d% u; }6 i! g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: K8 }8 L! J" D' a$ e9 d: [ }( ]3 K" W& G2 R
//////////////////////////////////////////////////////////////////////////
: Z3 X$ w0 c2 l: p. w4 l sort(vItem.begin(),vItem.end());//排序
/ E, Z4 h* w( B) P8 L& f, U) K1 J //////////////////////////////////////////////////////////////////////////& Q- W. U: s; i2 S! K( R! Q: r
//交换
$ b) [% L, H8 ] for (size_t i=0;i<vItem.size();i++)! k4 U( M% Z2 _) s2 y: N
{" G( F' n2 P5 h% n& f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ }! v0 h# i; _! S! h. }+ `6 ~ pInvSort->Add(vItem.nIndex);, M" t! U" [( h/ U; m, ?
}; D, k- X& I- x) Q7 m
BYTE nDestPos = 0;
( L( o% a# q0 ^( y: R/ A8 A for (int i=0;i<MAX_INVENTORY;i++)6 x9 S: P9 `& m! X* T* v. a
{; W% T; e8 c* z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" g+ Q5 R, W: E7 p; T- c4 u
if (pItemElem)5 T5 Y6 t; S( @4 B2 o1 C
{
3 j; s/ F: G8 U& \6 f if (IsUsingItem(pItemElem))
- x" o$ q. ~3 R9 p1 T+ T7 b {
/ t4 {. X" B$ a" k //这个位置无法放4 Q+ B8 a4 l- H: t3 \) h* z
nDestPos++;
9 u9 J; C& n, T" f }2 u9 m1 }" \% k$ C9 I6 _
}# S& i* }4 r- a
BYTE nSrc = pInvSort->GetItemSrc(i);
$ S9 N, J( ]; }( E pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 ^$ Y' c( a. _8 O! W; w
if (pItemElem)
0 q, l$ i4 W" M( p {$ i d0 E- x0 _4 X9 e; [+ ^
if (IsUsingItem(pItemElem))( N6 ^( p$ _+ Z' f# B
{- x& s8 i6 A+ a' Z4 s* L- A! e$ m
//这个道具无法移动,跳过
% {* w4 i+ S. w. c& V- ]* I' D) U continue;5 ?" D9 E& v2 A. I* [3 U
}# d2 ]5 O4 E% O6 A3 r$ c' q. M
}else{
# b- A* [5 h9 _! g3 [ //空位置 不用动
4 h* f) I' `* {( c5 e5 i) Q6 r continue;' a( o' B( L$ y# M9 _& E4 X0 r- {
}. J0 b( c K( J& ^3 X: K; H
//////////////////////////////////////////////////////////////////////////
* [& U: p3 |7 h7 L# [. W //开始移动( w0 B* j& T5 j; n# j( ?0 f3 q4 u
if (nSrc == nDestPos)9 K# \- b5 M# z$ G2 V, E, R
{
1 J, B/ O: _+ _' @" F% [ //原地不动2 N+ H3 w2 \$ I/ K( T9 V
nDestPos++;
z) j1 H) g' x" V- M continue;
1 ~/ m# X+ e% ^# R }
. l/ c, B3 E: B7 P pInvSort->MoveItem(i,nDestPos);0 e5 K2 P/ |9 k0 |7 I/ \
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 i: R- z# k8 b& A Sleep(5);
, \/ H4 C: l n/ f* X, d9 O/ i //Error("移动 - %d->%d",nSrc,nDestPos);
+ m% Y9 }) v& e5 w$ b0 r+ R+ { nDestPos++;
3 v; h8 o6 u5 a& K! d, X) {9 J }
% z3 G4 N5 d) p' m- r' O1 S) O( V //取第一个元素的信息4 i7 R3 M: R/ z5 W0 m, g6 R
/*- U5 D! n6 B, A, ]. p* F$ Q* T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! ]$ w. K" H6 ]& x {
' P, k6 D( d7 |6 h$ I, f! o5 [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, H5 S, Q( }$ P9 u: U& g8 V7 [ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. z t1 _' ^ X, W& b
}2 z0 b1 i0 ?! z* j% |
*/
4 R: E( o4 q; ^6 W8 O. W( b) w+ I //////////////////////////////////////////////////////////////////////////+ H/ C* p+ b! d$ W" x9 y5 n
break;
4 ]$ Q0 K8 Z" _ }
8 U C, g; s& O: M: D } 4 m0 g8 @* m! y9 j
}7 Y# I: l; m* g) d! j) F
m_wndMenu.SetVisible(FALSE); z5 a) R5 g' ]) w
/ d( G' ~( M* x* F* \0 b/ i: l
--------------------------------------------------------------------------------------------------------
# ]9 d' B4 w2 Y& W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 i. b9 f" a6 f6 e: _! M
{5 L( S y) ?8 e9 d: L+ y
BaseMouseCursor();
! e; l0 U6 V: E}$ o) W' H) ~6 ?0 w
在其下添加:
0 c* }4 W# m/ _+ \* k! Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) h3 W. D- b; G; i3 U" w{
. |7 @) b+ ?$ U: I4 xm_wndMenu.DeleteAllMenu();: h2 R8 I9 A0 U* d8 k* [- i
m_wndMenu.CreateMenu(this);
0 O) |8 w# z* Y' O3 R8 `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ z n5 n5 I2 v7 Y" t4 ~8 f
4 d1 M# L! b8 ?1 U4 f& {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* @! X' p5 D" @. m7 C& P* Z: S" D{
4 f4 B V' N, H6 _- l: Y# g ?0 f0 n( l //P以上级别才可以删除所有道具& R1 p! }+ v& G ^) Q$ |8 Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 C- D |0 O; N3 |9 g7 e8 F$ T}/ B$ y0 {. T7 I( F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) X! B# W2 L3 Y% o1 z$ p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: _4 ?( H+ q) U: n' j6 ]3 f
m_wndMenu.SetFocus();
( H, o, D8 t) v: @3 F/ W}
( m$ f4 q" Q `3 z" i4 `------------------------------------------------------------------------------------------------------------
! X4 f5 K& g3 i*************************
# a( E3 K4 w; Z2 UWndField.h文件9 ]+ e# b0 X2 j
*************************9 @7 o" U* T5 W. L3 s9 A+ I, P
搜索:BOOL m_bReport;
% c. n+ _& ?( }5 r其后添加:
3 f1 M, O7 ~# C! ], pCWndMenu m_wndMenu;, r; T6 n# u" @/ n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 t( G5 L0 M- R% j
其后添加: q& _6 K3 U. @4 U. r
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 Y; v% D+ P5 G P" [
0 s: ]: q9 g; {9 E
1 I; x/ ^( p$ f2 z |
|