|
|
源文件中_Interface文件夹下WndField.cpp文件! T2 D k" _" A/ q$ V4 ]* B' q) f: Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# b* t" o w1 z% I: p( a
0 g# r$ N; w- K9 ^/ _* [- i7 D% [struct sItem
; k6 G2 ?) u) w- c& h( G{+ P- X/ w; @; N4 Z1 [" C' D+ D
DWORD dwId;( E' b% x! ^6 ] q# U' a) D
DWORD dwKind2;! N6 n8 ]3 B! R' v- ?- x# \
DWORD dwItemId;
- U/ N9 E- P/ T8 z0 T8 BBYTE nIndex;" t( C) x+ x" K1 H0 ?9 s! P7 a! ^
sItem(){
$ }9 [" S! {4 P: ^5 B dwId = dwKind2 = dwItemId = nIndex = 0;
2 \$ i; U" Y; Z" a}* q! y+ _/ N# l* g# s/ y: n
bool operator < (const sItem p2)! {% P2 |& B+ h' m; ~& m8 @
{
9 Q/ Y6 d! @1 F7 e; C: X, L if (dwKind2 == p2.dwKind2)
4 i% z/ ~2 Z& ^ {
$ C1 \- ~2 E7 d* i return dwItemId < p2.dwItemId;$ R) K. ^( J( g" @
}else{. n6 G; b6 t# j& ]- v. o; \4 w
return dwKind2 < p2.dwKind2;% J* Z3 M' r& ]8 ~
}( A( A) @/ A% w
}
. a% T3 a C) \/ Z! j};, h5 s& T/ R5 V( \
class CInventorySort
% M5 x$ X1 t" @/ V" ?{! y- P3 f& S) P3 H& l5 `. ?, ]2 Q( g
public:
1 `, R! K3 _8 K+ H0 l$ _CInventorySort()4 \5 Q R3 l, ]
{
( D$ ~; {4 s4 t d m_dwPos = 0;
6 P" r) d2 U+ s, j! h}
5 Y; }% _' [; z2 K: f~CInventorySort(){}
( G! _+ z+ D4 e" {0 tprivate:
5 I6 e* t- {( X3 B% g$ X- jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 i% N8 e+ l% R/ [5 A* D% o4 f cDWORD m_dwPos;
8 N4 B5 y2 c& z% ]! }7 x2 spublic:# w" t7 X9 Q( S! X, p) k
void Add(BYTE nIndex)
% q" g2 ?* ^: W0 s& o" U{, V; @# ]; w! D* o, f, ?* S
if (m_dwPos >= MAX_INVENTORY)
7 f- ]8 @3 C* g9 a {
; m& J u$ j, S# N8 l0 \. g return;
9 j. y; P; ?' [/ g, V6 Q' X6 v }
6 C0 O# [! v' n0 E L+ C/ g m_Item[m_dwPos].nIndex = nIndex;- I' k+ t2 g7 ]; b- P. Q* E, A k
m_Item[m_dwPos].dwId = m_dwPos;1 K' G$ A1 k, Y/ d3 Z u" C; }
m_dwPos++;
9 W& |; ~" J g. F/ }3 Q; W}& [) I% s l2 W! G- f) b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 a; k5 M% W& z) J7 Z7 h; p{
" K- O, ^: ~ V& e3 }9 d! n/ U for (int i=0;i<MAX_INVENTORY;i++)
* x1 F! k0 j' J. K2 Z {
( e9 d9 I G( ]4 N4 f7 w if (m_Item.dwId == dwId)
) o5 r4 Y/ y1 t& O/ B: I {2 H9 s+ ~$ e, l
return m_Item.nIndex;7 X4 V5 u: s4 R* u+ ?8 \8 }& `
}
" t/ u6 w9 B* C& |* X. V3 T* r" ~$ ` }- z. V5 f) m+ |0 h
return 255;
+ \* N3 Q9 {# s, d4 R% [+ A}
0 j% D; ]# M, zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ B! O0 v% m) f7 ]) c{
0 L/ I5 f' b% }2 m/ R3 m: Q BYTE nTmp = 0;0 h: Z' I* o% ?0 g& ]
bool bDest = false,bSrc = false;
! V2 z8 o% d# Q8 c) u for (int i=0;i<MAX_INVENTORY;i++), k0 U k* \5 @* G
{
1 z: U4 m; ^, o: @1 a if (dwSrcId == m_Item.dwId)7 z6 G& }. R& k/ W+ t
{
8 n# }4 R% E1 f4 @4 r7 ~ //id相等 则 改变对应的dest和src# X) g; u. t0 |5 @0 ?
nTmp = m_Item.nIndex;
7 `! H$ ?( u7 x' D$ W m_Item.nIndex = dest;
3 c- d y# e2 ]. {8 N }
5 f7 {9 G+ ?# m8 g }+ W; t: K2 w& _5 R
//临时数据保存完毕,交换开始6 V% {6 E( a6 v/ X6 P, m
for (int i=0;i<MAX_INVENTORY;i++)' z7 `3 S% m, R9 f1 q9 L( l
{
+ W0 Z% s/ ]+ G: v& |; b5 ] if (dest == m_Item.nIndex)+ L% U9 w9 ^! Y3 O E" ?
{
8 s% v/ Y3 E( m- h$ g0 M //id相等 则 改变对应的dest和src4 G6 w5 C/ M& c9 l
m_Item.nIndex = nTmp;
. x: }# I! L' C! X2 Y* g. k2 k }
+ f7 a6 r) S8 R& u' O }. Z) x3 j: D8 ~6 a8 r( ~
}0 {! q4 C O* W3 D3 X# x
};$ n6 C/ O/ D: ^% l
-------------------------------------------------------------------------# A" O! D4 t+ B: @
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 z3 W; |; O; `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% ~) B3 I1 I2 x紧靠其上添加:; f; S+ v) R7 g
if( pWndBase == &m_wndMenu ) |3 T' {. ?9 `- u# Y; d6 T
{
$ a8 @* k* f w9 I# m switch( nID )
\' Z: Y. }5 o6 N6 M& t; q' P: x {
3 H; M* k6 C3 k; y, Y/ Z case 2:* w2 l* Q5 |/ O
{
$ r8 _. U: Z% E& I- B2 A; }; g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& Z6 X- l/ b) y" A
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( Q8 ^. l \- o( l) D
{3 D: E0 P; j* k
break; l& W: J0 H" q2 w( \5 w1 Y
}
+ @9 y! h% e" x+ ?( n: G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- h2 y8 E/ t, s& ` B {
! ?0 k+ V+ |/ T2 p1 ]; R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: F! Z% W4 q+ J if( !pItemElem )
) o% w/ X& b0 P6 X7 L" F ^ continue;
% e2 l2 g l. E( b( Z if(pItemElem->GetExtra() > 0)& j8 t" w I1 I4 s$ ~- V
continue;
% @& E- o! y! S: t1 P if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( R6 N" \) j9 N2 ] continue;
% n" M9 D! E% Q+ G! O' J if( g_pPlayer->IsUsing( pItemElem ) )7 ?3 N/ x) q9 T6 N% i& h
continue;
( E2 c! c- t) i9 ^; K; f4 U( K if( pItemElem->IsUndestructable() == TRUE )
- u4 @+ O$ N9 r" U9 B I. m7 j/ S: Z4 ? {+ u' q# f4 a& n, v
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# j$ y0 m) A9 y; |: N& Y continue;
8 c- _" H& \9 I }
. ^% f" o! |$ C# t9 `4 ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! `$ Q7 z( c4 I7 t5 w C+ G }
& b% ^0 Q" u: h: B$ B. |3 ` break;
. M% S. O+ j f8 R- l& N/ | }" f( |6 e( `4 `0 l. O t
case 1:
3 {# W. l* F6 d6 W5 T7 q {
2 T% L/ H+ H1 u% Z* m. E- k //整理背包7 G+ b+ [* a% A, g, h; W) h
//////////////////////////////////////////////////////////////////////////
3 o! i+ L- y3 Z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 V% v' h; B4 }' m //////////////////////////////////////////////////////////////////////////- A2 J, g0 k2 L* B2 c6 |
//////////////////////////////////////////////////////////////////////////$ s' B% V) T* K: O$ ]
CInventorySort* pInvSort = new CInventorySort;6 E8 \ j7 Y* c7 S. t
vector <sItem> vItem;" E8 C3 e) z; [$ N- d& y
vItem.resize(MAX_INVENTORY);//初始化大小5 P/ n) ~, _# B% s& m$ ~0 z
//////////////////////////////////////////////////////////////////////////; ~. w8 z6 _6 I Y- P, |, n
//填充数据
3 V) }/ y u0 D _ for (int i=0;i<MAX_INVENTORY;i++)) t. O! d a, x1 k
{# j5 y3 u8 I- v4 E! y5 C0 v8 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 [* E, G9 P. @7 ?
if (!pItemElem)
, y( }. o$ P9 t2 f w) _3 }, R {8 a( B7 ], `5 l% o6 j" ]
vItem.dwKind2 = 0xffffffff;
1 y" h4 ^- l/ k5 k vItem.dwItemId = 0xffffffff;( F0 J' S6 l: c8 a& h
vItem.nIndex = i;
+ \. |# o) ?4 G) z }else {% N4 Q9 R1 e& N9 V7 _4 C5 {
ItemProp* pProp = pItemElem->GetProp();+ O7 d. S+ A5 T4 ^, v
vItem.dwKind2 = pProp->dwItemKind2;/ R w: l" Y1 w. `+ F( n. \# N z9 b
vItem.dwItemId = pItemElem->m_dwItemId;
; \: h4 z& \5 q% d6 O vItem.nIndex = i;
8 E: N4 ^* Y, L; w. ~5 u }6 b) _& [; ?# b h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% }: g) \% @5 @5 z% s7 S# b
}
4 r2 g3 l' T) H$ j, \( A //////////////////////////////////////////////////////////////////////////
* K! i# ]; O" q' b1 h6 i sort(vItem.begin(),vItem.end());//排序
" Z d& I3 X# I$ Z" y //////////////////////////////////////////////////////////////////////////
6 L8 w0 x/ A. Q, k4 C5 \- D //交换1 n8 b% Y9 ?2 j, c. h# ?
for (size_t i=0;i<vItem.size();i++)
{7 j/ {# {; p {# E$ m; p5 }$ | p2 a# Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 Z8 a' V+ b! a; q* y- {
pInvSort->Add(vItem.nIndex);
' ]% E1 u- ^: r/ }! {: F: y* v }2 D. f, }1 F" U# m
BYTE nDestPos = 0;
! ]7 w9 B# y6 D$ r/ G for (int i=0;i<MAX_INVENTORY;i++)
- S/ G" Y0 c8 ?. [, w {
5 L& t. W/ l: ^: p; l( d9 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& L' v) m* Z8 M& o% G3 V, w if (pItemElem)
# |4 E Q- H" t* n4 B& t) n {
# U8 w( r+ C7 l* C5 W7 v& k if (IsUsingItem(pItemElem))
+ T! ~7 e7 U) u" e% t {
3 @, u) k1 ?# [% j5 p //这个位置无法放$ x* F5 T" E* ^
nDestPos++;
/ o2 h4 W. `8 w% y5 D/ ^+ v }8 m+ ~& m$ ^( n$ r+ @. Z
}
6 ^( E$ K9 P4 b# r/ N BYTE nSrc = pInvSort->GetItemSrc(i);
2 g* P% K2 e; m- D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 N k8 G: B& n }( Q1 V0 s! T
if (pItemElem)9 B: \; H! A! t: e; M* ]/ g
{/ O/ h- b, `" f$ ?) R
if (IsUsingItem(pItemElem))' A) `0 L5 S. G
{' ^; J8 B9 P9 e" l
//这个道具无法移动,跳过
. M& I" v' |, Y. M- b; A continue;
9 v1 w( W0 M: Q% Z0 L' R9 B8 r }
# p! {4 M2 P- {9 n7 g' n/ w; M }else{
, O2 ]7 k7 Q* g3 g( Z4 ~ //空位置 不用动
# c) }! r9 b: C7 Y9 D continue;2 _; w: o$ ^9 h. e! Q3 d+ t+ [: w8 ~
}
% \+ T, Z, }0 k$ h3 W4 E! I //////////////////////////////////////////////////////////////////////////9 `& g& ~& U |2 i( Z# S. r. y. e
//开始移动
+ G) w- {2 c2 t, N% [" N, t& w9 H if (nSrc == nDestPos)
: Q l$ d: z: T# u8 q/ h; C _( T {* _) D7 h0 M- i
//原地不动
N u \$ ^$ K' t1 d5 j nDestPos++;; o. F& Y' Z6 Z1 U7 a$ P ~3 u
continue;
3 k- s5 w6 o. h$ g9 i( k8 R. S1 I F }
$ }6 ]( ^" T: T* C8 b pInvSort->MoveItem(i,nDestPos);
" }) C* f4 ` Y' k% I. G: D* _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 K: M7 m8 v- W+ {
Sleep(5);8 u8 N$ ^% @) L* Z7 v4 i2 n* r$ G
//Error("移动 - %d->%d",nSrc,nDestPos);
. G2 U. | U$ v1 j M- } nDestPos++;
; R; O m) Y ~8 o/ ~6 U }' J# F" }6 w; ~3 B
//取第一个元素的信息
% u- {5 ]0 H [: S5 R( Q /*; ~, G( P% r$ |
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); M/ W) D2 i( u& F* q' X; g
{ I+ j$ g* j% Y. s' h6 n
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 m8 ]/ A0 r5 V1 ^) |7 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 e7 b( k2 w9 b3 A" k; Z. \ }% c9 d5 [0 g# c3 D0 F
*/
7 g; y% ~7 s$ F b- y. y) Y8 P //////////////////////////////////////////////////////////////////////////
# P3 q# T2 z S% ^" X break;) e, h9 S' ]2 E( Y
}$ x8 b) @. `0 c9 y
}
) J9 d" O1 Q' _ j}* I- _, y% w; Z$ z- f0 B
m_wndMenu.SetVisible(FALSE);$ M1 H% n' a" `2 ?" G1 g
) h k) h& u: a6 D3 R) }8 s" u
--------------------------------------------------------------------------------------------------------* H$ V6 f9 B8 S5 I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 I" C- F; h E; a6 R3 f
{7 r5 R% m0 H# ^& S% l+ |% m
BaseMouseCursor();
9 V% }& T6 p. q2 f* m# D0 A}
4 | N! u& X8 r5 I% x在其下添加:0 o$ r# `/ l- `4 S- _$ s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ S4 S: B* G7 y" A$ y7 J. L{
0 _$ I# C5 S# Z! c {5 Fm_wndMenu.DeleteAllMenu();8 X" [+ p L; s4 g3 Y2 ]& A# [
m_wndMenu.CreateMenu(this);
: d6 k2 W1 w/ n! k# Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 m" a; S( z, W- `( q- D: }
8 N! A8 @2 Q3 |. cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ |% A1 |$ I( F3 u{# n" Y/ F# y& j2 q$ R& a* j
//P以上级别才可以删除所有道具. X& Q% S8 a. ~1 ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ q0 Q8 r) w* t+ Z8 n- u! H}# f0 V2 t( h0 O2 n W& l6 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ N# `! V; s" F9 R. H. i! z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 S8 c" A0 k: l2 Bm_wndMenu.SetFocus();% V6 T" ]3 M1 L ]7 V
}
1 s- g. @" g( e1 u------------------------------------------------------------------------------------------------------------6 m9 I r7 m4 G& v0 X8 k& Z
*************************) S/ ^6 H4 E: y
WndField.h文件
5 Q9 P7 B9 B7 F0 Q8 K" I# X" g# P5 V*************************
! @9 F" b. m3 f+ m; F0 \- r) k' Q' J搜索:BOOL m_bReport;
& R6 X' }8 S* I1 k/ B9 k其后添加:
( K% N1 w; l; `" R1 M# sCWndMenu m_wndMenu;) P3 e. N1 ?, B% L! [
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; L3 [2 W, B2 y$ A1 I9 `" ?6 R
其后添加:1 l, g( \1 }; q4 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 M4 i7 z, N( q/ Z( H5 g2 e" @4 @
7 u' w7 _$ X- _; j( {% F2 E
0 ^% Q) D0 i; X* z |
|