aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/3.3.5/9999_99_99_99_world.sql20
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp10
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp201
3 files changed, 201 insertions, 30 deletions
diff --git a/sql/updates/world/3.3.5/9999_99_99_99_world.sql b/sql/updates/world/3.3.5/9999_99_99_99_world.sql
new file mode 100644
index 00000000000..b192efa6814
--- /dev/null
+++ b/sql/updates/world/3.3.5/9999_99_99_99_world.sql
@@ -0,0 +1,20 @@
+DELETE FROM `spell_script_names` where `ScriptName` IN ('spell_jormungars_burning_spray','spell_jormungars_paralytic_spray','spell_jormungars_paralytic_toxin','spell_jormungars_paralysis');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(66902,'spell_jormungars_burning_spray'), -- Burning Spray 10m normal
+(67627,'spell_jormungars_burning_spray'), -- Burning Spray 25m normal
+(67628,'spell_jormungars_burning_spray'), -- Burning Spray 10m heroic
+(67629,'spell_jormungars_burning_spray'), -- Burning Spray 25m heroic
+(66901,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 10m normal
+(67615,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 25m normal
+(67616,'spell_jormungars_paralytic_spray'), -- Paralytic Spray 10m heroic
+(67617,'spell_jormungars_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
+(66830,'spell_jormungars_paralysis'); -- Paralysis
+
+-- 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`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(35144,1,0,'You have been infected with a Paralytic Toxin!',42,0,100,0,0,0,36323,0,'Acidmaw - Special Attack');
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 4133d0c8d65..9b23caef9ab 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -846,16 +846,6 @@ void AuraEffect::UpdatePeriodic(Unit* caster)
case 59911: // Tenacity (vehicle)
GetBase()->RefreshDuration();
break;
- case 66823: case 67618: case 67619: case 67620: // Paralytic Toxin
- // Get 0 effect aura
- if (AuraEffect* slow = GetBase()->GetEffect(0))
- {
- int32 newAmount = slow->GetAmount() - 10;
- if (newAmount < -100)
- newAmount = -100;
- slow->ChangeAmount(newAmount);
- }
- break;
default:
break;
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
index 566c296a60e..7f4a2158d25 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp
@@ -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
+ //Acidmaw & Dreadscale Generic
+ SPELL_SWEEP = 66794,
+ SUMMON_SLIME_POOL = 66883,
+ 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_ACID_SPEW = 66819,
- SPELL_PARALYTIC_BITE = 66824,
- SPELL_SWEEP_0 = 66794,
- SUMMON_SLIME_POOL = 66883,
- SPELL_FIRE_SPIT = 66796,
+ 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_BURNING_BITE = 66879,
+ SPELL_FIRE_SPIT = 66796,
SPELL_BURNING_SPRAY = 66902,
- SPELL_SWEEP_1 = 67646,
- SPELL_EMERGE_0 = 66947,
- SPELL_SUBMERGE_0 = 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_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_REMOVE_CLIENT_CONTROL);
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,148 @@ 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*/) override
+ {
+ 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() override
+ {
+ 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 override
+ {
+ return new spell_jormungars_paralytic_toxin_AuraScript();
+ }
+};
+
+class spell_jormungars_snakes_spray : public SpellScriptLoader
+{
+public:
+ spell_jormungars_snakes_spray(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { }
+
+ class spell_jormungars_snakes_spray_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_jormungars_snakes_spray_SpellScript);
+
+ public:
+ spell_jormungars_snakes_spray_SpellScript(uint32 spellId) : SpellScript(), _spellId(spellId) { }
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(_spellId))
+ return false;
+ return true;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Player* target = GetHitPlayer())
+ GetCaster()->CastSpell(target, _spellId, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_jormungars_snakes_spray_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+
+ private:
+ uint32 _spellId;
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_jormungars_snakes_spray_SpellScript(_spellId);
+ }
+
+private:
+ uint32 _spellId;
+};
+
+class spell_jormungars_paralysis : public SpellScriptLoader
+{
+public:
+ spell_jormungars_paralysis() : SpellScriptLoader("spell_jormungars_paralysis") { }
+
+ class spell_jormungars_paralysis_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_jormungars_paralysis_AuraScript);
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ if (instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_IN_PROGRESS || instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL)
+ return;
+
+ Remove();
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_jormungars_paralysis_AuraScript::OnApply, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_jormungars_paralysis_AuraScript();
+ }
+};
+
void AddSC_boss_northrend_beasts()
{
new boss_gormok();
@@ -1132,6 +1289,10 @@ void AddSC_boss_northrend_beasts()
new boss_acidmaw();
new boss_dreadscale();
new npc_slime_pool();
+ new spell_jormungars_paralytic_toxin();
+ new spell_jormungars_snakes_spray("spell_jormungars_burning_spray", SPELL_BURNING_BILE);
+ new spell_jormungars_snakes_spray("spell_jormungars_paralytic_spray", SPELL_PARALYTIC_TOXIN);
+ new spell_jormungars_paralysis();
new boss_icehowl();
}