|
|
源文件中_Interface文件夹下WndField.cpp文件
; X' V8 g* q$ J5 w搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, D9 ]- z [4 P! d! [( d$ q/ i. @8 X; g3 r1 t1 b8 _
struct sItem
: |+ T2 ?) |- U' q2 q{" D4 x! i$ R! p* G' e% z6 `
DWORD dwId;: S4 d, H; i+ l. g
DWORD dwKind2;3 s0 H( P; \; I) @
DWORD dwItemId;5 P( U: v+ p g5 R8 Q4 P6 w
BYTE nIndex;' M+ v* D- m# U
sItem(){
( f+ e9 O R# x7 q$ F' `& O% n0 w dwId = dwKind2 = dwItemId = nIndex = 0;
4 j7 w$ o$ g. _6 ]8 v! G& Z}
) V* D" @ B$ sbool operator < (const sItem p2)
, u/ b* C4 |" t- R$ ~{
$ R! ?/ B9 L; z; s7 w S if (dwKind2 == p2.dwKind2)! h6 X% U V# D: W: m7 l4 S7 x
{
! @# [+ Z M3 k2 y. h" d B" p/ \ return dwItemId < p2.dwItemId;# O% a* [& a% c7 e& v: y
}else{; K7 F u. P1 }1 U! }% C) k* T6 [4 S
return dwKind2 < p2.dwKind2;2 ^, b. G. M+ N6 U
}
& H* X0 x( L0 U}' h( i8 b5 Y5 D" Y d
};
9 X/ A/ j6 u2 ~" e% W; P: }3 Hclass CInventorySort
) B( C$ f u- K7 e, e$ M% L{9 ~) }9 E) E( }4 G0 v
public:* h8 t) w2 Q$ [7 o
CInventorySort()8 \9 A9 ~- ?! ~& y2 P% i
{
3 E. |, G+ S& M+ x3 q" x( {7 n4 c. t m_dwPos = 0;
2 R; c: ~7 h* {- F9 j( M! ~$ s2 R}
- \0 O& \" e- z; |" h% D1 a~CInventorySort(){}
. I; ^0 D. s/ z( Xprivate:( x, |5 [6 _6 O0 W1 _1 l% e; n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* [) @' I/ [& g, FDWORD m_dwPos;7 z+ }/ u% v2 Q, Z# x, A# b& G
public:+ f; L# F, j% k+ N/ Q
void Add(BYTE nIndex), W! g4 T. z! r8 T* b
{
- H* o! N: V" E/ M if (m_dwPos >= MAX_INVENTORY)9 S$ P6 N" U5 H: N' h* q
{: c! d- s9 U5 f! r; z+ b4 R
return;. A* U. j8 e/ \0 ]! f$ o
}
l6 z+ A& e! R4 p! L2 B# B, t m_Item[m_dwPos].nIndex = nIndex;
1 R( ~0 ~: t2 G1 x/ ?: X m_Item[m_dwPos].dwId = m_dwPos;
9 N' P/ U2 Z- e! b4 ~. y m_dwPos++;
3 S( b4 |% o5 J$ n$ [}: {+ X0 \4 |/ u/ D" F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 D3 A8 h1 u' c. T' q{
. ? i0 x* H0 d; q, D# P& c# E D for (int i=0;i<MAX_INVENTORY;i++)0 j: w5 t2 C9 T. {# S
{/ l2 k7 }/ z/ Z9 r1 `
if (m_Item.dwId == dwId)
" u& T6 q1 ^( N {& A. I, _8 d G2 l9 W
return m_Item.nIndex;6 f: p! Q" M. G& @' F, R
}
( Q5 g; j% U( O( h4 Q }7 R) W# c. D- K/ q+ V [
return 255;
u4 \% e5 u* X4 _* x C: I8 d}
3 Z; o- A# b/ k4 C4 l6 H/ {9 fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ @& x+ j6 O( d* s. y
{& w- W5 ~9 y- }: s1 b5 b4 s
BYTE nTmp = 0;
9 ~: B' {: }! u* R6 g bool bDest = false,bSrc = false;9 o6 K7 z2 U! m/ [. Z
for (int i=0;i<MAX_INVENTORY;i++)
( M; {2 ^; k3 |: x' V {
! F8 E2 h5 Q4 Y if (dwSrcId == m_Item.dwId)
+ B7 N1 D1 O K2 G2 D9 u+ f {( E8 ]) S/ j. E. Y
//id相等 则 改变对应的dest和src
# n: T/ z: N# S) y. H+ ] o3 E* D* R8 M nTmp = m_Item.nIndex;
|4 G$ y; P: m8 M" f- f M m_Item.nIndex = dest;- \' _0 _4 w- N9 K" ?4 d2 L
}; k! P8 t3 n: |/ t1 J
}
6 H- ?7 Q5 z' N$ y [/ d; s //临时数据保存完毕,交换开始
. p. m" Z1 f9 [. L1 \. V for (int i=0;i<MAX_INVENTORY;i++)" X K6 V4 P- I6 V6 |% S! V. K# Q
{7 W T4 O. O& }* ^
if (dest == m_Item.nIndex)1 l* C9 m8 s4 A" K6 U" O, r
{
" \. o; |* Z# x2 ?, O; g //id相等 则 改变对应的dest和src
/ F8 E# |( S1 [' f m_Item.nIndex = nTmp;# u* Z$ D% i% @- M
}: A( k" `5 \9 e0 L
}
# ^0 V' D# {& W4 u3 w. i}
& S$ H; N0 y& `3 J' m* s. j};
3 {2 @ f+ ~. G8 M-------------------------------------------------------------------------: l8 S# Z% ^7 l
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& D3 Y( L6 X! ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ A; s0 ]" c5 w) [
紧靠其上添加:
9 K1 K$ r5 d% ^% n& k) r, _8 gif( pWndBase == &m_wndMenu )0 C \& }. N \( |- I
{
" Z( P4 r7 i: d' Z6 `6 Z switch( nID )9 ^' x3 n; @- v2 A! T
{3 W; Z& ?, ?& X# C
case 2:
. ^" s: [8 H. ?) e- V+ ^ {$ L @) A5 ~7 r; W% t
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# [/ x/ c/ n3 L$ g; E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 l; L9 R" `$ |# S. D
{( W" O! ^! A& @+ o- g! Q
break;
9 y7 r2 p7 T/ l. e' Z" g: P) \ }
# B/ ]0 \* F( B0 Q% t6 M' S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 H, Y' b: |# m% [' }
{
3 L l5 C. X! F5 z* H) C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 ]( t$ k& v' B if( !pItemElem )( D" k$ e, h! c% W+ ]
continue;+ t6 O6 L/ |% q ^! V& c
if(pItemElem->GetExtra() > 0)7 ?7 }2 S+ D: F$ ^1 d0 x, |
continue;
1 z% {# ?) v. V% k, C8 C; H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' n3 M# o# U2 R# Y9 {' \3 e continue;" o+ L! P& P6 j5 I) W& y
if( g_pPlayer->IsUsing( pItemElem ) )
9 Q. A; @" C6 K) ~; B continue;
+ l1 X2 C6 c) `* _ if( pItemElem->IsUndestructable() == TRUE )
' D3 W7 M# N( M% V1 s# N, x {( q% B" T& C: `' a' i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% V0 ]# ?2 e) o2 c3 b3 q+ H) j
continue;
( k' f E/ v, P3 V }3 Z, e N0 {+ Z" R, F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) l& r- q3 E, `. C! o8 o' p* Q7 x
}
* Q7 J" u. T8 Y/ G& `8 b+ z break;4 ]/ p! J, E$ Y# d" D
}
* b6 Z7 ?" E+ y* @3 f" R/ v case 1:
+ }2 [. r5 R8 S& c/ v {2 D4 b: D6 Y: m4 o
//整理背包% @( [- T9 O, h+ O
//////////////////////////////////////////////////////////////////////////
C' t( J" Q/ T2 A //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 E" ?" K7 @* f3 {/ x //////////////////////////////////////////////////////////////////////////
% v) t) ^/ l; z" v9 f& c4 J [+ m //////////////////////////////////////////////////////////////////////////3 h8 U( p; J" l$ {7 O
CInventorySort* pInvSort = new CInventorySort;: k7 n" i6 R" D2 H! k. G2 M0 S
vector <sItem> vItem;
# P4 ?# q8 `9 P7 X$ f. F% { vItem.resize(MAX_INVENTORY);//初始化大小
. T+ F) d" b0 n/ u# g6 N //////////////////////////////////////////////////////////////////////////" t& Z( u7 h8 X5 |
//填充数据
. j% ]. q& }. e0 I7 e! |; e for (int i=0;i<MAX_INVENTORY;i++). B6 R9 Z5 z$ T2 T; z8 s
{1 ? r$ @6 d) s* c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- h- A3 F/ X, m; m# F3 I4 n
if (!pItemElem)
E* _9 f! p, O6 _ {+ w8 B7 h6 c9 d$ M/ x. t$ x# c
vItem.dwKind2 = 0xffffffff;
- ?" \4 [ t" P# X( d& [5 X/ n vItem.dwItemId = 0xffffffff; Q2 p. M B7 @+ y' s7 ^* D
vItem.nIndex = i;2 u; X' V- G b8 l9 X4 V( E
}else {* F2 k: d. k% L
ItemProp* pProp = pItemElem->GetProp();/ e' c2 @# x0 A7 B+ j0 d
vItem.dwKind2 = pProp->dwItemKind2;0 |% D+ W( b& a
vItem.dwItemId = pItemElem->m_dwItemId;
8 M& P* Z& ~! c5 f# v4 o6 m vItem.nIndex = i;, L s( D @* ?' X# [# E% E
}
* C6 U1 K: F! e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 H0 M6 b* d0 B }8 a# _& ?4 [1 Z* A' {+ c: o* b
//////////////////////////////////////////////////////////////////////////
4 @8 h8 T6 N4 T4 e sort(vItem.begin(),vItem.end());//排序
* }9 S, }% v2 l B //////////////////////////////////////////////////////////////////////////
8 s" D* J" T- C* K //交换
D$ u5 I6 m( M3 [ for (size_t i=0;i<vItem.size();i++)4 `& P+ J+ @8 b4 d% w/ V
{) F0 W# z7 ~# Z0 E, ~& n
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; m- q! q* q8 k7 ] pInvSort->Add(vItem.nIndex);! F! l4 j3 h; \0 x/ J, y9 s
}. l) g7 Q, I! N( D' A# j
BYTE nDestPos = 0;4 J% `+ t$ X5 J* s j! x
for (int i=0;i<MAX_INVENTORY;i++) Y! H" Q. n) z
{
3 }4 i: b: T3 Y; V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 |2 s0 }* h; d4 W* s if (pItemElem) C) ]% E3 @( l4 O
{
+ I' T1 D2 R% V0 C) D6 ^, m0 j if (IsUsingItem(pItemElem))
2 {4 Y5 F* F/ U" u) U4 ] {
; e! G |6 `# U9 h6 N% x //这个位置无法放$ W. @: B+ k. \8 b4 T7 }: J' _ L: t
nDestPos++;* f& I' u& i9 v2 v. E* a
}) i M6 k5 l& x F/ c! w
}( u' ]! v) p; d( X
BYTE nSrc = pInvSort->GetItemSrc(i);
% z$ x/ z3 n* e, R5 { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# l7 e' b( T, ]/ D2 ~ if (pItemElem)7 W+ P/ C2 C2 F% F
{! a3 W0 N. t$ o2 R. v
if (IsUsingItem(pItemElem))
! A1 C* k2 g% c) p {6 s; n8 Z' _4 B$ Y9 g+ b2 \
//这个道具无法移动,跳过6 i6 S6 y' s' {1 B
continue;
' }( ^% C9 M, w9 m. D6 V3 q }
, O& c8 s" s5 V1 } }else{
1 p! j& i4 O1 L; b- m //空位置 不用动
2 t- _$ `1 q; L/ v( P% e continue;( y, {$ F8 A, y+ h
}/ X8 P8 g# B6 `& w7 B3 W& ~
//////////////////////////////////////////////////////////////////////////
% I: A' K5 G, \. I) b: K //开始移动
) _& s$ ^2 C, ~6 j if (nSrc == nDestPos)8 z4 I9 \. `9 @2 _& l V
{8 {; q$ |9 R6 D( d& [+ B4 {
//原地不动
% ^+ U3 V" p" u- w& Y nDestPos++;3 K% D: P$ z+ g( A5 Z
continue;
# B- ~+ F, X2 z }6 T& g( ]/ Z \3 i1 j/ {
pInvSort->MoveItem(i,nDestPos);
, [9 X& C9 x; D) x3 V& T g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ I6 N/ d; _3 Q9 h% }" t0 E
Sleep(5);9 S0 N& T* u/ n, Z" ^2 J+ i: S4 E6 ~
//Error("移动 - %d->%d",nSrc,nDestPos);
) U' l9 Y f4 Y! ` nDestPos++;0 e" [- _0 l$ |
}2 ^! s# y2 a' G. ^
//取第一个元素的信息) {0 y" v' N4 w+ \
/*7 o" \% R1 W9 U' ~, T
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); R7 c7 n& b% d
{4 x% L6 ?8 M6 _ H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 v7 g- o& t1 @* i% h4 s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! P6 k/ g: `! g, p; M G: D2 S0 h2 _ } z: {; m/ T5 ?: z1 `' k
*/
& O1 z a/ {: r6 l5 o //////////////////////////////////////////////////////////////////////////, {: ^& M/ U' C4 Z7 `* B7 e
break;
/ c2 f7 ]6 l$ L# o: f }
( A! N8 y+ w/ X) i; p } 3 K' W* n- e4 k; V
}- V2 W/ k% @; |) Q5 s
m_wndMenu.SetVisible(FALSE); s/ a( }! t2 K$ F% ]
8 w: ~: O0 S, S# H
--------------------------------------------------------------------------------------------------------$ p+ K! ?; j2 m$ o5 B1 L, W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( i( L( ^0 t/ y. \1 ?{6 X' E9 g: _- u8 u# v9 N- e; l% L
BaseMouseCursor();
5 N9 Z y$ [: [}
* f" ]! ~+ g) X+ W. ?/ U在其下添加:
- \2 |, S( l a* f" Y) qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ V$ M% |( |9 N3 j$ f3 ^% |* z{
6 Z- h q6 F+ Mm_wndMenu.DeleteAllMenu();
9 T* D: ~! c8 T: Sm_wndMenu.CreateMenu(this);5 e0 u7 j, y, z6 R* [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 }# X$ J% A6 ]7 Q1 T9 W1 E
+ ?/ j. }( y$ o% j$ T+ ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 K9 f- {% F% o4 v d/ u9 `( X4 v- y( r{/ W- c! j1 ?" J% h
//P以上级别才可以删除所有道具8 e+ c b$ L( R$ I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 Y. [9 T0 ?# S. `: P$ b$ \
}4 Z$ f+ b2 y/ N4 c' P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* m; ~! [4 {5 g; b$ F3 Sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 i3 P: c+ `2 }, V7 u/ w
m_wndMenu.SetFocus();0 c0 h0 G v( D- e- a$ \. q2 C. v9 }% s
}" ~2 ^$ O/ i' `7 P. k U
------------------------------------------------------------------------------------------------------------4 D# J. {2 x: G, W7 u" l$ a2 H( l
*************************: z2 ^) M) b+ H# k5 _* Q$ B
WndField.h文件
% ^ C9 s% y# _! W( b# p B" v2 t*************************
! E' U. e+ `5 e+ Y6 K9 v Z* L搜索:BOOL m_bReport;4 K3 l+ S3 o: M0 A
其后添加:$ B; N* f F! l& i6 z
CWndMenu m_wndMenu;
/ @3 S) M* P9 W* x: A. V: }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- x( U% N) q5 p1 H% }# c5 O
其后添加:4 y8 M5 A1 G/ c6 w( \
virtual void OnRButtonUp(UINT nFlags, CPoint point);* M, X/ ^" Q( |, X0 o" q/ v& z
$ K( c' \2 L9 D; @' M' i6 x
! V$ N! L A+ f" D( j+ A1 g
|
|