aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2025-07-08 20:59:53 +0300
committerGitHub <noreply@github.com>2025-07-08 19:59:53 +0200
commit3744d6bb2942db779613f5b3fb8320288fbb2e81 (patch)
tree2c5ed9238a70688217c809f6ec5dae90a765de5d
parent5bace54513cebcb0d7f5e84a3c94a9e8654c195d (diff)
Scripts/Mechanar: Update scripts (#31127)
* Gyro-Kill - missing emote, timers, targets * Iron-Hand - missing emote, timers, targets, one missing spell, update the way texts are handled * Sepethrea - unique enum names, comments for scriptnames, update the way one text is handled * Pathaleon - reorder spells, reorder hooks, implement one missing spell, change the way one spell is used * Instance - remove unneeded placeholder
-rw-r--r--sql/updates/world/3.3.5/2025_07_08_00_world.sql10
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp10
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp48
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp44
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp20
6 files changed, 88 insertions, 62 deletions
diff --git a/sql/updates/world/3.3.5/2025_07_08_00_world.sql b/sql/updates/world/3.3.5/2025_07_08_00_world.sql
new file mode 100644
index 00000000000..f664f6795d3
--- /dev/null
+++ b/sql/updates/world/3.3.5/2025_07_08_00_world.sql
@@ -0,0 +1,10 @@
+--
+DELETE FROM `creature_text` WHERE `CreatureID` = 19218 AND `GroupID` = 4;
+DELETE FROM `creature_text` WHERE `CreatureID` = 19710 AND `GroupID` = 5;
+INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(19218,4,0,"You hear a faint unlocking sound...",16,0,100,0,0,0,19055,0,"Gatewatcher Gyro-Kill - On Death"),
+(19710,5,0,"You hear a faint unlocking sound...",16,0,100,0,0,0,19055,0,"Gatewatcher Iron-Hand - On Death");
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` = 35301;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(13,1,35301,0,0,31,0,3,21062,0,0,0,0,"","Group 0: Spell 'Suicide' (Effect 0) targets creature 'Nether Wraith'");
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
index e1c2bb69ab5..e9c02ff9a04 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp
@@ -25,7 +25,8 @@ enum GyroKillTexts
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_SAW_BLADES = 2,
- SAY_DEATH = 3
+ SAY_DEATH = 3,
+ EMOTE_DEATH = 4
};
enum GyroKillSpells
@@ -50,7 +51,7 @@ struct boss_gatewatcher_gyrokill : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 10s);
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 15s, 25s);
events.ScheduleEvent(EVENT_SAW_BLADE, 20s);
events.ScheduleEvent(EVENT_SHADOW_POWER, 25s);
Talk(SAY_AGGRO);
@@ -71,6 +72,7 @@ struct boss_gatewatcher_gyrokill : public BossAI
{
_JustDied();
Talk(SAY_DEATH);
+ Talk(EMOTE_DEATH);
}
void UpdateAI(uint32 diff) override
@@ -88,8 +90,8 @@ struct boss_gatewatcher_gyrokill : public BossAI
switch (eventId)
{
case EVENT_STREAM_OF_MACHINE_FLUID:
- DoCastVictim(SPELL_STREAM_OF_MACHINE_FLUID);
- events.Repeat(13s, 17s);
+ DoCastSelf(SPELL_STREAM_OF_MACHINE_FLUID);
+ events.Repeat(35s, 50s);
break;
case EVENT_SAW_BLADE:
DoCastVictim(SPELL_SAW_BLADE);
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
index 64f9013d63f..08ec9da6830 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp
@@ -18,6 +18,8 @@
#include "ScriptMgr.h"
#include "mechanar.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
+#include "SpellMgr.h"
enum IronHandTexts
{
@@ -25,20 +27,22 @@ enum IronHandTexts
SAY_HAMMER = 1,
SAY_SLAY = 2,
SAY_DEATH = 3,
- EMOTE_HAMMER = 4
+ EMOTE_HAMMER = 4,
+ EMOTE_DEATH = 5
};
enum IronHandSpells
{
- SPELL_SHADOW_POWER = 35322,
+ SPELL_STREAM_OF_MACHINE_FLUID = 35311,
SPELL_HAMMER_PUNCH = 35326,
SPELL_JACKHAMMER = 35327,
- SPELL_STREAM_OF_MACHINE_FLUID = 35311
+ SPELL_SHADOW_POWER = 35322
};
enum IronHandEvents
{
- EVENT_STREAM_OF_MACHINE_FLUID = 1,
+ EVENT_STREAM_OF_MACHINE_FLUID = 1,
+ EVENT_HAMMER_PUNCH,
EVENT_JACKHAMMER,
EVENT_SHADOW_POWER
};
@@ -51,22 +55,36 @@ struct boss_gatewatcher_iron_hand : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 55s);
- events.ScheduleEvent(EVENT_JACKHAMMER, 45s);
+ events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 15s, 25s);
+ events.ScheduleEvent(EVENT_HAMMER_PUNCH, 15s, 25s);
+ events.ScheduleEvent(EVENT_JACKHAMMER, 10s, 30s);
events.ScheduleEvent(EVENT_SHADOW_POWER, 25s);
Talk(SAY_AGGRO);
}
+ void OnSpellStart(SpellInfo const* spell) override
+ {
+ if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_JACKHAMMER, me))
+ Talk(EMOTE_HAMMER);
+ }
+
+ void OnSpellCast(SpellInfo const* spell) override
+ {
+ // Only in normal mode
+ if (spell->Id == SPELL_JACKHAMMER)
+ Talk(SAY_HAMMER);
+ }
+
void KilledUnit(Unit* /*victim*/) override
{
- if (roll_chance_i(50))
- Talk(SAY_SLAY);
+ Talk(SAY_SLAY);
}
void JustDied(Unit* /*killer*/) override
{
_JustDied();
Talk(SAY_DEATH);
+ Talk(EMOTE_DEATH);
}
void UpdateAI(uint32 diff) override
@@ -84,20 +102,20 @@ struct boss_gatewatcher_iron_hand : public BossAI
switch (eventId)
{
case EVENT_STREAM_OF_MACHINE_FLUID:
- DoCastVictim(SPELL_STREAM_OF_MACHINE_FLUID);
+ DoCastSelf(SPELL_STREAM_OF_MACHINE_FLUID);
events.Repeat(35s, 50s);
break;
+ case EVENT_HAMMER_PUNCH:
+ DoCastVictim(SPELL_HAMMER_PUNCH);
+ events.Repeat(25s, 35s);
+ break;
case EVENT_JACKHAMMER:
- Talk(EMOTE_HAMMER);
- /// @todo expect cast this about 5 times in a row (?), announce it by emote only once
- DoCastVictim(SPELL_JACKHAMMER);
- if (roll_chance_i(50))
- Talk(SAY_HAMMER);
+ DoCastSelf(SPELL_JACKHAMMER);
events.Repeat(30s);
break;
case EVENT_SHADOW_POWER:
DoCastSelf(SPELL_SHADOW_POWER);
- events.Repeat(20s, 28s);
+ events.Repeat(25s, 35s);
break;
default:
break;
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index 6f8c5b06e50..fc97bb10668 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -19,10 +19,11 @@
#include "mechanar.h"
#include "ScriptedCreature.h"
#include "SpellAuraEffects.h"
+#include "SpellInfo.h"
#include "SpellScript.h"
#include "TemporarySummon.h"
-enum Texts
+enum SepethreaTexts
{
SAY_AGGRO = 0,
SAY_SUMMON = 1, // Was never used or used under unknown conditions
@@ -31,7 +32,7 @@ enum Texts
SAY_DEATH = 4
};
-enum Spells
+enum SepethreaSpells
{
SPELL_FROST_ATTACK = 45196, // This is definitely spell added in TBC but did it replaced both 35264 and 39086 or only normal version?
SPELL_SUMMON_RAGING_FLAMES = 35275,
@@ -47,12 +48,13 @@ enum Spells
SPELL_INFERNO_DAMAGE = 35283
};
-enum Events
+enum SepethreaEvents
{
EVENT_ARCANE_BLAST = 1,
EVENT_DRAGONS_BREATH
};
+// 19221 - Nethermancer Sepethrea
struct boss_nethermancer_sepethrea : public BossAI
{
boss_nethermancer_sepethrea(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) { }
@@ -72,6 +74,13 @@ struct boss_nethermancer_sepethrea : public BossAI
DoCastSelf(SPELL_SUMMON_RAGING_FLAMES);
}
+ void OnSpellCast(SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_DRAGONS_BREATH)
+ if (roll_chance_i(50))
+ Talk(SAY_DRAGONS_BREATH);
+ }
+
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
@@ -124,8 +133,6 @@ struct boss_nethermancer_sepethrea : public BossAI
case EVENT_DRAGONS_BREATH:
DoCastSelf(SPELL_DRAGONS_BREATH);
events.Repeat(25s, 35s);
- if (roll_chance_i(50))
- Talk(SAY_DRAGONS_BREATH);
break;
default:
break;
@@ -139,6 +146,7 @@ struct boss_nethermancer_sepethrea : public BossAI
}
};
+// 20481 - Raging Flames
struct npc_raging_flames : public ScriptedAI
{
npc_raging_flames(Creature* creature) : ScriptedAI(creature) { }
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index a9878890e2b..f6570c2d13d 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -34,14 +34,15 @@ enum PathaleonTexts
enum PathaleonSpells
{
+ SPELL_SUMMON_NETHER_WRAITHS = 35284,
SPELL_MANA_TAP = 36021,
SPELL_ARCANE_TORRENT = 36022,
SPELL_DOMINATION = 35280,
SPELL_ARCANE_EXPLOSION_H = 15453,
+
+ SPELL_SUICIDE = 35301,
SPELL_FRENZY = 36992,
- SPELL_SUICIDE = 35301, // NYI
- SPELL_SUMMON_NETHER_WRAITHS = 35284,
SPELL_SUMMON_NETHER_WRAITH_LEFT = 35285,
SPELL_SUMMON_NETHER_WRAITH_RIGHT = 35286, // Unused
SPELL_SUMMON_NETHER_WRAITH_FRONT = 35287,
@@ -59,6 +60,7 @@ enum PathaleonEvents
EVENT_ARCANE_TORRENT,
EVENT_DOMINATION,
EVENT_ARCANE_EXPLOSION,
+ EVENT_SUICIDE,
EVENT_FRENZY
};
@@ -79,17 +81,6 @@ struct boss_pathaleon_the_calculator : public BossAI
Talk(SAY_AGGRO);
}
- void KilledUnit(Unit* /*victim*/) override
- {
- Talk(SAY_SLAY);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(SAY_DEATH);
- }
-
void OnSpellCast(SpellInfo const* spell) override
{
switch (spell->Id)
@@ -111,7 +102,21 @@ struct boss_pathaleon_the_calculator : public BossAI
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
{
if (me->HealthBelowPctDamaged(20, damage) && !me->HasAura(SPELL_FRENZY))
+ {
+ events.ScheduleEvent(EVENT_SUICIDE, 0s);
events.ScheduleEvent(EVENT_FRENZY, 0s);
+ }
+ }
+
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ Talk(SAY_SLAY);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(SAY_DEATH);
}
void UpdateAI(uint32 diff) override
@@ -148,6 +153,9 @@ struct boss_pathaleon_the_calculator : public BossAI
DoCastSelf(SPELL_ARCANE_EXPLOSION_H);
events.Repeat(10s, 14s);
break;
+ case EVENT_SUICIDE:
+ DoCastSelf(SPELL_SUICIDE);
+ break;
case EVENT_FRENZY:
DoCastSelf(SPELL_FRENZY);
break;
@@ -163,6 +171,7 @@ struct boss_pathaleon_the_calculator : public BossAI
}
};
+// 21062 - Nether Wraith
struct npc_nether_wraith : public ScriptedAI
{
npc_nether_wraith(Creature* creature) : ScriptedAI(creature) { }
@@ -181,12 +190,11 @@ struct npc_nether_wraith : public ScriptedAI
DoCast(target, SPELL_ARCANE_BOLT);
task.Repeat(5s, 10s);
});
+ }
- _scheduler.Schedule(5s, 10s, [this](TaskContext task)
- {
- DoCastSelf(SPELL_NETHER_EXPLOSION);
- task.Repeat(10s, 15s);
- });
+ void JustDied(Unit* /*killer*/) override
+ {
+ DoCastSelf(SPELL_NETHER_EXPLOSION);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
index 6cdeb655cce..c7bb2199def 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp
@@ -40,26 +40,6 @@ class instance_mechanar : public InstanceMapScript
SetBossNumber(EncounterCount);
LoadDoorData(doorData);
}
-
- bool SetBossState(uint32 type, EncounterState state) override
- {
- if (!InstanceScript::SetBossState(type, state))
- return false;
-
- switch (type)
- {
- case DATA_GATEWATCHER_GYROKILL:
- case DATA_GATEWATCHER_IRON_HAND:
- case DATA_MECHANOLORD_CAPACITUS:
- case DATA_NETHERMANCER_SEPRETHREA:
- case DATA_PATHALEON_THE_CALCULATOR:
- break;
- default:
- break;
- }
-
- return true;
- }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override