diff --git a/data/sql/updates/pending_db_world/rev_1636652299107244900.sql b/data/sql/updates/pending_db_world/rev_1636652299107244900.sql new file mode 100644 index 000000000..b6184082f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1636652299107244900.sql @@ -0,0 +1,5 @@ +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1636652299107244900'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 10316; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(10316, 0, 0, '%s attempts to run away in fear!', 16, 0, 100, 0, 0, 0, 1150, 0, 'Blackhand Incarcerator - EMOTE_FLEE'); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index 331c90b3f..9c5981efb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -96,7 +96,7 @@ public: // Prevent clearing summon list, otherwise Rend despawns if the drake is killed first. void JustDied(Unit* /*killer*/) override { } - void DamageTaken(Unit* /*aggressor*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override { if (!_summonedRend && me->HealthBelowPctDamaged(25, damage)) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index c5d14baf8..b5cba5ddc 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -264,7 +264,7 @@ public: break; } case EVENT_ENTER_COMBAT: - AttackStart(me->SelectNearestPlayer(30.0f)); + DoZoneInCombat(); break; default: break; @@ -292,8 +292,7 @@ public: events.ScheduleEvent(EVENT_FLAMEBUFFET, 14000); break; case EVENT_PYROBLAST: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_PYROBLAST); + DoCastRandomTarget(SPELL_PYROBLAST, 0, 100.0f); events.ScheduleEvent(EVENT_PYROBLAST, 15000); break; default: @@ -314,13 +313,15 @@ public: ## npc_blackhand_incarcerator ####*/ -enum IncarceratorEvents +enum IncarceratorData { // OOC EVENT_ENCAGED_EMBERSEER = 1, // Combat EVENT_STRIKE = 2, - EVENT_ENCAGE = 3 + EVENT_ENCAGE = 3, + + EMOTE_FLEE = 0 }; class npc_blackhand_incarcerator : public CreatureScript @@ -330,13 +331,18 @@ public: struct npc_blackhand_incarceratorAI : public ScriptedAI { - npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) { } + npc_blackhand_incarceratorAI(Creature* creature) : ScriptedAI(creature) + { + _fleedForAssistance = false; + } void Reset() override { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true)) Emberseer->AI()->SetData(1, 3); + + _fleedForAssistance = false; } void JustDied(Unit* /*killer*/) override @@ -344,12 +350,23 @@ public: me->DespawnOrUnsummon(10000); } + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override + { + if (!_fleedForAssistance && me->HealthBelowPctDamaged(30, damage)) + { + _fleedForAssistance = true; + me->DoFleeToGetAssistance(); + Talk(EMOTE_FLEE); + } + } + void SetData(uint32 data, uint32 value) override { if (data == 1 && value == 1) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->InterruptSpell(CURRENT_CHANNELED_SPELL); + DoZoneInCombat(); _events.CancelEvent(EVENT_ENCAGED_EMBERSEER); } @@ -423,6 +440,7 @@ public: private: EventMap _events; + bool _fleedForAssistance; }; CreatureAI* GetAI(Creature* creature) const override