|
|
源文件中_Interface文件夹下WndField.cpp文件
0 P& h) z/ U$ \3 ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 {, I5 Z8 `0 l9 l! h3 J: o
( H) W5 D( [0 }% L# d' U
struct sItem; E/ u! R% o3 @9 p: ^; {
{: \3 E& a( F- e$ H+ T
DWORD dwId;$ ~, ~" t- Y1 N% T' P
DWORD dwKind2;
6 E# {8 o& w0 X, _' ?, `& wDWORD dwItemId;
) G$ O L4 B# E! v+ O" TBYTE nIndex;
! P" o/ R6 Q! S# b" W6 bsItem(){4 x$ ^# @, y( p+ E- F. V& w
dwId = dwKind2 = dwItemId = nIndex = 0;
# x, u0 T( b0 ]$ [" s Y' d}
$ X( ~5 G0 Y1 Rbool operator < (const sItem p2)
# u! D$ C) a+ v6 d3 `9 u{4 t/ C. w3 ^7 U8 G) ^3 q2 h+ k
if (dwKind2 == p2.dwKind2)
9 |6 W! ^. S2 h) r4 t& L( @ {2 ?, ]! L& V ]4 `7 ]7 q4 g
return dwItemId < p2.dwItemId;; E! i) B4 s @, V7 R$ I
}else{, p& j, b$ M9 ^3 d
return dwKind2 < p2.dwKind2;! H; ]/ h- ?) O
}
; Y% h/ H4 x0 c7 g1 @, V' W( ?}
# z- |& ?. ]1 Z+ {7 r};
3 t! x+ e, I2 c @2 D }class CInventorySort
. u, c8 c* u. F; |; S3 p/ m{
\; d8 M9 F: u* S6 @% Apublic:
- A h$ ~( B% N) E) k4 fCInventorySort()% P4 Z9 u4 L X# A1 v8 @/ J8 e
{3 d3 ^0 ^2 R& s: S6 `: }! [) V
m_dwPos = 0;7 n4 T/ r- d! _0 L' }8 w
}( I1 x- x. B; |. ?3 v% e8 `
~CInventorySort(){}% Q* F8 J8 _4 I5 B; q8 r+ }4 Q
private:1 c; U7 L# V5 ?* a: v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- j. Y* l3 `% R
DWORD m_dwPos;1 n( [( m: c" j# t
public:
; y9 A6 `+ u, c& a# A3 i& tvoid Add(BYTE nIndex)
! y' c g9 r2 J0 J1 V+ S{" P$ ]( P# \. _
if (m_dwPos >= MAX_INVENTORY)
6 a: Y8 L. Z+ d% A3 Z/ L6 y {
8 a$ v6 r+ r6 n$ o' [" [9 Z return;
! o; c* N1 Q0 F& i$ D0 Q }
; r& u4 O8 a( d5 \0 D( i& A, A m_Item[m_dwPos].nIndex = nIndex;$ F7 V2 y; W- \
m_Item[m_dwPos].dwId = m_dwPos;; n' i& N' W S, E8 e4 C
m_dwPos++;
3 ^, v# R f( }% G; K}/ c4 ?* m" K( V' R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- w- ^* ^* n. I4 ?
{0 T* ~1 s* B# o& u9 j- E8 @
for (int i=0;i<MAX_INVENTORY;i++)
7 [* z/ w0 S6 u) F1 j( I {
3 r: V% e. g& @5 x5 D; U+ @ if (m_Item.dwId == dwId)8 c( ?, n4 C4 j1 ]$ T" h
{
; o" R# m9 M3 S& Q# S return m_Item.nIndex;
, p/ ]* n' A9 @ }- \( ]' h! [( X3 l2 {( F" p
}; t* f9 {& z' _+ G
return 255;, P5 j4 \- A u( }
}
7 g% o7 x: h6 R8 }' T+ mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% \% E! q$ E; H" S& D% A- v: b; ?% _{6 w3 ~9 t2 h! g8 E* c, Y( k
BYTE nTmp = 0;8 ^- N3 ]9 o2 e+ Y' P+ W5 [
bool bDest = false,bSrc = false;
6 l( a, x7 T$ z( t$ ]2 C6 _ for (int i=0;i<MAX_INVENTORY;i++)/ Y$ t9 L7 q5 t! p7 W. v) E3 X$ p
{$ Y, F: w& ^' V" Q8 N
if (dwSrcId == m_Item.dwId)0 U3 ]; r* {' z7 K5 s* u
{' h0 V+ j: ?! F" }, G! c- O
//id相等 则 改变对应的dest和src
% N' \7 M# v2 X nTmp = m_Item.nIndex;4 q) @" A' d6 y# }! P
m_Item.nIndex = dest;" s$ ~. |0 l, F3 }' B/ e
}7 p' Y! t7 l4 u5 {! X
}
. |; U- e$ Y o( P //临时数据保存完毕,交换开始8 Z& W8 V) Q+ p0 ]
for (int i=0;i<MAX_INVENTORY;i++)) M# j0 Y3 l2 d1 K
{
; Q, r, W5 k& o1 k6 X- `3 ~$ @" L if (dest == m_Item.nIndex)3 W0 f8 I6 \( m& U$ F; Z7 G. Z; L
{
7 z) ~( G7 Q- j //id相等 则 改变对应的dest和src
6 t( s4 X. \) [/ h( f, x- F m_Item.nIndex = nTmp;
# }3 m) w# I: w7 ?4 J( Z0 a* H }6 a7 C+ A. `. m8 D2 M# k' o7 f2 s
}/ d9 ~9 O5 B3 N4 v) V- h% e2 E
}
* X3 K, o; l9 j+ \$ Y9 d};
/ c0 ~+ F6 U7 u-------------------------------------------------------------------------
. M: a, c* _4 [( }* k, E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; l) b9 {' }0 B- P! a0 H( v. y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 F3 X" C% {2 z* t紧靠其上添加:
# F0 B: p% [$ G/ Tif( pWndBase == &m_wndMenu )
6 V% l$ o1 d% Y, ^ q7 k3 z{4 J( c4 b% F; @; a* ^3 b
switch( nID )
" S$ d6 B2 r; p3 Y% q {
% D+ e4 h' Y8 W l+ Z9 ~ case 2:3 ?6 Z- }) L/ ?7 V
{
7 e. F6 U Q7 q [# V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 E5 F8 G7 S2 }. s O- p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 X3 i8 l' j5 r n0 u5 I6 S
{
! { q& m" V+ K, d break;1 z4 a3 j' X: f# K) w0 @7 g
}
) c' F' z0 K- C, `; b% n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ G7 l7 u: k1 h c' v4 Z |: t8 y
{& h" \8 z* ~) N$ C- [) L& C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ?; W3 _3 h1 |/ H0 o6 V0 q if( !pItemElem )) X4 U! ?* o7 y+ J
continue;3 \7 s z6 W1 T* U: e2 g
if(pItemElem->GetExtra() > 0)
( q L8 V9 E; p" e' z2 R% }4 T continue;
/ m1 \0 X8 Y/ Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 o7 N. _ J- H7 ?( p continue;
- _6 |7 p8 C* w" l/ F if( g_pPlayer->IsUsing( pItemElem ) )
; k( }' L* F- f' x" a continue;6 s5 h/ H( n5 m: W# m+ @- t# P
if( pItemElem->IsUndestructable() == TRUE )! z! _. w+ V4 @# b) |5 {+ f
{' n& [5 l# J! R2 h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 G. d/ E- ]; {4 y9 g
continue;
% S% |+ j# i1 Y }7 ^3 Y8 v* k4 x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% f7 X& K+ p7 ?7 f9 v
}
. Y' G6 [* ] Q6 ~. m: X+ @( t8 Z( G; T break;
; |# b1 O5 O1 Y* F }
3 n! m# T0 r) d% H case 1:( u5 i+ T4 x5 z& M/ U% N- j
{
/ B2 E. R3 g0 z- D5 E, \ //整理背包
, J0 n+ | N, R) e- j //////////////////////////////////////////////////////////////////////////
; |" l/ G' L- g7 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 f0 [" c/ D1 K; m' m3 S; C
//////////////////////////////////////////////////////////////////////////
- @4 x0 V1 L' n //////////////////////////////////////////////////////////////////////////& k [0 A* B; W6 ^/ l" p
CInventorySort* pInvSort = new CInventorySort;7 `. A3 _( S* q2 b: v @0 s
vector <sItem> vItem;5 J2 c6 E, u) O1 H1 h* M
vItem.resize(MAX_INVENTORY);//初始化大小4 H5 C$ U* l) y9 D- R
//////////////////////////////////////////////////////////////////////////
% W3 J4 s- H# t: N7 ] //填充数据
+ A2 d9 C \+ [/ n! j( X3 E for (int i=0;i<MAX_INVENTORY;i++)
7 z0 H1 Q, u# L" z& r# a( X {
+ k0 M& r+ P0 D/ a, w2 A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ c b4 |" g: `" D0 w0 I. r
if (!pItemElem)
, y: E, o3 X/ d4 o/ L5 L {
$ B4 J$ V$ ?/ K6 N, _# X% j. z vItem.dwKind2 = 0xffffffff;
! ]4 O1 @0 i$ C* ?2 q9 p: ~5 X vItem.dwItemId = 0xffffffff;
5 d# R' ` s' u$ }/ ^2 L vItem.nIndex = i;1 W, Q! ]8 z& d4 H
}else {
5 g, G) h, T! D+ @/ j7 I ItemProp* pProp = pItemElem->GetProp();
) `( y" ~" n' a* Q vItem.dwKind2 = pProp->dwItemKind2;$ R/ G; d! O& n
vItem.dwItemId = pItemElem->m_dwItemId;" r- R5 \5 A& S/ M3 G9 x9 B
vItem.nIndex = i;8 C' r7 D9 Q% ?* Z6 E
}
. C* u4 L x6 s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ E" s8 y+ p8 D' L& d% T
}
F' u, E6 z4 e& p* K3 [$ K+ F* u //////////////////////////////////////////////////////////////////////////- k6 o& U( Q! D1 U' F/ @! K% K& H
sort(vItem.begin(),vItem.end());//排序
8 r8 l" Z2 W$ j3 r, f: W //////////////////////////////////////////////////////////////////////////+ ^$ r: h* H1 r3 z
//交换) V7 k" D+ z: ~% A B7 X8 a
for (size_t i=0;i<vItem.size();i++); s7 k9 s- ]3 q, r: l# r/ [$ Z
{8 D5 w) D( C$ k+ U- n4 u9 a" T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* l9 V9 M2 ]0 J1 x* d0 i! c* f
pInvSort->Add(vItem.nIndex);
: q; z7 F5 X: t% j' k/ p$ [ }
" v2 d! j4 b8 K& j- n, @0 d BYTE nDestPos = 0;: w! A% e- T, B) A* R. r
for (int i=0;i<MAX_INVENTORY;i++)6 v; w/ T" d( n* i( _4 ? A
{; L1 ]. S# P! N5 j D, h% O0 w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( ?9 R1 `& B1 X6 \
if (pItemElem)
% X9 k" Z0 c7 V3 X# w, c {
& w& Z6 M' {# E: M! I! U if (IsUsingItem(pItemElem))0 [' u( _2 W1 E$ H$ L
{5 h6 U7 f9 H; l3 `
//这个位置无法放( o7 `7 z( U$ c! ^6 C3 e
nDestPos++;
1 W8 A' }( v% D! J, ?! _& c9 r }
' u8 o5 A8 R9 n$ W }
- k$ X2 K/ C' \ B BYTE nSrc = pInvSort->GetItemSrc(i);# N# M; s7 E4 |5 n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ [/ M( ]+ ^- o9 Q- ~
if (pItemElem)) @$ O7 L' Y6 o. x" I( O& C
{* Z. @. a' n' H t# [* r. f
if (IsUsingItem(pItemElem))6 x; ]: g {0 k
{
& i2 Y! X$ h+ @0 ]- V //这个道具无法移动,跳过
$ ] j2 g6 H" H w6 Q" j: n continue;
# i! \; D' x0 y& U5 v7 o }" w9 H2 f( [# I% B; w. d5 Y
}else{
& O' P; ^% d W$ s/ [ //空位置 不用动
5 }# Z- t* z; K# l: Y continue;
, n' f ~, I9 {5 Q }
) ]9 l- [, l( c3 [6 U8 K //////////////////////////////////////////////////////////////////////////
2 u d$ P5 O V+ f; X$ A8 r7 d //开始移动
2 J2 ?" I/ H" T% `' N m$ ` if (nSrc == nDestPos)
; A1 ]6 B7 a5 E% V {* p2 r4 _7 d$ R7 ~% z b& k+ d$ ^
//原地不动
, h. Y' W/ L6 o( Z/ _! d$ C9 k nDestPos++;4 v9 M3 ^: b0 \
continue;* ^; t) T6 \3 U, b1 r& {
}
" c, x# I3 j7 [: u; H pInvSort->MoveItem(i,nDestPos);+ N: o9 {9 a+ } F$ e; a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ e j! S4 t8 ?
Sleep(5);
. y2 R1 K3 g* S6 R% q5 x9 I( }* P //Error("移动 - %d->%d",nSrc,nDestPos);
# v: Z* u) m2 N nDestPos++;% Q. e1 m" c5 F
}
+ ^) L" P# Q; s6 A //取第一个元素的信息
9 H9 o( W+ l7 ~9 X /*7 j/ }# [5 z! V* j7 Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; |, j) y0 J4 x! s- c8 T {
9 \' n, b! d$ `7 V0 C$ E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 N% k0 u& ]) n% | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- y7 s7 n+ H) C M. n7 X }( l5 h/ F1 i' x9 G7 ^8 k1 t
*/( u1 \3 K f, R: c' E' s \
//////////////////////////////////////////////////////////////////////////) R8 p: Z- s A* F
break;
! t0 e" _4 ?) U% f }
8 {0 h' E& O/ ?7 O$ B5 n: R9 P& q } + t8 B2 T1 G' J& C4 i( u
}
# ~* Q. P+ a7 y4 O0 sm_wndMenu.SetVisible(FALSE);
# T* o' ~4 ?" \. S. k ^1 {! z, |: M5 ~, G0 b% v9 I
--------------------------------------------------------------------------------------------------------9 r- Y2 ^ b2 L+ c! X7 I4 ?6 n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* f0 X$ R) F' c* l: p
{; ^$ z! B$ z) t$ S8 K
BaseMouseCursor();) d D1 l) D9 n3 x
}7 y8 n8 d$ u/ d$ u. f `* H( w( V: ]
在其下添加:6 a8 O# Q: q4 x( Z: x) h- o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! G, ?" Y4 Z& ~5 z
{) w2 g- }: M5 C6 G) D- n! Z$ \& D
m_wndMenu.DeleteAllMenu();
5 O% L# @7 R" C3 y9 }2 h: jm_wndMenu.CreateMenu(this);
8 ]# X" Z( f J3 U/ Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ ]2 B9 {5 T# _" d
* p5 R% Q( z( F/ P, ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# m. H' q8 u+ r5 U. S% G0 {4 Q# c{+ r7 [1 w" y: g: w3 z5 J" w4 k- F; s
//P以上级别才可以删除所有道具5 j% c$ E, G0 {4 | M+ B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: O# l D9 l* m; b6 J7 S( C) M
}( D* B3 a, J0 G& C7 @9 o+ b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 n$ h* J# J* W% D4 Z0 jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* Z D8 O% r$ `5 f* \
m_wndMenu.SetFocus();" U- W- w+ d; z
}' o. ~' }- d; o/ \/ \/ J* a
------------------------------------------------------------------------------------------------------------: d# s8 T4 ^, c" P) [( F
*************************
# C4 R/ l, B: G) wWndField.h文件
3 ^: ]* r' i5 }8 l*************************
" I6 ?) Q' \ R搜索:BOOL m_bReport;8 d7 z. E" ~. t( V8 J. h
其后添加:
9 ]8 i; T* p& `7 xCWndMenu m_wndMenu;
2 s0 X3 [# Q) `# {. y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* B: D l7 A! s c: d# T5 Z
其后添加:' ?/ ^% f; A% k. W! Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 Y* z1 F+ N! d+ O0 W1 v- z8 i6 F6 Y9 @1 j/ x% n; J& }- |; |& }1 @, I
% t: z _$ k9 I, K) Z
|
|