/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "the_botanica.h" enum Spells { SPELL_ALLERGIC_REACTION = 34697, SPELL_TELEPORT_SELF = 34673, SPELL_SUMMON_LASHER_1 = 34681, SPELL_SUMMON_FLAYER_1 = 34682, SPELL_SUMMON_LASHER_2 = 34684, SPELL_SUMMON_FLAYER_2 = 34685, SPELL_SUMMON_LASHER_3 = 34686, SPELL_SUMMON_FLAYER_4 = 34687, SPELL_SUMMON_LASHER_4 = 34688, SPELL_SUMMON_FLAYER_3 = 34690, SPELL_DAMAGE_IMMUNE_ARCANE = 34304, SPELL_DAMAGE_IMMUNE_FIRE = 34305, SPELL_DAMAGE_IMMUNE_FROST = 34306, SPELL_DAMAGE_IMMUNE_NATURE = 34308, SPELL_DAMAGE_IMMUNE_SHADOW = 34309 }; enum Misc { EMOTE_SUMMON = 0, MODEL_DEFAULT = 13109, MODEL_ARCANE = 14213, MODEL_FIRE = 13110, MODEL_FROST = 14112, MODEL_NATURE = 14214, }; struct LajTransformData { uint32 spellId; uint32 modelId; }; LajTransformData const LajTransform[5] = { { SPELL_DAMAGE_IMMUNE_SHADOW, MODEL_DEFAULT }, { SPELL_DAMAGE_IMMUNE_ARCANE, MODEL_ARCANE }, { SPELL_DAMAGE_IMMUNE_FIRE, MODEL_FIRE }, { SPELL_DAMAGE_IMMUNE_FROST, MODEL_FROST }, { SPELL_DAMAGE_IMMUNE_NATURE, MODEL_NATURE } }; struct boss_laj : public BossAI { boss_laj(Creature* creature) : BossAI(creature, DATA_LAJ), _lastTransform(LajTransform[0]) { } void Reset() override { _Reset(); me->SetDisplayId(MODEL_DEFAULT); _lastTransform = LajTransform[0]; DoCastSelf(SPELL_DAMAGE_IMMUNE_SHADOW, true); if (_transformContainer.empty()) { for (auto const& val : LajTransform) { _transformContainer.push_back(val); } } } void ScheduleTasks() override { ScheduleTimedEvent(5s, [&] { DoCastVictim(SPELL_ALLERGIC_REACTION); }, 25s); ScheduleTimedEvent(30s, [&] { me->RemoveAurasDueToSpell(_lastTransform.spellId); _lastTransform = Acore::Containers::SelectRandomContainerElementIf(_transformContainer, [&](LajTransformData data) -> bool { return data.spellId != _lastTransform.spellId; }); me->SetDisplayId(_lastTransform.modelId); DoCastSelf(_lastTransform.spellId, true); }, 35s); ScheduleTimedEvent(20s, [&] { DoCastSelf(SPELL_TELEPORT_SELF); me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->Clear(); scheduler.Schedule(2500ms, [this](TaskContext) { Talk(EMOTE_SUMMON); DoCastAOE(SPELL_SUMMON_LASHER_1, true); DoCastAOE(SPELL_SUMMON_FLAYER_1, true); me->SetReactState(REACT_AGGRESSIVE); me->ResumeChasingVictim(); }); }, 30s); } private: LajTransformData _lastTransform; std::list _transformContainer; }; void AddSC_boss_laj() { RegisterTheBotanicaCreatureAI(boss_laj); }