//
// 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.Items;
using MUnique.OpenMU.PlugIns;
///
/// This update fixes the discriminators of some ancient items.
///
[PlugIn]
[Display(Name = PlugInName, Description = PlugInDescription)]
[Guid("AB664421-1CA6-4FCE-A150-0007971017E1")]
public class FixAncientDiscriminatorsUpdatePlugIn : UpdatePlugInBase
{
///
/// The plug in name.
///
internal const string PlugInName = "Fix Warrior Morning Star";
///
/// The plug in description.
///
internal const string PlugInDescription = "This update fixes the discriminators of some ancient items.";
///
public override string Name => PlugInName;
///
public override string Description => PlugInDescription;
///
public override UpdateVersion Version => UpdateVersion.FixAncientDiscriminators;
///
public override string DataInitializationKey => VersionSeasonSix.DataInitialization.Id;
///
public override bool IsMandatory => true;
///
public override DateTime CreatedAt => new(2024, 08, 25, 17, 0, 0, DateTimeKind.Utc);
///
protected override async ValueTask ApplyAsync(IContext context, GameConfiguration gameConfiguration)
{
ChangeDiscriminator(gameConfiguration, "Anonymous", ItemGroups.Shields, 0, 1);
ChangeDiscriminator(gameConfiguration, "Mist", ItemGroups.Gloves, 0, 1);
ChangeDiscriminator(gameConfiguration, "Mist", ItemGroups.Helm, 0, 1);
ChangeDiscriminator(gameConfiguration, "Berserker", ItemGroups.Gloves, 6, 1);
ChangeDiscriminator(gameConfiguration, "Berserker", ItemGroups.Boots, 6, 1);
ChangeDiscriminator(gameConfiguration, "Cloud", ItemGroups.Helm, 8, 1);
ChangeDiscriminator(gameConfiguration, "Rave", ItemGroups.Helm, 9, 1);
ChangeDiscriminator(gameConfiguration, "Rave", ItemGroups.Pants, 9, 1);
ChangeDiscriminator(gameConfiguration, "Barnake", ItemGroups.Boots, 2, 1);
ChangeDiscriminator(gameConfiguration, "Sylion", ItemGroups.Gloves, 4, 1);
ChangeDiscriminator(gameConfiguration, "Sylion", ItemGroups.Helm, 4, 1);
ChangeDiscriminator(gameConfiguration, "Drake", ItemGroups.Armor, 10, 1);
ChangeDiscriminator(gameConfiguration, "Fase", ItemGroups.Boots, 11, 1);
}
private static void ChangeDiscriminator(GameConfiguration gameConfiguration, string setName, ItemGroups itemGroup, byte itemNumber, byte discriminator)
{
var itemSetGroup = gameConfiguration.ItemSetGroups.First(set => set.Name == setName);
var itemOfItemSet = itemSetGroup.Items.FirstOrDefault(item => item.ItemDefinition?.Group == (byte)itemGroup && item.ItemDefinition?.Number == itemNumber);
if (itemOfItemSet != null)
{
itemOfItemSet.AncientSetDiscriminator = discriminator;
}
}
}