Compare commits

...

124 Commits

Author SHA1 Message Date
1204244136 bfaf96e7bf perf: 通行证领取流程优化 2025-06-18 13:47:30 +08:00
1204244136 638ae4d90e perf: 通行证滑动方式优化 2025-06-18 13:47:13 +08:00
1204244136 b7b68b26af perf: 大活动奖励领取流程优化 2025-06-18 13:46:48 +08:00
1204244136 745d020f2a fix: 协同作战不在活动期间内无法返回 2025-06-18 13:46:20 +08:00
1204244136 43f7f34b59 fix: 大活动关卡刷取异常 2025-06-18 13:45:45 +08:00
1204244136 898f0b7b3c fix: 大活动签到领取异常 2025-06-18 13:45:18 +08:00
1204244136 2433aaab25 fix: 大活动进入判定异常 2025-06-18 13:45:00 +08:00
1204244136 e20bf86961 perf: 每日任务收取流程优化 2025-06-18 13:43:14 +08:00
1204244136 801b2eee20 perf: 好友点数收取流程优化 2025-06-18 13:42:26 +08:00
1204244136 01042b8bff fix: 咨询判定异常 2025-06-18 13:41:52 +08:00
1204244136 f32254860e perf: 进入模拟室流程优化 2025-06-18 13:41:22 +08:00
1204244136 a811fa52b6 perf: 付费商店流程优化 2025-06-18 13:40:38 +08:00
1204244136 602698dbd5 perf: 检测自动爆裂流程优化 2025-06-18 13:40:13 +08:00
1204244136 7e6c73367f build: 基础控制函数优化 2025-06-18 13:39:18 +08:00
1204244136 a5805b5f10 build: 素材库更新 2025-06-18 13:38:36 +08:00
1204244136 0e7600c621 fix: 读取设置异常 2025-06-18 13:38:09 +08:00
1204244136 ef2b3c7dce perf: 暂停时也会保存配置 2025-06-18 13:37:52 +08:00
1204244136 f699336571 docs: 文本优化 2025-06-18 13:37:16 +08:00
1204244136 25fa4d63c6 fix: 大活动无法进入剧情活动页面 2025-06-18 00:11:47 +08:00
1204244136 e8512b8768 fix: 模拟室结算异常+ 2025-06-16 12:58:45 +08:00
1204244136 654ac8e4ed fix: 协同作战返回异常 2025-06-16 12:34:39 +08:00
1204244136 f04475b357 fix: 大活动挑战进入异常 2025-06-16 12:34:39 +08:00
1204244136 d30ee310cd fix: 大活动签到确认异常 2025-06-16 12:34:39 +08:00
1204244136 426af7b721 fix: 咨询进度异常 2025-06-16 12:34:39 +08:00
1204244136 00acbab4a6 fix: 模拟室结算异常 2025-06-16 12:34:39 +08:00
1204244136 461e614973 docs: 调整登录提示文本的位置 2025-06-16 12:34:39 +08:00
1204244136 bd72c67078 perf: 登录游戏功能解耦 2025-06-16 12:34:39 +08:00
1204244136 620bbaa388 fix: 咨询报错 2025-06-15 14:52:04 +08:00
1204244136 c4a913918d perf: 优化商店进入判定 2025-06-15 14:51:09 +08:00
1204244136 2c749d533f chore: 优化发行版映射表 2025-06-15 14:37:33 +08:00
1204244136 0d52239f11 perf: 代码超级重构 2025-06-15 14:24:36 +08:00
1204244136 8313bad0e3 test: 调整测试热键 2025-06-15 00:56:05 +08:00
1204244136 071278c447 docs: 优化提示文本 2025-06-15 00:55:49 +08:00
1204244136 10364dd246 perf: 优化人机验证 2025-06-15 00:46:51 +08:00
1204244136 59bc8e1452 chore: 优化依赖库 2025-06-15 00:46:51 +08:00
1204244136 d833cd9463 fix: 收菜异常 2025-06-13 23:53:18 +08:00
1204244136 a0cf7361fc fix: 派遣异常 2025-06-13 23:51:29 +08:00
1204244136 93be5d4898 fix: 咨询异常 2025-06-13 23:50:40 +08:00
1204244136 be047bf13a fix: 花絮鉴赏卡死 2025-06-13 23:49:38 +08:00
1204244136 76aa59d518 perf: 无法登录时检测窗口聚焦 2025-06-13 14:24:04 +08:00
1204244136 58ee1aeba1 docs: 自述文件添加友链 2025-06-13 09:51:52 +08:00
1204244136 8f738c31b5 build: 移除不必要的依赖 2025-06-13 09:51:08 +08:00
1204244136 c78906de64 perf: 快速战斗点击偏移 2025-06-12 12:10:19 +08:00
1204244136 76a0843bac revert: 检测完成战斗频率降低 2025-06-12 12:09:59 +08:00
1204244136 0f74f9ed10 fix: 挑战无法扫荡最后一关+ 2025-06-11 22:55:44 +08:00
1204244136 2118066156 fix: 无法收菜 2025-06-11 22:27:21 +08:00
1204244136 0564cacea1 fix: 挑战无法扫荡最后一关 2025-06-11 22:02:35 +08:00
1204244136 0cdab6ca4a docs: 提示文本优化 2025-06-11 21:55:21 +08:00
1204244136 0b70efc09c fix: 初始化报错 2025-06-11 20:48:01 +08:00
1204244136 e98cf8b11e fix: 前哨基地收菜异常 2025-06-11 20:20:40 +08:00
1204244136 08532be5f6 docs: 启动提示的文本优化 2025-06-11 20:20:39 +08:00
1204244136 40cc1d9f42 docs: 自述文件文本优化 2025-06-11 15:51:05 +08:00
1204244136 ab8dd51fea Revert "fix: 异常拦截退出异常"
This reverts commit f00b5d9a60.
2025-06-11 13:13:12 +08:00
1204244136 a91219c45e fix: 异常拦截无法判定结束 2025-06-11 09:57:51 +08:00
1204244136 ced8d4ab5b fix: 启动时日志报错 2025-06-10 23:54:16 +08:00
1204244136 b8a1486ed1 revert: 数据写入异常 2025-06-10 23:53:52 +08:00
知一一 417e935482 perf: 优化工作流文本逻辑 2025-06-10 22:01:28 +08:00
知一一 35b9f02dea docs: 版本号变更 2025-06-10 21:29:52 +08:00
知一一 40d1fb0b69 fix: 无法战斗时返回异常 2025-06-10 21:26:54 +08:00
知一一 165049e5ab docs: 日志文本优化 2025-06-10 21:24:15 +08:00
知一一 1d4d91bbc1 perf: 点掉推销的逻辑优化 2025-06-10 21:23:57 +08:00
知一一 f00b5d9a60 fix: 异常拦截退出异常 2025-06-10 21:22:48 +08:00
知一一 aca04c56a6 fix: 活动挑战不会打最后一关 2025-06-10 20:35:32 +08:00
知一一 4e73fe9920 fix: 模拟室进入异常 2025-06-10 20:05:54 +08:00
知一一 b282e19b4e style: 默认停顿时间固定 2025-06-10 19:57:41 +08:00
知一一 f2fe7d434a fix: 拦截战无法快速战斗 2025-06-10 19:54:23 +08:00
知一一 2000949c25 docs: 优化提示文本 2025-06-10 19:50:32 +08:00
知一一 671706ada0
fix: 某些情况下邮件领取异常 2025-06-10 19:24:44 +08:00
知一一 ded17da84e fix: 数据写入异常 2025-06-10 19:10:13 +08:00
知一一 67f4e60953 docs: 更新自述文件 2025-06-10 13:59:34 +08:00
MissingLilith ff5b950ea1 fix: 某些情况下邮件领取异常 2025-06-09 23:39:27 +08:00
知一一 3734a6c296 fix: 通行证领取异常 2025-06-09 22:18:33 +08:00
知一一 899a84a27b fix: 异常拦截返回异常 2025-06-09 17:45:50 +08:00
知一一 e04e0ccb9c chore: 优化工作流文本逻辑 2025-06-09 11:30:54 +08:00
知一一 7f40cd7c1b feat: 接入Mirror酱 2025-06-08 23:58:36 +08:00
知一一 df43422613 docs: 文本修改 2025-06-08 23:58:36 +08:00
知一一 eb7ff3c373 fix: 咨询和拦截进入异常 2025-06-08 23:58:36 +08:00
知一一 8f12dc30cf perf: 修改了存储类型 2025-06-08 15:06:32 +08:00
知一一 4f67007869 feat: 添加预发布更新通道 2025-06-08 14:13:15 +08:00
知一一 e4a4a3bbb8 perf: 优化了运行逻辑 2025-06-08 14:13:15 +08:00
知一一 cf6108fc59
Merge pull request #47 from MirrorChyan/main
ci: add mirrorchyan uploading
2025-06-07 22:48:21 +08:00
MistEO 0e49d916ca
fix: ci typo 2025-06-07 22:38:06 +08:00
MistEO 1bf6ee956f
ci: auto trigger mirrorchyan 2025-06-07 22:35:15 +08:00
MistEO 4b31cce73c
ci: Create mirrorchyan_release_note.yml 2025-06-07 22:34:21 +08:00
MistEO 1642a452d0
ci: Create mirrorchyan_uploading.yml 2025-06-07 22:33:03 +08:00
知一一 34de0d90cf fix: 咨询结束异常 2025-06-06 22:17:14 +08:00
知一一 f9c272f3c5 fix: 模拟室返回异常 2025-06-06 22:16:49 +08:00
知一一 ce3c023f72 perf: 修改了默认设置 2025-06-06 22:15:54 +08:00
知一一 302a66cc71 docs: 调整提示文本 2025-06-06 09:37:51 +08:00
知一一 a9c901069e perf: 优化剧情模式流程 2025-06-06 00:32:43 +08:00
知一一 103d0c1be3 perf: 添加识图素材库 2025-06-05 22:25:37 +08:00
知一一 1fc853e2e0 perf: 活动关支持困难 2025-06-05 22:25:37 +08:00
知一一 7caa23f0fe fix: 商店锚定异常 2025-06-05 22:25:37 +08:00
知一一 b256e7f50c style: 调整函数顺序 2025-06-05 22:25:37 +08:00
知一一 4d49c71b93 docs: 提示文本优化 2025-06-05 22:25:37 +08:00
知一一 476e564b08 perf: 优化更新文本的显示方式 2025-06-05 13:53:46 +08:00
知一一 a7edcc6956 chore: 优化工作流 2025-06-05 13:53:41 +08:00
知一一 07ded160df fix: 异常拦截进入异常 2025-06-05 13:30:44 +08:00
知一一 65d7e66387 fix: 模拟室增益获取异常 2025-06-05 13:30:44 +08:00
知一一 bbb5ed2221 fix: 尝试修复登录奖励无法领取的问题 2025-06-05 13:30:44 +08:00
知一一 841e746f0c docs: 更新自述文件 2025-06-04 23:04:04 +08:00
知一一 22a93030f8 fix: 尝试修复模拟室进入异常的问题 2025-06-04 23:04:04 +08:00
知一一 eff6dc4c9d feat: 添加画面自动缩放功能 2025-06-04 23:04:04 +08:00
知一一 44773f15c4 fix: 商店购买异常 2025-06-04 23:04:03 +08:00
知一一 41d047355c fix: 尝试修复协同作战进入异常的问题 2025-06-04 22:46:15 +08:00
知一一 4a60ab5cf1 build: 调整依赖函数 2025-06-04 22:46:15 +08:00
知一一 2e82df32e5 docs: 调整启动时的提示文本 2025-06-04 22:46:15 +08:00
知一一 adbed956e8 fix: 战斗结算异常 2025-06-04 22:46:14 +08:00
知一一 4b603fdcac perf: 优化协同作战流程 2025-06-04 10:35:20 +08:00
知一一 54ccc46303 fix: 修复拦截战进入异常的问题 2025-06-04 10:35:20 +08:00
知一一 83823f9f82 perf: 优化模拟室流程 2025-06-04 10:26:13 +08:00
知一一 ae37accf5a perf: 调整战斗结算的流程
检测红圈的频率加快,检测战斗结束的频率降低
2025-06-04 10:25:30 +08:00
知一一 e8724302fe revert: 尝试修复返回失败的问题 2025-06-04 09:16:56 +08:00
知一一 accfb0defc fix: 修复通行证领取异常的问题 2025-06-04 00:15:52 +08:00
知一一 4de70c5f46 fix: 修复咨询意外退出的问题 2025-06-04 00:14:59 +08:00
知一一 8ac5def42a docs: 优化模拟室超频的提示文本 2025-06-04 00:14:59 +08:00
知一一 7d77d287f9 fix: 尝试点击每月的模拟室重置提示 2025-06-04 00:14:59 +08:00
知一一 71a296282e fix: 修复商店购买异常的问题 2025-06-04 00:14:59 +08:00
知一一 e89c20608b fix: 尝试点击日服付费商店的提示 2025-06-04 00:14:59 +08:00
知一一 7dfabb82a9 perf: 优化登录流程 2025-06-04 00:14:59 +08:00
知一一 1dabb3672f fix: 尝试修复返回失败的问题 2025-06-04 00:07:15 +08:00
知一一 eba09c729e fix: 修复了运行时无法保存的问题 2025-06-04 00:06:57 +08:00
知一一 75f78a2dec docs: 调整了部分提示 2025-06-03 14:55:51 +08:00
知一一 64b677868b docs: 移除了部分提示 2025-06-03 13:31:19 +08:00
8 changed files with 1862 additions and 1511 deletions

