198 lines
7.4 KiB
C#
198 lines
7.4 KiB
C#
using System.Collections.Generic;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Pf2e.Scrapper.Processors;
|
|
using Pf2e.Database.Model.Enum;
|
|
|
|
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
|
|
|
|
internal static class AonprdProcessorInputExtension
|
|
{
|
|
/// <summary>
|
|
/// Обработать строку, содержащую информацию о количестве действий.
|
|
/// </summary>
|
|
/// <param name="_"></param>
|
|
/// <param name="input">Входная строка с данными.</param>
|
|
/// <returns>Структура, хранящая информацию о количетсве действий.</returns>
|
|
public static ActionStruct ResolveActionString(this ProcessorInput _, string input)
|
|
{
|
|
ActionStruct result = new();
|
|
|
|
switch (input)
|
|
{
|
|
case "Single Action":
|
|
result.Actions = result.MaxActions = 1;
|
|
break;
|
|
|
|
case "Two Actions":
|
|
result.Actions = result.MaxActions = 2;
|
|
break;
|
|
|
|
case "Three Actions":
|
|
result.Actions = result.MaxActions = 3;
|
|
break;
|
|
|
|
case "Reaction":
|
|
result.IsReaction = true;
|
|
break;
|
|
|
|
case "Free Action":
|
|
result.IsFreeAction = false;
|
|
break;
|
|
|
|
case "Single Action to Three Actions":
|
|
case "Single Action or more Actions":
|
|
result.Actions = 1;
|
|
result.MaxActions = 3;
|
|
break;
|
|
|
|
case "Single Action or Two Actions":
|
|
case "Single Action to Two Actions":
|
|
result.Actions = 1;
|
|
result.MaxActions = 2;
|
|
break;
|
|
|
|
case "Two Actions or Three Actions":
|
|
result.Actions = 2;
|
|
result.MaxActions = 3;
|
|
break;
|
|
|
|
case "Two Actions to 2 rounds":
|
|
result.Actions = 2;
|
|
result.MaxActions = 3;
|
|
result.TwoRounds = true;
|
|
break;
|
|
|
|
case "Reaction or One Action":
|
|
result.IsReaction = true;
|
|
result.Actions = result.MaxActions = 1;
|
|
break;
|
|
|
|
case "Reaction or Two Actions":
|
|
result.IsReaction = true;
|
|
result.Actions = result.MaxActions = 2;
|
|
break;
|
|
|
|
case "Free Action or One Action":
|
|
result.IsFreeAction = false;
|
|
result.Actions = result.MaxActions = 1;
|
|
break;
|
|
|
|
default:
|
|
result.IsPassive = true;
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Класс структуры, хранящей информацию о количетсве действий.
|
|
/// </summary>
|
|
public class ActionStruct
|
|
{
|
|
/// <summary>
|
|
/// Количество действий
|
|
/// </summary>
|
|
public int Actions { get; set; }
|
|
|
|
/// <summary>
|
|
/// Максимальное количество действий
|
|
/// </summary>
|
|
public int MaxActions { get; set; }
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, что действия не требуются.
|
|
/// </summary>
|
|
public bool IsPassive { get; set; }
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, что действие может быть использовано как реакция.
|
|
/// </summary>
|
|
public bool IsReaction { get; set; }
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, что можно использовать свободное действие.
|
|
/// </summary>
|
|
public bool IsFreeAction { get; set; }
|
|
|
|
/// <summary>
|
|
/// Флаг, указывающий, что действие может быть продлено до 2 раундов.
|
|
/// </summary>
|
|
public bool TwoRounds { get; set; }
|
|
}
|
|
|
|
public class SourceCategorySolver : EnumSolver<SourceCategory>
|
|
{
|
|
public override Dictionary<string, SourceCategory> Data { get; } =
|
|
new()
|
|
{
|
|
{ "Rulebooks", SourceCategory.Rulebooks },
|
|
{ "Adventure Paths", SourceCategory.AdventurePaths },
|
|
{ "Lost Omens", SourceCategory.LostOmens },
|
|
{ "Adventures", SourceCategory.Adventures },
|
|
{ "Comics", SourceCategory.Comics },
|
|
{ "Blog Posts", SourceCategory.BlogPosts },
|
|
{ "Society", SourceCategory.Society },
|
|
};
|
|
}
|
|
|
|
public class VisionEnumSolver : EnumSolver<VisionEnum>
|
|
{
|
|
public override Dictionary<string, VisionEnum> Data { get; } =
|
|
new()
|
|
{
|
|
{ "Low-Light VisionEnum", VisionEnum.LowLightVision },
|
|
{ "Darkvision", VisionEnum.DarkVision },
|
|
};
|
|
}
|
|
|
|
public class AttributeValuesSolver : EnumSolver<AttributeValues>
|
|
{
|
|
public override Dictionary<string, AttributeValues> Data { get; } =
|
|
new()
|
|
{
|
|
{ "Consitution", AttributeValues.Constitution },
|
|
{ "Other", AttributeValues.Free },
|
|
{ "other", AttributeValues.Free },
|
|
};
|
|
}
|
|
|
|
public class ActionEnumSolver : EnumSolver<ActionEnum>
|
|
{
|
|
public override Dictionary<string, ActionEnum> Data { get; } =
|
|
new()
|
|
{
|
|
{ "Single Action", ActionEnum.SingleAction },
|
|
{ "Two Actions", ActionEnum.TwoActions },
|
|
{ "Three Actions", ActionEnum.ThreeActions },
|
|
{ "Reaction", ActionEnum.Reaction },
|
|
{ "Free Action", ActionEnum.FreeAction },
|
|
{ "Single Action to Three Actions", ActionEnum.SingleActionToThreeActions },
|
|
{ "Single Action or more Actions", ActionEnum.SingleActionToThreeActions },
|
|
{ "Single Action or Two Actions", ActionEnum.SingleActionToTwoActions },
|
|
{ "Single Action to Two Actions", ActionEnum.SingleActionToTwoActions },
|
|
{ "Two Actions or Three Actions", ActionEnum.TwoActionsToThreeActions },
|
|
{ "Two Actions to 2 rounds", ActionEnum.TwoActionsToTwoRounds },
|
|
{ "Reaction or One Action", ActionEnum.ReactionOrOneAction },
|
|
{ "Reaction or Two Actions", ActionEnum.ReactionOrTwoAction },
|
|
{ "Reaction or Three Actions", ActionEnum.ReactionOrThreeAction },
|
|
{ "Free Action or One Action", ActionEnum.FreeActionOrOneAction },
|
|
{ "1 Minute", ActionEnum.OneMinute },
|
|
{ "1 minute", ActionEnum.OneMinute },
|
|
{ "5 minutes", ActionEnum.FiveMinutes },
|
|
{ "10 minutes", ActionEnum.TenMinutes },
|
|
{ "30 minutes", ActionEnum.ThirtyMinutes },
|
|
{ "1 hour", ActionEnum.OneHour },
|
|
{ "<i>Nethys Note: No cast time was printed</i>", ActionEnum.Unknown },
|
|
};
|
|
}
|
|
|
|
public static void RegisterServices(IServiceCollection serviceCollection)
|
|
{
|
|
serviceCollection.AddTransient<IEnumSolver, SourceCategorySolver>();
|
|
serviceCollection.AddTransient<IEnumSolver, VisionEnumSolver>();
|
|
serviceCollection.AddTransient<IEnumSolver, AttributeValuesSolver>();
|
|
serviceCollection.AddTransient<IEnumSolver, ActionEnumSolver>();
|
|
}
|
|
}
|