Files
Shigure/Infrastructure/ClassStateCatalog.cs
waynebian01 8d5de52861 Refactor class configurations for various characters
- Updated Priest.json to enhance spell mappings and reorganize configuration structure.
- Modified Rogue.json to streamline spell definitions and added new abilities.
- Revised Shaman.json to consolidate spell lists and improve clarity.
- Enhanced Warlock.json with updated spell names and improved configuration layout.
- Adjusted Warrior.json to refine spell mappings and added additional abilities.
- Cleaned up common.json by removing redundant fields related to team type and talents.
2026-07-29 10:52:49 +08:00

117 lines
4.0 KiB
C#

namespace Shigure;
/// <summary>
/// ClassBlocks states 可选字段目录。界面使用单级分类;
/// 保存时按 Lua 原格式写入同名分类表,并保持固定分类顺序。
/// </summary>
internal static class ClassStateCatalog
{
public const string CategoryState = "状态";
public const string CategoryConfig = "配置开关";
public const string CategoryItem = "物品";
public const string CategoryResource = "能量";
public const string CategoryTarget = "目标";
public const string CategoryFocus = "焦点";
public static readonly string[] TopCategories =
[
CategoryState,
CategoryResource,
CategoryItem,
CategoryConfig,
CategoryTarget,
CategoryFocus
];
private static readonly (string Category, string[] Names)[] Categories =
[
(CategoryState,
[
"职业", "专精", "有效性", "战斗时间", "移动",
"生命值", "一键辅助", "插入法术", "队伍类型", "队伍人数",
"首领战", "难度", "英雄天赋", "施法目标", "施法技能",
"敌人人数", "施法", "引导", "蓄力", "蓄力层数",
"酒池", "符文", "姿态"
]),
(CategoryConfig,
[
"爆发开关", "AOE开关", "输出模式", "爆发药水开关", "延迟"
]),
(CategoryItem,
[
"治疗药水", "魔法药水", "治疗石", "鲁莽药水", "圣光潜力"
]),
(CategoryResource,
[
"法力值", "怒气值", "集中值", "能量值", "符文", "符文能量",
"星界能量", "漩涡值", "狂乱值", "奥术充能", "恶魔之怒", "痛苦值",
"连击点", "神圣能量", "精华能量", "灵魂碎片", "真气"
]),
(CategoryTarget,
[
"类型", "生命值", "距离", "施法", "施法可打断", "引导", "引导可打断"
]),
(CategoryFocus,
[
"类型", "生命值", "距离", "施法", "施法可打断", "引导", "引导可打断"
])
];
public static IReadOnlyList<StateOption> GetOptions(string category)
{
var definition = Categories.FirstOrDefault(item =>
string.Equals(item.Category, category, StringComparison.Ordinal));
return definition.Names is null
? []
: definition.Names.Select(name => new StateOption(category, name)).ToList();
}
public static IReadOnlyList<StateOption> GetAllOptions(string category)
=> GetOptions(category);
public static bool IsKnown(string category, string name)
=> !string.IsNullOrWhiteSpace(name)
&& GetNames(category).Contains(name, StringComparer.Ordinal);
public static string? FindCategory(string name)
{
foreach (var (category, names) in Categories)
{
if (names.Contains(name, StringComparer.Ordinal))
{
return category;
}
}
return null;
}
public static bool IsInCategory(string name, string category)
{
if (IsKnown(category, name))
{
return true;
}
// Lua 中已有但目录尚未收录的状态仍放在“状态”中,保证可见、可编辑。
return string.Equals(category, CategoryState, StringComparison.Ordinal)
&& FindCategory(name) is null;
}
public static string GetStorageCategory(string category)
=> category;
private static string[] GetNames(string category)
=> Categories.FirstOrDefault(item =>
string.Equals(item.Category, category, StringComparison.Ordinal)).Names ?? [];
public sealed record StateOption(string Category, string Name)
{
public string Display => string.Equals(Category, "未识别", StringComparison.Ordinal)
? $"未识别 · {Name}"
: Name;
public override string ToString() => Display;
}
}