Added updateplugin

(cherry picked from commit daf72d784757ca60a05fc1c897f182a5b82f7665)
This commit is contained in:
ze-dom
2026-07-16 16:34:25 +01:00
committed by Acentech Dev
parent 7166513681
commit b884474fa6
2 changed files with 148 additions and 1 deletions

View File

@@ -0,0 +1,142 @@
// <copyright file="FinishElfMasterTreePlugIn.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.AttributeSystem;
using MUnique.OpenMU.DataModel.Attributes;
using MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.GameLogic.Attributes;
using MUnique.OpenMU.Persistence.Initialization.Items;
using MUnique.OpenMU.Persistence.Initialization.Skills;
using MUnique.OpenMU.PlugIns;
/// <summary>
/// This update completes the elf master tree and fixes some of its skill values.
/// </summary>
[PlugIn]
[Display(Name = PlugInName, Description = PlugInDescription)]
[Guid("D1E2F3A4-B5C6-7D8E-9F0A-1B2C3D4E5F6A")]
public class FinishElfMasterTreePlugIn : UpdatePlugInBase
{
/// <summary>
/// The plug in name.
/// </summary>
internal const string PlugInName = "Finish Elf Master Tree PlugIn";
/// <summary>
/// The plug in description.
/// </summary>
internal const string PlugInDescription = "This update completes the elf master tree and fixes some of its skill values.";
/// <inheritdoc />
public override UpdateVersion Version => UpdateVersion.FinishElfMasterTree;
/// <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, 7, 16, 16, 0, 0, DateTimeKind.Utc);
/// <inheritdoc />
protected override async ValueTask ApplyAsync(IContext context, GameConfiguration gameConfiguration)
{
// Create new Stats
var extraProjectiles = context.CreateNew<AttributeDefinition>(Stats.ExtraProjectiles.Id, Stats.ExtraProjectiles.Designation, Stats.ExtraProjectiles.Description);
gameConfiguration.Attributes.Add(extraProjectiles);
var greaterDefenseBonus = context.CreateNew<AttributeDefinition>(Stats.GreaterDefenseBonus.Id, Stats.GreaterDefenseBonus.Designation, Stats.GreaterDefenseBonus.Description);
gameConfiguration.Attributes.Add(greaterDefenseBonus);
var greaterDamageBonus = Stats.GreaterDamageBonus.GetPersistent(gameConfiguration);
// Update Greater Damage effect
var greaterDamageEffect = gameConfiguration.MagicEffects.First(e => e.Number == (short)MagicEffectNumber.GreaterDamage);
var greaterDamagePowerUp2 = context.CreateNew<PowerUpDefinition>();
greaterDamageEffect.PowerUpDefinitions.Add(greaterDamagePowerUp2);
greaterDamagePowerUp2.TargetAttribute = greaterDamageBonus;
greaterDamagePowerUp2.Boost = context.CreateNew<PowerUpDefinitionValue>();
greaterDamagePowerUp2.Boost.ConstantValue.Value = 1f;
greaterDamagePowerUp2.Boost.ConstantValue.AggregateType = AggregateType.Multiplicate;
// Update Greater Defense effect
var greaterDefenseEffect = gameConfiguration.MagicEffects.First(e => e.Number == (short)MagicEffectNumber.GreaterDefense);
if (greaterDefenseEffect.PowerUpDefinitions.FirstOrDefault() is PowerUpDefinition defensePowerUp)
{
defensePowerUp.TargetAttribute = greaterDefenseBonus;
defensePowerUp.Boost?.ConstantValue.AggregateType = AggregateType.AddRaw;
}
var greaterDefensePowerUp2 = context.CreateNew<PowerUpDefinition>();
greaterDefenseEffect.PowerUpDefinitions.Add(greaterDefensePowerUp2);
greaterDefensePowerUp2.TargetAttribute = greaterDefenseBonus;
greaterDefensePowerUp2.Boost = context.CreateNew<PowerUpDefinitionValue>();
greaterDefensePowerUp2.Boost.ConstantValue.Value = 1f;
greaterDefensePowerUp2.Boost.ConstantValue.AggregateType = AggregateType.Multiplicate;
// Update 4-arrow (cross)bows
var affectedBows = new short[] { 18, 19, 22, 23, 24 };
var bows = gameConfiguration.Items.Where(i => i.Group == (byte)ItemGroups.Bows && affectedBows.Contains(i.Number));
foreach (var bow in bows)
{
bow.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(context, gameConfiguration, extraProjectiles, 1, AggregateType.AddRaw));
}
// Update master skills
if (gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.DefenseIncreaseStr)?.MasterDefinition is { } defenseIncreaseStr)
{
defenseIncreaseStr.TargetAttribute = greaterDefenseBonus;
defenseIncreaseStr.Aggregation = AggregateType.Multiplicate;
}
if (gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.TripleShotStrengthener)?.MasterDefinition is { } tripleShotStrengthener)
{
tripleShotStrengthener.TargetAttribute = extraProjectiles;
tripleShotStrengthener.Aggregation = AggregateType.AddRaw;
}
if (gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.AttackIncreaseStr)?.MasterDefinition is { } attackIncreaseStr)
{
attackIncreaseStr.TargetAttribute = greaterDamageBonus;
attackIncreaseStr.Aggregation = AggregateType.Multiplicate;
}
if (gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.AttackIncreaseMastery)?.MasterDefinition is { } attackIncreaseMastery)
{
attackIncreaseMastery.ReplacedSkill = gameConfiguration.Skills.First(s => s.Number == (short)SkillNumber.AttackIncreaseStr);
attackIncreaseMastery.TargetAttribute = greaterDamageBonus;
attackIncreaseMastery.Aggregation = AggregateType.Multiplicate;
attackIncreaseMastery.ExtendsDuration = true;
}
if (gameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.DefenseIncreaseMastery)?.MasterDefinition is { } defenseIncreaseMastery)
{
defenseIncreaseMastery.ReplacedSkill = gameConfiguration.Skills.First(s => s.Number == (short)SkillNumber.DefenseIncreaseStr);
defenseIncreaseMastery.TargetAttribute = greaterDefenseBonus;
defenseIncreaseMastery.Aggregation = AggregateType.Multiplicate;
defenseIncreaseMastery.ExtendsDuration = true;
}
}
private ItemBasePowerUpDefinition CreateItemBasePowerUpDefinition(IContext context, GameConfiguration gameConfiguration, AttributeDefinition attributeDefinition, float value, AggregateType aggregateType)
{
var powerUpDefinition = context.CreateNew<ItemBasePowerUpDefinition>();
powerUpDefinition.TargetAttribute = attributeDefinition.GetPersistent(gameConfiguration);
powerUpDefinition.BaseValue = value;
powerUpDefinition.AggregateType = aggregateType;
return powerUpDefinition;
}
}

View File

@@ -519,4 +519,9 @@ public enum UpdateVersion
/// The version of the <see cref="FinishDarkWizardMasterTreePlugIn"/>.
/// </summary>
FinishDarkWizardMasterTree = 102,
/// <summary>
/// The version of the <see cref="FinishElfMasterTreePlugIn"/>.
/// </summary>
FinishElfMasterTree = 103,
}