More fixes to naxx40 (#559)

- fixes to Faerlina's poison bolt volley, Reign of Fire and Frenzy
- Gluth now has an AoE fear
- Razuvious's now uses Mana Burn (26046) instead of Disrupting Shout, with modified mana drain
- Thaddius maybe doesn't repeat himself anymore
- Zombie Chow now casts Infected Wound on itself on spawn
- disabled combat assistance for creatures in the alcoves during Kel'Thuzad phase 1
- Gluth now kills zombie chow instantly and he heals himself for 5% afterwards
- blocking death knights from entering Naxx40
This commit is contained in:
Grimfeather
2025-07-19 23:53:44 +02:00
committed by GitHub
parent 3c989f5a83
commit fd17395462
9 changed files with 75 additions and 43 deletions

View File

@@ -15,6 +15,9 @@ DELETE FROM `creature_addon` WHERE `guid` IN (133917, 133918, 133919, 133920, 13
UPDATE `creature` SET `phaseMask` = 1 WHERE `id1` IN
(11102, 16112, 16113, 16114, 16115, 16116, 16131, 16132, 16133, 16134, 16135, 16212, 16225, 16228, 16229, 16256, 16283, 16284, 16376, 16378, 17069, 17072);
-- Naxx40 - Razuvious
DELETE FROM `spell_script_names` WHERE `spell_id` IN (29107, 55543);
-- Drop source for 2.3 Jewelcrafting Recipe
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 19768; -- disabled for now to prevent the creature from attacking while phased

View File

@@ -73,7 +73,7 @@ INSERT INTO `creature_template` (`entry`, `name`, `subname`, `minlevel`, `maxlev
(351066, "Spore", "", 60, 60, 21, 0.4, 0.285714, 18.0, 1.0, 0, 0, 0.6, 2000, 2000, 1.0, 1.0, 1, 0, 2048, 0, 10, 8, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 0.25, 1.0, 0.7, 0.5, 69, 1, 0, 0, 0, ''),
(351067, "Fallout Slime", "", 60, 60, 21, 1.0, 1.14286, 20.0, 1.0, 1, 0, 46.2, 1800, 1265, 1.0, 1.0, 1, 64, 2048, 0, 6, 0, 0, 0, 0, 0, 0, '', 0, 1.0, 16.0, 2.0, 1.1, 1.0, 0, 1, 1015758846, 0, 0, ''),
(351068, "Mutated Grub", "", 61, 61, 21, 1.0, 1.14286, 20.0, 1.0, 1, 0, 1.0, 2000, 2000, 1.0, 1.0, 1, 64, 2048, 0, 10, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 8.0, 1.0, 1.15, 1.0, 144, 1, 1022045779, 0, 0, ''),
(351069, "Zombie Chow", "", 60, 60, 89, 1.0, 1.14286, 20.0, 1.0, 1, 0, 3.4, 3000, 2000, 1.0, 1.0, 1, 1, 2048, 0, 6, 72, 0, 0, 0, 0, 0, '', 0, 1.0, 40.0, 3.0, 1.1, 1.0, 100, 1, 1015226896, 0, 0, ''),
(351069, "Zombie Chow", "", 60, 60, 89, 1.0, 1.14286, 20.0, 1.0, 1, 0, 3.4, 3000, 2000, 1.0, 1.0, 1, 1, 2048, 0, 6, 72, 0, 0, 0, 0, 0, 'SmartAI', 0, 1.0, 40.0, 3.0, 1.1, 1.0, 100, 1, 1015226896, 0, 0, ''),
(351070, "Necropolis Acolyte", "", 62, 62, 21, 1.0, 1.71429, 20.0, 1.0, 1, 0, 27.0, 2000, 1265, 1.0, 1.0, 2, 0, 2048, 0, 7, 0, 351070, 0, 0, 2865, 9398, '', 1, 1.0, 25.0, 10.0, 1.25, 1.0, 164, 1, 1055604307, 0, 0, ''),
(351071, "Sewage Slime", "", 60, 60, 21, 1.0, 1.14286, 20.0, 2.0, 1, 0, 23.0, 1800, 1265, 1.0, 1.0, 1, 64, 2048, 0, 6, 64, 0, 0, 0, 0, 0, 'SmartAI', 1, 1.0, 50.0, 2.0, 1.1, 1.0, 0, 1, 1015756402, 0, 0, ''),
(351072, "Toxic Tunnel", "", 60, 60, 114, 1.0, 1.14286, 18.0, 1.0, 0, 0, 4.2, 2000, 2000, 1.0, 1.0, 1, 33816578, 2048, 0, 10, 0, 0, 0, 0, 0, 0, 'NullCreatureAI', 0, 1.0, 1.35, 1.0, 2.8, 1.0, 0, 1, 0, 0, 2, ''),
@@ -4393,6 +4393,7 @@ INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_
(351065, 0, 5, 0, 2, 0, 100, 0, 0, 30, 60000, 60000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, "Infectious Ghoul - On 30% HP - Say EMOTE_FRENZY (Naxx 40)"),
(351066, 0, 0, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 11, 29232, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, "Cast Spell on Death (Naxx 40)"),
(351068, 0, 0, 0, 0, 0, 100, 0, 2000, 5000, 6000, 8000, 0, 11, 30109, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, "Cast Spell IC (Naxx 40)"),
(351069, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 29306, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zombie Chow - On Spawn - Cast Infected Wound'),
(351071, 0, 0, 0, 1, 0, 100, 7, 1000, 1000, 0, 0, 0, 11, 28153, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, "Sewage Slime - Out of Combat - Cast 'Disease Cloud' (Naxx 40)"),
(351078, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 55876, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, "Plagued Ghoul - On death - Cast Plague contamination (Naxx 40)"),
(351080, 0, 0, 0, 0, 0, 100, 0, 1000, 1000, 16000, 21000, 0, 11, 56107, 0, 0, 0, 0, 0, 17, 7, 40, 0, 0, 0.0, 0.0, 0.0, 0.0, "Cast Spell IC (Naxx 40)"),
@@ -5356,7 +5357,8 @@ INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_
DELETE FROM `creature_template_addon` WHERE (`entry` = 351073);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(351073, 0, 0, 0, 1, 0, 0, '28458');
-- Soul Weaver
--512 + 256 Disables combat/assistance
UPDATE `creature_template` SET `unit_flags` = 768 WHERE `entry` IN (351073, 351074, 351075);
-- Wail of Souls
DELETE FROM `creature_template_spell` WHERE (`CreatureID` = 351075);
INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES

View File

@@ -152,13 +152,9 @@ DELETE FROM `spell_script_names` WHERE `spell_id` = 28135;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (28135, 'spell_feugen_static_field_40');
-- Razuvious
-- ? Script defines 29107? as target but only 55543 works
-- 29107: Disrupting Shout
DELETE FROM `spell_script_names` WHERE `spell_id` = 29107;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (29107, 'spell_razuvious_disrupting_shout_40');
-- 55543: 10 man version of Disrupting Shout
DELETE FROM `spell_script_names` WHERE `spell_id` = 55543;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (55543, 'spell_razuvious_disrupting_shout_40');
-- Mana Burn - alternative for Disrupting Shout
DELETE FROM `spell_script_names` WHERE `spell_id` = 26046;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (26046, 'spell_razuvious_disrupting_shout_40');
-- Generic Spell Submerge
-- relinquery of souls and eye stalk TC: https://github.com/search?q=repo%3ATrinityCore%2FTrinityCore%20spell_reliquary_of_souls_submerge&type=code

View File

@@ -40,6 +40,16 @@ enum Spells
SPELL_MINION_WIDOWS_EMBRACE = 54097
};
enum SpellValues : int32
{
POISON_BOLT_VOLLEY_BP0 = 1224,
POISON_BOLT_VOLLEY_BP1 = 416,
RAIN_OF_FIRE_BP0 = 1849,
FRENZY_BP0 = 149,
FRENZY_BP1 = 74,
FRENZY_BP2 = 49
};
enum Groups
{
GROUP_FRENZY = 1
@@ -94,11 +104,23 @@ public:
ScheduleTimedEvent(7s, 15s, [&]{
if (!me->HasAura(SPELL_WIDOWS_EMBRACE))
DoCastVictim(SPELL_POISON_BOLT_VOLLEY);
{
CustomSpellValues values;
int32 bp0 = POISON_BOLT_VOLLEY_BP0;
int32 bp1 = POISON_BOLT_VOLLEY_BP1;
values.AddSpellMod(SPELLVALUE_MAX_TARGETS, 10);
values.AddSpellMod(SPELLVALUE_BASE_POINT0, bp0);
values.AddSpellMod(SPELLVALUE_BASE_POINT1, bp1);
me->CastCustomSpell(SPELL_POISON_BOLT_VOLLEY, values, me, TRIGGERED_NONE, nullptr, nullptr, ObjectGuid::Empty);
}
}, 7s, 15s);
ScheduleTimedEvent(8s, 18s, [&] {
DoCastRandomTarget(SPELL_RAIN_OF_FIRE);
ScheduleTimedEvent(8s, 18s, [&] {
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
int32 bp0 = RAIN_OF_FIRE_BP0;
me->CastCustomSpell(target, SPELL_RAIN_OF_FIRE, &bp0, 0, 0, false, nullptr, nullptr, ObjectGuid::Empty);
}
}, 8s, 18s);
scheduler.Schedule(60s, 80s, GROUP_FRENZY, [this](TaskContext context) {
@@ -106,7 +128,10 @@ public:
{
Talk(SAY_FRENZY);
Talk(EMOTE_FRENZY);
DoCastSelf(SPELL_FRENZY, true);
int32 bp0 = FRENZY_BP0;
int32 bp1 = FRENZY_BP1;
int32 bp2 = FRENZY_BP2;
me->CastCustomSpell(me, SPELL_FRENZY, &bp0, &bp1, &bp2, true, nullptr, nullptr, ObjectGuid::Empty);
context.Repeat(1min);
}
else

View File

@@ -32,6 +32,7 @@ enum Spells
SPELL_DECIMATE_DAMAGE = 28375,
SPELL_BERSERK = 26662,
SPELL_INFECTED_WOUND = 29306,
SPELL_TERRIFYING_ROAR = 29685,
SPELL_CHOW_SEARCHER = 28404
};
@@ -42,7 +43,8 @@ enum Events
EVENT_DECIMATE = 3,
EVENT_BERSERK = 4,
EVENT_SUMMON_ZOMBIE = 5,
EVENT_CAN_EAT_ZOMBIE = 6
EVENT_CAN_EAT_ZOMBIE = 6,
EVENT_TERRIFYING_ROAR = 7
};
enum Misc
@@ -114,11 +116,12 @@ public:
BossAI::JustEngagedWith(who);
me->SetInCombatWithZone();
events.ScheduleEvent(EVENT_MORTAL_WOUND, 10s);
events.ScheduleEvent(EVENT_ENRAGE, 22s);
events.ScheduleEvent(EVENT_ENRAGE, 10s); // VMangos value
events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110000, 90000, 110000, 90000));
events.ScheduleEvent(EVENT_BERSERK, 6min);
events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 10s);
events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 1s);
events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 6s); // VMangos value
events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 3s); // VMangos value
events.ScheduleEvent(EVENT_TERRIFYING_ROAR, 20s); // VMangos value
}
void JustSummoned(Creature* summon) override
@@ -187,8 +190,10 @@ public:
Talk(EMOTE_ENRAGE);
int32 bp1 = 99; // Enrage melee haste
int32 bp2 = 49; // Enrage damage percent
me->CastCustomSpell(me, SPELL_ENRAGE_10, &bp1, &bp2, 0, true);
events.Repeat(22s);
if (me->CastCustomSpell(me, SPELL_ENRAGE_10, &bp1, &bp2, 0, true) == SPELL_CAST_OK)
events.Repeat(10s);
else
events.Repeat(100ms);
break;
}
case EVENT_MORTAL_WOUND:
@@ -239,7 +244,7 @@ public:
}
(rand == 2 ? rand = 0 : rand++);
}
events.Repeat(10s);
events.Repeat(6s);
break;
}
case EVENT_CAN_EAT_ZOMBIE:
@@ -248,9 +253,22 @@ public:
{
me->CastCustomSpell(SPELL_CHOW_SEARCHER, SPELLVALUE_RADIUS_MOD, 20000, me, true);
Talk(EMOTE_DEVOURS_ALL);
Unit* unitTarget = me->GetVictim();
int32 damage = int32(unitTarget->GetHealth());
Unit::DealDamage(me, unitTarget, damage);
uint32 hp = uint32(me->GetMaxHealth() * 0.05f);
me->SetHealth(me->GetHealth() + hp);
return; // leave it to skip DoMeleeAttackIfReady
}
break;
case EVENT_TERRIFYING_ROAR:
if (me->CastSpell(me, SPELL_TERRIFYING_ROAR, true) == SPELL_CAST_OK)
events.Repeat(20s);
else
events.Repeat(100ms);
break;
}
DoMeleeAttackIfReady();
}

View File

@@ -34,7 +34,8 @@ enum Says
enum Spells
{
SPELL_UNBALANCING_STRIKE = 26613,
SPELL_DISRUPTING_SHOUT = 29107,
// SPELL_DISRUPTING_SHOUT = 29107, // 55543
SPELL_MANA_BURN = 26046, // Alternative for Disrupting shout.
SPELL_JAGGED_KNIFE = 55550,
SPELL_HOPELESS = 29125,
SPELL_TAUNT = 29060
@@ -265,7 +266,7 @@ public:
events.Repeat(20s);
break;
case EVENT_DISRUPTING_SHOUT:
me->CastSpell(me, SPELL_DISRUPTING_SHOUT, false);
me->CastSpell(me, SPELL_MANA_BURN, false);
events.Repeat(10s);
break;
case EVENT_JAGGED_KNIFE:

View File

@@ -707,7 +707,7 @@ public:
bool OnTrigger(Player* player, AreaTrigger const* /*areaTrigger*/) override
{
InstanceScript* instance = player->GetInstanceScript();
if (!instance || instance->GetData(DATA_THADDIUS_INTRO) || instance->GetBossState(BOSS_THADDIUS) == DONE)
if (!instance || instance->GetData(DATA_THADDIUS_INTRO) == 1 || instance->GetBossState(BOSS_THADDIUS) == DONE)
return true;
if (Creature* thaddius = instance->GetCreature(DATA_THADDIUS_BOSS))

View File

@@ -51,11 +51,12 @@ public:
bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if ((!sIndividualProgression->requireNaxxStrath || player->GetQuestStatus(NAXX40_ENTRANCE_FLAG) == QUEST_STATUS_REWARDED) && (player->GetLevel() <= IP_LEVEL_TBC))
if ((isExcludedFromProgression(player) && (player->GetLevel() <= IP_LEVEL_TBC) && (!player->getClass() == CLASS_DEATH_KNIGHT)) ||
((!sIndividualProgression->requireNaxxStrath || player->GetQuestStatus(NAXX40_ENTRANCE_FLAG) == QUEST_STATUS_REWARDED) && (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_5))))
{
player->SetRaidDifficulty(RAID_DIFFICULTY_10MAN_HEROIC);
if ((isAttuned(player)) || (isExcludedFromProgression(player) && (player->GetLevel() <= IP_LEVEL_TBC)))
if (isAttuned(player) || isExcludedFromProgression(player))
player->TeleportTo(533, 3005.51f, -3434.64f, 304.195f, 6.2831f);
}
return true;

View File

@@ -329,38 +329,24 @@ class spell_noth_curse_of_the_plaguebringer_aura_40 : public AuraScript
}
};
// 26046 - Razuvious - Mana Burn - Alternative for Disrupting Shout
class spell_razuvious_disrupting_shout_40 : public SpellScript
{
PrepareSpellScript(spell_razuvious_disrupting_shout_40);
void PreventLaunchHit(SpellEffIndex effIndex)
void CalculateDamage(SpellEffIndex effIndex)
{
Unit* caster = GetCaster();
if (!caster || (caster->GetMap()->GetDifficulty() != RAID_DIFFICULTY_10MAN_HEROIC))
{
return;
}
if (Unit* target = GetHitUnit())
{
// ignore los -> not ignore los
// radius 60yd -> 45yd
PreventHitDefaultEffect(effIndex);
if (!target->IsWithinLOSInMap(caster) || !target->IsWithinDist2d(caster, 45.0f))
{
SetEffectValue(0);
return;
}
Powers PowerType = POWER_MANA;
// int32 amountToDrain = urand(4050,4950);
int32 amountToDrain = urand(500,501);
int32 drainedAmount = -target->ModifyPower(PowerType, -amountToDrain);
SetEffectValue(drainedAmount);
}
SetEffectValue(urand(4050,4950));
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_razuvious_disrupting_shout_40::PreventLaunchHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
OnEffectHitTarget += SpellEffectFn(spell_razuvious_disrupting_shout_40::CalculateDamage, EFFECT_0, SPELL_EFFECT_POWER_BURN);
}
};