Fixed a few Y too high/low asserts
This commit is contained in:
parent
a5c0600e6c
commit
0836fe9a84
@ -93,8 +93,8 @@ public:
|
|||||||
// Check if it's fuel:
|
// Check if it's fuel:
|
||||||
BLOCKTYPE BlockType;
|
BLOCKTYPE BlockType;
|
||||||
if (
|
if (
|
||||||
!a_Chunk.UnboundedRelGetBlockType(a_RelX + x, a_RelY + y, a_RelZ + z, BlockType) ||
|
((a_RelY + y < 0) || (a_RelY + y > cChunkDef::Height)) ||
|
||||||
!cFireSimulator::IsFuel(BlockType)
|
(!a_Chunk.UnboundedRelGetBlockType(a_RelX + x, a_RelY + y, a_RelZ + z, BlockType) || !cFireSimulator::IsFuel(BlockType))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -119,6 +119,7 @@ public:
|
|||||||
for (size_t i = 0; i < ARRAYCOUNT(CrossCoords); i++)
|
for (size_t i = 0; i < ARRAYCOUNT(CrossCoords); i++)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
|
((RelY + CrossCoords[i].y >= 0) && (RelY + CrossCoords[i].y <= cChunkDef::Height)) &&
|
||||||
a_Chunk.UnboundedRelGetBlockType(RelX + CrossCoords[i].x, RelY + CrossCoords[i].y, RelZ + CrossCoords[i].z, BlockType) &&
|
a_Chunk.UnboundedRelGetBlockType(RelX + CrossCoords[i].x, RelY + CrossCoords[i].y, RelZ + CrossCoords[i].z, BlockType) &&
|
||||||
(BlockType == E_BLOCK_AIR)
|
(BlockType == E_BLOCK_AIR)
|
||||||
)
|
)
|
||||||
|
@ -129,6 +129,11 @@ bool cMobSpawner::CanSpawnHere(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_R
|
|||||||
BLOCKTYPE TargetBlock = E_BLOCK_AIR;
|
BLOCKTYPE TargetBlock = E_BLOCK_AIR;
|
||||||
if (m_AllowedTypes.find(a_MobType) != m_AllowedTypes.end() && a_Chunk->UnboundedRelGetBlockType(a_RelX, a_RelY, a_RelZ, TargetBlock))
|
if (m_AllowedTypes.find(a_MobType) != m_AllowedTypes.end() && a_Chunk->UnboundedRelGetBlockType(a_RelX, a_RelY, a_RelZ, TargetBlock))
|
||||||
{
|
{
|
||||||
|
if ((a_RelY + 1 > cChunkDef::Height) || (a_RelY - 1 < 0))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
NIBBLETYPE BlockLight = a_Chunk->GetBlockLight(a_RelX, a_RelY, a_RelZ);
|
NIBBLETYPE BlockLight = a_Chunk->GetBlockLight(a_RelX, a_RelY, a_RelZ);
|
||||||
NIBBLETYPE SkyLight = a_Chunk->GetSkyLight(a_RelX, a_RelY, a_RelZ);
|
NIBBLETYPE SkyLight = a_Chunk->GetSkyLight(a_RelX, a_RelY, a_RelZ);
|
||||||
BLOCKTYPE BlockAbove = a_Chunk->GetBlock(a_RelX, a_RelY + 1, a_RelZ);
|
BLOCKTYPE BlockAbove = a_Chunk->GetBlock(a_RelX, a_RelY + 1, a_RelZ);
|
||||||
@ -212,11 +217,8 @@ bool cMobSpawner::CanSpawnHere(cChunk * a_Chunk, int a_RelX, int a_RelY, int a_R
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
HaveFloor = (
|
HaveFloor = (
|
||||||
HaveFloor ||
|
a_Chunk->UnboundedRelGetBlockType(a_RelX + x, a_RelY - 1 /* Checked at start of function */, a_RelZ + z, TargetBlock) &&
|
||||||
(
|
!cBlockInfo::IsTransparent(TargetBlock)
|
||||||
a_Chunk->UnboundedRelGetBlockType(a_RelX + x, a_RelY - 1, a_RelZ + z, TargetBlock) &&
|
|
||||||
!cBlockInfo::IsTransparent(TargetBlock)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,9 +111,9 @@ void cMonster::SpawnOn(cClientHandle & a_Client)
|
|||||||
|
|
||||||
void cMonster::TickPathFinding()
|
void cMonster::TickPathFinding()
|
||||||
{
|
{
|
||||||
int PosX = (int)floor(GetPosX());
|
const int PosX = (int)floor(GetPosX());
|
||||||
int PosY = (int)floor(GetPosY());
|
const int PosY = (int)floor(GetPosY());
|
||||||
int PosZ = (int)floor(GetPosZ());
|
const int PosZ = (int)floor(GetPosZ());
|
||||||
|
|
||||||
m_FinalDestination.y = (double)FindFirstNonAirBlockPosition(m_FinalDestination.x, m_FinalDestination.z);
|
m_FinalDestination.y = (double)FindFirstNonAirBlockPosition(m_FinalDestination.x, m_FinalDestination.z);
|
||||||
|
|
||||||
@ -133,9 +133,9 @@ void cMonster::TickPathFinding()
|
|||||||
|
|
||||||
for (size_t i = 0; i < ARRAYCOUNT(gCrossCoords); i++)
|
for (size_t i = 0; i < ARRAYCOUNT(gCrossCoords); i++)
|
||||||
{
|
{
|
||||||
if ((gCrossCoords[i].x + PosX == PosX) && (gCrossCoords[i].z + PosZ == PosZ))
|
if ((PosY - 1 < 0) || (PosY + 1 > cChunkDef::Height) || (PosY + 2 > cChunkDef::Height))
|
||||||
{
|
{
|
||||||
continue;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsCoordinateInTraversedList(Vector3i(gCrossCoords[i].x + PosX, PosY, gCrossCoords[i].z + PosZ)))
|
if (IsCoordinateInTraversedList(Vector3i(gCrossCoords[i].x + PosX, PosY, gCrossCoords[i].z + PosZ)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user