fix(Scripts/Freya): misc improvements (#11665)

This commit is contained in:
avarishd
2022-05-09 00:02:15 +03:00
committed by GitHub
parent 4df92b553c
commit 8f485cb5d4
@@ -183,25 +183,26 @@ enum FreyaEvents
EVENT_DETONATING_LASHER_FLAME_LASH = 55, EVENT_DETONATING_LASHER_FLAME_LASH = 55,
}; };
enum FreyaSounds enum Texts
{ {
// STONEBARK // Elder Brightleaf / Elder Ironbranch / Elder Stonebark
SOUND_STONEBARK_AGGRO = 15500, SAY_ELDER_AGGRO = 0,
SOUND_STONEBARK_SLAY1 = 15501, SAY_ELDER_SLAY = 1,
SOUND_STONEBARK_SLAY2 = 15502, SAY_ELDER_DEATH = 2,
SOUND_STONEBARK_DEATH = 15503,
// IRONBRANCH // Freya
SOUND_IRONBRANCH_AGGRO = 15493, SAY_AGGRO = 0,
SOUND_IRONBRANCH_SLAY1 = 15494, SAY_AGGRO_WITH_ELDER = 1,
SOUND_IRONBRANCH_SLAY2 = 15495, SAY_SLAY = 2,
SOUND_IRONBRANCH_DEATH = 15496, SAY_DEATH = 3,
SAY_BERSERK = 4,
// BRIGHTLEAF SAY_SUMMON_CONSERVATOR = 5,
SOUND_BRIGHTLEAF_AGGRO = 15483, SAY_SUMMON_TRIO = 6,
SOUND_BRIGHTLEAF_SLAY1 = 15485, SAY_SUMMON_LASHERS = 7,
SOUND_BRIGHTLEAF_SLAY2 = 15486, EMOTE_LIFEBINDERS_GIFT = 8,
SOUND_BRIGHTLEAF_DEATH = 15487, EMOTE_ALLIES_OF_NATURE = 9,
EMOTE_GROUND_TREMOR = 10,
EMOTE_IRON_ROOTS = 11,
}; };
enum FreyaNPCs enum FreyaNPCs
@@ -224,20 +225,6 @@ enum FreyaNPCs
NPC_DETONATING_LASHER = 32918, NPC_DETONATING_LASHER = 32918,
}; };
enum FreyaSouns
{
SOUND_AGGRO = 15526,
SOUND_ELDERS = 15527,
SOUND_CONSERVATOR = 15528,
SOUND_SLAY1 = 15529,
SOUND_SLAY2 = 15530,
SOUND_DEATH = 15531,
SOUND_BERSERK = 15532,
SOUND_TRIO = 15533,
SOUND_DETONATING = 15534,
SOUND_ASKHELP = 15535,
};
enum Misc enum Misc
{ {
ACTION_REMOVE_10_STACK = 10, ACTION_REMOVE_10_STACK = 10,
@@ -245,6 +232,7 @@ enum Misc
ACTION_REMOVE_2_STACK = 2, ACTION_REMOVE_2_STACK = 2,
ACTION_RESPAWN_TRIO = 1, ACTION_RESPAWN_TRIO = 1,
ACTION_LUMBERJACKED = -1, ACTION_LUMBERJACKED = -1,
ACTION_ELDER_FREYA_KILLED = 1,
EVENT_PHASE_ADDS = 1, EVENT_PHASE_ADDS = 1,
EVENT_PHASE_FINAL = 2, EVENT_PHASE_FINAL = 2,
@@ -322,32 +310,21 @@ public:
if (victim->GetTypeId() != TYPEID_PLAYER || urand(0, 2)) if (victim->GetTypeId() != TYPEID_PLAYER || urand(0, 2))
return; return;
if (urand(0, 1)) Talk(SAY_SLAY);
{
me->Yell("Forgive me.", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_SLAY1);
}
else
{
me->Yell("From your death springs life anew!", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_SLAY2);
}
} }
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override
{ {
// kaboom!
if (damage >= me->GetHealth()) if (damage >= me->GetHealth())
{ {
me->Yell("His hold on me dissipates. I can see clearly once more. Thank you, heroes.", LANG_UNIVERSAL); Talk(SAY_DEATH);
me->PlayDirectSound(SOUND_DEATH);
damage = 0; damage = 0;
me->SetReactState(REACT_PASSIVE);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetFaction(FACTION_FRIENDLY); me->SetFaction(FACTION_FRIENDLY);
me->SetHealth(me->GetMaxHealth());
me->CombatStop();
me->RemoveAllAuras(); me->RemoveAllAuras();
me->AttackStop();
events.Reset(); events.Reset();
summons.DespawnAll(); summons.DespawnAll();
@@ -360,7 +337,7 @@ public:
continue; continue;
if (Creature* e = ObjectAccessor::GetCreature(*me, _elderGUID[i])) if (Creature* e = ObjectAccessor::GetCreature(*me, _elderGUID[i]))
Unit::Kill(e, e); e->AI()->DoAction(ACTION_ELDER_FREYA_KILLED);
++_elderCount; ++_elderCount;
} }
@@ -397,12 +374,12 @@ public:
void SpawnWave() void SpawnWave()
{ {
_waveNumber = _waveNumber == 1 ? 3 : _waveNumber - 1; _waveNumber = _waveNumber == 1 ? 3 : _waveNumber - 1;
Talk(EMOTE_ALLIES_OF_NATURE);
// Wave of three // Wave of three
if (_waveNumber == 1) if (_waveNumber == 1)
{ {
me->Yell("Children, assist me!", LANG_UNIVERSAL); Talk(SAY_SUMMON_TRIO);
me->PlayDirectSound(SOUND_TRIO);
me->SummonCreature(NPC_ANCIENT_WATER_SPIRIT, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); me->SummonCreature(NPC_ANCIENT_WATER_SPIRIT, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
me->SummonCreature(NPC_STORM_LASHER, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); me->SummonCreature(NPC_STORM_LASHER, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
me->SummonCreature(NPC_SNAPLASHER, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); me->SummonCreature(NPC_SNAPLASHER, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()));
@@ -410,15 +387,13 @@ public:
// Ancient Conservator // Ancient Conservator
else if (_waveNumber == 2) else if (_waveNumber == 2)
{ {
me->Yell("Eonar, your servant requires aid!", LANG_UNIVERSAL); Talk(SAY_SUMMON_CONSERVATOR);
me->PlayDirectSound(SOUND_CONSERVATOR);
me->SummonCreature(NPC_ANCIENT_CONSERVATOR, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(NPC_ANCIENT_CONSERVATOR, me->GetPositionX() + urand(5, 15), me->GetPositionY() + urand(5, 15), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_CORPSE_DESPAWN);
} }
// Detonating Lashers // Detonating Lashers
else if (_waveNumber == 3) else if (_waveNumber == 3)
{ {
me->Yell("The swarm of the elements shall overtake you!", LANG_UNIVERSAL); Talk(SAY_SUMMON_LASHERS);
me->PlayDirectSound(SOUND_DETONATING);
for (uint8 i = 0; i < 10; ++i) for (uint8 i = 0; i < 10; ++i)
me->SummonCreature(NPC_DETONATING_LASHER, me->GetPositionX() + urand(5, 20), me->GetPositionY() + urand(5, 20), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_CORPSE_DESPAWN); me->SummonCreature(NPC_DETONATING_LASHER, me->GetPositionX() + urand(5, 20), me->GetPositionY() + urand(5, 20), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_CORPSE_DESPAWN);
} }
@@ -553,13 +528,11 @@ public:
if (_elderGUID[0] || _elderGUID[1] || _elderGUID[2]) if (_elderGUID[0] || _elderGUID[1] || _elderGUID[2])
{ {
me->Yell("Elders, grant me your strength!", LANG_UNIVERSAL); Talk(SAY_AGGRO_WITH_ELDER);
me->PlayDirectSound(SOUND_ELDERS);
} }
else else
{ {
me->Yell("The Conservatory must be protected!", LANG_UNIVERSAL); Talk(SAY_AGGRO);
me->PlayDirectSound(SOUND_AGGRO);
} }
} }
@@ -595,6 +568,7 @@ public:
break; break;
case EVENT_FREYA_LIFEBINDER: case EVENT_FREYA_LIFEBINDER:
{ {
Talk(EMOTE_LIFEBINDERS_GIFT);
events.RepeatEvent(45000); events.RepeatEvent(45000);
float x, y, z; float x, y, z;
for (uint8 i = 0; i < 10; ++i) for (uint8 i = 0; i < 10; ++i)
@@ -643,15 +617,16 @@ public:
break; break;
} }
case EVENT_FREYA_BERSERK: case EVENT_FREYA_BERSERK:
me->Yell("You have strayed too far, wasted too much time!", LANG_UNIVERSAL); Talk(SAY_BERSERK);
me->PlayDirectSound(SOUND_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
break; break;
case EVENT_FREYA_GROUND_TREMOR: case EVENT_FREYA_GROUND_TREMOR:
Talk(EMOTE_GROUND_TREMOR);
me->CastSpell(me, SPELL_GROUND_TREMOR_FREYA, false); me->CastSpell(me, SPELL_GROUND_TREMOR_FREYA, false);
events.RepeatEvent(25000 + urand(0, 10000)); events.RepeatEvent(25000 + urand(0, 10000));
break; break;
case EVENT_FREYA_IRON_ROOT: case EVENT_FREYA_IRON_ROOT:
Talk(EMOTE_IRON_ROOTS);
me->CastCustomSpell(SPELL_IRON_ROOTS_FREYA, SPELLVALUE_MAX_TARGETS, 1, me, false); me->CastCustomSpell(SPELL_IRON_ROOTS_FREYA, SPELLVALUE_MAX_TARGETS, 1, me, false);
events.RepeatEvent(45000 + urand(0, 10000)); events.RepeatEvent(45000 + urand(0, 10000));
break; break;
@@ -706,24 +681,14 @@ public:
if (urand(0, 1)) if (urand(0, 1))
return; return;
if (urand(0, 1)) Talk(SAY_ELDER_SLAY);
{
me->TextEmote("Angry roar");
me->PlayDirectSound(SOUND_STONEBARK_SLAY1);
}
else
{
me->Yell("Such a waste.", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_STONEBARK_SLAY2);
}
} }
void JustDied(Unit* killer) override void JustDied(Unit* killer) override
{ {
if (killer && me->GetEntry() == killer->GetEntry()) if (killer && me->GetEntry() == killer->GetEntry())
return; return;
me->Yell("Matron, flee! They are ruthless....", LANG_UNIVERSAL); Talk(SAY_ELDER_DEATH);
me->PlayDirectSound(SOUND_STONEBARK_DEATH);
// Lumberjacked // Lumberjacked
if (me->GetInstanceScript()) if (me->GetInstanceScript())
@@ -737,8 +702,8 @@ public:
events.ScheduleEvent(EVENT_STONEBARK_GROUND_TREMOR, 5000); events.ScheduleEvent(EVENT_STONEBARK_GROUND_TREMOR, 5000);
events.ScheduleEvent(EVENT_STONEBARK_PETRIFIED_BARK, 20000); events.ScheduleEvent(EVENT_STONEBARK_PETRIFIED_BARK, 20000);
me->Yell("This place will serve as your graveyard.", LANG_UNIVERSAL); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation
me->PlayDirectSound(SOUND_STONEBARK_AGGRO); Talk(SAY_ELDER_AGGRO);
} }
void DamageTaken(Unit*, uint32& damage, DamageEffectType damageType, SpellSchoolMask damageSchoolMask) override void DamageTaken(Unit*, uint32& damage, DamageEffectType damageType, SpellSchoolMask damageSchoolMask) override
@@ -779,6 +744,16 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
void DoAction(int32 action) override
{
switch (action)
{
case ACTION_ELDER_FREYA_KILLED:
me->DespawnOrUnsummon();
break;
}
}
}; };
}; };
@@ -812,24 +787,14 @@ public:
if (urand(0, 1)) if (urand(0, 1))
return; return;
if (urand(0, 1)) Talk(SAY_ELDER_SLAY);
{
me->Yell("Fertilizer.", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_BRIGHTLEAF_SLAY1);
}
else
{
me->Yell("Your corpse will nourish the soil!", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_BRIGHTLEAF_SLAY2);
}
} }
void JustDied(Unit* killer) override void JustDied(Unit* killer) override
{ {
if (killer && me->GetEntry() == killer->GetEntry()) if (killer && me->GetEntry() == killer->GetEntry())
return; return;
me->Yell("Matron, one has fallen!", LANG_UNIVERSAL); Talk(SAY_ELDER_DEATH);
me->PlayDirectSound(SOUND_BRIGHTLEAF_DEATH);
// Lumberjacked // Lumberjacked
if (me->GetInstanceScript()) if (me->GetInstanceScript())
@@ -843,8 +808,8 @@ public:
events.ScheduleEvent(EVENT_BRIGHTLEAF_SOLAR_FLARE, 5000); events.ScheduleEvent(EVENT_BRIGHTLEAF_SOLAR_FLARE, 5000);
events.ScheduleEvent(EVENT_BRIGHTLEAF_UNSTABLE_SUN_BEAM, 8000); events.ScheduleEvent(EVENT_BRIGHTLEAF_UNSTABLE_SUN_BEAM, 8000);
me->Yell("Matron, the Conservatory has been breached!", LANG_UNIVERSAL); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation
me->PlayDirectSound(SOUND_BRIGHTLEAF_AGGRO); Talk(SAY_ELDER_AGGRO);
} }
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
@@ -902,6 +867,16 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
void DoAction(int32 action) override
{
switch (action)
{
case ACTION_ELDER_FREYA_KILLED:
me->DespawnOrUnsummon();
break;
}
}
}; };
}; };
@@ -933,24 +908,14 @@ public:
if (urand(0, 1)) if (urand(0, 1))
return; return;
if (urand(0, 1)) Talk(SAY_ELDER_SLAY);
{
me->Yell("I return you whence you came!", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_IRONBRANCH_SLAY1);
}
else
{
me->Yell("BEGONE!", LANG_UNIVERSAL);
me->PlayDirectSound(SOUND_IRONBRANCH_SLAY2);
}
} }
void JustDied(Unit* killer) override void JustDied(Unit* killer) override
{ {
if (killer && me->GetEntry() == killer->GetEntry()) if (killer && me->GetEntry() == killer->GetEntry())
return; return;
me->Yell("Freya! They come for you.", LANG_UNIVERSAL); Talk(SAY_ELDER_DEATH);
me->PlayDirectSound(SOUND_IRONBRANCH_DEATH);
// Lumberjacked // Lumberjacked
if (me->GetInstanceScript()) if (me->GetInstanceScript())
@@ -964,8 +929,8 @@ public:
events.ScheduleEvent(EVENT_IRONBRANCH_IRON_ROOT, 15000); events.ScheduleEvent(EVENT_IRONBRANCH_IRON_ROOT, 15000);
events.ScheduleEvent(EVENT_IRONBRANCH_THORN_SWARM, 3000); events.ScheduleEvent(EVENT_IRONBRANCH_THORN_SWARM, 3000);
me->Yell("Mortals have no place here!", LANG_UNIVERSAL); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation
me->PlayDirectSound(SOUND_IRONBRANCH_AGGRO); Talk(SAY_ELDER_AGGRO);
} }
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
@@ -996,6 +961,16 @@ public:
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
void DoAction(int32 action) override
{
switch (action)
{
case ACTION_ELDER_FREYA_KILLED:
me->DespawnOrUnsummon();
break;
}
}
}; };
}; };