81
.github/cliff.toml vendored Normal file
View File

@ -0,0 +1,81 @@
[remote.github]
owner = "1204244136" # 替换为你的GitHub用户名
repo = "DoroHelper" # 替换为你的仓库名
[changelog]
header = """
# 更新日志
"""
body = """
{%- macro remote_url() -%}
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
{%- endmacro -%}
{% macro print_commit(commit) -%}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**breaking**] {% endif %}\
{{ commit.message | upper_first }} \
({{ commit.id }}) \
@{{ author.login | default(value=commit.author.name) }}
{% endmacro -%}
{% if version %}\
## {{ version | trim_start_matches(pat="v") }} ({{ timestamp | date(format="%Y-%m-%d") }})
{% else %}\
## 未发布
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits
| filter(attribute="scope")
| sort(attribute="scope") %}
{{ self::print_commit(commit=commit) }}
{%- endfor %}
{% for commit in commits %}
{%- if not commit.scope -%}
{{ self::print_commit(commit=commit) }}
{% endif -%}
{% endfor -%}
{% endfor -%}
{%- if github -%}
{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
## 新贡献者 ❤️
{% endif %}\
{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
* @{{ contributor.username }} made their first contribution
{%- if contributor.pr_number %} in \
[#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
{%- endif %}
{%- endfor -%}
{%- endif %}
"""
footer = """
[ Mirror CDK](https://mirrorchyan.com/zh/projects?rid=DoroHelper&source=doro-gh-release)
"""
[git]
conventional_commits = true
filter_unconventional = false
commit_parsers = [
{ message = "^feat", group = "新增 | New" },
{ message = "^fix", group = "修复 | Fix" },
{ message = "^perf", group = "改进 | Improved" },
{ message = "^docs", group = "文档 | Docs" },
{ message = "^refactor", group = "重构 | Refactor" },
{ message = "^style", group = "样式 | Style" },
{ message = "^test", group = "测试 | Test" },
{ message = "^build", group = "依赖 | Build" },
{ message = "^chore", group = "维护 | Chore" },
{ message = "^ci", group = "集成 | Ci" },
{ message = "^revert", group = "撤销 | Revert" },
]
ignore_tags = "rc"
sort_commits = "oldest"
[git.github]
commits = true

