// // 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.Persistence.Initialization.Skills; using MUnique.OpenMU.PlugIns; /// /// This update fixes area skills' range, effect radius, and delay issues. /// Hellfire, Decay, and Ice Storm had missing area skill settings causing incorrect hit radius. /// Ice Storm had an incorrect 200ms delay between hits. /// [PlugIn] [Display(Name = PlugInName, Description = PlugInDescription)] [Guid("B9938E4D-8F63-48DF-AE45-6739D1E2A8C7")] public class FixAreaSkillsUpdatePlugIn : UpdatePlugInBase { /// /// The plug in name. /// internal const string PlugInName = "Fix Area Skills"; /// /// The plug in description. /// internal const string PlugInDescription = "Fixes Hellfire, Decay, and Ice Storm skills' range, effect radius, and delay."; /// public override UpdateVersion Version => UpdateVersion.FixAreaSkills; /// public override string DataInitializationKey => VersionSeasonSix.DataInitialization.Id; /// public override string Name => PlugInName; /// public override string Description => PlugInDescription; /// public override bool IsMandatory => false; /// public override DateTime CreatedAt => new(2026, 04, 09, 12, 0, 0, DateTimeKind.Utc); /// protected override async ValueTask ApplyAsync(IContext context, GameConfiguration gameConfiguration) { // Fix Hellfire Strengthener var hellfireStrengthener = gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.HellfireStrengthener); if (hellfireStrengthener != null) { hellfireStrengthener.Range = 4; hellfireStrengthener.AttackDamage = 3; if (hellfireStrengthener.AreaSkillSettings == null) { var areaSkillSettings = context.CreateNew(); hellfireStrengthener.AreaSkillSettings = areaSkillSettings; areaSkillSettings.EffectRange = 2; } } // Fix Decay Strengthener var decayStrengthener = gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.DecayStrengthener); if (decayStrengthener != null) { decayStrengthener.Range = 6; if (decayStrengthener.AreaSkillSettings == null) { var areaSkillSettings = context.CreateNew(); decayStrengthener.AreaSkillSettings = areaSkillSettings; areaSkillSettings.EffectRange = 2; } } // Fix base Decay skill var decay = gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Decay); if (decay != null) { if (decay.AreaSkillSettings == null) { var areaSkillSettings = context.CreateNew(); decay.AreaSkillSettings = areaSkillSettings; areaSkillSettings.EffectRange = 2; } } // Fix Ice Storm - remove incorrect 200ms delay var iceStorm = gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.IceStorm); if (iceStorm?.AreaSkillSettings != null) { iceStorm.AreaSkillSettings.DelayBetweenHits = TimeSpan.Zero; } } }