|
|
源文件中_Interface文件夹下WndField.cpp文件1 `& F: s5 a/ q% ^2 ?: d3 a/ ~9 w& H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( M1 a: Q( A" d) s9 x
! ?6 p0 o: [. Z0 X+ qstruct sItem
4 L4 Z# |+ B/ a# `+ q- [9 ]{0 t) Q- @, q' X& R, Y9 h1 s
DWORD dwId;
% g, }* s" I0 r7 r1 bDWORD dwKind2;4 ?/ X- @- ~4 g2 z
DWORD dwItemId;. r _4 }, b' j7 w* M
BYTE nIndex;
4 z8 ?/ [) n* A$ `( }9 `sItem(){4 a- ^0 y, j) H+ e' \6 d
dwId = dwKind2 = dwItemId = nIndex = 0;
7 Y; Q' o+ V. O4 `! }/ U}4 V% g) w8 c/ e# Y+ o
bool operator < (const sItem p2). I3 j+ r q8 M5 p4 S7 \* d/ M
{
+ E8 Z' d& t, g) t if (dwKind2 == p2.dwKind2)+ x3 g/ A6 ~6 W3 K3 T$ o
{
! g- p8 c2 M1 m6 f return dwItemId < p2.dwItemId;( D; A0 U* O3 w6 P
}else{
6 q2 K B+ t2 ]7 `& p return dwKind2 < p2.dwKind2;7 q# u% @5 U2 J' F* d+ r/ w
}
7 O* e2 \ U: J. W& U& q! [}
( W5 C a( K1 z: l( x};. }" u7 ]0 ?7 E! N' W
class CInventorySort
8 y2 s0 p2 p& I* k9 M( }{7 u# ~! F2 I+ V
public:
5 b) T- ?3 j( w4 E1 u- m$ dCInventorySort()
5 c- e& a5 g7 ]# j- ^7 P* K{
F+ U$ L# f8 G7 @: E m_dwPos = 0;
6 F. ]& _1 o& h8 ?: A8 C$ l7 ~}
, A; ^& k( p; u* U~CInventorySort(){}6 M9 `$ W3 D k) S I+ Z( s
private:
5 s3 W" e, z: UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ K/ z& G- n4 R- y
DWORD m_dwPos;
" I/ s: Z* r) c5 t) ?. Tpublic:
b- p6 b: D% Z4 N, ivoid Add(BYTE nIndex)! I5 }0 {4 x! u! ~+ b4 A
{+ X) a3 [: S% b& F
if (m_dwPos >= MAX_INVENTORY)) g0 J9 T* i2 a) @2 j
{! E9 P( U$ F; Q7 l: J
return;
: Y5 L) |8 j0 ?' W/ |9 a( w. D/ N6 F }
/ o# g; R) `) V0 c5 F F m_Item[m_dwPos].nIndex = nIndex;
3 m# r6 |4 |/ w. t( Z/ t8 w. Z m_Item[m_dwPos].dwId = m_dwPos;
! P9 {7 L, b+ \2 _: k! w' z. e m_dwPos++;
4 _, z8 s+ i8 F2 `& A; `0 g}
b5 N4 T* G A" i! V! mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 {' ~0 G- a1 X
{) ]0 v' `- A3 c) [9 @& v& n
for (int i=0;i<MAX_INVENTORY;i++)% g) G9 d+ `1 h" n ^# m k7 c
{8 R" A& e$ K" k
if (m_Item.dwId == dwId), @* M5 x6 X. e5 v; H9 ~+ f
{
1 }( i( j. Z! G. E9 o" P2 y) X9 b1 q$ U return m_Item.nIndex;
, I; T) m$ Z5 K }/ b! q7 p+ j8 }& A; F" Q7 k8 s
}
- i: R: J& n. I return 255;. Q5 \" L- @8 _( A8 s
}
& Q, H8 x. d0 D* f( V& Q: j6 Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 d8 k5 M0 Q; B' b
{
, a! M, h2 E9 h8 `. I1 i4 e BYTE nTmp = 0;2 ~3 [8 F4 O" S* L
bool bDest = false,bSrc = false;
! d8 V6 \6 E6 Z2 C for (int i=0;i<MAX_INVENTORY;i++)- \( X, Z; G" j7 o7 B2 Q( l5 [
{3 E. S3 e3 ?7 i$ y, E' d c
if (dwSrcId == m_Item.dwId)
" e w8 K$ X0 u4 L/ g9 f9 a. B3 Y {' [ _- s8 o$ A
//id相等 则 改变对应的dest和src9 ]: m" O1 K x7 x0 N- h) N
nTmp = m_Item.nIndex;2 Q9 _5 B1 |( q* \* l. ^
m_Item.nIndex = dest;! d9 l9 r% w% r1 ^9 s3 ?
}) [% L' i3 ?+ |; g
}
" d3 H( m' y, R //临时数据保存完毕,交换开始2 a* j. O+ g! y6 x: [& y9 }
for (int i=0;i<MAX_INVENTORY;i++)
& W! r- H4 O5 a! g/ Q3 l& c {: X3 E$ C1 V1 W3 J% {, V% X
if (dest == m_Item.nIndex)' q3 [9 O: r7 {! F% f& q+ O* d9 A
{
1 G: T' g; ` Z& `+ ^ ? //id相等 则 改变对应的dest和src: L$ c4 p. w9 k W% h% ~, ?
m_Item.nIndex = nTmp;' M* e @+ f1 r0 c7 Z
}
7 x8 E7 v* o; Y, m, u }
. p0 S+ C/ K1 r5 Q& T}& E* R* `( ^/ k
};
0 }8 |& h# d9 y# M-------------------------------------------------------------------------
) x6 @8 H$ y; x9 J6 X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 o* Q5 o6 y8 z$ l8 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 [- h& g7 V# r+ `: p/ B$ M
紧靠其上添加:
, [7 }" G# \6 g8 M0 h& k+ vif( pWndBase == &m_wndMenu )- `4 n; _; q! ~1 }
{4 H0 U2 \; ~ D8 `. N
switch( nID )
4 N: D, M, h9 d2 N7 I2 H& R {
9 h% O9 o' ]% O1 [ case 2:" n3 d" @; \2 r4 u- H
{
, u4 a2 K% @8 k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) `, A% Q3 H# N; n. C1 [; @! c+ M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! O/ \7 G9 n8 L7 H3 L, x
{5 S/ b9 }: ~( U4 U8 h
break;
% ]& q6 E1 J' N( s, ] }7 Y3 g( `9 e( p3 M/ @
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) O# ]. @$ V& t* X& s: H! l {7 w3 q; r4 h& g8 r/ y0 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ W5 z& B6 H6 ` l1 ~# l if( !pItemElem )6 h2 C9 ~2 T$ ]; l/ L3 x
continue;7 T' T! r V; r2 B, M6 N9 _
if(pItemElem->GetExtra() > 0)4 N% {: C. }% p8 O; m7 B' Y1 f
continue;, e2 C# q$ X6 J* W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 N1 O( x: V6 b
continue;7 z9 m0 j P# p K! k- g2 I4 g3 U$ X
if( g_pPlayer->IsUsing( pItemElem ) )6 a/ u: v, @ n) @, u
continue;
2 E; c! Y. |) x: a ^. O if( pItemElem->IsUndestructable() == TRUE )
; p7 D2 F4 X. h( J, I9 `+ l {% n8 R* e* V$ u' a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" l+ t4 f( L) I+ E4 z
continue;
* q$ }5 F* Q5 \' t }2 y0 |" P9 `2 N E, F/ S0 U
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 @) `/ d, g. I! l" h, T9 u
} z2 ]6 D) Q' G7 a, K
break;( o2 s- J4 s* j% J( x% q
}$ Z3 N( ]% x3 t$ k
case 1:& B9 r) W& k3 b; a
{
4 [1 G, M- m( |- `6 G# ]7 X2 }2 \ //整理背包
6 z/ ?$ B8 |- ^# P) p- E //////////////////////////////////////////////////////////////////////////2 Q( C0 J: W/ \, O P- _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: _; E* B# S7 E7 |: |
//////////////////////////////////////////////////////////////////////////! w* _# Q. y$ k3 D2 V* O
//////////////////////////////////////////////////////////////////////////
# X! D3 O4 y. G B) W( N CInventorySort* pInvSort = new CInventorySort;( X4 j8 b* R& t! b
vector <sItem> vItem;
! B3 c5 s: ` D# a5 d& {$ P vItem.resize(MAX_INVENTORY);//初始化大小
0 \( H( z# Z$ n) q. x //////////////////////////////////////////////////////////////////////////
$ w0 X9 d) U# N9 S( E) o2 }3 h //填充数据$ z+ Z0 d( I* j
for (int i=0;i<MAX_INVENTORY;i++)
9 D5 z( G3 c6 T, ~2 q1 g$ Q* R {" X6 A6 J% n- h7 a, Q% X: J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 |$ s! w5 W& n9 `* g
if (!pItemElem)
. I/ v% w' H7 H) H1 p {
" v# s8 @4 v m G/ J7 J& ` vItem.dwKind2 = 0xffffffff;3 P+ }1 P: C' j' T p. L( y7 V: K" }
vItem.dwItemId = 0xffffffff;
) @5 w0 i4 V$ ] vItem.nIndex = i;$ g8 R8 o" S0 X+ C! Y
}else {. z0 w1 k. x4 c% e+ ?
ItemProp* pProp = pItemElem->GetProp(); }1 O* ^* J' d# T& @" ~
vItem.dwKind2 = pProp->dwItemKind2;
7 e4 x* {2 Z1 g. f% d vItem.dwItemId = pItemElem->m_dwItemId;
7 {) D3 P! j1 |7 {' E3 Z+ }( \; Q vItem.nIndex = i;& Y/ N0 `: K5 G- G
}4 ?8 |" O$ G& f) V) N: d7 r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' Z' X9 F! Y) r& d- l }
9 q3 x. E; C3 z //////////////////////////////////////////////////////////////////////////
$ G9 S! m# }0 J% f2 d% X sort(vItem.begin(),vItem.end());//排序
% q& N% l) }2 U2 u //////////////////////////////////////////////////////////////////////////2 ]. V3 t* P4 ?8 H$ W! n
//交换% d0 I, k" s* L& d5 v4 w7 Y3 K3 }
for (size_t i=0;i<vItem.size();i++)
! h% w# s# |% }$ d$ y {
0 R& Y: I3 O# i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 g) C+ b P3 E5 a; Y) B w: B
pInvSort->Add(vItem.nIndex);+ _+ R8 Z! i3 m4 g" k
}% [3 T' H, Y& q& v. q0 Z' v
BYTE nDestPos = 0;
0 C4 v- e% H4 Z7 P for (int i=0;i<MAX_INVENTORY;i++): y% G* s& t. [1 {3 B. @1 F( I; D
{
+ |! ]" o4 o0 I# S& \$ j' d CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 x3 M" @% f2 Q5 X- M if (pItemElem)
# I/ p. ^& x8 |4 I3 n$ B {
2 P( {9 O" w8 t2 {1 R% \8 j- s if (IsUsingItem(pItemElem))5 G- ~) ^( q) a# X' ?. a7 J
{" _4 ?6 P: g7 Z
//这个位置无法放
% ^5 Z) t6 _! L) K* K0 N nDestPos++;
& h. n* E3 {$ T+ \6 d }( L$ R" g0 y8 J3 Q- f* Q
}( ]( v2 }1 [" T# `* Y
BYTE nSrc = pInvSort->GetItemSrc(i);
. \7 \0 ^% W1 A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ W, l: W' E C1 p2 l* H5 ^8 T
if (pItemElem)
: B& d, H: M) V5 _0 t {
) D: u6 s8 O) n5 E9 b if (IsUsingItem(pItemElem))
8 Y6 }7 }. C' Q {2 b: c: i( {/ x9 J
//这个道具无法移动,跳过
8 ~/ D& r8 n/ q2 x3 i continue;+ ^3 I" s. U7 a2 L
}" t1 a! X) u- ]& B: O5 u
}else{( ~1 \+ T# l' ~% n9 C, b$ J
//空位置 不用动7 t+ T5 _% [2 K, @2 f' T' w) `
continue;+ f! | H; T& J0 d, z; A
}
7 X* w: s* R( h& g7 h8 } //////////////////////////////////////////////////////////////////////////
9 ~& G1 j# L9 _( a! P$ g7 ?& @ //开始移动. L8 ~+ R7 q6 T$ v4 _0 i
if (nSrc == nDestPos): J8 [. F* C. O' ?: D
{
4 i' ]3 X: C- j5 h //原地不动$ a% i4 c% `9 O8 i: [
nDestPos++;
4 ]# h5 ~& _7 h5 d+ j continue;& H$ f4 a. U! E* d" [$ G: ~3 P) @" n* z1 l- w
}
- P! W5 {, ~/ K1 D& W) m' w6 W pInvSort->MoveItem(i,nDestPos);4 A: L& F8 p0 |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 C ~% Y0 K, q \ Sleep(5);
+ P, [- Y2 q# R1 u: H //Error("移动 - %d->%d",nSrc,nDestPos);
1 I' r4 W5 G8 c! c, z2 m2 P G nDestPos++;
! q& g+ t" D( v( H) H- g5 b9 J }: U1 O+ D U. l5 r; h
//取第一个元素的信息
: v' M( T6 F" Z- c0 _ /*
: J" G4 Y, O4 s' H if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& e6 I2 i6 E* _0 Z( j1 V
{: ^, ~# {9 ^6 P. r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- M( m1 H: |3 B6 s2 s( C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# Z/ S# d6 m# H% |0 o' v3 n9 O' E
}
# `, H& I$ e0 P5 ~ */
2 C1 i- c+ t `9 o8 Y% u //////////////////////////////////////////////////////////////////////////
) H2 r" ]: `& h5 E break;
0 }7 ^# v, ]8 Z: I9 M+ R( G }
7 p' \9 A; z# P" E" I2 e }
" P. h2 ` [, t/ _0 d, n}
" e( n3 w! x8 ]m_wndMenu.SetVisible(FALSE);" q3 t, g* Y# [: p. k) R; f7 n$ x
1 |, |4 |- H- G5 ?5 h--------------------------------------------------------------------------------------------------------
" t$ l. V. c! X/ r9 L+ u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! H2 S8 H2 c* a; D8 t{
8 D2 H' i8 J1 q$ e4 p% {0 @BaseMouseCursor();
9 B! p: _9 a: S1 p2 q* A7 i}6 Y* p/ d, d; x( P: I! V [5 J
在其下添加:
% K5 s5 V% ~ i4 mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) Q3 y x' ^' I* z- c
{! H9 c, L, t1 k4 C) x8 J. _
m_wndMenu.DeleteAllMenu();5 N e) w% s+ \& U
m_wndMenu.CreateMenu(this);2 V7 | Q( Z1 m4 _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ A7 @6 z; A/ z& o3 F. l/ r% k' l$ ~+ i5 p* g1 F8 Q, a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* F P2 T) x5 @3 {1 T
{& I0 K7 r4 e. O6 `! k
//P以上级别才可以删除所有道具* ]8 L3 p4 b8 H$ {, j# V# y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ K0 x3 @; s; L- C}: _/ L4 S0 x3 n f5 \, K8 B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" o# `5 p9 a6 W/ ]- y! E# v: m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: R* F6 ]+ r1 _' C% k: I
m_wndMenu.SetFocus();
( U% `) {$ H" ?}
7 Q$ c% B }! f6 B% T1 w6 H------------------------------------------------------------------------------------------------------------
. P0 _5 Z' k& X/ [% Z*************************
8 @ V% O& D6 Q3 |* v: K9 `' YWndField.h文件
# I- c8 L3 {" u0 j' a0 r) |2 e*************************$ V& Z' r* I) m
搜索:BOOL m_bReport;6 i0 O Z, T2 e1 B4 T* d9 f% L, P/ G
其后添加:; z o3 _" ]$ n% n
CWndMenu m_wndMenu;
8 {: ~- v! `, e1 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ t. l) U1 b9 w/ Z
其后添加:- b5 o: X2 K1 m) T" w
virtual void OnRButtonUp(UINT nFlags, CPoint point);# g0 `9 v) X7 P$ T) B/ }) y X
4 O6 Y- Y2 @) ?
5 D2 z% C. W* T( Z |
|