Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
c61ea1a
fix: 挑战关有时候报找不到队伍和支援按钮
JoshCai233 Sep 21, 2025
1b3a5be
feat: 差分宇宙: 调用 auto simulated universe 项目, 获取完成次数计入精英怪次数中;
JoshCai233 Sep 21, 2025
8d529a2
fix: 选择祝福时先点右下角再点中间, 防止点到查看已有方程
JoshCai233 Sep 22, 2025
5352865
fix: 差分宇宙退出确认框下沉
JoshCai233 Sep 22, 2025
b370f39
feat: 差分宇宙: 添加 auto simulated universe 配置入口, 以及每周打完14000就溜的选项
JoshCai233 Sep 24, 2025
cbff3f6
相关项目添加Auto_Simulated_Universe
JoshCai233 Sep 24, 2025
e146c9f
Merge branch 'github-main' into sim-uni-x
JoshCai233 Sep 25, 2025
ab3b8e9
差分宇宙-领周奖励
JoshCai233 Sep 30, 2025
40bd685
修改注释
JoshCai233 Sep 30, 2025
7dcfd2b
(趁着没合并) 修改每周积分奖励代码: period_reward -> points_reward
JoshCai233 Oct 5, 2025
acd1e43
规范一下返回值类型
JoshCai233 Oct 5, 2025
b0f3fb6
coderabbitai(bot)的相关建议
JoshCai233 Oct 12, 2025
6871056
Update src/sr_od/app/sim_uni/sim_uni_config.py
JoshCai233 Oct 12, 2025
e0719ad
Update src/sr_od/gui/interface/sim_uni/sim_uni_setting_interface.py
JoshCai233 Oct 12, 2025
b1b80a1
Update src/sr_od/app/sim_uni/sim_uni_config.py
JoshCai233 Oct 12, 2025
b164bb8
修复 get_bless_pos 返回类型不匹配 (如果没找到祝福选项, 直接找固定高度范围内的字, 找到就点)
JoshCai233 Oct 12, 2025
45512e2
fix:不识别14000积分了
JoshCai233 Oct 13, 2025
dd7a4b9
增加识别14000积分的等待时间
JoshCai233 Oct 13, 2025
66d085a
Merge branch 'github-main' into sim-uni-x
JoshCai233 Nov 10, 2025
6d424ae
新版普通副本选择框
JoshCai233 Nov 10, 2025
0968a6a
新版本的模拟宇宙tab图标
JoshCai233 Nov 10, 2025
101af45
新版本的模拟宇宙入口-部分入口
JoshCai233 Nov 10, 2025
af4d3cd
Merge branch 'new_sim_uni_entry' into sim-uni-x
JoshCai233 Nov 10, 2025
0f871b8
新版本的模拟宇宙入口-部分入口
JoshCai233 Nov 10, 2025
48ac03d
新版本的模拟宇宙入口配置的注释
JoshCai233 Nov 10, 2025
871d56b
Merge branch 'new_sim_uni_entry' into sim-uni-x
JoshCai233 Nov 10, 2025
7cfb2fd
代码可读性
JoshCai233 Nov 11, 2025
bb4f074
Merge branch 'github-main' into sim-uni-x
JoshCai233 Dec 7, 2025
63bab3b
合并
JoshCai233 Dec 7, 2025
ddac058
尝试删除一些冗余的 self.screenshot()
JoshCai233 Dec 7, 2025
c6796da
Merge branch 'less_screenshot' into sim-uni-x
JoshCai233 Dec 7, 2025
6074998
尝试再删除一些冗余的 self.screenshot()
JoshCai233 Dec 7, 2025
b299f33
Merge branch 'less_screenshot' into sim-uni-x
JoshCai233 Dec 7, 2025
bc8c3c4
在按下暂停键时停止 auto_simulated_universe 运行
JoshCai233 Dec 7, 2025
f7632ca
Update src/script_chainer/win_exe/script_runner.py
JoshCai233 Dec 7, 2025
4206250
恢复判断周期奖励的逻辑
JoshCai233 Dec 8, 2025
4108d4d
Merge branch 'sr-main' into sim-uni-x
JoshCai233 Dec 21, 2025
2268627
[FIX] 日志打印逻辑
JoshCai233 Dec 21, 2025
36a7501
[FIX] 依赖添加
JoshCai233 Dec 21, 2025
d07e0b0
移除 script_runner.py 中的打印着色器
JoshCai233 Dec 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ __崩坏:星穹铁道 - 一条龙__

- 若您遇到商家使用本软件进行代练并收费,产生的任何问题及后果与本软件无关。

