|
|
源文件中_Interface文件夹下WndField.cpp文件% ^5 y# {( A5 ~; S. ]- h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; U5 A) i$ b+ W5 {; P9 L* t$ o e7 i* F* S! \8 H
struct sItem
; O, @2 y0 {: G3 x$ {8 S& }{
6 n9 @0 f. ?' @5 ^' [. }$ A; _DWORD dwId;3 N# u, @( T2 {8 x& d( h6 z
DWORD dwKind2;
4 U* `: u. t1 C% PDWORD dwItemId;
! M& Q# k- T0 ~4 gBYTE nIndex;" R2 e; ^8 V8 J6 n% A, N
sItem(){. f8 S9 l/ j, {6 |. h
dwId = dwKind2 = dwItemId = nIndex = 0;
$ w# V* F7 l8 _) R8 m}
" y7 q k( n1 \2 z, @ r7 ibool operator < (const sItem p2)
8 g* X4 l i* H{
- n, E) E2 m: b! p) s5 Y0 l5 z: m if (dwKind2 == p2.dwKind2)
2 w' y' I* T4 o+ y- L" d {4 X( |! z) \! H
return dwItemId < p2.dwItemId;
+ m) O+ _/ V8 P6 { }else{( N# E- J2 \6 K( n
return dwKind2 < p2.dwKind2;
5 h% A) V9 o/ o+ ?$ f }
) F- \+ a8 r N}
6 l- z3 c! m! B1 G) X};% o5 y" r5 Y0 j- H. e% n6 G5 }9 ]
class CInventorySort
5 e/ D# s8 o7 y8 ^) ]{ G. D! V' ?! X2 O" ^6 ?
public:. j! O" E; |7 R7 K ^
CInventorySort()
R# K% K8 ~7 g5 A( F4 A) p{
. ^5 e t4 k6 n! M m_dwPos = 0;! K; ]( c2 ^: N3 ^' T" o
}8 n0 O0 x6 r8 |2 y8 C8 [
~CInventorySort(){}
% s! R% }3 P k, m4 l4 \private:* @& _ i9 s) P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; y' N0 r# y9 x2 p. {
DWORD m_dwPos;
: l8 R) Y1 }: Opublic:
- O J1 R$ T- V3 m: G6 ?void Add(BYTE nIndex)
! D4 U1 z3 Z0 P" R& o{. e& q3 N% m" x3 d: k+ s1 O. s
if (m_dwPos >= MAX_INVENTORY)* |4 H* W M9 B$ O
{5 V$ {$ e3 T2 T: }
return;
1 t9 }8 F S" M' d+ Y$ Q! L0 I }
. ^4 T2 N, J8 C& G$ V+ m! } m_Item[m_dwPos].nIndex = nIndex;
}& K4 j9 u( V m_Item[m_dwPos].dwId = m_dwPos; a( @/ N' I# z8 W: Z' F
m_dwPos++;5 H. N- t, O4 o% S
}. R0 L; c. ~5 q. L: S: m4 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 a( Z; S0 I7 H: O8 U/ o
{4 y% g9 {% w4 |+ y' f) W, @
for (int i=0;i<MAX_INVENTORY;i++)
' ?+ f& E' T3 ] {
9 C% n% ^/ m+ O, \: U. J: ? if (m_Item.dwId == dwId)
0 ]9 F' g$ ], M# Q" _' c& e5 b {
) W, O) Y5 {5 a8 i+ j' H+ J8 P; f return m_Item.nIndex;4 h1 Q# t0 L9 v: Z9 k
}
3 K) s, T) P: E) ]4 G% f }
4 n7 ^) X8 j/ X2 {! G' P return 255;+ m: l; T' k7 i2 b
}
|/ X" X: c8 T5 F9 r9 f) d: [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 Y2 w S2 i3 Q& M. W3 R2 g
{, a5 W, F& y( g( q7 u
BYTE nTmp = 0;
& y* Z& o' i6 ~ bool bDest = false,bSrc = false;
% H9 A6 a$ V1 X2 R( L1 c( j for (int i=0;i<MAX_INVENTORY;i++)
: I- c9 o) {$ I! C {
s! u. W; _( P3 _7 X if (dwSrcId == m_Item.dwId)
+ F9 s+ \( a& M$ @/ S8 L {
4 W @# ?' g3 R! m //id相等 则 改变对应的dest和src
8 U, w) U* d" R nTmp = m_Item.nIndex;
6 I/ y, _( U+ |/ \0 \6 ?( u1 C m_Item.nIndex = dest;
( q$ N3 W) @: b }% N' D8 z3 W' l& {) w( N7 z" E4 b
}
% T, E; ^" i( Y) F- b8 G //临时数据保存完毕,交换开始2 L& P8 S% M$ j+ i; Z- |
for (int i=0;i<MAX_INVENTORY;i++)* W% u" c7 |. L3 H- W: E1 L
{
: o* D- t% r# j; [8 ]8 e6 l% q1 z if (dest == m_Item.nIndex)
. [# W3 Q0 R9 |' q3 K( z {* D+ U7 U' P6 h# d
//id相等 则 改变对应的dest和src- c: [; k+ v( F7 h, E
m_Item.nIndex = nTmp;7 f$ |, {8 y/ J+ e9 A
}
; W. k* f9 h, E0 C7 K) Y' ^8 T }
( C& m- S( q3 [}
- M& t* a" C0 y0 L};
$ U$ A! a3 q% I; C( C-------------------------------------------------------------------------
) @8 ^' X) M8 `/ y v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ F; |& u3 f% Y1 }5 J* S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# b# S( H$ Z4 B0 t
紧靠其上添加:+ z: R; L/ ]' y4 e
if( pWndBase == &m_wndMenu )$ Q; o5 ?* ~3 t4 E5 S* K
{
% P" x, h1 C7 u" ? switch( nID ). I1 ?0 `$ m4 l; e9 z
{; U" h/ d& z% g" W' @+ T# f
case 2:& s/ u- `* C3 X* E- E
{
" q& V8 n3 M: P, j3 b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, d2 @- w* R4 f. i' T. y6 w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); [9 A6 l% |! i% T
{* Y+ H( ]* f; d6 Z0 ]! ~: I; |
break;" u0 j7 K6 S, {
}7 } T {* a7 j n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* X4 x: `' K6 ]4 z
{+ P, T1 g& ~, s3 ]$ J: C5 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% w8 F0 i! l+ O; \7 o. K
if( !pItemElem )
3 r+ P3 ]+ h7 |+ U, b. i$ L continue;) @) E+ s8 i4 ]+ y- S, ^; o
if(pItemElem->GetExtra() > 0)
, W$ ?* b. T# B0 Z6 f2 g continue;
9 w6 M. S$ P0 Z; G7 b3 G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 ?8 M6 H9 J1 u, R9 o" D6 u/ A; L continue;
3 q* Q/ A a b! _! v) l% F if( g_pPlayer->IsUsing( pItemElem ) )0 ^/ H4 H/ W& Q
continue;
4 `- C( D5 C( N6 I% s- r if( pItemElem->IsUndestructable() == TRUE )
[( [) w3 @ m& E# ]6 G {0 `6 C- S5 a& r2 }6 s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% P6 |& F- P, c1 f continue;
% T% i5 S* M( H }
; \: G" O3 f1 z7 k3 r* h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& D" p+ Y$ q4 z/ g- v+ I7 x
}
% v c$ y& _0 S; e; \8 B1 y break;( K2 V4 i2 ^* X0 `4 }8 T
} R* ?9 }" M y( {- |5 ^4 Q
case 1:: d! j) B# |% m
{2 f/ i5 S1 Y' P9 ?0 I# _6 `' E0 f* _
//整理背包3 z5 j3 Z4 M. E, [0 ]
//////////////////////////////////////////////////////////////////////////! l6 I) i) R# G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 y: x6 C5 d2 r# Y; j% J( D$ ]8 ~ //////////////////////////////////////////////////////////////////////////
& k6 k. m1 R, ~) `% H4 m W& g //////////////////////////////////////////////////////////////////////////
1 L" h6 N% R! A CInventorySort* pInvSort = new CInventorySort;2 ?& b9 t, A, x' X1 m7 W
vector <sItem> vItem;; d Y |2 B. F8 `3 n! y9 k2 Z- X
vItem.resize(MAX_INVENTORY);//初始化大小' `# q& u, u. h, M& X# L+ l* P, {
//////////////////////////////////////////////////////////////////////////
; w' ~) [( W! g) x8 V5 M0 ] //填充数据
% \: n7 P/ Y; i for (int i=0;i<MAX_INVENTORY;i++)
. r# O( L# r0 {0 a2 X, e" t4 r( X; ]2 R {6 z8 z) E Y. r. \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" l) x; y' Q( J$ W) N X
if (!pItemElem): a+ C5 A, p0 y; Y$ ^# a
{
% Q/ W$ A" C, d vItem.dwKind2 = 0xffffffff;
! K: \. l; a+ u; ^' ? vItem.dwItemId = 0xffffffff;: c# Y8 g- ?, W2 \+ B4 R! B+ @- C
vItem.nIndex = i;8 H8 f; ^3 D8 H- B+ K
}else { Z" ?: C" k( ~
ItemProp* pProp = pItemElem->GetProp();
7 V. W. V: b% ? vItem.dwKind2 = pProp->dwItemKind2;
0 E/ I# ?4 q2 d$ Z7 w; J vItem.dwItemId = pItemElem->m_dwItemId;9 m, M. m7 z1 n7 K$ w' w
vItem.nIndex = i;7 w! z7 x4 e7 X6 Y8 J! I
}
& W5 e) \' d- w4 y/ P# L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- J. Y l/ ?+ n
}7 B2 I n3 Y3 ~( h* v1 u
//////////////////////////////////////////////////////////////////////////; y8 J. s) R) T: r5 z
sort(vItem.begin(),vItem.end());//排序
+ k8 P4 l# O' `' Z //////////////////////////////////////////////////////////////////////////% \; B% {- z& d
//交换9 j; K3 B' n+ Z& N6 p; y
for (size_t i=0;i<vItem.size();i++)
5 N! i; L* U& m" p2 p { O$ Q% T1 g6 J7 q9 a+ S- ^6 J& N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 z2 ]. h& _# _# D
pInvSort->Add(vItem.nIndex);# W; [: I* N% q1 R0 i
}
% ~ l7 V; A4 s: D+ O( M BYTE nDestPos = 0;
$ w& ]0 B3 ^3 H for (int i=0;i<MAX_INVENTORY;i++)
. P1 C0 K4 U4 y {# c3 ?6 u) U6 s$ B4 z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# X: [1 t) [' v: ]. b- _& p if (pItemElem)' U# s2 |. [& {" ~# m
{
2 b9 O$ b( g- B" [0 o if (IsUsingItem(pItemElem)); i' F0 ^3 S2 }$ o S1 e0 D; W
{% L+ h: ~( N% ]' q
//这个位置无法放
5 F- W& G9 O% `( V nDestPos++;
# T3 z# N: b& [- G# Z }
: b% u$ T5 G& H }5 |) O+ p( l' _! V
BYTE nSrc = pInvSort->GetItemSrc(i);$ M4 F+ v4 m$ j6 b) K* a1 |
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* i/ v2 f. Z4 m$ e) s4 ~9 V. W
if (pItemElem)
( J, z& P0 k/ l3 u3 B- j% v {% s0 `9 Q, }, D( F0 t
if (IsUsingItem(pItemElem))
5 @3 [' O: k G& G. F& \8 ` {! w+ i0 Z: _& d/ ~2 B
//这个道具无法移动,跳过$ I1 S. B3 F1 T
continue;8 I } H- P2 \) ]; Y
}5 b- w: ^% s% B$ c. _! c
}else{
: C6 `0 L5 r N- z8 ^$ S: } //空位置 不用动
1 u% ?: ^! U: a. t continue;' ?9 }8 i, b2 H4 [# e* V* a
}
6 h" x- @- D; E$ `9 E //////////////////////////////////////////////////////////////////////////
3 T W# W3 R# s$ |* S1 Y) ] //开始移动, \; w9 C: Z* I( A: z) ^ \' \
if (nSrc == nDestPos)7 Z: g% t% H5 d
{
5 ^- J, V1 X/ P: E# X: l2 O //原地不动5 C: X7 D6 M$ d/ s
nDestPos++;" S h9 D5 h/ p, }# @: a
continue;
2 Q, V2 m6 Q: D1 j( f F }
. D# a& k; O6 g* W8 b pInvSort->MoveItem(i,nDestPos);: i6 J* B5 ]; ~- V) }; {. N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" z9 g0 o/ \- C, h5 Z0 N Sleep(5);
) S' Y7 J0 L! F" [, T, Z1 l //Error("移动 - %d->%d",nSrc,nDestPos);' `' _; X& ~* O# f/ [" X
nDestPos++;
# w$ r6 i. E. x3 d% R8 s7 d }
" e) O0 Y8 H3 e4 d //取第一个元素的信息; t" R8 e8 [: c/ j* }: H; j# G
/** ~' p8 B) ^* E ~
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 n: S9 O6 k2 O' r
{% k4 P3 ]/ Z- N/ p
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. {+ U( W5 o) R2 x3 B1 M g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 Z3 t. j4 b0 N/ X6 t, W+ W% ~ }
9 d W6 b, T5 N4 b */8 ? C3 n2 L5 w, A6 \- k
//////////////////////////////////////////////////////////////////////////
& ]3 P+ Q" M( k& Q7 g0 V break;
5 P: S2 ?* w+ @' s }1 S; I5 B5 M% c/ z" s' v" l
}
4 |6 e5 l7 g u4 j ~/ R+ v}( ^$ j4 v3 L* Y
m_wndMenu.SetVisible(FALSE);
4 S8 }) O) D) M/ E( \
7 @' [5 V+ B$ }: {--------------------------------------------------------------------------------------------------------3 p7 ?$ Q, D' `, Y6 i) E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 E- c# R0 w- ~. i* t7 r
{0 {- d4 B+ W/ Q! i' n; b
BaseMouseCursor();
" D- P G' G+ D! S; }# j}( b0 l% g5 N4 ]6 R4 I
在其下添加:" L3 D+ y+ a: D5 c3 s( N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% T9 l3 H. Z) ]3 x- ^0 {" M; j{- `1 h9 \/ d% Z; j3 y: G
m_wndMenu.DeleteAllMenu();6 @8 u% Q* c" [4 s, I/ T
m_wndMenu.CreateMenu(this);
% [2 E+ q" R, w, am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- b+ m! D" v0 ^
6 _ }) _( V; F! A/ ~, ]9 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) u8 d4 d) L5 a7 h% R) O
{5 ^: X2 {# j& L. Z0 g: R
//P以上级别才可以删除所有道具
5 r7 `! j2 b0 g: D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" E& b& I( l. z& ^0 G- n1 K8 l}- ?+ s2 B$ O0 d) c) [. U9 q) [, i
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# l0 I8 r4 _* q7 om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% X N+ |+ t6 X* q3 q) C8 w
m_wndMenu.SetFocus();) x* v& a; B1 I8 P, I
}
" v# w/ {# m5 ?9 w5 F& c------------------------------------------------------------------------------------------------------------, D1 C' R Q2 L e. ~- p
*************************
8 |8 V/ Z' s: F. h5 p% L: R* Q- zWndField.h文件
1 ^' f+ l% r9 _8 b7 U- M L*************************
) C* V- s9 {% {' q% P搜索:BOOL m_bReport;
g5 ~% Q- l* \" ?5 w+ I其后添加:9 F$ _, L$ P6 f& e; M% M+ p( w
CWndMenu m_wndMenu;! ~3 R8 X* [" T/ i. _. d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" a7 e& O, P: b其后添加:
6 b1 w5 `) d* }& l; A6 xvirtual void OnRButtonUp(UINT nFlags, CPoint point);, z8 i6 H4 b/ U% r; M: a! P& A
# i! h0 r' N5 r+ d! x" J
- L! Q4 @! |: @& b |
|