baseline: OpenMU upstream b5a0961 (fresh source)
This commit is contained in:
100
src/Persistence/Initialization/Version075/ChaosMixes.cs
Normal file
100
src/Persistence/Initialization/Version075/ChaosMixes.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
// <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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// <copyright file="CharacterClassInitialization.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.Persistence.Initialization.CharacterClasses;
|
||||
|
||||
/// <summary>
|
||||
/// Initialization of character classes data for Version 0.75.
|
||||
/// </summary>
|
||||
internal class CharacterClassInitialization : Initialization.CharacterClasses.CharacterClassInitialization
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="CharacterClassInitialization"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public CharacterClassInitialization(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool UseClassicPvp => true;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
this.CreateDarkKnight(CharacterClassNumber.DarkKnight, "Dark Knight", false, null, true);
|
||||
this.CreateDarkWizard(CharacterClassNumber.DarkWizard, "Dark Wizard", false, null, true);
|
||||
this.CreateFairyElf(CharacterClassNumber.FairyElf, "Fairy Elf", false, null, true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
// <copyright file="DataInitialization.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 System.Runtime.InteropServices;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.Network.PlugIns;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Version075.TestAccounts;
|
||||
using MUnique.OpenMU.PlugIns;
|
||||
|
||||
/// <summary>
|
||||
/// Data initialization plugin for Version 0.75.
|
||||
/// </summary>
|
||||
[Guid("420F8E50-0ACB-4A90-AF86-E1035D97F84D")]
|
||||
[PlugIn]
|
||||
[Display(Name = nameof(PlugInResources.DataInitialization075_Name), Description = nameof(PlugInResources.DataInitialization075_Description), ResourceType = typeof(PlugInResources))]
|
||||
public class DataInitialization : DataInitializationBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DataInitialization" /> class.
|
||||
/// </summary>
|
||||
/// <param name="persistenceContextProvider">The persistence context provider.</param>
|
||||
/// <param name="loggerFactory">The logger factory.</param>
|
||||
public DataInitialization(IPersistenceContextProvider persistenceContextProvider, ILoggerFactory loggerFactory)
|
||||
: base(persistenceContextProvider, loggerFactory)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the identifier, by which the initialization is selected.
|
||||
/// </summary>
|
||||
public static string Id => "0.75";
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Key => Id;
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Caption => "0.75";
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IInitializer GameConfigurationInitializer => new GameConfigurationInitializer(this.Context, this.GameConfiguration);
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IGameMapsInitializer GameMapsInitializer => new GameMapsInitializer(this.Context, this.GameConfiguration);
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IInitializer? TestAccountsInitializer => new TestAccountsInitialization(this.Context, this.GameConfiguration);
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void CreateGameClientDefinition()
|
||||
{
|
||||
var version075Definition = this.Context.CreateNew<GameClientDefinition>();
|
||||
version075Definition.SetGuid(75);
|
||||
version075Definition.Season = 0;
|
||||
version075Definition.Episode = 75;
|
||||
version075Definition.Language = ClientLanguage.Invariant; // it doesn't fit into any available category - maybe it's so old that it didn't have differences in the protocol yet.
|
||||
version075Definition.Version = new byte[] { 0x30, 0x37, 0x35, 0x30, 0x30 }; // the last two bytes are not relevant as te 0.75 does only use the first 3 bytes.
|
||||
version075Definition.Serial = Encoding.ASCII.GetBytes("sudv(*40ds7lkN2n");
|
||||
version075Definition.Description = "Version 0.75 Client";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
// <copyright file="GameConfigurationInitializer.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.Items;
|
||||
|
||||
using MUnique.OpenMU.Persistence.Initialization.Version075.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the <see cref="GameConfiguration"/>.
|
||||
/// </summary>
|
||||
public class GameConfigurationInitializer : GameConfigurationInitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="GameConfigurationInitializer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public GameConfigurationInitializer(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IEnumerable<ItemOptionType> OptionTypes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return ItemOptionTypes.Option;
|
||||
yield return ItemOptionTypes.Luck;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
new CharacterClassInitialization(this.Context, this.GameConfiguration).Initialize();
|
||||
|
||||
new SkillsInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
new Orbs(this.Context, this.GameConfiguration).Initialize();
|
||||
new Scrolls(this.Context, this.GameConfiguration).Initialize();
|
||||
new Jewels(this.Context, this.GameConfiguration).Initialize();
|
||||
new Armors(this.Context, this.GameConfiguration).Initialize();
|
||||
new Wings(this.Context, this.GameConfiguration).Initialize();
|
||||
new Pets(this.Context, this.GameConfiguration).Initialize();
|
||||
new Weapons(this.Context, this.GameConfiguration).Initialize();
|
||||
new Potions(this.Context, this.GameConfiguration).Initialize();
|
||||
new Jewelery(this.Context, this.GameConfiguration).Initialize();
|
||||
|
||||
new NpcInitialization(this.Context, this.GameConfiguration).Initialize();
|
||||
|
||||
new GameMapsInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
this.AssignCharacterClassHomeMaps();
|
||||
new ChaosMixes(this.Context, this.GameConfiguration).Initialize(); // todo
|
||||
new Gates(this.Context, this.GameConfiguration).Initialize();
|
||||
//// TODO: ItemSetGroups for set bonus
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// <copyright file="GameMapsInitializer.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.Persistence.Initialization.Version075.Maps;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the <see cref="GameMapDefinition"/>s.
|
||||
/// </summary>
|
||||
public class GameMapsInitializer : GameMapsInitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="GameMapsInitializer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public GameMapsInitializer(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IEnumerable<Type> MapInitializerTypes
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return typeof(Lorencia);
|
||||
yield return typeof(Dungeon);
|
||||
yield return typeof(Devias);
|
||||
yield return typeof(Noria);
|
||||
yield return typeof(LostTower);
|
||||
yield return typeof(Exile);
|
||||
yield return typeof(Arena);
|
||||
yield return typeof(Atlans);
|
||||
}
|
||||
}
|
||||
}
|
||||
208
src/Persistence/Initialization/Version075/Gates.cs
Normal file
208
src/Persistence/Initialization/Version075/Gates.cs
Normal file
@@ -0,0 +1,208 @@
|
||||
// <copyright file="Gates.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;
|
||||
|
||||
/// <summary>
|
||||
/// Gates initialization.
|
||||
/// </summary>
|
||||
public class Gates : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Gates" /> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Gates(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the gates.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
var maps = this.GameConfiguration.Maps.ToDictionary(map => map.Number, map => map);
|
||||
var targetGates = this.CreateTargetGates(maps);
|
||||
this.CreateEnterGates(maps, targetGates);
|
||||
this.CreateWarpEntries(targetGates);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the warp entries.
|
||||
/// </summary>
|
||||
/// <param name="gates">The gates.</param>
|
||||
/// <remarks>
|
||||
/// Version 0.75 has no graphical menu, but allows to warp with text commands.
|
||||
/// </remarks>
|
||||
private void CreateWarpEntries(IDictionary<short, ExitGate> gates)
|
||||
{
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(1, "Arena", 2000, 50, gates[50]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(2, "Lorencia", 2000, 10, gates[17]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(3, "Noria", 2000, 10, gates[27]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(4, "Devias", 2000, 20, gates[22]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(5, "Dungeon", 3000, 30, gates[2]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(6, "Dungeon2", 3500, 40, gates[6]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(7, "Dungeon3", 4000, 50, gates[10]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(8, "LostTower", 5000, 50, gates[42]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(9, "LostTower2", 5500, 50, gates[31]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(10, "LostTower3", 6000, 50, gates[33]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(11, "LostTower4", 6500, 60, gates[35]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(12, "LostTower5", 7000, 60, gates[37]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(13, "LostTower6", 7500, 70, gates[39]));
|
||||
this.GameConfiguration.WarpList.Add(this.CreateWarpInfo(14, "LostTower7", 8000, 70, gates[41]));
|
||||
}
|
||||
|
||||
private WarpInfo CreateWarpInfo(ushort index, string name, int costs, int levelRequirement, ExitGate gate)
|
||||
{
|
||||
var warpInfo = this.Context.CreateNew<WarpInfo>();
|
||||
warpInfo.Index = index;
|
||||
warpInfo.Name = name;
|
||||
warpInfo.Costs = costs;
|
||||
warpInfo.LevelRequirement = levelRequirement;
|
||||
warpInfo.Gate = gate;
|
||||
return warpInfo;
|
||||
}
|
||||
|
||||
private ExitGate CreateExitGate(GameMapDefinition map, byte x1, byte y1, byte x2, byte y2, byte direction, bool isSpawnGate = false)
|
||||
{
|
||||
if (x1 > x2)
|
||||
{
|
||||
throw new ArgumentException("x1 > x2");
|
||||
}
|
||||
|
||||
if (y1 > y2)
|
||||
{
|
||||
throw new ArgumentException("y1 > y2");
|
||||
}
|
||||
|
||||
var gate = this.Context.CreateNew<ExitGate>();
|
||||
gate.Map = map;
|
||||
gate.X1 = x1;
|
||||
gate.Y1 = y1;
|
||||
gate.X2 = x2;
|
||||
gate.Y2 = y2;
|
||||
|
||||
// different to all other configurations, 0 means 'Undefined', so we just assume that we can cast it to Direction without adding 1.
|
||||
gate.Direction = (Direction)direction;
|
||||
gate.IsSpawnGate = isSpawnGate;
|
||||
map.ExitGates.Add(gate);
|
||||
return gate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the target gates and adds them to the <see cref="GameMapDefinition.ExitGates" /> if the gate is specified as spawn gate (flag == 0).
|
||||
/// </summary>
|
||||
/// <param name="maps">The previously created game maps.</param>
|
||||
/// <returns>A dictionary of all created exit gates. The key is the number.</returns>
|
||||
/// <remarks>
|
||||
/// Regex #1: (?m)^(\d+)\s+?(0)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+).*?$
|
||||
/// Rplace by #1: targetGates.Add($1, this.CreateExitGate(maps[$3], $4, $5, $6, $7, $9, true));
|
||||
/// Regex #2: (?m)^(\d+)\s+?(2)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+).*?$
|
||||
/// Rplace by #2: targetGates.Add($1, this.CreateExitGate(maps[$3], $4, $5, $6, $7, $9, false));.
|
||||
/// </remarks>
|
||||
private IDictionary<short, ExitGate> CreateTargetGates(IDictionary<short, GameMapDefinition> maps)
|
||||
{
|
||||
var targetGates = new Dictionary<short, ExitGate>();
|
||||
|
||||
// Lorencia
|
||||
targetGates.Add(17, this.CreateExitGate(maps[0], 133, 118, 151, 135, 0, true));
|
||||
targetGates.Add(4, this.CreateExitGate(maps[0], 121, 231, 123, 231, 1));
|
||||
targetGates.Add(21, this.CreateExitGate(maps[0], 7, 38, 8, 41, 3));
|
||||
targetGates.Add(26, this.CreateExitGate(maps[0], 213, 244, 217, 245, 1));
|
||||
|
||||
// Dungeon
|
||||
targetGates.Add(2, this.CreateExitGate(maps[1], 107, 247, 110, 247, 1));
|
||||
targetGates.Add(6, this.CreateExitGate(maps[1], 231, 126, 234, 127, 1));
|
||||
targetGates.Add(8, this.CreateExitGate(maps[1], 240, 149, 241, 151, 3));
|
||||
targetGates.Add(10, this.CreateExitGate(maps[1], 3, 83, 4, 86, 3));
|
||||
targetGates.Add(12, this.CreateExitGate(maps[1], 3, 16, 6, 17, 3));
|
||||
targetGates.Add(14, this.CreateExitGate(maps[1], 29, 125, 30, 126, 1));
|
||||
targetGates.Add(16, this.CreateExitGate(maps[1], 5, 32, 7, 33, 1));
|
||||
|
||||
// Devias
|
||||
targetGates.Add(22, this.CreateExitGate(maps[2], 197, 35, 218, 50, 0, true));
|
||||
targetGates.Add(19, this.CreateExitGate(maps[2], 242, 34, 243, 37, 7));
|
||||
targetGates.Add(44, this.CreateExitGate(maps[2], 2, 246, 3, 247, 2));
|
||||
|
||||
// Noria
|
||||
targetGates.Add(27, this.CreateExitGate(maps[3], 171, 108, 177, 117, 0, true));
|
||||
targetGates.Add(24, this.CreateExitGate(maps[3], 148, 5, 155, 6, 5));
|
||||
targetGates.Add(48, this.CreateExitGate(maps[3], 240, 240, 241, 243, 7));
|
||||
|
||||
// Lost Tower
|
||||
targetGates.Add(42, this.CreateExitGate(maps[4], 203, 70, 213, 81, 0, true));
|
||||
targetGates.Add(29, this.CreateExitGate(maps[4], 162, 2, 166, 3, 5));
|
||||
targetGates.Add(31, this.CreateExitGate(maps[4], 241, 237, 244, 238, 1));
|
||||
targetGates.Add(33, this.CreateExitGate(maps[4], 86, 166, 87, 168, 3));
|
||||
targetGates.Add(35, this.CreateExitGate(maps[4], 87, 86, 88, 89, 3));
|
||||
targetGates.Add(37, this.CreateExitGate(maps[4], 128, 53, 131, 54, 1));
|
||||
targetGates.Add(39, this.CreateExitGate(maps[4], 52, 53, 55, 54, 1));
|
||||
targetGates.Add(41, this.CreateExitGate(maps[4], 8, 85, 9, 87, 1));
|
||||
|
||||
// Atlans
|
||||
targetGates.Add(49, this.CreateExitGate(maps[7], 15, 11, 27, 23, 0, true));
|
||||
targetGates.Add(46, this.CreateExitGate(maps[7], 14, 12, 15, 13, 3));
|
||||
|
||||
// Arena
|
||||
targetGates.Add(50, this.CreateExitGate(maps[6], 101, 115, 103, 117, 0, true));
|
||||
targetGates.Add(51, this.CreateExitGate(maps[6], 107, 115, 107, 115, 0, true));
|
||||
targetGates.Add(52, this.CreateExitGate(maps[6], 107, 114, 107, 114, 0, true));
|
||||
|
||||
return targetGates;
|
||||
}
|
||||
|
||||
private EnterGate CreateEnterGate(short number, ExitGate targetGate, byte x1, byte y1, byte x2, byte y2, short levelRequirement)
|
||||
{
|
||||
var enterGate = this.Context.CreateNew<EnterGate>();
|
||||
enterGate.Number = number;
|
||||
enterGate.LevelRequirement = levelRequirement;
|
||||
enterGate.TargetGate = targetGate;
|
||||
enterGate.X1 = x1;
|
||||
enterGate.Y1 = y1;
|
||||
enterGate.X2 = x2;
|
||||
enterGate.Y2 = y2;
|
||||
enterGate.LevelRequirement = levelRequirement;
|
||||
return enterGate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the enter gates for all maps.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Regex: (?m)^(\d+)\s+?(1)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)\s+?(\d+)
|
||||
/// Replace by #2: maps[$3].EnterGates.Add(this.CreateEnterGate($1, targetGates[$8], $4, $5, $6, $7, $10));
|
||||
/// Remove other lines with empty replacement and regex: (?m)^\d+\s+.*$.
|
||||
/// </remarks>
|
||||
/// <param name="maps">The maps.</param>
|
||||
/// <param name="targetGates">The target gates by number.</param>
|
||||
private void CreateEnterGates(IDictionary<short, GameMapDefinition> maps, IDictionary<short, ExitGate> targetGates)
|
||||
{
|
||||
maps[0].EnterGates.Add(this.CreateEnterGate(1, targetGates[2], 121, 232, 123, 233, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(3, targetGates[4], 108, 248, 109, 248, 0));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(5, targetGates[6], 239, 149, 239, 150, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(7, targetGates[8], 232, 127, 233, 128, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(9, targetGates[10], 2, 17, 2, 18, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(11, targetGates[12], 2, 84, 2, 85, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(13, targetGates[14], 5, 34, 6, 34, 20));
|
||||
maps[1].EnterGates.Add(this.CreateEnterGate(15, targetGates[16], 29, 127, 30, 127, 20));
|
||||
maps[0].EnterGates.Add(this.CreateEnterGate(18, targetGates[19], 5, 38, 6, 41, 15));
|
||||
maps[2].EnterGates.Add(this.CreateEnterGate(20, targetGates[21], 244, 34, 245, 37, 0));
|
||||
maps[0].EnterGates.Add(this.CreateEnterGate(23, targetGates[24], 213, 246, 217, 247, 10));
|
||||
maps[3].EnterGates.Add(this.CreateEnterGate(25, targetGates[26], 148, 3, 155, 4, 10));
|
||||
maps[2].EnterGates.Add(this.CreateEnterGate(28, targetGates[29], 2, 248, 3, 249, 40));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(30, targetGates[31], 190, 6, 191, 8, 40));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(32, targetGates[33], 166, 163, 167, 166, 40));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(34, targetGates[35], 132, 245, 135, 246, 50));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(36, targetGates[37], 132, 135, 135, 136, 50));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(38, targetGates[39], 131, 15, 132, 18, 50));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(40, targetGates[41], 6, 5, 7, 8, 50));
|
||||
maps[4].EnterGates.Add(this.CreateEnterGate(43, targetGates[44], 162, 0, 166, 1, 15));
|
||||
maps[3].EnterGates.Add(this.CreateEnterGate(45, targetGates[46], 242, 240, 245, 243, 60));
|
||||
maps[7].EnterGates.Add(this.CreateEnterGate(47, targetGates[48], 9, 9, 11, 12, 60));
|
||||
}
|
||||
}
|
||||
139
src/Persistence/Initialization/Version075/Items/Armors.cs
Normal file
139
src/Persistence/Initialization/Version075/Items/Armors.cs
Normal file
@@ -0,0 +1,139 @@
|
||||
// <copyright file="Armors.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for armor data.
|
||||
/// </summary>
|
||||
public class Armors : ArmorInitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Armors"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Armors(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override byte MaximumArmorLevel => 11;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes armor data.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
// Shields:
|
||||
this.CreateShield(0, 1, 0, 2, 2, "Small Shield", 3, 1, 3, 22, 70, 0, 1, 1, 1);
|
||||
this.CreateShield(1, 1, 0, 2, 2, "Horn Shield", 9, 3, 9, 28, 100, 0, 0, 1, 0);
|
||||
this.CreateShield(2, 1, 0, 2, 2, "Kite Shield", 12, 4, 12, 32, 110, 0, 0, 1, 0);
|
||||
this.CreateShield(3, 1, 0, 2, 2, "Elven Shield", 21, 8, 21, 36, 30, 100, 0, 0, 1);
|
||||
this.CreateShield(4, 1, 18, 2, 2, "Buckler", 6, 2, 6, 24, 80, 0, 1, 1, 1);
|
||||
this.CreateShield(5, 1, 18, 2, 2, "Dragon Slayer Shield", 35, 10, 36, 44, 100, 40, 0, 1, 0);
|
||||
this.CreateShield(6, 1, 18, 2, 2, "Skull Shield", 15, 5, 15, 34, 110, 0, 1, 1, 1);
|
||||
this.CreateShield(7, 1, 18, 2, 2, "Spiked Shield", 30, 9, 30, 40, 130, 0, 0, 1, 0);
|
||||
this.CreateShield(8, 1, 18, 2, 2, "Tower Shield", 40, 11, 40, 46, 130, 0, 0, 1, 1);
|
||||
this.CreateShield(9, 1, 18, 2, 2, "Plate Shield", 25, 8, 25, 38, 120, 0, 0, 1, 0);
|
||||
this.CreateShield(10, 1, 18, 2, 2, "Big Round Shield", 18, 6, 18, 35, 120, 0, 0, 1, 0);
|
||||
this.CreateShield(11, 1, 18, 2, 2, "Serpent Shield", 45, 12, 45, 48, 130, 0, 0, 1, 1);
|
||||
this.CreateShield(12, 1, 18, 2, 2, "Bronze Shield", 54, 13, 54, 52, 140, 0, 0, 1, 0);
|
||||
this.CreateShield(13, 1, 18, 2, 2, "Dragon Shield", 60, 14, 60, 60, 120, 40, 0, 1, 0);
|
||||
this.CreateShield(14, 1, 0, 2, 3, "Legendary Shield", 48, 7, 48, 50, 90, 25, 1, 0, 1);
|
||||
|
||||
// Helmets:
|
||||
this.CreateArmor(0, 2, 2, 2, "Bronze Helm", 16, 9, 34, 80, 20, 0, 1, 0);
|
||||
this.CreateArmor(1, 2, 2, 2, "Dragon Helm", 57, 24, 68, 120, 30, 0, 1, 0);
|
||||
this.CreateArmor(2, 2, 2, 2, "Pad Helm", 5, 4, 28, 20, 0, 1, 0, 0);
|
||||
this.CreateArmor(3, 2, 2, 2, "Legendary Helm", 50, 18, 42, 30, 0, 1, 0, 0);
|
||||
this.CreateArmor(4, 2, 2, 2, "Bone Helm", 18, 9, 30, 30, 0, 1, 0, 0);
|
||||
this.CreateArmor(5, 2, 2, 2, "Leather Helm", 6, 5, 30, 80, 0, 0, 1, 0);
|
||||
this.CreateArmor(6, 2, 2, 2, "Scale Helm", 26, 12, 40, 110, 0, 0, 1, 0);
|
||||
this.CreateArmor(7, 2, 2, 2, "Sphinx Mask", 32, 13, 36, 30, 0, 1, 0, 0);
|
||||
this.CreateArmor(8, 2, 2, 2, "Brass Helm", 36, 17, 44, 100, 30, 0, 1, 0);
|
||||
this.CreateArmor(9, 2, 2, 2, "Plate Helm", 46, 20, 50, 130, 0, 0, 1, 0);
|
||||
this.CreateArmor(10, 2, 2, 2, "Vine Helm", 6, 4, 22, 30, 60, 0, 0, 1);
|
||||
this.CreateArmor(11, 2, 2, 2, "Silk Helm", 16, 8, 26, 30, 70, 0, 0, 1);
|
||||
this.CreateArmor(12, 2, 2, 2, "Wind Helm", 28, 12, 32, 30, 80, 0, 0, 1);
|
||||
this.CreateArmor(13, 2, 2, 2, "Spirit Helm", 40, 16, 38, 40, 80, 0, 0, 1);
|
||||
this.CreateArmor(14, 2, 2, 2, "Guardian Helm", 53, 23, 45, 40, 80, 0, 0, 1);
|
||||
|
||||
// Armors:
|
||||
this.CreateArmor(0, 3, 2, 2, "Bronze Armor", 18, 14, 34, 80, 20, 0, 1, 0);
|
||||
this.CreateArmor(1, 3, 2, 3, "Dragon Armor", 59, 37, 68, 120, 30, 0, 1, 0);
|
||||
this.CreateArmor(2, 3, 2, 2, "Pad Armor", 10, 7, 28, 30, 0, 1, 0, 0);
|
||||
this.CreateArmor(3, 3, 2, 2, "Legendary Armor", 56, 22, 42, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(4, 3, 2, 2, "Bone Armor", 22, 13, 30, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(5, 3, 2, 3, "Leather Armor", 10, 10, 30, 80, 0, 0, 1, 0);
|
||||
this.CreateArmor(6, 3, 2, 2, "Scale Armor", 28, 18, 40, 110, 0, 0, 1, 0);
|
||||
this.CreateArmor(7, 3, 2, 3, "Sphinx Armor", 38, 17, 36, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(8, 3, 2, 2, "Brass Armor", 38, 22, 44, 100, 30, 0, 1, 0);
|
||||
this.CreateArmor(9, 3, 2, 2, "Plate Armor", 48, 30, 50, 130, 0, 0, 1, 0);
|
||||
this.CreateArmor(10, 3, 2, 2, "Vine Armor", 10, 8, 22, 30, 60, 0, 0, 1);
|
||||
this.CreateArmor(11, 3, 2, 2, "Silk Armor", 20, 12, 26, 30, 70, 0, 0, 1);
|
||||
this.CreateArmor(12, 3, 2, 2, "Wind Armor", 32, 16, 32, 30, 80, 0, 0, 1);
|
||||
this.CreateArmor(13, 3, 2, 2, "Spirit Armor", 44, 21, 38, 40, 80, 0, 0, 1);
|
||||
this.CreateArmor(14, 3, 2, 2, "Guardian Armor", 57, 29, 45, 40, 80, 0, 0, 1);
|
||||
|
||||
// Pants:
|
||||
this.CreateArmor(0, 4, 2, 2, "Bronze Pants", 15, 10, 34, 80, 20, 0, 1, 0);
|
||||
this.CreateArmor(1, 4, 2, 2, "Dragon Pants", 55, 26, 68, 120, 30, 0, 1, 0);
|
||||
this.CreateArmor(2, 4, 2, 2, "Pad Pants", 8, 5, 28, 30, 0, 1, 0, 0);
|
||||
this.CreateArmor(3, 4, 2, 2, "Legendary Pants", 53, 20, 42, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(4, 4, 2, 2, "Bone Pants", 20, 10, 30, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(5, 4, 2, 2, "Leather Pants", 8, 7, 30, 80, 0, 0, 1, 0);
|
||||
this.CreateArmor(6, 4, 2, 2, "Scale Pants", 25, 14, 40, 110, 0, 0, 1, 0);
|
||||
this.CreateArmor(7, 4, 2, 2, "Sphinx Pants", 34, 15, 36, 40, 0, 1, 0, 0);
|
||||
this.CreateArmor(8, 4, 2, 2, "Brass Pants", 35, 18, 44, 100, 30, 0, 1, 0);
|
||||
this.CreateArmor(9, 4, 2, 2, "Plate Pants", 45, 22, 50, 130, 0, 0, 1, 0);
|
||||
this.CreateArmor(10, 4, 2, 2, "Vine Pants", 8, 6, 22, 30, 60, 0, 0, 1);
|
||||
this.CreateArmor(11, 4, 2, 2, "Silk Pants", 18, 10, 26, 30, 70, 0, 0, 1);
|
||||
this.CreateArmor(12, 4, 2, 2, "Wind Pants", 30, 14, 32, 30, 80, 0, 0, 1);
|
||||
this.CreateArmor(13, 4, 2, 2, "Spirit Pants", 42, 18, 38, 40, 80, 0, 0, 1);
|
||||
this.CreateArmor(14, 4, 2, 2, "Guardian Pants", 54, 25, 45, 40, 80, 0, 0, 1);
|
||||
|
||||
// Gloves:
|
||||
this.CreateGloves(0, "Bronze Gloves", 13, 4, 4, 34, 80, 20, 0, 1, 0);
|
||||
this.CreateGloves(1, "Dragon Gloves", 52, 14, 6, 68, 120, 30, 0, 1, 0);
|
||||
this.CreateGloves(2, "Pad Gloves", 3, 2, 0, 28, 20, 0, 1, 0, 0);
|
||||
this.CreateGloves(3, "Legendary Gloves", 44, 11, 0, 42, 20, 0, 1, 0, 0);
|
||||
this.CreateGloves(4, "Bone Gloves", 14, 5, 0, 30, 20, 0, 1, 0, 0);
|
||||
this.CreateGloves(5, "Leather Gloves", 4, 2, 8, 30, 80, 0, 0, 1, 0);
|
||||
this.CreateGloves(6, "Scale Gloves", 22, 7, 10, 40, 110, 0, 0, 1, 0);
|
||||
this.CreateGloves(7, "Sphinx Gloves", 28, 8, 0, 36, 20, 0, 1, 0, 0);
|
||||
this.CreateGloves(8, "Brass Gloves", 32, 9, 8, 44, 100, 30, 0, 1, 0);
|
||||
this.CreateGloves(9, "Plate Gloves", 42, 12, 4, 50, 130, 0, 0, 1, 0);
|
||||
this.CreateGloves(10, "Vine Gloves", 4, 2, 4, 22, 30, 60, 0, 0, 1);
|
||||
this.CreateGloves(11, "Silk Gloves", 14, 4, 8, 26, 30, 70, 0, 0, 1);
|
||||
this.CreateGloves(12, "Wind Gloves", 26, 6, 10, 32, 30, 80, 0, 0, 1);
|
||||
this.CreateGloves(13, "Spirit Gloves", 38, 9, 4, 38, 40, 80, 0, 0, 1);
|
||||
this.CreateGloves(14, "Guardian Gloves", 50, 15, 6, 45, 40, 80, 0, 0, 1);
|
||||
|
||||
// Boots:
|
||||
this.CreateBoots(0, 6, 2, 2, "Bronze Boots", 12, 4, 10, 34, 80, 20, 0, 1, 0);
|
||||
this.CreateBoots(1, 6, 2, 2, "Dragon Boots", 54, 15, 2, 68, 120, 30, 0, 1, 0);
|
||||
this.CreateBoots(2, 6, 2, 2, "Pad Boots", 4, 3, 10, 28, 20, 0, 1, 0, 0);
|
||||
this.CreateBoots(3, 6, 2, 2, "Legendary Boots", 46, 12, 0, 42, 30, 0, 1, 0, 0);
|
||||
this.CreateBoots(4, 6, 2, 2, "Bone Boots", 16, 6, 6, 30, 30, 0, 1, 0, 0);
|
||||
this.CreateBoots(5, 6, 2, 2, "Leather Boots", 5, 2, 12, 30, 80, 0, 0, 1, 0);
|
||||
this.CreateBoots(6, 6, 2, 2, "Scale Boots", 22, 8, 8, 40, 110, 0, 0, 1, 0);
|
||||
this.CreateBoots(7, 6, 2, 2, "Sphinx Boots", 30, 9, 8, 36, 30, 0, 1, 0, 0);
|
||||
this.CreateBoots(8, 6, 2, 2, "Brass Boots", 32, 10, 6, 44, 100, 30, 0, 1, 0);
|
||||
this.CreateBoots(9, 6, 2, 2, "Plate Boots", 42, 12, 4, 50, 130, 0, 0, 1, 0);
|
||||
this.CreateBoots(10, 6, 2, 2, "Vine Boots", 5, 2, 0, 22, 30, 60, 0, 0, 1);
|
||||
this.CreateBoots(11, 6, 2, 2, "Silk Boots", 15, 4, 0, 26, 30, 70, 0, 0, 1);
|
||||
this.CreateBoots(12, 6, 2, 2, "Wind Boots", 27, 7, 0, 32, 30, 80, 0, 0, 1);
|
||||
this.CreateBoots(13, 6, 2, 2, "Spirit Boots", 40, 10, 0, 38, 40, 80, 0, 0, 1);
|
||||
this.CreateBoots(14, 6, 2, 2, "Guardian Boots", 52, 16, 0, 45, 40, 80, 0, 0, 1);
|
||||
|
||||
this.BuildSets();
|
||||
}
|
||||
}
|
||||
21
src/Persistence/Initialization/Version075/Items/Constants.cs
Normal file
21
src/Persistence/Initialization/Version075/Items/Constants.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
// <copyright file="Constants.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.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Constants for this game version.
|
||||
/// </summary>
|
||||
internal static class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the maximum item level.
|
||||
/// </summary>
|
||||
public static byte MaximumItemLevel => 11;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum option level.
|
||||
/// </summary>
|
||||
public static byte MaximumOptionLevel => 4;
|
||||
}
|
||||
216
src/Persistence/Initialization/Version075/Items/Jewelery.cs
Normal file
216
src/Persistence/Initialization/Version075/Items/Jewelery.cs
Normal file
@@ -0,0 +1,216 @@
|
||||
// <copyright file="Jewelery.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.Items;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for jewelery (rings and pendants).
|
||||
/// </summary>
|
||||
internal class Jewelery : InitializerBase
|
||||
{
|
||||
private static readonly float[] ResistanceIncreaseByLevel = { 0, 1, 2, 3, 4 };
|
||||
private ItemOptionDefinition? _healthRecoverOptionDefinition;
|
||||
private ItemLevelBonusTable? _resistancesBonusTable;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Jewelery"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Jewelery(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override int MaximumOptionLevel => 3;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public sealed override void Initialize()
|
||||
{
|
||||
this._healthRecoverOptionDefinition = this.CreateOption("Health recover for jewelery", Stats.HealthRecoveryMultiplier, 0.01f, ItemOptionDefinitionNumbers.JeweleryHealth);
|
||||
this._resistancesBonusTable = this.CreateItemBonusTable(ResistanceIncreaseByLevel, "Elemental resistances (Jewelery)", "Defines the elemental resistances for jewelery. It's 1 per item level.");
|
||||
this.CreateItems();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the items.
|
||||
/// </summary>
|
||||
protected virtual void CreateItems()
|
||||
{
|
||||
this.CreateRing(8, "Ring of Ice", 20, 50, Stats.IceResistance);
|
||||
this.CreateRing(9, "Ring of Poison", 17, 50, Stats.PoisonResistance);
|
||||
|
||||
this.CreatePendant(12, "Pendant of Lighting", 21, 50, Stats.LightningResistance);
|
||||
this.CreatePendant(13, "Pendant of Fire", 13, 50, Stats.FireResistance);
|
||||
|
||||
this.CreateTransformationRing(
|
||||
10,
|
||||
"Transformation Ring",
|
||||
0,
|
||||
200,
|
||||
20, // It's actually lvl 50 for the last 3
|
||||
CharacterTransformationSkin.BudgeDragon,
|
||||
CharacterTransformationSkin.Giant,
|
||||
CharacterTransformationSkin.SkeletonWarrior,
|
||||
CharacterTransformationSkin.PoisonBullFighter,
|
||||
CharacterTransformationSkin.ThunderLich,
|
||||
CharacterTransformationSkin.DeathCow);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a transformation ring.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="dropLevel">The level.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="requiredlevel">The required level to wear.</param>
|
||||
/// <param name="transformationSkins">The transformation skins, per item level.</param>
|
||||
/// <returns>The definition of the created ring.</returns>
|
||||
protected ItemDefinition CreateTransformationRing(byte number, string name, byte dropLevel, byte durability, byte requiredlevel, params CharacterTransformationSkin[] transformationSkins)
|
||||
{
|
||||
var ring = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(ring);
|
||||
ring.Group = 13;
|
||||
ring.Number = number;
|
||||
ring.ItemSlot = this.GameConfiguration.ItemSlotTypes.FirstOrDefault(slotType => slotType.ItemSlots.Contains(10));
|
||||
ring.Name = name;
|
||||
ring.DropLevel = dropLevel;
|
||||
ring.Durability = durability;
|
||||
ring.MaximumItemLevel = (byte)(transformationSkins.Length - 1);
|
||||
ring.Width = 1;
|
||||
ring.Height = 1;
|
||||
|
||||
this.CreateItemRequirementIfNeeded(ring, Stats.Level, requiredlevel);
|
||||
|
||||
var powerUp = this.Context.CreateNew<ItemBasePowerUpDefinition>();
|
||||
ring.BasePowerUpAttributes.Add(powerUp);
|
||||
powerUp.BaseValue = 0;
|
||||
powerUp.TargetAttribute = Stats.TransformationSkin.GetPersistent(this.GameConfiguration);
|
||||
powerUp.BonusPerLevelTable = this.CreateItemBonusTable(transformationSkins.Select(v => (float)v).ToArray(), $"Transformation Ring Skins ({name})", $"Contains the skin numbers for the different levels of the transformation ring ({name}).");
|
||||
|
||||
foreach (var characterClass in this.GameConfiguration.CharacterClasses)
|
||||
{
|
||||
ring.QualifiedCharacters.Add(characterClass);
|
||||
}
|
||||
|
||||
ring.SetGuid(ring.Group, ring.Number);
|
||||
return ring;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the option.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="targetAttribute">The target attribute.</param>
|
||||
/// <param name="boostPerLevel">The boost per level.</param>
|
||||
/// <param name="optionNumber">The option number.</param>
|
||||
/// <param name="aggregateType">Type of the aggregate.</param>
|
||||
/// <returns>
|
||||
/// The created option.
|
||||
/// </returns>
|
||||
protected ItemOptionDefinition CreateOption(string name, AttributeDefinition targetAttribute, float boostPerLevel, short optionNumber, AggregateType aggregateType = AggregateType.AddRaw)
|
||||
{
|
||||
var optionDefinition = this.Context.CreateNew<ItemOptionDefinition>();
|
||||
optionDefinition.SetGuid(optionNumber, targetAttribute.Id.ExtractFirstTwoBytes());
|
||||
optionDefinition.AddsRandomly = true;
|
||||
optionDefinition.Name = name;
|
||||
optionDefinition.AddChance = 0.25f;
|
||||
optionDefinition.MaximumOptionsPerItem = 1;
|
||||
|
||||
var option = this.CreateItemOption(0, targetAttribute, 0, aggregateType, boostPerLevel, optionNumber);
|
||||
optionDefinition.PossibleOptions.Add(option);
|
||||
this.GameConfiguration.ItemOptions.Add(optionDefinition);
|
||||
return optionDefinition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the jewelery.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="slot">The slot.</param>
|
||||
/// <param name="dropsFromMonsters">if set to <c>true</c> [drops from monsters].</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="resistanceAttribute">The resistance attribute.</param>
|
||||
/// <param name="withHealthOption">if set to <c>true</c> [with health option].</param>
|
||||
/// <returns>The created jewelery.</returns>
|
||||
protected ItemDefinition CreateJewelery(byte number, int slot, bool dropsFromMonsters, string name, byte level, byte durability, AttributeDefinition? resistanceAttribute, bool withHealthOption = true)
|
||||
{
|
||||
var item = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(item);
|
||||
item.Group = 13;
|
||||
item.Number = number;
|
||||
item.ItemSlot = this.GameConfiguration.ItemSlotTypes.FirstOrDefault(slotType => slotType.ItemSlots.Contains(slot));
|
||||
item.DropsFromMonsters = dropsFromMonsters;
|
||||
item.Name = name;
|
||||
item.DropLevel = level;
|
||||
item.MaximumItemLevel = 4;
|
||||
item.Width = 1;
|
||||
item.Height = 1;
|
||||
item.Durability = durability;
|
||||
|
||||
//// TODO: Requirement increases with item level
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.Level, level);
|
||||
|
||||
if (withHealthOption)
|
||||
{
|
||||
item.PossibleItemOptions.Add(this._healthRecoverOptionDefinition!);
|
||||
}
|
||||
|
||||
if (resistanceAttribute != null)
|
||||
{
|
||||
var powerUp = this.CreateItemBasePowerUpDefinition(resistanceAttribute, 1f, AggregateType.Maximum);
|
||||
powerUp.BonusPerLevelTable = this._resistancesBonusTable;
|
||||
item.BasePowerUpAttributes.Add(powerUp);
|
||||
}
|
||||
|
||||
foreach (var characterClass in this.GameConfiguration.CharacterClasses)
|
||||
{
|
||||
item.QualifiedCharacters.Add(characterClass);
|
||||
}
|
||||
|
||||
item.SetGuid(item.Group, item.Number);
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a ring.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="resistanceAttribute">The resistance attribute.</param>
|
||||
/// <remarks>
|
||||
/// Rings always have defensive excellent options.
|
||||
/// </remarks>
|
||||
private void CreateRing(byte number, string name, byte level, byte durability, AttributeDefinition? resistanceAttribute)
|
||||
{
|
||||
this.CreateJewelery(number, 10, true, name, level, durability, resistanceAttribute);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a pendant.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="resistanceAttribute">The resistance attribute.</param>
|
||||
/// <remarks>
|
||||
/// Pendants always have offensive excellent options. If it's wizardry or physical depends on the specific item. I didn't find a pattern yet.
|
||||
/// </remarks>
|
||||
private void CreatePendant(byte number, string name, byte level, byte durability, AttributeDefinition? resistanceAttribute)
|
||||
{
|
||||
this.CreateJewelery(number, 9, true, name, level, durability, resistanceAttribute);
|
||||
}
|
||||
}
|
||||
95
src/Persistence/Initialization/Version075/Items/Jewels.cs
Normal file
95
src/Persistence/Initialization/Version075/Items/Jewels.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
// <copyright file="Jewels.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Jewels for MU Version 0.75.
|
||||
/// </summary>
|
||||
public class Jewels : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Jewels"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Jewels(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
this.GameConfiguration.Items.Add(this.CreateJewelOfBless());
|
||||
this.GameConfiguration.Items.Add(this.CreateJewelOfSoul());
|
||||
this.GameConfiguration.Items.Add(this.CreateJewelOfChaos());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="ItemDefinition"/> for the 'Jewel of Bless'.
|
||||
/// </summary>
|
||||
/// <returns><see cref="ItemDefinition"/> for the 'Jewel of Bless'.</returns>
|
||||
private ItemDefinition CreateJewelOfBless()
|
||||
{
|
||||
var itemDefinition = this.Context.CreateNew<ItemDefinition>();
|
||||
itemDefinition.Name = "Jewel of Bless";
|
||||
itemDefinition.Number = 13;
|
||||
itemDefinition.Group = 14;
|
||||
itemDefinition.DropsFromMonsters = false;
|
||||
itemDefinition.DropLevel = 25;
|
||||
itemDefinition.Durability = 1;
|
||||
itemDefinition.Width = 1;
|
||||
itemDefinition.Height = 1;
|
||||
itemDefinition.Value = 150;
|
||||
itemDefinition.SetGuid(itemDefinition.Group, itemDefinition.Number);
|
||||
this.AddItemToJewelItemDrop(itemDefinition);
|
||||
return itemDefinition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="ItemDefinition"/> for the 'Jewel of Bless'.
|
||||
/// </summary>
|
||||
/// <returns><see cref="ItemDefinition"/> for the 'Jewel of Bless'.</returns>
|
||||
private ItemDefinition CreateJewelOfSoul()
|
||||
{
|
||||
var itemDefinition = this.Context.CreateNew<ItemDefinition>();
|
||||
itemDefinition.Name = "Jewel of Soul";
|
||||
itemDefinition.Number = 14;
|
||||
itemDefinition.Group = 14;
|
||||
itemDefinition.DropsFromMonsters = false;
|
||||
itemDefinition.DropLevel = 30;
|
||||
itemDefinition.Durability = 1;
|
||||
itemDefinition.Width = 1;
|
||||
itemDefinition.Height = 1;
|
||||
itemDefinition.Value = 150;
|
||||
itemDefinition.SetGuid(itemDefinition.Group, itemDefinition.Number);
|
||||
this.AddItemToJewelItemDrop(itemDefinition);
|
||||
return itemDefinition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an <see cref="ItemDefinition"/> for the 'Jewel of Chaos'.
|
||||
/// </summary>
|
||||
/// <returns><see cref="ItemDefinition"/> for the 'Jewel of Chaos'.</returns>
|
||||
private ItemDefinition CreateJewelOfChaos()
|
||||
{
|
||||
var itemDefinition = this.Context.CreateNew<ItemDefinition>();
|
||||
itemDefinition.Name = "Jewel of Chaos";
|
||||
itemDefinition.Number = 15;
|
||||
itemDefinition.Group = 12;
|
||||
itemDefinition.DropsFromMonsters = false;
|
||||
itemDefinition.DropLevel = 12;
|
||||
itemDefinition.MaximumDropLevel = 66;
|
||||
itemDefinition.Durability = 1;
|
||||
itemDefinition.Width = 1;
|
||||
itemDefinition.Height = 1;
|
||||
itemDefinition.SetGuid(itemDefinition.Group, itemDefinition.Number);
|
||||
this.AddItemToJewelItemDrop(itemDefinition);
|
||||
return itemDefinition;
|
||||
}
|
||||
}
|
||||
84
src/Persistence/Initialization/Version075/Items/Orbs.cs
Normal file
84
src/Persistence/Initialization/Version075/Items/Orbs.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
// <copyright file="Orbs.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes orb items which are used to learn skills.
|
||||
/// </summary>
|
||||
internal class Orbs : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Orbs"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Orbs(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes all orbs.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this.CreateOrb(8, SkillNumber.Heal, 1, "Orb of Healing", 8, 0, 100, 0, 0, 800, CharacterClasses.FairyElf);
|
||||
this.CreateOrb(9, SkillNumber.GreaterDefense, 1, "Orb of Greater Defense", 13, 0, 100, 0, 0, 3000, CharacterClasses.FairyElf);
|
||||
this.CreateOrb(10, SkillNumber.GreaterDamage, 1, "Orb of Greater Damage", 18, 0, 100, 0, 0, 7000, CharacterClasses.FairyElf);
|
||||
var summonOrb = this.CreateOrb(11, SkillNumber.SummonGoblin, 1, "Orb of Summoning", 3, 0, 0, 0, 0, 150, CharacterClasses.FairyElf);
|
||||
summonOrb.MaximumItemLevel = 5;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the orb definition.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="skillNumber">The skill number.</param>
|
||||
/// <param name="height">The height.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="dropLevel">The drop level.</param>
|
||||
/// <param name="levelRequirement">The level requirement.</param>
|
||||
/// <param name="energyRequirement">The energy requirement.</param>
|
||||
/// <param name="strengthRequirement">The strength requirement.</param>
|
||||
/// <param name="agilityRequirement">The agility requirement.</param>
|
||||
/// <param name="money">The money.</param>
|
||||
/// <param name="characterClasses">The character classes.</param>
|
||||
/// <returns>The created definition.</returns>
|
||||
protected ItemDefinition CreateOrb(byte number, SkillNumber skillNumber, byte height, string name, byte dropLevel, int levelRequirement, int energyRequirement, int strengthRequirement, int agilityRequirement, int money, CharacterClasses characterClasses)
|
||||
{
|
||||
var orb = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(orb);
|
||||
orb.Group = 12;
|
||||
orb.Number = number;
|
||||
orb.Skill = this.GameConfiguration.Skills.First(skill => skill.Number == (short)skillNumber);
|
||||
orb.Width = 1;
|
||||
orb.Height = height;
|
||||
orb.Name = name;
|
||||
orb.DropLevel = dropLevel;
|
||||
orb.DropsFromMonsters = true;
|
||||
orb.Durability = 1;
|
||||
|
||||
this.CreateItemRequirementIfNeeded(orb, Stats.Level, levelRequirement);
|
||||
this.CreateItemRequirementIfNeeded(orb, Stats.TotalEnergy, energyRequirement);
|
||||
this.CreateItemRequirementIfNeeded(orb, Stats.TotalStrength, strengthRequirement);
|
||||
this.CreateItemRequirementIfNeeded(orb, Stats.TotalAgility, agilityRequirement);
|
||||
|
||||
orb.Value = money;
|
||||
var classes = this.GameConfiguration.DetermineCharacterClasses(characterClasses);
|
||||
foreach (var characterClass in classes)
|
||||
{
|
||||
orb.QualifiedCharacters.Add(characterClass);
|
||||
}
|
||||
|
||||
orb.SetGuid(orb.Group, orb.Number);
|
||||
return orb;
|
||||
}
|
||||
}
|
||||
72
src/Persistence/Initialization/Version075/Items/Pets.cs
Normal file
72
src/Persistence/Initialization/Version075/Items/Pets.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
// <copyright file="Pets.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.Items;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for pets.
|
||||
/// </summary>
|
||||
public class Pets : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Pets"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Pets(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
var angel = this.CreatePet(0, "Guardian Angel", 23, (Stats.DamageReceiveDecrement, 0.8f, AggregateType.Multiplicate), (Stats.MaximumHealth, 50f, AggregateType.AddRaw));
|
||||
this.AddItemToJewelItemDrop(angel);
|
||||
var imp = this.CreatePet(1, "Imp", 28, (Stats.AttackDamageIncrease, 1.3f, AggregateType.Multiplicate));
|
||||
this.AddItemToJewelItemDrop(imp);
|
||||
var uniria = this.CreatePet(2, "Horn of Uniria", 25, (Stats.MovementSpeed, MovementSpeedConstants.BasicMountMovementSpeed, AggregateType.Maximum), (Stats.MovementSpeedUnderwater, MovementSpeedConstants.BasicMountMovementSpeed, AggregateType.Maximum));
|
||||
this.AddItemToJewelItemDrop(uniria);
|
||||
}
|
||||
|
||||
private ItemDefinition CreatePet(byte number, string name, int dropLevelAndLevelRequirement, params (AttributeDefinition, float, AggregateType)[] basePowerUps)
|
||||
{
|
||||
var pet = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(pet);
|
||||
pet.Group = 13;
|
||||
pet.Number = number;
|
||||
pet.Width = 1;
|
||||
pet.Height = 1;
|
||||
pet.Name = name;
|
||||
pet.DropLevel = (byte)System.Math.Min(255, dropLevelAndLevelRequirement);
|
||||
pet.DropsFromMonsters = true;
|
||||
pet.Durability = 255;
|
||||
pet.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(st => st.ItemSlots.Contains(8));
|
||||
this.GameConfiguration.DetermineCharacterClasses(true, true, true).ForEach(pet.QualifiedCharacters.Add);
|
||||
|
||||
this.CreateItemRequirementIfNeeded(pet, Stats.Level, dropLevelAndLevelRequirement);
|
||||
|
||||
foreach (var basePowerUp in basePowerUps)
|
||||
{
|
||||
if (basePowerUp.Item1 != null)
|
||||
{
|
||||
var powerUpDefinition = this.Context.CreateNew<ItemBasePowerUpDefinition>();
|
||||
powerUpDefinition.TargetAttribute = basePowerUp.Item1.GetPersistent(this.GameConfiguration);
|
||||
powerUpDefinition.BaseValue = basePowerUp.Item2;
|
||||
powerUpDefinition.AggregateType = basePowerUp.Item3;
|
||||
pet.BasePowerUpAttributes.Add(powerUpDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
pet.SetGuid(pet.Group, pet.Number);
|
||||
return pet;
|
||||
}
|
||||
}
|
||||
237
src/Persistence/Initialization/Version075/Items/Potions.cs
Normal file
237
src/Persistence/Initialization/Version075/Items/Potions.cs
Normal file
@@ -0,0 +1,237 @@
|
||||
// <copyright file="Potions.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// Class which contains item definitions for jewels.
|
||||
/// </summary>
|
||||
public class Potions : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Potions"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Potions(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the potion item definitions.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this.GameConfiguration.Items.Add(this.CreateApple());
|
||||
this.GameConfiguration.Items.Add(this.CreateSmallHealingPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateMediumHealingPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateLargeHealingPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateSmallManaPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateMediumManaPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateLargeManaPotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateAlcohol());
|
||||
this.GameConfiguration.Items.Add(this.CreateAntidotePotion());
|
||||
this.GameConfiguration.Items.Add(this.CreateTownPortalScroll());
|
||||
}
|
||||
|
||||
private ItemDefinition CreateAlcohol()
|
||||
{
|
||||
var alcohol = this.Context.CreateNew<ItemDefinition>();
|
||||
alcohol.Name = "Ale";
|
||||
alcohol.Number = 9;
|
||||
alcohol.Group = 14;
|
||||
alcohol.DropsFromMonsters = true;
|
||||
alcohol.DropLevel = 15;
|
||||
alcohol.Durability = 1;
|
||||
alcohol.Value = 30;
|
||||
alcohol.Width = 1;
|
||||
alcohol.Height = 2;
|
||||
alcohol.SetGuid(alcohol.Group, alcohol.Number);
|
||||
alcohol.ConsumeEffect = this.GameConfiguration.MagicEffects.First(effect => effect.Number == (short)MagicEffectNumber.Alcohol);
|
||||
this.AddItemToJewelItemDrop(alcohol);
|
||||
return alcohol;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the apple definition.
|
||||
/// </summary>
|
||||
/// <returns>The created apple definition.</returns>
|
||||
private ItemDefinition CreateApple()
|
||||
{
|
||||
var apple = this.Context.CreateNew<ItemDefinition>();
|
||||
apple.Name = "Apple";
|
||||
apple.Number = 0;
|
||||
apple.Group = 14;
|
||||
apple.DropsFromMonsters = true;
|
||||
apple.DropLevel = 1;
|
||||
apple.Durability = 3;
|
||||
apple.Value = 5;
|
||||
apple.Width = 1;
|
||||
apple.Height = 1;
|
||||
apple.SetGuid(apple.Group, apple.Number);
|
||||
return apple;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the small healing potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created small healing potion definition.</returns>
|
||||
private ItemDefinition CreateSmallHealingPotion()
|
||||
{
|
||||
var potion = this.Context.CreateNew<ItemDefinition>();
|
||||
potion.Name = "Small Healing Potion";
|
||||
potion.Number = 1;
|
||||
potion.Group = 14;
|
||||
potion.DropsFromMonsters = true;
|
||||
potion.DropLevel = 10;
|
||||
potion.Durability = 3;
|
||||
potion.Value = 10;
|
||||
potion.Width = 1;
|
||||
potion.Height = 1;
|
||||
potion.SetGuid(potion.Group, potion.Number);
|
||||
return potion;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the medium healing potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created medium healing potion definition.</returns>
|
||||
private ItemDefinition CreateMediumHealingPotion()
|
||||
{
|
||||
var potion = this.Context.CreateNew<ItemDefinition>();
|
||||
potion.Name = "Medium Healing Potion";
|
||||
potion.Number = 2;
|
||||
potion.Group = 14;
|
||||
potion.DropsFromMonsters = true;
|
||||
potion.DropLevel = 25;
|
||||
potion.Durability = 3;
|
||||
potion.Value = 20;
|
||||
potion.Width = 1;
|
||||
potion.Height = 1;
|
||||
potion.SetGuid(potion.Group, potion.Number);
|
||||
return potion;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the large healing potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created large healing definition.</returns>
|
||||
private ItemDefinition CreateLargeHealingPotion()
|
||||
{
|
||||
var definition = this.Context.CreateNew<ItemDefinition>();
|
||||
definition.Name = "Large Healing Potion";
|
||||
definition.Number = 3;
|
||||
definition.Group = 14;
|
||||
definition.DropsFromMonsters = true;
|
||||
definition.DropLevel = 40;
|
||||
definition.Durability = 3;
|
||||
definition.Value = 30;
|
||||
definition.Width = 1;
|
||||
definition.Height = 1;
|
||||
definition.SetGuid(definition.Group, definition.Number);
|
||||
return definition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the small mana potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created small mana potion definition.</returns>
|
||||
private ItemDefinition CreateSmallManaPotion()
|
||||
{
|
||||
var potion = this.Context.CreateNew<ItemDefinition>();
|
||||
potion.Name = "Small Mana Potion";
|
||||
potion.Number = 4;
|
||||
potion.Group = 14;
|
||||
potion.DropsFromMonsters = true;
|
||||
potion.DropLevel = 10;
|
||||
potion.Durability = 3;
|
||||
potion.Value = 10;
|
||||
potion.Width = 1;
|
||||
potion.Height = 1;
|
||||
potion.SetGuid(potion.Group, potion.Number);
|
||||
return potion;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the medium mana potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created medium mana potion definition.</returns>
|
||||
private ItemDefinition CreateMediumManaPotion()
|
||||
{
|
||||
var potion = this.Context.CreateNew<ItemDefinition>();
|
||||
potion.Name = "Medium Mana Potion";
|
||||
potion.Number = 5;
|
||||
potion.Group = 14;
|
||||
potion.DropsFromMonsters = true;
|
||||
potion.DropLevel = 25;
|
||||
potion.Durability = 3;
|
||||
potion.Value = 20;
|
||||
potion.Width = 1;
|
||||
potion.Height = 1;
|
||||
potion.SetGuid(potion.Group, potion.Number);
|
||||
return potion;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the large mana potion definition.
|
||||
/// </summary>
|
||||
/// <returns>The created large mana definition.</returns>
|
||||
private ItemDefinition CreateLargeManaPotion()
|
||||
{
|
||||
var definition = this.Context.CreateNew<ItemDefinition>();
|
||||
definition.Name = "Large Mana Potion";
|
||||
definition.Number = 6;
|
||||
definition.Group = 14;
|
||||
definition.DropsFromMonsters = true;
|
||||
definition.DropLevel = 40;
|
||||
definition.Durability = 3;
|
||||
definition.Value = 30;
|
||||
definition.Width = 1;
|
||||
definition.Height = 1;
|
||||
definition.SetGuid(definition.Group, definition.Number);
|
||||
return definition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the antidote definition.
|
||||
/// </summary>
|
||||
/// <returns>The created antidote definition.</returns>
|
||||
private ItemDefinition CreateAntidotePotion()
|
||||
{
|
||||
var definition = this.Context.CreateNew<ItemDefinition>();
|
||||
definition.Name = "Antidote";
|
||||
definition.Number = 8;
|
||||
definition.Group = 14;
|
||||
definition.DropsFromMonsters = true;
|
||||
definition.DropLevel = 10;
|
||||
definition.Durability = 3;
|
||||
definition.Value = 10;
|
||||
definition.Width = 1;
|
||||
definition.Height = 1;
|
||||
definition.SetGuid(definition.Group, definition.Number);
|
||||
return definition;
|
||||
}
|
||||
|
||||
private ItemDefinition CreateTownPortalScroll()
|
||||
{
|
||||
var definition = this.Context.CreateNew<ItemDefinition>();
|
||||
definition.Name = "Town Portal Scroll";
|
||||
definition.Number = 10;
|
||||
definition.Group = 14;
|
||||
definition.DropsFromMonsters = true;
|
||||
definition.DropLevel = 30;
|
||||
definition.Durability = 1;
|
||||
definition.Value = 30;
|
||||
definition.Width = 1;
|
||||
definition.Height = 2;
|
||||
definition.SetGuid(definition.Group, definition.Number);
|
||||
this.AddItemToJewelItemDrop(definition);
|
||||
return definition;
|
||||
}
|
||||
}
|
||||
78
src/Persistence/Initialization/Version075/Items/Scrolls.cs
Normal file
78
src/Persistence/Initialization/Version075/Items/Scrolls.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
// <copyright file="Scrolls.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for scroll items which allow a character to learn <see cref="Skill"/>s.
|
||||
/// </summary>
|
||||
/// <seealso cref="MUnique.OpenMU.Persistence.Initialization.InitializerBase" />
|
||||
public class Scrolls : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Scrolls"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Scrolls(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the scroll data.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this.CreateScroll(0, 1, "Scroll of Poison", 30, 0, 140, 17000);
|
||||
this.CreateScroll(1, 2, "Scroll of Meteorite", 21, 0, 104, 11000);
|
||||
this.CreateScroll(2, 3, "Scroll of Lighting", 13, 0, 72, 3000);
|
||||
this.CreateScroll(3, 4, "Scroll of Fire Ball", 5, 0, 40, 300);
|
||||
this.CreateScroll(4, 5, "Scroll of Flame", 35, 0, 160, 21000);
|
||||
this.CreateScroll(5, 6, "Scroll of Teleport", 17, 0, 88, 5000);
|
||||
this.CreateScroll(6, 7, "Scroll of Ice", 25, 0, 120, 14000);
|
||||
this.CreateScroll(7, 8, "Scroll of Twister", 40, 0, 180, 25000);
|
||||
this.CreateScroll(8, 9, "Scroll of Evil Spirit", 50, 0, 220, 35000);
|
||||
this.CreateScroll(9, 10, "Scroll of Hellfire", 60, 0, 260, 60000);
|
||||
this.CreateScroll(10, 11, "Scroll of Power Wave", 9, 0, 56, 1100);
|
||||
this.CreateScroll(11, 12, "Scroll of Aqua Beam", 74, 0, 345, 100000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the scroll.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="skillNumber">The skill number.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="dropLevel">The drop level.</param>
|
||||
/// <param name="levelRequirement">The level requirement.</param>
|
||||
/// <param name="energyRequirement">The energy requirement.</param>
|
||||
/// <param name="money">The money.</param>
|
||||
protected void CreateScroll(byte number, int skillNumber, string name, byte dropLevel, int levelRequirement, int energyRequirement, int money)
|
||||
{
|
||||
var scroll = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(scroll);
|
||||
scroll.Group = 15;
|
||||
scroll.Number = number;
|
||||
scroll.Skill = this.GameConfiguration.Skills.First(skill => skill.Number == skillNumber);
|
||||
scroll.Width = 1;
|
||||
scroll.Height = 2;
|
||||
scroll.Name = name;
|
||||
scroll.DropLevel = dropLevel;
|
||||
scroll.DropsFromMonsters = true;
|
||||
scroll.Durability = 1;
|
||||
scroll.QualifiedCharacters.Add(this.GameConfiguration.CharacterClasses.First(c => c.Number == (int)CharacterClassNumber.DarkWizard));
|
||||
|
||||
this.CreateItemRequirementIfNeeded(scroll, Stats.Level, levelRequirement);
|
||||
this.CreateItemRequirementIfNeeded(scroll, Stats.TotalEnergyRequirementValue, energyRequirement);
|
||||
|
||||
scroll.Value = money;
|
||||
scroll.SetGuid(scroll.Group, scroll.Number);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
// <copyright file="SlotTypesInitializer.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.Items;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for <see cref="ItemSlotType"/>s.
|
||||
/// </summary>
|
||||
public class SlotTypesInitializer : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SlotTypesInitializer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public SlotTypesInitializer(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
var leftHand = this.Context.CreateNew<ItemSlotType>();
|
||||
leftHand.SetGuid(100);
|
||||
leftHand.Description = "Left Hand";
|
||||
leftHand.ItemSlots.Add(0);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(leftHand);
|
||||
|
||||
var rightHand = this.Context.CreateNew<ItemSlotType>();
|
||||
rightHand.SetGuid(101);
|
||||
rightHand.Description = "Right Hand";
|
||||
rightHand.ItemSlots.Add(1);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(rightHand);
|
||||
|
||||
var leftOrRightHand = this.Context.CreateNew<ItemSlotType>();
|
||||
leftOrRightHand.SetGuid(1);
|
||||
leftOrRightHand.Description = "Left or Right Hand";
|
||||
leftOrRightHand.ItemSlots.Add(0);
|
||||
leftOrRightHand.ItemSlots.Add(1);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(leftOrRightHand);
|
||||
|
||||
var helm = this.Context.CreateNew<ItemSlotType>();
|
||||
helm.SetGuid(2);
|
||||
helm.Description = "Helm";
|
||||
helm.ItemSlots.Add(2);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(helm);
|
||||
|
||||
var armor = this.Context.CreateNew<ItemSlotType>();
|
||||
armor.SetGuid(3);
|
||||
armor.Description = "Armor";
|
||||
armor.ItemSlots.Add(3);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(armor);
|
||||
|
||||
var pants = this.Context.CreateNew<ItemSlotType>();
|
||||
pants.SetGuid(4);
|
||||
pants.Description = "Pants";
|
||||
pants.ItemSlots.Add(4);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(pants);
|
||||
|
||||
var gloves = this.Context.CreateNew<ItemSlotType>();
|
||||
gloves.SetGuid(5);
|
||||
gloves.Description = "Gloves";
|
||||
gloves.ItemSlots.Add(5);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(gloves);
|
||||
|
||||
var boots = this.Context.CreateNew<ItemSlotType>();
|
||||
boots.SetGuid(6);
|
||||
boots.Description = "Boots";
|
||||
boots.ItemSlots.Add(6);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(boots);
|
||||
|
||||
var wings = this.Context.CreateNew<ItemSlotType>();
|
||||
wings.SetGuid(7);
|
||||
wings.Description = "Wings";
|
||||
wings.ItemSlots.Add(7);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(wings);
|
||||
|
||||
var pet = this.Context.CreateNew<ItemSlotType>();
|
||||
pet.SetGuid(8);
|
||||
pet.Description = "Pet";
|
||||
pet.ItemSlots.Add(8);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(pet);
|
||||
|
||||
var pendant = this.Context.CreateNew<ItemSlotType>();
|
||||
pendant.SetGuid(9);
|
||||
pendant.Description = "Pendant";
|
||||
pendant.ItemSlots.Add(9);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(pendant);
|
||||
|
||||
var ring = this.Context.CreateNew<ItemSlotType>();
|
||||
ring.SetGuid(10);
|
||||
ring.Description = "Ring";
|
||||
ring.ItemSlots.Add(10);
|
||||
ring.ItemSlots.Add(11);
|
||||
this.GameConfiguration.ItemSlotTypes.Add(ring);
|
||||
}
|
||||
}
|
||||
337
src/Persistence/Initialization/Version075/Items/Weapons.cs
Normal file
337
src/Persistence/Initialization/Version075/Items/Weapons.cs
Normal file
@@ -0,0 +1,337 @@
|
||||
// <copyright file="Weapons.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.Items;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Helper class to create weapon item definitions.
|
||||
/// </summary>
|
||||
internal class Weapons : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// The durability increase per level.
|
||||
/// </summary>
|
||||
protected static readonly float[] DurabilityIncreasePerLevel = { 0, 1, 2, 3, 4, 6, 8, 10, 12, 14, 17, 21 };
|
||||
|
||||
/// <summary>
|
||||
/// The weapon damage increase by level.
|
||||
/// </summary>
|
||||
private static readonly float[] DamageIncreaseByLevel = { 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 31, 36 };
|
||||
|
||||
private static readonly float[] StaffRiseIncreaseByLevelEven = { 0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 35, 40, 45, 50, 56, 63 }; // Staff with even magic power
|
||||
private static readonly float[] StaffRiseIncreaseByLevelOdd = { 0, 4, 7, 11, 14, 18, 21, 25, 28, 32, 36, 40, 45, 51, 57, 63 }; // Staff with odd magic power
|
||||
|
||||
private ItemLevelBonusTable? _weaponDamageIncreaseTable;
|
||||
|
||||
private ItemLevelBonusTable? _staffRiseTableEven;
|
||||
private ItemLevelBonusTable? _staffRiseTableOdd;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Weapons" /> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configration.</param>
|
||||
public Weapons(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the luck item option definition.
|
||||
/// </summary>
|
||||
protected ItemOptionDefinition Luck
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.GameConfiguration.ItemOptions.First(iod => iod.PossibleOptions.Any(o => o.OptionType == ItemOptionTypes.Luck));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the physical damage option definition.
|
||||
/// </summary>
|
||||
protected ItemOptionDefinition PhysicalDamageOption
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.GameConfiguration.ItemOptions.First(iod => iod.PossibleOptions.Any(o => o.OptionType == ItemOptionTypes.Option && o.PowerUpDefinition?.TargetAttribute == Stats.PhysicalBaseDmg));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the wizardry damage option definition.
|
||||
/// </summary>
|
||||
protected ItemOptionDefinition WizardryDamageOption
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.GameConfiguration.ItemOptions.First(iod => iod.PossibleOptions.Any(o => o.OptionType == ItemOptionTypes.Option && o.PowerUpDefinition?.TargetAttribute == Stats.WizardryBaseDmg));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the weapons.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this._weaponDamageIncreaseTable = this.CreateItemBonusTable(DamageIncreaseByLevel, "Damage Increase (Weapons)", "The damage increase by weapon level. It increases by 3 per level, and 1 more after level 10.");
|
||||
this._staffRiseTableEven = this.CreateItemBonusTable(StaffRiseIncreaseByLevelEven, "Staff Rise (even)", "The staff rise bonus per item level for even magic power staves.");
|
||||
this._staffRiseTableOdd = this.CreateItemBonusTable(StaffRiseIncreaseByLevelOdd, "Staff Rise (odd)", "The staff rise bonus per item level for odd magic power staves.");
|
||||
|
||||
this.CreateWeapon(0, 0, 0, 0, 1, 2, true, "Kris", 6, 6, 11, 50, 20, 0, 0, 40, 40, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(0, 1, 0, 0, 1, 3, true, "Short Sword", 3, 3, 7, 20, 22, 0, 0, 60, 0, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(0, 2, 0, 0, 1, 3, true, "Rapier", 9, 9, 15, 40, 23, 0, 0, 50, 40, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(0, 3, 0, 20, 1, 3, true, "Katache", 16, 16, 26, 35, 27, 0, 0, 80, 40, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 4, 0, 21, 1, 3, true, "Sword of Assassin", 12, 12, 18, 30, 24, 0, 0, 60, 40, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 5, 0, 22, 1, 3, true, "Blade", 36, 36, 47, 30, 39, 0, 0, 80, 50, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(0, 6, 0, 20, 1, 3, true, "Gladius", 20, 20, 30, 20, 30, 0, 0, 110, 0, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(0, 7, 0, 21, 1, 3, true, "Falchion", 24, 24, 34, 25, 34, 0, 0, 120, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 8, 0, 21, 1, 3, true, "Serpent Sword", 30, 30, 40, 20, 36, 0, 0, 130, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 9, 0, 20, 2, 3, true, "Sword of Salamander", 32, 32, 46, 30, 40, 0, 0, 103, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 10, 0, 22, 2, 4, true, "Light Saber", 40, 47, 61, 25, 50, 0, 0, 80, 60, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(0, 11, 0, 20, 2, 3, true, "Legendary Sword", 44, 56, 72, 20, 54, 0, 0, 120, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 12, 0, 19, 2, 3, true, "Heliacal Sword", 56, 73, 98, 25, 66, 0, 0, 140, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(0, 13, 0, 22, 1, 3, true, "Double Blade", 48, 48, 56, 30, 43, 0, 0, 70, 70, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(0, 14, 0, 22, 1, 3, true, "Lighting Sword", 59, 59, 67, 30, 50, 0, 0, 90, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(0, 15, 0, 23, 2, 3, true, "Giant Sword", 52, 60, 85, 20, 60, 0, 0, 140, 0, 0, 0, 0, 1, 0);
|
||||
|
||||
this.CreateWeapon(1, 0, 0, 0, 1, 3, true, "Small Axe", 1, 1, 6, 20, 18, 0, 0, 50, 0, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(1, 1, 0, 0, 1, 3, true, "Hand Axe", 4, 4, 9, 30, 20, 0, 0, 70, 0, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(1, 2, 0, 19, 1, 3, true, "Double Axe", 14, 14, 24, 20, 26, 0, 0, 90, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(1, 3, 0, 19, 1, 3, true, "Tomahawk", 18, 18, 28, 30, 28, 0, 0, 100, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(1, 4, 0, 0, 1, 3, true, "Elven Axe", 26, 26, 38, 40, 32, 0, 0, 50, 70, 0, 0, 1, 0, 1);
|
||||
this.CreateWeapon(1, 5, 0, 19, 2, 3, true, "Battle Axe", 30, 36, 44, 20, 36, 0, 0, 120, 0, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(1, 6, 0, 19, 2, 3, true, "Nikkea Axe", 34, 38, 50, 30, 44, 0, 0, 130, 0, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(1, 7, 0, 19, 2, 3, true, "Larkan Axe", 46, 54, 67, 25, 55, 0, 0, 140, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(1, 8, 0, 19, 2, 3, true, "Crescent Axe", 54, 69, 89, 30, 65, 0, 0, 100, 40, 0, 0, 1, 1, 0);
|
||||
|
||||
this.CreateWeapon(2, 0, 0, 0, 1, 3, true, "Mace", 7, 7, 13, 15, 21, 0, 0, 100, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(2, 1, 0, 19, 1, 3, true, "Morning Star", 13, 13, 22, 15, 25, 0, 0, 100, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(2, 2, 0, 0, 1, 3, true, "Flail", 22, 22, 32, 15, 32, 0, 0, 80, 50, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(2, 3, 0, 19, 2, 3, true, "Great Hammer", 38, 45, 56, 15, 50, 0, 0, 150, 0, 0, 0, 0, 1, 0);
|
||||
this.CreateWeapon(2, 4, 0, 19, 2, 3, true, "Crystal Morning Star", 66, 78, 107, 30, 72, 0, 0, 130, 0, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(2, 5, 0, 23, 2, 4, true, "Crystal Sword", 72, 89, 120, 40, 76, 0, 0, 130, 70, 0, 0, 1, 1, 1);
|
||||
this.CreateWeapon(2, 6, 0, 23, 2, 4, false, "Chaos Dragon Axe", 75, 102, 130, 35, 80, 0, 0, 140, 50, 0, 0, 0, 1, 0);
|
||||
|
||||
this.CreateWeapon(3, 0, 0, 22, 2, 4, true, "Light Spear", 42, 50, 63, 25, 56, 0, 0, 60, 70, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 1, 0, 0, 2, 4, true, "Spear", 23, 30, 41, 30, 42, 0, 0, 70, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 2, 0, 0, 2, 4, true, "Dragon Lance", 15, 21, 33, 30, 34, 0, 0, 70, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 3, 0, 0, 2, 4, true, "Giant Trident", 29, 35, 43, 25, 44, 0, 0, 90, 30, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 4, 0, 20, 2, 4, true, "Serpent Spear", 46, 58, 80, 20, 58, 0, 0, 90, 30, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 5, 0, 0, 2, 4, true, "Double Poleaxe", 13, 19, 31, 30, 38, 0, 0, 70, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 6, 0, 0, 2, 4, true, "Halberd", 19, 25, 35, 30, 40, 0, 0, 70, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 7, 0, 22, 2, 4, true, "Berdysh", 37, 42, 54, 30, 54, 0, 0, 80, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 8, 0, 22, 2, 4, true, "Great Scythe", 54, 71, 92, 25, 68, 0, 0, 90, 50, 0, 0, 0, 1, 1);
|
||||
this.CreateWeapon(3, 9, 0, 22, 2, 4, true, "Bill of Balrog", 63, 76, 102, 25, 74, 0, 0, 80, 50, 0, 0, 0, 1, 1);
|
||||
|
||||
this.CreateWeapon(4, 0, 1, 24, 2, 3, true, "Short Bow", 2, 3, 5, 30, 20, 0, 0, 20, 80, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 1, 1, 24, 2, 3, true, "Bow", 8, 9, 13, 30, 24, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 2, 1, 24, 2, 3, true, "Elven Bow", 16, 17, 24, 30, 28, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 3, 1, 24, 2, 3, true, "Battle Bow", 26, 28, 37, 30, 36, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 4, 1, 24, 2, 4, true, "Tiger Bow", 40, 42, 52, 30, 43, 0, 0, 30, 100, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 5, 1, 24, 2, 4, true, "Silver Bow", 56, 59, 71, 40, 48, 0, 0, 30, 100, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 6, 1, 24, 2, 4, false, "Chaos Nature Bow", 75, 88, 106, 35, 68, 0, 0, 40, 150, 0, 0, 0, 0, 1);
|
||||
this.CreateAmmunition(4, 7, 1, 1, 2, false, "Bolt", 0, 255, 0, 0, 1);
|
||||
this.CreateWeapon(4, 8, 0, 24, 2, 2, true, "Crossbow", 4, 5, 8, 40, 22, 0, 0, 20, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 9, 0, 24, 2, 2, true, "Golden Crossbow", 12, 13, 19, 40, 26, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 10, 0, 24, 2, 2, true, "Arquebus", 20, 22, 30, 40, 31, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 11, 0, 24, 2, 3, true, "Light Crossbow", 32, 35, 44, 40, 40, 0, 0, 30, 90, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 12, 0, 24, 2, 3, true, "Serpent Crossbow", 48, 50, 61, 40, 45, 0, 0, 30, 100, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 13, 0, 24, 2, 3, true, "Bluewing Crossbow", 68, 68, 82, 40, 56, 0, 0, 40, 110, 0, 0, 0, 0, 1);
|
||||
this.CreateWeapon(4, 14, 0, 24, 2, 3, true, "Aquagold Crossbow", 72, 78, 92, 30, 60, 0, 0, 50, 130, 0, 0, 0, 0, 1);
|
||||
this.CreateAmmunition(4, 15, 0, 1, 2, false, "Arrows", 0, 255, 0, 0, 1);
|
||||
|
||||
this.CreateWeapon(5, 0, 0, 0, 1, 3, true, "Skull Staff", 6, 3, 4, 20, 20, 6, 0, 40, 0, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 1, 0, 0, 2, 3, true, "Angelic Staff", 18, 10, 12, 25, 38, 20, 0, 50, 0, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 2, 0, 0, 2, 3, true, "Serpent Staff", 30, 17, 18, 25, 50, 34, 0, 50, 0, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 3, 0, 0, 2, 4, true, "Thunder Staff", 42, 23, 25, 25, 60, 46, 0, 40, 10, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 4, 0, 0, 2, 4, true, "Gorgon Staff", 52, 29, 32, 25, 65, 58, 0, 50, 0, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 5, 0, 0, 1, 4, true, "Legendary Staff", 59, 29, 31, 25, 66, 59, 0, 50, 0, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 6, 0, 0, 1, 4, true, "Staff of Resurrection", 70, 35, 39, 25, 70, 70, 0, 60, 10, 0, 0, 1, 0, 0);
|
||||
this.CreateWeapon(5, 7, 0, 0, 2, 4, false, "Chaos Lightning Staff", 75, 47, 48, 30, 70, 94, 0, 60, 10, 0, 0, 1, 0, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the ammunition.
|
||||
/// </summary>
|
||||
/// <param name="group">The group.</param>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="slot">The slot.</param>
|
||||
/// <param name="width">The width.</param>
|
||||
/// <param name="height">The height.</param>
|
||||
/// <param name="dropsFromMonsters">if set to <c>true</c>, the item drops from monsters.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="dropLevel">The drop level.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="wizardClass">The wizard class.</param>
|
||||
/// <param name="knightClass">The knight class.</param>
|
||||
/// <param name="elfClass">The elf class.</param>
|
||||
protected void CreateAmmunition(byte @group, byte number, byte slot, byte width, byte height, bool dropsFromMonsters, string name, byte dropLevel, byte durability, int wizardClass, int knightClass, int elfClass)
|
||||
{
|
||||
var item = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(item);
|
||||
item.Name = name;
|
||||
item.Group = group;
|
||||
item.Number = number;
|
||||
item.Height = height;
|
||||
item.Width = width;
|
||||
item.DropLevel = dropLevel;
|
||||
item.MaximumItemLevel = 0;
|
||||
item.DropsFromMonsters = dropsFromMonsters;
|
||||
item.SetGuid(item.Group, item.Number);
|
||||
if (slot == 0 && knightClass > 0 && width == 1)
|
||||
{
|
||||
item.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(t => t.ItemSlots.Contains(0) && t.ItemSlots.Contains(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
item.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(t => t.ItemSlots.Contains(slot));
|
||||
}
|
||||
|
||||
item.Durability = durability;
|
||||
var qualifiedCharacterClasses = this.GameConfiguration.DetermineCharacterClasses(wizardClass == 1, knightClass == 1, elfClass == 1);
|
||||
qualifiedCharacterClasses.ToList().ForEach(item.QualifiedCharacters.Add);
|
||||
|
||||
item.IsAmmunition = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the item with the specified parameters.
|
||||
/// </summary>
|
||||
/// <param name="group">The group number.</param>
|
||||
/// <param name="number">The item number inside the group.</param>
|
||||
/// <param name="slot">The slot.</param>
|
||||
/// <param name="skillNumber">The skill number.</param>
|
||||
/// <param name="width">The width.</param>
|
||||
/// <param name="height">The height.</param>
|
||||
/// <param name="dropsFromMonsters">if set to <c>true</c>, the item drops from monsters.</param>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="dropLevel">The drop level.</param>
|
||||
/// <param name="minimumDamage">The minimum damage.</param>
|
||||
/// <param name="maximumDamage">The maximum damage.</param>
|
||||
/// <param name="attackSpeed">The attack speed.</param>
|
||||
/// <param name="durability">The durability.</param>
|
||||
/// <param name="magicPower">The magic power.</param>
|
||||
/// <param name="levelRequirement">The level requirement.</param>
|
||||
/// <param name="strengthRequirement">The strength requirement.</param>
|
||||
/// <param name="agilityRequirement">The agility requirement.</param>
|
||||
/// <param name="energyRequirement">The energy requirement.</param>
|
||||
/// <param name="vitalityRequirement">The vitality requirement.</param>
|
||||
/// <param name="wizardClass">The wizard class.</param>
|
||||
/// <param name="knightClass">The knight class.</param>
|
||||
/// <param name="elfClass">The elf class.</param>
|
||||
/// <param name="isAmmunition">If set to <c>true</c>, the item is ammunition for a weapon.</param>
|
||||
protected void CreateWeapon(
|
||||
byte @group,
|
||||
byte number,
|
||||
byte slot,
|
||||
int skillNumber,
|
||||
byte width,
|
||||
byte height,
|
||||
bool dropsFromMonsters,
|
||||
string name,
|
||||
byte dropLevel,
|
||||
int minimumDamage,
|
||||
int maximumDamage,
|
||||
int attackSpeed,
|
||||
byte durability,
|
||||
int magicPower,
|
||||
int levelRequirement,
|
||||
int strengthRequirement,
|
||||
int agilityRequirement,
|
||||
int energyRequirement,
|
||||
int vitalityRequirement,
|
||||
int wizardClass,
|
||||
int knightClass,
|
||||
int elfClass,
|
||||
bool isAmmunition = false)
|
||||
{
|
||||
var item = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(item);
|
||||
item.Name = name;
|
||||
item.Group = group;
|
||||
item.Number = number;
|
||||
|
||||
item.Height = height;
|
||||
item.Width = width;
|
||||
item.DropLevel = dropLevel;
|
||||
item.MaximumItemLevel = isAmmunition ? (byte)0 : Constants.MaximumItemLevel;
|
||||
item.DropsFromMonsters = dropsFromMonsters;
|
||||
item.SetGuid(item.Group, item.Number);
|
||||
if (slot == 0 && knightClass > 0 && width == 1)
|
||||
{
|
||||
item.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(t => t.ItemSlots.Contains(0) && t.ItemSlots.Contains(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
item.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(t => t.ItemSlots.Contains(slot));
|
||||
}
|
||||
|
||||
if (skillNumber > 0)
|
||||
{
|
||||
var itemSkill = this.GameConfiguration.Skills.First(s => s.Number == skillNumber);
|
||||
item.Skill = itemSkill;
|
||||
}
|
||||
|
||||
item.Durability = durability;
|
||||
var qualifiedCharacterClasses = this.GameConfiguration.DetermineCharacterClasses(wizardClass == 1, knightClass == 1, elfClass == 1);
|
||||
qualifiedCharacterClasses.ToList().ForEach(item.QualifiedCharacters.Add);
|
||||
|
||||
var minDamagePowerUp = this.CreateItemBasePowerUpDefinition(Stats.MinimumPhysBaseDmgByWeapon, minimumDamage, AggregateType.AddRaw);
|
||||
minDamagePowerUp.BonusPerLevelTable = this._weaponDamageIncreaseTable;
|
||||
item.BasePowerUpAttributes.Add(minDamagePowerUp);
|
||||
|
||||
var maxDamagePowerUp = this.CreateItemBasePowerUpDefinition(Stats.MaximumPhysBaseDmgByWeapon, maximumDamage, AggregateType.AddRaw);
|
||||
maxDamagePowerUp.BonusPerLevelTable = this._weaponDamageIncreaseTable;
|
||||
item.BasePowerUpAttributes.Add(maxDamagePowerUp);
|
||||
|
||||
var speedPowerUp = this.CreateItemBasePowerUpDefinition(Stats.AttackSpeedByWeapon, attackSpeed, AggregateType.AddRaw);
|
||||
item.BasePowerUpAttributes.Add(speedPowerUp);
|
||||
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.Level, levelRequirement);
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.TotalStrengthRequirementValue, strengthRequirement);
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.TotalAgilityRequirementValue, agilityRequirement);
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.TotalEnergyRequirementValue, energyRequirement);
|
||||
this.CreateItemRequirementIfNeeded(item, Stats.TotalVitalityRequirementValue, vitalityRequirement);
|
||||
|
||||
item.PossibleItemOptions.Add(this.Luck);
|
||||
|
||||
if (magicPower == 0)
|
||||
{
|
||||
item.PossibleItemOptions.Add(this.PhysicalDamageOption);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.PossibleItemOptions.Add(this.WizardryDamageOption);
|
||||
|
||||
var staffRisePowerUp = this.CreateItemBasePowerUpDefinition(Stats.StaffRise, magicPower / 2.0f, AggregateType.AddRaw);
|
||||
staffRisePowerUp.BonusPerLevelTable = magicPower % 2 == 0 ? this._staffRiseTableEven : this._staffRiseTableOdd;
|
||||
item.BasePowerUpAttributes.Add(staffRisePowerUp);
|
||||
}
|
||||
|
||||
item.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.EquippedWeaponCount, 1, AggregateType.AddRaw));
|
||||
|
||||
if (group < (int)ItemGroups.Spears && width == 1)
|
||||
{
|
||||
item.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.DoubleWieldWeaponCount, 1, AggregateType.AddRaw));
|
||||
}
|
||||
|
||||
if (group == (int)ItemGroups.Bows)
|
||||
{
|
||||
item.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.AmmunitionConsumptionRate, 1, AggregateType.AddRaw));
|
||||
}
|
||||
|
||||
if (group < (int)ItemGroups.Bows && width == 2)
|
||||
{
|
||||
item.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.IsTwoHandedWeaponEquipped, 1, AggregateType.AddRaw));
|
||||
}
|
||||
}
|
||||
}
|
||||
126
src/Persistence/Initialization/Version075/Items/Wings.cs
Normal file
126
src/Persistence/Initialization/Version075/Items/Wings.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
// <copyright file="Wings.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.Items;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for wing items.
|
||||
/// </summary>
|
||||
public class Wings : WingsInitializerBase
|
||||
{
|
||||
private ItemLevelBonusTable? _absorbByLevelTable;
|
||||
private ItemLevelBonusTable? _defenseBonusByLevelTable;
|
||||
private ItemLevelBonusTable? _damageIncreaseByLevelTable;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Wings"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Wings(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override int MaximumItemLevel => Constants.MaximumItemLevel;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes all wings.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this._absorbByLevelTable = this.CreateAbsorbBonusPerLevel();
|
||||
this._defenseBonusByLevelTable = this.CreateBonusDefensePerLevel();
|
||||
this._damageIncreaseByLevelTable = this.CreateDamageIncreaseBonusPerLevelFirstAndThirdWings();
|
||||
|
||||
this.CreateWing(0, 3, 2, "Wings of Elf", 100, 10, 200, 180, 0, 0, 1, this.BuildOptions((0, OptionType.HealthRecover)), 12, 12);
|
||||
this.CreateWing(1, 5, 3, "Wings of Heaven", 100, 10, 200, 180, 1, 0, 0, this.BuildOptions((0, OptionType.WizDamage)), 12, 12);
|
||||
this.CreateWing(2, 5, 2, "Wings of Satan", 100, 20, 200, 180, 0, 1, 0, this.BuildOptions((0, OptionType.PhysDamage)), 12, 12);
|
||||
}
|
||||
|
||||
private ItemDefinition CreateWing(byte number, byte width, byte height, string name, byte dropLevel, int defense, byte durability, int levelRequirement, int darkWizardClassLevel, int darkKnightClassLevel, int elfClassLevel, IEnumerable<IncreasableItemOption> possibleOptions, int damageIncreaseInitial, int damageAbsorbInitial)
|
||||
{
|
||||
var wing = this.CreateWing(number, width, height, name, dropLevel, defense, durability, levelRequirement, darkWizardClassLevel, darkKnightClassLevel, elfClassLevel);
|
||||
|
||||
if (damageAbsorbInitial > 0)
|
||||
{
|
||||
var powerUp = this.CreateItemBasePowerUpDefinition(Stats.DamageReceiveDecrement, 1f - (damageAbsorbInitial / 100f), AggregateType.Multiplicate);
|
||||
powerUp.BonusPerLevelTable = this._absorbByLevelTable;
|
||||
wing.BasePowerUpAttributes.Add(powerUp);
|
||||
}
|
||||
|
||||
if (damageIncreaseInitial > 0)
|
||||
{
|
||||
var powerUp = this.CreateItemBasePowerUpDefinition(Stats.AttackDamageIncrease, 1f + (damageIncreaseInitial / 100f), AggregateType.Multiplicate);
|
||||
powerUp.BonusPerLevelTable = this._damageIncreaseByLevelTable;
|
||||
wing.BasePowerUpAttributes.Add(powerUp);
|
||||
}
|
||||
|
||||
var optionDefinition = this.Context.CreateNew<ItemOptionDefinition>();
|
||||
this.GameConfiguration.ItemOptions.Add(optionDefinition);
|
||||
optionDefinition.Name = $"{name} Options";
|
||||
optionDefinition.AddChance = 0.25f;
|
||||
optionDefinition.AddsRandomly = true;
|
||||
optionDefinition.MaximumOptionsPerItem = 1;
|
||||
wing.PossibleItemOptions.Add(optionDefinition);
|
||||
foreach (var option in possibleOptions)
|
||||
{
|
||||
optionDefinition.PossibleOptions.Add(option);
|
||||
}
|
||||
|
||||
wing.PossibleItemOptions.Add(this.GameConfiguration.ItemOptions.First(iod => iod.PossibleOptions.Any(o => o?.OptionType == ItemOptionTypes.Luck)));
|
||||
return wing;
|
||||
}
|
||||
|
||||
private ItemDefinition CreateWing(byte number, byte width, byte height, string name, byte dropLevel, int defense, byte durability, int levelRequirement, int darkWizardClassLevel, int darkKnightClassLevel, int elfClassLevel)
|
||||
{
|
||||
var wing = this.Context.CreateNew<ItemDefinition>();
|
||||
this.GameConfiguration.Items.Add(wing);
|
||||
wing.Group = 12;
|
||||
wing.Number = number;
|
||||
wing.Width = width;
|
||||
wing.Height = height;
|
||||
wing.Name = name;
|
||||
wing.DropLevel = dropLevel;
|
||||
wing.MaximumItemLevel = Constants.MaximumItemLevel;
|
||||
wing.DropsFromMonsters = false;
|
||||
wing.Durability = durability;
|
||||
wing.ItemSlot = this.GameConfiguration.ItemSlotTypes.First(st => st.ItemSlots.Contains(7));
|
||||
wing.SetGuid(wing.Group, wing.Number);
|
||||
|
||||
//// TODO: each level increases the requirement by 5 Levels
|
||||
this.CreateItemRequirementIfNeeded(wing, Stats.Level, levelRequirement);
|
||||
|
||||
if (defense > 0)
|
||||
{
|
||||
var powerUp = this.CreateItemBasePowerUpDefinition(Stats.DefenseBase, defense, AggregateType.AddRaw);
|
||||
wing.BasePowerUpAttributes.Add(powerUp);
|
||||
powerUp.BonusPerLevelTable = this._defenseBonusByLevelTable;
|
||||
}
|
||||
|
||||
var classes = this.GameConfiguration.DetermineCharacterClasses(darkWizardClassLevel == 1, darkKnightClassLevel == 1, elfClassLevel == 1);
|
||||
foreach (var characterClass in classes)
|
||||
{
|
||||
wing.QualifiedCharacters.Add(characterClass);
|
||||
}
|
||||
|
||||
// add CanFly Attribute to all wings
|
||||
var canFlyPowerUp = this.Context.CreateNew<ItemBasePowerUpDefinition>();
|
||||
canFlyPowerUp.TargetAttribute = Stats.CanFly.GetPersistent(this.GameConfiguration);
|
||||
canFlyPowerUp.BaseValue = 1;
|
||||
wing.BasePowerUpAttributes.Add(canFlyPowerUp);
|
||||
|
||||
wing.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.MovementSpeed, MovementSpeedConstants.DefaultWingMovementSpeed, AggregateType.Maximum));
|
||||
wing.BasePowerUpAttributes.Add(this.CreateItemBasePowerUpDefinition(Stats.MovementSpeedUnderwater, MovementSpeedConstants.DefaultWingMovementSpeed, AggregateType.Maximum));
|
||||
|
||||
return wing;
|
||||
}
|
||||
}
|
||||
80
src/Persistence/Initialization/Version075/Maps/Arena.cs
Normal file
80
src/Persistence/Initialization/Version075/Maps/Arena.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
// <copyright file="Arena.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// Initialization for the Arena map.
|
||||
/// </summary>
|
||||
internal class Arena : Initialization.BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 6;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Arena";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Arena"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Arena(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[240], 58, 58, 140, 140, 1, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(2, this.NpcDictionary[200], 62, 62, 160, 160, 1, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(3, this.NpcDictionary[239], 67, 67, 140, 140, 1, Direction.SouthWest);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void AdditionalInitialization(GameMapDefinition mapDefinition)
|
||||
{
|
||||
var battleZone = this.Context.CreateNew<BattleZoneDefinition>();
|
||||
battleZone.SetGuid(this.MapNumber, 1);
|
||||
battleZone.Type = BattleType.Soccer;
|
||||
battleZone.LeftTeamSpawnPointX = 60;
|
||||
battleZone.LeftTeamSpawnPointY = 156;
|
||||
battleZone.RightTeamSpawnPointX = 60;
|
||||
battleZone.RightTeamSpawnPointY = 164;
|
||||
battleZone.Ground = this.CreateRectangle(1, 55, 141, 69, 180);
|
||||
battleZone.LeftGoal = this.CreateRectangle(2, 61, 139, 63, 140);
|
||||
battleZone.RightGoal = this.CreateRectangle(3, 61, 181, 63, 182);
|
||||
mapDefinition.BattleZone = battleZone;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
// no monsters to create
|
||||
}
|
||||
|
||||
private Rectangle CreateRectangle(short number, byte x1, byte y1, byte x2, byte y2)
|
||||
{
|
||||
var rectangle = this.Context.CreateNew<Rectangle>();
|
||||
rectangle.SetGuid(this.MapNumber, number);
|
||||
rectangle.X1 = x1;
|
||||
rectangle.X2 = x2;
|
||||
rectangle.Y1 = y1;
|
||||
rectangle.Y2 = y2;
|
||||
return rectangle;
|
||||
}
|
||||
}
|
||||
662
src/Persistence/Initialization/Version075/Maps/Atlans.cs
Normal file
662
src/Persistence/Initialization/Version075/Maps/Atlans.cs
Normal file
@@ -0,0 +1,662 @@
|
||||
// <copyright file="Atlans.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// Initialization for the Atlans map.
|
||||
/// </summary>
|
||||
internal class Atlans : BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 7;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Atlans";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Atlans"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Atlans(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void AdditionalInitialization(GameMapDefinition mapDefinition)
|
||||
{
|
||||
base.AdditionalInitialization(mapDefinition);
|
||||
this.AddUnderwaterMovementPowerUp();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[240], 23, 17, Direction.SouthWest); // Guard
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateMonsterSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(100, this.NpcDictionary[48], 236, 177);
|
||||
yield return this.CreateMonsterSpawn(101, this.NpcDictionary[51], 212, 96);
|
||||
yield return this.CreateMonsterSpawn(102, this.NpcDictionary[45], 21, 41);
|
||||
yield return this.CreateMonsterSpawn(103, this.NpcDictionary[45], 23, 33);
|
||||
yield return this.CreateMonsterSpawn(104, this.NpcDictionary[45], 31, 31);
|
||||
yield return this.CreateMonsterSpawn(105, this.NpcDictionary[45], 39, 23);
|
||||
yield return this.CreateMonsterSpawn(106, this.NpcDictionary[45], 41, 11);
|
||||
yield return this.CreateMonsterSpawn(107, this.NpcDictionary[45], 21, 48);
|
||||
yield return this.CreateMonsterSpawn(108, this.NpcDictionary[45], 47, 41);
|
||||
yield return this.CreateMonsterSpawn(109, this.NpcDictionary[45], 39, 63);
|
||||
yield return this.CreateMonsterSpawn(110, this.NpcDictionary[45], 72, 42);
|
||||
yield return this.CreateMonsterSpawn(111, this.NpcDictionary[45], 23, 56);
|
||||
yield return this.CreateMonsterSpawn(112, this.NpcDictionary[45], 23, 64);
|
||||
yield return this.CreateMonsterSpawn(113, this.NpcDictionary[45], 35, 70);
|
||||
yield return this.CreateMonsterSpawn(114, this.NpcDictionary[45], 29, 75);
|
||||
yield return this.CreateMonsterSpawn(115, this.NpcDictionary[45], 62, 21);
|
||||
yield return this.CreateMonsterSpawn(116, this.NpcDictionary[45], 78, 19);
|
||||
yield return this.CreateMonsterSpawn(117, this.NpcDictionary[45], 67, 36);
|
||||
yield return this.CreateMonsterSpawn(118, this.NpcDictionary[45], 24, 86);
|
||||
yield return this.CreateMonsterSpawn(119, this.NpcDictionary[45], 48, 57);
|
||||
yield return this.CreateMonsterSpawn(120, this.NpcDictionary[45], 45, 70);
|
||||
yield return this.CreateMonsterSpawn(121, this.NpcDictionary[45], 19, 125);
|
||||
yield return this.CreateMonsterSpawn(122, this.NpcDictionary[45], 49, 8);
|
||||
yield return this.CreateMonsterSpawn(123, this.NpcDictionary[45], 46, 20);
|
||||
yield return this.CreateMonsterSpawn(124, this.NpcDictionary[45], 39, 35);
|
||||
yield return this.CreateMonsterSpawn(125, this.NpcDictionary[45], 37, 50);
|
||||
yield return this.CreateMonsterSpawn(126, this.NpcDictionary[45], 20, 75);
|
||||
yield return this.CreateMonsterSpawn(127, this.NpcDictionary[45], 63, 44);
|
||||
yield return this.CreateMonsterSpawn(128, this.NpcDictionary[45], 68, 52);
|
||||
yield return this.CreateMonsterSpawn(129, this.NpcDictionary[45], 49, 64);
|
||||
yield return this.CreateMonsterSpawn(130, this.NpcDictionary[45], 29, 52);
|
||||
yield return this.CreateMonsterSpawn(131, this.NpcDictionary[46], 46, 21);
|
||||
yield return this.CreateMonsterSpawn(132, this.NpcDictionary[46], 48, 9);
|
||||
yield return this.CreateMonsterSpawn(133, this.NpcDictionary[46], 50, 65);
|
||||
yield return this.CreateMonsterSpawn(134, this.NpcDictionary[46], 51, 70);
|
||||
yield return this.CreateMonsterSpawn(135, this.NpcDictionary[46], 80, 33);
|
||||
yield return this.CreateMonsterSpawn(136, this.NpcDictionary[46], 62, 17);
|
||||
yield return this.CreateMonsterSpawn(137, this.NpcDictionary[46], 61, 11);
|
||||
yield return this.CreateMonsterSpawn(138, this.NpcDictionary[46], 69, 19);
|
||||
yield return this.CreateMonsterSpawn(139, this.NpcDictionary[46], 75, 15);
|
||||
yield return this.CreateMonsterSpawn(140, this.NpcDictionary[46], 83, 15);
|
||||
yield return this.CreateMonsterSpawn(141, this.NpcDictionary[46], 84, 21);
|
||||
yield return this.CreateMonsterSpawn(142, this.NpcDictionary[46], 67, 27);
|
||||
yield return this.CreateMonsterSpawn(143, this.NpcDictionary[46], 59, 34);
|
||||
yield return this.CreateMonsterSpawn(144, this.NpcDictionary[46], 86, 37);
|
||||
yield return this.CreateMonsterSpawn(145, this.NpcDictionary[46], 78, 44);
|
||||
yield return this.CreateMonsterSpawn(146, this.NpcDictionary[46], 71, 52);
|
||||
yield return this.CreateMonsterSpawn(147, this.NpcDictionary[46], 65, 59);
|
||||
yield return this.CreateMonsterSpawn(148, this.NpcDictionary[46], 65, 51);
|
||||
yield return this.CreateMonsterSpawn(149, this.NpcDictionary[46], 55, 44);
|
||||
yield return this.CreateMonsterSpawn(150, this.NpcDictionary[46], 40, 48);
|
||||
yield return this.CreateMonsterSpawn(151, this.NpcDictionary[46], 31, 53);
|
||||
yield return this.CreateMonsterSpawn(152, this.NpcDictionary[46], 24, 90);
|
||||
yield return this.CreateMonsterSpawn(153, this.NpcDictionary[46], 21, 100);
|
||||
yield return this.CreateMonsterSpawn(154, this.NpcDictionary[46], 25, 105);
|
||||
yield return this.CreateMonsterSpawn(155, this.NpcDictionary[46], 30, 110);
|
||||
yield return this.CreateMonsterSpawn(156, this.NpcDictionary[46], 21, 118);
|
||||
yield return this.CreateMonsterSpawn(157, this.NpcDictionary[46], 38, 117);
|
||||
yield return this.CreateMonsterSpawn(158, this.NpcDictionary[46], 141, 11);
|
||||
yield return this.CreateMonsterSpawn(159, this.NpcDictionary[46], 127, 17);
|
||||
yield return this.CreateMonsterSpawn(160, this.NpcDictionary[46], 114, 26);
|
||||
yield return this.CreateMonsterSpawn(161, this.NpcDictionary[46], 107, 18);
|
||||
yield return this.CreateMonsterSpawn(162, this.NpcDictionary[46], 104, 13);
|
||||
yield return this.CreateMonsterSpawn(163, this.NpcDictionary[46], 115, 12);
|
||||
yield return this.CreateMonsterSpawn(164, this.NpcDictionary[46], 89, 62);
|
||||
yield return this.CreateMonsterSpawn(165, this.NpcDictionary[46], 75, 76);
|
||||
yield return this.CreateMonsterSpawn(166, this.NpcDictionary[46], 69, 87);
|
||||
yield return this.CreateMonsterSpawn(167, this.NpcDictionary[46], 50, 93);
|
||||
yield return this.CreateMonsterSpawn(168, this.NpcDictionary[46], 23, 72);
|
||||
yield return this.CreateMonsterSpawn(169, this.NpcDictionary[46], 78, 23);
|
||||
yield return this.CreateMonsterSpawn(170, this.NpcDictionary[46], 70, 38);
|
||||
yield return this.CreateMonsterSpawn(171, this.NpcDictionary[46], 55, 25);
|
||||
yield return this.CreateMonsterSpawn(172, this.NpcDictionary[46], 30, 122);
|
||||
yield return this.CreateMonsterSpawn(173, this.NpcDictionary[46], 17, 126);
|
||||
yield return this.CreateMonsterSpawn(174, this.NpcDictionary[46], 122, 29);
|
||||
yield return this.CreateMonsterSpawn(175, this.NpcDictionary[46], 108, 40);
|
||||
yield return this.CreateMonsterSpawn(176, this.NpcDictionary[48], 66, 222);
|
||||
yield return this.CreateMonsterSpawn(177, this.NpcDictionary[48], 63, 218);
|
||||
yield return this.CreateMonsterSpawn(178, this.NpcDictionary[48], 57, 225);
|
||||
yield return this.CreateMonsterSpawn(179, this.NpcDictionary[48], 171, 162);
|
||||
yield return this.CreateMonsterSpawn(180, this.NpcDictionary[48], 175, 169);
|
||||
yield return this.CreateMonsterSpawn(181, this.NpcDictionary[48], 178, 174);
|
||||
yield return this.CreateMonsterSpawn(182, this.NpcDictionary[48], 173, 179);
|
||||
yield return this.CreateMonsterSpawn(183, this.NpcDictionary[48], 171, 187);
|
||||
yield return this.CreateMonsterSpawn(184, this.NpcDictionary[48], 165, 193);
|
||||
yield return this.CreateMonsterSpawn(185, this.NpcDictionary[48], 159, 198);
|
||||
yield return this.CreateMonsterSpawn(186, this.NpcDictionary[48], 152, 201);
|
||||
yield return this.CreateMonsterSpawn(187, this.NpcDictionary[48], 144, 201);
|
||||
yield return this.CreateMonsterSpawn(188, this.NpcDictionary[48], 137, 205);
|
||||
yield return this.CreateMonsterSpawn(189, this.NpcDictionary[48], 124, 206);
|
||||
yield return this.CreateMonsterSpawn(190, this.NpcDictionary[48], 115, 210);
|
||||
yield return this.CreateMonsterSpawn(191, this.NpcDictionary[48], 104, 211);
|
||||
yield return this.CreateMonsterSpawn(192, this.NpcDictionary[48], 94, 210);
|
||||
yield return this.CreateMonsterSpawn(193, this.NpcDictionary[48], 87, 214);
|
||||
yield return this.CreateMonsterSpawn(194, this.NpcDictionary[48], 76, 215);
|
||||
yield return this.CreateMonsterSpawn(195, this.NpcDictionary[48], 47, 224);
|
||||
yield return this.CreateMonsterSpawn(196, this.NpcDictionary[48], 46, 217);
|
||||
yield return this.CreateMonsterSpawn(197, this.NpcDictionary[48], 29, 226);
|
||||
yield return this.CreateMonsterSpawn(198, this.NpcDictionary[48], 22, 213);
|
||||
yield return this.CreateMonsterSpawn(199, this.NpcDictionary[48], 24, 204);
|
||||
yield return this.CreateMonsterSpawn(200, this.NpcDictionary[48], 34, 200);
|
||||
yield return this.CreateMonsterSpawn(201, this.NpcDictionary[48], 35, 209);
|
||||
yield return this.CreateMonsterSpawn(202, this.NpcDictionary[48], 40, 210);
|
||||
yield return this.CreateMonsterSpawn(203, this.NpcDictionary[48], 45, 205);
|
||||
yield return this.CreateMonsterSpawn(204, this.NpcDictionary[48], 47, 211);
|
||||
yield return this.CreateMonsterSpawn(205, this.NpcDictionary[48], 37, 232);
|
||||
yield return this.CreateMonsterSpawn(206, this.NpcDictionary[48], 226, 52);
|
||||
yield return this.CreateMonsterSpawn(207, this.NpcDictionary[48], 22, 230);
|
||||
yield return this.CreateMonsterSpawn(208, this.NpcDictionary[48], 41, 224);
|
||||
yield return this.CreateMonsterSpawn(209, this.NpcDictionary[48], 82, 215);
|
||||
yield return this.CreateMonsterSpawn(210, this.NpcDictionary[48], 167, 156);
|
||||
yield return this.CreateMonsterSpawn(211, this.NpcDictionary[48], 177, 146);
|
||||
yield return this.CreateMonsterSpawn(212, this.NpcDictionary[52], 156, 156);
|
||||
yield return this.CreateMonsterSpawn(213, this.NpcDictionary[52], 162, 149);
|
||||
yield return this.CreateMonsterSpawn(214, this.NpcDictionary[52], 152, 169);
|
||||
yield return this.CreateMonsterSpawn(215, this.NpcDictionary[52], 72, 128);
|
||||
yield return this.CreateMonsterSpawn(216, this.NpcDictionary[52], 70, 138);
|
||||
yield return this.CreateMonsterSpawn(217, this.NpcDictionary[52], 61, 147);
|
||||
yield return this.CreateMonsterSpawn(218, this.NpcDictionary[52], 49, 158);
|
||||
yield return this.CreateMonsterSpawn(219, this.NpcDictionary[52], 33, 169);
|
||||
yield return this.CreateMonsterSpawn(220, this.NpcDictionary[52], 22, 173);
|
||||
yield return this.CreateMonsterSpawn(221, this.NpcDictionary[52], 55, 181);
|
||||
yield return this.CreateMonsterSpawn(222, this.NpcDictionary[52], 67, 186);
|
||||
yield return this.CreateMonsterSpawn(223, this.NpcDictionary[52], 73, 180);
|
||||
yield return this.CreateMonsterSpawn(224, this.NpcDictionary[52], 89, 184);
|
||||
yield return this.CreateMonsterSpawn(225, this.NpcDictionary[52], 101, 183);
|
||||
yield return this.CreateMonsterSpawn(226, this.NpcDictionary[52], 111, 183);
|
||||
yield return this.CreateMonsterSpawn(227, this.NpcDictionary[52], 122, 178);
|
||||
yield return this.CreateMonsterSpawn(228, this.NpcDictionary[52], 129, 171);
|
||||
yield return this.CreateMonsterSpawn(229, this.NpcDictionary[52], 138, 167);
|
||||
yield return this.CreateMonsterSpawn(230, this.NpcDictionary[52], 147, 164);
|
||||
yield return this.CreateMonsterSpawn(231, this.NpcDictionary[52], 170, 145);
|
||||
yield return this.CreateMonsterSpawn(232, this.NpcDictionary[52], 167, 140);
|
||||
yield return this.CreateMonsterSpawn(233, this.NpcDictionary[52], 53, 220);
|
||||
yield return this.CreateMonsterSpawn(234, this.NpcDictionary[52], 41, 222);
|
||||
yield return this.CreateMonsterSpawn(235, this.NpcDictionary[52], 29, 231);
|
||||
yield return this.CreateMonsterSpawn(236, this.NpcDictionary[52], 22, 232);
|
||||
yield return this.CreateMonsterSpawn(237, this.NpcDictionary[52], 27, 209);
|
||||
yield return this.CreateMonsterSpawn(238, this.NpcDictionary[52], 36, 205);
|
||||
yield return this.CreateMonsterSpawn(239, this.NpcDictionary[52], 109, 211);
|
||||
yield return this.CreateMonsterSpawn(240, this.NpcDictionary[52], 131, 207);
|
||||
yield return this.CreateMonsterSpawn(241, this.NpcDictionary[52], 155, 196);
|
||||
yield return this.CreateMonsterSpawn(242, this.NpcDictionary[52], 167, 154);
|
||||
yield return this.CreateMonsterSpawn(243, this.NpcDictionary[52], 177, 19);
|
||||
yield return this.CreateMonsterSpawn(244, this.NpcDictionary[52], 118, 167);
|
||||
yield return this.CreateMonsterSpawn(245, this.NpcDictionary[52], 111, 175);
|
||||
yield return this.CreateMonsterSpawn(246, this.NpcDictionary[52], 63, 178);
|
||||
yield return this.CreateMonsterSpawn(247, this.NpcDictionary[52], 162, 141);
|
||||
yield return this.CreateMonsterSpawn(248, this.NpcDictionary[52], 138, 176);
|
||||
yield return this.CreateMonsterSpawn(249, this.NpcDictionary[47], 41, 109);
|
||||
yield return this.CreateMonsterSpawn(250, this.NpcDictionary[47], 49, 100);
|
||||
yield return this.CreateMonsterSpawn(251, this.NpcDictionary[47], 54, 89);
|
||||
yield return this.CreateMonsterSpawn(252, this.NpcDictionary[47], 62, 87);
|
||||
yield return this.CreateMonsterSpawn(253, this.NpcDictionary[47], 71, 82);
|
||||
yield return this.CreateMonsterSpawn(254, this.NpcDictionary[47], 79, 70);
|
||||
yield return this.CreateMonsterSpawn(255, this.NpcDictionary[47], 85, 64);
|
||||
yield return this.CreateMonsterSpawn(256, this.NpcDictionary[47], 94, 60);
|
||||
yield return this.CreateMonsterSpawn(257, this.NpcDictionary[47], 101, 50);
|
||||
yield return this.CreateMonsterSpawn(258, this.NpcDictionary[47], 106, 48);
|
||||
yield return this.CreateMonsterSpawn(259, this.NpcDictionary[47], 112, 45);
|
||||
yield return this.CreateMonsterSpawn(260, this.NpcDictionary[47], 109, 38);
|
||||
yield return this.CreateMonsterSpawn(261, this.NpcDictionary[47], 118, 37);
|
||||
yield return this.CreateMonsterSpawn(262, this.NpcDictionary[47], 122, 29);
|
||||
yield return this.CreateMonsterSpawn(263, this.NpcDictionary[47], 119, 20);
|
||||
yield return this.CreateMonsterSpawn(264, this.NpcDictionary[47], 124, 14);
|
||||
yield return this.CreateMonsterSpawn(265, this.NpcDictionary[47], 133, 14);
|
||||
yield return this.CreateMonsterSpawn(266, this.NpcDictionary[47], 150, 14);
|
||||
yield return this.CreateMonsterSpawn(267, this.NpcDictionary[47], 161, 11);
|
||||
yield return this.CreateMonsterSpawn(268, this.NpcDictionary[47], 166, 16);
|
||||
yield return this.CreateMonsterSpawn(269, this.NpcDictionary[47], 171, 18);
|
||||
yield return this.CreateMonsterSpawn(270, this.NpcDictionary[47], 182, 14);
|
||||
yield return this.CreateMonsterSpawn(271, this.NpcDictionary[47], 190, 24);
|
||||
yield return this.CreateMonsterSpawn(272, this.NpcDictionary[47], 196, 27);
|
||||
yield return this.CreateMonsterSpawn(273, this.NpcDictionary[47], 200, 17);
|
||||
yield return this.CreateMonsterSpawn(274, this.NpcDictionary[47], 208, 9);
|
||||
yield return this.CreateMonsterSpawn(275, this.NpcDictionary[47], 222, 48);
|
||||
yield return this.CreateMonsterSpawn(276, this.NpcDictionary[47], 222, 14);
|
||||
yield return this.CreateMonsterSpawn(277, this.NpcDictionary[47], 117, 74);
|
||||
yield return this.CreateMonsterSpawn(278, this.NpcDictionary[47], 139, 61);
|
||||
yield return this.CreateMonsterSpawn(279, this.NpcDictionary[47], 152, 61);
|
||||
yield return this.CreateMonsterSpawn(280, this.NpcDictionary[47], 172, 55);
|
||||
yield return this.CreateMonsterSpawn(281, this.NpcDictionary[47], 189, 56);
|
||||
yield return this.CreateMonsterSpawn(282, this.NpcDictionary[47], 226, 46);
|
||||
yield return this.CreateMonsterSpawn(283, this.NpcDictionary[47], 240, 11);
|
||||
yield return this.CreateMonsterSpawn(284, this.NpcDictionary[47], 227, 16);
|
||||
yield return this.CreateMonsterSpawn(285, this.NpcDictionary[47], 152, 22);
|
||||
yield return this.CreateMonsterSpawn(286, this.NpcDictionary[47], 142, 15);
|
||||
yield return this.CreateMonsterSpawn(287, this.NpcDictionary[47], 128, 22);
|
||||
yield return this.CreateMonsterSpawn(288, this.NpcDictionary[47], 116, 9);
|
||||
yield return this.CreateMonsterSpawn(289, this.NpcDictionary[47], 113, 27);
|
||||
yield return this.CreateMonsterSpawn(290, this.NpcDictionary[47], 33, 108);
|
||||
yield return this.CreateMonsterSpawn(291, this.NpcDictionary[47], 35, 118);
|
||||
yield return this.CreateMonsterSpawn(292, this.NpcDictionary[51], 228, 16);
|
||||
yield return this.CreateMonsterSpawn(293, this.NpcDictionary[51], 237, 17);
|
||||
yield return this.CreateMonsterSpawn(294, this.NpcDictionary[51], 237, 26);
|
||||
yield return this.CreateMonsterSpawn(295, this.NpcDictionary[51], 238, 40);
|
||||
yield return this.CreateMonsterSpawn(296, this.NpcDictionary[51], 235, 48);
|
||||
yield return this.CreateMonsterSpawn(297, this.NpcDictionary[51], 240, 51);
|
||||
yield return this.CreateMonsterSpawn(298, this.NpcDictionary[51], 206, 55);
|
||||
yield return this.CreateMonsterSpawn(299, this.NpcDictionary[51], 200, 49);
|
||||
yield return this.CreateMonsterSpawn(300, this.NpcDictionary[51], 193, 52);
|
||||
yield return this.CreateMonsterSpawn(301, this.NpcDictionary[51], 184, 52);
|
||||
yield return this.CreateMonsterSpawn(302, this.NpcDictionary[51], 178, 58);
|
||||
yield return this.CreateMonsterSpawn(303, this.NpcDictionary[51], 170, 61);
|
||||
yield return this.CreateMonsterSpawn(304, this.NpcDictionary[51], 156, 59);
|
||||
yield return this.CreateMonsterSpawn(305, this.NpcDictionary[51], 144, 63);
|
||||
yield return this.CreateMonsterSpawn(306, this.NpcDictionary[51], 133, 61);
|
||||
yield return this.CreateMonsterSpawn(307, this.NpcDictionary[51], 133, 70);
|
||||
yield return this.CreateMonsterSpawn(308, this.NpcDictionary[51], 125, 78);
|
||||
yield return this.CreateMonsterSpawn(309, this.NpcDictionary[51], 118, 85);
|
||||
yield return this.CreateMonsterSpawn(310, this.NpcDictionary[51], 124, 90);
|
||||
yield return this.CreateMonsterSpawn(311, this.NpcDictionary[51], 116, 98);
|
||||
yield return this.CreateMonsterSpawn(312, this.NpcDictionary[51], 106, 101);
|
||||
yield return this.CreateMonsterSpawn(313, this.NpcDictionary[51], 99, 108);
|
||||
yield return this.CreateMonsterSpawn(314, this.NpcDictionary[51], 91, 115);
|
||||
yield return this.CreateMonsterSpawn(315, this.NpcDictionary[51], 81, 123);
|
||||
yield return this.CreateMonsterSpawn(316, this.NpcDictionary[51], 126, 167);
|
||||
yield return this.CreateMonsterSpawn(317, this.NpcDictionary[51], 111, 174);
|
||||
yield return this.CreateMonsterSpawn(318, this.NpcDictionary[51], 90, 177);
|
||||
yield return this.CreateMonsterSpawn(319, this.NpcDictionary[51], 76, 180);
|
||||
yield return this.CreateMonsterSpawn(320, this.NpcDictionary[51], 62, 178);
|
||||
yield return this.CreateMonsterSpawn(321, this.NpcDictionary[51], 42, 178);
|
||||
yield return this.CreateMonsterSpawn(322, this.NpcDictionary[51], 27, 161);
|
||||
yield return this.CreateMonsterSpawn(323, this.NpcDictionary[51], 42, 152);
|
||||
yield return this.CreateMonsterSpawn(324, this.NpcDictionary[51], 19, 159);
|
||||
yield return this.CreateMonsterSpawn(325, this.NpcDictionary[51], 62, 140);
|
||||
yield return this.CreateMonsterSpawn(326, this.NpcDictionary[51], 70, 133);
|
||||
yield return this.CreateMonsterSpawn(327, this.NpcDictionary[51], 168, 54);
|
||||
|
||||
// yield return this.CreateMonsterSpawn(this2NpcDictionary[51], 7, 52);
|
||||
yield return this.CreateMonsterSpawn(330, this.NpcDictionary[51], 225, 45);
|
||||
yield return this.CreateMonsterSpawn(331, this.NpcDictionary[51], 207, 9);
|
||||
yield return this.CreateMonsterSpawn(332, this.NpcDictionary[51], 154, 69);
|
||||
yield return this.CreateMonsterSpawn(333, this.NpcDictionary[51], 111, 82);
|
||||
yield return this.CreateMonsterSpawn(334, this.NpcDictionary[51], 81, 116);
|
||||
yield return this.CreateMonsterSpawn(335, this.NpcDictionary[51], 72, 125);
|
||||
yield return this.CreateMonsterSpawn(336, this.NpcDictionary[51], 122, 66);
|
||||
yield return this.CreateMonsterSpawn(337, this.NpcDictionary[49], 19, 230);
|
||||
yield return this.CreateMonsterSpawn(338, this.NpcDictionary[49], 24, 227);
|
||||
yield return this.CreateMonsterSpawn(339, this.NpcDictionary[51], 219, 56);
|
||||
yield return this.CreateMonsterSpawn(340, this.NpcDictionary[51], 215, 65);
|
||||
yield return this.CreateMonsterSpawn(341, this.NpcDictionary[51], 232, 55);
|
||||
yield return this.CreateMonsterSpawn(342, this.NpcDictionary[51], 231, 64);
|
||||
yield return this.CreateMonsterSpawn(343, this.NpcDictionary[51], 238, 71);
|
||||
yield return this.CreateMonsterSpawn(344, this.NpcDictionary[51], 229, 74);
|
||||
yield return this.CreateMonsterSpawn(345, this.NpcDictionary[51], 217, 75);
|
||||
yield return this.CreateMonsterSpawn(346, this.NpcDictionary[51], 225, 81);
|
||||
yield return this.CreateMonsterSpawn(347, this.NpcDictionary[51], 215, 86);
|
||||
yield return this.CreateMonsterSpawn(348, this.NpcDictionary[51], 223, 89);
|
||||
yield return this.CreateMonsterSpawn(349, this.NpcDictionary[51], 218, 101);
|
||||
yield return this.CreateMonsterSpawn(350, this.NpcDictionary[51], 232, 95);
|
||||
yield return this.CreateMonsterSpawn(351, this.NpcDictionary[52], 223, 70);
|
||||
yield return this.CreateMonsterSpawn(352, this.NpcDictionary[52], 211, 59);
|
||||
yield return this.CreateMonsterSpawn(353, this.NpcDictionary[52], 232, 86);
|
||||
yield return this.CreateMonsterSpawn(354, this.NpcDictionary[52], 208, 104);
|
||||
yield return this.CreateMonsterSpawn(355, this.NpcDictionary[52], 235, 106);
|
||||
yield return this.CreateMonsterSpawn(356, this.NpcDictionary[52], 224, 108);
|
||||
yield return this.CreateMonsterSpawn(357, this.NpcDictionary[48], 219, 124);
|
||||
yield return this.CreateMonsterSpawn(358, this.NpcDictionary[51], 225, 117);
|
||||
yield return this.CreateMonsterSpawn(359, this.NpcDictionary[48], 227, 123);
|
||||
yield return this.CreateMonsterSpawn(360, this.NpcDictionary[48], 219, 133);
|
||||
yield return this.CreateMonsterSpawn(361, this.NpcDictionary[48], 226, 134);
|
||||
yield return this.CreateMonsterSpawn(362, this.NpcDictionary[52], 224, 142);
|
||||
yield return this.CreateMonsterSpawn(363, this.NpcDictionary[48], 226, 154);
|
||||
yield return this.CreateMonsterSpawn(364, this.NpcDictionary[48], 221, 150);
|
||||
yield return this.CreateMonsterSpawn(365, this.NpcDictionary[48], 220, 168);
|
||||
yield return this.CreateMonsterSpawn(366, this.NpcDictionary[48], 232, 166);
|
||||
yield return this.CreateMonsterSpawn(367, this.NpcDictionary[48], 231, 176);
|
||||
yield return this.CreateMonsterSpawn(368, this.NpcDictionary[48], 217, 197);
|
||||
yield return this.CreateMonsterSpawn(369, this.NpcDictionary[48], 215, 182);
|
||||
yield return this.CreateMonsterSpawn(370, this.NpcDictionary[49], 211, 192);
|
||||
yield return this.CreateMonsterSpawn(371, this.NpcDictionary[49], 229, 203);
|
||||
yield return this.CreateMonsterSpawn(372, this.NpcDictionary[52], 208, 183);
|
||||
yield return this.CreateMonsterSpawn(373, this.NpcDictionary[52], 215, 174);
|
||||
yield return this.CreateMonsterSpawn(374, this.NpcDictionary[48], 222, 190);
|
||||
yield return this.CreateMonsterSpawn(375, this.NpcDictionary[48], 229, 190);
|
||||
yield return this.CreateMonsterSpawn(376, this.NpcDictionary[52], 230, 181);
|
||||
yield return this.CreateMonsterSpawn(377, this.NpcDictionary[52], 226, 161);
|
||||
yield return this.CreateMonsterSpawn(378, this.NpcDictionary[52], 208, 198);
|
||||
yield return this.CreateMonsterSpawn(379, this.NpcDictionary[48], 232, 206);
|
||||
yield return this.CreateMonsterSpawn(380, this.NpcDictionary[48], 231, 196);
|
||||
yield return this.CreateMonsterSpawn(381, this.NpcDictionary[48], 223, 202);
|
||||
yield return this.CreateMonsterSpawn(382, this.NpcDictionary[48], 224, 184);
|
||||
yield return this.CreateMonsterSpawn(383, this.NpcDictionary[48], 230, 171);
|
||||
yield return this.CreateMonsterSpawn(384, this.NpcDictionary[48], 221, 158);
|
||||
yield return this.CreateMonsterSpawn(385, this.NpcDictionary[48], 233, 124);
|
||||
yield return this.CreateMonsterSpawn(386, this.NpcDictionary[48], 232, 102);
|
||||
yield return this.CreateMonsterSpawn(387, this.NpcDictionary[52], 200, 103);
|
||||
yield return this.CreateMonsterSpawn(388, this.NpcDictionary[52], 192, 101);
|
||||
yield return this.CreateMonsterSpawn(389, this.NpcDictionary[52], 179, 92);
|
||||
yield return this.CreateMonsterSpawn(390, this.NpcDictionary[52], 187, 94);
|
||||
yield return this.CreateMonsterSpawn(391, this.NpcDictionary[52], 177, 101);
|
||||
yield return this.CreateMonsterSpawn(392, this.NpcDictionary[52], 166, 117);
|
||||
yield return this.CreateMonsterSpawn(393, this.NpcDictionary[52], 159, 112);
|
||||
yield return this.CreateMonsterSpawn(394, this.NpcDictionary[52], 156, 122);
|
||||
yield return this.CreateMonsterSpawn(395, this.NpcDictionary[52], 173, 109);
|
||||
yield return this.CreateMonsterSpawn(396, this.NpcDictionary[52], 167, 107);
|
||||
yield return this.CreateMonsterSpawn(397, this.NpcDictionary[52], 150, 120);
|
||||
yield return this.CreateMonsterSpawn(398, this.NpcDictionary[52], 142, 125);
|
||||
yield return this.CreateMonsterSpawn(399, this.NpcDictionary[51], 136, 129);
|
||||
yield return this.CreateMonsterSpawn(400, this.NpcDictionary[52], 129, 130);
|
||||
yield return this.CreateMonsterSpawn(401, this.NpcDictionary[52], 117, 130);
|
||||
yield return this.CreateMonsterSpawn(402, this.NpcDictionary[52], 121, 135);
|
||||
yield return this.CreateMonsterSpawn(403, this.NpcDictionary[52], 144, 109);
|
||||
yield return this.CreateMonsterSpawn(404, this.NpcDictionary[52], 122, 144);
|
||||
yield return this.CreateMonsterSpawn(405, this.NpcDictionary[52], 112, 137);
|
||||
yield return this.CreateMonsterSpawn(406, this.NpcDictionary[52], 101, 147);
|
||||
yield return this.CreateMonsterSpawn(407, this.NpcDictionary[52], 97, 142);
|
||||
yield return this.CreateMonsterSpawn(408, this.NpcDictionary[52], 144, 132);
|
||||
yield return this.CreateMonsterSpawn(409, this.NpcDictionary[52], 93, 136);
|
||||
yield return this.CreateMonsterSpawn(410, this.NpcDictionary[52], 90, 148);
|
||||
yield return this.CreateMonsterSpawn(411, this.NpcDictionary[52], 124, 125);
|
||||
yield return this.CreateMonsterSpawn(412, this.NpcDictionary[52], 87, 132);
|
||||
yield return this.CreateMonsterSpawn(413, this.NpcDictionary[52], 86, 140);
|
||||
yield return this.CreateMonsterSpawn(414, this.NpcDictionary[52], 78, 145);
|
||||
yield return this.CreateMonsterSpawn(415, this.NpcDictionary[52], 79, 136);
|
||||
yield return this.CreateMonsterSpawn(416, this.NpcDictionary[52], 67, 147);
|
||||
yield return this.CreateMonsterSpawn(417, this.NpcDictionary[52], 71, 140);
|
||||
yield return this.CreateMonsterSpawn(418, this.NpcDictionary[52], 105, 137);
|
||||
yield return this.CreateMonsterSpawn(419, this.NpcDictionary[51], 83, 155);
|
||||
yield return this.CreateMonsterSpawn(420, this.NpcDictionary[52], 81, 164);
|
||||
yield return this.CreateMonsterSpawn(421, this.NpcDictionary[52], 70, 168);
|
||||
yield return this.CreateMonsterSpawn(422, this.NpcDictionary[52], 76, 174);
|
||||
yield return this.CreateMonsterSpawn(423, this.NpcDictionary[52], 85, 185);
|
||||
yield return this.CreateMonsterSpawn(424, this.NpcDictionary[52], 87, 175);
|
||||
yield return this.CreateMonsterSpawn(425, this.NpcDictionary[51], 65, 187);
|
||||
yield return this.CreateMonsterSpawn(426, this.NpcDictionary[51], 64, 159);
|
||||
yield return this.CreateMonsterSpawn(427, this.NpcDictionary[51], 186, 99);
|
||||
yield return this.CreateMonsterSpawn(428, this.NpcDictionary[51], 185, 90);
|
||||
yield return this.CreateMonsterSpawn(429, this.NpcDictionary[51], 147, 114);
|
||||
yield return this.CreateMonsterSpawn(430, this.NpcDictionary[51], 84, 170);
|
||||
yield return this.CreateMonsterSpawn(431, this.NpcDictionary[48], 15, 234);
|
||||
yield return this.CreateMonsterSpawn(432, this.NpcDictionary[48], 20, 237);
|
||||
yield return this.CreateMonsterSpawn(433, this.NpcDictionary[48], 34, 237);
|
||||
yield return this.CreateMonsterSpawn(434, this.NpcDictionary[48], 47, 231);
|
||||
yield return this.CreateMonsterSpawn(435, this.NpcDictionary[48], 54, 232);
|
||||
yield return this.CreateMonsterSpawn(436, this.NpcDictionary[48], 20, 218);
|
||||
yield return this.CreateMonsterSpawn(437, this.NpcDictionary[48], 34, 176);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 45;
|
||||
monster.Designation = "Bahamut";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(8 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 43 },
|
||||
{ Stats.MaximumHealth, 2400 },
|
||||
{ Stats.MinimumPhysBaseDmg, 130 },
|
||||
{ Stats.MaximumPhysBaseDmg, 140 },
|
||||
{ Stats.DefenseBase, 65 },
|
||||
{ Stats.AttackRatePvm, 215 },
|
||||
{ Stats.DefenseRatePvm, 52 },
|
||||
{ Stats.PoisonResistance, 1f / 255 },
|
||||
{ Stats.IceResistance, 1f / 255 },
|
||||
{ Stats.WaterResistance, 1f / 255 },
|
||||
{ Stats.FireResistance, 1f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 46;
|
||||
monster.Designation = "Vepar";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(8 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.EnergyBall);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 45 },
|
||||
{ Stats.MaximumHealth, 2800 },
|
||||
{ Stats.MinimumPhysBaseDmg, 135 },
|
||||
{ Stats.MaximumPhysBaseDmg, 145 },
|
||||
{ Stats.DefenseBase, 70 },
|
||||
{ Stats.AttackRatePvm, 225 },
|
||||
{ Stats.DefenseRatePvm, 58 },
|
||||
{ Stats.PoisonResistance, 2f / 255 },
|
||||
{ Stats.IceResistance, 2f / 255 },
|
||||
{ Stats.WaterResistance, 3f / 255 },
|
||||
{ Stats.FireResistance, 2f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 47;
|
||||
monster.Designation = "Valkyrie";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 5;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1800 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(8 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 46 },
|
||||
{ Stats.MaximumHealth, 3200 },
|
||||
{ Stats.MinimumPhysBaseDmg, 140 },
|
||||
{ Stats.MaximumPhysBaseDmg, 150 },
|
||||
{ Stats.DefenseBase, 75 },
|
||||
{ Stats.AttackRatePvm, 230 },
|
||||
{ Stats.DefenseRatePvm, 64 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 2f / 255 },
|
||||
{ Stats.WaterResistance, 2f / 255 },
|
||||
{ Stats.FireResistance, 2f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 48;
|
||||
monster.Designation = "Lizard King";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 3;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(15 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Lightning);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 70 },
|
||||
{ Stats.MaximumHealth, 9000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 240 },
|
||||
{ Stats.MaximumPhysBaseDmg, 270 },
|
||||
{ Stats.DefenseBase, 180 },
|
||||
{ Stats.AttackRatePvm, 350 },
|
||||
{ Stats.DefenseRatePvm, 115 },
|
||||
{ Stats.PoisonResistance, 7f / 255 },
|
||||
{ Stats.IceResistance, 7f / 255 },
|
||||
{ Stats.WaterResistance, 7f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 49;
|
||||
monster.Designation = "Hydra";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(150 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.MonsterSkill);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 74 },
|
||||
{ Stats.MaximumHealth, 19000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 250 },
|
||||
{ Stats.MaximumPhysBaseDmg, 310 },
|
||||
{ Stats.DefenseBase, 200 },
|
||||
{ Stats.AttackRatePvm, 430 },
|
||||
{ Stats.DefenseRatePvm, 125 },
|
||||
{ Stats.PoisonResistance, 12f / 255 },
|
||||
{ Stats.IceResistance, 12f / 255 },
|
||||
{ Stats.WaterResistance, 12f / 255 },
|
||||
{ Stats.FireResistance, 12f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 50;
|
||||
monster.Designation = "Sea Worm";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(150 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 74 },
|
||||
{ Stats.MaximumHealth, 19000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 250 },
|
||||
{ Stats.MaximumPhysBaseDmg, 310 },
|
||||
{ Stats.DefenseBase, 200 },
|
||||
{ Stats.AttackRatePvm, 430 },
|
||||
{ Stats.DefenseRatePvm, 125 },
|
||||
{ Stats.PoisonResistance, 12f / 255 },
|
||||
{ Stats.IceResistance, 12f / 255 },
|
||||
{ Stats.WaterResistance, 12f / 255 },
|
||||
{ Stats.FireResistance, 12f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 51;
|
||||
monster.Designation = "Great Bahamut";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 2;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(15 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 66 },
|
||||
{ Stats.MaximumHealth, 7000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 210 },
|
||||
{ Stats.MaximumPhysBaseDmg, 230 },
|
||||
{ Stats.DefenseBase, 150 },
|
||||
{ Stats.AttackRatePvm, 330 },
|
||||
{ Stats.DefenseRatePvm, 98 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 6f / 255 },
|
||||
{ Stats.WaterResistance, 6f / 255 },
|
||||
{ Stats.FireResistance, 6f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 52;
|
||||
monster.Designation = "Silver Valkyrie";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(15 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Ice);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 68 },
|
||||
{ Stats.MaximumHealth, 8000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 230 },
|
||||
{ Stats.MaximumPhysBaseDmg, 260 },
|
||||
{ Stats.DefenseBase, 170 },
|
||||
{ Stats.AttackRatePvm, 340 },
|
||||
{ Stats.DefenseRatePvm, 110 },
|
||||
{ Stats.PoisonResistance, 7f / 255 },
|
||||
{ Stats.IceResistance, 7f / 255 },
|
||||
{ Stats.WaterResistance, 7f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// <copyright file="BaseMapInitializer.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// Base class for a map initializer which provides some common basic functionality.
|
||||
/// </summary>
|
||||
internal abstract class BaseMapInitializer : Initialization.BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BaseMapInitializer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
protected BaseMapInitializer(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the version prefix for Terrain resources.
|
||||
/// </summary>
|
||||
protected override string TerrainVersionPrefix => "075_";
|
||||
}
|
||||
286
src/Persistence/Initialization/Version075/Maps/Devias.cs
Normal file
286
src/Persistence/Initialization/Version075/Maps/Devias.cs
Normal file
@@ -0,0 +1,286 @@
|
||||
// <copyright file="Devias.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization for the Devias map.
|
||||
/// </summary>
|
||||
internal class Devias : BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The number of this map.
|
||||
/// </summary>
|
||||
internal const byte Number = 2;
|
||||
|
||||
/// <summary>
|
||||
/// The name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Devias";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Devias"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Devias(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[244], 226, 25, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(2, this.NpcDictionary[245], 225, 41, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(3, this.NpcDictionary[246], 186, 47, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(4, this.NpcDictionary[247], 224, 79, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(5, this.NpcDictionary[247], 219, 79, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(6, this.NpcDictionary[247], 169, 45, Direction.NorthWest);
|
||||
yield return this.CreateMonsterSpawn(7, this.NpcDictionary[247], 169, 39, Direction.NorthWest);
|
||||
yield return this.CreateMonsterSpawn(8, this.NpcDictionary[241], 215, 45, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(9, this.NpcDictionary[240], 218, 63, Direction.South);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateMonsterSpawns()
|
||||
{
|
||||
// Monsters:
|
||||
yield return this.CreateMonsterSpawn(100, this.NpcDictionary[20], 194, 194, 165, 165, 10);
|
||||
yield return this.CreateMonsterSpawn(101, this.NpcDictionary[20], 36, 36, 25, 25, 10);
|
||||
yield return this.CreateMonsterSpawn(102, this.NpcDictionary[20], 210, 242, 210, 220, 15);
|
||||
yield return this.CreateMonsterSpawn(103, this.NpcDictionary[20], 0, 251, 128, 245, 200);
|
||||
yield return this.CreateMonsterSpawn(104, this.NpcDictionary[25], 0, 128, 128, 245, 75);
|
||||
yield return this.CreateMonsterSpawn(105, this.NpcDictionary[23], 0, 128, 0, 128, 75);
|
||||
yield return this.CreateMonsterSpawn(106, this.NpcDictionary[22], 0, 128, 0, 128, 75);
|
||||
yield return this.CreateMonsterSpawn(107, this.NpcDictionary[24], 128, 251, 0, 128, 65);
|
||||
yield return this.CreateMonsterSpawn(108, this.NpcDictionary[21], 128, 251, 0, 128, 35);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 19;
|
||||
monster.Designation = "Yeti";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 6;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.EnergyBall);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 30 },
|
||||
{ Stats.MaximumHealth, 900 },
|
||||
{ Stats.MinimumPhysBaseDmg, 105 },
|
||||
{ Stats.MaximumPhysBaseDmg, 110 },
|
||||
{ Stats.DefenseBase, 37 },
|
||||
{ Stats.AttackRatePvm, 150 },
|
||||
{ Stats.DefenseRatePvm, 37 },
|
||||
{ Stats.IceResistance, 3f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 20;
|
||||
monster.Designation = "Elite Yeti";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 6;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 36 },
|
||||
{ Stats.MaximumHealth, 1200 },
|
||||
{ Stats.MinimumPhysBaseDmg, 120 },
|
||||
{ Stats.MaximumPhysBaseDmg, 125 },
|
||||
{ Stats.DefenseBase, 50 },
|
||||
{ Stats.AttackRatePvm, 180 },
|
||||
{ Stats.DefenseRatePvm, 43 },
|
||||
{ Stats.PoisonResistance, 1f / 255 },
|
||||
{ Stats.IceResistance, 4f / 255 },
|
||||
{ Stats.WaterResistance, 1f / 255 },
|
||||
{ Stats.FireResistance, 1f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 21;
|
||||
monster.Designation = "Assassin";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 26 },
|
||||
{ Stats.MaximumHealth, 800 },
|
||||
{ Stats.MinimumPhysBaseDmg, 95 },
|
||||
{ Stats.MaximumPhysBaseDmg, 100 },
|
||||
{ Stats.DefenseBase, 33 },
|
||||
{ Stats.AttackRatePvm, 130 },
|
||||
{ Stats.DefenseRatePvm, 33 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 22;
|
||||
monster.Designation = "Ice Monster";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Ice);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 22 },
|
||||
{ Stats.MaximumHealth, 650 },
|
||||
{ Stats.MinimumPhysBaseDmg, 80 },
|
||||
{ Stats.MaximumPhysBaseDmg, 85 },
|
||||
{ Stats.DefenseBase, 27 },
|
||||
{ Stats.AttackRatePvm, 110 },
|
||||
{ Stats.DefenseRatePvm, 27 },
|
||||
{ Stats.IceResistance, 3f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 23;
|
||||
monster.Designation = "Hommerd";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 24 },
|
||||
{ Stats.MaximumHealth, 700 },
|
||||
{ Stats.MinimumPhysBaseDmg, 85 },
|
||||
{ Stats.MaximumPhysBaseDmg, 90 },
|
||||
{ Stats.DefenseBase, 29 },
|
||||
{ Stats.AttackRatePvm, 120 },
|
||||
{ Stats.DefenseRatePvm, 29 },
|
||||
{ Stats.IceResistance, 3f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 24;
|
||||
monster.Designation = "Worm";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 20 },
|
||||
{ Stats.MaximumHealth, 600 },
|
||||
{ Stats.MinimumPhysBaseDmg, 75 },
|
||||
{ Stats.MaximumPhysBaseDmg, 80 },
|
||||
{ Stats.DefenseBase, 25 },
|
||||
{ Stats.AttackRatePvm, 100 },
|
||||
{ Stats.DefenseRatePvm, 25 },
|
||||
{ Stats.IceResistance, 2f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 25;
|
||||
monster.Designation = "Ice Queen";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(50 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.PowerWave);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 52 },
|
||||
{ Stats.MaximumHealth, 4000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 155 },
|
||||
{ Stats.MaximumPhysBaseDmg, 165 },
|
||||
{ Stats.DefenseBase, 90 },
|
||||
{ Stats.AttackRatePvm, 260 },
|
||||
{ Stats.DefenseRatePvm, 76 },
|
||||
{ Stats.PoisonResistance, 4f / 255 },
|
||||
{ Stats.IceResistance, 5f / 255 },
|
||||
{ Stats.WaterResistance, 4f / 255 },
|
||||
{ Stats.FireResistance, 4f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
}
|
||||
}
|
||||
1036
src/Persistence/Initialization/Version075/Maps/Dungeon.cs
Normal file
1036
src/Persistence/Initialization/Version075/Maps/Dungeon.cs
Normal file
File diff suppressed because it is too large
Load Diff
39
src/Persistence/Initialization/Version075/Maps/Exile.cs
Normal file
39
src/Persistence/Initialization/Version075/Maps/Exile.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
// <copyright file="Exile.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization for the Exile map.
|
||||
/// </summary>
|
||||
internal class Exile : Initialization.BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 5;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Exile";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Exile"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Exile(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
}
|
||||
289
src/Persistence/Initialization/Version075/Maps/Lorencia.cs
Normal file
289
src/Persistence/Initialization/Version075/Maps/Lorencia.cs
Normal file
@@ -0,0 +1,289 @@
|
||||
// <copyright file="Lorencia.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization for the Lorencia map.
|
||||
/// </summary>
|
||||
internal class Lorencia : BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 0;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Lorencia";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Lorencia"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Lorencia(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[248], 6, 145, Direction.SouthEast, SpawnTrigger.Wandering);
|
||||
yield return this.CreateMonsterSpawn(2, this.NpcDictionary[240], 146, 110, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(3, this.NpcDictionary[240], 147, 145, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(4, this.NpcDictionary[249], 131, 88, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(5, this.NpcDictionary[249], 173, 125, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(6, this.NpcDictionary[249], 94, 125, Direction.NorthWest);
|
||||
yield return this.CreateMonsterSpawn(7, this.NpcDictionary[249], 94, 130, Direction.NorthWest);
|
||||
yield return this.CreateMonsterSpawn(8, this.NpcDictionary[249], 131, 148, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(9, this.NpcDictionary[247], 114, 125, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(10, this.NpcDictionary[250], 183, 137, Direction.South, SpawnTrigger.Wandering);
|
||||
yield return this.CreateMonsterSpawn(11, this.NpcDictionary[251], 116, 141, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(12, this.NpcDictionary[253], 127, 86, Direction.South);
|
||||
yield return this.CreateMonsterSpawn(13, this.NpcDictionary[254], 118, 113, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(14, this.NpcDictionary[255], 123, 135, Direction.SouthWest);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateMonsterSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(120, this.NpcDictionary[000], 135, 240, 020, 088, 45);
|
||||
yield return this.CreateMonsterSpawn(121, this.NpcDictionary[003], 180, 226, 090, 244, 45);
|
||||
yield return this.CreateMonsterSpawn(122, this.NpcDictionary[002], 180, 226, 090, 244, 40);
|
||||
yield return this.CreateMonsterSpawn(123, this.NpcDictionary[002], 135, 240, 020, 088, 20);
|
||||
yield return this.CreateMonsterSpawn(124, this.NpcDictionary[006], 095, 175, 168, 244, 20);
|
||||
yield return this.CreateMonsterSpawn(125, this.NpcDictionary[014], 095, 175, 168, 244, 15);
|
||||
yield return this.CreateMonsterSpawn(126, this.NpcDictionary[001], 008, 094, 011, 244, 45);
|
||||
yield return this.CreateMonsterSpawn(127, this.NpcDictionary[004], 008, 094, 011, 244, 45);
|
||||
yield return this.CreateMonsterSpawn(128, this.NpcDictionary[007], 008, 060, 011, 080, 15);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
{
|
||||
var bullFighter = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(bullFighter);
|
||||
bullFighter.Number = 0;
|
||||
bullFighter.Designation = "Bull Fighter";
|
||||
bullFighter.MoveRange = 3;
|
||||
bullFighter.AttackRange = 1;
|
||||
bullFighter.ViewRange = 5;
|
||||
bullFighter.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
bullFighter.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
bullFighter.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
bullFighter.Attribute = 2;
|
||||
bullFighter.NumberOfMaximumItemDrops = 1;
|
||||
var bullFighterAttributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 6 },
|
||||
{ Stats.MaximumHealth, 100 },
|
||||
{ Stats.MinimumPhysBaseDmg, 16 },
|
||||
{ Stats.MaximumPhysBaseDmg, 20 },
|
||||
{ Stats.DefenseBase, 6 },
|
||||
{ Stats.AttackRatePvm, 28 },
|
||||
{ Stats.DefenseRatePvm, 6 },
|
||||
};
|
||||
bullFighter.AddAttributes(bullFighterAttributes, this.Context, this.GameConfiguration);
|
||||
}
|
||||
|
||||
{
|
||||
var hound = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(hound);
|
||||
hound.Number = 1;
|
||||
hound.Designation = "Hound";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 9 },
|
||||
{ Stats.MaximumHealth, 140 },
|
||||
{ Stats.MinimumPhysBaseDmg, 22 },
|
||||
{ Stats.MaximumPhysBaseDmg, 27 },
|
||||
{ Stats.DefenseBase, 9 },
|
||||
{ Stats.AttackRatePvm, 39 },
|
||||
{ Stats.DefenseRatePvm, 9 },
|
||||
};
|
||||
hound.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
hound.MoveRange = 3;
|
||||
hound.AttackRange = 1;
|
||||
hound.ViewRange = 5;
|
||||
hound.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
hound.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
hound.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
hound.Attribute = 2;
|
||||
hound.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
|
||||
{
|
||||
var budgeDragon = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(budgeDragon);
|
||||
budgeDragon.Number = 2;
|
||||
budgeDragon.Designation = "Budge Dragon";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 4 },
|
||||
{ Stats.MaximumHealth, 60 },
|
||||
{ Stats.MinimumPhysBaseDmg, 10 },
|
||||
{ Stats.MaximumPhysBaseDmg, 13 },
|
||||
{ Stats.DefenseBase, 3 },
|
||||
{ Stats.AttackRatePvm, 18 },
|
||||
{ Stats.DefenseRatePvm, 3 },
|
||||
};
|
||||
budgeDragon.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
budgeDragon.MoveRange = 3;
|
||||
budgeDragon.AttackRange = 1;
|
||||
budgeDragon.ViewRange = 4;
|
||||
budgeDragon.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
budgeDragon.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
budgeDragon.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
budgeDragon.Attribute = 2;
|
||||
budgeDragon.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
|
||||
{
|
||||
var spider = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(spider);
|
||||
spider.Number = 3;
|
||||
spider.Designation = "Spider";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 2 },
|
||||
{ Stats.MaximumHealth, 30 },
|
||||
{ Stats.MinimumPhysBaseDmg, 4 },
|
||||
{ Stats.MaximumPhysBaseDmg, 7 },
|
||||
{ Stats.DefenseBase, 1 },
|
||||
{ Stats.AttackRatePvm, 8 },
|
||||
{ Stats.DefenseRatePvm, 1 },
|
||||
};
|
||||
spider.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
spider.MoveRange = 2;
|
||||
spider.AttackRange = 1;
|
||||
spider.ViewRange = 5;
|
||||
spider.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
spider.AttackDelay = new TimeSpan(1800 * TimeSpan.TicksPerMillisecond);
|
||||
spider.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
spider.Attribute = 2;
|
||||
spider.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
|
||||
{
|
||||
var eliteBullFighter = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(eliteBullFighter);
|
||||
eliteBullFighter.Number = 4;
|
||||
eliteBullFighter.Designation = "Elite Bull Fighter";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 12 },
|
||||
{ Stats.MaximumHealth, 190 },
|
||||
{ Stats.MinimumPhysBaseDmg, 31 },
|
||||
{ Stats.MaximumPhysBaseDmg, 36 },
|
||||
{ Stats.DefenseBase, 12 },
|
||||
{ Stats.AttackRatePvm, 50 },
|
||||
{ Stats.DefenseRatePvm, 12 },
|
||||
};
|
||||
eliteBullFighter.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
eliteBullFighter.MoveRange = 3;
|
||||
eliteBullFighter.AttackRange = 1;
|
||||
eliteBullFighter.ViewRange = 4;
|
||||
eliteBullFighter.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
eliteBullFighter.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
eliteBullFighter.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
eliteBullFighter.Attribute = 2;
|
||||
eliteBullFighter.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
|
||||
{
|
||||
var lich = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(lich);
|
||||
lich.Number = 6;
|
||||
lich.Designation = "Lich";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 14 },
|
||||
{ Stats.MaximumHealth, 255 },
|
||||
{ Stats.MinimumPhysBaseDmg, 41 },
|
||||
{ Stats.MaximumPhysBaseDmg, 46 },
|
||||
{ Stats.DefenseBase, 14 },
|
||||
{ Stats.AttackRatePvm, 62 },
|
||||
{ Stats.DefenseRatePvm, 14 },
|
||||
{ Stats.FireResistance, 1f / 255 },
|
||||
};
|
||||
lich.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
lich.MoveRange = 3;
|
||||
lich.AttackRange = 4;
|
||||
lich.ViewRange = 7;
|
||||
lich.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
lich.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
lich.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
lich.Attribute = 2;
|
||||
lich.NumberOfMaximumItemDrops = 1;
|
||||
lich.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Meteorite);
|
||||
}
|
||||
|
||||
{
|
||||
var giant = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(giant);
|
||||
giant.Number = 7;
|
||||
giant.Designation = "Giant";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 17 },
|
||||
{ Stats.MaximumHealth, 400 },
|
||||
{ Stats.MinimumPhysBaseDmg, 57 },
|
||||
{ Stats.MaximumPhysBaseDmg, 62 },
|
||||
{ Stats.DefenseBase, 18 },
|
||||
{ Stats.AttackRatePvm, 80 },
|
||||
{ Stats.DefenseRatePvm, 18 },
|
||||
};
|
||||
giant.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
giant.MoveRange = 2;
|
||||
giant.AttackRange = 2;
|
||||
giant.ViewRange = 3;
|
||||
giant.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
giant.AttackDelay = new TimeSpan(2200 * TimeSpan.TicksPerMillisecond);
|
||||
giant.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
giant.Attribute = 2;
|
||||
giant.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
|
||||
{
|
||||
var skeleton = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(skeleton);
|
||||
skeleton.Number = 14;
|
||||
skeleton.Designation = "Skeleton Warrior";
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 19 },
|
||||
{ Stats.MaximumHealth, 525 },
|
||||
{ Stats.MinimumPhysBaseDmg, 68 },
|
||||
{ Stats.MaximumPhysBaseDmg, 74 },
|
||||
{ Stats.DefenseBase, 22 },
|
||||
{ Stats.AttackRatePvm, 93 },
|
||||
{ Stats.DefenseRatePvm, 22 },
|
||||
};
|
||||
skeleton.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
skeleton.MoveRange = 2;
|
||||
skeleton.AttackRange = 1;
|
||||
skeleton.ViewRange = 4;
|
||||
skeleton.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
skeleton.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
skeleton.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
skeleton.Attribute = 2;
|
||||
skeleton.NumberOfMaximumItemDrops = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
948
src/Persistence/Initialization/Version075/Maps/LostTower.cs
Normal file
948
src/Persistence/Initialization/Version075/Maps/LostTower.cs
Normal file
@@ -0,0 +1,948 @@
|
||||
// <copyright file="LostTower.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.GameLogic.NPC;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization for the Lost Tower map.
|
||||
/// </summary>
|
||||
internal class LostTower : BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 4;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Lost Tower";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LostTower"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public LostTower(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[253], 207, 76, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(2, this.NpcDictionary[240], 201, 76, Direction.SouthEast);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateMonsterSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(100, this.NpcDictionary[40], 6, 98);
|
||||
yield return this.CreateMonsterSpawn(101, this.NpcDictionary[40], 10, 110);
|
||||
yield return this.CreateMonsterSpawn(102, this.NpcDictionary[40], 5, 110);
|
||||
yield return this.CreateMonsterSpawn(103, this.NpcDictionary[40], 15, 105);
|
||||
yield return this.CreateMonsterSpawn(104, this.NpcDictionary[40], 12, 99);
|
||||
yield return this.CreateMonsterSpawn(105, this.NpcDictionary[40], 10, 100);
|
||||
yield return this.CreateMonsterSpawn(106, this.NpcDictionary[40], 12, 100);
|
||||
yield return this.CreateMonsterSpawn(107, this.NpcDictionary[36], 193, 239);
|
||||
yield return this.CreateMonsterSpawn(108, this.NpcDictionary[36], 191, 131);
|
||||
yield return this.CreateMonsterSpawn(109, this.NpcDictionary[36], 191, 118);
|
||||
yield return this.CreateMonsterSpawn(110, this.NpcDictionary[36], 164, 29);
|
||||
yield return this.CreateMonsterSpawn(111, this.NpcDictionary[36], 164, 37);
|
||||
yield return this.CreateMonsterSpawn(112, this.NpcDictionary[36], 164, 48);
|
||||
yield return this.CreateMonsterSpawn(113, this.NpcDictionary[36], 164, 63);
|
||||
yield return this.CreateMonsterSpawn(114, this.NpcDictionary[36], 164, 74);
|
||||
yield return this.CreateMonsterSpawn(115, this.NpcDictionary[36], 195, 40);
|
||||
yield return this.CreateMonsterSpawn(116, this.NpcDictionary[36], 190, 59);
|
||||
yield return this.CreateMonsterSpawn(117, this.NpcDictionary[36], 197, 64);
|
||||
yield return this.CreateMonsterSpawn(118, this.NpcDictionary[36], 244, 72);
|
||||
yield return this.CreateMonsterSpawn(119, this.NpcDictionary[36], 244, 100);
|
||||
yield return this.CreateMonsterSpawn(120, this.NpcDictionary[36], 245, 117);
|
||||
yield return this.CreateMonsterSpawn(121, this.NpcDictionary[36], 219, 117);
|
||||
yield return this.CreateMonsterSpawn(122, this.NpcDictionary[36], 209, 107);
|
||||
yield return this.CreateMonsterSpawn(123, this.NpcDictionary[36], 201, 113);
|
||||
yield return this.CreateMonsterSpawn(124, this.NpcDictionary[36], 212, 87);
|
||||
yield return this.CreateMonsterSpawn(125, this.NpcDictionary[36], 164, 98);
|
||||
yield return this.CreateMonsterSpawn(126, this.NpcDictionary[36], 164, 112);
|
||||
yield return this.CreateMonsterSpawn(127, this.NpcDictionary[36], 164, 126);
|
||||
yield return this.CreateMonsterSpawn(128, this.NpcDictionary[36], 175, 127);
|
||||
yield return this.CreateMonsterSpawn(129, this.NpcDictionary[36], 184, 128);
|
||||
yield return this.CreateMonsterSpawn(130, this.NpcDictionary[36], 199, 134);
|
||||
yield return this.CreateMonsterSpawn(131, this.NpcDictionary[36], 206, 136);
|
||||
yield return this.CreateMonsterSpawn(132, this.NpcDictionary[36], 227, 136);
|
||||
yield return this.CreateMonsterSpawn(133, this.NpcDictionary[36], 242, 135);
|
||||
yield return this.CreateMonsterSpawn(134, this.NpcDictionary[36], 229, 127);
|
||||
yield return this.CreateMonsterSpawn(135, this.NpcDictionary[36], 217, 127);
|
||||
yield return this.CreateMonsterSpawn(136, this.NpcDictionary[36], 244, 89);
|
||||
yield return this.CreateMonsterSpawn(137, this.NpcDictionary[36], 207, 127);
|
||||
yield return this.CreateMonsterSpawn(138, this.NpcDictionary[36], 235, 56);
|
||||
yield return this.CreateMonsterSpawn(139, this.NpcDictionary[36], 235, 38);
|
||||
yield return this.CreateMonsterSpawn(140, this.NpcDictionary[36], 236, 26);
|
||||
yield return this.CreateMonsterSpawn(141, this.NpcDictionary[36], 235, 15);
|
||||
yield return this.CreateMonsterSpawn(142, this.NpcDictionary[36], 226, 14);
|
||||
yield return this.CreateMonsterSpawn(143, this.NpcDictionary[36], 211, 15);
|
||||
yield return this.CreateMonsterSpawn(144, this.NpcDictionary[36], 210, 101);
|
||||
yield return this.CreateMonsterSpawn(145, this.NpcDictionary[36], 210, 114);
|
||||
yield return this.CreateMonsterSpawn(146, this.NpcDictionary[36], 244, 8);
|
||||
yield return this.CreateMonsterSpawn(147, this.NpcDictionary[36], 195, 99);
|
||||
yield return this.CreateMonsterSpawn(148, this.NpcDictionary[36], 226, 118);
|
||||
yield return this.CreateMonsterSpawn(149, this.NpcDictionary[36], 235, 110);
|
||||
yield return this.CreateMonsterSpawn(150, this.NpcDictionary[36], 235, 87);
|
||||
yield return this.CreateMonsterSpawn(151, this.NpcDictionary[36], 199, 124);
|
||||
yield return this.CreateMonsterSpawn(152, this.NpcDictionary[36], 164, 16);
|
||||
yield return this.CreateMonsterSpawn(153, this.NpcDictionary[36], 164, 87);
|
||||
yield return this.CreateMonsterSpawn(154, this.NpcDictionary[36], 200, 104);
|
||||
yield return this.CreateMonsterSpawn(155, this.NpcDictionary[36], 205, 87);
|
||||
yield return this.CreateMonsterSpawn(156, this.NpcDictionary[36], 219, 68);
|
||||
yield return this.CreateMonsterSpawn(157, this.NpcDictionary[36], 211, 64);
|
||||
yield return this.CreateMonsterSpawn(158, this.NpcDictionary[36], 209, 52);
|
||||
yield return this.CreateMonsterSpawn(159, this.NpcDictionary[36], 210, 41);
|
||||
yield return this.CreateMonsterSpawn(160, this.NpcDictionary[36], 210, 32);
|
||||
yield return this.CreateMonsterSpawn(161, this.NpcDictionary[36], 194, 23);
|
||||
yield return this.CreateMonsterSpawn(162, this.NpcDictionary[36], 204, 15);
|
||||
yield return this.CreateMonsterSpawn(163, this.NpcDictionary[36], 236, 44);
|
||||
yield return this.CreateMonsterSpawn(164, this.NpcDictionary[36], 235, 98);
|
||||
yield return this.CreateMonsterSpawn(165, this.NpcDictionary[36], 222, 109);
|
||||
yield return this.CreateMonsterSpawn(166, this.NpcDictionary[36], 218, 87);
|
||||
yield return this.CreateMonsterSpawn(167, this.NpcDictionary[36], 228, 91);
|
||||
yield return this.CreateMonsterSpawn(168, this.NpcDictionary[36], 244, 15);
|
||||
yield return this.CreateMonsterSpawn(169, this.NpcDictionary[36], 228, 7);
|
||||
yield return this.CreateMonsterSpawn(170, this.NpcDictionary[36], 202, 25);
|
||||
yield return this.CreateMonsterSpawn(171, this.NpcDictionary[36], 193, 108);
|
||||
yield return this.CreateMonsterSpawn(172, this.NpcDictionary[36], 209, 94);
|
||||
yield return this.CreateMonsterSpawn(173, this.NpcDictionary[36], 235, 73);
|
||||
yield return this.CreateMonsterSpawn(174, this.NpcDictionary[36], 196, 89);
|
||||
yield return this.CreateMonsterSpawn(175, this.NpcDictionary[36], 219, 94);
|
||||
yield return this.CreateMonsterSpawn(176, this.NpcDictionary[36], 190, 29);
|
||||
yield return this.CreateMonsterSpawn(177, this.NpcDictionary[36], 205, 62);
|
||||
yield return this.CreateMonsterSpawn(178, this.NpcDictionary[35], 29, 208);
|
||||
yield return this.CreateMonsterSpawn(179, this.NpcDictionary[40], 30, 183);
|
||||
yield return this.CreateMonsterSpawn(180, this.NpcDictionary[35], 33, 206);
|
||||
yield return this.CreateMonsterSpawn(181, this.NpcDictionary[40], 54, 213);
|
||||
yield return this.CreateMonsterSpawn(182, this.NpcDictionary[39], 243, 125);
|
||||
yield return this.CreateMonsterSpawn(183, this.NpcDictionary[39], 245, 109);
|
||||
yield return this.CreateMonsterSpawn(184, this.NpcDictionary[39], 219, 6);
|
||||
yield return this.CreateMonsterSpawn(185, this.NpcDictionary[39], 244, 53);
|
||||
yield return this.CreateMonsterSpawn(186, this.NpcDictionary[39], 239, 7);
|
||||
yield return this.CreateMonsterSpawn(187, this.NpcDictionary[39], 244, 25);
|
||||
yield return this.CreateMonsterSpawn(188, this.NpcDictionary[39], 243, 40);
|
||||
yield return this.CreateMonsterSpawn(189, this.NpcDictionary[39], 243, 65);
|
||||
yield return this.CreateMonsterSpawn(190, this.NpcDictionary[39], 244, 82);
|
||||
yield return this.CreateMonsterSpawn(191, this.NpcDictionary[39], 244, 92);
|
||||
yield return this.CreateMonsterSpawn(192, this.NpcDictionary[39], 210, 23);
|
||||
yield return this.CreateMonsterSpawn(193, this.NpcDictionary[39], 226, 22);
|
||||
yield return this.CreateMonsterSpawn(194, this.NpcDictionary[39], 227, 33);
|
||||
yield return this.CreateMonsterSpawn(195, this.NpcDictionary[39], 227, 54);
|
||||
yield return this.CreateMonsterSpawn(196, this.NpcDictionary[39], 228, 67);
|
||||
yield return this.CreateMonsterSpawn(197, this.NpcDictionary[39], 228, 81);
|
||||
yield return this.CreateMonsterSpawn(198, this.NpcDictionary[39], 228, 104);
|
||||
yield return this.CreateMonsterSpawn(199, this.NpcDictionary[39], 191, 16);
|
||||
yield return this.CreateMonsterSpawn(200, this.NpcDictionary[39], 220, 79);
|
||||
yield return this.CreateMonsterSpawn(201, this.NpcDictionary[39], 219, 60);
|
||||
yield return this.CreateMonsterSpawn(202, this.NpcDictionary[39], 219, 45);
|
||||
yield return this.CreateMonsterSpawn(203, this.NpcDictionary[39], 219, 34);
|
||||
yield return this.CreateMonsterSpawn(204, this.NpcDictionary[39], 202, 38);
|
||||
yield return this.CreateMonsterSpawn(205, this.NpcDictionary[39], 208, 166);
|
||||
yield return this.CreateMonsterSpawn(206, this.NpcDictionary[39], 196, 166);
|
||||
yield return this.CreateMonsterSpawn(207, this.NpcDictionary[39], 188, 165);
|
||||
yield return this.CreateMonsterSpawn(208, this.NpcDictionary[39], 179, 165);
|
||||
yield return this.CreateMonsterSpawn(209, this.NpcDictionary[39], 165, 183);
|
||||
yield return this.CreateMonsterSpawn(210, this.NpcDictionary[34], 167, 197);
|
||||
yield return this.CreateMonsterSpawn(211, this.NpcDictionary[39], 167, 211);
|
||||
yield return this.CreateMonsterSpawn(212, this.NpcDictionary[34], 192, 203);
|
||||
yield return this.CreateMonsterSpawn(213, this.NpcDictionary[39], 165, 241);
|
||||
yield return this.CreateMonsterSpawn(214, this.NpcDictionary[39], 184, 246);
|
||||
yield return this.CreateMonsterSpawn(215, this.NpcDictionary[34], 191, 244);
|
||||
yield return this.CreateMonsterSpawn(216, this.NpcDictionary[39], 198, 245);
|
||||
yield return this.CreateMonsterSpawn(217, this.NpcDictionary[39], 214, 245);
|
||||
yield return this.CreateMonsterSpawn(218, this.NpcDictionary[39], 228, 245);
|
||||
yield return this.CreateMonsterSpawn(219, this.NpcDictionary[39], 245, 246);
|
||||
yield return this.CreateMonsterSpawn(220, this.NpcDictionary[34], 235, 237);
|
||||
yield return this.CreateMonsterSpawn(221, this.NpcDictionary[34], 224, 235);
|
||||
yield return this.CreateMonsterSpawn(222, this.NpcDictionary[34], 206, 237);
|
||||
yield return this.CreateMonsterSpawn(223, this.NpcDictionary[34], 200, 228);
|
||||
yield return this.CreateMonsterSpawn(224, this.NpcDictionary[34], 209, 212);
|
||||
yield return this.CreateMonsterSpawn(225, this.NpcDictionary[34], 225, 196);
|
||||
yield return this.CreateMonsterSpawn(226, this.NpcDictionary[34], 209, 190);
|
||||
yield return this.CreateMonsterSpawn(227, this.NpcDictionary[34], 198, 192);
|
||||
yield return this.CreateMonsterSpawn(228, this.NpcDictionary[34], 187, 184);
|
||||
yield return this.CreateMonsterSpawn(229, this.NpcDictionary[34], 193, 173);
|
||||
yield return this.CreateMonsterSpawn(230, this.NpcDictionary[34], 172, 177);
|
||||
yield return this.CreateMonsterSpawn(231, this.NpcDictionary[39], 198, 184);
|
||||
yield return this.CreateMonsterSpawn(232, this.NpcDictionary[39], 217, 196);
|
||||
yield return this.CreateMonsterSpawn(233, this.NpcDictionary[39], 227, 212);
|
||||
yield return this.CreateMonsterSpawn(234, this.NpcDictionary[39], 217, 217);
|
||||
yield return this.CreateMonsterSpawn(235, this.NpcDictionary[39], 201, 216);
|
||||
yield return this.CreateMonsterSpawn(236, this.NpcDictionary[39], 191, 238);
|
||||
yield return this.CreateMonsterSpawn(237, this.NpcDictionary[39], 193, 217);
|
||||
yield return this.CreateMonsterSpawn(238, this.NpcDictionary[39], 178, 224);
|
||||
yield return this.CreateMonsterSpawn(239, this.NpcDictionary[39], 178, 210);
|
||||
yield return this.CreateMonsterSpawn(240, this.NpcDictionary[39], 177, 195);
|
||||
yield return this.CreateMonsterSpawn(241, this.NpcDictionary[41], 126, 246);
|
||||
yield return this.CreateMonsterSpawn(242, this.NpcDictionary[41], 133, 235);
|
||||
yield return this.CreateMonsterSpawn(243, this.NpcDictionary[41], 133, 225);
|
||||
yield return this.CreateMonsterSpawn(244, this.NpcDictionary[34], 133, 185);
|
||||
yield return this.CreateMonsterSpawn(245, this.NpcDictionary[41], 133, 209);
|
||||
yield return this.CreateMonsterSpawn(246, this.NpcDictionary[34], 132, 201);
|
||||
yield return this.CreateMonsterSpawn(247, this.NpcDictionary[41], 125, 189);
|
||||
yield return this.CreateMonsterSpawn(248, this.NpcDictionary[41], 128, 175);
|
||||
yield return this.CreateMonsterSpawn(249, this.NpcDictionary[34], 134, 166);
|
||||
yield return this.CreateMonsterSpawn(250, this.NpcDictionary[41], 129, 167);
|
||||
yield return this.CreateMonsterSpawn(251, this.NpcDictionary[41], 97, 184);
|
||||
yield return this.CreateMonsterSpawn(252, this.NpcDictionary[41], 107, 168);
|
||||
yield return this.CreateMonsterSpawn(253, this.NpcDictionary[34], 95, 173);
|
||||
yield return this.CreateMonsterSpawn(254, this.NpcDictionary[41], 89, 174);
|
||||
yield return this.CreateMonsterSpawn(255, this.NpcDictionary[41], 83, 183);
|
||||
yield return this.CreateMonsterSpawn(256, this.NpcDictionary[34], 86, 190);
|
||||
yield return this.CreateMonsterSpawn(257, this.NpcDictionary[41], 83, 201);
|
||||
yield return this.CreateMonsterSpawn(258, this.NpcDictionary[41], 83, 213);
|
||||
yield return this.CreateMonsterSpawn(259, this.NpcDictionary[41], 89, 224);
|
||||
yield return this.CreateMonsterSpawn(260, this.NpcDictionary[34], 84, 237);
|
||||
yield return this.CreateMonsterSpawn(261, this.NpcDictionary[41], 86, 245);
|
||||
yield return this.CreateMonsterSpawn(262, this.NpcDictionary[34], 98, 245);
|
||||
yield return this.CreateMonsterSpawn(263, this.NpcDictionary[41], 108, 245);
|
||||
yield return this.CreateMonsterSpawn(264, this.NpcDictionary[41], 116, 244);
|
||||
yield return this.CreateMonsterSpawn(265, this.NpcDictionary[41], 118, 229);
|
||||
yield return this.CreateMonsterSpawn(266, this.NpcDictionary[41], 116, 211);
|
||||
yield return this.CreateMonsterSpawn(267, this.NpcDictionary[41], 111, 194);
|
||||
yield return this.CreateMonsterSpawn(268, this.NpcDictionary[41], 115, 178);
|
||||
yield return this.CreateMonsterSpawn(269, this.NpcDictionary[41], 97, 202);
|
||||
yield return this.CreateMonsterSpawn(270, this.NpcDictionary[41], 97, 214);
|
||||
yield return this.CreateMonsterSpawn(271, this.NpcDictionary[41], 102, 225);
|
||||
yield return this.CreateMonsterSpawn(272, this.NpcDictionary[41], 98, 236);
|
||||
yield return this.CreateMonsterSpawn(273, this.NpcDictionary[34], 111, 219);
|
||||
yield return this.CreateMonsterSpawn(274, this.NpcDictionary[34], 123, 224);
|
||||
yield return this.CreateMonsterSpawn(275, this.NpcDictionary[41], 116, 134);
|
||||
yield return this.CreateMonsterSpawn(276, this.NpcDictionary[41], 97, 133);
|
||||
yield return this.CreateMonsterSpawn(277, this.NpcDictionary[41], 85, 132);
|
||||
yield return this.CreateMonsterSpawn(278, this.NpcDictionary[41], 85, 116);
|
||||
yield return this.CreateMonsterSpawn(279, this.NpcDictionary[41], 85, 96);
|
||||
yield return this.CreateMonsterSpawn(280, this.NpcDictionary[41], 101, 87);
|
||||
yield return this.CreateMonsterSpawn(281, this.NpcDictionary[41], 118, 89);
|
||||
yield return this.CreateMonsterSpawn(282, this.NpcDictionary[37], 133, 87);
|
||||
yield return this.CreateMonsterSpawn(283, this.NpcDictionary[41], 116, 113);
|
||||
yield return this.CreateMonsterSpawn(284, this.NpcDictionary[41], 133, 115);
|
||||
yield return this.CreateMonsterSpawn(285, this.NpcDictionary[37], 104, 136);
|
||||
yield return this.CreateMonsterSpawn(286, this.NpcDictionary[41], 124, 136);
|
||||
yield return this.CreateMonsterSpawn(287, this.NpcDictionary[37], 96, 116);
|
||||
yield return this.CreateMonsterSpawn(288, this.NpcDictionary[37], 94, 100);
|
||||
yield return this.CreateMonsterSpawn(289, this.NpcDictionary[37], 89, 135);
|
||||
yield return this.CreateMonsterSpawn(290, this.NpcDictionary[37], 133, 98);
|
||||
yield return this.CreateMonsterSpawn(291, this.NpcDictionary[41], 106, 112);
|
||||
yield return this.CreateMonsterSpawn(292, this.NpcDictionary[41], 95, 106);
|
||||
yield return this.CreateMonsterSpawn(293, this.NpcDictionary[37], 112, 87);
|
||||
yield return this.CreateMonsterSpawn(294, this.NpcDictionary[37], 133, 109);
|
||||
yield return this.CreateMonsterSpawn(295, this.NpcDictionary[37], 121, 119);
|
||||
yield return this.CreateMonsterSpawn(296, this.NpcDictionary[37], 123, 130);
|
||||
yield return this.CreateMonsterSpawn(297, this.NpcDictionary[37], 87, 7);
|
||||
yield return this.CreateMonsterSpawn(298, this.NpcDictionary[37], 97, 6);
|
||||
yield return this.CreateMonsterSpawn(299, this.NpcDictionary[40], 117, 8);
|
||||
yield return this.CreateMonsterSpawn(300, this.NpcDictionary[37], 124, 11);
|
||||
yield return this.CreateMonsterSpawn(301, this.NpcDictionary[37], 133, 26);
|
||||
yield return this.CreateMonsterSpawn(302, this.NpcDictionary[37], 134, 37);
|
||||
yield return this.CreateMonsterSpawn(303, this.NpcDictionary[37], 134, 49);
|
||||
yield return this.CreateMonsterSpawn(304, this.NpcDictionary[40], 123, 54);
|
||||
yield return this.CreateMonsterSpawn(305, this.NpcDictionary[37], 115, 53);
|
||||
yield return this.CreateMonsterSpawn(306, this.NpcDictionary[37], 98, 54);
|
||||
yield return this.CreateMonsterSpawn(307, this.NpcDictionary[37], 84, 54);
|
||||
yield return this.CreateMonsterSpawn(308, this.NpcDictionary[37], 93, 41);
|
||||
yield return this.CreateMonsterSpawn(309, this.NpcDictionary[37], 99, 40);
|
||||
yield return this.CreateMonsterSpawn(310, this.NpcDictionary[37], 101, 29);
|
||||
yield return this.CreateMonsterSpawn(311, this.NpcDictionary[37], 98, 17);
|
||||
yield return this.CreateMonsterSpawn(312, this.NpcDictionary[37], 112, 16);
|
||||
yield return this.CreateMonsterSpawn(313, this.NpcDictionary[37], 124, 41);
|
||||
yield return this.CreateMonsterSpawn(314, this.NpcDictionary[37], 111, 39);
|
||||
yield return this.CreateMonsterSpawn(315, this.NpcDictionary[40], 86, 41);
|
||||
yield return this.CreateMonsterSpawn(316, this.NpcDictionary[40], 98, 24);
|
||||
yield return this.CreateMonsterSpawn(317, this.NpcDictionary[40], 115, 28);
|
||||
yield return this.CreateMonsterSpawn(318, this.NpcDictionary[40], 55, 15);
|
||||
yield return this.CreateMonsterSpawn(319, this.NpcDictionary[40], 46, 13);
|
||||
yield return this.CreateMonsterSpawn(320, this.NpcDictionary[37], 39, 11);
|
||||
yield return this.CreateMonsterSpawn(321, this.NpcDictionary[40], 22, 17);
|
||||
yield return this.CreateMonsterSpawn(322, this.NpcDictionary[37], 14, 24);
|
||||
yield return this.CreateMonsterSpawn(323, this.NpcDictionary[37], 53, 39);
|
||||
yield return this.CreateMonsterSpawn(324, this.NpcDictionary[40], 10, 41);
|
||||
yield return this.CreateMonsterSpawn(325, this.NpcDictionary[37], 7, 52);
|
||||
yield return this.CreateMonsterSpawn(326, this.NpcDictionary[40], 15, 54);
|
||||
yield return this.CreateMonsterSpawn(327, this.NpcDictionary[37], 25, 49);
|
||||
yield return this.CreateMonsterSpawn(328, this.NpcDictionary[40], 38, 48);
|
||||
yield return this.CreateMonsterSpawn(329, this.NpcDictionary[40], 48, 48);
|
||||
yield return this.CreateMonsterSpawn(330, this.NpcDictionary[40], 41, 57);
|
||||
yield return this.CreateMonsterSpawn(331, this.NpcDictionary[34], 123, 201);
|
||||
yield return this.CreateMonsterSpawn(332, this.NpcDictionary[40], 55, 28);
|
||||
yield return this.CreateMonsterSpawn(333, this.NpcDictionary[35], 46, 25);
|
||||
yield return this.CreateMonsterSpawn(334, this.NpcDictionary[37], 30, 32);
|
||||
yield return this.CreateMonsterSpawn(335, this.NpcDictionary[35], 23, 40);
|
||||
yield return this.CreateMonsterSpawn(336, this.NpcDictionary[40], 22, 30);
|
||||
yield return this.CreateMonsterSpawn(337, this.NpcDictionary[40], 39, 38);
|
||||
yield return this.CreateMonsterSpawn(338, this.NpcDictionary[40], 6, 98);
|
||||
yield return this.CreateMonsterSpawn(339, this.NpcDictionary[40], 33, 86);
|
||||
yield return this.CreateMonsterSpawn(340, this.NpcDictionary[40], 46, 86);
|
||||
yield return this.CreateMonsterSpawn(341, this.NpcDictionary[40], 55, 87);
|
||||
yield return this.CreateMonsterSpawn(342, this.NpcDictionary[40], 53, 97);
|
||||
yield return this.CreateMonsterSpawn(343, this.NpcDictionary[35], 42, 97);
|
||||
yield return this.CreateMonsterSpawn(344, this.NpcDictionary[40], 35, 98);
|
||||
yield return this.CreateMonsterSpawn(345, this.NpcDictionary[40], 25, 98);
|
||||
yield return this.CreateMonsterSpawn(346, this.NpcDictionary[35], 15, 127);
|
||||
yield return this.CreateMonsterSpawn(347, this.NpcDictionary[40], 8, 107);
|
||||
yield return this.CreateMonsterSpawn(348, this.NpcDictionary[40], 53, 116);
|
||||
yield return this.CreateMonsterSpawn(349, this.NpcDictionary[40], 41, 121);
|
||||
yield return this.CreateMonsterSpawn(350, this.NpcDictionary[34], 115, 167);
|
||||
yield return this.CreateMonsterSpawn(351, this.NpcDictionary[40], 25, 135);
|
||||
yield return this.CreateMonsterSpawn(352, this.NpcDictionary[40], 42, 135);
|
||||
yield return this.CreateMonsterSpawn(353, this.NpcDictionary[40], 52, 135);
|
||||
yield return this.CreateMonsterSpawn(354, this.NpcDictionary[35], 30, 171);
|
||||
yield return this.CreateMonsterSpawn(355, this.NpcDictionary[40], 38, 227);
|
||||
yield return this.CreateMonsterSpawn(356, this.NpcDictionary[35], 8, 191);
|
||||
yield return this.CreateMonsterSpawn(357, this.NpcDictionary[40], 51, 183);
|
||||
yield return this.CreateMonsterSpawn(358, this.NpcDictionary[35], 8, 211);
|
||||
yield return this.CreateMonsterSpawn(359, this.NpcDictionary[35], 8, 231);
|
||||
yield return this.CreateMonsterSpawn(360, this.NpcDictionary[35], 15, 244);
|
||||
yield return this.CreateMonsterSpawn(361, this.NpcDictionary[35], 18, 107);
|
||||
yield return this.CreateMonsterSpawn(362, this.NpcDictionary[35], 39, 246);
|
||||
yield return this.CreateMonsterSpawn(363, this.NpcDictionary[35], 11, 175);
|
||||
yield return this.CreateMonsterSpawn(364, this.NpcDictionary[35], 54, 220);
|
||||
yield return this.CreateMonsterSpawn(365, this.NpcDictionary[35], 31, 127);
|
||||
yield return this.CreateMonsterSpawn(366, this.NpcDictionary[35], 55, 195);
|
||||
yield return this.CreateMonsterSpawn(367, this.NpcDictionary[34], 105, 175);
|
||||
yield return this.CreateMonsterSpawn(368, this.NpcDictionary[35], 55, 174);
|
||||
yield return this.CreateMonsterSpawn(369, this.NpcDictionary[38], 31, 212);
|
||||
yield return this.CreateMonsterSpawn(370, this.NpcDictionary[35], 30, 233);
|
||||
yield return this.CreateMonsterSpawn(371, this.NpcDictionary[35], 21, 216);
|
||||
yield return this.CreateMonsterSpawn(372, this.NpcDictionary[35], 38, 212);
|
||||
yield return this.CreateMonsterSpawn(373, this.NpcDictionary[35], 29, 200);
|
||||
yield return this.CreateMonsterSpawn(374, this.NpcDictionary[40], 24, 189);
|
||||
yield return this.CreateMonsterSpawn(375, this.NpcDictionary[40], 48, 167);
|
||||
yield return this.CreateMonsterSpawn(376, this.NpcDictionary[40], 41, 167);
|
||||
yield return this.CreateMonsterSpawn(377, this.NpcDictionary[35], 38, 234);
|
||||
yield return this.CreateMonsterSpawn(378, this.NpcDictionary[37], 38, 201);
|
||||
yield return this.CreateMonsterSpawn(379, this.NpcDictionary[37], 18, 200);
|
||||
yield return this.CreateMonsterSpawn(380, this.NpcDictionary[37], 13, 191);
|
||||
yield return this.CreateMonsterSpawn(381, this.NpcDictionary[37], 38, 192);
|
||||
yield return this.CreateMonsterSpawn(382, this.NpcDictionary[34], 215, 174);
|
||||
yield return this.CreateMonsterSpawn(383, this.NpcDictionary[34], 245, 168);
|
||||
yield return this.CreateMonsterSpawn(384, this.NpcDictionary[34], 235, 214);
|
||||
yield return this.CreateMonsterSpawn(385, this.NpcDictionary[34], 165, 223);
|
||||
yield return this.CreateMonsterSpawn(386, this.NpcDictionary[34], 127, 239);
|
||||
yield return this.CreateMonsterSpawn(387, this.NpcDictionary[34], 125, 180);
|
||||
yield return this.CreateMonsterSpawn(388, this.NpcDictionary[34], 113, 189);
|
||||
yield return this.CreateMonsterSpawn(389, this.NpcDictionary[34], 98, 231);
|
||||
yield return this.CreateMonsterSpawn(390, this.NpcDictionary[37], 89, 119);
|
||||
yield return this.CreateMonsterSpawn(391, this.NpcDictionary[37], 86, 100);
|
||||
yield return this.CreateMonsterSpawn(392, this.NpcDictionary[37], 108, 116);
|
||||
yield return this.CreateMonsterSpawn(393, this.NpcDictionary[37], 126, 108);
|
||||
yield return this.CreateMonsterSpawn(394, this.NpcDictionary[37], 86, 26);
|
||||
yield return this.CreateMonsterSpawn(395, this.NpcDictionary[37], 111, 26);
|
||||
yield return this.CreateMonsterSpawn(396, this.NpcDictionary[37], 48, 17);
|
||||
yield return this.CreateMonsterSpawn(397, this.NpcDictionary[37], 13, 9);
|
||||
yield return this.CreateMonsterSpawn(398, this.NpcDictionary[37], 16, 41);
|
||||
yield return this.CreateMonsterSpawn(399, this.NpcDictionary[37], 38, 53);
|
||||
yield return this.CreateMonsterSpawn(400, this.NpcDictionary[37], 54, 51);
|
||||
yield return this.CreateMonsterSpawn(401, this.NpcDictionary[37], 45, 32);
|
||||
yield return this.CreateMonsterSpawn(402, this.NpcDictionary[37], 25, 86);
|
||||
yield return this.CreateMonsterSpawn(403, this.NpcDictionary[37], 52, 92);
|
||||
yield return this.CreateMonsterSpawn(404, this.NpcDictionary[37], 30, 102);
|
||||
yield return this.CreateMonsterSpawn(405, this.NpcDictionary[35], 34, 108);
|
||||
yield return this.CreateMonsterSpawn(406, this.NpcDictionary[35], 53, 111);
|
||||
yield return this.CreateMonsterSpawn(407, this.NpcDictionary[35], 45, 137);
|
||||
yield return this.CreateMonsterSpawn(408, this.NpcDictionary[35], 11, 96);
|
||||
yield return this.CreateMonsterSpawn(409, this.NpcDictionary[35], 43, 170);
|
||||
yield return this.CreateMonsterSpawn(410, this.NpcDictionary[35], 8, 220);
|
||||
yield return this.CreateMonsterSpawn(411, this.NpcDictionary[35], 27, 247);
|
||||
yield return this.CreateMonsterSpawn(412, this.NpcDictionary[35], 54, 232);
|
||||
yield return this.CreateMonsterSpawn(413, this.NpcDictionary[35], 24, 225);
|
||||
yield return this.CreateMonsterSpawn(414, this.NpcDictionary[39], 226, 166);
|
||||
yield return this.CreateMonsterSpawn(415, this.NpcDictionary[39], 239, 167);
|
||||
yield return this.CreateMonsterSpawn(416, this.NpcDictionary[39], 227, 175);
|
||||
yield return this.CreateMonsterSpawn(417, this.NpcDictionary[39], 239, 174);
|
||||
yield return this.CreateMonsterSpawn(418, this.NpcDictionary[39], 245, 179);
|
||||
yield return this.CreateMonsterSpawn(419, this.NpcDictionary[39], 245, 189);
|
||||
yield return this.CreateMonsterSpawn(420, this.NpcDictionary[39], 245, 200);
|
||||
yield return this.CreateMonsterSpawn(421, this.NpcDictionary[39], 246, 212);
|
||||
yield return this.CreateMonsterSpawn(422, this.NpcDictionary[39], 245, 224);
|
||||
yield return this.CreateMonsterSpawn(423, this.NpcDictionary[39], 237, 226);
|
||||
yield return this.CreateMonsterSpawn(424, this.NpcDictionary[39], 236, 220);
|
||||
yield return this.CreateMonsterSpawn(425, this.NpcDictionary[39], 238, 208);
|
||||
yield return this.CreateMonsterSpawn(426, this.NpcDictionary[39], 237, 201);
|
||||
yield return this.CreateMonsterSpawn(427, this.NpcDictionary[39], 232, 196);
|
||||
yield return this.CreateMonsterSpawn(428, this.NpcDictionary[39], 238, 184);
|
||||
yield return this.CreateMonsterSpawn(429, this.NpcDictionary[39], 224, 185);
|
||||
yield return this.CreateMonsterSpawn(430, this.NpcDictionary[39], 216, 183);
|
||||
yield return this.CreateMonsterSpawn(431, this.NpcDictionary[39], 207, 178);
|
||||
yield return this.CreateMonsterSpawn(432, this.NpcDictionary[39], 196, 176);
|
||||
yield return this.CreateMonsterSpawn(433, this.NpcDictionary[39], 187, 192);
|
||||
yield return this.CreateMonsterSpawn(434, this.NpcDictionary[39], 185, 201);
|
||||
yield return this.CreateMonsterSpawn(435, this.NpcDictionary[39], 187, 209);
|
||||
yield return this.CreateMonsterSpawn(436, this.NpcDictionary[39], 185, 220);
|
||||
yield return this.CreateMonsterSpawn(437, this.NpcDictionary[39], 175, 217);
|
||||
yield return this.CreateMonsterSpawn(438, this.NpcDictionary[39], 176, 245);
|
||||
yield return this.CreateMonsterSpawn(439, this.NpcDictionary[39], 206, 244);
|
||||
yield return this.CreateMonsterSpawn(440, this.NpcDictionary[39], 215, 209);
|
||||
yield return this.CreateMonsterSpawn(441, this.NpcDictionary[39], 184, 173);
|
||||
yield return this.CreateMonsterSpawn(442, this.NpcDictionary[39], 172, 188);
|
||||
yield return this.CreateMonsterSpawn(443, this.NpcDictionary[39], 173, 171);
|
||||
yield return this.CreateMonsterSpawn(444, this.NpcDictionary[39], 206, 200);
|
||||
yield return this.CreateMonsterSpawn(445, this.NpcDictionary[39], 218, 229);
|
||||
yield return this.CreateMonsterSpawn(446, this.NpcDictionary[34], 112, 235);
|
||||
yield return this.CreateMonsterSpawn(447, this.NpcDictionary[34], 83, 220);
|
||||
yield return this.CreateMonsterSpawn(448, this.NpcDictionary[34], 90, 239);
|
||||
yield return this.CreateMonsterSpawn(449, this.NpcDictionary[34], 133, 215);
|
||||
yield return this.CreateMonsterSpawn(450, this.NpcDictionary[34], 88, 206);
|
||||
yield return this.CreateMonsterSpawn(451, this.NpcDictionary[34], 121, 235);
|
||||
yield return this.CreateMonsterSpawn(452, this.NpcDictionary[41], 104, 183);
|
||||
yield return this.CreateMonsterSpawn(453, this.NpcDictionary[41], 86, 109);
|
||||
yield return this.CreateMonsterSpawn(454, this.NpcDictionary[41], 96, 86);
|
||||
yield return this.CreateMonsterSpawn(455, this.NpcDictionary[41], 128, 86);
|
||||
yield return this.CreateMonsterSpawn(456, this.NpcDictionary[41], 122, 101);
|
||||
yield return this.CreateMonsterSpawn(457, this.NpcDictionary[41], 101, 100);
|
||||
yield return this.CreateMonsterSpawn(458, this.NpcDictionary[41], 86, 125);
|
||||
yield return this.CreateMonsterSpawn(459, this.NpcDictionary[41], 132, 124);
|
||||
yield return this.CreateMonsterSpawn(460, this.NpcDictionary[37], 110, 100);
|
||||
yield return this.CreateMonsterSpawn(461, this.NpcDictionary[40], 103, 8);
|
||||
yield return this.CreateMonsterSpawn(462, this.NpcDictionary[37], 128, 6);
|
||||
yield return this.CreateMonsterSpawn(463, this.NpcDictionary[40], 127, 34);
|
||||
yield return this.CreateMonsterSpawn(464, this.NpcDictionary[40], 130, 48);
|
||||
yield return this.CreateMonsterSpawn(465, this.NpcDictionary[40], 105, 55);
|
||||
yield return this.CreateMonsterSpawn(466, this.NpcDictionary[40], 84, 16);
|
||||
yield return this.CreateMonsterSpawn(467, this.NpcDictionary[40], 124, 24);
|
||||
yield return this.CreateMonsterSpawn(468, this.NpcDictionary[35], 14, 15);
|
||||
yield return this.CreateMonsterSpawn(469, this.NpcDictionary[35], 13, 33);
|
||||
yield return this.CreateMonsterSpawn(470, this.NpcDictionary[35], 30, 39);
|
||||
yield return this.CreateMonsterSpawn(471, this.NpcDictionary[35], 55, 8);
|
||||
yield return this.CreateMonsterSpawn(472, this.NpcDictionary[35], 44, 41);
|
||||
yield return this.CreateMonsterSpawn(473, this.NpcDictionary[35], 8, 25);
|
||||
yield return this.CreateMonsterSpawn(474, this.NpcDictionary[35], 37, 21);
|
||||
yield return this.CreateMonsterSpawn(475, this.NpcDictionary[35], 29, 24);
|
||||
yield return this.CreateMonsterSpawn(476, this.NpcDictionary[35], 19, 97);
|
||||
yield return this.CreateMonsterSpawn(477, this.NpcDictionary[35], 42, 109);
|
||||
yield return this.CreateMonsterSpawn(478, this.NpcDictionary[35], 22, 121);
|
||||
yield return this.CreateMonsterSpawn(479, this.NpcDictionary[35], 5, 122);
|
||||
yield return this.CreateMonsterSpawn(480, this.NpcDictionary[35], 5, 132);
|
||||
yield return this.CreateMonsterSpawn(481, this.NpcDictionary[35], 14, 137);
|
||||
yield return this.CreateMonsterSpawn(482, this.NpcDictionary[35], 38, 184);
|
||||
yield return this.CreateMonsterSpawn(483, this.NpcDictionary[35], 36, 174);
|
||||
yield return this.CreateMonsterSpawn(484, this.NpcDictionary[35], 23, 174);
|
||||
yield return this.CreateMonsterSpawn(485, this.NpcDictionary[35], 18, 168);
|
||||
yield return this.CreateMonsterSpawn(486, this.NpcDictionary[35], 7, 184);
|
||||
yield return this.CreateMonsterSpawn(487, this.NpcDictionary[35], 8, 200);
|
||||
yield return this.CreateMonsterSpawn(488, this.NpcDictionary[35], 19, 208);
|
||||
yield return this.CreateMonsterSpawn(489, this.NpcDictionary[35], 50, 241);
|
||||
yield return this.CreateMonsterSpawn(490, this.NpcDictionary[35], 54, 205);
|
||||
yield return this.CreateMonsterSpawn(491, this.NpcDictionary[40], 46, 208);
|
||||
yield return this.CreateMonsterSpawn(492, this.NpcDictionary[40], 18, 183);
|
||||
yield return this.CreateMonsterSpawn(493, this.NpcDictionary[40], 14, 224);
|
||||
yield return this.CreateMonsterSpawn(494, this.NpcDictionary[40], 7, 240);
|
||||
yield return this.CreateMonsterSpawn(495, this.NpcDictionary[40], 48, 232);
|
||||
yield return this.CreateMonsterSpawn(496, this.NpcDictionary[40], 48, 215);
|
||||
yield return this.CreateMonsterSpawn(497, this.NpcDictionary[40], 49, 191);
|
||||
yield return this.CreateMonsterSpawn(498, this.NpcDictionary[40], 48, 174);
|
||||
yield return this.CreateMonsterSpawn(499, this.NpcDictionary[38], 28, 212);
|
||||
yield return this.CreateMonsterSpawn(500, this.NpcDictionary[40], 23, 239);
|
||||
yield return this.CreateMonsterSpawn(501, this.NpcDictionary[35], 23, 195);
|
||||
yield return this.CreateMonsterSpawn(502, this.NpcDictionary[35], 31, 191);
|
||||
yield return this.CreateMonsterSpawn(503, this.NpcDictionary[35], 25, 167);
|
||||
yield return this.CreateMonsterSpawn(504, this.NpcDictionary[40], 11, 168);
|
||||
yield return this.CreateMonsterSpawn(505, this.NpcDictionary[40], 4, 177);
|
||||
yield return this.CreateMonsterSpawn(506, this.NpcDictionary[40], 47, 247);
|
||||
yield return this.CreateMonsterSpawn(507, this.NpcDictionary[34], 104, 232);
|
||||
yield return this.CreateMonsterSpawn(508, this.NpcDictionary[34], 102, 217);
|
||||
yield return this.CreateMonsterSpawn(509, this.NpcDictionary[34], 103, 205);
|
||||
yield return this.CreateMonsterSpawn(510, this.NpcDictionary[41], 103, 197);
|
||||
yield return this.CreateMonsterSpawn(511, this.NpcDictionary[41], 97, 196);
|
||||
yield return this.CreateMonsterSpawn(512, this.NpcDictionary[34], 101, 188);
|
||||
yield return this.CreateMonsterSpawn(513, this.NpcDictionary[34], 110, 206);
|
||||
yield return this.CreateMonsterSpawn(514, this.NpcDictionary[41], 115, 199);
|
||||
yield return this.CreateMonsterSpawn(515, this.NpcDictionary[41], 135, 174);
|
||||
yield return this.CreateMonsterSpawn(516, this.NpcDictionary[41], 122, 167);
|
||||
yield return this.CreateMonsterSpawn(517, this.NpcDictionary[41], 101, 168);
|
||||
yield return this.CreateMonsterSpawn(518, this.NpcDictionary[34], 96, 167);
|
||||
yield return this.CreateMonsterSpawn(519, this.NpcDictionary[37], 26, 108);
|
||||
yield return this.CreateMonsterSpawn(520, this.NpcDictionary[40], 19, 86);
|
||||
yield return this.CreateMonsterSpawn(521, this.NpcDictionary[40], 15, 119);
|
||||
yield return this.CreateMonsterSpawn(522, this.NpcDictionary[35], 34, 137);
|
||||
yield return this.CreateMonsterSpawn(523, this.NpcDictionary[35], 54, 121);
|
||||
yield return this.CreateMonsterSpawn(524, this.NpcDictionary[35], 30, 10);
|
||||
yield return this.CreateMonsterSpawn(525, this.NpcDictionary[40], 24, 9);
|
||||
yield return this.CreateMonsterSpawn(526, this.NpcDictionary[40], 30, 17);
|
||||
yield return this.CreateMonsterSpawn(527, this.NpcDictionary[40], 110, 8);
|
||||
yield return this.CreateMonsterSpawn(528, this.NpcDictionary[40], 134, 8);
|
||||
yield return this.CreateMonsterSpawn(529, this.NpcDictionary[40], 135, 17);
|
||||
yield return this.CreateMonsterSpawn(530, this.NpcDictionary[40], 111, 46);
|
||||
yield return this.CreateMonsterSpawn(531, this.NpcDictionary[40], 99, 48);
|
||||
yield return this.CreateMonsterSpawn(532, this.NpcDictionary[40], 85, 49);
|
||||
yield return this.CreateMonsterSpawn(533, this.NpcDictionary[40], 91, 56);
|
||||
yield return this.CreateMonsterSpawn(534, this.NpcDictionary[39], 195, 32);
|
||||
yield return this.CreateMonsterSpawn(535, this.NpcDictionary[39], 189, 38);
|
||||
yield return this.CreateMonsterSpawn(536, this.NpcDictionary[36], 195, 40);
|
||||
yield return this.CreateMonsterSpawn(537, this.NpcDictionary[39], 189, 48);
|
||||
yield return this.CreateMonsterSpawn(538, this.NpcDictionary[39], 196, 54);
|
||||
yield return this.CreateMonsterSpawn(539, this.NpcDictionary[39], 196, 207);
|
||||
yield return this.CreateMonsterSpawn(540, this.NpcDictionary[39], 195, 200);
|
||||
yield return this.CreateMonsterSpawn(541, this.NpcDictionary[39], 230, 229);
|
||||
yield return this.CreateMonsterSpawn(542, this.NpcDictionary[34], 238, 213);
|
||||
yield return this.CreateMonsterSpawn(543, this.NpcDictionary[34], 210, 225);
|
||||
yield return this.CreateMonsterSpawn(544, this.NpcDictionary[34], 215, 236);
|
||||
yield return this.CreateMonsterSpawn(545, this.NpcDictionary[39], 173, 227);
|
||||
yield return this.CreateMonsterSpawn(546, this.NpcDictionary[39], 183, 233);
|
||||
yield return this.CreateMonsterSpawn(547, this.NpcDictionary[39], 173, 237);
|
||||
|
||||
// Traps:
|
||||
yield return this.CreateMonsterSpawn(550, this.NpcDictionary[103], 5, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(551, this.NpcDictionary[103], 6, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(552, this.NpcDictionary[103], 4, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(553, this.NpcDictionary[103], 15, 172, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(554, this.NpcDictionary[103], 15, 173, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(555, this.NpcDictionary[103], 15, 174, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(556, this.NpcDictionary[103], 14, 207, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(557, this.NpcDictionary[103], 4, 194, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(558, this.NpcDictionary[103], 5, 194, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(559, this.NpcDictionary[103], 6, 194, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(560, this.NpcDictionary[103], 14, 208, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(561, this.NpcDictionary[103], 5, 237, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(562, this.NpcDictionary[103], 6, 237, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(563, this.NpcDictionary[103], 7, 237, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(564, this.NpcDictionary[103], 26, 104, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(565, this.NpcDictionary[103], 26, 103, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(566, this.NpcDictionary[103], 26, 102, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(567, this.NpcDictionary[103], 26, 101, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(568, this.NpcDictionary[103], 30, 101, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(569, this.NpcDictionary[103], 30, 100, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(570, this.NpcDictionary[103], 30, 99, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(571, this.NpcDictionary[103], 29, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(572, this.NpcDictionary[103], 28, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(573, this.NpcDictionary[103], 27, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(574, this.NpcDictionary[103], 26, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(575, this.NpcDictionary[103], 27, 128, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(576, this.NpcDictionary[103], 27, 129, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(577, this.NpcDictionary[103], 27, 130, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(578, this.NpcDictionary[103], 21, 243, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(579, this.NpcDictionary[103], 22, 243, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(580, this.NpcDictionary[103], 23, 243, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(581, this.NpcDictionary[103], 45, 110, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(582, this.NpcDictionary[103], 45, 110, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(583, this.NpcDictionary[103], 45, 110, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(584, this.NpcDictionary[103], 45, 109, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(585, this.NpcDictionary[103], 45, 108, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(586, this.NpcDictionary[103], 38, 110, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(587, this.NpcDictionary[103], 38, 109, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(588, this.NpcDictionary[103], 38, 108, Direction.NorthEast);
|
||||
yield return this.CreateMonsterSpawn(589, this.NpcDictionary[103], 35, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(590, this.NpcDictionary[103], 34, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(591, this.NpcDictionary[103], 33, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(592, this.NpcDictionary[103], 36, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(593, this.NpcDictionary[103], 37, 119, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(594, this.NpcDictionary[103], 37, 120, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(595, this.NpcDictionary[103], 34, 128, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(596, this.NpcDictionary[103], 34, 129, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(597, this.NpcDictionary[103], 34, 130, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(598, this.NpcDictionary[103], 47, 131, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(599, this.NpcDictionary[103], 47, 132, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(600, this.NpcDictionary[103], 41, 132, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(601, this.NpcDictionary[103], 41, 133, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(602, this.NpcDictionary[103], 36, 133, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(603, this.NpcDictionary[103], 36, 134, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(604, this.NpcDictionary[103], 46, 169, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(605, this.NpcDictionary[103], 46, 170, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(606, this.NpcDictionary[103], 46, 171, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(607, this.NpcDictionary[103], 46, 172, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(608, this.NpcDictionary[103], 42, 245, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(609, this.NpcDictionary[103], 42, 246, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(610, this.NpcDictionary[103], 52, 114, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(611, this.NpcDictionary[103], 53, 114, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(612, this.NpcDictionary[103], 54, 114, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(613, this.NpcDictionary[103], 53, 178, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(614, this.NpcDictionary[103], 54, 178, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(615, this.NpcDictionary[103], 52, 178, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(616, this.NpcDictionary[103], 51, 198, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(617, this.NpcDictionary[103], 51, 199, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(618, this.NpcDictionary[103], 51, 200, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(619, this.NpcDictionary[103], 51, 201, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(620, this.NpcDictionary[103], 85, 120, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(621, this.NpcDictionary[103], 86, 120, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(622, this.NpcDictionary[103], 84, 120, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(623, this.NpcDictionary[103], 93, 131, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(624, this.NpcDictionary[103], 93, 130, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(625, this.NpcDictionary[103], 93, 132, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(626, this.NpcDictionary[103], 82, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(627, this.NpcDictionary[103], 83, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(628, this.NpcDictionary[103], 84, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(629, this.NpcDictionary[103], 85, 175, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(630, this.NpcDictionary[103], 82, 184, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(631, this.NpcDictionary[103], 83, 184, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(632, this.NpcDictionary[103], 84, 184, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(633, this.NpcDictionary[103], 82, 201, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(634, this.NpcDictionary[103], 83, 201, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(635, this.NpcDictionary[103], 84, 201, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(636, this.NpcDictionary[103], 93, 243, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(637, this.NpcDictionary[103], 93, 244, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(638, this.NpcDictionary[103], 93, 245, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(639, this.NpcDictionary[103], 93, 246, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(640, this.NpcDictionary[103], 100, 185, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(641, this.NpcDictionary[103], 101, 185, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(642, this.NpcDictionary[103], 102, 185, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(643, this.NpcDictionary[103], 103, 185, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(644, this.NpcDictionary[103], 98, 225, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(645, this.NpcDictionary[103], 99, 225, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(646, this.NpcDictionary[103], 100, 225, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(647, this.NpcDictionary[103], 101, 225, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(648, this.NpcDictionary[103], 111, 227, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(649, this.NpcDictionary[103], 110, 227, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(650, this.NpcDictionary[103], 107, 242, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(651, this.NpcDictionary[103], 107, 243, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(652, this.NpcDictionary[103], 107, 244, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(653, this.NpcDictionary[103], 126, 104, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(654, this.NpcDictionary[103], 126, 105, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(655, this.NpcDictionary[103], 126, 106, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(656, this.NpcDictionary[103], 126, 107, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(657, this.NpcDictionary[103], 126, 115, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(658, this.NpcDictionary[103], 127, 115, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(659, this.NpcDictionary[103], 125, 115, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(660, this.NpcDictionary[103], 123, 135, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(661, this.NpcDictionary[103], 123, 134, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(662, this.NpcDictionary[103], 123, 133, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(663, this.NpcDictionary[103], 123, 132, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(664, this.NpcDictionary[103], 121, 208, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(665, this.NpcDictionary[103], 122, 208, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(666, this.NpcDictionary[103], 120, 208, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(667, this.NpcDictionary[103], 112, 227, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(668, this.NpcDictionary[103], 113, 227, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(669, this.NpcDictionary[103], 132, 126, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(670, this.NpcDictionary[103], 133, 126, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(671, this.NpcDictionary[103], 134, 126, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(672, this.NpcDictionary[103], 132, 178, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(673, this.NpcDictionary[103], 133, 178, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(674, this.NpcDictionary[103], 128, 221, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(675, this.NpcDictionary[103], 129, 221, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(676, this.NpcDictionary[103], 130, 221, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(677, this.NpcDictionary[103], 202, 45, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(678, this.NpcDictionary[103], 202, 46, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(679, this.NpcDictionary[103], 202, 47, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(680, this.NpcDictionary[103], 196, 62, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(681, this.NpcDictionary[103], 198, 62, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(682, this.NpcDictionary[103], 197, 62, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(683, this.NpcDictionary[103], 199, 62, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(684, this.NpcDictionary[103], 196, 58, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(685, this.NpcDictionary[103], 196, 57, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(686, this.NpcDictionary[103], 196, 56, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(687, this.NpcDictionary[103], 202, 48, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(688, this.NpcDictionary[103], 219, 234, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(689, this.NpcDictionary[103], 219, 235, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(690, this.NpcDictionary[103], 219, 236, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(691, this.NpcDictionary[103], 219, 237, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(692, this.NpcDictionary[103], 226, 115, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(693, this.NpcDictionary[103], 226, 116, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(694, this.NpcDictionary[103], 226, 117, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(695, this.NpcDictionary[103], 226, 233, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(696, this.NpcDictionary[103], 227, 233, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(697, this.NpcDictionary[103], 228, 233, Direction.SouthWest);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 34;
|
||||
monster.Designation = "Cursed Wizard";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Meteorite);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 54 },
|
||||
{ Stats.MaximumHealth, 4000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 160 },
|
||||
{ Stats.MaximumPhysBaseDmg, 170 },
|
||||
{ Stats.DefenseBase, 95 },
|
||||
{ Stats.AttackRatePvm, 270 },
|
||||
{ Stats.DefenseRatePvm, 80 },
|
||||
{ Stats.PoisonResistance, 5f / 255 },
|
||||
{ Stats.IceResistance, 5f / 255 },
|
||||
{ Stats.WaterResistance, 7f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 35;
|
||||
monster.Designation = "Death Gorgon";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.MonsterSkill);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 64 },
|
||||
{ Stats.MaximumHealth, 6000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 200 },
|
||||
{ Stats.MaximumPhysBaseDmg, 210 },
|
||||
{ Stats.DefenseBase, 130 },
|
||||
{ Stats.AttackRatePvm, 320 },
|
||||
{ Stats.DefenseRatePvm, 94 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 6f / 255 },
|
||||
{ Stats.WaterResistance, 6f / 255 },
|
||||
{ Stats.FireResistance, 8f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 36;
|
||||
monster.Designation = "Shadow";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 47 },
|
||||
{ Stats.MaximumHealth, 2800 },
|
||||
{ Stats.MinimumPhysBaseDmg, 148 },
|
||||
{ Stats.MaximumPhysBaseDmg, 153 },
|
||||
{ Stats.DefenseBase, 78 },
|
||||
{ Stats.AttackRatePvm, 235 },
|
||||
{ Stats.DefenseRatePvm, 67 },
|
||||
{ Stats.PoisonResistance, 3f / 255 },
|
||||
{ Stats.IceResistance, 3f / 255 },
|
||||
{ Stats.WaterResistance, 3f / 255 },
|
||||
{ Stats.FireResistance, 5f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 37;
|
||||
monster.Designation = "Devil";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2000 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Lightning);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 60 },
|
||||
{ Stats.MaximumHealth, 5000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 180 },
|
||||
{ Stats.MaximumPhysBaseDmg, 195 },
|
||||
{ Stats.DefenseBase, 115 },
|
||||
{ Stats.AttackRatePvm, 300 },
|
||||
{ Stats.DefenseRatePvm, 88 },
|
||||
{ Stats.PoisonResistance, 5f / 255 },
|
||||
{ Stats.IceResistance, 5f / 255 },
|
||||
{ Stats.WaterResistance, 5f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 38;
|
||||
monster.Designation = "Balrog";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 2;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(150 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.MonsterSkill);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 66 },
|
||||
{ Stats.MaximumHealth, 9000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 220 },
|
||||
{ Stats.MaximumPhysBaseDmg, 240 },
|
||||
{ Stats.DefenseBase, 160 },
|
||||
{ Stats.AttackRatePvm, 330 },
|
||||
{ Stats.DefenseRatePvm, 99 },
|
||||
{ Stats.PoisonResistance, 10f / 255 },
|
||||
{ Stats.IceResistance, 10f / 255 },
|
||||
{ Stats.WaterResistance, 10f / 255 },
|
||||
{ Stats.FireResistance, 15f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 39;
|
||||
monster.Designation = "Poison Shadow";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
monster.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.Poison);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 50 },
|
||||
{ Stats.MaximumHealth, 3500 },
|
||||
{ Stats.MinimumPhysBaseDmg, 155 },
|
||||
{ Stats.MaximumPhysBaseDmg, 160 },
|
||||
{ Stats.DefenseBase, 85 },
|
||||
{ Stats.AttackRatePvm, 250 },
|
||||
{ Stats.DefenseRatePvm, 73 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 4f / 255 },
|
||||
{ Stats.WaterResistance, 4f / 255 },
|
||||
{ Stats.FireResistance, 6f / 255 },
|
||||
{ Stats.PoisonDamageMultiplier, 0.03f },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 40;
|
||||
monster.Designation = "Death Knight";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1800 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 62 },
|
||||
{ Stats.MaximumHealth, 5500 },
|
||||
{ Stats.MinimumPhysBaseDmg, 190 },
|
||||
{ Stats.MaximumPhysBaseDmg, 200 },
|
||||
{ Stats.DefenseBase, 120 },
|
||||
{ Stats.AttackRatePvm, 310 },
|
||||
{ Stats.DefenseRatePvm, 91 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 6f / 255 },
|
||||
{ Stats.WaterResistance, 6f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 41;
|
||||
monster.Designation = "Death Cow";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 7;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 57 },
|
||||
{ Stats.MaximumHealth, 4500 },
|
||||
{ Stats.MinimumPhysBaseDmg, 170 },
|
||||
{ Stats.MaximumPhysBaseDmg, 180 },
|
||||
{ Stats.DefenseBase, 110 },
|
||||
{ Stats.AttackRatePvm, 285 },
|
||||
{ Stats.DefenseRatePvm, 85 },
|
||||
{ Stats.PoisonResistance, 5f / 255 },
|
||||
{ Stats.IceResistance, 5f / 255 },
|
||||
{ Stats.WaterResistance, 5f / 255 },
|
||||
{ Stats.FireResistance, 7f / 255 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var trap = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(trap);
|
||||
trap.Number = 103;
|
||||
trap.Designation = "Meteorite Trap";
|
||||
trap.MoveRange = 0;
|
||||
trap.AttackRange = 3;
|
||||
trap.ViewRange = 1;
|
||||
trap.MoveDelay = new TimeSpan(500 * TimeSpan.TicksPerMillisecond);
|
||||
trap.AttackDelay = new TimeSpan(1000 * TimeSpan.TicksPerMillisecond);
|
||||
trap.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
trap.ObjectKind = NpcObjectKind.Trap;
|
||||
trap.IntelligenceTypeName = typeof(AttackAreaWhenPressedTrapIntelligence).FullName;
|
||||
trap.Attribute = 1;
|
||||
trap.NumberOfMaximumItemDrops = 0;
|
||||
trap.AttackSkill = this.GameConfiguration.Skills.FirstOrDefault(s => s.Number == (short)SkillNumber.FlameofEvil);
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 90 },
|
||||
{ Stats.MaximumHealth, 1000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 160 },
|
||||
{ Stats.MaximumPhysBaseDmg, 190 },
|
||||
{ Stats.AttackRatePvm, 450 },
|
||||
{ Stats.DefenseRatePvm, 500 },
|
||||
};
|
||||
|
||||
trap.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
}
|
||||
}
|
||||
}
|
||||
295
src/Persistence/Initialization/Version075/Maps/Noria.cs
Normal file
295
src/Persistence/Initialization/Version075/Maps/Noria.cs
Normal file
@@ -0,0 +1,295 @@
|
||||
// <copyright file="Noria.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.Maps;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization for the Noria map.
|
||||
/// </summary>
|
||||
internal class Noria : BaseMapInitializer
|
||||
{
|
||||
/// <summary>
|
||||
/// The default number of the map.
|
||||
/// </summary>
|
||||
internal const byte Number = 3;
|
||||
|
||||
/// <summary>
|
||||
/// The default name of the map.
|
||||
/// </summary>
|
||||
internal const string Name = "Noria";
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Noria"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public Noria(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override byte MapNumber => Number;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override string MapName => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateNpcSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(1, this.NpcDictionary[253], 169, 109, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(2, this.NpcDictionary[253], 193, 110, Direction.South);
|
||||
yield return this.CreateMonsterSpawn(3, this.NpcDictionary[242], 173, 125, Direction.SouthWest);
|
||||
yield return this.CreateMonsterSpawn(4, this.NpcDictionary[243], 195, 124, Direction.South);
|
||||
yield return this.CreateMonsterSpawn(5, this.NpcDictionary[240], 172, 96, Direction.SouthEast);
|
||||
yield return this.CreateMonsterSpawn(6, this.NpcDictionary[238], 180, 103, Direction.SouthWest);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override IEnumerable<MonsterSpawnArea> CreateMonsterSpawns()
|
||||
{
|
||||
yield return this.CreateMonsterSpawn(21, this.NpcDictionary[26], 128, 251, 0, 128, 155);
|
||||
yield return this.CreateMonsterSpawn(22, this.NpcDictionary[27], 128, 251, 0, 128, 125);
|
||||
yield return this.CreateMonsterSpawn(23, this.NpcDictionary[28], 0, 128, 0, 128, 125);
|
||||
yield return this.CreateMonsterSpawn(24, this.NpcDictionary[29], 0, 128, 0, 128, 125);
|
||||
yield return this.CreateMonsterSpawn(25, this.NpcDictionary[30], 0, 251, 128, 245, 125);
|
||||
yield return this.CreateMonsterSpawn(26, this.NpcDictionary[31], 0, 251, 128, 245, 125);
|
||||
yield return this.CreateMonsterSpawn(27, this.NpcDictionary[32], 128, 251, 128, 245, 100);
|
||||
yield return this.CreateMonsterSpawn(28, this.NpcDictionary[33], 0, 128, 128, 245, 125);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override void CreateMonsters()
|
||||
{
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 26;
|
||||
monster.Designation = "Goblin";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1800 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 3 },
|
||||
{ Stats.MaximumHealth, 45 },
|
||||
{ Stats.MinimumPhysBaseDmg, 7 },
|
||||
{ Stats.MaximumPhysBaseDmg, 10 },
|
||||
{ Stats.DefenseBase, 2 },
|
||||
{ Stats.AttackRatePvm, 13 },
|
||||
{ Stats.DefenseRatePvm, 2 },
|
||||
{ Stats.WindResistance, 0f / 255 },
|
||||
{ Stats.PoisonResistance, 0f / 255 },
|
||||
{ Stats.IceResistance, 0f / 255 },
|
||||
{ Stats.WaterResistance, 0f / 255 },
|
||||
{ Stats.FireResistance, 0f / 255 },
|
||||
};
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 27;
|
||||
monster.Designation = "Chain Scorpion";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1800 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 5 },
|
||||
{ Stats.MaximumHealth, 80 },
|
||||
{ Stats.MinimumPhysBaseDmg, 13 },
|
||||
{ Stats.MaximumPhysBaseDmg, 17 },
|
||||
{ Stats.DefenseBase, 4 },
|
||||
{ Stats.AttackRatePvm, 23 },
|
||||
{ Stats.DefenseRatePvm, 4 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 28;
|
||||
monster.Designation = "Beetle Monster";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 10 },
|
||||
{ Stats.MaximumHealth, 165 },
|
||||
{ Stats.MinimumPhysBaseDmg, 26 },
|
||||
{ Stats.MaximumPhysBaseDmg, 31 },
|
||||
{ Stats.DefenseBase, 10 },
|
||||
{ Stats.AttackRatePvm, 44 },
|
||||
{ Stats.DefenseRatePvm, 10 },
|
||||
};
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 29;
|
||||
monster.Designation = "Hunter";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 4;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 13 },
|
||||
{ Stats.MaximumHealth, 220 },
|
||||
{ Stats.MinimumPhysBaseDmg, 36 },
|
||||
{ Stats.MaximumPhysBaseDmg, 41 },
|
||||
{ Stats.DefenseBase, 13 },
|
||||
{ Stats.AttackRatePvm, 56 },
|
||||
{ Stats.DefenseRatePvm, 13 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 30;
|
||||
monster.Designation = "Forest Monster";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 15 },
|
||||
{ Stats.MaximumHealth, 295 },
|
||||
{ Stats.MinimumPhysBaseDmg, 46 },
|
||||
{ Stats.MaximumPhysBaseDmg, 51 },
|
||||
{ Stats.DefenseBase, 15 },
|
||||
{ Stats.AttackRatePvm, 68 },
|
||||
{ Stats.DefenseRatePvm, 15 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 31;
|
||||
monster.Designation = "Agon";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 4;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 16 },
|
||||
{ Stats.MaximumHealth, 340 },
|
||||
{ Stats.MinimumPhysBaseDmg, 51 },
|
||||
{ Stats.MaximumPhysBaseDmg, 57 },
|
||||
{ Stats.DefenseBase, 16 },
|
||||
{ Stats.AttackRatePvm, 74 },
|
||||
{ Stats.DefenseRatePvm, 16 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 32;
|
||||
monster.Designation = "Stone Golem";
|
||||
monster.MoveRange = 2;
|
||||
monster.AttackRange = 2;
|
||||
monster.ViewRange = 3;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(2200 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 18 },
|
||||
{ Stats.MaximumHealth, 465 },
|
||||
{ Stats.MinimumPhysBaseDmg, 62 },
|
||||
{ Stats.MaximumPhysBaseDmg, 68 },
|
||||
{ Stats.DefenseBase, 20 },
|
||||
{ Stats.AttackRatePvm, 86 },
|
||||
{ Stats.DefenseRatePvm, 20 },
|
||||
};
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
|
||||
{
|
||||
var monster = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(monster);
|
||||
monster.Number = 33;
|
||||
monster.Designation = "Elite Goblin";
|
||||
monster.MoveRange = 3;
|
||||
monster.AttackRange = 1;
|
||||
monster.ViewRange = 5;
|
||||
monster.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
monster.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
monster.RespawnDelay = new TimeSpan(10 * TimeSpan.TicksPerSecond);
|
||||
monster.Attribute = 2;
|
||||
monster.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 8 },
|
||||
{ Stats.MaximumHealth, 120 },
|
||||
{ Stats.MinimumPhysBaseDmg, 19 },
|
||||
{ Stats.MaximumPhysBaseDmg, 23 },
|
||||
{ Stats.DefenseBase, 8 },
|
||||
{ Stats.AttackRatePvm, 33 },
|
||||
{ Stats.DefenseRatePvm, 8 },
|
||||
};
|
||||
|
||||
monster.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
monster.SetGuid(monster.Number);
|
||||
}
|
||||
}
|
||||
}
|
||||
453
src/Persistence/Initialization/Version075/MerchantStores.cs
Normal file
453
src/Persistence/Initialization/Version075/MerchantStores.cs
Normal file
@@ -0,0 +1,453 @@
|
||||
// <copyright file="MerchantStores.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.Entities;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Items;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization of all NPCs, which are no monsters.
|
||||
/// </summary>
|
||||
internal partial class NpcInitialization
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Potion Girl'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <returns>
|
||||
/// The created store.
|
||||
/// </returns>
|
||||
protected virtual ItemStorage CreatePotionGirlItemStorage(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreatePotion(0, 0, 1, 0), // Apple +0 x1
|
||||
this.ItemHelper.CreatePotion(8, 0, 3, 0), // Apple +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(1, 1, 1, 0), // Small Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(9, 1, 3, 0), // Small Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(2, 2, 1, 0), // Medium Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(10, 2, 3, 0), // Medium Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(3, 3, 1, 0), // Large Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(11, 3, 3, 0), // Large Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(4, 4, 1, 0), // Small Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(12, 4, 3, 0), // Small Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(5, 5, 1, 0), // Medium Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(13, 5, 3, 0), // Medium Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(6, 6, 1, 0), // Large Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(14, 6, 3, 0), // Large Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(7, 8, 1, 0), // Antidote +0 x1
|
||||
this.ItemHelper.CreatePotion(15, 8, 3, 0), // Antidote +0 x3
|
||||
|
||||
this.ItemHelper.CreateWeapon(16, ItemGroups.Bows, 7, 0, 0, false, false, null), // Bolt
|
||||
this.ItemHelper.CreateWeapon(17, ItemGroups.Bows, 15, 0, 0, false, false, null), // Arrow
|
||||
this.ItemHelper.CreateItem(18, 10, 14, 1, 0), // Town Portal Scroll
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the wandering merchant store.
|
||||
/// </summary>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <returns>
|
||||
/// The created store.
|
||||
/// </returns>
|
||||
protected virtual ItemStorage CreateWanderingMerchant(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreateSetItem(0, 5, ItemGroups.Helm, null, 0, 1, true), // Leather Helm +0+4+L
|
||||
this.ItemHelper.CreateSetItem(16, 5, ItemGroups.Armor, null, 0, 1, true), // Leather Armor +0+4+L
|
||||
this.ItemHelper.CreateSetItem(40, 5, ItemGroups.Pants, null, 0, 1, true), // Leather Pants +0+4+L
|
||||
this.ItemHelper.CreateSetItem(56, 5, ItemGroups.Boots, null, 0, 1, true), // Leather Boots +0+4+L
|
||||
this.ItemHelper.CreateSetItem(72, 5, ItemGroups.Gloves, null, 0, 1, true), // Leather Gloves +0+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(2, 0, ItemGroups.Helm, null, 2, 1, true), // Bronze Helm +2+4+L
|
||||
this.ItemHelper.CreateSetItem(18, 0, ItemGroups.Armor, null, 2, 1, true), // Bronze Armor +2+4+L
|
||||
this.ItemHelper.CreateSetItem(34, 0, ItemGroups.Pants, null, 2, 1, true), // Bronze Pants +2+4+L
|
||||
this.ItemHelper.CreateSetItem(50, 0, ItemGroups.Boots, null, 2, 1, true), // Bronze Boots +2+4+L
|
||||
this.ItemHelper.CreateSetItem(66, 0, ItemGroups.Gloves, null, 2, 1, true), // Bronze Gloves +2+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(4, 6, ItemGroups.Helm, null, 3, 1, true), // Scale Helm +3+4+L
|
||||
this.ItemHelper.CreateSetItem(20, 6, ItemGroups.Armor, null, 3, 1, true), // Scale Armor +3+4+L
|
||||
this.ItemHelper.CreateSetItem(36, 6, ItemGroups.Pants, null, 3, 1, true), // Scale Pants +3+4+L
|
||||
this.ItemHelper.CreateSetItem(52, 6, ItemGroups.Boots, null, 3, 1, true), // Scale Boots +3+4+L
|
||||
this.ItemHelper.CreateSetItem(68, 6, ItemGroups.Gloves, null, 3, 1, true), // Scale Gloves +3+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(6, 8, ItemGroups.Helm, null, 3, 1, true), // Brass Helm +3+4+L
|
||||
this.ItemHelper.CreateSetItem(22, 8, ItemGroups.Armor, null, 3, 1, true), // Brass Armor +3+4+L
|
||||
this.ItemHelper.CreateSetItem(38, 8, ItemGroups.Pants, null, 3, 1, true), // Brass Pants +3+4+L
|
||||
this.ItemHelper.CreateSetItem(54, 8, ItemGroups.Boots, null, 3, 1, true), // Brass Boots +3+4+L
|
||||
this.ItemHelper.CreateSetItem(70, 8, ItemGroups.Gloves, null, 3, 1, true), // Brass Gloves +3+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(88, 9, ItemGroups.Helm, null, 3, 1, true), // Plate Helm +3+4+L
|
||||
this.ItemHelper.CreateSetItem(104, 9, ItemGroups.Armor, null, 3, 1, true), // Plate Armor +3+4+L
|
||||
this.ItemHelper.CreateSetItem(82, 9, ItemGroups.Pants, null, 3, 1, true), // Plate Pants +3+4+L
|
||||
this.ItemHelper.CreateSetItem(98, 9, ItemGroups.Boots, null, 3, 1, true), // Plate Boots +3+4+L
|
||||
this.ItemHelper.CreateSetItem(84, 9, ItemGroups.Gloves, null, 3, 1, true), // Plate Gloves +3+4+L
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Hanzo the Blacksmith'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateHanzoTheBlacksmith(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreateShield(0, 0, false, null, 0, 1, true), // Small Shield +0+4+L
|
||||
this.ItemHelper.CreateShield(2, 4, true, null, 1, 1, true), // Buckler +1+4+L+S
|
||||
this.ItemHelper.CreateShield(4, 1, false, null, 2, 1, true), // Horn Shield +2+4+L
|
||||
this.ItemHelper.CreateShield(6, 2, false, null, 3, 1, true), // Kite Shield +3+4+L
|
||||
|
||||
this.ItemHelper.CreateShield(16, 6, true, null, 3, 1, true), // Skull Shield +3+4+L+S
|
||||
this.ItemHelper.CreateShield(18, 10, true, null, 3, 1, true), // Big Round Shield +3+4+L+S
|
||||
this.ItemHelper.CreateShield(20, 9, true, null, 3, 1, true), // Plate Shield +3+4+L+S
|
||||
this.ItemHelper.CreateShield(22, 7, true, null, 3, 1, true), // Spiked Shield +3+4+L+S
|
||||
|
||||
this.ItemHelper.CreateShield(32, 5, true, null, 3, 1, true), // Dragon Slayer +3+4+L+S
|
||||
this.ItemHelper.CreateShield(34, 8, true, null, 3, 1, true), // Tower Shield +3+4+L+S
|
||||
this.ItemHelper.CreateShield(36, 11, true, null, 3, 1, true), // Serpent Shield +3+4+L+S
|
||||
this.ItemHelper.CreateShield(38, 12, true, null, 3, 1, true), // Bronze Shield +3+4+L+S
|
||||
|
||||
this.ItemHelper.CreateWeapon(48, ItemGroups.Swords, 1, 0, 1, true, false, null), // Short Sword +0+4+L
|
||||
this.ItemHelper.CreateWeapon(49, ItemGroups.Axes, 1, 1, 1, true, false, null), // Hand Axe +1+4+L
|
||||
this.ItemHelper.CreateWeapon(50, ItemGroups.Scepters, 1, 2, 1, true, false, null), // Mace +2+4+L
|
||||
this.ItemHelper.CreateWeapon(51, ItemGroups.Swords, 2, 2, 1, true, false, null), // Rapier +2+4+L
|
||||
this.ItemHelper.CreateWeapon(52, ItemGroups.Axes, 2, 2, 1, true, false, null), // Double Axe +2+4+L
|
||||
this.ItemHelper.CreateWeapon(53, ItemGroups.Swords, 4, 3, 1, true, true, null), // Assassin +3+4+L
|
||||
this.ItemHelper.CreateWeapon(54, ItemGroups.Scepters, 1, 3, 1, true, true, null), // Morning Star +3+4+L
|
||||
this.ItemHelper.CreateWeapon(55, ItemGroups.Axes, 3, 3, 1, true, true, null), // Tomahawk +3+4+L
|
||||
|
||||
this.ItemHelper.CreateWeapon(72, ItemGroups.Swords, 0, 2, 1, true, false, null), // Kris +2+4+L
|
||||
this.ItemHelper.CreateWeapon(73, ItemGroups.Swords, 6, 3, 1, true, true, null), // Gladius +3+4+L+S
|
||||
this.ItemHelper.CreateWeapon(73, ItemGroups.Swords, 7, 3, 1, true, true, null), // Falchion +3+4+L+S
|
||||
this.ItemHelper.CreateWeapon(74, ItemGroups.Swords, 8, 3, 1, true, false, null), // Serpent Sword +3+4+L
|
||||
this.ItemHelper.CreateWeapon(75, ItemGroups.Swords, 5, 3, 1, true, true, null), // Blade +3+4+L+S
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Pasi the Mage'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreatePasiTheMageStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreateScroll(0, 3), // Scroll of Fire Ball
|
||||
this.ItemHelper.CreateScroll(1, 10), // Scroll of Power Wave
|
||||
this.ItemHelper.CreateScroll(2, 2), // Scroll of Lighting
|
||||
this.ItemHelper.CreateScroll(3, 1), // Scroll of Meteorite
|
||||
this.ItemHelper.CreateScroll(4, 5), // Scroll of Teleport
|
||||
this.ItemHelper.CreateScroll(5, 6), // Scroll of Ice
|
||||
this.ItemHelper.CreateScroll(6, 0), // Scroll of Poison
|
||||
|
||||
this.ItemHelper.CreateSetItem(16, 2, ItemGroups.Helm, null, 0, 1, true), // Pad Helm +0+4+L
|
||||
this.ItemHelper.CreateSetItem(32, 2, ItemGroups.Armor, null, 0, 1, true), // Pad Armor +0+4+L
|
||||
this.ItemHelper.CreateSetItem(48, 2, ItemGroups.Pants, null, 0, 1, true), // Pad Pants +0+4+L
|
||||
this.ItemHelper.CreateSetItem(64, 2, ItemGroups.Boots, null, 0, 1, true), // Pad Boots +0+4+L
|
||||
this.ItemHelper.CreateSetItem(80, 2, ItemGroups.Gloves, null, 0, 1, true), // Pad Gloves +0+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(18, 4, ItemGroups.Helm, null, 2, 1, true), // Bone Helm +2+4+L
|
||||
this.ItemHelper.CreateSetItem(34, 4, ItemGroups.Armor, null, 2, 1, true), // Bone Armor +2+4+L
|
||||
this.ItemHelper.CreateSetItem(50, 4, ItemGroups.Pants, null, 2, 1, true), // Bone Pants +2+4+L
|
||||
this.ItemHelper.CreateSetItem(66, 4, ItemGroups.Boots, null, 2, 1, true), // Bone Boots +2+4+L
|
||||
this.ItemHelper.CreateSetItem(82, 4, ItemGroups.Gloves, null, 2, 1, true), // Bone Gloves +2+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(20, 7, ItemGroups.Helm, null, 3, 1, true), // Sphinx Helm +3+4+L
|
||||
this.ItemHelper.CreateSetItem(36, 7, ItemGroups.Armor, null, 3, 1, true), // Sphinx Armor +3+4+L
|
||||
this.ItemHelper.CreateSetItem(60, 7, ItemGroups.Pants, null, 3, 1, true), // Sphinx Pants +3+4+L
|
||||
this.ItemHelper.CreateSetItem(76, 7, ItemGroups.Boots, null, 3, 1, true), // Sphinx Boots +3+4+L
|
||||
this.ItemHelper.CreateSetItem(92, 7, ItemGroups.Gloves, null, 3, 1, true), // Sphinx Gloves +3+4+L
|
||||
|
||||
this.ItemHelper.CreateWeapon(22, ItemGroups.Staff, 0, 0, 1, true, false, null), // Skull Staff +0+4+L
|
||||
this.ItemHelper.CreateWeapon(46, ItemGroups.Staff, 1, 2, 1, true, false, null), // Angelic Staff +2+4+L
|
||||
this.ItemHelper.CreateWeapon(70, ItemGroups.Staff, 2, 3, 1, true, false, null), // Serpent Staff +3+4+L
|
||||
this.ItemHelper.CreateWeapon(94, ItemGroups.Staff, 3, 3, 1, true, false, null), // Thunder Staff +3+4+L
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Elf Lala'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateElfLalaStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreatePotion(0, 0, 1, 0), // Apple +0 x1
|
||||
this.ItemHelper.CreatePotion(8, 0, 3, 0), // Apple +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(1, 1, 1, 0), // Small Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(9, 1, 3, 0), // Small Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(2, 2, 1, 0), // Medium Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(10, 2, 3, 0), // Medium Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(3, 3, 1, 0), // Large Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(11, 3, 3, 0), // Large Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(4, 4, 1, 0), // Small Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(12, 4, 3, 0), // Small Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(5, 5, 1, 0), // Medium Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(13, 5, 3, 0), // Medium Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(6, 6, 1, 0), // Large Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(14, 6, 3, 0), // Large Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(7, 8, 1, 0), // Antidote +0 x1
|
||||
this.ItemHelper.CreatePotion(15, 8, 3, 0), // Antidote +0 x3
|
||||
|
||||
this.ItemHelper.CreateOrb(16, 8),
|
||||
this.ItemHelper.CreateOrb(17, 9),
|
||||
this.ItemHelper.CreateOrb(18, 10),
|
||||
|
||||
this.ItemHelper.CreateItem(21, 10, 14, 1, 0), // Town Portal Scroll
|
||||
this.ItemHelper.CreateWeapon(22, ItemGroups.Bows, 7, 0, 0, false, false, null), // Bolt
|
||||
this.ItemHelper.CreateWeapon(23, ItemGroups.Bows, 15, 0, 0, false, false, null), // Arrow
|
||||
|
||||
this.ItemHelper.CreateSummonOrb(24, 0), // Orb of Summon "Goblin"
|
||||
this.ItemHelper.CreateSummonOrb(25, 1), // Orb of Summon + 1 "Stone Golem"
|
||||
this.ItemHelper.CreateSummonOrb(26, 2), // Orb of Summon + 2 "Assassin"
|
||||
this.ItemHelper.CreateSummonOrb(27, 3), // Orb of Summon + 3 "Elite Yeti"
|
||||
this.ItemHelper.CreateSummonOrb(28, 4), // Orb of Summon + 4 "Dark Knight"
|
||||
|
||||
this.ItemHelper.CreateSetItem(32, 10, ItemGroups.Helm, null, 0, 1, true), // Vine Helme +0+4+L
|
||||
this.ItemHelper.CreateSetItem(34, 10, ItemGroups.Armor, null, 0, 1, true), // Vine Armor +0+4+L
|
||||
this.ItemHelper.CreateSetItem(36, 10, ItemGroups.Pants, null, 0, 1, true), // Vine Pants +0+4+L
|
||||
this.ItemHelper.CreateSetItem(38, 10, ItemGroups.Gloves, null, 3, 1, true), // Vine Gloves +3+4+L
|
||||
this.ItemHelper.CreateSetItem(48, 10, ItemGroups.Boots, null, 3, 1, true), // Vine Boots +3+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(50, 11, ItemGroups.Helm, null, 2, 1, true), // Silk Helme +2+4+L
|
||||
this.ItemHelper.CreateSetItem(52, 11, ItemGroups.Armor, null, 2, 1, true), // Silk Armor +2+4+L
|
||||
this.ItemHelper.CreateSetItem(54, 11, ItemGroups.Pants, null, 2, 1, true), // Silk Pants +2+4+L
|
||||
this.ItemHelper.CreateSetItem(64, 11, ItemGroups.Gloves, null, 2, 1, true), // Silk Gloves +2+4+L
|
||||
this.ItemHelper.CreateSetItem(66, 11, ItemGroups.Boots, null, 2, 1, true), // Silk Boots +2+4+L
|
||||
|
||||
this.ItemHelper.CreateSetItem(68, 12, ItemGroups.Helm, null, 3, 1, true), // Wind Helme +3+4+L
|
||||
this.ItemHelper.CreateSetItem(70, 12, ItemGroups.Armor, null, 3, 1, true), // Wind Armor +3+4+L
|
||||
this.ItemHelper.CreateSetItem(80, 12, ItemGroups.Pants, null, 3, 1, true), // Wind Pants +3+4+L
|
||||
this.ItemHelper.CreateSetItem(82, 12, ItemGroups.Gloves, null, 3, 1, true), // Wind Gloves +3+4+L
|
||||
this.ItemHelper.CreateSetItem(84, 12, ItemGroups.Boots, null, 3, 1, true), // Wind Boots +3+4+L
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Izabel the Wizard'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateIzabelTheWizardStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreatePotion(0, 0, 1, 0), // Apple +0 x1
|
||||
this.ItemHelper.CreatePotion(8, 0, 3, 0), // Apple +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(1, 1, 1, 0), // Small Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(9, 1, 3, 0), // Small Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(2, 2, 1, 0), // Medium Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(10, 2, 3, 0), // Medium Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(3, 3, 1, 0), // Large Healing Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(11, 3, 3, 0), // Large Healing Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(4, 4, 1, 0), // Small Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(12, 4, 3, 0), // Small Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(5, 5, 1, 0), // Medium Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(13, 5, 3, 0), // Medium Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(6, 6, 1, 0), // Large Mana Potion +0 x1
|
||||
this.ItemHelper.CreatePotion(14, 6, 3, 0), // Large Mana Potion +0 x3
|
||||
|
||||
this.ItemHelper.CreatePotion(7, 8, 1, 0), // Antidote +0 x1
|
||||
this.ItemHelper.CreatePotion(15, 8, 3, 0), // Antidote +0 x3
|
||||
|
||||
this.ItemHelper.CreateSetItem(16, 3, ItemGroups.Helm, null, 3, 1, true), // Legendary Helm +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(18, 3, ItemGroups.Armor, null, 3, 1, true), // Legendary Armor +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(20, 3, ItemGroups.Pants, null, 3, 1, true), // Legendary Pants +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(22, 3, ItemGroups.Gloves, null, 3, 1, true), // Legendary Glover +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(32, 3, ItemGroups.Boots, null, 3, 1, true), // Legendary Boots +3+Luck+4
|
||||
this.ItemHelper.CreateItem(34, 10, 14, 1, 0), // Town Portal Scroll
|
||||
this.ItemHelper.CreateWeapon(35, ItemGroups.Bows, 7, 0, 0, false, false, null), // Bolt
|
||||
this.ItemHelper.CreateWeapon(36, ItemGroups.Bows, 15, 0, 0, false, false, null), // Arrow
|
||||
this.ItemHelper.CreateScroll(37, 4), // Scroll of Flame
|
||||
this.ItemHelper.CreateScroll(38, 7), // Scroll of Twister
|
||||
|
||||
this.ItemHelper.CreateWeapon(48, ItemGroups.Staff, 4, 3, 1, true, false, null), // Gordon Staff +3+Luck+4
|
||||
this.ItemHelper.CreateWeapon(50, ItemGroups.Staff, 5, 3, 1, true, false, null), // Legendary Staff +3+Luck+4
|
||||
this.ItemHelper.CreateWeapon(52, ItemGroups.Shields, 14, 3, 2, true, false, null), // Legendary Shield +3+Luck+5
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Eo the Craftsman'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateEoTheCraftsmanStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreateSetItem(0, 13, ItemGroups.Helm, null, 3, 1, true), // Spirit Helm +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(2, 13, ItemGroups.Armor, null, 3, 1, true), // Spirit Armor +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(4, 13, ItemGroups.Pants, null, 3, 1, true), // Spirit Pants +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(6, 13, ItemGroups.Gloves, null, 3, 1, true), // Spirit Gloves +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(16, 13, ItemGroups.Boots, null, 3, 1, true), // Spirit Boots +3+Luck+4
|
||||
|
||||
this.ItemHelper.CreateSetItem(18, 14, ItemGroups.Helm, null, 3, 1, true), // Guardian Helm +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(20, 14, ItemGroups.Armor, null, 3, 1, true), // Guardian Armor +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(22, 14, ItemGroups.Pants, null, 3, 1, true), // Guardian Pants +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(32, 14, ItemGroups.Gloves, null, 3, 1, true), // Guardian Gloves +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(34, 14, ItemGroups.Boots, null, 3, 1, true), // Guardian Boots +3+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(36, ItemGroups.Bows, 8, 1, 1, true, true, null), // Crossbow +1+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(38, ItemGroups.Bows, 9, 3, 1, true, true, null), // Golden Crossbow +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(48, ItemGroups.Bows, 0, 0, 1, true, true, null), // Short Bow +0+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(50, ItemGroups.Bows, 1, 0, 1, true, true, null), // bow +0+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(52, ItemGroups.Bows, 2, 2, 1, true, true, null), // Elven Bow +2+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(54, ItemGroups.Bows, 3, 3, 1, true, true, null), // Battle Bow +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(72, ItemGroups.Bows, 11, 3, 1, true, true, null), // Light Crossbow +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(74, ItemGroups.Bows, 4, 3, 1, true, true, null), // Tiger Bow +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(76, ItemGroups.Bows, 10, 3, 1, true, true, null), // Arquebus +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateShield(78, 3, false, null, 3, 2, true), // Elven Shield +3+Luck+5
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Zienna'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateZiennaStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreateSetItem(0, 1, ItemGroups.Helm, null, 3, 1, true), // Dragon Helm +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(2, 1, ItemGroups.Armor, null, 3, 1, true), // Dragon Armor +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(4, 1, ItemGroups.Pants, null, 3, 1, true), // Dragon Pants +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(6, 1, ItemGroups.Gloves, null, 3, 1, true), // Dragon Gloves +3+Luck+4
|
||||
this.ItemHelper.CreateSetItem(16, 1, ItemGroups.Boots, null, 3, 1, true), // Dragon Boots +3+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(20, ItemGroups.Swords, 9, 3, 1, true, true, null), // Sword of Salamander +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(22, ItemGroups.Swords, 11, 3, 1, true, true, null), // Legendary Sword +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(32, ItemGroups.Swords, 13, 3, 1, true, true, null), // Double Blade +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(33, ItemGroups.Swords, 14, 3, 1, true, true, null), // Lighting Sword +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(26, ItemGroups.Swords, 15, 3, 1, true, true, null), // Giant Sword +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(44, ItemGroups.Swords, 12, 3, 1, true, true, null), // Heliacal Sword +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(46, ItemGroups.Bows, 12, 3, 1, true, true, null), // Serpent Crossbow +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(56, ItemGroups.Spears, 9, 3, 1, true, true, null), // Bill of Balrog +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(50, ItemGroups.Spears, 8, 3, 1, true, true, null), // Great Scythe +3+Skill+Luck+4
|
||||
|
||||
this.ItemHelper.CreateWeapon(68, ItemGroups.Bows, 5, 3, 1, true, true, null), // Silver Bow +3+Skill+Luck+4
|
||||
this.ItemHelper.CreateWeapon(70, ItemGroups.Bows, 13, 3, 1, true, true, null), // Bluewing Crossbow +3+Skill+Luck+4
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Lumen the Barmaid'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateLumenTheBarmaidStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreatePotion(0, 9, 1, 0), // Ale
|
||||
this.ItemHelper.CreateItem(1, 10, 14, 1, 0), // Town Portal Scroll
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store of 'Carmen the Barmaid'.
|
||||
/// </summary>
|
||||
/// <param name="number">The number of the store.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected virtual ItemStorage CreateCarenTheBarmaidStore(short number)
|
||||
{
|
||||
List<Item> itemList = new()
|
||||
{
|
||||
this.ItemHelper.CreatePotion(0, 9, 1, 0), // Ale
|
||||
this.ItemHelper.CreateItem(1, 10, 14, 1, 0), // Town Portal Scroll
|
||||
};
|
||||
|
||||
var storage = this.CreateMerchantStore(itemList);
|
||||
storage.SetGuid(number);
|
||||
return storage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the merchant store with the specified item list.
|
||||
/// </summary>
|
||||
/// <param name="itemList">The item list.</param>
|
||||
/// <returns>The created store.</returns>
|
||||
protected ItemStorage CreateMerchantStore(IEnumerable<Item> itemList)
|
||||
{
|
||||
var merchantStore = this.Context.CreateNew<ItemStorage>();
|
||||
|
||||
foreach (var item in itemList)
|
||||
{
|
||||
merchantStore.Items.Add(item);
|
||||
}
|
||||
|
||||
return merchantStore;
|
||||
}
|
||||
}
|
||||
272
src/Persistence/Initialization/Version075/NpcInitialization.cs
Normal file
272
src/Persistence/Initialization/Version075/NpcInitialization.cs
Normal file
@@ -0,0 +1,272 @@
|
||||
// <copyright file="NpcInitialization.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.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.GameLogic.NPC;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Items;
|
||||
|
||||
/// <summary>
|
||||
/// The initialization of all NPCs, which are no monsters.
|
||||
/// </summary>
|
||||
internal partial class NpcInitialization : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NpcInitialization" /> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public NpcInitialization(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
this.ItemHelper = new ItemHelper(this.Context, this.GameConfiguration);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the item helper.
|
||||
/// </summary>
|
||||
protected ItemHelper ItemHelper { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates all NPCs.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Extracted from Monsters.txt by Regex: (?m)^(\d+)\t1\t"(.*?)".*?$
|
||||
/// Replace by: yield return new MonsterDefinition() { Number = $1, Designation="$2" };
|
||||
/// yield return new (\w*) { Number = (\d+), Designation = (".*?").*?(, NpcWindow = (.*) ){0,1}};
|
||||
/// Replace by: <![CDATA[ {\n var def = this.Context.CreateNew<$1>();\n def.Number = $2;\n def.Designation = $3;\n def.NpcWindow = $5;\n this.GameConfiguration.Monsters.Add(def);\n}\n ]]>.
|
||||
/// </remarks>
|
||||
public override void Initialize()
|
||||
{
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 238;
|
||||
def.Designation = "Chaos Goblin";
|
||||
def.NpcWindow = NpcWindow.ChaosMachine;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 239;
|
||||
def.Designation = "Arena Guard";
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 240;
|
||||
def.Designation = "Baz The Vault Keeper";
|
||||
def.NpcWindow = NpcWindow.VaultStorage;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 241;
|
||||
def.Designation = "Guild Master";
|
||||
def.NpcWindow = NpcWindow.GuildMaster;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 242;
|
||||
def.Designation = "Elf Lala";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateElfLalaStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 243;
|
||||
def.Designation = "Eo the Craftsman";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateEoTheCraftsmanStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 244;
|
||||
def.Designation = "Caren the Barmaid";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateCarenTheBarmaidStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 245;
|
||||
def.Designation = "Izabel The Wizard";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateIzabelTheWizardStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 246;
|
||||
def.Designation = "Zienna The Weapons Merchant";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateZiennaStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 247;
|
||||
def.Designation = "Crossbow Guard";
|
||||
def.ObjectKind = NpcObjectKind.Guard;
|
||||
def.MoveRange = 3;
|
||||
def.AttackRange = 5;
|
||||
def.ViewRange = 7;
|
||||
def.IntelligenceTypeName = typeof(GuardIntelligence).FullName;
|
||||
def.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
def.AttackDelay = new TimeSpan(1500 * TimeSpan.TicksPerMillisecond);
|
||||
def.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
def.NumberOfMaximumItemDrops = 0;
|
||||
def.Attribute = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 90 },
|
||||
{ Stats.MaximumHealth, 10000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 180 },
|
||||
{ Stats.MaximumPhysBaseDmg, 195 },
|
||||
{ Stats.AttackRatePvm, 300 },
|
||||
{ Stats.DefenseRatePvm, 100 },
|
||||
{ Stats.DefenseBase, 70 },
|
||||
};
|
||||
def.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 248;
|
||||
def.Designation = "Wandering Merchant Martin";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateWanderingMerchant(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 249;
|
||||
def.Designation = "Berdysh Guard";
|
||||
def.ObjectKind = NpcObjectKind.Guard;
|
||||
def.MoveRange = 3;
|
||||
def.AttackRange = 2;
|
||||
def.ViewRange = 7;
|
||||
def.IntelligenceTypeName = typeof(GuardIntelligence).FullName;
|
||||
def.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
def.AttackDelay = new TimeSpan(1500 * TimeSpan.TicksPerMillisecond);
|
||||
def.RespawnDelay = new TimeSpan(3 * TimeSpan.TicksPerSecond);
|
||||
def.NumberOfMaximumItemDrops = 0;
|
||||
def.Attribute = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 90 },
|
||||
{ Stats.MaximumHealth, 10000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 180 },
|
||||
{ Stats.MaximumPhysBaseDmg, 195 },
|
||||
{ Stats.AttackRatePvm, 300 },
|
||||
{ Stats.DefenseRatePvm, 100 },
|
||||
{ Stats.DefenseBase, 70 },
|
||||
};
|
||||
def.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 250;
|
||||
def.Designation = "Wandering Merchant Harold";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateWanderingMerchant(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 251;
|
||||
def.Designation = "Hanzo The Blacksmith";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateHanzoTheBlacksmith(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 253;
|
||||
def.Designation = "Potion Girl Amy";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreatePotionGirlItemStorage(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 254;
|
||||
def.Designation = "Pasi The Mage";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreatePasiTheMageStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 255;
|
||||
def.Designation = "Lumen the Barmaid";
|
||||
def.NpcWindow = NpcWindow.Merchant;
|
||||
def.ObjectKind = NpcObjectKind.PassiveNpc;
|
||||
def.MerchantStore = this.CreateLumenTheBarmaidStore(def.Number);
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
|
||||
{
|
||||
var def = this.Context.CreateNew<MonsterDefinition>();
|
||||
def.Number = 200;
|
||||
def.Designation = "Soccerball";
|
||||
def.ObjectKind = NpcObjectKind.SoccerBall;
|
||||
def.SetGuid(def.Number);
|
||||
this.GameConfiguration.Monsters.Add(def);
|
||||
}
|
||||
}
|
||||
}
|
||||
144
src/Persistence/Initialization/Version075/SkillsInitializer.cs
Normal file
144
src/Persistence/Initialization/Version075/SkillsInitializer.cs
Normal file
@@ -0,0 +1,144 @@
|
||||
// <copyright file="SkillsInitializer.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.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Skills;
|
||||
|
||||
/// <summary>
|
||||
/// Initialization logic for <see cref="Skill"/>s.
|
||||
/// </summary>
|
||||
internal class SkillsInitializer : SkillsInitializerBase
|
||||
{
|
||||
private static readonly IDictionary<SkillNumber, MagicEffectNumber> EffectsOfSkills = new Dictionary<SkillNumber, MagicEffectNumber>
|
||||
{
|
||||
{ SkillNumber.Defense, MagicEffectNumber.ShieldSkill },
|
||||
{ SkillNumber.GreaterDefense, MagicEffectNumber.GreaterDefense },
|
||||
{ SkillNumber.GreaterDamage, MagicEffectNumber.GreaterDamage },
|
||||
{ SkillNumber.Heal, MagicEffectNumber.Heal },
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SkillsInitializer"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The persistence context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public SkillsInitializer(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes this instance.
|
||||
/// </summary>
|
||||
public override void Initialize()
|
||||
{
|
||||
this.CreateSkill(SkillNumber.Poison, "Poison", CharacterClasses.DarkWizard, DamageType.Wizardry, 12, 6, manaConsumption: 42, energyRequirement: 140, elementalModifier: ElementalType.Poison);
|
||||
this.CreateSkill(SkillNumber.Meteorite, "Meteorite", CharacterClasses.DarkWizard, DamageType.Wizardry, 21, 6, manaConsumption: 12, energyRequirement: 104, elementalModifier: ElementalType.Earth);
|
||||
this.CreateSkill(SkillNumber.Lightning, "Lightning", CharacterClasses.DarkWizard, DamageType.Wizardry, 17, 6, manaConsumption: 15, energyRequirement: 72, elementalModifier: ElementalType.Lightning);
|
||||
this.CreateSkill(SkillNumber.FireBall, "Fire Ball", CharacterClasses.DarkWizard, DamageType.Wizardry, 8, 6, manaConsumption: 3, energyRequirement: 40, elementalModifier: ElementalType.Fire);
|
||||
this.CreateSkill(SkillNumber.Flame, "Flame", CharacterClasses.DarkWizard, DamageType.Wizardry, 25, 6, manaConsumption: 50, energyRequirement: 160, elementalModifier: ElementalType.Fire, skillType: SkillType.AreaSkillAutomaticHits);
|
||||
this.AddAreaSkillSettings(SkillNumber.Flame, false, default, default, default, true, TimeSpan.Zero, TimeSpan.FromMilliseconds(500), 0, 2, default, default, 0.5f, targetAreaDiameter: 2, useTargetAreaFilter: true);
|
||||
this.CreateSkill(SkillNumber.Teleport, "Teleport", CharacterClasses.DarkWizard, DamageType.Wizardry, distance: 6, manaConsumption: 30, energyRequirement: 88, skillType: SkillType.Other);
|
||||
this.CreateSkill(SkillNumber.Ice, "Ice", CharacterClasses.DarkWizard, DamageType.Wizardry, 10, 6, manaConsumption: 38, energyRequirement: 120, elementalModifier: ElementalType.Ice);
|
||||
this.CreateSkill(SkillNumber.Twister, "Twister", CharacterClasses.DarkWizard, DamageType.Wizardry, 35, 6, manaConsumption: 60, energyRequirement: 180, elementalModifier: ElementalType.Wind, skillType: SkillType.AreaSkillAutomaticHits);
|
||||
this.AddAreaSkillSettings(SkillNumber.Twister, true, 1.5f, 1.5f, 4f, true, TimeSpan.FromMilliseconds(300), TimeSpan.FromMilliseconds(1000), 0, 2, default, default, 0.7f);
|
||||
this.CreateSkill(SkillNumber.EvilSpirit, "Evil Spirit", CharacterClasses.DarkWizard, DamageType.Wizardry, 45, 7, manaConsumption: 90, energyRequirement: 220, skillType: SkillType.AreaSkillAutomaticHits);
|
||||
this.AddAreaSkillSettings(SkillNumber.EvilSpirit, false, default, default, default, true, TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(1000), 0, 2, default, default, 0.7f);
|
||||
this.CreateSkill(SkillNumber.Hellfire, "Hellfire", CharacterClasses.DarkWizard, DamageType.Wizardry, 120, manaConsumption: 160, energyRequirement: 260, elementalModifier: ElementalType.Fire, skillType: SkillType.AreaSkillAutomaticHits);
|
||||
this.CreateSkill(SkillNumber.PowerWave, "Power Wave", CharacterClasses.DarkWizard, DamageType.Wizardry, 14, 6, manaConsumption: 5, energyRequirement: 56);
|
||||
this.CreateSkill(SkillNumber.AquaBeam, "Aqua Beam", CharacterClasses.DarkWizard, DamageType.Wizardry, 80, 6, manaConsumption: 140, energyRequirement: 345, elementalModifier: ElementalType.Water, skillType: SkillType.AreaSkillAutomaticHits);
|
||||
this.AddAreaSkillSettings(SkillNumber.AquaBeam, true, 1.5f, 1.5f, 8f);
|
||||
this.CreateSkill(SkillNumber.EnergyBall, "Energy Ball", CharacterClasses.DarkWizard, DamageType.Wizardry, 3, 6, manaConsumption: 1);
|
||||
this.CreateSkill(SkillNumber.Defense, "Defense", CharacterClasses.DarkKnight, manaConsumption: 30, skillType: SkillType.Buff, skillTarget: SkillTarget.Explicit, implicitTargetRange: 0, targetRestriction: SkillTargetRestriction.Self);
|
||||
this.CreateSkill(SkillNumber.FallingSlash, "Falling Slash", CharacterClasses.DarkKnight, DamageType.Physical, distance: 3, manaConsumption: 9, movesToTarget: true, movesTarget: true);
|
||||
this.CreateSkill(SkillNumber.Lunge, "Lunge", CharacterClasses.DarkKnight, DamageType.Physical, distance: 2, manaConsumption: 9, movesToTarget: true, movesTarget: true);
|
||||
this.CreateSkill(SkillNumber.Uppercut, "Uppercut", CharacterClasses.DarkKnight, DamageType.Physical, distance: 2, manaConsumption: 8, movesToTarget: true, movesTarget: true);
|
||||
this.CreateSkill(SkillNumber.Cyclone, "Cyclone", CharacterClasses.DarkKnight, DamageType.Physical, distance: 2, manaConsumption: 9, movesToTarget: true, movesTarget: true);
|
||||
this.CreateSkill(SkillNumber.Slash, "Slash", CharacterClasses.DarkKnight, DamageType.Physical, distance: 2, manaConsumption: 10, movesToTarget: true, movesTarget: true);
|
||||
this.CreateSkill(SkillNumber.TripleShot, "Triple Shot", CharacterClasses.FairyElf, DamageType.Physical, distance: 6, manaConsumption: 5, skillType: SkillType.AreaSkillExplicitHits);
|
||||
this.CreateSkill(SkillNumber.Heal, "Heal", CharacterClasses.FairyElf, distance: 6, manaConsumption: 20, energyRequirement: 52, skillType: SkillType.Regeneration, targetRestriction: SkillTargetRestriction.Player);
|
||||
this.CreateSkill(SkillNumber.GreaterDefense, "Greater Defense", CharacterClasses.FairyElf, distance: 6, manaConsumption: 30, energyRequirement: 72, skillType: SkillType.Buff, targetRestriction: SkillTargetRestriction.Player);
|
||||
this.CreateSkill(SkillNumber.GreaterDamage, "Greater Damage", CharacterClasses.FairyElf, distance: 6, manaConsumption: 40, energyRequirement: 92, skillType: SkillType.Buff, targetRestriction: SkillTargetRestriction.Player);
|
||||
this.CreateSkill(SkillNumber.SummonGoblin, "Summon Goblin", CharacterClasses.FairyElf, manaConsumption: 40, energyRequirement: 30, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.SummonStoneGolem, "Summon Stone Golem", CharacterClasses.FairyElf, manaConsumption: 70, energyRequirement: 60, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.SummonAssassin, "Summon Assassin", CharacterClasses.FairyElf, manaConsumption: 110, energyRequirement: 90, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.SummonEliteYeti, "Summon Elite Yeti", CharacterClasses.FairyElf, manaConsumption: 160, energyRequirement: 130, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.SummonDarkKnight, "Summon Dark Knight", CharacterClasses.FairyElf, manaConsumption: 200, energyRequirement: 170, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.SummonBali, "Summon Bali", CharacterClasses.FairyElf, manaConsumption: 250, energyRequirement: 210, skillType: SkillType.SummonMonster);
|
||||
this.CreateSkill(SkillNumber.FlameofEvil, "Flame of Evil (Monster)", damage: 120, manaConsumption: 160, levelRequirement: 60, energyRequirement: 100);
|
||||
|
||||
this.InitializeEffects();
|
||||
this.MapSkillsToEffects();
|
||||
this.CreateSpecialSummonMonsters();
|
||||
this.FixMagicEffectNumbers();
|
||||
}
|
||||
|
||||
private void FixMagicEffectNumbers()
|
||||
{
|
||||
foreach (var skill in this.GameConfiguration.Skills.Where(s => s.MagicEffectDef is { }))
|
||||
{
|
||||
var effect = skill.MagicEffectDef;
|
||||
if (effect?.Number >= 0)
|
||||
{
|
||||
effect.Number = skill.Number;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateSpecialSummonMonsters()
|
||||
{
|
||||
var bali = this.Context.CreateNew<MonsterDefinition>();
|
||||
this.GameConfiguration.Monsters.Add(bali);
|
||||
bali.Number = 150;
|
||||
bali.Designation = "Bali";
|
||||
bali.MoveRange = 3;
|
||||
bali.AttackRange = 1;
|
||||
bali.ViewRange = 7;
|
||||
bali.MoveDelay = new TimeSpan(400 * TimeSpan.TicksPerMillisecond);
|
||||
bali.AttackDelay = new TimeSpan(1600 * TimeSpan.TicksPerMillisecond);
|
||||
bali.RespawnDelay = new TimeSpan(100 * TimeSpan.TicksPerSecond);
|
||||
bali.Attribute = 2;
|
||||
bali.NumberOfMaximumItemDrops = 1;
|
||||
var attributes = new Dictionary<AttributeDefinition, float>
|
||||
{
|
||||
{ Stats.Level, 52 },
|
||||
{ Stats.MaximumHealth, 5000 },
|
||||
{ Stats.MinimumPhysBaseDmg, 165 },
|
||||
{ Stats.MaximumPhysBaseDmg, 170 },
|
||||
{ Stats.DefenseBase, 100 },
|
||||
{ Stats.AttackRatePvm, 260 },
|
||||
{ Stats.DefenseRatePvm, 75 },
|
||||
{ Stats.PoisonResistance, 6f / 255 },
|
||||
{ Stats.IceResistance, 6f / 255 },
|
||||
{ Stats.WaterResistance, 6f / 255 },
|
||||
{ Stats.FireResistance, 6f / 255 },
|
||||
};
|
||||
|
||||
bali.AddAttributes(attributes, this.Context, this.GameConfiguration);
|
||||
}
|
||||
|
||||
private void InitializeEffects()
|
||||
{
|
||||
new DefenseEffectInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
new GreaterDamageEffectInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
new GreaterDefenseEffectInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
new HealEffectInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
new AlcoholEffectInitializer(this.Context, this.GameConfiguration).Initialize();
|
||||
}
|
||||
|
||||
private void MapSkillsToEffects()
|
||||
{
|
||||
foreach (var effectOfSkill in EffectsOfSkills)
|
||||
{
|
||||
var skill = this.GameConfiguration.Skills.First(s => s.Number == (short)effectOfSkill.Key);
|
||||
var effect = this.GameConfiguration.MagicEffects.First(e => e.Number == (short)effectOfSkill.Value);
|
||||
skill.MagicEffectDef = effect;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,518 @@
|
||||
// <copyright file="AccountInitializerBase.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.TestAccounts;
|
||||
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.DataModel.Entities;
|
||||
using MUnique.OpenMU.GameLogic;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
using MUnique.OpenMU.Persistence.Initialization.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Abstract base class for a test account initializer.
|
||||
/// </summary>
|
||||
internal abstract class AccountInitializerBase : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="AccountInitializerBase"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
/// <param name="accountName">Name of the account.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
protected AccountInitializerBase(IContext context, GameConfiguration gameConfiguration, string accountName, int level)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
this.Level = level;
|
||||
this.AccountName = accountName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The level.
|
||||
/// </value>
|
||||
protected int Level { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the account.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The name of the account.
|
||||
/// </value>
|
||||
protected string AccountName { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public sealed override void Initialize()
|
||||
{
|
||||
this.CreateAccount();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the account.
|
||||
/// </summary>
|
||||
/// <returns>The created account.</returns>
|
||||
protected virtual Account CreateAccount()
|
||||
{
|
||||
var account = this.Context.CreateNew<Account>();
|
||||
account.LoginName = this.AccountName;
|
||||
account.PasswordHash = BCrypt.Net.BCrypt.HashPassword(this.AccountName);
|
||||
account.Vault = this.Context.CreateNew<ItemStorage>();
|
||||
|
||||
if (this.CreateKnight() is { } knight)
|
||||
{
|
||||
account.Characters.Add(knight);
|
||||
}
|
||||
|
||||
if (this.CreateElf() is { } elf)
|
||||
{
|
||||
account.Characters.Add(elf);
|
||||
}
|
||||
|
||||
if (this.CreateWizard() is { } wizard)
|
||||
{
|
||||
account.Characters.Add(wizard);
|
||||
}
|
||||
|
||||
return account;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the knight.
|
||||
/// </summary>
|
||||
/// <returns>The dark knight, or null.</returns>
|
||||
protected abstract Character? CreateKnight();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the elf.
|
||||
/// </summary>
|
||||
/// <returns>The elf, or null.</returns>
|
||||
protected abstract Character? CreateElf();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the wizard.
|
||||
/// </summary>
|
||||
/// <returns>The wizard, or null.</returns>
|
||||
protected abstract Character? CreateWizard();
|
||||
|
||||
/// <summary>
|
||||
/// Creates the knight.
|
||||
/// </summary>
|
||||
/// <param name="characterClassNumber">The character class number.</param>
|
||||
/// <returns>The created knight.</returns>
|
||||
protected Character CreateKnight(CharacterClassNumber characterClassNumber)
|
||||
{
|
||||
return this.CreateCharacter(this.AccountName + "Dk", characterClassNumber, this.Level, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the wizard.
|
||||
/// </summary>
|
||||
/// <param name="characterClassNumber">The character class number.</param>
|
||||
/// <returns>The created wizard.</returns>
|
||||
protected Character CreateWizard(CharacterClassNumber characterClassNumber)
|
||||
{
|
||||
return this.CreateCharacter(this.AccountName + "Dw", characterClassNumber, this.Level, 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the elf.
|
||||
/// </summary>
|
||||
/// <param name="characterClassNumber">The character class number.</param>
|
||||
/// <returns>The created elf.</returns>
|
||||
protected Character CreateElf(CharacterClassNumber characterClassNumber)
|
||||
{
|
||||
return this.CreateCharacter(this.AccountName + "Elf", characterClassNumber, this.Level, 2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the character.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="characterClass">The character class.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="slot">The slot.</param>
|
||||
/// <returns>The created character.</returns>
|
||||
protected virtual Character CreateCharacter(string name, CharacterClassNumber characterClass, int level, byte slot)
|
||||
{
|
||||
var character = this.Context.CreateNew<Character>();
|
||||
character.CharacterClass = this.GameConfiguration.CharacterClasses.First(c => c.Number == (byte)characterClass);
|
||||
character.Name = name;
|
||||
character.CharacterSlot = slot;
|
||||
character.CreateDate = DateTime.UtcNow;
|
||||
character.KeyConfiguration = new byte[30];
|
||||
foreach (
|
||||
var attribute in
|
||||
character.CharacterClass.StatAttributes.Select(
|
||||
a => this.Context.CreateNew<StatAttribute>(a.Attribute, a.BaseValue)))
|
||||
{
|
||||
character.Attributes.Add(attribute);
|
||||
}
|
||||
|
||||
character.CurrentMap = character.CharacterClass.HomeMap;
|
||||
var spawnGate = character.CurrentMap!.ExitGates.Where(m => m.IsSpawnGate).SelectRandom();
|
||||
if (spawnGate is not null)
|
||||
{
|
||||
character.PositionX = (byte)Rand.NextInt(spawnGate.X1, spawnGate.X2);
|
||||
character.PositionY = (byte)Rand.NextInt(spawnGate.Y1, spawnGate.Y2);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException($"{character.CurrentMap.Name} has no spawn gate.");
|
||||
}
|
||||
|
||||
character.Attributes.First(a => a.Definition == Stats.Level).Value = level;
|
||||
character.Experience = GameConfigurationInitializerBase.CalculateNeededExperience(level);
|
||||
character.LevelUpPoints = (int)((character.Attributes.First(a => a.Definition == Stats.Level).Value - 1)
|
||||
* character.CharacterClass.StatAttributes.First(a => a.Attribute == Stats.PointsPerLevelUp).BaseValue);
|
||||
character.Inventory = this.Context.CreateNew<ItemStorage>();
|
||||
character.Inventory.Money = 10000000;
|
||||
return character;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an armor item.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="setNumber">The set number.</param>
|
||||
/// <param name="group">The group.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="optionLevel">The option level.</param>
|
||||
/// <param name="luck">If set to <c>true</c>, the item should have luck.</param>
|
||||
/// <returns>The created item.</returns>
|
||||
protected Item CreateArmorItem(byte itemSlot, byte setNumber, byte group, byte level = 0, byte optionLevel = 0, bool luck = false)
|
||||
{
|
||||
var item = this.Context.CreateNew<Item>();
|
||||
item.Definition = this.GameConfiguration.Items.First(def => def.Group == group && def.Number == setNumber);
|
||||
item.Level = level;
|
||||
item.Durability = item.Definition.Durability;
|
||||
item.ItemSlot = itemSlot;
|
||||
|
||||
if (optionLevel > 0)
|
||||
{
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = item.Definition.PossibleItemOptions.SelectMany(o => o.PossibleOptions)
|
||||
.First(o => o.OptionType == ItemOptionTypes.Option);
|
||||
optionLink.Level = optionLevel;
|
||||
item.ItemOptions.Add(optionLink);
|
||||
}
|
||||
|
||||
if (luck)
|
||||
{
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = item.Definition.PossibleItemOptions.SelectMany(o => o.PossibleOptions)
|
||||
.First(o => o.OptionType == ItemOptionTypes.Luck);
|
||||
item.ItemOptions.Add(optionLink);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the test jewels and potions.
|
||||
/// </summary>
|
||||
/// <param name="inventory">The inventory.</param>
|
||||
protected void AddTestJewelsAndPotions(ItemStorage inventory)
|
||||
{
|
||||
inventory.Items.Add(this.CreateJewelOfBless(12));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(13));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(14));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(15));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(16));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(17));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(18));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(19));
|
||||
inventory.Items.Add(this.CreateHealthPotion(24, 0));
|
||||
inventory.Items.Add(this.CreateHealthPotion(25, 1));
|
||||
inventory.Items.Add(this.CreateHealthPotion(26, 2));
|
||||
inventory.Items.Add(this.CreateHealthPotion(27, 3));
|
||||
inventory.Items.Add(this.CreateManaPotion(28, 0));
|
||||
inventory.Items.Add(this.CreateManaPotion(29, 1));
|
||||
inventory.Items.Add(this.CreateManaPotion(30, 2));
|
||||
inventory.Items.Add(this.CreateAlcohol(31));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds scrolls to the inventory.
|
||||
/// </summary>
|
||||
/// <param name="inventory">The inventory.</param>
|
||||
protected void AddScrolls(ItemStorage inventory)
|
||||
{
|
||||
inventory.Items.Add(this.CreateScroll(32, 0)); // Scroll of Poison
|
||||
inventory.Items.Add(this.CreateScroll(33, 4)); // Scroll of Flame
|
||||
inventory.Items.Add(this.CreateScroll(34, 5)); // Scroll of Teleport
|
||||
inventory.Items.Add(this.CreateScroll(35, 7)); // Scroll of Twister
|
||||
inventory.Items.Add(this.CreateScroll(36, 8)); // Scroll of Evil Spirit
|
||||
inventory.Items.Add(this.CreateScroll(37, 10)); // Scroll of Hellfire
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the elf items.
|
||||
/// </summary>
|
||||
/// <param name="inventory">The inventory.</param>
|
||||
protected void AddElfItems(ItemStorage inventory)
|
||||
{
|
||||
inventory.Items.Add(this.CreateJewelOfBless(12));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(13));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(14));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(15));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(16));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(17));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(18));
|
||||
inventory.Items.Add(this.CreateJewelOfBless(19));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(20));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(21));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(22));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(23));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(24));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(25));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(26));
|
||||
inventory.Items.Add(this.CreateJewelOfSoul(27));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(28));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(29));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(30));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(31));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(32));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(33));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(34));
|
||||
inventory.Items.Add(this.CreateJewelOfChaos(35));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the dark knight items.
|
||||
/// </summary>
|
||||
/// <param name="inventory">The inventory.</param>
|
||||
protected void AddDarkKnightItems(ItemStorage inventory)
|
||||
{
|
||||
inventory.Items.Add(this.CreateFullOptionJewellery(53, 8)); // Ring of Ice
|
||||
inventory.Items.Add(this.CreateFullOptionJewellery(54, 9)); // Ring of Poison
|
||||
inventory.Items.Add(this.CreateFullOptionJewellery(55, 12)); // Pendant of Lightning
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the pets.
|
||||
/// </summary>
|
||||
/// <param name="inventory">The inventory.</param>
|
||||
protected void AddPets(ItemStorage inventory)
|
||||
{
|
||||
inventory.Items.Add(this.CreatePet(12, 0)); // Guardian Angel
|
||||
inventory.Items.Add(this.CreatePet(62, 1)); // Imp
|
||||
inventory.Items.Add(this.CreatePet(70, 2)); // Uniria
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates jewellery with full options.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <returns>The created jewellery.</returns>
|
||||
protected Item CreateFullOptionJewellery(byte itemSlot, int number)
|
||||
{
|
||||
var item = this.Context.CreateNew<Item>();
|
||||
item.Definition = this.GameConfiguration.Items.First(def => def.Group == 13 && def.Number == number);
|
||||
item.Durability = item.Definition.Durability;
|
||||
item.ItemSlot = itemSlot;
|
||||
foreach (var possibleOption in item.Definition.PossibleItemOptions.SelectMany(o => o.PossibleOptions))
|
||||
{
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = possibleOption;
|
||||
item.ItemOptions.Add(optionLink);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the wings with random options.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="group">The group.</param>
|
||||
/// <returns>The created wings.</returns>
|
||||
protected Item CreateWings(byte itemSlot, byte number, byte level, byte group = 12)
|
||||
{
|
||||
var item = this.Context.CreateNew<Item>();
|
||||
item.Definition = this.GameConfiguration.Items.First(def => def.Group == group && def.Number == number);
|
||||
item.Durability = item.Definition.Durability;
|
||||
item.ItemSlot = itemSlot;
|
||||
item.Level = level;
|
||||
var option = item.Definition.PossibleItemOptions.First(o => o.PossibleOptions.Any(p => p.OptionType == ItemOptionTypes.Wing));
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = option.PossibleOptions.SelectRandom();
|
||||
item.ItemOptions.Add(optionLink);
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the weapon.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="group">The group.</param>
|
||||
/// <param name="number">The number.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
/// <param name="optionLevel">The option level.</param>
|
||||
/// <param name="luck">If set to <c>true</c>, the item should have luck.</param>
|
||||
/// <param name="skill">If set to <c>true</c>, the item should have skill.</param>
|
||||
/// <returns>The created weapon.</returns>
|
||||
protected Item CreateWeapon(byte itemSlot, byte group, byte number, byte level, byte optionLevel, bool luck, bool skill)
|
||||
{
|
||||
var weapon = this.Context.CreateNew<Item>();
|
||||
weapon.Definition = this.GameConfiguration.Items.First(def => def.Group == group && def.Number == number);
|
||||
weapon.Durability = weapon.Definition.Durability;
|
||||
weapon.ItemSlot = itemSlot;
|
||||
weapon.Level = level;
|
||||
weapon.HasSkill = skill;
|
||||
|
||||
if (optionLevel > 0)
|
||||
{
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = weapon.Definition.PossibleItemOptions.SelectMany(o => o.PossibleOptions)
|
||||
.First(o => o.OptionType == ItemOptionTypes.Option);
|
||||
optionLink.Level = optionLevel;
|
||||
weapon.ItemOptions.Add(optionLink);
|
||||
}
|
||||
|
||||
if (luck)
|
||||
{
|
||||
var optionLink = this.Context.CreateNew<ItemOptionLink>();
|
||||
optionLink.ItemOption = weapon.Definition.PossibleItemOptions.SelectMany(o => o.PossibleOptions)
|
||||
.First(o => o.OptionType == ItemOptionTypes.Luck);
|
||||
weapon.ItemOptions.Add(optionLink);
|
||||
}
|
||||
|
||||
return weapon;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the orb.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="itemNumber">The item number.</param>
|
||||
/// <returns>The created orb.</returns>
|
||||
protected Item CreateOrb(byte itemSlot, byte itemNumber)
|
||||
{
|
||||
var orb = this.Context.CreateNew<Item>();
|
||||
orb.Definition = this.GameConfiguration.Items.First(def => def.Group == (byte)ItemGroups.Orbs && def.Number == itemNumber);
|
||||
orb.ItemSlot = itemSlot;
|
||||
orb.Durability = 1;
|
||||
return orb;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the scroll.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="itemNumber">The item number.</param>
|
||||
/// <returns>The created scroll.</returns>
|
||||
protected Item CreateScroll(byte itemSlot, byte itemNumber)
|
||||
{
|
||||
var scroll = this.Context.CreateNew<Item>();
|
||||
scroll.Definition = this.GameConfiguration.Items.First(def => def.Group == (byte)ItemGroups.Scrolls && def.Number == itemNumber);
|
||||
scroll.ItemSlot = itemSlot;
|
||||
scroll.Durability = 1;
|
||||
return scroll;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the jewel.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="itemNumber">The item number.</param>
|
||||
/// <returns>The created jewel.</returns>
|
||||
protected Item CreateJewel(byte itemSlot, byte itemNumber)
|
||||
{
|
||||
var jewel = this.Context.CreateNew<Item>();
|
||||
jewel.Definition = this.GameConfiguration.Items.First(def => def.Group == 14 && def.Number == itemNumber);
|
||||
jewel.Durability = 1;
|
||||
jewel.ItemSlot = itemSlot;
|
||||
return jewel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the pet.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <param name="itemNumber">The item number.</param>
|
||||
/// <returns>The created pet.</returns>
|
||||
protected Item CreatePet(byte itemSlot, byte itemNumber)
|
||||
{
|
||||
var pet = this.Context.CreateNew<Item>();
|
||||
pet.Definition = this.GameConfiguration.Items.First(def => def.Group == 13 && def.Number == itemNumber);
|
||||
pet.Durability = 255;
|
||||
pet.ItemSlot = itemSlot;
|
||||
if (pet.Definition?.Skill != null)
|
||||
{
|
||||
pet.HasSkill = true;
|
||||
}
|
||||
|
||||
return pet;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the arrows.
|
||||
/// </summary>
|
||||
/// <param name="itemSlot">The item slot.</param>
|
||||
/// <returns>The created arrows.</returns>
|
||||
protected Item CreateArrows(byte itemSlot)
|
||||
{
|
||||
var arrows = this.Context.CreateNew<Item>();
|
||||
arrows.Definition = this.GameConfiguration.Items.First(def => def.Group == 4 && def.Number == 15);
|
||||
arrows.Durability = 255;
|
||||
arrows.ItemSlot = itemSlot;
|
||||
return arrows;
|
||||
}
|
||||
|
||||
private Item CreateAlcohol(byte itemSlot)
|
||||
{
|
||||
var potion = this.Context.CreateNew<Item>();
|
||||
potion.Definition = this.GameConfiguration.Items.First(def => def.Group == 14 && def.Number == 9);
|
||||
potion.Durability = 1;
|
||||
potion.ItemSlot = itemSlot;
|
||||
return potion;
|
||||
}
|
||||
|
||||
private Item CreateManaPotion(byte itemSlot, byte size)
|
||||
{
|
||||
return this.CreatePotion(itemSlot, (byte)(size + 4));
|
||||
}
|
||||
|
||||
private Item CreateHealthPotion(byte itemSlot, byte size)
|
||||
{
|
||||
return this.CreatePotion(itemSlot, size);
|
||||
}
|
||||
|
||||
private Item CreatePotion(byte itemSlot, byte itemNumber)
|
||||
{
|
||||
var potion = this.Context.CreateNew<Item>();
|
||||
potion.Definition = this.GameConfiguration.Items.First(def => def.Group == 14 && def.Number == itemNumber);
|
||||
potion.Durability = 3; // Stack of 3 Potions
|
||||
potion.ItemSlot = itemSlot;
|
||||
return potion;
|
||||
}
|
||||
|
||||
private Item CreateJewelOfBless(byte itemSlot)
|
||||
{
|
||||
return this.CreateJewel(itemSlot, 13);
|
||||
}
|
||||
|
||||
private Item CreateJewelOfSoul(byte itemSlot)
|
||||
{
|
||||
return this.CreateJewel(itemSlot, 14);
|
||||
}
|
||||
|
||||
private Item CreateJewelOfChaos(byte itemSlot)
|
||||
{
|
||||
var jewel = this.Context.CreateNew<Item>();
|
||||
jewel.Definition = this.GameConfiguration.Items.First(def => def.Group == 12 && def.Number == 15);
|
||||
jewel.Durability = 1;
|
||||
jewel.ItemSlot = itemSlot;
|
||||
return jewel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
// <copyright file="LowLevel.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.TestAccounts;
|
||||
|
||||
using MUnique.OpenMU.DataModel;
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
using MUnique.OpenMU.DataModel.Entities;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.Persistence.Initialization.CharacterClasses;
|
||||
|
||||
/// <summary>
|
||||
/// Initializer for an account with low level characters.
|
||||
/// </summary>
|
||||
internal class LowLevel : AccountInitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LowLevel"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
/// <param name="accountName">Name of the account.</param>
|
||||
/// <param name="level">The level.</param>
|
||||
public LowLevel(IContext context, GameConfiguration gameConfiguration, string accountName, int level)
|
||||
: base(context, gameConfiguration, accountName, level)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override Character CreateKnight()
|
||||
{
|
||||
var character = this.CreateCharacter(this.AccountName + "Dk", CharacterClassNumber.DarkKnight, this.Level, 0);
|
||||
character.Inventory!.Items.Add(this.CreateSmallAxe(0));
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(52, 5, 8)); // Leather Armor
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(47, 5, 7)); // Leather Helm
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(49, 5, 9)); // Leather Pants
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(63, 5, 10)); // Leather Gloves
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(65, 5, 11)); // Leather Boots
|
||||
this.AddTestJewelsAndPotions(character.Inventory);
|
||||
return character;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override Character CreateElf()
|
||||
{
|
||||
var character = this.CreateCharacter(this.AccountName + "Elf", CharacterClassNumber.FairyElf, this.Level, 2);
|
||||
character.Attributes.First(a => a.Definition == Stats.BaseStrength).Value += 20;
|
||||
character.Attributes.First(a => a.Definition == Stats.BaseAgility).Value += 30;
|
||||
|
||||
character.Inventory!.Items.Add(this.CreateShortBow(1));
|
||||
character.Inventory.Items.Add(this.CreateArrows(0));
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(InventoryConstants.ArmorSlot, 10, 8)); // Vine Armor
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(InventoryConstants.HelmSlot, 10, 7)); // Vine Helm
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(InventoryConstants.PantsSlot, 10, 9)); // Vine Pants
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(InventoryConstants.GlovesSlot, 10, 10)); // Vine Gloves
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(InventoryConstants.BootsSlot, 10, 11)); // Vine Boots
|
||||
|
||||
character.Inventory.Items.Add(this.CreateOrb(67, 8)); // Healing Orb
|
||||
character.Inventory.Items.Add(this.CreateOrb(75, 9)); // Defense Orb
|
||||
character.Inventory.Items.Add(this.CreateOrb(68, 10)); // Damage Orb
|
||||
this.AddElfItems(character.Inventory);
|
||||
return character;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override Character CreateWizard()
|
||||
{
|
||||
var character = this.CreateCharacter(this.AccountName + "Dw", CharacterClassNumber.DarkWizard, this.Level, 1);
|
||||
character.Inventory!.Items.Add(this.CreateSkullStaff(0));
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(52, 2, 8)); // Pad Armor
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(47, 2, 7)); // Pad Helm
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(49, 2, 9)); // Pad Pants
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(63, 2, 10)); // Pad Gloves
|
||||
character.Inventory.Items.Add(this.CreateArmorItem(65, 2, 11)); // Pad Boots
|
||||
this.AddTestJewelsAndPotions(character.Inventory);
|
||||
this.AddScrolls(character.Inventory);
|
||||
return character;
|
||||
}
|
||||
|
||||
private Item CreateSkullStaff(byte itemSlot)
|
||||
{
|
||||
var skullStaff = this.Context.CreateNew<Item>();
|
||||
skullStaff.Definition = this.GameConfiguration.Items.First(def => def.Group == 5 && def.Number == 0); // skull staff
|
||||
skullStaff.Durability = skullStaff.Definition?.Durability ?? 0;
|
||||
skullStaff.ItemSlot = itemSlot;
|
||||
return skullStaff;
|
||||
}
|
||||
|
||||
private Item CreateSmallAxe(byte itemSlot)
|
||||
{
|
||||
var smallAxe = this.Context.CreateNew<Item>();
|
||||
smallAxe.Definition = this.GameConfiguration.Items.First(def => def.Group == 1 && def.Number == 0); // small axe
|
||||
smallAxe.Durability = smallAxe.Definition?.Durability ?? 0;
|
||||
smallAxe.ItemSlot = itemSlot;
|
||||
return smallAxe;
|
||||
}
|
||||
|
||||
private Item CreateShortBow(byte itemSlot)
|
||||
{
|
||||
var shortBow = this.Context.CreateNew<Item>();
|
||||
shortBow.Definition = this.GameConfiguration.Items.First(def => def.Group == 4 && def.Number == 0); // short bow
|
||||
shortBow.Durability = shortBow.Definition?.Durability ?? 0;
|
||||
shortBow.ItemSlot = itemSlot;
|
||||
return shortBow;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// <copyright file="TestAccountsInitialization.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.TestAccounts;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the test accounts.
|
||||
/// </summary>
|
||||
public class TestAccountsInitialization : InitializerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TestAccountsInitialization"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The context.</param>
|
||||
/// <param name="gameConfiguration">The game configuration.</param>
|
||||
public TestAccountsInitialization(IContext context, GameConfiguration gameConfiguration)
|
||||
: base(context, gameConfiguration)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
var level = (i * 20) + 1;
|
||||
new LowLevel(this.Context, this.GameConfiguration, "test" + i, level).Initialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user