add tower wave spec

This commit is contained in:
DismissedLight
2023-09-16 21:56:28 +08:00
parent 808b643b9f
commit 98ca533706
16 changed files with 740 additions and 225 deletions

View File

@@ -0,0 +1,14 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Model.Metadata.Tower;
[Localization]
internal enum GoalType
{
[LocalizationKey(nameof(SH.ModelMetadataTowerGoalTypeDefeatMonsters))]
DefeatMonsters,
[LocalizationKey(nameof(SH.ModelMetadataTowerGoalTypeDefendTarget))]
DefendTarget,
}

View File

@@ -31,7 +31,7 @@ internal sealed class TowerFloor
public string Background { get; set; } = default!;
/// <summary>
/// 描述
/// 地脉紊乱
/// </summary>
public List<string> Descriptions { get; set; } = default!;
}

View File

@@ -35,8 +35,28 @@ internal sealed class TowerLevel
/// </summary>
public List<MonsterRelationshipId> FirstMonsters { get; set; } = default!;
/// <summary>
/// 上半怪物波次
/// </summary>
public List<TowerWave> FirstWaves { get; set; } = default!;
/// <summary>
/// 上半造物
/// </summary>
public NameDescription? FirstGadget { get; set; }
/// <summary>
/// 下半怪物预览
/// </summary>
public List<MonsterRelationshipId> SecondMonsters { get; set; } = default!;
public List<MonsterRelationshipId>? SecondMonsters { get; set; }
/// <summary>
/// 下半怪物波次
/// </summary>
public List<TowerWave> SecondWaves { get; set; } = default!;
/// <summary>
/// 下半造物
/// </summary>
public NameDescription? SecondGadget { get; set; }
}

View File

@@ -0,0 +1,29 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Model.Metadata.Tower;
internal sealed class TowerMonster
{
/// <summary>
/// 怪物关系Id
/// </summary>
public MonsterRelationshipId Id { get; set; }
/// <summary>
/// 个数
/// </summary>
public uint Count { get; set; }
/// <summary>
/// 是否攻击镇石
/// </summary>
public bool AttackMonolith { get; set; }
/// <summary>
/// 特殊词条
/// </summary>
public List<NameDescription>? Affixes { get; set; }
}

View File

@@ -0,0 +1,24 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Model.Metadata.Tower;
internal sealed class TowerWave
{
/// <summary>
/// 波次类型
/// </summary>
public WaveType Type { get; set; }
/// <summary>
/// 额外描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 分波怪物
/// </summary>
public List<TowerMonster> Monsters { get; set; } = default!;
}

View File

@@ -0,0 +1,85 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.Model.Metadata.Tower;
/// <summary>
/// 第二波:击败所有怪物,下一波才会出现
/// D组不同的组同时在场各自分波独立
/// D组第一波不同的组同时在场各自分波独立
/// </summary>
[Localization]
internal enum WaveType
{
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeIndependent))]
Independent = 0,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeWave1))]
Wave1 = 1,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeWave2))]
Wave2 = 2,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeWave3))]
Wave3 = 3,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeWave4))]
Wave4 = 4,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupA))]
GroupA = 10,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupAWave1))]
GroupAWave1 = 11,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupAWave2))]
GroupAWave2 = 12,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupAWave3))]
GroupAWave3 = 13,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupB))]
GroupB = 20,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupBWave1))]
GroupBWave1 = 21,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupBWave2))]
GroupBWave2 = 22,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupBWave3))]
GroupBWave3 = 23,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupC))]
GroupC = 30,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupCWave1))]
GroupCWave1 = 31,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupCWave2))]
GroupCWave2 = 32,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupCWave3))]
GroupCWave3 = 33,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupD))]
GroupD = 40,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupDWave1))]
GroupDWave1 = 41,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupDWave2))]
GroupDWave2 = 42,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeGroupDWave3))]
GroupDWave3 = 43,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeSuppressed))]
Suppressed = 99,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeAdditional))]
Additional = 999,
[LocalizationKey(nameof(SH.ModelMetadataTowerWaveTypeWave1Additional))]
Wave1Additional = 1999,
}

View File

@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
namespace Snap.Hutao.ViewModel.AvatarProperty;
namespace Snap.Hutao.Model;
/// <summary>
/// 名称与描述

View File

