Scripts/The Eye: Few updates to Kael'thas & Astromancer (#27304)

(cherry picked from commit 43315e0e19)
This commit is contained in:
offl
2021-12-01 02:51:04 +02:00
committed by Shauren
parent b6c02d20d5
commit 8d3a408fdc
3 changed files with 114 additions and 67 deletions

View File

@@ -0,0 +1,9 @@
--
DELETE FROM `spell_script_names` WHERE
(`spell_id` = 36730 AND `ScriptName` = 'spell_kaelthas_flame_strike') OR
(`spell_id` = 36976 AND `ScriptName` = 'spell_kaelthas_summon_weapons') OR
(`spell_id` = 39497 AND `ScriptName` = 'spell_kaelthas_remove_weapons');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(36730,'spell_kaelthas_flame_strike'),
(36976,'spell_kaelthas_summon_weapons'),
(39497,'spell_kaelthas_remove_weapons');

View File

@@ -4583,9 +4583,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
bf->RemovePlayerFromResurrectQueue(target->GetGUID());
}
break;
case 36730: // Flame Strike
target->CastSpell(target, 36731, this);
break;
case 43681: // Inactive
{
if (target->GetTypeId() != TYPEID_PLAYER || aurApp->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
@@ -4595,9 +4592,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
target->ToPlayer()->LeaveBattleground();
break;
}
case 42783: // Wrath of the Astromancer
target->CastSpell(target, GetAmount(), this);
break;
case 46308: // Burning Winds cast only at creatures at spawn
target->CastSpell(target, 47287, this);
break;

View File

@@ -27,6 +27,7 @@ EndScriptData */
#include "InstanceScript.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
#include "SpellScript.h"
@@ -85,9 +86,7 @@ enum Spells
// Phase 4 spells
SPELL_FIREBALL = 36805,
SPELL_PYROBLAST = 36819,
SPELL_FLAME_STRIKE = 36735,
SPELL_FLAME_STRIKE_VIS = 36730,
SPELL_FLAME_STRIKE_DMG = 36731,
SPELL_SUMMON_FLAME_STRIKE = 36735,
SPELL_ARCANE_DISRUPTION = 36834,
SPELL_SHOCK_BARRIER = 36815,
SPELL_PHOENIX_ANIMATION = 36723,
@@ -144,6 +143,16 @@ enum Spells
SPELL_GRAVITY_LAPSE_TELE_CASTER_RIGHT2 = 35989,
SPELL_GRAVITY_LAPSE_TELE_CASTER_BACK_RIGHT3 = 35990,
// Generic spells
SPELL_REMOVE_WEAPONS = 39497,
SPELL_REMOVE_WEAPONA = 39498,
SPELL_REMOVE_WEAPONB = 39499,
SPELL_REMOVE_WEAPONC = 39500,
SPELL_REMOVE_WEAPOND = 39501,
SPELL_REMOVE_WEAPONE = 39502,
SPELL_REMOVE_WEAPONF = 39503,
SPELL_REMOVE_WEAPONG = 39504,
// Thaladred the Darkener spells
SPELL_PSYCHIC_BLOW = 10689,
SPELL_SILENCE = 30225,
@@ -163,7 +172,11 @@ enum Spells
//Phoenix spell
SPELL_BURN = 36720,
SPELL_EMBER_BLAST = 34341,
SPELL_REBIRTH = 41587
SPELL_REBIRTH = 41587,
// Flame Strike
SPELL_FLAME_STRIKE_DUMMY = 36730,
SPELL_FLAME_STRIKE_DAMAGE = 36731
};
enum Creatures
@@ -261,12 +274,18 @@ enum MovementPoints
POINT_END_TRANSITION = 6
};
uint32 m_auiSpellSummonWeapon[]=
uint32 const SummonWeaponsSpells[] =
{
SPELL_SUMMON_WEAPONA, SPELL_SUMMON_WEAPONB, SPELL_SUMMON_WEAPONC, SPELL_SUMMON_WEAPOND,
SPELL_SUMMON_WEAPONE, SPELL_SUMMON_WEAPONF, SPELL_SUMMON_WEAPONG
};
uint32 const RemoveWeaponsSpells[] =
{
SPELL_REMOVE_WEAPONA, SPELL_REMOVE_WEAPONB, SPELL_REMOVE_WEAPONC, SPELL_REMOVE_WEAPOND,
SPELL_REMOVE_WEAPONE, SPELL_REMOVE_WEAPONF, SPELL_REMOVE_WEAPONG
};
uint32 GravityLapseSpells[] =
{
SPELL_GRAVITY_LAPSE_TELE_FRONT,
@@ -344,6 +363,7 @@ struct boss_kaelthas : public BossAI
void JustReachedHome() override
{
BossAI::JustReachedHome();
DoCastSelf(SPELL_REMOVE_WEAPONS);
// Rebuild the surrounding environment.
if (GameObject* statue = instance->GetGameObject(DATA_KAEL_STATUE_LEFT))
@@ -568,17 +588,9 @@ struct boss_kaelthas : public BossAI
++_advisorCounter;
break;
case EVENT_SUMMON_WEAPONS:
{
DoCast(me, SPELL_SUMMON_WEAPONS, false);
uint8 uiMaxWeapon = sizeof(m_auiSpellSummonWeapon) / sizeof(uint32);
for (uint32 i = 0; i < uiMaxWeapon; ++i)
DoCast(me, m_auiSpellSummonWeapon[i], true);
DoCastSelf(SPELL_SUMMON_WEAPONS);
events.ScheduleEvent(EVENT_REVIVE_ADVISORS, 120s);
break;
}
case EVENT_REVIVE_ADVISORS:
_phase = PHASE_REVIVED_ADVISORS;
Talk(SAY_PHASE3_ADVANCE);
@@ -608,7 +620,7 @@ struct boss_kaelthas : public BossAI
break;
case EVENT_FLAMESTRIKE:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
DoCast(target, SPELL_FLAME_STRIKE);
DoCast(target, SPELL_SUMMON_FLAME_STRIKE);
events.ScheduleEvent(EVENT_FLAMESTRIKE, 30s, EVENT_GROUP_COMBAT, PHASE_COMBAT);
break;
@@ -1193,56 +1205,17 @@ struct boss_master_engineer_telonicus : public advisorbase_ai
struct npc_kael_flamestrike : public ScriptedAI
{
npc_kael_flamestrike(Creature* creature) : ScriptedAI(creature)
npc_kael_flamestrike(Creature* creature) : ScriptedAI(creature) { }
void InitializeAI() override
{
Initialize();
SetCombatMovement(false);
me->SetReactState(REACT_PASSIVE);
}
void Initialize()
void JustAppeared() override
{
Timer = 5000;
Casting = false;
KillSelf = false;
}
uint32 Timer;
bool Casting;
bool KillSelf;
void Reset() override
{
Initialize();
}
void MoveInLineOfSight(Unit* /*who*/) override { }
void JustEngagedWith(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
{
if (!Casting)
{
DoCast(me, SPELL_FLAME_STRIKE_VIS);
Casting = true;
}
//Timer
if (Timer <= diff)
{
if (!KillSelf)
{
me->InterruptNonMeleeSpells(false);
DoCast(me, SPELL_FLAME_STRIKE_DMG);
}
else
me->KillSelf();
KillSelf = true;
Timer = 1000;
}
else
Timer -= diff;
DoCastSelf(SPELL_FLAME_STRIKE_DUMMY);
me->DespawnOrUnsummon(15s);
}
};
@@ -1380,6 +1353,74 @@ private:
uint8 _targetCount;
};
// 36730 - Flame Strike
class spell_kaelthas_flame_strike : public AuraScript
{
PrepareAuraScript(spell_kaelthas_flame_strike);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_FLAME_STRIKE_DAMAGE });
}
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* target = GetTarget())
target->CastSpell(target, SPELL_FLAME_STRIKE_DAMAGE);
}
void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_kaelthas_flame_strike::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
// 36976 - Summon Weapons
class spell_kaelthas_summon_weapons : public SpellScript
{
PrepareSpellScript(spell_kaelthas_summon_weapons);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(SummonWeaponsSpells);
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Unit* caster = GetCaster())
for (uint32 spells : SummonWeaponsSpells)
caster->CastSpell(caster, spells, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_kaelthas_summon_weapons::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
// 39497 - Remove Enchanted Weapons
class spell_kaelthas_remove_weapons : public SpellScript
{
PrepareSpellScript(spell_kaelthas_remove_weapons);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(RemoveWeaponsSpells);
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
if (Player* player = GetHitPlayer())
for (uint32 spells : RemoveWeaponsSpells)
player->CastSpell(player, spells, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST));
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_kaelthas_remove_weapons::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void AddSC_boss_kaelthas()
{
RegisterTheEyeCreatureAI(boss_kaelthas);
@@ -1391,4 +1432,7 @@ void AddSC_boss_kaelthas()
RegisterTheEyeCreatureAI(npc_phoenix_tk);
RegisterTheEyeCreatureAI(npc_phoenix_egg_tk);
RegisterSpellScript(spell_kael_gravity_lapse);
RegisterSpellScript(spell_kaelthas_flame_strike);
RegisterSpellScript(spell_kaelthas_summon_weapons);
RegisterSpellScript(spell_kaelthas_remove_weapons);
}