## 相关项目

模拟宇宙自动化 [https://github.com/CHNZYX/Auto_Simulated_Universe](https://github.com/CHNZYX/Auto_Simulated_Universe)

## 贡献/参与者

感谢所有参与到开发的朋友们~
Expand Down
4 changes: 2 additions & 2 deletions assets/game_data/screen_info/challenge_mission.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ area_list:
id_mark: false
pc_rect:
- 1740
- 720
- 1830
- 700
- 1850
- 750
text: 支援
lcs_percent: 0.5
Expand Down
50 changes: 46 additions & 4 deletions assets/game_data/screen_info/sim_uni.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ area_list:
pc_rect:
- 360
- 950
- 410
- 420
- 1000
text: ''
lcs_percent: 0.5
Expand All @@ -30,6 +30,20 @@ area_list:
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 差分宇宙-积分奖励
id_mark: false
pc_rect:
- 130
- 970
- 400
- 1025
text: 14000/14000 (其实没用)
lcs_percent: 1.0
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 宇宙入口-进行中-1
id_mark: false
pc_rect:
Expand Down Expand Up @@ -100,6 +114,20 @@ area_list:
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 差分宇宙返回按钮
id_mark: false
pc_rect:
- 30
- 50
- 100
- 120
text: ''
lcs_percent: 0.5
template_sub_dir: normal_world
template_id: ui_icon_10
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 菜单-结束并结算
id_mark: false
pc_rect:
Expand Down Expand Up @@ -134,7 +162,7 @@ area_list:
- 1022
- 651
- 1324
- 697
- 1097
text: 确认
lcs_percent: 0.5
template_sub_dir: ''
Expand All @@ -147,7 +175,7 @@ area_list:
pc_rect:
- 50
- 0
- 270
- 420
- 60
text: ''
lcs_percent: 0.5
Expand Down Expand Up @@ -184,6 +212,20 @@ area_list:
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 差分宇宙返回主界面
id_mark: false
pc_rect:
- 900
- 950
- 1100
- 1000
text: 返回主界面
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 事件标题
id_mark: false
pc_rect:
Expand Down Expand Up @@ -271,7 +313,7 @@ area_list:
- area_name: 左上角标题
id_mark: false
pc_rect:
- 100
- 50
- 15
- 350
- 100
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ version = "3.4.0"
description = "星穹铁道 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄"
requires-python = ">=3.11.9,<=3.11.12"
dependencies = [
"psutil==6.1.1",
"pyside6==6.8.0.2",
"pyside6-fluent-widgets==1.7.0",
"pyyaml==6.0.1",
Expand Down
1 change: 1 addition & 0 deletions src/one_dragon/base/matcher/template_matcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def match_template(self, source: MatLike,
mask_usage = cv2.bitwise_or(mask_usage, template.mask) if mask_usage is not None else template.mask
if mask is not None:
mask_usage = cv2.bitwise_or(mask_usage, mask) if mask_usage is not None else mask
# cv2.imwrite('y:/template.png', template.get_image(template_type))
return cv2_utils.match_template(source, template.get_image(template_type), threshold, mask=mask_usage,
only_best=only_best, ignore_inf=ignore_inf)

Expand Down
13 changes: 13 additions & 0 deletions src/one_dragon/base/operation/operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,19 @@ def round_by_ocr(
else:
return self.round_retry(f'找不到 {target_cn}', wait=retry_wait, wait_round_time=retry_wait_round)

def ocr(self, screen: MatLike, screen_name: str, area_name: str) -> dict[str, MatchResultList]:
"""在区域内使用OCR。

Args:
screen: 截图图像。
screen_name: 屏幕名称。
area_name: 区域名称。

Returns:
OperationRoundResult: 匹配结果。
"""

return screen_utils.ocr(ctx=self.ctx, screen=screen, screen_name=screen_name, area_name=area_name)

def round_by_goto_screen(self, screen: Optional[np.ndarray] = None, screen_name: Optional[str] = None,
success_wait: Optional[float] = None, success_wait_round: Optional[float] = None,
Expand Down
81 changes: 60 additions & 21 deletions src/one_dragon/base/screen/screen_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from cv2.typing import MatLike

from one_dragon.base.geometry.point import Point
from one_dragon.base.matcher.match_result import MatchResultList
from one_dragon.base.screen.screen_area import ScreenArea
from one_dragon.base.screen.screen_info import ScreenInfo
from one_dragon.utils import cv2_utils, str_utils
Expand Down Expand Up @@ -58,26 +59,7 @@ def find_area_in_screen(ctx: OneDragonContext, screen: MatLike, area: ScreenArea

find: bool = False
if area.is_text_area:
if ctx.env_config.ocr_cache:
ocr_result_map = ctx.ocr_service.get_ocr_result_map(
image=screen,
color_range=area.color_range,
rect=area.rect
)
else:
rect = area.rect
part = cv2_utils.crop_image_only(screen, rect)

if area.color_range is None:
to_ocr = part
else:
mask = cv2.inRange(part,
np.array(area.color_range[0], dtype=np.uint8),
np.array(area.color_range[1], dtype=np.uint8))
mask = cv2_utils.dilate(mask, 2)
to_ocr = cv2.bitwise_and(part, part, mask=mask)

ocr_result_map = ctx.ocr.run_ocr(to_ocr)
ocr_result_map = ocr_in_screen(ctx, screen, area)

for ocr_result, mrl in ocr_result_map.items():
if str_utils.find_by_lcs(gt(area.text, 'game'), ocr_result, percent=area.lcs_percent):
Expand All @@ -86,6 +68,8 @@ def find_area_in_screen(ctx: OneDragonContext, screen: MatLike, area: ScreenArea
elif area.is_template_area:
rect = area.rect
part = cv2_utils.crop_image_only(screen, rect)
# cv2.imwrite('y:/screen.png', screen)
# cv2.imwrite('y:/part.png', part)

mrl = ctx.tm.match_template(part, area.template_sub_dir, area.template_id,
threshold=area.template_match_threshold)
Expand All @@ -94,6 +78,60 @@ def find_area_in_screen(ctx: OneDragonContext, screen: MatLike, area: ScreenArea
return FindAreaResultEnum.TRUE if find else FindAreaResultEnum.FALSE


def ocr(ctx: OneDragonContext, screen: MatLike, screen_name: str, area_name: str) -> dict[str, MatchResultList]:
"""
游戏截图中 在对应区域中进行OCR以供进一步业务判断
:param ctx: 上下文
:param screen: 游戏截图
:param screen_name: 画面名称
:param area_name: 区域名称
:return: 结果
"""
area: ScreenArea = ctx.screen_loader.get_area(screen_name, area_name)
return ocr_in_screen(ctx, screen, area)


def ocr_in_screen(ctx: OneDragonContext, screen: MatLike, area: ScreenArea) -> dict[str, MatchResultList]:
"""
游戏截图中 在对应区域中进行OCR以供进一步业务判断
:param ctx: 上下文
:param screen: 游戏截图
:param area: 区域
:return: 结果
"""
if (area is None) or (not area.is_text_area):
return {}

if ctx.env_config.ocr_cache:
ocr_result_map = ctx.ocr_service.get_ocr_result_map(
image=screen,
color_range=area.color_range,
rect=area.rect
)
else:
rect = area.rect
part = cv2_utils.crop_image_only(screen, rect)

if area.color_range is None:
to_ocr = part
else:
mask = cv2.inRange(part,
np.array(area.color_range[0], dtype=np.uint8),
np.array(area.color_range[1], dtype=np.uint8))
mask = cv2_utils.dilate(mask, 2)
to_ocr = cv2.bitwise_and(part, part, mask=mask)

ocr_result_map = ctx.ocr.run_ocr(to_ocr)
for mrl in ocr_result_map.values():
mrl.add_offset(rect.left_top)

# cv2.imwrite('y:/part.png', part)

if ocr_result_map is None:
ocr_result_map = {}
return ocr_result_map


def find_and_click_area(ctx: OneDragonContext, screen: MatLike, screen_name: str, area_name: str) -> OcrClickResultEnum:
"""
在一个区域匹配成功后进行点击
Expand All @@ -114,6 +152,7 @@ def find_and_click_area(ctx: OneDragonContext, screen: MatLike, screen_name: str
mask = cv2_utils.dilate(mask, 5)
to_ocr_part = cv2.bitwise_and(to_ocr_part, to_ocr_part, mask=mask)
# cv2_utils.show_image(to_ocr_part, win_name='debug', wait=1)
# cv2.imwrite('y:/part.png', to_ocr_part)

ocr_result_map = ctx.ocr.run_ocr(to_ocr_part)
for ocr_result, mrl in ocr_result_map.items():
Expand Down Expand Up @@ -283,4 +322,4 @@ def find_by_ocr(ctx: OneDragonContext, screen: MatLike, target_cn: str,
to_click = mrl.max.center
break

return to_click is not None
return to_click is not None
Empty file added src/script_chainer/__init__.py
Empty file.
Empty file.
Loading