From 1e014a54dc4a9298b407a83146940cf5118f89a9 Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Mon, 30 Jul 2018 12:49:46 +0100 Subject: Ocelots no longer multiply exponentially (#4272) Along with a call to `destroyentities`, this fixes #4271 I'm guessing the intention of this code was to modify the normal spawning of ocelots. However, `cEntity::SpawnOn` is actually called to send the entity to an individual client. That means this code was run for every single player, every time they were sent a chunk with ocelots in it. Thus, the ocelots population would grow exponentially as players log in and move around. --- src/Mobs/Ocelot.cpp | 23 +++++++++-------------- src/Mobs/Ocelot.h | 1 - 2 files changed, 9 insertions(+), 15 deletions(-) (limited to 'src/Mobs') diff --git a/src/Mobs/Ocelot.cpp b/src/Mobs/Ocelot.cpp index 7ebe37d20..02af45a7d 100644 --- a/src/Mobs/Ocelot.cpp +++ b/src/Mobs/Ocelot.cpp @@ -11,6 +11,15 @@ +// TODO: Ocelots should have a chance of spawning with two kittens +/* + if (!IsBaby() && GetRandomProvider().RandBool(1.0 / 7.0)) + { + m_World->SpawnMob(GetPosX(), GetPosY(), GetPosZ(), m_MobType, true); + m_World->SpawnMob(GetPosX(), GetPosY(), GetPosZ(), m_MobType, true); + } +*/ + cOcelot::cOcelot(void) : super("Ocelot", mtOcelot, "entity.cat.hurt", "entity.cat.death", 0.6, 0.8), m_IsSitting(false), @@ -185,20 +194,6 @@ void cOcelot::OnRightClicked(cPlayer & a_Player) -void cOcelot::SpawnOn(cClientHandle & a_ClientHandle) -{ - super::SpawnOn(a_ClientHandle); - if (!IsBaby() && GetRandomProvider().RandBool(1.0 / 7.0)) - { - m_World->SpawnMob(GetPosX(), GetPosY(), GetPosZ(), m_MobType, true); - m_World->SpawnMob(GetPosX(), GetPosY(), GetPosZ(), m_MobType, true); - } -} - - - - - bool cOcelot::IsCatSittingOnBlock(cWorld * a_World, Vector3d a_BlockPosition) { return a_World->ForEachEntityInBox( diff --git a/src/Mobs/Ocelot.h b/src/Mobs/Ocelot.h index b8efc60ee..226da228d 100644 --- a/src/Mobs/Ocelot.h +++ b/src/Mobs/Ocelot.h @@ -30,7 +30,6 @@ public: virtual void OnRightClicked(cPlayer & a_Player) override; virtual void Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) override; virtual void TickFollowPlayer(); - virtual void SpawnOn(cClientHandle & a_ClientHandle) override; virtual void GetBreedingItems(cItems & a_Items) override { a_Items.Add(E_ITEM_RAW_FISH); -- cgit v1.2.3