Metadata-Version: 2.1
Name: genshin-mummy
Version: 1.0.1
Summary: A tech-neet's RPA project for Genshin Impact.
Author-email: LetianLiu <15261172997@163.com>
Description-Content-Type: text/markdown
Classifier: License :: OSI Approved :: MIT License
Requires-Dist: attrs~=23.1.0
Requires-Dist: iolite~=22.2.0
Requires-Dist: numpy~=1.24.4
Requires-Dist: openpyxl~=3.1.2
Requires-Dist: pyautogui~=0.9.54
Requires-Dist: pillow~=10.1.0
Requires-Dist: pyscreeze~=0.1.30
Requires-Dist: opencv-python~=4.6.0.66
Requires-Dist: paddlepaddle~=2.5.2
Requires-Dist: paddleocr~=2.7.0.3
Requires-Dist: termcolor~=2.3.0
Requires-Dist: yapf~=0.40.2 ; extra == "dev"
Requires-Dist: pytest~=7.4.3 ; extra == "dev"
Project-URL: Homepage, https://github.com/Tpinion/GenshinMummy
Project-URL: Issues, https://github.com/Tpinion/GenshinMummy/issues
Provides-Extra: dev

# GenshinMummy

## 简介

(ﾉﾟ ▽ ﾟ)ﾉ &nbsp;&nbsp;: 原神妈咪是一个基于计算机视觉和 RPA 的原神游戏辅助项目，它旨在...

(#｀皿 ´) &nbsp;&nbsp;： 说人话！

(；´д ｀)ゞ ：好吧，它是一个中道崩殂的项目。崩殂的原因很简单，游戏的快乐果然还是在于参与，如果什么事情都自动化了，就失去了游戏的初心。

(#｀皿 ´)&nbsp;：说人话！

d(´ω ｀\*) &nbsp;：好吧，就是去年国庆写了好多天脚本。突然发现自己的开发时间，已经超过了手动去整理的时间。QAQ 我宝贵的假期有限！

(#｀皿 ´) &nbsp;：那这个项目还有什么意义吗？

(ﾉﾟ ▽ ﾟ)ﾉ&nbsp;&nbsp;：实用的脚本还是有的！把那些垃圾圣遗物从堆积如山的仓库里分离出来，通过加解锁分离想要的和不想要的圣遗物。

## 使用方式

教程是已经假定你已经安装了 Python3 的情况下。

1. 安装工具包

```shell
pip install genshin-mummy
```

2. 使用 _管理员_ 权限，打开你的终端。管理员、管理员、管理员！！！重要事情说三遍。~

3. 原神，启动。

4. 打开圣遗物界面，筛选你想加解锁的类别，然后选中最左上角的圣遗物。

5. 切出你的终端，执行下面的命令。

```shell
# ヽ(`Д´)ﾉ  敲击此命令时候，要带上你的委屈与不甘！！！
fuck-shit-artifact
```

6. 切换回原神。双手脱离鼠标键盘，请不要和它抢鼠标。打开 B 站，刷视频去吧。

7. 当它全部完成的后，你可以在桌面上看到一个 GenshinMummy 的文件夹，里面存放着日志文件。其中有一个 csv 的表格文件，里面记录了你的圣遗物信息。也许你会稀罕它，如果不稀罕，就放心的删除吧。

## 圣遗物加解锁逻辑

默认的加解锁策略是非常保守的，它会锁定绝多数的圣遗物，只把垃圾到家的圣遗物解锁，它的逻辑是这样的。

1. 等级大于 0=>锁
2. 非五星=>不锁
3. 沙、杯、帽主词条为类别独有词条=>锁
4. 双暴词条=>锁
5. 初始四词条 且不要存在所有小攻防命都有=>锁
6. 小攻击、小防御、小生命大于等于两个=>不锁
7. 其余情况保险起见=>锁

### 算法参考

1. [《原学》必修四：圣遗物筛选与强化，主流套装分析，萌新收藏必看！](https://www.bilibili.com/video/BV1sZ4y1e7h8)

2. [什么圣遗物值得强化？怎么快速整理出狗粮？原神圣遗物秒懂攻略](https://www.bilibili.com/video/BV1mB4y177a6)

## 自定义加解锁逻辑

1. 在桌面创建一个叫做 GenshinMummy 的文件夹。
2. 在里面创建一个 Excel 文件，xlsx 尾缀哦~
3. 在 Excel 里面配置你的加解锁规则，如下：

| 圣遗物类型条件         | 等级条件 | 星级条件 | 主词条条件         | 副词条条件               | 期望结果 |
| ---------------------- | -------- | -------- | ------------------ | ------------------------ | -------- |
|                        | >0       |          |                    |                          | 锁       |
|                        |          | <5       |                    |                          | 不锁     |
|                        |          |          |                    | 有防御力，有防御力百分比 | 不锁     |
|                        |          |          |                    | 有暴击率，有暴击伤害     | 锁       |
| 时之沙，理之冠，空之杯 |          |          | 是元素精通         |                          | 锁       |
| 时之沙                 |          |          | 不是水元素伤害加成 |                          | 不锁     |
|                        |          |          |                    |                          | 锁       |

### 示例规则解释

1. 等级大于 0 的圣遗物=>锁定
2. 非五星的圣遗物=>不锁定
3. 有防御力，有防御力百分比的圣遗物=>不锁定
4. 有暴击率，有暴击伤害的圣遗物=>锁定
5. 时之沙，理之冠，空之杯，是元素精通的圣遗物=>锁定
6. 时之沙，不是水元素伤害加成的圣遗物=>不锁定
7. 其余情况=>锁定

### Excel 配置说明

1. 表头模板是固定的请务必按照上方表头。圣遗物类型条件 | 等级条件 | 星级条件 | 主词条条件 | 副词条条件 | 期望结果
2. 每一行称为一条策略，越靠前的策略越先执行，一旦满足当前策略，后续策略不再执行。
3. 每一条策略必须有一个期望结果，期望结果只有两种，锁和不锁。
4. 如果条件为空，则代表该条件没有限制。比如圣遗物类型条件为空，则代表五种类型都可以。
5. 圣遗物类型条件：时之沙，理之冠，空之杯，生之花，死之羽。可以填写多条，用逗号，隔开。
6. 等级条件和星级条件，只支持，>，<，=，三种判断符号，判断符号后必须紧跟整数值。
7. 主词条的判断条件，只支持，是，不是，两种判断符号。
8. 副词条的判断条件，只支持，有，没有，两种判断符号。
9. 词条包括：'生命值', '生命值百分比', '攻击力', '攻击力百分比', '防御力', '防御力百分比',
   '暴击伤害', '暴击率', '元素精通', '元素充能效率', '火元素伤害加成', '水元素伤害加成',
   '冰元素伤害加成', '雷元素伤害加成', '草元素伤害加成', '风元素伤害加成', '岩元素伤害加成',
   '物理伤害加成', '治疗加成'

## GPU 加速

看到这，你大概也是个程序原，所以我就长话短说~。你只需要重装对应的 Paddle 版本即刻。只是需要有些额外工作是，你需要自己解决 CUDA 的安装与兼容。

```shell
# 卸载CPU版本的PADDLE
pip unintall paddlepaddle
# 安装GPU版本的PADDLE
pip install paddlepaddle-gpu
```

GPU 版本依赖：CUDA10.1 / CUDA10.2 + CUDNN 7.6

[PaddleOCR 参考官方文档](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/environment.md)

## 常见问题

1. Q：加解锁途中出现了，加解锁提示页怎么办？

   A：勾选不再提示，然后重新执行脚本即可。

