feat: pv 小游戏 (#14885)

* feat: pv 小游戏架子

* chore: Auto update by pre-commit hooks [skip changelog]

* feat: 1-5 关

* chore: Auto update by pre-commit hooks [skip changelog]

* feat: PV 小游戏 06-15 (#14888)

* feat: 06-15

* fix: 15

* fix: templates and threshold

* chore: Auto update by pre-commit hooks [skip changelog]

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* chore: Auto update by pre-commit hooks [skip changelog]

* feat: 小游戏 16-20

* fix: 18-20 导航

* chore: Auto update by pre-commit hooks [skip changelog]

* feat: 添加 ui 入口

* fix: 全角数字

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: 不留 <weinibuliu@outlook.com>
This commit is contained in:
uye
2025-11-28 15:54:14 +08:00
committed by GitHub
parent a922de5484
commit eb9a2e1c27
28 changed files with 510 additions and 0 deletions

View File

@@ -0,0 +1,420 @@
{
"MiniGame@PV@Begin": {
"algorithm": "JustReturn",
"next": ["MiniGame@PV@01"]
},
"MiniGame@PV@01": {
"action": "ClickSelf",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"maskRange": [0, 70],
"roi": [0, 350, 1280, 50],
"next": ["MiniGame@PV@02"]
},
"MiniGame@PV@02": {
"baseTask": "MiniGame@PV@01",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Confirm"
],
"roi": [0, 620, 1280, 50],
"next": ["MiniGame@PV@03"]
},
"MiniGame@PV@03": {
"baseTask": "MiniGame@PV@01",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 330, 1280, 50],
"next": ["MiniGame@PV@04"]
},
"MiniGame@PV@04": {
"baseTask": "MiniGame@PV@01",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter3-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Confirm"
],
"roi": [0, 580, 1280, 50],
"next": ["MiniGame@PV@05"]
},
"MiniGame@PV@05": {
"baseTask": "MiniGame@PV@01",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 460, 1280, 50],
"next": ["MiniGame@PV@06"]
},
"MiniGame@PV@06": {
"action": "ClickSelf",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"maskRange": [90, 140],
"rectMove": [0, -50, 10, 10],
"roi": [0, 450, 1280, 50],
"next": ["MiniGame@PV@07"]
},
"MiniGame@PV@07": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Confirm"
],
"roi": [0, 230, 1280, 50],
"next": ["MiniGame@PV@08"]
},
"MiniGame@PV@08": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 380, 1280, 50],
"next": ["MiniGame@PV@09"]
},
"MiniGame@PV@09": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Confirm"
],
"roi": [0, 520, 1280, 50],
"next": ["MiniGame@PV@10"]
},
"MiniGame@PV@10": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 670, 1280, 50],
"next": ["MiniGame@PV@11"]
},
"MiniGame@PV@11": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Confirm"
],
"roi": [0, 590, 1280, 50],
"next": ["MiniGame@PV@12"]
},
"MiniGame@PV@12": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Confirm"
],
"roi": [0, 670, 1280, 50],
"next": ["MiniGame@PV@13"]
},
"MiniGame@PV@13": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Confirm"
],
"roi": [0, 520, 1280, 50],
"next": ["MiniGame@PV@14"]
},
"MiniGame@PV@14": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Confirm"
],
"roi": [0, 380, 1280, 50],
"next": ["MiniGame@PV@15"]
},
"MiniGame@PV@15": {
"action": "ClickSelf",
"template": "MiniGame@PV@11.png",
"rectMove": [0, -350, 10, 10],
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Confirm"
],
"roi": [0, 590, 1280, 50],
"next": ["MiniGame@PV@16"]
},
"MiniGame@PV@16": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 230, 1280, 50],
"next": ["MiniGame@PV@17"]
},
"MiniGame@PV@17": {
"baseTask": "MiniGame@PV@06",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm",
"SwipeToTheRight"
],
"roi": [0, 450, 1280, 50],
"postDelay": 500,
"next": ["MiniGame@PV@18"]
},
"MiniGame@PV@18": {
"baseTask": "MiniGame@PV@20",
"template": "MiniGame@PV@20.png",
"rectMove": [-250, -350, 10, 10],
"sub": [
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"next": ["MiniGame@PV@19"]
},
"MiniGame@PV@19": {
"action": "ClickSelf",
"template": "MiniGame@PV@20.png",
"rectMove": [-250, -100, 10, 10],
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Options-4",
"MiniGame@PV@Filter2-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Confirm"
],
"next": ["MiniGame@PV@20"]
},
"MiniGame@PV@20": {
"baseTask": "MiniGame@PV@01",
"sub": [
"MiniGame@PV@Filter1-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter2-1",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter3-1",
"MiniGame@PV@Options-1",
"MiniGame@PV@Filter1-2",
"MiniGame@PV@Options-3",
"MiniGame@PV@Filter3-2",
"MiniGame@PV@Options-1",
"MiniGame@PV@Options-2",
"MiniGame@PV@Confirm"
],
"roi": [0, 630, 1280, 50],
"next": []
},
"MiniGame@PV@Filter1-1": {
"algorithm": "JustReturn",
"action": "ClickRect",
"specificRect": [1025, 93, 16, 16],
"preDelay": 500,
"postDelay": 500
},
"MiniGame@PV@Filter1-2": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1177, 98, 16, 16]
},
"MiniGame@PV@Filter2-1": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1020, 225, 16, 16]
},
"MiniGame@PV@Filter2-2": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1179, 230, 16, 16]
},
"MiniGame@PV@Filter3-1": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1011, 359, 16, 16]
},
"MiniGame@PV@Filter3-2": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1160, 363, 16, 16]
},
"MiniGame@PV@Filter4-1": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1010, 476, 16, 16]
},
"MiniGame@PV@Filter4-2": {
"baseTask": "MiniGame@PV@Filter1-1",
"specificRect": [1143, 478, 16, 16]
},
"MiniGame@PV@Options-1": {
"algorithm": "JustReturn",
"action": "ClickRect",
"specificRect": [866, 143, 16, 16]
},
"MiniGame@PV@Options-2": {
"baseTask": "MiniGame@PV@Options-1",
"specificRect": [860, 269, 16, 16]
},
"MiniGame@PV@Options-3": {
"baseTask": "MiniGame@PV@Options-1",
"specificRect": [854, 392, 16, 16]
},
"MiniGame@PV@Options-4": {
"baseTask": "MiniGame@PV@Options-1",
"specificRect": [846, 517, 16, 16]
},
"MiniGame@PV@Confirm": {
"action": "ClickSelf",
"roi": [1053, 588, 205, 132],
"preDelay": 500,
"postDelay": 1000,
"reduceOtherTimes": ["MiniGame@PV@ClickToMainInterface*20"],
"next": ["MiniGame@PV@ClickToMainInterface"]
},
"MiniGame@PV@ClickToMainInterface": {
"algorithm": "JustReturn",
"action": "ClickRect",
"specificRect": [640, 10, 1, 1],
"maxTimes": 20,
"next": ["MiniGame@PV@MainInterface", "MiniGame@PV@ClickToMainInterface"]
},
"MiniGame@PV@MainInterface": {
"roi": [0, 270, 339, 159],
"next": ["Stop"]
}
}

