|
|
源文件中_Interface文件夹下WndField.cpp文件
! R3 e d A* H/ p; k- \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 ^/ C0 k$ C& G+ c3 u, Y6 y
' y2 f0 c+ B. M4 e8 a- }struct sItem
7 p. U% K9 z0 u9 W/ Y{
" U8 q7 {4 `( l1 o+ I9 GDWORD dwId;' r( [6 ~4 ^# ~# K& y( X" ? N( D
DWORD dwKind2;
& h6 q* ?$ _9 jDWORD dwItemId;
6 q+ u! j$ Q$ r" L3 q! ]BYTE nIndex;, U! r6 e! f& Z4 z0 M
sItem(){# g) r( {( G" r! j7 H
dwId = dwKind2 = dwItemId = nIndex = 0;
! e( Y3 {6 f+ z4 y1 J}
0 V6 u8 \" ~5 b1 ubool operator < (const sItem p2)9 M2 |; M7 V" f* [9 {, {6 M
{9 p0 N; p% c+ @+ y
if (dwKind2 == p2.dwKind2)
! o2 i3 J5 p, m" c {
( J. ~1 S* V+ r- k return dwItemId < p2.dwItemId;
1 S6 f6 b# m- c( U6 Y }else{
9 Y# m6 O) s- n0 s9 I8 R, C; @ return dwKind2 < p2.dwKind2;" D9 E P, n8 n/ I2 o9 m
}: E4 z, h, Y2 _$ Z: V/ Y% p6 P4 I
}
: ~6 A# ?* l: }- D- m3 l};' z# A5 y* ~; f4 |7 Y
class CInventorySort* @6 z3 U5 G* X5 w; C( ^5 \8 t
{
6 b& P$ ]% Y/ E- F: p2 ]2 r7 }4 c/ `public:
/ w1 h) h& r9 W! g8 N! dCInventorySort()1 t! X* b) g+ q7 X- @4 {! x. K( S( S
{" p3 B# O7 r: N1 C3 z, Q! [( P( w
m_dwPos = 0;, p4 `0 {5 h* d, F* i
}6 v/ ~0 g* K3 u+ C
~CInventorySort(){}
\( O/ U5 f5 F) _5 h$ Hprivate:$ [" K0 S& G7 Z% O9 I0 S: N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 e! @# H) c# s8 x+ R" {/ v- J, b
DWORD m_dwPos;
4 c e6 y, l% w& f3 C3 L3 I/ Vpublic:8 z+ c6 F/ r& K+ Z4 ]7 C
void Add(BYTE nIndex)6 i. L$ z# q5 h% i7 ^- `
{
! \: g2 j5 D8 S) X; o6 ~/ ] if (m_dwPos >= MAX_INVENTORY); P+ r9 g. N0 k+ U3 R. B
{
) B2 b* v4 G/ H+ T) _ return;( \1 L; F+ R* h8 S7 S/ ~
}
3 V7 }0 h3 f- A m_Item[m_dwPos].nIndex = nIndex;/ h9 u q8 n2 e# r, v8 J. O
m_Item[m_dwPos].dwId = m_dwPos;
- e; `& F$ v* K m_dwPos++;
* p1 ~% ?3 Y; D; ^3 ]/ n}
( _- D: I/ u: O/ q* ^# DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 ?0 c+ w" G$ ]) {2 R% u7 O- Y{
. ]$ j6 \: D2 d$ Y5 z1 e5 N% { for (int i=0;i<MAX_INVENTORY;i++)
( C3 ^8 v( A. A {( f- y3 c* A/ \' {
if (m_Item.dwId == dwId)
) q3 D. O0 ~! U5 j% n1 b2 b {
6 L3 |. m! C, ]0 U2 D8 X return m_Item.nIndex;
4 i5 F$ H. Z' Z. o' n8 e }
* }- ^+ \4 w. Q( b }
2 S7 t$ P) Q% v8 P& x return 255;
& `+ ]0 c1 c# E8 @' @4 R}
0 ^/ U$ V. p* P1 uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% b/ h+ `0 e0 I6 g{ L D( W3 W6 h: \8 d5 I( a
BYTE nTmp = 0;
, |+ h. ^% D6 y% H8 G1 A5 e N' X0 B bool bDest = false,bSrc = false;. l8 W0 ?2 \* g) {
for (int i=0;i<MAX_INVENTORY;i++)
1 m4 `5 ~% D0 `; k( P* ] {0 ^& j0 n" V4 F/ y5 t5 J7 f
if (dwSrcId == m_Item.dwId)
" J8 ^6 [: S$ O' s {
7 z# C) j7 h3 h- y0 S8 Z" E* a //id相等 则 改变对应的dest和src
$ f1 b) _: A4 w5 j# Y1 ]8 N% w6 S! G nTmp = m_Item.nIndex;7 b. }# H* F$ W* Y! [
m_Item.nIndex = dest;
. ?: I9 |( B; o4 b: _ }0 h/ f+ K6 X8 l
} U2 x- W$ \0 ?" }" `" W
//临时数据保存完毕,交换开始8 A s6 X* O+ I6 M* }/ @
for (int i=0;i<MAX_INVENTORY;i++)
* s" O( a+ P) \ {
! M; G, x9 a, U* O0 v if (dest == m_Item.nIndex)2 W, P) A- Q$ I: z+ H
{4 W2 {. ]2 s9 o" Z" @
//id相等 则 改变对应的dest和src; H' _$ k. D4 g' ?+ s6 N' R
m_Item.nIndex = nTmp;
0 {8 p6 ~0 A& ~7 s+ x) @* u } R; s9 D; G6 P* D
}
3 ?8 P/ `" \6 p2 m1 b' L}
9 v @" x4 J( y( G};
& r5 A4 Z6 _8 ^) |6 Y( p, D-------------------------------------------------------------------------
3 t! d0 o9 u- W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' o+ \1 {: h4 H7 s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 F0 y" a( f6 Y" Q& ^8 ^' N! \紧靠其上添加:& w5 M4 e) B9 U& j& g) M
if( pWndBase == &m_wndMenu )
`, \4 X* o r% W& O2 K{
, ?( `6 w3 f" X. C4 W) _ switch( nID ), v6 ~( |. ]: T5 O4 m7 ]
{
9 R. k; d2 l/ ?& c case 2:
. U' A( J$ \) L* i/ v {
( b4 Q7 O' ^8 P* \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) |+ q/ ]. ?9 S/ n, P8 S) n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; D: H& w) w6 v1 s( K5 S {* D0 P# @& ]1 B( K( F e& D
break;
2 E ? Q$ A- q; p }3 N& o. a* @: P* P4 f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 x: _. \, \/ G3 ]% h( \) ?1 F3 ^
{; `( v0 |$ c1 S9 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 c* J6 k( w( H9 L% J. A* ~1 v$ Q
if( !pItemElem ). P3 k( }! m+ u; I4 h5 m+ y
continue;. b6 ?4 K- R$ \1 P V! v3 m
if(pItemElem->GetExtra() > 0)* i+ t8 Z; }8 a* a+ p
continue;8 n% z7 {' u2 s9 i* o& W
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- [9 |2 U7 }4 p continue;, d2 k* n" O/ \
if( g_pPlayer->IsUsing( pItemElem ) )
- c% M$ r0 ?' h1 Z+ J; @ continue;
% b2 H3 _, ?1 o# I' e1 J& R if( pItemElem->IsUndestructable() == TRUE )
9 u; G. d+ M0 \2 a$ i6 t {
' y+ Q4 z( Q; ?$ h) y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- P1 j5 ^, Y3 M( g7 v
continue;. H1 i5 z! O% v6 Z" C3 l
}! x3 m) b5 e; n9 @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' U& W9 z8 ?( @) n! g" L
}, P7 ^3 E; A- R# h# l
break;* ~1 I! P& C& F' X! {, _ B
}: E* E( e/ V* t
case 1:
o C3 c5 f! ~. _ {
* e5 l# J5 b/ U# ? //整理背包- w- z2 l8 o- w" C! X
//////////////////////////////////////////////////////////////////////////; u8 Y7 k4 L. n! X
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 G2 T8 t( Y& | ////////////////////////////////////////////////////////////////////////// f( P+ l* Z! a; X
//////////////////////////////////////////////////////////////////////////& n+ ?, g# t9 g7 \* e
CInventorySort* pInvSort = new CInventorySort;
# S* O1 X- s @ D vector <sItem> vItem; ]3 U) C5 d5 h
vItem.resize(MAX_INVENTORY);//初始化大小5 j, K8 ]" V7 i `4 B+ _
//////////////////////////////////////////////////////////////////////////% R: q$ i; o! p; V
//填充数据* P! ^ P4 s- B$ @+ D- ? u! h' J$ z8 F
for (int i=0;i<MAX_INVENTORY;i++)
, V- k5 L1 J6 p! O1 q {. d. W1 |- a" _' b: _" r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 `; Z' y4 I: }2 A3 K* f! r; g
if (!pItemElem)0 j/ h6 }2 V7 d; n% X
{
6 Z& |8 a6 i) N) Q8 R9 O n# j& | vItem.dwKind2 = 0xffffffff;
1 F: k! v' {1 l/ x+ e* D0 n2 \ vItem.dwItemId = 0xffffffff;& s- T6 P. f: `2 w5 z8 X, {
vItem.nIndex = i;3 U( _3 D5 B$ P, P5 O1 `1 d% W
}else {) o4 g* Q3 q' G+ j0 G+ p
ItemProp* pProp = pItemElem->GetProp();2 x! n) ^+ U0 X/ K% L: S
vItem.dwKind2 = pProp->dwItemKind2;
& j2 s6 \/ M r4 I% W: f$ N# l vItem.dwItemId = pItemElem->m_dwItemId;
/ A* N' `* z& x, f vItem.nIndex = i;
7 H8 Z+ H& H' w8 w) S% R! f }
* X+ a6 v6 y! O) g) c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ S. i5 V: U2 \8 W }
$ Q6 B& P4 R& }3 o( D7 u: E/ B //////////////////////////////////////////////////////////////////////////
4 P# a7 d0 }5 h8 i* c( W0 ` sort(vItem.begin(),vItem.end());//排序
- n1 U$ ?* ^& u+ T+ e$ Y5 M2 g+ a# l //////////////////////////////////////////////////////////////////////////
/ ^' [" ^ ~5 _* O& i/ k1 x6 ] //交换6 x+ O, F4 o3 \8 w: V
for (size_t i=0;i<vItem.size();i++)
2 x; S: a; [) ~; {( B+ A {
- r1 \7 V6 M o5 k //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 U3 c( h/ Y! d: M
pInvSort->Add(vItem.nIndex);
( ?- p, D9 ^) S; [! ?6 c! m }% K0 H) w; z3 j* i: Z
BYTE nDestPos = 0;
3 c" I, t- n7 j for (int i=0;i<MAX_INVENTORY;i++)
5 t4 M; m" E, l2 j {
6 r% Q9 G: o9 A; @& M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" i' z) H# N$ J: W3 A( b' J
if (pItemElem)" q2 ~& {. V$ k! f* F) c
{
3 j7 J3 C' \/ _5 w if (IsUsingItem(pItemElem))
* g! @8 b% G- b8 j {, R. V$ x/ Z h9 u8 G$ ~) Z5 u
//这个位置无法放
+ k' Y' A, \, |5 W nDestPos++;
6 ^$ J% R$ X8 `6 ? }8 z. b' t7 S! b9 @" s$ I6 B
}" a( h7 @$ @7 w1 b
BYTE nSrc = pInvSort->GetItemSrc(i);. Z# D( C* r. Y% y! k7 f- F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# g4 ], T4 c. a8 u! ~+ r0 J if (pItemElem)2 O. r& R1 M# v i' r
{; Q1 S4 q5 X ~1 Z
if (IsUsingItem(pItemElem))! d" {. U/ u- e5 [8 x) `# S
{
# \( R" H) p! }; j( T5 r$ R //这个道具无法移动,跳过
' K5 d/ R! s& |, Y1 Y! U% Q; C' Z continue;
5 R: c, P3 S1 e5 Z' v }
$ f/ Z3 _6 A; Y }else{* k0 n- r% M! Q5 z
//空位置 不用动
6 L, o, n D' d( H- F/ s continue;
9 l5 F- h1 i+ W9 s: i; a& d) |4 m }% l R/ l3 {, p! ~. J8 ^ z
//////////////////////////////////////////////////////////////////////////& v4 C) P# J' j/ J. b' T" H
//开始移动
E! S7 p% ]* z6 x7 w; H if (nSrc == nDestPos)
5 i0 E i, [3 s {/ h( I3 T0 ]) r* P6 H; _
//原地不动' ?/ N/ v$ d0 O' [' @
nDestPos++;
8 I4 w) r4 n8 C* H j continue;
9 A* l6 F) w5 H+ J3 V }
7 E7 X% o6 z. D, Y# z3 ~) r- T, q pInvSort->MoveItem(i,nDestPos);
7 r' A. A- c% Z& n g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ D M. d/ T4 R6 o Sleep(5);
; T/ c Q+ D) ~8 A% e //Error("移动 - %d->%d",nSrc,nDestPos);
, y; U, n- y4 \( n! v& i2 w$ L9 {& A+ i nDestPos++;
; h& T/ Z& g8 _1 b }
/ [% b# t2 h/ T8 n5 w' i/ g //取第一个元素的信息0 ~; M+ Z2 d' u% s; Z: s) V6 Z
/* W9 ?- n# O% |+ x6 z% z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 E: ?& _/ v2 p% t1 V
{
" u) M( b" k4 G0 J' Z$ Y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 \7 D. z+ c4 U* x L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 e+ F2 M- X' Z7 Y1 t' E7 e3 K
}
# q, x Y" T$ ^( p* Q7 p */
6 T- ] N9 m/ Q' r9 l# N2 a: M- ]/ [ //////////////////////////////////////////////////////////////////////////* h r6 d( t8 e( l6 f$ `2 X
break;1 x9 D: n1 ^: \1 J) A- V# P
}* X0 P& j w- j7 D5 A) G
} . T" }" f' F2 ?$ Z
}
( r7 l+ P. m- b8 a, |m_wndMenu.SetVisible(FALSE);
% F f$ a9 I: u! n2 u+ E5 q1 a7 \$ ]- z
--------------------------------------------------------------------------------------------------------
1 W5 x2 o: ^: i# Y8 \4 K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ o4 [1 C" K/ [{3 U+ f% g1 J! k, n* I3 H
BaseMouseCursor();1 y6 E1 M0 e# u( I
}# _: Z9 e3 t9 D4 ?8 x- o
在其下添加:# y/ b* d/ e0 P! _- M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 l0 d( a( x5 ]" O- }{
/ s, H4 ?3 P: e! X( S Km_wndMenu.DeleteAllMenu();
3 I4 @* ?% i& N$ Dm_wndMenu.CreateMenu(this);( O. T: Q! r' Y7 x$ t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ x% P! U& ~# ?, M1 P! _2 t; d
2 B3 _) | O$ t: ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 ]5 H; |2 i$ f' C# S S8 F{
/ m1 f- |% i. a8 G //P以上级别才可以删除所有道具
' ` `8 G6 R) R+ E m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" i! g) t: p3 S- w l2 }3 c0 ?$ F} ^7 _/ }& h( Y: E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
|; E$ o; j9 c* q5 ?( ~. C; P1 Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 F; i) F: A7 ~) E$ V7 L: ~m_wndMenu.SetFocus();
8 l' c8 i w7 Q( T3 O3 |}2 _. @0 o. {3 B6 Q" g7 l4 S6 i) t
------------------------------------------------------------------------------------------------------------
+ j, z V5 T. x*************************
9 k+ X+ D$ `8 i6 h0 t! cWndField.h文件3 Q" c) m3 u3 k8 V& ?$ |, q: K
*************************
$ @$ C$ p: J1 s5 g% V搜索:BOOL m_bReport;
9 _/ _- z. m q8 [# _- u其后添加:
; q" [4 H! S1 Q/ ~7 LCWndMenu m_wndMenu;8 B7 k8 m. w) o9 h
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% W7 B+ q, T# N: x$ z& ^4 Q其后添加:
( U6 ]& _. Y5 Z) X2 D {1 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ g* E& Z& f, @
" Y- Z; Z( E( u v/ a' x; @0 w! s" @0 D0 f3 X1 J0 F4 d+ t
|
|