|
源文件中_Interface文件夹下WndField.cpp文件
% S i3 B) T4 Q, \2 O% b$ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: R0 \% R u5 q; d0 \. N: v1 h' F2 D
struct sItem. {/ m- [8 B" W2 ]& ^1 U6 S
{0 v/ L3 u8 h4 G+ I) R9 {4 @
DWORD dwId;
/ H, N9 s, f" Q/ H- M/ v9 qDWORD dwKind2;1 g- H. [ }* _6 t% }: o# F
DWORD dwItemId;
/ Q# w% G. V+ J4 d; Q7 RBYTE nIndex;
4 o+ W3 E1 g/ x3 @( ]sItem(){. K# D9 y2 D# H/ N
dwId = dwKind2 = dwItemId = nIndex = 0;( U, K/ ` ~3 W9 L( F+ z' ~) K
}
6 ^/ o( }8 Y* @4 N( R3 T4 zbool operator < (const sItem p2)
1 S- V r- H$ W+ v{
' u# ?; P" d& h, |3 X8 X if (dwKind2 == p2.dwKind2)- r4 a J: a% T2 U% G
{" Z/ j5 T0 J( w
return dwItemId < p2.dwItemId;
7 [ P4 u5 a: G1 |" n, X }else{
: c) \& q5 ?% ]& D9 Z! X return dwKind2 < p2.dwKind2;
9 y/ s" |6 w. d& ` }- y U4 [, A9 I5 g5 p9 m
}
, z2 i' |( ~' w; e' }8 O};
! H: n5 P% D0 K" C% c( Q) Mclass CInventorySort- Q2 `6 {! L3 G) h, d$ J! ~
{
' w# C" F/ X2 |2 h- M7 }public:1 t# M; [9 ~, y/ @! D+ I- X
CInventorySort()
3 _8 \; \7 w6 x1 t$ x4 {* N+ G{) c" \! N5 d- |! S l3 c
m_dwPos = 0;8 V! n! k) p0 U# U6 G. D3 B- C
}
! D4 j% U$ Y! j" V7 K~CInventorySort(){}8 M+ m1 I2 I. M
private:
" A/ w6 U# h1 I+ Q- f }$ o' asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 b# W+ f( @3 g
DWORD m_dwPos;
& @' {; P+ j( F2 F: @3 n( ~ @public:
2 J: F* {% q: q+ [* R# mvoid Add(BYTE nIndex)7 i# o. r, N; ]- i! @
{
1 a4 z8 k! }7 A1 N' p if (m_dwPos >= MAX_INVENTORY)
* U' l" Z/ W$ F+ ]( o" y {( b8 `. J3 ^/ h4 }2 V& Z" \* l& b
return;
& b0 g: c5 i, c' H- |, w+ b2 y }
. p+ Z4 [0 I+ g: ] d! E. F/ E m_Item[m_dwPos].nIndex = nIndex;
; m1 c8 M: z4 K( M1 L# P; l m_Item[m_dwPos].dwId = m_dwPos;
9 u0 ^3 Z3 v* W/ L m_dwPos++;
. G4 f% _; A. K7 I2 v7 e5 T' z}' w5 Z9 U' ~! v6 v+ Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 ^3 ~* Z& X6 x+ i( T8 g' U) h7 i{ Q! L9 Z* s( \$ J- R
for (int i=0;i<MAX_INVENTORY;i++)
* |) _1 p6 J% H. K- p" q8 Y: w$ Q {
, |+ y8 J3 ~. x( f. { if (m_Item.dwId == dwId)3 H1 s' C8 _' q" U4 `9 A
{, Q, ^6 Z6 M; ^; T2 m
return m_Item.nIndex;
8 a8 G0 I2 N2 z1 R }: n+ n0 |8 y% E% F/ w2 F* i) w7 V
}! V1 x, k6 w, n8 l# ?4 j! g
return 255;
, }3 r, @, F6 y- o2 P}5 _% v3 c& q( V0 V( S4 R/ \* c. ^3 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. F# X; k8 ^5 Q4 F{2 \( B) A) V5 j
BYTE nTmp = 0;
! i' [" i* M% \# R' }: | bool bDest = false,bSrc = false;
2 b# f9 C e6 k for (int i=0;i<MAX_INVENTORY;i++)
0 r) z" u! g- A' v% A1 s {4 y4 ^; h* l" _2 _: G- ^0 R) L3 N
if (dwSrcId == m_Item.dwId)* C ?9 F9 w8 ^: R' Z
{
0 A0 ?; _7 y% w J //id相等 则 改变对应的dest和src
/ w+ M1 ~9 `- @! t nTmp = m_Item.nIndex;
p! [8 M9 l9 y/ F0 R7 P; g# h m_Item.nIndex = dest;3 X$ S* e5 z3 R3 P7 r3 H4 z
}
6 p4 A4 i8 o( c \/ f }0 E( j5 j9 A1 _8 p2 J
//临时数据保存完毕,交换开始
: Y5 p4 |: g: c3 Z- ?& b' g for (int i=0;i<MAX_INVENTORY;i++)- ~( O+ ~4 j3 d% { V, ]
{
1 k V4 F M2 J if (dest == m_Item.nIndex)9 {6 a F) Z- E5 R; p2 _' m) v6 O
{' j& q: O- s+ C2 {; s
//id相等 则 改变对应的dest和src
1 U& w V/ A3 E' g) S: y1 p m_Item.nIndex = nTmp;( m' K. k! q8 g" y
}3 f, j' z+ F7 g* ~+ V
}
8 ^, Z2 Z2 a$ a5 x}
: L0 c/ a! \8 `& k7 a- ~; U' ^/ M};
9 o- h; \$ B( T) \( P6 d-------------------------------------------------------------------------% D3 [* C, |5 j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) s/ }9 w" ^; D H. b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 d$ ?6 o7 z+ p
紧靠其上添加:
$ {; T5 y- v8 O. G. Y: y" e5 l' n) Xif( pWndBase == &m_wndMenu )( w/ g# v8 ~, o3 k9 U
{
4 F j/ S% k% c switch( nID )
4 X) b$ I2 C& d/ a {
: n& M+ u$ H* x- d, ?2 J- @. }1 m case 2:
8 Z) z K `& a8 y: Y! D {
8 H3 X% p- l. Z, L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 D% T {/ d2 B- H7 a9 N7 v
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ M- i$ W* N7 {1 D7 q2 p9 ^: o {
* R: p( s) Z7 Q2 N. J' ~ break; f2 u w+ n7 f! f
}
2 Y0 _5 l) H8 e0 f; {, g/ a$ N, ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ H" M0 o0 K, ?
{' T4 ?7 U; g4 L9 y! C# b, m; ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 T5 c7 O* g7 `1 X$ \8 J if( !pItemElem )/ j+ C7 m; G0 r+ D4 D& s. @' Y
continue;
6 l! B5 @( n1 ?+ z L7 e( Y if(pItemElem->GetExtra() > 0)# ^: Q# c4 C5 h" m8 [
continue;( m* \3 q8 U2 `( N3 H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 z. o) j) s& u# ` continue;% c, W7 h" O4 Y4 N0 F: u- y/ Q
if( g_pPlayer->IsUsing( pItemElem ) )
3 x5 F6 G i) N" Q$ V3 z O continue;
$ n+ w. z5 c& K2 E& P if( pItemElem->IsUndestructable() == TRUE )
" J. o: s5 a+ U4 A5 b' T. ]; q) x {0 L' t" @7 ~5 i; h9 x5 W
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: r' L9 A. r6 I2 f3 ] continue;
9 K5 L x; C N0 p/ \5 j2 c( K M }
+ p; L1 {" g+ E$ i: H g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ V' x0 y& c: C5 y$ i# H# `
}
! g1 w( w4 s% c9 T2 o break;
2 F& E+ q) ~4 n5 H& ~% w0 Q5 q }% h6 k5 @( _1 G7 Y6 `0 L5 c
case 1:
* X! M9 M! X$ d- k2 S {1 c \: [; M" t7 j* D! g
//整理背包
- w# _% F6 d0 }2 l0 S# w* P+ R //////////////////////////////////////////////////////////////////////////
# z1 _& a6 k: ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 s% L! z0 t: `4 i& ^! W# p! ?. J //////////////////////////////////////////////////////////////////////////
0 O3 U, ]7 n7 ^; U/ W6 Q //////////////////////////////////////////////////////////////////////////$ z0 \/ U$ m- U& n% r
CInventorySort* pInvSort = new CInventorySort;- _5 I. N x% x$ J
vector <sItem> vItem;5 F* l* g3 `& \5 N6 ?( n7 `2 E
vItem.resize(MAX_INVENTORY);//初始化大小
g/ \5 ~* T0 K //////////////////////////////////////////////////////////////////////////4 H8 `& x/ i+ N. v+ u' d4 ?6 O
//填充数据
! }& [7 I! ~# y U z. S for (int i=0;i<MAX_INVENTORY;i++)
0 _6 F0 ]" R; Y, Y7 h& @* r# Z1 | {
$ B' S! A3 Q" { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, s5 ]) H. D' o! Y
if (!pItemElem)
8 W4 }, Z) a p6 [! V {9 ~7 b! e2 P: l+ Z
vItem.dwKind2 = 0xffffffff;
/ N0 w, [6 M& W4 s1 R4 t: R+ `9 B8 } S vItem.dwItemId = 0xffffffff;! s: k& a5 c q& u
vItem.nIndex = i;- o( \$ o D' d' s: c! @8 y& ]
}else {/ N. b) k; y. M' G6 }' P
ItemProp* pProp = pItemElem->GetProp();) |$ \0 \8 e* M( v
vItem.dwKind2 = pProp->dwItemKind2;# k& m1 d8 @# g; {% Y+ D
vItem.dwItemId = pItemElem->m_dwItemId;
$ \' T+ i: w2 z8 w vItem.nIndex = i;
8 l$ p0 s/ y3 G! m3 L: B2 E }. P7 T( q2 |4 V, u. k$ K' L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& f7 I5 a0 o: U' R
}
+ [* m6 |" f4 Z% }5 V //////////////////////////////////////////////////////////////////////////
9 }/ O- U* R' Z9 m r e0 s sort(vItem.begin(),vItem.end());//排序
8 o' T" p) J; D/ q& L //////////////////////////////////////////////////////////////////////////
7 E" J; O5 e* ^5 z3 A( e: f //交换9 i9 ]( Q: V* w: G
for (size_t i=0;i<vItem.size();i++). m1 a" A; b8 Q7 ]3 G) }
{
. g+ Z( X! H3 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- k9 Z" u( P# ^6 A pInvSort->Add(vItem.nIndex);+ b+ ?6 M/ [6 Y9 F
}
6 e$ l& m6 o0 G, ~; K% e8 E BYTE nDestPos = 0;
+ s: |4 H8 s( q6 F+ I for (int i=0;i<MAX_INVENTORY;i++): q9 G$ B9 |: O* I; A
{; G* G& { Q2 S, f) a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' \* D2 s3 y1 V# [& u
if (pItemElem)
! Z8 F1 t: D" k. Y2 \7 k {
8 w, g: ]7 M; J) D+ K if (IsUsingItem(pItemElem))
. l) a' C6 Y z# l% r) a {- t4 t' @! I* h _
//这个位置无法放+ p; \* ?/ a6 p# a* I5 ~1 i& z
nDestPos++;0 n: G' W' i* G4 N
}
6 @6 v) k; V- K1 C' S- `9 H3 @ }& E8 v3 ?" k/ I! j9 F, v" ~+ Q$ C
BYTE nSrc = pInvSort->GetItemSrc(i);
1 ]$ l9 G5 ?$ j6 N& _" ~( j' \( D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' u( x+ _/ f5 [" @* S- U3 u6 P if (pItemElem)+ G1 I2 ]' @: U
{
( L+ [+ }9 G6 x0 B n0 L if (IsUsingItem(pItemElem))
" P7 }: x5 M, m3 s {
' J+ a% y6 p7 {2 d% s6 M //这个道具无法移动,跳过
9 X' C* i: H- i! g4 ?* D continue;
) W' }8 X2 i2 K$ V. B% Y }/ p* z& ~: r0 f% D; H
}else{
2 L4 K$ V* c( A3 k$ v3 k' D* R //空位置 不用动( e, | Y( Y6 ? C5 g- J- T5 q8 q. r
continue;" z0 d# E. U) n% x" r, }( t
}
. T! ^9 ]" Q1 G" z O4 b4 j //////////////////////////////////////////////////////////////////////////
9 \% [3 C2 F* a: z- y$ A! w' Y+ { //开始移动/ F" a1 \7 b+ b& v* X
if (nSrc == nDestPos)# [5 {6 M r/ \- a
{
( r$ Z; {) _& o- ]' W6 Z //原地不动
+ Q/ |9 X$ {& w T; i nDestPos++;8 ]" J& ~! z# k" g! S
continue;1 B/ P$ [ w+ ^# \- d# h. @
}
8 T4 J' ~ }' \0 Y* X$ O4 H pInvSort->MoveItem(i,nDestPos);
: T: O0 e: [6 c; n1 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 b! X+ d1 f9 c3 {& c' ?% O- ]
Sleep(5);2 N) a. y, L- Y; Q4 O" {
//Error("移动 - %d->%d",nSrc,nDestPos);, T2 w; A+ l8 @$ ]
nDestPos++;! ?" v1 b* U4 L- p6 a! A
}
' r. Z0 E1 G0 f- p6 ^( f" H //取第一个元素的信息2 d' N! v3 j; ]4 ^$ l/ @7 Y* M
/*
+ u& U2 W( B+ ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 }+ f% T" M- k! l( D$ e {6 V% X* I0 o- q( N/ s; `0 ?0 k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" {! u* F% U6 I8 l$ ^" z( _ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ E) W8 |# q3 b/ L }
8 q q- e- H" q( N+ `" m */$ O Q3 [! U3 j
//////////////////////////////////////////////////////////////////////////8 x8 C* f( j c4 O' Z
break;. ^! ]/ G. ?( e# h( @0 C
}
6 ]: M; l- l" ?1 Z6 K4 w }
2 M* k- c9 f r* n}% W; a6 O+ o$ |2 V. a1 d. g
m_wndMenu.SetVisible(FALSE);. z% Y. Q! V& H
* _8 U; U- W7 R9 Z' ]2 ]; Y--------------------------------------------------------------------------------------------------------
( v; R; `" y7 C8 \4 ^. N1 E4 R( D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 S" W/ E& }' w
{; i B! I2 }1 K: ?* u
BaseMouseCursor();9 N- Q+ W O6 W
}$ b9 Q1 _% D" R( v7 y. c
在其下添加:* p" e. Q' H: j2 I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ N! ]8 o& Y* x
{4 F' l' N8 y! N0 w m9 P% l- D
m_wndMenu.DeleteAllMenu();
+ R" {) K [5 l8 q: ]( vm_wndMenu.CreateMenu(this);
+ R% Y8 _ J( q. b' u6 t2 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 O1 _: ?. P9 `
# l& f, B9 G/ x8 i1 Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( z' x# a) _9 j9 L1 `# ~{9 U% ~- M: Y" O% O3 L V
//P以上级别才可以删除所有道具
) O" l" A# J# y) Q$ T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ t# B' M9 s& I# w2 t' L}" I7 v+ X9 H0 y; a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- Q) m, u8 {2 W; [4 c% B5 X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' U; _* a% P- A" b9 }m_wndMenu.SetFocus();. ^: b3 k1 p7 `" C+ e
}8 Q5 I) ~- ~) b% b
------------------------------------------------------------------------------------------------------------
( i* A6 q% x4 k: s************************** L V. v& _! ^. ?, e/ ~
WndField.h文件
0 J( |& y: s8 _( {7 I! x: \*************************) g9 t7 f& U. q0 `. D
搜索:BOOL m_bReport;7 _1 `1 w4 Y: V: M1 L2 k0 @7 n
其后添加:9 o2 h3 R6 {3 o, _, x
CWndMenu m_wndMenu;
" b7 \+ l3 y: }& X0 e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 T5 q% h) R+ p8 u- O& l其后添加:
/ D _/ p1 [- R- `5 w$ B" n% ^virtual void OnRButtonUp(UINT nFlags, CPoint point);; K' o9 z* Q$ h$ `
0 P5 |7 Z* v/ Q, T6 C; q! d& I9 D* P- x4 C$ |" B; Q
|
|