www.pudn.com > back.rar > block.cpp
//_________________________________________________________________________________
//
// Block.cpp
//
//
//
//
//
//
//
//_________________________________________________________________________________
//
#include "Base.H"
#include "Block.H"
#include "Xblock_Table.h"
#include "item.h"
CBlock::
CBlock()
{
}
CBlock::
~CBlock()
{
}
//_________________________________________________________________________________
//
// ŸÀÏÀÇ ±âº» À§Ä¡°ª ¼¼ÆÃÇÔ¼ö
// pos, ±× pos¿¡ µû¸¥ xblock°ª ¹× cell°ª ¼¼ÆÃ
//_________________________________________________________________________________
//
void
CBlock::
Block_Init( DWORD tile_no, int map_size )
{
m_tile.m_pos = tile_no;
int xxx = (tile_no % Line[map_size]) / Range;
int yyy = (tile_no / Line[map_size]) / Range;
m_tile.m_xblock = yyy * XBlock_Line[map_size] + xxx;
int x = (tile_no % Line[map_size]) % Range; // cell³»ÀÇ x °ª 0-63
int y = (tile_no / Line[map_size]) % Range; // cell³»ÀÇ y °ª 0-63
if( x >= 31 && x < 64 ) // 64º¸´Ù Å« °ªÀº ³ª¿Ã¼ö ¾ø¾û
{
if( y >= 0 && y <= 31 )
{
m_tile.m_cell = 1;
}
else m_tile.m_cell = 3;
}
else
{
if( y >= 0 && y <= 31 )
{
m_tile.m_cell = 0;
}
else m_tile.m_cell = 2;
}
for( int i = 0; i < 3; i++ )
{
m_user_unique[i] = -1;
m_NPC_index[i] = -1;
}
}
//_________________________________________________________________________________
//
// ÇØ´ç ºí·°À¸·Î À̵¿ÇÒ¼ö ÀÖ³ª?
//
// true : yes false : no
//_________________________________________________________________________________
//
bool
CBlock::
Can_Move( int floor )
{
if( m_tile.m_is_blocked[floor] || m_tile.m_someone_is_in[floor] )
return false;
// ok..can move
return true;
}
//_________________________________________________________________________________
//
// Set_Block()
//_________________________________________________________________________________
//
void CBlock::Set_Block( block bl, int floor )
{
m_tile.m_item_stack[floor] = bl.m_item_stack;
m_tile.m_is_blocked[floor] = bl.m_is_blocked;
m_tile.m_someone_is_in[floor] = bl.m_someone_is_in;
m_tile.m_avail_PK[floor] = bl.m_avail_PK;
m_tile.m_is_linked[floor] = bl.m_is_linked;
//newwarp 20060501
if( bl.m_Warp.m_Map_ID != -1 )
{
int WarpInfo = 0;
for( WarpInfo = 0 ; WarpInfo < MAX_WARPINFO ; ++WarpInfo )
{
if( g_WarpZoneInfo[WarpInfo].m_Map_ID == -1 && g_WarpZoneInfo[WarpInfo].m_My_ID == -1 && g_WarpZoneInfo[WarpInfo].m_Map_Warp == -1 )
{
m_tile.m_dwWorparray = WarpInfo;
memcpy( &g_WarpZoneInfo[WarpInfo] , &bl.m_Warp , sizeof(Warp_Info));
break;
}
}
if( WarpInfo == MAX_WARPINFO )
{
MessageBox(NULL,"Increase MAX_WARPINFO define number : 1024 g_WarpZoneInfo Overflow","ERROR",MB_OK);
//¸ÊÁ¤º¸ ¹è¿ ºÎÁ· MAX_WARPINFO ¸¦ ´Ã·Á¶ó
}
}
//m_tile.m_Warp = bl.m_Warp;
}
//newwarp 20060501
int CBlock::Return_Warp_My_ID() const
{
if( m_tile.m_dwWorparray == -1 ) return 0;
return g_WarpZoneInfo[m_tile.m_dwWorparray].m_My_ID;
} // ¿öÇÁ °ü·Ã
//newwarp 20060501
int CBlock::Return_Warp_To_Map() const
{
if( m_tile.m_dwWorparray == -1 ) return 0;
return g_WarpZoneInfo[m_tile.m_dwWorparray].m_Map_ID;
} // ¿öÇÁ °ü·Ã
//newwarp 20060501
int CBlock::Return_Warp_To_WarpIndex() const
{
if( m_tile.m_dwWorparray == -1 ) return 0;
return g_WarpZoneInfo[m_tile.m_dwWorparray].m_Map_Warp;
} // ¿öÇÁ °ü·Ã
//_________________________________________________________________________________
//
// end of Block.cpp
//_________________________________________________________________________________
//