Compare commits

...

5 commits

Author SHA1 Message Date
ca329fa744 Merge branch 'main' of https://git.zhaozuohong.vip/mower-ng/mower-ng
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful
2025-01-22 20:36:32 +08:00
ccfc3c187a 代办事项到基建全局视角改为ctap 2025-01-22 20:16:42 +08:00
fcdffd0cce 展开线索交流时间
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful
2025-01-22 20:15:47 +08:00
f8f083f466 信息板信用领取 2025-01-22 20:15:39 +08:00
6e29fa0af0 线索数量识别区域适配更新
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful
2025-01-22 19:21:27 +08:00
16 changed files with 82 additions and 7 deletions

View file

@ -275,6 +275,10 @@
"label": "PRODUCT_SWITCHING_CONFIRM", "label": "PRODUCT_SWITCHING_CONFIRM",
"comment": "产物更改确认" "comment": "产物更改确认"
}, },
"230": {
"label": "CLUE_MESSAGE_BOARD",
"comment": "信息板"
},
"301": { "301": {
"label": "BUSINESS_CARD", "label": "BUSINESS_CARD",
"comment": "个人名片" "comment": "个人名片"

BIN
mower/resources/clue/interact.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/resources/clue/message_board_banner.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/resources/clue/message_board_collect.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/resources/clue/message_board_entry.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
mower/resources/clue/show_party_details.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -3,6 +3,7 @@ from mower.solvers.shop import CreditShop
from .daily import DailySolver from .daily import DailySolver
from .get_clue_count import GetClueCountSolver from .get_clue_count import GetClueCountSolver
from .give_away import GiveAwaySolver from .give_away import GiveAwaySolver
from .message_board import MessageBoard
from .party_time import PartyTimeSolver from .party_time import PartyTimeSolver
from .place import PlaceSolver from .place import PlaceSolver
from .receive import ReceiveSolver from .receive import ReceiveSolver
@ -12,6 +13,7 @@ class ClueManager:
solver_name = "线索交流" solver_name = "线索交流"
def run(self): def run(self):
MessageBoard().run()
DailySolver().run() DailySolver().run()
ReceiveSolver().run() ReceiveSolver().run()
PlaceSolver().run() PlaceSolver().run()

View file

@ -19,7 +19,7 @@ class GetClueCountSolver(SceneGraphSolver, BaseMixin):
def transition(self) -> bool: def transition(self) -> bool:
if self.find("meeting_arrange_check_in"): if self.find("meeting_arrange_check_in"):
self.res = self.read_screen( self.res = self.read_screen(
config.recog.img, limit=10, cord=((645, 977), (755, 1018)) config.recog.img, limit=10, cord=((476, 985), (519, 1020))
) )
logger.info(f"当前拥有线索数量为{self.res}") logger.info(f"当前拥有线索数量为{self.res}")
return True return True

View file

@ -0,0 +1,35 @@
from datetime import timedelta
from mower.solvers.infra.base_mixin import BaseMixin
from mower.solvers.infra.enter_room import EnterRoomSolver
from mower.utils import config
from mower.utils.graph import SceneGraphSolver
from mower.utils.scene import Scene
class MessageBoard(SceneGraphSolver, BaseMixin):
solver_name = "留言板"
solver_max_duration = timedelta(minutes=2)
def transition(self):
if (
scene := self.scene()
) == Scene.INFRA_DETAILS and self.detect_room() == "meeting":
score, scope = config.recog.match("clue/message_board_entry")
if score > 0.8:
self.tap(scope)
return
self.tap("clue/interact")
elif scene == Scene.CLUE_MESSAGE_BOARD:
if self.animation():
return
if pos := self.find("clue/message_board_collect"):
self.tap(pos)
return
return True
elif scene == Scene.INFRA_CONFIDENTIAL:
self.back()
elif scene in self.waiting_scene:
self.waiting_solver()
else:
EnterRoomSolver().run("meeting", detail=False)

View file

@ -16,14 +16,18 @@ class PartyTimeSolver(SceneGraphSolver, BaseMixin):
if ( if (
scene := self.scene() scene := self.scene()
) == Scene.INFRA_DETAILS and self.detect_room() == "meeting": ) == Scene.INFRA_DETAILS and self.detect_room() == "meeting":
if self.find("clue/title_party", scope=((1600, 190), (1880, 260))): if self.animation(((1620, 200), (1910, 250))):
return
if self.find("clue/title_party"):
config.party_time = self.double_read_time(((1768, 438), (1902, 480))) config.party_time = self.double_read_time(((1768, 438), (1902, 480)))
logger.info(f"线索交流结束时间:{config.party_time}") logger.info(f"线索交流结束时间:{config.party_time}")
return True return True
else: if pos := self.find("clue/show_party_details"):
config.party_time = None self.tap(pos)
logger.info("线索交流未开启") return
return True config.party_time = None
logger.info("线索交流未开启")
return True
elif scene == Scene.INFRA_CONFIDENTIAL: elif scene == Scene.INFRA_CONFIDENTIAL:
self.back() self.back()
else: else:

View file

@ -38,6 +38,7 @@ from .utils import edge
@edge(Scene.CLUE_DAILY, Scene.NAVIGATION_BAR) @edge(Scene.CLUE_DAILY, Scene.NAVIGATION_BAR)
@edge(Scene.CLUE_RECEIVE, Scene.NAVIGATION_BAR) @edge(Scene.CLUE_RECEIVE, Scene.NAVIGATION_BAR)
@edge(Scene.CLUE_PLACE, Scene.NAVIGATION_BAR) @edge(Scene.CLUE_PLACE, Scene.NAVIGATION_BAR)
@edge(Scene.CLUE_MESSAGE_BOARD, Scene.NAVIGATION_BAR)
@edge(Scene.ORDER_LIST, Scene.NAVIGATION_BAR) @edge(Scene.ORDER_LIST, Scene.NAVIGATION_BAR)
@edge(Scene.FACTORY_ROOMS, Scene.NAVIGATION_BAR) @edge(Scene.FACTORY_ROOMS, Scene.NAVIGATION_BAR)
@edge(Scene.OPERATOR_ELIMINATE, Scene.NAVIGATION_BAR) @edge(Scene.OPERATOR_ELIMINATE, Scene.NAVIGATION_BAR)

View file

@ -9,7 +9,7 @@ from .utils import edge
@edge(Scene.INFRA_TODOLIST, Scene.INFRA_MAIN) @edge(Scene.INFRA_TODOLIST, Scene.INFRA_MAIN)
def todo_complete(solver: BaseSolver): def todo_complete(solver: BaseSolver):
solver.tap((1840, 140)) solver.ctap((1840, 140), 3)
@edge(Scene.INFRA_CONFIDENTIAL, Scene.INFRA_DETAILS) @edge(Scene.INFRA_CONFIDENTIAL, Scene.INFRA_DETAILS)
@ -21,6 +21,7 @@ def todo_complete(solver: BaseSolver):
@edge(Scene.CLUE_GIVE_AWAY, Scene.INFRA_CONFIDENTIAL) @edge(Scene.CLUE_GIVE_AWAY, Scene.INFRA_CONFIDENTIAL)
@edge(Scene.CLUE_SUMMARY, Scene.INFRA_CONFIDENTIAL) @edge(Scene.CLUE_SUMMARY, Scene.INFRA_CONFIDENTIAL)
@edge(Scene.CLUE_PLACE, Scene.INFRA_CONFIDENTIAL) @edge(Scene.CLUE_PLACE, Scene.INFRA_CONFIDENTIAL)
@edge(Scene.CLUE_MESSAGE_BOARD, Scene.INFRA_CONFIDENTIAL)
@edge(Scene.ORDER_LIST, Scene.INFRA_DETAILS) @edge(Scene.ORDER_LIST, Scene.INFRA_DETAILS)
@edge(Scene.FACTORY_ROOMS, Scene.INFRA_DETAILS) @edge(Scene.FACTORY_ROOMS, Scene.INFRA_DETAILS)
@edge(Scene.CHOOSE_PRODUCT, Scene.FACTORY_ROOMS) @edge(Scene.CHOOSE_PRODUCT, Scene.FACTORY_ROOMS)

View file

@ -284,6 +284,8 @@ class Recognizer:
self.scene = Scene.CLUE_SUMMARY self.scene = Scene.CLUE_SUMMARY
elif self.find("clue/filter_all"): elif self.find("clue/filter_all"):
self.scene = Scene.CLUE_PLACE self.scene = Scene.CLUE_PLACE
elif self.find("clue/message_board_banner"):
self.scene = Scene.CLUE_MESSAGE_BOARD
elif self.find("upgrade"): elif self.find("upgrade"):
self.scene = Scene.UPGRADE self.scene = Scene.UPGRADE
elif self.find("restore_all_sanity"): elif self.find("restore_all_sanity"):

View file

@ -16,6 +16,8 @@ color = {
"clue/daily": (526, 623), "clue/daily": (526, 623),
"clue/filter_all": (1297, 99), "clue/filter_all": (1297, 99),
"clue/give_away": (25, 18), "clue/give_away": (25, 18),
"clue/message_board_banner": (19, 1006),
"clue/message_board_collect": (1657, 876),
"clue/receive": (1295, 15), "clue/receive": (1295, 15),
"clue/summary": (59, 153), "clue/summary": (59, 153),
"clue/title_party": (1621, 200), "clue/title_party": (1621, 200),
@ -242,6 +244,7 @@ template_matching = {
"choose_product_options": (1174, 23), "choose_product_options": (1174, 23),
"clue": (1744, 861), "clue": (1744, 861),
"clue/badge_new": None, "clue/badge_new": None,
"clue/interact": (639, 961),
"collection": (1005, 943), "collection": (1005, 943),
"collection_small": (1053, 982), "collection_small": (1053, 982),
"connecting": (1087, 978), "connecting": (1087, 978),

View file

@ -137,6 +137,8 @@ class Scene:
"订单切换选择" "订单切换选择"
PRODUCT_SWITCHING_CONFIRM = 229 PRODUCT_SWITCHING_CONFIRM = 229
"产物更改确认" "产物更改确认"
CLUE_MESSAGE_BOARD = 230
"信息板"
BUSINESS_CARD = 301 BUSINESS_CARD = 301
"个人名片" "个人名片"
FRIEND_LIST = 302 FRIEND_LIST = 302
@ -501,6 +503,7 @@ SceneComment = {
227: "制造站产物选择", 227: "制造站产物选择",
228: "订单切换选择", 228: "订单切换选择",
229: "产物更改确认", 229: "产物更改确认",
230: "信息板",
301: "个人名片", 301: "个人名片",
302: "好友列表", 302: "好友列表",
303: "基建内访问好友", 303: "基建内访问好友",

View file

@ -60,8 +60,13 @@ Res = Literal[
"clue/filter_all", "clue/filter_all",
"clue/give_away", "clue/give_away",
"clue/icon_notification", "clue/icon_notification",
"clue/interact",
"clue/label_give_away", "clue/label_give_away",
"clue/message_board_banner",
"clue/message_board_collect",
"clue/message_board_entry",
"clue/receive", "clue/receive",
"clue/show_party_details",
"clue/summary", "clue/summary",
"clue/title_party", "clue/title_party",
"clue_next", "clue_next",