fix(Scripts/TempleOfAhnQiraj): Correct Fankriss Mortal Wound spell ID (#12443)
This commit is contained in:
@@ -24,6 +24,7 @@ EndScriptData */
|
|||||||
|
|
||||||
#include "ScriptMgr.h"
|
#include "ScriptMgr.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
|
#include "TaskScheduler.h"
|
||||||
#include "temple_of_ahnqiraj.h"
|
#include "temple_of_ahnqiraj.h"
|
||||||
|
|
||||||
#define SOUND_SENTENCE_YOU 8588
|
#define SOUND_SENTENCE_YOU 8588
|
||||||
@@ -34,7 +35,7 @@ EndScriptData */
|
|||||||
|
|
||||||
enum Spells
|
enum Spells
|
||||||
{
|
{
|
||||||
SPELL_MORTAL_WOUND = 28467,
|
SPELL_MORTAL_WOUND = 25646,
|
||||||
SPELL_ROOT = 28858,
|
SPELL_ROOT = 28858,
|
||||||
|
|
||||||
// Enrage for his spawns
|
// Enrage for his spawns
|
||||||
@@ -55,28 +56,8 @@ public:
|
|||||||
{
|
{
|
||||||
boss_fankrissAI(Creature* creature) : ScriptedAI(creature) { }
|
boss_fankrissAI(Creature* creature) : ScriptedAI(creature) { }
|
||||||
|
|
||||||
uint32 MortalWound_Timer;
|
void SummonSpawn()
|
||||||
uint32 SpawnHatchlings_Timer;
|
|
||||||
uint32 SpawnSpawns_Timer;
|
|
||||||
int Rand;
|
|
||||||
float RandX;
|
|
||||||
float RandY;
|
|
||||||
|
|
||||||
Creature* Hatchling;
|
|
||||||
Creature* Spawn;
|
|
||||||
|
|
||||||
void Reset() override
|
|
||||||
{
|
{
|
||||||
MortalWound_Timer = urand(10000, 15000);
|
|
||||||
SpawnHatchlings_Timer = urand(6000, 12000);
|
|
||||||
SpawnSpawns_Timer = urand(15000, 45000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SummonSpawn(Unit* victim)
|
|
||||||
{
|
|
||||||
if (!victim)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Rand = 10 + (rand() % 10);
|
Rand = 10 + (rand() % 10);
|
||||||
switch (rand() % 2)
|
switch (rand() % 2)
|
||||||
{
|
{
|
||||||
@@ -99,13 +80,68 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Rand = 0;
|
Rand = 0;
|
||||||
Spawn = DoSpawnCreature(15630, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
|
DoSpawnCreature(15630, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
|
||||||
if (Spawn)
|
|
||||||
Spawn->AI()->AttackStart(victim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
|
_scheduler.CancelAll();
|
||||||
|
|
||||||
|
_scheduler.Schedule(4s, 8s, [this](TaskContext context) {
|
||||||
|
DoCastVictim(SPELL_MORTAL_WOUND);
|
||||||
|
context.Repeat();
|
||||||
|
}).Schedule(15s, 45s, [this](TaskContext context) {
|
||||||
|
switch (urand(0, 2))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
SummonSpawn();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
SummonSpawn();
|
||||||
|
SummonSpawn();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
SummonSpawn();
|
||||||
|
SummonSpawn();
|
||||||
|
SummonSpawn();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
context.Repeat(30s, 60s);
|
||||||
|
}).Schedule(15s, 45s, [this](TaskContext context) {
|
||||||
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||||
|
{
|
||||||
|
DoCast(target, SPELL_ROOT);
|
||||||
|
|
||||||
|
if (DoGetThreat(target))
|
||||||
|
DoModifyThreatPercent(target, -100);
|
||||||
|
|
||||||
|
switch (urand(0, 2))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
DoTeleportPlayer(target, -8106.0142f, 1289.2900f, -74.419533f, 5.112f);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
DoTeleportPlayer(target, -7990.135354f, 1155.1907f, -78.849319f, 2.608f);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
DoTeleportPlayer(target, -8159.7753f, 1127.9064f, -76.868660f, 0.675f);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.Repeat(45s, 60s);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
@@ -114,105 +150,15 @@ public:
|
|||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//MortalWound_Timer
|
_scheduler.Update(diff,
|
||||||
if (MortalWound_Timer <= diff)
|
std::bind(&ScriptedAI::DoMeleeAttackIfReady, this));
|
||||||
{
|
|
||||||
DoCastVictim(SPELL_MORTAL_WOUND);
|
|
||||||
MortalWound_Timer = urand(10000, 20000);
|
|
||||||
}
|
|
||||||
else MortalWound_Timer -= diff;
|
|
||||||
|
|
||||||
//Summon 1-3 Spawns of Fankriss at random time.
|
|
||||||
if (SpawnSpawns_Timer <= diff)
|
|
||||||
{
|
|
||||||
switch (urand(0, 2))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
SummonSpawn(SelectTarget(SelectTargetMethod::Random, 0));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
SpawnSpawns_Timer = urand(30000, 60000);
|
|
||||||
}
|
|
||||||
else SpawnSpawns_Timer -= diff;
|
|
||||||
|
|
||||||
// Teleporting Random Target to one of the three tunnels and spawn 4 hatchlings near the gamer.
|
|
||||||
//We will only telport if fankriss has more than 3% of hp so teleported gamers can always loot.
|
|
||||||
if (HealthAbovePct(3))
|
|
||||||
{
|
|
||||||
if (SpawnHatchlings_Timer <= diff)
|
|
||||||
{
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
|
||||||
{
|
|
||||||
DoCast(target, SPELL_ROOT);
|
|
||||||
|
|
||||||
if (DoGetThreat(target))
|
|
||||||
DoModifyThreatPercent(target, -100);
|
|
||||||
|
|
||||||
switch (urand(0, 2))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
DoTeleportPlayer(target, -8106.0142f, 1289.2900f, -74.419533f, 5.112f);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
DoTeleportPlayer(target, -7990.135354f, 1155.1907f, -78.849319f, 2.608f);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
DoTeleportPlayer(target, -8159.7753f, 1127.9064f, -76.868660f, 0.675f);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() - 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 3, target->GetPositionY() + 3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() - 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
Hatchling = me->SummonCreature(15962, target->GetPositionX() - 5, target->GetPositionY() + 5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
|
||||||
if (Hatchling)
|
|
||||||
Hatchling->AI()->AttackStart(target);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SpawnHatchlings_Timer = urand(45000, 60000);
|
|
||||||
}
|
|
||||||
else SpawnHatchlings_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
TaskScheduler _scheduler;
|
||||||
|
int Rand;
|
||||||
|
float RandX;
|
||||||
|
float RandY;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user