|
|
源文件中_Interface文件夹下WndField.cpp文件& |5 {1 t2 ^, s v; q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 T) t- s) Y" O
! D8 d! m; Q& }. ^# istruct sItem' p4 j* _) a; k) m: c7 `, j
{! B6 f/ [' Q; p4 x
DWORD dwId;
) {8 ~% b. Q7 [2 SDWORD dwKind2;
5 i9 X( ~: ^* w& cDWORD dwItemId;6 E/ s8 r6 F. }% D
BYTE nIndex;8 Q8 p9 Q/ x4 d5 P
sItem(){" d. C% ~) M' R D8 a5 ^
dwId = dwKind2 = dwItemId = nIndex = 0;
9 A, w" H' X# I5 E# I+ K+ r}
6 {7 K, D# |' s& rbool operator < (const sItem p2)" c) `; v. p% j: E/ L+ u2 p3 h- N$ }
{" n* `9 |; s# Z# a- x* A0 `- [
if (dwKind2 == p2.dwKind2)
' j" K7 x0 H! P: [# M% c# | {
6 ^: a2 x0 P- r' b return dwItemId < p2.dwItemId;
& {' o- t. U% l N3 { }else{
& a. x+ h: d/ l; i0 c1 @2 I return dwKind2 < p2.dwKind2;7 G: s, y0 @; L6 b/ ~) y8 F
}
+ L7 O) x' ?1 l' u0 V}
7 i# b7 C! E( B6 N};1 U4 z* y2 w& {2 o
class CInventorySort
7 @- t) t4 O) \8 @! z0 O{0 e7 y/ W" Z( ]4 {; u
public: G# K* w7 e; ~6 a
CInventorySort()# J& ~3 F$ b/ H5 D) F
{) I0 c+ B, m; M; Y# M' i4 q
m_dwPos = 0;9 U2 @7 l# L4 k7 G) N
}
1 M2 F/ a3 O& P6 T o~CInventorySort(){}$ ?9 n6 k$ X' `2 t7 z4 Y) D
private:4 f$ q% B- O& r( P6 m, N, c, ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' X. R. q7 P$ ~6 [( a$ VDWORD m_dwPos;! I# [: m# j+ L; L2 y
public:. [1 i( H: m; J% z2 ^/ p! o
void Add(BYTE nIndex) {0 m$ w* k3 k* {& A+ E$ ?
{
# r0 a' S2 ?* [7 O if (m_dwPos >= MAX_INVENTORY), B5 P8 |1 I: E2 W
{
9 |% z2 `9 B5 @ return;, c9 u0 o0 S" h) o& [# B0 o
}
% Y& i# s! d0 _* q m_Item[m_dwPos].nIndex = nIndex;0 r. M* O, V: M
m_Item[m_dwPos].dwId = m_dwPos;
$ Z. U1 C" H6 r m_dwPos++;
" g q& A. X) B6 \' N}
' v. R0 `5 d4 bBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 B: b9 T/ }* m M# K# p$ }. e. ~" a
{; U4 U" N9 \6 k9 K! G: P
for (int i=0;i<MAX_INVENTORY;i++)
. a8 m8 p7 C6 Z5 d1 D$ n {/ G# @7 F$ p9 G# P1 m5 n& M$ y5 g! U
if (m_Item.dwId == dwId)7 G7 g1 F" A+ i
{
6 | l, c# a! a% Y& h& _, B return m_Item.nIndex;
/ b5 g3 G2 U& g( S3 o0 A }* S C( q6 a" \5 n5 }! p
}
" W% d0 t: t+ S# }# [: V$ o return 255;
, w! O6 i8 J% O1 N* |8 ^}
" V% ? v b* t2 d/ bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- _: H5 S" ]6 P{8 u. z8 r( `! w) w8 E
BYTE nTmp = 0;- l2 `4 ~: ~/ P! P; M) |3 X, [
bool bDest = false,bSrc = false;
8 {7 I7 ?; T( u for (int i=0;i<MAX_INVENTORY;i++)
# L% \2 e- l6 [) r/ r. j# T! r {! K' @8 _4 c; D, |5 ]( d" m1 s8 [
if (dwSrcId == m_Item.dwId)
) Y# {# M- W3 M+ H& ~4 ?" v {+ {- X4 m5 n, i1 f5 I+ B
//id相等 则 改变对应的dest和src
( G4 P3 K S3 b3 I0 m9 P$ q nTmp = m_Item.nIndex;
. @2 r, q- L7 o7 R- W6 y' u- N m_Item.nIndex = dest;6 s2 ~* s4 A% O @1 M+ R
}
! h9 c. N- ] E% z/ y& f }
4 s. A% r8 R1 S //临时数据保存完毕,交换开始
. M4 P" q- f% N) D7 T" }7 ]8 y for (int i=0;i<MAX_INVENTORY;i++)
9 ^/ S4 b- I0 `0 ` {
% C' o) g& k: z) @' g( H6 O if (dest == m_Item.nIndex)
* C0 K1 q0 D$ _: z7 M, I: y( W' O {
" L% Q8 X5 W' ]4 j5 x+ E$ O; | //id相等 则 改变对应的dest和src1 K( G: M; h( k8 V! L
m_Item.nIndex = nTmp;) p) O6 z* ?8 R
}) l8 g0 L' G8 ~8 ?
}4 E! u& c2 S1 ^$ j) G
}
' A3 O; i2 a2 `7 t2 `9 K};3 g7 c2 E- S5 {" u/ V' n9 ~ I% P
-------------------------------------------------------------------------
- V4 d/ X% r& x% Y! j) L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 i2 S2 A' o7 j* T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ U; H1 a3 ?$ y2 ^
紧靠其上添加:
+ S# S+ N+ s8 n: D1 m7 m+ }0 A; Gif( pWndBase == &m_wndMenu )
! u9 z0 K+ h( l* w{
4 w. O- h: L( F7 E- L. d switch( nID )& g" z! S( i3 e7 y3 e( M
{
0 H# r( z' d; O$ F case 2:" s7 k7 [& ^7 [. B6 s, |
{9 P8 x5 e" z: O" k# l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' J: W2 A8 z& C6 l! @* f( f) m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' ^6 g+ t4 p! C; [* z7 @
{
; p7 I: Y- c4 @8 q/ V break;
! \! Q; u1 v' f; S( j8 m3 P" D+ o' [ }
, t. G, O- H9 B) r) ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, ^, n$ N* e# L. L! f: K {
& T; W% W$ H, p1 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" x5 h5 n2 b6 i" ^/ k7 u2 i
if( !pItemElem )
1 w+ r- C% j$ w continue;" k4 n! C7 T6 J( P# l+ E) K; B" v+ n9 @
if(pItemElem->GetExtra() > 0)
% y; S- o$ K% N1 j$ q8 G5 n continue;
5 I, B8 h d! [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" Z3 c9 ^, X3 W/ T& l. d7 p" c continue;8 b. f2 A5 \2 Q( { }
if( g_pPlayer->IsUsing( pItemElem ) )
' `5 b- x! m8 q, ` [8 I2 Y continue;7 T' w/ T! x! F/ r, w& I
if( pItemElem->IsUndestructable() == TRUE )& w1 B5 p, @ @4 U1 \
{
/ T6 G, r% S# m/ H2 ~3 T7 F+ k g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! [ S5 w; i- ?/ V. H" d# A continue;
1 m1 Q2 l. v. u7 _, v }8 U* y* `1 g9 G" u! [ ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 m0 M; u0 Q. c( R6 T* O" {8 O
}
. L& u/ F8 f: X9 _ break;
1 W0 R) I% B. y. {# n. ~ }: e) E( p" {) J& |
case 1:
' c6 g0 X& B6 z" n+ m# F7 \ {" @8 e5 d; T0 |) O# W, I" D
//整理背包/ S) G8 x. V' R) v% t
//////////////////////////////////////////////////////////////////////////* D/ ~; m% Y8 l5 R
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 h" {3 H; r: C! Z2 f+ e: S: ^0 o! U
//////////////////////////////////////////////////////////////////////////: j: x/ e! o" _+ d
//////////////////////////////////////////////////////////////////////////$ t- v- R Z9 N" c" W6 @& u
CInventorySort* pInvSort = new CInventorySort;; K3 _# O) L; ]+ P/ l8 ~
vector <sItem> vItem;4 Z/ A3 D" h5 G- X/ N1 }
vItem.resize(MAX_INVENTORY);//初始化大小
7 S/ P! h; _" r8 z, Q //////////////////////////////////////////////////////////////////////////
$ f" R( @: n0 o! b //填充数据
9 P* e6 d; h2 y' j2 W2 } for (int i=0;i<MAX_INVENTORY;i++)& g5 \2 R$ |% y% n/ j- T6 p" Y
{
! X: r$ Z4 z* W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 }, B3 F7 A2 O. |4 F
if (!pItemElem)
9 J' F K: d9 t! R {
$ x* ]9 o% G( A2 B* w3 L2 h vItem.dwKind2 = 0xffffffff;4 K+ o+ t2 k. t- j: a4 V
vItem.dwItemId = 0xffffffff;
# O0 v; C1 P3 U vItem.nIndex = i;. P0 X6 f# ?# x6 r4 B
}else {5 v* W# n+ ?- p/ ?9 O7 X
ItemProp* pProp = pItemElem->GetProp();: G4 [! X; g# {) q
vItem.dwKind2 = pProp->dwItemKind2;
: G0 S! G" H3 t; M; N vItem.dwItemId = pItemElem->m_dwItemId;9 t' r4 O/ ]& h& ]8 v
vItem.nIndex = i;! f1 `; @: v. }, m- {
}* G1 q: \1 g, ?3 L/ l
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( W( }* Y! c( @3 N. d2 A0 C9 B/ \
}0 X, E' C: i( P4 ^) F5 r( H4 v
//////////////////////////////////////////////////////////////////////////) c& G5 j1 B1 X: z9 Y! @* q
sort(vItem.begin(),vItem.end());//排序
" D6 X. s% O! s& d3 C% j //////////////////////////////////////////////////////////////////////////" d+ `5 |& d' i1 b0 ~( Z4 K
//交换% }& f9 P% O' t) }9 s/ @+ i! w
for (size_t i=0;i<vItem.size();i++)- h+ d/ l2 u0 ~) r; S
{
2 }# c8 n% \: A% [6 O6 Q8 a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; c0 T1 `% P8 o+ m pInvSort->Add(vItem.nIndex);; S2 o( ~ |$ T8 F
}
! f! k. A) t6 n1 ?2 { BYTE nDestPos = 0;# l4 P! ~6 W, v z+ ?: t
for (int i=0;i<MAX_INVENTORY;i++)# ^: Y) [. w/ a# E8 D# g5 Z) o
{
# ?( q# C6 N- m- v8 \, x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( X5 [$ r2 p j; B
if (pItemElem)+ b( Q2 M9 w" D8 |* o% @4 H6 t
{' v& ^2 G) |! \7 c$ A/ @
if (IsUsingItem(pItemElem))' ~- {: |8 h" K% z! D' t, w7 W
{3 ^/ L% U; R% E& g! R: x, r
//这个位置无法放
7 \# |* }) ^) ^! Q nDestPos++;
9 m) H! i" y9 ^: H, P }3 b5 X2 [/ J$ R& l9 l" |
}( g0 t% i7 _. s5 F
BYTE nSrc = pInvSort->GetItemSrc(i); c* b; X' {4 A
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, b& {. Y% c& m; @9 z- ? if (pItemElem)
. }; `4 ]5 y. w5 A( a, p/ Z4 n1 n. O {
4 b" H" f, z, D; x9 w if (IsUsingItem(pItemElem))) Z* ]8 b; y% U
{
! n3 u% L# a! s# O( R //这个道具无法移动,跳过& S9 v! \; l4 C& B7 J' D) T
continue;
8 h1 Q: o& O9 }. k }
' Z" X4 ^3 T6 S8 E5 n, H }else{
) `# N) | J, \9 v //空位置 不用动
: ^6 H3 g9 ]# b0 |: v continue;8 s: @" s: ? A9 B; ]6 s
}! g% R, V4 `- S) H+ H+ l. h+ ~
//////////////////////////////////////////////////////////////////////////6 h* H8 Z) O- D7 w* ]3 c( B
//开始移动% f0 a, y& ~; E2 T( p) J, N
if (nSrc == nDestPos)7 K \2 m$ T& N5 u [- _8 i
{
2 Y4 F; ^' \5 g: @5 A. R& \ //原地不动
3 f0 p$ Y% K5 V& }! X nDestPos++;
: g# H/ z9 T: r* u continue;; q6 ?( L$ K& D& s2 j) I v- c
}
! p4 B2 U6 _# g- S6 h3 W( V D# b pInvSort->MoveItem(i,nDestPos);" ?1 c+ g2 T& v1 s. R& G" M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. l6 P& e5 b8 I& b3 b* L3 V
Sleep(5);8 {& `, l; Q& b- c6 f& o
//Error("移动 - %d->%d",nSrc,nDestPos);
* |( q2 }4 g* w/ \# F8 M nDestPos++;
! O; J1 H& N$ K3 ^. ] }
+ e4 B x* G/ o //取第一个元素的信息5 {* f1 ~7 j: z9 Y, ^
/*9 S3 O) h5 |) ~4 [' w/ F: y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 k4 y* z1 O7 u) x/ W {
6 B2 Q% U4 q l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% `2 D+ f* }4 s! c$ p( i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; b% U, v( x" [' D% } }5 m6 k2 h# t$ T6 B3 _: @1 q
*/
" s* Y1 i% N O0 U$ f! L L0 m$ q ////////////////////////////////////////////////////////////////////////// \1 @6 t' [- e
break;% A4 p& B4 h1 Q3 n% s
}
) \9 b2 W+ @; F. F% N } ; Y! m' \5 t( w& z. S
}, j; T" P$ D; Q
m_wndMenu.SetVisible(FALSE);1 R: Z+ `7 Y# r5 g" m; Y
9 F5 K# r& g; @5 y7 T; S' C+ i/ j
--------------------------------------------------------------------------------------------------------
4 f6 Y4 R2 n9 Q' R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- Y* `$ N7 O) M! _1 N
{4 L* w: n3 _6 ` B& g# K
BaseMouseCursor();( w! A4 O( y- U: S. M
}
, O5 O3 b/ G0 p- v+ d+ A7 k在其下添加:
! W I0 z+ J# s8 [+ U! ^+ b; Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 _- ^5 n8 t( H1 F3 W{; b, @' q) G {5 I+ E3 H
m_wndMenu.DeleteAllMenu();9 C. d8 y8 i& r2 l/ S6 h& y
m_wndMenu.CreateMenu(this);
! y7 B% U2 n& O; T$ S: Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. ]4 d" T) e/ F" A1 `; e/ V: U# y, b3 ~ Q, A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- L; R4 ~6 I5 h L
{
8 }1 x/ |0 V+ { //P以上级别才可以删除所有道具
! o7 c3 d. s* r. v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% p i: P @7 P% G* E}
8 A! t# C: Q3 G/ b) `. lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 V4 s* Q4 L( s# N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 I" D, p' J4 W/ L p+ k( a
m_wndMenu.SetFocus();
4 X/ S$ |; s' Q' z- {. B}# @6 p+ u) G+ f, `3 f+ Y$ w
------------------------------------------------------------------------------------------------------------
. ?/ Q! j s, M, f E; r) I*************************
1 X* Q7 m3 r* Y6 OWndField.h文件
! U8 E6 H+ `) F# L$ X9 x. R*************************9 |1 c4 q) e: A7 g! n) M
搜索:BOOL m_bReport;4 n0 n/ o8 b) P- P
其后添加:8 {3 y* x( T9 ~
CWndMenu m_wndMenu;
1 j8 r4 d3 e7 ^0 v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 i. F6 P" m3 z+ J( M1 z其后添加:
; P' `: G: U- p i% P2 O6 Qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
6 f# n0 F" I% _" t) A. ?- s2 m* ^5 ?# G! i! S, N
2 {+ I4 S; O: L% t6 i2 Z |
|