|
|
源文件中_Interface文件夹下WndField.cpp文件4 P( v9 m: O" u6 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 M: c, c" u& ?: Z4 N+ A+ f, x1 Y
; z d" g6 Y0 E" ? x6 t& o$ G; Q: H* ostruct sItem% ~0 B1 J& T1 c+ X% U6 D
{
& d: }$ K2 h+ b0 c. IDWORD dwId;
- s& Q. Z) B& l2 H/ |9 UDWORD dwKind2;
& K( L* a- D A+ XDWORD dwItemId;
8 h6 \" }, j. N }" \( ]BYTE nIndex;
' g1 U- U9 e \1 d) X qsItem(){: t! \' t' c1 c+ l$ }
dwId = dwKind2 = dwItemId = nIndex = 0;
+ g( g7 U- p* _9 W3 P D. [1 |} v# W1 U% n) `2 k. d$ [
bool operator < (const sItem p2)
/ I. V& t! a" ?9 ]2 J" w{
, P+ Y" \' K: q. \/ J0 H if (dwKind2 == p2.dwKind2)
/ B5 \5 R: d5 F% D/ i# Q! i* [( u {% u: U* U& {: \, F ~
return dwItemId < p2.dwItemId;
& t7 \( `. G5 ~1 |% m/ x7 r }else{
; T/ X2 e& }- g4 o return dwKind2 < p2.dwKind2;
+ L& g& ]/ w: {3 ~0 b }% D/ V2 ~6 g/ N( C4 y, h3 N+ E$ n6 ?, p1 S
}3 i! f) H! T/ v0 i
};
4 v* N1 C$ O' F* H( |class CInventorySort
7 @( |1 d; m+ A+ F5 r2 \9 j{5 \4 H6 _) M4 R# G% u
public:! t( n8 g+ u$ E$ ^; d% x
CInventorySort()$ q. H8 K* x, [4 e1 b% t- ]
{4 ~0 l' O1 Y- r8 r3 G& A
m_dwPos = 0;
8 B' m6 ~0 Y% @0 E. Q}+ @2 y2 @$ v, E$ d
~CInventorySort(){}
. ~$ a6 b& R" R9 n9 H9 j, u" Zprivate:; A2 D/ H5 y, Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& Z) L- E: v" Z; v* Q2 h5 \DWORD m_dwPos;
% z) o5 K M% L0 E7 n( upublic:
6 `- v* X4 s6 Q) l jvoid Add(BYTE nIndex)
( `) z" ^2 ^) c4 l{
& v) j ]0 {$ ?* N% o3 v if (m_dwPos >= MAX_INVENTORY)
! F' g7 V8 w" Q2 c. P/ r {
5 a5 u9 d4 K2 x6 R; @ return;
$ M+ [( M/ y6 U }1 K% v5 \6 D0 E5 | y) h5 x G3 y
m_Item[m_dwPos].nIndex = nIndex;
; }% w+ a' B( A2 r m_Item[m_dwPos].dwId = m_dwPos;+ O% E+ V n" g. u# \5 S( G
m_dwPos++;
% \* x# \- \) ?5 ]6 O}
/ b! _6 W0 v+ K# X& JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- y" T3 H2 {3 ^3 ?& D* h0 N% j6 {
{( h2 s3 N0 l; u) v% @
for (int i=0;i<MAX_INVENTORY;i++)6 \ h5 v/ a8 @2 x) k; t
{
2 b6 K5 a+ }1 @4 u( P% { if (m_Item.dwId == dwId)
5 D0 H; f' W, \8 ] {
3 t' [; o6 s( k0 L* @ return m_Item.nIndex;
( {* l$ h" ~! y- Q }6 w K. A9 P$ \+ _5 S/ O
}
y& c3 V* r' d1 G6 C# n return 255;
0 s' C: i% o( A' F' b8 `: R}+ A* P# _. A) ?' r% f3 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) D7 X Z( I& P! i. s5 ^$ L{% d1 m3 j0 C, D* J
BYTE nTmp = 0;3 M& g9 g( o+ D9 c) w$ g
bool bDest = false,bSrc = false;
1 @, d2 c: G( \: S0 X5 ? for (int i=0;i<MAX_INVENTORY;i++)
. ]7 z5 e5 i: s5 R {
) A6 n) S$ j$ c) d1 c3 z if (dwSrcId == m_Item.dwId)
1 l9 c R: Z& o M) G" l; C {; Q& ] x6 ^# f) K2 a
//id相等 则 改变对应的dest和src6 z/ ]' q% I) V+ j4 M
nTmp = m_Item.nIndex;9 v2 O& v0 h3 T7 p$ o) N
m_Item.nIndex = dest;; Q# i" z6 j0 l+ W+ w: y8 q
}/ L* w4 i: C G- T5 D5 T* S5 R
}5 y: ]2 E5 f/ L5 l6 W; `
//临时数据保存完毕,交换开始; b, F6 T0 Z# V
for (int i=0;i<MAX_INVENTORY;i++)
3 W m, F5 i: V* m4 W! U7 D {- O: x7 G" ?9 R
if (dest == m_Item.nIndex)8 n& e+ t- o4 V/ f# _+ w! b( N, p
{- Q6 `4 m+ q! j+ [8 J
//id相等 则 改变对应的dest和src+ e+ k, E: v; X- e6 T" I5 ^% q/ m
m_Item.nIndex = nTmp;0 n" P& j9 x I& X
}
9 R( |2 f1 W8 I' D% o4 d, K" E }
4 [* l. R' j3 ^* P: Q& F}
- Q( p0 h. V* S6 {) S3 ~- h: l};
$ v; O, |) N5 w- q8 d; G& m* t-------------------------------------------------------------------------, R. I- p* F& ]0 x( j" Q* P( D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 o3 ]* U0 B9 y/ B% ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- s# y# |) L/ `" O5 b$ `紧靠其上添加: ]# C% W0 S9 t/ e! `# y
if( pWndBase == &m_wndMenu ). \3 h8 A- K: l% u
{7 z7 P: N4 z G( u
switch( nID )
4 I p! ?9 F" _8 {0 Q {/ w4 U' }9 ?9 d5 X* ^5 _; i
case 2:
7 u' Y1 o( t" N j& D% j- E {7 x8 j7 x; l. F1 a' N! G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: N$ R* t! ]. c5 q7 G0 q# e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ n# _" B# d- N2 {' f" y" k) L {
; ]6 W' z5 t, }2 g, }1 B* ^; p break;8 @7 M' A$ h. }1 l5 X Q8 Y4 Z4 y% S
}, X/ w0 |4 k/ T1 ^ |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 a# _ U2 X4 ^ {4 j. m4 f9 S( Q4 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 x9 J6 w7 G; g0 U' ]
if( !pItemElem )3 m0 Z4 i& v3 d* l; |
continue;. A( u! t1 B5 `1 v
if(pItemElem->GetExtra() > 0)
+ a7 r3 I7 ^4 U! L0 C; \" H9 w% I continue;3 @/ [/ \4 c7 n n) t: i' ^& m: A m
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ z, [, d" y2 t) ^! }+ z) F+ K; |, d continue;
2 z0 D- _$ ]5 Z! p if( g_pPlayer->IsUsing( pItemElem ) )1 i4 W% ]% M. N! g: [
continue;- }6 D/ G8 x9 i$ d3 v5 {+ W7 Q
if( pItemElem->IsUndestructable() == TRUE )
6 x1 C7 b7 s6 i+ X% X) g+ n {
# e# r- R- Q4 x4 Y8 x- t0 p- c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# V8 v- `: l2 D4 Y+ Z continue;
: E4 \+ D- J: _( j, X+ i3 w }& z; j- X x# h5 r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 u; k& |9 s. E, H P# F% e. w }
7 b6 x/ l. A7 {" D, ` break;3 x+ A: |: q% E" s
}
4 U( y9 a$ W9 y* p# g" t case 1:
6 U. H& {* E6 [/ z: J. R {
1 f) ?( h! M; t8 u3 T //整理背包
* u8 w1 n! ?9 Y0 } //////////////////////////////////////////////////////////////////////////
# g3 c; a( l1 `: g; f# f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- y% Q3 L% M3 n, @2 J# N
//////////////////////////////////////////////////////////////////////////3 _; p! y" }4 h: _/ ^7 [0 S/ q3 H
//////////////////////////////////////////////////////////////////////////
- h/ k! F/ `0 ^ CInventorySort* pInvSort = new CInventorySort;0 s1 D3 j' \* `5 M
vector <sItem> vItem;
, n7 ], z. U5 R) E! X vItem.resize(MAX_INVENTORY);//初始化大小
! K$ T/ l+ Q# [ //////////////////////////////////////////////////////////////////////////
. W& |& @+ U! j. g0 j! S# m //填充数据
2 o% R$ d$ Y# n- u for (int i=0;i<MAX_INVENTORY;i++)- u; P8 h7 h9 D- X {3 F5 F4 q* G
{: K! |" K' c; L9 d$ |) z3 P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: X% _# \( `. E0 U& O if (!pItemElem)2 U* I( ?# t" A) O
{) M+ F5 P% ?7 O! ^# T6 Y
vItem.dwKind2 = 0xffffffff;0 f6 j% z I" _, t' M5 J7 ~
vItem.dwItemId = 0xffffffff;
* W d4 l7 I% R0 B vItem.nIndex = i;& q* W% J6 l) D
}else {
$ N2 L# p2 L% f3 U9 ]' v* f3 o3 p a, \ ItemProp* pProp = pItemElem->GetProp();
( q; p# Q0 m" I8 w$ m* s0 W c vItem.dwKind2 = pProp->dwItemKind2;
9 A4 a1 q+ W' J+ Q- m+ n! N. N vItem.dwItemId = pItemElem->m_dwItemId;3 Z$ S! b4 G1 d1 P
vItem.nIndex = i;
! F: }5 c @: s6 N }
/ l5 q) B7 p/ _ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! h# }2 Z7 X: ^ ~ D }- W6 h- r2 A3 j2 i+ \
//////////////////////////////////////////////////////////////////////////
* R& [/ E3 F" X8 Z% l; {6 f sort(vItem.begin(),vItem.end());//排序; M: h5 y7 T9 m, e9 W
//////////////////////////////////////////////////////////////////////////$ { y1 l1 _) K+ |0 `2 y
//交换
+ r |$ W: W7 n5 D7 A4 M for (size_t i=0;i<vItem.size();i++). u# N, G N4 ~7 C
{
$ ]) Y2 ] D" G9 s% w4 O1 R/ Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! `5 f: V% o; l& t2 [$ v
pInvSort->Add(vItem.nIndex);/ ^$ a( h" R& c$ R7 J
}8 n' e' P+ h+ x1 H$ T& z
BYTE nDestPos = 0;. W5 D! @# V9 X; p
for (int i=0;i<MAX_INVENTORY;i++)
/ o* z `. c% z( ?* N {" F+ D6 S/ I& I9 ~1 z2 A1 s1 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" e' R D% L8 x/ N1 j if (pItemElem); Z6 t* t0 w, B( d0 M$ P! `
{! E1 j4 [; L' G$ p6 t( Z! i
if (IsUsingItem(pItemElem))$ L4 u- J9 J+ g# C' m& ]. c8 |- l
{
9 H( W+ J# l' `0 |- O7 a: k //这个位置无法放6 s# H D: w% e, A( t
nDestPos++;
0 k2 ^1 Q1 {. z }8 [- o) S* ?' _ ]. c; H
}
2 q1 Y8 {: H! w, c3 A3 F BYTE nSrc = pInvSort->GetItemSrc(i);/ ^, j5 P' y5 d! W1 l, i' s3 L
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* J3 K0 s- k" K% \9 `
if (pItemElem)
4 S' }+ r. Y& B" ~ {
0 M: B% M, r* l. s$ T0 Y if (IsUsingItem(pItemElem)) w5 U, @5 L J
{
; i x4 y9 a1 ]' A //这个道具无法移动,跳过
5 y0 \4 F+ a% `5 p continue;
$ R a' x- t% F/ j# t( W }% @( @, A2 d; R' c
}else{
: G D. V3 j+ L7 J. w& f1 c //空位置 不用动6 t- q8 v; s: t: r! r# i a
continue;
' L/ I+ j8 g; \( k x" M- i }% j, j" _$ S6 P" c
//////////////////////////////////////////////////////////////////////////
5 l; x/ P- I5 L$ S; @2 W7 c //开始移动
! `& [, Z& U& P7 K( F if (nSrc == nDestPos)
' v& m3 l* u9 r4 [ { b K& D. a- R% _
//原地不动
& U+ s7 Q6 B" N8 ]4 D! z J7 x5 p% } nDestPos++;9 p* o/ v1 z* J' \4 @
continue;4 ], u) @0 R8 Z6 ~$ C
}
* a- G4 w, ]+ S* ?- J! Q pInvSort->MoveItem(i,nDestPos);8 R1 W5 d% ^" j0 b* \- \
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& n6 j% q5 L2 f' O1 v Sleep(5);
7 h" l1 e, A* n( e4 w& J //Error("移动 - %d->%d",nSrc,nDestPos);! v! z# U1 L$ w$ w6 `0 |
nDestPos++;4 r' H- H' a0 H& T7 o2 n) Q
}
& i' Z& I( N' x* a3 _. n //取第一个元素的信息
8 C4 @* n' N; x \+ ` /*
$ J5 v0 Y5 }7 ^: j: O" A3 H! a" \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 i0 D6 _+ I) y {9 `8 m6 @" N Y6 j0 w4 H9 s
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( I4 x0 g9 ?$ x8 X" k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" Y1 g" ~: F* x! p2 g, t
}% T1 Z( d& g) {5 O) e6 ?
*/
4 w: D9 K, n) O! W$ H: y- f3 N //////////////////////////////////////////////////////////////////////////+ q0 Z0 Y) J4 \9 Y
break;
' H% j r: W9 c" h' x& d) D% G1 [; }0 F" ? }1 R2 ?5 l" }, i5 Q& t2 A
} : E( _2 y/ _) k {- j
}, M4 [. b7 r: X, k* q) ]$ b
m_wndMenu.SetVisible(FALSE);
2 ]7 L6 V4 |% l
; P0 J) V. d. f/ B V1 {--------------------------------------------------------------------------------------------------------/ K% I4 J5 Z4 P0 p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 K# ?( h9 G; z2 S0 r{( _7 b! T' p# _; G
BaseMouseCursor();
' }4 K4 q" W9 z5 S}
* U0 E+ ^' ~6 u; X& E2 j在其下添加:
) B; k! R) |2 k4 L% P1 uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% s* x* p$ ?$ A+ b% I. `8 c{
; r; X- R! j: _m_wndMenu.DeleteAllMenu();
4 Z0 [1 l% y0 d* Wm_wndMenu.CreateMenu(this);8 F* ], {- {) f- E+ Y- h. K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 A1 `6 S! p, {; E$ M3 t8 _' q
) N* F3 y% v4 J. x- h- P/ }* \6 jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 _6 L1 X, z' i; v: b9 t. t
{
, [ r( ?- Q6 C5 f3 k0 {( r P //P以上级别才可以删除所有道具
: p" _5 A' J& l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) @: j" k% D3 L& M. z7 {
}
. V, F c+ e. v# Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 F* r- J6 P5 c4 Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 r. j' d2 ^/ dm_wndMenu.SetFocus();
h9 s7 K- R: F# r}8 ^; c7 J2 d* P
------------------------------------------------------------------------------------------------------------
# O+ f0 m1 D3 B8 m*************************% F a% x- Z% D' v
WndField.h文件; P) n4 E! _ y' N b
*************************
- c& u* h# d' A R V# R搜索:BOOL m_bReport;' N) m4 I4 X0 I, w7 \3 l
其后添加:& E! h+ C2 q! u/ ?3 a6 L2 |
CWndMenu m_wndMenu;
! ]& d2 r3 W4 X2 U# a! W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 y/ R. i8 E! Z6 H+ q9 z其后添加:
1 L( w# z* q+ i6 t$ E) ^' cvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 X5 }' {7 V1 g* G' m, T
$ |4 l- J$ \* F; n
1 `! J) e+ u& U9 P" m |
|