@@ -861,6 +861,240 @@ namespace Snap.Hutao.Resource.Localization {
}
}
/// <summary>
/// 查找类似 打怪 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerGoalTypeDefeatMonsters {
get {
return ResourceManager.GetString("ModelMetadataTowerGoalTypeDefeatMonsters", resourceCulture);
}
}
/// <summary>
/// 查找类似 守塔 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerGoalTypeDefendTarget {
get {
return ResourceManager.GetString("ModelMetadataTowerGoalTypeDefendTarget", resourceCulture);
}
}
/// <summary>
/// 查找类似 附加 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeAdditional {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeAdditional", resourceCulture);
}
}
/// <summary>
/// 查找类似 A组不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupA {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupA", resourceCulture);
}
}
/// <summary>
/// 查找类似 A组第一波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupAWave1 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupAWave1", resourceCulture);
}
}
/// <summary>
/// 查找类似 A组第二波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupAWave2 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupAWave2", resourceCulture);
}
}
/// <summary>
/// 查找类似 A组第三波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupAWave3 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupAWave3", resourceCulture);
}
}
/// <summary>
/// 查找类似 B组不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupB {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupB", resourceCulture);
}
}
/// <summary>
/// 查找类似 B组第一波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupBWave1 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupBWave1", resourceCulture);
}
}
/// <summary>
/// 查找类似 B组第二波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupBWave2 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupBWave2", resourceCulture);
}
}
/// <summary>
/// 查找类似 B组第三波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupBWave3 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupBWave3", resourceCulture);
}
}
/// <summary>
/// 查找类似 C组不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupC {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupC", resourceCulture);
}
}
/// <summary>
/// 查找类似 C组第一波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupCWave1 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupCWave1", resourceCulture);
}
}
/// <summary>
/// 查找类似 C组第二波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupCWave2 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupCWave2", resourceCulture);
}
}
/// <summary>
/// 查找类似 C组第三波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupCWave3 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupCWave3", resourceCulture);
}
}
/// <summary>
/// 查找类似 D组不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupD {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupD", resourceCulture);
}
}
/// <summary>
/// 查找类似 D组第一波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupDWave1 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupDWave1", resourceCulture);
}
}
/// <summary>
/// 查找类似 D组第二波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupDWave2 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupDWave2", resourceCulture);
}
}
/// <summary>
/// 查找类似 D组第三波不同的组同时在场各自分波独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeGroupDWave3 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeGroupDWave3", resourceCulture);
}
}
/// <summary>
/// 查找类似 与其他怪物独立 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeIndependent {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeIndependent", resourceCulture);
}
}
/// <summary>
/// 查找类似 暂时没有分波信息 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeSuppressed {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeSuppressed", resourceCulture);
}
}
/// <summary>
/// 查找类似 第一波:击败所有怪物,下一波才会出现 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeWave1 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeWave1", resourceCulture);
}
}
/// <summary>
/// 查找类似 第一波附加:为第一波补充怪物 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeWave1Additional {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeWave1Additional", resourceCulture);
}
}
/// <summary>
/// 查找类似 第二波:击败所有怪物,下一波才会出现 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeWave2 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeWave2", resourceCulture);
}
}
/// <summary>
/// 查找类似 第三波:击败所有怪物,下一波才会出现 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeWave3 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeWave3", resourceCulture);
}
}
/// <summary>
/// 查找类似 第四波:击败所有怪物,下一波才会出现 的本地化字符串。
/// </summary>
internal static string ModelMetadataTowerWaveTypeWave4 {
get {
return ResourceManager.GetString("ModelMetadataTowerWaveTypeWave4", resourceCulture);
}
}
/// <summary>
/// 查找类似 请更新角色橱窗数据 的本地化字符串。
/// </summary>

View File

