Files
AdamuSw/src/Persistence/Initialization/Version075/ChaosMixes.cs
2026-07-14 19:00:35 +03:00

100 lines
4.5 KiB
C#

// <copyright file="ChaosMixes.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.Version075;
using MUnique.OpenMU.DataModel.Configuration;
using MUnique.OpenMU.DataModel.Configuration.ItemCrafting;
using MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.GameLogic.PlayerActions.Craftings;
using MUnique.OpenMU.Persistence.Initialization.Version075.Items;
/// <summary>
/// Initializer for chaos mixes.
/// </summary>
public class ChaosMixes : InitializerBase
{
/// <summary>
/// Initializes a new instance of the <see cref="ChaosMixes"/> class.
/// </summary>
/// <param name="context">The context.</param>
/// <param name="gameConfiguration">The game configuration.</param>
public ChaosMixes(IContext context, GameConfiguration gameConfiguration)
: base(context, gameConfiguration)
{
}
/// <inheritdoc />
public override void Initialize()
{
var chaosGoblin = this.GameConfiguration.Monsters.First(m => m.NpcWindow == NpcWindow.ChaosMachine);
chaosGoblin.ItemCraftings.Add(this.ChaosWeaponCrafting());
}
private ItemCrafting ChaosWeaponCrafting()
{
var chaosWeapon = this.Context.CreateNew<ItemCrafting>();
chaosWeapon.Name = "Chaos Weapon";
chaosWeapon.Number = 1;
chaosWeapon.ItemCraftingHandlerClassName = typeof(ChaosWeaponAndFirstWingsCrafting).FullName!;
var chaosWeaponSettings = this.Context.CreateNew<SimpleCraftingSettings>();
chaosWeapon.SimpleCraftingSettings = chaosWeaponSettings;
chaosWeaponSettings.MoneyPerFinalSuccessPercentage = 10_000;
chaosWeaponSettings.NpcPriceDivisor = 20_000;
// Requirements:
var randomItem = this.Context.CreateNew<ItemCraftingRequiredItem>();
randomItem.MinimumAmount = 1;
randomItem.MinimumItemLevel = 4;
randomItem.MaximumItemLevel = Constants.MaximumItemLevel;
randomItem.FailResult = MixResult.ChaosWeaponAndFirstWingsDowngradedRandom;
randomItem.RequiredItemOptions.Add(this.GameConfiguration.ItemOptionTypes.First(o => o == ItemOptionTypes.Option));
randomItem.SuccessResult = MixResult.Disappear;
chaosWeaponSettings.RequiredItems.Add(randomItem);
var chaos = this.Context.CreateNew<ItemCraftingRequiredItem>();
chaos.MinimumAmount = 1;
chaos.SuccessResult = MixResult.Disappear;
chaos.FailResult = MixResult.Disappear;
chaos.PossibleItems.Add(this.GameConfiguration.Items.First(i => i.Name == "Jewel of Chaos"));
chaosWeaponSettings.RequiredItems.Add(chaos);
var bless = this.Context.CreateNew<ItemCraftingRequiredItem>();
bless.MinimumAmount = 0;
bless.SuccessResult = MixResult.Disappear;
bless.FailResult = MixResult.Disappear;
bless.PossibleItems.Add(this.GameConfiguration.Items.First(i => i.Name == "Jewel of Bless"));
chaosWeaponSettings.RequiredItems.Add(bless);
var soul = this.Context.CreateNew<ItemCraftingRequiredItem>();
soul.MinimumAmount = 0;
soul.SuccessResult = MixResult.Disappear;
soul.FailResult = MixResult.Disappear;
soul.PossibleItems.Add(this.GameConfiguration.Items.First(i => i.Name == "Jewel of Soul"));
chaosWeaponSettings.RequiredItems.Add(soul);
// Result:
chaosWeaponSettings.ResultItemSelect = ResultItemSelection.Any;
var chaosDragonAxe = this.Context.CreateNew<ItemCraftingResultItem>();
chaosDragonAxe.ItemDefinition = this.GameConfiguration.Items.First(i => i.Name == "Chaos Dragon Axe");
chaosDragonAxe.RandomMinimumLevel = 0;
chaosDragonAxe.RandomMaximumLevel = 4;
chaosWeaponSettings.ResultItems.Add(chaosDragonAxe);
var chaosNatureBow = this.Context.CreateNew<ItemCraftingResultItem>();
chaosNatureBow.ItemDefinition = this.GameConfiguration.Items.First(i => i.Name == "Chaos Nature Bow");
chaosNatureBow.RandomMinimumLevel = 0;
chaosNatureBow.RandomMaximumLevel = 4;
chaosWeaponSettings.ResultItems.Add(chaosNatureBow);
var chaosLightningStaff = this.Context.CreateNew<ItemCraftingResultItem>();
chaosLightningStaff.ItemDefinition = this.GameConfiguration.Items.First(i => i.Name == "Chaos Lightning Staff");
chaosLightningStaff.RandomMinimumLevel = 0;
chaosLightningStaff.RandomMaximumLevel = 4;
chaosWeaponSettings.ResultItems.Add(chaosLightningStaff);
return chaosWeapon;
}
}