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,
}

View File

@@ -102,6 +102,18 @@ public class Wings : WingsInitializerBase
this.CreateWing(40, 2, 3, "Cape of Emperor", 150, 45, 220, 400, 0, 0, 0, 0, 3, 0, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 39, 24, this._damageIncreaseByLevelTable, thirdWingOptions);
this.CreateWing(43, 4, 3, "Wing of Dimension", 150, 45, 220, 400, 0, 0, 0, 0, 0, 3, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.WizDamage), (0b10, OptionType.CurseDamage)), 39, 39, this._damageIncreaseByLevelTable, thirdWingOptions);
this.CreateWing(50, 2, 3, "Cape of Overrule", 150, 45, 220, 400, 0, 0, 0, 0, 0, 0, 3, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 39, 39, this._damageIncreaseByLevelTable, thirdWingOptions);
this.CreatePoisonWings();
}
/// <summary>
/// ADAMU-CUSTOM: two imported wings (basic: base defense + class restriction, no wing options).
/// Poison Wing (12/240, Dark Knight), Poison Cape (12/241, Dark Lord + Rage Fighter).
/// </summary>
public void CreatePoisonWings()
{
this.CreateWing(240, 5, 3, "Poison Wing", 100, 30, 200, 180, 0, 1, 0, 0, 0, 0, 0);
this.CreateWing(241, 5, 3, "Poison Cape", 100, 30, 200, 180, 0, 0, 0, 0, 1, 0, 1);
}
private void CreateFeather()