summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSTRWarrior <niels.breuker@hotmail.nl>2013-11-02 20:47:43 +0100
committerSTRWarrior <niels.breuker@hotmail.nl>2013-11-02 20:47:43 +0100
commit58ced0c12c23275112e16ff29b087f2ceb0bbd6f (patch)
tree66595ec6ee94d789fc0d87c26b9e79430ba378b1
parentZombies and Skeletons don't walk into the sun anymore. (diff)
downloadcuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar.gz
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar.bz2
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar.lz
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar.xz
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.tar.zst
cuberite-58ced0c12c23275112e16ff29b087f2ceb0bbd6f.zip
-rw-r--r--source/Mobs/Monster.cpp68
1 files changed, 63 insertions, 5 deletions
diff --git a/source/Mobs/Monster.cpp b/source/Mobs/Monster.cpp
index 9b1f2fc4c..0b91df90b 100644
--- a/source/Mobs/Monster.cpp
+++ b/source/Mobs/Monster.cpp
@@ -441,10 +441,68 @@ void cMonster::Attack(float a_Dt)
{
m_AttackInterval += a_Dt * m_AttackRate;
if ((m_Target != NULL) && (m_AttackInterval > 3.0))
+ // Setting this higher gives us more wiggle room for attackrate
{
- // Setting this higher gives us more wiggle room for attackrate
+ switch (GetMobType())
+ {
+ case mtSkeleton:
+ {
+ Vector3d Speed = GetLookVector() * 20;
+ Speed.y = Speed.y + 1;
+ cArrowEntity * Arrow = new cArrowEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed);
+ if (Arrow == NULL)
+ {
+ return;
+ }
+ if (!Arrow->Initialize(m_World))
+ {
+ delete Arrow;
+ return;
+ }
+ m_World->BroadcastSpawnEntity(*Arrow);
+ break;
+ }
+ case mtGhast:
+ {
+ Vector3d Speed = GetLookVector() * 20;
+ Speed.y = Speed.y + 1;
+ cGhastFireballEntity * GhastBall = new cGhastFireballEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed);
+ if (GhastBall == NULL)
+ {
+ return;
+ }
+ if (!GhastBall->Initialize(m_World))
+ {
+ delete GhastBall;
+ return;
+ }
+ m_World->BroadcastSpawnEntity(*GhastBall);
+ break;
+ }
+ case mtBlaze:
+ {
+ Vector3d Speed = GetLookVector() * 20;
+ Speed.y = Speed.y + 1;
+ cFireChargeEntity * FireCharge = new cFireChargeEntity(this, GetPosX(), GetPosY() + 1, GetPosZ(), Speed);
+ if (FireCharge == NULL)
+ {
+ return;
+ }
+ if (!FireCharge->Initialize(m_World))
+ {
+ delete FireCharge;
+ return;
+ }
+ m_World->BroadcastSpawnEntity(*FireCharge);
+ break;
+ // ToDo: Shoot 3 fireballs instead of 1.
+ }
+ default:
+ {
+ ((cPawn *)m_Target)->TakeDamage(*this);
+ }
+ }
m_AttackInterval = 0.0;
- ((cPawn *)m_Target)->TakeDamage(*this);
}
}
@@ -609,9 +667,9 @@ int cMonster::GetSpawnDelay(cMonster::eFamily a_MobFamily)
{
switch (a_MobFamily)
{
- case mfHostile: return 1;
- case mfPassive: return 400;
- case mfAmbient: return 400;
+ case mfHostile: return 40;
+ case mfPassive: return 40;
+ case mfAmbient: return 40;
case mfWater: return 400;
}
ASSERT(!"Unhandled mob family");