diff options
author | offl <11556157+offl@users.noreply.github.com> | 2025-08-10 13:01:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-10 12:01:01 +0200 |
commit | 3a964bc3f900c7c2cb22be15ae7f06df532269dc (patch) | |
tree | 5e27392bdae681c95224a47119a05698adefb4cb | |
parent | 54f42db98f311d5925f71211b4f55f4ac2b8b6ee (diff) |
Scripts/Karazhan: Update Maiden of Virtue (#31165)
-rw-r--r-- | src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp | 160 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/Karazhan/karazhan.h | 2 |
2 files changed, 82 insertions, 80 deletions
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index a1848abb7c8..348e2aa6380 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -15,20 +15,16 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* + * Timers requires to be revisited + */ + #include "ScriptMgr.h" #include "karazhan.h" #include "ScriptedCreature.h" +#include "SpellInfo.h" -enum Spells -{ - SPELL_REPENTANCE = 29511, - SPELL_HOLYFIRE = 29522, - SPELL_HOLYWRATH = 32445, - SPELL_HOLYGROUND = 29523, - SPELL_BERSERK = 26662 -}; - -enum Yells +enum MaidenOfVirtueTexts { SAY_AGGRO = 0, SAY_SLAY = 1, @@ -36,98 +32,102 @@ enum Yells SAY_DEATH = 3 }; -enum Events +enum MaidenOfVirtueSpells +{ + SPELL_HOLYGROUND = 29523, + SPELL_REPENTANCE = 29511, + SPELL_HOLYFIRE = 29522, + SPELL_HOLYWRATH = 32445, + SPELL_BERSERK = 26662 +}; + +enum MaidenOfVirtueEvents { EVENT_REPENTANCE = 1, - EVENT_HOLYFIRE = 2, - EVENT_HOLYWRATH = 3, - EVENT_ENRAGE = 4 + EVENT_HOLYFIRE, + EVENT_HOLYWRATH, + EVENT_BERSERK }; -class boss_maiden_of_virtue : public CreatureScript +// 16457 - Maiden of Virtue +struct boss_maiden_of_virtue : public BossAI { -public: - boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { } + boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { } - struct boss_maiden_of_virtueAI : public BossAI + void JustEngagedWith(Unit* who) override { - boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { } + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + + DoCastSelf(SPELL_HOLYGROUND, true); + events.ScheduleEvent(EVENT_REPENTANCE, 33s, 45s); + events.ScheduleEvent(EVENT_HOLYFIRE, 8s); + events.ScheduleEvent(EVENT_HOLYWRATH, 15s, 25s); + events.ScheduleEvent(EVENT_BERSERK, 10min); + } - void KilledUnit(Unit* /*Victim*/) override - { - if (roll_chance_i(50)) - Talk(SAY_SLAY); - } + void OnSpellCast(SpellInfo const* spell) override + { + if (spell->Id == SPELL_REPENTANCE) + Talk(SAY_REPENTANCE); + } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - _JustDied(); - } + void KilledUnit(Unit* /*victim*/) override + { + if (roll_chance_i(50)) + Talk(SAY_SLAY); + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - - DoCastSelf(SPELL_HOLYGROUND, true); - events.ScheduleEvent(EVENT_REPENTANCE, 33s, 45s); - events.ScheduleEvent(EVENT_HOLYFIRE, 8s); - events.ScheduleEvent(EVENT_HOLYWRATH, 15s, 25s); - events.ScheduleEvent(EVENT_ENRAGE, 10min); - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); + } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - events.Update(diff); + events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - while (uint32 eventId = events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) { - switch (eventId) - { - case EVENT_REPENTANCE: - DoCastVictim(SPELL_REPENTANCE); - Talk(SAY_REPENTANCE); - events.Repeat(Seconds(35)); - break; - case EVENT_HOLYFIRE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50, true)) - DoCast(target, SPELL_HOLYFIRE); - events.Repeat(Seconds(8), Seconds(19)); - break; - case EVENT_HOLYWRATH: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 80, true)) - DoCast(target, SPELL_HOLYWRATH); - events.Repeat(Seconds(15), Seconds(25)); - break; - case EVENT_ENRAGE: - DoCastSelf(SPELL_BERSERK, true); - break; - default: - break; - } - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + case EVENT_REPENTANCE: + DoCastVictim(SPELL_REPENTANCE); + events.Repeat(35s); + break; + case EVENT_HOLYFIRE: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50, true)) + DoCast(target, SPELL_HOLYFIRE); + events.Repeat(8s, 19s); + break; + case EVENT_HOLYWRATH: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 80, true)) + DoCast(target, SPELL_HOLYWRATH); + events.Repeat(15s, 25s); + break; + case EVENT_BERSERK: + DoCastSelf(SPELL_BERSERK); + break; + default: + break; } - DoMeleeAttackIfReady(); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; } - }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetKarazhanAI<boss_maiden_of_virtueAI>(creature); + DoMeleeAttackIfReady(); } }; void AddSC_boss_maiden_of_virtue() { - new boss_maiden_of_virtue(); + RegisterKarazhanCreatureAI(boss_maiden_of_virtue); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index a25d09e5ba4..4ac7b24c7c6 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -118,4 +118,6 @@ inline AI* GetKarazhanAI(T* obj) return GetInstanceAI<AI>(obj, KZScriptName); } +#define RegisterKarazhanCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetKarazhanAI) + #endif |