├── Instructions.docx
├── README.md
├── SGAv2.py
├── SGAv2.spec
├── SGA快速上手.docx
├── assets
├── __init__.py
├── genshin
│ ├── bat_scr
│ │ ├── kill_genshin.bat
│ │ └── kill_genshin.vbs
│ ├── genshin_help.json
│ ├── genshin_index.json
│ └── picture
│ │ ├── acquire.png
│ │ ├── close0.png
│ │ ├── close1.png
│ │ ├── condensed
│ │ ├── daily_task_gift.png
│ │ └── get_daily_gift.png
│ │ ├── develop_tools
│ │ ├── bugle1.png
│ │ ├── bugle2.png
│ │ ├── bugle3.png
│ │ ├── develop_tools.png
│ │ ├── insignia1.png
│ │ ├── insignia2.png
│ │ ├── insignia3.png
│ │ ├── mask1.png
│ │ ├── mask2.png
│ │ ├── mask3.png
│ │ ├── raven_insignia1.png
│ │ ├── raven_insignia2.png
│ │ ├── raven_insignia3.png
│ │ ├── slime1.png
│ │ ├── slime2.png
│ │ └── slime3.png
│ │ ├── dispatch
│ │ ├── 20h.png
│ │ ├── 25percent.png
│ │ ├── 5.png
│ │ ├── arrow.png
│ │ ├── choose.png
│ │ ├── dispatch.png
│ │ ├── exploring.png
│ │ ├── get.png
│ │ ├── max.png
│ │ ├── no_promote.png
│ │ └── recall.png
│ │ ├── food
│ │ └── food.png
│ │ ├── genshin-icon.png
│ │ ├── gpass.png
│ │ ├── home
│ │ ├── bag.png
│ │ ├── certificate.png
│ │ ├── home.png
│ │ ├── map.png
│ │ ├── on-line.png
│ │ ├── stand-alone.png
│ │ ├── team.png
│ │ ├── team_ready0.png
│ │ └── team_ready1.png
│ │ ├── lit_tools
│ │ ├── boon_elder_tree.png
│ │ ├── equip.png
│ │ ├── para_deploy.png
│ │ ├── para_retrieve.png
│ │ ├── para_trans.png
│ │ ├── rambler.png
│ │ └── unload.png
│ │ ├── login1.png
│ │ ├── login2.png
│ │ ├── maps
│ │ ├── 0.png
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── map.png
│ │ ├── tp_point0.png
│ │ ├── tp_point1.png
│ │ └── tp_point2.png
│ │ ├── material
│ │ ├── magical-crystal.png
│ │ ├── material.png
│ │ └── mint.png
│ │ ├── number
│ │ ├── 0.png
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ └── 5.png
│ │ ├── sighin.png
│ │ ├── team.png
│ │ ├── valu_tools
│ │ └── nssz.png
│ │ └── world.png
├── kaa
│ ├── kaa_help.json
│ ├── kaa_index.json
│ └── picture
│ │ └── kaa-icon.png
├── kleins
│ ├── bat_scr
│ │ ├── kill_hxls.bat
│ │ └── kill_hxls.vbs
│ ├── default_kleins_roll.xlsx
│ └── picture
│ │ ├── close
│ │ ├── close1.png
│ │ └── close2.png
│ │ ├── dispatch
│ │ ├── condition0.png
│ │ ├── condition1.png
│ │ ├── condition2.png
│ │ ├── plan0.png
│ │ ├── plan1.png
│ │ ├── plan2.png
│ │ ├── zone0.png
│ │ ├── zone1.png
│ │ ├── zone2.png
│ │ ├── zone3.png
│ │ ├── zone4.png
│ │ ├── zone5.png
│ │ ├── zone6.png
│ │ ├── zone7.png
│ │ ├── zone8.png
│ │ ├── zone9.png
│ │ └── 新建文件夹
│ │ │ ├── plan0.png
│ │ │ ├── plan1.png
│ │ │ ├── plan2.png
│ │ │ └── zone6.png
│ │ ├── fight
│ │ ├── add.png
│ │ ├── fighting.png
│ │ ├── lack.png
│ │ ├── max.png
│ │ ├── retour.png
│ │ └── start.png
│ │ ├── home.png
│ │ ├── klein-icon.png
│ │ ├── login2.png
│ │ ├── lvup.png
│ │ ├── market
│ │ └── daily.png
│ │ ├── market_network
│ │ ├── receive.png
│ │ └── unlock.png
│ │ ├── random_gift
│ │ ├── random_gift_pack.png
│ │ ├── random_intermediate_mineral.png
│ │ ├── random_primary_dish.png
│ │ ├── random_primary_mineral.png
│ │ ├── random_senior_ingredient.png
│ │ └── random_senior_mineral.png
│ │ ├── recruit
│ │ ├── N.png
│ │ ├── R.png
│ │ ├── SR.png
│ │ ├── SSR.jpg
│ │ ├── SSR.png
│ │ ├── accomplish.png
│ │ ├── lack.png
│ │ └── new.png
│ │ ├── rehome.png
│ │ ├── review
│ │ ├── reviewed.png
│ │ ├── reviewing.png
│ │ ├── su14.png
│ │ ├── su15.png
│ │ ├── su24.png
│ │ ├── su25.png
│ │ ├── su28.png
│ │ ├── su32.png
│ │ ├── su35.png
│ │ └── toreview.png
│ │ ├── sighin.png
│ │ ├── startgame1.png
│ │ └── startgame2.png
├── m7a
│ └── picture
│ │ └── M7A-icon.png
├── maa
│ ├── bat_scr
│ │ ├── kill-MAA.bat
│ │ ├── kill-MAA.vbs
│ │ ├── maa_completed.bat
│ │ └── maa_completed.vbs
│ ├── maa_help.json
│ ├── maa_index.json
│ └── picture
│ │ └── MAA-icon.png
├── main_window
│ ├── bat_scr
│ │ ├── PsExec64.exe
│ │ ├── maa_create.bat
│ │ ├── psshutdown.exe
│ │ ├── restart.bat
│ │ ├── restart.vbs
│ │ ├── screen_off.bat
│ │ ├── screen_off.vbs
│ │ ├── sleep.bat
│ │ ├── sleep.vbs
│ │ ├── start-SGA.bat
│ │ └── start-SGA.vbs
│ ├── default_config.json
│ ├── schtasks_index.json
│ └── ui
│ │ ├── SGA.png
│ │ ├── __pycache__
│ │ └── SGA_icon.cpython-39.pyc
│ │ ├── add.png
│ │ ├── back
│ │ ├── alipay.png
│ │ ├── set_back.png
│ │ └── wechat.png
│ │ ├── bilibili.png
│ │ ├── choose.png
│ │ ├── common-icon.png
│ │ ├── delete.png
│ │ ├── directory.png
│ │ ├── finish.png
│ │ ├── gitee.png
│ │ ├── github.png
│ │ ├── history.png
│ │ ├── hxh.png
│ │ ├── ico
│ │ ├── 0.png
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── SGA.ico
│ │ └── ico.qrc
│ │ ├── load.png
│ │ ├── lock.png
│ │ ├── mix-icon.png
│ │ ├── presstrigger-icon.png
│ │ ├── reduce.png
│ │ ├── refresh.png
│ │ ├── rename.png
│ │ ├── save.png
│ │ ├── set.png
│ │ ├── support.png
│ │ └── unlock.png
├── presstrigger
│ ├── close.mp3
│ ├── open.mp3
│ ├── rule.txt
│ └── 脚本示例.txt
├── snow
│ ├── default_snow_roll.xlsx
│ ├── list.json
│ ├── picture
│ │ ├── close.png
│ │ ├── home.png
│ │ ├── imitate.png
│ │ ├── login2.png
│ │ ├── pre-load.png
│ │ ├── rollcheck.png
│ │ ├── snow-icon.png
│ │ ├── snow-icon2.png
│ │ └── supply.png
│ └── ~$snow_roll_template.xlsx
├── ww
│ └── pictures
│ │ └── ww_logo.png
└── zzz
│ └── pictures
│ └── zzz_logo.png
├── multithread
├── __init__.py
├── cycle.py
├── main.py
├── run.py
└── update.py
├── requirements.txt
├── runtime_hook.py
├── task
├── __init__.py
├── common
│ ├── __init__.py
│ └── main.py
├── default_task.py
├── genshin
│ ├── __init__.py
│ ├── crystalfly.py
│ ├── cut_tree
│ │ ├── __init__.py
│ │ ├── fontaine.py
│ │ ├── inazuma.py
│ │ ├── liyue.py
│ │ ├── main.py
│ │ ├── mondstadt.py
│ │ └── sumeru.py
│ ├── daily.py
│ ├── dispatch.py
│ ├── genshin.py
│ ├── gpass.py
│ ├── mail.py
│ ├── main.py
│ ├── rambler.py
│ ├── team.py
│ └── transformer.py
├── kaa
│ ├── __init__.py
│ └── main.py
├── kleins
│ ├── __init__.py
│ ├── dispatch.py
│ ├── fight.py
│ ├── mail.py
│ ├── main.py
│ ├── market.py
│ ├── network.py
│ ├── recruit.py
│ ├── review.py
│ ├── reward.py
│ └── roll.py
├── m7a
│ ├── __init__.py
│ └── main.py
├── maa
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ └── main.cpython-39.pyc
│ └── main.py
├── main.py
├── presstrigger
│ ├── __init__.py
│ ├── clicker.py
│ ├── main.py
│ └── trigger.py
├── snow
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── daily.cpython-39.pyc
│ │ ├── fight.cpython-39.pyc
│ │ ├── mail.cpython-39.pyc
│ │ ├── main.cpython-39.pyc
│ │ └── roll.cpython-39.pyc
│ ├── daily.py
│ ├── fight.py
│ ├── mail.py
│ ├── main.py
│ ├── roll.py
│ └── temtask.py
├── ww
│ ├── __init__.py
│ └── main.py
└── zzz
│ ├── __init__.py
│ └── main.py
├── tools
├── __init__.py
├── environment.py
├── image.py
├── keymouse.py
├── logger
│ ├── __init__.py
│ ├── log.py
│ └── titleformatter.py
├── ocr
│ ├── PPOCR_api.py
│ ├── __init__.py
│ ├── check_ocr.py
│ └── ocr.py
├── operate.py
├── software.py
└── system.py
├── ui
├── __init__.py
├── common
│ ├── __init__.py
│ ├── list.py
│ ├── main.py
│ └── stack.py
├── element
│ ├── __init__.py
│ ├── control.py
│ └── ui_part.py
├── genshin
│ ├── __init__.py
│ ├── list.py
│ ├── main.py
│ └── stack.py
├── kaa.py
├── klein
│ ├── __init__.py
│ ├── list.py
│ ├── main.py
│ └── stack.py
├── m7a.py
├── maa.py
├── main
│ ├── SGA_icon.py
│ ├── __init__.py
│ ├── main_bottom.py
│ ├── main_down.py
│ ├── main_top.py
│ ├── main_up.py
│ └── main_window.py
├── mix
│ ├── __init__.py
│ ├── list.py
│ ├── main.py
│ └── stack.py
├── module
│ ├── __init__.py
│ ├── main.py
│ └── module.py
├── overall
│ ├── __init__.py
│ ├── main.py
│ └── timer
│ │ ├── __init__.py
│ │ ├── main.py
│ │ └── time_window.py
├── presstrigger
│ ├── __init__.py
│ ├── main.py
│ └── stack.py
├── snow
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-39.pyc
│ │ ├── list.cpython-39.pyc
│ │ ├── main.cpython-39.pyc
│ │ └── stack.cpython-39.pyc
│ ├── list.py
│ ├── main.py
│ └── stack.py
├── ui_starrail.py
├── ww.py
└── zzz.py
├── update_history.txt
└── update_zip.py
/Instructions.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/Instructions.docx
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SGA-SucroseGameAssistant
2 |
3 | #### 介绍
4 | 1. 砂糖代理(SGA),用于游戏等软件,SGA主体的功能是设置定时唤醒电脑,并定时执行各模块的相关功能,完成后睡眠,从而完成任务循环。
5 |
6 | 目前SGA最佳推荐环境为win10,游戏窗口分辨率1920*1080。其他系统win11,win7可能出现我无法解决的bug。其他分辨率的识别能力下降,可能遇到功能异常。
7 |
8 | #### 目前作者只更新尘白禁区模块和SGA主体已经新功能的开发,其余模块若无合作者接手将无限期停更。
9 | #### 原神模块暂交由@yuhui437,并感谢其对于崩铁助手与绝区零助手的贡献
10 | #### 欢迎新的合作者参与对其他模块进行更新适配。
11 | 2. 目前已有功能模块:
12 | 环行旅舍(功能停止更新)
13 | 原神(交由合作者@yuhui437不定期更新中)
14 | MAA(明日方舟)(适配停止更新)
15 | 三月七助手(崩坏:星穹铁道)(适配停止更新)
16 | 尘白禁区(不定期更新中)
17 | 通用执行(测试阶段,功能不稳定)
18 | 连点器(不定期更新中)
19 | 绝区零助手(由合作者@yuhui437完成)
20 | 3. SGA视频演示/介绍,SGA使用说明,项目说明文档完善中。
21 |
22 | 4. SGA2.0项目开源免费,源代码将同时更新于:
23 | github(https://github.com/Kin-L/SucroseGameAssistant)
24 | gitee(https://gitee.com/huixinghen/SucroseGameAssistant)
25 |
26 | 5. 完整版下载链接,手动更新包链接:
27 | 完整版:
28 | 蓝奏云: https://wwrv.lanzn.com/b033h9z0d 密码:bm32
29 | gitee: https://gitee.com/huixinghen/SucroseGameAssistant/releases
30 | 123云盘(推荐):https://www.123pan.com/s/PjLbVv-9kEuA.html提取码:stdl
31 | 更新包:https://gitee.com/huixinghen/SucroseGameAssistant/releases
32 | 手动更新方法:下载替换更新包,解压后将SGA文件夹与原SGA文件夹中同名文件夹进行合并并替换。
33 |
34 | OCR组件手动下载链接:
35 | gitee: https://gitee.com/huixinghen/SucroseGameAssistant/releases/tag/ocr
36 | 蓝奏云(推荐): https://wwp.lanzn.com/b033h9ybi 密码:1siv
37 |
38 | 邮箱: 2805137028@qq.com
39 | bilibili站账号: 绘星痕(406315493)
40 | 抖音:绘星痕(54796280232)
41 | https://space.bilibili.com/406315493
42 | QQ群聊仅作bug反馈和交流使用,不完全公开。可以B站私信我或邮件联系我索要群聊号。
43 |
44 | #### 安装教程
45 |
46 | 从网盘链接获取压缩包,解压可用,需要管理员权限,第一次使用时会自动下载OCR组件
47 | 视频教程:https://www.bilibili.com/video/BV18kKAeYE2t
48 | 详细使用说明见压缩包中“Instructions.docx”文件,该文件可能不是最新版本,部分内容仅供参考。
49 |
50 | #### 使用说明
51 |
52 | 1. 建议给予SGA管理员权限启动
53 | 2. 首次执行任务需要自动下载OCR组件,部分机型会下载rapidOCR,可能出现识别错误的情况,暂时无力优化
54 | 3. 使用SGA请善用安装包内的使用说明,和我的bilibili账号上的SGA使用演示
55 | 4. 遇到bug可尝试更新,或反馈在我的 github/gitee/bilibili账号/邮箱。
56 | 5. SGA功能中使用了三月七助手/BGI/MAA的功能,需要自行安装对应项目并设置,之后对SGA进行设置,才能正常使用。
57 | 6. 反馈bug建议附上自己的环境(win10/win11/win7, 官服/B服),触发bug的流程/停留的界面/bug触发的录屏、截图,附加SGA的“personal”文件夹压缩发给我。以上条件越完善,越能帮助我定位问题所在,修复bug,请根据自己的情况尽量提供给我比较完善的信息。
58 | 7. SGA卸载删除前请 清除定时 ,否则您的电脑可能遇到仍在您原来设定过的时间 睡眠中自行唤醒 的情况。如果您已经卸载删除且遇到该情况,可在按照百度教程找到 任务计划程序 ,找到 SGA-awake 的条目,禁用/删除即可解决该问题。
59 | 8. SGA为绿色免安装版,无联网功能,运行需要管理员权限,用于软件启动、设置定时等。若出现报毒和添加信任事件,信则用,本人没有心情也没有能力写病毒和盗号功能。添加信任可参考:https://zhuanlan.zhihu.com/p/645089615
60 | 9. SGA快速上手【金山文档】 https://kdocs.cn/l/ctEJIsik2lSQ
61 | #### 特别感谢
62 |
63 | 1. SGA用户界面使用了PyQt-Fluent-Widgets
64 | https://github.com/zhiyiYo/PyQt-Fluent-Widgets
65 | 2. SGA部分代码和学习过程中参考了三月七助手,并组合使用了三月七助手
66 | https://moesnow.github.io/March7thAssistant
67 | 3. SGA原神模块的自动秘境功能组合使用了BGI的自动秘境功能
68 | https://github.com/babalae/better-genshin-impact
69 | 4. SGA组合使用了MAA的功能
70 | https://github.com/MaaAssistantArknights/MaaAssistantArknights
71 |
--------------------------------------------------------------------------------
/SGAv2.py:
--------------------------------------------------------------------------------
1 | from multithread.main import *
2 | # pyinstaller -D -w -i assets\main_window\ui\ico\SGA.ico SGA2.0-demo.py
3 | # pyi-makespec SGA2.0-demo.spec
4 | # pyinstaller SGA2.0-demo.spec
5 | # pip install -r requirements.txt
6 |
--------------------------------------------------------------------------------
/SGAv2.spec:
--------------------------------------------------------------------------------
1 | # -*- mode: python ; coding: utf-8 -*-
2 | from os import path
3 | # pyinstaller SGAv2.spec
4 |
5 | a = Analysis(
6 | ['SGAv2.py'],
7 | pathex=[],
8 | binaries=[],
9 | datas=[("assets", "assets"),
10 | ("README.md", "."),
11 | ("update_history.txt", "."),
12 | ("3rd_package", "3rd_package"),
13 | ("Instructions.docx", "."),
14 | ("SGA快速上手.docx", "."),
15 | ("venv\Lib\site-packages\win32comext\shell\shellcon.py", "win32com\shell"),
16 | ],
17 | hiddenimports=[],
18 | hookspath=[],
19 | hooksconfig={},
20 | runtime_hooks=["runtime_hook.py"],
21 | excludes=[],
22 | noarchive=False,
23 | )
24 | private_module = [] # hello.exe 不保留任何依赖
25 | temp = a.pure.copy(); a.pure.clear()
26 | for name, src, type in temp:
27 | condition = [name.startswith(m) for m in private_module]
28 | if condition and any(condition):
29 | a.pure.append((name, src, type)) # 把需要保留打包的 py 文件重新添加回 a.pure
30 | else:
31 | name = name.replace('.', os.sep)
32 | init = path.join(name, '__init__.py')
33 | pos = src.find(init) if init in src else src.find(name)
34 | dst = src[pos:]
35 | # dst = path.join('libs', dst)
36 | a.datas.append((dst, src, 'DATA'))
37 | pyz = PYZ(a.pure)
38 |
39 | exe = EXE(
40 | pyz,
41 | a.scripts,
42 | [],
43 | exclude_binaries=True,
44 | name='SGA',
45 | debug=False,
46 | bootloader_ignore_signals=False,
47 | strip=False,
48 | upx=True,
49 | console=False,
50 | disable_windowed_traceback=False,
51 | argv_emulation=False,
52 | target_arch=None,
53 | codesign_identity=None,
54 | entitlements_file=None,
55 | icon=["assets/main_window/ui/ico/SGA.ico"],
56 | )
57 | coll = COLLECT(
58 | exe,
59 | a.binaries,
60 | a.datas,
61 | strip=False,
62 | upx=True,
63 | upx_exclude=[],
64 | name='SGAv2',
65 | )
66 |
--------------------------------------------------------------------------------
/SGA快速上手.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/SGA快速上手.docx
--------------------------------------------------------------------------------
/assets/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/__init__.py
--------------------------------------------------------------------------------
/assets/genshin/bat_scr/kill_genshin.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | tasklist|find /i "YuanShen.exe"
3 | if %errorlevel%==0 (
4 | taskkill /f /t /im YuanShen.exe
5 | ) else (
6 | echo "exit"
7 | )
8 | @echo on
--------------------------------------------------------------------------------
/assets/genshin/bat_scr/kill_genshin.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("kill_genshin.bat",0)
--------------------------------------------------------------------------------
/assets/genshin/genshin_help.json:
--------------------------------------------------------------------------------
1 | {
2 | "模块介绍":[
3 | "原神功能模块介绍:" ,
4 | "1、该模块为第三方工具,所有第三方工具都不保证没有封号风险,怕别用,封认罚,损失自行承担。",
5 | "2、使用该模块需要切换特定队伍配置和跑图角色,请按照对应提示配置自己的队伍,并确保每次运行时为该队伍和跑图角色。",
6 | "3、请设置游戏本体的路径(而非启动器),并选择对应服务器类型。路径格式可参照:",
7 | "D:\\Program Files\\Genshin Impact\\Genshin Impact Game\\YuanShen.exe"
8 | ],
9 | "切换队伍":[
10 | "切换队伍功能提示:" ,
11 | "第一次使用请亲手配置队伍,为SGA保留左边/上边第一个队伍为跑图队伍。" ,
12 | "队伍需求:" ,
13 | "(1)1号位为任意成女角色(如丽莎,雷电将军),武器、天赋、队伍共鸣不应有加速buff;" ,
14 | "(2)2号为草元素主角或纳西妲,用于捕捉晶蝶的机关触发;" ,
15 | "(3)队伍中应有早柚,瑶瑶等角色,用于捕捉晶蝶。"],
16 | "探索派遣":[
17 | "探索派遣功能提示:" ,
18 | "请勿选择重复。"],
19 | "参量质变仪":[
20 | "参量质变仪功能提示:" ,
21 | "1、该功能会按照从上到下顺序添加材料直到填满,请在SGA文件夹中的”resource\\genshin\\picture“文件夹中选择材料。" ,
22 | "根据材料种类打开文件夹:养成道具”develop_tools“或食物”food“或材料”material“,选择需要添加的材料。" ,
23 | "按照以下示例格式一项一条地填写:”resource\\genshin\\picture\\develop_tools\\bugle1.png“" ,
24 | "2、可自行设置其他添加材料,设置方法如下。" ,
25 | "(1)在游戏1080p窗口或1080p全屏截取背包中材料的图像,保存格式为png,放置于同目录“resource\\genshin\\picture”中的下列对应的文件夹中:" ,
26 | "(2)截取图片应为标图方框内,不包括材料数量的材料图案。同时图案不宜过小,会影响识别率。" ,
27 | "(3)文件名可自拟,应为字母与数字的组合。" ],
28 | "捉晶蝶":[
29 | "捉晶蝶功能提示:" ,
30 | "1、使用本功能请确保对应地图通畅。如:锚点开启,附近任务已完成,有关解密已完成,等等。" ,
31 | "2、该功能刚需瑶瑶或者早柚。晶蝶捕捉有随机性,但有捕获保底数量,能满足一般日常消耗。" ],
32 | "合成树脂":["合成树脂功能提示:" ,
33 | "暂无注意事项。" ],
34 | "尘歌壶":[
35 | "尘歌壶功能提示:" ,
36 | "目前只适配璃月主楼。使用本功能请手动将默认壶内的主楼换为璃月主楼(与地图场景无关)。"],
37 | "砍树":["砍树功能提示:" ,
38 | "1、该功能刚需王树瑞佑。",
39 | "2、目前树种和位点不全,请至少选择5个点位以确保能完成砍树有效循环。"],
40 | "结束操作":["结束后操作功能提示:",
41 | "1、该功能会在完成以上所有功能后,执行子设置中的操作。",
42 | "2、启用继续执行时,会在完成以上所有操作后紧接着运行选中的配置。可点击刷新按钮,刷新当前可用配置。"]
43 | }
--------------------------------------------------------------------------------
/assets/genshin/genshin_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "游戏名称":"原神",
3 | "服务器":["官服","B服"],
4 | "功能": {"team":"切换标准队伍",
5 | "dispatch": "探索派遣",
6 | "trans": "使用参量质变仪",
7 | "fly": "捕捉晶蝶",
8 | "comp": "合成浓缩树脂",
9 | "pot": "领取尘歌壶",
10 | "tree": "采集木材"
11 | },
12 | "派遣区域": [
13 | "蒙德",
14 | "璃月",
15 | "稻妻",
16 | "须弥",
17 | "枫丹"
18 | ],
19 | "蒙德派遣材料": [
20 | "水晶矿,白银矿(1)",
21 | "水晶矿,白银矿(2)",
22 | "摩拉",
23 | "兽肉,禽肉",
24 | "禽蛋,甜甜花",
25 | "白萝卜,胡萝卜"
26 | ],
27 | "璃月派遣材料": [
28 | "水晶矿,白银矿",
29 | "摩拉1",
30 | "摩拉2",
31 | "马尾,金鱼草",
32 | "白萝卜,胡萝卜",
33 | "莲蓬,松茸"
34 | ],
35 | "稻妻派遣材料": [
36 | "摩拉1",
37 | "摩拉2",
38 | "兽肉,禽蛋",
39 | "禽肉,海草",
40 | "白萝卜,堇瓜",
41 | "甜甜花,日落果"
42 | ],
43 | "须弥派遣材料": [
44 | "摩拉",
45 | "蔷薇,苹果",
46 | "松茸,蘑菇",
47 | "禽蛋,日落果",
48 | "香辛果,胡萝卜",
49 | "墩墩桃,松果"
50 | ],
51 | "枫丹派遣材料": [
52 | "摩拉",
53 | "汐藻,蘑菇",
54 | "茉洁草,禽蛋",
55 | "久雨莲,兽肉",
56 | "泡泡桔,禽肉",
57 | "甜甜花,薄荷"
58 | ],
59 | "木材": [
60 | [["birch", "桦木"],["cuihua", "萃华木"],["pine", "松木"]],
61 | [["sandbearer", "却砂木"],["bamboo", "竹节"],["fragrant", "垂香木"]],
62 | [["fir", "杉木"],["yumemiru", "梦见木"],["maple", "枫木"]],
63 | [["aralia", "孔雀木\\n御伽木"],["otogi", "御伽木"],["karmaphala_bright", "业果木\\n辉木"]],
64 | [["adhigama", "证悟木"],["mountain", "刺葵木"],["athel", "柽木"]],
65 | [["mallow", "悬铃木"],["linden", "椴木"],["ash", "白岑木"]],
66 | [["cypress", "香柏木"],["torch", "炬木"]]
67 | ],
68 | "木材种类1": ["白岑木","炬木","悬铃木","椴木","香柏木"],
69 | "tree_kind1": ["ash","torch","mallow","linden","cypress"],
70 | "木材种类2": ["柽木","刺葵木","证悟木","业果木_辉木"],
71 | "tree_kind2": ["athel","mountain_date","adhigama","karmaphala_bright"],
72 | "木材种类3": ["御伽木","孔雀木_御伽木","枫木","梦见木","却砂木"],
73 | "tree_kind3": ["otogi","aralia_otogi","maple","yumemiru","sandbearer"],
74 | "派遣区域坐标": [
75 | [
76 | 136,
77 | 162
78 | ],
79 | [
80 | 132,
81 | 237
82 | ],
83 | [
84 | 134,
85 | 304
86 | ],
87 | [
88 | 132,
89 | 378
90 | ],
91 | [
92 | 133,447
93 | ]
94 | ],
95 | "蒙德派遣材料坐标": [
96 | [
97 | 1049,
98 | 342
99 | ],
100 | [
101 | 1173,
102 | 661
103 | ],
104 | [
105 | 565,
106 | 405
107 | ],
108 | [
109 | 1120,
110 | 450
111 | ],
112 | [
113 | 814,
114 | 244
115 | ],
116 | [
117 | 740,
118 | 531
119 | ]
120 | ],
121 | "璃月派遣材料坐标": [
122 | [
123 | 960,
124 | 453
125 | ],
126 | [
127 | 810,
128 | 558
129 | ],
130 | [
131 | 563,
132 | 564
133 | ],
134 | [
135 | 724,
136 | 330
137 | ],
138 | [
139 | 1173,
140 | 614
141 | ],
142 | [
143 | 731,
144 | 820
145 | ]
146 | ],
147 | "稻妻派遣材料坐标": [
148 | [
149 | 830,
150 | 827
151 | ],
152 | [
153 | 1099,
154 | 281
155 | ],
156 | [
157 | 586,
158 | 804
159 | ],
160 | [
161 | 725,
162 | 695
163 | ],
164 | [
165 | 934,
166 | 343
167 | ],
168 | [
169 | 1146,
170 | 435
171 | ]
172 | ],
173 | "须弥派遣材料坐标": [
174 | [
175 | 1030,
176 | 611
177 | ],
178 | [
179 | 1049,
180 | 249
181 | ],
182 | [
183 | 796,
184 | 303
185 | ],
186 | [
187 | 680,
188 | 640
189 | ],
190 | [
191 | 957,
192 | 374
193 | ],
194 | [
195 | 901,
196 | 556
197 | ]
198 | ],
199 | "枫丹派遣材料坐标": [
200 | [
201 | 1055,249
202 | ],
203 | [
204 | 898,455
205 | ],
206 | [
207 | 1027,584
208 | ],
209 | [
210 | 822,641
211 | ],
212 | [
213 | 654,315
214 | ],
215 | [
216 | 616,552
217 | ]
218 | ],
219 | "晶蝶": [
220 | "雨林化城郭左方\n沙漠活力之家下方",
221 | "沙漠阿如村上方",
222 | "沙漠舍身陷坑下方",
223 | "层岩巨渊地面七天神像",
224 | "稻妻平海砦"
225 | ]
226 | }
--------------------------------------------------------------------------------
/assets/genshin/picture/acquire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/acquire.png
--------------------------------------------------------------------------------
/assets/genshin/picture/close0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/close0.png
--------------------------------------------------------------------------------
/assets/genshin/picture/close1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/close1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/condensed/daily_task_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/condensed/daily_task_gift.png
--------------------------------------------------------------------------------
/assets/genshin/picture/condensed/get_daily_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/condensed/get_daily_gift.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/bugle1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/bugle1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/bugle2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/bugle2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/bugle3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/bugle3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/develop_tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/develop_tools.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/insignia1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/insignia1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/insignia2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/insignia2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/insignia3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/insignia3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/mask1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/mask1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/mask2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/mask2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/mask3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/mask3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/raven_insignia1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/raven_insignia1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/raven_insignia2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/raven_insignia2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/raven_insignia3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/raven_insignia3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/slime1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/slime1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/slime2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/slime2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/develop_tools/slime3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/develop_tools/slime3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/20h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/20h.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/25percent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/25percent.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/5.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/arrow.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/choose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/choose.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/dispatch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/dispatch.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/exploring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/exploring.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/get.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/get.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/max.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/max.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/no_promote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/no_promote.png
--------------------------------------------------------------------------------
/assets/genshin/picture/dispatch/recall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/dispatch/recall.png
--------------------------------------------------------------------------------
/assets/genshin/picture/food/food.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/food/food.png
--------------------------------------------------------------------------------
/assets/genshin/picture/genshin-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/genshin-icon.png
--------------------------------------------------------------------------------
/assets/genshin/picture/gpass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/gpass.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/bag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/bag.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/certificate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/certificate.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/home.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/map.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/on-line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/on-line.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/stand-alone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/stand-alone.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/team.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/team.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/team_ready0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/team_ready0.png
--------------------------------------------------------------------------------
/assets/genshin/picture/home/team_ready1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/home/team_ready1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/boon_elder_tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/boon_elder_tree.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/equip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/equip.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/para_deploy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/para_deploy.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/para_retrieve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/para_retrieve.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/para_trans.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/para_trans.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/rambler.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/rambler.png
--------------------------------------------------------------------------------
/assets/genshin/picture/lit_tools/unload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/lit_tools/unload.png
--------------------------------------------------------------------------------
/assets/genshin/picture/login1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/login1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/login2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/login2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/0.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/map.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/tp_point0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/tp_point0.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/tp_point1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/tp_point1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/maps/tp_point2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/maps/tp_point2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/material/magical-crystal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/material/magical-crystal.png
--------------------------------------------------------------------------------
/assets/genshin/picture/material/material.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/material/material.png
--------------------------------------------------------------------------------
/assets/genshin/picture/material/mint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/material/mint.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/0.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/1.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/2.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/3.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/4.png
--------------------------------------------------------------------------------
/assets/genshin/picture/number/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/number/5.png
--------------------------------------------------------------------------------
/assets/genshin/picture/sighin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/sighin.png
--------------------------------------------------------------------------------
/assets/genshin/picture/team.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/team.png
--------------------------------------------------------------------------------
/assets/genshin/picture/valu_tools/nssz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/valu_tools/nssz.png
--------------------------------------------------------------------------------
/assets/genshin/picture/world.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/genshin/picture/world.png
--------------------------------------------------------------------------------
/assets/kaa/kaa_help.json:
--------------------------------------------------------------------------------
1 | {
2 | "模块介绍":[
3 | "琴音小助手功能模块介绍:" ,
4 | "1、该模块只启动和设置琴音小助手,不对游戏进行操作。",
5 | "2、请设置琴音小助手的绝对路径。路径格式可参照:",
6 | "D:\\Program Files\\kaa-bootstrap-2.0",
7 | "3、该模块会识别琴音小助手当前已有的配置,并按照模块的设置进行操作。"
8 | ],
9 | "结束操作":[
10 | "结束后操作功能提示:",
11 | "1、该功能会在完成以上所有功能后,执行子设置中的操作。",
12 | "2、启用继续执行时,会在完成以上所有操作后紧接着运行选中的配置。"]
13 | }
14 |
--------------------------------------------------------------------------------
/assets/kaa/kaa_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "游戏名称":"琴音小助手",
3 | "功能": [
4 | "运行琴音小助手",
5 | "完成后操作"
6 | ],
7 | "运行琴音小助手": "create",
8 | "完成后操作": "kill_game"
9 | }
10 |
--------------------------------------------------------------------------------
/assets/kaa/picture/kaa-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kaa/picture/kaa-icon.png
--------------------------------------------------------------------------------
/assets/kleins/bat_scr/kill_hxls.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | tasklist|find /i "环行旅舍.exe"
3 | if %errorlevel%==0 (
4 | taskkill /f /t /im 环行旅舍.exe
5 | ) else (
6 | echo "exit"
7 | )
8 | @echo on
--------------------------------------------------------------------------------
/assets/kleins/bat_scr/kill_hxls.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("kill_hxls.bat",0)
--------------------------------------------------------------------------------
/assets/kleins/default_kleins_roll.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/default_kleins_roll.xlsx
--------------------------------------------------------------------------------
/assets/kleins/picture/close/close1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/close/close1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/close/close2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/close/close2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/condition0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/condition0.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/condition1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/condition1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/condition2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/condition2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/plan0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/plan0.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/plan1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/plan1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/plan2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/plan2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone0.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone3.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone4.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone5.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone6.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone7.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone8.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/zone9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/zone9.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/新建文件夹/plan0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/新建文件夹/plan0.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/新建文件夹/plan1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/新建文件夹/plan1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/新建文件夹/plan2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/新建文件夹/plan2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/dispatch/新建文件夹/zone6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/dispatch/新建文件夹/zone6.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/add.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/fighting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/fighting.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/lack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/lack.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/max.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/max.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/retour.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/retour.png
--------------------------------------------------------------------------------
/assets/kleins/picture/fight/start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/fight/start.png
--------------------------------------------------------------------------------
/assets/kleins/picture/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/home.png
--------------------------------------------------------------------------------
/assets/kleins/picture/klein-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/klein-icon.png
--------------------------------------------------------------------------------
/assets/kleins/picture/login2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/login2.png
--------------------------------------------------------------------------------
/assets/kleins/picture/lvup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/lvup.png
--------------------------------------------------------------------------------
/assets/kleins/picture/market/daily.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/market/daily.png
--------------------------------------------------------------------------------
/assets/kleins/picture/market_network/receive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/market_network/receive.png
--------------------------------------------------------------------------------
/assets/kleins/picture/market_network/unlock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/market_network/unlock.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_gift_pack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_gift_pack.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_intermediate_mineral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_intermediate_mineral.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_primary_dish.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_primary_dish.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_primary_mineral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_primary_mineral.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_senior_ingredient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_senior_ingredient.png
--------------------------------------------------------------------------------
/assets/kleins/picture/random_gift/random_senior_mineral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/random_gift/random_senior_mineral.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/N.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/N.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/R.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/R.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/SR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/SR.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/SSR.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/SSR.jpg
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/SSR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/SSR.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/accomplish.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/accomplish.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/lack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/lack.png
--------------------------------------------------------------------------------
/assets/kleins/picture/recruit/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/recruit/new.png
--------------------------------------------------------------------------------
/assets/kleins/picture/rehome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/rehome.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/reviewed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/reviewed.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/reviewing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/reviewing.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su14.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su15.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su24.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su25.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su28.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su32.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/su35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/su35.png
--------------------------------------------------------------------------------
/assets/kleins/picture/review/toreview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/review/toreview.png
--------------------------------------------------------------------------------
/assets/kleins/picture/sighin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/sighin.png
--------------------------------------------------------------------------------
/assets/kleins/picture/startgame1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/startgame1.png
--------------------------------------------------------------------------------
/assets/kleins/picture/startgame2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/kleins/picture/startgame2.png
--------------------------------------------------------------------------------
/assets/m7a/picture/M7A-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/m7a/picture/M7A-icon.png
--------------------------------------------------------------------------------
/assets/maa/bat_scr/kill-MAA.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | tasklist|find /i "MAA.exe"
3 | if %errorlevel%==0 (
4 | taskkill /f /t /im MAA.exe
5 | ) else (
6 | echo "exit"
7 | )
8 | EXIT
--------------------------------------------------------------------------------
/assets/maa/bat_scr/kill-MAA.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("kill-MAA.bat",0)
--------------------------------------------------------------------------------
/assets/maa/bat_scr/maa_completed.bat:
--------------------------------------------------------------------------------
1 | type nul>completed.txt
--------------------------------------------------------------------------------
/assets/maa/bat_scr/maa_completed.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("maa_completed.bat",0)
--------------------------------------------------------------------------------
/assets/maa/maa_help.json:
--------------------------------------------------------------------------------
1 | {
2 | "模块介绍":[
3 | "MAA功能模块介绍:" ,
4 | "1、该模块只启动和设置MAA,不对模拟器和游戏进行操作。",
5 | "2、请设置MAA.exe的绝对路径。路径格式可参照:",
6 | "D:\\Program Files (Green)\\MAA-v4.20.0-win-x64\\MAA.exe",
7 | "3、该模块会识别MAA当前已有的配置,并为MAA新建一个名为SGA的配置,其拷贝于选定的MAA配置,并按照模块的设置,额外更改模拟器是否完成后关闭,并通过添加完成后脚本,来进行一次性的完成后电脑睡眠。" ,
8 | "4、SGA补充了MAA的电脑唤醒,和完成后睡眠的功能,但相性并不算完善,期待MAA能添加这些功能。"
9 | ],
10 | "结束操作":[
11 | "结束后操作功能提示:",
12 | "1、该功能会在完成以上所有功能后,执行子设置中的操作。",
13 | "2、启用继续执行时,会在完成以上所有操作后紧接着运行选中的配置。可点击刷新按钮,刷新当前可用配置。为确保运行通畅,在MAA模块中,设置睡眠和继续执行只能二选一。"]
14 | }
--------------------------------------------------------------------------------
/assets/maa/maa_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "游戏名称":"MAA",
3 | "功能": [
4 | "运行MAA",
5 | "完成后操作"
6 | ],
7 | "运行MAA": "create",
8 | "完成后操作": "kill_game"
9 | }
--------------------------------------------------------------------------------
/assets/maa/picture/MAA-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/maa/picture/MAA-icon.png
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/PsExec64.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/bat_scr/PsExec64.exe
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/maa_create.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | cd. > "D:\Kin-project\SucroseGameAssistant/cache/maa_complete.txt"
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/psshutdown.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/bat_scr/psshutdown.exe
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/restart.bat:
--------------------------------------------------------------------------------
1 | @echo Rem 电脑熄屏
2 | TIMEOUT /T 2
3 | start /d "D:\Kin-project\SucroseGameAssistant" SGA.exe
4 |
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/restart.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("restart.bat",0)
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/screen_off.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/bat_scr/screen_off.bat
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/screen_off.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("screen_off.bat",0)
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/sleep.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/bat_scr/sleep.bat
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/sleep.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("sleep.bat",0)
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/start-SGA.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | tasklist|find /i "SGA.exe"
3 | if %errorlevel%==0 (
4 | echo "exit"
5 | ) else (
6 | start /d "D:\Kin-project\SucroseGameAssistant" SGA.exe
7 | )
8 | @echo on
--------------------------------------------------------------------------------
/assets/main_window/bat_scr/start-SGA.vbs:
--------------------------------------------------------------------------------
1 | Set shell = Wscript.createobject("wscript.shell")
2 | a=shell.run ("start-SGA.bat",0)
--------------------------------------------------------------------------------
/assets/main_window/default_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "模块": 0,
3 | "配置0": {"name": "未选择"},
4 | "配置1": {"name": "未选择"},
5 | "配置2": {"name": "未选择"},
6 | "配置3": {"name": "未选择"},
7 | "配置4": {"name": "未选择"},
8 | "运行": [
9 | false,
10 | false,
11 | false,
12 | false
13 | ]
14 | }
--------------------------------------------------------------------------------
/assets/main_window/schtasks_index.json:
--------------------------------------------------------------------------------
1 | {
2 | "part1": [
3 | "\n",
4 | "\n",
5 | " \n",
6 | " 2023-09-20T18:38:19.181979\n",
7 | " HXH-PC\\绘星痕\n",
8 | " \\MyTask3\n",
9 | " \n",
10 | " \n"
11 | ],
12 | "part2": [
13 | " \n",
14 | " \n",
15 | " \n",
16 | " S-1-5-32-544\n",
17 | " HighestAvailable\n",
18 | " \n",
19 | " \n",
20 | " \n",
21 | " IgnoreNew\n",
22 | " false\n",
23 | " true\n",
24 | " false\n",
25 | " false\n",
26 | " false\n",
27 | " \n",
28 | " true\n",
29 | " false\n",
30 | " \n",
31 | " false\n",
32 | " true\n",
33 | " false\n",
34 | " false\n",
35 | " true\n",
36 | " PT0S\n",
37 | " 7\n",
38 | " \n",
39 | " PT1M\n",
40 | " 3\n",
41 | " \n",
42 | " \n",
43 | " \n",
44 | " \n",
45 | " D:\\Kin-project\\SucroseGameAssistant/personal/bat/start-SGA.vbs\n",
46 | " C:\\Windows\\System32\\wscript.exe\n",
47 | " D:\\Kin-project\\SucroseGameAssistant/personal/bat\n",
48 | " \n",
49 | " \n",
50 | ""
51 | ],
52 | "daily": [
53 | " \n",
54 | " 2023-09-20T18:37:58\n",
55 | " true\n",
56 | " \n",
57 | " 1\n",
58 | " \n",
59 | " \n"
60 | ],
61 | "weekly": [
62 | " \n",
63 | " 2023-09-20T18:37:58\n",
64 | " true\n",
65 | " \n",
66 | " \n",
67 | " \n",
68 | " \n",
69 | " 1\n",
70 | " \n",
71 | " \n"
72 | ]
73 | }
--------------------------------------------------------------------------------
/assets/main_window/ui/SGA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/SGA.png
--------------------------------------------------------------------------------
/assets/main_window/ui/__pycache__/SGA_icon.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/__pycache__/SGA_icon.cpython-39.pyc
--------------------------------------------------------------------------------
/assets/main_window/ui/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/add.png
--------------------------------------------------------------------------------
/assets/main_window/ui/back/alipay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/back/alipay.png
--------------------------------------------------------------------------------
/assets/main_window/ui/back/set_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/back/set_back.png
--------------------------------------------------------------------------------
/assets/main_window/ui/back/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/back/wechat.png
--------------------------------------------------------------------------------
/assets/main_window/ui/bilibili.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/bilibili.png
--------------------------------------------------------------------------------
/assets/main_window/ui/choose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/choose.png
--------------------------------------------------------------------------------
/assets/main_window/ui/common-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/common-icon.png
--------------------------------------------------------------------------------
/assets/main_window/ui/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/delete.png
--------------------------------------------------------------------------------
/assets/main_window/ui/directory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/directory.png
--------------------------------------------------------------------------------
/assets/main_window/ui/finish.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/finish.png
--------------------------------------------------------------------------------
/assets/main_window/ui/gitee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/gitee.png
--------------------------------------------------------------------------------
/assets/main_window/ui/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/github.png
--------------------------------------------------------------------------------
/assets/main_window/ui/history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/history.png
--------------------------------------------------------------------------------
/assets/main_window/ui/hxh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/hxh.png
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/ico/0.png
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/ico/1.png
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/ico/2.png
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/ico/3.png
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/SGA.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/ico/SGA.ico
--------------------------------------------------------------------------------
/assets/main_window/ui/ico/ico.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | SAG.ico
4 |
5 |
--------------------------------------------------------------------------------
/assets/main_window/ui/load.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/load.png
--------------------------------------------------------------------------------
/assets/main_window/ui/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/lock.png
--------------------------------------------------------------------------------
/assets/main_window/ui/mix-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/mix-icon.png
--------------------------------------------------------------------------------
/assets/main_window/ui/presstrigger-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/presstrigger-icon.png
--------------------------------------------------------------------------------
/assets/main_window/ui/reduce.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/reduce.png
--------------------------------------------------------------------------------
/assets/main_window/ui/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/refresh.png
--------------------------------------------------------------------------------
/assets/main_window/ui/rename.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/rename.png
--------------------------------------------------------------------------------
/assets/main_window/ui/save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/save.png
--------------------------------------------------------------------------------
/assets/main_window/ui/set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/set.png
--------------------------------------------------------------------------------
/assets/main_window/ui/support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/support.png
--------------------------------------------------------------------------------
/assets/main_window/ui/unlock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/main_window/ui/unlock.png
--------------------------------------------------------------------------------
/assets/presstrigger/close.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/presstrigger/close.mp3
--------------------------------------------------------------------------------
/assets/presstrigger/open.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/presstrigger/open.mp3
--------------------------------------------------------------------------------
/assets/presstrigger/rule.txt:
--------------------------------------------------------------------------------
1 | -----<<<热键规则>>>-----
2 | 1、所有热键不区分大小写,使用"+"号充当组合键的连接,不需要输入引号。请自行规避热键冲突或未知的热键bug
3 | 2、禁用/启用热键 仅允许键盘的单键或组合键。如:"w", ",", "8", "alt+w","ctrl+alt+9"
4 | 3、触发热键 允许键盘的单键或组合键以及鼠标的单键和键盘修饰键与鼠标单键的组合键。如:"s", ",", "8", "ctrl+a","ctrl+alt+j","rclick","ctrl+rclick"
5 | 4、连点/按下键 允许键盘的单键或组合键以及鼠标的单键和键盘修饰键与鼠标单键的组合键。如:"s", ",", "8", "ctrl+a","ctrl+alt+j","rclick","ctrl+rclick"
6 | 5、间隔时间、重复次数需要输入整数。间隔时间单位为毫秒。
7 | 6、重复次数小于1时无限循环(仅用于脚本模式)
8 | 7、触发模式:长按模式为长按时持续触发,释放结束。短按模式为短按一次触发,再短按一次结束。
9 | 8、连点模式:连点模式为触发状态下,进行无限连点,可设置间隔时间。长按模式为触发状态下,键位持续保持按下状态。
10 | 脚本模式为为触发状态下,循环执行选定的脚本方案。
11 | 9、脚本模式 一行一个步骤,不允许空行。
12 |
13 | 禁用/启用热键 与 触发热键 键盘允许值:
14 | "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8",
15 | "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16",
16 | "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
17 | "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
18 | "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
19 | "U", "V", "W", "X", "Y", "Z",
20 | "SHIFT", "CTRL", "ALT", "WINDOWS",
21 | "LEFT SHIFT", "LEFT CTRL", "LEFT ALT", "LEFT WINDOWS",
22 | "RIGHT SHIFT", "RIGHT CTRL", "RIGHT ALT", "RIGHT WINDOWS",
23 | "ENTER", "TAB", "BACKSPACE",
24 | "LEFT", "UP", "RIGHT", "DOWN", "PAGEUP", "PAGEDOWN", "END", "HOME",
25 | "CAPSLOCK", "ESC", "NUMLOCK", "PAUSE", "SPACE", "INSERT", "DELETE",
26 | "PRINTSCREEN", "VOLUMEMUTE", "DECIMAL",
27 | "[", "]", "+", "-", "~", "`", "/", ',', '.', "\", "'", ";", "*"
28 |
29 | 触发热键 鼠标允许值:(鼠标左键右键中间侧键)
30 | "LCLICK", "RCLICK", "MCLICK", 'X1CLICK', 'X2CLICK'
31 |
32 | 连点/按下键 键盘允许值:
33 | "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8",
34 | "F9", "F10", "F11", "F12", "F13", "F14", "F15", "F16",
35 | "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
36 | "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
37 | "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
38 | "U", "V", "W", "X", "Y", "Z",
39 | "SHIFT", "CTRL", "ALT", "WINDOWS",
40 | "ENTER", "TAB", "BACKSPACE",
41 | "LEFT", "UP", "RIGHT", "DOWN", "PAGEUP", "PAGEDOWN", "END", "HOME",
42 | "CAPSLOCK", "ESC", "NUMLOCK", "PAUSE", "SPACE", "INSERT", "DELETE",
43 | "PRINTSCREEN", "VOLUMEMUTE", "DECIMAL",
44 | "[", "]", "+", "-", "~", "`", "/", ',', '.', "\", "'", ";", "*"
45 |
46 | 连点/按下键 键盘允许值:
47 | "LCLICK", "RCLICK", "MCLICK"
48 |
49 | 脚本模式
50 | 1、键盘允许键值同上
51 | 2、moveto为鼠标移动到坐标未知
52 | 3、wait为等待,单位为ms毫秒
53 | 脚本输入示例:
54 | clickdown: rclick
55 | clickup: rclick
56 | clickdown: lclick
57 | clickup: rclick
58 | clickdown: mclick
59 | clickup: mclick
60 | moveto: 1920,1080
61 | keydown: w
62 | keyup: w
--------------------------------------------------------------------------------
/assets/presstrigger/脚本示例.txt:
--------------------------------------------------------------------------------
1 | keydown:w
2 | wait:2000
3 | keyup:w
4 | wait:500
5 | clickdown:lclick
6 | wait:1500
7 | clickup:lclick
8 | wait:2000
9 | moveto:500,500
10 | wait:1000
11 | moveto:1000,1000
12 | wait:1000
--------------------------------------------------------------------------------
/assets/snow/default_snow_roll.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/default_snow_roll.xlsx
--------------------------------------------------------------------------------
/assets/snow/list.json:
--------------------------------------------------------------------------------
1 | {"活动后勤": [
2 | "明夷小队",
3 | "秋津小队",
4 | "阿玛纳小队",
5 | "心园小队",
6 | "伊莱小队",
7 | "极光小队",
8 | "祖灵小队",
9 | "沙叶小队",
10 | "金甲小队",
11 | "星朗小队",
12 | "清乐小队",
13 | "掠影小队",
14 | "射影小队",
15 | "钢羽小队",
16 | "超视小队",
17 | "泽虹小队",
18 | "新桃小队",
19 | "闻风小队",
20 | "微光小队",
21 | "希德小队",
22 | "花楸小队"] ,
23 | "个人故事": [
24 | "天鹅座", "悸响", "冥河代理人",
25 | "澜风", "夜天光", "琼弦", "小天师", "驰掣",
26 | "幽潮", "朝翼", "龙舌兰", "辉耀", "无限之视",
27 | "瞬刻", "羽蜕", "悖谬", "豹豹", "蓝闪",
28 | "魔术师", "藏锋", "溯影", "云篆", "辉夜",
29 | "咎冠", "冬至", "狂猎", "雨燕", "缄默",
30 | "小金鱼", "小太阳", "观测者", "黄金狮子", "养生专家",
31 | "猫猫", "星期三", "姐姐大人", "双面", "旧日王牌",
32 | "绷带小组", "不予显示", "四手"]}
--------------------------------------------------------------------------------
/assets/snow/picture/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/close.png
--------------------------------------------------------------------------------
/assets/snow/picture/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/home.png
--------------------------------------------------------------------------------
/assets/snow/picture/imitate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/imitate.png
--------------------------------------------------------------------------------
/assets/snow/picture/login2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/login2.png
--------------------------------------------------------------------------------
/assets/snow/picture/pre-load.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/pre-load.png
--------------------------------------------------------------------------------
/assets/snow/picture/rollcheck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/rollcheck.png
--------------------------------------------------------------------------------
/assets/snow/picture/snow-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/snow-icon.png
--------------------------------------------------------------------------------
/assets/snow/picture/snow-icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/snow-icon2.png
--------------------------------------------------------------------------------
/assets/snow/picture/supply.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/picture/supply.png
--------------------------------------------------------------------------------
/assets/snow/~$snow_roll_template.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/snow/~$snow_roll_template.xlsx
--------------------------------------------------------------------------------
/assets/ww/pictures/ww_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/ww/pictures/ww_logo.png
--------------------------------------------------------------------------------
/assets/zzz/pictures/zzz_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/assets/zzz/pictures/zzz_logo.png
--------------------------------------------------------------------------------
/multithread/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/multithread/__init__.py
--------------------------------------------------------------------------------
/multithread/cycle.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from ui.main.main_top import *
3 | from ui.element.control import *
4 | from traceback import format_exc
5 | from PyQt5.QtCore import QThread, pyqtSignal
6 | from task.main import TaskRun
7 | from pyautogui import press as papress
8 | from time import sleep
9 | import sys
10 |
11 |
12 | class Cycle(QThread, TaskRun):
13 | send = pyqtSignal(str, int, bool, bool)
14 |
15 | def __init__(self, ui): # mode true:集成运行 false:独立运行
16 | super(Cycle, self).__init__()
17 | self.ui = ui
18 |
19 | def run(self):
20 | # noinspection PyBroadException
21 | try:
22 | for i in range(self.ui.state["wait_time"]):
23 | sleep(6)
24 | self.ui.save_main_data()
25 | while 1:
26 | text = self.ui.check_timer()
27 | if text:
28 | self.time_to_run(text)
29 | break
30 | sleep(10)
31 | self.ui.save_main_data()
32 | sleep(10)
33 | except Exception:
34 | logger.error("时间循环线程异常:\n%s\n" % format_exc())
35 | sys.exit(1)
36 |
37 | def indicate(self, msg: str, mode=2, his=True, log=True):
38 | self.send.emit(msg, mode, his, log)
39 |
40 | def time_to_run(self, mode: str = ""):
41 | papress("numlock")
42 | wait(100)
43 | papress("numlock")
44 | notify("SGA 定时任务", f"10秒后开始 任务名:{mode}")
45 | wait(10000)
46 | self.ui.save_main_data()
47 | self.indicate("", 0)
48 | self.ui.task = self.ui.get_config_run(mode)
49 | self.ui.task["name"] = mode
50 | self.ui.task["current_mute"] = get_mute()
51 | if self.ui.task["静音"] and not self.ui.task["current_mute"]:
52 | change_mute()
53 | self.indicate("", 1)
54 | _name = self.ui.task["name"]
55 | self.indicate(f"开始执行:定时计划 {_name}")
56 | notify("开始定时任务", f"任务名:{_name}")
57 |
58 | pixmap = QPixmap(r"assets/main_window/ui/ico/0.png")
59 | self.ui.label_status.setPixmap(pixmap)
60 | self.ui.button_pause.show()
61 | self.ui.button_start.hide()
62 | sgs.set_state(True)
63 | keyboard.add_hotkey("ctrl+/", self.ui.stop)
64 | self.ui.sga_run.start()
65 |
--------------------------------------------------------------------------------
/multithread/main.py:
--------------------------------------------------------------------------------
1 | from PyQt5.QtWidgets import QApplication
2 | from ui.main.main_top import *
3 | from ui.element.control import *
4 | from ui.element.ui_part import *
5 | from traceback import format_exc
6 | from pyautogui import press as papress
7 | from sys import argv as sysargv
8 | from sys import exit as sysexit
9 | _hwnd = find_hwnd((1, "Qt5152QWindowIcon", "砂糖代理"))
10 | if _hwnd:
11 | foreground(_hwnd)
12 | sysexit(1)
13 | # 初始化窗口
14 | papress("numlock")
15 | wait(100)
16 | papress("numlock")
17 | while 1:
18 | v = get_pid("PaddleOCR-json.exe")
19 | if v:
20 | close(v)
21 | else:
22 | break
23 | QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
24 | QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
25 | QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
26 | application = QApplication(sysargv)
27 | sga_ui = MainTop()
28 | sga_ui.main_window.show()
29 | # 加载主配置
30 | try:
31 | sga_ui.load_main_config()
32 | except Exception as err:
33 | message_box("主配置加载失败(4/7):\n%s\n" % err)
34 | logger.critical("主配置加载失败(4/7):\n%s\n" % format_exc())
35 | sysexit(1)
36 | try:
37 | sga_ui.thread_load()
38 | except Exception as err:
39 | MessageBox(0, "线程加载失败(5/7):\n%s\n" % err, "砂糖代理", MB_OK)
40 | logger.critical("线程加载失败(5/7):\n%s\n" % format_exc())
41 | sysexit(1)
42 | # 功能链接
43 | try:
44 | # 功能键链接
45 | sga_ui.function_connect()
46 | except Exception as err:
47 | MessageBox(0, "状态链接失败(6/7):\n%s\n" % err, "砂糖代理", MB_OK)
48 | logger.critical("状态链接失败(6/7):\n%s\n" % format_exc())
49 | sysexit(1)
50 | try:
51 | # 全局设置:退出前保存 & 每10秒自动保存
52 | import atexit
53 | atexit.register(sga_ui.exit_save)
54 | if sga_ui.config["update"]:
55 | sga_ui.check_update(2)
56 | sga_ui.cycle.start()
57 | except Exception as err:
58 | MessageBox(0, "线程开启失败(7/7):\n%s\n" % err, "砂糖代理", MB_OK)
59 | logger.critical("线程开启失败(7/7):\n%s\n" % format_exc())
60 | sysexit(1)
61 | logger.info("启动SGA用户界面\n-------------------------------------")
62 | if len(sysargv) > 1:
63 | if sysargv[1] == "True":
64 | pass
65 | else:
66 | _hwnd = find_hwnd((1, "Qt5152QWindowIcon", "砂糖代理"))
67 | foreground(_hwnd)
68 | else:
69 | _hwnd = find_hwnd((1, "Qt5152QWindowIcon", "砂糖代理"))
70 | foreground(_hwnd)
71 | application.exec_()
72 |
73 |
74 | if __name__ == "__main__":
75 | pass
76 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | --index https://mirrors.aliyun.com/pypi/simple
2 | opencv-python
3 | PyQt5
4 | PyQt5-tools
5 | PyQt-Fluent-Widgets
6 | Pillow
7 | pywin32
8 | keyboard
9 | pyautogui
10 | pyyaml
11 | psutil
12 | win10toast
13 | comtypes
14 | pycaw
15 | openpyxl
16 | pyuac
17 | colorama
18 | requests
19 | cpufeature
20 | numpy
21 | ruamel.yaml
22 | pynput
23 | playsound3
24 | screeninfo
25 |
--------------------------------------------------------------------------------
/runtime_hook.py:
--------------------------------------------------------------------------------
1 | # runtime_hook.py
2 | import sys
3 | import os
4 | import shutil
5 |
6 |
7 | def copy_resources():
8 | if getattr(sys, 'frozen', False):
9 | # 需要复制到外部的资源列表
10 | resources = [
11 | ("assets", "assets"),
12 | ("README.md", "README.md"),
13 | ("update_history.txt", "update_history.txt"),
14 | ("3rd_package", "3rd_package"),
15 | ("Instructions.docx", "Instructions.docx"),
16 | ("SGA快速上手.docx", "SGA快速上手.docx")
17 | ]
18 |
19 | base_path = sys._MEIPASS if hasattr(sys, '_MEIPASS') else os.path.dirname(sys.executable)
20 |
21 | for src, dst in resources:
22 | dst_path = os.path.join(os.path.dirname(sys.executable), dst)
23 | src_path = os.path.join(base_path, src)
24 | if os.path.exists(dst_path) or not os.path.exists(src_path):
25 | continue
26 | if os.path.isdir(src_path):
27 | shutil.move(src_path, dst_path)
28 | else:
29 | os.makedirs(os.path.dirname(dst_path), exist_ok=True)
30 | shutil.move(src_path, dst_path)
31 |
32 |
33 | copy_resources()
--------------------------------------------------------------------------------
/task/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/__init__.py
--------------------------------------------------------------------------------
/task/common/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/common/__init__.py
--------------------------------------------------------------------------------
/task/default_task.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 |
3 |
4 | class Task:
5 | def __init__(self):
6 | self.task_all = None
7 | self.task = None
8 |
9 | @staticmethod
10 | def indicate(msg: str, mode=2, his=True, log=True):
11 | logger(msg)
12 |
--------------------------------------------------------------------------------
/task/genshin/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/genshin/__init__.py
--------------------------------------------------------------------------------
/task/genshin/cut_tree/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/genshin/cut_tree/__init__.py
--------------------------------------------------------------------------------
/task/genshin/cut_tree/fontaine.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from task.genshin.genshin import Genshin
3 |
4 |
5 | class Fontaine(Genshin):
6 | # 悬铃木
7 | def mallow(self):
8 | self.indicate("采集:悬铃木×9,椴木×3")
9 | self.home()
10 | self.tp_domain("罪祸的终末")
11 | wait(800)
12 | click((1682, 1008))
13 | self.world()
14 | keydown("S")
15 | wait(10000)
16 | keyup("S")
17 | wait(300)
18 | keydown("D")
19 | wait(300)
20 | keyup("D")
21 | wait(300)
22 | keydown("S")
23 | wait(2000)
24 | keyup("S")
25 | wait(300)
26 | keydown("A")
27 | wait(1000)
28 | keyup("A")
29 | wait(500)
30 | press("Z")
31 | wait(500)
32 |
33 | # 炬木
34 | def torch(self):
35 | self.indicate("采集:炬木×15")
36 | self.home()
37 | self.tp_domain("苍白的遗荣")
38 | click((545, 1000))
39 | wait(800)
40 | self.tp_point(1)
41 | keydown("A")
42 | wait(3300)
43 | keyup("A")
44 | wait(500)
45 | keydown("W")
46 | wait(3000)
47 | keyup("W")
48 | wait(500)
49 | keydown("A")
50 | wait(1200)
51 | keyup("A")
52 | wait(500)
53 | press("Z")
54 | wait(500)
55 |
56 | # 白梣木
57 | def ash(self):
58 | self.indicate("采集:白梣木×12")
59 | self.home()
60 | self.tp_domain("苍白的遗荣")
61 | click((522, 808))
62 | wait(800)
63 | self.tp_point(2)
64 | keydown("S")
65 | wait(8000)
66 | keyup("S")
67 | wait(500)
68 | keydown("A")
69 | wait(7000)
70 | keyup("A")
71 | wait(500)
72 | keydown("W")
73 | wait(3400)
74 | keyup("W")
75 | wait(500)
76 | keydown("A")
77 | wait(4700)
78 | keyup("A")
79 | wait(500)
80 | press("Z")
81 | wait(500)
82 |
83 | # 椴木
84 | def linden(self):
85 | self.indicate("采集:椴木×9")
86 | self.home()
87 | self.tp_domain("罪祸的终末")
88 | wait(800)
89 | click((1682, 1008))
90 | self.world()
91 | keydown("S")
92 | wait(2500)
93 | keyup("S")
94 | wait(500)
95 | keydown("A")
96 | wait(2500)
97 | keyup("A")
98 | wait(300)
99 | keydown("W")
100 | wait(11800)
101 | keyup("W")
102 | wait(300)
103 | keydown("A")
104 | wait(100)
105 | keyup("A")
106 | wait(300)
107 | press("Z")
108 | wait(500)
109 |
110 | # 香柏木
111 | def cypress(self):
112 | self.indicate("采集:香柏木×15")
113 | self.home()
114 | self.tp_domain("罪祸的终末")
115 | click((1213, 201))
116 | wait(800)
117 | self.tp_point(0)
118 | keydown("S")
119 | wait(4000)
120 | keyup("S")
121 | wait(500)
122 | keydown("D")
123 | wait(6000)
124 | keyup("D")
125 | wait(500)
126 | keydown("W")
127 | wait(3000)
128 | keyup("W")
129 | wait(500)
130 | keydown("D")
131 | wait(3600)
132 | keyup("D")
133 | wait(500)
134 | keydown("W")
135 | wait(2100)
136 | keyup("W")
137 | wait(500)
138 | press("Z")
139 | wait(500)
--------------------------------------------------------------------------------
/task/genshin/cut_tree/inazuma.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from task.genshin.genshin import Genshin
3 |
4 |
5 | class Inazuma(Genshin):
6 | # 御伽木
7 | def otogi(self):
8 | self.indicate("采集:御伽木×12")
9 | self.home()
10 | self.tp_domain("椛染之庭")
11 | click((824, 311))
12 | wait(800)
13 | self.tp_point(0)
14 | keydown("A")
15 | wait(9700)
16 | keyup("A")
17 | wait(300)
18 | keydown("W")
19 | wait(1100)
20 | keyup("W")
21 | wait(300)
22 | press("Z")
23 | wait(300)
24 |
25 | # 孔雀木&御伽木
26 | def aralia_otogi(self):
27 | self.indicate("采集:孔雀木×18 御伽木×3")
28 | self.home()
29 | self.tp_domain("砂流之庭")
30 | click((978, 845))
31 | wait(800)
32 | self.tp_point(0)
33 | keydown("A")
34 | wait(4200)
35 | keyup("A")
36 | wait(300)
37 | press("Z")
38 | wait(300)
39 | keydown("A")
40 | wait(300)
41 | keyup("A")
42 | wait(300)
43 | keydown("S")
44 | wait(2700)
45 | keyup("S")
46 | wait(300)
47 | keydown("D")
48 | wait(500)
49 | keyup("D")
50 | wait(11800)
51 | press("Z")
52 | wait(300)
53 |
54 | # 枫木
55 | def maple(self):
56 | self.indicate("采集:枫木×12")
57 | self.home()
58 | self.tp_domain("砂流之庭")
59 | click((566, 555))
60 | wait(800)
61 | self.tp_point(2)
62 | keydown("A")
63 | wait(1000)
64 | keyup("A")
65 | wait(300)
66 | keydown("W")
67 | wait(1400)
68 | keyup("W")
69 | wait(300)
70 | press("Z")
71 | wait(300)
72 | keydown("D")
73 | wait(5300)
74 | keyup("D")
75 | wait(300)
76 | keydown("W")
77 | wait(4000)
78 | keyup("W")
79 | wait(6300)
80 | press("Z")
81 | wait(300)
82 | keydown("D")
83 | wait(3000)
84 | keyup("D")
85 | wait(12800)
86 | press("Z")
87 | wait(300)
88 | keydown("W")
89 | wait(5800)
90 | keyup("W")
91 | wait(9800)
92 | press("Z")
93 | wait(300)
94 |
95 | # 梦见木
96 | def yumemiru(self):
97 | self.indicate("采集:梦见木×12")
98 | self.home()
99 | self.tp_domain("砂流之庭")
100 | click((937, 617))
101 | wait(800)
102 | self.tp_point(0)
103 | keydown("S")
104 | wait(1300)
105 | keyup("S")
106 | wait(500)
107 | keydown("A")
108 | wait(400)
109 | keyup("A")
110 | wait(300)
111 | press("Z")
112 | wait(300)
113 | keydown("W")
114 | wait(500)
115 | keyup("W")
116 | wait(500)
117 | keydown("D")
118 | wait(2200)
119 | keyup("D")
120 | wait(500)
121 | keydown("W")
122 | wait(1000)
123 | keyup("W")
124 | wait(300)
125 | keydown("D")
126 | wait(800)
127 | keyup("D")
128 | wait(300)
129 | keydown("W")
130 | wait(500)
131 | keyup("W")
132 | wait(9000)
133 | press("Z")
134 | wait(500)
135 |
--------------------------------------------------------------------------------
/task/genshin/cut_tree/liyue.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from task.genshin.genshin import Genshin
3 |
4 |
5 | class LiYue(Genshin):
6 | # 却砂木
7 | def sand_bearer(self):
8 | self.indicate("采集:却砂木×9")
9 | self.home()
10 | self.tp_domain("华池岩岫")
11 | click((1080, 332))
12 | wait(800)
13 | self.tp_point(0)
14 | keydown("A")
15 | wait(1500)
16 | keyup("A")
17 | wait(300)
18 | keydown("W")
19 | wait(4600)
20 | keyup("W")
21 | wait(300)
22 | keydown("A")
23 | wait(400)
24 | keyup("A")
25 | wait(300)
26 | press("Z")
27 | wait(500)
28 |
29 | # 竹节
30 | def bamboo(self):
31 | self.indicate("采集:竹节×30")
32 | self.home()
33 | self.tp_domain("无妄引咎密宫")
34 | click((609, 663))
35 | wait(800)
36 | self.tp_point(0)
37 | keydown("D")
38 | wait(7400)
39 | keyup("D")
40 | wait(300)
41 | keydown("W")
42 | wait(500)
43 | keyup("W")
44 | wait(300)
45 | press("Z")
46 | wait(300)
--------------------------------------------------------------------------------
/task/genshin/cut_tree/main.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from .mondstadt import Mondstadt
3 | from .liyue import LiYue
4 | from .sumeru import Sumeru
5 | from .inazuma import Inazuma
6 | from .fontaine import Fontaine
7 |
8 |
9 | class CutTree(Mondstadt, LiYue, Inazuma, Sumeru, Fontaine):
10 | def genshin_cut_tree(self):
11 | _freq = self.task["砍树次数"]
12 | if not _freq:
13 | self.indicate("循环次数应大于0")
14 | return True
15 | _num = 0
16 | for i in range(19):
17 | if self.task[f"砍树{i}"]:
18 | _num += 1
19 | if _num < 5:
20 | self.indicate("选择点位数应>=5以保障木材刷新循环")
21 | return True
22 | self.home()
23 | self.indicate("检查王树瑞佑。")
24 | self.open_sub("背包")
25 | wait(2000)
26 | self.check_overdue()
27 | click((1053, 48))
28 | wait(800)
29 | _p, val = find_pic(r"assets\genshin\picture\lit_tools\boon_elder_tree.png",
30 | (110, 112, 1273, 805))
31 | if val < 0.75:
32 | self.indicate("没有找到道具:王树瑞佑")
33 | return True
34 | else:
35 | click(_p)
36 | wait(800)
37 | if find_pic(r"assets\genshin\picture\lit_tools\unload.png",
38 | (1637, 972, 1765, 1068))[1] >= 0.75:
39 | self.indicate("王树瑞佑已装备。")
40 | click((1840, 47))
41 | wait(1500)
42 | else:
43 | self.indicate("装备王树瑞佑。")
44 | click((1694, 1013))
45 | wait(1500)
46 | self.indicate(f"采集木材计划开始:\n"
47 | f" 点位{_num}个\n"
48 | f" 循环次数:{_freq}")
49 | for f in range(_freq):
50 | if self.task["砍树0"]:
51 | self.birch()
52 | if self.task["砍树1"]:
53 | self.cuihua()
54 | if self.task["砍树2"]:
55 | self.pine()
56 | if self.task["砍树3"]:
57 | self.sand_bearer()
58 | if self.task["砍树4"]:
59 | self.bamboo()
60 | if self.task["砍树5"]:
61 | self.fragrant()
62 | if self.task["砍树6"]:
63 | self.fir()
64 | if self.task["砍树7"]:
65 | self.yumemiru()
66 | if self.task["砍树8"]:
67 | self.maple()
68 | if self.task["砍树9"]:
69 | self.aralia_otogi()
70 | if self.task["砍树10"]:
71 | self.otogi()
72 | if self.task["砍树11"]:
73 | self.karmaphala_bright()
74 | if self.task["砍树12"]:
75 | self.adhigama()
76 | if self.task["砍树13"]:
77 | self.mountain_date()
78 | if self.task["砍树14"]:
79 | self.mallow()
80 | if self.task["砍树15"]:
81 | self.linden()
82 | if self.task["砍树16"]:
83 | self.ash()
84 | if self.task["砍树17"]:
85 | self.cypress()
86 | if self.task["砍树18"]:
87 | self.torch()
88 | return False
89 |
--------------------------------------------------------------------------------
/task/genshin/cut_tree/mondstadt.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from task.genshin.genshin import Genshin
3 |
4 |
5 | class Mondstadt(Genshin):
6 | # 桦木_萃华木
7 | def birch(self):
8 | self.indicate("采集:桦木×9 萃华木×3")
9 | self.home()
10 | self.tp_domain("忘却之峡")
11 | click((1875, 35))
12 | wait(800)
13 | click((1718, 814))
14 | wait(800)
15 | self.tp_point(3)
16 | keydown("A")
17 | wait(4900)
18 | keyup("A")
19 | wait(300)
20 | keydown("W")
21 | wait(2600)
22 | keyup("W")
23 | wait(300)
24 | press("Z")
25 | wait(300)
26 |
27 | # 萃华木_垂香木_孔雀木
28 | def cuihua(self):
29 | self.indicate("采集:萃华木×9 垂香木×3 孔雀木×6")
30 | self.home()
31 | self.tp_domain("仲夏庭园")
32 | click((619, 763))
33 | wait(800)
34 | self.tp_point(0)
35 | keydown("S")
36 | wait(2000)
37 | keyup("S")
38 | wait(300)
39 | keydown("A")
40 | wait(6800)
41 | keyup("A")
42 | wait(300)
43 | keydown("S")
44 | wait(1000)
45 | keyup("S")
46 | wait(300)
47 | press("Z")
48 | wait(300)
49 |
50 | self.home()
51 | self.tp_domain("砂流之庭")
52 | click((1675, 1011))
53 | wait(800)
54 | self.world()
55 | keydown("A")
56 | wait(2500)
57 | keyup("A")
58 | wait(300)
59 | keydown("W")
60 | wait(800)
61 | keyup("W")
62 | wait(300)
63 | press("Z")
64 | wait(300)
65 |
66 | # 松木
67 | def pine(self):
68 | self.indicate("采集:松木×12")
69 | self.home()
70 | self.tp_domain("仲夏庭园")
71 | click((426, 701))
72 | wait(800)
73 | self.tp_point(0)
74 | keydown("S")
75 | wait(2500)
76 | keyup("S")
77 | wait(300)
78 | keydown("D")
79 | wait(1500)
80 | keyup("D")
81 | wait(300)
82 | press("Z")
83 | wait(300)
84 |
85 | # 杉木
86 | def fir(self):
87 | self.indicate("采集:杉木×12")
88 | self.home()
89 | self.tp_domain("仲夏庭园")
90 | click((733, 353))
91 | wait(800)
92 | self.tp_point(0)
93 | keydown("A")
94 | wait(5500)
95 | keyup("A")
96 | wait(300)
97 | keydown("S")
98 | wait(1700)
99 | keyup("S")
100 | wait(300)
101 | keydown("A")
102 | wait(4500)
103 | keyup("A")
104 | wait(300)
105 | press("Z")
106 | wait(300)
107 | for i in range(4):
108 | press("F")
109 | wait(200)
110 |
111 | # 垂香木_萃华木
112 | def fragrant(self):
113 | self.indicate("采集:垂香木×15 萃华木×3")
114 | self.home()
115 | self.tp_domain("铭记之谷")
116 | click((742, 71))
117 | wait(800)
118 | self.tp_point(0)
119 | keydown("W")
120 | wait(4800)
121 | keyup("W")
122 | wait(300)
123 | press("Z")
124 | wait(300)
125 | keydown("W")
126 | wait(3000)
127 | keyup("W")
128 | wait(12800)
129 | press("Z")
130 | wait(300)
131 |
--------------------------------------------------------------------------------
/task/genshin/cut_tree/sumeru.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from task.genshin.genshin import Genshin
3 |
4 |
5 | class Sumeru(Genshin):
6 | # 柽木
7 | def athel(self):
8 | self.indicate("采集:柽木×12")
9 | self.home()
10 | self.tp_domain("赤金的城墟")
11 | click((371, 837))
12 | wait(800)
13 | self.tp_point(0)
14 | keydown("A")
15 | wait(1300)
16 | keyup("A")
17 | wait(500)
18 | keydown("W")
19 | wait(6300)
20 | keyup("W")
21 | wait(500)
22 | press("Z")
23 | wait(500)
24 |
25 | # 刺葵木
26 | def mountain_date(self):
27 | self.home()
28 | self.indicate("采集:刺葵木×12")
29 | self.tp_domain("赤金的城墟")
30 | click((46, 649))
31 | wait(800)
32 | click((1084, 982))
33 | wait(800)
34 | self.tp_point(0)
35 | keydown("D")
36 | wait(4500)
37 | keyup("D")
38 | wait(300)
39 | keydown("W")
40 | wait(3600)
41 | keyup("W")
42 | wait(300)
43 | press("Z")
44 | wait(500)
45 | # 第二段
46 | self.home()
47 | self.tp_domain("熔铁的孤塞")
48 | click((1009, 726))
49 | wait(800)
50 | self.tp_point(0)
51 | keydown("D")
52 | wait(6000)
53 | keyup("D")
54 | wait(300)
55 | keydown("W")
56 | wait(4000)
57 | keyup("W")
58 | wait(300)
59 | keydown("D")
60 | wait(5500)
61 | keyup("D")
62 | wait(300)
63 | keydown("W")
64 | wait(7900)
65 | keyup("W")
66 | wait(300)
67 | press("Z")
68 | wait(500)
69 |
70 | # 证悟木
71 | def adhigama(self):
72 | self.home()
73 | self.indicate("采集:证悟木×9")
74 | self.tp_domain("缘觉塔")
75 | click((694, 504))
76 | wait(800)
77 | self.tp_point(0)
78 | press("Z")
79 | wait(500)
80 |
81 | # 业果木_辉木
82 | def karmaphala_bright(self):
83 | self.home()
84 | self.indicate("采集:业果木×15,辉木×12")
85 | self.tp_domain("缘觉塔")
86 | click((243, 939))
87 | wait(800)
88 | self.tp_point(0)
89 | keydown("W")
90 | wait(8500)
91 | keyup("W")
92 | wait(300)
93 | press("Z")
94 | wait(300)
95 | keydown("S")
96 | wait(500)
97 | keyup("S")
98 | wait(300)
99 | keydown("D")
100 | wait(2500)
101 | keyup("D")
102 | wait(11500)
103 | press("Z")
104 | wait(500)
105 |
--------------------------------------------------------------------------------
/task/genshin/gpass.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from .genshin import Genshin
3 |
4 |
5 | class Pass(Genshin):
6 | def genshin_pass(self):
7 | self.home()
8 | #打开纪行
9 | if click_pic(r"assets\genshin\picture\gpass.png",(117, 346, 742, 1052)):
10 | for i in range(10):
11 | if "纪行" in ocr((134, 24, 199, 70)) :
12 | break
13 | else:
14 | click((1781, 52))
15 | wait(300)
16 | click((1781, 52))
17 | wait(300)
18 |
19 | #进入纪行任务界面
20 | for i in range(3):
21 | click((959, 50))
22 | wait(100)
23 |
24 | #领领取已完成的纪行任务
25 | if "领取" in ocr((1663, 939, 1824, 1018))[0]:
26 | click_text("领取" ,(1663, 939, 1824, 1018))
27 | wait(1500)
28 | self.indicate("领取已完成的纪行任务")
29 | else:
30 | self.indicate("暂无纪行任务完成")
31 |
32 | #领取纪行奖励
33 | click((860, 49))
34 | wait(1000)
35 | if "领取" in ocr((1663, 939, 1824, 1018))[0]:
36 | click_text("领取" ,(1663, 939, 1824, 1018))
37 | wait(1500)
38 | click((974,964))
39 | wait(1000)
40 | self.indicate("领取纪行奖励")
41 | else:
42 | self.indicate("暂无纪行奖励可领取")
43 |
44 | self.home()
45 | else:
46 | self.indicate("纪行未开启")
47 |
--------------------------------------------------------------------------------
/task/genshin/mail.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from .genshin import Genshin
3 |
4 |
5 | class Mail(Genshin):
6 | def genshin_mail(self):
7 | self.home()
8 | if find_color("red", (12, 560, 107, 648))[1]:
9 | self.indicate("存在新邮件")
10 | click((46, 607))
11 | wait(2000)
12 | click((239, 1020))
13 | wait(2000)
14 | click((931, 1007))
15 | wait(2000)
16 | click((1843, 44))
17 | wait(2000)
18 | else:
19 | self.indicate("暂无邮件可领取")
20 |
21 |
--------------------------------------------------------------------------------
/task/genshin/rambler.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from .genshin import Genshin
3 |
4 |
5 | class Rambler(Genshin):
6 | def genshin_rambler(self):
7 | self.tp_fontaine1()
8 | self.home()
9 | self.open_sub("背包")
10 | wait(1500)
11 | self.check_overdue()
12 | click((1053, 48))
13 | wait(800)
14 | _p = find_pic(r"assets\genshin\picture\lit_tools\rambler.png",
15 | (109, 113, 1275, 459))[0]
16 | click(_p)
17 | wait(800)
18 | click((1694, 1022))
19 | wait(800)
20 | press("esc")
21 | wait(1000)
22 | press("F")
23 | wait(3000)
24 | self.world()
25 | self.indicate("到达尘歌壶:璃月主建筑")
26 |
27 | keydown("S")
28 | wait(200)
29 | keyup("S")
30 | wait(500)
31 | keydown("D")
32 | wait(400)
33 | keyup("D")
34 | self.indicate("到达阿圆")
35 | press("F")
36 | wait(2000)
37 | click((1300, 431))
38 | wait(2000)
39 | click((1300, 431))
40 | wait(2000)
41 | click((1076, 950))
42 | wait(800)
43 | click((1815, 899))
44 | wait(800)
45 | click((1805, 704))
46 | wait(800)
47 | click((1815, 899))
48 | wait(800)
49 | click((1874, 48))
50 | wait(4000)
51 | click((1362, 800))
52 | wait(1000)
53 | click((1362, 800))
54 | self.home()
55 |
--------------------------------------------------------------------------------
/task/genshin/team.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from .genshin import Genshin
3 |
4 |
5 | class Team(Genshin):
6 | # 切换到标准队伍(1号队)
7 | def genshin_team(self):
8 | self.team_change_to(1)
9 | self.indicate("已切换至探索队伍")
--------------------------------------------------------------------------------
/task/kaa/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/task/kaa/main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import subprocess
3 | from datetime import datetime
4 | from ..default_task import Task
5 | from traceback import format_exc
6 | from tools.environment import wait, SGAStop
7 | from tools.software import get_pid, close
8 |
9 | class TaskKaa(Task):
10 | def __init__(self):
11 | super().__init__()
12 |
13 | def kaa_start(self, task: type[dir]):
14 | self.task = task
15 | self.indicate("开始任务:琴音小助手")
16 | # noinspection PyBroadException
17 | try:
18 | #判断路径
19 | base_path = self.task["启动"]["kaa_path"]
20 | if not os.path.exists(base_path):
21 | self.indicate("琴音小助手,程序文件夹不存在")
22 | raise ValueError("琴音小助手,路径错误")
23 | kaa_path = os.path.join(base_path, "WPy64-310111", "python-3.10.11.amd64", "Scripts", "kaa.exe")
24 | config_path = os.path.join(base_path, "config.json")
25 | log_path = os.path.join(base_path, "logs", datetime.now().strftime('logs/sga-%y-%m-%d-%H-%M-%S.log'))
26 | if not os.path.exists(kaa_path):
27 | self.indicate("琴音小助手,路径正确但未安装.需至少执行一次琴音小助手本体才能使用.")
28 | raise ValueError("琴音小助手,路径错误")
29 | if not os.path.exists(config_path):
30 | self.indicate("琴音小助手,配置文件不存在.需至少执行一次琴音小助手本体才能使用.")
31 | raise ValueError("琴音小助手,路径错误")
32 | self.kaa_wait(kaa_path, config_path, log_path)
33 | return False
34 | except Exception:
35 | self.indicate("任务执行异常:琴音小助手", log=False)
36 | self.indicate("任务执行异常:琴音小助手\n%s" % format_exc(), log=True)
37 | except SGAStop:
38 | raise SGAStop
39 | return True
40 |
41 | def kaa_wait(self, kaa_path, config_path, log_path):
42 | pid = get_pid("kaa.exe")
43 | if pid:
44 | self.indicate("琴音小助手已启动,准备重启")
45 | close(pid)
46 |
47 | self.indicate("正在启动琴音小助手...")
48 | self.indicate("配置文件路径:" + config_path)
49 | try:
50 | p = subprocess.Popen(
51 | [
52 | kaa_path,
53 | '--config', config_path,
54 | '--log-path', log_path,
55 | '--log-level', 'DEBUG',
56 | '--kill-dmm',
57 | '--kill-game',
58 | 'task', 'invoke', '*'
59 | ],
60 | creationflags=subprocess.CREATE_NEW_CONSOLE
61 | )
62 | self.indicate("琴音小助手运行中...")
63 | wait(10000)
64 |
65 | # while True:
66 | # wait(10000)
67 | # pid = get_pid("kaa.exe")
68 | # if not pid:
69 | # break
70 | p.wait()
71 | self.indicate("琴音小助手运行完成")
72 | return True
73 | except Exception as e:
74 | self.indicate("琴音小助手启动失败: %s" % str(e))
75 | return False
76 |
--------------------------------------------------------------------------------
/task/kleins/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/kleins/__init__.py
--------------------------------------------------------------------------------
/task/kleins/dispatch.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Dispatch(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_dispatch(self):
10 | click((146, 720))
11 | wait(1500)
12 | click((1563, 141))
13 | wait(1000)
14 | _list = [[176, 209], [285, 317], [394, 427],
15 | [503, 539], [612, 645], [722, 755]]
16 | _c = [[735, 223], [734, 337], [734, 444],
17 | [739, 549], [737, 660], [733, 769]]
18 | _dir = {"线下采购材料":
19 | ["食油", "黄油", "生抽", "食盐", "胡椒",
20 | "酱料", "糖类", "芥末", "香料粉", "西红柿醋"],
21 | "携带资金": ["零元购", "1000格", "2000格", "3000格"],
22 | "采购方案": ["固定物品", "额外物品", "减少时间"]}
23 | for n in range(6):
24 | y1, y2 = _list[n]
25 | _p = _c[n]
26 | zoom = (1068, y1, 1228, y2)
27 | _text = ocr(zoom)[0]
28 | if (":" in _text) or (":" in _text):
29 | self.indicate("线下采购" + str(n + 1) + ":进行中")
30 | continue
31 | elif _text == "采购完成":
32 | click(_p)
33 | wait(400)
34 | click((1708, 977))
35 | wait(1200)
36 | if self.task["再次采购"]:
37 | click((1208, 845))
38 | self.indicate("线下采购" + str(n + 1) + ":完成 再次采购")
39 | wait(1500)
40 | continue
41 | else:
42 | click((878, 851))
43 | self.indicate("线下采购" + str(n + 1) + ":完成 已领取")
44 | wait(1200)
45 | elif _text == "尚未安排采购":
46 | self.indicate("线下采购" + str(n + 1) + ":待派遣")
47 | click(_p)
48 | wait(400)
49 | else:
50 | self.indicate("error:线下采购" + str(n + 1) + " 识别异常")
51 | raise RuntimeError("线下采购" + str(n + 1) + " 识别异常")
52 | click((1562, 939))
53 | wait(800)
54 | _mat, _fund, _plan = self.task[f"采购{n}"]
55 | _path = "assets/kleins/picture/dispatch/zone"+str(_mat)+".png"
56 | _p, sim = find_pic(_path, (666, 420, 1860, 484))
57 | if sim == 0:
58 | drag((1128, 451), (-200, 0))
59 | wait(800)
60 | _p, sim = find_pic(_path, (666, 420, 1860, 484))
61 | click(_p)
62 | wait(500)
63 | _p = [(951, 667), (961, 749), (960, 838)][_fund]
64 | click(_p)
65 | wait(500)
66 | click((1571, 883))
67 | wait(1500)
68 | _p, sim = find_pic(f"assets/kleins/picture/dispatch/plan{_plan}.png", (194, 145, 454, 585))
69 | if sim >= 0.85:
70 | click(_p)
71 | wait(500)
72 | self.indicate("线下采购开始:\n " +
73 | _dir["线下采购材料"][_mat] +
74 | "\n "+_dir["携带资金"][_fund] +
75 | "\n "+_dir["采购方案"][_plan])
76 | else:
77 | self.indicate("采购方案未找到目标,已自动选择一号位。")
78 | self.indicate("线下采购开始:\n " +
79 | _dir["线下采购材料"][_mat] +
80 | "\n "+_dir["携带资金"][_fund])
81 | click((143, 151))
82 | wait(500)
83 | click((397, 1008))
84 | wait(1500)
85 | # 结束
86 | click((296, 75))
87 | wait(1000)
88 |
--------------------------------------------------------------------------------
/task/kleins/fight.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Fight(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_fight(self):
10 | text = ocr((1675, 397, 1802, 439))[0]
11 | if (":" in text) or (":" in text):
12 | self.indicate("重游进行中,不能再次开启作战。")
13 | return False
14 | elif text == "完成重游":
15 | click((1739, 420))
16 | self.indicate("重游完成,领取重游奖励。")
17 | wait(2500)
18 | while 1:
19 | sc = scshot()
20 | if "向导等级" in ocr((827, 134, 1088, 262), sc)[0].replace(" ", ""):
21 | self.indicate("等级提升!")
22 | click((1282, 690))
23 | sc = scshot()
24 | if "再次重游" in ocr((1703, 50, 1832, 97), sc)[0].replace(" ", ""):
25 | wait(500)
26 | del sc
27 | if self.task["再次重游"]:
28 | click((1744, 80))
29 | wait(1800)
30 | _t = ocr((979, 290, 1855, 1051), mode=1)
31 | for i in _t:
32 | if "开始重游" in i[0]:
33 | click((1533, 546))
34 | wait(1000)
35 | click((1445, 819))
36 | wait(1500)
37 | elif "追忆" in i[0]:
38 | click((1687, 602))
39 | wait(1000)
40 | click((1606, 892))
41 | wait(1500)
42 | else:
43 | continue
44 | if "取消" in ocr((710, 756, 801, 806))[0].replace(" ", ""):
45 | self.indicate("能源不足。")
46 | click((761, 781))
47 | wait(1000)
48 | click((288, 78))
49 | wait(1500)
50 | return False
51 | else:
52 | self.indicate("开始重复上次作战。")
53 | click((288, 78))
54 | wait(1500)
55 | return False
56 | self.indicate("error:不能识别的界面")
57 | click((288, 78))
58 | wait(1500)
59 | return True
60 | else:
61 | click((971, 930))
62 | wait(800)
63 | break
64 | del sc
65 | wait(1000)
66 | else:
67 | self.indicate("作战空闲中。")
68 | click((1446, 359))
69 | wait(1500)
70 | click((737, 1028))
71 | wait(1500)
72 | num = self.task["作战关卡"]
73 | _p = [(519, 545), (885, 554), (1248, 534)][num]
74 | click(_p)
75 | wait(2000)
76 | click((786, 555))
77 | wait(1500)
78 | click((1077, 856))
79 | wait(1000)
80 | click((1525, 549))
81 | wait(500)
82 | click((1458, 816))
83 | wait(1500)
84 | if "取消" in ocr((710, 756, 801, 806))[0].replace(" ", ""):
85 | self.indicate("能源不足。")
86 | click((761, 781))
87 | wait(1000)
88 | else:
89 | self.indicate("开始作战:获取 "+["格", "风物志", "节"][num])
90 | click((288, 78))
91 | wait(1500)
92 | return False
93 |
--------------------------------------------------------------------------------
/task/kleins/mail.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Mail(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_get_mail(self):
10 | if find_color("red", (472, 26, 521, 80))[1]:
11 | wait(500)
12 | click((472, 78))
13 | wait(1500)
14 | click((577, 809))
15 | wait(2000)
16 | click((1006, 885))
17 | wait(2000)
18 | click((1791, 122))
19 | self.indicate("领取邮件完成")
20 | wait(2000)
21 | else:
22 | self.indicate("暂无新邮件")
23 | wait(500)
24 |
--------------------------------------------------------------------------------
/task/kleins/market.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Market(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_get_market(self):
10 | if not find_color("red", (304, 254, 377, 324))[1]:
11 | self.indicate("集市暂无可领取")
12 | else:
13 | click((283, 331))
14 | wait(1000)
15 | if find_color("red", (64, 308, 351, 384))[1]:
16 | click((198, 350))
17 | wait(500)
18 | if find_pic("assets/kleins/picture/market/daily.png", (399, 123, 768, 455))[1] >= 0.6:
19 | click((590, 285))
20 | wait(1200)
21 | click((1257, 723))
22 | wait(1200)
23 | self.indicate("领取每日配给完成")
24 | click((1054, 837))
25 | wait(1200)
26 | else:
27 | self.indicate("暂无每日配给可领取")
28 | else:
29 | self.indicate("暂无每日配给可领取")
30 | if find_color("red", (63, 468, 344, 546))[1]:
31 | click((203, 508))
32 | wait(1000)
33 | click((1487, 79))
34 | wait(2000)
35 | self.indicate("领取援外协议完成")
36 | click((1487, 79))
37 | wait(2000)
38 | if self.task["援外兑换"][0]:
39 | num = int(ocr((1663, 55, 1792, 95))[0].replace(" ", "")[:-4])
40 | if num >= 200:
41 | if click_text("外显记录"):
42 | wait(1500)
43 | click((1198, 654))
44 | wait(800)
45 | click((1261, 763))
46 | wait(2000)
47 | click((205, 913))
48 | self.indicate("兑换外显记录")
49 | wait(2000)
50 | else:
51 | self.indicate(f"援外协议不足: {num}")
52 | click((299, 77))
53 | wait(1000)
54 | return True
55 | num = int(ocr((1663, 55, 1792, 95))[0].replace(" ", "")[:-4])
56 | if num >= 200:
57 | _t = self.task["援外兑换"][1]
58 |
59 | if _t in ["遮阳伞", "小哑铃", "爱之歌", "手握式小风扇",
60 | "演唱会门票", "相机", "灯塔胶囊"]:
61 | roll((1128, 459), 55)
62 | wait(800)
63 | _t0 = _t
64 | elif _t == "须臾":
65 | _t0 = "须"
66 | elif _t == "燧石矿物":
67 | _t0 = "石矿物"
68 | else:
69 | _t0 = _t
70 | click_text(_t0)
71 | wait(1500)
72 | click((1190, 657))
73 | wait(800)
74 | click((1261, 763))
75 | wait(2000)
76 | self.indicate(f"兑换 {_t}")
77 | click((205, 913))
78 | wait(2000)
79 | else:
80 | self.indicate(f"援外协议不足: {num}")
81 | else:
82 | self.indicate("暂无援外协议可领取")
83 |
84 | click((299, 77))
85 | wait(1000)
86 |
--------------------------------------------------------------------------------
/task/kleins/network.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Network(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_market_network(self):
10 | if ocr((1596, 888, 1774, 945))[0]:
11 | click((419, 162))
12 | wait(1500)
13 | click((1690, 220))
14 | wait(800)
15 | if "一键领取" in ocr((1596, 888, 1774, 945))[0]:
16 | click((1670, 917))
17 | self.indicate("已领取通讯波频")
18 | wait(800)
19 | else:
20 | self.indicate("暂无可领取通讯波频")
21 | click((1414, 225))
22 | wait(500)
23 | if "一键领取" in ocr((1596, 888, 1774, 945))[0]:
24 | click((1670, 917))
25 | self.indicate("已领取通讯补助")
26 | wait(1200)
27 | click((918, 70))
28 | wait(1200)
29 | else:
30 | self.indicate("暂无可领取通讯补助")
31 | click((301, 81))
32 | wait(1000)
33 | else:
34 | self.indicate("卡门商网未开启")
35 |
--------------------------------------------------------------------------------
/task/kleins/review.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Review(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_review(self):
10 | _float = self.task["回顾"]
11 | if _float % 1 == 0:
12 | _num = int(_float)
13 | else:
14 | _num = round(_float, 1)
15 | click((1628, 946))
16 | wait(1000)
17 | click((258, 386))
18 | wait(1000)
19 | # 战术支援
20 | _list = [613, 779, 954, 1132, 1295, 1502, 1666, 798]
21 | for num in range(3):
22 | for _x in _list:
23 | click((_x, 795))
24 | wait(300)
25 | if num < 2:
26 | click((1646, 347))
27 | wait(500)
28 | if num < 1:
29 | wait(8500)
30 | self.indicate("战术支援完成")
31 | # 战术回顾
32 | click((293, 277))
33 | wait(500)
34 | _list = [(575, 820, 825, 868),
35 | (1003, 821, 1252, 867),
36 | (1430, 822, 1680, 867)]
37 | sc = scshot()
38 | for n in range(3):
39 | _text = ocr(_list[n], sc)[0]
40 | if _text == "回顾完成":
41 | self.indicate("战术回顾%s:已完成" % n)
42 | click(([704, 1134, 1562][n], 846))
43 | wait(1000)
44 | click((1648, 858))
45 | wait(1000)
46 | click((1060, 868))
47 | wait(1500)
48 | elif (":" in _text) or (":" in _text):
49 | self.indicate("战术回顾%s:进行中" % n)
50 | continue
51 | elif _text == "进行回顾":
52 | self.indicate("战术回顾%s:空闲" % n)
53 | else:
54 | self.indicate("error:战术回顾%s 识别异常" % n)
55 | raise RuntimeError("战术回顾%s 识别异常" % n)
56 | self.indicate("尝试创建战术回顾")
57 | _p = [(703, 846), (1130, 846), (1557, 847)][n]
58 | click(_p)
59 | wait(1000)
60 | click((734, 846))
61 | wait(500)
62 | _p = str(_num) + "%"
63 | _f = False
64 | for c in range(35):
65 | text_list = ocr((694, 153, 761, 938), mode=1)
66 | for _t in text_list:
67 | if _t[0] == _p:
68 | _p = center(_t[1])
69 | click(_p)
70 | wait(400)
71 | click((524, 1007))
72 | wait(1000)
73 | _f = True
74 | break
75 | if _f:
76 | break
77 | roll((476, 833), -19)
78 | wait(800)
79 | if c == 34:
80 | click((144, 70))
81 | wait(500)
82 | click((700, 845))
83 | wait(800)
84 | click((586, 226))
85 | wait(500)
86 | click((1652, 875))
87 | self.indicate("战术回顾%s开始" % n)
88 | wait(1500)
89 | del sc
90 | # 结束
91 | click((296, 75))
92 | wait(1000)
93 |
--------------------------------------------------------------------------------
/task/kleins/reward.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Reward(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_reward(self):
10 | if not find_color("red", (172, 415, 238, 470))[1]:
11 | self.indicate("暂无任务奖励")
12 | wait(500)
13 | else:
14 | click((145, 430))
15 | wait(1500)
16 | if find_color("red", (753, 146, 790, 189))[1]:
17 | click((727, 183))
18 | wait(1000)
19 | click((1340, 1009))
20 | wait(2000)
21 | click((941, 827))
22 | wait(2000)
23 | self.indicate("领取任务奖励")
24 | else:
25 | self.indicate("暂无任务奖励")
26 | if self.task["每周补给"][0]:
27 | click((725, 418))
28 | wait(1500)
29 | num = int(ocr((1602, 44, 1734, 78))[0].replace(" ", "")[:-4])
30 | if num >= 300:
31 | self.indicate(f"补给点数: {num}")
32 | for i in ["因", "能源", "礼物", self.task["每周补给"][1], self.task["每周补给"][2]]:
33 | if click_text(i):
34 | wait(2500)
35 | if "兑换" in ocr((1214, 739, 1299, 790))[0]:
36 | click((1371, 564))
37 | wait(800)
38 | click((1284, 775))
39 | wait(2000)
40 | click((192, 930))
41 | self.indicate(f"兑换 {i}")
42 | wait(2000)
43 | num = int(ocr((1602, 44, 1734, 78))[0].replace(" ", "")[:-4])
44 | if num >= 300:
45 | continue
46 | else:
47 | self.indicate(f"补给点数不足300: {num}")
48 | break
49 | else:
50 | self.indicate(f"补给点数不足300: {num}")
51 | click((296, 75))
52 | wait(1000)
53 |
--------------------------------------------------------------------------------
/task/kleins/roll.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Roll(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def kleins_get_roll(self):
10 | click((1698, 692))
11 | for i in range(10):
12 | wait(1000)
13 | if click_text("联络记录", (294, 994, 428, 1046)):
14 | break
15 | elif i < 9:
16 | wait(1000)
17 | else:
18 | self.indicate("error:\n 获取抽卡记录,等待超时")
19 | raise RuntimeError("环行旅舍:获取抽卡记录,等待超时")
20 | wait(1200)
21 | _path = "personal/kleins/roll/history.json"
22 | current = {
23 | "定向联络": [
24 | ],
25 | "常态联络": [
26 | ],
27 | "初始联络": [
28 | ],
29 | "限定联络": [
30 | ]
31 | }
32 | if exists(_path):
33 | with open(_path, 'r', encoding='utf-8') as m:
34 | _dir = load(m)
35 | current.update(_dir)
36 | _list = [360, 407, 452, 498, 543, 589, 634, 680, 725, 771]
37 | for i in ["定向联络", "常态联络", "初始联络", "限定联络"]:
38 | self.indicate("开始识别:"+i)
39 | click((1385, 219))
40 | wait(500)
41 | if click_text(i, (1212, 199, 1330, 357)):
42 | wait(500)
43 | else:
44 | self.indicate("error:\n 获取抽卡记录,界面识别异常")
45 | raise RuntimeError("环行旅舍:获取抽卡记录,界面识别异常")
46 | _l = current[i]
47 | _nl = []
48 | for p in range(30):
49 | sc = scshot()
50 | for y in _list:
51 | time = ocr((544, y, 798, y + 37), sc)[0]
52 | banner = ocr((836, y, 1011, y + 37), sc)[0]
53 | rare = ocr((1070, y, 1125, y + 37), sc)[0]
54 | name = ocr((1219, y, 1362, y + 37), sc)[0]
55 | if ["", "", "", ""] == [time, banner, rare, name]:
56 | print(time, banner, rare, name)
57 | break
58 | _line = [time.strip(" "), banner.strip(" ").rstrip("\u3000"),
59 | rare.strip(" "), name.strip(" ").rstrip("\u3000")]
60 | if _line not in _l:
61 | _nl = [_line] + _nl
62 | _text = ocr((903, 839, 1018, 884), sc)[0]
63 | del sc
64 | _num = int(_text.split("/")[-1])
65 | if p+1 == _num:
66 | self.indicate("识别完成:" + i)
67 | break
68 | else:
69 | click((1042, 861))
70 | wait(500)
71 | current[i] = _l+_nl
72 | with open("personal/kleins/roll/history.json", 'w', encoding='utf-8') as x:
73 | dump(current, x, ensure_ascii=False, indent=1)
74 | click((1753, 182))
75 | wait(800)
76 | click((153, 68))
77 | wait(2000)
78 |
--------------------------------------------------------------------------------
/task/m7a/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/m7a/__init__.py
--------------------------------------------------------------------------------
/task/m7a/main.py:
--------------------------------------------------------------------------------
1 | from ..default_task import Task
2 | from tools.environment import *
3 | from tools.software import get_pid, close, find_hwnd
4 | from ruamel.yaml import YAML
5 |
6 | class TaskM7A(Task):
7 | def __init__(self):
8 | super().__init__()
9 |
10 | def m7a_start(self, task: type[dir]):
11 | _k = False
12 | self.task = task
13 | self.indicate("开始任务:崩坏:星穹铁道助手")
14 | # noinspection PyBroadException
15 | try:
16 | #判断路径
17 | _path = self.task["启动"]["m7a_path"]
18 | if isfile(_path):
19 | dire, name = split(_path)
20 | if "March7th" in name:
21 | if name == "March7th Assistant.exe":
22 | pass
23 | elif name == "March7th Launcher.exe":
24 | _path = dire + "/March7th Assistant.exe"
25 | self.m7a(_path)
26 | elif "OneDragon" in name:
27 | if name == "OneDragon Scheduler.exe":
28 | pass
29 | elif name == "OneDragon Launcher.exe":
30 | _path = dire + "/OneDragon Scheduler.exe"
31 | self.od(_path)
32 | else:
33 | self.indicate("崩坏:星穹铁道助手,无效启动路径")
34 | raise ValueError("崩坏:星穹铁道助手,无效启动路径")
35 | else:
36 | self.indicate("崩坏:星穹铁道助手,无效启动路径")
37 | raise ValueError("崩坏:星穹铁道助手,无效启动路径")
38 | except Exception:
39 | self.indicate("任务执行异常:崩坏:星穹铁道助手", log=False)
40 | logger.error("任务执行异常:崩坏:星穹铁道助手\n%s" % format_exc())
41 | _k = True
42 | except SGAStop:
43 | raise SGAStop
44 | self.indicate("完成任务:崩坏:星穹铁道助手")
45 | return _k
46 |
47 | def m7a(self, _path):
48 | env.set_soft(None, [True, "ConsoleWindowClass", "m7a"])
49 | env.soft.set_path(_path)
50 | #三月七关闭并初始化
51 | pid = get_pid("March7th Launcher.exe")
52 | if pid :
53 | self.indicate("三月七助手已启动,准备重启")
54 | close(pid)
55 | # 修改三月七运行设置
56 | config_yaml = os.path.join(split(_path)[0],"config.yaml")
57 | yaml = YAML()
58 | yaml.preserve_quotes = True
59 | with open(config_yaml, 'r', encoding='utf-8') as f:
60 | _dir = yaml.load(f)
61 | if _dir["after_finish"] != "Exit":
62 | _dir["after_finish"] = "Exit"
63 | with open(config_yaml, 'w', encoding='utf-8', ) as f:
64 | yaml.dump(_dir, f)
65 | # 运行-结束
66 | _run = env.soft.run(fls=False, tit="m7a")
67 | if _run:
68 | self.indicate("三月七助手运行中...")
69 | wait(10000)
70 | while 1:
71 | wait(10000)
72 | if not find_hwnd((1, "UnityWndClass", "崩坏:星穹铁道")):
73 | break
74 | # env.soft.kill()
75 | self.indicate("三月七助手运行完成")
76 | else:
77 | self.indicate("三月七助手启动失败")
78 | return True
79 | # 关闭M7A窗口
80 | pid = get_pid("March7th Assistant.exe")
81 | if pid:
82 | self.indicate("关闭三月七助手窗口")
83 | close(pid)
84 | return False
85 |
86 | def od(self, _path):
87 | env.set_soft(None, [True, "ConsoleWindowClass", "od"])
88 | env.soft.set_path(_path)
89 | # 一条龙关闭并初始化
90 | pid = get_pid("OneDragon Launcher.exe")
91 | if pid :
92 | self.indicate("星铁一条龙已启动,准备重启")
93 | close(pid)
94 | # 修改一条龙运行设置
95 | config_yaml = os.path.join(split(_path)[0],"config","zzz_one_dragon.yml")
96 | yaml = YAML()
97 | yaml.preserve_quotes = True
98 | with open(config_yaml, 'r', encoding='utf-8') as f:
99 | _dir = yaml.load(f)
100 | if _dir["after_done"] != "关闭游戏":
101 | _dir["after_done"] = "关闭游戏"
102 | with open(config_yaml, 'w', encoding='utf-8', ) as f:
103 | yaml.dump(_dir, f)
104 | # 运行-结束
105 | _run = env.soft.run(fls=False, tit="OneDragon")
106 | if _run:
107 | self.indicate("星铁一条龙运行中...")
108 | wait(100000)
109 | while 1:
110 | wait(10000)
111 | if not find_hwnd((1, "UnityWndClass", "崩坏:星穹铁道")):
112 | break
113 | # env.soft.kill()
114 | self.indicate("星铁一条龙运行完成")
115 | else:
116 | self.indicate("星铁一条龙启动失败")
117 | return False
118 |
119 | if __name__ == '__main__':
120 | pass
121 |
--------------------------------------------------------------------------------
/task/maa/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/maa/__init__.py
--------------------------------------------------------------------------------
/task/maa/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/maa/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/task/maa/__pycache__/main.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/maa/__pycache__/main.cpython-39.pyc
--------------------------------------------------------------------------------
/task/main.py:
--------------------------------------------------------------------------------
1 | from task.maa.main import TaskMAA
2 | from task.genshin.main import TaskGenshin
3 | from task.kleins.main import TaskKleins
4 | from task.m7a.main import TaskM7A
5 | from task.zzz.main import Taskzzz
6 | from task.ww.main import Taskww
7 | from task.snow.main import TaskSnow
8 | from task.common.main import TaskCommon
9 | from task.presstrigger.main import TaskTrigger
10 | from task.kaa.main import TaskKaa
11 |
12 |
13 | class TaskRun(TaskKleins, TaskGenshin, TaskMAA, TaskM7A, TaskSnow, TaskCommon, TaskTrigger, Taskzzz, Taskww, TaskKaa):
14 | def __init__(self):
15 | super(TaskRun, self).__init__()
16 |
17 | def task_start(self, task):
18 | _k = False
19 | print(task)
20 | # 运行
21 | if task["模块"] == 0:
22 | for i in range(5):
23 | single_task = task["配置%s" % i]
24 | if single_task["name"] == "<未选择>":
25 | self.indicate(f"计划{i+1}未选择。")
26 | else:
27 | single_task["关闭软件"] = True
28 | if self.single_run(single_task):
29 | _k = True
30 | self.indicate("-------------")
31 | else:
32 | if self.single_run(task):
33 | _k = True
34 | return _k
35 |
36 | def single_run(self, task):
37 | _k = False
38 | if task["模块"] == 1:
39 | TaskKleins.__init__(self)
40 | if self.kleins_start(task):
41 | _k = True
42 | elif task["模块"] == 2:
43 | TaskGenshin.__init__(self)
44 | if self.genshin_start(task):
45 | _k = True
46 | elif task["模块"] == 3:
47 | TaskMAA.__init__(self)
48 | if self.maa_start(task):
49 | _k = True
50 | elif task["模块"] == 4:
51 | TaskM7A.__init__(self)
52 | if self.m7a_start(task):
53 | _k = True
54 | elif task["模块"] == 5:
55 | TaskSnow.__init__(self)
56 | if self.snow_start(task):
57 | _k = True
58 | elif task["模块"] == 6:
59 | TaskCommon.__init__(self)
60 | if self.common_start(task):
61 | _k = True
62 | elif task["模块"] == 7:
63 | TaskTrigger.__init__(self)
64 | if self.trigger_start(task):
65 | _k = True
66 | elif task["模块"] == 8:
67 | Taskzzz.__init__(self)
68 | if self.zzz_start(task):
69 | _k = True
70 | elif task["模块"] == 9:
71 | Taskww.__init__(self)
72 | if self.ww_start(task):
73 | _k = True
74 | elif task["模块"] == 10:
75 | TaskKaa.__init__(self)
76 | if self.kaa_start(task):
77 | _k = True
78 | else:
79 | self.indicate("error:未知模块。")
80 | _k = True
81 | return _k
82 |
83 |
84 | if __name__ == '__main__':
85 | pass
86 |
--------------------------------------------------------------------------------
/task/presstrigger/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/presstrigger/__init__.py
--------------------------------------------------------------------------------
/task/snow/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__init__.py
--------------------------------------------------------------------------------
/task/snow/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/__pycache__/daily.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/daily.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/__pycache__/fight.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/fight.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/__pycache__/mail.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/mail.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/__pycache__/main.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/main.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/__pycache__/roll.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/snow/__pycache__/roll.cpython-39.pyc
--------------------------------------------------------------------------------
/task/snow/mail.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from ..default_task import Task
3 |
4 |
5 | class Mail(Task):
6 | def __init__(self):
7 | super().__init__()
8 |
9 | def snow_mail(self):
10 | self.indicate("开始检查:邮件")
11 | if find_color("yellow", (167, 443, 175, 455))[1]:
12 | click_change((113, 465), (91, 451, 131, 477))
13 | wait(500)
14 | pos = find_text("领取", (308, 967, 516, 1044))
15 | click(pos)
16 | wait(500)
17 | self.indicate("领取邮件完成")
18 | press_to_text("esc", "任务", (1458, 330, 1529, 379))
19 | wait(500)
20 | else:
21 | self.indicate("暂无新邮件")
22 | self.indicate("检查完成:邮件")
23 |
--------------------------------------------------------------------------------
/task/ww/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/ww/__init__.py
--------------------------------------------------------------------------------
/task/ww/main.py:
--------------------------------------------------------------------------------
1 | from ..default_task import Task
2 | from tools.environment import *
3 | from tools.software import find_hwnd
4 | from win32gui import FindWindow
5 | from subprocess import run as cmd_run
6 |
7 | class Taskww(Task):
8 | def __init__(self):
9 | super().__init__()
10 |
11 | def ww_start(self, task: type[dir]):
12 | _k = False
13 | self.task = task
14 | self.indicate("开始任务:鸣潮助手")
15 | # noinspection PyBroadException
16 | try:
17 | #判断路径
18 | _path = os.path.expandvars("%APPDATA%\Microsoft\Windows\Start Menu\Programs\ok-ww Daily Task exit_after.lnk")
19 | if not isfile(_path):
20 | self.indicate(_path)
21 | self.indicate("未找到ok-ww启动路径")
22 | raise ValueError("未找到ok-ww启动路径")
23 | # 打开一条龙
24 | cmd = f"start \"\" \"{_path}\""
25 | for n in range(2):
26 | cmd_run(cmd, shell=True)
27 | for sec in range(10):
28 | wait(1000)
29 | hwnd = FindWindow(None, "OK-WW")
30 | if hwnd:
31 | self.indicate("一条龙启动成功")
32 | wait(500)
33 | break
34 | elif sec == 9:
35 | self.indicate("ok-ww启动异常")
36 | return True
37 | # 检测关闭
38 | wait(30000)
39 | while 1:
40 | wait(10000)
41 | if not find_hwnd((1, "UnityWndClass", "Wuthering Waves")):
42 | break
43 | except Exception:
44 | self.indicate("任务执行异常:鸣潮助手", log=False)
45 | logger.error("任务执行异常:鸣潮助手\n%s" % format_exc())
46 | _k = True
47 | except SGAStop:
48 | raise SGAStop
49 | self.indicate("完成任务:鸣潮助手")
50 | return _k
51 |
52 | if __name__ == '__main__':
53 | pass
54 |
--------------------------------------------------------------------------------
/task/zzz/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/task/zzz/__init__.py
--------------------------------------------------------------------------------
/task/zzz/main.py:
--------------------------------------------------------------------------------
1 | from ..default_task import Task
2 | from tools.environment import *
3 | from tools.software import get_pid, close, find_hwnd
4 | from ruamel.yaml import YAML
5 |
6 | class Taskzzz(Task):
7 | def __init__(self):
8 | super().__init__()
9 |
10 | def zzz_start(self, task: type[dir]):
11 | _k = False
12 | self.task = task
13 | self.indicate("开始任务:绝区零助手")
14 | # noinspection PyBroadException
15 | try:
16 | #判断路径
17 | _path = self.task["启动"]["zzz_path"]
18 | if isfile(_path):
19 | dire, name = split(_path)
20 | if name == "OneDragon Scheduler.exe":
21 | pass
22 | elif name == "OneDragon Launcher.exe":
23 | _path = dire + "/OneDragon Scheduler.exe"
24 | else:
25 | self.indicate("绝区零一条龙,无效启动路径")
26 | raise ValueError("绝区零一条龙,无效启动路径")
27 | else:
28 | self.indicate("绝区零助手,无效启动路径")
29 | raise ValueError("绝区零助手,无效启动路径")
30 | env.set_soft(None, [True, "ConsoleWindowClass", "OneDragon"])
31 | env.soft.set_path(_path)
32 | # 一条龙关闭并初始化
33 | pid = get_pid("OneDragon Launcher.exe")
34 | if pid :
35 | self.indicate("绝区零一条龙已启动,准备重启")
36 | close(pid)
37 | # 修改一条龙运行设置
38 | config_yaml = os.path.join(split(_path)[0],"config","zzz_one_dragon.yml")
39 | yaml = YAML()
40 | yaml.preserve_quotes = True
41 | with open(config_yaml, 'r', encoding='utf-8') as f:
42 | _dir = yaml.load(f)
43 | if _dir["after_done"] != "关闭游戏":
44 | _dir["after_done"] = "关闭游戏"
45 | with open(config_yaml, 'w', encoding='utf-8', ) as f:
46 | yaml.dump(_dir, f)
47 | # 运行-结束
48 | _run = env.soft.run(fls=False, tit="OneDragon")
49 | if _run:
50 | self.indicate("绝区零一条龙运行中...")
51 | wait(100000)
52 | while 1:
53 | wait(10000)
54 | if not find_hwnd((1, "UnityWndClass", "绝区零")):
55 | break
56 | # env.soft.kill()
57 | self.indicate("绝区零一条龙运行完成")
58 | else:
59 | self.indicate("绝区零一条龙启动失败")
60 | return True
61 | except Exception:
62 | self.indicate("任务执行异常:绝区零助手", log=False)
63 | logger.error("任务执行异常:绝区零助手\n%s" % format_exc())
64 | _k = True
65 | except SGAStop:
66 | raise SGAStop
67 | self.indicate("完成任务:绝区零助手")
68 | return _k
69 |
70 | if __name__ == '__main__':
71 | pass
72 |
--------------------------------------------------------------------------------
/tools/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/tools/__init__.py
--------------------------------------------------------------------------------
/tools/logger/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/tools/logger/__init__.py
--------------------------------------------------------------------------------
/tools/logger/log.py:
--------------------------------------------------------------------------------
1 | from logging import getLogger, FileHandler, Formatter, StreamHandler, handlers
2 | from os.path import exists
3 | from os import makedirs
4 | from datetime import datetime
5 | from colorama import init
6 | from .titleformatter import TitleFormatter
7 |
8 |
9 | class Logger:
10 | def __init__(self):
11 | self.logger = getLogger('SGA')
12 | self.logger.date = datetime.now().strftime("%Y-%m-%d")
13 | self.logger.propagate = False
14 | self.logger.setLevel("DEBUG")
15 | if not exists("personal/logs"):
16 | makedirs("personal/logs")
17 | self.file_handler = FileHandler(rf"personal\logs\{self.logger.date}.log", encoding="utf-8") # midnight
18 | file_formatter = Formatter('%(asctime)s | %(levelname)s | %(message)s', datefmt="%H:%M:%S")
19 | self.file_handler.setFormatter(file_formatter)
20 | self.file_handler.setLevel("DEBUG")
21 | self.logger.addHandler(self.file_handler)
22 |
23 | self.console_handler = StreamHandler()
24 | console_formatter = ColoredFormatter('%(asctime)s | %(levelname)s | %(message)s', datefmt="%H:%M:%S")
25 | self.console_handler.setFormatter(console_formatter)
26 | self.console_handler.setLevel("INFO")
27 |
28 | self.logger.enable_console = self.enable_console
29 | self.logger.disable_console = self.disable_console
30 | self.logger.new_handler = self.new_handler
31 |
32 | def new_handler(self, date):
33 | self.logger.date = date
34 | self.logger.removeHandler(self.file_handler)
35 | self.file_handler = FileHandler(rf"personal\logs\{date}.log", encoding="utf-8") # midnight
36 | file_formatter = Formatter('%(asctime)s | %(levelname)s | %(message)s', datefmt="%H:%M:%S")
37 | self.file_handler.setFormatter(file_formatter)
38 | self.file_handler.setLevel("DEBUG")
39 | self.logger.addHandler(self.file_handler)
40 |
41 | def get_logger(self):
42 | return self.logger
43 |
44 | def enable_console(self):
45 | self.logger.addHandler(self.console_handler)
46 | self.logger.hr = TitleFormatter.format_title
47 |
48 | def disable_console(self):
49 | self.logger.removeHandler(self.console_handler)
50 |
51 |
52 | class ColoredFormatter(Formatter):
53 | init(autoreset=True)
54 | COLORS = {
55 | 'DEBUG': '\033[94m', # 蓝色
56 | 'INFO': '\033[92m', # 绿色
57 | 'WARNING': '\033[93m', # 黄色
58 | 'ERROR': '\033[91m', # 红色
59 | 'CRITICAL': '\033[91m', # 红色
60 | 'RESET': '\033[0m' # 重置颜色
61 | }
62 |
63 | def format(self, record):
64 | log_level = record.levelname
65 | color_start = self.COLORS.get(log_level, self.COLORS['RESET'])
66 | color_end = self.COLORS['RESET']
67 | record.levelname = f"{color_start}{log_level}{color_end}"
68 | return super().format(record)
69 |
--------------------------------------------------------------------------------
/tools/logger/titleformatter.py:
--------------------------------------------------------------------------------
1 | class TitleFormatter:
2 | @staticmethod
3 | def custom_len(s):
4 | length = 0
5 | for char in s:
6 | # 判断是否是中文字符和全角符号的Unicode范围
7 | if (0x4E00 <= ord(char) <= 0x9FFF) or (0xFF00 <= ord(char) <= 0xFFEF):
8 | length += 2
9 | else:
10 | length += 1
11 | return length
12 |
13 | @staticmethod
14 | def format_title(title, level=0):
15 | try:
16 | separator_length = 115
17 | title_lines = title.split('\n')
18 | separator = '+' + '-' * separator_length + '+'
19 | title_length = TitleFormatter.custom_len(title)
20 | half_separator_left = (separator_length - title_length) // 2
21 | half_separator_right = separator_length - title_length - half_separator_left
22 |
23 | if level == 0:
24 | formatted_title_lines = []
25 |
26 | for line in title_lines:
27 | title_length_ = TitleFormatter.custom_len(line)
28 | half_separator_left_ = (separator_length - title_length_) // 2
29 | half_separator_right_ = separator_length - title_length_ - half_separator_left_
30 |
31 | formatted_title_line = '|' + ' ' * half_separator_left_ + line + ' ' * half_separator_right_ + '|'
32 | formatted_title_lines.append(formatted_title_line)
33 |
34 | print(separator)
35 | print('\n'.join(formatted_title_lines))
36 | print(separator)
37 | elif level == 1:
38 | formatted_title = '=' * half_separator_left + ' ' + title + ' ' + '=' * half_separator_right
39 | print(f"{formatted_title}")
40 | elif level == 2:
41 | formatted_title = '-' * half_separator_left + ' ' + title + ' ' + '-' * half_separator_right
42 | print(f"{formatted_title}")
43 | except:
44 | pass
45 |
--------------------------------------------------------------------------------
/tools/ocr/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/tools/ocr/__init__.py
--------------------------------------------------------------------------------
/tools/ocr/check_ocr.py:
--------------------------------------------------------------------------------
1 | from tools.environment import *
2 | from cpufeature import CPUFeature
3 |
4 |
5 | class OCR:
6 | def __init__(self):
7 | if CPUFeature["AVX2"]:
8 | self.exe_name = "PaddleOCR-json_v.1.3.1(simplify)"
9 | self.load_url = ("https://github.moeyy.xyz/"
10 | "https://github.com/Kin-L/SucroseGameAssistant/releases/download/ocr/"
11 | "PaddleOCR-json_v.1.3.1.simplify.zip")
12 | self.exe_path = r"3rd_package\PaddleOCR-json_v.1.3.1(simplify)\PaddleOCR-json.exe"
13 | logger.debug("CPU 支持 AVX2 指令集,使用 PaddleOCR-json")
14 | else:
15 | self.exe_name = "RapidOCR-json_v0.2.0(simplify)"
16 | self.load_url = ("https://github.moeyy.xyz/"
17 | "https://github.com/Kin-L/SucroseGameAssistant/releases/download/ocr/"
18 | "RapidOCR-json_v0.2.0.simplify.zip")
19 | self.exe_path = r"3rd_package\RapidOCR-json_v0.2.0(simplify)\RapidOCR-json.exe"
20 | logger.debug("CPU 不支持 AVX2 指令集,使用 RapidOCR-json")
21 | if not isfile(join(env.workdir, self.exe_path)):
22 | logger.debug(f"OCR组件未安装,开始下载安装({self.exe_name})")
23 | logger.debug("下载中...")
24 | self.install_ocr()
25 |
26 | def install_ocr(self):
27 | # noinspection PyBroadException
28 | try:
29 | from urllib.request import urlretrieve
30 | import tempfile
31 | temp_path = tempfile.gettempdir()
32 | temp_name = basename(self.exe_name + ".zip")
33 | load_path = join(temp_path, temp_name)
34 | urlretrieve(self.load_url, load_path)
35 | logger.debug("下载完成,开始替换文件")
36 | except Exception:
37 | logger.debug("下载异常", 3)
38 | logger.error("下载异常:\n%s\n" % format_exc())
39 | return 0
40 | # noinspection PyBroadException
41 | try:
42 | from shutil import unpack_archive
43 | unpack_archive(load_path, temp_path)
44 | except Exception:
45 | logger.debug("解压异常", 3)
46 | logger.error("解压异常:\n%s\n" % format_exc())
47 | return 0
48 | # noinspection PyBroadException
49 | try:
50 | from shutil import copytree
51 | extract_folder = splitext(load_path)[0]
52 | cover_folder = join(env.workdir, "3rd_package")
53 | copytree(extract_folder, cover_folder, dirs_exist_ok=True)
54 | except Exception:
55 | logger.debug("替换异常", 3)
56 | logger.error("替换异常:\n%s\n" % format_exc())
57 | return 0
58 | # noinspection PyBroadException
59 | try:
60 | from shutil import rmtree
61 | remove(load_path)
62 | rmtree(extract_folder)
63 | except Exception:
64 | logger.debug("删除临时文件异常", 3)
65 | logger.error("删除临时文件异常:\n%s\n" % format_exc())
66 | return 0
67 | # 弹窗重启
68 | logger.debug(f"安装成功:{self.exe_name}", 3)
69 |
--------------------------------------------------------------------------------
/ui/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/__init__.py
--------------------------------------------------------------------------------
/ui/common/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/common/__init__.py
--------------------------------------------------------------------------------
/ui/common/list.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 |
3 |
4 | class CommonList:
5 | def __init__(self, widget, location):
6 | # 功能列表窗口
7 | scroll = ScrollArea(widget, location)
8 | scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
9 | # 设置控件
10 | self.label_klein = Label(scroll, (75, 10, 80, 20), "通用执行", 18)
11 | setpath = "assets/main_window/ui/set.png"
12 | self.set_common = PicButton(scroll, (180, 10, 22, 22), setpath, (22, 22))
13 |
14 | self.check_start = Label(scroll, (15, 50, 140, 22), "启动设置")
15 | self.check_exit = Label(scroll, (15, 95, 140, 22), "结束设置")
16 |
17 | self.set_start = PicButton(scroll, (180, 50, 22, 22), setpath, (22, 22))
18 | self.set_exit = PicButton(scroll, (180, 95, 22, 22), setpath, (22, 22))
19 |
--------------------------------------------------------------------------------
/ui/common/main.py:
--------------------------------------------------------------------------------
1 | import os
2 | from os import startfile
3 | from .list import CommonList
4 | from .stack import CommonStack
5 | from ui.element.control import *
6 | from tools.environment import env
7 |
8 |
9 | # 原神模组设置窗口
10 | class Common:
11 | def __init__(self, stack, main):
12 | self.main = main
13 | self.widget_common = Widget()
14 | stack.addWidget(self.widget_common)
15 | self.button = Picture(main.widget_module, (0, 0, 50, 50),
16 | r"assets\main_window\ui\common-icon.png")
17 | self.list = None
18 | self.set = None
19 |
20 | def load_window(self):
21 | self.list = CommonList(self.widget_common, (0, 0, 215, 515))
22 | self.set = CommonStack(self.widget_common, (225, 0, 410, 515))
23 | self.list.set_common.clicked.connect(lambda: self.set.stack.setCurrentIndex(0))
24 | self.list.set_start.clicked.connect(lambda: self.set.stack.setCurrentIndex(1))
25 | self.list.set_exit.clicked.connect(lambda: self.set.stack.setCurrentIndex(2))
26 |
27 | self.set.button_folder.clicked.connect(self.open_folder)
28 | Line(self.widget_common, (215, 5, 3, 505), False)
29 |
30 | def load_run(self, run):
31 | pass
32 |
33 | def get_run(self):
34 | return {}
35 |
36 | def input_config(self, _dir):
37 | config = {
38 | "模块": 6,
39 | "静音": False,
40 | "关闭软件": False,
41 | "完成后": 0,
42 | "SGA关闭": False,
43 | "启动路径": "",
44 | "附加命令": "",
45 | "开始前等待时间": "",
46 | "启动判断进程名": "",
47 | "启动操作类型": 0,
48 | "启动操作内容": "",
49 | "启动判断指定区域": "",
50 | "开始后等待时间": "",
51 | "结束判断进程名": "",
52 | "结束判断类型": 0,
53 | "结束判断内容": "",
54 | "结束判断指定区域": "",
55 | "判断循环": ""
56 | }
57 | config.update(_dir)
58 | self.set.independent.check_mute.setChecked(config["静音"])
59 | self.set.independent.check_kill_game.setChecked(config["关闭软件"])
60 | self.set.independent.combo_after.setCurrentIndex(config["完成后"])
61 | self.set.independent.check_kill_sga.setChecked(config["SGA关闭"])
62 |
63 | self.set.line_start.setText(config["启动路径"])
64 | self.set.line_extra.setText(config["附加命令"])
65 |
66 | self.set.line_fwait.setText(config["开始前等待时间"])
67 | self.set.line_act_proc.setText(config["启动判断进程名"])
68 | self.set.choose_act.setCurrentIndex(config["启动操作类型"])
69 | self.set.line_act.setText(config["启动操作内容"])
70 | self.set.line_act_zone.setText(config["结束判断指定区域"])
71 | self.set.line_await.setText(config["开始后等待时间"])
72 |
73 | self.set.line_exit_proc.setText(config["结束判断进程名"])
74 | self.set.choose_exit.setCurrentIndex(config["结束判断类型"])
75 | self.set.line_exit.setText(config["结束判断内容"])
76 | self.set.line_exit_zone.setText(config["结束判断指定区域"])
77 | self.set.line_interval.setText(config["判断循环"])
78 |
79 | def output_config(self):
80 | config = dict()
81 | config["模块"] = 6
82 | config["静音"] = self.set.independent.check_mute.isChecked()
83 | config["关闭软件"] = self.set.independent.check_kill_game.isChecked()
84 | config["完成后"] = self.set.independent.combo_after.currentIndex()
85 | config["SGA关闭"] = self.set.independent.check_kill_sga.isChecked()
86 |
87 | config["启动路径"] = self.set.line_start.text()
88 | config["附加命令"] = self.set.line_extra.text()
89 |
90 | config["开始前等待时间"] = self.set.line_fwait.text()
91 | config["启动判断进程名"] = self.set.line_act_proc.text()
92 | config["启动操作类型"] = self.set.choose_act.currentIndex()
93 | config["启动操作内容"] = self.set.line_act.text()
94 | config["启动判断指定区域"] = self.set.line_act_zone.text()
95 | config["开始后等待时间"] = self.set.line_await.text()
96 |
97 | config["结束判断进程名"] = self.set.line_exit_proc.text()
98 | config["结束判断类型"] = self.set.choose_exit.currentIndex()
99 | config["结束判断内容"] = self.set.line_exit.text()
100 | config["结束判断指定区域"] = self.set.line_exit_zone.text()
101 | config["判断循环"] = self.set.line_interval.text()
102 | return config
103 |
104 | def open_folder(self):
105 | _path = env.workdir + "/personal/common"
106 | if not os.path.exists(_path):
107 | os.makedirs(_path)
108 | self.main.indicate("", 1)
109 | startfile(_path)
110 | self.main.indicate("打开文件夹: 通用执行图像储存", 3)
111 |
--------------------------------------------------------------------------------
/ui/common/stack.py:
--------------------------------------------------------------------------------
1 | from ui.element.ui_part import Independent
2 | from ui.element.control import *
3 |
4 |
5 | class Local:
6 | def __init__(self, stack):
7 | # 初始化窗口
8 | self.page_local = Widget(stack)
9 | stack.addWidget(self.page_local)
10 | # 添加控件
11 | self.label_local = Label(self.page_local, (0, 12, 180, 18), "设置页面:通用执行 运行方式")
12 |
13 | Line(self.page_local, (0, 42, 395, 3))
14 |
15 | self.label_common_overall = Label(self.page_local, (0, 50, 180, 27), "全局设置:")
16 |
17 | self.label_start = Label(self.page_local, (0, 82, 80, 27), "启动路径:")
18 | self.line_start = Lineedit(self.page_local, (0, 115, 385, 33))
19 | self.label_extra = Label(self.page_local, (0, 147, 80, 27), "附加命令:")
20 | self.line_extra = Lineedit(self.page_local, (0, 180, 385, 33))
21 |
22 | Line(self.page_local, (0, 217, 395, 3))
23 |
24 | self.label_common_tip = Label(self.page_local, (0, 220, 220, 27), "独立运行设置:")
25 | self.independent = Independent(self.page_local, (0, 250, 350, 70))
26 |
27 |
28 | class Start:
29 | def __init__(self, stack):
30 | # 初始化窗口
31 | self.page_start = Widget(stack)
32 | stack.addWidget(self.page_start)
33 | # 添加控件
34 | self.label_start = Label(self.page_start, (0, 12, 220, 18), "设置页面:启动设置")
35 |
36 | Line(self.page_start, (0, 42, 395, 3))
37 |
38 | self.label_fwait = Label(self.page_start, (0, 55, 150, 18), "开始前等待时间(秒):")
39 | self.line_fwait = Lineedit(self.page_start, (150, 50, 70, 30))
40 | self.label_act_proc = Label(self.page_start, (0, 85, 100, 27), "指定进程名:")
41 | self.line_act_proc = Lineedit(self.page_start, (0, 120, 385, 33))
42 | self.label_act = Label(self.page_start, (0, 160, 80, 27), "启动操作:")
43 | self.choose_act = Combobox(self.page_start, (0, 190, 100, 30))
44 | self.choose_act.addItems(["无", "点击文本", "点击图像", "快捷键"])
45 | self.line_act = Lineedit(self.page_start, (0, 233, 385, 33))
46 | self.button_folder = Button(self.page_start, (110, 190, 130, 30), "图像储存文件夹")
47 | self.label_act_zone = Label(self.page_start, (0, 280, 80, 27), "指定区域:")
48 | self.line_act_zone = Lineedit(self.page_start, (0, 315, 180, 33))
49 | self.label_await = Label(self.page_start, (0, 365, 120, 18), "开始后等待时间:")
50 | self.line_await = Lineedit(self.page_start, (125, 360, 70, 33))
51 |
52 |
53 | class Exit:
54 | def __init__(self, stack):
55 | # 初始化窗口
56 | self.page_exit = Widget(stack)
57 | stack.addWidget(self.page_exit)
58 | # 添加控件
59 | self.label_exit = Label(self.page_exit, (0, 12, 180, 18), "设置页面:结束设置")
60 |
61 | Line(self.page_exit, (0, 42, 395, 3))
62 |
63 | self.label_exit_proc = Label(self.page_exit, (0, 50, 100, 27), "指定进程名:")
64 | self.line_exit_proc = Lineedit(self.page_exit, (0, 85, 385, 33))
65 | self.label_choose_exit = Label(self.page_exit, (0, 125, 80, 27), "结束判断:")
66 |
67 | self.choose_exit = Combobox(self.page_exit, (0, 160, 120, 30))
68 | self.choose_exit.addItems(["进程退出", "匹配到文本", "匹配到图像", "cpu利用率"])
69 | self.line_exit = Lineedit(self.page_exit, (0, 205, 385, 33))
70 | self.label_exit_zone = Label(self.page_exit, (0, 240, 80, 27), "指定区域:")
71 | self.line_exit_zone = Lineedit(self.page_exit, (0, 275, 180, 33))
72 | self.label_interval = Label(self.page_exit, (0, 310, 180, 27), "判断循环(间隔/次数):")
73 | self.line_interval = Lineedit(self.page_exit, (0, 345, 180, 33))
74 |
75 |
76 | class CommonStack(Local, Start, Exit):
77 | def __init__(self, widget, location):
78 | # 功能堆叠窗口
79 | self.stack = Stack(widget, location)
80 | Local.__init__(self, self.stack)
81 | Start.__init__(self, self.stack)
82 | Exit.__init__(self, self.stack)
83 |
--------------------------------------------------------------------------------
/ui/element/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/element/__init__.py
--------------------------------------------------------------------------------
/ui/element/control.py:
--------------------------------------------------------------------------------
1 | from qfluentwidgets import (SmoothScrollArea, StrongBodyLabel,
2 | PushButton, ToolButton, TransparentToolButton, ToolTipPosition,
3 | CheckBox, ComboBox, LineEdit, SwitchButton, ToolTipFilter,
4 | setFont)
5 | from PyQt5 import QtCore, QtWidgets, QtGui
6 |
7 |
8 | # 窗口
9 | class Widget(QtWidgets.QWidget):
10 | def __init__(self, widget=None, location=None):
11 | super().__init__(widget)
12 | if location is not None:
13 | (x, y, w, h) = location
14 | self.setGeometry(QtCore.QRect(x, y, w, h))
15 | palette = QtGui.QPalette()
16 | palette.setColor(QtGui.QPalette.Background, QtGui.QColor(255, 255, 255))
17 | self.setPalette(palette)
18 |
19 |
20 | class ScrollArea(SmoothScrollArea):
21 | def __init__(self, widget, location):
22 | super().__init__(widget)
23 | (x, y, w, h) = location
24 | self.setGeometry(QtCore.QRect(x, y, w, h))
25 | self.setWidgetResizable(True)
26 |
27 |
28 | class Stack(QtWidgets.QStackedWidget):
29 | def __init__(self, widget, location):
30 | super().__init__(widget)
31 | (x, y, w, h) = location
32 | self.setGeometry(QtCore.QRect(x, y, w, h))
33 |
34 |
35 | # 标签
36 | class Label(StrongBodyLabel):
37 | def __init__(self, widget, location, text, font=16):
38 | super().__init__(widget)
39 | (x, y, w, h) = location
40 | self.setGeometry(QtCore.QRect(x, y, w, h))
41 | self.setText(text)
42 | setFont(self, font)
43 |
44 |
45 | class Picture(QtWidgets.QLabel):
46 | def __init__(self, widget, location=None, path=None):
47 | super().__init__(widget)
48 | if location is not None:
49 | (x, y, w, h) = location
50 | self.setGeometry(QtCore.QRect(x, y, w, h))
51 | self.setPixmap(QtGui.QPixmap(path))
52 | self.setScaledContents(True)
53 |
54 |
55 | # 按钮
56 | class Button(PushButton):
57 | def __init__(self, widget, location, text):
58 | super().__init__(widget)
59 | (x, y, w, h) = location
60 | self.setText(text)
61 | self.setGeometry(QtCore.QRect(x, y, w, h))
62 |
63 |
64 | class PicButton(ToolButton):
65 | def __init__(self, widget, location, path, size):
66 | super().__init__(widget)
67 | (x, y, w, h) = location
68 | (pw, ph) = size
69 | self.setIcon(path)
70 | self.setIconSize(QtCore.QSize(pw, ph))
71 | self.setGeometry(QtCore.QRect(x, y, w, h))
72 |
73 |
74 | class TransPicButton(TransparentToolButton):
75 | def __init__(self, widget, location, path, size):
76 | super().__init__(widget)
77 | (x, y, w, h) = location
78 | (pw, ph) = size
79 | self.setIcon(path)
80 | self.setIconSize(QtCore.QSize(pw, ph))
81 | self.setGeometry(QtCore.QRect(x, y, w, h))
82 |
83 |
84 | class Check(CheckBox):
85 | def __init__(self, widget, location, text):
86 | super().__init__(widget)
87 | (x, y, w, h) = location
88 | self.setGeometry(QtCore.QRect(x, y, w, h))
89 | self.setText(text)
90 |
91 |
92 | # 输入框
93 | class Combobox(ComboBox):
94 | def __init__(self, widget, location):
95 | (x, y, w, h) = location
96 | super().__init__(widget)
97 | self.setGeometry(QtCore.QRect(x, y, w, h))
98 |
99 | def rename(self, old_name, new_name):
100 | old_index = self.findText(old_name)
101 | if old_index == -1:
102 | print("error:未找到该条目。")
103 | else:
104 | self.setItemText(old_index, new_name)
105 |
106 |
107 | class Lineedit(LineEdit):
108 | def __init__(self, widget, location):
109 | (x, y, w, h) = location
110 | super().__init__(widget)
111 | self.setGeometry(QtCore.QRect(x, y, w, h))
112 |
113 |
114 | class Line(QtWidgets.QFrame):
115 | def __init__(self, widget, location, hor=True):
116 | (x, y, w, h) = location
117 | super().__init__(widget)
118 | self.setGeometry(QtCore.QRect(x, y, w, h))
119 | if hor:
120 | self.setFrameShape(QtWidgets.QFrame.HLine)
121 | else:
122 | self.setFrameShape(QtWidgets.QFrame.VLine)
123 |
124 |
125 | class Swicher(SwitchButton):
126 | def __init__(self, widget, location):
127 | (x, y, w, h) = location
128 | super().__init__(widget)
129 | self.setGeometry(QtCore.QRect(x, y, w, h))
130 |
--------------------------------------------------------------------------------
/ui/element/ui_part.py:
--------------------------------------------------------------------------------
1 | from PyQt5.QtWidgets import QWidget, QTextBrowser
2 | from PyQt5.QtCore import Qt, QRect, QSize
3 | from PyQt5.QtGui import QIcon, QPalette, QColor
4 | from qfluentwidgets import ToggleToolButton
5 | from ui.element.control import Picture, Check, Combobox, Label, Widget, Button
6 |
7 |
8 | class MWindow(QWidget):
9 | # 主窗口初始化
10 | def __init__(self):
11 | super().__init__()
12 | self.setObjectName("main_window")
13 | self.resize(910, 580)
14 | self.setWindowTitle("砂糖代理")
15 | self.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint)
16 | self.setFixedSize(self.width(), self.height())
17 | from ui.main import SGA_icon
18 | self.setWindowIcon(QIcon(":/SGA.ico"))
19 | palette = QPalette()
20 | palette.setColor(QPalette.Background, QColor(255, 255, 255))
21 | self.setPalette(palette)
22 |
23 |
24 | class OverallButton(ToggleToolButton):
25 | def __init__(self, widget):
26 | super().__init__(widget)
27 | self.setIcon(r"assets\main_window\ui\set.png")
28 | self.setGeometry(QRect(635, 0, 56, 56))
29 | self.setIconSize(QSize(25, 25))
30 |
31 |
32 | class InfoBox(QTextBrowser):
33 | def __init__(self, widget):
34 | super().__init__(widget)
35 | self.setGeometry(QRect(635, 60, 270, 515))
36 | self.setStyleSheet("QTextBrowser { font-size: 14px; }")
37 | self.moveCursor(self.textCursor().Start) #
38 | notify = "使用须知:\n" \
39 | " 1、该项目(以下称SGA)免费、开源。如果您付费购买了该工具,请申请退款并举报售卖方,每一次倒卖都会使开源更加困难。\n" \
40 | " 2、SGA包含第三方工具模块,所有第三方工具都不保证没有封号风险,怕别用,封认罚。\n" \
41 | " 3、SGA更新随缘。警告维权,问题反馈,SGA更新,合作建议,请关注B站账号:绘星痕。\n" \
42 | " 4、模块运行期间,可点击界面上“停止”按钮或键盘组合键“ctrl+/”快捷中止运行。\n" \
43 | " 5、卸载/删除SGA前请“清除定时”,否则您的电脑可能仍会出现“睡眠”状态中自启的情况。\n" \
44 | " 6、关于SGA使用方法和项目详情,可查看SGA文件夹中的说明文件的详细说明," \
45 | "和SGA各子界面的帮助按钮的精简提示,或参考B站账号:绘星痕 的SGA介绍和演示视频。\n" \
46 | "------------------------------"
47 | self.append(notify)
48 |
49 |
50 | class Support(QWidget):
51 | def __init__(self):
52 | super().__init__()
53 | self.setWindowTitle("砂糖代理")
54 | self.setWindowFlags(Qt.WindowCloseButtonHint)
55 | self.setWindowIcon(QIcon(":/SGA.ico"))
56 | self.resize(643, 419)
57 | Picture(self, (0, 0, 643, 419), r"assets\main_window\ui\hxh.png")
58 |
59 |
60 | class AliveTip(QWidget):
61 | def __init__(self):
62 | super().__init__()
63 | self.setWindowTitle("砂糖代理")
64 | self.setWindowFlags(Qt.WindowCloseButtonHint)
65 | self.setWindowIcon(QIcon(":/SGA.ico"))
66 | self.resize(240, 80)
67 | Label(self, (40, 0, 160, 80), "SGA已启动,不能同时\n使用一个以上的SGA。")
68 |
69 |
70 | class Independent:
71 | def __init__(self, widget=None, location=None, kill_game=True):
72 | self.widget = Widget(widget, location)
73 | self.check_mute = Check(self.widget, (0, 0, 220, 27), "静音运行")
74 | if kill_game:
75 | self.check_kill_game = Check(self.widget, (205, 0, 220, 27), "完成后关闭游戏")
76 | self.label_after = Label(self.widget, (0, 40, 80, 27), "完成后:")
77 | self.combo_after = Combobox(self.widget, (60, 40, 100, 30))
78 | self.combo_after.addItems(["无操作", "熄屏", "电脑睡眠"])
79 | self.check_kill_sga = Check(self.widget, (205, 40, 220, 27), "完成后关闭SGA")
80 |
--------------------------------------------------------------------------------
/ui/genshin/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/genshin/__init__.py
--------------------------------------------------------------------------------
/ui/genshin/list.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 |
3 |
4 | class GenshinList:
5 | def __init__(self, widget, location):
6 | # 功能列表窗口
7 | scroll = ScrollArea(widget, location)
8 | scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
9 | self.widget = Widget(scroll, (0, 0, 215, 515))
10 | # 设置控件
11 | self.label_genshin = Label(self.widget, (95, 10, 92, 20), "原神", 18)
12 | setpath = "assets/main_window/ui/set.png"
13 | self.set_genshin = PicButton(self.widget, (180, 10, 22, 22), setpath, (22, 22))
14 |
15 | #文本
16 | self.check_way0 = Label(self.widget, (50, 50, 140, 22), "运行方式")
17 | self.check_team = Check(self.widget, (15, 95, 140, 22), "切换队伍")
18 | self.check_disp = Check(self.widget, (15, 140, 140, 22), "探索派遣")
19 | self.check_trans = Check(self.widget, (15, 185, 140, 22), "参量质变仪")
20 | self.check_fly = Check(self.widget, (15, 230, 140, 22), "自动晶蝶")
21 | self.check_pot = Check(self.widget, (15, 275, 140, 22), "尘歌壶")
22 | self.check_mail = Check(self.widget, (15, 320, 140, 22), "领取邮件")
23 | self.check_tree = Check(self.widget, (15, 365, 140, 22), "自动伐木")
24 | self.check_daily = Check(self.widget, (15, 410, 140, 22), "体力日常")
25 | self.check_pass = Check(self.widget, (15, 455, 140, 22), "领取纪行")
26 |
27 | #齿轮按钮
28 | self.set_way0 = PicButton(self.widget, (180, 50, 22, 22), setpath, (22, 22))
29 | self.set_team = PicButton(self.widget, (180, 95, 22, 22), setpath, (22, 22))
30 | self.set_disp = PicButton(self.widget, (180, 140, 22, 22), setpath, (22, 22))
31 | self.set_trans = PicButton(self.widget, (180, 185, 22, 22), setpath, (22, 22))
32 | self.set_fly = PicButton(self.widget, (180, 230, 22, 22), setpath, (22, 22))
33 | self.set_pot = PicButton(self.widget, (180, 275, 22, 22), setpath, (22, 22))
34 | self.set_mail = PicButton(self.widget, (180, 320, 22, 22), setpath, (22, 22))
35 | self.set_tree = PicButton(self.widget, (180, 365, 22, 22), setpath, (22, 22))
36 | self.set_daily = PicButton(self.widget, (180, 410, 22, 22), setpath, (22, 22))
37 | self.set_pass = PicButton(self.widget, (180, 455, 22, 22), setpath, (22, 22))
38 |
--------------------------------------------------------------------------------
/ui/klein/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/klein/__init__.py
--------------------------------------------------------------------------------
/ui/klein/list.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 |
3 |
4 | class KleinList:
5 | def __init__(self, widget, location):
6 | # 功能列表窗口
7 | scroll = ScrollArea(widget, location)
8 | scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
9 | # 设置控件
10 | self.label_klein = Label(scroll, (75, 10, 80, 20), "环行旅舍", 18)
11 | setpath = "assets/main_window/ui/set.png"
12 | self.set_klein = PicButton(scroll, (180, 10, 22, 22), setpath, (22, 22))
13 |
14 | self.check_fight = Check(scroll, (15, 50, 140, 22), "作战/重游")
15 | self.check_disp = Check(scroll, (15, 95, 140, 22), "线下采购")
16 | self.check_review = Check(scroll, (15, 140, 140, 22), "战术回顾")
17 | self.check_market = Check(scroll, (15, 185, 140, 22), "集市领取")
18 | self.check_recruit = Check(scroll, (15, 230, 140, 22), "舍友访募")
19 | self.check_reward = Check(scroll, (15, 275, 140, 22), "今日工作")
20 | self.check_network = Check(scroll, (15, 320, 140, 22), "卡门商网")
21 | self.check_mail = Check(scroll, (15, 365, 140, 22), "领取邮件")
22 | self.check_roll = Check(scroll, (15, 410, 140, 22), "抽卡历史")
23 |
24 | self.set_fight = PicButton(scroll, (180, 50, 22, 22), setpath, (22, 22))
25 | self.set_disp = PicButton(scroll, (180, 95, 22, 22), setpath, (22, 22))
26 | self.set_review = PicButton(scroll, (180, 140, 22, 22), setpath, (22, 22))
27 | self.set_market = PicButton(scroll, (180, 185, 22, 22), setpath, (22, 22))
28 | self.set_recruit = PicButton(scroll, (180, 230, 22, 22), setpath, (22, 22))
29 | self.set_reward = PicButton(scroll, (180, 275, 22, 22), setpath, (22, 22))
30 | self.set_network = PicButton(scroll, (180, 320, 22, 22), setpath, (22, 22))
31 | self.set_mail = PicButton(scroll, (180, 365, 22, 22), setpath, (22, 22))
32 | self.set_roll = PicButton(scroll, (180, 410, 22, 22), setpath, (22, 22))
--------------------------------------------------------------------------------
/ui/m7a.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 | from ui.element.ui_part import Independent
3 | from tools.system import check_path
4 | from webbrowser import open as weopen
5 | from tools.environment import *
6 | from task.default_task import Task
7 |
8 | class M7AList:
9 | def __init__(self, widget, location):
10 | # 运行列表窗口
11 | self.scroll_list = Widget(widget, location)
12 | self.label_m7a = Label(self.scroll_list, (70, 10, 120, 20), "崩坏:星穹铁道助手", 18)
13 | Line(widget, (215, 5, 3, 505), False)
14 |
15 |
16 | class M7AStack:
17 | def __init__(self, widget, location):
18 | # 功能堆叠窗口
19 | self.stack = Stack(widget, location)
20 | # 功能堆叠窗口
21 | self.stack = Widget(self.stack, (0, 0, 395, 515))
22 | self.label_local = Label(self.stack, (0, 12, 220, 18), "设置页面:")
23 | Line(self.stack, (0, 41, 395, 3))
24 |
25 | self.label_m7a_overall = Label(self.stack, (0, 45, 350, 40), "使用说明:本模块支持三月七助手和星穹铁道一\n 条龙两种脚本")
26 | self.label_start = Label(self.stack, (0, 80, 80, 27), "启动路径")
27 | self.line_start = Lineedit(self.stack, (0, 110, 385, 33))
28 | Line(self.stack, (0, 150, 395, 3))
29 |
30 | self.label_team_tip = Label(self.stack, (0, 190, 220, 27), "独立运行设置:")
31 | self.independent = Independent(self.stack, (0, 220, 350, 70), False)
32 | self.button_m7a = Button(self.stack, (0, 300, 125, 30), "三月七助手下载")
33 | self.button_SROD = Button(self.stack, (130, 300, 150, 30), "星穹铁道一条龙下载")
34 | self.button_m7a.clicked.connect(self.open_m7a)
35 | self.button_SROD.clicked.connect(self.open_sr)
36 |
37 | @staticmethod
38 | def open_m7a():
39 | weopen("https://moesnow.github.io/March7thAssistant")
40 |
41 | @staticmethod
42 | def open_sr():
43 | weopen("https://github.com/DoctorReid/StarRailOneDragon")
44 |
45 | def open_path(self):
46 | _path = self.line_start.text()
47 | if isfile(_path):
48 | dire, name = split(_path)
49 | if "March7th" in name:
50 | _path = dire + "/March7th Assistant.exe"
51 | elif "OneDragon" in name:
52 | _path = dire + "/OneDragon Launcher.exe"
53 | else:
54 | Task.indicate("无效启动路径")
55 | raise ValueError("崩坏:星穹铁道助手,无效启动路径")
56 | else:
57 | Task.indicate("无效启动路径")
58 | raise ValueError("崩坏:星穹铁道助手,无效启动路径")
59 | env.set_soft(None, (0, "UnityWndClass", "崩坏:星穹铁道助手"))
60 | env.soft.set_path(_path)
61 | _run = env.soft.run(fls=False, tit="m7a")
62 | if _run:
63 | pass
64 | else:
65 | Task.indicate("崩坏:星穹铁道助手启动失败")
66 |
67 |
68 | class M7A:
69 | def __init__(self, stack, main):
70 | # 三月七助手
71 | self.widget_m7a = Widget()
72 | stack.addWidget(self.widget_m7a)
73 | self.button = (
74 | Picture(main.widget_module, (0, 0, 50, 50),
75 | r"assets\m7a\picture\M7A-icon.png"))
76 | self.list = None
77 | self.set = None
78 |
79 | def load_window(self):
80 | self.list = M7AList(self.widget_m7a, (0, 0, 215, 515))
81 | self.set = M7AStack(self.widget_m7a, (225, 0, 395, 515))
82 | Line(self.widget_m7a, (215, 5, 3, 505), False)
83 |
84 | def load_run(self, run):
85 | _dir = {
86 | "m7a_path": ""
87 | }
88 | _dir.update(run)
89 | self.set.line_start.setText(_dir["m7a_path"])
90 | self.set.line_start.setSelection(0, 0)
91 |
92 | def get_run(self):
93 | return {"m7a_path": check_path(self.set.line_start.text())}
94 |
95 | def input_config(self, _dir):
96 | config = {
97 | "模块": 4,
98 | "静音": False,
99 | "关闭软件": False,
100 | "完成后": 0,
101 | "SGA关闭": False
102 | }
103 | config.update(_dir)
104 | self.set.independent.check_mute.setChecked(config["静音"])
105 | self.set.independent.combo_after.setCurrentIndex(config["完成后"])
106 | self.set.independent.check_kill_sga.setChecked(config["SGA关闭"])
107 |
108 | def output_config(self):
109 | config = dict()
110 | config["模块"] = 4
111 | config["静音"] = self.set.independent.check_mute.isChecked()
112 | config["关闭软件"] = True
113 | config["完成后"] = self.set.independent.combo_after.currentIndex()
114 | config["SGA关闭"] = self.set.independent.check_kill_sga.isChecked()
115 | return config
116 |
--------------------------------------------------------------------------------
/ui/main/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/main/__init__.py
--------------------------------------------------------------------------------
/ui/main/main_window.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 | from ui.element.ui_part import *
3 | from time import strftime, localtime
4 | from tools.environment import logger
5 | from datetime import datetime
6 |
7 |
8 | # 主窗口
9 | class MainWindow: # FramelessWindow
10 | def __init__(self):
11 | # 主窗口初始化
12 | self.main_window = MWindow()
13 | self.button_set_home = OverallButton(self.main_window) # 全局/模块 设置按钮
14 | self.button_history = PicButton(self.main_window, (693, 0, 56, 56), # 历史信息按钮
15 | r"assets\main_window\ui\history.png", (25, 25))
16 | self.button_sponsor = PicButton(self.main_window, (751, 0, 56, 56), # 赞赏按钮
17 | r"assets\main_window\ui\support.png", (25, 25))
18 | self.window_support = Support()
19 | self.button_statement = Button(self.main_window, (809, 0, 96, 27), "使用须知")
20 | self.button_instructions = Button(self.main_window, (809, 29, 96, 27), "使用说明")
21 | self.label_status = Picture(self.main_window, (485, 430, 150, 150), # 指示图标
22 | r"assets\main_window\ui\ico\0.png")
23 | self.box_info = InfoBox(self.main_window) # 指示信息窗口
24 | self.stack_setting = Stack(self.main_window, (5, 0, 620, 570))
25 | self.state = \
26 | {"name": ["mix", "kleins", "genshin", "maa", "m7a", "snow", "common", "presstrigger","zzz", "ww", "kaa"],
27 | "prefix": ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10"],
28 | "mix": {"load": False, "prefix": "00"},
29 | "kleins": {"load": False, "prefix": "01"},
30 | "genshin": {"load": False, "prefix": "02"},
31 | "maa": {"load": False, "prefix": "03"},
32 | "m7a": {"load": False, "prefix": "04"},
33 | "snow": {"load": False, "prefix": "05"},
34 | "common": {"load": False, "prefix": "06"},
35 | "presstrigger": {"load": False, "prefix": "07"},
36 | "zzz": {"load": False, "prefix": "08"},
37 | "ww": {"load": False, "prefix": "09"},
38 | "kaa": {"load": False, "prefix": "10"},
39 | "plan": {}, "serial": [], "single": [],
40 | "stack": None, "locked": None, "hwnd": None,
41 | "text": None, "index": None, "wait_time": 1,
42 | "rename": None}
43 | self.config = None
44 | self.task = {}
45 | self.overall = None
46 |
47 | # 信息栏显示信息
48 | def indicate(self, msg, mode=2, his=True, log=True):
49 | if mode == 0: # 清空信息栏
50 | self.box_info.clear()
51 | elif mode == 1: # 时间前缀的信息头部追加
52 | date = datetime.now().strftime("%Y-%m-%d")
53 | if date != logger.date:
54 | logger.new_handler(date)
55 | now_time = strftime("%Y-%m-%d", localtime())
56 | self.box_info.append(now_time)
57 | if his:
58 | txt = open(r"personal\history.txt", 'a+', encoding='utf-8')
59 | txt.write(now_time + "\n")
60 | elif mode == 2: # 时间前缀的信息持续追加
61 |
62 | _t = strftime("%H:%M:%S ", localtime()) + msg
63 | _t = _t.replace("\n", "\n ")
64 | self.box_info.append(_t)
65 | self.box_info.ensureCursorVisible()
66 | if his:
67 | txt = open(r"personal\history.txt", 'a+', encoding='utf-8')
68 | txt.write(_t + "\n")
69 | if log:
70 | logger.info(msg.replace("\n", "\n "))
71 |
72 | elif mode == 3: # 信息段落结尾
73 | _t = strftime("%H:%M:%S ", localtime()) + msg
74 | _t = _t.replace("\n", "\n ")
75 | self.box_info.append(_t + "\n------------------------------")
76 | self.box_info.ensureCursorVisible()
77 | if his:
78 | txt = open(r"personal\history.txt", 'a+', encoding='utf-8')
79 | txt.write(_t + "\n------------------------------\n")
80 | if log:
81 | logger.info(msg.replace("\n", "\n ") +
82 | "\n-------------------------------------")
83 | elif mode == 4: # 直接追加信息
84 | self.box_info.append(msg)
85 | self.box_info.ensureCursorVisible()
86 | if his:
87 | txt = open(r"personal\history.txt", 'a+', encoding='utf-8')
88 | txt.write("msg" + "\n")
89 | else:
90 | print("信息输出,无效模式")
91 |
--------------------------------------------------------------------------------
/ui/mix/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/mix/__init__.py
--------------------------------------------------------------------------------
/ui/mix/list.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 |
3 |
4 | class MixList:
5 | def __init__(self, widget, location): # 0, 0, 215, 515
6 | # 功能列表窗口
7 | self.scroll = ScrollArea(widget, location)
8 | self.scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
9 | self.widget = Widget(self.scroll, (0, 0, 215, 515))
10 | self.widget.setMinimumSize(215, 515)
11 | self.scroll.setWidget(self.widget)
12 | self.scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
13 | # 运行列表窗口
14 | self.label_continuous = Label(self.widget, (75, 10, 80, 20), "连续任务", 18)
15 | self.combobox_mix_config0 = Combobox(self.widget, (0, 50, 210, 30))
16 | self.combobox_mix_config1 = Combobox(self.widget, (0, 90, 210, 30))
17 | self.combobox_mix_config2 = Combobox(self.widget, (0, 130, 210, 30))
18 | self.combobox_mix_config3 = Combobox(self.widget, (0, 170, 210, 30))
19 | self.combobox_mix_config4 = Combobox(self.widget, (0, 210, 210, 30))
20 |
--------------------------------------------------------------------------------
/ui/mix/stack.py:
--------------------------------------------------------------------------------
1 | from ui.element.ui_part import Independent
2 | from ui.element.control import *
3 |
4 |
5 | class MixStack:
6 | def __init__(self, widget, location):
7 | # 功能堆叠窗口
8 | self.stack = Stack(widget, location)
9 | # 功能堆叠窗口
10 | self.widget_set = Widget(self.stack, (0, 0, 395, 515))
11 | self.label_local = Label(self.widget_set, (0, 12, 220, 18), "设置页面:连续任务 运行方式")
12 | self.line0 = Line(self.widget_set, (0, 41, 395, 3))
13 | self.independent = Independent(self.widget_set, (0, 50, 350, 70), False)
14 |
--------------------------------------------------------------------------------
/ui/module/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/module/__init__.py
--------------------------------------------------------------------------------
/ui/module/main.py:
--------------------------------------------------------------------------------
1 | from ..mix.main import Mix
2 | from ..klein.main import Klein
3 | from ..genshin.main import Genshin
4 | from ..maa import MAA
5 | from ..m7a import M7A
6 | from ..snow.main import Snow
7 | from ..common.main import Common
8 | from ..presstrigger.main import PressTrigger
9 | from .module import ModuleWindow
10 | from ..zzz import zzz
11 | from ..ww import ww
12 | from ..kaa import Kaa
13 |
14 |
15 |
16 | class Module(ModuleWindow):
17 | def __init__(self, main):
18 | super().__init__(main)
19 | self.mix = Mix(self.stack_module, main)
20 | self.kleins = Klein(self.stack_module, main)
21 | self.genshin = Genshin(self.stack_module, main)
22 | self.maa = MAA(self.stack_module, main)
23 | self.m7a = M7A(self.stack_module, main)
24 | self.snow = Snow(self.stack_module, main)
25 | self.common = Common(self.stack_module, main)
26 | self.presstrigger = PressTrigger(self.stack_module, main)
27 | self.zzz = zzz(self.stack_module, main)
28 | self.ww = ww(self.stack_module, main)
29 | self.kaa = Kaa(self.stack_module, main)
30 |
--------------------------------------------------------------------------------
/ui/module/module.py:
--------------------------------------------------------------------------------
1 | from qfluentwidgets import EditableComboBox
2 | from ui.element.control import *
3 |
4 |
5 | # 模组设置窗口
6 | class ModuleWindow:
7 | def __init__(self, main):
8 | # 模块设置窗口
9 | self.widget_module = Widget(None, (5, 0, 670, 570))
10 | main.stack_setting.addWidget(self.widget_module)
11 | # 模块按钮
12 | self.box_module_change = ComboBox(self.widget_module)
13 | self.box_module_change.setGeometry(QtCore.QRect(55, 8, 160, 35))
14 | self.box_module_change.addItems(
15 | ["连续任务", "环行旅舍", "原神", "MAA", "崩坏:星穹铁道助手", "尘白禁区", "通用执行", "连点器","绝区零助手","鸣潮助手","琴音小助手"])
16 | # 配置切换列表
17 | self.box_config_change = EditableComboBox(self.widget_module)
18 | self.box_config_change.setGeometry(QtCore.QRect(265, 9, 215, 35))
19 | # self.box_config_change.setEnabled(False)
20 | # 开始暂停按钮
21 | self.button_config_delete = PicButton(self.widget_module, (225, 8, 35, 35),
22 | r"assets\main_window\ui\delete.png", (25, 25))
23 | self.button_config_unlock = TransPicButton(self.widget_module, (485, 8, 35, 35),
24 | r"assets\main_window\ui\unlock.png", (25, 25))
25 | self.button_config_unlock.hide()
26 | self.button_config_lock = TransPicButton(self.widget_module, (485, 8, 35, 35),
27 | r"assets\main_window\ui\lock.png", (25, 25))
28 |
29 | self.button_config_save = PicButton(self.widget_module, (525, 8, 35, 35),
30 | r"assets\main_window\ui\save.png", (25, 25))
31 |
32 | self.button_pause = Button(self.widget_module, (565, 8, 55, 35), "停止")
33 | self.button_pause.hide()
34 | self.button_start = Button(self.widget_module, (565, 8, 55, 35), "开始")
35 | # 堆叠窗口
36 | self.stack_module = Stack(self.widget_module, (0, 65, 670, 515))
37 |
38 |
39 |
--------------------------------------------------------------------------------
/ui/overall/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/overall/__init__.py
--------------------------------------------------------------------------------
/ui/overall/main.py:
--------------------------------------------------------------------------------
1 | from .timer.main import Timer
2 | from ui.element.control import *
3 | from tools.environment import env
4 | from json import load
5 |
6 |
7 | class Overall:
8 | def __init__(self, stack):
9 | self.widget = Widget()
10 | stack.addWidget(self.widget)
11 | Label(self.widget, (0, 0, 80, 40), "全局设置", 18)
12 | Line(self.widget, (0, 43, 620, 3))
13 | self.timer = Timer(self.widget, (0, 60, 620, 300))
14 | Line(self.widget, (0, 300, 620, 3))
15 | self.auto_update = Check(self.widget, (0, 310, 150, 40), "自动检查并更新")
16 | self.button_check = Button(self.widget, (135, 315, 80, 30), "检查更新")
17 | self.button_update = Button(self.widget, (135, 315, 80, 30), "开始更新")
18 | self.button_update.hide()
19 | self.button_update.setEnabled(False)
20 | Label(self.widget, (225, 310, 120, 40), f"版本号 {env.version}", 14)
21 |
22 | self.button_update_history = Button(self.widget, (325, 315, 80, 30), "更新日志")
23 | self.button_logger = Button(self.widget, (410, 315, 80, 30), "运行日志")
24 |
25 | self.button_github = TransPicButton(self.widget, (500, 312, 30, 30),
26 | r"assets\main_window\ui\github.png", (30, 30))
27 | self.button_gitee = TransPicButton(self.widget, (540, 312, 30, 30),
28 | r"assets\main_window\ui\gitee.png", (30, 30))
29 | self.button_bilibili = TransPicButton(self.widget, (580, 312, 30, 30),
30 | r"assets\main_window\ui\bilibili.png", (30, 30))
31 |
32 | @staticmethod
33 | def get_ver():
34 | with open(r"assets\main_window\version.json", 'r', encoding='utf-8') as m:
35 | _dir = load(m)
36 | return _dir["version"]
37 |
--------------------------------------------------------------------------------
/ui/overall/timer/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/overall/timer/__init__.py
--------------------------------------------------------------------------------
/ui/presstrigger/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/presstrigger/__init__.py
--------------------------------------------------------------------------------
/ui/presstrigger/stack.py:
--------------------------------------------------------------------------------
1 | import os
2 | from ui.element.ui_part import Independent
3 | from ui.element.control import *
4 | from tools.environment import *
5 | from PyQt5.QtGui import QIntValidator
6 |
7 |
8 | class Local:
9 | def __init__(self, stack):
10 | # 初始化窗口
11 | self.page_local = Widget(stack)
12 | stack.addWidget(self.page_local)
13 | # 添加控件
14 | self.label_local = Label(self.page_local, (10, 12, 200, 18), "设置页面:连点器 运行方式")
15 | self.button_rule = Button(self.page_local, (220, 7, 120, 30), "热键设置规则")
16 | Line(self.page_local, (0, 42, 610, 3))
17 |
18 | self.label_disable = Label(self.page_local, (10, 50, 180, 27), "禁用/启用热键:")
19 | self.line_disable = Lineedit(self.page_local, (130, 50, 160, 33))
20 |
21 | self.label_trigger1 = Label(self.page_local, (10, 90, 180, 27), "触发模式:")
22 | self.choose_trigger = Combobox(self.page_local, (130, 90, 100, 30))
23 | self.choose_trigger.addItems(["长按模式", "短按模式"])
24 | self.label_trigger2 = Label(self.page_local, (10, 125, 180, 27), "触发热键:")
25 | self.line_trigger = Lineedit(self.page_local, (130, 125, 160, 33))
26 |
27 | self.label_clicker_mode = Label(self.page_local, (10, 165, 180, 27), "连点模式:")
28 | self.choose_clicker_mode = Combobox(self.page_local, (130, 165, 100, 30))
29 | self.choose_clicker_mode.addItems(["按下模式", "连点模式", "脚本模式"])
30 | self.label_clicker = Label(self.page_local, (10, 200, 180, 27), "连点/按下键:")
31 | self.line_clicker = Lineedit(self.page_local, (130, 200, 160, 33))
32 | self.label_interval = Label(self.page_local, (10, 240, 180, 27), "间隔时间(ms):")
33 | self.line_interval = Lineedit(self.page_local, (130, 240, 80, 33))
34 | self.line_interval.setValidator(QIntValidator())
35 |
36 | self.label_sc = Label(self.page_local, (10, 280, 180, 27), "脚本选择:")
37 | self.choose_sc = Combobox(self.page_local, (130, 280, 160, 30))
38 | _path = env.workdir + "/personal/ptscript"
39 | if not os.path.exists(_path):
40 | os.makedirs(_path)
41 | _list = os.listdir("personal/ptscript")
42 | _nl = []
43 | for i in _list:
44 | [name, ext] = os.path.splitext(i)
45 | if ext == ".txt":
46 | _nl += [name]
47 | if not _nl:
48 | copyfile(r"assets\presstrigger\脚本示例.txt",
49 | r"personal/ptscript\脚本示例.txt")
50 | _nl += ["脚本示例"]
51 | self.choose_sc.addItems(_nl)
52 | self.label_scn = Label(self.page_local, (10, 320, 180, 27), "重复次数:")
53 | self.line_scn = Lineedit(self.page_local, (130, 320, 80, 33))
54 | self.line_scn.setValidator(QIntValidator())
55 |
56 | self.button_folder = Button(self.page_local, (300, 280, 130, 30), "打开脚本文件夹")
57 | self.button_refresh = TransPicButton(self.page_local, (100, 285, 20, 20),
58 | "assets/main_window/ui/refresh.png", (20, 20))
59 |
60 | self.independent = Independent(self.page_local, (0, 250, 350, 70))
61 | self.independent.widget.hide()
62 |
63 |
64 | class PressTriggerStack(Local):
65 | def __init__(self, widget, location):
66 | # 功能堆叠窗口
67 | self.stack = Stack(widget, location)
68 | Local.__init__(self, self.stack)
69 |
--------------------------------------------------------------------------------
/ui/snow/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/snow/__init__.py
--------------------------------------------------------------------------------
/ui/snow/__pycache__/__init__.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/snow/__pycache__/__init__.cpython-39.pyc
--------------------------------------------------------------------------------
/ui/snow/__pycache__/list.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/snow/__pycache__/list.cpython-39.pyc
--------------------------------------------------------------------------------
/ui/snow/__pycache__/main.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/snow/__pycache__/main.cpython-39.pyc
--------------------------------------------------------------------------------
/ui/snow/__pycache__/stack.cpython-39.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/ui/snow/__pycache__/stack.cpython-39.pyc
--------------------------------------------------------------------------------
/ui/snow/list.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 |
3 |
4 | class SnowList:
5 | def __init__(self, widget, location):
6 | # 功能列表窗口
7 | scroll = ScrollArea(widget, location)
8 | scroll.setFrameShape(QtWidgets.QFrame.Shape(0))
9 | # 设置控件
10 | self.label_snow = Label(scroll, (75, 10, 80, 20), "尘白禁区", 18)
11 | setpath = "assets/main_window/ui/set.png"
12 | self.set_snow = PicButton(scroll, (180, 10, 22, 22), setpath, (22, 22))
13 |
14 | self.check_fight = Check(scroll, (15, 50, 140, 22), "感知扫荡")
15 | self.check_daily = Check(scroll, (15, 95, 140, 22), "日常周常")
16 | self.check_mail = Check(scroll, (15, 140, 140, 22), "领取邮件")
17 | self.check_roll = Check(scroll, (15, 185, 140, 22), "共鸣记录")
18 |
19 | self.set_fight = PicButton(scroll, (180, 50, 22, 22), setpath, (22, 22))
20 | self.set_daily = PicButton(scroll, (180, 95, 22, 22), setpath, (22, 22))
21 | self.set_mail = PicButton(scroll, (180, 140, 22, 22), setpath, (22, 22))
22 | self.set_roll = PicButton(scroll, (180, 185, 22, 22), setpath, (22, 22))
23 |
24 | self.button_start = Button(scroll, (70, 225, 80, 35), "启动游戏")
25 | self.button_start.setToolTip('快捷启动游戏,不执行任务')
26 | self.button_start.installEventFilter(
27 | ToolTipFilter(self.button_start,
28 | showDelay=200,
29 | position=ToolTipPosition.TOP))
30 |
31 | self.button_switch = Swicher(scroll, (30, 470, 100, 35))
32 | self.button_switch.setOffText("小开关未开启")
33 | self.button_switch.setOnText("小开关已开启")
34 | self.button_switch.setToolTip('使用西山居启动器,需要将游戏安装在启动器目录下')
35 | self.button_switch.installEventFilter(
36 | ToolTipFilter(self.button_switch,
37 | showDelay=200,
38 | position=ToolTipPosition.TOP))
39 |
40 | # 临时功能
41 | self.button_tem = Button(scroll, (70, 280, 120, 35), "开始临时任务")
42 | self.combo_tem = Combobox(scroll, (70, 320, 120, 32))
43 | self.combo_tem.addItems(["简单", "普通", "困难", "险恶", "异星守护"])
44 | self.button_tem.setToolTip('请进入验证战场页面,自行配置好队伍和buff\n辰星放一号位,选够三个队友推荐辰星幽潮豹豹\n异星守护自行进入页面,配置队友')
45 | self.button_tem.installEventFilter(
46 | ToolTipFilter(self.button_tem,
47 | showDelay=200,
48 | position=ToolTipPosition.TOP))
49 |
50 |
--------------------------------------------------------------------------------
/ui/ui_starrail.py:
--------------------------------------------------------------------------------
1 | from PyQt5 import QtCore, QtGui, QtWidgets
2 | from qfluentwidgets import CheckBox, ComboBox, CompactSpinBox, EditableComboBox, ImageLabel, LineEdit, PushButton, \
3 | SegmentedWidget, SmoothScrollArea, StrongBodyLabel, SubtitleLabel, TimePicker, TransparentPushButton
4 |
5 |
6 | class Ui_starrail():
7 | def __init__(self):
8 | self.module()
9 |
10 | def module(self):
11 | self.page_starrail = QtWidgets.QWidget()
12 | self.page_starrail.setObjectName("page_starrail")
13 | self.scroll_starrail = SmoothScrollArea(self.page_starrail)
14 | self.scroll_starrail.setGeometry(QtCore.QRect(10, 50, 221, 391))
15 | self.scroll_starrail.setWidgetResizable(True)
16 | self.scroll_starrail.setObjectName("scroll_starrail")
17 | self.scrollWidget_starrail = QtWidgets.QWidget()
18 | self.scrollWidget_starrail.setGeometry(QtCore.QRect(0, 0, 219, 389))
19 | self.scrollWidget_starrail.setObjectName("scrollWidget_starrail")
20 | self.CheckBox_4 = CheckBox(self.scrollWidget_starrail)
21 | self.CheckBox_4.setGeometry(QtCore.QRect(10, 20, 92, 22))
22 | self.CheckBox_4.setObjectName("CheckBox_4")
23 | self.TransparentPushButton_4 = TransparentPushButton(self.scrollWidget_starrail)
24 | self.TransparentPushButton_4.setGeometry(QtCore.QRect(150, 20, 41, 30))
25 | self.TransparentPushButton_4.setObjectName("TransparentPushButton_4")
26 | self.scroll_starrail.setWidget(self.scrollWidget_starrail)
27 | self.label_starrail = SubtitleLabel(self.page_starrail)
28 | self.label_starrail.setGeometry(QtCore.QRect(50, 20, 119, 27))
29 | self.label_starrail.setObjectName("label_starrail")
30 | self.stacked_module.addWidget(self.page_starrail)
31 |
32 | def set_1(self):
33 | pass
34 |
35 | def set_2(self):
36 | pass
--------------------------------------------------------------------------------
/ui/ww.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 | from ui.element.ui_part import Independent
3 | from tools.system import check_path
4 | from webbrowser import open as weopen
5 |
6 |
7 | class wwList:
8 | def __init__(self, widget, location):
9 | # 运行列表窗口
10 | self.scroll_list = Widget(widget, location)
11 | self.label_ww = Label(self.scroll_list, (70, 10, 120, 20), "鸣潮助手", 18)
12 | Line(widget, (215, 5, 3, 505), False)
13 |
14 |
15 | class wwStack:
16 | def __init__(self, widget, location):
17 | # 功能堆叠窗口
18 | self.stack = Stack(widget, location)
19 | # 功能堆叠窗口
20 | self.stack = Widget(self.stack, (0, 0, 395, 515))
21 | self.label_local = Label(self.stack, (0, 12, 220, 18), "设置页面:")
22 | Line(self.stack, (0, 41, 395, 3))
23 |
24 | self.label_ww_overall = Label(self.stack, (0, 45, 360, 65), "使用说明:本模块支持ok-ww一条龙运行,请确保\n 您已正确安装并配置好相关软件。\n 请在ok—ww一条龙设置点击内创建快捷启动方式")
25 |
26 |
27 | self.label_team_tip = Label(self.stack, (0, 160, 220, 27), "独立运行设置:")
28 | self.independent = Independent(self.stack, (0, 200, 350, 70), False)
29 | self.button_ww = Button(self.stack, (0, 280, 160, 30), "ok-ww鸣潮助手下载")
30 | self.button_ww.clicked.connect(self.open_ww)
31 | @staticmethod
32 | def open_ww():
33 | weopen("https://github.com/ok-oldking/ok-wuthering-waves")
34 |
35 | class ww:
36 | def __init__(self, stack, main):
37 | # 鸣潮一条龙
38 | self.widget_ww = Widget()
39 | stack.addWidget(self.widget_ww)
40 | self.button = (
41 | Picture(main.widget_module, (0, 0, 50, 50),
42 | r"assets\ww\pictures\ww_logo.png"))
43 | self.list = None
44 | self.set = None
45 |
46 | def load_window(self):
47 | self.list = wwList(self.widget_ww, (0, 0, 215, 515))
48 | self.set = wwStack(self.widget_ww, (225, 0, 395, 515))
49 | Line(self.widget_ww, (215, 5, 3, 505), False)
50 |
51 | def load_run(self, run):
52 | _dir = {}
53 | _dir.update(run)
54 |
55 | def get_run(self):
56 | return {}
57 |
58 | def input_config(self, _dir):
59 | config = {
60 | "模块": 9,
61 | "静音": False,
62 | "关闭软件": False,
63 | "完成后": 0,
64 | "SGA关闭": False
65 | }
66 | config.update(_dir)
67 | self.set.independent.check_mute.setChecked(config["静音"])
68 | self.set.independent.combo_after.setCurrentIndex(config["完成后"])
69 | self.set.independent.check_kill_sga.setChecked(config["SGA关闭"])
70 |
71 | def output_config(self):
72 | config = dict()
73 | config["模块"] = 9
74 | config["静音"] = self.set.independent.check_mute.isChecked()
75 | config["关闭软件"] = True
76 | config["完成后"] = self.set.independent.combo_after.currentIndex()
77 | config["SGA关闭"] = self.set.independent.check_kill_sga.isChecked()
78 | return config
79 |
--------------------------------------------------------------------------------
/ui/zzz.py:
--------------------------------------------------------------------------------
1 | from ui.element.control import *
2 | from ui.element.ui_part import Independent
3 | from tools.system import check_path
4 | from webbrowser import open as weopen
5 |
6 |
7 | class zzzList:
8 | def __init__(self, widget, location):
9 | # 运行列表窗口
10 | self.scroll_list = Widget(widget, location)
11 | self.label_zzz = Label(self.scroll_list, (70, 10, 120, 20), "绝区零助手", 18)
12 | Line(widget, (215, 5, 3, 505), False)
13 |
14 |
15 | class zzzStack:
16 | def __init__(self, widget, location):
17 | # 功能堆叠窗口
18 | self.stack = Stack(widget, location)
19 | # 功能堆叠窗口
20 | self.stack = Widget(self.stack, (0, 0, 395, 515))
21 | self.label_local = Label(self.stack, (0, 12, 220, 18), "设置页面:")
22 | Line(self.stack, (0, 41, 395, 3))
23 |
24 | self.label_zzz_overall = Label(self.stack, (0, 45, 360, 40), "使用说明:本模块支持绝区零一条龙运行,请确保\n 您已正确安装并配置好相关软件。")
25 | self.label_start = Label(self.stack, (0, 80, 80, 27), "启动路径")
26 | self.line_start = Lineedit(self.stack, (0, 110, 385, 33))
27 | Line(self.stack, (0, 152, 395, 3))
28 |
29 | self.label_team_tip = Label(self.stack, (0, 160, 220, 27), "独立运行设置:")
30 | self.independent = Independent(self.stack, (0, 200, 350, 70), False)
31 | self.button_zzz = Button(self.stack, (0, 280, 140, 30), "绝区零一条龙下载")
32 | self.button_zzz.clicked.connect(self.open_zzz)
33 | @staticmethod
34 | def open_zzz():
35 | weopen("https://one-dragon.org/zzz/zh/home.html")
36 |
37 | class zzz:
38 | def __init__(self, stack, main):
39 | # 绝区零一条龙
40 | self.widget_zzz = Widget()
41 | stack.addWidget(self.widget_zzz)
42 | self.button = (
43 | Picture(main.widget_module, (0, 0, 50, 50),
44 | r"assets\zzz\pictures\zzz_logo.png"))
45 | self.list = None
46 | self.set = None
47 |
48 | def load_window(self):
49 | self.list = zzzList(self.widget_zzz, (0, 0, 215, 515))
50 | self.set = zzzStack(self.widget_zzz, (225, 0, 395, 515))
51 | Line(self.widget_zzz, (215, 5, 3, 505), False)
52 |
53 | def load_run(self, run):
54 | _dir = {
55 | "zzz_path": ""
56 | }
57 | _dir.update(run)
58 | self.set.line_start.setText(_dir["zzz_path"])
59 | self.set.line_start.setSelection(0, 0)
60 |
61 | def get_run(self):
62 | return {"zzz_path": check_path(self.set.line_start.text())}
63 |
64 | def input_config(self, _dir):
65 | config = {
66 | "模块": 8,
67 | "静音": False,
68 | "关闭软件": False,
69 | "完成后": 0,
70 | "SGA关闭": False
71 | }
72 | config.update(_dir)
73 | self.set.independent.check_mute.setChecked(config["静音"])
74 | self.set.independent.combo_after.setCurrentIndex(config["完成后"])
75 | self.set.independent.check_kill_sga.setChecked(config["SGA关闭"])
76 |
77 | def output_config(self):
78 | config = dict()
79 | config["模块"] = 8
80 | config["静音"] = self.set.independent.check_mute.isChecked()
81 | config["关闭软件"] = True
82 | config["完成后"] = self.set.independent.combo_after.currentIndex()
83 | config["SGA关闭"] = self.set.independent.check_kill_sga.isChecked()
84 | return config
85 |
--------------------------------------------------------------------------------
/update_history.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kin-L/SucroseGameAssistant/8f94d2ae07ef9424a1d93f13d80f38d783f25f80/update_history.txt
--------------------------------------------------------------------------------
/update_zip.py:
--------------------------------------------------------------------------------
1 | import os
2 | import zipfile
3 | import shutil
4 | import json
5 |
6 |
7 | def edit_version(_ver):
8 | with open("assets/main_window/version.json", 'r', encoding='utf-8') as m:
9 | _dir = json.load(m)
10 | if _ver != _dir["version"]:
11 | old_ver = _dir["version"]
12 | _dir["version"] = _ver
13 | with open("assets/main_window/version.json", 'w', encoding='utf-8') as x:
14 | json.dump(_dir, x, ensure_ascii=False, indent=1)
15 | print(f"版本号更新:{old_ver}>>>{_ver}")
16 | else:
17 | print(f"\033[1;33m版本号已存在:{_ver}\033[0m")
18 |
19 |
20 | def copy_file(_file_dir, _ver, full):
21 | _cd1 = f"releases/SGA_{_ver}"
22 | if full:
23 | _cd2 = f"releases/SGA_{_ver}"
24 | else:
25 | _cd2 = f"releases/SGA_{_ver}/SGA_{_ver}"
26 | if os.path.exists(_cd1):
27 | shutil.rmtree(_cd1)
28 | print(f"\033[1;33m路径存在,进行清除覆盖:{_cd1}\033[0m")
29 | else:
30 | os.makedirs(_cd1)
31 | print("\033[1;32m文件复制中,请稍等...\033[0m")
32 | files = list(_file_dir.keys())
33 | for f in files:
34 | if os.path.exists(f):
35 | if _file_dir[f]:
36 | out_path = f"{_cd2}/{_file_dir[f]}/{os.path.split(f)[-1]}"
37 | else:
38 | out_path = f"{_cd2}/{os.path.split(f)[-1]}"
39 | if os.path.isfile(f):
40 | _d = os.path.split(out_path)[0]
41 | if not os.path.exists(_d):
42 | os.makedirs(_d)
43 | shutil.copyfile(f, out_path)
44 | elif os.path.isdir(f):
45 | if os.path.exists(out_path):
46 | shutil.rmtree(out_path)
47 | shutil.copytree(f, out_path)
48 | else:
49 | print(f"未知错误路径:{f}")
50 | else:
51 | print(f"未知错误路径:{f}")
52 | print(f"复制更新文件完成:{_cd1}")
53 |
54 |
55 | def zip_folder(_ver, full):
56 | if full:
57 | dirpath = f"releases/SGA_{_ver}"
58 | out = f"releases/SGA_{_ver}.rar"
59 | else:
60 | dirpath = f"releases/SGA_{_ver}"
61 | out = f"releases/SGA_{_ver}.zip"
62 | if os.path.exists(out):
63 | os.remove(out)
64 | print(f"\033[1;33m文件存在,进行清除覆盖:{out}\033[0m")
65 | print("\033[1;32m打包中,请稍等...\033[0m")
66 | if full:
67 | # 本地WinRAR.exe地址
68 | rar_path = "\"D:/Program Files/WinRAR/WinRAR.exe\""
69 | os.chdir("releases")
70 | os.system(f"{rar_path} a SGA_{_ver}.rar SGA_{_ver}")
71 | os.chdir("..")
72 | else:
73 | _zip = zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED)
74 | for path, dirnames, filenames in os.walk(dirpath):
75 | # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
76 | fpath = path.replace(dirpath, '')
77 |
78 | for filename in filenames:
79 | _zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
80 | _zip.close()
81 | print(f"输出更新包:{out}")
82 | shutil.rmtree(dirpath)
83 | print(f"清除缓存文件夹:{dirpath}")
84 |
85 |
86 | def pack(_d, _v, full=False):
87 | if full:
88 | _d = {
89 | "dist/SGA2.0-demo/_internal": "",
90 | "dist/SGA2.0-demo/SGA.exe": "",
91 | "Instructions.docx": "",
92 | "SGA快速上手.docx": "",
93 | "update_history.txt": "",
94 | "README.md": "",
95 | "assets": "",
96 | "multithread": "_internal",
97 | "tools": "_internal",
98 | "ui": "_internal",
99 | "task": "_internal"
100 | }
101 | _v = _v + "_full"
102 | else:
103 | _v = _v + "_replace"
104 | copy_file(_d, _v, full)
105 | zip_folder(_v, full)
106 | if full:
107 | print(f"\033[1;32mfull自动打包完成!\033[0m")
108 | else:
109 | print(f"\033[1;32mreplace自动打包完成!\033[0m")
110 |
111 |
112 | # 更新包自动打包脚本
113 | if __name__ == '__main__':
114 | _ver = "v2.3.2"
115 | file_dir = {
116 | "update_history.txt": "",
117 | # "README.md": "",
118 | # "assets": "",
119 | "assets/main_window/version.json": "assets/main_window",
120 | "assets/snow/list.json": "assets/snow",
121 | "multithread": "_internal",
122 | "tools": "_internal",
123 | "ui": "_internal",
124 | "task": "_internal"
125 | }
126 | edit_version(_ver)
127 | pack(file_dir, _ver.lstrip("v"),
128 | # full=True
129 | )
130 |
--------------------------------------------------------------------------------