fix(Scripts/Ulduar): update Winter Jormungar and Snow Mound creature script (#17054)
* initial * add auras * spacing
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `creature_template_addon` WHERE `entry` IN (34146, 34150, 34151);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||||
|
(34146, 0, 0, 0, 0, 0, 0, '64615'),
|
||||||
|
(34150, 0, 0, 0, 0, 0, 0, '64615'),
|
||||||
|
(34151, 0, 0, 0, 0, 0, 0, '64615');
|
||||||
@@ -24,30 +24,49 @@
|
|||||||
#include "SpellAuraEffects.h"
|
#include "SpellAuraEffects.h"
|
||||||
#include "SpellScript.h"
|
#include "SpellScript.h"
|
||||||
#include "Vehicle.h"
|
#include "Vehicle.h"
|
||||||
|
#include "TaskScheduler.h"
|
||||||
|
|
||||||
enum Texts
|
enum Texts
|
||||||
{
|
{
|
||||||
// Freya
|
// Freya
|
||||||
GOSSIP_MENU_FREYA = 10324,
|
GOSSIP_MENU_FREYA = 10324,
|
||||||
NPC_TEXT_FREYA = 14332,
|
NPC_TEXT_FREYA = 14332,
|
||||||
|
|
||||||
// Hodir
|
// Hodir
|
||||||
GOSSIP_MENU_HODIR = 10335,
|
GOSSIP_MENU_HODIR = 10335,
|
||||||
NPC_TEXT_HODIR = 14326,
|
NPC_TEXT_HODIR = 14326,
|
||||||
|
|
||||||
// Mimiron
|
// Mimiron
|
||||||
GOSSIP_MENU_MIMIRON = 10336,
|
GOSSIP_MENU_MIMIRON = 10336,
|
||||||
NPC_TEXT_MIMIRON = 14334,
|
NPC_TEXT_MIMIRON = 14334,
|
||||||
|
|
||||||
// Thorim
|
// Thorim
|
||||||
GOSSIP_MENU_THORIM = 10337,
|
GOSSIP_MENU_THORIM = 10337,
|
||||||
NPC_TEXT_THORIM = 14333,
|
NPC_TEXT_THORIM = 14333,
|
||||||
|
|
||||||
// Confirm assistance
|
// Confirm assistance
|
||||||
GOSSIP_MENU_CONFIRM = 10333,
|
GOSSIP_MENU_CONFIRM = 10333,
|
||||||
NPC_TEXT_CONFIRM = 14325,
|
NPC_TEXT_CONFIRM = 14325,
|
||||||
|
|
||||||
SAY_KEEPER_SELECTED = 1,
|
SAY_KEEPER_SELECTED = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum UldNPCs
|
||||||
|
{
|
||||||
|
NPC_WINTER_JORMUNGAR = 34137,
|
||||||
|
NPC_SNOW_MOUND_4 = 34146,
|
||||||
|
NPC_SNOW_MOUND_6 = 34150,
|
||||||
|
NPC_SNOW_MOUND_8 = 34151
|
||||||
|
};
|
||||||
|
|
||||||
|
enum UldGameObjects
|
||||||
|
{
|
||||||
|
GOBJ_SNOW_MOUND = 194907
|
||||||
|
};
|
||||||
|
|
||||||
|
enum UldSpells
|
||||||
|
{
|
||||||
|
SPELL_SNOW_MOUND_PARTICLES = 64615
|
||||||
};
|
};
|
||||||
|
|
||||||
class npc_ulduar_keeper : public CreatureScript
|
class npc_ulduar_keeper : public CreatureScript
|
||||||
@@ -157,52 +176,72 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class npc_ulduar_snow_mound : public CreatureScript
|
struct npc_ulduar_snow_mound : public ScriptedAI
|
||||||
{
|
{
|
||||||
public:
|
npc_ulduar_snow_mound(Creature* creature) : ScriptedAI(creature)
|
||||||
npc_ulduar_snow_mound() : CreatureScript("npc_ulduar_snow_mound") { }
|
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* creature) const override
|
|
||||||
{
|
{
|
||||||
return GetUlduarAI<npc_ulduar_snow_moundAI>(creature);
|
_activated = false;
|
||||||
|
_count = 0;
|
||||||
|
_counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct npc_ulduar_snow_moundAI : public ScriptedAI
|
void MoveInLineOfSight(Unit* who) override
|
||||||
{
|
{
|
||||||
npc_ulduar_snow_moundAI(Creature* creature) : ScriptedAI(creature)
|
if (!_activated && who->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
activated = false;
|
if (me->GetExactDist2d(who) <= 10.0f && me->GetMap()->isInLineOfSight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 5.0f,
|
||||||
me->CastSpell(me, 64615, true);
|
who->GetPositionX(), who->GetPositionY(), who->GetPositionZ() + 5.0f, 2, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::Nothing))
|
||||||
}
|
{
|
||||||
|
_activated = true;
|
||||||
bool activated;
|
me->RemoveAura(SPELL_SNOW_MOUND_PARTICLES);
|
||||||
|
if (GameObject* go = me->FindNearestGameObject(GOBJ_SNOW_MOUND, 5.0f))
|
||||||
void MoveInLineOfSight(Unit* who) override
|
|
||||||
{
|
|
||||||
if (!activated && who->GetTypeId() == TYPEID_PLAYER)
|
|
||||||
if (me->GetExactDist2d(who) <= 25.0f && me->GetMap()->isInLineOfSight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 5.0f,
|
|
||||||
who->GetPositionX(), who->GetPositionY(), who->GetPositionZ() + 5.0f, 2, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::Nothing))
|
|
||||||
{
|
{
|
||||||
activated = true;
|
go->Delete();
|
||||||
me->RemoveAura(64615);
|
|
||||||
if (GameObject* go = me->FindNearestGameObject(194907, 5.0f))
|
|
||||||
go->Delete();
|
|
||||||
uint8 count;
|
|
||||||
if (me->GetEntry() == 34146) count = 4;
|
|
||||||
else if (me->GetEntry() == 34150) count = 6;
|
|
||||||
else count = 8;
|
|
||||||
for (uint8 i = 0; i < count; ++i)
|
|
||||||
{
|
|
||||||
float a = rand_norm() * 2 * M_PI;
|
|
||||||
float d = rand_norm() * 4.0f;
|
|
||||||
if (Creature* c = me->SummonCreature(34137, me->GetPositionX() + cos(a) * d, me->GetPositionY() + std::sin(a) * d, me->GetPositionZ() + 1.0f, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000))
|
|
||||||
c->AI()->AttackStart(who);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(uint32 /*diff*/) override {}
|
switch (me->GetEntry())
|
||||||
};
|
{
|
||||||
|
case NPC_SNOW_MOUND_4:
|
||||||
|
_count = 4;
|
||||||
|
break;
|
||||||
|
case NPC_SNOW_MOUND_6:
|
||||||
|
_count = 6;
|
||||||
|
break;
|
||||||
|
case NPC_SNOW_MOUND_8:
|
||||||
|
_count = 8;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_scheduler.Schedule(0s, [this](TaskContext context)
|
||||||
|
{
|
||||||
|
_counter++;
|
||||||
|
float a = rand_norm() * 2 * M_PI; //needs verification from sniffs
|
||||||
|
float d = rand_norm() * 4.0f;
|
||||||
|
if (Creature* jormungar = me->SummonCreature(NPC_WINTER_JORMUNGAR, me->GetPositionX() + cos(a) * d, me->GetPositionY() + std::sin(a) * d, me->GetPositionZ() + 1.0f, 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000))
|
||||||
|
{
|
||||||
|
jormungar->SetInCombatWithZone();
|
||||||
|
}
|
||||||
|
if (_counter < _count)
|
||||||
|
{
|
||||||
|
context.Repeat(2s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
_scheduler.Update(diff);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _activated;
|
||||||
|
TaskScheduler _scheduler;
|
||||||
|
uint8 _count;
|
||||||
|
uint8 _counter;
|
||||||
};
|
};
|
||||||
|
|
||||||
class npc_ulduar_storm_tempered_keeper : public CreatureScript
|
class npc_ulduar_storm_tempered_keeper : public CreatureScript
|
||||||
@@ -512,13 +551,11 @@ struct npc_salvaged_siege_engine : public VehicleAI
|
|||||||
void AddSC_ulduar()
|
void AddSC_ulduar()
|
||||||
{
|
{
|
||||||
new npc_ulduar_keeper();
|
new npc_ulduar_keeper();
|
||||||
|
|
||||||
new spell_ulduar_energy_sap();
|
new spell_ulduar_energy_sap();
|
||||||
new npc_ulduar_snow_mound();
|
RegisterUlduarCreatureAI(npc_ulduar_snow_mound);
|
||||||
new npc_ulduar_storm_tempered_keeper();
|
new npc_ulduar_storm_tempered_keeper();
|
||||||
new npc_ulduar_arachnopod_destroyer();
|
new npc_ulduar_arachnopod_destroyer();
|
||||||
new spell_ulduar_arachnopod_damaged();
|
new spell_ulduar_arachnopod_damaged();
|
||||||
|
|
||||||
new AreaTrigger_at_celestial_planetarium_enterance();
|
new AreaTrigger_at_celestial_planetarium_enterance();
|
||||||
new go_call_tram();
|
new go_call_tram();
|
||||||
|
|
||||||
|
|||||||
@@ -302,4 +302,6 @@ inline AI* GetUlduarAI(T* obj)
|
|||||||
return GetInstanceAI<AI>(obj, UlduarScriptName);
|
return GetInstanceAI<AI>(obj, UlduarScriptName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define RegisterUlduarCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetUlduarAI)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user