├── 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 | --------------------------------------------------------------------------------