PaiGramDocs/docs/extra/gcsim.md
2023-12-03 15:12:31 +00:00

46 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# gcsim 队伍 DPS 模拟器
gcsim 是一个功能强大的原神组队模拟工具,由 Keqing Mains 社区的 srl 大佬开发,可以自定义队伍角色等级、技能、武器以及圣遗物属性以及最重要的角色动作 (攻击、技能释放) 序列等队伍配置,模拟器会给出队伍平均 DPS 以及输出时间轴、角色 DPS 占比、角色站场时间占比、元素反应次数、元素微粒统计等信息总结。
PaiGram 通过集成 gcsim 实现更快速的 PVP (确信)
## PYPI 安装
[gcsim-pypi](https://pypi.org/project/gcsim-pypi)
```bash
pip install gcsim-pypi
```
## 主框架
`plugins/genshin/gcsim/plugin.py` 存放了命令入口,你可以通过 `/gcsim` 命令呼出可以模拟的队伍伤害
`plugins/genshin/gcsim/gcsim/runner.py` 控制了 gcsim 程序的运行,返回程序的运行结果
`plugins/genshin/gcsim/renderer.py` 通过 gcsim 程序返回的结果进行渲染输出
`plugins/genshin/model` 中将 enka 数据源的数据类型转换为 gcsim 的数据类型
## 技术细节
### runner
在 runner 中,我们采用了 “PriorityQueue” 以及 “BoundedSemaphore” 分别实现任务排队和并发限制
队列限制的最大数量为 21在程序中普通用户最大将只能推入 21 - 1 = 20 个任务,剩余 1 个任务是为了方便高权限用户的任务进行插队,加快调试速度
并发数量限制为 cpu 核心数,防止程序过高占用被 kill 掉
## 测试
所有云端脚本都通过编写 CI 进行了自动化测试,确保了脚本的可用性
## 问题和解决方案
### gcsim 内存溢出
在不正确的脚本运行时,可能会使 gcsim 程序发生死循环,快速消耗剩余内存
在 linux 下,我们使用了 `ulimit` 以及 `timeout` 限制程序可以使用的内存和程序的最长运行时间,防止程序出现异常