Core/AI: Implemented conversation ai

Port From (https://github.com/TrinityCore/TrinityCore/commit/309ba22a15e5e0b4321b99f7157ccb18e0adc8dd)
This commit is contained in:
Hondacrx
2025-05-19 17:23:36 -04:00
parent 4f63e81373
commit e44861a629
10 changed files with 160 additions and 126 deletions
+18 -18
View File
@@ -328,7 +328,7 @@ namespace Scripts.BrokenIsles.ZoneMardum
}
[Script] // 922 - The Invasion Begins
class conversation_the_invasion_begins : ConversationScript
class conversation_the_invasion_begins : ConversationAI
{
const int ConvoLineTriggerFacing = 2529;
const int ConvoLineStartPath = 2288;
@@ -345,9 +345,9 @@ namespace Scripts.BrokenIsles.ZoneMardum
ObjectGuid _cyanaGUID;
ObjectGuid _sevisGUID;
public conversation_the_invasion_begins() : base("conversation_the_invasion_begins") { }
public conversation_the_invasion_begins(Conversation conversation) : base(conversation) { }
public override void OnConversationCreate(Conversation conversation, Unit creator)
public override void OnCreate(Unit creator)
{
Creature kaynObject = creator.FindNearestCreatureWithOptions(10.0f, new FindCreatureOptions() { CreatureId = TheInvasionBeginsConst.NpcKaynSunfuryInvasionBegins, IgnorePhases = true });
Creature jayceObject = creator.FindNearestCreatureWithOptions(10.0f, new FindCreatureOptions() { CreatureId = TheInvasionBeginsConst.NpcJayceDarkweaverInvasionBegins, IgnorePhases = true });
@@ -379,7 +379,7 @@ namespace Scripts.BrokenIsles.ZoneMardum
conversation.Start();
}
public override void OnConversationStart(Conversation conversation)
public override void OnStart()
{
Locale privateOwnerLocale = conversation.GetPrivateObjectOwnerLocale();
@@ -388,12 +388,12 @@ namespace Scripts.BrokenIsles.ZoneMardum
{
_scheduler.Schedule(illidariFacingLineStarted, _ =>
{
StartCloneChannel(conversation.GetActorUnit(ConvoActorIdxKayn).GetGUID(), conversation);
StartCloneChannel(conversation.GetActorUnit(ConvoActorIdxKorvas).GetGUID(), conversation);
StartCloneChannel(_jayceGUID, conversation);
StartCloneChannel(_allariGUID, conversation);
StartCloneChannel(_cyanaGUID, conversation);
StartCloneChannel(_sevisGUID, conversation);
StartCloneChannel(conversation.GetActorUnit(ConvoActorIdxKayn).GetGUID());
StartCloneChannel(conversation.GetActorUnit(ConvoActorIdxKorvas).GetGUID());
StartCloneChannel(_jayceGUID);
StartCloneChannel(_allariGUID);
StartCloneChannel(_cyanaGUID);
StartCloneChannel(_sevisGUID);
});
}
@@ -421,16 +421,16 @@ namespace Scripts.BrokenIsles.ZoneMardum
kaynClone.SetSheath(SheathState.Melee);
kaynClone.SetNpcFlag(NPCFlags.QuestGiver);
StartCloneMovement(conversation.GetActorUnit(ConvoActorIdxKorvas).GetGUID(), TheInvasionBeginsConst.PathKorvasinvasionBegins, TheInvasionBeginsConst.AnimDhRun, conversation);
StartCloneMovement(_jayceGUID, TheInvasionBeginsConst.PathJayceInvasionBegins, 0, conversation);
StartCloneMovement(_allariGUID, TheInvasionBeginsConst.PathAllariInvasionBegins, TheInvasionBeginsConst.AnimDhRunAllari, conversation);
StartCloneMovement(_cyanaGUID, TheInvasionBeginsConst.PathCyanaInvasionBegins, 0, conversation);
StartCloneMovement(_sevisGUID, TheInvasionBeginsConst.PathSevisinvasionBegins, TheInvasionBeginsConst.AnimDhRun, conversation);
StartCloneMovement(conversation.GetActorUnit(ConvoActorIdxKorvas).GetGUID(), TheInvasionBeginsConst.PathKorvasinvasionBegins, TheInvasionBeginsConst.AnimDhRun);
StartCloneMovement(_jayceGUID, TheInvasionBeginsConst.PathJayceInvasionBegins, 0);
StartCloneMovement(_allariGUID, TheInvasionBeginsConst.PathAllariInvasionBegins, TheInvasionBeginsConst.AnimDhRunAllari);
StartCloneMovement(_cyanaGUID, TheInvasionBeginsConst.PathCyanaInvasionBegins, 0);
StartCloneMovement(_sevisGUID, TheInvasionBeginsConst.PathSevisinvasionBegins, TheInvasionBeginsConst.AnimDhRun);
});
}
}
void StartCloneChannel(ObjectGuid guid, Conversation conversation)
void StartCloneChannel(ObjectGuid guid)
{
Unit privateObjectOwner = ObjAccessor.GetUnit(conversation, conversation.GetPrivateObjectOwner());
if (privateObjectOwner == null)
@@ -443,7 +443,7 @@ namespace Scripts.BrokenIsles.ZoneMardum
clone.CastSpell(privateObjectOwner, TheInvasionBeginsConst.SpellTrackTargetInChannel, false);
}
void StartCloneMovement(ObjectGuid cloneGUID, uint pathId, uint animKit, Conversation conversation)
void StartCloneMovement(ObjectGuid cloneGUID, uint pathId, uint animKit)
{
Creature clone = ObjectAccessor.GetCreature(conversation, cloneGUID);
if (clone == null)
@@ -455,7 +455,7 @@ namespace Scripts.BrokenIsles.ZoneMardum
clone.SetAIAnimKitId((ushort)animKit);
}
public override void OnConversationUpdate(Conversation conversation, uint diff)
public override void OnUpdate(uint diff)
{
_scheduler.Update(diff);
}
+5 -5
View File
@@ -1,28 +1,28 @@
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
using Game.AI;
using Game.Entities;
using Game.Scripting;
namespace Scripts.World.Conversations
{
class conversation_allied_race_dk_defender_of_azeroth : ConversationScript
class conversation_allied_race_dk_defender_of_azeroth : ConversationAI
{
const uint NpcTalkToYourCommanderCredit = 161709;
const uint NpcListenToYourCommanderCredit = 163027;
const uint ConversationLinePlayer = 32926;
public conversation_allied_race_dk_defender_of_azeroth() : base("conversation_allied_race_dk_defender_of_azeroth") { }
public conversation_allied_race_dk_defender_of_azeroth(Conversation conversation) : base(conversation) { }
public override void OnConversationCreate(Conversation conversation, Unit creator)
public override void OnCreate(Unit creator)
{
Player player = creator.ToPlayer();
if (player != null)
player.KilledMonsterCredit(NpcTalkToYourCommanderCredit);
}
public override void OnConversationLineStarted(Conversation conversation, uint lineId, Player sender)
public override void OnLineStarted(uint lineId, Player sender)
{
if (lineId != ConversationLinePlayer)
return;