1
0

Fixed wither summoning

This commit is contained in:
andrew 2014-03-25 11:13:27 +02:00
parent 0fe1e50ffc
commit ba42166411
3 changed files with 37 additions and 3 deletions

View File

@ -47,6 +47,15 @@ public:
void Reset(void) { m_IsWither = false; }
} CallbackA, CallbackB;
a_World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, CallbackA);
if (!CallbackA.IsWither())
{
return false;
}
CallbackA.Reset();
BLOCKTYPE BlockY1 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ);
BLOCKTYPE BlockY2 = a_ChunkInterface.GetBlock(a_BlockX, a_BlockY - 2, a_BlockZ);
@ -151,7 +160,21 @@ public:
World->DoWithMobHeadAt(a_BlockX, a_BlockY, a_BlockZ, Callback);
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, a_BlockMeta);
TrySpawnWither(a_ChunkInterface, World, a_BlockX, a_BlockY, a_BlockZ);
static const Vector3i Coords[] =
{
Vector3i( 0, 0, 0),
Vector3i( 1, 0, 0),
Vector3i(-1, 0, 0),
Vector3i( 0, 0, 1),
Vector3i( 0, 0, -1),
};
for (size_t i = 0; i < ARRAYCOUNT(Coords); ++i)
{
if (TrySpawnWither(a_ChunkInterface, World, a_BlockX + Coords[i].x, a_BlockY, a_BlockZ + Coords[i].z))
{
break;
}
} // for i - Coords[]
}
} ;

View File

@ -13,8 +13,6 @@ cWither::cWither(void) :
m_InvulnerableTicks(220)
{
SetMaxHealth(300);
SetHealth(GetMaxHealth() / 3);
}
@ -30,6 +28,18 @@ bool cWither::IsArmored(void) const
bool cWither::Initialize(cWorld * a_World) override
{
// Set health before BroadcastSpawnEntity()
SetHealth(GetMaxHealth() / 3);
return super::Initialize(a_World);
}
void cWither::DoTakeDamage(TakeDamageInfo & a_TDI)
{
if (a_TDI.DamageType == dtDrowning)

View File

@ -25,6 +25,7 @@ public:
bool IsArmored(void) const;
// cEntity overrides
virtual bool Initialize(cWorld * a_World) override;
virtual void GetDrops(cItems & a_Drops, cEntity * a_Killer = NULL) override;
virtual void DoTakeDamage(TakeDamageInfo & a_TDI) override;
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;