|
|
源文件中_Interface文件夹下WndField.cpp文件
( U& j6 I$ m6 |0 O* J& \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' [$ _. `+ H( ^: Y+ y; v, [( T! }* v% t" F( B
& D! _4 u: Z8 f4 Istruct sItem
* M" { X# b, g{
* Y3 z, f2 P) b' [8 y! O( r4 rDWORD dwId;3 m H3 t7 I7 P. }6 l- x3 b
DWORD dwKind2;: I8 [" U) F; k$ T5 ]/ @, J
DWORD dwItemId;
9 l7 `: }$ `; P) E" nBYTE nIndex;
* D: o! |! C1 t _sItem(){ K# f" R9 N$ C2 S1 }
dwId = dwKind2 = dwItemId = nIndex = 0;
( G, w! x, B8 L8 r}9 u3 P' u2 r3 t3 @4 N
bool operator < (const sItem p2)/ d- t0 y7 s) N2 p0 Z2 x4 H
{& z4 o9 d4 `4 j d1 G
if (dwKind2 == p2.dwKind2)
) w4 k) T% j; r9 u {
# f/ b5 |5 Y4 a return dwItemId < p2.dwItemId;
6 W' {& p3 e' w1 N1 U9 E }else{
+ m4 L; b( S9 Q2 f: J+ V( X return dwKind2 < p2.dwKind2;* J, t% G1 n6 d- A
}8 M$ D# Z! B% x
}; a/ ^$ e5 v: M& @% x$ K
};
! L/ w5 B, W# r/ Y' w, C2 Y8 y* iclass CInventorySort
, D' [- N- W4 G1 m' m' x" k: k{
7 j/ W1 S1 e& v& jpublic:
8 c% D' C2 v9 k6 w! T. v; C/ ?CInventorySort()
$ D" C5 i0 \; \ @4 g" V! U0 x{
5 G" N% g$ a, }: @0 v, O; Z m_dwPos = 0;
/ t: ^1 R- T/ M; ^& l/ t |3 T}0 H0 G O4 ^( V; r) B
~CInventorySort(){}, Y& Y8 n- }# W, o/ D$ ?( h+ H) z
private:
0 } f$ J2 ^9 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 _7 i$ ~, J# }6 a" h; sDWORD m_dwPos;4 R* N: V# c f
public:. C! ]# g+ v3 O
void Add(BYTE nIndex)
5 G- j! i' D( R' ^{2 q4 \ ^ f8 M: p9 }
if (m_dwPos >= MAX_INVENTORY)
$ L4 T4 w: t/ x. n2 Z3 G' `" a: N {1 n" [6 W: K: t: H1 {3 J" @% U0 p( P
return;7 {5 d3 N4 r) R/ [. j9 }6 v! S7 ~9 x
}
+ g* o k. A4 e! d2 F' J m_Item[m_dwPos].nIndex = nIndex;
, ]* I$ d3 f* e) R m_Item[m_dwPos].dwId = m_dwPos;
) [8 a+ l) q! j2 f$ p- x m_dwPos++;) T& c* s8 ?+ i! b
}
8 ?2 n- u" q2 D+ O$ ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* d8 D7 o2 j Z6 b" B) \5 {{% `7 ?7 R: r& Z! @
for (int i=0;i<MAX_INVENTORY;i++)
; `8 W$ h+ \5 p7 ]8 i% n {
) `1 k. t* f: Z4 X if (m_Item.dwId == dwId)( s1 F6 ]' h" h3 A" R+ P
{* n1 T# u; r8 m
return m_Item.nIndex;# t6 ]4 B# ^" }& Q% r1 r/ X7 f3 Z
}
0 L" [7 L! e4 t6 I% U# w4 G }
* A& W9 I2 w! p- G- P9 d return 255;
_4 \, N- O8 g% f+ M}
( S6 f3 w; N( [7 c/ ^8 g5 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& D+ d8 |9 z8 b- `
{5 T3 r* n* a$ L- ]* T1 k/ ]
BYTE nTmp = 0;
( s7 r9 `3 e! c0 c5 i6 u bool bDest = false,bSrc = false;, m* C. W/ s, z/ H* C* S
for (int i=0;i<MAX_INVENTORY;i++)" s# j5 m5 K$ q. p$ G: _4 R
{; y: q5 _+ G3 I3 ]6 m) J
if (dwSrcId == m_Item.dwId)
) Y' X) r" A& U; e) t! T* y {
# y/ P' o! J5 r4 i1 @- S* H6 K) a- q //id相等 则 改变对应的dest和src
# w( M0 D& a4 U5 { nTmp = m_Item.nIndex;, T3 O! h' L8 X4 [, k0 W7 I! Y' t
m_Item.nIndex = dest;
+ j: Y/ n8 k4 o# H8 _ }6 u, F+ i2 c0 S9 a7 W _
}
- f/ e- W/ U n: u //临时数据保存完毕,交换开始
& v( R0 C0 u7 Z T4 k- \ for (int i=0;i<MAX_INVENTORY;i++)
2 v5 l" Z& v8 N' W1 u1 y. z {& k3 ^( m8 V* _* l3 @: v
if (dest == m_Item.nIndex)* c, N' d5 ^ r% |* A# b% Y/ `4 n4 n
{
+ R$ @6 u2 k/ K+ g% q/ S Q3 A //id相等 则 改变对应的dest和src) S9 k/ e! y$ I' b: _
m_Item.nIndex = nTmp;
* G3 C! v& L! n3 R" h }3 `' h+ t& M6 w9 M0 g4 a1 \4 g
}
) P; ~; H' Q* `3 B) W}
5 `3 a! D6 U% P0 Y( D8 m};( Q8 s: @! @- m6 v. G0 d" ~# f9 e4 i" n
-------------------------------------------------------------------------
% ^7 G, k; U! J: O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 I, m5 b, Q8 h3 n0 H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& @3 F, ]/ w: V
紧靠其上添加:. ^) m0 ^# w* _1 V2 f$ W- O9 X
if( pWndBase == &m_wndMenu )
8 v3 A, n+ `% w; c; v& n{
* n( N- j8 _# Y! d switch( nID )
8 _5 T2 [7 j6 X+ T& T' t {
' c, e3 a9 H/ h0 j4 R case 2:
6 ?) ?- n9 r' u5 ` {' n5 L4 ]# `; Q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; @% U( P, f: s y/ e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 W4 h& }5 j* p/ H- r7 b1 z {
. \5 i6 g4 S7 f, o8 ]6 Z break;) E7 @7 M' q$ [. R: X
}; x9 O3 g5 B9 E, b, V1 l! s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- l0 ^' e4 | n. a. D$ P6 H {+ t+ q q2 f- g' A% B4 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) [" u2 j6 a% F# o6 F+ ^
if( !pItemElem )0 r- r! Z& q; P. B
continue;
4 F4 f. n: g/ a* j9 [ if(pItemElem->GetExtra() > 0)
$ Y) Q1 \' z2 f9 D# d continue;# l/ Q4 p- a1 D2 E9 H; E! U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
E. ~3 L( B( } continue;4 Q. E# ]- U6 ]) C- J
if( g_pPlayer->IsUsing( pItemElem ) )0 v! k4 ^6 z6 K$ @1 G% J
continue;
9 y" m- Q+ b* M& G% i( G if( pItemElem->IsUndestructable() == TRUE )
( W/ }/ @3 N. C1 ?! ^+ W( b, x {
- B' D( @/ F9 l8 T" k g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! l0 n. Q! C0 j }3 e! Y+ T8 R: R* h
continue;: u# q+ }- v! f: P
}- X5 C" }6 Q& U
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& v, ~0 ?0 ~$ ?! t! R0 G' d
}
* S$ K4 `! @6 `, |! x4 ]7 S break;
/ ]% L1 v, x+ f5 M6 L0 A }
* s1 b( F5 L8 } J' D case 1:
6 E- M& ~. k7 {$ u {! S& w" w7 L% o0 Q- \- A# l6 p
//整理背包
9 O- e5 j! S6 N- ? //////////////////////////////////////////////////////////////////////////. L1 s' R$ A7 o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 Y$ x4 F; Q" }& n# ~! w3 X5 X0 H) J //////////////////////////////////////////////////////////////////////////; t w& r4 M( J, _; c+ e/ V7 Z" k
//////////////////////////////////////////////////////////////////////////
( U/ B, U# E: L9 ?, K. V! C" y" X; D CInventorySort* pInvSort = new CInventorySort;4 O& h( y Z; J3 g
vector <sItem> vItem;
& P: F4 M W* l" _" d vItem.resize(MAX_INVENTORY);//初始化大小
: o8 W% b, u9 m/ r2 b0 o6 f //////////////////////////////////////////////////////////////////////////
. B, \+ H: U# e- g //填充数据# L- _( r9 ^6 z5 s: P& u
for (int i=0;i<MAX_INVENTORY;i++)
2 M+ L7 } h( U6 I/ Y& R$ V {
- |+ k' J9 o2 ?3 p: R. t- \" [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, |4 W0 o3 ~# g7 f if (!pItemElem)
7 e6 S8 ]2 d5 w) j: X: \ {# u" a+ k. }" {' k ~9 C5 [
vItem.dwKind2 = 0xffffffff;) g( k: ]2 o& Q& g$ |' i
vItem.dwItemId = 0xffffffff;3 `) w1 y, t: E: w4 J; g
vItem.nIndex = i;
8 i) x' _4 F; R! B& a8 B8 ? }else {
% j( W; y! W, A& J* ^) P ItemProp* pProp = pItemElem->GetProp();
7 w; J% Z$ W1 E1 w( D1 g$ {& a vItem.dwKind2 = pProp->dwItemKind2;8 s4 D! ]# k5 z: D" l
vItem.dwItemId = pItemElem->m_dwItemId;. p7 D) {6 K' [+ p
vItem.nIndex = i;- c b- n- _3 T, ~5 C7 P
}6 U. `- W x4 g7 }8 P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 H9 T! O. _; L( i6 b; A8 v }! B& a. X4 k' e2 T/ l
//////////////////////////////////////////////////////////////////////////
6 M% I) @0 ^& C# h" C1 u sort(vItem.begin(),vItem.end());//排序
& a1 t: _* Y( s2 t //////////////////////////////////////////////////////////////////////////
1 _# E4 U' W; r6 Z //交换
5 P4 V7 _, L2 h/ G for (size_t i=0;i<vItem.size();i++)4 q, I) w; ^& [# E* n2 m6 V
{- @0 P( h/ p$ |, l5 \5 @3 l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ \' r. j; M" w% ^, a1 t0 u9 E. \
pInvSort->Add(vItem.nIndex);
2 d% [, b" O V; G$ F) `1 P }& K: r5 @" H# |3 L" m9 D k
BYTE nDestPos = 0;' A' o2 _# B- {/ F
for (int i=0;i<MAX_INVENTORY;i++)# n3 e' |' Q+ p6 L" I2 @, u
{
4 C: r% A* m2 b) [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& I* s+ M: b! C4 p7 U$ A- d% v9 y if (pItemElem)
; U- }- J0 P/ {% {) j# Y1 x {9 z1 _4 b0 B1 P1 z/ E- i
if (IsUsingItem(pItemElem))
( H$ H0 [ ]& P/ H {
* c, d% R. v, }- x //这个位置无法放
# c1 |1 z: l) D nDestPos++;
{, R! |4 ^( H }% ?; T+ U- H6 ^! [' ~* e, \0 t
}
# [& }5 o; d8 Z0 z ~# G( K3 v BYTE nSrc = pInvSort->GetItemSrc(i);
- v) z* K# F( ^& ^' }( q3 | l pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" D; _) h5 E3 R6 t3 I1 [6 K
if (pItemElem)- Y% T/ O4 X2 o$ M3 {$ X }' x5 N9 l
{: D$ A" n/ _# a' n1 {
if (IsUsingItem(pItemElem))
8 z3 `. Y! E r( w: J {
) F! c, d0 ~8 |) g% v$ _ //这个道具无法移动,跳过2 U6 P5 s# s9 q% N+ N) m i6 I
continue;' u$ Q+ _/ u, X% m4 P" s
}
" Y: {, ]+ \! N# q1 W" p5 ?& b }else{; v; n! \) c, U" F( ?2 H
//空位置 不用动
! h2 }; W! Z, \, y( l; K7 q continue;
* P/ W! u/ D( }7 p }
: k4 K! @& h4 b/ Y; s: a: } //////////////////////////////////////////////////////////////////////////
% K& H) f* K2 ?( g. r3 t) H9 R //开始移动$ l2 j5 V C5 E# y, B( D
if (nSrc == nDestPos) L5 p- O7 ?, A3 T6 Y! \7 r! w$ k
{
) r7 p2 x/ g& n1 p3 w1 N" T; L, l //原地不动
1 ~9 A A8 a5 T nDestPos++;
, H! c0 W/ Y, o, y' E! @# L3 ~ continue;
/ r# [( S8 A- H% L3 I" a0 b2 u }7 x3 ^8 V$ g1 q+ o
pInvSort->MoveItem(i,nDestPos);& d1 v S3 D8 a& Y- ^. B
g_DPlay.SendMoveItem(0,nSrc,nDestPos);: j) d V# P8 E3 s: U
Sleep(5);
. n3 E8 X! V2 _& b. n //Error("移动 - %d->%d",nSrc,nDestPos);% U$ b' s0 q. g
nDestPos++;
- t/ C1 I. _; X' U4 L2 ?( H }* _. Y) [& D3 ^' E' O
//取第一个元素的信息5 d5 c/ D V8 ~7 ]& m6 U
/*9 j" p3 T1 j v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! F. [) q d5 F0 E! w {( K- W2 f/ B) M9 j0 ?+ l% l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: Z& o( u) C; C% O |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ z% U. j% Z- @$ g" k }
. D) {* W* L, i0 [3 h */, A- ~3 Y7 q0 Q9 V* U3 r" q
//////////////////////////////////////////////////////////////////////////1 Z4 L" P3 |; E8 U
break;
1 u8 `9 S& {5 u8 w7 D* I7 S }& g, [3 g) e$ `- u2 [
} * w; n, @, e) I
}: Z# r5 s4 K: Y0 g0 T- [
m_wndMenu.SetVisible(FALSE);
8 G' g7 K5 @/ j( b- L h6 x: V {6 ]) O( y2 [
--------------------------------------------------------------------------------------------------------; b8 N3 h6 C( k: s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, v* e* Q1 {7 X8 U5 [( ?- [{5 q" G+ S7 o% K) n4 V" V) W
BaseMouseCursor();) n- F0 E" Q- r+ c9 o3 ?$ @
}
3 R( r& [. A% n% q3 X4 ~: x+ d在其下添加:
: j) M! R( I3 B4 Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) s1 X7 B4 P( p" r2 r
{
( H1 S. }- i9 r* h8 B8 u+ ym_wndMenu.DeleteAllMenu();# m6 }" b& @! u4 S+ ^. B
m_wndMenu.CreateMenu(this);
" L2 O g+ A. D0 e' B; n6 y& n6 \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 e& p! }! v8 u _. w
* V' l1 d/ I' k3 j4 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 p- g! _$ m, A" E0 m{
" j6 K5 C" s+ Q0 h j) @: n //P以上级别才可以删除所有道具( Y2 ^' D1 h) f0 [& o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 P; k4 O% H" Y
}
- a0 U' {* \8 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ c0 t+ M8 }, l5 Q: L" ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& m ]2 i) H e0 S, ~8 ]m_wndMenu.SetFocus();
8 g9 g( h' T1 ]7 [5 Y$ S, u}7 X; f/ f) R- |9 m: N Z8 u
------------------------------------------------------------------------------------------------------------
: s( N4 g! D7 V0 Q% m*************************; d- V/ h, e y7 F6 K1 T
WndField.h文件
+ u' V; `3 k, `6 U/ q( P+ }*************************
8 n( b: n- h; v5 c* I' L搜索:BOOL m_bReport;
8 d) a; ^2 p! s" F6 w2 N# j其后添加:
, `9 u2 Y/ p- c9 {# c9 cCWndMenu m_wndMenu;
9 B1 @8 l9 w( n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. W- ?& M0 ^3 L" h2 X' j
其后添加:
) ~8 \ A! \- V" y7 ]7 C: svirtual void OnRButtonUp(UINT nFlags, CPoint point);, [# @: X3 e& H# K* j4 I% E
/ K+ n% L, Q! l2 z4 O& b! P% v! G. ?8 W
|
|