fix(Scripts/UBRS): Pyroguard Emberseer adds improvements (#9136)

* Put Blackhand incarcerators in combat with zone once the event starts
* Implement Blackhand Incarcerator flee for assistance
This commit is contained in:
Skjalf
2021-11-12 08:07:32 -03:00
committed by GitHub
parent dd944c6f53
commit 5f2d86cece
3 changed files with 30 additions and 7 deletions

View File

@@ -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');

View File

@@ -96,7 +96,7 @@ public:
// Prevent clearing summon list, otherwise Rend despawns if the drake is killed first. // Prevent clearing summon list, otherwise Rend despawns if the drake is killed first.
void JustDied(Unit* /*killer*/) override { } 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)) if (!_summonedRend && me->HealthBelowPctDamaged(25, damage))
{ {

View File

@@ -264,7 +264,7 @@ public:
break; break;
} }
case EVENT_ENTER_COMBAT: case EVENT_ENTER_COMBAT:
AttackStart(me->SelectNearestPlayer(30.0f)); DoZoneInCombat();
break; break;
default: default:
break; break;
@@ -292,8 +292,7 @@ public:
events.ScheduleEvent(EVENT_FLAMEBUFFET, 14000); events.ScheduleEvent(EVENT_FLAMEBUFFET, 14000);
break; break;
case EVENT_PYROBLAST: case EVENT_PYROBLAST:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCastRandomTarget(SPELL_PYROBLAST, 0, 100.0f);
DoCast(target, SPELL_PYROBLAST);
events.ScheduleEvent(EVENT_PYROBLAST, 15000); events.ScheduleEvent(EVENT_PYROBLAST, 15000);
break; break;
default: default:
@@ -314,13 +313,15 @@ public:
## npc_blackhand_incarcerator ## npc_blackhand_incarcerator
####*/ ####*/
enum IncarceratorEvents enum IncarceratorData
{ {
// OOC // OOC
EVENT_ENCAGED_EMBERSEER = 1, EVENT_ENCAGED_EMBERSEER = 1,
// Combat // Combat
EVENT_STRIKE = 2, EVENT_STRIKE = 2,
EVENT_ENCAGE = 3 EVENT_ENCAGE = 3,
EMOTE_FLEE = 0
}; };
class npc_blackhand_incarcerator : public CreatureScript class npc_blackhand_incarcerator : public CreatureScript
@@ -330,13 +331,18 @@ public:
struct npc_blackhand_incarceratorAI : public ScriptedAI 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 void Reset() override
{ {
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); 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)) if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true))
Emberseer->AI()->SetData(1, 3); Emberseer->AI()->SetData(1, 3);
_fleedForAssistance = false;
} }
void JustDied(Unit* /*killer*/) override void JustDied(Unit* /*killer*/) override
@@ -344,12 +350,23 @@ public:
me->DespawnOrUnsummon(10000); 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 void SetData(uint32 data, uint32 value) override
{ {
if (data == 1 && value == 1) if (data == 1 && value == 1)
{ {
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->InterruptSpell(CURRENT_CHANNELED_SPELL); me->InterruptSpell(CURRENT_CHANNELED_SPELL);
DoZoneInCombat();
_events.CancelEvent(EVENT_ENCAGED_EMBERSEER); _events.CancelEvent(EVENT_ENCAGED_EMBERSEER);
} }
@@ -423,6 +440,7 @@ public:
private: private:
EventMap _events; EventMap _events;
bool _fleedForAssistance;
}; };
CreatureAI* GetAI(Creature* creature) const override CreatureAI* GetAI(Creature* creature) const override