fix(Scripts\ZulGurub): Razzashi Cobra's will act as Venoxis minions (#8141)
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1632860884559995600');
|
||||||
|
DELETE FROM `creature` WHERE `id`=11373;
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='npc_razzashi_cobra_venoxis' WHERE entry=11373;
|
||||||
|
UPDATE `creature_template` SET `AIName`='' WHERE entry=11373;
|
||||||
@@ -49,7 +49,8 @@ enum Spells
|
|||||||
SPELL_PARASITIC_SERPENT_TRIGGER = 23867,
|
SPELL_PARASITIC_SERPENT_TRIGGER = 23867,
|
||||||
// used when swapping event-stages
|
// used when swapping event-stages
|
||||||
SPELL_VENOXIS_TRANSFORM = 23849, // 50% health - shapechange to cobra
|
SPELL_VENOXIS_TRANSFORM = 23849, // 50% health - shapechange to cobra
|
||||||
SPELL_FRENZY = 8269 // 20% health - frenzy
|
SPELL_FRENZY = 8269, // 20% health - frenzy
|
||||||
|
SPELL_POISON = 24097
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Events
|
enum Events
|
||||||
@@ -68,6 +69,7 @@ enum Events
|
|||||||
EVENT_VENOM_SPIT = 9,
|
EVENT_VENOM_SPIT = 9,
|
||||||
EVENT_PARASITIC_SERPENT = 10,
|
EVENT_PARASITIC_SERPENT = 10,
|
||||||
EVENT_FRENZY = 11,
|
EVENT_FRENZY = 11,
|
||||||
|
EVENT_POISON
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Phases
|
enum Phases
|
||||||
@@ -78,7 +80,9 @@ enum Phases
|
|||||||
|
|
||||||
enum NPCs
|
enum NPCs
|
||||||
{
|
{
|
||||||
NPC_PARASITIC_SERPENT = 14884
|
NPC_PARASITIC_SERPENT = 14884,
|
||||||
|
NPC_RAZZASHI_COBRA = 11373,
|
||||||
|
BOSS_VENOXIS = 14507
|
||||||
};
|
};
|
||||||
|
|
||||||
class boss_venoxis : public CreatureScript
|
class boss_venoxis : public CreatureScript
|
||||||
@@ -101,6 +105,8 @@ public:
|
|||||||
_transformed = false;
|
_transformed = false;
|
||||||
_frenzied = false;
|
_frenzied = false;
|
||||||
events.SetPhase(PHASE_ONE);
|
events.SetPhase(PHASE_ONE);
|
||||||
|
|
||||||
|
SpawnCobras();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*killer*/) override
|
void JustDied(Unit* /*killer*/) override
|
||||||
@@ -110,6 +116,28 @@ public:
|
|||||||
me->RemoveAllAuras();
|
me->RemoveAllAuras();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpawnCobras()
|
||||||
|
{
|
||||||
|
me->SummonCreature(NPC_RAZZASHI_COBRA, -12021.20f, -1719.73f, 39.34f, 0.85f, TEMPSUMMON_CORPSE_DESPAWN);
|
||||||
|
me->SummonCreature(NPC_RAZZASHI_COBRA, -12029.40f, -1714.54f, 39.36f, 0.68f, TEMPSUMMON_CORPSE_DESPAWN);
|
||||||
|
me->SummonCreature(NPC_RAZZASHI_COBRA, -12036.79f, -1704.27f, 40.06f, 0.45f, TEMPSUMMON_CORPSE_DESPAWN);
|
||||||
|
me->SummonCreature(NPC_RAZZASHI_COBRA, -12037.70f, -1694.20f, 39.35f, 0.27f, TEMPSUMMON_CORPSE_DESPAWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetCombatCombras()
|
||||||
|
{
|
||||||
|
std::list<Creature*> cobraList;
|
||||||
|
me->GetCreatureListWithEntryInGrid(cobraList, NPC_RAZZASHI_COBRA, 50.0f);
|
||||||
|
|
||||||
|
if (!cobraList.empty())
|
||||||
|
{
|
||||||
|
for (auto cobras : cobraList)
|
||||||
|
{
|
||||||
|
cobras->SetInCombatWithZone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) override
|
void EnterCombat(Unit* /*who*/) override
|
||||||
{
|
{
|
||||||
_EnterCombat();
|
_EnterCombat();
|
||||||
@@ -127,6 +155,7 @@ public:
|
|||||||
|
|
||||||
// Set zone in combat
|
// Set zone in combat
|
||||||
DoZoneInCombat();
|
DoZoneInCombat();
|
||||||
|
SetCombatCombras();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
||||||
@@ -267,7 +296,72 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class npc_razzashi_cobra_venoxis : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
npc_razzashi_cobra_venoxis() : CreatureScript("npc_razzashi_cobra_venoxis") {}
|
||||||
|
|
||||||
|
struct npc_razzashi_cobra_venoxis_AI : public ScriptedAI
|
||||||
|
{
|
||||||
|
npc_razzashi_cobra_venoxis_AI(Creature* creature) : ScriptedAI(creature) {}
|
||||||
|
|
||||||
|
EventMap events;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
events.Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit*)
|
||||||
|
{
|
||||||
|
events.ScheduleEvent(EVENT_POISON, 8 * IN_MILLISECONDS);
|
||||||
|
|
||||||
|
if (Creature* Venoxis = GetVenoxis())
|
||||||
|
{
|
||||||
|
Venoxis->SetInCombatWithZone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Creature* GetVenoxis()
|
||||||
|
{
|
||||||
|
return me->FindNearestCreature(BOSS_VENOXIS, 200.0f, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
events.Update(diff);
|
||||||
|
|
||||||
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (uint32 eventId = events.ExecuteEvent())
|
||||||
|
{
|
||||||
|
switch (eventId)
|
||||||
|
{
|
||||||
|
case EVENT_POISON:
|
||||||
|
{
|
||||||
|
me->CastSpell(me->GetVictim(), SPELL_POISON);
|
||||||
|
events.ScheduleEvent(EVENT_POISON, 15 * IN_MILLISECONDS);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* creature) const override
|
||||||
|
{
|
||||||
|
return new npc_razzashi_cobra_venoxis_AI(creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_venoxis()
|
void AddSC_boss_venoxis()
|
||||||
{
|
{
|
||||||
new boss_venoxis();
|
new boss_venoxis();
|
||||||
|
new npc_razzashi_cobra_venoxis();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user