@@ -413,6 +413,84 @@
<value>武器强化素材</value>
<comment>Need EXACT same string in game</comment>
</data>
<data name="ModelMetadataTowerGoalTypeDefeatMonsters" xml:space="preserve">
<value>打怪</value>
</data>
<data name="ModelMetadataTowerGoalTypeDefendTarget" xml:space="preserve">
<value>守塔</value>
</data>
<data name="ModelMetadataTowerWaveTypeAdditional" xml:space="preserve">
<value>附加</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupA" xml:space="preserve">
<value>A组不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupAWave1" xml:space="preserve">
<value>A组第一波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupAWave2" xml:space="preserve">
<value>A组第二波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupAWave3" xml:space="preserve">
<value>A组第三波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupB" xml:space="preserve">
<value>B组不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupBWave1" xml:space="preserve">
<value>B组第一波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupBWave2" xml:space="preserve">
<value>B组第二波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupBWave3" xml:space="preserve">
<value>B组第三波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupC" xml:space="preserve">
<value>C组不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupCWave1" xml:space="preserve">
<value>C组第一波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupCWave2" xml:space="preserve">
<value>C组第二波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupCWave3" xml:space="preserve">
<value>C组第三波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupD" xml:space="preserve">
<value>D组不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupDWave1" xml:space="preserve">
<value>D组第一波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupDWave2" xml:space="preserve">
<value>D组第二波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeGroupDWave3" xml:space="preserve">
<value>D组第三波不同的组同时在场各自分波独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeIndependent" xml:space="preserve">
<value>与其他怪物独立</value>
</data>
<data name="ModelMetadataTowerWaveTypeSuppressed" xml:space="preserve">
<value>暂时没有分波信息</value>
</data>
<data name="ModelMetadataTowerWaveTypeWave1" xml:space="preserve">
<value>第一波:击败所有怪物,下一波才会出现</value>
</data>
<data name="ModelMetadataTowerWaveTypeWave1Additional" xml:space="preserve">
<value>第一波附加:为第一波补充怪物</value>
</data>
<data name="ModelMetadataTowerWaveTypeWave2" xml:space="preserve">
<value>第二波:击败所有怪物,下一波才会出现</value>
</data>
<data name="ModelMetadataTowerWaveTypeWave3" xml:space="preserve">
<value>第三波:击败所有怪物,下一波才会出现</value>
</data>
<data name="ModelMetadataTowerWaveTypeWave4" xml:space="preserve">
<value>第四波:击败所有怪物,下一波才会出现</value>
</data>
<data name="ModelNameValueDefaultDescription" xml:space="preserve">
<value>请更新角色橱窗数据</value>
</data>

View File

@@ -6,7 +6,6 @@ using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Intrinsic.Format;
using Snap.Hutao.Model.Metadata.Converter;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.ViewModel.AvatarProperty;
using Snap.Hutao.Web.Enka.Model;
using EntityAvatarInfo = Snap.Hutao.Model.Entity.AvatarInfo;
using MetadataAvatar = Snap.Hutao.Model.Metadata.Avatar.Avatar;

View File

