|
源文件中_Interface文件夹下WndField.cpp文件
9 M- a- P! n: U0 v5 P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 C+ G1 }) O) g) O/ r) m0 |$ x* o
) i6 D% w( e6 e1 Gstruct sItem6 u" r: X1 B" G4 n5 ^2 G, g
{7 N; d7 |6 ]- @6 E
DWORD dwId;$ F5 C( b+ n% m& J+ K' `$ `
DWORD dwKind2;
" i4 n7 c; X0 q6 P9 `DWORD dwItemId;
( s& Y9 H3 u! k8 e& E# O0 WBYTE nIndex;
/ f7 ^8 L+ J+ [sItem(){( J2 n- R) ^. q9 V8 L
dwId = dwKind2 = dwItemId = nIndex = 0;
( x' @. k, ]8 @/ _* {, f, f* U}
6 H, K( o+ \5 R; }" }( U+ Y2 `" Bbool operator < (const sItem p2)7 X$ ^1 x0 y U+ j3 M& B
{
/ E# x& L D4 h$ E+ y if (dwKind2 == p2.dwKind2)
5 R* \4 k) h! w% [! n5 \ {$ c6 T% o1 o' S2 _
return dwItemId < p2.dwItemId;7 L! K$ ^8 d2 e- p$ D3 X8 O
}else{' J# N4 D6 ?9 u, \, w/ ?$ [
return dwKind2 < p2.dwKind2;
6 c5 |$ I! ]: Y }( R8 S$ }, b' [% D. r: E
}
* P7 N8 L/ [! W5 }5 h};
% ?5 e7 A4 S0 I5 s4 cclass CInventorySort
! h8 u3 V5 H4 Q0 g2 F. B9 ^{
' d4 Y! W2 o0 K. R) @7 z% Hpublic:; g; e2 G, ~" ^" ~0 P4 Y P
CInventorySort()! `5 M Q- N- R& k5 o6 M
{1 e) W; I5 E9 U% A. @
m_dwPos = 0;
+ g1 t- I+ V; d! w1 S7 r}0 o* t% m) h( U9 f( T
~CInventorySort(){}
4 M+ |, C. a' {5 U) gprivate:* E8 ^5 P! k" w# |( f4 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' {! J2 y* _ U) m/ ]DWORD m_dwPos;: k* M5 J# a/ |+ B) ]% N
public:
$ E2 W4 ?6 t1 ?* }* `* S# T9 Kvoid Add(BYTE nIndex)
: \- x( K0 _' p3 c( [{: ~9 Q5 A) j7 w: } d/ U( D
if (m_dwPos >= MAX_INVENTORY)" c" x9 K- |) ^( [
{
: e5 s" V, p6 z return;6 j ^$ Z7 i) g) K# f# X1 ~" b
}
5 N( T" `- l: k m_Item[m_dwPos].nIndex = nIndex;
/ X* e9 O5 i! Y, r( i% r. X$ n m_Item[m_dwPos].dwId = m_dwPos;8 V# c! H ^; J" y$ n$ ~* M" P$ [
m_dwPos++; ?4 c: l; E1 n. B2 x+ K; J
}
: e4 i7 Q- U) `' o9 a/ H% O) s7 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) k8 o n' h2 K0 j) Y, o. A1 ]
{
* C/ L. v2 `! X3 e$ ? for (int i=0;i<MAX_INVENTORY;i++)
T6 D4 F, |0 q4 x, |' ` { C0 J9 t" J- \) m# g
if (m_Item.dwId == dwId)7 f% }- @1 h& m2 K( R4 [1 e0 ]6 I" ~
{. @9 l: {) K! N6 {& h }8 y8 f1 @
return m_Item.nIndex;
& L8 t# ^) e* \ }
3 e! y. p {0 s! q }
- m) h4 ?+ m1 } _/ L5 Z" h return 255;" p1 J T" D8 V% x, U: u
}% }- r/ W, n; F3 e5 [) ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& E9 v# j3 m5 q
{
0 i9 C! [. s& I, S4 s BYTE nTmp = 0;
+ w" c% E+ Q; T, ?; R' l1 R1 h# h bool bDest = false,bSrc = false;5 E' o8 A3 W8 G. a6 o) r' @
for (int i=0;i<MAX_INVENTORY;i++)
/ [) T: O+ |& o! @& m {
% i" U4 _; v* r if (dwSrcId == m_Item.dwId)
( _% t8 ? z% K {8 \# w |/ R" C: w% N7 m5 E8 ?
//id相等 则 改变对应的dest和src
3 G X3 Z& I) A& e nTmp = m_Item.nIndex;) A+ E- B$ j# ]" ~$ K* S' m
m_Item.nIndex = dest;
5 j0 C" q9 e: ?3 t }$ k* o8 v( J9 l3 b2 k0 o% L; x
}
! j# c) q- p' ^8 K8 P$ Z( X1 x //临时数据保存完毕,交换开始6 c/ g6 |. [( j: v
for (int i=0;i<MAX_INVENTORY;i++)
. W2 a( c; @" Z {
7 X# r# B2 O4 N" l if (dest == m_Item.nIndex)/ x# P9 M. a7 R" ^0 i& Z+ B
{1 q; X# A) ]( F6 } t; B
//id相等 则 改变对应的dest和src7 C( \# v* c* f
m_Item.nIndex = nTmp;
$ u9 W! T6 l# ?/ h }
+ l# \+ v! ]9 X. h0 y/ D }
, w2 T8 W5 S4 O8 e$ b6 x0 E}
! L. l7 d0 d5 N' V; z7 a( W0 t) v};; \7 n# j" ~* w4 i
-------------------------------------------------------------------------
^/ C4 K/ x% d# R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 m3 q( N8 B S5 ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. `$ A. [/ f) v6 L* ?
紧靠其上添加:
# p+ \. s8 e- p. Q2 Sif( pWndBase == &m_wndMenu )
; I$ Q( {7 ? D% ?1 c \# R{: ]# Y- \- L9 B3 t9 v. O! x
switch( nID )
9 M. @' m- X5 |* e {
& s' F7 G' j9 Q8 m3 _# G$ X% J case 2:
3 m3 }( h9 K. W, |7 q. z# D6 G7 ` {) W+ J: J' q. E) K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 M( z- J. s$ v# }. g0 N) i# ]
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 Y$ C# E: F; n, o) k0 @* p/ j {
: B) `3 t& o: B0 f+ Z# B& y: L break;" ~8 H5 \& l1 |* _
}
% R) L+ R1 w- l# L& i- u' W for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# W1 L1 b8 O! ?0 P {2 Y9 O. V9 M* |* u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
s+ y: ~8 s, ]; T( D3 J if( !pItemElem )4 `7 e, w7 _: H/ M' C( c) U0 j; w
continue;
* _: M( E* ?0 E7 V. s if(pItemElem->GetExtra() > 0): V3 ^6 n7 l2 p) O
continue;
1 K0 Z& ?3 A# V. i7 ~8 k) h0 x5 l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ q& i( y0 D) ^ continue;
. D; I, r$ t- f8 ^ if( g_pPlayer->IsUsing( pItemElem ) )9 X( R; A! @) N
continue; ?. @& o' }% G9 F2 M# S
if( pItemElem->IsUndestructable() == TRUE ) f' H' i2 t4 X/ I
{9 I& K& h+ u7 o" Y% @. C
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 a5 Z+ |4 m' |$ J continue;: ^4 E4 }! T- i+ E4 r3 T4 o
}
$ m! y7 a+ g9 ?7 _1 r g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% W3 R( O# b$ U5 Q$ x* w2 b
}
" Q4 ~1 z- J& q$ Y& H0 J/ k break;- a# j% J* m* h9 F
}' A2 q2 [% q' v" h ?: [# S
case 1:( \9 `* l. f$ x7 P6 R# c
{
- {, J2 H: B* @6 E- V //整理背包
% l7 i6 X* z- x1 d //////////////////////////////////////////////////////////////////////////
9 G3 I6 |0 j6 ?5 h; W. f: X% ~ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 }' X/ _) |8 |- o8 |0 J3 B0 r4 d //////////////////////////////////////////////////////////////////////////
. k: y% H; m) N" e8 u8 u5 y //////////////////////////////////////////////////////////////////////////% w% f0 {8 q* Y, g2 P- g5 O
CInventorySort* pInvSort = new CInventorySort;, ]/ d u6 I* Y, A" E% ]
vector <sItem> vItem;! ?0 }- o3 J' z" }% q9 E1 ^, w
vItem.resize(MAX_INVENTORY);//初始化大小# s( G2 G* [7 A0 w; i6 o
//////////////////////////////////////////////////////////////////////////
, W7 u3 C; a3 k- Z% i //填充数据
8 K: h* a% C# {; p& m8 @' { for (int i=0;i<MAX_INVENTORY;i++)/ D S. R. b: g* J6 ?4 ]( i
{
; [) t% T0 w+ ~2 C! G+ f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! k) I6 P1 Y2 Z2 G! m- o5 J' f& B: R if (!pItemElem)
3 h8 `' S1 w+ j- ^ {* Y$ m/ L" U( n! k: {. A
vItem.dwKind2 = 0xffffffff;
9 h3 v6 A4 L1 h; ]2 e( F vItem.dwItemId = 0xffffffff;
7 w5 R8 E. z7 K% H/ A. E, m" g vItem.nIndex = i;
2 E; S- l6 c. y: u& f8 N }else {) @7 F( k" U2 L; i! Q
ItemProp* pProp = pItemElem->GetProp();* q( d* S$ B6 M( L. R( P
vItem.dwKind2 = pProp->dwItemKind2;5 Z- G5 L1 h8 S4 Z l+ B
vItem.dwItemId = pItemElem->m_dwItemId;6 ~: ?# m: B) ^4 y h0 [
vItem.nIndex = i;0 X% u, _! q+ V$ [) k9 N( x
}
. |6 U, W# F# J' j, |; } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. F6 e3 g. M7 Y5 c g
}
. T8 ?! F' B' q //////////////////////////////////////////////////////////////////////////
2 _ C, m5 r3 m sort(vItem.begin(),vItem.end());//排序
/ w, O0 n- n- @3 e //////////////////////////////////////////////////////////////////////////# `5 a9 D( R2 X: i& j8 R! F8 r% Q
//交换
4 G2 ^$ t7 w; i" ^ for (size_t i=0;i<vItem.size();i++)
! [7 E2 x$ M1 }, Z5 Z R {
# e2 L& {+ d9 I1 F5 f H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 H3 O2 P3 [% [* H0 ~3 e* | pInvSort->Add(vItem.nIndex);7 Z: _" C- I( Q7 o
}) t% g) v) P$ g% f, r
BYTE nDestPos = 0;
' O) f) Z5 D% C( U8 a) f for (int i=0;i<MAX_INVENTORY;i++)" e& @9 t1 K4 A1 J9 \' j. U1 ~$ O5 Y
{
/ g2 l+ q% ?+ @' t: x# Q# {( a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& g# G" o# i0 G3 b2 ? if (pItemElem)
1 E' d! o" [3 W {
% M* V9 v2 |" m9 W h if (IsUsingItem(pItemElem))
3 T( V( e5 o9 E5 q4 w {
" [0 {% ?" M7 t/ L //这个位置无法放3 Y6 [1 L" h$ g4 ~! ]
nDestPos++;$ R; S1 a, m/ P9 K
}) g) S8 Q/ ~ N. X( G1 z
}3 ]) x. T; ?6 k- j' b
BYTE nSrc = pInvSort->GetItemSrc(i);, z) |4 C1 h% m/ P1 k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 u0 }. x8 g2 `# A1 G/ H A
if (pItemElem)
t8 e" T( h6 l" N4 g {+ a; ~6 z" j } r
if (IsUsingItem(pItemElem))+ V6 r# R0 j% h6 Z
{
! ?5 c5 b* x- t( W2 b( a5 i( j% N9 P //这个道具无法移动,跳过
; R* m9 d. R! R a- T+ g' Z* k _ continue;+ u+ {; V4 N: U& _% _ H
}
* a. v7 {8 [6 D+ x3 m }else{- y0 p: ]. s4 u: c
//空位置 不用动( m6 T$ P# e4 g1 D% W; m
continue;
0 ] @. b. s9 e3 g1 F2 c }- U7 {4 U1 ?% D/ z$ F7 p0 m
//////////////////////////////////////////////////////////////////////////
" F h/ ?" k/ {2 |2 G1 U //开始移动' x3 S+ X# o* K @1 ]3 V
if (nSrc == nDestPos)9 B8 K7 x: r) z% j# e# n: s& Z
{- ]2 \* N9 l6 Y$ s; V
//原地不动8 P/ `/ N7 W& n* z# P# d D
nDestPos++;
+ z$ S& E, K7 \ V7 Q, ^ continue;9 q+ h. y/ C" k
}4 W2 D- a* n4 |5 `4 ^; p6 X& T2 T- s
pInvSort->MoveItem(i,nDestPos);
) I$ T6 V! z' y" z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) C! T7 C5 S. a" ] Sleep(5);
2 L( }# z& P$ {& n' h //Error("移动 - %d->%d",nSrc,nDestPos);
0 V( G$ n2 q* R; A# f. | nDestPos++;
7 W9 M: _8 j% Q9 q' q2 F }# m! Q2 a- v# }. M
//取第一个元素的信息
$ ]$ c# K- [1 y4 F8 b /*
* }! {! L. n$ ^1 e: J8 W, X if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% D& D; M- F" H {
9 S( M& M8 @% v' T/ e; Y) v& ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( D" l% h9 R. L0 I: } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 | p3 P U5 ~( y$ P* }' X
}
8 |$ x% N. |5 [! E; ? */
; V( [* A# J/ ?$ F //////////////////////////////////////////////////////////////////////////) L1 s; x# `* \1 a
break;8 D6 O% h# _+ E; ^
}
$ z! j0 Q4 n, l" F2 d }
( I& g+ B( {# l' \" e}
( y% O8 m3 ` ]! Tm_wndMenu.SetVisible(FALSE);) Y' S J5 Z8 J. H8 _
3 b& r$ B3 N. w. }
--------------------------------------------------------------------------------------------------------
6 u4 U* J* o2 O$ h# r9 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, L* }$ ^7 q/ f- G{
5 U# e5 u8 n8 H# b( [, e. N+ JBaseMouseCursor();
; i. H9 P8 j; H$ |}/ ^3 b6 ]# j/ C& I' t V, S
在其下添加:& P! p1 O0 J: e9 e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) I2 d( ?8 {; a7 V6 N{. o+ H6 c# f4 }7 A" @8 N4 c
m_wndMenu.DeleteAllMenu();
! `+ R. z( q, b# V$ n( ?3 C2 Am_wndMenu.CreateMenu(this);
& Y9 g# g4 q$ j7 Dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
_8 A4 c* J, n# h& Z" ` |6 _! n& X% Y! t* g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ g4 l5 u! U2 \2 C! `
{
) f3 F+ {) E6 x9 I6 C1 m2 Q* q //P以上级别才可以删除所有道具9 K4 r) k; n# t, F' W& b5 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% S1 n4 t' C- `% k) A* y2 n* Y; ?
}( P' G' D7 ]( d% ^' R p5 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 P& F* z4 [1 ], E- T, T# t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- _& F2 U0 [% F' H
m_wndMenu.SetFocus();# h: [" l7 a9 d( l/ m7 t& N% f
}( X+ }! M' K) }1 @ u4 s2 H
------------------------------------------------------------------------------------------------------------ u$ f2 A3 S3 O2 t$ Y
*************************8 `! `6 M- C* b- X' A7 Y( h- K
WndField.h文件* D/ a( M6 z. k2 u3 x
*************************7 s$ l8 b9 J9 g7 S
搜索:BOOL m_bReport;
. j" z7 o( u. z; ^! u u/ t其后添加:" _; R+ |: b3 _
CWndMenu m_wndMenu;
; @, v* A6 S, n- u; t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 h0 t4 Q1 I4 W其后添加:) W0 i5 F/ R& R$ I9 g
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 {- V6 r! v, F- _9 Y' H
+ O4 \, f% G: i2 ]1 o7 z6 x/ }6 ^/ j- `; ^$ w, `3 S) F
|
|