mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-28 12:52:25 +01:00
Scripts/TotT: corrected multiple mechanics for Lady Naz'jar's encounter
* corrected some damage values for encounter related creatures
This commit is contained in:
3
sql/updates/world/custom/custom_2019_01_24_00_world.sql
Normal file
3
sql/updates/world/custom/custom_2019_01_24_00_world.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
UPDATE `creature_template` SET `DamageModifier`= 30 WHERE `entry`= 40633;
|
||||
UPDATE `creature_template` SET `DamageModifier`= 60 WHERE `entry`= 49084;
|
||||
UPDATE `creature_template` SET `DamageModifier`= 120 WHERE `entry`= 49104;
|
||||
@@ -4444,6 +4444,12 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd
|
||||
});
|
||||
|
||||
// Waterspout
|
||||
ApplySpellFix({ 90461 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->Speed = 6.0f;
|
||||
});
|
||||
|
||||
// END OF THRONE OF THE TIDES SPELLS
|
||||
|
||||
//
|
||||
|
||||
@@ -39,10 +39,16 @@ enum Spells
|
||||
// Lady Naz'jar
|
||||
SPELL_SUMMON_GEYSER = 75722,
|
||||
SPELL_FUNGAL_SPORES = 76001,
|
||||
SPELL_WATERSPOUT_SUMMON = 90495,
|
||||
SPELL_WATERSPOUT_SUMMON_1 = 90495,
|
||||
SPELL_WATERSPOUT_SUMMON_2 = 90497,
|
||||
SPELL_WATERSPOUT_SHIELD = 75683,
|
||||
SPELL_ACHIEVEMENT_OLD_FAITHFUL = 94042, // Serverside spell. Handled via UpdateAchievementCriteria
|
||||
|
||||
// Waterspout
|
||||
SPELL_EJECT_ALL_PASSENGERS = 63109,
|
||||
SPELL_WATERSPOUT = 90440,
|
||||
SPELL_WATERSPOUT_CHARGE = 90461,
|
||||
|
||||
// Geyser
|
||||
SPELL_GEYSER_VISUAL = 75699,
|
||||
SPELL_GEYSER_ERUPTION = 75700,
|
||||
@@ -127,6 +133,39 @@ class PrepareDelayedAttackEvent : public BasicEvent
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
class EjectAllPassengersEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
EjectAllPassengersEvent(Creature* owner) : _owner(owner) { }
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
|
||||
{
|
||||
_owner->RemoveAurasDueToSpell(SPELL_WATERSPOUT);
|
||||
_owner->CastSpell(_owner, SPELL_EJECT_ALL_PASSENGERS);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
class WaterSpoutChargeEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
WaterSpoutChargeEvent(Creature* owner) : _owner(owner) { }
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
|
||||
{
|
||||
_owner->RemoveAurasDueToSpell(SPELL_WATERSPOUT);
|
||||
_owner->CastSpell(_owner, SPELL_EJECT_ALL_PASSENGERS);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
|
||||
Position const LadyNazjarCenterPosition = { 191.5f, 802.7f, 807.6f, 4.414708f };
|
||||
|
||||
Position const LadyNazjarAddPositions[] =
|
||||
@@ -187,6 +226,7 @@ struct boss_lady_nazjar : public BossAI
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FUNGAL_SPORES_AURA);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIGHTNING_SURGE);
|
||||
instance->SetData(DATA_LADY_NAZJAR_GEYSERS, NOT_STARTED);
|
||||
summons.DespawnAll();
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
@@ -199,6 +239,7 @@ struct boss_lady_nazjar : public BossAI
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FUNGAL_SPORES_AURA);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIGHTNING_SURGE);
|
||||
instance->SetData(DATA_LADY_NAZJAR_GEYSERS, NOT_STARTED);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
@@ -214,12 +255,12 @@ struct boss_lady_nazjar : public BossAI
|
||||
case NPC_WATERSPOUT:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true, 0))
|
||||
{
|
||||
float angle = me->GetAngle(target) - me->GetOrientation();
|
||||
Position pos = me->GetPosition();
|
||||
pos.m_positionZ += 5.0f; // To make sure that we wont get stuck at the inner arena ring
|
||||
me->MovePositionToFirstCollision(pos, 60.0f, angle);
|
||||
summon->GetMotionMaster()->MovePoint(0, pos, false);
|
||||
summon->DespawnOrUnsummon(summon->movespline->Duration());
|
||||
summon->CastSpell(target, SPELL_WATERSPOUT_CHARGE);
|
||||
if (uint32 duration = summon->movespline->Duration())
|
||||
{
|
||||
summon->m_Events.AddEventAtOffset(new EjectAllPassengersEvent(summon), Milliseconds(duration));
|
||||
summon->DespawnOrUnsummon(duration + (5 * IN_MILLISECONDS));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -235,7 +276,8 @@ struct boss_lady_nazjar : public BossAI
|
||||
if (_killedAdds == 3 && me->HasAura(SPELL_WATERSPOUT_SHIELD))
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_WATERSPOUT_SHIELD);
|
||||
me->RemoveAurasDueToSpell(SPELL_WATERSPOUT_SUMMON);
|
||||
me->RemoveAurasDueToSpell(SPELL_WATERSPOUT_SUMMON_1);
|
||||
me->RemoveAurasDueToSpell(SPELL_WATERSPOUT_SUMMON_2);
|
||||
events.RescheduleEvent(EVENT_REENGAGE, 1ms);
|
||||
}
|
||||
|
||||
@@ -258,6 +300,10 @@ struct boss_lady_nazjar : public BossAI
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
|
||||
{
|
||||
// Oneshot cases
|
||||
if (damage >= me->GetHealth())
|
||||
return;
|
||||
|
||||
if ((me->HealthBelowPctDamaged(60, damage) && _waterspoutPhaseCount == 0)
|
||||
|| (me->HealthBelowPctDamaged(30, damage) && _waterspoutPhaseCount == 1))
|
||||
{
|
||||
@@ -266,16 +312,20 @@ struct boss_lady_nazjar : public BossAI
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->InterruptNonMeleeSpells(true);
|
||||
me->NearTeleportTo(LadyNazjarCenterPosition);
|
||||
instance->SetData(DATA_LADY_NAZJAR_GEYSERS, IN_PROGRESS);
|
||||
Talk(SAY_SUMMON_ADDS);
|
||||
if (IsHeroic())
|
||||
DoCastSelf(SPELL_WATERSPOUT_SUMMON);
|
||||
{
|
||||
DoCastSelf(SPELL_WATERSPOUT_SUMMON_1);
|
||||
DoCastSelf(SPELL_WATERSPOUT_SUMMON_2);
|
||||
}
|
||||
DoCastSelf(SPELL_WATERSPOUT_SHIELD);
|
||||
events.ScheduleEvent(EVENT_REENGAGE, 1min + 1s + 500ms);
|
||||
|
||||
_killedAdds = 0;
|
||||
for (uint8 i = 0; i < 3; i++)
|
||||
{
|
||||
if (Creature* invader = DoSummon((i == 0 ? NPC_NAZJAR_HONOR_GUARD : NPC_NAZJAR_TEMPEST_WITCH), LadyNazjarAddPositions[i], 4000))
|
||||
if (Creature* invader = DoSummon((i == 0 ? NPC_NAZJAR_HONOR_GUARD : NPC_NAZJAR_TEMPEST_WITCH), LadyNazjarAddPositions[i], 4 * IN_MILLISECONDS))
|
||||
{
|
||||
invader->SetReactState(REACT_PASSIVE);
|
||||
invader->SetDisableGravity(true);
|
||||
@@ -326,6 +376,7 @@ struct boss_lady_nazjar : public BossAI
|
||||
if (Unit* target = me->GetVictim())
|
||||
AttackStart(target);
|
||||
|
||||
instance->SetData(DATA_LADY_NAZJAR_GEYSERS, NOT_STARTED);
|
||||
events.ScheduleEvent(EVENT_SUMMON_GEYSER, 11s, 16s);
|
||||
events.ScheduleEvent(EVENT_FUNGAL_SPORES, 13s, 19s);
|
||||
events.ScheduleEvent(EVENT_SHOCK_BLAST, 13s, 16s);
|
||||
|
||||
@@ -151,6 +151,22 @@ class EmoteStateEvent : public BasicEvent
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
class GeyserActivationEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
GeyserActivationEvent(Creature* owner) : _owner(owner) { }
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/) override
|
||||
{
|
||||
_owner->RemoveAurasDueToSpell(SPELL_GEYSER_DUMMY);
|
||||
_owner->CastSpell(_owner, SPELL_GEYSER_DUMMY_KNOCKBACK);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
class instance_throne_of_the_tides : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
@@ -181,23 +197,6 @@ class instance_throne_of_the_tides : public InstanceMapScript
|
||||
switch (type)
|
||||
{
|
||||
case DATA_LADY_NAZJAR:
|
||||
for (ObjectGuid guid : _geyserGUIDs)
|
||||
{
|
||||
if (Creature* geyser = instance->GetCreature(guid))
|
||||
{
|
||||
if (state == IN_PROGRESS)
|
||||
{
|
||||
geyser->CastSpell(geyser, SPELL_GEYSER_DUMMY);
|
||||
geyser->CastSpell(geyser, SPELL_GEYSER_DUMMY_KNOCKBACK);
|
||||
}
|
||||
else
|
||||
{
|
||||
geyser->RemoveAurasDueToSpell(SPELL_GEYSER_DUMMY);
|
||||
geyser->RemoveAurasDueToSpell(SPELL_GEYSER_DUMMY_KNOCKBACK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (state == DONE)
|
||||
if (GameObject* defenseSystem = GetGameObject(DATA_THRONE_OF_THE_TIDES_DEFENSE_SYSTEM))
|
||||
defenseSystem->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
@@ -232,18 +231,25 @@ class instance_throne_of_the_tides : public InstanceMapScript
|
||||
creature->setActive(true);
|
||||
creature->SetFarVisible(true);
|
||||
|
||||
_infiniteAOIDummyGUIDs.push_back(creature->GetGUID());
|
||||
|
||||
if (creature->GetExactDist2d(fallingRocksDummyPos) < 1.0f)
|
||||
{
|
||||
_fallingRocksDummyGUID = creature->GetGUID();
|
||||
if (_eventIndex < EVENT_INDEX_DEFENSE_SYSTEM_ACTIVATED)
|
||||
events.ScheduleEvent(EVENT_FALLING_ROCKS, 1min + 15s);
|
||||
break;
|
||||
}
|
||||
else if (creature->GetExactDist2d(shockDefenseDummyPos) < 1.0f)
|
||||
{
|
||||
_shockDefenseDummyGUID = creature->GetGUID();
|
||||
break;
|
||||
}
|
||||
else if (creature->GetExactDist2d(ulthokIntroDummyPos) < 1.0f)
|
||||
{
|
||||
_ulthokIntroDummyGUID = creature->GetGUID();
|
||||
break;
|
||||
}
|
||||
|
||||
_infiniteAOIDummyGUIDs.push_back(creature->GetGUID());
|
||||
break;
|
||||
case NPC_GEYSER_DUMMY:
|
||||
_geyserGUIDs.push_back(creature->GetGUID());
|
||||
@@ -412,6 +418,24 @@ class instance_throne_of_the_tides : public InstanceMapScript
|
||||
|
||||
SaveToDB();
|
||||
break;
|
||||
case DATA_LADY_NAZJAR_GEYSERS:
|
||||
for (ObjectGuid guid : _geyserGUIDs)
|
||||
{
|
||||
if (Creature* geyser = instance->GetCreature(guid))
|
||||
{
|
||||
if (data == IN_PROGRESS)
|
||||
{
|
||||
geyser->CastSpell(geyser, SPELL_GEYSER_DUMMY);
|
||||
geyser->m_Events.AddEventAtOffset(new GeyserActivationEvent(geyser), 6s);
|
||||
}
|
||||
else
|
||||
{
|
||||
geyser->RemoveAllAuras();
|
||||
geyser->m_Events.KillAllEvents(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,8 @@ enum TotTDataTypes
|
||||
DATA_LEVIATHAN_TENTACLE_2 = 13,
|
||||
DATA_ABYSSAL_CORAL_CHUNK = 14,
|
||||
DATA_NEPTULON = 15,
|
||||
DATA_OZUMAT_VEHICLE = 16
|
||||
DATA_OZUMAT_VEHICLE = 16,
|
||||
DATA_LADY_NAZJAR_GEYSERS = 17
|
||||
};
|
||||
|
||||
enum TotTCreatureIds
|
||||
|
||||
Reference in New Issue
Block a user