@@ -2,15 +2,6 @@
// Licensed under the MIT license.
using Snap.Hutao.Core.DependencyInjection.Abstraction;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata;
using Snap.Hutao.Model.Metadata.Achievement;
using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Metadata.Monster;
using Snap.Hutao.Model.Metadata.Reliquary;
using Snap.Hutao.Model.Metadata.Weapon;
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Service.Metadata;
@@ -18,222 +9,15 @@ namespace Snap.Hutao.Service.Metadata;
/// 元数据服务
/// </summary>
[HighQuality]
[SuppressMessage("", "SA1124")]
internal interface IMetadataService : ICastService
internal interface IMetadataService : ICastService,
IMetadataServiceRawData,
IMetadataServiceIdDataMap,
IMetadataServiceNameDataMap,
IMetadataServiceNameLevelCurveMap
{
/// <summary>
/// 异步初始化服务,尝试更新元数据
/// </summary>
/// <returns>初始化是否成功</returns>
ValueTask<bool> InitializeAsync();
#region RawData
/// <summary>
/// 异步获取成就列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就列表</returns>
ValueTask<List<Model.Metadata.Achievement.Achievement>> GetAchievementsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取成就分类列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就分类列表</returns>
ValueTask<List<AchievementGoal>> GetAchievementGoalsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取角色突破列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>角色突破列表</returns>
ValueTask<List<Promote>> GetAvatarPromotesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取角色列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>角色列表</returns>
ValueTask<List<Avatar>> GetAvatarsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取卡池配置列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>卡池配置列表</returns>
ValueTask<List<GachaEvent>> GetGachaEventsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取材料列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>材料列表</returns>
ValueTask<List<Material>> GetMaterialsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取怪物列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>怪物列表</returns>
ValueTask<List<Monster>> GetMonstersAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物列表</returns>
ValueTask<List<Reliquary>> GetReliquariesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物强化属性列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物强化属性列表</returns>
ValueTask<List<ReliquarySubAffix>> GetReliquarySubAffixesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物等级数据
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物等级数据</returns>
ValueTask<List<ReliquaryMainAffixLevel>> GetReliquaryLevelsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物主属性强化属性列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物强化属性列表</returns>
ValueTask<List<ReliquaryMainAffix>> GetReliquaryMainAffixesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物套装
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物套装列表</returns>
ValueTask<List<ReliquarySet>> GetReliquarySetsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取武器突破列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>武器突破列表</returns>
ValueTask<List<Promote>> GetWeaponPromotesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取武器列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>武器列表</returns>
ValueTask<List<Weapon>> GetWeaponsAsync(CancellationToken token = default);
#endregion
#region IdDataMap
/// <summary>
/// 异步获取装备被动Id到圣遗物套装的映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>装备被动Id到圣遗物套装的映射</returns>
ValueTask<Dictionary<EquipAffixId, ReliquarySet>> GetEquipAffixIdToReliquarySetMapAsync(CancellationToken token = default);
ValueTask<Dictionary<ExtendedEquipAffixId, ReliquarySet>> GetExtendedEquipAffixIdToReliquarySetMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取成就映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就映射</returns>
ValueTask<Dictionary<AchievementId, Model.Metadata.Achievement.Achievement>> GetIdToAchievementMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取Id到角色的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到角色的字典</returns>
ValueTask<Dictionary<AvatarId, Avatar>> GetIdToAvatarMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取显示与材料映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>显示与材料映射</returns>
ValueTask<Dictionary<MaterialId, DisplayItem>> GetIdToDisplayItemAndMaterialMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取Id到材料的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到材料的字典</returns>
ValueTask<Dictionary<MaterialId, Material>> GetIdToMaterialMapAsync(CancellationToken token = default(CancellationToken));
/// <summary>
/// 异步获取Id到圣遗物权重的映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到圣遗物权重的字典</returns>
ValueTask<Dictionary<AvatarId, ReliquaryAffixWeight>> GetIdToReliquaryAffixWeightMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取ID到圣遗物副词条的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>字典</returns>
ValueTask<Dictionary<ReliquarySubAffixId, ReliquarySubAffix>> GetIdToReliquarySubAffixMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物主词条Id与属性的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>字典</returns>
ValueTask<Dictionary<ReliquaryMainAffixId, FightProperty>> GetIdToReliquaryMainPropertyMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取ID到武器的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到武器的字典</returns>
ValueTask<Dictionary<WeaponId, Weapon>> GetIdToWeaponMapAsync(CancellationToken token = default);
#endregion
#region NameDataMap
/// <summary>
/// 异步获取名称到角色的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>名称到角色的字典</returns>
ValueTask<Dictionary<string, Avatar>> GetNameToAvatarMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取名称到武器的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>名称到武器的字典</returns>
ValueTask<Dictionary<string, Weapon>> GetNameToWeaponMapAsync(CancellationToken token = default);
#endregion
#region LevelCurveMap
/// <summary>
/// 异步获取等级角色曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级角色曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToAvatarCurveMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取等级怪物曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级怪物曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToMonsterCurveMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取等级武器曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级武器曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToWeaponCurveMapAsync(CancellationToken token = default);
#endregion
}

View File

@@ -0,0 +1,79 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Metadata.Reliquary;
using Snap.Hutao.Model.Metadata.Weapon;
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Service.Metadata;
internal interface IMetadataServiceIdDataMap
{
/// <summary>
/// 异步获取装备被动Id到圣遗物套装的映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>装备被动Id到圣遗物套装的映射</returns>
ValueTask<Dictionary<EquipAffixId, ReliquarySet>> GetEquipAffixIdToReliquarySetMapAsync(CancellationToken token = default);
ValueTask<Dictionary<ExtendedEquipAffixId, ReliquarySet>> GetExtendedEquipAffixIdToReliquarySetMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取成就映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就映射</returns>
ValueTask<Dictionary<AchievementId, Model.Metadata.Achievement.Achievement>> GetIdToAchievementMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取Id到角色的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到角色的字典</returns>
ValueTask<Dictionary<AvatarId, Avatar>> GetIdToAvatarMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取显示与材料映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>显示与材料映射</returns>
ValueTask<Dictionary<MaterialId, DisplayItem>> GetIdToDisplayItemAndMaterialMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取Id到材料的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到材料的字典</returns>
ValueTask<Dictionary<MaterialId, Material>> GetIdToMaterialMapAsync(CancellationToken token = default(CancellationToken));
/// <summary>
/// 异步获取Id到圣遗物权重的映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到圣遗物权重的字典</returns>
ValueTask<Dictionary<AvatarId, ReliquaryAffixWeight>> GetIdToReliquaryAffixWeightMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取ID到圣遗物副词条的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>字典</returns>
ValueTask<Dictionary<ReliquarySubAffixId, ReliquarySubAffix>> GetIdToReliquarySubAffixMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物主词条Id与属性的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>字典</returns>
ValueTask<Dictionary<ReliquaryMainAffixId, FightProperty>> GetIdToReliquaryMainPropertyMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取ID到武器的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>Id到武器的字典</returns>
ValueTask<Dictionary<WeaponId, Weapon>> GetIdToWeaponMapAsync(CancellationToken token = default);
}

