aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp22
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp258
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp128
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp31
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp33
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp32
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp16
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp25
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp19
9 files changed, 277 insertions, 287 deletions
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 1812fabbdb7..5e4df483bd7 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -163,7 +163,6 @@ public:
{ "support", rbac::RBAC_PERM_COMMAND_RELOAD_SUPPORT_SYSTEM, true, &HandleReloadSupportSystemCommand, "" },
{ "trainer", rbac::RBAC_PERM_COMMAND_RELOAD_TRAINER, true, &HandleReloadTrainerCommand, "" },
{ "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "" },
- { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "" },
{ "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "" },
{ "vehicle_template", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE, true, &HandleReloadVehicleTemplateCommand, "" },
{ "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "" },
@@ -281,7 +280,6 @@ public:
HandleReloadSpellScriptsCommand(handler, "a");
HandleReloadSpellScriptNamesCommand(handler, "a");
handler->SendGlobalGMSysMessage("DB tables `*_scripts` reloaded.");
- HandleReloadWpScriptsCommand(handler, "a");
HandleReloadWpCommand(handler, "a");
return true;
}
@@ -907,26 +905,6 @@ public:
return true;
}
- static bool HandleReloadWpScriptsCommand(ChatHandler* handler, char const* args)
- {
- if (sMapMgr->IsScriptScheduled())
- {
- handler->SendSysMessage("DB scripts used currently, please attempt reload later.");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (*args != 'a')
- TC_LOG_INFO("misc", "Re-Loading Scripts from `waypoint_scripts`...");
-
- sObjectMgr->LoadWaypointScripts();
-
- if (*args != 'a')
- handler->SendGlobalGMSysMessage("DB table `waypoint_scripts` reloaded.");
-
- return true;
- }
-
static bool HandleReloadWpCommand(ChatHandler* handler, char const* args)
{
if (*args != 'a')
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 851bb6cb43a..124c7a9a1a0 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -51,7 +51,6 @@ public:
static std::vector<ChatCommand> wpCommandTable =
{
{ "add", rbac::RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "" },
- { "event", rbac::RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "" },
{ "load", rbac::RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "" },
{ "modify", rbac::RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "" },
{ "unload", rbac::RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "" },
@@ -290,259 +289,6 @@ public:
return true;
}
- static bool HandleWpEventCommand(ChatHandler* handler, char const* args)
- {
- if (!*args)
- return false;
-
- char* show_str = strtok((char*)args, " ");
- std::string show = show_str;
- WorldDatabasePreparedStatement* stmt = nullptr;
-
- // Check
- if ((show != "add") && (show != "mod") && (show != "del") && (show != "listid"))
- return false;
-
- char* arg_id = strtok(nullptr, " ");
-
- if (show == "add")
- {
- if (Optional<uint32> id = Trinity::StringTo<uint32>(arg_id))
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
- stmt->setUInt32(0, *id);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
-
- if (!result)
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
- stmt->setUInt32(0, *id);
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: ", *id);
- }
- else
- handler->PSendSysMessage("|cff00ff00Wp Event: You have choosed an existing waypoint script guid: %u|r", *id);
- }
- else
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
- id = result->Fetch()->GetUInt32();
- stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_WAYPOINT_SCRIPT);
- stmt->setUInt32(0, *id + 1);
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: New waypoint event added: |r|cff00ffff", *id+1);
- }
-
- return true;
- }
-
- if (show == "listid")
- {
- if (!arg_id)
- {
- handler->PSendSysMessage("%s%s|r", "|cff33ffff", "Wp Event: You must provide waypoint script id.");
- return true;
- }
-
- uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
-
- uint32 a2, a3, a4, a5, a6;
- float a8, a9, a10, a11;
- char const* a7;
-
- stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID);
- stmt->setUInt32(0, id);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
-
- if (!result)
- {
- handler->PSendSysMessage("%s%s%u|r", "|cff33ffff", "Wp Event: No waypoint scripts found on id: ", id);
- return true;
- }
-
- Field* fields;
-
- do
- {
- fields = result->Fetch();
- a2 = fields[0].GetUInt32();
- a3 = fields[1].GetUInt32();
- a4 = fields[2].GetUInt32();
- a5 = fields[3].GetUInt32();
- a6 = fields[4].GetUInt32();
- a7 = fields[5].GetCString();
- a8 = fields[6].GetFloat();
- a9 = fields[7].GetFloat();
- a10 = fields[8].GetFloat();
- a11 = fields[9].GetFloat();
-
- handler->PSendSysMessage("|cffff33ffid:|r|cff00ffff %u|r|cff00ff00, guid: |r|cff00ffff%u|r|cff00ff00, delay: |r|cff00ffff%u|r|cff00ff00, command: |r|cff00ffff%u|r|cff00ff00, datalong: |r|cff00ffff%u|r|cff00ff00, datalong2: |r|cff00ffff%u|r|cff00ff00, datatext: |r|cff00ffff%s|r|cff00ff00, posx: |r|cff00ffff%f|r|cff00ff00, posy: |r|cff00ffff%f|r|cff00ff00, posz: |r|cff00ffff%f|r|cff00ff00, orientation: |r|cff00ffff%f|r", id, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
- }
- while (result->NextRow());
- }
-
- if (show == "del")
- {
- if (!arg_id)
- {
- handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
- return true;
- }
-
- uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
-
- stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
- stmt->setUInt32(0, id);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
-
- if (result)
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_SCRIPT);
- stmt->setUInt32(0, id);
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("%s%s%u|r", "|cff00ff00", "Wp Event: Waypoint script removed: ", id);
- }
- else
- handler->PSendSysMessage("|cffff33ffWp Event: ERROR: you have selected a non existing script: %u|r", id);
-
- return true;
- }
-
- if (show == "mod")
- {
- if (!arg_id)
- {
- handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r");
- return true;
- }
-
- uint32 id = Trinity::StringTo<uint32>(arg_id).value_or(0);
-
- if (!id)
- {
- handler->SendSysMessage("|cffff33ffERROR: No valid waypoint script id not present.|r");
- return true;
- }
-
- char* arg_2 = strtok(nullptr, " ");
-
- if (!arg_2)
- {
- handler->SendSysMessage("|cffff33ffERROR: No argument present.|r");
- return true;
- }
-
- std::string arg_string = arg_2;
-
- if ((arg_string != "setid") && (arg_string != "delay") && (arg_string != "command")
- && (arg_string != "datalong") && (arg_string != "datalong2") && (arg_string != "dataint") && (arg_string != "posx")
- && (arg_string != "posy") && (arg_string != "posz") && (arg_string != "orientation"))
- {
- handler->SendSysMessage("|cffff33ffERROR: No valid argument present.|r");
- return true;
- }
-
- char* arg_3;
- std::string arg_str_2 = arg_2;
- arg_3 = strtok(nullptr, " ");
-
- if (!arg_3)
- {
- handler->SendSysMessage("|cffff33ffERROR: No additional argument present.|r");
- return true;
- }
-
- if (arg_str_2 == "setid")
- {
- uint32 newid = Trinity::StringTo<uint32>(arg_3).value_or(0);
- handler->PSendSysMessage("%s%s|r|cff00ffff%u|r|cff00ff00%s|r|cff00ffff%u|r", "|cff00ff00", "Wp Event: Waypoint script guid: ", newid, " id changed: ", id);
-
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_ID);
- stmt->setUInt32(0, newid);
- stmt->setUInt32(1, id);
- WorldDatabase.Execute(stmt);
-
- return true;
- }
- else
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID);
- stmt->setUInt32(0, id);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
-
- if (!result)
- {
- handler->SendSysMessage("|cffff33ffERROR: You have selected an non existing waypoint script guid.|r");
- return true;
- }
-
- if (arg_str_2 == "posx")
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_X);
- stmt->setFloat(0, float(atof(arg_3)));
- stmt->setUInt32(1, id);
-
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("|cff00ff00Waypoint script:|r|cff00ffff %u|r|cff00ff00 position_x updated.|r", id);
- return true;
- }
- else if (arg_str_2 == "posy")
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Y);
- stmt->setFloat(0, float(atof(arg_3)));
- stmt->setUInt32(1, id);
-
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("|cff00ff00Waypoint script: %u position_y updated.|r", id);
- return true;
- }
- else if (arg_str_2 == "posz")
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_Z);
- stmt->setFloat(0, float(atof(arg_3)));
- stmt->setUInt32(1, id);
-
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 position_z updated.|r", id);
- return true;
- }
- else if (arg_str_2 == "orientation")
- {
- stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_SCRIPT_O);
- stmt->setFloat(0, float(atof(arg_3)));
- stmt->setUInt32(1, id);
-
- WorldDatabase.Execute(stmt);
-
- handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 orientation updated.|r", id);
- return true;
- }
- else if (arg_str_2 == "dataint")
- {
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, arg_3, id); // Query can't be a prepared statement
-
- handler->PSendSysMessage("|cff00ff00Waypoint script: |r|cff00ffff%u|r|cff00ff00 dataint updated.|r", id);
- return true;
- }
- else
- {
- std::string arg_str_3 = arg_3;
- WorldDatabase.EscapeString(arg_str_3);
- WorldDatabase.PExecute("UPDATE waypoint_scripts SET {}='{}' WHERE guid='{}'", arg_2, arg_str_3, id); // Query can't be a prepared statement
- }
- }
- handler->PSendSysMessage("%s%s|r|cff00ffff%u:|r|cff00ff00 %s %s|r", "|cff00ff00", "Waypoint script:", id, arg_2, "updated.");
- }
- return true;
- }
-
static bool HandleWpModifyCommand(ChatHandler* handler, char const* args)
{
if (!*args)
@@ -811,14 +557,10 @@ public:
uint32 point = fields[1].GetUInt32();
uint32 delay = fields[2].GetUInt32();
uint32 flag = fields[3].GetUInt32();
- uint32 ev_id = fields[4].GetUInt32();
- uint32 ev_chance = fields[5].GetUInt16();
handler->PSendSysMessage("|cff00ff00Show info: for current point: |r|cff00ffff%u|r|cff00ff00, Path ID: |r|cff00ffff%u|r", point, pathid);
handler->PSendSysMessage("|cff00ff00Show info: delay: |r|cff00ffff%u|r", delay);
handler->PSendSysMessage("|cff00ff00Show info: Move flag: |r|cff00ffff%u|r", flag);
- handler->PSendSysMessage("|cff00ff00Show info: Waypoint event: |r|cff00ffff%u|r", ev_id);
- handler->PSendSysMessage("|cff00ff00Show info: Event chance: |r|cff00ffff%u|r", ev_chance);
}
while (result->NextRow());
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index c3414c6fabb..f93716612a9 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -545,6 +545,18 @@ enum Misc_VBN
QUEST_DEATH_CHALLENGE = 12733
};
+enum Paths_VBN
+{
+ PATH_DEATH_KNIGHT_INITIATE = 10361360,
+ PATH_DEATH_KNIGHT_INITIATE2 = 10361440,
+ PATH_DEATH_KNIGHT_INITIATE3 = 10362320,
+ PATH_DEATH_KNIGHT_INITIATE4 = 10362400,
+ PATH_DEATH_KNIGHT_INITIATE5 = 10362480,
+ PATH_DEATH_KNIGHT_INITIATE6 = 10363520,
+ PATH_DEATH_KNIGHT_INITIATE7 = 10363680,
+ PATH_DEATH_KNIGHT_INITIATE8 = 10363760,
+};
+
class npc_death_knight_initiate : public CreatureScript
{
public:
@@ -693,6 +705,25 @@ public:
}
return true;
}
+
+ void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
+ {
+ switch (pathId)
+ {
+ case PATH_DEATH_KNIGHT_INITIATE:
+ case PATH_DEATH_KNIGHT_INITIATE2:
+ case PATH_DEATH_KNIGHT_INITIATE3:
+ case PATH_DEATH_KNIGHT_INITIATE4:
+ case PATH_DEATH_KNIGHT_INITIATE5:
+ case PATH_DEATH_KNIGHT_INITIATE6:
+ case PATH_DEATH_KNIGHT_INITIATE7:
+ case PATH_DEATH_KNIGHT_INITIATE8:
+ me->DespawnOrUnsummon(1s);
+ break;
+ default:
+ break;
+ }
+ }
};
CreatureAI* GetAI(Creature* creature) const override
@@ -1138,6 +1169,51 @@ class spell_chapter1_runeforging_credit : public SpellScript
}
};
+enum HearthglenCrusaderPaths : uint32
+{
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN = 10445360,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN2 = 10445600,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN3 = 10448640,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN4 = 10449200,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN5 = 10452240,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN6 = 10452880,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN7 = 10452960,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN8 = 10453040,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN9 = 10453520,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN10 = 10453680,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN11 = 10454000,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN12 = 10454080,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN13 = 10454160,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN14 = 10454320,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN15 = 10454560,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN16 = 10459440,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN17 = 10460320,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN18 = 10463040,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN19 = 10463120,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN20 = 10463280,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN21 = 10463360,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN22 = 10463520,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN23 = 10463680,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN24 = 10463840,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN25 = 10464080,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN26 = 10464160,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN27 = 10464240,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN28 = 10464320,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN29 = 10464400,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN30 = 10464480,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN31 = 10464720,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN32 = 10464800,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN33 = 10464880,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN34 = 10464960,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN35 = 10465040,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN36 = 10465520,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN37 = 10465600,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN38 = 10466000,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN39 = 10466160,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN40 = 10466320,
+ PATH_HEARTHGLEN_CRUSADER_DESPAWN41 = 10466400,
+};
+
// 29102 - Hearthglen Crusader
// 29103 - Tirisfal Crusader
struct npc_hearthglen_crusader : public ScriptedAI
@@ -1187,6 +1263,58 @@ struct npc_hearthglen_crusader : public ScriptedAI
DoMeleeAttackIfReady();
}
+ void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
+ {
+ switch (pathId)
+ {
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN2:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN3:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN4:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN5:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN6:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN7:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN8:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN9:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN10:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN11:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN12:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN13:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN14:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN15:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN16:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN17:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN18:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN19:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN20:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN21:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN22:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN23:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN24:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN25:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN26:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN27:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN28:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN29:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN30:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN31:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN32:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN33:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN34:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN35:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN36:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN37:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN38:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN39:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN40:
+ case PATH_HEARTHGLEN_CRUSADER_DESPAWN41:
+ me->DespawnOrUnsummon(1s);
+ break;
+ default:
+ break;
+ }
+ }
+
private:
float _minimumRange;
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
index e01f0b9c9eb..9d652f8f5de 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp
@@ -19,12 +19,12 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
-enum Emotes
+enum VectusEmotes
{
EMOTE_FRENZY = 0
};
-enum Spells
+enum VectusSpells
{
SPELL_FLAMESTRIKE = 18399,
SPELL_BLAST_WAVE = 16046,
@@ -32,13 +32,25 @@ enum Spells
SPELL_FRENZY = 8269 // 28371
};
-enum Events
+enum VectusEvents
{
EVENT_FIRE_SHIELD = 1,
EVENT_BLAST_WAVE,
EVENT_FRENZY
};
+enum VectusTalks
+{
+ TALK_IDLE = 1,
+ TALK_IDLE2 = 2,
+ TALK_IDLE3 = 3
+};
+
+enum VectusPaths
+{
+ PATH_VECTUS_IDLE = 3904400
+};
+
class boss_vectus : public CreatureScript
{
public:
@@ -102,6 +114,19 @@ public:
DoMeleeAttackIfReady();
}
+
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_VECTUS_IDLE)
+ return;
+
+ if (waypointId == 2)
+ Talk(TALK_IDLE);
+ else if (waypointId == 3)
+ Talk(TALK_IDLE2);
+ else if (waypointId == 4)
+ Talk(TALK_IDLE3);
+ }
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index 53b23697add..eb09f2085fc 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -51,6 +51,9 @@ enum FreyaYells
enum FreyaSpells
{
// Freya
+ SPELL_FREYA_DUMMY_GREEN = 63295,
+ SPELL_FREYA_DUMMY_YELLOW = 63292,
+ SPELL_FREYA_DUMMY_BLUE = 63294,
SPELL_ATTUNED_TO_NATURE = 62519,
SPELL_TOUCH_OF_EONAR = 62528,
SPELL_SUNBEAM = 62623,
@@ -155,6 +158,7 @@ enum FreyaSpells
enum FreyaNpcs
{
+ NPC_CHANNEL_STALKER_FREYA = 33575,
NPC_SUN_BEAM = 33170,
NPC_DETONATING_LASHER = 32918,
NPC_ANCIENT_CONSERVATOR = 33203,
@@ -204,13 +208,18 @@ enum FreyaEvents
EVENT_FLUX = 17
};
-enum Misc
+enum FreyaMisc
{
TIME_DIFFERENCE = 10000, // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds
DATA_GETTING_BACK_TO_NATURE = 1,
DATA_KNOCK_ON_WOOD = 2
};
+enum FreyaPaths
+{
+ PATH_FREYA_IDLE = 10924320,
+};
+
constexpr Seconds FREYA_WAVE_TIME = 60s; // Normal wave is one minute
class npc_iron_roots : public CreatureScript
@@ -687,6 +696,28 @@ class boss_freya : public CreatureScript
break;
}
}
+
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_FREYA_IDLE)
+ return;
+
+ if (waypointId == 4)
+ {
+ if (Creature* creature = me->FindNearestCreature(NPC_CHANNEL_STALKER_FREYA, 30.0f))
+ DoCast(creature, SPELL_FREYA_DUMMY_GREEN);
+ }
+ else if (waypointId == 10)
+ {
+ if (Creature* creature = me->FindNearestCreature(NPC_CHANNEL_STALKER_FREYA, 30.0f))
+ DoCast(creature, SPELL_FREYA_DUMMY_YELLOW);
+ }
+ else if (waypointId == 18)
+ {
+ if (Creature* creature = me->FindNearestCreature(NPC_CHANNEL_STALKER_FREYA, 30.0f))
+ DoCast(creature, SPELL_FREYA_DUMMY_BLUE);
+ }
+ }
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 422e4283693..6fc929c95c4 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -135,6 +135,11 @@ enum Misc
GROUP_SEARING_GRAVITY = 1
};
+enum XT002Paths
+{
+ PATH_XT002_IDLE = 10884320
+};
+
struct boss_xt002 : public BossAI
{
boss_xt002(Creature* creature) : BossAI(creature, DATA_XT002)
@@ -182,6 +187,8 @@ struct boss_xt002 : public BossAI
void JustEngagedWith(Unit* who) override
{
+ scheduler.CancelAll();
+
Talk(SAY_AGGRO);
BossAI::JustEngagedWith(who);
events.ScheduleEvent(EVENT_SEARING_LIGHT, Is25ManRaid() ? 9s : 11s, GROUP_SEARING_GRAVITY, PHASE_1);
@@ -383,6 +390,31 @@ struct boss_xt002 : public BossAI
DoMeleeAttackIfReady();
}
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_XT002_IDLE)
+ return;
+
+ if (waypointId == 3 || waypointId == 9)
+ {
+ me->SetEmoteState(EMOTE_STATE_SPELL_CHANNEL_OMNI);
+
+ scheduler.Schedule(11s, [this](TaskContext /*task*/)
+ {
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
+ });
+ }
+ else if (waypointId == 13)
+ {
+ me->SetEmoteState(EMOTE_STATE_DANCE);
+
+ scheduler.Schedule(30s, [this](TaskContext /*task*/)
+ {
+ me->SetEmoteState(EMOTE_ONESHOT_NONE);
+ });
+ }
+ }
+
private:
bool _healthRecovered; // Did a scrapbot recover XT-002's health during the encounter?
bool _hardMode; // Are we in hard mode? Or: was the heart killed during phase 2?
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index 38a7fd78d66..d7d3c6245c7 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -57,6 +57,11 @@ enum BlackheartEvents
EVENT_WAR_STOMP
};
+enum BlackheartPaths
+{
+ PATH_BLACKHEART_IDLE = 5354960,
+};
+
class BlackheartCharmedPlayerAI : public SimpleCharmedPlayerAI
{
using SimpleCharmedPlayerAI::SimpleCharmedPlayerAI;
@@ -161,6 +166,17 @@ struct boss_blackheart_the_inciter : public BossAI
DoMeleeAttackIfReady();
}
+
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_BLACKHEART_IDLE)
+ return;
+
+ if (waypointId == 2)
+ Talk(SAY_DEATH); // ?
+ else if (waypointId == 3)
+ Talk(SAY_AGGRO); // ?
+ }
};
struct boss_blackheart_the_inciter_mc_dummy : public NullCreatureAI
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
index 2330a2f75ba..3aa3f7c4541 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
@@ -35,7 +35,7 @@ like lack of delays between packets makes it work differently too.
Of course as was said above player can be pulled towards 2 times in a row but that looks like a rare case.
*/
-enum Spells
+enum BlackStalkerSpells
{
SPELL_LEVITATE = 31704,
SPELL_CHAIN_LIGHTNING = 31717,
@@ -52,7 +52,7 @@ enum Spells
SPELL_SUMMON_SPORE_STRIDER = 38755
};
-enum Events
+enum BlackStalkerEvents
{
EVENT_LEASH_CHECK = 1,
EVENT_LEVITATE,
@@ -61,6 +61,11 @@ enum Events
EVENT_SUMMON_SPORE_STRIDER
};
+enum BlackStalkerPaths
+{
+ PATH_BLACK_STALKER_IDLE = 4346960,
+};
+
struct boss_the_black_stalker : public BossAI
{
boss_the_black_stalker(Creature* creature) : BossAI(creature, DATA_THE_BLACK_STALKER), _summons(creature) { }
@@ -68,6 +73,8 @@ struct boss_the_black_stalker : public BossAI
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
+ scheduler.CancelAll();
+
_events.ScheduleEvent(EVENT_LEASH_CHECK, 5s);
_events.ScheduleEvent(EVENT_LEVITATE, 8s, 18s);
_events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 0s, 3s);
@@ -130,6 +137,20 @@ struct boss_the_black_stalker : public BossAI
DoMeleeAttackIfReady();
}
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_BLACK_STALKER_IDLE)
+ return;
+
+ if (waypointId == 2 || waypointId == 4 || waypointId == 6)
+ {
+ scheduler.Schedule(2s, [this](TaskContext /*task*/)
+ {
+ me->HandleEmoteCommand(EMOTE_ONESHOT_EAT);
+ });
+ }
+ }
+
private:
EventMap _events;
SummonList _summons;
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index 1bbf80b84e9..c13395e9adc 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -429,7 +429,9 @@ enum PlantBannerQuests
NPC_KIL_SORROW_DEATHSWORN = 17148,
NPC_GISELDA_THE_CRONE = 18391,
NPC_WARMAUL_REAVER = 17138,
- NPC_WARMAUL_SHAMAN = 18064
+ NPC_WARMAUL_SHAMAN = 18064,
+
+ PATH_NAGRAND_BANNER = 4816480,
};
class npc_nagrand_banner : public CreatureScript
@@ -474,6 +476,21 @@ public:
return bannered;
}
+ void WaypointReached(uint32 waypointId, uint32 pathId) override
+ {
+ if (pathId != PATH_NAGRAND_BANNER)
+ return;
+
+ if (waypointId == 11)
+ me->HandleEmoteCommand(EMOTE_ONESHOT_APPLAUD);
+ else if (waypointId == 4 || waypointId == 8)
+ me->HandleEmoteCommand(EMOTE_ONESHOT_TALK);
+ else if (waypointId == 10)
+ me->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
+ else if (waypointId == 3 || waypointId == 7)
+ me->HandleEmoteCommand(EMOTE_STATE_USE_STANDING);
+ }
+
protected:
TaskScheduler scheduler;