|
|
源文件中_Interface文件夹下WndField.cpp文件
4 t+ O7 K0 F+ K) Z+ @搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, k( J e+ \1 |4 B* V
8 I$ R) j/ [1 Y& qstruct sItem. q2 @' L' S( h+ j5 P4 _. T
{8 N2 y" o9 v) l* z1 _5 l( m
DWORD dwId; ]' C* b1 _$ O8 y6 Y3 _7 r
DWORD dwKind2;
5 n6 W7 l8 X4 e, \% r. [% v8 PDWORD dwItemId;
1 @ ] m1 U6 w ?+ tBYTE nIndex;1 e% C, X7 M% _* [. O
sItem(){! J4 E: Z) p* h- U2 T1 \( g6 m
dwId = dwKind2 = dwItemId = nIndex = 0;/ _+ `1 f/ H. ?
}5 K% m4 C9 Q4 l1 t6 i% Z' ]* A' [
bool operator < (const sItem p2)& m4 ~( ?6 H& x7 P1 J$ h, a6 [
{
: e1 g; z# e4 J9 n, {' | if (dwKind2 == p2.dwKind2)$ X5 w8 z2 ~& c) o& ]8 G# @! T
{
& K( _; B b1 Z, n O) s, ? return dwItemId < p2.dwItemId;; x' z9 U J, i
}else{ s& g. o9 @5 W. M: m" T
return dwKind2 < p2.dwKind2;
$ s3 P7 y$ U+ H' g2 M9 h0 H }
2 z1 ]9 g8 N8 ]" N$ z}
+ @- ?3 P* i, V6 V8 o2 L4 N+ @};
8 k i% _- ]% ^: r. `7 G- Sclass CInventorySort
) P6 h: _2 q7 l. {: V{" ^5 k* _6 C9 q" |6 c9 m
public:
( @/ r% [0 S7 P9 Y0 u" @" hCInventorySort()
0 r; \$ I+ f3 S/ I7 ~{
3 n: B& ]+ Y( W0 J' B4 p4 Y# U m_dwPos = 0;
; V t. P$ }4 f5 L}" W4 x; n5 v0 [1 G# {8 |6 B
~CInventorySort(){}+ X3 w0 N; V* Y1 ~2 d
private:. X/ J2 { K$ b* U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 i4 a) O$ D& R; }DWORD m_dwPos;# b1 o- ~" H$ @0 j
public:
7 g1 ^- b* s$ I# D+ a ?9 Qvoid Add(BYTE nIndex)
4 z) x; [* m2 F{% z/ h5 n: V6 o- z' [, f! S
if (m_dwPos >= MAX_INVENTORY)- c" A0 |. e6 v' }8 N* l
{! ^ {4 q7 L7 D6 U. Z9 N5 k' X2 G
return;: t9 o8 J% l, M* x4 O' z' l
}0 ?/ {$ z+ V% Y6 h* z3 t2 z
m_Item[m_dwPos].nIndex = nIndex;1 E; v' x) i7 C1 \ n
m_Item[m_dwPos].dwId = m_dwPos;8 K4 ]7 n& ~; l
m_dwPos++;) k; ]) z* y% r3 X3 Z" D
}' _/ G, f* w- k8 q' g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 d6 T0 y8 e5 e% J) T1 z/ u1 G J
{
+ `( u( \8 u j7 P! w4 P, T for (int i=0;i<MAX_INVENTORY;i++)
l& a! A* u' J) c+ [% s4 b {
7 L; Y1 [* {$ @7 T9 o if (m_Item.dwId == dwId)) c! b- z) S' h+ z+ w8 m
{
3 s( P ^( W% a9 }7 k1 { return m_Item.nIndex;
' v0 g/ o. J2 p7 i }( S3 c ~$ E8 ]! u
}
8 @* h. @7 p1 }4 Y/ V$ r1 _ return 255;9 a# |" g6 a9 X; v2 g- W& n- F$ t2 F6 X
}
1 N" g7 l" j8 Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 g( n% `: c5 |# y) T
{
* n/ W$ L$ Q* |. y BYTE nTmp = 0;' A8 Q+ l. ~7 f! ?: f
bool bDest = false,bSrc = false;
; s6 X* r2 B4 ?' `' s. f for (int i=0;i<MAX_INVENTORY;i++)
! |6 r0 p0 i1 u- b {
, o% U- T( w& M ^ n# D if (dwSrcId == m_Item.dwId)" e+ a1 c/ b5 h# D, U4 ]
{
+ O- M" P8 A, u" i. w& H& _" l //id相等 则 改变对应的dest和src5 r' `' K8 b# c9 v7 S6 ~
nTmp = m_Item.nIndex;
# j$ R P; V5 U/ }/ z m_Item.nIndex = dest;4 z- m/ H+ m k( j% J* @2 |) ?
}0 c0 Y/ P) V* J" ]
}5 @7 y3 s) t t* k
//临时数据保存完毕,交换开始4 K% H6 b/ O0 O
for (int i=0;i<MAX_INVENTORY;i++)& q* T2 q/ ~8 Q1 G
{
, T5 e6 n% a8 _, ^, J3 P if (dest == m_Item.nIndex)
) e( K9 N8 b! u: n7 N( F A2 x {
) \8 Q; Y) f5 w5 H //id相等 则 改变对应的dest和src
* Q* ~; U0 W: j9 P m_Item.nIndex = nTmp;
* ~" t+ W; ^. `$ Q" z! i }5 S1 h# ~8 e/ z, r- h7 K: O
}: g9 A5 s R8 a5 m X' Q$ }: d
}; ]0 m6 Q1 X i& H& z6 ^# I2 k
};
) x* s" @) @0 a5 ^, M6 S-------------------------------------------------------------------------, a" f+ V d2 n$ D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): J7 P* b1 V+ M
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" e* ^' Y: s- v3 J紧靠其上添加:
6 ~7 ^' x$ {4 L1 R1 Sif( pWndBase == &m_wndMenu )3 Z; p; J2 }2 c! `- |
{
4 g, E# {. ^4 Q; ?4 R switch( nID )
+ P9 p& D& `+ B. H" S) E {; d9 D( w. A( {! i5 ]! X3 n
case 2:
) m! a5 N3 j& [/ d2 Q, Z, N3 U3 | {
- j+ t8 z c9 W. M8 o7 ^2 | //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( Z- o7 W* I' i( q3 m7 c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" I, [7 R3 k2 B8 ~9 D& v {
x" j$ F) {* L8 P/ z break;. G& z; n! K1 d# Z1 `
} x4 }& `% B+ A7 z2 t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 D" G+ O* H1 \. I+ ]
{: o$ k. v2 x9 N% e5 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& O1 u* Z. U& b" N+ U
if( !pItemElem )1 ]: i3 z1 w% X/ S
continue;
R: I. S$ g- N% Y. T# }7 ^" n' J if(pItemElem->GetExtra() > 0)
2 r# i5 r7 Q. O. @ continue;4 o5 m+ o/ w" z3 k" v$ A. H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! j9 @8 O0 H& G' M
continue;
T" Y& ?1 `( d3 y. D if( g_pPlayer->IsUsing( pItemElem ) )# U% D- [4 c& \3 e! v( W+ k" D, K0 ~
continue;$ u( I* K) E6 s$ P9 M
if( pItemElem->IsUndestructable() == TRUE )
* c' R$ Y ^& | {
8 J5 \. v. U% p$ v7 T$ l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! ]; D/ H6 `9 }% { continue;3 p% u" h/ ^+ u" L+ r5 h; B5 l9 W h
}
* d' u" }$ o3 y; K# y% a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' z" _6 y( k6 F! R
}* |( x" |% Y5 u7 t# {
break;4 u- V! z* A+ F" B3 j) @1 z/ }7 F
}9 s- r; h. |" i+ s$ L/ _2 J
case 1:
9 ^" W% T& d# v/ [7 }0 U; o4 M {# Y/ y! d1 w6 L, S9 V& v) D
//整理背包! b# P0 U" v7 P5 k4 |" I; A# ?
//////////////////////////////////////////////////////////////////////////! r! s% x% G* ]+ x2 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: X) K0 R+ T/ b& H //////////////////////////////////////////////////////////////////////////3 W) E5 m0 U5 e, Q# f# H
//////////////////////////////////////////////////////////////////////////
1 P. l) ?, ~' I6 R: f4 U CInventorySort* pInvSort = new CInventorySort;' v' \0 f4 a7 ?6 k N2 A3 J. s# y" r
vector <sItem> vItem;
/ H# J# G# h' } vItem.resize(MAX_INVENTORY);//初始化大小8 l$ s- g ^+ D* s; I# w
//////////////////////////////////////////////////////////////////////////% t$ M5 W5 v% B0 R% X2 X3 o- Q
//填充数据
& S8 ?. o, t" Q$ N! ]% z for (int i=0;i<MAX_INVENTORY;i++)& I8 i, G4 C$ w- k
{
2 c, e; y" {+ A$ ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 V: `. _0 p7 D if (!pItemElem)! |, }* M! ^. o+ [+ o
{# J/ n+ N+ ~5 t `
vItem.dwKind2 = 0xffffffff;# l$ u9 s7 I$ v* {
vItem.dwItemId = 0xffffffff;
$ w5 }8 ]! L, d5 \. N$ ^9 F vItem.nIndex = i;6 l/ Z% d, f% p9 ^% b1 b
}else {3 D7 x W1 r! f# A: M
ItemProp* pProp = pItemElem->GetProp();
, i. b. P* k1 X/ y8 f7 W5 a6 q vItem.dwKind2 = pProp->dwItemKind2;
* T- X! W3 f9 x& G" [3 S6 V0 v' `& S vItem.dwItemId = pItemElem->m_dwItemId;1 O( u' v% r( d% u1 V7 O) h/ V
vItem.nIndex = i;
* f2 h4 z# n5 ~7 B }
3 t' ^0 P9 ]& i/ K2 Y" V$ a- x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. K5 }" i' p9 B& V }
( M4 Z+ s# t! x; b5 L$ K //////////////////////////////////////////////////////////////////////////
0 k8 x; n) h7 x( }0 C$ a# U) { sort(vItem.begin(),vItem.end());//排序. u+ W% r% c. D$ b* @
//////////////////////////////////////////////////////////////////////////4 r7 U7 R; f1 H' X9 v: ^
//交换
0 \1 l1 u7 P* R9 S+ Q/ `& O& [ for (size_t i=0;i<vItem.size();i++)' k8 [# V! \, U: \/ Q6 W3 d
{
$ r5 Y4 x3 y' K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. y, l" ], v. m- W- A" E( m7 Z
pInvSort->Add(vItem.nIndex);
) R6 a7 z1 R: P }
* A$ k* B" I/ Y- s BYTE nDestPos = 0;6 B& @; L. q. E" E6 V3 w; q
for (int i=0;i<MAX_INVENTORY;i++): J9 U' t, B" B* ]4 b
{ r0 c3 p, ]3 W7 z; T# `% R, c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; A) W& j( B5 h1 z% W if (pItemElem)3 [+ i" L% h" u+ }; z
{
0 Y+ s b1 M( d/ P: X' O if (IsUsingItem(pItemElem)); R9 q" u+ Q5 V
{
: J3 ^6 V: c0 J* N3 m //这个位置无法放$ s5 O: x) [4 d" }& F& W
nDestPos++;
! ~; e/ s" e9 X3 h4 L6 @- p }
: D& Q1 c7 x0 V1 S0 H* V9 H }% Q9 }6 j+ X( X
BYTE nSrc = pInvSort->GetItemSrc(i);
; ^. j* P" ^. Q' Y i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. ^2 ?5 |1 ~- Y1 G2 T' X; c if (pItemElem): G% v- Q& N; L& a! d# Z6 f7 M* C" ?
{
1 Z+ J; h: u" H$ G% Y if (IsUsingItem(pItemElem))
2 K" w3 l& \4 j' t' Q, v1 t) @/ c {
& v. a% t7 M0 X; z# F, q c //这个道具无法移动,跳过
3 j* w" W% b! R9 U# c& x continue;% w: m9 f. W$ Z
}
) A, H, s5 Q. i3 {$ Y1 p$ w }else{" Y6 M6 z6 v* B9 \/ J( t" e
//空位置 不用动
" D+ O6 E- R% d' |2 m% z) s! v continue;+ ]1 g, f4 X7 C+ p4 z
}
9 p- U8 }, S; l, G I6 k' L3 b. O //////////////////////////////////////////////////////////////////////////. V. h8 D& d, w# m9 j: ^8 h. |
//开始移动
; m4 j/ y c3 Z/ Q if (nSrc == nDestPos)
5 Q, w/ A# n* X: K8 _ {$ m5 O+ M# u7 Y- [6 _
//原地不动, F7 z5 [6 p$ ^; e7 h6 I# \
nDestPos++;1 [: _4 h' G' a1 o' m8 `, j( E9 r
continue;
7 D! a; t/ r. U: ^0 Q1 B }$ Y* y' A1 K7 i' O% z
pInvSort->MoveItem(i,nDestPos);
$ ~* c/ Y6 [6 T% \ g_DPlay.SendMoveItem(0,nSrc,nDestPos);# e M7 t1 F/ j: o
Sleep(5);
- @ [( h5 c- e/ H //Error("移动 - %d->%d",nSrc,nDestPos);. S$ `' a+ j% z, G9 _; {* z) q
nDestPos++;" U3 ~0 G2 H% O: [# }1 e6 [8 q- d
}
- Q5 ^' J: l9 P5 O //取第一个元素的信息
4 B- B# ]" w: I$ m0 i /*
* O/ q2 s5 D3 ?+ x* e- ^5 `8 N& [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 f8 ^: J' v# f$ { {" K+ Y0 ~1 U0 Z; [1 B( Y2 A& ?6 Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 S1 b9 I9 Q5 n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 X0 m; `4 Q. f- x1 m }2 T+ C' A1 \: d& H' w
*/
2 {3 R+ X Q, I8 O" k //////////////////////////////////////////////////////////////////////////3 r0 G% O& e6 ~5 T9 d
break;
) K1 b( c0 }9 h. a6 X' J }: Y- j- y" T6 i: {
} 0 U4 A" N3 [2 J. D+ S! L! f( h6 i
}$ a3 ]3 n# {, t6 S! ?
m_wndMenu.SetVisible(FALSE);
2 g4 @9 {8 v( F# R
. S. ^/ q, E; j: q--------------------------------------------------------------------------------------------------------3 d- j% d8 g4 a; L/ _% D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, R/ T: M- c \2 G! B' j4 y/ s{. P5 g( {- f' q- d/ R/ F
BaseMouseCursor();
1 M. s- I/ l$ T% T0 E/ x, Y( u}& o% b3 Z. h6 N
在其下添加:
1 j5 @- D( o% G% t1 J; l5 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ Z+ ^$ [% d |- F/ N/ W
{ _) }* _: B+ l! V2 I# a0 L
m_wndMenu.DeleteAllMenu();$ @# Y( {- B8 z
m_wndMenu.CreateMenu(this);
7 I( n( K z) i% p( vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Y. M, [& H" U# B
: e7 S W$ Q2 q$ \, r; p+ Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ L6 f$ d5 i/ v6 q{
! `8 Y6 b! a' i* ? //P以上级别才可以删除所有道具5 h( K3 `& o& X6 s
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) i5 h0 p; N. I$ f; t0 N7 v0 U$ @
}
4 T+ J: F, P: y% g6 e* V; zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 s P8 h/ V' X/ J1 R: D8 pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. @4 h z( J% \' D8 r; r: R" V
m_wndMenu.SetFocus();/ o! e) s9 f: `9 k. ]
}, g, {$ i, k8 y8 v/ n
------------------------------------------------------------------------------------------------------------
8 j9 y; O% v3 g/ y3 F/ h* u0 ]*************************1 y( E h' h6 m8 l A( H) ?
WndField.h文件# m- H3 N1 {' J7 C3 @9 q
*************************
2 C" x ]9 }- G: e; t& l/ C搜索:BOOL m_bReport;7 x# O" n9 a1 J- Q. W
其后添加:+ d& S* p" x6 a- x1 e" v: p( p
CWndMenu m_wndMenu;
" [5 E0 j9 J3 n& K; \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 q' x! @7 i' `# B其后添加:
- ~! g) H0 E. }+ qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: z9 i% i! \" I; m8 U: c% |+ s2 R v( `/ h3 _" r ~0 k& o6 o( Y
# \+ x% d0 z8 I# O! |7 t \4 l
|
|