aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorModoX <moardox@gmail.com>2024-12-28 23:25:10 +0100
committerGitHub <noreply@github.com>2024-12-28 23:25:10 +0100
commit309ba22a15e5e0b4321b99f7157ccb18e0adc8dd (patch)
treef40e4b0b27df733b348144b3813b932f8aeb3268 /src/server/scripts
parentd8bcf5fcb655d9931f7c74883ca19c0428e2a8ae (diff)
Core/AI: Implemented conversation ai (#30538)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/BrokenIsles/zone_mardum.cpp39
-rw-r--r--src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp21
-rw-r--r--src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp25
-rw-r--r--src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp25
-rw-r--r--src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp11
-rw-r--r--src/server/scripts/KulTiras/zone_boralus.cpp75
-rw-r--r--src/server/scripts/Shadowlands/SanctumOfDomination/boss_sylvanas_windrunner.cpp11
-rw-r--r--src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp38
-rw-r--r--src/server/scripts/World/conversation_scripts.cpp11
-rw-r--r--src/server/scripts/Zandalar/KingsRest/kings_rest.cpp13
10 files changed, 139 insertions, 130 deletions
diff --git a/src/server/scripts/BrokenIsles/zone_mardum.cpp b/src/server/scripts/BrokenIsles/zone_mardum.cpp
index 34b604ab7af..b4ac35635ba 100644
--- a/src/server/scripts/BrokenIsles/zone_mardum.cpp
+++ b/src/server/scripts/BrokenIsles/zone_mardum.cpp
@@ -20,6 +20,7 @@
#include "CellImpl.h"
#include "Containers.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "CreatureAIImpl.h"
#include "EventProcessor.h"
#include "GridNotifiersImpl.h"
@@ -376,10 +377,10 @@ struct npc_cyana_nightglaive_invasion_begins : public ScriptedAI
};
// 922 - The Invasion Begins
-class conversation_the_invasion_begins : public ConversationScript
+class conversation_the_invasion_begins : public ConversationAI
{
public:
- conversation_the_invasion_begins() : ConversationScript("conversation_the_invasion_begins") { }
+ conversation_the_invasion_begins(Conversation* conversation) : ConversationAI(conversation) { }
enum TheInvasionBeginsConversationData
{
@@ -396,7 +397,7 @@ public:
EVENT_ILLIDARI_START_PATH
};
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* kaynObject = GetClosestCreatureWithOptions(creator, 10.0f, { .CreatureId = NPC_KAYN_SUNFURY_INVASION_BEGINS, .IgnorePhases = true });
Creature* jayceObject = GetClosestCreatureWithOptions(creator, 10.0f, { .CreatureId = NPC_JAYCE_DARKWEAVER_INVASION_BEGINS, .IgnorePhases = true });
@@ -428,7 +429,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -439,7 +440,7 @@ public:
_events.ScheduleEvent(EVENT_ILLIDARI_START_PATH, *illidariStartPathLineStarted);
}
- static void StartCloneChannel(ObjectGuid guid, Conversation* conversation)
+ void StartCloneChannel(ObjectGuid guid)
{
Unit* privateObjectOwner = ObjectAccessor::GetUnit(*conversation, conversation->GetPrivateObjectOwner());
if (!privateObjectOwner)
@@ -452,7 +453,7 @@ public:
clone->CastSpell(privateObjectOwner, SPELL_TRACK_TARGET_IN_CHANNEL, false);
}
- static void StartCloneMovement(ObjectGuid cloneGUID, uint32 pathId, uint32 animKit, Conversation* conversation)
+ void StartCloneMovement(ObjectGuid cloneGUID, uint32 pathId, uint32 animKit)
{
Creature* clone = ObjectAccessor::GetCreature(*conversation, cloneGUID);
if (!clone)
@@ -464,7 +465,7 @@ public:
clone->SetAIAnimKitId(animKit);
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -472,12 +473,12 @@ public:
{
case EVENT_ILLIDARI_FACE_PLAYERS:
{
- StartCloneChannel(conversation->GetActorUnit(CONVO_ACTOR_IDX_KAYN)->GetGUID(), conversation);
- StartCloneChannel(conversation->GetActorUnit(CONVO_ACTOR_IDX_KORVAS)->GetGUID(), conversation);
- StartCloneChannel(_jayceGUID, conversation);
- StartCloneChannel(_allariGUID, conversation);
- StartCloneChannel(_cyanaGUID, conversation);
- StartCloneChannel(_sevisGUID, conversation);
+ StartCloneChannel(conversation->GetActorUnit(CONVO_ACTOR_IDX_KAYN)->GetGUID());
+ StartCloneChannel(conversation->GetActorUnit(CONVO_ACTOR_IDX_KORVAS)->GetGUID());
+ StartCloneChannel(_jayceGUID);
+ StartCloneChannel(_allariGUID);
+ StartCloneChannel(_cyanaGUID);
+ StartCloneChannel(_sevisGUID);
break;
}
case EVENT_ILLIDARI_START_PATH:
@@ -501,11 +502,11 @@ public:
kaynClone->SetSheath(SHEATH_STATE_MELEE);
kaynClone->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER);
- StartCloneMovement(conversation->GetActorUnit(CONVO_ACTOR_IDX_KORVAS)->GetGUID(), PATH_KORVAS_INVASION_BEGINS, ANIM_DH_RUN, conversation);
- StartCloneMovement(_jayceGUID, PATH_JAYCE_INVASION_BEGINS, 0, conversation);
- StartCloneMovement(_allariGUID, PATH_ALLARI_INVASION_BEGINS, ANIM_DH_RUN_ALLARI, conversation);
- StartCloneMovement(_cyanaGUID, PATH_CYANA_INVASION_BEGINS, 0, conversation);
- StartCloneMovement(_sevisGUID, PATH_SEVIS_INVASION_BEGINS, ANIM_DH_RUN, conversation);
+ StartCloneMovement(conversation->GetActorUnit(CONVO_ACTOR_IDX_KORVAS)->GetGUID(), PATH_KORVAS_INVASION_BEGINS, ANIM_DH_RUN);
+ StartCloneMovement(_jayceGUID, PATH_JAYCE_INVASION_BEGINS, 0);
+ StartCloneMovement(_allariGUID, PATH_ALLARI_INVASION_BEGINS, ANIM_DH_RUN_ALLARI);
+ StartCloneMovement(_cyanaGUID, PATH_CYANA_INVASION_BEGINS, 0);
+ StartCloneMovement(_sevisGUID, PATH_SEVIS_INVASION_BEGINS, ANIM_DH_RUN);
break;
}
default:
@@ -2002,7 +2003,7 @@ void AddSC_zone_mardum()
new event_sevis_sacrifice_self();
// Conversation
- new conversation_the_invasion_begins();
+ RegisterConversationAI(conversation_the_invasion_begins);
// Scene
new scene_demonhunter_intro();
diff --git a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp
index 7527b516936..746b24a77ca 100644
--- a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp
+++ b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp
@@ -18,6 +18,7 @@
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "InstanceScript.h"
#include "MotionMaster.h"
#include "ScriptMgr.h"
@@ -107,12 +108,12 @@ struct at_aberrus_sarkareth_conversation_intro : AreaTriggerAI
};
// 20800 - Conversation
-class conversation_aberrus_sabellian_intro : public ConversationScript
+class conversation_aberrus_sabellian_intro : public ConversationAI
{
public:
- conversation_aberrus_sabellian_intro() : ConversationScript("conversation_aberrus_sabellian_intro") { }
+ conversation_aberrus_sabellian_intro(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
if (Milliseconds const* sabellianMoveStartTime = conversation->GetLineStartTime(DEFAULT_LOCALE, CONVO_SABELLIAN_INTRO_LINE_01))
_events.ScheduleEvent(EVENT_SABELLIAN_MOVE, *sabellianMoveStartTime);
@@ -121,7 +122,7 @@ public:
_events.ScheduleEvent(EVENT_SABELLIAN_MOVE_HOME_POS, *sabellianHomeMoveStartTime + Seconds(2));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -157,17 +158,17 @@ private:
};
// 20985 - Conversation
-class conversation_aberrus_kazzara_intro : public ConversationScript
+class conversation_aberrus_kazzara_intro : public ConversationAI
{
public:
- conversation_aberrus_kazzara_intro() : ConversationScript("conversation_aberrus_kazzara_intro") { }
+ conversation_aberrus_kazzara_intro(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
_events.ScheduleEvent(EVENT_KAZZARA_INTRO, conversation->GetLineEndTime(DEFAULT_LOCALE, CONVO_SARKARETH_LAST_LINE));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -213,6 +214,6 @@ void AddSC_aberrus_the_shadowed_crucible()
RegisterAreaTriggerAI(at_aberrus_sabellian_conversation_intro);
RegisterAreaTriggerAI(at_aberrus_sarkareth_conversation_intro);
- new conversation_aberrus_sabellian_intro();
- new conversation_aberrus_kazzara_intro();
+ RegisterConversationAI(conversation_aberrus_sabellian_intro);
+ RegisterConversationAI(conversation_aberrus_kazzara_intro);
}
diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
index caa7fb2dd97..22a8b5dedf2 100644
--- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
@@ -19,6 +19,7 @@
#include "AreaTriggerAI.h"
#include "Containers.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "CreatureAIImpl.h"
#include "CreatureGroups.h"
#include "MotionMaster.h"
@@ -469,12 +470,12 @@ struct at_human_heritage_lions_pride_inn_basement_enter : AreaTriggerAI
};
// 20342 - Conversation
-class conversation_an_unlikely_informant : public ConversationScript
+class conversation_an_unlikely_informant : public ConversationAI
{
public:
- conversation_an_unlikely_informant() : ConversationScript("conversation_an_unlikely_informant") { }
+ conversation_an_unlikely_informant(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* mathiasObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_MATHIAS_SHAW, .IgnorePhases = true });
Creature* vanessaObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_VANESSA_VANCLEEF, .IgnorePhases = true });
@@ -495,7 +496,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -511,7 +512,7 @@ public:
_events.ScheduleEvent(EVENT_MATHIAS_CLONE_DESPAWN, conversation->GetLastLineEndTime(privateOwnerLocale));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -582,12 +583,12 @@ private:
};
// 20387 - Conversation
-class conversation_the_new_classington_estate : public ConversationScript
+class conversation_the_new_classington_estate : public ConversationAI
{
public:
- conversation_the_new_classington_estate() : ConversationScript("conversation_the_new_classington_estate") { }
+ conversation_the_new_classington_estate(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* mathiasObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_MATHIAS_SHAW, .IgnorePhases = true });
Creature* vanessaObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_VANESSA_VANCLEEF, .IgnorePhases = true });
@@ -608,7 +609,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -622,7 +623,7 @@ public:
_events.ScheduleEvent(EVENT_MATHIAS_CLONE_DESPAWN, conversation->GetLastLineEndTime(privateOwnerLocale));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -720,8 +721,8 @@ void AddSC_elwynn_forest()
RegisterSpellScript(spell_stealth_vanessa_human_heritage);
// Conversation
- new conversation_an_unlikely_informant();
- new conversation_the_new_classington_estate();
+ RegisterConversationAI(conversation_an_unlikely_informant);
+ RegisterConversationAI(conversation_the_new_classington_estate);
// AreaTrigger
RegisterAreaTriggerAI(at_human_heritage_lions_pride_inn_basement_enter);
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
index e071fdf1f19..902fb016da4 100644
--- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
@@ -19,6 +19,7 @@
#include "AreaTriggerAI.h"
#include "Containers.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "CreatureAIImpl.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
@@ -104,10 +105,10 @@ struct at_stormwind_keep_tides_of_war : AreaTriggerAI
Position const VisionOfSailorsMemoryPosition = { -8384.131f, 324.383f, 148.443f, 1.559973f };
// 4857 - Conversation
-class conversation_start_council_tides_of_war : public ConversationScript
+class conversation_start_council_tides_of_war : public ConversationAI
{
public:
- conversation_start_council_tides_of_war() : ConversationScript("conversation_start_council_tides_of_war") { }
+ conversation_start_council_tides_of_war(Conversation* conversation) : ConversationAI(conversation) { }
enum Events
{
@@ -123,7 +124,7 @@ public:
CONVO_LINE_JAINA_CREDIT = 19486,
};
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* jainaObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_JAINA_TIDES_OF_WAR, .IgnorePhases = true });
if (!jainaObject)
@@ -137,7 +138,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -147,7 +148,7 @@ public:
_events.ScheduleEvent(EVENT_KILL_CREDIT, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_JAINA_CREDIT));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -422,10 +423,10 @@ private:
};
// 22025 - Conversation
-class conversation_quest_ancient_curses_accept : public ConversationScript
+class conversation_quest_ancient_curses_accept : public ConversationAI
{
public:
- conversation_quest_ancient_curses_accept() : ConversationScript("conversation_quest_ancient_curses_accept") { }
+ conversation_quest_ancient_curses_accept(Conversation* conversation) : ConversationAI(conversation) { }
enum AncientCursesConversationEvents
{
@@ -439,7 +440,7 @@ public:
CONVO_LINE_LYSANDER_START_PATH = 60113,
};
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* arkonarinObject = GetClosestCreatureWithOptions(creator, 20.0f, { .CreatureId = NPC_ARKONARIN_STARSHADE, .IgnorePhases = true });
Creature* lysanderObject = GetClosestCreatureWithOptions(creator, 20.0f, { .CreatureId = NPC_LYSANDER_STARSHADE, .IgnorePhases = true });
@@ -461,7 +462,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -472,7 +473,7 @@ public:
_events.ScheduleEvent(EVENT_LYSANDER_START_PATH, *lysanderPathStartTime);
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -563,8 +564,8 @@ void AddSC_stormwind_city()
RegisterCreatureAI(npc_lysande_starshade_ancient_curses);
// Conversation
- new conversation_start_council_tides_of_war();
- new conversation_quest_ancient_curses_accept();
+ RegisterConversationAI(conversation_start_council_tides_of_war);
+ RegisterConversationAI(conversation_quest_ancient_curses_accept);
// PlayerScript
new player_conv_after_movie_tides_of_war();
diff --git a/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp b/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp
index d8973eb29e7..21fb2e722fc 100644
--- a/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp
+++ b/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp
@@ -18,6 +18,7 @@
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "Creature.h"
#include "InstanceScript.h"
#include "Map.h"
@@ -351,12 +352,12 @@ class spell_waycrest_manor_organ_missiles : public SpellScript
// 267597 - Waycrest Manor - Waycrests Defeated (Alliance)
// 7351 - Conversation
// 7352 - Conversation
-class conversation_waycrest_manor_waycrests_defeated : public ConversationScript
+class conversation_waycrest_manor_waycrests_defeated : public ConversationAI
{
public:
- conversation_waycrest_manor_waycrests_defeated() : ConversationScript("conversation_waycrest_manor_waycrests_defeated") { }
+ conversation_waycrest_manor_waycrests_defeated(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
if (Milliseconds const* gorakTulMoveStartTimeAlliance = conversation->GetLineStartTime(DEFAULT_LOCALE, CONVERSATION_LINE_LUCILLE_WAYCREST))
_events.ScheduleEvent(EVENT_GORAK_TUL_TRANSFORM, *gorakTulMoveStartTimeAlliance);
@@ -364,7 +365,7 @@ public:
_events.ScheduleEvent(EVENT_GORAK_TUL_TRANSFORM, *gorakTulMoveStartTimeHorde + 3s);
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -442,5 +443,5 @@ void AddSC_waycrest_manor()
// Lord and Lady Waycrest outro
RegisterAreaTriggerAI(at_waycrest_manor_organ_missiles);
RegisterSpellScript(spell_waycrest_manor_organ_missiles);
- new conversation_waycrest_manor_waycrests_defeated();
+ RegisterConversationAI(conversation_waycrest_manor_waycrests_defeated);
}
diff --git a/src/server/scripts/KulTiras/zone_boralus.cpp b/src/server/scripts/KulTiras/zone_boralus.cpp
index 32dc6942110..854e8e0298f 100644
--- a/src/server/scripts/KulTiras/zone_boralus.cpp
+++ b/src/server/scripts/KulTiras/zone_boralus.cpp
@@ -19,6 +19,7 @@
#include "AreaTriggerAI.h"
#include "Containers.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "CreatureAIImpl.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
@@ -138,12 +139,12 @@ struct npc_taelia_get_your_bearings : public ScriptedAI
};
// 5360 - Conversation
-class conversation_boralus_hub_tour_00 : public ConversationScript
+class conversation_boralus_hub_tour_00 : public ConversationAI
{
public:
- conversation_boralus_hub_tour_00() : ConversationScript("conversation_boralus_hub_tour_00") { }
+ conversation_boralus_hub_tour_00(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() });
if (!kultiranGuard)
@@ -174,10 +175,10 @@ struct at_boralus_get_your_bearings : AreaTriggerAI
};
// 5362 - Conversation - Get your Bearings (Ferry)
-class conversation_boralus_hub_tour : public ConversationScript
+class conversation_boralus_hub_tour : public ConversationAI
{
public:
- conversation_boralus_hub_tour(char const* scriptName) : ConversationScript(scriptName) { }
+ conversation_boralus_hub_tour(Conversation* conversation) : ConversationAI(conversation) { }
enum ConversationFerryData
{
@@ -187,7 +188,7 @@ public:
virtual Position const& GetGuardMovePosition() = 0;
virtual uint32 GetKillCreditId() = 0;
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() });
if (!kultiranGuard)
@@ -200,14 +201,14 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
_events.ScheduleEvent(EVENT_TAELIA_CREDIT, conversation->GetLastLineEndTime(privateOwnerLocale));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -241,7 +242,7 @@ Position const TaeliaFerryPos = { 1039.5955f, -598.00653f, 1.458778f };
class conversation_boralus_hub_tour_ferry : public conversation_boralus_hub_tour
{
public:
- conversation_boralus_hub_tour_ferry() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_ferry") { }
+ conversation_boralus_hub_tour_ferry(Conversation* conversation) : conversation_boralus_hub_tour(conversation) { }
Position const& GetGuardMovePosition()
{
@@ -260,7 +261,7 @@ Position const TaeliaBankPos = { 1118.7385f, -622.4115f, 17.76035f };
class conversation_boralus_hub_tour_counting_house : public conversation_boralus_hub_tour
{
public:
- conversation_boralus_hub_tour_counting_house() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_counting_house") { }
+ conversation_boralus_hub_tour_counting_house(Conversation* conversation) : conversation_boralus_hub_tour(conversation) { }
Position const& GetGuardMovePosition()
{
@@ -279,7 +280,7 @@ Position const TaeliaInnPos = { 1177.39f, -587.682f, 31.557224f };
class conversation_boralus_hub_tour_harbor_inn : public conversation_boralus_hub_tour
{
public:
- conversation_boralus_hub_tour_harbor_inn() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_harbor_inn") { }
+ conversation_boralus_hub_tour_harbor_inn(Conversation* conversation) : conversation_boralus_hub_tour(conversation) { }
Position const& GetGuardMovePosition()
{
@@ -298,7 +299,7 @@ Position const TaeliaFlightMasterPos = { 1149.82f, -471.071f, 30.503826f };
class conversation_boralus_hub_tour_flight_master : public conversation_boralus_hub_tour
{
public:
- conversation_boralus_hub_tour_flight_master() : conversation_boralus_hub_tour("conversation_boralus_hub_tour_flight_master") { }
+ conversation_boralus_hub_tour_flight_master(Conversation* conversation) : conversation_boralus_hub_tour(conversation) {}
Position const& GetGuardMovePosition()
{
@@ -312,12 +313,12 @@ public:
};
// 9556 - Conversation The Old Knight (accept Quest)
-class conversation_boralus_accept_old_knight : public ConversationScript
+class conversation_boralus_accept_old_knight : public ConversationAI
{
public:
- conversation_boralus_accept_old_knight() : ConversationScript("conversation_boralus_accept_old_knight") { }
+ conversation_boralus_accept_old_knight(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() });
if (!kultiranGuard)
@@ -344,12 +345,12 @@ struct at_boralus_old_knight_enter_harbormasters_office : AreaTriggerAI
};
// 7605 - Conversation The Old Knight (Enter the Harbormasters Office)
-class conversation_boralus_enter_harbormaster_office : public ConversationScript
+class conversation_boralus_enter_harbormaster_office : public ConversationAI
{
public:
- conversation_boralus_enter_harbormaster_office() : ConversationScript("conversation_boralus_enter_harbormaster_office") { }
+ conversation_boralus_enter_harbormaster_office(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* kultiranGuard = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_KULTIRAN_GUARD, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() });
if (!kultiranGuard)
@@ -428,10 +429,10 @@ Position const GreyguardOneOfficePos = { 1044.979f, -468.523f, 8.386f, 6.03047f
Position const GreyguardTwoOfficePos = { 1042.359f, -467.738f, 8.386f, 6.04665f };
// 8062 - Conversation
-class conversation_boralus_cyrus_meets_genn : public ConversationScript
+class conversation_boralus_cyrus_meets_genn : public ConversationAI
{
public:
- conversation_boralus_cyrus_meets_genn() : ConversationScript("conversation_boralus_cyrus_meets_genn") { }
+ conversation_boralus_cyrus_meets_genn(Conversation* conversation) : ConversationAI(conversation) { }
enum OldKnightsConversationData
{
@@ -440,7 +441,7 @@ public:
EVENT_OLD_KNIGHTS_CLONE_DESPAWN = 1
};
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* cyrusObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_CYRUS_CRESTFALL, .IgnorePhases = true });
Creature* gennObject = GetClosestCreatureWithOptions(creator, 30.0f, { .CreatureId = NPC_GENN_GREYMANE, .IgnorePhases = true });
@@ -470,14 +471,14 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
_events.ScheduleEvent(EVENT_OLD_KNIGHTS_CLONE_DESPAWN, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_AND_GENN_DESPAWN));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -532,10 +533,10 @@ Position const CyrusMoveToOfficeFirePos = { 1075.257f, -487.25696f, 9.812291f };
Position const CyrusStaticOfficePos = { 1071.428f, -486.312f, 9.783f, 3.4995f };
// 7653 - Conversation
-class conversation_cyrus_crestfall_shaking_hands : public ConversationScript
+class conversation_cyrus_crestfall_shaking_hands : public ConversationAI
{
public:
- conversation_cyrus_crestfall_shaking_hands() : ConversationScript("conversation_cyrus_crestfall_shaking_hands") { }
+ conversation_cyrus_crestfall_shaking_hands(Conversation* conversation) : ConversationAI(conversation) { }
enum ShakingHandsConversationData
{
@@ -553,7 +554,7 @@ public:
POINT_CYRUS_MOVE_BACK_TO_GENN = 2
};
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
Creature* cyrusObject = GetClosestCreatureWithOptions(creator, 10.0f, { .CreatureId = NPC_CYRUS_CRESTFALL, .IgnorePhases = true });
if (!cyrusObject)
@@ -569,7 +570,7 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
@@ -579,7 +580,7 @@ public:
_events.ScheduleEvent(EVENT_CYRUS_DESPAWN_CLONE_OFFICE, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_CYRUS_DESPAWN_CLONE_OFFICE));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -778,15 +779,15 @@ void AddSC_zone_boralus()
RegisterCreatureAI(npc_7th_legion_magus_sanctum_of_the_sages);
// Conversation
- new conversation_boralus_hub_tour_00();
- new conversation_boralus_hub_tour_ferry();
- new conversation_boralus_hub_tour_counting_house();
- new conversation_boralus_hub_tour_harbor_inn();
- new conversation_boralus_hub_tour_flight_master();
- new conversation_boralus_accept_old_knight();
- new conversation_boralus_enter_harbormaster_office();
- new conversation_boralus_cyrus_meets_genn();
- new conversation_cyrus_crestfall_shaking_hands();
+ RegisterConversationAI(conversation_boralus_hub_tour_00);
+ RegisterConversationAI(conversation_boralus_hub_tour_ferry);
+ RegisterConversationAI(conversation_boralus_hub_tour_counting_house);
+ RegisterConversationAI(conversation_boralus_hub_tour_harbor_inn);
+ RegisterConversationAI(conversation_boralus_hub_tour_flight_master);
+ RegisterConversationAI(conversation_boralus_accept_old_knight);
+ RegisterConversationAI(conversation_boralus_enter_harbormaster_office);
+ RegisterConversationAI(conversation_boralus_cyrus_meets_genn);
+ RegisterConversationAI(conversation_cyrus_crestfall_shaking_hands);
// Scene
new scene_boralus_client_scene_cyrus_and_genn();
diff --git a/src/server/scripts/Shadowlands/SanctumOfDomination/boss_sylvanas_windrunner.cpp b/src/server/scripts/Shadowlands/SanctumOfDomination/boss_sylvanas_windrunner.cpp
index 4ed74a7b144..c54d4a7d8fa 100644
--- a/src/server/scripts/Shadowlands/SanctumOfDomination/boss_sylvanas_windrunner.cpp
+++ b/src/server/scripts/Shadowlands/SanctumOfDomination/boss_sylvanas_windrunner.cpp
@@ -18,6 +18,7 @@
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "CreatureAI.h"
#include "CreatureAIImpl.h"
#include "InstanceScript.h"
@@ -262,12 +263,12 @@ struct at_sylvanas_windrunner_introduction : AreaTriggerAI
};
// 17368 - Sylvanas Windrunner's Introduction (Conversation)
-class conversation_sylvanas_windrunner_introduction : public ConversationScript
+class conversation_sylvanas_windrunner_introduction : public ConversationAI
{
public:
- conversation_sylvanas_windrunner_introduction() : ConversationScript("conversation_sylvanas_windrunner_introduction") { }
+ conversation_sylvanas_windrunner_introduction(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
InstanceScript* instance = creator->GetInstanceScript();
if (!instance)
@@ -283,7 +284,7 @@ public:
_events.ScheduleEvent(EVENT_INTRODUCTION, 5s + 500ms);
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -485,5 +486,5 @@ void AddSC_boss_sylvanas_windrunner()
RegisterAreaTriggerAI(at_sylvanas_windrunner_z_check);
RegisterAreaTriggerAI(at_sylvanas_windrunner_introduction);
- new conversation_sylvanas_windrunner_introduction();
+ RegisterConversationAI(conversation_sylvanas_windrunner_introduction);
}
diff --git a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
index 62f6ca3f78b..aba4b171ef4 100644
--- a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
+++ b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
@@ -776,14 +776,14 @@ struct boss_anduin_wrynn : public BossAI
if (!jaina)
return;
- Conversation* convo = Conversation::CreateConversation(CONVERSATION_INTRO, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false);
- if (!convo)
+ Conversation* conversation = Conversation::CreateConversation(CONVERSATION_INTRO, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false);
+ if (!conversation)
return;
- convo->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 1, uther->GetGUID());
- convo->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 2, sylvanas->GetGUID());
- convo->AddActor(NPC_LADY_JAINA_PROUDMOORE_ANDUIN, 3, jaina->GetGUID());
- convo->Start();
+ conversation->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 1, uther->GetGUID());
+ conversation->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 2, sylvanas->GetGUID());
+ conversation->AddActor(NPC_LADY_JAINA_PROUDMOORE_ANDUIN, 3, jaina->GetGUID());
+ conversation->Start();
});
scheduler.Schedule(35s, [this](TaskContext /*task*/)
@@ -827,15 +827,15 @@ struct boss_anduin_wrynn : public BossAI
firim->GetMotionMaster()->MovePath(PATH_OUTRODUCTION_FIRIM, false);
- Conversation* convo = Conversation::CreateConversation(CONVERSATION_ANDUIN_OUTRODUCTION, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false);
- if (!convo)
+ Conversation* conversation = Conversation::CreateConversation(CONVERSATION_ANDUIN_OUTRODUCTION, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false);
+ if (!conversation)
break;
- convo->AddActor(NPC_LADY_JAINA_PROUDMOORE_ANDUIN, 1, jaina->GetGUID());
- convo->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 2, sylvanas->GetGUID());
- convo->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 3, uther->GetGUID());
- convo->AddActor(NPC_FIRIM_ANDUIN, 4, firim->GetGUID());
- convo->Start();
+ conversation->AddActor(NPC_LADY_JAINA_PROUDMOORE_ANDUIN, 1, jaina->GetGUID());
+ conversation->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 2, sylvanas->GetGUID());
+ conversation->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 3, uther->GetGUID());
+ conversation->AddActor(NPC_FIRIM_ANDUIN, 4, firim->GetGUID());
+ conversation->Start();
break;
}
case ACTION_ARTHAS_INTERMISSION_UTHER:
@@ -843,10 +843,10 @@ struct boss_anduin_wrynn : public BossAI
instance->DoUpdateWorldState(WORLD_STATE_ANDUIN_INTERMISSION, 1);
if (Creature* uther = instance->GetCreature(DATA_UTHER_THE_LIGHTBRINGER_ANDUIN))
{
- if (Conversation* convo = Conversation::CreateConversation(CONVERSATION_ARTHAS_UTHER, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false))
+ if (Conversation* conversation = Conversation::CreateConversation(CONVERSATION_ARTHAS_UTHER, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false))
{
- convo->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 1, uther->GetGUID());
- convo->Start();
+ conversation->AddActor(NPC_UTHER_THE_LIGHTBRINGER_ANDUIN, 1, uther->GetGUID());
+ conversation->Start();
}
}
break;
@@ -856,10 +856,10 @@ struct boss_anduin_wrynn : public BossAI
instance->DoUpdateWorldState(WORLD_STATE_ANDUIN_INTERMISSION, 2);
if (Creature* sylvanas = instance->GetCreature(DATA_SYLVANAS_WINDRUNNER_ANDUIN))
{
- if (Conversation* convo = Conversation::CreateConversation(CONVERSATION_ARTHAS_SYLVANAS, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false))
+ if (Conversation* conversation = Conversation::CreateConversation(CONVERSATION_ARTHAS_SYLVANAS, me, me->GetPosition(), ObjectGuid::Empty, nullptr, false))
{
- convo->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 1, sylvanas->GetGUID());
- convo->Start();
+ conversation->AddActor(NPC_SYLVANAS_WINDRUNNER_ANDUIN, 1, sylvanas->GetGUID());
+ conversation->Start();
}
}
break;
diff --git a/src/server/scripts/World/conversation_scripts.cpp b/src/server/scripts/World/conversation_scripts.cpp
index 507da020e79..f1a442c40b7 100644
--- a/src/server/scripts/World/conversation_scripts.cpp
+++ b/src/server/scripts/World/conversation_scripts.cpp
@@ -17,9 +17,10 @@
#include "ScriptMgr.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "Player.h"
-class conversation_allied_race_dk_defender_of_azeroth : public ConversationScript
+class conversation_allied_race_dk_defender_of_azeroth : public ConversationAI
{
public:
enum DefenderOfAzerothIds : uint32
@@ -30,15 +31,15 @@ public:
CONVERSATION_LINE_PLAYER = 32926
};
- conversation_allied_race_dk_defender_of_azeroth() : ConversationScript("conversation_allied_race_dk_defender_of_azeroth") { }
+ conversation_allied_race_dk_defender_of_azeroth(Conversation* conversation) : ConversationAI(conversation) { }
- void OnConversationCreate(Conversation* /*conversation*/, Unit* creator) override
+ void OnCreate(Unit* creator) override
{
if (Player* player = creator->ToPlayer())
player->KilledMonsterCredit(NPC_TALK_TO_YOUR_COMMANDER_CREDIT);
}
- void OnConversationLineStarted(Conversation* /*conversation*/, uint32 lineId, Player* sender) override
+ void OnLineStarted(uint32 lineId, Player* sender) override
{
if (lineId != CONVERSATION_LINE_PLAYER)
return;
@@ -49,5 +50,5 @@ public:
void AddSC_conversation_scripts()
{
- new conversation_allied_race_dk_defender_of_azeroth();
+ RegisterConversationAI(conversation_allied_race_dk_defender_of_azeroth);
}
diff --git a/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp b/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp
index 00d545b3d3f..5ffa6554ebc 100644
--- a/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp
+++ b/src/server/scripts/Zandalar/KingsRest/kings_rest.cpp
@@ -18,6 +18,7 @@
#include "AreaTrigger.h"
#include "AreaTriggerAI.h"
#include "Conversation.h"
+#include "ConversationAI.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "InstanceScript.h"
@@ -85,10 +86,10 @@ struct at_kings_rest_trigger_intro_event_with_zul : AreaTriggerAI
};
// 7690 - Shadow of Zul - KingsRest Intro
-class conversation_kings_rest_intro : public ConversationScript
+class conversation_kings_rest_intro : public ConversationAI
{
public:
- conversation_kings_rest_intro() : ConversationScript("conversation_kings_rest_intro") { }
+ conversation_kings_rest_intro(Conversation* conversation) : ConversationAI(conversation) { }
enum KingsRestIntroConversationData
{
@@ -103,7 +104,7 @@ public:
EVENT_ZUL_INTRO_DESPAWN,
};
- void OnConversationCreate(Conversation* conversation, Unit* /*creator*/) override
+ void OnCreate(Unit* /*creator*/) override
{
TempSummon* shadowOfZul = conversation->SummonCreature(NPC_SHADOW_OF_ZUL, ShadowOfZulIntroSpawnPosition, TEMPSUMMON_MANUAL_DESPAWN);
if (!shadowOfZul)
@@ -113,12 +114,12 @@ public:
conversation->Start();
}
- void OnConversationStart(Conversation* conversation) override
+ void OnStart() override
{
_events.ScheduleEvent(EVENT_ZUL_OPEN_INTRO_DOOR, conversation->GetLineEndTime(DEFAULT_LOCALE, CONVO_LINE_INTRO_DOOR));
}
- void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ void OnUpdate(uint32 diff) override
{
_events.Update(diff);
@@ -595,7 +596,7 @@ void AddSC_kings_rest()
RegisterAreaTriggerAI(at_kings_rest_gust_slash);
// Conversation
- new conversation_kings_rest_intro();
+ RegisterConversationAI(conversation_kings_rest_intro);
// Spells
RegisterSpellScript(spell_kings_rest_suppression_slam);