View File

@@ -0,0 +1,77 @@
import re
# 攻略https://www.bilibili.com/video/BV16NSZYbE85/
# 视频格式左1-1 2-3 3-1 右1-3 3-1 3-2
# MAA 内部格式:
# MiniGame@PV@Filter1-1 左1-
# MiniGame@PV@Options-1 -1
# 映射:左/右 → Filter 的第二位
side_map = {"": "1", "": "2"}
def convert_steps(text):
parts = text.split()
result = []
current_filter = None
current_side = None
for part in parts:
# 判断是否带 左/右
m = re.match(r"(左|右)?(\d+)-(\d+)", part)
if not m:
continue
side, group, option = m.groups()
# 如果没有写左/右,则沿用前一次
if side is None:
side = current_side
filter_id = f"Filter{group}-{side_map[side]}"
option_id = f"Options-{option}"
# 如果 Filter 改变了,先写 Filter
if filter_id != current_filter:
result.append(f"MiniGame@PV@{filter_id}")
current_filter = filter_id
current_side = side
# 再写 Options
result.append(f"MiniGame@PV@{option_id}")
result.append("MiniGame@PV@Confirm")
return result
texts = [
"左1-4 2-2 右1-2 1-4 2-1 2-2",
"左1-1 2-3 右2-2 2-4",
"左1-2 1-4 2-1 3-2 右2-2",
"左1-4 3-2 右1-3 3-4",
"左1-1 1-3 2-1 2-3 右2-1 2-2",
"左1-2 1-4 2-2 2-3 右1-3 2-2",
"左1-1 1-3 2-3 右1-3 2-1",
"左1-2 1-4 2-1 3-1 右1-2",
"左1-4 2-2 3-3 右1-3 2-3",
"左1-1 1-4 2-3 右1-1 1-2 2-2",
"左1-2 2-3 3-2 右1-1",
"左2-2 2-4 右1-1 2-3",
"右1-1 2-2 2-4",
"左1-1 2-4 右1-2 2-4",
"左1-2 1-4 右1-2 1-4 2-1",
"左2-2 3-2 3-4 右1-1 1-3 2-2",
"左1-4 2-1 3-1 3-3 右1-2",
"左2-1 3-1 右1-2 1-4 2-2",
"左1-2 1-4 3-2 3-4 右2-1",
"左1-1 2-3 3-1 右1-3 3-1 3-2",
]
for idx, text in enumerate(texts):
print(f"\n// 第 {idx + 1} 行: {text}")
converted = convert_steps(text)
print('"sub": [')
for i, line in enumerate(converted):
comma = "," if i < len(converted) - 1 else ""
print(f' "{line}"{comma}')
print(" ],")

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -795,6 +795,8 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
<!-- !Peep -->
<!-- 小游戏 -->
<system:String x:Key="MiniGameName">Mini Game Name</system:String>
<system:String x:Key="MiniGame@PV">PV - Fireworks Organizing Committee</system:String>
<system:String x:Key="MiniGame@PVTip" xml:space="preserve">Start from the leftmost side of the event page</system:String>
<system:String x:Key="MiniGame@SPA">Stronghold Protocol: Alliance</system:String>
<system:String x:Key="MiniGame@SPATip" xml:space="preserve">Start the task from the main event screen (where 「Independent Simulation」 is located)
Completing 「Standard Simulation」 manually allows faster score farming

