Глобальный рефакторинг пространств имён
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base.Keywords;
|
||||
using Pf2e.Database.Model.Base.Source;
|
||||
using Pf2e.Database.Model.Base.Targets;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure;
|
||||
|
||||
namespace Pf2e.Database.Model.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Корневая сущность.
|
||||
/// </summary>
|
||||
public class Entity
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Column(Order = 1)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public LocaleString Name { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Тип сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип сущности")]
|
||||
public EntityType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Часть имени в URL.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Часть имени в URL")]
|
||||
public string Slug { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Изображение сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[StringLength(255)]
|
||||
[Comment("Изображение объекта")]
|
||||
public string Img { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Текстовое описание сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Текстовое описание сущности")]
|
||||
public string Description { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Редкость сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Редкость сущности")]
|
||||
public EntityRarity Rarity { get; set; } = EntityRarity.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что у объекта существует перевод.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Есть перевод?")]
|
||||
public bool? IsTranslated { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что объект был проверен и не требует автоматической перезаписи.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Проверено?")]
|
||||
public bool? IsChecked { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что сущность является устаревшей.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Устаревшая?")]
|
||||
public bool? IsLegacy { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция алиасов
|
||||
/// </summary>
|
||||
public ICollection<EntityAlias> Aliases { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция признаков, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<Trait> Traits { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция ключевых слов, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<Keyword> Keywords { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция источников, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<EntitySource> Sources { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция внешних ссылок, связанных с сущностью.
|
||||
/// </summary>
|
||||
public ICollection<EntityExternal> Externals { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция устаревших сущностей.
|
||||
/// </summary>
|
||||
public ICollection<Entity> LegacyEntities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция переходных объектов для устаревших сущностей.
|
||||
/// </summary>
|
||||
public ICollection<LegacyRemaster> LegacyTransferEntities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция обновлённых сущностей.
|
||||
/// </summary>
|
||||
public ICollection<Entity> RemasterEntities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция переходных объектов для обновлённых сущностей.
|
||||
/// </summary>
|
||||
public ICollection<LegacyRemaster> RemasterTransferEntities { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Алиас сущности.
|
||||
/// </summary>
|
||||
public class EntityAlias
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор источника.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор связанной сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Связанная сущность")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя источника.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Алиас")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Связанная
|
||||
/// </summary>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Keywords;
|
||||
|
||||
/// <summary>
|
||||
/// Ключевое слово.
|
||||
/// </summary>
|
||||
public class Keyword
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public LocaleString Name = [];
|
||||
|
||||
/// <summary>
|
||||
/// Часть имени в URL.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Часть имени в URL")]
|
||||
public string Slug { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция сущностей, которые используют это ключевое слово.
|
||||
/// </summary>
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция синонимов ключевого слова.
|
||||
/// </summary>
|
||||
public ICollection<KeywordAlias> Aliases { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Keywords;
|
||||
|
||||
/// <summary>
|
||||
/// Синоним ключевого слова.
|
||||
/// </summary>
|
||||
public class KeywordAlias
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор связаннного ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор ключевого слова")]
|
||||
public int KeywordId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Значение синонима ключевого слова.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Синоним")]
|
||||
public string Value { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Ключевое слово, к которому относится синоним.
|
||||
/// </summary>
|
||||
public Keyword Keyword { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Связь устаревших и обновлённых сущностей
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(LegacyId), nameof(RemasterId))]
|
||||
public class LegacyRemaster
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор устаревшей сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int LegacyId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор обновлённой сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор цели")]
|
||||
public int RemasterId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Устаревшая сущность.
|
||||
/// </summary>
|
||||
public Entity LegacyEntity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Обновлённая сущность.
|
||||
/// </summary>
|
||||
public Entity RemasterEntity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Source;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между сущностью и источником.
|
||||
/// </summary>
|
||||
public class EntitySource
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор связи.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 0)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор источника.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор источника")]
|
||||
public int SourceId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация о источнике, например, номер страницы, номер тома и т.д.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Номер страницы, эррата и т.д.")]
|
||||
public string Suffix { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, что объект является частью ремастера.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Флаг, указывающий, что объект является частью ремастера")]
|
||||
public bool IsRemaster { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, к которой относится источник.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Источник, к которому относится сущность.
|
||||
/// </summary>
|
||||
public Source Source { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Source;
|
||||
|
||||
/// <summary>
|
||||
/// Источник сущности.
|
||||
/// </summary>
|
||||
public class Source
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор источника.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя источника.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Категория источника.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Категория источника")]
|
||||
public SourceCategory Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дата выхода источника.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Дата выхода источника")]
|
||||
public DateOnly? ReleaseDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Связанные сущности.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public ICollection<EntitySource> EntitySources { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Targets;
|
||||
|
||||
/// <summary>
|
||||
/// Внешняя ссылка сущности.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(EntityId), nameof(TargetId))]
|
||||
public class EntityExternal
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор цели.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор цели")]
|
||||
public int TargetId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор элемента по ссылке.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Идентификатор элемента в ссылке")]
|
||||
public string? ExternalId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Конечная часть URL внешней ссылки.
|
||||
/// Для источников Foundry - полный UUID объекта.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Часть URL до объекта. Для источников Foundry - полный UUID объекта")]
|
||||
public string Suffix { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Контрольная сумма объекта.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(32)]
|
||||
[Comment("Контрольная сумма объекта")]
|
||||
public string Md5 { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, которая ссылается на внешнюю ссылку.
|
||||
/// </summary>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Цель внешней ссылки.
|
||||
/// </summary>
|
||||
public ExternalTarget Target { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pf2e.Database.Model.Base.Targets;
|
||||
|
||||
/// <summary>
|
||||
/// Цель внешней ссылки.
|
||||
/// </summary>
|
||||
public class ExternalTarget
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор цели.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название цели.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[StringLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Отображаемое имя")]
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Иконка цели.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[StringLength(255)]
|
||||
[Comment("Иконка цели")]
|
||||
public string Icon { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Префикс для URL-адреса внешней ссылки.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[StringLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Префикс для URL-адреса внешней ссылки")]
|
||||
public string Prefix { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция сущностей, которые ссылаются на эту цель.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public ICollection<EntityExternal> EntityExternals { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Частота использования.
|
||||
/// </summary>
|
||||
public class Frequency
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Максимальная продолжительсность.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Максимальная продолжительсность")]
|
||||
public int Max { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Частота использования.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Частота использования")]
|
||||
public int Per { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Значение использования.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Значение использования")]
|
||||
public int? Value { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using System.ComponentModel;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Pf2e.Database.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Расширения для работы с локализацией.
|
||||
/// </summary>
|
||||
public static class LocaleExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// Получение строкового представления типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeType">Тип локализации.</param>
|
||||
/// <returns>Строковое представление типа локализации.</returns>
|
||||
public static string GetTypeString(this LocaleType localeType)
|
||||
{
|
||||
FieldInfo fi = localeType.GetType().GetField(localeType.ToString())!;
|
||||
|
||||
DescriptionAttribute[] attributes = (DescriptionAttribute[])
|
||||
fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
|
||||
|
||||
return (attributes.Length != 0 ? attributes.FirstOrDefault()?.Description : null)
|
||||
?? localeType.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeTypeString">Строковое представление типа локализации.</param>
|
||||
/// <returns>Тип локализации.</returns>
|
||||
/// <exception cref="InvalidEnumArgumentException">Исключение, если строковое представление не соответсвует ни одному типу локализации.</exception>
|
||||
public static LocaleType GetTypeByString(this string localeTypeString)
|
||||
{
|
||||
foreach (FieldInfo field in typeof(LocaleType).GetFields())
|
||||
{
|
||||
if (
|
||||
Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
|
||||
is not DescriptionAttribute descriptionAttribute
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptionAttribute.Description == localeTypeString)
|
||||
{
|
||||
return (LocaleType)field.GetValue(null)!;
|
||||
}
|
||||
}
|
||||
|
||||
throw new InvalidEnumArgumentException();
|
||||
}
|
||||
|
||||
/*
|
||||
public static IQueryable<T> WhereLocale(
|
||||
this IQueryable<T> query, Expression<Func<T, LocaleString>> expression, string searchTerm) where T : class
|
||||
{
|
||||
return query.Where(e => DbContext.LocaleSearch(e.Name.ToJson(), searchTerm));
|
||||
}
|
||||
|
||||
public static IQueryable<Entity> WhereLocale(
|
||||
this IQueryable<Entity> query, ICollection<string> searchTerms)
|
||||
{
|
||||
return query.Where(e => EF.Functions.LocaleSearchArray(e.Name.ToJson(), searchTerms));
|
||||
}*/
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
namespace Pf2e.Database.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент локализации.
|
||||
/// </summary>
|
||||
/// <param name="type">Тип локализации.</param>
|
||||
/// <param name="value">Значение локализации.</param>
|
||||
public class LocaleItem(LocaleType type, string value)
|
||||
{
|
||||
/// <summary>
|
||||
/// Тип локализации.
|
||||
/// </summary>
|
||||
public LocaleType Locale { get; set; } = type;
|
||||
|
||||
/// <summary>
|
||||
/// Значение локализации.
|
||||
/// </summary>
|
||||
public string Value { get; set; } = value;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="LocaleItem"/> по паре ключ-значение.
|
||||
/// </summary>
|
||||
/// <param name="item">Пара ключ-значение по строковому представлению типа.</param>
|
||||
public LocaleItem(KeyValuePair<string, string> item)
|
||||
: this(item.Key.GetTypeByString(), item.Value) { }
|
||||
}
|
||||
@@ -0,0 +1,246 @@
|
||||
using System.Collections;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2e.Database.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Локализованная строка.
|
||||
/// </summary>
|
||||
public class LocaleString : ICollection<LocaleItem>
|
||||
{
|
||||
/// <summary>
|
||||
/// Список локализаций строк.
|
||||
/// </summary>
|
||||
private readonly List<LocaleItem> _items = [];
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет наличие хотя бы одной локализации.
|
||||
/// </summary>
|
||||
private void AssureDefault()
|
||||
{
|
||||
if (_items.Count == 0)
|
||||
{
|
||||
_items.Add(new(LocaleType.English, string.Empty));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Количество локализаций.
|
||||
/// </summary>
|
||||
public int Count => _items.Count;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция реализованных типов локализаций.
|
||||
/// </summary>
|
||||
public ICollection<LocaleType> Types => _items.Select(c => c.Locale).ToList();
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool IsReadOnly => false;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор класса <see cref="LocaleString"/>.
|
||||
/// </summary>
|
||||
public LocaleString()
|
||||
{
|
||||
AssureDefault();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление.</param>
|
||||
/// <returns>Тип локализации.</returns>
|
||||
private LocaleType _E(string localeString) => localeString.GetTypeByString();
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации с учётом её наличия в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Реальный тип локализации.</returns>
|
||||
private LocaleType RealLocale(LocaleType locale) =>
|
||||
Contains(locale) ? locale : LocaleType.English;
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа локализации по строковому представлению с учётом её наличия в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Реальный тип локализации.</returns>
|
||||
private LocaleType RealLocale(string localeString) => RealLocale(_E(localeString));
|
||||
|
||||
/// <summary>
|
||||
/// Получение объекта локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public LocaleItem GetItem(LocaleType locale) => this.First(c => c.Locale == RealLocale(locale));
|
||||
|
||||
/// <summary>
|
||||
/// Получение объекта локализованной строки по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public LocaleItem GetItem(string localeString) =>
|
||||
this.First(c => c.Locale == RealLocale(localeString));
|
||||
|
||||
/// <summary>
|
||||
/// Получение локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Искомый тип локализации.</param>
|
||||
/// <returns>Локализованная строка.</returns>
|
||||
public string this[LocaleType locale]
|
||||
{
|
||||
get => GetItem(locale).Value;
|
||||
set
|
||||
{
|
||||
if (Types.Contains(locale))
|
||||
{
|
||||
GetItem(locale).Value = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_items.Add(new(locale, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение локализованной строки по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>Локализованная строка.</returns>
|
||||
public string this[string localeString]
|
||||
{
|
||||
get => this[_E(localeString)];
|
||||
set => this[_E(localeString)] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление объекта локализованной строки в коллекцию.
|
||||
/// </summary>
|
||||
/// <param name="item">Объект локализированной строки.</param>
|
||||
public void Add(LocaleItem item)
|
||||
{
|
||||
this[item.Locale] = item.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление локализованной строки в коллекцию.
|
||||
/// </summary>
|
||||
/// <param name="locale">Тип локализации.</param>
|
||||
/// <param name="value">Строка локазации.</param>
|
||||
public void Add(LocaleType locale, string value)
|
||||
{
|
||||
this[locale] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отчистка коллекции локализованных строк.
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
_items.Clear();
|
||||
AssureDefault();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка наличия объекта локализованной строки в коллекции.
|
||||
/// </summary>
|
||||
/// <param name="item">Объект локализированной строки.</param>
|
||||
/// <returns>`true`, если объект есть; `false`, если нет.</returns>
|
||||
public bool Contains(LocaleItem item)
|
||||
{
|
||||
return _items.Contains(item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка наличия локализованной строки в коллекции по типу локализации.
|
||||
/// </summary>
|
||||
/// <param name="locale">Тип локализации.</param>
|
||||
/// <returns>`true`, если искомый тип локализации есть; `false`, если нет.</returns>
|
||||
public bool Contains(LocaleType locale)
|
||||
{
|
||||
return Types.Contains(locale);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверка наличия локализованной строки в коллекции по строковому представлению типа локализации.
|
||||
/// </summary>
|
||||
/// <param name="localeString">Строковое представление искомого типа локализации.</param>
|
||||
/// <returns>`true`, если искомый тип локализации есть; `false`, если нет.</returns>
|
||||
public bool Contains(string localeString)
|
||||
{
|
||||
return this.Any(item => item.Value == localeString);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void CopyTo(LocaleItem[] array, int arrayIndex)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Remove(LocaleItem item)
|
||||
{
|
||||
bool result = _items.Remove(item);
|
||||
|
||||
if (Count == 0)
|
||||
{
|
||||
AssureDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IEnumerator<LocaleItem> GetEnumerator()
|
||||
{
|
||||
return _items.GetEnumerator();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string ToString()
|
||||
{
|
||||
return this[LocaleType.English];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сериализация локализованной строки в JSON-формат.
|
||||
/// </summary>
|
||||
/// <returns>Строковое представление JSON-представления.</returns>
|
||||
public string Serialize()
|
||||
{
|
||||
JObject json = [];
|
||||
|
||||
foreach (LocaleItem item in _items)
|
||||
{
|
||||
json.Add(item.Locale.GetTypeString(), item.Value);
|
||||
}
|
||||
|
||||
return json.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Десериализация локализованной строки из JSON-формата.
|
||||
/// </summary>
|
||||
/// <param name="input">Строковое представление JSON-представления.</param>
|
||||
/// <returns>Объект локализованной строки.</returns>
|
||||
public static LocaleString Deserialize(string input)
|
||||
{
|
||||
JObject json = JObject.Parse(input);
|
||||
LocaleString result = [];
|
||||
|
||||
foreach (KeyValuePair<string, JToken?> item in json)
|
||||
{
|
||||
result[item.Key] = item.Value?.ToString() ?? "";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Pf2e.Database.Model.Common.I18n;
|
||||
|
||||
/// <summary>
|
||||
/// Тип локализации.
|
||||
/// </summary>
|
||||
public enum LocaleType
|
||||
{
|
||||
/// <summary>
|
||||
/// Английский язык (основной).
|
||||
/// </summary>
|
||||
[Description("en")]
|
||||
English,
|
||||
|
||||
/// <summary>
|
||||
/// Русский язык.
|
||||
/// </summary>
|
||||
[Description("ru")]
|
||||
Russian,
|
||||
|
||||
/// <summary>
|
||||
/// Русский язык (вариант HobbyGames).
|
||||
/// </summary>
|
||||
[Description("ru.hobby")]
|
||||
Hobby,
|
||||
|
||||
/// <summary>
|
||||
/// Другой язык.
|
||||
/// </summary>
|
||||
[Description("other")]
|
||||
Other,
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Изучаемая способность.
|
||||
/// </summary>
|
||||
public class Training
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название способности.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Название способности")]
|
||||
public LocaleString Name { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Тип способности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип способности")]
|
||||
public TrainingType Type { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип действия.
|
||||
/// </summary>
|
||||
public enum ActionCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип действия.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Действие архетипа.
|
||||
/// </summary>
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
/// <summary>
|
||||
/// Дествие навыка.
|
||||
/// </summary>
|
||||
[PgName("skill-action")]
|
||||
SkillAction,
|
||||
|
||||
/// <summary>
|
||||
/// Действие классовой способности.
|
||||
/// </summary>
|
||||
[PgName("class-feature")]
|
||||
ClassFeature,
|
||||
|
||||
/// <summary>
|
||||
/// Действие классовой черты.
|
||||
/// </summary>
|
||||
[PgName("class-feat")]
|
||||
ClassFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Действие фамильяра.
|
||||
/// </summary>
|
||||
[PgName("familiar")]
|
||||
Familiar,
|
||||
|
||||
/// <summary>
|
||||
/// Действие тактики армии.
|
||||
/// </summary>
|
||||
[PgName("army_tactic")]
|
||||
ArmyTactic,
|
||||
|
||||
/// <summary>
|
||||
/// Действие войны армии.
|
||||
/// </summary>
|
||||
[PgName("army_war_action")]
|
||||
ArmyWarAction,
|
||||
|
||||
/// <summary>
|
||||
/// Активность королевства.
|
||||
/// </summary>
|
||||
[PgName("kingdom_activity")]
|
||||
KingdomActivity,
|
||||
|
||||
/// <summary>
|
||||
/// Действие черты королевства.
|
||||
/// </summary>
|
||||
[PgName("kingdom_feat")]
|
||||
KingdomFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Действие особенности королевства.
|
||||
/// </summary>
|
||||
[PgName("kingdom_feature")]
|
||||
KingdomFeature,
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечиленение количества действий.
|
||||
/// </summary>
|
||||
public enum ActionEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестное количество действий.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Одно действие.
|
||||
/// </summary>
|
||||
[PgName("1")]
|
||||
SingleAction,
|
||||
|
||||
/// <summary>
|
||||
/// Два действия.
|
||||
/// </summary>
|
||||
[PgName("2")]
|
||||
TwoActions,
|
||||
|
||||
/// <summary>
|
||||
/// Три действия.
|
||||
/// </summary>
|
||||
[PgName("3")]
|
||||
ThreeActions,
|
||||
|
||||
/// <summary>
|
||||
/// Реакция.
|
||||
/// </summary>
|
||||
[PgName("reaction")]
|
||||
Reaction,
|
||||
|
||||
/// <summary>
|
||||
/// Свободное действие.
|
||||
/// </summary>
|
||||
[PgName("free")]
|
||||
FreeAction,
|
||||
|
||||
/// <summary>
|
||||
/// Пассивное действие.
|
||||
/// </summary>
|
||||
[PgName("passive")]
|
||||
Passive,
|
||||
|
||||
/// <summary>
|
||||
/// Иное количество действий, не указанное в перечислении.
|
||||
/// </summary>
|
||||
[PgName("other")]
|
||||
Other,
|
||||
|
||||
/// <summary>
|
||||
/// От одного до трёх действий.
|
||||
/// </summary>
|
||||
[PgName("1-3")]
|
||||
SingleActionToThreeActions,
|
||||
|
||||
/// <summary>
|
||||
/// От одного до двух действий.
|
||||
/// </summary>
|
||||
[PgName("1-2")]
|
||||
SingleActionToTwoActions,
|
||||
|
||||
/// <summary>
|
||||
/// От двух до трёх действий.
|
||||
/// </summary>
|
||||
[PgName("2-3")]
|
||||
TwoActionsToThreeActions,
|
||||
|
||||
/// <summary>
|
||||
/// От двух действий до двух раундов.
|
||||
/// </summary>
|
||||
[PgName("2/2 rounds")]
|
||||
TwoActionsToTwoRounds,
|
||||
|
||||
/// <summary>
|
||||
/// Реакция или одно действие.
|
||||
/// </summary>
|
||||
[PgName("reaction/1")]
|
||||
ReactionOrOneAction,
|
||||
|
||||
/// <summary>
|
||||
/// Реакция или два действия.
|
||||
/// </summary>
|
||||
[PgName("reaction/2")]
|
||||
ReactionOrTwoAction,
|
||||
|
||||
/// <summary>
|
||||
/// Реакция или три действия.
|
||||
/// </summary>
|
||||
[PgName("reaction/3")]
|
||||
ReactionOrThreeAction,
|
||||
|
||||
/// <summary>
|
||||
/// Свободное действие или одно действие.
|
||||
/// </summary>
|
||||
[PgName("free/1")]
|
||||
FreeActionOrOneAction,
|
||||
|
||||
/// <summary>
|
||||
/// Одная минута.
|
||||
/// </summary>
|
||||
[PgName("1 minute")]
|
||||
OneMinute,
|
||||
|
||||
/// <summary>
|
||||
/// Пять минут.
|
||||
/// </summary>
|
||||
[PgName("5 minutes")]
|
||||
FiveMinutes,
|
||||
|
||||
/// <summary>
|
||||
/// Десять минут.
|
||||
/// </summary>
|
||||
[PgName("10 minutes")]
|
||||
TenMinutes,
|
||||
|
||||
/// <summary>
|
||||
/// Тридцать минут.
|
||||
/// </summary>
|
||||
[PgName("30 minutes")]
|
||||
ThirtyMinutes,
|
||||
|
||||
/// <summary>
|
||||
/// Один час.
|
||||
/// </summary>
|
||||
[PgName("1 hour")]
|
||||
OneHour,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление значений атрибутов.
|
||||
/// </summary>
|
||||
public enum AttributeValues
|
||||
{
|
||||
/// <summary>
|
||||
/// Свободный атрибут.
|
||||
/// </summary>
|
||||
[PgName("free")]
|
||||
Free,
|
||||
|
||||
/// <summary>
|
||||
/// Сила.
|
||||
/// </summary>
|
||||
[PgName("str")]
|
||||
Strength,
|
||||
|
||||
/// <summary>
|
||||
/// Ловкость.
|
||||
/// </summary>
|
||||
[PgName("dex")]
|
||||
Dexterity,
|
||||
|
||||
/// <summary>
|
||||
/// Телосложение.
|
||||
/// </summary>
|
||||
[PgName("con")]
|
||||
Constitution,
|
||||
|
||||
/// <summary>
|
||||
/// Интеллект.
|
||||
/// </summary>
|
||||
[PgName("int")]
|
||||
Intelligence,
|
||||
|
||||
/// <summary>
|
||||
/// Мудрость.
|
||||
/// </summary>
|
||||
[PgName("wis")]
|
||||
Wisdom,
|
||||
|
||||
/// <summary>
|
||||
/// Харизма.
|
||||
/// </summary>
|
||||
[PgName("cha")]
|
||||
Charisma,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип элемента прогрессии класса.
|
||||
/// </summary>
|
||||
public enum ClassProgressionType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип прогрессии класса.
|
||||
/// </summary>
|
||||
[PgName("entity")]
|
||||
Entity,
|
||||
|
||||
/// <summary>
|
||||
/// Навык архетипа.
|
||||
/// </summary>
|
||||
[PgName("ancestry_feat")]
|
||||
AncestryFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Классовая особенность.
|
||||
/// </summary>
|
||||
[PgName("class_feat")]
|
||||
ClassFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Общий навык.
|
||||
/// </summary>
|
||||
[PgName("general_feat")]
|
||||
GeneralFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Навык
|
||||
/// </summary>
|
||||
[PgName("skill_feat")]
|
||||
SkillFeat,
|
||||
|
||||
/// <summary>
|
||||
/// Увеличение навыка.
|
||||
/// </summary>
|
||||
[PgName("skill_increase")]
|
||||
SkillIncrease,
|
||||
|
||||
/// <summary>
|
||||
/// Увеличение атрибута.
|
||||
/// </summary>
|
||||
[PgName("attribute_increase")]
|
||||
AttributeIncrease,
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип состояния
|
||||
/// </summary>
|
||||
public enum ConditionGroup
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестое состояние.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Чувство.
|
||||
/// </summary>
|
||||
[PgName("senses")]
|
||||
Senses,
|
||||
|
||||
/// <summary>
|
||||
/// Способность.
|
||||
/// </summary>
|
||||
[PgName("abilities")]
|
||||
Abilities,
|
||||
|
||||
/// <summary>
|
||||
/// Смерть.
|
||||
/// </summary>
|
||||
[PgName("death")]
|
||||
Death,
|
||||
|
||||
/// <summary>
|
||||
/// Отношение. (???)
|
||||
/// </summary>
|
||||
[PgName("attitudes")]
|
||||
Attitudes,
|
||||
|
||||
/// <summary>
|
||||
/// Обнаружение.
|
||||
/// </summary>
|
||||
[PgName("detection")]
|
||||
Detection,
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божественной силы.
|
||||
/// </summary>
|
||||
public enum DeityFonts
|
||||
{
|
||||
/// <summary>
|
||||
/// Без божественной силы.
|
||||
/// </summary>
|
||||
[PgName("none")]
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// Исцеление.
|
||||
/// </summary>
|
||||
[PgName("heal")]
|
||||
Heal,
|
||||
|
||||
/// <summary>
|
||||
/// Урон.
|
||||
/// </summary>
|
||||
[PgName("harm")]
|
||||
Harm,
|
||||
|
||||
/// <summary>
|
||||
/// Любой тип божественной силы.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип освящения божества.
|
||||
/// </summary>
|
||||
public enum DeitySanctification
|
||||
{
|
||||
/// <summary>
|
||||
/// Святость.
|
||||
/// </summary>
|
||||
[PgName("holy")]
|
||||
Holy,
|
||||
|
||||
/// <summary>
|
||||
/// Нечестивость.
|
||||
/// </summary>
|
||||
[PgName("unholy")]
|
||||
Unholy,
|
||||
|
||||
/// <summary>
|
||||
/// Любое.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божества.
|
||||
/// </summary>
|
||||
public enum DeityType
|
||||
{
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[PgName("deity")]
|
||||
Deity,
|
||||
|
||||
/// <summary>
|
||||
/// Пантеон.
|
||||
/// </summary>
|
||||
[PgName("pantheon")]
|
||||
Pantheon,
|
||||
|
||||
/// <summary>
|
||||
/// Ковенант.
|
||||
/// </summary>
|
||||
[PgName("covenant")]
|
||||
Covenant,
|
||||
|
||||
/// <summary>
|
||||
/// Философия.
|
||||
/// </summary>
|
||||
[PgName("philosophy")]
|
||||
Philosophy,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление элементов.
|
||||
/// </summary>
|
||||
public enum ElementEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Универсальный элемент.
|
||||
/// </summary>
|
||||
[PgName("universal")]
|
||||
Universal,
|
||||
|
||||
/// <summary>
|
||||
/// Воздух.
|
||||
/// </summary>
|
||||
[PgName("air")]
|
||||
Air,
|
||||
|
||||
/// <summary>
|
||||
/// Вода.
|
||||
/// </summary>
|
||||
[PgName("water")]
|
||||
Water,
|
||||
|
||||
/// <summary>
|
||||
/// Земля.
|
||||
/// </summary>
|
||||
[PgName("earth")]
|
||||
Earth,
|
||||
|
||||
/// <summary>
|
||||
/// Огонь.
|
||||
/// </summary>
|
||||
[PgName("fire")]
|
||||
Fire,
|
||||
|
||||
/// <summary>
|
||||
/// Дерево.
|
||||
/// </summary>
|
||||
[PgName("wood")]
|
||||
Wood,
|
||||
|
||||
/// <summary>
|
||||
/// Металл.
|
||||
/// </summary>
|
||||
[PgName("metal")]
|
||||
Metal,
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление редкости сущности.
|
||||
/// </summary>
|
||||
public enum EntityRarity
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычная редкость.
|
||||
/// </summary>
|
||||
[PgName("common")]
|
||||
Common,
|
||||
|
||||
/// <summary>
|
||||
/// Необычная редкость.
|
||||
/// </summary>
|
||||
[PgName("uncommon")]
|
||||
Uncommon,
|
||||
|
||||
/// <summary>
|
||||
/// Редкая редкость.
|
||||
/// </summary>
|
||||
[PgName("rare")]
|
||||
Rare,
|
||||
|
||||
/// <summary>
|
||||
/// Уникальная редкость.
|
||||
/// </summary>
|
||||
[PgName("unique")]
|
||||
Unique,
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип сущности.
|
||||
/// </summary>
|
||||
public enum EntityType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестный тип сущности.
|
||||
/// </summary>
|
||||
[PgName("unknown")]
|
||||
Unknown,
|
||||
|
||||
/// <summary>
|
||||
/// Признак.
|
||||
/// </summary>
|
||||
[PgName("trait")]
|
||||
Trait,
|
||||
|
||||
/// <summary>
|
||||
/// Действие.
|
||||
/// </summary>
|
||||
[PgName("action")]
|
||||
Action,
|
||||
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
[PgName("ancestry")]
|
||||
Ancestry,
|
||||
|
||||
/// <summary>
|
||||
/// Архетип.
|
||||
/// </summary>
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
/// <summary>
|
||||
/// Происхождение.
|
||||
/// </summary>
|
||||
[PgName("background")]
|
||||
Background,
|
||||
|
||||
/// <summary>
|
||||
/// Рюкзак.
|
||||
/// </summary>
|
||||
[PgName("backpack")]
|
||||
Backpack,
|
||||
|
||||
/// <summary>
|
||||
/// Способность кампании.
|
||||
/// </summary>
|
||||
[PgName("campaign_feature")]
|
||||
CampaignFeature,
|
||||
|
||||
/// <summary>
|
||||
/// Класс.
|
||||
/// </summary>
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
[PgName("subclass_group")]
|
||||
SubclassGroup,
|
||||
|
||||
/// <summary>
|
||||
/// Подкласс.
|
||||
/// </summary>
|
||||
[PgName("subclass")]
|
||||
Subclass,
|
||||
|
||||
/// <summary>
|
||||
/// Состояние.
|
||||
/// </summary>
|
||||
[PgName("condition")]
|
||||
Condition,
|
||||
|
||||
/// <summary>
|
||||
/// Домен божества.
|
||||
/// </summary>
|
||||
[PgName("domain")]
|
||||
Domain,
|
||||
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[PgName("deity")]
|
||||
Deity,
|
||||
|
||||
/// <summary>
|
||||
/// Навык.
|
||||
/// </summary>
|
||||
[PgName("feat")]
|
||||
Feat,
|
||||
|
||||
/// <summary>
|
||||
/// Наследие.
|
||||
/// </summary>
|
||||
[PgName("heritage")]
|
||||
Heritage,
|
||||
|
||||
/// <summary>
|
||||
/// Заклианиние.
|
||||
/// </summary>
|
||||
[PgName("spell")]
|
||||
Spell,
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал.
|
||||
/// </summary>
|
||||
[PgName("ritual")]
|
||||
Ritual,
|
||||
|
||||
/// <summary>
|
||||
/// Язык.
|
||||
/// </summary>
|
||||
[PgName("language")]
|
||||
Language,
|
||||
|
||||
/// <summary>
|
||||
/// Правило.
|
||||
/// </summary>
|
||||
[PgName("rule")]
|
||||
Rule,
|
||||
|
||||
/// <summary>
|
||||
/// Категория божества.
|
||||
/// </summary>
|
||||
[PgName("deity_category")]
|
||||
DeityCategory,
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Категория черты.
|
||||
/// </summary>
|
||||
public enum FeatCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Черта, которая не относится ни к одной из категорий.
|
||||
/// </summary>
|
||||
[PgName("uncategorized")]
|
||||
Uncategorized,
|
||||
|
||||
/// <summary>
|
||||
/// Черта наследия. Возможная коллизия между <see cref="Ancestry"/> и <see cref="AncestryFeature"/>.
|
||||
/// </summary>
|
||||
[PgName("ancestry")]
|
||||
Ancestry,
|
||||
|
||||
/// <summary>
|
||||
/// Черта наследия. Возможная коллизия между <see cref="Ancestry"/> и <see cref="AncestryFeature"/>.
|
||||
/// </summary>
|
||||
[PgName("ancestry-feature")]
|
||||
AncestryFeature,
|
||||
|
||||
/// <summary>
|
||||
/// Черта архетипа.
|
||||
/// </summary>
|
||||
[PgName("archetype")]
|
||||
Archetype,
|
||||
|
||||
/// <summary>
|
||||
/// Черта мифического призвания.
|
||||
/// </summary>
|
||||
[PgName("calling")]
|
||||
Calling,
|
||||
|
||||
/// <summary>
|
||||
/// Черта класса. Возможная коллизия между <see cref="ClassFeature"/> и <see cref="Class"/>.
|
||||
/// </summary>
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
/// <summary>
|
||||
/// Черта класса. Возможная коллизия между <see cref="Class"/> и <see cref="ClassFeature"/>.
|
||||
/// </summary>
|
||||
[PgName("class-feature")]
|
||||
ClassFeature,
|
||||
|
||||
/// <summary>
|
||||
/// Черта навыка.
|
||||
/// </summary>
|
||||
[PgName("skill")]
|
||||
Skill,
|
||||
|
||||
/// <summary>
|
||||
/// Общая черта.
|
||||
/// </summary>
|
||||
[PgName("general")]
|
||||
General,
|
||||
|
||||
/// <summary>
|
||||
/// Бонусная черта.
|
||||
/// </summary>
|
||||
[PgName("bonus")]
|
||||
Bonus,
|
||||
|
||||
/// <summary>
|
||||
/// Божественный дар.
|
||||
/// </summary>
|
||||
[PgName("deityboon")]
|
||||
Deityboon,
|
||||
|
||||
/// <summary>
|
||||
/// Проклятие.
|
||||
/// </summary>
|
||||
[PgName("curse")]
|
||||
Curse,
|
||||
|
||||
/// <summary>
|
||||
/// Дар сообщества Pathfinder Society.
|
||||
/// </summary>
|
||||
[PgName("pfsboon")]
|
||||
Pfsboon,
|
||||
|
||||
/// <summary>
|
||||
/// Черта кампании.
|
||||
/// </summary>
|
||||
[PgName("campaign-feature")]
|
||||
CampaignFeature,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Размер.
|
||||
/// </summary>
|
||||
public enum SizeEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Крошечный размер.
|
||||
/// </summary>
|
||||
[PgName("tiny")]
|
||||
Tiny,
|
||||
|
||||
/// <summary>
|
||||
/// Маленький размер.
|
||||
/// </summary>
|
||||
[PgName("small")]
|
||||
Small,
|
||||
|
||||
/// <summary>
|
||||
/// Средний размер.
|
||||
/// </summary>
|
||||
[PgName("medium")]
|
||||
Medium,
|
||||
|
||||
/// <summary>
|
||||
/// Большой размер.
|
||||
/// </summary>
|
||||
[PgName("large")]
|
||||
Large,
|
||||
|
||||
/// <summary>
|
||||
/// Громадный размер.
|
||||
/// </summary>
|
||||
[PgName("huge")]
|
||||
Huge,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление категорий источников.
|
||||
/// </summary>
|
||||
public enum SourceCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестная категория источника.
|
||||
/// </summary>
|
||||
[PgName("rulebook")]
|
||||
Rulebooks,
|
||||
|
||||
/// <summary>
|
||||
/// Серия приключений.
|
||||
/// </summary>
|
||||
[PgName("adventure-path")]
|
||||
AdventurePaths,
|
||||
|
||||
/// <summary>
|
||||
/// Lost Omens
|
||||
/// </summary>
|
||||
[PgName("lost-omens")]
|
||||
LostOmens,
|
||||
|
||||
/// <summary>
|
||||
/// Приключение.
|
||||
/// </summary>
|
||||
[PgName("adventures")]
|
||||
Adventures,
|
||||
|
||||
/// <summary>
|
||||
/// Комиксы.
|
||||
/// </summary>
|
||||
[PgName("comics")]
|
||||
Comics,
|
||||
|
||||
/// <summary>
|
||||
/// Блог-посты.
|
||||
/// </summary>
|
||||
[PgName("blog-posts")]
|
||||
BlogPosts,
|
||||
|
||||
/// <summary>
|
||||
/// Сообщество.
|
||||
/// </summary>
|
||||
[PgName("society")]
|
||||
Society,
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип области заклинания.
|
||||
/// </summary>
|
||||
public enum SpellAreaType
|
||||
{
|
||||
/// <summary>
|
||||
/// Взрыв.
|
||||
/// </summary>
|
||||
[PgName("burst")]
|
||||
Burst,
|
||||
|
||||
/// <summary>
|
||||
/// Эманация.
|
||||
/// </summary>
|
||||
[PgName("emanation")]
|
||||
Emanation,
|
||||
|
||||
/// <summary>
|
||||
/// Конус.
|
||||
/// </summary>
|
||||
[PgName("cone")]
|
||||
Cone,
|
||||
|
||||
/// <summary>
|
||||
/// Линия.
|
||||
/// </summary>
|
||||
[PgName("line")]
|
||||
Line,
|
||||
|
||||
/// <summary>
|
||||
/// Квадрат.
|
||||
/// </summary>
|
||||
[PgName("square")]
|
||||
Square,
|
||||
|
||||
/// <summary>
|
||||
/// Куб.
|
||||
/// </summary>
|
||||
[PgName("cube")]
|
||||
Cube,
|
||||
|
||||
/// <summary>
|
||||
/// Цилиндр.
|
||||
/// </summary>
|
||||
[PgName("cylinder")]
|
||||
Cylinder,
|
||||
|
||||
/// <summary>
|
||||
/// Варьируемое.
|
||||
/// </summary>
|
||||
[PgName("varies")]
|
||||
Varies,
|
||||
|
||||
/// <summary>
|
||||
/// Параллелипипед.
|
||||
/// </summary>
|
||||
[PgName("cuboid")]
|
||||
Cuboid,
|
||||
|
||||
/// <summary>
|
||||
/// Круг.
|
||||
/// </summary>
|
||||
[PgName("circle")]
|
||||
Circle,
|
||||
|
||||
/// <summary>
|
||||
/// Иное.
|
||||
/// </summary>
|
||||
[PgName("other")]
|
||||
Other,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания.
|
||||
/// </summary>
|
||||
public enum SpellDamageCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычный урон.
|
||||
/// </summary>
|
||||
[PgName("normal")]
|
||||
Normal,
|
||||
|
||||
/// <summary>
|
||||
/// Продолжительный урон.
|
||||
/// </summary>
|
||||
[PgName("persistent")]
|
||||
Persistent,
|
||||
|
||||
/// <summary>
|
||||
/// Брызги.
|
||||
/// </summary>
|
||||
[PgName("splash")]
|
||||
Splash,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания.
|
||||
/// </summary>
|
||||
public enum SpellDamageKinds
|
||||
{
|
||||
/// <summary>
|
||||
/// Урон.
|
||||
/// </summary>
|
||||
[PgName("damage")]
|
||||
Damage,
|
||||
|
||||
/// <summary>
|
||||
/// Исцеление.
|
||||
/// </summary>
|
||||
[PgName("healing")]
|
||||
Healing,
|
||||
|
||||
/// <summary>
|
||||
/// Любое.
|
||||
/// </summary>
|
||||
[PgName("any")]
|
||||
Any,
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Традиция заклинания.
|
||||
/// </summary>
|
||||
public enum SpellTradition
|
||||
{
|
||||
/// <summary>
|
||||
/// Без традиции.
|
||||
/// </summary>
|
||||
[PgName("none")]
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// Сакральная традиция.
|
||||
/// </summary>
|
||||
[PgName("divine")]
|
||||
Divine,
|
||||
|
||||
/// <summary>
|
||||
/// Оккультная традиция.
|
||||
/// </summary>
|
||||
[PgName("occult")]
|
||||
Occult,
|
||||
|
||||
/// <summary>
|
||||
/// Арканная традиция.
|
||||
/// </summary>
|
||||
[PgName("arcane")]
|
||||
Arcane,
|
||||
|
||||
/// <summary>
|
||||
/// Примальная традиция.
|
||||
/// </summary>
|
||||
[PgName("primal")]
|
||||
Primal,
|
||||
|
||||
/// <summary>
|
||||
/// Элементная традиция.
|
||||
/// </summary>
|
||||
[PgName("elemental")]
|
||||
Elemental,
|
||||
|
||||
/// <summary>
|
||||
/// Все традиции.
|
||||
/// </summary>
|
||||
[PgName("all")]
|
||||
All,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление типа применения заклинаний.
|
||||
/// </summary>
|
||||
public enum SpellcastingType
|
||||
{
|
||||
/// <summary>
|
||||
/// Не применяет заклинания.
|
||||
/// </summary>
|
||||
[PgName("none")]
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// Заготавливаемое заклинательство.
|
||||
/// </summary>
|
||||
[PgName("prepared")]
|
||||
Prepared,
|
||||
|
||||
/// <summary>
|
||||
/// Спонтанное заклинательство.
|
||||
/// </summary>
|
||||
[PgName("spontaneous")]
|
||||
Spontaneous,
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки.
|
||||
/// </summary>
|
||||
public enum TrainingRank
|
||||
{
|
||||
/// <summary>
|
||||
/// Необученный.
|
||||
/// </summary>
|
||||
[PgName("untrained")]
|
||||
Untrained,
|
||||
|
||||
/// <summary>
|
||||
/// Обученный.
|
||||
/// </summary>
|
||||
[PgName("trained")]
|
||||
Trained,
|
||||
|
||||
/// <summary>
|
||||
/// Эксперт.
|
||||
/// </summary>
|
||||
[PgName("expert")]
|
||||
Expert,
|
||||
|
||||
/// <summary>
|
||||
/// Мастер.
|
||||
/// </summary>
|
||||
[PgName("master")]
|
||||
Master,
|
||||
|
||||
/// <summary>
|
||||
/// Легендарный.
|
||||
/// </summary>
|
||||
[PgName("legendary")]
|
||||
Legendary,
|
||||
|
||||
/// <summary>
|
||||
/// Мифический.
|
||||
/// </summary>
|
||||
[PgName("mythic")]
|
||||
Mythic,
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип тренировки.
|
||||
/// </summary>
|
||||
public enum TrainingType
|
||||
{
|
||||
/// <summary>
|
||||
/// Восприятие.
|
||||
/// </summary>
|
||||
[PgName("perception")]
|
||||
Perception,
|
||||
|
||||
/// <summary>
|
||||
/// Навык.
|
||||
/// </summary>
|
||||
[PgName("skill")]
|
||||
Skill,
|
||||
|
||||
/// <summary>
|
||||
/// Знание.
|
||||
/// </summary>
|
||||
[PgName("lore")]
|
||||
Lore,
|
||||
|
||||
/// <summary>
|
||||
/// Оружие.
|
||||
/// </summary>
|
||||
[PgName("weapon")]
|
||||
Weapon,
|
||||
|
||||
/// <summary>
|
||||
/// Защита.
|
||||
/// </summary>
|
||||
[PgName("armor")]
|
||||
Armor,
|
||||
|
||||
/// <summary>
|
||||
/// Спасбросок.
|
||||
/// </summary>
|
||||
[PgName("save")]
|
||||
Save,
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Тип признака.
|
||||
/// </summary>
|
||||
public enum TraitType
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычный признак.
|
||||
/// </summary>
|
||||
[PgName("regular")]
|
||||
Regular,
|
||||
|
||||
/// <summary>
|
||||
/// Мировоззрение.
|
||||
/// </summary>
|
||||
[PgName("alignment")]
|
||||
Alignment,
|
||||
|
||||
/// <summary>
|
||||
/// Признак класса.
|
||||
/// </summary>
|
||||
[PgName("class")]
|
||||
Class,
|
||||
|
||||
/// <summary>
|
||||
/// Признак традиции.
|
||||
/// </summary>
|
||||
[PgName("tradition")]
|
||||
Tradition,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2e.Database.Model.Enum;
|
||||
|
||||
/// <summary>
|
||||
/// Перечисление типов зрения.
|
||||
/// </summary>
|
||||
public enum VisionEnum
|
||||
{
|
||||
/// <summary>
|
||||
/// Обычное зрение.
|
||||
/// </summary>
|
||||
[PgName("normal")]
|
||||
Normal,
|
||||
|
||||
/// <summary>
|
||||
/// Зрение в темноте.
|
||||
/// </summary>
|
||||
[PgName("low-light-vision")]
|
||||
LowLightVision,
|
||||
|
||||
/// <summary>
|
||||
/// Тёмное зрение.
|
||||
/// </summary>
|
||||
[PgName("dark-vision")]
|
||||
DarkVision,
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Base;
|
||||
|
||||
namespace Pf2e.Database.Model;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс сущностей структуры.
|
||||
/// </summary>
|
||||
public interface IEntity
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор сущности.
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Корневая сущность.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Entity Entity { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Действие.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Action)]
|
||||
public class Action : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Количество действий.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Количество действий")]
|
||||
public ActionEnum Actions { get; set; } = ActionEnum.Unknown;
|
||||
|
||||
/// <summary>
|
||||
/// Категория действия.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Категория действия")]
|
||||
public ActionCategory Category { get; set; } = ActionCategory.Unknown;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.AncestryRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Ancestry)]
|
||||
public class Ancestry : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Размеры родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Размеры родословной")]
|
||||
public SizeEnum[] Size { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Количество очков здоровья.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Количество очков здоровья")]
|
||||
public int Hp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Скорость передвижения.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Скорость передвижения")]
|
||||
public int Speed { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип зрения.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Тип зрения")]
|
||||
public VisionEnum VisionEnum { get; set; } = VisionEnum.Normal;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция повышениий аттрибутов.
|
||||
/// </summary>
|
||||
public ICollection<AncestryBoost> AncestryBoosts { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция сущностей родословной.
|
||||
/// </summary>
|
||||
public ICollection<AncestryItem> AncestryItems { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция языков родословной.
|
||||
/// </summary>
|
||||
public ICollection<AncestryLanguage> AncestryLanguages { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция наследий.
|
||||
/// </summary>
|
||||
public ICollection<Heritage> Heritages { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.AncestryRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент набора повышений атрибутов для родословной.
|
||||
/// </summary>
|
||||
public class AncestryBoost
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор элемента.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор родословной, к которой относится этот элемент.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор родословной")]
|
||||
public int AncestryId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Указывает, является ли этот элемент повышением атрибута. Если <c>false</c> - это снижение атрибута.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Флаг повышения/снижения")]
|
||||
public bool Boost { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Значение атрибута, которое повышается или понижается в этом элементе набора повышений атрибутов.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Значение атрибута")]
|
||||
public Enum.AttributeValues Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Родословная, к которой относится этот элемент набора повышений атрибутов.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Ancestry Ancestry { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.AncestryRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между родословной и сущностью.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(AncestryId), nameof(ItemId))]
|
||||
public class AncestryItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор родословной")]
|
||||
public int AncestryId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности, связанной с родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор связанной сущности")]
|
||||
public int ItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень сущности в родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Уровень сущности в родословной")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Родословная, к которой относится сущность.
|
||||
/// </summary>
|
||||
public Ancestry Ancestry { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, связанная с родословной.
|
||||
/// </summary>
|
||||
public Entity Item { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.AncestryRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между родословной и языком.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(AncestryId), nameof(LanguageId))]
|
||||
public class AncestryLanguage
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор родословной, к которой относится язык.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор родословной")]
|
||||
public int AncestryId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор языка, связанного с родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор связанного языка")]
|
||||
public int LanguageId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Является ли язык дополнительным для родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Флаг дополнительного")]
|
||||
public bool IsAdditional { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Родословная, к которой относится язык.
|
||||
/// </summary>
|
||||
public Ancestry Ancestry { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Язык, связанный с родословной.
|
||||
/// </summary>
|
||||
public Language Language { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Архетип.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Archetype)]
|
||||
public class Archetype : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Уровень")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор способности, которая является посвящением в архетип.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("ID посвящения")]
|
||||
public int? DedicationFeatId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация об архетипе.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Посвящение в архетип.
|
||||
/// </summary>
|
||||
public Feat DedicationFeat { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Способности архетипа.
|
||||
/// </summary>
|
||||
public ICollection<Feat> Feats { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ArchetypeRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между архетипом и его чертами.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(ArchetypeId), nameof(FeatId))]
|
||||
public class ArchetypeFeats
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор архетипа, к которому относится черта.
|
||||
/// </summary>
|
||||
[Comment("Идентификатор архетипа")]
|
||||
public int ArchetypeId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор черты, связанной с архетипом.
|
||||
/// </summary>
|
||||
[Comment("Идентификатор черты")]
|
||||
public int FeatId { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.BackgroundRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Предыстория.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Background)]
|
||||
public class Background : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Аттрибуты предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundBoost> BackgroundBoosts { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Способности предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundItem> BackgroundItems { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Навыки предыстории.
|
||||
/// </summary>
|
||||
public ICollection<BackgroundTraining> BackgroundSkills { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.BackgroundRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент набора атрибутов для предыстории.
|
||||
/// </summary>
|
||||
public class BackgroundBoost
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор элемента набора атрибутов для предыстории.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор предыстории, к которой относится этот элемент набора атрибутов.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор предыстории")]
|
||||
public int BackgroundId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Атрибут, к которому относится этот элемент набора атрибутов для предыстории.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Атрибут")]
|
||||
public AttributeValues Attribute { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Предыстория, к которой относится этот элемент набора атрибутов.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Background Background { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Base;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.BackgroundRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент предыстории, который может быть способностью, навыком или другим элементом, связанным с предысторией.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(BackgroundId), nameof(EntityId))]
|
||||
public class BackgroundItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор элемента предыстории.
|
||||
/// </summary>
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int BackgroundId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности, связанной с предысторией.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень элемента предыстории, если применимо. Может быть null, если уровень не указан или не применим.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
public int? Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Предыстория, к которой относится сущность.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Background Background { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, связанная с предысторией.
|
||||
/// </summary>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Common;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.BackgroundRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент набора связей между предысторией и тренируемым навыком.
|
||||
/// </summary>
|
||||
public class BackgroundTraining
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор элемента набора связей между предысторией и тренируемым навыком.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор предыстории, к которой относится тренировка.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор предыстории")]
|
||||
public int BackgroundId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор тренируемого навыка.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Идентификатор тренируемого навыка")]
|
||||
public int TrainingId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки, который получает персонаж при выборе данной предыстории.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Ранг тренировки")]
|
||||
public TrainingRank Rank { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Предыстория, к которой относится тренировка.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Background Background { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тренируемый навык, который получает персонаж при выборе данной предыстории.
|
||||
/// </summary>
|
||||
public Training Training { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Класс.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Class)]
|
||||
public class Class : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Количество очков здоровья.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Количество очков здоровья")]
|
||||
public int Hp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Указание на тип заклинательства.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип заклинательства")]
|
||||
public SpellcastingType Spellcasting { get; set; } = SpellcastingType.None;
|
||||
|
||||
/// <summary>
|
||||
/// Традиция заклинаний класса.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Традиция заклинаний")]
|
||||
public SpellTradition? Tradition { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Количество дополнительных навыков.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Дополнительные навыки")]
|
||||
public int AdditionalTrainedSkills { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Аттрибуты класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassKeyAttribute> ClassKeyAbilities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Прогрессия класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassProgression> ClassProgressions { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Навыки класса.
|
||||
/// </summary>
|
||||
public virtual ICollection<ClassTraining> ClassTrainings { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Группы подклассов.
|
||||
/// </summary>
|
||||
public virtual ICollection<SubclassGroup> SubclassGroups { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Набор ключевых атрибутов класса.
|
||||
/// </summary>
|
||||
public class ClassKeyAttribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор ключевого атрибута класса.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор класса, к которому относится ключевой атрибут.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор класса")]
|
||||
public int ClassId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ключевой атрибут класса.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Атрибут")]
|
||||
public AttributeValues Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Класс, к которому относится ключевой атрибут.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Class Class { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент прогрессии класса.
|
||||
/// </summary>
|
||||
public class ClassProgression
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор прогрессии класса.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор класса, к которому относится элемент прогрессии.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор класса")]
|
||||
public int ClassId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень класса, на котором элемент прогрессии доступен.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Уровень класса")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип элемента прогрессии класса.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Тип элемента прогрессии класса")]
|
||||
public ClassProgressionType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности, связанной с элементом прогрессии класса (например, навык, атрибут и т.д.).
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Идентификатор сущности")]
|
||||
public int? EntityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Класс, к которому относится элемент прогрессии.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Class Class { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность, связанная с элементом прогрессии класса (например, навык, атрибут и т.д.).
|
||||
/// </summary>
|
||||
public Entity? Entity { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json;
|
||||
using Pf2e.Database.Model.Common;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Набор элементов, связывающий класс и тренируемый навык.
|
||||
/// </summary>
|
||||
public class ClassTraining
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор набора элементов, связывающий класс и тренируемый навык.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор класса, к которому относится тренировка.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор класса")]
|
||||
public int ClassId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор тренируемого навыка, к которому относится тренировка.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Идентификатор тренируемого навыка")]
|
||||
public int? TrainingId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки, определяющий уровень владения навыком.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Ранг тренировки")]
|
||||
public TrainingRank Rank { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Класс, к которому относится тренировка.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Class Class { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тренируемый навык, к которому относится тренировка.
|
||||
/// </summary>
|
||||
public Training? Training { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент, связывающий сущность с подклассом.
|
||||
/// </summary>
|
||||
[PrimaryKey(nameof(SubclassId), nameof(EntityId))]
|
||||
public class SubclassProvidedEntities
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор подкласса, к которому относится сущность.
|
||||
/// </summary>
|
||||
public int SubclassId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор сущности, предоставляемой подклассом.
|
||||
/// </summary>
|
||||
public int EntityId { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь между подклассами и тренировками.
|
||||
/// </summary>
|
||||
public class SubclassTrainings
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор связи между подклассом и тренировкой.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор связи")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор подкласса, к которому относится тренировка.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор подкласса")]
|
||||
public int SubclassId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор тренировки, связанной с подклассом.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Идентификатор тренировки")]
|
||||
public int TrainingId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки для данного подкласса.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Ранг тренировки")]
|
||||
public TrainingRank Rank { get; set; } = TrainingRank.Trained;
|
||||
|
||||
/// <summary>
|
||||
/// Подкласс, к которому относится тренировка.
|
||||
/// </summary>
|
||||
public Subclass Subclass { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тренировка, связанная с подклассом.
|
||||
/// </summary>
|
||||
public Training Training { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Состояние.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Condition)]
|
||||
public class Condition : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Группа состояния.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Группа состояния")]
|
||||
public ConditionGroup? Group { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Common;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Божество.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Deity)]
|
||||
public class Deity : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божества.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Тип божества")]
|
||||
public DeityType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Категория божества.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Категория божества")]
|
||||
public string Category { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип божественный силы.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Тип божественной силы")]
|
||||
public DeityFonts Fonts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип освящения.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Тип освящения")]
|
||||
public DeitySanctification Sanctification { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Обязательное освящение.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Обязательное освящение")]
|
||||
public bool SanctificationMust { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Заветы божества.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Заветы божества")]
|
||||
public LocaleString Edicts { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Анафемы божества.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Анафемы божества")]
|
||||
public LocaleString Anathema { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Религиозный символ божества.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Религиозный символ божества")]
|
||||
public LocaleString ReligiousSymbol { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Священное животное божества.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Священное животное божества")]
|
||||
public LocaleString SacredAnimal { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Область покровительства божества.
|
||||
/// </summary>
|
||||
[Column(Order = 11)]
|
||||
[Comment("Область покровительства божества")]
|
||||
public LocaleString AreaOfConcern { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Атрибуты божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityAttribute> DeityAttributes { get; set; } = new List<DeityAttribute>();
|
||||
|
||||
/// <summary>
|
||||
/// Домены божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityDomain> DeityDomains { get; set; } = new List<DeityDomain>();
|
||||
|
||||
/// <summary>
|
||||
/// Заклинания божества.
|
||||
/// </summary>
|
||||
public ICollection<DeitySpell> DeitySpells { get; set; } = new List<DeitySpell>();
|
||||
|
||||
/// <summary>
|
||||
/// Оружия божества.
|
||||
/// </summary>
|
||||
public ICollection<DeityWeapon> DeityWeapons { get; set; } = new List<DeityWeapon>();
|
||||
|
||||
/// <summary>
|
||||
/// Категория божества (связь).
|
||||
/// </summary>
|
||||
public DeityCategory? CategoryEntity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор категории божества.
|
||||
/// </summary>
|
||||
[Column(Order = 12)]
|
||||
[Comment("Идентификатор категории божества")]
|
||||
public int? CategoryId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Навыки божества.
|
||||
/// </summary>
|
||||
public ICollection<Training> Skills { get; set; } = new List<Training>();
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Категория божества.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.DeityCategory)]
|
||||
public class DeityCategory : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Описание категории.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Описание категории")]
|
||||
public LocaleString Description { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент отношения божества и атрибута.
|
||||
/// </summary>
|
||||
public class DeityAttribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор божества.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор божества")]
|
||||
public int DeityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Атрибут божества.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Атрибут божества")]
|
||||
public AttributeValues Attribute { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Божество, к которому относится атрибут.
|
||||
/// </summary>
|
||||
public Deity Deity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Structure;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Элемент отношения божества и домена.
|
||||
/// </summary>
|
||||
public class DeityDomain
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор отношения божества и домена.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор божества, к которому относится домен.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор божества")]
|
||||
public int DeityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор домена.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Идентификатор домена")]
|
||||
public int DomainId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, является ли домен основным для божества.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Флаг основного домена")]
|
||||
public bool IsPrimary { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Значение домена божества, например, "Свет", "Тьма" и т.д.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
public string Value { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Божество, к которому относится домен.
|
||||
/// </summary>
|
||||
public virtual Deity Deity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Домен, связанный с божеством.
|
||||
/// </summary>
|
||||
public virtual Domain Domain { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь божества и заклинания.
|
||||
/// </summary>
|
||||
public class DeitySpell
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор связи божества и заклинания.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор божества, к которому относится заклинание.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор божества")]
|
||||
public int DeityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Уровень заклинания")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор заклинания, связанного с божеством.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Идентификатор заклинания")]
|
||||
public int SpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Божество, к которому относится заклинание.
|
||||
/// </summary>
|
||||
public virtual Deity Deity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание, связанное с божеством.
|
||||
/// </summary>
|
||||
public virtual Spell Spell { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Связь божества с оружием.
|
||||
/// </summary>
|
||||
public class DeityWeapon
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор связи божества с оружием.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор божества, к которому относится оружие.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор божества")]
|
||||
public int DeityId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название оружия, связанного с божеством. Будет изменено на идентификатор оружия в будущем, когда будет реализована система оружия.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(Pf2eDbContext.NameLength)]
|
||||
[Comment("Название оружия")]
|
||||
public string Weapon { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Божество, к которому относится оружие.
|
||||
/// </summary>
|
||||
public virtual Deity Deity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.DeityRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Домен.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Domain)]
|
||||
public class Domain : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор заклинания домена.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Заклинание домена")]
|
||||
public int DomainSpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор продвинутого заклинания домена.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Продвинутое заклинание домена")]
|
||||
public int AdvancedDomainSpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор апокрифического заклинания домена.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Апокрифическое заклинание домена")]
|
||||
public int? ApocryphalSpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор продвинутого апокрифического заклинания домена.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Продвинутое апокрифическое заклинание домена")]
|
||||
public int? AdvancedApocryphalSpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание домена.
|
||||
/// </summary>
|
||||
public virtual Spell DomainSpell { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Продвинутое заклинание домена.
|
||||
/// </summary>
|
||||
public virtual Spell AdvancedDomainSpell { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Апокрифическое заклинание домена.
|
||||
/// </summary>
|
||||
public virtual Spell? ApocryphalSpell { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Продвинутое апокрифическое заклинание домена.
|
||||
/// </summary>
|
||||
public virtual Spell? AdvancedApocryphalSpell { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Связи с божествами, которые используют этот домен.
|
||||
/// </summary>
|
||||
public virtual ICollection<DeityDomain> DeityDomains { get; set; } = new List<DeityDomain>();
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.FeatRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Способность.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Feat)]
|
||||
public class Feat : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Категория способности.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Категория способности")]
|
||||
public FeatCategory Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень способности.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Уровень способности")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Количество действий, необходимых для применения фита.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Количество действий")]
|
||||
public ActionEnum Actions { get; set; } = ActionEnum.Other;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public string? Extra { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Архетипы, которые могут использовать эту способность.
|
||||
/// </summary>
|
||||
public ICollection<Archetype> Archetypes { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Требования к получению способности.
|
||||
/// </summary>
|
||||
public ICollection<FeatPrerequisite> FeatPrerequisites { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.FeatRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Предварительное требование для черты.
|
||||
/// </summary>
|
||||
public class FeatPrerequisite
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор предварительного требования для чериы.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор черты, к которой относится предварительное требование.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор черты")]
|
||||
public int FeatId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Предварительное требование для черты.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Предварительное требование")]
|
||||
public string Value { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Черта, к которой относится предварительное требование.
|
||||
/// </summary>
|
||||
public virtual Feat Feat { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Наследие.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Heritage)]
|
||||
public class Heritage : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор родословной.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор родословной")]
|
||||
public int? AncestryId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Родословная.
|
||||
/// </summary>
|
||||
public Ancestry? Ancestry { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Язык.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Language)]
|
||||
public class Language : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.RitualRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Ritual)]
|
||||
public class Ritual : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Уровень ритуала")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Продолжительность ритуала в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Продолжительность ритуала в секундах")]
|
||||
public int CastTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Время действия эффекта ритуала в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Время действия эффекта ритуала в секундах")]
|
||||
public int Duration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Элементы ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Элементы ритуала")]
|
||||
public ElementEnum[] Elements { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Дальнность ритуала в футах.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Дальнность ритуала")]
|
||||
public int Range { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ранг основной проверки.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Ранг основной проверки")]
|
||||
public TrainingRank PrimaryCheckRank { get; set; } = TrainingRank.Trained;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация об основной проверки.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Дополнительная информация об основной проверки")]
|
||||
public LocaleString? PrimaryCheckSuffix { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Количество дополнительных заклинателей, необходимых для ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Количество дополнительных заклинателей")]
|
||||
public int SecondaryCasters { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Максимальное количество дополнительных заклинателей, необходимых для ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Максимальное количество дополнительных заклинателей")]
|
||||
public int SecondaryCastersMax { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация о дополнительных заклинателях.
|
||||
/// </summary>
|
||||
[Column(Order = 11)]
|
||||
[Comment("Дополнительная информация о дополнительных заклинателях")]
|
||||
public LocaleString? SecondaryCastersSuffix { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая дальность ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 12)]
|
||||
[Comment("Дальность ритуала")]
|
||||
public LocaleString? RangeString { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая цель ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 13)]
|
||||
[Comment("Цель ритуала")]
|
||||
public LocaleString? Target { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая стоимость ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 14)]
|
||||
[Comment("Стоимость ритуала")]
|
||||
public LocaleString? Cost { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Строка, описывающая требования к ритуалу.
|
||||
/// </summary>
|
||||
[Column(Order = 15)]
|
||||
[Comment("Требования к ритуалу")]
|
||||
public LocaleString? Requirement { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция областей ритуала.
|
||||
/// </summary>
|
||||
public RitualArea? Area { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция проверок ритуала.
|
||||
/// </summary>
|
||||
public ICollection<RitualCheck> Checks { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.RitualRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Область действия ритуала.
|
||||
/// </summary>
|
||||
public class RitualArea
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор ритуала, к которому относится область действия.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор ритуала")]
|
||||
public int RitualId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Описание области действия ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Описание области действия ритуала")]
|
||||
public LocaleString? Details { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип области действия ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Тип области действия ритуала")]
|
||||
public SpellAreaType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал, к которому относится область действия.
|
||||
/// </summary>
|
||||
public virtual Ritual Ritual { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.RitualRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Проверка для ритуала.
|
||||
/// </summary>
|
||||
public class RitualCheck
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор проверки ритуала.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор ритуала, к которому относится проверка.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор ритуала")]
|
||||
public int RitualId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор тренировки, связанной с проверкой ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Идентификатор тренировки")]
|
||||
public int? TrainingId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Дополнение к проверке.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Дополнение к проверке")]
|
||||
public LocaleString? TrainingString { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Ранг тренировки, связанной с проверкой ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Ранг тренировки")]
|
||||
public TrainingRank Rank { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, является ли проверка основной для ритуала.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Флаг основной проверки")]
|
||||
public bool IsPrimary { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ритуал, к которому относится проверка.
|
||||
/// </summary>
|
||||
public Ritual Ritual { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тренировка, связанная с проверкой ритуала.
|
||||
/// </summary>
|
||||
public Training? Training { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Правило.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Rule)]
|
||||
public class Rule : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Порядок отображения.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Порядок отображения")]
|
||||
public int Order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор родительского правила.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Родительского правило")]
|
||||
public int? ParentId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Родительское правило.
|
||||
/// </summary>
|
||||
public Rule? Parent { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дочерние правила.
|
||||
/// </summary>
|
||||
public ICollection<Rule> Children { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Хлебные крошки для отображения в интерфейсе.
|
||||
/// </summary>
|
||||
public string[] Breadcrumbs { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.SpellRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Spell)]
|
||||
public class Spell : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Уровень заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Является ли заклинание фокусом.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Фокус?")]
|
||||
public bool IsFocus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Количество действий, необходимых для применения заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Количество действий")]
|
||||
public ActionEnum Actions { get; set; } = ActionEnum.Other;
|
||||
|
||||
/// <summary>
|
||||
/// Время длительности заклинания в секундах.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Время длительности заклинания")]
|
||||
public int? Duration { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Дальность заклинания в футах.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[Comment("Дальность заклинания")]
|
||||
public int Range { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Традиции заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Традиции заклинания")]
|
||||
public SpellTradition[] Traditions { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Элементы заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[Comment("Элементы заклинания")]
|
||||
public ElementEnum[] Elements { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Триггер заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[Comment("Триггер заклинания")]
|
||||
public LocaleString? Trigger { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Цель заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 10)]
|
||||
[Comment("Цель заклинания")]
|
||||
public LocaleString? Target { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Стоимость заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 11)]
|
||||
[Comment("Стоимость заклинания")]
|
||||
public LocaleString? Cost { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Требования к заклинанию.
|
||||
/// </summary>
|
||||
[Column(Order = 12)]
|
||||
[Comment("Требования к заклинанию")]
|
||||
public LocaleString? Requirement { get; set; } = null;
|
||||
|
||||
/*
|
||||
[Column(Order = 4)]
|
||||
public bool Counteraction { get; set; }
|
||||
|
||||
[Column(Order = 5)]
|
||||
public bool Sustained { get; set; }
|
||||
|
||||
[Column(Order = 7)]
|
||||
[MaxLength(255)]
|
||||
public string Range { get; set; } = null!;
|
||||
|
||||
[Column(Order = 8)]
|
||||
[MaxLength(255)]
|
||||
public string Requirements { get; set; } = null!;
|
||||
|
||||
[Column(Order = 9)]
|
||||
[MaxLength(255)]
|
||||
public string Target { get; set; } = null!;
|
||||
|
||||
[Column(Order = 10)]
|
||||
[MaxLength(255)]
|
||||
public string Time { get; set; } = null!;
|
||||
|
||||
[Column(Order = 11)]
|
||||
public bool CanHeightening { get; set; }
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция области заклинания.
|
||||
/// </summary>
|
||||
public ICollection<SpellArea> SpellAreas { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция защиты от заклинания.
|
||||
/// </summary>
|
||||
public ICollection<SpellDefense> SpellDefenses { get; set; } = new List<SpellDefense>();
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.SpellRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Область заклинания.
|
||||
/// </summary>
|
||||
public class SpellArea
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор области заклинания.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор заклинания, к которому относится область.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор заклинания")]
|
||||
public int SpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Описание области заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Описание области заклинания")]
|
||||
public LocaleString? Details { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип области заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Тип области заклинания")]
|
||||
public SpellAreaType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание, к которому относится область.
|
||||
/// </summary>
|
||||
public virtual Spell Spell { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.SpellRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Урон заклинания.
|
||||
/// </summary>
|
||||
public class SpellDamage
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор урона заклинания.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор урона заклинания")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор заклинания, к которому относится урон.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор заклинания")]
|
||||
public int SpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Уровень заклинания, к которому относится урон.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Уровень заклинания")]
|
||||
public string Key { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Применяется ли модификатор к урону заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Применяется модификатор?")]
|
||||
public bool? ApplyMod { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Категория урона заклинания, если применимо.
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[Comment("Категория урона заклинания")]
|
||||
public SpellDamageCategory? Category { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Формула урона заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 6)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Формула урона заклинания")]
|
||||
public string Formula { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания.
|
||||
/// </summary>
|
||||
[Column(Order = 7)]
|
||||
[Comment("Тип урона заклинания")]
|
||||
public SpellDamageKinds Kinds { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Материалы, необходимые для заклинания, если применимо.
|
||||
/// </summary>
|
||||
[Column(Order = 8)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Материалы для заклинания")]
|
||||
public string? Materials { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Тип урона заклинания, если применимо (например, "fire", "cold" и т.д.).
|
||||
/// </summary>
|
||||
[Column(Order = 9)]
|
||||
[MaxLength(255)]
|
||||
[Comment("Тип урона заклинания")]
|
||||
public string Type { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание, к которому относится урон.
|
||||
/// </summary>
|
||||
public virtual Spell Spell { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure.SpellRelation;
|
||||
|
||||
/// <summary>
|
||||
/// Защита от заклинания.
|
||||
/// </summary>
|
||||
public class SpellDefense
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор защиты от заклинания.
|
||||
/// </summary>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор заклинания, к которому относится защита.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор заклинания")]
|
||||
public int SpellId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, является ли защита от заклинания пассивной (например, для заклинаний, которые не требуют активного действия для защиты).
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
public bool IsPassive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Флаг, указывающий, является ли защита базовой.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
[Comment("Базовый спасборосок?")]
|
||||
public bool? IsBasic { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Статистика, используемая для защиты от заклинания (например, "Fortitude", "Reflex", "Will").
|
||||
/// </summary>
|
||||
[Column(Order = 5)]
|
||||
[MaxLength(255)]
|
||||
public string Statistic { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Заклинание, к которому относится защита.
|
||||
/// </summary>
|
||||
public virtual Spell Spell { get; set; } = null!;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Common.I18n;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
using Pf2e.Database.Model.Structure.ClassRelation;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Подкласс.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Subclass)]
|
||||
public class Subclass : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идетификатор группы подклассов.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Группа подклассов")]
|
||||
public int GroupId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
public SubclassGroup Group { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация.
|
||||
/// </summary>
|
||||
[Column(Order = 3)]
|
||||
[Comment("Дополнительная информация")]
|
||||
public LocaleString Additional { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Дополнительная информация в формате JSON.
|
||||
/// </summary>
|
||||
[Column(Order = 4)]
|
||||
public string Extra { get; set; } = "{}";
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция сущностей, связанных с подклассом.
|
||||
/// </summary>
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция тренировок, связанных с подклассом.
|
||||
/// </summary>
|
||||
public ICollection<SubclassTrainings> Trainings { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Группа подклассов.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.SubclassGroup)]
|
||||
public class SubclassGroup : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор класса.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Идентификатор класса")]
|
||||
public int? ClassId { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Класс, к которому относится группа подклассов.
|
||||
/// </summary>
|
||||
public Class? Class { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Коллекция подклассов, относящихся к этой группе.
|
||||
/// </summary>
|
||||
public ICollection<Subclass> Subclasses { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Pf2e.Database.Model.Base;
|
||||
using Pf2e.Database.Model.Enum;
|
||||
|
||||
namespace Pf2e.Database.Model.Structure;
|
||||
|
||||
/// <summary>
|
||||
/// Признак.
|
||||
/// </summary>
|
||||
[EntityOfType(EntityType.Trait)]
|
||||
public class Trait : IEntity
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
[Key]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.None)]
|
||||
[Column(Order = 1)]
|
||||
[Comment("Идентификатор")]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Entity Entity { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Тип признака.
|
||||
/// </summary>
|
||||
[Column(Order = 2)]
|
||||
[Comment("Тип признака")]
|
||||
public TraitType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Сущности, которые имеют данный признак.
|
||||
/// </summary>
|
||||
public ICollection<Entity> Entities { get; set; } = [];
|
||||
}
|
||||
Reference in New Issue
Block a user