Added updateplugin
(cherry picked from commit daf72d784757ca60a05fc1c897f182a5b82f7665)
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -519,4 +519,9 @@ public enum UpdateVersion
|
|||||||
/// The version of the <see cref="FinishDarkWizardMasterTreePlugIn"/>.
|
/// The version of the <see cref="FinishDarkWizardMasterTreePlugIn"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
FinishDarkWizardMasterTree = 102,
|
FinishDarkWizardMasterTree = 102,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The version of the <see cref="FinishElfMasterTreePlugIn"/>.
|
||||||
|
/// </summary>
|
||||||
|
FinishElfMasterTree = 103,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user