feat(items): add Poison Wing (12/240) and Poison Cape (12/241)

Basic wings via the simple CreateWing overload (base defense, class
restriction, CanFly; no options). Poison Wing=Dark Knight, Poison
Cape=Dark Lord+Rage Fighter. Update-plugin v98 + fresh-seed via
Wings.Initialize().
This commit is contained in:
Acentech Dev
2026-07-19 16:54:33 +03:00
parent fc9ba0e594
commit affa4bd73b
3 changed files with 73 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
// <copyright file="AddPoisonWingsUpdateSeason6.cs" company="MUnique">
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
// </copyright>
namespace MUnique.OpenMU.Persistence.Initialization.Updates;
using System.Runtime.InteropServices;
using MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.Persistence.Initialization.VersionSeasonSix.Items;
using MUnique.OpenMU.PlugIns;
/// <summary>
/// Adds two imported wings at free item slots: Poison Wing (12/240, Dark Knight) and
/// Poison Cape (12/241, Dark Lord + Rage Fighter). Basic wings: base defense, class
/// restriction, CanFly; no wing options.
/// </summary>
[PlugIn]
[Display(Name = PlugInName, Description = PlugInDescription)]
[Guid("7E4A2C63-9B1D-4F8A-A5C6-1D3E8F2B4A07")]
public class AddPoisonWingsUpdateSeason6 : UpdatePlugInBase
{
internal const string PlugInName = "Add Poison Wing & Poison Cape (12/240, 12/241)";
internal const string PlugInDescription = "Adds Poison Wing (12/240, Dark Knight) and Poison Cape (12/241, Dark Lord + Rage Fighter) as basic wings.";
/// <inheritdoc />
public override UpdateVersion Version => UpdateVersion.AddPoisonWingsSeason6;
/// <inheritdoc />
public override string DataInitializationKey => VersionSeasonSix.DataInitialization.Id;
/// <inheritdoc />
public override string Name => PlugInName;
/// <inheritdoc />
public override string Description => PlugInDescription;
/// <inheritdoc />
public override bool IsMandatory => true;
/// <inheritdoc />
public override DateTime CreatedAt => new(2026, 07, 19, 17, 0, 0, DateTimeKind.Utc);
/// <inheritdoc />
#pragma warning disable CS1998
protected override async ValueTask ApplyAsync(IContext context, GameConfiguration gameConfiguration)
#pragma warning restore CS1998
{
// Idempotency guard: skip if Poison Wing (12/240) already exists.
if (gameConfiguration.Items.Any(i => i.Group == 12 && i.Number == 240))
{
return;
}
new Wings(context, gameConfiguration).CreatePoisonWings();
}
}

View File

@@ -494,4 +494,9 @@ public enum UpdateVersion
/// The version of the <see cref="AddImportedMapsUpdateSeason6"/> (Acheron, Debenter, Uruk, Ferea).
/// </summary>
AddImportedMapsSeason6 = 97,
/// <summary>
/// The version of the <see cref="AddPoisonWingsUpdateSeason6"/> (Poison Wing 12/240, Poison Cape 12/241).
/// </summary>
AddPoisonWingsSeason6 = 98,
}