- 移动开发
- GUI 自动化
- 计算机视觉
【免费下载链接】FGA
Auto-battle app for F/GO Android
导读
本文基于 FGA(Fate Grand Automata,F/GO Android 自动战斗应用)官方文档中的战斗配置章节,系统讲解如何为周回刷本编写可复用的战斗脚本。文章会先带你走一遍「创建脚本 → 编写命令」的完整流程,然后逐条拆解命令语法中每一项字母与符号的含义(技能、宝具、指令卡、御主技能、换人、敌我目标选择等),再深入讲解附加配置(素材、服务器、编队、卡优先级、支援选择)。读完本文,你将能独立为任意从者队伍编写、校验并调优一套完整可运行的 FGA 战斗脚本,并理解这些命令在底层是如何被解析执行的。
说明:本文以 Battle.md 为主体展开,命令语法、枚举与解析逻辑均以当前仓库 scripts 下的源码为准。
一、进入战斗配置界面并创建脚本
Step 1 - 进入 Battle Configs 菜单
在 FGA 主界面找到 "Battle Configs"(战斗配置)入口并点击进入。这是所有战斗脚本的管理入口,后续创建的每个脚本都会保存在这里。
Step 2 - 通过悬浮按钮新建脚本
点击右下角的悬浮按钮(Floating Action Button)创建新脚本。
Step 3 - 为脚本命名
为新脚本取一个便于识别的名称,例如按队伍或用途命名。还可以(可选)添加一条备注,例如记录"这个脚本用于哪套从者阵容"之类的信息,方便日后区分管理。
Step 4 - 编辑命令(Command)
命令编辑界面就是战斗脚本的核心编辑区,FGA 在战斗中会完全按照这里编排的"命令串"去执行操作。下一节将系统介绍命令串的语法。
从仓库源码看,每个战斗配置都被建模为 IBattleConfig,其中skillCommand: String字段正是这条命令串本身,此外还包含cardPriority(卡优先级)、servantPriority(从者优先级)、party(编队槽位)、materials(素材)、support(支援选择)等配置,并支持export()/import()进行导入导出。
二、命令(Commands)详解
命令串的本质是一串由字母、数字与符号组成的字符序列,最终会被解析为"波次 × 回合 × 动作列表"的二维结构。解析入口在 AutoSkillCommand.parse():命令先按波次分隔符,#,拆成波次,每个波次再按回合分隔符,拆成回合(见 WaveTurn),每个回合内再逐个字符解析成动作。
2.1 Party Mapping(编队映射)
编写战斗脚本前,必须记住从者位置非常重要:你的编队中每位从者会被按顺序编号 1 到 6(从前到后),脚本中所有技能、宝具、目标选择都基于这个编号。
- 场上 1、2、3 号位是前排(战斗中的主力);
- 4、5、6 号位是后排(通常在换人时被换上)。
2.2 Skills Mapping(技能映射)
技能的语法遵循"位置字母 + 技能序号字母"的规则。技能字母在源码中定义于 Skill.kt:
| 从者位置 | 技能 1 | 技能 2 | 技能 3 |
|---|---|---|---|
| 1 号位 | a | b | c |
| 2 号位 | d | e | f |
| 3 号位 | g | h | i |
例如:a表示 1 号位从者的第 1 技能,f表示 2 号位从者的第 3 技能。这些字符在 AutoSkillCommand.parseAction() 中被逐个识别并构造为AutoSkillAction.ServantSkill(skill, targets)。
2.3 Targeting(技能目标选择)
可以指定目标的技能,需要在技能字母后追加目标从者的位置数字来指定施放对象:
| 目标 | 代码 |
|---|---|
| 1 号位从者 | 1 |
| 2 号位从者 | 2 |
| 3 号位从者 | 3 |
这些目标数字在源码中对应 ServantTarget 中的A('1') / B('2') / C('3')。例如a1表示"对 1 号位从者使用 1 号位从者的第 1 技能"(常见的场景如 C 呆、杀狐等单体辅助技能对自己或主力施加 buff)。
多目标技能:若技能可以同时指定多个目标,用括号包裹目标列表,例如e(12)表示对 1 号和 2 号位同时施放 2 号位从者的第 2 技能。对应解析在 AutoSkillCommand.getTargets(),支持(1)、(12)、(123)以及混合特殊目标(见下文 Special Skills)。
2.4 Special Skills(特殊技能)
部分从者的技能具有额外分支选项,FGA 在命令编辑器底部会显示对应的特殊按钮。这些特殊选项在源码中统一建模为 ServantTarget.SpecialTarget,语法上使用方括号包裹特殊目标代码,例如[Ch2A];解析器对未闭合的[或]会抛出 "Found [ but no matching ] in Skill Command" 之类的错误(见 AutoSkillCommand)。
Kukulkan / UDK-Barghest(二选一技能)
- Kukulkan:第 1、3 技能是自身目标技能,可通过消耗暴击星获得可选附加效果。
Option 1(不消耗暴击星):对应[Ch2A];Option 2(消耗暴击星):对应[Ch2B]。- 其第 2 技能是可指定目标的技能,同样可选择
Option 1/2后再接目标数字,例如[Ch2B]1。 - 编辑器中点击 "Kukulkan" 按钮可以替换按钮文字为更直观的说明(仅视觉效果,不影响脚本执行)。
- UDK-Barghest:第 3 技能可以把她的宝具在群体(AoE)与单体(Single Target)之间切换。
- 先点击
Choices (2),再选Option 1(AoE)或Option 2(单体)。 - 对应代码同样是
[Ch2A]/[Ch2B]。
- 先点击
Emiya / BB Dubai(宝具类型二选一)
Emiya 与 BB Dubai 的技能可以把宝具切换为 2 种形态之一。在命令编辑器中点击第 3 技能后,底部会出现NP Type (2)选项,需要为这些从者选择。
- 注意:只有三技能已满级强化(Lvl. 10)的 Emiya 才能使用
NP Type (2)选项(BB Dubai 同理)。 - FGA无法自动检测技能是否满级,但你可以利用"Preferred Friends(优先好友)"功能来确保选到正确的支援从者。
Space Ishtar(宝具类型三选一)
太空伊什塔尔的第 2 技能可在 Quick、Arts、Buster 三种宝具形态中切换。点击第 2 技能后会出现NP Type (3),进入新界面从 3 个选项中挑选;底部按钮可以预览每个选项对应技能的效果。
Mélusine / Ptolemaios(变身)
Mélusine 的第 1、2 阶段第 3 技能、以及 Ptolemaios 的第 3 技能会在战斗中改变从者的灵基形态(Ascension)。
- 使用
Transform选项(代码M)可以同时处理长动画与变更后的指令卡;若不用Transform,战斗剩余部分的 Servant Priority 会失效(因为灵基变化后卡片判定被打乱)。 - Mélusine 警告:在 1、2 阶段使用过第 3 技能后,后续再次使用第 3 技能应使用普通第 3 技能命令(例如她在 1 号位时用
c),而不是Transform;如果开局就是 3 阶段灵基,则完全不需要Transform。 - Ptolemaios 相反:他每次使用第 3 技能都会改变形态,因此每次都需用
Transform。
Soujuurou / Charlotte / Hakuno / Van Gogh(三选一技能)
这些从者的特殊技能有 3 个选项,需要点击Choices (3):
- Soujuurou 第 3 技能:可以在一回合后改变指令卡;
- Charlotte(强化后的第 3 技能):根据所选选项获得不同效果;
- Hakuno 第 3 技能:3 回合内提升伤害;
- Van Gogh (Miner) 第 1 技能:3 回合内提升指令卡性能。
对应代码为[Ch3A]/[Ch3B]/[Ch3C]。编辑器底部按钮可以预览每个选项的效果(仅视觉用途)。
提示:以上
[Ch2A]、[Ch2B]、[Ch3A]等特殊目标代码与旧版Option1('K') / Option2('U')并存,但后者已被标记为@Deprecated(见 ServantTarget.kt),新脚本请使用[ChxA]形式。
2.5 Enemy Targeting(敌方目标选择)
与己方从者一样,敌方单位也有编号并可被指定为目标:
- 敌人目标代码为
t后跟数字:t1、t2、t3(定义于 SpecialCommand.EnemyTarget 与 EnemyTarget)。 - 与 FGO 游戏一致,一次只能选中一个敌人。
例如ct1表示"3 号位从者使用第 3 技能,并指定 1 号敌人为目标"(常用于术呆宝具、杀狐技能等需要锁定敌人的场景)。
2.6 Noble Phantasm(NP)Order(宝具顺序)
宝具使用从者位置编号:
| 宝具 | 代码 |
|---|---|
| 1 号位从者宝具 | 4 |
| 2 号位从者宝具 | 5 |
| 3 号位从者宝具 | 6 |
代码定义于 CommandCard.NP,在 parseAction 中被解析为AutoSkillAction.Atk.np(np)。
宝具可以任意顺序使用,但请记住:它们会按你选择的顺序依次释放。例如46表示先放 1 号位宝具再放 3 号位宝具。
Cards before NP(宝具前使用指令卡)
如果需要在宝具前先出指令卡,使用n后跟卡牌数量:
n1:先出 1 张指令卡再放宝具;n2、n3同理。
语法定义于 SpecialCommand.CardsBeforeNP,解析时把n后的数字转换为AutoSkillAction.Atk.cardsBeforeNP(count)。连续的攻击类动作(NP 与"卡+NP")会被合并为一次行动(见 AutoSkillCommand),例如45n1等价于"1 号位宝具前先出 1 张卡,随后接 3 号位宝具"这类复合指令。
2.7 Master Skills(御主技能)
所有御主礼装(Mystic Code)的技能处理方式相同(换人服除外):
j:御主技能 1(对应 Skill.Master.A)k:御主技能 2(对应Skill.Master.B)l:御主技能 3(对应Skill.Master.C)
技能后同样可接目标数字(如k2表示御主技能 2 指定 2 号位从者)。
2.8 Master Skills - Plugsuit(换人礼装)
使用换人礼装(Plugsuit)时不应使用l命令,而应使用专门的换人命令:
x后跟两个数字:x+ 场上成员编号 + 替补成员编号。
代码定义于 SpecialCommand.OrderChange,两个数字分别来自 OrderChangeMember.Starting(1/2/3,场上)与OrderChangeMember.Sub(1/2/3,替补)。
例如x31:把 3 号位从者换下场,换上一号替补(通常在场上 3 号位是插件、替补 1 号位是主手时使用)。执行时会触发换人礼装的"换人菜单"。
2.9 同一波次的下一回合与下一波次
这是命令串里两个重要的分隔符:
,#,:下一波次(Next Wave)(见 WaveTurn.Wave);,:同一波次内的下一回合(Next Turn)(见WaveTurn.Turn)。
Next Wave(下一波次)
波次显示在战斗界面右上角。为一个波次编排完技能/宝具后,点击 "Next Wave" 按钮即可进入下一波次的编排。使用 Next Wave 意味着告诉 FGA:在此之前不需要做任何其他事。
⚠️警告:如果使用了 Next Wave 按钮,那么你之后编排的任何技能只会在下一波次激活。务必反复检查脚本,避免出现"技能排错波次"这种低级错误。
Next Turn in the same wave(同一波次的下一回合)
用于处理同一波次内需要跨回合操作的情况(例如敌方存活时间超过一回合、或需要先等 NP 条/指令卡刷新)。
Wave and Turn Indicator(波次与回合指示器)
自 FGA Build 2382 起,可以在命令编辑界面中实时跟踪当前所处的波次与回合位置,帮助你校验脚本编排是否正确。
Raid Battle(Raid 战)
Raid 战有时只有 1 个波次。此时必须选择"同一波次的下一回合"(Next turn in the same wave)选项,而不是"下一波次",否则脚本会认为战斗已经结束。
2.10 无操作命令
0表示本回合不做任何操作(No-Op),定义于 SpecialCommand.NoOp。例如在某回合需要等待(如敌方自充后开宝具、等 debuff 结束)时,可以在该回合写入0。
三、附加战斗配置(Additional Battle Config,可选)
3.1 Materials(素材)
需要刷取特定素材时,可以在配置中指定素材。选择后,素材会显示在列表顶部;点击OK后会显示前 3 个已选素材的摘要。素材枚举定义于 MaterialEnum,战斗结束后 FGA 会通过 MaterialsTracker 跟踪掉落情况。
3.2 Spam(重复释放技能)
Spam 选项用于在战斗中对特定从者反复释放技能。其行为定义见 ServantSpamConfig / SpamConfig,运行时由 SkillSpam 模块执行,具体讨论可参考 FGA 官方 issue #510(仓库内 Battle.md 的 Spam 小节引用了该链接)。
3.3 Server(服务器)
如果你在多个服务器(如日服、美服、台服)游玩,可以指定脚本只在对应服务器生效——这样游戏内弹出脚本选择菜单时,只会显示匹配当前服务器的脚本。对应配置字段为server: GameServer?(见 IBattleConfig,枚举见 GameServerEnum)。
3.4 Party Selection(编队选择)
可以为脚本指定一个编队槽位。这样启动 FGA 时,它会检查你当前使用的编队是否在正确的槽位上,如果不是则自动切换到正确的编队。对应字段为party: Int(IBattleConfig),切换逻辑见 PartySelection。
四、Card Priority(卡优先级,可选)
卡优先级是可选功能,不需要每次新建脚本都设置。
4.1 原理说明
卡优先级用来告诉 FGA 如何处理场上的指令卡(face cards):列表高位的卡拥有比低位卡更高的使用优先级。
符号含义(Symbols used in Card Priority)
| 符号 | 含义 |
|---|---|
| WB | 克制不利的 Buster(Weak Buster) |
| WA | 克制不利的 Arts(Weak Art) |
| WQ | 克制不利的 Quick(Weak Quick) |
| B | Buster |
| A | Arts |
| Q | Quick |
| RB | 被克制的 Buster(Resist Buster) |
| RA | 被克制的 Arts(Resist Art) |
| RQ | 被克制的 Quick(Resist Quick) |
典型用途示例:
- Buster 优先:把 B 系符号排到列表高位,用于追求单卡伤害;
- Arts 优先(冲 NP):把 A 系排高,用指令卡快速攒 NP;
- Quick 优先(产星):把 Q 系排高,用于获取暴击星。
按波次差异化:可以为不同波次设置不同的卡优先级。如果只设置了 Wave 1 的优先级,其余波次都会沿用默认设置;因此只有当你确实需要差异化时才需要添加更多波次。
4.2 Servant Priority(从者优先级)
从者优先级优先于卡优先级。需要手动开启该选项,然后选择你要优先出卡的从者(位置遵循 Party Mapping 的编号规则)。对应源码为 ServantPriorityPerWave 与useServantPriority开关(IBattleConfig),运行时逻辑见 FaceCardPriority。
4.3 Brave Chain(Brave 连携)
Brave Chain 只有 3 种选项(除非启用了 Servant Priority)。对应枚举为 BraveChainEnum,应用逻辑见 ApplyBraveChains。
4.4 Rearrange Cards(重排指令卡)
在 FGO 中,指令卡的位置决定伤害与附加效果:Quick 卡产生更多星星,Arts 卡产生更多 NP,Buster 卡造成更高伤害;同时第 1 张卡会决定对所有指令卡施加的加成效果(例如第 1 张出 Buster,则所有卡获得伤害加成)。
Rearrange Cards 功能会把最强的 3 张卡重新排序,使"第 2 强的卡"放在最后使用,从而让第 1 张卡的加成覆盖到后续输出。
默认优先级下开启该功能后的实际效果示例(原文档示例):
- 默认顺序:Jeanne Archer Buster(最强)→ Jeanne Archer Arts(第 2 强)→ Castoria Buster(第 3 强);
- 重排后:Jeanne Archer Buster(最强)→ Castoria Buster(第 3 强)→ Jeanne Archer Arts(第 2 强,置于末位吃加成)。
对应配置字段为rearrangeCards: List<Boolean>(IBattleConfig),每个波次一个布尔值。
五、Support Selection(支援选择)
支援选择用于决定 FGA 在进本前如何挑选助战从者。
5.1 Class Selection(职阶选择)
如果不选择任何职阶,FGA 会选取当前屏幕上显示的职阶里的支援。务必点击你想要的职阶;All选项可以切换为全职阶筛选。
⚠️已知问题:未通关终局特异点(Solomon)的玩家,此功能可能不可靠——"Start Quest"按钮会变得无响应,直到你手动点击左上角的返回键。
5.2 三种选择模式(Support Selection Options)
支援选择有 3 种方式(对应枚举 SupportSelectionModeEnum:First / Manual / Preferred):
- First(第一个):FGA 直接选择支援选择界面中出现的第一个支援。
- Manual(手动):FGA 退出,由你手动挑选支援;选好后重新运行 FGA。
- Preferred(优先):FGA 按优先设置逐项匹配并选择支援。
5.3 Preferred Selection(优先选择设置)
点击 "Preferred Selection" 选项即可进入优先设置界面,可以分别配置:
优先从者(Preferred Servant)
点击 "Preferred Servants" 弹出对话框,选择你想要的从者,并可进一步指定:
- 是否要求满破(max ascended);
- 哪些技能要求满级(max level)。
重要限制:FGA 只能可靠地检测技能是否为满级
Lvl. 10,无法检测当前技能的具体等级。
优先礼装(Preferred CE)
点击 "Preferred CE" 选择想要的礼装,并可指定是否要求满破(max limit broken)。
事件活动中,更推荐直接使用游戏内的礼装筛选功能,而不是用 Support Image Maker 为每个活动礼装制作识别图片。
优先好友(Preferred Friends)
开启该选项后,可以限定只使用来自特定好友的支援从者。
- 适用场景:当 90 级 NP1 的从者不足以应付周回本时使用。因为 FGA 无法检测从者等级、宝具等级(NP 等级)与追加技能(Append Skill)等级,所以可以通过好友名字来做二次过滤;
- 反过来说,能满足这些条件但不是好友的从者将无法被选中;
- 如果
support目录下的friends子目录中没有图片,列表会为空;用 Support Image Maker(入口见 support_img_namer)生成好友图片后即可勾选。
Fallback(兜底策略)
如果优先支援未找到,FGA 会按照More Options → Advanced → Fine-Tune → Support中的设置刷新支援列表。当刷新次数达到上限后,FGA 将根据兜底(Fallback)选项来决定下一步行为(例如继续等待、重试或放弃本次开始)。
相关实现散见于 supportSelection 目录,其中 PreferredSupportSelection 负责按从者/礼装/好友逐级匹配,SupportScreenRefresher 负责按 Fine-Tune 参数刷新列表。
六、命令语法速查表
将上文所有代码汇总为一张速查表,方便编写与校验脚本时查阅:
| 类别 | 代码 | 含义 |
|---|---|---|
| 技能 | a/b/c | 1 号位从者的技能 1/2/3 |
| 技能 | d/e/f | 2 号位从者的技能 1/2/3 |
| 技能 | g/h/i | 3 号位从者的技能 1/2/3 |
| 技能目标 | 1/2/3 | 目标为 1/2/3 号位从者 |
| 多目标 | (12) | 同时指定多个目标(如e(12)) |
| 特殊选项 | [Ch2A]/[Ch2B] | 二选一技能:选项 A / 选项 B |
| 特殊选项 | [Ch3A]/[Ch3B]/[Ch3C] | 三选一技能:选项 A / B / C |
| 变身 | M | Mélusine / Ptolemaios 灵基变换 |
| 敌人目标 | t1/t2/t3 | 指定敌人 1/2/3 为目标 |
| 宝具 | 4/5/6 | 1/2/3 号位从者的宝具 |
| 宝具前出卡 | n1/n2/n3 | 宝具前先出 1/2/3 张指令卡 |
| 御主技能 | j/k/l | 御主技能 1/2/3 |
| 换人 | x+ 2 数字 | 场上编号 + 替补编号(如x31) |
| 下一波次 | ,#, | 分隔符:切到下一波次 |
| 下一回合 | , | 分隔符:同一波次内切到下一回合 |
| 无操作 | 0 | 本回合不做任何操作 |
所有代码的权威定义可在以下文件中核对:Skill.kt、CommandCard.kt、ServantTarget.kt、EnemyTarget.kt、SpecialCommand.kt、OrderChangeMember.kt、WaveTurn.kt。
七、命令校验与常见错误排查
命令串写好后,FGA 在执行前会解析它;若语法有误,会直接抛出解析异常并停止战斗(AutoBattle.ExitReason.SkillCommandParseError,见 AutoSkillCommand)。常见错误包括:
- 未知字符:出现语法表中不存在的字符,报
Unknown character: X; - 括号不闭合:出现
(却没有),报Found ( but no matching ) in Skill Command; - 方括号不闭合:出现
[却没有],报Found [ but no matching ] in Skill Command; - 特殊目标不存在:方括号内填写了未定义的代码,报
Special target "XXX" not found; - 空命令:括号/方括号内为空,报
Command Can't be empty。
此外,AutoSkillCommand 在初始化时会校验所有SpecialTarget代码之间不存在互相冲突的前缀(例如Ch2A与Ch2B就不会冲突),这保证了新增特殊技能代码时的健壮性。
结语
掌握 FGA 战斗脚本的编写,核心就是理解"位置编号 + 动作字母 + 目标数字 + 分隔符"这套命令语言,以及围绕它的卡优先级、支援选择等辅助配置。本文覆盖了 Battle.md 中从创建脚本、命令语法到附加配置的全部内容,并补充了命令在仓库源码中的底层实现细节。对照速查表编写脚本、再结合波次/回合指示器校验,即可稳定复现你想要的打法。若想进一步了解支援图片制作、卡优先级调参等进阶主题,可继续阅读仓库中的 Support-Image-Maker.md 与 Fine-tune.md。
- 移动开发
- GUI 自动化
- 计算机视觉
【免费下载链接】FGA
Auto-battle app for F/GO Android
相关推荐
终极FGA自动战斗配置指南:从新手到专家的完整实战方案
终极FGA自动战斗配置指南:从新手到专家的完整实战方案 Fate/Grand Automata(简称FGA)是一款专为FGO玩家设计的智能辅助工具,通过先进的图
移动开发GUI 自动化计算机视觉kOps InstanceGroup 完全指南:从 ASG 映射到高级配置实战
kOps InstanceGroup 完全指南:从 ASG 映射到高级配置实战 InstanceGroup (实例组,命令行简称 ig )是 kOps(Kube
云原生集群管理运维IaCQtScrcpy 自定义按键映射(KeyMap)完全指南:JSON 脚本格式、五大映射类型与实战配置
QtScrcpy 自定义按键映射(KeyMap)完全指南:JSON 脚本格式、五大映射类型与实战配置 本指南以 QtScrcpy 仓库中的 docs/KeyMa
桌面应用音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考