diff --git a/resource/tasks/Stages/base.json b/resource/tasks/Stages/base.json
index bc40c64748..628ae21282 100644
--- a/resource/tasks/Stages/base.json
+++ b/resource/tasks/Stages/base.json
@@ -14,5 +14,64 @@
"action": "ClickSelf",
"postDelay": 2000,
"roi": [505, 57, 462, 628]
+ },
+ "SS@Store@Begin": {
+ "doc": "当期活动商店",
+ "algorithm": "JustReturn",
+ "next": ["SS@Store@ClickItem", "SS@Store@Swipe"]
+ },
+ "SS@Store@ClickItem": {
+ "action": "ClickSelf",
+ "doc": "匹配物品用的模板, 用roi排除最后一列",
+ "roi": [0, 200, 1200, 520],
+ "maskRange": [1, 255],
+ "next": ["SS@Store@ChooseMaxAmount", "SS@Store@Purchase"]
+ },
+ "SS@Store@ChooseMaxAmount": {
+ "roi": [986, 352, 164, 139],
+ "next": ["SS@Store@UnderfundedOCR", "SS@Store@Purchase"]
+ },
+ "SS@Store@UnderfundedOCR": {
+ "roi": [878, 397, 82, 48]
+ },
+ "SS@Store@Purchase": {
+ "text": ["支付"],
+ "roi": [772, 476, 292, 144],
+ "next": ["SS@Store@PurchasedConfirm", "SS@Store@RecruitSkip", "SS@Store@Underfunded"]
+ },
+ "SS@Store@Underfunded": {
+ "template": "ReceivedAllMail.png",
+ "roi": [909, 33, 166, 165],
+ "method": "HSVCount",
+ "colorScales": [[250, 255]],
+ "next": ["Stop"]
+ },
+ "SS@Store@RecruitSkip": {
+ "roi": [1143, 0, 137, 150],
+ "next": ["SS@Store@RecruitSkipClick"]
+ },
+ "SS@Store@RecruitSkipClick": {
+ "algorithm": "JustReturn",
+ "action": "ClickRect",
+ "specificRect": [1197, 23, 53, 45],
+ "next": ["SS@Store@RecruitSkipped", "SS@Store@RecruitSkipClick"]
+ },
+ "SS@Store@RecruitSkipped": {
+ "algorithm": "OcrDetect",
+ "text": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
+ "roi": [1160, 16, 97, 42],
+ "next": ["SS@Store@ClickItem", "SS@Store@Swipe"]
+ },
+ "SS@Store@PurchasedConfirm": {
+ "baseTask": "CreditShop-Bought",
+ "template": "CreditShop-Bought.png",
+ "next": ["SS@Store@PurchasedConfirm", "SS@Store@ClickItem", "SS@Store@Swipe"]
+ },
+ "SS@Store@Swipe": {
+ "baseTask": "SlowlySwipeToTheRight",
+ "postDelay": 1000,
+ "next": ["SS@Store@ClickItem", "#self"],
+ "maxTimes": 10,
+ "exceededNext": ["Stop"]
}
}
diff --git a/resource/tasks/tasks.json b/resource/tasks/tasks.json
index da5956b076..aa3f5beacb 100644
--- a/resource/tasks/tasks.json
+++ b/resource/tasks/tasks.json
@@ -2139,6 +2139,7 @@
"next": ["Mall@ReturnButtons#next", "Mall", "Mall@CloseAnnos#next"]
},
"Mall": {
+ "doc": "请同步更新 Store@EnterStore 的 template",
"template": [
"Mall.png",
"MallDark.png",
@@ -5013,5 +5014,142 @@
"Tank@UseSupportUnit-RoleSelected": {},
"Tank@UseSupportUnit-SelectRole": {},
"Warrior@UseSupportUnit-RoleSelected": {},
- "Warrior@UseSupportUnit-SelectRole": {}
+ "Warrior@UseSupportUnit-SelectRole": {},
+ "Store@Begin": {
+ "doc": "绿票、黄票商店",
+ "algorithm": "JustReturn",
+ "next": ["Store@EnterStore", "Store@EnterTicketStore"]
+ },
+ "Store@EnterStore": {
+ "baseTask": "Mall",
+ "template": [
+ "Mall.png",
+ "MallDark.png",
+ "MallSami.png",
+ "MallMistCity.png",
+ "MallSiege.png",
+ "MallSarkaz.png",
+ "MallDelicious.png",
+ "MallGaming.png",
+ "MallDahuangCity.png"
+ ],
+ "next": ["Store@EnterTicketStore"]
+ },
+ "Store@EnterTicketStore": {
+ "algorithm": "OcrDetect",
+ "action": "ClickSelf",
+ "text": ["凭证交易所"],
+ "roi": [730, 38, 215, 134],
+ "next": ["Store@ChooseTicketType"]
+ },
+ "Store@ChooseTicketType": {
+ "algorithm": "JustReturn",
+ "doc": "base_task"
+ },
+ "Store@ChooseMaxAmount": {
+ "algorithm": "OcrDetect",
+ "text": ["最多"],
+ "action": "ClickSelf"
+ },
+ "Store@UnderfundedOCR": {
+ "algorithm": "OcrDetect",
+ "text": ["0", "o", "O"]
+ },
+ "Store@Purchase": {
+ "algorithm": "OcrDetect",
+ "action": "ClickSelf",
+ "text": ["购买物品"],
+ "roi": [872, 556, 137, 48],
+ "postDelay": 1000
+ },
+ "GreenTicket@Store@ChooseTicketType": {
+ "algorithm": "OcrDetect",
+ "action": "ClickSelf",
+ "text": ["资质凭证区"],
+ "roi": [108, 163, 124, 56],
+ "next": ["GreenTicket@Store@ClickFirstFloor"]
+ },
+ "GreenTicket@Store@ClickFirstFloor": {
+ "algorithm": "OcrDetect",
+ "text": ["1", "T", "I"],
+ "action": "ClickSelf",
+ "roi": [263, 196, 35, 73],
+ "sub": ["SlowlySwipeToTheLeft"],
+ "postDelay": 1000,
+ "next": ["GreenTicket@Store@ClickItem", "GreenTicket@Store@ClickSecondFloor"]
+ },
+ "GreenTicket@Store@ClickItem": {
+ "template": [
+ "GreenTicket@Store@ClickItem_Headhunting_Permit",
+ "GreenTicket@Store@ClickItem_Orundum",
+ "GreenTicket@Store@ClickItem_LMD",
+ "GreenTicket@Store@ClickItem_Furniture_Part",
+ "GreenTicket@Store@ClickItem_Recruitment_Permit",
+ "GreenTicket@Store@ClickItem_Tactical_Battle_Record",
+ "GreenTicket@Store@ClickItem_Pure_Gold"
+ ],
+ "action": "ClickSelf",
+ "roi": [318, 139, 956, 484],
+ "next": ["GreenTicket@Store@ChooseMaxAmount"]
+ },
+ "GreenTicket@Store@ChooseMaxAmount": {
+ "roi": [1027, 405, 79, 53],
+ "next": ["GreenTicket@Store@UnderfundedOCR", "GreenTicket@Store@Purchase"]
+ },
+ "GreenTicket@Store@UnderfundedOCR": {
+ "roi": [876, 405, 85, 51]
+ },
+ "GreenTicket@Store@Purchase": {
+ "next": ["GreenTicket@Store@PurchasedConfirm"]
+ },
+ "GreenTicket@Store@PurchasedConfirm": {
+ "baseTask": "CreditShop-Bought",
+ "template": "CreditShop-Bought.png",
+ "next": [
+ "GreenTicket@Store@PurchasedConfirm",
+ "GreenTicket@Store@ClickItem",
+ "GreenTicket@Store@ClickSecondFloor",
+ "Stop"
+ ]
+ },
+ "GreenTicket@Store@ClickSecondFloor": {
+ "algorithm": "OcrDetect",
+ "text": ["2"],
+ "action": "ClickSelf",
+ "roi": [262, 364, 38, 58],
+ "maxTimes": 1,
+ "sub": ["SlowlySwipeToTheLeft*3"],
+ "postDelay": 1000,
+ "next": ["GreenTicket@Store@ClickItem", "Stop"]
+ },
+ "YellowTicket@Store@ChooseTicketType": {
+ "algorithm": "OcrDetect",
+ "action": "ClickSelf",
+ "text": ["高级凭证区"],
+ "roi": [108, 267, 124, 47],
+ "postDelay": 1000,
+ "next": ["YellowTicket@Store@ClickItem", "YellowTicket@Store@Swipe"]
+ },
+ "YellowTicket@Store@Swipe": {
+ "algorithm": "JustReturn",
+ "sub": ["SlowlySwipeToTheLeft*6"],
+ "next": ["YellowTicket@Store@ClickItem", "Stop"]
+ },
+ "YellowTicket@Store@ClickItem": {
+ "template": [
+ "YellowTicket@Store@ClickItem_Headhunting_Permit",
+ "YellowTicket@Store@ClickItem_Ten-roll_Headhunting_Permit"
+ ],
+ "action": "ClickSelf",
+ "roi": [318, 139, 956, 484],
+ "next": ["YellowTicket@Store@Purchase"]
+ },
+ "YellowTicket@Store@Purchase": {
+ "next": ["YellowTicket@Store@PurchasedConfirm"]
+ },
+ "YellowTicket@Store@PurchasedConfirm": {
+ "baseTask": "CreditShop-Bought",
+ "template": "CreditShop-Bought.png",
+ "next": ["YellowTicket@Store@PurchasedConfirm", "YellowTicket@Store@ClickItem", "Stop"]
+ }
}
diff --git a/resource/template/GreenTicket@Store@ClickItem_Furniture_Part.png b/resource/template/GreenTicket@Store@ClickItem_Furniture_Part.png
new file mode 100644
index 0000000000..089325b4ec
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Furniture_Part.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_Headhunting_Permit.png b/resource/template/GreenTicket@Store@ClickItem_Headhunting_Permit.png
new file mode 100644
index 0000000000..50ac5c554e
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Headhunting_Permit.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_LMD.png b/resource/template/GreenTicket@Store@ClickItem_LMD.png
new file mode 100644
index 0000000000..a58df10fab
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_LMD.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_Orundum.png b/resource/template/GreenTicket@Store@ClickItem_Orundum.png
new file mode 100644
index 0000000000..0c0b613b92
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Orundum.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_Pure_Gold.png b/resource/template/GreenTicket@Store@ClickItem_Pure_Gold.png
new file mode 100644
index 0000000000..3ca5a89688
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Pure_Gold.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_Recruitment_Permit.png b/resource/template/GreenTicket@Store@ClickItem_Recruitment_Permit.png
new file mode 100644
index 0000000000..6bee78a188
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Recruitment_Permit.png differ
diff --git a/resource/template/GreenTicket@Store@ClickItem_Tactical_Battle_Record.png b/resource/template/GreenTicket@Store@ClickItem_Tactical_Battle_Record.png
new file mode 100644
index 0000000000..d8d7e6b997
Binary files /dev/null and b/resource/template/GreenTicket@Store@ClickItem_Tactical_Battle_Record.png differ
diff --git a/resource/template/SS@Store@ClickItem.png b/resource/template/SS@Store@ClickItem.png
new file mode 100644
index 0000000000..7540589fb2
Binary files /dev/null and b/resource/template/SS@Store@ClickItem.png differ
diff --git a/resource/template/SS@Store@RecruitSkip.png b/resource/template/SS@Store@RecruitSkip.png
new file mode 100644
index 0000000000..09ab4cc54b
Binary files /dev/null and b/resource/template/SS@Store@RecruitSkip.png differ
diff --git a/resource/template/YellowTicket@Store@ClickItem_Headhunting_Permit.png b/resource/template/YellowTicket@Store@ClickItem_Headhunting_Permit.png
new file mode 100644
index 0000000000..3014eb22db
Binary files /dev/null and b/resource/template/YellowTicket@Store@ClickItem_Headhunting_Permit.png differ
diff --git a/resource/template/YellowTicket@Store@ClickItem_Ten-roll_Headhunting_Permit.png b/resource/template/YellowTicket@Store@ClickItem_Ten-roll_Headhunting_Permit.png
new file mode 100644
index 0000000000..afcaed4df1
Binary files /dev/null and b/resource/template/YellowTicket@Store@ClickItem_Ten-roll_Headhunting_Permit.png differ
diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj
index d5373bc9fc..4768d90032 100644
--- a/src/MaaCore/MaaCore.vcxproj
+++ b/src/MaaCore/MaaCore.vcxproj
@@ -175,6 +175,7 @@
+
@@ -205,7 +206,6 @@
-
diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters
index 161c023228..754ee62d07 100644
--- a/src/MaaCore/MaaCore.vcxproj.filters
+++ b/src/MaaCore/MaaCore.vcxproj.filters
@@ -277,9 +277,6 @@
Resource\tasks\base\Stages
-
- Resource\tasks\base\Stages
-
Resource\tasks\base\Stages
@@ -703,6 +700,9 @@
Resource\tasks\base\Stages
+
+ Resource\tasks\base\Stages
+
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 709b94e848..919050c47c 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -693,6 +693,12 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
Mini Game Name
Contest Channel: Green Grass City (Unofficial)
Manually skip the tutorial dialogue, then you can exit directly.
Start the task from the event screen (there is a 「Join Event」 button in the bottom right corner).
Follow the Duck Lord's choice.
+ Green Ticket Store
+ Buy everything on the 1st floor.
Buy Headhunting Permits and Recruitment Permits on the 2nd floor.
+ Yellow Ticket Store
+ Please ensure you have at least 258 yellow tickets.
+ Event Shop
+ Please start from the event shop page.
Won't buy items with unlimited purchase quantities.
Identifying……
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index 10329d3649..9950ba2321 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -696,6 +696,12 @@ C:\\leidian\\LDPlayer9
ミニゲーム名
対決チャンネル:グリーングラスシティ(非公式)
手動でチュートリアルの会話をスキップし、直接退出することができます。
イベント画面(右下角に「イベントに参加」ボタンがあります)でタスクを開始します。
ダック卿の選択をフォローする。
+ 緑チケット商店
+ 1階は全部購入。
2階は訪問証と募集許可を購入。
+ 黄チケット商店
+ 少なくとも258枚の黄チケットを持っていることを確認してください。
+ イベントショップ
+ イベントのショップページからのみ始めてください。
購入数量無制限のアイテムは購入しないでください。
認識中……
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index c6dc2ce362..6cf1345b97 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -696,6 +696,12 @@ C:\\leidian\\LDPlayer9
미니 게임 이름
대결 채널: 그린그래스 시티 (비공식)
튜토리얼 대화를 수동으로 건너뛴 후, 바로 종료할 수 있습니다.
이벤트 메인 화면(오른쪽 아래에 「이벤트 참가」 표시 있음)에서 임무를 시작하세요.
덕로드만 믿고 따라가면 손해는 없을거에요.
+ 녹색 티켓 상점
+ 1층은 전부 구매.
2층은 방문 증서와 모집 허가를 구매.
+ 황색 티켓 상점
+ 최소한 258장의 노란색 티켓을 가지고 있는지 확인하세요.
+ 이벤트 상점
+ 이벤트 상점 페이지에서만 시작하세요.
구매 수량이 무제한인 아이템은 구매하지 마세요.
인식 중……
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 6284b685d8..ac991fd568 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -697,6 +697,12 @@ C:\\leidian\\LDPlayer9。\n
小游戏名称
争锋频道:青草城
手动跳过教程对话,然后可以直接退出。
在活动主界面(右下角有 「加入赛事」 处)开始任务。
跟着鸭总喝口汤。
+ 绿票商店
+ 1层全买。
2层买寻访凭证和招聘许可。
+ 黄票商店
+ 请确保自己至少有258张黄票。
+ 活动商店
+ 请在活动商店页面开始。
不买无限池。
正在识别……
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index 68c13581b0..9597ef0da2 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -694,6 +694,13 @@ C:\\leidian\\LDPlayer9。\n
小遊戲名稱
爭鋒頻道:青草城
+ 手動跳過教程對話,然後可以直接退出。
在活動主界面(右下角有「加入賽事」處)開始任務。
跟著鴨總喝口湯。
+ 綠票商店
+ 1層全買。
2層買尋訪憑證和招聘許可。
+ 黃票商店
+ 請確保自己至少有258張黃票。
+ 活動商店
+ 請在活動商店頁面開始。
不購買無限量物品。
正在辨識……
diff --git a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
index b8418f5039..3d3664bac0 100644
--- a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
+++ b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs
@@ -1061,6 +1061,9 @@ namespace MaaWpfGui.ViewModels.UI
[
new() { Display = LocalizationHelper.GetString("NotSelected"), Value = "Stop" },
new() { Display = LocalizationHelper.GetString("MiniGameNameGreenGrass"), Value = "GreenGrass@DuelChannel@Begin" },
+ new() { Display = LocalizationHelper.GetString("MiniGameNameGreenTicketStore"), Value = "GreenTicket@Store@Begin" },
+ new() { Display = LocalizationHelper.GetString("MiniGameNameYellowTicketStore"), Value = "YellowTicket@Store@Begin" },
+ new() { Display = LocalizationHelper.GetString("MiniGameNameSsStore"), Value = "SS@Store@Begin" },
];
private string _miniGameTaskName = ConfigurationHelper.GetGlobalValue(ConfigurationKeys.MiniGameTaskName, "Stop");
@@ -1093,6 +1096,9 @@ namespace MaaWpfGui.ViewModels.UI
return name switch
{
"GreenGrass@DuelChannel@Begin" => LocalizationHelper.GetString("MiniGameNameGreenGrassTip"),
+ "GreenTicket@Store@Begin" => LocalizationHelper.GetString("MiniGameNameGreenTicketStoreTip"),
+ "YellowTicket@Store@Begin" => LocalizationHelper.GetString("MiniGameNameYellowTicketStoreTip"),
+ "SS@Store@Begin" => LocalizationHelper.GetString("MiniGameNameSsStoreTip"),
_ => string.Empty,
};
}