diff --git a/src/Persistence/Initialization/Updates/AddHeykelSavasiEventUpdateSeason6.cs b/src/Persistence/Initialization/Updates/AddHeykelSavasiEventUpdateSeason6.cs index 9309f38..371fe8a 100644 --- a/src/Persistence/Initialization/Updates/AddHeykelSavasiEventUpdateSeason6.cs +++ b/src/Persistence/Initialization/Updates/AddHeykelSavasiEventUpdateSeason6.cs @@ -99,7 +99,7 @@ public class AddHeykelSavasiEventUpdateSeason6 : UpdatePlugInBase var npc = context.CreateNew(); gameConfiguration.Monsters.Add(npc); npc.Number = 560; - npc.Designation = "TvT Event Gorevlisi"; + npc.Designation = "TvT Guard"; npc.NpcWindow = NpcWindow.Undefined; npc.ObjectKind = NpcObjectKind.PassiveNpc; npc.SetGuid(npc.Number); diff --git a/src/Persistence/Initialization/Updates/RenameTvTEventNpcUpdatePlugIn.cs b/src/Persistence/Initialization/Updates/RenameTvTEventNpcUpdatePlugIn.cs new file mode 100644 index 0000000..0e8c428 --- /dev/null +++ b/src/Persistence/Initialization/Updates/RenameTvTEventNpcUpdatePlugIn.cs @@ -0,0 +1,62 @@ +// +// Licensed under the MIT License. See LICENSE file in the project root for full license information. +// + +namespace MUnique.OpenMU.Persistence.Initialization.Updates; + +using System.Runtime.InteropServices; +using MUnique.OpenMU.DataModel.Configuration; +using MUnique.OpenMU.PlugIns; + +/// +/// Renames the TvT event NPC (560) which stands in Lorencia. The name is what players see over its +/// head and what the admin panel lists, so it has to change on existing databases too - the seed +/// only covers new ones. +/// +[PlugIn] +[Display(Name = PlugInName, Description = PlugInDescription)] +[Guid("7B1C5E42-9A08-4D6E-9F31-2C4A5D6E7F80")] +public class RenameTvTEventNpcUpdatePlugIn : UpdatePlugInBase +{ + /// + /// The plug-in name. + /// + internal const string PlugInName = "Rename the TvT event NPC"; + + /// + /// The plug-in description. + /// + internal const string PlugInDescription = "This update renames the TvT event NPC (560) in Lorencia to 'TvT Guard'."; + + /// The monster number of the TvT event NPC in Lorencia. + private const short TvTEventNpcNumber = 560; + + /// + public override string Name => PlugInName; + + /// + public override string Description => PlugInDescription; + + /// + public override UpdateVersion Version => UpdateVersion.RenameTvTEventNpc; + + /// + public override string DataInitializationKey => VersionSeasonSix.DataInitialization.Id; + + /// + public override bool IsMandatory => false; + + /// + public override DateTime CreatedAt => new(2026, 08, 09, 0, 0, 0, DateTimeKind.Utc); + + /// + protected override ValueTask ApplyAsync(IContext context, GameConfiguration gameConfiguration) + { + if (gameConfiguration.Monsters.FirstOrDefault(m => m.Number == TvTEventNpcNumber) is { } npc) + { + npc.Designation = "TvT Guard"; + } + + return ValueTask.CompletedTask; + } +} diff --git a/src/Persistence/Initialization/Updates/UpdateVersion.cs b/src/Persistence/Initialization/Updates/UpdateVersion.cs index 83d2c5c..c2172fb 100644 --- a/src/Persistence/Initialization/Updates/UpdateVersion.cs +++ b/src/Persistence/Initialization/Updates/UpdateVersion.cs @@ -539,4 +539,9 @@ public enum UpdateVersion /// bookkeeping is keyed on this value, so a collision would skip or re-run updates on live databases. /// AddCastleSiegeData = 105, + + /// + /// The version of the . + /// + RenameTvTEventNpc = 106, } diff --git a/src/Persistence/Initialization/VersionSeasonSix/NpcInitialization.cs b/src/Persistence/Initialization/VersionSeasonSix/NpcInitialization.cs index 7ec1a5d..2d855f4 100644 --- a/src/Persistence/Initialization/VersionSeasonSix/NpcInitialization.cs +++ b/src/Persistence/Initialization/VersionSeasonSix/NpcInitialization.cs @@ -816,7 +816,7 @@ internal partial class NpcInitialization : Version095d.NpcInitialization { var def = this.Context.CreateNew(); def.Number = 560; - def.Designation = "TvT Event Gorevlisi"; + def.Designation = "TvT Guard"; def.NpcWindow = NpcWindow.Undefined; // routed via IPlayerTalkToNpcPlugIn in a later task def.ObjectKind = NpcObjectKind.PassiveNpc; this.GameConfiguration.Monsters.Add(def);