├── .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 | [](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 |
--------------------------------------------------------------------------------