112 lines
14 KiB
GDScript
112 lines
14 KiB
GDScript
class_name ABGMarketLocalization
|
|
extends RefCounted
|
|
|
|
const PROFESSION_JOBS_ZH := {
|
|
"PF-B01": "前排承伤;近战前排",
|
|
"PF-B02": "单体压制;前排/中排",
|
|
"PF-B03": "距离控制;中排",
|
|
"PF-B04": "站位调整;任意位置",
|
|
"PF-B05": "远程投射压制;后排",
|
|
"PF-B06": "范围法术压制;后排",
|
|
"PF-B07": "治疗与净化;中排/后排",
|
|
"PF-B08": "支援与联动;中排/后排",
|
|
"PF-B09": "构装部署;中排",
|
|
"PF-B10": "妨害与诅咒;后排",
|
|
"PF-B11": "行动节奏控制;任意位置",
|
|
"PF-B12": "补给与资源支援;中排/后排",
|
|
}
|
|
|
|
const TRAITS_ZH := {
|
|
"TR-001": {"benefit": "成为最前排后的第一次行动获得 +1 射程。", "cost": "该行动不能以当前最前排敌人为目标。"},
|
|
"TR-002": {"benefit": "两次友方行动结算后,第一次基础行动获得 1 点本地资源。", "cost": "战斗开始时,第一次基础行动延后一档节奏。"},
|
|
"TR-003": {"benefit": "仅有一个相邻队友时,可不消耗资源拦截一次非范围攻击。", "cost": "有两个相邻队友时,不能接收转移来的护卫。"},
|
|
"TR-004": {"benefit": "重复攻击上一个合法目标时,状态持续时间 +1 tick。", "cost": "更换目标会让下一次行动延后 1 tick。"},
|
|
"TR-005": {"benefit": "换位时可携带一个构装或召唤物占位。", "cost": "被携带物失去下一次自动行动。"},
|
|
"TR-006": {"benefit": "被推动或拉动后,若可触及则立刻基础攻击施力者。", "cost": "该次攻击结算前自身处于暴露。"},
|
|
"TR-007": {"benefit": "每场战斗第一次消耗品装备触发可为第二个合法目标保留一次。", "cost": "两次使用的冷却都延长一档。"},
|
|
"TR-008": {"benefit": "位于两名队友之后时,不会成为声音类敌方行动的目标。", "cost": "自身声音类行动不产生本地资源。"},
|
|
"TR-009": {"benefit": "抵抗第一次拉动,并把位移转移给前方相邻队友。", "cost": "若该队友不能移动,两人都会陷入迟滞。"},
|
|
"TR-010": {"benefit": "受到有效治疗时,也为生命比例最低的相邻队友恢复较少生命。", "cost": "直接自我治疗效果降低。"},
|
|
"TR-011": {"benefit": "同射程候选中,敌人更倾向以此成员为目标;每次存活于攻击后获得 1 专注。", "cost": "专注在移动前有上限。"},
|
|
"TR-012": {"benefit": "前方相邻队友倒下时,会在当前蓄力完成后再补入空位。", "cost": "随后的队列收缩 tick 无法行动。"},
|
|
"TR-013": {"benefit": "每第三次不消耗资源的基础行动缩短一件装备的冷却。", "cost": "消耗资源的行动会重置三次计数。"},
|
|
"TR-014": {"benefit": "第一次打断改为延迟,而非取消。", "cost": "延迟后的蓄力以慢一档节奏结算。"},
|
|
"TR-015": {"benefit": "可从额外一格距离接收支援行动。", "cost": "满生命时不能从紧邻队友接收支援。"},
|
|
"TR-016": {"benefit": "击败处于妨害的敌人时恢复 1 点本地资源。", "cost": "击败未受妨害的敌人时,若有资源则失去 1 点。"},
|
|
"TR-017": {"benefit": "每场战斗第一次行动仅在校验已保留目标时获得 +1 射程;目标在射程内移动时仍追踪同一单位,并记录 TARGET_MOVED_STILL_LEGAL。", "cost": "若校验产生 AO_INVALID_REACH、AO_INVALID_UNTARGETABLE、AO_INVALID_FALLEN 或 AO_INVALID_FILTER,则强制落空并记录 AO_FIZZLED,资源与冷却均不返还,也不能改换目标或落点结算。"},
|
|
"TR-018": {"benefit": "受到范围伤害时,下一次行动提前 1 tick。", "cost": "直接单体治疗效果降低。"},
|
|
"TR-019": {"benefit": "第一个进入我方后排的敌人立刻被标记。", "cost": "没有后排入侵者时,自身向前射程 -1。"},
|
|
"TR-020": {"benefit": "所装备物品的第一次触发优先于职业行动。", "cost": "该触发结算或失效前,第一次职业技等待。"},
|
|
"TR-021": {"benefit": "与不同职业职能的成员换位后获得 1 点本地资源。", "cost": "重复与同一对象换位会使自身迟滞。"},
|
|
"TR-022": {"benefit": "承受同一敌人的第三次命中时获得护卫,并清除该敌人的标记。", "cost": "攻击者改变时计数重置。"},
|
|
"TR-023": {"benefit": "受到行动提前后,下一次基础行动复制施予者的节奏。", "cost": "若复制的节奏更慢,该次基础行动前不能再次被提前。"},
|
|
"TR-024": {"benefit": "第一次净化也移除自身最早的正面标签,并获得本地资源。", "cost": "若没有正面标签,净化多耗时 1 tick。"},
|
|
"TR-025": {"benefit": "在暴露状态下存活,为下一次个人商店装备购买累积 1 档折扣。", "cost": "战斗结束时从未暴露会清空所有累积档位。"},
|
|
"TR-026": {"benefit": "基础行动可穿过召唤物占位。", "cost": "基础行动对召唤单位不产生效果。"},
|
|
"TR-027": {"benefit": "未移动时,声音与指令行动不能被打断。", "cost": "移动后自我沉默,直到下一次基础行动结算。"},
|
|
"TR-028": {"benefit": "第一次自施妨害改为持续更短的迟滞。", "cost": "第二次自施妨害延长 1 tick。"},
|
|
"TR-029": {"benefit": "资源分享可穿过一名中间队友选择目标。", "cost": "向远处队友分享的同一节奏内,紧邻队友不会获得任何收益。"},
|
|
"TR-030": {"benefit": "被推到当前最后排之后时,立刻移动到中排。", "cost": "移动时失去一个生效中的正面装备标签。"},
|
|
"TR-031": {"benefit": "敌方每完成一次大型蓄力,自身获得专注。", "cost": "敌方大型行动被打断时,失去所有储存专注。"},
|
|
"TR-032": {"benefit": "过量击杀伤害转为最低生命队友的疗愈资源。", "cost": "不能受益于斩杀阈值效果。"},
|
|
"TR-033": {"benefit": "可同时维持两个由装备施加的标记。", "cost": "职业施加的标记少持续 1 tick。"},
|
|
"TR-034": {"benefit": "每场战斗第一次区域危害无效。", "cost": "第二个不同标签的危害持续时间延长。"},
|
|
"TR-035": {"benefit": "未装备武装类物品时,基础行动获得职业专属的替代目标规则。", "cost": "装备武装会停用此特质,并使该商店操作价格提高 1 档。"},
|
|
"TR-036": {"benefit": "成为某一队列带唯一存活成员时,揭示敌方下一个目标并获得 +1 射程。", "cost": "不能获得隐身或不可选取标签。"},
|
|
}
|
|
|
|
const EQUIPMENT_ZH := {
|
|
"EQ-001": {"effect": "第一次受到直接攻击后,若合法则向后移动一位。", "tradeoff": "下一次基础行动等待 1 tick;已在最后排时不触发。", "fit": "服装;任意位置"},
|
|
"EQ-002": {"effect": "在完成一次基础行动前,抵抗敌方第一次推动。", "tradeoff": "完成该基础行动后自身迟滞 1 tick。", "fit": "服装;前排"},
|
|
"EQ-003": {"effect": "第一次友方换位穿过装备者时,使经过者的基础行动提前。", "tradeoff": "装备者下一次基础行动等量延后。", "fit": "服装;任意位置"},
|
|
"EQ-004": {"effect": "相邻队友倒下时,可有一次选择让队列向装备者方向收缩。", "tradeoff": "收缩 tick 内装备者处于暴露。", "fit": "服装;任意位置"},
|
|
"EQ-005": {"effect": "第一次拉动装备者时,若合法则改为拉动前方相邻队友。", "tradeoff": "转移不合法时两人都迟滞。", "fit": "服装;前排/中排"},
|
|
"EQ-006": {"effect": "第一个进入我方后排的敌人行动后,被向前拉一位。", "tradeoff": "装备者必须保持最后排;移动会停用钩索直到下一次基础行动。", "fit": "服装;后排"},
|
|
"EQ-007": {"effect": "装备者换位后,下一次基础行动攻击换位反方向的单位。", "tradeoff": "没有合法反向目标时行动落空且不获得资源。", "fit": "饰品;任意位置"},
|
|
"EQ-008": {"effect": "连续两档节奏未移动,获得一次强制位移免疫。", "tradeoff": "主动移动会清除储存的免疫。", "fit": "服装;任意位置"},
|
|
"EQ-009": {"effect": "第一次治疗最前排队友时,也将其向后拉一位。", "tradeoff": "拉动不合法时治疗量降低。", "fit": "工具;支援"},
|
|
"EQ-010": {"effect": "第一次成为最前排时,标记当前最前排敌人。", "tradeoff": "向后移动会结束标记。", "fit": "饰品;任意位置"},
|
|
"EQ-011": {"effect": "装备者获得护卫时,也给后方相邻队友 1 个护卫标记。", "tradeoff": "该节奏内不能从该队友获得护卫。", "fit": "服装;任意位置"},
|
|
"EQ-012": {"effect": "前方没有相邻队友时,基础行动射程 +1。", "tradeoff": "前方出现队友时,立即取消已保留的远距目标。", "fit": "饰品;任意位置"},
|
|
"EQ-013": {"effect": "第一次成为敌方定向移动目标后,可在其行动后移动一步。", "tradeoff": "放弃移动会使下一次行动延后。", "fit": "饰品;任意位置"},
|
|
"EQ-014": {"effect": "位于最后排时,第一次范围命中改为直接命中。", "tradeoff": "该命中可能触发敌方单体附加效果。", "fit": "护具;后排"},
|
|
"EQ-015": {"effect": "装备者发起的换位会刷新被换队友的站位触发。", "tradeoff": "不能连续两次选择同一队友。", "fit": "服装;调整站位"},
|
|
"EQ-016": {"effect": "相邻位置为空时,下一次装备触发早于基础行动。", "tradeoff": "空位先被填补时,装备未使用但进入短冷却。", "fit": "饰品;任意位置"},
|
|
"EQ-017": {"effect": "相邻队友被拉动时,装备者可用换位共同承担拉动。", "tradeoff": "共同移动后两人都迟滞。", "fit": "护具;前排/中排"},
|
|
"EQ-018": {"effect": "经过三个不同位置后,刷新一件移动装备。", "tradeoff": "回到重复位置会重置进度。", "fit": "服装;任意位置"},
|
|
"EQ-019": {"effect": "被迫移动后,若原目标仍在射程内则保留目标。", "tradeoff": "禁止改换目标;不合法时正常落空。", "fit": "饰品;任意位置"},
|
|
"EQ-020": {"effect": "每场战斗一次,阻止会暴露最低生命队友的友方换位。", "tradeoff": "阻止会消耗装备者下一次装备触发机会。", "fit": "工具;支援"},
|
|
"EQ-021": {"effect": "第一次基础行动改为攻击已显示蓄力最长的敌人。", "tradeoff": "没有蓄力目标时等待 1 tick 后按默认规则行动。", "fit": "饰品;任意位置"},
|
|
"EQ-022": {"effect": "攻击最前排敌人的基础行动,会为后方相邻队友标记目标。", "tradeoff": "装备者不能受益于该标记。", "fit": "工具;任意位置"},
|
|
"EQ-023": {"effect": "第一次合法攻击选择最后排敌人,并揭示中间的屏障。", "tradeoff": "该次攻击不施加状态。", "fit": "工具;射程 2+"},
|
|
"EQ-024": {"effect": "治疗优先选择最早将承受攻击的队友,而非最低生命者。", "tradeoff": "未预告的伤害不计入指针。", "fit": "饰品;治疗"},
|
|
"EQ-025": {"effect": "目标评分完全相同时,选择最后排而非随机平局规则。", "tradeoff": "平局结算后装备者暴露 1 tick。", "fit": "饰品;任意位置"},
|
|
"EQ-026": {"effect": "基础行动优先攻击拥有独立行动的敌方占位。", "tradeoff": "没有此类占位时,基础行动恢复延长 1 tick。", "fit": "武装;任意位置"},
|
|
"EQ-027": {"effect": "第一次基础行动攻击最近一次受到有效治疗的敌人。", "tradeoff": "目标超出射程时按默认规则行动,装备无收益。", "fit": "工具;压制"},
|
|
"EQ-028": {"effect": "基础行动优先攻击正在保护相邻单位的目标。", "tradeoff": "该装备触发的命中不能击败保护者。", "fit": "武装;任意位置"},
|
|
"EQ-029": {"effect": "减益优先选择下一次行动时间最短的敌人。", "tradeoff": "施加的持续时间减少 1 tick。", "fit": "饰品;妨害"},
|
|
"EQ-030": {"effect": "上一个目标死亡时,下一次行动追踪其最近的存活相邻者。", "tradeoff": "两侧等距时行动落空。", "fit": "饰品;任意位置"},
|
|
"EQ-031": {"effect": "准备阶段选择一名相邻队友;其低于半血时支援行动优先选择该成员。", "tradeoff": "其他队友获得的支援持续时间较短。", "fit": "工具;支援"},
|
|
"EQ-032": {"effect": "第一次命中处于不可选取窗口的敌人时,改为揭示而非造成伤害。", "tradeoff": "即使揭示同 tick 结束,粉末本场仍被消耗。", "fit": "工具;直线射程"},
|
|
"EQ-033": {"effect": "第一次以装备者为目标的强制选取效果,会反射为施法者身上的标记。", "tradeoff": "装备者仍是该行动的合法目标。", "fit": "护具;前排"},
|
|
"EQ-034": {"effect": "行动就绪时,若合法则攻击当前本地资源最低的敌人。", "tradeoff": "敌人第一次获得资源后,装备者才知道其资源类型。", "fit": "饰品;任意位置"},
|
|
"EQ-035": {"effect": "攻击优先选择前方没有存活相邻者的敌人。", "tradeoff": "新前排出现会使保留失效,并改攻最前排。", "fit": "武装;射程 2+"},
|
|
"EQ-036": {"effect": "范围行动改为以两个相邻合法目标之间为中心,而非最前排。", "tradeoff": "只有单一目标时装备不触发。", "fit": "饰品;范围"},
|
|
"EQ-037": {"effect": "任意队友打断敌人后,装备者下一次攻击该敌人。", "tradeoff": "无法触及时,跳过一次基础行动而非按默认目标行动。", "fit": "工具;控制"},
|
|
"EQ-038": {"effect": "净化优先选择最早生效的友方妨害。", "tradeoff": "较新的行动阻断妨害不会被优先处理。", "fit": "饰品;治疗"},
|
|
"EQ-039": {"effect": "已保留目标会追踪一次确定性的敌方队列收缩。", "tradeoff": "结算前第二次收缩会使行动落空。", "fit": "武装;任意位置"},
|
|
"EQ-040": {"effect": "第一次出现两类同等合法目标时,改选与预览默认不同的一类。", "tradeoff": "目标不会受到暴击效果。", "fit": "饰品;任意位置"},
|
|
}
|
|
|
|
|
|
static func profession_job(profession_id: String, fallback: String, locale: String) -> String:
|
|
return String(PROFESSION_JOBS_ZH.get(profession_id, fallback)) if locale == "zh_CN" else fallback
|
|
|
|
|
|
static func trait_value(trait_id: String, field: String, fallback: String, locale: String) -> String:
|
|
return String(TRAITS_ZH.get(trait_id, {}).get(field, fallback)) if locale == "zh_CN" else fallback
|
|
|
|
|
|
static func equipment_value(item_id: String, field: String, fallback: String, locale: String) -> String:
|
|
return String(EQUIPMENT_ZH.get(item_id, {}).get(field, fallback)) if locale == "zh_CN" else fallback
|