|
|
源文件中_Interface文件夹下WndField.cpp文件
( t. g" r% D5 {% O9 W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ }+ }2 v, u# O$ b# M j0 R% Z9 V& n; i
struct sItem
: b* B* q1 E7 W$ U) t, n{; {- f- c$ R2 n ?
DWORD dwId;
) s8 v9 ]0 B/ zDWORD dwKind2;, `9 i, p) A- u3 s3 }' @( n
DWORD dwItemId;! K3 \/ ~& _: Z4 M7 ]# J6 [; O- d
BYTE nIndex;
( N, Q' a5 Z; E. I7 lsItem(){; u+ u0 x3 b9 }
dwId = dwKind2 = dwItemId = nIndex = 0;
; v$ n7 |, E9 F. |1 I. f( m9 g/ F6 I}
8 F8 L' Y# M) h: R' k9 r @1 Vbool operator < (const sItem p2)
+ o) `) l3 S* V" } c1 ~{
$ E. i+ L# F5 \/ z1 h7 b if (dwKind2 == p2.dwKind2): Q* t* n' U# P
{
H& v3 b" Z& i, x* g9 s* B return dwItemId < p2.dwItemId; y* j Z) L8 Z+ ?7 r( |: I
}else{9 |- _3 i5 i" N6 b" N2 A1 Y/ t
return dwKind2 < p2.dwKind2; Q6 x, H3 K ~8 A6 X" Y9 f( y0 B
}
$ `; V* E+ c. y. j/ i}
5 ^# W2 o. u2 [/ r6 F- v U};' _; O G( I' {. `" A5 u
class CInventorySort
; x$ H8 j6 ?2 c. p7 P' [8 `{
! r8 R4 [8 {2 T5 W; Z: Spublic:
$ Q1 L2 N( ]% R# U0 M& u3 wCInventorySort()8 T/ E8 V: X. a5 h
{3 a" o6 _# r* J8 s! d
m_dwPos = 0;2 w- k) G( I( S4 u. b3 x/ m' b4 N+ Q
}
1 i% `2 N, ?; D' J) p~CInventorySort(){}
0 ^/ z) T# l5 p& @- jprivate:
* w2 I; {1 _# W2 K' j3 n/ wsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% ^" `" x) N* a: K
DWORD m_dwPos;
( r* |+ H' g4 Lpublic:* F2 m( e' W$ i, C
void Add(BYTE nIndex)
- O7 W/ j% F# l4 p& M3 Y{" C3 h$ y# d& `/ N: L; u
if (m_dwPos >= MAX_INVENTORY)
) p& f8 I% c2 o$ r5 O' O u {
6 s) e z) R* q# D+ i7 N return;7 r, C" f$ o9 }5 [7 B1 i9 o
}
! F* Z- h# L) t, ?3 Z m_Item[m_dwPos].nIndex = nIndex;3 y! l. L6 S) `, o, S
m_Item[m_dwPos].dwId = m_dwPos;& A( t8 [/ K* G# a# w
m_dwPos++;8 Y4 W# S' H- `# E* C6 W3 n6 K9 k
}
: G! Q! M5 M" H0 U: {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 P# M7 w) E# |' k% r& I/ K* T, L
{" J# o- P; i7 E$ \
for (int i=0;i<MAX_INVENTORY;i++)$ o2 ~' N ~3 ?! K. |
{
. N! s) Z' \9 J$ G if (m_Item.dwId == dwId)
; {/ e# r! U5 X5 q: U {
0 R5 t. X Z2 d8 W# y8 L9 p% S5 | return m_Item.nIndex;
) u/ t3 {3 m. y0 ~ }
2 y' K2 i% @! q& O }% { E/ x4 |+ M: A$ z
return 255;
# Q- L6 I" Y, m+ Z# N2 l}9 k9 I6 ^0 Q+ G/ h- h& ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 x' w" H8 f# |, Y. p3 @7 d( g
{
* W( s8 ^( Q6 v- F+ m BYTE nTmp = 0;
9 R- [# I: R! e( G, ]- O bool bDest = false,bSrc = false;
6 G4 p$ J2 _5 b. f) C for (int i=0;i<MAX_INVENTORY;i++)% `2 t }) C! J. v
{: Z0 b0 _( I: ?( B7 x
if (dwSrcId == m_Item.dwId)
9 @2 s. d+ I% a( r' r" a {4 W' {. T/ ]' g# a T
//id相等 则 改变对应的dest和src, B9 Y* l3 m6 o& q, B7 B
nTmp = m_Item.nIndex;! v7 N) t( h+ L! K( t
m_Item.nIndex = dest;0 s- a+ o( q8 ~ W- B
}
. F. v2 w' k3 }, J7 x2 f$ A }9 D8 k( m% l3 u: n
//临时数据保存完毕,交换开始 U- U0 R, g4 Q+ _
for (int i=0;i<MAX_INVENTORY;i++)
6 K0 t& ?+ L" F% b3 V {
8 ?9 X& j5 p+ y2 l: H1 J if (dest == m_Item.nIndex)" @$ l* O# i1 g- E0 S
{ X( w; e( _6 m) r9 {
//id相等 则 改变对应的dest和src
" M. Y& s5 M' O- P5 c* T m_Item.nIndex = nTmp;
" H( D" {$ K6 T! J, l2 d/ o/ g( m }( U& f) T% O7 M
}+ |% O& k6 A/ f, O2 g
}
# ^+ X5 {& m5 e% y};, O) D8 ^0 }# q* k! m& L' c7 _$ ^
-------------------------------------------------------------------------
1 Q/ t6 O# ?' n1 @9 [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
~: H% U# u/ h: S' `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 T0 E! s" ~8 H: p$ J) z
紧靠其上添加:; y" u9 `2 B! N. Q& Y
if( pWndBase == &m_wndMenu )
; ^% U4 n! I5 S' P/ I% d{
$ M& H2 [9 B: k- l# J& N( D) s switch( nID )7 Q+ a! G$ i& j
{ _- s+ E0 g9 G- o
case 2:7 @6 x3 Z$ H# _# B3 c
{2 F$ {& C8 x8 T% g" F/ O1 |9 c+ H
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 i6 p) a$ j8 w. z) D( D" p
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 v0 u6 e/ _4 b
{: c2 w7 V4 o. ^- k
break;
7 D( t9 h6 t( H! o) w2 z! o }* p( ? ~+ |( A7 S! Q0 `* T0 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ n4 s* u0 `- N
{
) b) e, t( h; V: P0 w# ]5 [7 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* Y9 ?/ o8 F7 F! E7 y* M* C( i+ |5 W1 [
if( !pItemElem )$ K. a' a- p5 l Z( @, z
continue;9 p) ~* _ P( C
if(pItemElem->GetExtra() > 0)" ?" O& ?. w! a# d0 Q# x
continue;
! M1 i9 [, W$ P% A8 b% m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( s/ C5 q+ ]9 y- W5 s) E continue;3 M5 a3 n" y- q! f8 x
if( g_pPlayer->IsUsing( pItemElem ) )0 S" o W8 _& x6 W
continue;
$ D; t4 w8 H" t5 { if( pItemElem->IsUndestructable() == TRUE ); u, o8 o* R& `2 ~) D A( j. D, v
{ K8 y, g; ?7 I7 T" ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); V* Y4 |9 Y1 ~; J; |8 j# Y
continue;
- v; `6 F( d+ F: A5 J! P }
- A% V [8 n, ]+ U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ M+ M5 e! A% F0 X1 |# n
}/ C# m) |2 `/ K8 M
break;
4 I( f/ w: y% L4 M' {9 j6 | }
) A9 H1 i8 d9 }! M: _+ i! p( f case 1:/ F8 N& Z4 p4 [) @( W( [0 m, P
{; R+ V, K0 f/ `) y; Z
//整理背包
N+ p6 Q- T/ R9 P/ j- J. ^# M //////////////////////////////////////////////////////////////////////////% S+ N! k8 x! K+ R+ c9 z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ A7 B7 G! e! ^0 ~0 v
//////////////////////////////////////////////////////////////////////////' ?- x4 |0 x. D+ F
//////////////////////////////////////////////////////////////////////////* _' W0 ~" Z0 V) Z
CInventorySort* pInvSort = new CInventorySort;8 T. R* `" I" I4 ?7 W
vector <sItem> vItem;; e: o! j5 ^+ i6 `% u; j
vItem.resize(MAX_INVENTORY);//初始化大小 V& O3 u( ^9 R; K: O
//////////////////////////////////////////////////////////////////////////3 x, {/ O% P, ]0 @" w* w) b
//填充数据
% ^4 l$ U7 d5 C( [2 J8 S for (int i=0;i<MAX_INVENTORY;i++)* [* _# V- H8 l4 {
{
9 |0 g0 `% i4 W) Q, } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ C0 N# \9 x# e5 P: y if (!pItemElem)
6 [4 U, e* g, Y/ A1 p/ Y g) {% W0 V {: d1 b1 F) ?2 M3 I6 ^
vItem.dwKind2 = 0xffffffff;
' C* T0 {' w0 R K+ | vItem.dwItemId = 0xffffffff;
% g" M O. k$ ]- W' }: ] vItem.nIndex = i;
& j! y E/ {* v; n' R0 B a }else {# O5 ~1 X+ B( d5 c9 X; s3 H) \$ d/ V) E
ItemProp* pProp = pItemElem->GetProp();
' e7 }+ d) q8 R+ C) m9 { vItem.dwKind2 = pProp->dwItemKind2;
. m! _/ m7 `7 `! Y vItem.dwItemId = pItemElem->m_dwItemId;" ^0 h$ o$ _9 ]
vItem.nIndex = i;4 F% }$ \0 x/ M" b6 G. S& o
}- J1 [* H! l+ V- H" ^; s" @' w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( c. n. [6 ]& X0 X1 {8 A a n
}
5 N& q; \2 x) u1 s; ^' ]2 V //////////////////////////////////////////////////////////////////////////+ Y# m9 f2 K. k& N* l/ j8 j4 U6 y
sort(vItem.begin(),vItem.end());//排序
5 y. j$ `9 k6 n0 { //////////////////////////////////////////////////////////////////////////* Y* }6 b6 G0 p) h7 g& A$ |5 p$ w
//交换
9 Q7 `) D7 P, m' i% P; i3 H# c for (size_t i=0;i<vItem.size();i++)4 v6 \. a2 Y. S0 D7 P( {
{0 A" O1 g8 g: C/ o5 t6 ?
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# P* M. y4 M0 B) m7 {
pInvSort->Add(vItem.nIndex);
) ^, L) x6 G+ ~ }# ]1 I$ I" y$ G
BYTE nDestPos = 0;
: e' u7 a1 Z H. I for (int i=0;i<MAX_INVENTORY;i++)
! c9 c$ l/ h; ]9 J8 @/ x {
8 O: V6 A+ F# }0 z: e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 d; c4 y8 u4 j4 f" C5 ~ if (pItemElem)
r) D7 P1 ~4 a2 K { w9 U: G: B; T4 A+ y
if (IsUsingItem(pItemElem))
$ u9 G" D0 ?; P, E* ]8 d" v( A {+ i# N8 b4 T$ ?! d, l9 {
//这个位置无法放$ X& k. G7 I. D/ w
nDestPos++;, u4 m9 ~: B2 w. D5 `
}
# V) |$ n% g5 h- g }& L: {/ N' L7 R8 {, U
BYTE nSrc = pInvSort->GetItemSrc(i);
' _* Q7 o2 O R$ g$ B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w& E1 s! {9 \! i: z if (pItemElem)
$ M$ S5 B* l5 Y8 ~ z- B {
5 U* U$ H. e% R$ i- ~( g if (IsUsingItem(pItemElem))1 z- e$ ]: V7 Z% G5 S1 X
{- u" `6 m( c6 _$ w
//这个道具无法移动,跳过3 Z- E1 M3 R7 n) G& A5 D4 I
continue;
7 Q; R! b4 H! w ]4 r }
" P: S. [( G" m2 X }else{$ B" r. [+ B; y$ D6 Y& K! P9 h
//空位置 不用动- b+ J3 e( G- m$ @) W
continue;9 e; f2 P- h- Y5 V' ~ f# R- u2 e( A
}6 e v' C: l3 @) R* X3 j
//////////////////////////////////////////////////////////////////////////2 ~2 J4 P. M! q5 I% K, Y
//开始移动
& f* D c' J1 a if (nSrc == nDestPos)) U! i5 I0 e$ A O& ]) l
{- F8 |, q( R5 E
//原地不动- _9 }9 q1 |8 E0 L
nDestPos++;
8 D! ]+ G. S$ V4 @- z continue;
# y( Z6 _ M1 R, `: S/ V% O; p% U }
+ Z3 p$ U: c/ `* u pInvSort->MoveItem(i,nDestPos);
1 R2 k1 T4 {' i* X7 x) Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ W4 g# S* x/ ] Sleep(5);
1 d1 a. }- d5 ^. | //Error("移动 - %d->%d",nSrc,nDestPos);( |4 B: h; @2 e: K
nDestPos++;
- }0 @$ D0 B9 W }
- U4 R" S/ l2 @, V# b) f' L //取第一个元素的信息
3 f% W' X" [' c- P# ~# I' H /*
. \9 J V% f1 U8 n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 V) h, C- K7 [. j) T) ^3 k5 V& l1 B
{ e7 \2 i e3 V( E0 [1 C% W$ C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 ?9 S0 Z% F% F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% Q: j5 ^4 X" |
}" S9 |8 P$ M* i5 [6 n0 C
*/
+ q8 W, e1 `% y/ F //////////////////////////////////////////////////////////////////////////& |( r- D% X z( H/ Q% f* _2 C2 `* r+ ]
break;! |$ |0 R, G* C
}% x; L. {- [& Q* `1 b
}
~" |: S/ _1 B}
" Q7 X1 F7 X8 d4 T4 a% Y% M% m Z( Om_wndMenu.SetVisible(FALSE);2 f! G: N3 c. L1 B, D2 v
; k0 [3 G2 }/ D5 D9 ? \& B2 I
--------------------------------------------------------------------------------------------------------
: T1 M! `/ P0 {/ U+ p- e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 z" b9 m& S# C: ^( L{
1 z6 c* y2 v; i* W& ]* h: g1 bBaseMouseCursor();
# W1 ]" a- G8 E3 _+ y2 P}
2 [, k# P9 B- N) h在其下添加:
$ X. ?/ w3 X7 M( s% A9 cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ ]) ^# T5 v! N/ D% Z" c
{7 H0 A7 B w/ @4 y5 e9 n+ l9 b
m_wndMenu.DeleteAllMenu();" I6 }' a [3 f2 s1 K
m_wndMenu.CreateMenu(this);
! e* [) Q1 s3 E1 n. ]0 g* e$ z5 d: ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* D" L8 w! T! g
5 `4 C9 Q: y/ a, Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& j) G9 j' n! j* [3 n* D; H% c5 B{
9 H& E" b" t; ^: F: p //P以上级别才可以删除所有道具
% G0 }9 L+ D4 |0 G3 H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) s% R+ b$ D! t; l+ v}
! s6 g7 B6 |" Z( Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( N+ i/ h) D" Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 c4 U. M! ?$ a# F7 [m_wndMenu.SetFocus();/ F1 W3 d, K) R7 m5 G. M. P! ^
}
- P" R- R0 e7 d: S------------------------------------------------------------------------------------------------------------
% h' m; g2 C2 _# S/ d*************************6 d$ A3 e+ x5 B/ u2 X
WndField.h文件
) ]1 D& t& F/ y+ h& f*************************8 r, }9 i4 R+ B& |/ @
搜索:BOOL m_bReport;8 e/ D7 q, J9 i7 c* V+ S; v
其后添加:
5 M) }0 X3 @5 E! E' ?CWndMenu m_wndMenu;
% Y, T: O) D6 m [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ o& p$ W3 Z* o% p7 N
其后添加:
& F0 r& j$ L+ P9 k1 y+ A- xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 W$ |+ L& e: {5 w# ?+ T' d8 G8 K& I: |+ N: C! P: \
/ D6 p) Q2 h- e9 z1 d5 o9 v
|
|