mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-09 08:17:56 +00:00
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:
@@ -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');
|
||||||
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user