├── .gitignore ├── LICENSE ├── README.md ├── img ├── bs-logo-new.png └── mole_icon.png ├── json ├── 初始化设置.json ├── 日常 NPC 好感度对话.json ├── 日常占卜.json ├── 日常向导任务.json ├── 日常夜间资源采集.json ├── 日常整合.json ├── 日常许愿.json ├── 日常钓鱼.json ├── 辅助互动.json ├── 辅助伐木林采集.json ├── 辅助前哨站采集.json ├── 辅助摩尔拉雅采集.json ├── 辅助浆果丛林采集.json ├── 辅助神奇密码兑换.json └── 辅助钓鱼.json └── mole.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 WH-2099 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 摩尔庄园 BlueStacks 脚本 2 | [![bs-logo-new](/img/bs-logo-new.png)](https://www.bluestacks.com/tw/index.html) 3 | [](https://mole.leiting.com/home) 4 | 5 | 手游上线,情怀再起,但面对游戏中枯燥无味的每日任务和资源采集,你是否觉得肝疼呢? 6 | 7 | 本项目通过生成 BlueStacks 模拟器的宏脚本,帮助玩家护肝。 8 | 9 | 10 | 11 | # `使用脚本请阅读` [使用方式](#使用方式) `和对应的` [功能及说明](#功能及说明) 12 | 13 | 14 | 15 | ## 常问的问题 16 | 17 | **问:我从没用过模拟器这些,操作复杂吗?** 18 | 答:很简单,读一读这里的说明就好。 19 | 20 | **问:不会用但又不想读说明怎么办?** 21 | 答:进群吧,手把手教你! 22 | 23 | **问:为什么脚本还在运行,人物却不动了?** 24 | 答:请耐心等待一下,因为有些摩尔用的电脑模拟器略卡,所以有些动作(如切换地图)设置了较长的等待时间。 25 | 26 | **问:钓鱼为什么会有鱼跑掉的情况?** 27 | 答:有 25% 左右的丢饵主要是为了提升效率(不然 100 杆能钓 1 个半小时) 28 | 29 | **问:初级饵钓鱼能出传说吗?** 30 | 答:当然可以! 31 | 32 | 33 | 34 | *** 35 | ## 联系 36 | ### Telegram 频道 [@mole61](https://t.me/mole61) 37 | ### Telegram 群组 [@mole_burrow](https://t.me/mole_burrow) 38 | 如有问题欢迎频道留言或进群讨论,将**第一时间响应**。 39 | *** 40 | 41 | 42 | 43 | ## 为什么要选择本项目 44 | - 本项目最终生成的仅是**宏脚本**,游戏操作仅是基于时间线的模拟点击,**不会读写任何游戏相关数据**,根据相关的法律法规及曾有的司法实践,**不属于外挂**。 45 | - **宏脚本**自身只是操作记录的数据文件,不是可执行文件,**不会内含木马病毒**。 46 | - 本项目使用 **Python 包装了底层操作逻辑**,掌握 Python 的玩家可以在此基础上**快速开发自定义的脚本**。 47 | 48 | 49 | 50 | ## 为什么不选择本项目 51 | - 本项目**不会提供任何侵入性或破坏游戏环境的功能**(例如 “秒做菜”、“秒钓鱼”、“自动刷屏”等)。 52 | - 基于不破坏游戏平衡性的出发点,加之稳定性和兼容性考虑,**宏脚本的耗时相比手动操作更长**。 53 | 54 | 55 | 56 | ## 功能及说明 57 | 功能与对应的宏脚本同名,都在项目 json 文件夹中,也可点 [带链接的蓝字](#功能及说明) 直达。 58 | 59 | ### 首次使用或自行调整设置后,需要运行一次 [初始化设置](/json/初始化设置.json) 。 60 | 61 | 62 | ### 日常功能 63 | **以下功能可以 100% 自动运行,可以直接使用项目发布的 json 文件。** 64 | 65 | - [x] [**日常整合**](/json/日常整合.json) **(耗时:5 小时)** 66 | - [x] 日常占卜 67 | - [x] 日常许愿 68 | - [x] 日常钓鱼 69 | - [x] 日常 NPC 好感度对话 70 | - [x] 日常向导任务(默认选摩尔城堡的三个) 71 | - [x] 日常夜间资源采集(在 15:30 后启动脚本即可生效) 72 | 73 | > 整合了经过测试能够稳定工作的所有功能,**推荐在 15:30 后启动**(非必须,仅影响夜间资源收集)。 74 | > 运行前需要: 75 | > > - 换服装(需要穿齐套装)为 **套装:向导服** 76 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 77 | > > - **初级鱼饵 > 700** *(因为会有少量丢饵情况)* 78 | 79 | - [x] [日常夜间资源采集](/json/日常夜间资源采集.json) **(耗时:30 分钟)** 80 | > 采集摩尔拉雅和前哨站的资源。*(本质就是整合相关辅助功能并加入自动换图)* 81 | > 运行前需要: 82 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 83 | 84 | - [x] [日常钓鱼](/json/日常钓鱼.json) **(耗时:2 小时 40 分钟)** 85 | > 包含 *摩尔拉雅* 、 *浆果丛林* 、 *阳光沙滩* 、 *家园鱼塘* 、*黑森林* 钓鱼点。 86 | > 运行前需要: 87 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 88 | > > - **初级鱼饵 > 700** *(因为会有 25% 的丢饵(实测不影响出传说),保险起见)* 89 | 90 | 91 | ### 辅助功能 92 | 以下功能运行需要满足一定的条件(天气、地点),或是需要一定的人工监视和操作,可以直接使用项目发布的 json 文件。 93 | **第一次使用辅助功能前请运行一次 [初始化设置](/json/初始化设置.json)** 94 | - [x] [辅助互动](/json/辅助互动.json) 95 | > 不断地点击互动键,直到主动停止脚本。 96 | > 可用于 **辅助完成浇水、播种、种菜、收菜、采集等动作**。~~妈妈再也不用担心我得腱鞘炎~~ 97 | 98 | - [x] [辅助钓鱼](/json/辅助钓鱼.json) **(耗时:12 秒每次)** 99 | > 不断地自动钓鱼,直到主动停止脚本。 100 | > > - 请在 **钓鱼点范围内** 启动。 101 | 102 | - [x] [辅助伐木林采集](/json/辅助伐木林采集.json) **(耗时:40 分钟)** 103 | > 其实可以 100% 自动运行,但无法保证能够收集所有资源。 104 | > *按照测试数据,保底可以收集 70%,刷满 SMC 采集经验绰绰有余。~~宏脚本啥都好,但面对有些动态场景就显得有点笨笨的~~* 105 | > > - 请在 **伐木林入口处(即完成换图加载后的默认位置)** 启动。 106 | 107 | - [x] [辅助摩尔拉雅采集](/json/辅助摩尔拉雅采集.json) **(耗时:11 分钟)** 108 | > *(白浆果采集点 x 5)X 5轮* 109 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 110 | > > - 请在 **夜晚的摩尔拉雅(点击 地图 -> 摩尔拉雅 后的位置)** 启动。 111 | 112 | - [x] [辅助前哨站采集](/json/辅助钓鱼.json) **(耗时:15 分钟)** 113 | > *(黑浆果采集点 x 13 + 草丛 x 1)X 5轮* 114 | > 有两个草丛距离远,而黑浆果刷新快,故不采集。 115 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 116 | > > - 请在 **夜晚的前哨站(点击 地图 -> 前哨站 后的位置)** 启动。 117 | 118 | - [x] [辅助浆果丛林采集](/json/辅助浆果丛林采集.json) **(耗时:5 小时 20 分钟)** 119 | > *(红浆果采集点 x 6 + 橙浆果采集点 x 5 + 草丛 x 5)X 5轮* 120 | > 每轮之间需要等待 1 小时(浆果刷新) 121 | > > - 换载具(不需要骑乘,装扮里设置即可)为 **载具:驴牌滑板车** 122 | > > - 请在 **浆果丛林(点击 地图 -> 浆果丛林 后的位置)** 启动。 123 | 124 | - [ ] 辅助城堡区采集 [爱心街区 + 摩尔城堡 + 淘淘乐街](橙浆果 + 草丛) 125 | 126 | - [ ] 辅助牧场区采集 [阳光牧场 + 阳光沙滩 + 开心农场](橙浆果 + 草丛 + 草堆) 127 | 128 | - [ ] 辅助蘑菇采集 129 | > 等待雨天抽空开发 130 | - [ ] 浆果丛林 131 | - [ ] 城堡区 132 | - [ ] 牧场区 133 | 134 | - [x] [辅助神奇密码兑换](/json/辅助神奇密码兑换.json) **(耗时:3 分钟)** 135 | > 兑换最近有效的神奇密码,欢迎补充。 136 | > > - 请在 **普通待机画面(没有打开任何页面的状态)** 启动。 137 | 138 | 139 | ### 自定义功能 140 | **以下功能需要对 Python 代码进行简单的自定义编辑(如补充指定的发言内容、菜谱的坐标点等)后导出对应的 json 文件才可用。**(后续会补充教程) 141 | - [x] 发言 142 | - [x] 烹饪(经营菜) 143 | > 需要扩建后的餐厅,4 炉全空,上菜窗口需要任意上 4 个其他的菜占位 144 | - [ ] 炒菜(私房菜) 145 | 146 | 147 | 148 | ## 使用方式 149 | 1. 下载安装 [BlueStacks 5](https://www.bluestacks.com/tw/index.html) 150 | > [如何下载并安装 BlueStacks 5 ?](https://support.bluestacks.com/hc/zh-tw/articles/360061525271-%E5%A6%82%E4%BD%95%E4%B8%8B%E8%BC%89%E4%B8%A6%E5%AE%89%E8%A3%9DBlueStacks-5) 151 | 2. 下载摩尔庄园手游安装包(请注意自己的渠道服情况) 152 | > 摩尔庄园手游官网:https://mole.leiting.com/home 153 | > 154 | > 较为常用的应用商店下载地址(对应渠道服): 155 | > - Bilibili:http://www.biligame.com/gamelist.html 156 | > - 华为:http://app.hicloud.com 157 | > - 小米:http://app.mi.com 158 | > - OPPO(可可):http://store.oppomobile.com 159 | > - 魅族:http://app.meizu.com 160 | > - 联想(乐商店):http://www.lenovomm.com 161 | > - 酷派:http://www.coolmart.net.cn/ 162 | > - 乐视:http://mobile.leplay.cn/ 163 | > - VIVO:https://dev.vivo.com.cn/doc/products/pc/index.html#firstPag 164 | 3. 在 BlueStacks 中安装摩尔庄园手游 165 | 4. 下载项目 [json](/json) 文件夹中对应的 json 文件 166 | 5. 导入 json 文件为宏脚本 167 | > [如何从电脑将脚本导入 BlueStacks ?](https://support.bluestacks.com/hc/zh-tw/articles/360056012412-BlueStacks-5%E4%B8%8A%E7%9A%84%E8%85%B3%E6%9C%AC%E7%AE%A1%E7%90%86%E5%99%A8#%E2%80%9C4%E2%80%9D) 168 | 6. 运行宏脚本 169 | > [如何执行/播放现有的脚本?](https://support.bluestacks.com/hc/zh-tw/articles/360056012412-BlueStacks-5%E4%B8%8A%E7%9A%84%E8%85%B3%E6%9C%AC%E7%AE%A1%E7%90%86%E5%99%A8#%E2%80%9C2%E2%80%9D) 170 | 171 | 172 | 173 | ## 特性 174 | - 扩展性 175 | > 采用 Python 代理生成相应的 BlueStacks 宏脚本,可在已有动作基础上轻松扩展新功能 176 | - 复用性 177 | > 触点坐标与流程控制分离,触点变化时,只需及时更新触点数据即可 178 | - 定制性 179 | > 各功能独立工作,可依据要求自行定制 180 | - 非侵入性 181 | > 不触及任何游戏运行过程中的相关数据 182 | - 模拟性 183 | > 所有操作均基于模拟点击动作,且带有坐标随机漂移(模拟器操作本身自带有较大的时间漂移) 184 | - 独立性 185 | > 不主动获取任何游戏数据(包括且不限于画面、内存、网络相关的数据) 186 | - 高效性 187 | > 由于没有主动性检测,执行更高效,对软硬件性能要求很低 188 | 189 | 190 | 191 | ## 出发点 192 | 时光流转,曾经的红鼻子小摩尔已成了亮额头大学生。 193 | 194 | 斗转星移,肝手游肝得精疲力尽。 195 | 196 | 垂死梦中惊坐起,咱肝不动了! 197 | 198 | 代码程序入梦来,咱有主意了! 199 | 200 | 深坐颦蛾眉感时花溅泪,破坏计算机信息系统罪! 201 | 202 | 出师未捷心先死,咱还年轻不想死! 203 | 204 | 常使英雄泪满襟,码宏脚本别犯禁! 205 | 206 | 207 | 208 | ## 声明 209 | 1. **本项目生成的宏脚本独立运行,不读取任何游戏数据,更不修改任何游戏数据,仅以模拟点击的方式完成游戏操作,不具有侵入性。** 210 | 2. **本项目协助的操作仅涉及基础的日常资源收集,绝不涉及任何影响游戏环境(平衡性)的内容。** 211 | 3. *本项目确实会影响玩家的氪金需求,进而可能触及相关商业公司的利益。小摩尔长大了,可支配的资本增长了,但肩上的压力也比以前大多了 ~~(说白了就是穷)~~,给条活路吧!/(ㄒoㄒ)/* -------------------------------------------------------------------------------- /img/bs-logo-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WH-2099/MoleScript/67ca811d71f46173c411df0332daca2b3ae2d062/img/bs-logo-new.png -------------------------------------------------------------------------------- /img/mole_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WH-2099/MoleScript/67ca811d71f46173c411df0332daca2b3ae2d062/img/mole_icon.png -------------------------------------------------------------------------------- /json/初始化设置.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170042", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 1500, 10 | "X": 3.9562442114494547, 11 | "Y": 7.241185582328259 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 1530, 17 | "X": 3.9562442114494547, 18 | "Y": 7.241185582328259 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 3030, 24 | "X": 20.089192198234723, 25 | "Y": 93.59829376792189 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 3060, 31 | "X": 20.089192198234723, 32 | "Y": 93.59829376792189 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 4560, 38 | "X": 12.335805893508669, 39 | "Y": 93.80744224173044 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 4590, 45 | "X": 12.335805893508669, 46 | "Y": 93.80744224173044 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 6090, 52 | "X": 5.221219017255178, 53 | "Y": 49.373057338718844 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 6120, 59 | "X": 5.221219017255178, 60 | "Y": 49.373057338718844 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 7620, 66 | "X": 94.55442299461696, 67 | "Y": 15.00851221449857 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 7650, 73 | "X": 94.55442299461696, 74 | "Y": 15.00851221449857 75 | }, 76 | { 77 | "Delta": 0, 78 | "EventType": "MouseDown", 79 | "Timestamp": 9150, 80 | "X": 28.020278129376912, 81 | "Y": 57.299025219983996 82 | }, 83 | { 84 | "Delta": 0, 85 | "EventType": "MouseUp", 86 | "Timestamp": 9180, 87 | "X": 28.020278129376912, 88 | "Y": 57.299025219983996 89 | }, 90 | { 91 | "Delta": 0, 92 | "EventType": "MouseDown", 93 | "Timestamp": 10680, 94 | "X": 32.13878316210545, 95 | "Y": 66.61836554485335 96 | }, 97 | { 98 | "Delta": 0, 99 | "EventType": "MouseUp", 100 | "Timestamp": 10710, 101 | "X": 32.13878316210545, 102 | "Y": 66.61836554485335 103 | }, 104 | { 105 | "Delta": 0, 106 | "EventType": "MouseDown", 107 | "Timestamp": 12210, 108 | "X": 33.43274732134215, 109 | "Y": 75.9295345019122 110 | }, 111 | { 112 | "Delta": 0, 113 | "EventType": "MouseUp", 114 | "Timestamp": 12240, 115 | "X": 33.43274732134215, 116 | "Y": 75.9295345019122 117 | }, 118 | { 119 | "Delta": -120, 120 | "EventType": "MouseWheel", 121 | "Timestamp": 12740, 122 | "X": 50.38977452740653, 123 | "Y": 50.41305363338405 124 | }, 125 | { 126 | "Delta": -120, 127 | "EventType": "MouseWheel", 128 | "Timestamp": 16240, 129 | "X": 50.38977452740653, 130 | "Y": 50.41305363338405 131 | }, 132 | { 133 | "Delta": -120, 134 | "EventType": "MouseWheel", 135 | "Timestamp": 19740, 136 | "X": 50.38977452740653, 137 | "Y": 50.41305363338405 138 | }, 139 | { 140 | "Delta": 0, 141 | "EventType": "MouseDown", 142 | "Timestamp": 24240, 143 | "X": 25.982813699657967, 144 | "Y": 20.685337308320452 145 | }, 146 | { 147 | "Delta": 0, 148 | "EventType": "MouseUp", 149 | "Timestamp": 24270, 150 | "X": 25.982813699657967, 151 | "Y": 20.685337308320452 152 | }, 153 | { 154 | "Delta": 0, 155 | "EventType": "MouseDown", 156 | "Timestamp": 25770, 157 | "X": 42.5835088837173, 158 | "Y": 29.01440283649112 159 | }, 160 | { 161 | "Delta": 0, 162 | "EventType": "MouseUp", 163 | "Timestamp": 25800, 164 | "X": 42.5835088837173, 165 | "Y": 29.01440283649112 166 | }, 167 | { 168 | "Delta": 0, 169 | "EventType": "MouseDown", 170 | "Timestamp": 27300, 171 | "X": 29.0, 172 | "Y": 38.5 173 | }, 174 | { 175 | "Delta": 0, 176 | "EventType": "MouseUp", 177 | "Timestamp": 27330, 178 | "X": 29.0, 179 | "Y": 38.5 180 | }, 181 | { 182 | "Delta": 0, 183 | "EventType": "MouseDown", 184 | "Timestamp": 28830, 185 | "X": 93.48433521489807, 186 | "Y": 3.9929978579775023 187 | }, 188 | { 189 | "Delta": 0, 190 | "EventType": "MouseUp", 191 | "Timestamp": 28860, 192 | "X": 93.48433521489807, 193 | "Y": 3.9929978579775023 194 | }, 195 | { 196 | "Delta": 0, 197 | "EventType": "MouseDown", 198 | "Timestamp": 30360, 199 | "X": 57.574120449709945, 200 | "Y": 60.42408090139574 201 | }, 202 | { 203 | "Delta": 0, 204 | "EventType": "MouseUp", 205 | "Timestamp": 30390, 206 | "X": 57.574120449709945, 207 | "Y": 60.42408090139574 208 | }, 209 | { 210 | "Delta": 0, 211 | "EventType": "MouseDown", 212 | "Timestamp": 33890, 213 | "X": 50.476599050120114, 214 | "Y": 4.3367593796211095 215 | }, 216 | { 217 | "Delta": 0, 218 | "EventType": "MouseUp", 219 | "Timestamp": 33920, 220 | "X": 50.476599050120114, 221 | "Y": 4.3367593796211095 222 | }, 223 | { 224 | "Delta": 0, 225 | "EventType": "MouseDown", 226 | "Timestamp": 35420, 227 | "X": 3.6696701949144552, 228 | "Y": 70.23054945915445 229 | }, 230 | { 231 | "Delta": 0, 232 | "EventType": "MouseUp", 233 | "Timestamp": 35450, 234 | "X": 3.6696701949144552, 235 | "Y": 70.23054945915445 236 | }, 237 | { 238 | "Delta": 0, 239 | "EventType": "MouseDown", 240 | "Timestamp": 37950, 241 | "X": 3.6101804555194095, 242 | "Y": 69.06693445977177 243 | }, 244 | { 245 | "Delta": 0, 246 | "EventType": "MouseUp", 247 | "Timestamp": 37980, 248 | "X": 3.6101804555194095, 249 | "Y": 69.06693445977177 250 | } 251 | ], 252 | "LoopDuration": 0, 253 | "LoopInterval": 0, 254 | "LoopIterations": 1, 255 | "LoopType": "TillLoopNumber", 256 | "MacroSchemaVersion": 2, 257 | "RestartPlayer": false, 258 | "RestartPlayerAfterMinutes": 60 259 | } -------------------------------------------------------------------------------- /json/日常占卜.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170042", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 1500, 10 | "X": 96.33771534609598, 11 | "Y": 6.252459827504728 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 1530, 17 | "X": 96.33771534609598, 18 | "Y": 6.252459827504728 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 3530, 24 | "X": 20.646780055247813, 25 | "Y": 18.73484136732648 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 3560, 31 | "X": 20.646780055247813, 32 | "Y": 18.73484136732648 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 125060, 38 | "X": 96.60178285681839, 39 | "Y": 7.262780015773464 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 125090, 45 | "X": 96.60178285681839, 46 | "Y": 7.262780015773464 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 126590, 52 | "X": 8.2232628495358, 53 | "Y": 93.33813556122864 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 126620, 59 | "X": 8.2232628495358, 60 | "Y": 93.33813556122864 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 128120, 66 | "X": 64.18871428241081, 67 | "Y": 93.89320272540355 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 128150, 73 | "X": 64.18871428241081, 74 | "Y": 93.89320272540355 75 | }, 76 | { 77 | "Delta": 0, 78 | "EventType": "MouseDown", 79 | "Timestamp": 159650, 80 | "X": 86.90431800264872, 81 | "Y": 56.87824791155395 82 | }, 83 | { 84 | "Delta": 0, 85 | "EventType": "MouseUp", 86 | "Timestamp": 159680, 87 | "X": 86.90431800264872, 88 | "Y": 56.87824791155395 89 | }, 90 | { 91 | "Delta": 0, 92 | "EventType": "MouseDown", 93 | "Timestamp": 164180, 94 | "X": 85.91262219186359, 95 | "Y": 75.04192882631344 96 | }, 97 | { 98 | "Delta": 0, 99 | "EventType": "MouseUp", 100 | "Timestamp": 164210, 101 | "X": 85.91262219186359, 102 | "Y": 75.04192882631344 103 | }, 104 | { 105 | "Delta": 0, 106 | "EventType": "MouseDown", 107 | "Timestamp": 165710, 108 | "X": 70.92561986363624, 109 | "Y": 87.16922689621218 110 | }, 111 | { 112 | "Delta": 0, 113 | "EventType": "MouseUp", 114 | "Timestamp": 165740, 115 | "X": 70.92561986363624, 116 | "Y": 87.16922689621218 117 | }, 118 | { 119 | "Delta": 0, 120 | "EventType": "MouseDown", 121 | "Timestamp": 169240, 122 | "X": 85.37562818592143, 123 | "Y": 56.55577939389855 124 | }, 125 | { 126 | "Delta": 0, 127 | "EventType": "MouseUp", 128 | "Timestamp": 169270, 129 | "X": 85.37562818592143, 130 | "Y": 56.55577939389855 131 | }, 132 | { 133 | "Delta": 0, 134 | "EventType": "MouseDown", 135 | "Timestamp": 173770, 136 | "X": 85.93408153153626, 137 | "Y": 74.68823291215635 138 | }, 139 | { 140 | "Delta": 0, 141 | "EventType": "MouseUp", 142 | "Timestamp": 173800, 143 | "X": 85.93408153153626, 144 | "Y": 74.68823291215635 145 | }, 146 | { 147 | "Delta": 0, 148 | "EventType": "MouseDown", 149 | "Timestamp": 175300, 150 | "X": 69.9140533810464, 151 | "Y": 87.14500714889974 152 | }, 153 | { 154 | "Delta": 0, 155 | "EventType": "MouseUp", 156 | "Timestamp": 175330, 157 | "X": 69.9140533810464, 158 | "Y": 87.14500714889974 159 | }, 160 | { 161 | "Delta": 0, 162 | "EventType": "MouseDown", 163 | "Timestamp": 178830, 164 | "X": 85.3317503081692, 165 | "Y": 57.50315009862212 166 | }, 167 | { 168 | "Delta": 0, 169 | "EventType": "MouseUp", 170 | "Timestamp": 178860, 171 | "X": 85.3317503081692, 172 | "Y": 57.50315009862212 173 | }, 174 | { 175 | "Delta": 0, 176 | "EventType": "MouseDown", 177 | "Timestamp": 183360, 178 | "X": 85.99121226647068, 179 | "Y": 74.67001284089065 180 | }, 181 | { 182 | "Delta": 0, 183 | "EventType": "MouseUp", 184 | "Timestamp": 183390, 185 | "X": 85.99121226647068, 186 | "Y": 74.67001284089065 187 | }, 188 | { 189 | "Delta": 0, 190 | "EventType": "MouseDown", 191 | "Timestamp": 184890, 192 | "X": 69.05059419762092, 193 | "Y": 87.6531957933884 194 | }, 195 | { 196 | "Delta": 0, 197 | "EventType": "MouseUp", 198 | "Timestamp": 184920, 199 | "X": 69.05059419762092, 200 | "Y": 87.6531957933884 201 | }, 202 | { 203 | "Delta": 0, 204 | "EventType": "MouseDown", 205 | "Timestamp": 188420, 206 | "X": 86.40494883917619, 207 | "Y": 56.095428185011514 208 | }, 209 | { 210 | "Delta": 0, 211 | "EventType": "MouseUp", 212 | "Timestamp": 188450, 213 | "X": 86.40494883917619, 214 | "Y": 56.095428185011514 215 | }, 216 | { 217 | "Delta": 0, 218 | "EventType": "MouseDown", 219 | "Timestamp": 192950, 220 | "X": 84.76032593149448, 221 | "Y": 74.04769531051672 222 | }, 223 | { 224 | "Delta": 0, 225 | "EventType": "MouseUp", 226 | "Timestamp": 192980, 227 | "X": 84.76032593149448, 228 | "Y": 74.04769531051672 229 | }, 230 | { 231 | "Delta": 0, 232 | "EventType": "MouseDown", 233 | "Timestamp": 194480, 234 | "X": 69.89253384996947, 235 | "Y": 88.92466213184957 236 | }, 237 | { 238 | "Delta": 0, 239 | "EventType": "MouseUp", 240 | "Timestamp": 194510, 241 | "X": 69.89253384996947, 242 | "Y": 88.92466213184957 243 | }, 244 | { 245 | "Delta": 0, 246 | "EventType": "MouseDown", 247 | "Timestamp": 198010, 248 | "X": 86.2423933398183, 249 | "Y": 56.500245146266 250 | }, 251 | { 252 | "Delta": 0, 253 | "EventType": "MouseUp", 254 | "Timestamp": 198040, 255 | "X": 86.2423933398183, 256 | "Y": 56.500245146266 257 | }, 258 | { 259 | "Delta": 0, 260 | "EventType": "MouseDown", 261 | "Timestamp": 202540, 262 | "X": 85.40951220103071, 263 | "Y": 75.23261580837135 264 | }, 265 | { 266 | "Delta": 0, 267 | "EventType": "MouseUp", 268 | "Timestamp": 202570, 269 | "X": 85.40951220103071, 270 | "Y": 75.23261580837135 271 | }, 272 | { 273 | "Delta": 0, 274 | "EventType": "MouseDown", 275 | "Timestamp": 204070, 276 | "X": 70.22587702415889, 277 | "Y": 88.78525434648175 278 | }, 279 | { 280 | "Delta": 0, 281 | "EventType": "MouseUp", 282 | "Timestamp": 204100, 283 | "X": 70.22587702415889, 284 | "Y": 88.78525434648175 285 | }, 286 | { 287 | "Delta": 0, 288 | "EventType": "MouseDown", 289 | "Timestamp": 207600, 290 | "X": 86.4983442324595, 291 | "Y": 29.908213296799424 292 | }, 293 | { 294 | "Delta": 0, 295 | "EventType": "MouseUp", 296 | "Timestamp": 207630, 297 | "X": 86.4983442324595, 298 | "Y": 29.908213296799424 299 | }, 300 | { 301 | "Delta": 0, 302 | "EventType": "MouseDown", 303 | "Timestamp": 209430, 304 | "X": 47.40246977709777, 305 | "Y": 63.195647681380116 306 | }, 307 | { 308 | "Delta": 0, 309 | "EventType": "MouseMove", 310 | "Timestamp": 209480, 311 | "X": 47.44973311762892, 312 | "Y": 63.245865184477324 313 | }, 314 | { 315 | "Delta": 0, 316 | "EventType": "MouseMove", 317 | "Timestamp": 209530, 318 | "X": 47.59035935892046, 319 | "Y": 63.39528117218037 320 | }, 321 | { 322 | "Delta": 0, 323 | "EventType": "MouseMove", 324 | "Timestamp": 209580, 325 | "X": 47.82088581620004, 326 | "Y": 63.64021652698875 327 | }, 328 | { 329 | "Delta": 0, 330 | "EventType": "MouseMove", 331 | "Timestamp": 209630, 332 | "X": 48.13563616301601, 333 | "Y": 63.97464012757327 334 | }, 335 | { 336 | "Delta": 0, 337 | "EventType": "MouseMove", 338 | "Timestamp": 209680, 339 | "X": 48.52686020123324, 340 | "Y": 64.39031735499923 341 | }, 342 | { 343 | "Delta": 0, 344 | "EventType": "MouseMove", 345 | "Timestamp": 209730, 346 | "X": 48.984924696632675, 347 | "Y": 64.87701285637377 348 | }, 349 | { 350 | "Delta": 0, 351 | "EventType": "MouseMove", 352 | "Timestamp": 209780, 353 | "X": 49.49855058110869, 354 | "Y": 65.42274257320328 355 | }, 356 | { 357 | "Delta": 0, 358 | "EventType": "MouseMove", 359 | "Timestamp": 209830, 360 | "X": 50.05509068075889, 361 | "Y": 66.01406882868636 362 | }, 363 | { 364 | "Delta": 0, 365 | "EventType": "MouseMove", 366 | "Timestamp": 209880, 367 | "X": 50.6408411312792, 368 | "Y": 66.63643120791366 369 | }, 370 | { 371 | "Delta": 0, 372 | "EventType": "MouseMove", 373 | "Timestamp": 209930, 374 | "X": 51.24137881258353, 375 | "Y": 67.2745050836063 376 | }, 377 | { 378 | "Delta": 0, 379 | "EventType": "MouseMove", 380 | "Timestamp": 209980, 381 | "X": 51.84191649388785, 382 | "Y": 67.91257895929894 383 | }, 384 | { 385 | "Delta": 0, 386 | "EventType": "MouseMove", 387 | "Timestamp": 210030, 388 | "X": 52.42766694440816, 389 | "Y": 68.53494133852624 390 | }, 391 | { 392 | "Delta": 0, 393 | "EventType": "MouseMove", 394 | "Timestamp": 210080, 395 | "X": 52.984207044058365, 396 | "Y": 69.12626759400932 397 | }, 398 | { 399 | "Delta": 0, 400 | "EventType": "MouseMove", 401 | "Timestamp": 210130, 402 | "X": 53.49783292853438, 403 | "Y": 69.67199731083885 404 | }, 405 | { 406 | "Delta": 0, 407 | "EventType": "MouseMove", 408 | "Timestamp": 210180, 409 | "X": 53.95589742393381, 410 | "Y": 70.15869281221339 411 | }, 412 | { 413 | "Delta": 0, 414 | "EventType": "MouseMove", 415 | "Timestamp": 210230, 416 | "X": 54.347121462151044, 417 | "Y": 70.57437003963933 418 | }, 419 | { 420 | "Delta": 0, 421 | "EventType": "MouseMove", 422 | "Timestamp": 210280, 423 | "X": 54.66187180896701, 424 | "Y": 70.90879364022385 425 | }, 426 | { 427 | "Delta": 0, 428 | "EventType": "MouseMove", 429 | "Timestamp": 210330, 430 | "X": 54.8923982662466, 431 | "Y": 71.15372899503224 432 | }, 433 | { 434 | "Delta": 0, 435 | "EventType": "MouseMove", 436 | "Timestamp": 210380, 437 | "X": 55.03302450753813, 438 | "Y": 71.30314498273528 439 | }, 440 | { 441 | "Delta": 0, 442 | "EventType": "MouseMove", 443 | "Timestamp": 210430, 444 | "X": 55.08028784806928, 445 | "Y": 71.35336248583249 446 | }, 447 | { 448 | "Delta": 0, 449 | "EventType": "MouseUp", 450 | "Timestamp": 210460, 451 | "X": 55.08028784806928, 452 | "Y": 71.35336248583249 453 | }, 454 | { 455 | "Delta": 0, 456 | "EventType": "MouseDown", 457 | "Timestamp": 216960, 458 | "X": 50.814513122710274, 459 | "Y": 4.397871455715546 460 | }, 461 | { 462 | "Delta": 0, 463 | "EventType": "MouseUp", 464 | "Timestamp": 216990, 465 | "X": 50.814513122710274, 466 | "Y": 4.397871455715546 467 | }, 468 | { 469 | "Delta": 0, 470 | "EventType": "MouseDown", 471 | "Timestamp": 220290, 472 | "X": 84.11357265673297, 473 | "Y": 63.47788738667501 474 | }, 475 | { 476 | "Delta": 0, 477 | "EventType": "MouseUp", 478 | "Timestamp": 220320, 479 | "X": 84.11357265673297, 480 | "Y": 63.47788738667501 481 | }, 482 | { 483 | "Delta": 0, 484 | "EventType": "MouseDown", 485 | "Timestamp": 221820, 486 | "X": 95.63427693362476, 487 | "Y": 7.49568128596002 488 | }, 489 | { 490 | "Delta": 0, 491 | "EventType": "MouseUp", 492 | "Timestamp": 221850, 493 | "X": 95.63427693362476, 494 | "Y": 7.49568128596002 495 | }, 496 | { 497 | "Delta": 0, 498 | "EventType": "MouseDown", 499 | "Timestamp": 223850, 500 | "X": 20.90348481278624, 501 | "Y": 18.941126378836326 502 | }, 503 | { 504 | "Delta": 0, 505 | "EventType": "MouseUp", 506 | "Timestamp": 223880, 507 | "X": 20.90348481278624, 508 | "Y": 18.941126378836326 509 | } 510 | ], 511 | "LoopDuration": 0, 512 | "LoopInterval": 0, 513 | "LoopIterations": 1, 514 | "LoopType": "TillLoopNumber", 515 | "MacroSchemaVersion": 2, 516 | "RestartPlayer": false, 517 | "RestartPlayerAfterMinutes": 60 518 | } -------------------------------------------------------------------------------- /json/日常向导任务.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170042", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 1500, 10 | "X": 96.62916117314583, 11 | "Y": 7.792915656093802 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 1530, 17 | "X": 96.62916117314583, 18 | "Y": 7.792915656093802 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 3530, 24 | "X": 56.7399074779921, 25 | "Y": 26.248746823264085 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 3560, 31 | "X": 56.7399074779921, 32 | "Y": 26.248746823264085 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 125060, 38 | "X": 91.37718138075653, 39 | "Y": 7.9087376255678254 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 125090, 45 | "X": 91.37718138075653, 46 | "Y": 7.9087376255678254 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 126590, 52 | "X": 93.66427786806639, 53 | "Y": 66.10378168045193 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 126620, 59 | "X": 93.66427786806639, 60 | "Y": 66.10378168045193 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 128120, 66 | "X": 74.01014137995678, 67 | "Y": 82.14221610969139 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 128150, 73 | "X": 74.01014137995678, 74 | "Y": 82.14221610969139 75 | }, 76 | { 77 | "Delta": 0, 78 | "EventType": "MouseDown", 79 | "Timestamp": 139650, 80 | "X": 69.56368618199959, 81 | "Y": 88.53621734037604 82 | }, 83 | { 84 | "Delta": 0, 85 | "EventType": "MouseUp", 86 | "Timestamp": 139680, 87 | "X": 69.56368618199959, 88 | "Y": 88.53621734037604 89 | }, 90 | { 91 | "Delta": 0, 92 | "EventType": "MouseDown", 93 | "Timestamp": 141180, 94 | "X": 85.25313735195513, 95 | "Y": 28.92991823890755 96 | }, 97 | { 98 | "Delta": 0, 99 | "EventType": "MouseUp", 100 | "Timestamp": 141210, 101 | "X": 85.25313735195513, 102 | "Y": 28.92991823890755 103 | }, 104 | { 105 | "Delta": 0, 106 | "EventType": "MouseDown", 107 | "Timestamp": 143710, 108 | "X": 75.98239822469294, 109 | "Y": 17.86384430695068 110 | }, 111 | { 112 | "Delta": 0, 113 | "EventType": "MouseUp", 114 | "Timestamp": 143740, 115 | "X": 75.98239822469294, 116 | "Y": 17.86384430695068 117 | }, 118 | { 119 | "Delta": 0, 120 | "EventType": "MouseDown", 121 | "Timestamp": 145240, 122 | "X": 75.81515522877402, 123 | "Y": 69.33455787424596 124 | }, 125 | { 126 | "Delta": 0, 127 | "EventType": "MouseUp", 128 | "Timestamp": 145270, 129 | "X": 75.81515522877402, 130 | "Y": 69.33455787424596 131 | }, 132 | { 133 | "Delta": -120, 134 | "EventType": "MouseWheel", 135 | "Timestamp": 145770, 136 | "X": 49.84831386936106, 137 | "Y": 49.72736386536431 138 | }, 139 | { 140 | "Delta": -120, 141 | "EventType": "MouseWheel", 142 | "Timestamp": 149270, 143 | "X": 50.49349820292313, 144 | "Y": 49.83549761316401 145 | }, 146 | { 147 | "Delta": -120, 148 | "EventType": "MouseWheel", 149 | "Timestamp": 152770, 150 | "X": 49.882379289430105, 151 | "Y": 49.673815676752554 152 | }, 153 | { 154 | "Delta": 0, 155 | "EventType": "MouseDown", 156 | "Timestamp": 157270, 157 | "X": 76.36731792744844, 158 | "Y": 57.24908251864004 159 | }, 160 | { 161 | "Delta": 0, 162 | "EventType": "MouseUp", 163 | "Timestamp": 157300, 164 | "X": 76.36731792744844, 165 | "Y": 57.24908251864004 166 | }, 167 | { 168 | "Delta": 0, 169 | "EventType": "MouseDown", 170 | "Timestamp": 158800, 171 | "X": 73.7624247658523, 172 | "Y": 81.2131675584324 173 | }, 174 | { 175 | "Delta": 0, 176 | "EventType": "MouseUp", 177 | "Timestamp": 158830, 178 | "X": 73.7624247658523, 179 | "Y": 81.2131675584324 180 | }, 181 | { 182 | "Delta": 0, 183 | "EventType": "MouseDown", 184 | "Timestamp": 160330, 185 | "X": 49.85690168912492, 186 | "Y": 5.3780654268440085 187 | }, 188 | { 189 | "Delta": 0, 190 | "EventType": "MouseUp", 191 | "Timestamp": 160360, 192 | "X": 49.85690168912492, 193 | "Y": 5.3780654268440085 194 | }, 195 | { 196 | "Delta": 0, 197 | "EventType": "MouseDown", 198 | "Timestamp": 162860, 199 | "X": 44.52092369209532, 200 | "Y": 81.54289034220673 201 | }, 202 | { 203 | "Delta": 0, 204 | "EventType": "MouseUp", 205 | "Timestamp": 162890, 206 | "X": 44.52092369209532, 207 | "Y": 81.54289034220673 208 | }, 209 | { 210 | "Delta": 0, 211 | "EventType": "MouseDown", 212 | "Timestamp": 164390, 213 | "X": 29.656435970418208, 214 | "Y": 80.13389578022048 215 | }, 216 | { 217 | "Delta": 0, 218 | "EventType": "MouseUp", 219 | "Timestamp": 164420, 220 | "X": 29.656435970418208, 221 | "Y": 80.13389578022048 222 | }, 223 | { 224 | "Delta": 0, 225 | "EventType": "MouseDown", 226 | "Timestamp": 186920, 227 | "X": 84.56889017304712, 228 | "Y": 75.32633525615553 229 | }, 230 | { 231 | "Delta": 0, 232 | "EventType": "MouseUp", 233 | "Timestamp": 186950, 234 | "X": 84.56889017304712, 235 | "Y": 75.32633525615553 236 | }, 237 | { 238 | "Delta": 0, 239 | "EventType": "MouseDown", 240 | "Timestamp": 188450, 241 | "X": 69.00249098290394, 242 | "Y": 88.6688935977855 243 | }, 244 | { 245 | "Delta": 0, 246 | "EventType": "MouseUp", 247 | "Timestamp": 188480, 248 | "X": 69.00249098290394, 249 | "Y": 88.6688935977855 250 | }, 251 | { 252 | "Delta": 0, 253 | "EventType": "MouseDown", 254 | "Timestamp": 189980, 255 | "X": 85.67120751744591, 256 | "Y": 29.98952179006774 257 | }, 258 | { 259 | "Delta": 0, 260 | "EventType": "MouseUp", 261 | "Timestamp": 190010, 262 | "X": 85.67120751744591, 263 | "Y": 29.98952179006774 264 | }, 265 | { 266 | "Delta": 0, 267 | "EventType": "MouseDown", 268 | "Timestamp": 191510, 269 | "X": 74.77791318367423, 270 | "Y": 81.94556789743531 271 | }, 272 | { 273 | "Delta": 0, 274 | "EventType": "MouseUp", 275 | "Timestamp": 191540, 276 | "X": 74.77791318367423, 277 | "Y": 81.94556789743531 278 | }, 279 | { 280 | "Delta": 0, 281 | "EventType": "MouseDown", 282 | "Timestamp": 193040, 283 | "X": 49.40383684551938, 284 | "Y": 4.2518004966855525 285 | }, 286 | { 287 | "Delta": 0, 288 | "EventType": "MouseUp", 289 | "Timestamp": 193070, 290 | "X": 49.40383684551938, 291 | "Y": 4.2518004966855525 292 | } 293 | ], 294 | "LoopDuration": 0, 295 | "LoopInterval": 0, 296 | "LoopIterations": 1, 297 | "LoopType": "TillLoopNumber", 298 | "MacroSchemaVersion": 2, 299 | "RestartPlayer": false, 300 | "RestartPlayerAfterMinutes": 60 301 | } -------------------------------------------------------------------------------- /json/日常许愿.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170042", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 1500, 10 | "X": 95.74213305767782, 11 | "Y": 7.813179852090345 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 1530, 17 | "X": 95.74213305767782, 18 | "Y": 7.813179852090345 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 3530, 24 | "X": 42.45641037642082, 25 | "Y": 33.053268813314986 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 3560, 31 | "X": 42.45641037642082, 32 | "Y": 33.053268813314986 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 125060, 38 | "X": 95.06543486269864, 39 | "Y": 7.920173512989455 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 125090, 45 | "X": 95.06543486269864, 46 | "Y": 7.920173512989455 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 126590, 52 | "X": 8.518495176603915, 53 | "Y": 92.96128752674939 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 126620, 59 | "X": 8.518495176603915, 60 | "Y": 92.96128752674939 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 128120, 66 | "X": 19.250485150725865, 67 | "Y": 92.08389238427759 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 128150, 73 | "X": 19.250485150725865, 74 | "Y": 92.08389238427759 75 | }, 76 | { 77 | "Delta": 0, 78 | "EventType": "MouseDown", 79 | "Timestamp": 159650, 80 | "X": 85.09417245108419, 81 | "Y": 75.64327930229696 82 | }, 83 | { 84 | "Delta": 0, 85 | "EventType": "MouseUp", 86 | "Timestamp": 159680, 87 | "X": 85.09417245108419, 88 | "Y": 75.64327930229696 89 | }, 90 | { 91 | "Delta": 0, 92 | "EventType": "MouseDown", 93 | "Timestamp": 164180, 94 | "X": 69.27830927202334, 95 | "Y": 75.15700150567915 96 | }, 97 | { 98 | "Delta": 0, 99 | "EventType": "MouseUp", 100 | "Timestamp": 164210, 101 | "X": 69.27830927202334, 102 | "Y": 75.15700150567915 103 | }, 104 | { 105 | "Delta": 0, 106 | "EventType": "MouseDown", 107 | "Timestamp": 165710, 108 | "X": 82.42181377744768, 109 | "Y": 58.2503093898497 110 | }, 111 | { 112 | "Delta": 0, 113 | "EventType": "MouseUp", 114 | "Timestamp": 165740, 115 | "X": 82.42181377744768, 116 | "Y": 58.2503093898497 117 | }, 118 | { 119 | "Delta": 0, 120 | "EventType": "MouseDown", 121 | "Timestamp": 167240, 122 | "X": 50.99201110658921, 123 | "Y": 4.913805056274903 124 | }, 125 | { 126 | "Delta": 0, 127 | "EventType": "MouseUp", 128 | "Timestamp": 167270, 129 | "X": 50.99201110658921, 130 | "Y": 4.913805056274903 131 | }, 132 | { 133 | "Delta": 0, 134 | "EventType": "MouseDown", 135 | "Timestamp": 169770, 136 | "X": 85.3569452866799, 137 | "Y": 74.12603402846908 138 | }, 139 | { 140 | "Delta": 0, 141 | "EventType": "MouseUp", 142 | "Timestamp": 169800, 143 | "X": 85.3569452866799, 144 | "Y": 74.12603402846908 145 | }, 146 | { 147 | "Delta": 0, 148 | "EventType": "MouseDown", 149 | "Timestamp": 181300, 150 | "X": 70.95242516240384, 151 | "Y": 74.0975792842835 152 | }, 153 | { 154 | "Delta": 0, 155 | "EventType": "MouseUp", 156 | "Timestamp": 181330, 157 | "X": 70.95242516240384, 158 | "Y": 74.0975792842835 159 | }, 160 | { 161 | "Delta": 0, 162 | "EventType": "MouseDown", 163 | "Timestamp": 182830, 164 | "X": 81.71680749719192, 165 | "Y": 45.37953968491668 166 | }, 167 | { 168 | "Delta": 0, 169 | "EventType": "MouseUp", 170 | "Timestamp": 182860, 171 | "X": 81.71680749719192, 172 | "Y": 45.37953968491668 173 | }, 174 | { 175 | "Delta": 0, 176 | "EventType": "MouseDown", 177 | "Timestamp": 184360, 178 | "X": 69.7197877236801, 179 | "Y": 74.13876443085877 180 | }, 181 | { 182 | "Delta": 0, 183 | "EventType": "MouseUp", 184 | "Timestamp": 184390, 185 | "X": 69.7197877236801, 186 | "Y": 74.13876443085877 187 | }, 188 | { 189 | "Delta": 0, 190 | "EventType": "MouseDown", 191 | "Timestamp": 185890, 192 | "X": 69.80655718684748, 193 | "Y": 75.5170800237763 194 | }, 195 | { 196 | "Delta": 0, 197 | "EventType": "MouseUp", 198 | "Timestamp": 185920, 199 | "X": 69.80655718684748, 200 | "Y": 75.5170800237763 201 | } 202 | ], 203 | "LoopDuration": 0, 204 | "LoopInterval": 0, 205 | "LoopIterations": 1, 206 | "LoopType": "TillLoopNumber", 207 | "MacroSchemaVersion": 2, 208 | "RestartPlayer": false, 209 | "RestartPlayerAfterMinutes": 60 210 | } -------------------------------------------------------------------------------- /json/辅助互动.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170045", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 300, 10 | "X": 85.0874687739542, 11 | "Y": 74.69677800307312 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 330, 17 | "X": 85.0874687739542, 18 | "Y": 74.69677800307312 19 | } 20 | ], 21 | "LoopDuration": 0, 22 | "LoopInterval": 0, 23 | "LoopIterations": 1, 24 | "LoopType": "UntilStopped", 25 | "MacroSchemaVersion": 2, 26 | "RestartPlayer": false, 27 | "RestartPlayerAfterMinutes": 60 28 | } -------------------------------------------------------------------------------- /json/辅助神奇密码兑换.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170046", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 1500, 10 | "X": 81.76805295884702, 11 | "Y": 15.206715846114783 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 1530, 17 | "X": 81.76805295884702, 18 | "Y": 15.206715846114783 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 3030, 24 | "X": 6.147294486621795, 25 | "Y": 35.33239470514852 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 3060, 31 | "X": 6.147294486621795, 32 | "Y": 35.33239470514852 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 4560, 38 | "X": 16.08188634109776, 39 | "Y": 17.051694320345216 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 4590, 45 | "X": 16.08188634109776, 46 | "Y": 17.051694320345216 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 6090, 52 | "X": 49.442888428860286, 53 | "Y": 63.40023215876681 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 6120, 59 | "X": 49.442888428860286, 60 | "Y": 63.40023215876681 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 7620, 66 | "X": 49.00196783311403, 67 | "Y": 63.02533488095294 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 7650, 73 | "X": 49.00196783311403, 74 | "Y": 63.02533488095294 75 | }, 76 | { 77 | "Delta": 0, 78 | "EventType": "MouseDown", 79 | "Timestamp": 9150, 80 | "X": 49.686877355319425, 81 | "Y": 48.79954835357398 82 | }, 83 | { 84 | "Delta": 0, 85 | "EventType": "MouseUp", 86 | "Timestamp": 9180, 87 | "X": 49.686877355319425, 88 | "Y": 48.79954835357398 89 | }, 90 | { 91 | "EventType": "IME", 92 | "Msg": "start_\u827e\u7c73\u7684\u793c\u7269_end del=0 enter=1", 93 | "Timestamp": 10680 94 | }, 95 | { 96 | "Delta": 0, 97 | "EventType": "MouseDown", 98 | "Timestamp": 13180, 99 | "X": 57.88247381324178, 100 | "Y": 63.05012233612332 101 | }, 102 | { 103 | "Delta": 0, 104 | "EventType": "MouseUp", 105 | "Timestamp": 13210, 106 | "X": 57.88247381324178, 107 | "Y": 63.05012233612332 108 | }, 109 | { 110 | "Delta": 0, 111 | "EventType": "MouseDown", 112 | "Timestamp": 14710, 113 | "X": 49.54218603697488, 114 | "Y": 5.105197709059356 115 | }, 116 | { 117 | "Delta": 0, 118 | "EventType": "MouseUp", 119 | "Timestamp": 14740, 120 | "X": 49.54218603697488, 121 | "Y": 5.105197709059356 122 | }, 123 | { 124 | "Delta": 0, 125 | "EventType": "MouseDown", 126 | "Timestamp": 16240, 127 | "X": 50.37380384518967, 128 | "Y": 63.253741187589924 129 | }, 130 | { 131 | "Delta": 0, 132 | "EventType": "MouseUp", 133 | "Timestamp": 16270, 134 | "X": 50.37380384518967, 135 | "Y": 63.253741187589924 136 | }, 137 | { 138 | "Delta": 0, 139 | "EventType": "MouseDown", 140 | "Timestamp": 17770, 141 | "X": 50.142649598124024, 142 | "Y": 49.834526689158125 143 | }, 144 | { 145 | "Delta": 0, 146 | "EventType": "MouseUp", 147 | "Timestamp": 17800, 148 | "X": 50.142649598124024, 149 | "Y": 49.834526689158125 150 | }, 151 | { 152 | "EventType": "IME", 153 | "Msg": "start_\u6cb3\u5357\u52a0\u6cb9_end del=0 enter=1", 154 | "Timestamp": 19300 155 | }, 156 | { 157 | "Delta": 0, 158 | "EventType": "MouseDown", 159 | "Timestamp": 21800, 160 | "X": 59.31272539362987, 161 | "Y": 62.92959156479465 162 | }, 163 | { 164 | "Delta": 0, 165 | "EventType": "MouseUp", 166 | "Timestamp": 21830, 167 | "X": 59.31272539362987, 168 | "Y": 62.92959156479465 169 | }, 170 | { 171 | "Delta": 0, 172 | "EventType": "MouseDown", 173 | "Timestamp": 23330, 174 | "X": 49.70854110808175, 175 | "Y": 4.3927214229613 176 | }, 177 | { 178 | "Delta": 0, 179 | "EventType": "MouseUp", 180 | "Timestamp": 23360, 181 | "X": 49.70854110808175, 182 | "Y": 4.3927214229613 183 | }, 184 | { 185 | "Delta": 0, 186 | "EventType": "MouseDown", 187 | "Timestamp": 24860, 188 | "X": 50.16147226851329, 189 | "Y": 62.51379114350153 190 | }, 191 | { 192 | "Delta": 0, 193 | "EventType": "MouseUp", 194 | "Timestamp": 24890, 195 | "X": 50.16147226851329, 196 | "Y": 62.51379114350153 197 | }, 198 | { 199 | "Delta": 0, 200 | "EventType": "MouseDown", 201 | "Timestamp": 26390, 202 | "X": 49.81983887217686, 203 | "Y": 49.52911229916421 204 | }, 205 | { 206 | "Delta": 0, 207 | "EventType": "MouseUp", 208 | "Timestamp": 26420, 209 | "X": 49.81983887217686, 210 | "Y": 49.52911229916421 211 | }, 212 | { 213 | "EventType": "IME", 214 | "Msg": "start_\u4e2d\u56fd\u5973\u8db3_end del=0 enter=1", 215 | "Timestamp": 27920 216 | }, 217 | { 218 | "Delta": 0, 219 | "EventType": "MouseDown", 220 | "Timestamp": 30420, 221 | "X": 58.69993850364845, 222 | "Y": 62.374067556926576 223 | }, 224 | { 225 | "Delta": 0, 226 | "EventType": "MouseUp", 227 | "Timestamp": 30450, 228 | "X": 58.69993850364845, 229 | "Y": 62.374067556926576 230 | }, 231 | { 232 | "Delta": 0, 233 | "EventType": "MouseDown", 234 | "Timestamp": 31950, 235 | "X": 49.98084580460966, 236 | "Y": 5.051844041152877 237 | }, 238 | { 239 | "Delta": 0, 240 | "EventType": "MouseUp", 241 | "Timestamp": 31980, 242 | "X": 49.98084580460966, 243 | "Y": 5.051844041152877 244 | }, 245 | { 246 | "Delta": 0, 247 | "EventType": "MouseDown", 248 | "Timestamp": 33480, 249 | "X": 49.168042630044276, 250 | "Y": 62.95989817285069 251 | }, 252 | { 253 | "Delta": 0, 254 | "EventType": "MouseUp", 255 | "Timestamp": 33510, 256 | "X": 49.168042630044276, 257 | "Y": 62.95989817285069 258 | }, 259 | { 260 | "Delta": 0, 261 | "EventType": "MouseDown", 262 | "Timestamp": 35010, 263 | "X": 49.171318286580025, 264 | "Y": 49.88360806296358 265 | }, 266 | { 267 | "Delta": 0, 268 | "EventType": "MouseUp", 269 | "Timestamp": 35040, 270 | "X": 49.171318286580025, 271 | "Y": 49.88360806296358 272 | }, 273 | { 274 | "EventType": "IME", 275 | "Msg": "start_\u9ed1\u68ee\u6797\u8981\u6765\u5566_end del=0 enter=1", 276 | "Timestamp": 36540 277 | }, 278 | { 279 | "Delta": 0, 280 | "EventType": "MouseDown", 281 | "Timestamp": 39040, 282 | "X": 58.38468791428513, 283 | "Y": 63.2207361566508 284 | }, 285 | { 286 | "Delta": 0, 287 | "EventType": "MouseUp", 288 | "Timestamp": 39070, 289 | "X": 58.38468791428513, 290 | "Y": 63.2207361566508 291 | }, 292 | { 293 | "Delta": 0, 294 | "EventType": "MouseDown", 295 | "Timestamp": 40570, 296 | "X": 49.61774829100663, 297 | "Y": 4.45585085100478 298 | }, 299 | { 300 | "Delta": 0, 301 | "EventType": "MouseUp", 302 | "Timestamp": 40600, 303 | "X": 49.61774829100663, 304 | "Y": 4.45585085100478 305 | }, 306 | { 307 | "Delta": 0, 308 | "EventType": "MouseDown", 309 | "Timestamp": 42100, 310 | "X": 50.52956876986652, 311 | "Y": 63.4168516689752 312 | }, 313 | { 314 | "Delta": 0, 315 | "EventType": "MouseUp", 316 | "Timestamp": 42130, 317 | "X": 50.52956876986652, 318 | "Y": 63.4168516689752 319 | }, 320 | { 321 | "Delta": 0, 322 | "EventType": "MouseDown", 323 | "Timestamp": 43630, 324 | "X": 49.21845384337202, 325 | "Y": 49.16082981727364 326 | }, 327 | { 328 | "Delta": 0, 329 | "EventType": "MouseUp", 330 | "Timestamp": 43660, 331 | "X": 49.21845384337202, 332 | "Y": 49.16082981727364 333 | }, 334 | { 335 | "EventType": "IME", 336 | "Msg": "start_\u7f8e\u56fe\u79c0\u79c0\u6469\u5c14\u8d34\u7eb8_end del=0 enter=1", 337 | "Timestamp": 45160 338 | }, 339 | { 340 | "Delta": 0, 341 | "EventType": "MouseDown", 342 | "Timestamp": 47660, 343 | "X": 58.147352586036185, 344 | "Y": 63.428260807336656 345 | }, 346 | { 347 | "Delta": 0, 348 | "EventType": "MouseUp", 349 | "Timestamp": 47690, 350 | "X": 58.147352586036185, 351 | "Y": 63.428260807336656 352 | }, 353 | { 354 | "Delta": 0, 355 | "EventType": "MouseDown", 356 | "Timestamp": 49190, 357 | "X": 50.65221042310574, 358 | "Y": 4.456499368698393 359 | }, 360 | { 361 | "Delta": 0, 362 | "EventType": "MouseUp", 363 | "Timestamp": 49220, 364 | "X": 50.65221042310574, 365 | "Y": 4.456499368698393 366 | }, 367 | { 368 | "Delta": 0, 369 | "EventType": "MouseDown", 370 | "Timestamp": 50720, 371 | "X": 49.79005689127551, 372 | "Y": 63.536565838752196 373 | }, 374 | { 375 | "Delta": 0, 376 | "EventType": "MouseUp", 377 | "Timestamp": 50750, 378 | "X": 49.79005689127551, 379 | "Y": 63.536565838752196 380 | }, 381 | { 382 | "Delta": 0, 383 | "EventType": "MouseDown", 384 | "Timestamp": 52250, 385 | "X": 49.01171286319187, 386 | "Y": 49.321353057962185 387 | }, 388 | { 389 | "Delta": 0, 390 | "EventType": "MouseUp", 391 | "Timestamp": 52280, 392 | "X": 49.01171286319187, 393 | "Y": 49.321353057962185 394 | }, 395 | { 396 | "EventType": "IME", 397 | "Msg": "start_\u4e00\u8d77\u5f39\u7434\u5427_end del=0 enter=1", 398 | "Timestamp": 53780 399 | }, 400 | { 401 | "Delta": 0, 402 | "EventType": "MouseDown", 403 | "Timestamp": 56280, 404 | "X": 58.61702755510816, 405 | "Y": 62.10250218593817 406 | }, 407 | { 408 | "Delta": 0, 409 | "EventType": "MouseUp", 410 | "Timestamp": 56310, 411 | "X": 58.61702755510816, 412 | "Y": 62.10250218593817 413 | }, 414 | { 415 | "Delta": 0, 416 | "EventType": "MouseDown", 417 | "Timestamp": 57810, 418 | "X": 50.46648074865919, 419 | "Y": 4.116882990478476 420 | }, 421 | { 422 | "Delta": 0, 423 | "EventType": "MouseUp", 424 | "Timestamp": 57840, 425 | "X": 50.46648074865919, 426 | "Y": 4.116882990478476 427 | }, 428 | { 429 | "Delta": 0, 430 | "EventType": "MouseDown", 431 | "Timestamp": 59340, 432 | "X": 49.16577563855502, 433 | "Y": 62.051484197752 434 | }, 435 | { 436 | "Delta": 0, 437 | "EventType": "MouseUp", 438 | "Timestamp": 59370, 439 | "X": 49.16577563855502, 440 | "Y": 62.051484197752 441 | }, 442 | { 443 | "Delta": 0, 444 | "EventType": "MouseDown", 445 | "Timestamp": 60870, 446 | "X": 49.17823498728648, 447 | "Y": 48.750949508980035 448 | }, 449 | { 450 | "Delta": 0, 451 | "EventType": "MouseUp", 452 | "Timestamp": 60900, 453 | "X": 49.17823498728648, 454 | "Y": 48.750949508980035 455 | }, 456 | { 457 | "EventType": "IME", 458 | "Msg": "start_\u97f3\u4e50\u4f1a\u5267\u900f_end del=0 enter=1", 459 | "Timestamp": 62400 460 | }, 461 | { 462 | "Delta": 0, 463 | "EventType": "MouseDown", 464 | "Timestamp": 64900, 465 | "X": 59.372577418783436, 466 | "Y": 63.95699994414763 467 | }, 468 | { 469 | "Delta": 0, 470 | "EventType": "MouseUp", 471 | "Timestamp": 64930, 472 | "X": 59.372577418783436, 473 | "Y": 63.95699994414763 474 | }, 475 | { 476 | "Delta": 0, 477 | "EventType": "MouseDown", 478 | "Timestamp": 66430, 479 | "X": 50.11275366764391, 480 | "Y": 4.4867203783144305 481 | }, 482 | { 483 | "Delta": 0, 484 | "EventType": "MouseUp", 485 | "Timestamp": 66460, 486 | "X": 50.11275366764391, 487 | "Y": 4.4867203783144305 488 | }, 489 | { 490 | "Delta": 0, 491 | "EventType": "MouseDown", 492 | "Timestamp": 67960, 493 | "X": 50.84703226679966, 494 | "Y": 63.68993806858295 495 | }, 496 | { 497 | "Delta": 0, 498 | "EventType": "MouseUp", 499 | "Timestamp": 67990, 500 | "X": 50.84703226679966, 501 | "Y": 63.68993806858295 502 | }, 503 | { 504 | "Delta": 0, 505 | "EventType": "MouseDown", 506 | "Timestamp": 69490, 507 | "X": 50.07172329690469, 508 | "Y": 49.08979400216973 509 | }, 510 | { 511 | "Delta": 0, 512 | "EventType": "MouseUp", 513 | "Timestamp": 69520, 514 | "X": 50.07172329690469, 515 | "Y": 49.08979400216973 516 | }, 517 | { 518 | "EventType": "IME", 519 | "Msg": "start_\u6469\u5c14\u5c0f\u5de8\u87f9_end del=0 enter=1", 520 | "Timestamp": 71020 521 | }, 522 | { 523 | "Delta": 0, 524 | "EventType": "MouseDown", 525 | "Timestamp": 73520, 526 | "X": 59.23582689663112, 527 | "Y": 63.95591522463673 528 | }, 529 | { 530 | "Delta": 0, 531 | "EventType": "MouseUp", 532 | "Timestamp": 73550, 533 | "X": 59.23582689663112, 534 | "Y": 63.95591522463673 535 | }, 536 | { 537 | "Delta": 0, 538 | "EventType": "MouseDown", 539 | "Timestamp": 75050, 540 | "X": 49.786230214131976, 541 | "Y": 5.878599769651541 542 | }, 543 | { 544 | "Delta": 0, 545 | "EventType": "MouseUp", 546 | "Timestamp": 75080, 547 | "X": 49.786230214131976, 548 | "Y": 5.878599769651541 549 | }, 550 | { 551 | "Delta": 0, 552 | "EventType": "MouseDown", 553 | "Timestamp": 76580, 554 | "X": 50.39409688253383, 555 | "Y": 63.136387639196194 556 | }, 557 | { 558 | "Delta": 0, 559 | "EventType": "MouseUp", 560 | "Timestamp": 76610, 561 | "X": 50.39409688253383, 562 | "Y": 63.136387639196194 563 | }, 564 | { 565 | "Delta": 0, 566 | "EventType": "MouseDown", 567 | "Timestamp": 78110, 568 | "X": 49.05748564152946, 569 | "Y": 50.04431528336674 570 | }, 571 | { 572 | "Delta": 0, 573 | "EventType": "MouseUp", 574 | "Timestamp": 78140, 575 | "X": 49.05748564152946, 576 | "Y": 50.04431528336674 577 | }, 578 | { 579 | "EventType": "IME", 580 | "Msg": "start_\u65b0\u95fb\u542c\u6211\u7684_end del=0 enter=1", 581 | "Timestamp": 79640 582 | }, 583 | { 584 | "Delta": 0, 585 | "EventType": "MouseDown", 586 | "Timestamp": 82140, 587 | "X": 58.94871603707423, 588 | "Y": 63.210642649327156 589 | }, 590 | { 591 | "Delta": 0, 592 | "EventType": "MouseUp", 593 | "Timestamp": 82170, 594 | "X": 58.94871603707423, 595 | "Y": 63.210642649327156 596 | }, 597 | { 598 | "Delta": 0, 599 | "EventType": "MouseDown", 600 | "Timestamp": 83670, 601 | "X": 50.79365470351757, 602 | "Y": 5.362836959627446 603 | }, 604 | { 605 | "Delta": 0, 606 | "EventType": "MouseUp", 607 | "Timestamp": 83700, 608 | "X": 50.79365470351757, 609 | "Y": 5.362836959627446 610 | }, 611 | { 612 | "Delta": 0, 613 | "EventType": "MouseDown", 614 | "Timestamp": 85200, 615 | "X": 49.40403202357452, 616 | "Y": 63.19197229549763 617 | }, 618 | { 619 | "Delta": 0, 620 | "EventType": "MouseUp", 621 | "Timestamp": 85230, 622 | "X": 49.40403202357452, 623 | "Y": 63.19197229549763 624 | }, 625 | { 626 | "Delta": 0, 627 | "EventType": "MouseDown", 628 | "Timestamp": 86730, 629 | "X": 49.415327648861776, 630 | "Y": 50.180687708756224 631 | }, 632 | { 633 | "Delta": 0, 634 | "EventType": "MouseUp", 635 | "Timestamp": 86760, 636 | "X": 49.415327648861776, 637 | "Y": 50.180687708756224 638 | }, 639 | { 640 | "EventType": "IME", 641 | "Msg": "start_\u79d8\u5bc6\u524d\u5915_end del=0 enter=1", 642 | "Timestamp": 88260 643 | }, 644 | { 645 | "Delta": 0, 646 | "EventType": "MouseDown", 647 | "Timestamp": 90760, 648 | "X": 58.282264975020375, 649 | "Y": 62.96791003023799 650 | }, 651 | { 652 | "Delta": 0, 653 | "EventType": "MouseUp", 654 | "Timestamp": 90790, 655 | "X": 58.282264975020375, 656 | "Y": 62.96791003023799 657 | }, 658 | { 659 | "Delta": 0, 660 | "EventType": "MouseDown", 661 | "Timestamp": 92290, 662 | "X": 49.05222378161475, 663 | "Y": 5.31474601360528 664 | }, 665 | { 666 | "Delta": 0, 667 | "EventType": "MouseUp", 668 | "Timestamp": 92320, 669 | "X": 49.05222378161475, 670 | "Y": 5.31474601360528 671 | }, 672 | { 673 | "Delta": 0, 674 | "EventType": "MouseDown", 675 | "Timestamp": 93820, 676 | "X": 50.63474466209074, 677 | "Y": 63.174204062220866 678 | }, 679 | { 680 | "Delta": 0, 681 | "EventType": "MouseUp", 682 | "Timestamp": 93850, 683 | "X": 50.63474466209074, 684 | "Y": 63.174204062220866 685 | }, 686 | { 687 | "Delta": 0, 688 | "EventType": "MouseDown", 689 | "Timestamp": 95350, 690 | "X": 50.83579117170663, 691 | "Y": 50.42235372233915 692 | }, 693 | { 694 | "Delta": 0, 695 | "EventType": "MouseUp", 696 | "Timestamp": 95380, 697 | "X": 50.83579117170663, 698 | "Y": 50.42235372233915 699 | }, 700 | { 701 | "EventType": "IME", 702 | "Msg": "start_\u590f\u65e5\u97f3\u4e50\u4f1a_end del=0 enter=1", 703 | "Timestamp": 96880 704 | }, 705 | { 706 | "Delta": 0, 707 | "EventType": "MouseDown", 708 | "Timestamp": 99380, 709 | "X": 58.19024132827482, 710 | "Y": 63.10232287987206 711 | }, 712 | { 713 | "Delta": 0, 714 | "EventType": "MouseUp", 715 | "Timestamp": 99410, 716 | "X": 58.19024132827482, 717 | "Y": 63.10232287987206 718 | }, 719 | { 720 | "Delta": 0, 721 | "EventType": "MouseDown", 722 | "Timestamp": 100910, 723 | "X": 50.59064556881981, 724 | "Y": 5.668894692011916 725 | }, 726 | { 727 | "Delta": 0, 728 | "EventType": "MouseUp", 729 | "Timestamp": 100940, 730 | "X": 50.59064556881981, 731 | "Y": 5.668894692011916 732 | }, 733 | { 734 | "Delta": 0, 735 | "EventType": "MouseDown", 736 | "Timestamp": 102440, 737 | "X": 92.23472203594675, 738 | "Y": 4.0471963935919835 739 | }, 740 | { 741 | "Delta": 0, 742 | "EventType": "MouseUp", 743 | "Timestamp": 102470, 744 | "X": 92.23472203594675, 745 | "Y": 4.0471963935919835 746 | } 747 | ], 748 | "LoopDuration": 0, 749 | "LoopInterval": 0, 750 | "LoopIterations": 1, 751 | "LoopType": "TillLoopNumber", 752 | "MacroSchemaVersion": 2, 753 | "RestartPlayer": false, 754 | "RestartPlayerAfterMinutes": 60 755 | } -------------------------------------------------------------------------------- /json/辅助钓鱼.json: -------------------------------------------------------------------------------- 1 | { 2 | "Acceleration": 1, 3 | "CreationTime": "20210802T170045", 4 | "DoNotShowWindowOnFinish": false, 5 | "Events": [ 6 | { 7 | "Delta": 0, 8 | "EventType": "MouseDown", 9 | "Timestamp": 500, 10 | "X": 86.97508711514678, 11 | "Y": 68.05903979034065 12 | }, 13 | { 14 | "Delta": 0, 15 | "EventType": "MouseUp", 16 | "Timestamp": 530, 17 | "X": 86.97508711514678, 18 | "Y": 68.05903979034065 19 | }, 20 | { 21 | "Delta": 0, 22 | "EventType": "MouseDown", 23 | "Timestamp": 6530, 24 | "X": 85.73744294051615, 25 | "Y": 68.84149723989492 26 | }, 27 | { 28 | "Delta": 0, 29 | "EventType": "MouseUp", 30 | "Timestamp": 6560, 31 | "X": 85.73744294051615, 32 | "Y": 68.84149723989492 33 | }, 34 | { 35 | "Delta": 0, 36 | "EventType": "MouseDown", 37 | "Timestamp": 8620, 38 | "X": 86.94090408974637, 39 | "Y": 68.24710287904975 40 | }, 41 | { 42 | "Delta": 0, 43 | "EventType": "MouseUp", 44 | "Timestamp": 8650, 45 | "X": 86.94090408974637, 46 | "Y": 68.24710287904975 47 | }, 48 | { 49 | "Delta": 0, 50 | "EventType": "MouseDown", 51 | "Timestamp": 8950, 52 | "X": 9.165077434787175, 53 | "Y": 6.861847536217918 54 | }, 55 | { 56 | "Delta": 0, 57 | "EventType": "MouseUp", 58 | "Timestamp": 8980, 59 | "X": 9.165077434787175, 60 | "Y": 6.861847536217918 61 | }, 62 | { 63 | "Delta": 0, 64 | "EventType": "MouseDown", 65 | "Timestamp": 10980, 66 | "X": 50.97062055176875, 67 | "Y": 4.451772289697096 68 | }, 69 | { 70 | "Delta": 0, 71 | "EventType": "MouseUp", 72 | "Timestamp": 11010, 73 | "X": 50.97062055176875, 74 | "Y": 4.451772289697096 75 | } 76 | ], 77 | "LoopDuration": 0, 78 | "LoopInterval": 0, 79 | "LoopIterations": 1, 80 | "LoopType": "UntilStopped", 81 | "MacroSchemaVersion": 2, 82 | "RestartPlayer": false, 83 | "RestartPlayerAfterMinutes": 60 84 | } -------------------------------------------------------------------------------- /mole.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | # MIT License 5 | 6 | # Copyright (c) 2021 WH-2099 7 | 8 | # Permission is hereby granted, free of charge, to any person obtaining a copy 9 | # of this software and associated documentation files (the "Software"), to deal 10 | # in the Software without restriction, including without limitation the rights 11 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | # copies of the Software, and to permit persons to whom the Software is 13 | # furnished to do so, subject to the following conditions: 14 | 15 | # The above copyright notice and this permission notice shall be included in all 16 | # copies or substantial portions of the Software. 17 | 18 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | # SOFTWARE. 25 | 26 | 27 | import json 28 | import math 29 | from collections import UserList 30 | from dataclasses import dataclass 31 | from datetime import datetime, timedelta 32 | from enum import Enum 33 | from glob import glob 34 | from os import remove 35 | from pprint import pp 36 | from random import randint, uniform 37 | from sys import exit 38 | from time import sleep 39 | from typing import Iterable, Optional 40 | 41 | # 神奇密码 42 | magic_codes = { 43 | "黑森林要来啦", 44 | "摩尔小巨蟹", 45 | "秘密前夕", 46 | "艾米的礼物", 47 | "美图秀秀摩尔贴纸", 48 | "夏日音乐会", 49 | "音乐会剧透", 50 | "新闻听我的", 51 | "一起弹琴吧", 52 | "中国女足", 53 | "河南加油", 54 | } 55 | 56 | # 按钮位置,左上为 0.0 ,右下为 100.0 57 | button_positions = { 58 | "屏幕空白": (50.0, 5.0), 59 | "头像": (4.0, 7.0), 60 | "头像_便捷": (12.0, 94.0), 61 | "头像_精简": (20.0, 94.0), 62 | "头像_设置": (6.0, 49.0), 63 | "头像_设置_X": (92.5, 3.5), 64 | "头像_设置_X_确定": (58.5, 60.0), 65 | "头像_设置_基础设置": (95.0, 15.0), 66 | "头像_设置_基础设置_画面质量_流畅": (27.5, 57.0), 67 | "头像_设置_基础设置_渲染品质_低": (33.0, 66.0), 68 | "头像_设置_基础设置_刘海屏_关": (33.0, 75.5), 69 | "头像_设置_基础设置__帧数_低": (25.0, 21.0), 70 | "头像_设置_基础设置__最大视野范围_高": (42.0, 28.5), 71 | "头像_设置_基础设置__同屏人数_0": (29.0, 38.5), 72 | "头像_设置_视角设置": (95.0, 26.0), 73 | "头像_设置_视角设置_2.5D视角": (30.0, 47.0), 74 | "头像_设置_视角设置_3D视角": (65.0, 47.0), 75 | "头像_设置_社交设置": (95.0, 38.0), 76 | "商城": (24.0, 7.0), 77 | "商城_X": (92.0, 4.0), 78 | "商城_礼包": (7.0, 49.0), 79 | "超级拉姆": (29.0, 7.0), 80 | "超级拉姆_X": (92.0, 4.0), 81 | "超级拉姆_每日奖励": (20.0, 88.0), 82 | "超级拉姆_每日奖励_领取": (11.5, 60.0), 83 | "订单": (71.0, 7.0), 84 | "时报": (76.0, 7.0), 85 | "SMC": (81.0, 7.0), 86 | "SMC_X": (92.0, 4.0), 87 | "SMC_每日工资": (90.0, 92.5), 88 | "SMC_每日工资_马上领取": (50.0, 64.0), 89 | "SMC_农夫": (21.0, 53.0), 90 | "SMC_向导": (50.0, 53.0), 91 | "SMC_厨师": (79.0, 53.0), 92 | "脚印": (86.0, 7.0), 93 | "任务": (91.0, 7.0), 94 | "任务_X": (92.0, 4.0), 95 | "任务_向导派遣": (94.0, 67.0), 96 | "任务_向导派遣_接取任务": (74.5, 81.5), 97 | "任务_向导派遣_前往领奖": (74.5, 81.5), 98 | "任务_向导派遣_确认": (74.5, 81.5), 99 | "任务_向导派遣_领奖": (74.5, 81.5), 100 | "任务_向导派遣_任务_0": (75.5, 17.0), # 自上向下,从 0 递增 101 | "任务_向导派遣_任务_1": (75.5, 31.0), # 自上向下,从 0 递增 102 | "任务_向导派遣_任务_2": (75.5, 45.0), # 自上向下,从 0 递增 103 | "任务_向导派遣_任务_3": (75.5, 59.0), # 自上向下,从 0 递增 104 | "任务_向导派遣_任务_4": (75.5, 69.5), # 自上向下,从 0 递增 105 | "任务_向导派遣_任务__8": (75.5, 56.5), # 自上向下,从 0 递增 106 | "地图": (96.0, 7.0), 107 | "地图_X": (97.0, 5.5), 108 | "地图_切换": (6.0, 9.0), 109 | "地图_浆果丛林": (12.5, 58.0), 110 | "地图_摩尔拉雅": (20.0, 18.0), 111 | "地图_阳光牧场": (26.5, 58.5), 112 | "地图_阳光沙滩": (29.5, 78.5), 113 | "地图_前哨站": (41.0, 20.5), 114 | "地图_爱心街区": (43.0, 33.0), 115 | "地图_摩尔城堡": (56.5, 27.0), 116 | "地图_开心农场": (56.0, 76.0), 117 | "地图_淘淘乐街": (69.5, 48.5), 118 | "地图_随便逛逛": (77.0, 69.0), 119 | "地图_家园": (7.5, 79.5), 120 | "地图_小屋": (13.5, 79.5), 121 | "地图_餐厅": (19.5, 79.5), 122 | "地图_角色功能切换": (8.5, 93.0), 123 | "地图_角色_洛克": (19.0, 93.0), 124 | "地图_角色_尼克": (25.0, 93.0), 125 | "地图_角色_杰西": (31.0, 93.0), 126 | "地图_角色_丝尔特": (40.0, 93.0), 127 | "地图_角色_埃里克斯": (46.0, 93.0), 128 | "地图_角色_彩虹": (52.0, 93.0), 129 | "地图_角色_花婶": (58.0, 93.0), 130 | "地图_角色_克劳": (66.5, 93.0), 131 | "地图_角色_弗礼德": (72.5, 93.0), 132 | "地图_角色_琦琦": (78.0, 93.0), 133 | "地图_角色_艾尔": (83.5, 93.0), 134 | "地图_角色_艾米": (89.5, 93.0), 135 | "地图_角色_大力": (95.0, 93.0), 136 | "地图_角色__汤米": (43.0, 93.0), 137 | "地图_角色__梅森": (52.5, 93.0), 138 | "地图_角色__尤尤": (62.5, 93.0), 139 | "地图_角色__茜茜": (72.0, 93.0), 140 | "地图_角色__贝琪": (77.5, 93.0), 141 | "地图_角色__瑞琪": (87.5, 93.0), 142 | "地图_角色__菩提": (97.0, 93.0), 143 | "地图_功能_城堡许愿池": (19.0, 93.0), 144 | "地图_功能_泡泡龙": (29.0, 93.0), 145 | "地图_功能_扭蛋机": (34.5, 93.0), 146 | "地图_功能_抓娃娃机": (44.0, 93.0), 147 | "地图_功能_连连看": (50.0, 93.0), 148 | "地图_功能_消消乐": (55.5, 93.0), 149 | "地图_功能_茜茜占卜": (65.0, 93.0), 150 | "地图_功能_随便逛逛": (75.0, 93.0), 151 | "主线": (4.5, 21.0), 152 | "支线": (10.5, 21.0), 153 | "日常": (16.5, 21.0), 154 | "活动": (81.0, 15.5), 155 | "活动_X": (92.0, 4.0), 156 | "活动_活动": (5.5, 18.5), 157 | "活动_福利": (5.5, 35.5), 158 | "活动_福利_神奇密码": (16.0, 18.0), 159 | "活动_福利_神奇密码_神奇密码兑换": (50.0, 63.0), 160 | "活动_福利_神奇密码_神奇密码兑换_输入": (50.0, 49.5), 161 | "活动_福利_神奇密码_神奇密码兑换_确定": (58.5, 63.0), 162 | "扭蛋机": (86.0, 15.5), 163 | "新手目标": (91.0, 15.5), 164 | "店铺": (96.0, 15.5), 165 | "摇杆_中": (17.0, 75.5), 166 | "摇杆_上": (17.0, 65.0), 167 | "摇杆_下": (17.0, 86.5), 168 | "摇杆_左": (11.0, 75.5), 169 | "摇杆_右": (23.0, 75.5), 170 | "骑乘": (3.5, 59.0), 171 | "视角切换": (3.5, 70.0), 172 | "小镇": (30.0, 84.0), 173 | "好友": (30.0, 94.0), 174 | "表情": (37.0, 82.5), 175 | "动作": (44.5, 82.5), 176 | "动作_0": (16.5, 80.5), # 自左向右,自上而下,从 0 递增 177 | "动作_1": (23.0, 80.5), # 自左向右,自上而下,从 0 递增 178 | "动作_2": (29.5, 80.5), # 自左向右,自上而下,从 0 递增 179 | "动作_3": (16.5, 93.5), # 自左向右,自上而下,从 0 递增 180 | "动作_4": (23.0, 93.5), # 自左向右,自上而下,从 0 递增 181 | "动作_5": (29.5, 93.5), # 自左向右,自上而下,从 0 递增 182 | "投掷": (52.0, 82.5), 183 | "互动_主": (85.0, 75.0), 184 | "互动_副": (76.5, 65.0), 185 | "互动_钓鱼": (86.0, 69.0), 186 | "钓鱼_停止钓鱼": (8.5, 6.5), 187 | "钓鱼_鱼饵": (96.5, 70.0), 188 | "钓鱼_鱼饵_X": (84.5, 84.5), 189 | "钓鱼_鱼饵_0": (19.5, 93.0), # 自左向右,从 0 递增 190 | "钓鱼_鱼饵_1": (24.5, 93.0), # 自左向右,从 0 递增 191 | "钓鱼_鱼饵_2": (29.5, 93.0), # 自左向右,从 0 递增 192 | "背包": (81.0, 94.0), 193 | "家园": (86.0, 94.0), 194 | "家园_伐木林_镐": (32.0, 92.0), 195 | "家园_伐木林_斧": (38.0, 92.0), 196 | "家园_伐木林_镰": (44.0, 92.0), 197 | "拉姆": (91.0, 94.0), 198 | "装扮": (96.0, 94.0), 199 | "餐厅_提示_取消": (41.0, 60.0), 200 | "餐厅_提示_确认": (59.0, 60.0), 201 | "餐厅_菜谱": (96.0, 63.0), 202 | "餐厅_菜谱_前往": (25.5, 86.5), 203 | "餐厅_菜谱_快速烹饪": (25.5, 86.5), 204 | "餐厅_菜谱_快速制作": (19.0, 87.0), 205 | "餐厅_菜谱_制作": (31.5, 87.0), 206 | "餐厅_管理": (96.0, 72.5), 207 | "餐厅_管理_开始营业": (48.5, 78.0), 208 | "餐厅_管理_领取": (48.0, 77.5), 209 | "餐厅_布置": (96.0, 83.0), 210 | "餐厅_制作_点火": (81.0, 87.0), 211 | "发言": (46.0, 90.0), 212 | "许愿_继续": (70.0, 75.0), 213 | "许愿_选项_0": (82.5, 58.0), # 自下向上,从 0 递增 214 | "许愿_选项_1": (82.5, 45.5), # 自下向上,从 0 递增 215 | "许愿_选项_2": (82.2, 33.0), # 自下向上,从 0 递增 216 | "对话_继续": (70.0, 88.0), 217 | "对话_选项_0": (86.0, 57.0), # 自下向上,从 0 递增,0 特殊处理 218 | "对话_选项_1": (86.0, 49.5), # 自下向上,从 0 递增 219 | "对话_选项_2": (86.0, 39.5), # 自下向上,从 0 递增 220 | "对话_选项_3": (86.0, 29.5), # 自下向上,从 0 递增 221 | "对话_选项_4": (86.0, 19.5), # 自下向上,从 0 递增 222 | "对话_选项_5": (86.0, 9.5), # 自下向上,从 0 递增 223 | "发言_输入": (20.0, 95.5), 224 | "发言_发送": (43.5, 95.0), 225 | "发言_X": (48.5, 49.5), 226 | "发言_综合": (5.0, 13.5), 227 | "发言_跨服": (5.0, 22.5), 228 | "发言_本服": (5.0, 32.0), 229 | "发言_附近": (5.0, 41.5), 230 | "发言_小镇": (5.0, 51.0), 231 | "发言_私聊": (5.0, 60.0), 232 | "发言_系统": (5.0, 70.0), 233 | } 234 | 235 | # 华东位置,左上为 0.0 ,右下为 100.0 236 | slide_positions = { 237 | "头像_设置_基础设置": (50.0, 50.0), 238 | "任务_向导派遣": (50.0, 50.0), 239 | "餐厅_菜单": (68.0, 68.0), 240 | "对话_选项": (86.0, 9.5), 241 | "动作": (22.5, 87.5), 242 | } 243 | 244 | # 炒菜菜单 245 | stir_fry_menu = { 246 | "浆果捞": "逆-左下上下-顺-灭", 247 | "": "", 248 | } 249 | 250 | 251 | def change_speed(input: float) -> float: 252 | """将线性输入 [0.0, 1.0] 变速,非线性输出 [0.0, 1.0]""" 253 | return math.cos((input + 1) * math.pi) / 2.0 + 0.5 254 | 255 | 256 | @dataclass 257 | class Wait(object): 258 | """等待动作""" 259 | 260 | last_time: int # 持续时间,单位为 ms 261 | 262 | def generate(self) -> list: 263 | global timestamp_now 264 | timestamp_now += self.last_time 265 | return [] 266 | 267 | 268 | class MouseButton(Enum): 269 | """鼠标按钮枚举""" 270 | 271 | LEFT = "Mouse" 272 | RIGHT = "MouseRButton" 273 | MIDDLE = "MouseMButton" 274 | L = LEFT 275 | R = RIGHT 276 | M = MIDDLE 277 | 278 | 279 | @dataclass 280 | class Click(object): 281 | """点击动作""" 282 | 283 | x: float # X 坐标,单位为百分比 284 | y: float # Y 坐标,单位为百分比 285 | delay_time: int = 300 # 延迟时间,单位为 ms 286 | last_time: int = 30 # 持续时间,单位为 ms 287 | random_delta: float = 0.0 # 随机位移,单位为百分比 288 | click_times: int = 1 # 点击次数 289 | mouse_button: MouseButton = MouseButton.LEFT # 鼠标按键 290 | 291 | def generate(self) -> list[dict]: 292 | global timestamp_now 293 | l = [] 294 | 295 | if self.random_delta: 296 | x = self.x + uniform(-self.random_delta, self.random_delta) 297 | y = self.y + uniform(-self.random_delta, self.random_delta) 298 | else: 299 | x = self.x 300 | y = self.y 301 | 302 | for i in range(self.click_times): 303 | timestamp_now += self.delay_time 304 | mouse_down = { 305 | "Delta": 0, 306 | "EventType": self.mouse_button.value + "Down", 307 | "Timestamp": timestamp_now, 308 | "X": x, 309 | "Y": y, 310 | } 311 | l.append(mouse_down) 312 | 313 | timestamp_now += self.last_time 314 | 315 | mouse_up = { 316 | "Delta": 0, 317 | "EventType": self.mouse_button.value + "Up", 318 | "Timestamp": timestamp_now, 319 | "X": x, 320 | "Y": y, 321 | } 322 | l.append(mouse_up) 323 | 324 | return l 325 | 326 | 327 | class ClickButton(Click): 328 | """点击按钮""" 329 | 330 | def __init__(self, name: str, **kwargs) -> None: 331 | global button_positions 332 | kwargs.setdefault("delay_time", 1500) 333 | kwargs.setdefault("random_delta", 1.0) 334 | super().__init__(*button_positions[name], **kwargs) 335 | 336 | 337 | @dataclass 338 | class Drag(object): 339 | """拖动动作""" 340 | 341 | x0: float # 起始点 X 坐标,单位为百分比 342 | y0: float # 起始点 Y 坐标,单位为百分比 343 | x1: float # 终止点 X 坐标,单位为百分比 344 | y1: float # 终止点 Y 坐标,单位为百分比 345 | delay_time: int = 300 # 延迟时间,单位为 ms 346 | move_time: int = 1000 # 运动时间,单位为 ms 347 | interval_time: int = 50 # 间隔时间,单位为 ms 348 | keep_time: int = 30 # 维持时间,单位为 ms 349 | random_delta: float = 0.0 # 随机位移,单位为百分比 350 | mouse_button: MouseButton = MouseButton.LEFT # 鼠标按键 351 | 352 | def generate(self) -> list[dict]: 353 | global timestamp_now 354 | l = [] 355 | 356 | if self.random_delta: 357 | delta = uniform(-self.random_delta, self.random_delta) 358 | x0 = self.x0 + delta 359 | y0 = self.y0 + delta 360 | x1 = self.x1 + delta 361 | y1 = self.y1 + delta 362 | else: 363 | x0 = self.x0 364 | y0 = self.y0 365 | x1 = self.x1 366 | y1 = self.y1 367 | 368 | timestamp_now += self.delay_time 369 | 370 | mouse_down = { 371 | "Delta": 0, 372 | "EventType": self.mouse_button.value + "Down", 373 | "Timestamp": timestamp_now, 374 | "X": x0, 375 | "Y": y0, 376 | } 377 | l.append(mouse_down) 378 | 379 | dx = x1 - x0 380 | dy = y1 - y0 381 | total_steps = math.ceil(self.move_time / self.interval_time) 382 | for i in range(total_steps): 383 | progress = (i + 1) / total_steps 384 | progress = change_speed(progress) 385 | timestamp_now += self.interval_time 386 | 387 | mouse_move = { 388 | "Delta": 0, 389 | "EventType": "MouseMove", 390 | "Timestamp": timestamp_now, 391 | "X": x0 + dx * progress, 392 | "Y": y0 + dy * progress, 393 | } 394 | l.append(mouse_move) 395 | 396 | timestamp_now += self.keep_time 397 | 398 | mouse_up = { 399 | "Delta": 0, 400 | "EventType": self.mouse_button.value + "Up", 401 | "Timestamp": timestamp_now, 402 | "X": x1, 403 | "Y": y1, 404 | } 405 | l.append(mouse_up) 406 | 407 | return l 408 | 409 | 410 | class MoveUp(Drag): 411 | """向上移动""" 412 | 413 | def __init__(self, keep_time: int, **kwargs) -> None: 414 | kwargs.setdefault("delay_time", 500) 415 | kwargs.setdefault("move_time", 500) 416 | kwargs.setdefault("random_delta", 1.0) 417 | super().__init__( 418 | *button_positions["摇杆_中"], 419 | *button_positions["摇杆_上"], 420 | keep_time=keep_time, 421 | **kwargs, 422 | ) 423 | 424 | 425 | class MoveDown(Drag): 426 | """向下移动""" 427 | 428 | def __init__(self, keep_time: int, **kwargs) -> None: 429 | kwargs.setdefault("delay_time", 500) 430 | kwargs.setdefault("move_time", 500) 431 | kwargs.setdefault("random_delta", 1.0) 432 | super().__init__( 433 | *button_positions["摇杆_中"], 434 | *button_positions["摇杆_下"], 435 | keep_time=keep_time, 436 | **kwargs, 437 | ) 438 | 439 | 440 | class MoveLeft(Drag): 441 | """向左移动""" 442 | 443 | def __init__(self, keep_time: int, **kwargs) -> None: 444 | kwargs.setdefault("delay_time", 500) 445 | kwargs.setdefault("move_time", 500) 446 | kwargs.setdefault("random_delta", 1.0) 447 | super().__init__( 448 | *button_positions["摇杆_中"], 449 | *button_positions["摇杆_左"], 450 | keep_time=keep_time, 451 | **kwargs, 452 | ) 453 | 454 | 455 | class MoveRight(Drag): 456 | """向右移动""" 457 | 458 | def __init__(self, keep_time: int, **kwargs) -> None: 459 | kwargs.setdefault("move_time", 500) 460 | kwargs.setdefault("random_delta", 1.0) 461 | super().__init__( 462 | *button_positions["摇杆_中"], 463 | *button_positions["摇杆_右"], 464 | keep_time=keep_time, 465 | **kwargs, 466 | ) 467 | 468 | 469 | @dataclass 470 | class Slide(object): 471 | """滑动动作""" 472 | 473 | delta: int 474 | x: float # X 坐标,单位为百分比 475 | y: float # Y 坐标,单位为百分比 476 | delay_time: int = 500 # 延迟时间,单位为 ms 477 | last_time: int = 3000 # 持续时间,单位为 ms 478 | random_delta: float = 0.0 # 随机位移,单位为百分比 479 | slide_times: int = 1 # 滑动次数 480 | 481 | def generate(self) -> list[dict]: 482 | global timestamp_now 483 | l = [] 484 | 485 | if self.random_delta: 486 | x = self.x + uniform(-self.random_delta, self.random_delta) 487 | y = self.y + uniform(-self.random_delta, self.random_delta) 488 | else: 489 | x = self.x 490 | y = self.y 491 | 492 | for i in range(self.slide_times): 493 | timestamp_now += self.delay_time 494 | mouse_wheel = { 495 | "Delta": self.delta, 496 | "EventType": "MouseWheel", 497 | "Timestamp": timestamp_now, 498 | "X": x, 499 | "Y": y, 500 | } 501 | l.append(mouse_wheel) 502 | timestamp_now += self.last_time 503 | 504 | return l 505 | 506 | 507 | class SlideDown(Slide): 508 | """向下滑动""" 509 | 510 | def __init__(self, name: str, **kwargs) -> None: 511 | kwargs["random_delta"] = 0.5 512 | super().__init__(-120, *slide_positions[name], **kwargs) 513 | 514 | 515 | class SlideUp(Slide): 516 | """向上滑动""" 517 | 518 | def __init__(self, name: str, **kwargs) -> None: 519 | kwargs["random_delta"] = 0.5 520 | super().__init__(120, *slide_positions[name], **kwargs) 521 | 522 | 523 | @dataclass 524 | class DrawCircle(object): 525 | """画圆""" 526 | 527 | x: float # 圆心 X 坐标,单位为百分比 528 | y: float # 圆心 Y 坐标,单位为百分比 529 | r: float # 半径,单位为百分比t 530 | clockwise: bool = False # 转动方向,默认逆时针 531 | turns_number: int = 1 # 转动圈数 532 | delay_time: int = 300 # 延迟时间,单位为 ms 533 | last_time: int = 1000 # 持续时间,单位为 ms 534 | random_delta: float = 0.0 # 随机位移,单位为百分比 535 | fragment_number: int = 36 # 一圈的分段数量 536 | mouse_button: MouseButton = MouseButton.LEFT # 鼠标按键 537 | 538 | def _move(self, _x: float, _y: float) -> dict: 539 | global timestamp_now 540 | 541 | if self.random_delta: 542 | _x += uniform(-self.random_delta, self.random_delta) 543 | _y += uniform(-self.random_delta, self.random_delta) 544 | 545 | mouse_move = { 546 | "Delta": 0, 547 | "EventType": "MouseMove", 548 | "Timestamp": timestamp_now, 549 | "X": _x, 550 | "Y": _y, 551 | } 552 | return mouse_move 553 | 554 | def generate(self) -> list[dict]: 555 | global timestamp_now 556 | l = [] 557 | 558 | timestamp_now += self.delay_time 559 | mouse_down = { 560 | "Delta": 0, 561 | "EventType": self.mouse_button.value + "Down", 562 | "Timestamp": timestamp_now, 563 | "X": self.x + self.r, 564 | "Y": self.y, 565 | } 566 | l.append(mouse_down) 567 | 568 | d_time = self.last_time // (self.turns_number * self.fragment_number) 569 | end_time = timestamp_now + self.last_time 570 | theta = 0.0 571 | d_theta = math.pi * 2 / self.fragment_number 572 | d_theta = -d_theta if self.clockwise else +d_theta # 数学坐标系顺时针为负向 573 | _x = self.x 574 | _y = self.y 575 | for i in range(self.turns_number * self.fragment_number): 576 | timestamp_now += d_time 577 | theta += d_theta 578 | _x = self.x + math.cos(theta) * self.r 579 | _y = self.y - math.sin(theta) * self.r # 屏幕坐标系需要翻转 y 轴 580 | mouse_move = self._move(_x, _y) 581 | l.append(mouse_move) 582 | 583 | timestamp_now = end_time 584 | 585 | mouse_up = { 586 | "Delta": 0, 587 | "EventType": self.mouse_button.value + "Up", 588 | "Timestamp": timestamp_now, 589 | "X": _x, 590 | "Y": _y, 591 | } 592 | l.append(mouse_up) 593 | 594 | return l 595 | 596 | 597 | @dataclass 598 | class Input(object): 599 | string: str 600 | backspace: int = 0 # 退格次数 601 | enter: int = 0 # 回车次数 602 | delay_time: int = 1500 # 延迟时间,单位为 ms 603 | last_time: int = 1000 # 持续时间,单位为 ms 604 | 605 | def generate(self) -> list[dict]: 606 | global timestamp_now 607 | l = [] 608 | 609 | timestamp_now += self.delay_time 610 | input_message = { 611 | "EventType": "IME", 612 | "Msg": f"start_{self.string}_end del={self.backspace} enter={self.enter}", 613 | "Timestamp": timestamp_now, 614 | } 615 | l.append(input_message) 616 | timestamp_now += self.last_time 617 | 618 | return l 619 | 620 | 621 | class ActionChain(UserList): 622 | """动作链""" 623 | 624 | def generate(self) -> list[dict]: 625 | l = [] 626 | for action in self.data: 627 | l += action.generate() 628 | return l 629 | 630 | def __add__(self, other: Iterable) -> "ActionChain": 631 | result = ActionChain() 632 | result.extend(self) 633 | result.extend(other) 634 | return result 635 | 636 | def __mul__(self, other: int) -> "ActionChain": 637 | result = ActionChain() 638 | result.data = self.data * other 639 | return result 640 | 641 | 642 | class Pick(ActionChain): 643 | """采集""" 644 | 645 | def __init__(self) -> None: 646 | super().__init__() 647 | self.data += [ 648 | ClickButton("互动_主"), 649 | Wait(3000), 650 | ] 651 | 652 | 653 | class ResetVisualAngel(ActionChain): 654 | """重置视角""" 655 | 656 | def __init__(self) -> None: 657 | super().__init__() 658 | self.data += [ 659 | ClickButton("视角切换"), 660 | Wait(1000), 661 | ClickButton("视角切换"), 662 | Wait(1000), 663 | ] 664 | 665 | 666 | class GetOff(ActionChain): 667 | """下车 668 | 动作会强制取消骑乘状态""" 669 | 670 | def __init__(self) -> None: 671 | super().__init__() 672 | self.data += [ 673 | ClickButton("动作"), 674 | ClickButton("动作_4"), 675 | ] 676 | 677 | 678 | class ClickArea(ActionChain): 679 | """区域点击""" 680 | 681 | def __init__( 682 | self, 683 | x0: float, 684 | y0: float, 685 | x1: float, 686 | y1: float, 687 | delta: float = 10.0, 688 | interval_time: int = 100, 689 | **kwargs, 690 | ) -> None: 691 | super().__init__() 692 | for i in range(int((x1 - x0) // delta)): 693 | x = x0 + (i + 1) * delta 694 | for j in range(int((y1 - y0) // delta)): 695 | y = y0 + (j + 1) * delta 696 | self.data.append( 697 | Click(x, y, delay_time=interval_time + randint(0, 30), **kwargs) 698 | ) 699 | self.data.append(Wait(1000)) 700 | 701 | 702 | class ExchangeMagicCode(ActionChain): 703 | """兑换神奇密码""" 704 | 705 | def __init__(self, codes: Optional[Iterable[str]] = None) -> None: 706 | super().__init__() 707 | self.data += [ 708 | ClickButton("活动"), 709 | ClickButton("活动_福利"), 710 | ClickButton("活动_福利_神奇密码"), 711 | ClickButton("活动_福利_神奇密码_神奇密码兑换"), 712 | ] 713 | if not codes: 714 | global magic_codes 715 | codes = magic_codes 716 | for code in codes: 717 | self.do(code) 718 | self.data += [ 719 | ClickButton("活动_X"), 720 | Wait(1000), 721 | ] 722 | 723 | def do(self, code: str) -> None: 724 | self.data += [ 725 | ClickButton("活动_福利_神奇密码_神奇密码兑换"), 726 | ClickButton("活动_福利_神奇密码_神奇密码兑换_输入"), 727 | Input(code, enter=1), 728 | ClickButton("活动_福利_神奇密码_神奇密码兑换_确定"), 729 | ClickButton("屏幕空白"), 730 | ] 731 | 732 | 733 | class Color(Enum): 734 | """颜色 HEX 枚举""" 735 | 736 | BLACK = "#000000" 737 | SILVER = "#C0C0C0" 738 | GRAY = "#808080" 739 | WHITE = "#FFFFFF" 740 | MAROON = "#800000" 741 | RED = "#FF0000" 742 | PURPLE = "#800080" 743 | FUCHSIA = "#FF00FF" 744 | GREEN = "#008000" 745 | LIME = "#00FF00" 746 | OLIVE = "#808000" 747 | NAVY = "#000080" 748 | YELLOW = "#FFFF00" 749 | BLUE = "#0000FF" 750 | TEAL = "#008080" 751 | AQUA = "#00FFFF" 752 | 753 | 754 | class Speak(ActionChain): 755 | """发言""" 756 | 757 | def __init__( 758 | self, word: str, channel: str = "附近", color: Optional[Color] = None 759 | ) -> None: 760 | if color: 761 | word = f'{word}' 762 | self.data += [ 763 | ClickButton("发言_输入"), 764 | ClickButton("发言_" + channel), 765 | Input(word), 766 | ClickButton("发言_发送"), 767 | ClickButton("发言_X"), 768 | ] 769 | 770 | 771 | class ChangeMap(ActionChain): 772 | """更换地图""" 773 | 774 | def __init__(self, name: str, last_time: int = 2 * 60 * 1000) -> None: 775 | super().__init__() 776 | self.data += [ 777 | ClickButton("地图"), 778 | ClickButton("地图_" + name, delay_time=2000), 779 | Wait(last_time), 780 | # Wait(last_time // 2), 781 | # ClickButton("地图"), 782 | # ClickButton("地图_" + name), 783 | # Wait(last_time // 2), 784 | ] 785 | 786 | 787 | class Navigate2NPC(ActionChain): 788 | """NPC 导航""" 789 | 790 | def __init__(self, name: str, last_time: int = 2 * 60 * 1000) -> None: 791 | super().__init__() 792 | _y = button_positions["地图_角色功能切换"][1] 793 | self.data += [ 794 | ClickButton("地图"), 795 | Drag(20.0, _y, 80.0, _y), 796 | Wait(1000), 797 | ] 798 | 799 | # 需要翻页 800 | if name in ( 801 | "汤米", 802 | "梅森", 803 | "尤尤", 804 | "茜茜", 805 | "贝琪", 806 | "瑞琪", 807 | "菩提", 808 | ): 809 | name = "_" + name 810 | self.data += [ 811 | Drag(80.0, _y, 20.0, _y), 812 | Wait(1000), 813 | ] 814 | 815 | self.data += [ 816 | ClickButton("地图_角色_" + name), 817 | Wait(last_time), 818 | ] 819 | if name != "克劳": 820 | # 通过重进对话来刷新选项并重置位置 821 | # 克劳处空间狭小,可能卡住 822 | self.data += [ 823 | ClickButton("对话_选项_0"), 824 | ClickButton("互动_主"), 825 | Wait(3000), 826 | ClickButton("对话_继续"), 827 | Wait(2000), 828 | ] 829 | 830 | 831 | class Navigate2Feature(ActionChain): 832 | """功能导航""" 833 | 834 | def __init__(self, name: str, last_time: int = 2 * 60 * 1000) -> None: 835 | super().__init__() 836 | self.data += [ 837 | ClickButton("地图"), 838 | ClickButton("地图_角色功能切换"), 839 | ClickButton("地图_功能_" + name), 840 | Wait(last_time), 841 | ] 842 | 843 | 844 | class InitSettings(ActionChain): 845 | """初始化设置""" 846 | 847 | def __init__(self) -> None: 848 | super().__init__() 849 | self.data += [ 850 | ClickButton("头像"), 851 | ClickButton("头像_精简"), 852 | ClickButton("头像_便捷"), 853 | ClickButton("头像_设置"), 854 | ClickButton("头像_设置_基础设置"), 855 | ClickButton("头像_设置_基础设置_画面质量_流畅"), 856 | ClickButton("头像_设置_基础设置_渲染品质_低"), 857 | ClickButton("头像_设置_基础设置_刘海屏_关"), 858 | SlideDown("头像_设置_基础设置", slide_times=3), 859 | ClickButton("头像_设置_基础设置__帧数_低"), 860 | ClickButton("头像_设置_基础设置__最大视野范围_高"), 861 | ClickButton("头像_设置_基础设置__同屏人数_0", random_delta=0.0), 862 | ClickButton("头像_设置_X"), 863 | ClickButton("头像_设置_X_确定"), 864 | Wait(2000), 865 | ClickButton("屏幕空白"), 866 | ResetVisualAngel(), 867 | Wait(1000), 868 | ] 869 | 870 | 871 | class Divine(ActionChain): 872 | """占卜""" 873 | 874 | 确认结果 = (84.5, 63.0) 875 | 876 | def __init__(self, change_map: bool = True) -> None: 877 | super().__init__() 878 | if change_map: 879 | self.data.append(ChangeMap("摩尔拉雅")) 880 | 881 | self.data.append(Navigate2Feature("茜茜占卜", 30 * 1000)) 882 | self.refresh_conversation(5) 883 | self.data += [ 884 | ClickButton("对话_选项_3"), 885 | Wait(1500), 886 | Drag( 887 | uniform(40.0, 50.0), 888 | uniform(60.0, 70.0), 889 | uniform(50.0, 60.0), 890 | uniform(70.0, 80.0), 891 | random_delta=1.0, 892 | ), 893 | Wait(5000), 894 | ClickButton("屏幕空白"), 895 | Wait(3000), 896 | Click(*self.确认结果, random_delta=0.5), 897 | ChangeMap("摩尔拉雅", 30 * 1000), 898 | ] 899 | 900 | def refresh_conversation(self, n: int) -> None: 901 | """重复进出对话,刷新对话选项""" 902 | for i in range(n): 903 | self.data += [ 904 | ClickButton("对话_选项_0"), # 重复进出对话,刷新对话选项 905 | Wait(3000), 906 | ClickButton("互动_主"), 907 | ClickButton("对话_继续"), 908 | Wait(2000), 909 | ] 910 | 911 | 912 | class MakeWish(ActionChain): 913 | """许愿""" 914 | 915 | def __init__(self, change_map: bool = True) -> None: 916 | super().__init__() 917 | if change_map: 918 | self.data.append(ChangeMap("爱心街区")) 919 | 920 | self.data += [ 921 | Navigate2Feature("城堡许愿池", 30000), 922 | ClickButton("互动_主"), 923 | Wait(3000), 924 | ClickButton("许愿_继续"), 925 | ClickButton("许愿_选项_0"), 926 | ClickButton("屏幕空白"), 927 | Wait(1000), 928 | ClickButton("互动_主"), 929 | Wait(10000), 930 | ClickButton("许愿_继续"), 931 | ClickButton(f"许愿_选项_{randint(0, 2)}"), 932 | ClickButton("许愿_继续"), 933 | ClickButton("许愿_继续"), 934 | Wait(1000), 935 | ] 936 | 937 | 938 | class GuiderMission(ActionChain): 939 | """向导任务 940 | 穿向导服 941 | 默认选摩尔城堡的三个任务""" 942 | 943 | def __init__(self, change_map: bool = True) -> None: 944 | super().__init__() 945 | if change_map: 946 | self.data.append(ChangeMap("摩尔城堡")) 947 | 948 | self.data += [ 949 | ClickButton("任务"), 950 | ClickButton("任务_向导派遣"), 951 | ClickButton("任务_向导派遣_接取任务"), 952 | Wait(10 * 1000), 953 | ClickButton("对话_继续"), 954 | ClickButton("对话_选项_3"), 955 | Wait(1000), 956 | ClickButton("任务_向导派遣_任务_0"), 957 | ClickButton("任务_向导派遣_任务_4"), 958 | SlideDown("任务_向导派遣"), 959 | SlideDown("任务_向导派遣"), 960 | SlideDown("任务_向导派遣"), 961 | ClickButton("任务_向导派遣_任务__8"), 962 | ClickButton("任务_向导派遣_确认"), 963 | ClickButton("屏幕空白"), 964 | Wait(1000), 965 | ] 966 | 967 | self.do() # 接取任务后就在摩尔城堡,无须换图 968 | 969 | self.data += [ 970 | ClickButton("互动_主"), 971 | ClickButton("对话_继续"), 972 | ClickButton("对话_选项_3"), 973 | ClickButton("任务_向导派遣_领奖"), 974 | ClickButton("屏幕空白"), 975 | Wait(1000), 976 | ] 977 | 978 | def do(self, where: Optional[str] = None) -> None: 979 | if where: 980 | self.data.append(ChangeMap(where)) 981 | 982 | self.data += [ 983 | ClickButton("动作"), 984 | ClickButton("动作_2"), 985 | Wait(20000), 986 | Wait(1000), 987 | ] 988 | 989 | 990 | class GatherForest(ActionChain): 991 | """伐木林资源采集 992 | 不保证全部采集,但刷满 SMC 经验足以""" 993 | 994 | def __init__(self, change_map: bool = True) -> None: 995 | super().__init__() 996 | 997 | # TODO: 怎么到伐木林??? 998 | if change_map: 999 | pass 1000 | 1001 | self.data += [ 1002 | MoveRight(20 * 1000), 1003 | MoveUp(3000), 1004 | ] 1005 | n = 5 1006 | for i in range(n): 1007 | self.do(n - i) 1008 | self.data.append(MoveDown(i * 2000)) 1009 | self.do(n - i) 1010 | self.data.append(MoveLeft(i * 2000)) 1011 | self.do(n - i) 1012 | self.data.append(MoveUp(i * 1000)) 1013 | self.do(n - i) 1014 | self.data.append(MoveRight(i * 1000)) 1015 | 1016 | def do(self, n: int) -> None: 1017 | for i in range(n): 1018 | self.data += [ 1019 | ClickButton("家园_伐木林_镐"), 1020 | ClickButton("互动_主", delay_time=2000, click_times=3), 1021 | ClickButton("家园_伐木林_斧"), 1022 | ClickButton("互动_主", delay_time=2000, click_times=5), 1023 | ClickButton("家园_伐木林_镰"), 1024 | ClickButton("互动_主", delay_time=2000, click_times=7), 1025 | ] 1026 | 1027 | 1028 | class GatherMoerlaya(ActionChain): 1029 | """摩尔拉雅资源采集 1030 | 5 个白浆果 1031 | 夜间 5轮""" 1032 | 1033 | def __init__(self, change_map: bool = True, n: int = 5) -> None: 1034 | super().__init__() 1035 | if change_map: 1036 | self.data.append(ChangeMap("摩尔拉雅")) 1037 | 1038 | for i in range(5): 1039 | self.do() 1040 | self.data.append(Wait(1000)) 1041 | 1042 | def do(self) -> None: 1043 | self.data += [ 1044 | GetOff(), 1045 | ClickButton("骑乘"), 1046 | MoveUp(500), 1047 | MoveRight(1400), 1048 | Pick(), 1049 | ClickButton("骑乘"), 1050 | MoveLeft(2200), 1051 | MoveDown(4200), 1052 | Pick(), 1053 | ClickButton("骑乘"), 1054 | MoveRight(3100), 1055 | MoveDown(4500), 1056 | MoveRight(500), 1057 | Pick(), 1058 | Navigate2NPC("茜茜", 20 * 1000), 1059 | ClickButton("对话_选项_0"), 1060 | MoveRight(100), 1061 | MoveDown(1200), 1062 | Pick(), 1063 | ClickButton("骑乘"), 1064 | MoveRight(4300), 1065 | MoveUp(500), 1066 | MoveRight(300), 1067 | Pick(), 1068 | ChangeMap("摩尔拉雅", 25 * 1000), 1069 | ] 1070 | 1071 | 1072 | class GatherQianShaoZhan(ActionChain): 1073 | """前哨站资源采集 1074 | 13 个黑浆果 1075 | 1 个草丛(剩余两个草丛距离远,而黑浆果刷新快,暂时不采集) 1076 | 夜间 5 轮""" 1077 | 1078 | def __init__(self, change_map: bool = True, n: int = 5) -> None: 1079 | super().__init__() 1080 | if change_map: 1081 | self.data.append(ChangeMap("前哨站")) 1082 | 1083 | self.data += [ 1084 | Navigate2NPC("瑞琪", 30 * 1000), 1085 | ClickButton("对话_选项_0"), 1086 | ClickButton("骑乘"), 1087 | MoveDown(1300), 1088 | MoveRight(3500), 1089 | MoveUp(1000), 1090 | ] 1091 | for i in range(n): 1092 | self.do() 1093 | self.data.append(Wait(1000)) 1094 | 1095 | def do(self) -> None: 1096 | """13 个黑浆果""" 1097 | self.data += [ 1098 | Pick(), 1099 | ClickButton("骑乘"), 1100 | MoveRight(4100), 1101 | MoveDown(3850), 1102 | Pick(), 1103 | ClickButton("骑乘"), 1104 | MoveRight(4950), 1105 | MoveUp(200), 1106 | Pick(), 1107 | ClickButton("骑乘"), 1108 | MoveRight(350), 1109 | MoveUp(3800), 1110 | Pick(), 1111 | ClickButton("骑乘"), 1112 | MoveRight(250), 1113 | Pick(), 1114 | ClickButton("骑乘"), 1115 | MoveDown(400), 1116 | MoveRight(650), 1117 | Pick(), 1118 | ClickButton("骑乘"), 1119 | MoveDown(3300), 1120 | Pick(), 1121 | ClickButton("骑乘"), 1122 | MoveDown(500), 1123 | MoveRight(450), 1124 | Pick(), 1125 | ClickButton("骑乘"), 1126 | MoveDown(1350), 1127 | MoveLeft(50), 1128 | Pick(), 1129 | ClickButton("骑乘"), 1130 | MoveDown(5200), 1131 | MoveLeft(11050), 1132 | Pick(), 1133 | ClickButton("骑乘"), 1134 | MoveLeft(3100), 1135 | MoveUp(1500), 1136 | Pick(), 1137 | ClickButton("骑乘"), 1138 | MoveRight(100), 1139 | MoveUp(2000), 1140 | Pick(), 1141 | ClickButton("骑乘"), 1142 | MoveUp(1300), 1143 | MoveRight(900), 1144 | Pick(), 1145 | ClickButton("骑乘"), 1146 | MoveRight(500), 1147 | MoveUp(4500), 1148 | Wait(5000), 1149 | ] 1150 | 1151 | 1152 | class GatherNight(ActionChain): 1153 | """夜晚资源采集 1154 | 摩尔拉雅资源采集 + 前哨站资源采集""" 1155 | 1156 | def __init__(self) -> None: 1157 | super().__init__() 1158 | self.data += [ 1159 | GatherMoerlaya(), 1160 | GatherQianShaoZhan(), 1161 | Wait(1000), 1162 | ] 1163 | 1164 | 1165 | class GatherJiangGuoCongLin(ActionChain): 1166 | """浆果丛林资源采集 1167 | 6 个红浆果 1168 | 5 个橙浆果 1169 | 5 个草丛""" 1170 | 1171 | def __init__(self, change_map: bool = True, n: int = 5) -> None: 1172 | super().__init__() 1173 | if change_map: 1174 | self.data.append(ChangeMap("浆果丛林")) 1175 | 1176 | if n == 1: 1177 | self.do() 1178 | else: 1179 | for i in range(n): 1180 | self.do() 1181 | self.data.append(Wait(60 * 60 * 1000)) 1182 | 1183 | self.data.append(Wait(1000)) 1184 | 1185 | def do(self) -> None: 1186 | self.data += [ 1187 | GetOff(), 1188 | ClickButton("骑乘"), 1189 | MoveDown(2100), 1190 | Pick(), 1191 | ClickButton("骑乘"), 1192 | MoveLeft(1600), 1193 | MoveUp(1800), 1194 | MoveRight(500), 1195 | Pick(), 1196 | ClickButton("骑乘"), 1197 | MoveLeft(1400), 1198 | MoveUp(1200), 1199 | Pick(), 1200 | ClickButton("骑乘"), 1201 | MoveUp(1400), 1202 | MoveRight(2000), 1203 | Pick(), 1204 | GetOff(), 1205 | ClickButton("骑乘"), 1206 | MoveRight(1500), 1207 | MoveUp(1000), 1208 | MoveRight(1400), 1209 | Pick(), 1210 | ClickButton("骑乘"), 1211 | MoveUp(1100), 1212 | MoveRight(1900), 1213 | Pick(), 1214 | ClickButton("骑乘"), 1215 | MoveUp(1300), 1216 | MoveRight(400), 1217 | Pick(), 1218 | ClickButton("骑乘"), 1219 | MoveUp(900), 1220 | Pick(), 1221 | ClickButton("骑乘"), 1222 | ChangeMap("浆果丛林", 12000), 1223 | GetOff(), 1224 | ClickButton("骑乘"), 1225 | MoveDown(700), 1226 | MoveLeft(9000), 1227 | MoveDown(200), 1228 | Pick(), 1229 | ClickButton("骑乘"), 1230 | MoveUp(400), 1231 | MoveLeft(800), 1232 | Pick(), 1233 | ClickButton("骑乘"), 1234 | MoveUp(3100), 1235 | MoveLeft(700), 1236 | Pick(), 1237 | ClickButton("骑乘"), 1238 | MoveRight(800), 1239 | MoveUp(1900), 1240 | Pick(), 1241 | ClickButton("骑乘"), 1242 | MoveUp(500), 1243 | MoveLeft(900), 1244 | Pick(), 1245 | ClickButton("骑乘"), 1246 | MoveLeft(1600), 1247 | Pick(), 1248 | ClickButton("骑乘"), 1249 | MoveDown(1100), 1250 | Pick(), 1251 | ClickButton("骑乘"), 1252 | MoveDown(900), 1253 | Pick(), 1254 | ChangeMap("浆果丛林", 20000), 1255 | ] 1256 | 1257 | 1258 | class GatherChengBaoArea(ActionChain): 1259 | """TODO: 城堡区资源采集""" 1260 | 1261 | def __init__(self, change_map: bool = True, n: int = 1) -> None: 1262 | super().__init__() 1263 | for i in range(n): 1264 | self.do() 1265 | self.data.append(Wait(1000)) 1266 | 1267 | def do(self) -> None: 1268 | self.data += [ 1269 | Pick(), 1270 | ClickButton("骑乘"), 1271 | ] 1272 | 1273 | 1274 | class GatherMuChangArea(ActionChain): 1275 | """TODO: 牧场区资源采集""" 1276 | 1277 | def __init__(self, change_map: bool = True, n: int = 1) -> None: 1278 | super().__init__() 1279 | for i in range(n): 1280 | self.do() 1281 | self.data.append(Wait(1000)) 1282 | 1283 | def do(self) -> None: 1284 | self.data += [ 1285 | Pick(), 1286 | ClickButton("骑乘"), 1287 | ] 1288 | 1289 | 1290 | class GatherMapResouce(ActionChain): 1291 | """TODO: 日常资源采集""" 1292 | 1293 | def __init__(self) -> None: 1294 | super().__init__() 1295 | self.data += [ 1296 | GatherJiangGuoCongLin(), 1297 | ] 1298 | 1299 | 1300 | class WrappingGift(ActionChain): 1301 | """TODO: 包装礼物""" 1302 | 1303 | def __init__(self, change_map: bool = True): 1304 | super().__init__() 1305 | if change_map: 1306 | self.data.append(ChangeMap("开心街区")) 1307 | 1308 | self.data += [ 1309 | Navigate2NPC("琦琦"), 1310 | ClickButton("对话"), 1311 | ] 1312 | 1313 | 1314 | class Talk2NPC(ActionChain): 1315 | """NPC 对话好感度""" 1316 | 1317 | NPCs = { 1318 | # "姓名": 转场耗时(单位 ms) 1319 | "杰西": 10 * 1000, 1320 | "洛克": 10 * 1000, 1321 | "尼克": 5000, 1322 | "埃里克斯": 10 * 1000, 1323 | "丝尔特": 5000, 1324 | "花婶": 10 * 1000, 1325 | "琦琦": 25 * 1000, 1326 | "艾米": 10 * 1000, 1327 | "汤米": 15 * 1000, 1328 | "克劳": 100 * 1000, 1329 | "弗礼德": 100 * 1000, 1330 | "茜茜": 120 * 1000, 1331 | "贝琪": 30 * 1000, 1332 | "艾尔": 150 * 1000, 1333 | "尤尤": 150 * 1000, 1334 | "菩提": 35 * 1000, 1335 | "梅森": 40 * 1000, 1336 | "彩虹": 100 * 1000, 1337 | "瑞琪": 120 * 1000, 1338 | } 1339 | 1340 | def __init__(self, change_map: bool = True) -> None: 1341 | super().__init__() 1342 | if change_map: 1343 | self.data.append(ChangeMap("摩尔城堡")) 1344 | 1345 | for name, time in self.NPCs.items(): 1346 | self.data.append(Navigate2NPC(name, time)) 1347 | self.do(name) 1348 | self.data.append(Wait(1000)) 1349 | 1350 | def next(self) -> None: 1351 | self.data += [ 1352 | ClickButton("对话_选项_0"), 1353 | ClickButton("对话_选项_1", delay_time=300), 1354 | ClickButton("对话_继续"), 1355 | ] 1356 | 1357 | def do(self, name: str) -> None: 1358 | choice = { 1359 | "杰西": 2, 1360 | "琦琦": 2, 1361 | } 1362 | n = choice.get(name, 1) 1363 | self.data += [ 1364 | SlideDown("对话_选项"), # 应对 NPC 对话选项多于 6 个的情况 1365 | ClickButton("对话_选项_" + str(n)), 1366 | ClickButton("对话_继续"), 1367 | ] 1368 | for i in range(3): 1369 | self.next() 1370 | self.data.append(Wait(1000)) 1371 | 1372 | 1373 | class StirFry(ActionChain): 1374 | """TODO: 炒菜""" 1375 | 1376 | operation_dict = { 1377 | "-": Wait(5000), 1378 | "上": Drag( 1379 | 50.0, 65.0, 50.0, 35.0, delay_time=1000, move_time=500, random_delta=5.0 1380 | ), 1381 | "下": Drag( 1382 | 50.0, 35.0, 50.0, 65.0, delay_time=1000, move_time=500, random_delta=5.0 1383 | ), 1384 | "左": Drag( 1385 | 35.0, 50.0, 65.0, 50.0, delay_time=1000, move_time=500, random_delta=5.0 1386 | ), 1387 | "右": Drag( 1388 | 65.0, 50.0, 35.0, 50.0, delay_time=1000, move_time=500, random_delta=5.0 1389 | ), 1390 | "顺": DrawCircle( 1391 | 50.0, 50.0, 25.0, clockwise=True, turns_number=5, last_time=3000 1392 | ), 1393 | "逆": DrawCircle( 1394 | 50.0, 50.0, 25.0, clockwise=False, turns_number=5, last_time=3000 1395 | ), 1396 | "绿": Drag(23.0, 59.0, 50.0, 50.0, random_delta=1.0), # 鸡精 1397 | "棕": Drag(76.0, 64.0, 50.0, 50.0, random_delta=1.0), # 酱油 1398 | "红": Drag(14.0, 76.5, 50.0, 50.0, random_delta=1.0), # 番茄酱 1399 | "白": Drag(83.0, 76.0, 50.0, 50.0, random_delta=1.0), # 盐 1400 | "灭": ClickArea( 1401 | 5.0, 60.0, 95.0, 95.0, delta=5.0, interval_time=50, click_times=3 1402 | ), # 灭火 1403 | } 1404 | 1405 | def __init__(self, name: str, n: int) -> None: 1406 | super().__init__() 1407 | for i in range(n): 1408 | self.do(name) 1409 | self.data.append(Wait(1000)) 1410 | 1411 | def drag(self) -> None: 1412 | self.data += [ 1413 | # Drag(delay_time=100), 1414 | # Drag(delay_time=100), 1415 | # ClickArea(), 1416 | ] 1417 | 1418 | def do(self, name: str) -> None: 1419 | global stir_fry_menu 1420 | self.data += [ 1421 | ClickButton("互动_主"), 1422 | ClickButton("餐厅_菜谱_制作"), 1423 | ClickButton("餐厅_制作_点火", delay_time=5000), 1424 | Wait(1000), 1425 | ] 1426 | for word in stir_fry_menu[name]: 1427 | self.data.append(self.operation_dict[word]) 1428 | self.data += [ClickButton("屏幕空白"), Wait(1000)] 1429 | 1430 | 1431 | class Cook(ActionChain): 1432 | """烹饪 1433 | 扩建过一次的厨房 1434 | 4 个炉子都是空的 1435 | 上菜窗口无空缺 1436 | 上菜窗口无对应菜品(浆果捞)""" 1437 | 1438 | def __init__( 1439 | self, dish_row: int, dish_column: int, dish_time: int, n: int = 10 1440 | ) -> None: 1441 | super().__init__() 1442 | self.dish_row = dish_row 1443 | self.dish_column = dish_column 1444 | self.dish_time = dish_time 1445 | 1446 | self.prepare(wait=8000) 1447 | for i in range(n): 1448 | self.do() 1449 | self.data.append(Wait(1000)) 1450 | 1451 | def _change_row(self, n: int = 0) -> None: 1452 | for i in range(n): 1453 | self.data += [ 1454 | Drag(68.0, 80.0, 68.0, 59.5, random_delta=1.0), 1455 | Wait(3000), 1456 | ] 1457 | 1458 | def choose(self) -> None: 1459 | self._change_row(self.dish_row - 1) 1460 | positions = { 1461 | 1: (52.5, 60.0), 1462 | 2: (63.0, 60.0), 1463 | 3: (74.0, 60.0), 1464 | 4: (84.5, 60.0), 1465 | } 1466 | self.data.append( 1467 | Click(*positions[self.dish_column], delay_time=1000, random_delta=1.0) 1468 | ) 1469 | 1470 | def prepare(self, wait: int) -> None: 1471 | self.data += [ 1472 | ClickButton("餐厅_菜谱"), 1473 | ClickButton("餐厅_菜谱_前往"), 1474 | Wait(wait), 1475 | ] 1476 | 1477 | def do(self) -> None: 1478 | for i in range(4): 1479 | self.order() 1480 | self.move() 1481 | 1482 | self.prepare(wait=0) 1483 | self.data.append(Wait(self.dish_time)) 1484 | 1485 | for i in range(4): 1486 | self.get() 1487 | self.move() 1488 | self.prepare(3000) 1489 | 1490 | def get(self) -> None: 1491 | self.data += [ 1492 | ClickButton("互动_主"), 1493 | ClickButton("餐厅_提示_取消"), # 相当于点击屏幕空白,防错位 1494 | Wait(500), 1495 | ] 1496 | 1497 | def order(self) -> None: 1498 | self.data += [ 1499 | ClickButton("互动_主"), 1500 | ClickButton("餐厅_提示_取消"), # 相当于点击屏幕空白,防错位 1501 | ] 1502 | self.choose() 1503 | self.data += [ 1504 | ClickButton("餐厅_菜谱_快速烹饪"), 1505 | Wait(500), 1506 | ] 1507 | 1508 | def move(self) -> None: 1509 | self.data.append(MoveDown(7)) 1510 | 1511 | 1512 | class ChooseBait(ActionChain): 1513 | """选择鱼饵 1514 | 序号从左往右,从 0 递增""" 1515 | 1516 | def __init__(self, n: int) -> None: 1517 | super().__init__() 1518 | self.data += [ 1519 | ClickButton("互动_钓鱼"), 1520 | ClickButton("互动_钓鱼"), 1521 | ClickButton("钓鱼_鱼饵"), 1522 | ClickButton("钓鱼_鱼饵_" + str(n)), 1523 | ClickButton("钓鱼_停止钓鱼"), 1524 | Wait(1000), 1525 | ] 1526 | 1527 | 1528 | class Fish(ActionChain): 1529 | """钓鱼""" 1530 | 1531 | def __init__(self, change_map: Optional[str] = None, n: int = 200) -> None: 1532 | super().__init__() 1533 | if change_map == "摩尔拉雅": 1534 | self.data += [ 1535 | ChangeMap("摩尔拉雅"), 1536 | GetOff(), 1537 | ClickButton("骑乘"), 1538 | MoveRight(1000), 1539 | MoveDown(300), 1540 | ] 1541 | elif change_map == "浆果丛林": 1542 | self.data += [ 1543 | ChangeMap("浆果丛林"), 1544 | GetOff(), 1545 | ClickButton("骑乘"), 1546 | MoveDown(700), 1547 | MoveLeft(5000), 1548 | ] 1549 | elif change_map == "阳光沙滩": 1550 | self.data += [ 1551 | ChangeMap("阳光沙滩"), 1552 | Navigate2NPC("菩提", 15 * 000), 1553 | ClickButton("对话_选项_0"), 1554 | Wait(1000), 1555 | ClickButton("骑乘"), 1556 | MoveDown(1500), 1557 | MoveRight(2000), 1558 | ] 1559 | elif change_map == "黑森林": 1560 | self.data += [ 1561 | ChangeMap("前哨站"), 1562 | Navigate2NPC("瑞琪", 30 * 1000), 1563 | ClickButton("对话_选项_0"), 1564 | ClickButton("骑乘"), 1565 | MoveDown(1300), 1566 | MoveRight(14700), 1567 | MoveDown(7500), 1568 | Wait(2 * 60 * 1000), 1569 | GetOff(), 1570 | ClickButton("骑乘"), 1571 | MoveRight(30 * 1000), 1572 | MoveUp(2500), 1573 | ] 1574 | elif change_map == "家园鱼塘": 1575 | self.data += [ 1576 | ChangeMap("小屋"), 1577 | MoveLeft(1000), 1578 | ClickButton("互动_主"), 1579 | Wait(90 * 1000), 1580 | MoveLeft(1000), 1581 | MoveUp(900), 1582 | ] 1583 | 1584 | for i in range(n): 1585 | self.do() 1586 | 1587 | # 黑森林地图特殊,切回到正常地图 1588 | if change_map == "黑森林": 1589 | self.data += [ 1590 | ClickButton("家园"), 1591 | Wait(2 * 60 * 1000), 1592 | ] 1593 | 1594 | self.append(Wait(1000)) 1595 | 1596 | def do(self) -> None: 1597 | "稳健,丢饵适中" 1598 | self.data += [ 1599 | ClickButton("互动_钓鱼", delay_time=500), # 下钩 1600 | ClickButton("互动_钓鱼", delay_time=6000), # 上钩 1601 | ClickButton("互动_钓鱼", delay_time=2060), # 收杆 1602 | ClickButton("钓鱼_停止钓鱼", delay_time=300), 1603 | ClickButton("屏幕空白", delay_time=2000), 1604 | ] 1605 | 1606 | 1607 | class DailyFish(ActionChain): 1608 | """日常钓鱼""" 1609 | 1610 | def __init__(self) -> None: 1611 | super().__init__() 1612 | self.data += [ 1613 | Fish(change_map="摩尔拉雅"), 1614 | Fish(change_map="浆果丛林"), 1615 | Fish(change_map="阳光沙滩"), 1616 | Fish(change_map="黑森林"), 1617 | Fish(change_map="家园鱼塘"), 1618 | ] 1619 | 1620 | 1621 | class Daily(ActionChain): 1622 | """日常整合""" 1623 | 1624 | def __init__(self) -> None: 1625 | super().__init__() 1626 | self.data += [ 1627 | ResetVisualAngel(), 1628 | Divine(), 1629 | GatherJiangGuoCongLin(n=1), 1630 | MakeWish(), 1631 | GuiderMission(change_map=False), 1632 | Talk2NPC(change_map=False), 1633 | Fish("摩尔拉雅", 100), 1634 | GatherJiangGuoCongLin(n=1), 1635 | Fish("摩尔拉雅", 100), 1636 | Fish("浆果丛林", 200), 1637 | GatherJiangGuoCongLin(n=1), 1638 | Fish("阳光沙滩", 200), 1639 | Fish("黑森林", 100), 1640 | GatherJiangGuoCongLin(n=1), 1641 | Fish("黑森林", 100), 1642 | Fish("家园鱼塘", 200), 1643 | GatherJiangGuoCongLin(n=1), 1644 | GatherNight(), 1645 | ] 1646 | 1647 | 1648 | def export(actions: Iterable, name: str, **kwargs) -> None: 1649 | """导出 BlueStacks 可用的 json 文件""" 1650 | global timestamp_now 1651 | timestamp_now = 0 1652 | events = [] 1653 | for action in actions: 1654 | events.extend(action.generate()) 1655 | data = { 1656 | "Acceleration": 1, 1657 | "CreationTime": datetime.now().strftime("%Y%m%dT%H%M%S"), 1658 | "DoNotShowWindowOnFinish": False, 1659 | "Events": events, 1660 | "LoopDuration": 0, # TillTIme 模式下有效,循环时长,单位为 s 1661 | "LoopInterval": 0, # 循环间隔,单位为 s 1662 | "LoopIterations": 1, # TillLoopNumber 模式下有效,循环次数 1663 | "LoopType": "TillLoopNumber", # "TillLoopNumber" "TillTime" "UntilStopped" 1664 | "MacroSchemaVersion": 2, 1665 | "RestartPlayer": False, 1666 | "RestartPlayerAfterMinutes": 60, 1667 | } 1668 | data |= kwargs 1669 | with open(f"./json/{name}.json", "wt", encoding="utf-8") as f: 1670 | json.dump(data, f, indent=4) 1671 | print(f"{name}: {timedelta(milliseconds=timestamp_now)}") 1672 | 1673 | 1674 | def debug( 1675 | actions: Iterable, track: bool = False, remove_old_files: bool = True 1676 | ) -> None: 1677 | """DEBUG""" 1678 | 1679 | if remove_old_files and (debug_files := glob("./json/DEBUG*")): 1680 | for f in debug_files: 1681 | remove(f) 1682 | export(actions, f"DEBUG_{datetime.now().strftime('%H-%M-%S')}") 1683 | if track: 1684 | sleep(5) 1685 | global timestamp_now 1686 | timestamp_now = 0 1687 | events = [] 1688 | for action in actions: 1689 | events.extend(action.generate()) 1690 | 1691 | timestamp = 0 1692 | for event in events: 1693 | sleep((event["Timestamp"] - timestamp) / 1000.0) 1694 | timestamp = event["Timestamp"] 1695 | print(f"{'#'*30} {timedelta(milliseconds=timestamp)}") 1696 | pp(event) 1697 | 1698 | exit() 1699 | 1700 | 1701 | if __name__ == "__main__": 1702 | # debug(GatherForest() * 3 + GatherNight()) 1703 | # debug(Fish("黑森林")) 1704 | # debug(StirFry("浆果捞", 5)) 1705 | 1706 | # 删除老版本 json 文件 1707 | for f in glob("./json/*.json"): 1708 | remove(f) 1709 | 1710 | # 日常功能 1711 | export(InitSettings(), "初始化设置") 1712 | export(Divine(), "日常占卜") 1713 | export(MakeWish(), "日常许愿") 1714 | export(GuiderMission(), "日常向导任务") 1715 | export(Talk2NPC(), "日常 NPC 好感度对话") 1716 | export(DailyFish(), "日常钓鱼") 1717 | export(GatherNight(), "日常夜间资源采集") 1718 | export(Daily(), "日常整合") 1719 | 1720 | # 辅助功能 1721 | export([ClickButton("互动_主", delay_time=300)], "辅助互动", LoopType="UntilStopped") 1722 | export(Fish(n=1), "辅助钓鱼", LoopType="UntilStopped") 1723 | export(GatherForest(change_map=False), "辅助伐木林采集") 1724 | export(GatherMoerlaya(change_map=False), "辅助摩尔拉雅采集") 1725 | export(GatherQianShaoZhan(change_map=False), "辅助前哨站采集") 1726 | export(GatherJiangGuoCongLin(change_map=False), "辅助浆果丛林采集") 1727 | export(ExchangeMagicCode(), "辅助神奇密码兑换") 1728 | 1729 | # 自定义功能 1730 | # export(Speak(), "发言", LoopType="UntilStopped", LoopInterval=120) 1731 | # export(Cook(), "烹饪", LoopType="UntilStopped") 1732 | # export(Cook(11, 2, 5 * 60 * 1000), "烹饪-测试版") 1733 | --------------------------------------------------------------------------------