View File

@@ -795,6 +795,8 @@ C:\\leidian\\LDPlayer9
<!-- !Peep -->
<!-- 小游戏 -->
<system:String x:Key="MiniGameName">ミニゲーム名</system:String>
<system:String x:Key="MiniGame@PV">PV-花火実行委員会</system:String>
<system:String x:Key="MiniGame@PVTip" xml:space="preserve">イベントページの最左側から開始</system:String>
<system:String x:Key="MiniGame@SPA">ガードプロトコル:盟約</system:String>
<system:String x:Key="MiniGame@SPATip" xml:space="preserve">イベントメイン画面(「独立シミュレーション」の場所)からタスクを開始
「スタンダードシミュレーション」を手動でクリアすると、より早くスコアを稼げます

View File

@@ -796,6 +796,8 @@ C:\\leidian\\LDPlayer9
<!-- !Peep -->
<!-- 미니게임 -->
<system:String x:Key="MiniGameName">미니 게임 이름</system:String>
<system:String x:Key="MiniGame@PV">PV-불꽃놀이 집행위원회</system:String>
<system:String x:Key="MiniGame@PVTip" xml:space="preserve">이벤트 페이지 가장 왼쪽에서 시작</system:String>
<system:String x:Key="MiniGame@SPA">위수 협의: 맹약</system:String>
<system:String x:Key="MiniGame@SPATip" xml:space="preserve">이벤트 메인 화면(「독립 시뮬레이션」 위치)에서 임무 시작
「스탠다드 시뮬레이션」 을 수동으로 클리어하면 점수를 더 빠르게 획득할 수 있습니다

View File

@@ -795,6 +795,8 @@ C:\\leidian\\LDPlayer9。\n
<!-- !牛牛监控 -->
<!-- 小游戏 -->
<system:String x:Key="MiniGameName">小游戏名称</system:String>
<system:String x:Key="MiniGame@PV">PV-烟花筹委会</system:String>
<system:String x:Key="MiniGame@PVTip" xml:space="preserve">在活动页面最左侧开始</system:String>
<system:String x:Key="MiniGame@SPA">卫戍协议:盟约</system:String>
<system:String x:Key="MiniGame@SPATip" xml:space="preserve">在活动主界面(有 「独立模拟」 处开始任务)
手动通关 「标准模拟」 可以更快的刷分

View File

@@ -796,6 +796,8 @@ C:\\leidian\\LDPlayer9。\n
<!-- !牛牛監控 -->
<!-- 小游戏 -->
<system:String x:Key="MiniGameName">小遊戲名稱</system:String>
<system:String x:Key="MiniGame@PV">PV-煙花籌委會</system:String>
<system:String x:Key="MiniGame@PVTip" xml:space="preserve">在活動頁面最左側開始</system:String>
<system:String x:Key="MiniGame@SPA">衛戍協議:盟約</system:String>
<system:String x:Key="MiniGame@SPATip" xml:space="preserve">在活動主界面(有「獨立模擬」處開始任務)
手動通關「標準模擬」可以更快刷分

View File

@@ -1241,6 +1241,7 @@ public class ToolboxViewModel : Screen
new() { Display = LocalizationHelper.GetString("MiniGameNameRAStore"), Value = "RA@Store@Begin" },
// 活动
new() { Display = LocalizationHelper.GetString("MiniGame@PV"), Value = "MiniGame@PV@Begin" },
new() { Display = LocalizationHelper.GetString("MiniGame@SPA"), Value = "MiniGame@SPA@Begin" },
new() { Display = LocalizationHelper.GetString("MiniGame@OS"), Value = "MiniGame@OS@Begin" },
new() { Display = LocalizationHelper.GetString("MiniGame@RM-TR-1"), Value = "MiniGame@RM-TR-1@Begin" },
@@ -1286,6 +1287,7 @@ public class ToolboxViewModel : Screen
"RA@Store@Begin" => LocalizationHelper.GetString("MiniGameNameRAStoreTip"),
// 活动
"MiniGame@PV@Begin" => LocalizationHelper.GetString("MiniGame@PVTip"),
"MiniGame@SPA@Begin" => LocalizationHelper.GetString("MiniGame@SPATip"),
"MiniGame@OS@Begin" => LocalizationHelper.GetString("MiniGame@OSTip"),
"MiniGame@RM-TR-1@Begin" => LocalizationHelper.GetString("MiniGame@RM-TR-1Tip"),

View File

@@ -2,6 +2,7 @@ import json
from pathlib import Path
import cv2
from tools.ImageCropper.main import crop
"""