Add Warrior Wings & Cape (12/242-247)
Some checks failed
.NET Core / build (push) Has been cancelled
Some checks failed
.NET Core / build (push) Has been cancelled
Six high-tier imported wings, one per class line: Wizard (242, Soul Master), Magic (243, Duel Master), Elf (244, High Elf), Summoner (245, Dimension Master), Warrior Cape (246, Lord Emperor + Fist Master) and Knight (247, Blade Master). Each: base defense + defense-per-level, 3rd Wing Options, damage increase and fast flight. Applied via update v99 (AddWarriorWingsUpdateSeason6), reusing the shared "3rd Wing Options" option set to avoid Guid collisions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
|||||||
|
// <copyright file="AddWarriorWingsUpdateSeason6.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 six imported high-tier "Warrior" wings at free item slots (12/242-247), one per class line:
|
||||||
|
/// Wizard (Soul Master), Magic (Duel Master), Elf (High Elf), Summoner (Dimension Master),
|
||||||
|
/// Warrior Cape (Lord Emperor + Fist Master) and Knight (Blade Master). Each carries base defense,
|
||||||
|
/// class restriction, 3rd Wing Options, damage increase and fast flight.
|
||||||
|
/// </summary>
|
||||||
|
[PlugIn]
|
||||||
|
[Display(Name = PlugInName, Description = PlugInDescription)]
|
||||||
|
[Guid("8F5B3D74-AC2E-4F9B-B6D7-2E4F9A3C5B18")]
|
||||||
|
public class AddWarriorWingsUpdateSeason6 : UpdatePlugInBase
|
||||||
|
{
|
||||||
|
internal const string PlugInName = "Add Warrior Wings & Cape (12/242-247)";
|
||||||
|
internal const string PlugInDescription = "Adds six high-tier Warrior wings (12/242-247): Wizard, Magic, Elf, Summoner, Warrior Cape (DL+RF) and Knight, each with defense, 3rd Wing Options, damage increase and fast flight.";
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override UpdateVersion Version => UpdateVersion.AddWarriorWingsSeason6;
|
||||||
|
|
||||||
|
/// <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, 20, 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 the first Warrior wing (12/242) already exists.
|
||||||
|
if (gameConfiguration.Items.Any(i => i.Group == 12 && i.Number == 242))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Wings(context, gameConfiguration).CreateWarriorWings();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -499,4 +499,9 @@ public enum UpdateVersion
|
|||||||
/// The version of the <see cref="AddPoisonWingsUpdateSeason6"/> (Poison Wing 12/240, Poison Cape 12/241).
|
/// The version of the <see cref="AddPoisonWingsUpdateSeason6"/> (Poison Wing 12/240, Poison Cape 12/241).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
AddPoisonWingsSeason6 = 98,
|
AddPoisonWingsSeason6 = 98,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The version of the <see cref="AddWarriorWingsUpdateSeason6"/> (Warrior Wings/Cape 12/242-247).
|
||||||
|
/// </summary>
|
||||||
|
AddWarriorWingsSeason6 = 99,
|
||||||
}
|
}
|
||||||
@@ -104,6 +104,7 @@ public class Wings : WingsInitializerBase
|
|||||||
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.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();
|
this.CreatePoisonWings();
|
||||||
|
this.CreateWarriorWings();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -128,6 +129,39 @@ public class Wings : WingsInitializerBase
|
|||||||
this.CreateWing(241, 5, 3, "Poison Cape", 150, 60, 220, 100, 0, 0, 0, 0, 1, 0, 1, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
this.CreateWing(241, 5, 3, "Poison Cape", 150, 60, 220, 100, 0, 0, 0, 0, 1, 0, 1, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ADAMU-CUSTOM: six imported high-tier "Warrior" wings (base defense + 3rd Wing Options + damage
|
||||||
|
/// increase, fast flight). One per class line:
|
||||||
|
/// 242 Wizard (Soul Master), 243 Magic (Duel Master), 244 Elf (High Elf), 245 Summoner (Dimension
|
||||||
|
/// Master), 246 Warrior Cape (Lord Emperor + Fist Master), 247 Knight (Blade Master).
|
||||||
|
/// </summary>
|
||||||
|
public void CreateWarriorWings()
|
||||||
|
{
|
||||||
|
// Reuse the EXISTING shared "3rd Wing Options" set and level-bonus tables (fixed Guids already in
|
||||||
|
// the database) by fetching them, to avoid Guid collisions when this runs as an update.
|
||||||
|
var wingOptions = this.GameConfiguration.ItemOptions.First(o => o.Name == "3rd Wing Options");
|
||||||
|
var damageTable = this.GameConfiguration.ItemLevelBonusTables.First(t => t.Name == "Damage Increase (1st and 3rd Wings)");
|
||||||
|
this._defenseBonusByLevelTable ??= this.GameConfiguration.ItemLevelBonusTables.First(t => t.Name == "Defense Bonus (1st and 2nd Wings)");
|
||||||
|
|
||||||
|
// Warrior Wings Wizard (12/242, Soul Master / Dark Wizard): magic damage option.
|
||||||
|
this.CreateWing(242, 5, 3, "Warrior Wings Wizard", 150, 65, 220, 100, 1, 0, 0, 0, 0, 0, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.WizDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
|
||||||
|
// Warrior Wings Magic (12/243, Duel Master / Magic Gladiator).
|
||||||
|
this.CreateWing(243, 5, 3, "Warrior Wings Magic", 150, 65, 220, 100, 0, 0, 0, 1, 0, 0, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
|
||||||
|
// Warrior Wings Elf (12/244, High Elf).
|
||||||
|
this.CreateWing(244, 5, 3, "Warrior Wings Elf", 150, 65, 220, 100, 0, 0, 1, 0, 0, 0, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
|
||||||
|
// Warrior Wings Summoner (12/245, Dimension Master / Summoner): magic + curse damage.
|
||||||
|
this.CreateWing(245, 5, 3, "Warrior Wings Summoner", 150, 65, 220, 100, 0, 0, 0, 0, 0, 1, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.WizDamage), (0b10, OptionType.CurseDamage)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
|
||||||
|
// Warrior Cape (12/246, Lord Emperor / Dark Lord + Fist Master / Rage Fighter): defense 60.
|
||||||
|
this.CreateWing(246, 5, 3, "Warrior Cape", 150, 60, 220, 100, 0, 0, 0, 0, 1, 0, 1, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
|
||||||
|
// Warrior Wings Knight (12/247, Blade Master / Dark Knight).
|
||||||
|
this.CreateWing(247, 5, 3, "Warrior Wings Knight", 150, 65, 220, 100, 0, 1, 0, 0, 0, 0, 0, this.BuildOptions((0b00, OptionType.HealthRecover), (0b11, OptionType.PhysDamage), (0b10, OptionType.Defense)), 42, 42, damageTable, wingOptions, movementSpeed: MovementSpeedConstants.FastWingMovementSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateFeather()
|
private void CreateFeather()
|
||||||
{
|
{
|
||||||
var feather = this.Context.CreateNew<ItemDefinition>();
|
var feather = this.Context.CreateNew<ItemDefinition>();
|
||||||
|
|||||||
Reference in New Issue
Block a user