> 已添加日服支持  
> 已添加美服支持([#111](https://github.com/hgjazhgj/FGO-py/pull/111))  
> 已添加台服支持([#114](https://github.com/hgjazhgj/FGO-py/pull/114))  
> [自动完成每周任务](#计划作战每周任务-OperationWeekly-Mission)  

# 「智能战斗不间断,不靠礼装不用拐」的Fate/Grand Order全智能程序

![svg](https://img.shields.io/badge/bgo-FGO安卓简中服玩家-225799.svg)
![svg](https://img.shields.io/badge/指挥官-碧蓝航线玩家-ff3b72.svg)
![svg](https://img.shields.io/badge/我超OP-原神玩家-1aa3ff.svg)
![svg](https://img.shields.io/badge/云程序员-云程序员-ffffff.svg)
[![996.icu](https://img.shields.io/badge/link-996.icu-red.svg)](https://996.icu)
![svg](https://img.shields.io/badge/开位-一条开位咸鱼-ffd700.svg)
![svg](https://img.shields.io/badge/头痛-患有头痛宿疾Ex-50a625.svg)
![svg](https://img.shields.io/badge/病弱-病弱厨-ecbacb.svg)
![svg](https://img.shields.io/badge/mikon-玉藻俱乐部成员-804313.svg)
![svg](https://img.shields.io/badge/萝莉控-小学生真是太棒了-b0e0e6.svg)
![svg](https://img.shields.io/badge/n1-通过了JLPT_N1测试-00ff00.svg)
![svg](https://img.shields.io/badge/咕咕咕-一天不咕浑身难受-cccccc.svg)
![svg](https://img.shields.io/badge/网络乞丐-求求你了给个star☆吧-ff9900.svg)  
**Buy me a Saint Quartz**  
[GitHub Sponsor](https://github.com/sponsors/hgjazhgj/)  
[Patron](https://patreon.com/hgjazhgj)  
[PayPal](https://paypal.me/hgjazhgjpp)  
B站大会员每月[领](https://account.bilibili.com/account/big/myPackage)5B币券[充电](https://space.bilibili.com/2632341)  
觉得本项目有帮助请star,谢谢  
<table>
<tr><td>
  <table>
    <tr>
      <td><img src="doc/star/1.png" width="82" height="82"/></td>
      <td><img src="doc/star/2.png" width="82" height="82"/></td>
      <td><img src="doc/star/3.png" width="82" height="82"/></td>
    </tr>
    <tr>
      <td><img src="doc/star/4.png" width="82" height="82"/></td>
      <td><a href="https://github.com/hgjazhgj/FGO-py/stargazers"><img src="https://img.shields.io/github/stars/hgjazhgj/FGO-py.svg?style=social"/></a></td>
      <td><img src="doc/star/6.png" width="82" height="82"/></td>
    </tr>
    <tr>
      <td><img src="doc/star/7.png" width="82" height="82"/></td>
      <td><img src="doc/star/8.png" width="82" height="82"/></td> 
      <td><img src="doc/star/9.png" width="82" height="82"/></td>
    </tr>
  </table>
</td><td>
   <a href="https://starchart.cc/hgjazhgj/FGO-py"><img src="https://starchart.cc/hgjazhgj/FGO-py.svg?variant=adaptive"/></a>
</td></tr>
</table>

[版本记录](#版本记录-Version-Logs)  
GitHub项目地址:[https://github.com/hgjazhgj/FGO-py/](https://github.com/hgjazhgj/FGO-py/)  
项目官网:[https://fgo-py.hgjazhgj.top/](https://fgo-py.hgjazhgj.top/)  
适用于命运-冠位指定安卓简体中文/日本语/英语/繁体中文版本  

# 警告 Warning

[<<哔哩哔哩游戏平台用户协议>>](https://yhxy.biligame.com/)第11条第2款规定  
用户不得通过不正当的手段或其他不公平的手段使用本平台游戏、本平台服务或参与本平台活动。  
用户不得干扰本平台正常地提供游戏和服务，包括但不限于：攻击、侵入本平台的网站服务器，或集中时间段内以超出正常用户登录需求的高频率登录或尝试登录服务器从而使网站服务器过载；破解、修改本平台游戏程序；攻击、侵入本平台游戏的服务器/游戏服务器端程序或使游戏服务器过载；制作、发布、传播、使用任何形式的妨碍游戏公平性的辅助工具或程序(包括但不限于“外挂”, “外挂”是指独立于游戏软件之外的，能够在游戏运行的同时影响游戏操作的所有程序，包括但不限于模拟用户操作、改变操作环境、修改数据等一切类型）。用户不得：利用程序的漏洞和错误(Bug)破坏游戏的正常进行或传播该漏洞或错误(Bug)；不合理地干扰或阻碍他人使用本平台游戏和本平台服务；通过异常或者非法的方式使用本平台游戏(包括但不限于利用本平台游戏登录游戏私服)；使用异常的方法登录游戏（包括但不限于使用非本平台开发、授权或认可的第三方软件、系统登录游戏）、使用网络加速器等外挂软件或机器人程序等恶意破坏服务设施、扰乱正常服务秩序的行为；修改、翻译、注释、整理、汇编、演绎本平台游戏；利用本平台游戏或者本平台服务可能存在的技术缺陷或漏洞而以各种形式为自己及他人牟利（包括但不限于复制游戏虚拟物品等）或者从事其他不正当行为等。  
**FGO-py不会对您的任何损失负责，包括但不限于奖励回收、账号异常、900石1宝、核弹爆炸、第三次世界大战等**  
**由于使用本程序而导致的包括但不限于上述各项的损失与本项目及其开发者无关,您下载并使用该程序即代表您已知晓使用程序可能带来的风险并愿意承担可能出现的后果**  
***

本项目`FGO-py/fgoImage/servant/`下的图像来自于[茹西教王的理想鄉](https://kazemai.github.io/fgo-vz/),`FGO-py/fgoImage/class`和`material`中的图标与`FGO-py/fgoMetadata.py`中的部分数据来自于[Mooncell](https://fgo.wiki/),以上内容经过加工,不按原样提供,**不依照License开源**  

# 说明 Instruction

FGO-py一经立项,就把*打破当前游戏版本下想尽办法3t速刷的固有思维,回归刚开服时克制队xjbd的环境*作为自身的初心使命  

- 羁绊点数和御主礼装经验不再被浪费
- **抽卡不用考虑强度只用考虑xp**
- 在大量90+阴间本的环境下,xjbd能带给玩家最阳间的体验
- 游戏从此没有「人权卡」
- **xjbd都一天100+池了就别惦记着亏羁绊3t辣!**
- 不管什么本直接上就行连作业都不用抄
- 可以一键清完所有强化本
- 剧情关锁人?游戏内组好队就行程序内还是只点击完成战斗
- 可以在高难中帮你收拾残局
- 不像有些3T自动化工具需要用户删掉练度不足的好友
- 把你喜欢的从者编入队伍中
- 拥有一队15羁绊的伊莉雅小黑美游真的超酷的好吗

**如果你是为了3t而来,就另请高明吧!**  
这个程序能识别*一堆*战斗中用得上或用不上的数据,**可以半路接管战斗**,会依据当前的局势帮你筛选助战,放技能,放宝具,吃苹果,选卡,无需配置即可**无脑通过绝大部分非高难关卡,包括主线关卡**,实战7-12回合能够刷完无限池终本  
除战斗外,还提供包括但不限于以下功能:抽友情池,抽无限池,领邮箱狗粮,礼装强化  

## 运行 Run

### Windows

下载release - 运行游戏 - 运行`FGO-py.bat` - 连接设备 - 游戏中把你要刷的关卡放在第一个 - 点击「肝!」按钮  
需要在游戏内关闭「技能使用确认」  
每当本项目发布新版本,更新内容会在dev分支中停留若干时间,可能是一天,也可能是数月--视内容紧急性而定--以发现潜在的问题  
然后dev会merge到master,并且在通常一周内推送到各个使用从release中下载的portable installer的用户手中  
也就是说,在游戏作出重大更新后的一段时间内,你很可能需要拉取dev分支才能得到适配当前游戏版本的FGO-py  
这是必要的使用门槛,我可以写完直接发,发了直接推,但是我主观上不会这么做  

### Linux/Android/Mac/Docker General

本项目在最初设计时就考虑到了在不同环境下运行的需求,完全前后端分离,目前前后端均已实现跨平台  
首先也是最基础的,在阅读本条目前,请先验证你能**通过源码在安装有Python3.11的Windows操作系统中运行本项目并用来操作运行于屏幕分辨率为1280*720或其简单整数比缩放的Android设备上的命运-冠位指定官方简体中文版本**--这被视作FGO-py的使用门槛--然后再根据后续内容向目标环境迁移  
本项目启用了python的UTF-8模式(PEP 540)  
本项目`deploy`目录下有些许子目录可为不同场景下的环境搭建提供帮助  
Docker -- 尽管只是配了个环境,但确实配好了环境  
AidLux -- 一键在AidLux上安装FGO-py  
AzurLaneAutoScript -- 让Alas帮你玩FGO  
请注意,这些东西仅供参考,你可能需要自行作出一些修改才能正常运行,这被视为FGO-py的使用门槛  
速览程序功能,运行`fgo.py`,无需填写任何配置,去冬木大桥刷一根凶骨吧!  
程序内部有基本的使用指引,本文档后续的说明内容中有扩展的说明  
(基于Qt6的)Gui大概长这样(设计模式仅供参考):  
![gui](doc/gui.png)  
如果不便于使用图形界面,`python fgo.py cli`提供文本交互,这里有本项目完整且更加强大而灵活的功能和说明  
Cli大概长这样(在docker和手机中运行时的截图,本截图不是最新的):  
![cli](doc/cli.png)  
也可一次向stdin写入多行以非交互的方式运行,比如睡前运行一条`echo -e "connect /bs5 \n main \n main -s 8:00:00" | python fgo.py cli`来清空体力并在8小时后再次清空体力以保证安稳的睡眠,或是在长草期加入计划任务或crontab实现7*24全托管  

### 非16:9屏幕 Non 16:9 display

尝试使用ui中的「控制-全面屏适配-调整为16:9」功能,以及cli中的`169`命令  
连接到设备 - 调整分辨率 - 启动游戏 - 重新连接到设备  
由于长宽比小于16:9的屏幕的游戏画面上下方仍为蓝边可以如同全面屏适配前一般使用,所以只有长宽比大于16:9的屏幕才需要此操作  
在fgo中热更改分辨率会有奇怪的布局bug,所以你需要在运行游戏后登录完成前执行这些命令  
在我的手机(OnePlus 8 Pro和RedMi 8A)上大概是这么个效果,**其它手机具体表现如何我也不清楚**:  
![16-9](doc/16-9.png)  
这个功能就是执行了一条adb shell,单论这个shell的话是很快的,fgo的全面屏适配又跟屎一样不如没有,并且你完全可以在关闭fgo后立刻改回来不影响其他应用,你也可以在手机本地执行命令将其改回,所以我暂时不打算写全面屏适配  

### 非Windows电脑 Non Windows PC

现已可直接使用,但是目录监控功能被屏蔽,如果你更改了助战模板等文件,需要重新运行程序  

### 直接在手机上运行 Run with Android

有一些软件能在Android手机上提供Linux环境,比如[AidLux](http://www.aidlearning.net/)([GitHub](https://github.com/aidlearning/AidLearning-Framework)),类似于Android Subsystem for Linux(我愿称之为ASL)  
相较于[Termux](https://termux.com/)等模拟终端,AidLux自带了编译好的opencv等基础库,避免了ARM处理器上的各种问题,故以此为基础搭建FGO-py环境,具体搭建方式于通常Linux无异,可参考`AidLux.sh`,此方案已在多机型上被验证为可行,我现在用得很舒服  
当然Qt的UI多半是没有的,此时你只能使用文本交互方式运行本项目,这就体现出web ui的优越性了  
此外,tensorflow/caffe/mxnet等其他数十种智能计算领域常用的软件均可在AidLux特有的软件源中直接安装,碧蓝航线的[AzurLaneAutoScript](https://github.com/LmeSzinc/AzurLaneAutoScript)/明日方舟的[ArknightsAutoHelper](https://github.com/ninthDevilHAUNSTER/ArknightsAutoHelper)等基于Android调试的自动化工具都可按类似的方式在装有AidLux的手机上运行--我断言,逐渐地,AidLux会在手游自动化方面被更加广泛地使用,是大势所趋,早用早享受  

### Docker

参阅Dockerfile头部的注释  
docker-compose是一个使用webui的范例,但是本人前端下手,将长期处于不建议使用的状态  

### 在AzurLaneAutoScript中运行 Run with AzurLaneAutoScript

FGO-py现已加入[Alas](https://github.com/LmeSzinc/AzurLaneAutoScript/)豪华午餐!开发者本人正在通过Alas进行FGO-py的日常使用!  
![alas](doc/alas.png)  
请在Alas中按以下方式使用  

1. 添加新配置,「从现有的配置中复制」选择template-fpy  
2. 按照[连接到设备](#连接到设备-connect-to-your-device)章节中的内容填写「FGO-py > FGO-py设置 > 运行环境 > 模拟器 Serial」  
3. 按照自身部署环境填写「启动路径」,请阅读[deploy/AzurLaneAutoScript/readme.md](deploy/AzurLaneAutoScript/readme.md)  
4. 运行「工具 > 性能测试」检验上述配置是否正确  
5. 启用「出击 > 清空体力」和「每日 > 抽友情」等任务,更改相关设置  
6. 运行调度器  

## 连接到设备 Connect to Your Device

如果你使用数据线将手机连接到电脑,那么你的手机自然会出现在设备列表中  
但是很多情况下,设备不会智能出现在设备列表中,尽管程序会帮你运行connect命令,但是你还要手动输入设备序列号或ip,有些时候这些数据还不是固定的,比如模拟器启动时刷新,或是DHCP重新分配了你的ip,这就需要比较繁琐的步骤才能拿到  
为此,我写了一个小魔法,在连接设备时以「/」开头的指令代替设备序列号,让你用短短几个字符便完成复杂的操作  
**这里需要用到的包未在requirements.txt中列出,此功能发生的问题无法获得技术支持**  
基于本人的实际使用场景,这里现在有以下命令  

1. `/gw` 手机开热点打fgo电脑连热点,获取网关ip  
2. `/bs4` 兼容Hyper-V的BlueStacks 4国际版,从注册表读取adb端口,后可跟`_数字`指定多开  
3. `/bs5_<InstanceName>` 兼容Hyper-V的BlueStacks 5国际版,从注册表读取配置文件路径,在配置文件中查找adb端口  

你可以自己编写你需要的功能,如果你认为你的场景别人也会遇到,请发个issue或pr让我加进这个项目里  
此外,你可以使用`|`连接两个设备名以分别指定点击拖拽等输入操作和截图等输出操作使用的接口,中间不得有空格  

## 计划作战/每周任务 Operation/Weekly Mission

计划作战能依次前往关卡队列中不同关卡进行不同数量的战斗,关卡队列为空则对当前游戏中关卡列表的第一个清空体力  
数量为0代表不限制数量直到体力清空,但是这不会中断运行,因为剩余的零星体力可能足够其他关卡使用  
队列操作除追加以外都是线程不安全的,所以尽量不要在每次战斗结束时修改苹果数量与关卡队列  
自动每周任务能从游戏的每周任务界面读取任务目标并将达成此目标且消耗体力最少的关卡组合加入关卡队列  
自动任务仅能求解击败特定数量的敌人的任务,不能完成编入从者/获得道具/场地属性/友情点召唤的任务  
在2023年日服的历次每周任务中,仅出现过2次编入从者任务,没有出现过场地属性任务,其他任务均可在正常游戏时完成  
自动每周任务目前仅限简体中文  

## 助战/邮箱筛选 Friends/Mail Filter

建议在游戏内关闭「有利职阶自动选择」  
我希望就算哪一天我弃坑了,本项目也要能够继续长久使用,无需定期维护,所以所有与游戏进度相关的内容都要允许用户自以非编程的方式自行制作/管理,我仅仅为此提供了一些示例和一小部分当前常用的情况  
你需要事先将你期望的各种助战的样子截图为png放在fgoImage/friend下,参照fgoImage/friend/unused中的文件  
**被截图范围都应该可以点击来选中该好友**  
**截图应对应1280\*720的游戏画面分辨率**,建议使用gui中的`检查截图`按钮或cli的`screenshot`指令  
如果fgoImage/friend目录下没有png文件,就选取好友列表中的第一个  
图片中黑色(#000)部分被视作透明而无需透明度通道  
你在fgoImage/friend目录下的所有更改会在下一次选取助战时智能应用  

## 搓丸子 ExpBall

请使用[FGO-ExpBall](https://github.com/hgjazhgj/FGO-ExpBall)  
该项目由于需要由程序而非玩家对游戏内设置进行精细的设定,相关实现不符合FGO-py的风格,故做成了独立项目  

## 陈年老肝 Classic Battle

v9.1及更早版本提供的需要配置的战斗,不建议在以下之外的场景使用  

- 冬木刷凶骨只平A不放技能宝具
- 通古斯抢柱子需要尽快完成战斗
- 无法识别队伍中卡面被和谐的从者

编队信息保存在fgoTeamup.ini中,需要新增或删除编队时请手动编辑该文件  
各个从者的每个技能都有4个参数,意义分别为:使用该技能的最小场次/该技能在最小场次的最小使用回合/最希望施放到的目标/越小越优先的优先级  
最小场次设置为0代表禁用该技能  
如果技能在最小场次的最小使用回合处于不可用状态会延后,此后能用就用  
御主技能cd固定为15回合,不会检测是否冷却完成或是否可用,就算不可用也只是点开看一眼弹窗不影响运行  

## 配置文件 Config Files

以下项目保存在`fgoConfig.json`内,更改立即生效,仅在进程退出前保存  

- 上次连接到的设备名
- 各队伍编组的索引
- 是否在战败撤退时终止程序运行
- 是否在获得羁绊礼装时终止程序运行
- 主窗口是否置顶
- 是否在点击关闭按钮时最小化到托盘
- 消息推送开关
- 消息推送参数

其他可配置项会在进程退出后丢失  

# 如何联系开发者 Contact Developer

![img](doc/contact.png) 在占用我的时间之前,先耗费自己的时间  
此处内容以dev分支为准  
现在这个项目已经可以从各大搜索引擎上找到,这就导致有很多halloworld都不会的小白来找我,就算是点点鼠标都会遇到问题  
没有标明免费的东西都不是免费的,我乐意回答一些本文档中没有提及的技术问题,但没有义务提供详细的教学  
如果你遇到问题且愿意支付一定的咨询费用,或者只是想要捐赠,又或是想要撤回先前的捐赠,请通过电子邮件联系  
这是无奈之举,卖的是本人的时间和精力,而用到知识和经验的解决具体问题另算  
**2021年9月24日,同为本人开发的原神智能钓鱼项目被GitHub删除了,我迫切地感到在GitHub上发布程序是不可靠的,为此,本人先建立了一个QQ群,群号932481680,作为一个FGO-py的备用发布手段,其他事项日后再议.**  
加入QQ群需要你在入群问题中回答你的GitHub username,此内容将被用于调用`api.github.com/users`系列api,请严格输入  
你的GitHub帐号需要注册不少于6个月且在6个月内有contribution,QQ号需要至少16级(有一个太阳,使用大约1年),同时为切实验证Github用户名真实性防止冒名顶替,对于想要加群的用户请先Star本项目并**立刻**发送加群申请,如果你已经Star,请先取消Star然后在数秒后重新Star  
**你只有一次申请机会**,请确认你满足全部条件后再申请  
发现**最新commit**的bug请按Bug Report模板建立issue,发现战斗行为不合理请按Servant Info模板建立issue,其他你想到的东西请发到discussion  

# 开源许可 LICENSE

[GNU AGPLv3](https://www.gnu.org/licenses/agpl-3.0.html)  
除非获得商业授权，否则无论以何种方式修改或者使用本项目，都需要开源  

# 版本记录 Version Logs

see [versions.md](doc/versions.md)  