View File

@@ -0,0 +1,24 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Metadata.Weapon;
namespace Snap.Hutao.Service.Metadata;
internal interface IMetadataServiceNameDataMap
{
/// <summary>
/// 异步获取名称到角色的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>名称到角色的字典</returns>
ValueTask<Dictionary<string, Avatar>> GetNameToAvatarMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取名称到武器的字典
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>名称到武器的字典</returns>
ValueTask<Dictionary<string, Weapon>> GetNameToWeaponMapAsync(CancellationToken token = default);
}

View File

@@ -0,0 +1,31 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Primitive;
namespace Snap.Hutao.Service.Metadata;
internal interface IMetadataServiceNameLevelCurveMap
{
/// <summary>
/// 异步获取等级角色曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级角色曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToAvatarCurveMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取等级怪物曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级怪物曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToMonsterCurveMapAsync(CancellationToken token = default);
/// <summary>
/// 异步获取等级武器曲线映射
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>等级武器曲线映射</returns>
ValueTask<Dictionary<Level, Dictionary<GrowCurveType, float>>> GetLevelToWeaponCurveMapAsync(CancellationToken token = default);
}

View File

@@ -0,0 +1,113 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model.Metadata;
using Snap.Hutao.Model.Metadata.Achievement;
using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Metadata.Monster;
using Snap.Hutao.Model.Metadata.Reliquary;
using Snap.Hutao.Model.Metadata.Weapon;
namespace Snap.Hutao.Service.Metadata;
internal interface IMetadataServiceRawData
{
/// <summary>
/// 异步获取成就列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就列表</returns>
ValueTask<List<Model.Metadata.Achievement.Achievement>> GetAchievementsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取成就分类列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>成就分类列表</returns>
ValueTask<List<AchievementGoal>> GetAchievementGoalsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取角色突破列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>角色突破列表</returns>
ValueTask<List<Promote>> GetAvatarPromotesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取角色列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>角色列表</returns>
ValueTask<List<Avatar>> GetAvatarsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取卡池配置列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>卡池配置列表</returns>
ValueTask<List<GachaEvent>> GetGachaEventsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取材料列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>材料列表</returns>
ValueTask<List<Material>> GetMaterialsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取怪物列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>怪物列表</returns>
ValueTask<List<Monster>> GetMonstersAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物列表</returns>
ValueTask<List<Reliquary>> GetReliquariesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物强化属性列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物强化属性列表</returns>
ValueTask<List<ReliquarySubAffix>> GetReliquarySubAffixesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物等级数据
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物等级数据</returns>
ValueTask<List<ReliquaryMainAffixLevel>> GetReliquaryLevelsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物主属性强化属性列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物强化属性列表</returns>
ValueTask<List<ReliquaryMainAffix>> GetReliquaryMainAffixesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取圣遗物套装
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>圣遗物套装列表</returns>
ValueTask<List<ReliquarySet>> GetReliquarySetsAsync(CancellationToken token = default);
/// <summary>
/// 异步获取武器突破列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>武器突破列表</returns>
ValueTask<List<Promote>> GetWeaponPromotesAsync(CancellationToken token = default);
/// <summary>
/// 异步获取武器列表
/// </summary>
/// <param name="token">取消令牌</param>
/// <returns>武器列表</returns>
ValueTask<List<Weapon>> GetWeaponsAsync(CancellationToken token = default);
}

View File

@@ -1,6 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Model;
using Snap.Hutao.Model.Calculable;
using Snap.Hutao.Model.Primitive;