aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_04_01_creature_text.sql4
-rw-r--r--src/server/scripts/Outland/BlackTemple/black_temple.h5
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_supremus.cpp212
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp127
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp5
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp26
6 files changed, 166 insertions, 213 deletions
diff --git a/sql/updates/world/2014_09_04_01_creature_text.sql b/sql/updates/world/2014_09_04_01_creature_text.sql
new file mode 100644
index 00000000000..c2f2f6c7242
--- /dev/null
+++ b/sql/updates/world/2014_09_04_01_creature_text.sql
@@ -0,0 +1,4 @@
+DELETE FROM `creature_text` WHERE `entry`=30215;
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(30215, 1, 0, 'Sons of Hodir! I humbly present to you....', 42, 0, 100, 0, 0, 0, 30906, 'Player - Read Pronouncement'),
+(30215, 2, 0, 'The Helm of Hodir!', 42, 0, 100, 0, 0, 0, 30907, 'Player - Read Pronouncement');
diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h
index 4af561480be..c03c8b97d20 100644
--- a/src/server/scripts/Outland/BlackTemple/black_temple.h
+++ b/src/server/scripts/Outland/BlackTemple/black_temple.h
@@ -65,12 +65,15 @@ enum CreatureIds
NPC_ILLIDARI_COUNCIL = 23426,
NPC_BLOOD_ELF_COUNCIL_VOICE = 23499,
- NPC_ILLIDAN_STORMRAGE = 22917
+ NPC_ILLIDAN_STORMRAGE = 22917,
+
+ NPC_SUPREMUS_VOLCANO = 23085
};
enum GameObjectIds
{
GO_NAJENTUS_GATE = 185483,
+ GO_NAJENTUS_SPINE = 185584,
GO_SUPREMUS_GATE = 185882,
GO_SHADE_OF_AKAMA_DOOR = 185478,
GO_TERON_DOOR_1 = 185480,
diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
index a705659337f..b9b654f8b95 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -16,46 +15,47 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_Supremus
-SD%Complete: 95
-SDComment: Need to implement molten punch
-SDCategory: Black Temple
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "PassiveAI.h"
#include "black_temple.h"
-enum Supremus
+enum Texts
{
- EMOTE_NEW_TARGET = 0,
- EMOTE_PUNCH_GROUND = 1,
- EMOTE_GROUND_CRACK = 2,
-
- //Spells
- SPELL_MOLTEN_PUNCH = 40126,
- SPELL_HATEFUL_STRIKE = 41926,
- SPELL_MOLTEN_FLAME = 40980,
- SPELL_VOLCANIC_ERUPTION = 40117,
- SPELL_VOLCANIC_SUMMON = 40276,
- SPELL_BERSERK = 45078,
+ EMOTE_NEW_TARGET = 0,
+ EMOTE_PUNCH_GROUND = 1,
+ EMOTE_GROUND_CRACK = 2
+};
- CREATURE_VOLCANO = 23085,
- CREATURE_STALKER = 23095,
+enum Spells
+{
+ SPELL_MOLTEN_PUNCH = 40126,
+ SPELL_HATEFUL_STRIKE = 41926,
+ SPELL_MOLTEN_FLAME = 40980,
+ SPELL_VOLCANIC_ERUPTION = 40117,
+ SPELL_VOLCANIC_SUMMON = 40276,
+ SPELL_BERSERK = 45078
+};
- PHASE_STRIKE = 1,
- PHASE_CHASE = 2,
+enum Events
+{
+ EVENT_BERSERK = 1,
+ EVENT_SWITCH_PHASE,
+ EVENT_FLAME,
+ EVENT_VOLCANO,
+ EVENT_SWITCH_TARGET,
+ EVENT_HATEFUL_STRIKE
+};
- EVENT_BERSERK = 1,
- EVENT_SWITCH_PHASE = 2,
- EVENT_FLAME = 3,
- EVENT_VOLCANO = 4,
- EVENT_SWITCH_TARGET = 5,
- EVENT_HATEFUL_STRIKE = 6,
+enum Phases
+{
+ PHASE_STRIKE = 1,
+ PHASE_CHASE = 2
+};
- GCD_CAST = 1
+enum EventGroups
+{
+ GCD_CAST = 1
};
class molten_flame : public CreatureScript
@@ -88,38 +88,22 @@ class boss_supremus : public CreatureScript
public:
boss_supremus() : CreatureScript("boss_supremus") { }
- CreatureAI* GetAI(Creature* creature) const override
+ struct boss_supremusAI : public BossAI
{
- return GetInstanceAI<boss_supremusAI>(creature);
- }
-
- struct boss_supremusAI : public ScriptedAI
- {
- boss_supremusAI(Creature* creature) : ScriptedAI(creature), summons(me)
+ boss_supremusAI(Creature* creature) : BossAI(creature, DATA_SUPREMUS)
{
- instance = creature->GetInstanceScript();
+ phase = 0;
}
- InstanceScript* instance;
- EventMap events;
- SummonList summons;
- uint32 phase;
-
void Reset() override
{
- if (me->IsAlive())
- instance->SetBossState(DATA_SUPREMUS, NOT_STARTED);
-
+ _Reset();
phase = 0;
-
- events.Reset();
- summons.DespawnAll();
}
void EnterCombat(Unit* /*who*/) override
{
- instance->SetBossState(DATA_SUPREMUS, IN_PROGRESS);
-
+ _EnterCombat();
ChangePhase();
events.ScheduleEvent(EVENT_BERSERK, 900000, GCD_CAST);
events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST);
@@ -152,23 +136,6 @@ public:
events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000, GCD_CAST);
}
- void JustDied(Unit* /*killer*/) override
- {
- instance->SetBossState(DATA_SUPREMUS, DONE);
-
- summons.DespawnAll();
- }
-
- void JustSummoned(Creature* summon) override
- {
- summons.Summon(summon);
- }
-
- void SummonedCreatureDespawn(Creature* summon) override
- {
- summons.Despawn(summon);
- }
-
Unit* CalculateHatefulStrikeTarget()
{
uint32 health = 0;
@@ -192,63 +159,59 @@ public:
return target;
}
- void UpdateAI(uint32 diff) override
+ void ExecuteEvent(uint32 eventId) override
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_BERSERK:
- DoCast(me, SPELL_BERSERK, true);
- break;
- case EVENT_FLAME:
- DoCast(me, SPELL_MOLTEN_PUNCH);
- events.DelayEvents(1500, GCD_CAST);
- events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST);
- break;
- case EVENT_HATEFUL_STRIKE:
- if (Unit* target = CalculateHatefulStrikeTarget())
- DoCast(target, SPELL_HATEFUL_STRIKE);
- events.DelayEvents(1000, GCD_CAST);
- events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE);
- break;
- case EVENT_SWITCH_TARGET:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
- {
- DoResetThreat();
- me->AddThreat(target, 5000000.0f);
- Talk(EMOTE_NEW_TARGET);
- }
- events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE);
- break;
- case EVENT_VOLCANO:
+ case EVENT_BERSERK:
+ DoCast(me, SPELL_BERSERK, true);
+ break;
+ case EVENT_FLAME:
+ DoCast(me, SPELL_MOLTEN_PUNCH);
+ events.DelayEvents(1500, GCD_CAST);
+ events.ScheduleEvent(EVENT_FLAME, 20000, GCD_CAST);
+ break;
+ case EVENT_HATEFUL_STRIKE:
+ if (Unit* target = CalculateHatefulStrikeTarget())
+ DoCast(target, SPELL_HATEFUL_STRIKE);
+ events.DelayEvents(1000, GCD_CAST);
+ events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 5000, GCD_CAST, PHASE_STRIKE);
+ break;
+ case EVENT_SWITCH_TARGET:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true))
{
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 999, true);
- if (!target) target = me->GetVictim();
- if (target)
- {
- //DoCast(target, SPELL_VOLCANIC_SUMMON);//movement bugged
- me->SummonCreature(CREATURE_VOLCANO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 30000);
- Talk(EMOTE_GROUND_CRACK);
- events.DelayEvents(1500, GCD_CAST);
- }
- events.ScheduleEvent(EVENT_VOLCANO, 10000, GCD_CAST, PHASE_CHASE);
- return;
+ DoResetThreat();
+ me->AddThreat(target, 5000000.0f);
+ Talk(EMOTE_NEW_TARGET);
}
- case EVENT_SWITCH_PHASE:
- ChangePhase();
- break;
- }
+ events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, 0, PHASE_CHASE);
+ break;
+ case EVENT_VOLCANO:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 999, true))
+ {
+ //DoCast(target, SPELL_VOLCANIC_SUMMON);//movement bugged
+ me->SummonCreature(NPC_SUPREMUS_VOLCANO, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 30000);
+ Talk(EMOTE_GROUND_CRACK);
+ events.DelayEvents(1500, GCD_CAST);
+ }
+ events.ScheduleEvent(EVENT_VOLCANO, 10000, GCD_CAST, PHASE_CHASE);
+ return;
+ case EVENT_SWITCH_PHASE:
+ ChangePhase();
+ break;
+ default:
+ break;
}
-
- DoMeleeAttackIfReady();
}
+
+ private:
+ uint32 phase;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetBlackTempleAI<boss_supremusAI>(creature);
+ }
};
class npc_volcano : public CreatureScript
@@ -256,11 +219,6 @@ class npc_volcano : public CreatureScript
public:
npc_volcano() : CreatureScript("npc_volcano") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_volcanoAI(creature);
- }
-
struct npc_volcanoAI : public ScriptedAI
{
npc_volcanoAI(Creature* creature) : ScriptedAI(creature)
@@ -282,7 +240,6 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override { }
-
void DoAction(int32 /*info*/) override
{
me->RemoveAura(SPELL_VOLCANIC_ERUPTION);
@@ -298,6 +255,11 @@ public:
else wait -= diff;
}
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_volcanoAI(creature);
+ }
};
void AddSC_boss_supremus()
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 64a6add9801..6425675219f 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -29,7 +29,7 @@ EndScriptData */
#include "Player.h"
#include "SpellInfo.h"
-enum Yells
+enum Texts
{
SAY_AGGRO = 0,
SAY_NEEDLE = 1,
@@ -51,11 +51,6 @@ enum Spells
};
-enum GameObjects
-{
- GOBJECT_SPINE = 185584
-};
-
enum Events
{
EVENT_BERSERK = 1,
@@ -65,7 +60,7 @@ enum Events
EVENT_SHIELD = 5
};
-enum Misc
+enum EventGroups
{
GCD_CAST = 1,
GCD_YELL = 2
@@ -76,30 +71,17 @@ class boss_najentus : public CreatureScript
public:
boss_najentus() : CreatureScript("boss_najentus") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<boss_najentusAI>(creature);
- }
-
- struct boss_najentusAI : public ScriptedAI
+ struct boss_najentusAI : public BossAI
{
- boss_najentusAI(Creature* creature) : ScriptedAI(creature)
+ boss_najentusAI(Creature* creature) : BossAI(creature, DATA_HIGH_WARLORD_NAJENTUS)
{
- instance = creature->GetInstanceScript();
+ SpineTargetGUID = 0;
}
- InstanceScript* instance;
- EventMap events;
-
- uint64 SpineTargetGUID;
-
void Reset() override
{
- events.Reset();
-
+ _Reset();
SpineTargetGUID = 0;
-
- instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, NOT_STARTED);
}
void KilledUnit(Unit* /*victim*/) override
@@ -110,8 +92,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
- instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, DONE);
-
+ _JustDied();
Talk(SAY_DEATH);
}
@@ -127,10 +108,8 @@ public:
void EnterCombat(Unit* /*who*/) override
{
- instance->SetBossState(DATA_HIGH_WARLORD_NAJENTUS, IN_PROGRESS);
-
+ _EnterCombat();
Talk(SAY_AGGRO);
- DoZoneInCombat();
events.ScheduleEvent(EVENT_BERSERK, 480000, GCD_CAST);
events.ScheduleEvent(EVENT_YELL, 45000 + (rand32() % 76) * 1000, GCD_YELL);
ResetTimer();
@@ -155,44 +134,40 @@ public:
events.RescheduleEvent(EVENT_SHIELD, 60000 + inc);
}
- void UpdateAI(uint32 diff) override
+ void ExecuteEvent(uint32 eventId) override
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_SHIELD:
- DoCast(me, SPELL_TIDAL_SHIELD, true);
- ResetTimer(45000);
- break;
- case EVENT_BERSERK:
- Talk(SAY_ENRAGE);
- DoCast(me, SPELL_BERSERK, true);
- events.DelayEvents(15000, GCD_YELL);
- break;
- case EVENT_SPINE:
- {
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1);
- if (!target) target = me->GetVictim();
- if (target)
- {
- DoCast(target, SPELL_IMPALING_SPINE, true);
- SpineTargetGUID = target->GetGUID();
- //must let target summon, otherwise you cannot click the spine
- target->SummonGameObject(GOBJECT_SPINE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
- Talk(SAY_NEEDLE);
- events.DelayEvents(1500, GCD_CAST);
- events.DelayEvents(15000, GCD_YELL);
- }
- events.ScheduleEvent(EVENT_SPINE, 21000, GCD_CAST);
- return;
- }
- case EVENT_NEEDLE:
+ case EVENT_SHIELD:
+ DoCast(me, SPELL_TIDAL_SHIELD, true);
+ ResetTimer(45000);
+ break;
+ case EVENT_BERSERK:
+ Talk(SAY_ENRAGE);
+ DoCast(me, SPELL_BERSERK, true);
+ events.DelayEvents(15000, GCD_YELL);
+ break;
+ case EVENT_SPINE:
+ {
+ Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1);
+
+ if (!target)
+ target = me->GetVictim();
+
+ if (target)
+ {
+ DoCast(target, SPELL_IMPALING_SPINE, true);
+ SpineTargetGUID = target->GetGUID();
+ //must let target summon, otherwise you cannot click the spine
+ target->SummonGameObject(GO_NAJENTUS_SPINE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
+ Talk(SAY_NEEDLE);
+ events.DelayEvents(1500, GCD_CAST);
+ events.DelayEvents(15000, GCD_YELL);
+ }
+ events.ScheduleEvent(EVENT_SPINE, 21000, GCD_CAST);
+ return;
+ }
+ case EVENT_NEEDLE:
{
//DoCast(me, SPELL_NEEDLE_SPINE, true);
std::list<Unit*> targets;
@@ -203,18 +178,24 @@ public:
events.DelayEvents(1500, GCD_CAST);
return;
}
- case EVENT_YELL:
- Talk(SAY_SPECIAL);
- events.ScheduleEvent(EVENT_YELL, urand(25000, 100000), GCD_YELL);
- events.DelayEvents(15000, GCD_YELL);
- break;
- }
+ case EVENT_YELL:
+ Talk(SAY_SPECIAL);
+ events.ScheduleEvent(EVENT_YELL, urand(25000, 100000), GCD_YELL);
+ events.DelayEvents(15000, GCD_YELL);
+ break;
+ default:
+ break;
}
-
- DoMeleeAttackIfReady();
}
+
+ private:
+ uint64 SpineTargetGUID;
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetBlackTempleAI<boss_najentusAI>(creature);
+ }
};
class go_najentus_spine : public GameObjectScript
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index fd4c972edbe..08999d3454b 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2407,16 +2407,15 @@ class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
{
Player* player = GetCaster()->ToPlayer();
uint32 factionId = GetSpellInfo()->Effects[effIndex].CalcValue();
- int32 repChange = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
+ int32 repChange = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId);
-
if (!factionEntry)
return;
// Set rep to baserep + basepoints (expecting spillover for oposite faction -> become hated)
// Not when player already has equal or higher rep with this faction
- if (player->GetReputationMgr().GetBaseReputation(factionEntry) < repChange)
+ if (player->GetReputationMgr().GetReputation(factionEntry) <= repChange)
player->GetReputationMgr().SetReputation(factionEntry, repChange);
// EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index f17aac51519..e135bb08e73 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -21,15 +21,16 @@
* Scriptnames of files in this file should be prefixed with "spell_q#questID_".
*/
+#include "CellImpl.h"
+#include "CreatureTextMgr.h"
+#include "GridNotifiers.h"
+#include "GridNotifiersImpl.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "Vehicle.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
-#include "CellImpl.h"
class spell_generic_quest_update_entry_SpellScript : public SpellScript
{
@@ -1115,12 +1116,12 @@ class spell_q9452_cast_net: public SpellScriptLoader
}
};
-#define SAY_1 "Sons of Hodir! I humbly present to you..."
-#define SAY_2 "The Helm of Hodir!"
-
enum HodirsHelm
{
- NPC_KILLCREDIT = 30210 // Hodir's Helm KC Bunny
+ SAY_1 = 1,
+ SAY_2 = 2,
+ NPC_KILLCREDIT = 30210, // Hodir's Helm KC Bunny
+ NPC_ICE_SPIKE_BUNNY = 30215
};
class spell_q12987_read_pronouncement : public SpellScriptLoader
@@ -1137,9 +1138,12 @@ public:
// player must cast kill credit and do emote text, according to sniff
if (Player* target = GetTarget()->ToPlayer())
{
- target->MonsterWhisper(SAY_1, target, true);
- target->KilledMonsterCredit(NPC_KILLCREDIT, 0);
- target->MonsterWhisper(SAY_2, target, true);
+ if (Creature* trigger = target->FindNearestCreature(NPC_ICE_SPIKE_BUNNY, 25.0f))
+ {
+ sCreatureTextMgr->SendChat(trigger, SAY_1, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, target);
+ target->KilledMonsterCredit(NPC_KILLCREDIT);
+ sCreatureTextMgr->SendChat(trigger, SAY_2, target, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, target);
+ }
}
}
@@ -2096,7 +2100,7 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader
}
};
-// 52694 - Recall Eye of Acherus
+// 52694 - Recall Eye of Acherus
class spell_q12641_recall_eye_of_acherus : public SpellScriptLoader
{
public: