mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-17 16:10:49 +01:00
Core/Scripts Improve Jormungars fight
This commit is contained in:
19
sql/updates/world/3.3.5/9999_99_99_99_world.sql
Normal file
19
sql/updates/world/3.3.5/9999_99_99_99_world.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
DELETE FROM `spell_script_names` where `ScriptName` IN ('spell_burning_spray','spell_paralytic_spray','spell_jormungars_paralytic_toxin');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(66902,'spell_burning_spray'), -- Burning Spray 10m normal
|
||||
(67627,'spell_burning_spray'), -- Burning Spray 25m normal
|
||||
(67628,'spell_burning_spray'), -- Burning Spray 10m heroic
|
||||
(67629,'spell_burning_spray'), -- Burning Spray 25m heroic
|
||||
(66901,'spell_paralytic_spray'), -- Paralytic Spray 10m normal
|
||||
(67615,'spell_paralytic_spray'), -- Paralytic Spray 25m normal
|
||||
(67616,'spell_paralytic_spray'), -- Paralytic Spray 10m heroic
|
||||
(67617,'spell_paralytic_spray'), -- Paralytic Spray 25m heroic
|
||||
(66823,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 10m normal
|
||||
(67618,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 25m normal
|
||||
(67619,'spell_jormungars_paralytic_toxin'), -- Paralytic Toxin 10m heroic
|
||||
(67620,'spell_jormungars_paralytic_toxin'); -- Paralytic Toxin 25m heroic
|
||||
|
||||
-- Acidmaw missing text
|
||||
DELETE FROM `creature_text` where entry = 35144 AND groupid = 1;
|
||||
INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
|
||||
(35144, 1, 0, 'You have been infected with a Paralytic Toxin!', 42, 0, 0, 0, 0, 0, 'Acidmaw - Special Attack');
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "Vehicle.h"
|
||||
#include "Player.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
enum Yells
|
||||
{
|
||||
@@ -33,6 +34,7 @@ enum Yells
|
||||
|
||||
// Acidmaw & Dreadscale
|
||||
EMOTE_ENRAGE = 0,
|
||||
SAY_SPECIAL = 1,
|
||||
|
||||
// Icehowl
|
||||
EMOTE_TRAMPLE_START = 0,
|
||||
@@ -78,22 +80,29 @@ enum BossSpells
|
||||
SPELL_FIRE_BOMB_DOT = 66318,
|
||||
SPELL_HEAD_CRACK = 66407,
|
||||
|
||||
//Acidmaw & Dreadscale
|
||||
SPELL_ACID_SPIT = 66880,
|
||||
SPELL_PARALYTIC_SPRAY = 66901,
|
||||
SPELL_ACID_SPEW = 66819,
|
||||
SPELL_PARALYTIC_BITE = 66824,
|
||||
SPELL_SWEEP_0 = 66794,
|
||||
//Acidmaw & Dreadscale Generic
|
||||
SPELL_SWEEP = 66794,
|
||||
SUMMON_SLIME_POOL = 66883,
|
||||
SPELL_FIRE_SPIT = 66796,
|
||||
SPELL_MOLTEN_SPEW = 66821,
|
||||
SPELL_BURNING_BITE = 66879,
|
||||
SPELL_BURNING_SPRAY = 66902,
|
||||
SPELL_SWEEP_1 = 67646,
|
||||
SPELL_EMERGE_0 = 66947,
|
||||
SPELL_SUBMERGE_0 = 66948,
|
||||
SPELL_EMERGE = 66947,
|
||||
SPELL_SUBMERGE = 66948,
|
||||
SPELL_ENRAGE = 68335,
|
||||
SPELL_SLIME_POOL_EFFECT = 66882, //In 60s it diameter grows from 10y to 40y (r=r+0.25 per second)
|
||||
SPELL_GROUND_VISUAL_0 = 66969,
|
||||
SPELL_GROUND_VISUAL_1 = 68302,
|
||||
SPELL_HATE_TO_ZERO = 63984,
|
||||
//Acidmaw
|
||||
SPELL_ACID_SPIT = 66880,
|
||||
SPELL_PARALYTIC_SPRAY = 66901,
|
||||
SPELL_PARALYTIC_BITE = 66824, //Paralytic Toxin
|
||||
SPELL_ACID_SPEW = 66818,
|
||||
SPELL_PARALYSIS = 66830,
|
||||
SPELL_PARALYTIC_TOXIN = 66823,
|
||||
//Dreadscale
|
||||
SPELL_BURNING_BITE = 66879, // Burning Bile
|
||||
SPELL_MOLTEN_SPEW = 66821,
|
||||
SPELL_FIRE_SPIT = 66796,
|
||||
SPELL_BURNING_SPRAY = 66902,
|
||||
SPELL_BURNING_BILE = 66869,
|
||||
|
||||
//Icehowl
|
||||
SPELL_FEROCIOUS_BUTT = 66770,
|
||||
@@ -549,7 +558,7 @@ struct boss_jormungarAI : public BossAI
|
||||
|
||||
if (!Enraged && instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoCast(SPELL_ENRAGE);
|
||||
Enraged = true;
|
||||
@@ -589,7 +598,8 @@ struct boss_jormungarAI : public BossAI
|
||||
acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
acidmaw->SetReactState(REACT_AGGRESSIVE);
|
||||
acidmaw->SetInCombatWithZone();
|
||||
acidmaw->CastSpell(acidmaw, SPELL_EMERGE_0);
|
||||
acidmaw->CastSpell(acidmaw, SPELL_EMERGE);
|
||||
acidmaw->CastSpell(acidmaw, SPELL_GROUND_VISUAL_1, true);
|
||||
}
|
||||
return;
|
||||
case EVENT_SPRAY:
|
||||
@@ -598,7 +608,7 @@ struct boss_jormungarAI : public BossAI
|
||||
events.ScheduleEvent(EVENT_SPRAY, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY);
|
||||
return;
|
||||
case EVENT_SWEEP:
|
||||
DoCastAOE(SPELL_SWEEP_0);
|
||||
DoCastAOE(SPELL_SWEEP);
|
||||
events.ScheduleEvent(EVENT_SWEEP, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY);
|
||||
return;
|
||||
default:
|
||||
@@ -608,13 +618,14 @@ struct boss_jormungarAI : public BossAI
|
||||
if (events.IsInPhase(PHASE_MOBILE))
|
||||
DoMeleeAttackIfReady();
|
||||
if (events.IsInPhase(PHASE_STATIONARY))
|
||||
DoSpellAttackIfReady(SpitSpell);
|
||||
DoCastVictim(SpitSpell);
|
||||
}
|
||||
|
||||
void Submerge()
|
||||
{
|
||||
DoCast(me, SPELL_SUBMERGE_0);
|
||||
me->RemoveAurasDueToSpell(SPELL_EMERGE_0);
|
||||
DoCast(me, SPELL_SUBMERGE);
|
||||
DoCast(me, SPELL_GROUND_VISUAL_0, true);
|
||||
me->RemoveAurasDueToSpell(SPELL_EMERGE);
|
||||
me->SetInCombatWithZone();
|
||||
events.SetPhase(PHASE_SUBMERGED);
|
||||
events.ScheduleEvent(EVENT_EMERGE, 5*IN_MILLISECONDS, 0, PHASE_SUBMERGED);
|
||||
@@ -625,9 +636,11 @@ struct boss_jormungarAI : public BossAI
|
||||
|
||||
void Emerge()
|
||||
{
|
||||
DoCast(me, SPELL_EMERGE_0);
|
||||
DoCast(me, SPELL_EMERGE);
|
||||
DoCastAOE(SPELL_HATE_TO_ZERO, true);
|
||||
me->SetDisplayId(ModelMobile);
|
||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
|
||||
me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_0);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
// if the worm was mobile before submerging, make him stationary now
|
||||
@@ -636,6 +649,7 @@ struct boss_jormungarAI : public BossAI
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||
SetCombatMovement(false);
|
||||
me->SetDisplayId(ModelStationary);
|
||||
me->CastSpell(me, SPELL_GROUND_VISUAL_1, true);
|
||||
events.SetPhase(PHASE_STATIONARY);
|
||||
events.ScheduleEvent(EVENT_SUBMERGE, 45*IN_MILLISECONDS, 0, PHASE_STATIONARY);
|
||||
events.ScheduleEvent(EVENT_SPIT, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_STATIONARY);
|
||||
@@ -648,6 +662,7 @@ struct boss_jormungarAI : public BossAI
|
||||
SetCombatMovement(true);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
me->SetDisplayId(ModelMobile);
|
||||
me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_1);
|
||||
events.SetPhase(PHASE_MOBILE);
|
||||
events.ScheduleEvent(EVENT_SUBMERGE, 45*IN_MILLISECONDS, 0, PHASE_MOBILE);
|
||||
events.ScheduleEvent(EVENT_BITE, urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS), 0, PHASE_MOBILE);
|
||||
@@ -1122,6 +1137,117 @@ class boss_icehowl : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class spell_jormungars_paralytic_toxin : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_jormungars_paralytic_toxin() : SpellScriptLoader("spell_jormungars_paralytic_toxin") { }
|
||||
|
||||
class spell_jormungars_paralytic_toxin_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_jormungars_paralytic_toxin_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_PARALYSIS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster && caster->GetEntry() == NPC_ACIDMAW)
|
||||
{
|
||||
if (Creature* acidMaw = caster->ToCreature())
|
||||
acidMaw->AI()->Talk(SAY_SPECIAL, GetTarget());
|
||||
}
|
||||
}
|
||||
|
||||
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->RemoveAurasDueToSpell(SPELL_PARALYSIS);
|
||||
}
|
||||
|
||||
void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated)
|
||||
{
|
||||
if (!canBeRecalculated)
|
||||
amount = aurEff->GetAmount();
|
||||
|
||||
canBeRecalculated = false;
|
||||
}
|
||||
|
||||
void HandleDummy(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
if (AuraEffect* slowEff = GetEffect(EFFECT_0))
|
||||
{
|
||||
int32 newAmount = slowEff->GetAmount() - 10;
|
||||
if (newAmount < -100)
|
||||
newAmount = -100;
|
||||
slowEff->ChangeAmount(newAmount);
|
||||
|
||||
if (newAmount <= -100 && !GetTarget()->HasAura(SPELL_PARALYSIS))
|
||||
GetTarget()->CastSpell(GetTarget(), SPELL_PARALYSIS, true, NULL, slowEff, GetCasterGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_jormungars_paralytic_toxin_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED, AURA_EFFECT_HANDLE_REAL);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_jormungars_paralytic_toxin_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED, AURA_EFFECT_HANDLE_REAL);
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_jormungars_paralytic_toxin_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_jormungars_paralytic_toxin_AuraScript::HandleDummy, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_jormungars_paralytic_toxin_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_snakes_spray : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_snakes_spray(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { }
|
||||
|
||||
class spell_snakes_spray_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_snakes_spray_SpellScript);
|
||||
|
||||
public:
|
||||
spell_snakes_spray_SpellScript(uint32 spellId) : SpellScript(), _spellId(spellId) { }
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(_spellId))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Player* target = GetHitPlayer())
|
||||
GetCaster()->CastSpell(target, _spellId, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_snakes_spray_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_snakes_spray_SpellScript(_spellId);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
void AddSC_boss_northrend_beasts()
|
||||
{
|
||||
new boss_gormok();
|
||||
@@ -1132,6 +1258,9 @@ void AddSC_boss_northrend_beasts()
|
||||
new boss_acidmaw();
|
||||
new boss_dreadscale();
|
||||
new npc_slime_pool();
|
||||
new spell_jormungars_paralytic_toxin();
|
||||
new spell_snakes_spray("spell_burning_spray", SPELL_BURNING_BILE);
|
||||
new spell_snakes_spray("spell_paralytic_spray", SPELL_PARALYTIC_TOXIN);
|
||||
|
||||
new boss_icehowl();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user