View File

@ -35,7 +35,7 @@ jobs:
$version = $match.Matches[0].Groups[1].Value $version = $match.Matches[0].Groups[1].Value
Write-Host "Version found in AHK script: ${version}" Write-Host "Version found in AHK script: ${version}"
} else { } else {
Write-Warning "Version pattern (currentVersion := \"...\") not found in ${scriptPath}. Using default '0.0.0'." Write-Warning "Version pattern (currentVersion := \"...\") not found in ${scriptPath}.Using default '0.0.0'."
$version = "0.0.0" $version = "0.0.0"
} }
} }
@ -94,7 +94,6 @@ jobs:
const owner = context.repo.owner; const owner = context.repo.owner;
const repo = context.repo.repo; const repo = context.repo.repo;
const sha = context.sha; const sha = context.sha;
console.log(`Attempting to create tag ${tag} at commit ${sha}`); console.log(`Attempting to create tag ${tag} at commit ${sha}`);
try { try {
await github.rest.git.createRef({ await github.rest.git.createRef({
@ -119,69 +118,45 @@ jobs:
- name: Determine if Pre-release - name: Determine if Pre-release
id: prerelease_check id: prerelease_check
shell: bash shell: pwsh
run: | run: |
VERSION_TAG="${{ steps.get_version.outputs.VERSION_TAG }}" $VERSION_TAG = "${{ steps.get_version.outputs.VERSION_TAG }}"
IS_PRERELEASE="false" $IS_PRERELEASE = "false"
if [[ "$VERSION_TAG" == *beta* || "$VERSION_TAG" == *alpha* || "$VERSION_TAG" == *rc* ]]; then # PowerShell 中的字符串匹配操作
IS_PRERELEASE="true" if ($VERSION_TAG -like "*beta*" -or $VERSION_TAG -like "*alpha*" -or $VERSION_TAG -like "*rc*") {
fi $IS_PRERELEASE = "true"
echo "IS_PRERELEASE=$IS_PRERELEASE" >> $GITHUB_OUTPUT }
echo "Release version: ${VERSION_TAG}, Is Prerelease: ${IS_PRERELEASE}" echo "IS_PRERELEASE=$IS_PRERELEASE" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
Write-Host "Release version: ${VERSION_TAG}, Is Prerelease: ${IS_PRERELEASE}"
- name: Generate Changelog - name: Generate Changelog # 更改此步骤
id: changelog id: changelog
shell: bash uses: orhun/git-cliff-action@v4
with:
config: .github/cliff.toml # 假设你的 cliff.toml 文件在此路径
args: --latest --strip header # 生成最新版本的更新日志,并去除头部的标题
env:
OUTPUT: CHANGES.md # Git-cliff 将输出到此文件,但我们通过输出获取内容
GITHUB_REPO: ${{ github.repository }} # 提供仓库信息给 git-cliff
- name: Read Changelog Content # 读取 git-cliff 生成的内容
id: read_changelog_content
shell: pwsh # 确保使用 PowerShell
run: | run: |
CURRENT_TAG="${{ steps.get_version.outputs.VERSION_TAG }}" # 在 PowerShell 中读取文件内容并赋值给变量
echo "Current Tag for Changelog: ${CURRENT_TAG}" $CHANGELOG_BODY = Get-Content -Path CHANGES.md -Raw
# Ensure local git knows about all tags, especially the one just created # 定义一个多行分隔符,确保它在 $CHANGELOG_BODY 内容中不出现
# git fetch --tags # Already done in previous step, but good to be aware $DELIMITER = "EOF_CHANGELOG_BODY"
ALL_SORTED_TAGS=$(git tag --sort=-v:refname) # 将输出写入 GitHub Output 文件,使用多行分隔符
echo "All sorted tags:" "CHANGELOG_BODY<<$DELIMITER" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
echo "${ALL_SORTED_TAGS}" $CHANGELOG_BODY | Out-File -FilePath $env:GITHUB_OUTPUT -Append
"$DELIMITER" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
LAST_TAG="" Write-Host "--- Generated Changelog ---"
FOUND_CURRENT_TAG=false Write-Host "$CHANGELOG_BODY"
Write-Host "-------------------------"
# Loop to find the tag immediately preceding CURRENT_TAG in the sorted list
while IFS= read -r tag_item; do
if [ "$FOUND_CURRENT_TAG" = true ]; then
# The first tag encountered after CURRENT_TAG is the previous one in semantic versioning
LAST_TAG="$tag_item"
break
fi
if [ "$tag_item" = "$CURRENT_TAG" ]; then
FOUND_CURRENT_TAG=true
fi
done <<< "$ALL_SORTED_TAGS"
echo "Previous Tag for Changelog: ${LAST_TAG}"
CHANGELOG_BODY=""
if [ -z "${LAST_TAG}" ]; then
echo "No previous tag found. Generating changelog from the beginning up to ${CURRENT_TAG}."
# This will list all commits leading to the CURRENT_TAG if it's the first tag
CHANGELOG_BODY=$(git log --pretty=format:"* %s (%h)" "${CURRENT_TAG}")
if [ -z "$CHANGELOG_BODY" ]; then
CHANGELOG_BODY="* Initial release or no new commits to list for ${CURRENT_TAG}."
fi
else
echo "Generating changelog from ${LAST_TAG}..${CURRENT_TAG}"
CHANGELOG_BODY=$(git log --pretty=format:"* %s (%h)" "${LAST_TAG}..${CURRENT_TAG}")
if [ -z "$CHANGELOG_BODY" ]; then
CHANGELOG_BODY="* No changes detected between ${LAST_TAG} and ${CURRENT_TAG}."
fi
fi
echo "CHANGELOG_BODY<<EOF" >> "$GITHUB_OUTPUT"
echo "$CHANGELOG_BODY" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
echo "--- Generated Changelog ---"
echo "$CHANGELOG_BODY"
echo "-------------------------"
- name: Compile AutoHotkey Script with Action - name: Compile AutoHotkey Script with Action
id: compile_script id: compile_script
@ -195,18 +170,22 @@ jobs:
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub Release - name: Create GitHub Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2.2.2
with: with:
tag_name: ${{ steps.get_version.outputs.VERSION_TAG }} tag_name: ${{ steps.get_version.outputs.VERSION_TAG }}
name: ${{ steps.get_version.outputs.VERSION_TAG }} name: ${{ steps.get_version.outputs.VERSION_TAG }}
body: | body: |
${{ steps.changelog.outputs.CHANGELOG_BODY }} ${{ steps.read_changelog_content.outputs.CHANGELOG_BODY }}
---
测试版兼容性较差,请谨慎下载
draft: false draft: false
prerelease: ${{ steps.prerelease_check.outputs.IS_PRERELEASE }} prerelease: ${{ steps.prerelease_check.outputs.IS_PRERELEASE }}
files: DoroHelper.exe files: DoroHelper.exe
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Trigger MirrorChyanUploading
shell: bash
run: |
gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_uploading
gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_release_note
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -0,0 +1,21 @@
name: mirrorchyan_release_note
on:
workflow_dispatch:
release:
types: [edited]
jobs:
mirrorchyan:
runs-on: macos-latest
steps:
- id: uploading
uses: MirrorChyan/release-note-action@v1
with:
mirrorchyan_rid: DoroHelper
upload_token: ${{ secrets.MirrorChyanUploadToken }}
owner: 1204244136
repo: DoroHelper
github_token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -0,0 +1,20 @@
name: mirrorchyan_uploading
on:
workflow_dispatch:
jobs:
mirrorchyan:
runs-on: macos-latest
steps:
- uses: MirrorChyan/uploading-action@v1
with:
filetype: latest-release
filename: "DoroHelper.exe"
mirrorchyan_rid: DoroHelper
github_token: ${{ secrets.GITHUB_TOKEN }}
owner: 1204244136
repo: DoroHelper
upload_token: ${{ secrets.MirrorChyanUploadToken }}

File diff suppressed because it is too large Load Diff

View File

@ -4,9 +4,17 @@
# DoroHelper # DoroHelper
PC 端日常任务清理助手。一键清理多项日常事务。支持除国服外的所有客户端。 PC 端日常任务清理助手。一键清理多项日常事务。支持除**国服**外的所有客户端。
**作者也不玩国服,本脚本以后和将来也不会支持国服**。 <p align="center">
<img alt="AutoHotkeyV2" src="https://img.shields.io/badge/AutoHotkeyV2-white?logo=AutoHotkey&logoColor=black">
<img alt="platform" src="https://img.shields.io/badge/platform-Windows-blueviolet">
<img alt="license" src="https://img.shields.io/github/license/1204244136/DoroHelper">
<br/>
<img alt="commit" src="https://img.shields.io/github/commit-activity/m/1204244136/DoroHelper">
<img alt="stars" src="https://img.shields.io/github/stars/1204244136/DoroHelper?style=social">
<a href="https://mirrorchyan.com/?source=doro-github-release" target="_blank"><img alt="mirrorc" src="https://img.shields.io/badge/Mirror%E9%85%B1-%239af3f6?logo=countingworkspro&logoColor=4f46e5"></a>
</p>
</div> </div>
@ -16,6 +24,8 @@ PC 端日常任务清理助手。一键清理多项日常事务。支持除国
- 牢 D 功能类似的[模拟器脚本](https://github.com/takagisanmie/NIKKEAutoScript) - 牢 D 功能类似的[模拟器脚本](https://github.com/takagisanmie/NIKKEAutoScript)
- 群友的[CDK 兑换网站](http://nikke.hayasa.link/)
## 新版本注意 ## 新版本注意
下方的功能介绍均针对最新版本,老版本的对应功能请查看[legacy-v0.1.22](https://github.com/1204244136/DoroHelper/tree/legacy-v0.1.22)分支处的自述文件。 下方的功能介绍均针对最新版本,老版本的对应功能请查看[legacy-v0.1.22](https://github.com/1204244136/DoroHelper/tree/legacy-v0.1.22)分支处的自述文件。
@ -111,15 +121,20 @@ Doro 只是想让你少被该死的读条、闪光弹和重复劳动折磨。一
## 要求 ## 要求
- 16:9 全屏或窗口模式 1. 游戏分辨率需要设置成 **16:9** 的分辨率,小于**等于** 1080p 可能有问题,暂不打算特殊支持
- 2k 和 4k包括异形屏用户请按 ctrl+3 按到画面不动为止,不要开启全屏,此时 nikke 应该是居中的,图片缩放应该是 1
- 设定-画质-开启光晕效果 <!-- 2. ~~如果游戏使用**全屏模式**,则需要 显示器屏幕的分辨率也是**16:9**,否则只能使用窗口模式~~
- 异形屏或部分笔记本电脑用户需要特别注意这点 -->
- 设定-画质-开启颜色分级 2. 由于使用的是图像识别,请确保游戏画面完整在屏幕内,且**游戏画面没有任何遮挡**
- 游戏语言设置为简体中文 - 多显示器请支持的显示器作为主显示器,将游戏放在主显示器内
- 以**管理员身份**运行 DoroHelper - 不要使用微星小飞机、游戏加加等悬浮显示数据的软件
- 游戏画质越高,脚本出错的几率越低。
- 不要开启 windows HDR 显示 - 游戏帧数建议保持 60帧数过低时部分场景的行动可能会被吞导致问题
3. 请不要开启会改变画面颜色相关的功能或设置,例如
- 软件层面:各种驱动的色彩滤镜,部分笔记本的真彩模式
- 设备层面显示器的护眼模式、色彩模式、色温调节、HDR 等。
4. 游戏语言设置为**简体中文**,设定-画质-开启光晕效果,设定-画质-开启颜色分级
5. 以**管理员身份**运行 DoroHelper
## 步骤 ## 步骤
@ -142,8 +157,18 @@ Doro 只是想让你少被该死的读条、闪光弹和重复劳动折磨。一
</tr> </tr>
</table> </table>
## 星标历程
[![Star History Chart](https://api.star-history.com/svg?repos=1204244136/DoroHelper&type=Timeline)](https://www.star-history.com/#1204244136/DoroHelper&Timeline)
## 借物表 ## 借物表
[Github.ahk-API-for-AHKv2](https://github.com/samfisherirl/Github.ahk-API-for-AHKv2) [Github.ahk-API-for-AHKv2](https://github.com/samfisherirl/Github.ahk-API-for-AHKv2)
[FindText-for-AHKv2](https://www.autohotkey.com/boards/viewtopic.php?f=83&t=116471) [FindText-for-AHKv2](https://www.autohotkey.com/boards/viewtopic.php?f=83&t=116471)
## 鸣谢
代码参考
[M9A](https://github.com/MAA1999/M9A)

View File

@ -1,325 +0,0 @@
#Requires AutoHotkey v2.0
#SingleInstance Force
; --- 全局变量定义 ---
Global MyGui := "" ; GUI 对象
Global gFocusedProgramEdit := "" ; 聚焦窗口编辑框
Global gCalculatedCoordsEdit := "" ; 换算坐标编辑框 (可编辑)
Global gStatusText := "" ; 状态信息文本
Global gMouseCoordsEdit := "" ; 鼠标屏幕坐标显示框
Global gRelativeMouseCoordsEdit := "" ; 鼠标窗口相对坐标显示框
Global gClientAreaEdit := "" ; 客户区矩形显示框
Global gPixelColorEdit := "" ; 位置颜色显示框 (十六进制)
Global gPixelCharacterBlock := "" ; 显示颜色字符的 Text 控件
Global gSelectedRefWidth := 3840 ; 默认目标宽度 (4K)
Global gSelectedRefHeight := 2160 ; 默认目标高度 (4K)
Global gTargethWnd := "" ; 存储上次记录的目标窗口句柄
; --- 目标分辨率映射表 ---
resolutions := Map(
"4K", [3840, 2160],
"2K", [2560, 1440],
"1080p", [1920, 1080]
)
defaultRefKey := "4K"
; --- 获取当前屏幕分辨率 ---
currentW := A_ScreenWidth
currentH := A_ScreenHeight
currentResText := "当前屏幕分辨率: " . currentW . "x" . currentH
; --- 创建图形用户界面 (GUI) ---
MyGui := Gui("+AlwaysOnTop")
MyGui.Title := "DDB v1.0"
; 提示信息
MyGui.Add("Text", "xm y+10", "注意:标题栏和边框均不属于客户区")
; --- 行 1: 当前分辨率 ---
MyGui.Add("Text", "xm y+10", currentResText)
; --- 行 2: 目标分辨率 ---
MyGui.Add("Text", "xm y+15", "目标分辨率:")
radio4k := MyGui.Add("Radio", "x+m yp vSelectedResName Checked Group", "4K")
radio2k := MyGui.Add("Radio", "x+m yp", "2K")
radio1080p := MyGui.Add("Radio", "x+m yp", "1080p")
; --- 行 3: 聚焦窗口 ---
MyGui.Add("Text", "xm y+15", "聚焦窗口:")
gFocusedProgramEdit := MyGui.Add("Edit", "x+m yp w150 ReadOnly Left")
; --- 行 4: 屏幕位置 ---
MyGui.Add("Text", "xm y+10", "屏幕位置:")
gMouseCoordsEdit := MyGui.Add("Edit", "x+m yp w150 ReadOnly Left")
; --- 行 5: 窗口位置 ---
MyGui.Add("Text", "xm y+10", "窗口位置:")
gRelativeMouseCoordsEdit := MyGui.Add("Edit", "x+m yp w150 ReadOnly Left")
; --- 行 6: 客户区矩形 ---
MyGui.Add("Text", "xm y+10", "客户区: ") ; 注意标签后的空格是用户特意加的
gClientAreaEdit := MyGui.Add("Edit", "x+m yp w150 ReadOnly Left")
; --- 行 7: 位置颜色 & 复制按钮 & 颜色字符 ---
MyGui.Add("Text", "xm y+10", "位置颜色:") ; 标签
gPixelColorEdit := MyGui.Add("Edit", "x+m yp w100 ReadOnly Left") ; 显示框
copyColorButton := MyGui.Add("Button", "x+m yp", "复制") ; 复制按钮
copyColorButton.OnEvent("Click", CopyPixelColor)
; 使用带颜色的文本字符 '■' 显示颜色,初始为灰色
myGui.SetFont("s12")
gPixelCharacterBlock := MyGui.Add("Text", "x+m yp c808080", "")
myGui.SetFont("")
; --- 行 8: 换算坐标 & 复制按钮 & 跳转按钮 ---
MyGui.Add("Text", "xm y+10", "换算坐标:")
gCalculatedCoordsEdit := MyGui.Add("Edit", "x+m yp w100 Left", "") ; 允许输入
copyCoordsButton := MyGui.Add("Button", "x+m yp", "复制")
copyCoordsButton.OnEvent("Click", CopyCalculatedCoords)
jumpButton := MyGui.Add("Button", "y+10", "跳转") ; 跳转按钮另起一行
jumpButton.OnEvent("Click", JumpToCoords)
; --- 行 9: 状态信息 ---
gStatusText := MyGui.Add("Text", "xm y+10 w300 vStatusMessage", "按 Ctrl+Alt+Q 获取鼠标信息") ; 初始提示
; --- 绑定其他 GUI 事件 ---
radio4k.OnEvent("Click", ResolutionChange)
radio2k.OnEvent("Click", ResolutionChange)
radio1080p.OnEvent("Click", ResolutionChange)
MyGui.OnEvent("Close", GuiClose)
; --- 显示 GUI ---
MyGui.Show()
; ==============================================================================
; --- 函数定义 ---
; ==============================================================================
; --- GUI 事件处理: 分辨率选择变化 ---
ResolutionChange(GuiCtrlObj, Info) {
global gSelectedRefWidth, gSelectedRefHeight, gStatusText, resolutions
selectedName := MyGui["SelectedResName"].Value
logMsg := ""
if RegExMatch(selectedName, "^\w+", &match) {
selectedKey := match[0]
if resolutions.Has(selectedKey) {
gSelectedRefWidth := resolutions[selectedKey][1]
gSelectedRefHeight := resolutions[selectedKey][2]
logMsg := "目标分辨率已更改为 " . selectedKey . " (" . gSelectedRefWidth . "x" . gSelectedRefHeight . ")"
gStatusText.Value := logMsg
}
}
}
; --- 热键定义: Ctrl+Alt+Q ---
; --- 热键定义: Ctrl+Alt+Q ---
^!Q:: {
; 引用全局变量
global MyGui, gFocusedProgramEdit, gCalculatedCoordsEdit, gStatusText, gSelectedRefWidth, gSelectedRefHeight, gMouseCoordsEdit, gRelativeMouseCoordsEdit, gClientAreaEdit, gTargethWnd, gPixelColorEdit, gPixelCharacterBlock
; 定义局部变量
local hWnd, progName, winTitle, displayProgInfo, mX, mY, winX, winY, winW, relX, relY, propX, propY, finalX, finalY, isInside := False
local pixelColorRGB, strColor, sixDigitColor
; 检查 gPixelCharacterBlock 是否有效 (保留)
if !IsObject(gPixelCharacterBlock) {
MsgBox("脚本错误: 颜色字符控件 'gPixelCharacterBlock' 未初始化。" . "请检查 GUI 创建部分代码是否正确执行。", "初始化错误", "IconError")
Return
}
; 强制坐标模式
CoordMode "Mouse", "Screen"
CoordMode "Pixel", "Screen"
; 清空或重置显示字段
gCalculatedCoordsEdit.Value := ""
gRelativeMouseCoordsEdit.Value := ""
gStatusText.Value := "正在处理..."
gMouseCoordsEdit.Value := ""
gClientAreaEdit.Value := ""
gPixelColorEdit.Value := ""
; --- ↓↓↓ 直接重置颜色,不再使用 try-catch ↓↓↓ ---
gPixelCharacterBlock.Opt("c808080") ; 重置字符颜色为灰色 (依赖上面的 IsObject 检查)
; 获取当前活动窗口
hWnd := WinActive("A")
if (!hWnd) {
gStatusText.Value := "错误: 未找到活动窗口。"
gFocusedProgramEdit.Value := "N/A"
gTargethWnd := ""
gPixelCharacterBlock.Opt("c808080") ; ★★★ 直接重置 ★★★
Return
}
gTargethWnd := hWnd
; 获取并显示窗口信息
progName := WinGetProcessName("A")
winTitle := WinGetTitle("A")
displayProgInfo := progName ? progName : (winTitle ? winTitle : "N/A")
gFocusedProgramEdit.Value := displayProgInfo
; 获取并显示鼠标屏幕坐标
MouseGetPos(&mX, &mY)
gMouseCoordsEdit.Value := mX . ", " . mY
; 获取并显示像素颜色 及 更新颜色字符 (保留此处的 try-catch)
try {
pixelColorRGB := PixelGetColor(mX, mY, "RGB")
sixDigitColor := Format("{:06X}", pixelColorRGB)
strColor := "0x" . sixDigitColor
gPixelCharacterBlock.Opt("c" . sixDigitColor) ; 设置字符颜色
gPixelColorEdit.Value := strColor
} catch Error as e {
gPixelColorEdit.Value := "获取失败: " e.Message
gPixelCharacterBlock.Opt("c808080") ; ★★★ 直接重置 ★★★
}
; 获取并显示窗口客户区信息 (保留此处的 try-catch)
try {
WinGetClientPos(&winX, &winY, &winW, &winH, hWnd)
gClientAreaEdit.Value := Format("{},{} {}x{}", winX, winY, winW, winH)
} catch Error as e {
gStatusText.Value := "错误: 获取客户区失败 - " . e.Message
gClientAreaEdit.Value := "Error"
gPixelCharacterBlock.Opt("c808080") ; ★★★ 直接重置 ★★★
Return
}
; 检查窗口尺寸是否有效
if (winW <= 0 or winH <= 0) {
gStatusText.Value := "错误: 无效窗口尺寸 W:" . winW . ", H:" . winH
gClientAreaEdit.Value := Format("{},{} {}x{}", winX, winY, winW, winH)
gPixelCharacterBlock.Opt("c808080") ; ★★★ 直接重置 ★★★
Return
}
; 进行边界检查
isInside := (mX >= winX and mX < (winX + winW) and mY >= winY and mY < (winY + winH))
; 根据边界检查结果进行计算和显示
if (isInside) {
relX := mX - winX
relY := mY - winY
gRelativeMouseCoordsEdit.Value := relX . ", " . relY
propX := relX / winW
propY := relY / winH
finalX := Round(propX * gSelectedRefWidth)
finalY := Round(propY * gSelectedRefHeight)
gCalculatedCoordsEdit.Value := finalX . ", " . finalY
gStatusText.Value := "边界检查: 内部"
} else {
gRelativeMouseCoordsEdit.Value := "N/A"
gCalculatedCoordsEdit.Value := ""
gStatusText.Value := "边界检查: 外部(请重新聚焦鼠标)"
}
} ; 热键函数结束 ; 热键函数结束
; --- 跳转按钮点击处理函数 ---
JumpToCoords(GuiCtrlObj, Info) {
; 引用全局变量
global MyGui, gCalculatedCoordsEdit, gStatusText, gSelectedRefWidth, gSelectedRefHeight, gTargethWnd
; 定义局部变量
local targetX, targetY, propX, propY, desiredRelX, desiredRelY, finalScreenX, finalScreenY
local hWnd, winX, winY, winW, winH
local inputText, match
gStatusText.Value := "正在处理跳转..."
; 检查并使用存储的目标窗口句柄
if (!gTargethWnd or !WinExist("ahk_id " . gTargethWnd)) {
gStatusText.Value := "错误: 请先用 Ctrl+Alt+Q 记录一个有效的目标窗口。"
gTargethWnd := ""
Return
}
hWnd := gTargethWnd
; 获取并验证用户输入的坐标
inputText := gCalculatedCoordsEdit.Value
if (!RegExMatch(inputText, "^\s*(-?\d+)\s*[,; ]\s*(-?\d+)\s*$", &match)) {
gStatusText.Value := "错误: 无效坐标格式 (请输入 X, Y)"
Return
}
targetX := Integer(match[1])
targetY := Integer(match[2])
; 可选: 检查输入坐标范围
if (targetX < 0 or targetX >= gSelectedRefWidth or targetY < 0 or targetY >= gSelectedRefHeight) {
gStatusText.Value := "提示: 输入坐标可能超出目标分辨率范围。"
}
; 获取目标窗口的客户区信息
try {
WinGetClientPos(&winX, &winY, &winW, &winH, hWnd)
if (winW <= 0 or winH <= 0) {
throw Error("无效窗口尺寸 W:" . winW . ", H:" . winH)
}
} catch Error as e {
gStatusText.Value := "错误: 获取目标窗口客户区失败 - " . e.Message
Return
}
; 执行反向换算
if (gSelectedRefWidth <= 0 or gSelectedRefHeight <= 0) {
gStatusText.Value := "错误: 无效的目标分辨率尺寸用于计算。"
Return
}
propX := targetX / gSelectedRefWidth
propY := targetY / gSelectedRefHeight
desiredRelX := propX * winW
desiredRelY := propY * winH
finalScreenX := Round(winX + desiredRelX)
finalScreenY := Round(winY + desiredRelY)
; 尝试重新激活目标窗口
try {
WinActivate("ahk_id " . hWnd)
Sleep 100
} catch Error as e {
gStatusText.Value := "警告: 激活目标窗口失败 - " e.Message ",仍尝试跳转。"
}
; 移动鼠标
CoordMode "Mouse", "Screen"
MouseMove finalScreenX, finalScreenY, 0
; 更新状态
gStatusText.Value := "鼠标已跳转至目标窗口对应坐标: " . finalScreenX . ", " . finalScreenY
}
; --- GUI 关闭处理函数 ---
GuiClose(GuiObj) {
ExitApp()
}
; --- 复制按钮事件处理函数 ---
CopyPixelColor(GuiCtrlObj, Info) {
global gPixelColorEdit, gStatusText
local colorValue
colorValue := gPixelColorEdit.Value
if (colorValue != "" && colorValue != "获取失败") { ; 检查是否有有效内容
A_Clipboard := colorValue
gStatusText.Value := "颜色值 '" colorValue "' 已复制!"
SetTimer(() => (gStatusText.Value == "颜色值 '" colorValue "' 已复制!" ? gStatusText.Value := "" : ""), -2000)
} else {
gStatusText.Value := "没有有效颜色值可复制。"
SetTimer(() => (gStatusText.Value == "没有有效颜色值可复制。" ? gStatusText.Value := "" : ""), -2000)
}
}
CopyCalculatedCoords(GuiCtrlObj, Info) {
global gCalculatedCoordsEdit, gStatusText
local coordsValue
coordsValue := gCalculatedCoordsEdit.Value
if (coordsValue != "") {
A_Clipboard := coordsValue
gStatusText.Value := "换算坐标 '" coordsValue "' 已复制!"
SetTimer(() => (gStatusText.Value == "换算坐标 '" coordsValue "' 已复制!" ? (gStatusText.Value := "") : ""), -2000)
} else {
gStatusText.Value := "没有换算坐标可复制。"
SetTimer(() => (gStatusText.Value == "没有换算坐标可复制。" ? (gStatusText.Value := "") : ""), -2000)
}
}

View File

@ -3031,9 +3031,10 @@ int __attribute__((__stdcall__)) PicFind(
. "`nnikkeID := WinGetIDLast(title)" . "`nnikkeID := WinGetIDLast(title)"
. "`nWinGetClientPos &NikkeX, &NikkeY, &NikkeW, &NikkeH, nikkeID" . "`nWinGetClientPos &NikkeX, &NikkeY, &NikkeW, &NikkeH, nikkeID"
. "`nPicTolerance := 1" . "`nPicTolerance := 1"
. "`nTrueRatio := A_ScreenDPI / 96 * NikkeW / 2347" . "`nTrueRatio := NikkeW / 2331"
. "`nt1:=A_TickCount, Text:=X:=Y:=`"`"" s . "`nFindText().PicLib(`"|<" Comment ">" color "$" txt "`", 1)`n"
. "`nif (ok:=FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.1*PicTolerance, 0.1*PicTolerance, Text,,,,,,, TrueRatio, TrueRatio)){" . "`nt1:=A_TickCount, Text:=X:=Y:=`"`""
. "`nif (ok:=FindText(&X, &Y, NikkeX, NikkeY, NikkeX + NikkeW, NikkeY + NikkeH, 0.2*PicTolerance, 0.2*PicTolerance, FindText().PicLib(`"" Comment "`"),,,,,,, TrueRatio, TrueRatio)){"
. "`n `; FindText()." . "Click(" . "X, Y, `"L`")" . "`n `; FindText()." . "Click(" . "X, Y, `"L`")"
. "`n}`n" . "`n}`n"
. "`n`; ok:=FindText(&X:=`"wait`", &Y:=3, 0,0,0,0,0,0,Text) `; " r[7] . "`n`; ok:=FindText(&X:=`"wait`", &Y:=3, 0,0,0,0,0,0,Text) `; " r[7]