aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp211
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp98
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp79
3 files changed, 89 insertions, 299 deletions
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
index 02c0f70b7c8..44885a01270 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.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,23 +15,21 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_jandicebarov
-SD%Complete: 100
-SDComment:
-SDCategory: Scholomance
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
enum Spells
{
- SPELL_CURSEOFBLOOD = 24673,
- //SPELL_ILLUSION = 17773,
+ SPELL_CURSE_OF_BLOOD = 24673,
+ SPELL_ILLUSION = 17773,
+};
- // Spells of Illusion of Jandice Barov
- SPELL_CLEAVE = 15284
+enum Events
+{
+ EVENT_CURSE_OF_BLOOD = 1,
+ EVENT_ILLUSION,
+ EVENT_CLEAVE,
+ EVENT_SET_VISIBILITY
};
class boss_jandice_barov : public CreatureScript
@@ -40,189 +37,87 @@ class boss_jandice_barov : public CreatureScript
public:
boss_jandice_barov() : CreatureScript("boss_jandice_barov") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_jandicebarovAI(creature);
- }
-
struct boss_jandicebarovAI : public ScriptedAI
{
- boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
+ boss_jandicebarovAI(Creature* creature) : ScriptedAI(creature), Summons(me) { }
- void Initialize()
+ void Reset() override
{
- CurseOfBlood_Timer = 15000;
- Illusion_Timer = 30000;
- Invisible_Timer = 3000; //Too much too low?
- Invisible = false;
+ events.Reset();
+ Summons.DespawnAll();
}
- uint32 CurseOfBlood_Timer;
- uint32 Illusion_Timer;
- //uint32 Illusioncounter;
- uint32 Invisible_Timer;
- bool Invisible;
-
- void Reset() override
+ void JustSummoned(Creature* summoned) override
{
- Initialize();
+ // Illusions should attack a random target.
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
+ summoned->AI()->AttackStart(target);
+
+ summoned->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); // Not sure if this is correct.
+ Summons.Summon(summoned);
}
void EnterCombat(Unit* /*who*/) override
{
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 15000);
+ events.ScheduleEvent(EVENT_ILLUSION, 30000);
}
- void SummonIllusions(Unit* victim)
+ void JustDied(Unit* /*killer*/) override
{
- if (Creature* Illusion = DoSpawnCreature(11439, float(irand(-9, 9)), float(irand(-9, 9)), 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000))
- Illusion->AI()->AttackStart(victim);
+ Summons.DespawnAll();
}
void UpdateAI(uint32 diff) override
{
- if (Invisible && Invisible_Timer <= diff)
- {
- //Become visible again
- me->setFaction(14);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetDisplayId(11073); //Jandice Model
- Invisible = false;
- } else if (Invisible)
- {
- Invisible_Timer -= diff;
- //Do nothing while invisible
- return;
- }
-
- //Return since we have no target
if (!UpdateVictim())
return;
- //CurseOfBlood_Timer
- if (CurseOfBlood_Timer <= diff)
- {
- //Cast
- DoCastVictim(SPELL_CURSEOFBLOOD);
+ events.Update(diff);
- //45 seconds
- CurseOfBlood_Timer = 30000;
- } else CurseOfBlood_Timer -= diff;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- //Illusion_Timer
- if (!Invisible && Illusion_Timer <= diff)
+ while (uint32 eventId = events.ExecuteEvent())
{
-
- //Interrupt any spell casting
- me->InterruptNonMeleeSpells(false);
- me->setFaction(35);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->SetDisplayId(11686); // Invisible Model
- DoModifyThreatPercent(me->GetVictim(), -99);
-
- //Summon 10 Illusions attacking random gamers
- Unit* target = NULL;
- for (uint8 i = 0; i < 10; ++i)
+ switch (eventId)
{
- target = SelectTarget(SELECT_TARGET_RANDOM, 0);
- if (target)
- SummonIllusions(target);
+ case EVENT_CURSE_OF_BLOOD:
+ DoCastVictim(SPELL_CURSE_OF_BLOOD);
+ events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 30000);
+ break;
+ case EVENT_ILLUSION:
+ DoCast(SPELL_ILLUSION);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetDisplayId(11686); // Invisible Model
+ DoModifyThreatPercent(me->GetVictim(), -99);
+ events.ScheduleEvent(EVENT_SET_VISIBILITY, 3000);
+ events.ScheduleEvent(EVENT_ILLUSION, 25000);
+ break;
+ case EVENT_SET_VISIBILITY:
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ me->SetDisplayId(11073); //Jandice Model
+ break;
+ default:
+ break;
}
- Invisible = true;
- Invisible_Timer = 3000;
-
- //25 seconds until we should cast this agian
- Illusion_Timer = 25000;
- } else Illusion_Timer -= diff;
-
- // //Illusion_Timer
- // if (Illusion_Timer <= diff)
- // {
- // //Cast
- // DoCastVictim(SPELL_ILLUSION);
- //
- // //3 Illusion will be summoned
- // if (Illusioncounter < 3)
- // {
- // Illusion_Timer = 500;
- // ++Illusioncounter;
- // }
- // else {
- // //15 seconds until we should cast this again
- // Illusion_Timer = 15000;
- // Illusioncounter = 0;
- // }
- //
- // } else Illusion_Timer -= diff;
+ }
DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap events;
+ SummonList Summons;
};
-};
-
-// Illusion of Jandice Barov Script
-
-class npc_illusionofjandicebarov : public CreatureScript
-{
-public:
- npc_illusionofjandicebarov() : CreatureScript("npc_illusionofjandicebarov") { }
-
CreatureAI* GetAI(Creature* creature) const override
{
- return new npc_illusionofjandicebarovAI(creature);
+ return new boss_jandicebarovAI(creature);
}
-
- struct npc_illusionofjandicebarovAI : public ScriptedAI
- {
- npc_illusionofjandicebarovAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- Cleave_Timer = urand(2000, 8000);
- }
-
- uint32 Cleave_Timer;
-
- void Reset() override
- {
- Initialize();
- me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- }
-
- void UpdateAI(uint32 diff) override
- {
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- //Cleave_Timer
- if (Cleave_Timer <= diff)
- {
- //Cast
- DoCastVictim(SPELL_CLEAVE);
-
- //5-8 seconds
- Cleave_Timer = urand(5000, 8000);
- } else Cleave_Timer -= diff;
-
- DoMeleeAttackIfReady();
- }
- };
-
};
void AddSC_boss_jandicebarov()
{
new boss_jandice_barov();
- new npc_illusionofjandicebarov();
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
index 53680739e55..67e09ba4ac9 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.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,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* ScriptData
-SDName: Boss_The_Maker
-SD%Complete: 80
-SDComment: Mind control no support
-SDCategory: Hellfire Citadel, Blood Furnace
-EndScriptData */
-
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "blood_furnace.h"
@@ -42,6 +34,14 @@ enum Spells
SPELL_DOMINATION = 25772
};
+enum Events
+{
+ EVENT_ACID_SPRAY = 1,
+ EVENT_EXPLODING_BREAKER,
+ EVENT_DOMINATION,
+ EVENT_KNOCKDOWN
+};
+
class boss_the_maker : public CreatureScript
{
public:
@@ -51,24 +51,15 @@ class boss_the_maker : public CreatureScript
{
boss_the_makerAI(Creature* creature) : BossAI(creature, DATA_THE_MAKER) { }
- uint32 AcidSpray_Timer;
- uint32 ExplodingBreaker_Timer;
- uint32 Domination_Timer;
- uint32 Knockdown_Timer;
-
- void Reset() override
- {
- _Reset();
- AcidSpray_Timer = 15000;
- ExplodingBreaker_Timer = 6000;
- Domination_Timer = 120000;
- Knockdown_Timer = 10000;
- }
-
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
+
+ events.ScheduleEvent(EVENT_ACID_SPRAY, 15000);
+ events.ScheduleEvent(EVENT_EXPLODING_BREAKER, 6000);
+ events.ScheduleEvent(EVENT_DOMINATION, 120000);
+ events.ScheduleEvent(EVENT_KNOCKDOWN, 10000);
}
void KilledUnit(Unit* who) override
@@ -83,49 +74,31 @@ class boss_the_maker : public CreatureScript
Talk(SAY_DIE);
}
- void UpdateAI(uint32 diff) override
+ void ExecuteEvent(uint32 eventId) override
{
- if (!UpdateVictim())
- return;
-
- if (AcidSpray_Timer <= diff)
- {
- DoCastVictim(SPELL_ACID_SPRAY);
- AcidSpray_Timer = 15000 + rand32() % 8000;
- }
- else
- AcidSpray_Timer -=diff;
-
- if (ExplodingBreaker_Timer <= diff)
+ switch (eventId)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_EXPLODING_BREAKER);
- ExplodingBreaker_Timer = 4000 + rand32() % 8000;
+ case EVENT_ACID_SPRAY:
+ DoCastVictim(SPELL_ACID_SPRAY);
+ events.ScheduleEvent(EVENT_ACID_SPRAY, urand(15000, 23000));
+ break;
+ case EVENT_EXPLODING_BREAKER:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true))
+ DoCast(target, SPELL_EXPLODING_BREAKER);
+ events.ScheduleEvent(EVENT_EXPLODING_BREAKER, urand(4000, 12000));
+ break;
+ case EVENT_DOMINATION:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_DOMINATION);
+ events.ScheduleEvent(EVENT_DOMINATION, 120000);
+ break;
+ case EVENT_KNOCKDOWN:
+ DoCastVictim(SPELL_KNOCKDOWN);
+ events.ScheduleEvent(EVENT_KNOCKDOWN, urand(4000, 12000));
+ break;
+ default:
+ break;
}
- else
- ExplodingBreaker_Timer -=diff;
-
- /* // Disabled until Core Support for mind control
- if (domination_timer_timer <= diff)
- {
- Unit* target;
- target = SelectUnit(SELECT_TARGET_RANDOM, 0);
-
- DoCast(target, SPELL_DOMINATION);
-
- domination_timer = 120000;
- } else domination_timer -=diff;
- */
-
- if (Knockdown_Timer <= diff)
- {
- DoCastVictim(SPELL_KNOCKDOWN);
- Knockdown_Timer = 4000 + rand32() % 8000;
- }
- else
- Knockdown_Timer -=diff;
-
- DoMeleeAttackIfReady();
}
};
@@ -139,4 +112,3 @@ void AddSC_boss_the_maker()
{
new boss_the_maker();
}
-
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index b9b87fd5d6a..db34665e641 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -19,7 +19,7 @@
/* ScriptData
SDName: Shadowmoon_Valley
SD%Complete: 100
-SDComment: Quest support: 10519, 10583, 10601, 10804, 10854, 10458, 10481, 10480, 10781, 10451. Vendor Drake Dealer Hurlunk.
+SDComment: Quest support: 10583, 10601, 10804, 10854, 10458, 10481, 10480, 10781, 10451. Vendor Drake Dealer Hurlunk.
SDCategory: Shadowmoon Valley
EndScriptData */
@@ -29,7 +29,6 @@ npc_enslaved_netherwing_drake
npc_drake_dealer_hurlunk
npcs_flanis_swiftwing_and_kagrosh
npc_karynaku
-npc_oronok_tornheart
npc_overlord_morghor
npc_earthmender_wilda
npc_torloth_the_magnificent
@@ -492,81 +491,6 @@ public:
};
/*######
-## npc_oronok
-######*/
-
-#define GOSSIP_ORONOK1 "I am ready to hear your story, Oronok."
-#define GOSSIP_ORONOK2 "How do I find the cipher?"
-#define GOSSIP_ORONOK3 "How do you know all of this?"
-#define GOSSIP_ORONOK4 "Yet what? What is it, Oronok?"
-#define GOSSIP_ORONOK5 "Continue, please."
-#define GOSSIP_ORONOK6 "So what of the cipher now? And your boys?"
-#define GOSSIP_ORONOK7 "I will find your boys and the cipher, Oronok."
-
-class npc_oronok_tornheart : public CreatureScript
-{
-public:
- npc_oronok_tornheart() : CreatureScript("npc_oronok_tornheart") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- switch (action)
- {
- case GOSSIP_ACTION_TRADE:
- player->GetSession()->SendListInventory(creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->SEND_GOSSIP_MENU(10313, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+1:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->SEND_GOSSIP_MENU(10314, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- player->SEND_GOSSIP_MENU(10315, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
- player->SEND_GOSSIP_MENU(10316, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+4:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- player->SEND_GOSSIP_MENU(10317, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+5:
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
- player->SEND_GOSSIP_MENU(10318, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+6:
- player->CLOSE_GOSSIP_MENU();
- player->AreaExploredOrEventHappens(10519);
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
- if (creature->IsVendor())
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
-
- if (player->GetQuestStatus(10519) == QUEST_STATUS_INCOMPLETE)
- {
- player->ADD_GOSSIP_ITEM(0, GOSSIP_ORONOK1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- player->SEND_GOSSIP_MENU(10312, creature->GetGUID());
- }else
- player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
-};
-
-/*####
# npc_karynaku
####*/
@@ -1909,7 +1833,6 @@ void AddSC_shadowmoon_valley()
new npc_drake_dealer_hurlunk();
new npcs_flanis_swiftwing_and_kagrosh();
new npc_karynaku();
- new npc_oronok_tornheart();
new npc_overlord_morghor();
new npc_earthmender_wilda();
new npc_lord_illidan_stormrage();