|
|
源文件中_Interface文件夹下WndField.cpp文件) W; B' {/ y# o9 Z$ |' e0 {- g9 z- t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ }6 ?* u Z# D" w
) w9 c! K) @$ t# K! Z0 ]struct sItem: R" X4 Z F N
{
# A; F; Q& |2 X! g, q9 t! a2 v: i- zDWORD dwId;
1 j0 r$ }( [* HDWORD dwKind2;6 c8 Q g/ N0 l1 l% t$ v
DWORD dwItemId;
+ I8 F, ^2 c5 ^6 o; v) uBYTE nIndex;* B% M: O3 g2 c& O
sItem(){
' `$ G/ |1 e! N: a, Z) S dwId = dwKind2 = dwItemId = nIndex = 0;
6 f6 q6 m8 ]% U% G& J7 r( F}! M. M4 l' A& d: @
bool operator < (const sItem p2)$ L: Z0 u& L. r' ]+ Y# K& ` q- _
{
" r7 `; ?/ a2 r+ M) |4 E if (dwKind2 == p2.dwKind2)
" y; p; Z* F1 G( l. n2 i {1 d8 N: M6 K0 a
return dwItemId < p2.dwItemId;
f1 c: V& J; b+ S8 M' Y' v1 C _( C }else{/ U" C! t8 ~0 b. s+ v% M
return dwKind2 < p2.dwKind2;
! ^7 z5 l. T) K/ ^. S" `, s }
+ n9 Z8 n* E4 s}: Q( c' V c4 q j. S) N
};
5 O3 l, q- z2 K" `8 kclass CInventorySort
) X% w' M; I( l _{& N# N- t8 f- }" b# N2 H" e, Z H
public:$ `! M: X! m5 O# }, [
CInventorySort(): R& H2 K& g: m
{
! Z0 Q% |6 e8 o( x- i1 ?4 U5 Z9 F- d$ ^ m_dwPos = 0;
0 O* e2 n/ f5 Z% o7 P5 J+ x2 `5 X4 ]}
; V9 |4 o5 V; G1 |~CInventorySort(){}
$ E- v: p. A7 ` y. wprivate:, n6 X" `- V. z2 X% V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, b9 s6 `, f% @( \) ADWORD m_dwPos;% a( `- ?- L* U. Z: e$ C8 F8 c
public:
8 P. k; j( ^& svoid Add(BYTE nIndex)
0 u- O7 M4 \( N r{
- t+ \# h) t. t$ R) [ if (m_dwPos >= MAX_INVENTORY)- N* d: w9 Q0 K4 u% O
{4 X1 i& V0 j0 ?% M" |. N
return;
& } w3 J, ^' [ }$ a% Z4 P; e" `6 C
m_Item[m_dwPos].nIndex = nIndex;
3 e, u4 d1 d% e5 z0 h% l m_Item[m_dwPos].dwId = m_dwPos;+ v, ^; k- q3 N: c! S6 V/ |. D
m_dwPos++;* @5 U/ M. l8 ~) F9 m6 W; w. j
}
8 X2 D3 R6 a; g9 I5 x8 u& g$ A5 |: TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 Z7 } J! j+ C: D& v
{
4 ^; D! o2 W% {0 A# D& u for (int i=0;i<MAX_INVENTORY;i++)
& Q% E3 ?1 ^4 l: b; k# @9 h4 a" Z {
1 \% j- J! l. `( ?, V7 b6 m) K if (m_Item.dwId == dwId)1 h8 E. C. `% ~9 p) u5 W( T. L( z% h
{2 z2 A! M2 b# |/ [
return m_Item.nIndex;% k# I0 P6 Z2 |" x* J2 e& J1 V
}
3 i* T3 _1 W) A- y& V& C3 b }
0 ? J" R! K4 j( J0 C1 N1 C+ Y2 f; g- Z return 255;
* B6 j# B3 s& f6 L B' S}1 V) b) V/ z( }- o0 _9 I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 `5 R# e, |6 q, C4 z& \/ O# r' A{
# S$ N% j7 |6 C1 y' a BYTE nTmp = 0;
4 }: [0 \) ~. }0 m0 s5 v bool bDest = false,bSrc = false;$ a( e* r& r ]0 v+ h
for (int i=0;i<MAX_INVENTORY;i++), x" v* U1 T! i2 m% @" X
{' z X" a0 \0 T
if (dwSrcId == m_Item.dwId)9 O( t; h1 M. V9 t6 k* |
{
0 y5 l1 ]4 ^" D- I/ \' h //id相等 则 改变对应的dest和src
3 _' r9 h2 ], m5 q [) C4 \ nTmp = m_Item.nIndex;
2 Y8 T) @0 X& u: t7 ?' \ m_Item.nIndex = dest;" S, x$ q7 i7 j# o$ G
}
3 ^+ q+ F- F( f* L }
" m; l2 O T/ O //临时数据保存完毕,交换开始
! T% A3 M( D6 X/ i3 Q8 _ for (int i=0;i<MAX_INVENTORY;i++)7 C) c3 z6 r1 y: _$ n1 L
{; k9 Z& V$ Y0 ^& |
if (dest == m_Item.nIndex)
+ n2 w! y# d0 a7 U {
: }6 Y [6 C9 p! _7 ~2 T& |) [ //id相等 则 改变对应的dest和src
9 O4 x" C3 L) I) H$ q* H m_Item.nIndex = nTmp;
! Z3 X/ ^' e0 n7 E( q; p+ D" Z2 j }
. T, @+ p. D- L4 z, L; e: v }
. K3 U4 a: A' h$ H9 b}+ c0 ~) X) a# F
};" l! ` P3 {7 G; T$ @1 }
-------------------------------------------------------------------------0 b3 H; C5 d) V/ {! m, K
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 B) K4 w& W, q0 ]( c2 q' c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- |/ X' |( x) i9 M( n2 j紧靠其上添加:) N f& _- ]# u0 p* U
if( pWndBase == &m_wndMenu )6 G J+ T o, E) j$ P! }
{
7 [" \: O! V$ m switch( nID )! }! @: I2 z$ L& j& Y' t' m
{
* J4 e8 U N7 ]+ V case 2:
. U- e! i- Z9 Q' N {
4 S, }* O/ [7 t' N! ^+ Y8 T //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. Y) U: c5 }/ @7 C8 f- G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 o- e8 X- F% k* V
{. J7 d4 N j. \6 {% H
break;
6 Y5 _ Q6 X8 B }
) o- y3 f- G7 Q: V( R9 ~8 ~ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), o: K& G; ~& L( {6 L
{
4 L# [; ?& a2 a. @& S" w9 }6 U5 I% K6 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 X+ ^$ @6 j) `5 S# `% r if( !pItemElem )1 }" A5 f+ U( Q! f0 `, O+ }
continue;+ `$ c1 x/ _0 A B; L" ~% R
if(pItemElem->GetExtra() > 0)
- K) U1 L6 `* G y continue;
: m; c/ X! H) u' C2 |7 X6 s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ {7 R6 V7 U) H' r, ~6 j continue;
5 s4 R4 c& W% b& d if( g_pPlayer->IsUsing( pItemElem ) )
; L+ I+ g0 @8 K5 q continue;; y$ x7 q+ a) s% j
if( pItemElem->IsUndestructable() == TRUE )
S8 l9 i1 X* v& W/ X3 T {7 l, t9 r6 W) [7 r4 ^5 A3 w1 {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 f% k2 N- \% o. I* s ^ continue;- I+ @5 I2 y" ?5 T
}# P" T9 G6 U# |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! L& c8 H2 u" K7 L, t }
2 D6 D: S* x4 O9 a. h K break;7 \& Q4 z2 N' N
}
( z6 G' C% J$ b) W( f4 \" y; } case 1:
+ u* q/ R( ^& B9 X% g* @ {# G* ?/ I; V/ g' f' P
//整理背包% D1 S& V0 x, M
//////////////////////////////////////////////////////////////////////////* e7 M0 n9 M4 ~( O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: p5 A/ f* }; ~" E! U+ x
//////////////////////////////////////////////////////////////////////////
3 h$ D1 s/ S; R0 n' i' z% c( b4 v7 i //////////////////////////////////////////////////////////////////////////
" E. o& ]: M- @7 @. x# y1 N: a CInventorySort* pInvSort = new CInventorySort;
) U' ^ W0 r9 Z6 f vector <sItem> vItem;) F' [8 p ~8 H% j. x* ?
vItem.resize(MAX_INVENTORY);//初始化大小
3 e, `4 y6 @; L, Z$ a# v //////////////////////////////////////////////////////////////////////////# l2 R$ B! }9 X( q3 m z3 i5 l
//填充数据! Q, ^& P3 R/ Q& T# L3 S' T
for (int i=0;i<MAX_INVENTORY;i++)
( l2 q, m1 `& k9 |+ c% r, c' m% L0 M {
* c# k+ l2 G; I' H* l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 v2 g1 U' c' }$ g) P8 h if (!pItemElem)
: N _) S8 N% _; L {
: M; ]) y4 z3 T5 `! e) m% [3 I vItem.dwKind2 = 0xffffffff;
3 E. G/ `/ ?! L4 r/ X; y vItem.dwItemId = 0xffffffff;. O1 B1 z) m3 N0 t4 N( ~
vItem.nIndex = i;
2 ]7 f# g2 r8 l3 n7 M$ f }else {
$ v: z. v5 h% h6 _0 v ItemProp* pProp = pItemElem->GetProp();
: }6 M4 P: C/ l7 x# h+ ] vItem.dwKind2 = pProp->dwItemKind2;
% E9 l) m& Q; h vItem.dwItemId = pItemElem->m_dwItemId;
% h9 D' j% _& F$ k vItem.nIndex = i;
) B+ \5 j7 d) W }
6 U! r% G `' G/ G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 M8 J/ d; s5 A( E N. l x
}
* x' r5 ~. c i //////////////////////////////////////////////////////////////////////////. u; x4 G% c- m v) {
sort(vItem.begin(),vItem.end());//排序
' J# e4 Y& O E6 C% { //////////////////////////////////////////////////////////////////////////
8 r7 r" V) A2 I/ O. C //交换
. z3 A+ i0 A: G; |9 N* s/ U& ] for (size_t i=0;i<vItem.size();i++)
6 ^. k0 }- D' _5 a# G) p& K {" U$ F) T# J- q( s. c, P6 k6 i% y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ B$ `# N0 u' o9 [- P3 `! p
pInvSort->Add(vItem.nIndex);
X7 s5 }+ m# z. i% N! R }. t) \! u& D, r! I* t+ Z! a
BYTE nDestPos = 0;5 v' k% v! J: S1 ?* ] e# V7 a
for (int i=0;i<MAX_INVENTORY;i++)" |2 v& K7 w, A/ T1 ?
{
/ a6 J- r- @" X! r0 k0 ~" T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 s+ S" U) W3 f( ]0 r3 i
if (pItemElem)% }& ]5 Y# q+ _) P* T8 y
{# w' }4 F. v8 L9 w8 Y& m
if (IsUsingItem(pItemElem)) P( Z4 @$ W$ B% ~# T2 \% g0 g' T
{
' L, N7 ^$ G$ J0 h //这个位置无法放! M! e0 P5 ]" T
nDestPos++;
2 O8 t8 }0 {! G8 a5 {0 J, ? }- X9 X/ a, U* l8 ]+ I# R- K; Z5 J! ]
}% K' u0 |, H8 B) d4 R3 u0 U
BYTE nSrc = pInvSort->GetItemSrc(i);' F7 B: m+ x7 l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 b- v: j" U8 T# @" w; N8 I
if (pItemElem)5 K M# v8 n/ Z9 p- E6 g: G% X
{
& [. I6 o6 F) u- Q( |' y3 b if (IsUsingItem(pItemElem))/ E% _) Z, G) d# }
{3 K) O" F/ |) {& z& E# x
//这个道具无法移动,跳过4 g" a/ I' k& E; |- |8 I& F) D
continue;
( e& f& u8 b3 H }
- E8 ?, v' U5 E5 i }else{% d r f% F0 t" ?! I' y& x f
//空位置 不用动( C2 Z2 P2 w' U; g# @& |
continue;
8 w* p2 J! M3 ]2 X% m5 | }: q. _- m; F8 A/ n8 c- n. ~( E' _
//////////////////////////////////////////////////////////////////////////+ E4 \! l; d4 K2 B' }
//开始移动
1 ~* A+ D7 ?+ D6 L! T( b+ c( B if (nSrc == nDestPos)% E+ a7 ?* o2 @* c: e
{
: L% c- p! V' d& Z+ C //原地不动
& `5 e5 B6 k8 {# F7 w2 {- h# h nDestPos++; r K+ g( i' y
continue;
( @$ D$ d0 M* `# j }
7 [( t$ O4 D" i1 H2 G' G3 [ pInvSort->MoveItem(i,nDestPos);* ?& v7 j# W- |! B% ^4 b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& R& q4 N# Z) L% O; t5 ?( l9 o
Sleep(5);
% h7 [" A1 y2 `& I; V- H% F //Error("移动 - %d->%d",nSrc,nDestPos);2 u6 Y$ F# G7 J/ z- P
nDestPos++;
9 i' m7 t5 m, \4 O$ e }
+ Q" O7 L q4 i$ L# h9 |9 E3 M! i2 x //取第一个元素的信息
3 X# @2 K' l6 [( a2 ]" M& o! V9 J /*3 ]1 S: R) [2 s6 Y8 w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' p0 _+ c! q! L9 k
{
6 G; R& d- s& V! i! t; d+ g2 [" D Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) h4 Y) [4 n: Q, \5 p) {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 `8 y ]/ E G
}
# S+ I! N, r! V7 v */8 R0 t9 J& w! N7 }0 r E% O
//////////////////////////////////////////////////////////////////////////5 ~. N$ M0 v$ S' x8 }6 x# u" G
break;
8 d' Q" ^: P- `6 n# ^ }( z/ G/ y- r* O7 r/ }5 ~7 V& p
} 8 D; C: o' M- h- s# E! H. _0 L
}
" P0 V3 _% ~( S& M3 J0 }m_wndMenu.SetVisible(FALSE);
" i& M+ \* @; v3 l; H4 Q, j6 g+ H2 s/ B% w3 D
--------------------------------------------------------------------------------------------------------
% d% c0 N( a0 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 P- {. w; P1 |{( F" e9 F; ?# G1 c! x
BaseMouseCursor();
) ~! U* L- r" N! ~}' e5 b" D7 t( W3 O4 C
在其下添加:
6 F' q4 \- S3 ~; Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% X) F% f4 q8 \& p( U2 B
{
% }! A- j/ I+ f. w4 Y9 Hm_wndMenu.DeleteAllMenu();, q' t: E: y, H( L
m_wndMenu.CreateMenu(this);
: f( T/ S6 a6 l8 a' X" z# Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* v' [8 @6 G$ D5 {6 ^$ \8 ]
7 P' _* O6 b% ^5 Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# h9 F* |- Q" N) }/ s* a
{
3 f2 ]. _) m w1 @ //P以上级别才可以删除所有道具
- B9 h( y2 ]! ? k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. o5 ?1 d2 }9 G t1 Z1 P}6 |& J. I% A( [! K4 Z6 `/ h9 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, u5 |+ R& Y; U' T! J6 ^m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; @% f) @6 i' v5 n+ A* u
m_wndMenu.SetFocus();5 o8 S6 {3 ?* q7 ?* ~. p
}
+ b3 Z$ t4 a/ i" [# u------------------------------------------------------------------------------------------------------------ `( u% l/ d. `
*************************
9 p4 z9 I0 g8 C A0 kWndField.h文件- u% c1 u+ o U
*************************7 ]6 G1 y7 t( t% L9 L8 K
搜索:BOOL m_bReport;; {" G# F6 [& }
其后添加:
, Z6 d: i' q! G9 bCWndMenu m_wndMenu;
# d0 Q. F$ r" u# E2 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 q: a. e" u4 i! W, z+ \
其后添加:- v, \/ c, h# z. o6 u
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 P, g& r/ u# R- U1 f! j" K
7 p& M# U' b+ b1 u
0 e: x ~, ~* Q
|
|