|
源文件中_Interface文件夹下WndField.cpp文件) B3 B9 F8 [, C5 p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# z% S8 c, |9 m* a' e' l
2 f( y7 ^* F1 d2 v. o7 I
struct sItem
4 o5 L: ~% {! o' t{6 {! h; ?+ s, J# G
DWORD dwId;
( T5 M' J5 j2 C+ Y& nDWORD dwKind2;
# x# ^ m/ T0 G! d8 u9 g/ u' qDWORD dwItemId;
4 C) F& p, }. h4 g# i) IBYTE nIndex;' O. J/ U6 a5 b# }) o
sItem(){( d) x7 _5 g! T4 @+ K
dwId = dwKind2 = dwItemId = nIndex = 0;) u' Z" f; d; x( A' a# D r
}
8 i" a, Z8 X/ O$ Tbool operator < (const sItem p2), ]0 i' @. K& v3 `% \# ]% @
{
7 D9 x, `) V. d8 c% Z if (dwKind2 == p2.dwKind2)
( {7 ]0 x; \/ P2 [1 M: J/ U0 B4 b$ | {0 u6 k* k* E' o+ t
return dwItemId < p2.dwItemId;8 T- @+ a5 W: h: z& Y3 J& K
}else{7 b5 H4 g' L* S" c- W
return dwKind2 < p2.dwKind2;/ S4 A e! r4 G# n# w
}
, Y$ }+ z2 f2 ?# w" H5 ^. L}* E- l9 t1 }; R: I5 ]- P7 q
};
2 O0 E; Z8 x5 o" H X- Hclass CInventorySort6 H- M9 y. M# p4 H& | I
{
& \$ Y! K7 F4 ?public:% | G! j& Y# J4 P+ C
CInventorySort()7 Y# j. u( H" f
{
. ~ }5 j: ^$ N: Q6 I) { m_dwPos = 0;
' e! F- g! R7 V8 l' L8 k) c6 B7 j}
3 r: j1 Q5 m) C3 A' _$ K9 Q~CInventorySort(){}
4 ~ C: l7 {; z: `/ b Y0 y$ h; }private:( m( }# S# |% a" x8 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) W/ r4 R. A! U! ?. v# G
DWORD m_dwPos;
! h; D% m, ~7 _* i1 v; `; H( x2 E( E& Jpublic:( i# v5 m, G0 Y2 X& w- C7 k: B
void Add(BYTE nIndex)7 U/ g5 r# [! e$ e5 U3 L: m. v1 Q
{
M \: J; H" c2 p9 z6 f) d1 g if (m_dwPos >= MAX_INVENTORY), Q% m7 K1 |: }
{
* Y, |" u7 t- Y1 }1 o, ` K8 g return;# t) V. e) s* c4 u, l0 t- E2 z
}
. ]9 Y' U1 `8 v' P( n; x m_Item[m_dwPos].nIndex = nIndex;
9 C4 c6 Z& r& y% W5 V m_Item[m_dwPos].dwId = m_dwPos;
! }4 x( l( @2 B' \/ m7 ^+ K/ p$ p m_dwPos++;/ o% W6 m' y8 J: T& g3 o- _+ x
}
) L# V' K+ w& Y+ T& |, X5 A8 e! ]* PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 _; Z: a0 c3 n( h
{0 E( y* P# g% q3 w2 [
for (int i=0;i<MAX_INVENTORY;i++)2 c6 O) x0 O) c' |5 s
{! v, L! t" s w% {
if (m_Item.dwId == dwId)
" u7 S6 l: G) @" {+ r% {; B! O {
0 v. A E' l$ `0 w$ |% c$ f return m_Item.nIndex;
. B; c3 o, Z* _* B$ ^& m& I+ b2 B }
0 r9 p9 U2 J/ c) O ?0 U }
" E3 y6 O8 J, [6 k1 o# H+ { return 255; |* |2 d+ }4 N1 @$ ~
}
; X/ N. m! i8 x3 @+ C5 S# lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- A0 _$ q+ K8 d8 c$ f
{
4 C# Q! [* X) C ?- p, b0 O" V4 H BYTE nTmp = 0;
4 C- T+ W7 x! W bool bDest = false,bSrc = false;. ^- i9 j% b1 E' L
for (int i=0;i<MAX_INVENTORY;i++). d; w4 ]8 s0 c" R+ |$ I) l
{8 w: e! O% L8 b3 M: A
if (dwSrcId == m_Item.dwId)
9 Z7 Q3 O3 v" ]1 n% f" A {
: m4 V, _, U. Y# ~2 U7 a ^% n* F //id相等 则 改变对应的dest和src
9 \7 z y a9 d: T7 ^! D- u nTmp = m_Item.nIndex;
0 B" G$ Y. j% i# a m_Item.nIndex = dest;
5 W% m; T" Q) ]* ~ }- w$ k( d/ ?+ h' Y
}
& }/ [ r H b& i2 R7 A$ ]- R //临时数据保存完毕,交换开始
$ @4 `. c- O9 ]7 ^% v1 W for (int i=0;i<MAX_INVENTORY;i++)( m, D. G( S- Z9 }
{5 P, i+ ?2 B: O9 a
if (dest == m_Item.nIndex)3 J; E: h9 K9 H# k
{, f2 l8 e1 ^0 J; p. y
//id相等 则 改变对应的dest和src
4 m ?2 g( ^" D m_Item.nIndex = nTmp;2 ~9 ?9 ?- A9 J f9 |" W
}
/ c% k. L0 Z- C6 V* K1 R4 v: l+ c. e }9 V5 p; U8 h# V, ^( o/ v0 x2 o
}9 `7 y$ l+ M. z) N# j2 s& a
}; z' n4 [" C8 T3 a
-------------------------------------------------------------------------, B4 b) ^& V! E! L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( L/ x$ w3 X+ J! X1 J( G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 E# M2 _; ]( U0 p9 |, _
紧靠其上添加:
1 X) z* N) Y# {: @% X# L2 Q3 O( b1 @2 vif( pWndBase == &m_wndMenu )
' F/ \& b% w) f2 m{
* `1 X' p" c% M; T/ R% m3 N switch( nID )2 R( R0 }& ]8 L+ T$ Y, ?* W, G
{) E9 }! }+ o& w7 l/ A- D- S8 z
case 2:
0 \/ c/ ]0 b$ S& `. b N {% V) J/ M' ` H3 x3 K A
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ L, ~6 o& H9 K2 L$ B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 U; P5 M" N7 E4 ~4 f' n
{
/ U8 G1 I* z' u* ~+ t break;
5 j, O" H. f, Y4 z }# I4 t, ?0 ]/ a7 A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ I1 G4 n" o/ A; ^
{
: I9 s+ P+ y5 J2 P0 j; L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, A ^! W7 k4 K
if( !pItemElem )6 w/ _0 E- ~- Z& v& x
continue;
% S4 L( j# @3 \+ D/ y if(pItemElem->GetExtra() > 0)
7 z5 u! U& X0 D# H6 c2 v continue;* ? r7 X6 M* ?% f. P4 M! e4 t( }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 }4 M* a+ k' B; M1 G
continue;
6 B2 A: m0 y( I0 d if( g_pPlayer->IsUsing( pItemElem ) )2 V) K5 `9 _- ?. e2 A+ B, M
continue;
& r0 o0 \+ {" q* `8 M if( pItemElem->IsUndestructable() == TRUE ): A& G' Q! B. Y" Y+ n# [
{- ?: \. x$ m+ Z5 x% s5 E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 r' R: w* G- ]4 @; |, x+ @& P
continue;
3 _5 k$ U) Y0 b/ } C }
7 c6 t, ^# T! u- n3 a& p4 Q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% L+ W9 P+ k5 P: M* g; C
} W) ~5 M- v& i4 R2 ^' f* |* Z2 P
break;
% h2 W- E6 H9 i0 K( J- x }
) j5 A+ l1 ^( _5 u( D) p. r case 1:
( e( D9 g$ t( I1 s {9 W3 e1 |2 C, b0 U
//整理背包
+ _" F: \) W6 ]( W4 k n9 w //////////////////////////////////////////////////////////////////////////
! t, U1 X) d: X }- L2 b //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 K, ]+ ~3 _ w3 T$ ~- A //////////////////////////////////////////////////////////////////////////+ Q& }1 b9 X* t& T* f% f4 C) p
//////////////////////////////////////////////////////////////////////////
) Y( g" l) V+ u; w1 V CInventorySort* pInvSort = new CInventorySort;
V. a+ _3 J7 [" T, g vector <sItem> vItem;: }9 c$ W8 W' H+ B# y! T- r
vItem.resize(MAX_INVENTORY);//初始化大小9 j, A% O3 Z( G" T) Y
////////////////////////////////////////////////////////////////////////// \( E- i& ?3 P7 _5 v( B& o
//填充数据
* m$ G" t# e* { for (int i=0;i<MAX_INVENTORY;i++)9 p4 l& A, G: p! f5 d- p
{# e( z1 ]/ K- e3 D4 t ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 l( d3 t0 c. M: ^
if (!pItemElem)
3 o O. w( C- }# v {) m6 N5 [3 u% r3 M+ j. T1 ~
vItem.dwKind2 = 0xffffffff;
. {& X8 q9 {/ E K vItem.dwItemId = 0xffffffff;
2 ]* `, ]9 ~6 I& |9 E/ H" F4 | vItem.nIndex = i;
+ \$ {" t3 V \% a/ E }else {) Z* g# j4 _3 l, g
ItemProp* pProp = pItemElem->GetProp();
' |% B9 ]2 u$ I/ x2 Y: _$ E vItem.dwKind2 = pProp->dwItemKind2;: U) s4 n* F6 P Z. S' Z F
vItem.dwItemId = pItemElem->m_dwItemId;5 o1 f0 y. G) n6 i i- d
vItem.nIndex = i;
) p j \9 o- @2 S2 i }
- i4 u5 k6 H5 l' d+ a& Q8 s! r K //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* m% _$ p+ V" ^" o% d
}
1 ~/ E& E9 ^: l K8 D //////////////////////////////////////////////////////////////////////////- j9 J- m/ y {
sort(vItem.begin(),vItem.end());//排序# |+ ?$ \/ J0 U/ C! _
//////////////////////////////////////////////////////////////////////////
0 E( D% \3 Y* o. ~; k' q //交换
$ U1 G! g/ U0 J for (size_t i=0;i<vItem.size();i++)
" j R# {% Q5 | {
( p6 Z" C8 f9 E1 t; v" H1 N0 M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& ^+ T6 N/ | j
pInvSort->Add(vItem.nIndex);: T' t+ N3 ^1 ^- {- r3 ^
}, X3 m4 a6 s0 B: |
BYTE nDestPos = 0;
- B9 v$ ?( `4 } for (int i=0;i<MAX_INVENTORY;i++). N6 x# n4 A8 A9 G: ^: z6 a
{
7 f5 Y8 W; J: N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ m" x; X$ X8 e5 n if (pItemElem)0 i' ~4 X- b8 S: |% {
{, W$ e* q/ ^0 n: B. K P( D2 ~- O5 ]
if (IsUsingItem(pItemElem))
" h5 k5 x/ ~2 V* h$ n1 z& L# Z Y/ s {! d6 v6 i5 C; V# k" r1 V
//这个位置无法放+ q) v5 \ b2 O1 B1 k: D- l
nDestPos++;- n% E8 U: a2 l! g- L {
}
) h8 r7 O, z4 P9 S }
+ F, [ q# V6 y, |1 D3 `# }/ p BYTE nSrc = pInvSort->GetItemSrc(i);
8 @5 A8 G9 [) o5 r5 A+ }4 r. |* c! b pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; N. |& } ?+ F+ }
if (pItemElem)
- s" W3 n' y7 e( k3 y9 T {
7 N3 d, ~" D/ e" g( M& X5 B9 ^( t if (IsUsingItem(pItemElem))! t( o/ `9 i, }: `& I
{
' a8 r5 j# ~ n1 m8 P //这个道具无法移动,跳过 t6 @/ N1 c! J' [) h* i: M" X4 J' ?
continue;
$ M" g( |. ^3 ?" G, v2 E2 r }
7 L5 ^0 Z2 o1 l& v$ q% W( ]! ] }else{
7 |; c9 w/ Y- g: n //空位置 不用动
8 \* _5 ] ~- T9 Y: E# c& H0 K continue;
* n' j& X6 `- C }
4 ~) W; ]. O) t- B //////////////////////////////////////////////////////////////////////////
6 }# c1 s3 j1 z, y) X //开始移动8 h( g# }5 M: V2 Q: i; w- i4 G6 \
if (nSrc == nDestPos)
7 b$ X' d# _4 M) X {4 u; {/ q) J" }5 j9 }
//原地不动
, y' S, X+ A- D' j/ _% j, a5 o nDestPos++;+ U$ k! T, f7 ?) y; [0 B0 P
continue;" h. R U- _- v- {
}
9 a( x! D; g# ?3 F9 U: u; ^ pInvSort->MoveItem(i,nDestPos);: h: L" e& P9 M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& A2 p% _' t8 W Sleep(5);
1 D! h" k0 h3 r$ r g* ]; c //Error("移动 - %d->%d",nSrc,nDestPos);
; f3 W% f0 t' m* R7 F+ W; h nDestPos++;. p9 w- d3 \, w& t
}6 Z7 h0 x+ X2 W) s E
//取第一个元素的信息
5 x0 D0 M3 d1 x2 W& Z0 Q /*
1 w5 c1 b3 X8 N: i if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ s% b; b6 L2 L: z2 E' I
{
2 j' C, ], v9 m$ F$ n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 @7 A: f' T0 O! W3 R/ O" d# M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 P; w3 p: a* N" x }
9 D$ h% _* z. ^ */
8 b) X1 S, B, ?$ t* n9 E //////////////////////////////////////////////////////////////////////////1 ^ z2 k/ o" i: ?% S
break;
" w* S9 ~+ J! f- o }
# }' n9 j+ a( I4 J9 x } $ X: Y8 H% `: H) U' t# O. j$ o
}/ l% p, F0 q( g+ f. i% p3 z
m_wndMenu.SetVisible(FALSE);
. u0 w* I9 ]* ]5 }5 I( J4 R' d: H3 i: ~
--------------------------------------------------------------------------------------------------------! @6 s' F7 x/ I# ], K( W$ G6 Q1 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 C# M4 m" e5 P0 ~$ K9 [# d) \6 U{, g8 I0 R1 @# V& v, }& r; D
BaseMouseCursor();* R5 `( `& X) Y* w0 u# e
}
7 C; z! r y; H在其下添加:* W& Y& H: y0 x# A. i0 [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) i: N$ C: X$ H
{: |9 e8 [9 T. O% U" T* \
m_wndMenu.DeleteAllMenu();1 x7 g' @6 b% \7 k, Z) F
m_wndMenu.CreateMenu(this);
) B. t- h7 m+ s5 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); n$ }7 R5 W; x; P4 c- P
; _& e, E' r" {( B1 A2 @3 {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 v$ |0 U5 H9 i) f. e
{
/ |) K x, n4 u0 x3 ]6 Y //P以上级别才可以删除所有道具+ q9 {5 C' w7 E1 A4 k$ b. N0 a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); R6 P! e% G- j
}
0 e }! z* c1 n5 D& v' S3 ?, ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ e, A- Z1 X9 N' X$ y/ km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( A& j/ R. F p9 V, ]( H+ om_wndMenu.SetFocus();
e8 |& s* K( _5 d}
5 B/ b& {7 m6 ~. Y------------------------------------------------------------------------------------------------------------
5 |. V% H& |5 y9 H- M*************************; e6 E5 d$ U* {$ V- s g& q) j
WndField.h文件
; V7 \* G7 {* |4 x% w*************************
8 a$ I) O5 I# ?+ O7 W搜索:BOOL m_bReport;
3 e+ _ M4 a: {' ^其后添加:
2 x# l" h9 R# ]# N3 [) W& s$ w, LCWndMenu m_wndMenu;" @$ [2 D4 c, }0 o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 R$ d* o& o+ F( O9 n* s- x- E2 C
其后添加:
& F6 Z8 Q4 }0 S( `& I2 ]0 ?virtual void OnRButtonUp(UINT nFlags, CPoint point);
% |: t+ P# x5 h( g7 k% T+ l& a S, V9 X' n4 y) K: }
: S& o/ D/ e* t- G |
|