集成回顾傀影签到+红丝绒关卡导航/奖励领取/活动商店
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful

This commit is contained in:
zhbaor 2025-06-05 20:25:57 +08:00
parent e7b55f0e39
commit fe4cb802b2
16 changed files with 77 additions and 87 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mower/resources/sign_in/banner.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/collect.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/entry.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/shop/banner.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/shop/coin.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/shop/entry.png (Stored with Git LFS)

Binary file not shown.

BIN
mower/resources/sign_in/task/entry.png (Stored with Git LFS)

Binary file not shown.

View file

@ -29,16 +29,14 @@ class ActivityNavigation(BaseSolver):
_location = { _location = {
"normal": { "normal": {
"MT-1": (0, 0), "AD-1": (0, 0),
"MT-2": [330, -1], "AD-2": (248, -215),
"MT-3": [694, -1], "AD-3": (633, -23),
"MT-4": [1044, 0], "AD-4": (867, -201),
"MT-5": [1394, 0], "AD-5": (1346, 8),
"MT-6": [1836, -1], "AD-6": (1698, -181),
"MT-7": [2249, -25], "AD-7": (2119, 145),
"MT-8": [2568, -101], "AD-8": (2317, -198),
"MT-9": [2868, -212],
"MT-10": [3091, -388],
}, },
"ex": {}, "ex": {},
} }
@ -46,9 +44,9 @@ class ActivityNavigation(BaseSolver):
@classproperty @classproperty
def location(cls): def location(cls):
result = {"normal": {}, "ex": {}} result = {"normal": {}, "ex": {}}
if (now := datetime.now()) < datetime(2025, 5, 22, 4): if (now := datetime.now()) < datetime(2025, 6, 19, 4):
result["normal"] = cls._location["normal"] result["normal"] = cls._location["normal"]
if now > datetime(2025, 5, 8, 16): if now > datetime(2025, 6, 12, 16):
result["ex"] = cls._location["ex"] result["ex"] = cls._location["ex"]
return result return result

View file

@ -18,9 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime from datetime import datetime
from .box import Box
from .headhunting import Headhunting
from .orundum import Orundum
from .shop import Shop from .shop import Shop
from .sign_in import SignIn from .sign_in import SignIn
from .special_access import SpecialAccess from .special_access import SpecialAccess
@ -37,10 +34,10 @@ class SignInManager:
now = datetime.now() now = datetime.now()
if now < datetime(2025, 6, 9): if now < datetime(2025, 6, 9):
solver_list += [SpecialAccess()] solver_list += [SpecialAccess()]
if now < datetime(2025, 5, 15): if now < datetime(2025, 6, 19):
solver_list += [SignIn(), Orundum(), Headhunting()] solver_list += [SignIn()]
if now < datetime(2025, 5, 29): if now < datetime(2025, 6, 26):
solver_list += [Task(), Shop(), Box()] solver_list += [Task(), Shop()]
for solver in solver_list: for solver in solver_list:
solver.scheduler_stop_time = self.scheduler_stop_time solver.scheduler_stop_time = self.scheduler_stop_time
result = result and solver.run() result = result and solver.run()

View file

@ -30,8 +30,8 @@ from mower.utils.scene import Scene
from mower.utils.solver import BaseSolver from mower.utils.solver import BaseSolver
from mower.utils.vector import sa, va, vs from mower.utils.vector import sa, va, vs
offset = (24, 165) offset = (21, 181)
task_name = "众生行记" task_name = "红丝绒"
class Shop(BaseSolver): class Shop(BaseSolver):

View file

@ -18,18 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from datetime import timedelta from datetime import timedelta
import cv2
from mower.utils import config
from mower.utils.email import notify from mower.utils.email import notify
from mower.utils.image import cropimg
from mower.utils.scene import Scene from mower.utils.scene import Scene
from mower.utils.solver import BaseSolver from mower.utils.solver import BaseSolver
from mower.utils.vector import sa, va
from .utils import index_entry from .utils import index_entry
activity_name = "六周年庆典签到活动" activity_name = "集成回顾傀影"
class SignIn(BaseSolver): class SignIn(BaseSolver):
@ -59,37 +54,37 @@ class SignIn(BaseSolver):
elif scene == Scene.ANNOUNCEMENT: elif scene == Scene.ANNOUNCEMENT:
if self.animation(): if self.animation():
return return
top_left = 680, 500 # top_left = 680, 500
img = cropimg(config.recog.hsv, (top_left, (1800, 540))) # img = cropimg(config.recog.hsv, (top_left, (1800, 540)))
img = cv2.inRange(img, (85, 100, 100), (95, 255, 255)) # img = cv2.inRange(img, (85, 100, 100), (95, 255, 255))
contours, _ = cv2.findContours( # contours, _ = cv2.findContours(
img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE # img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
) # )
rect = [cv2.boundingRect(c) for c in contours] # rect = [cv2.boundingRect(c) for c in contours]
rect = [r for r in rect if r[2] > 200] # rect = [r for r in rect if r[2] > 200]
if len(rect) == 0: # if len(rect) == 0:
if self.finish_email:
notify(f"{activity_name}奖励已领完")
return True
rect.sort(key=lambda c: c[0])
x, y, w, h = rect[0]
scope = sa(((x, y), va((x, y), (w, h))), top_left)
if self.ctap(scope):
self.materiel_email = True
self.skin_email = True
self.finish_email = False
# if not self.find("sign_in/banner"):
# self.scene_graph_step(Scene.INDEX)
# return
# if pos := self.find("sign_in/collect"):
# if self.ctap(pos, 5):
# self.materiel_email = True
# self.skin_email = True
# self.finish_email = False
# return
# if self.finish_email: # if self.finish_email:
# notify(f"{activity_name}奖励已领完") # notify(f"{activity_name}奖励已领完")
# return True # return True
# rect.sort(key=lambda c: c[0])
# x, y, w, h = rect[0]
# scope = sa(((x, y), va((x, y), (w, h))), top_left)
# if self.ctap(scope):
# self.materiel_email = True
# self.skin_email = True
# self.finish_email = False
if not self.find("sign_in/banner"):
self.scene_graph_step(Scene.INDEX)
return
if pos := self.find("sign_in/collect"):
if self.ctap(pos, 5):
self.materiel_email = True
self.skin_email = True
self.finish_email = False
return
if self.finish_email:
notify(f"{activity_name}奖励已领完")
return True
elif scene == Scene.ROGUE_AGENT: elif scene == Scene.ROGUE_AGENT:
if self.skin_email: if self.skin_email:
self.skin_email = False self.skin_email = False

View file

@ -25,7 +25,7 @@ from mower.utils.rapidocr import ocr_rec
from mower.utils.scene import Scene from mower.utils.scene import Scene
from mower.utils.solver import BaseSolver from mower.utils.solver import BaseSolver
task_name = "众生行记" task_name = "红丝绒"
class Task(BaseSolver): class Task(BaseSolver):
@ -42,7 +42,7 @@ class Task(BaseSolver):
if (scene := self.scene()) == Scene.ACTIVITY_TASK: if (scene := self.scene()) == Scene.ACTIVITY_TASK:
if self.animation(): if self.animation():
return return
scope = ((1500, 230), (1700, 280)) scope = ((1500, 230), (1800, 280))
if "" in ocr_rec(cropimg(config.recog.img, scope)): if "" in ocr_rec(cropimg(config.recog.img, scope)):
self.notify_task = True self.notify_task = True
self.notify_operator = True self.notify_operator = True

View file

@ -78,7 +78,7 @@ color = {
"nav_bar": (655, 0), "nav_bar": (655, 0),
"nav_button": (26, 20), "nav_button": (26, 20),
"navigation/activity/entry_ex": (1540, 904), "navigation/activity/entry_ex": (1540, 904),
"navigation/activity/entry_normal": (1030, 972), "navigation/activity/entry_normal": (1656, 676),
"navigation/activity/entry_s": (1709, 804), "navigation/activity/entry_s": (1709, 804),
"navigation/collection/AP-1": (203, 821), "navigation/collection/AP-1": (203, 821),
"navigation/collection/CA-1": (203, 821), "navigation/collection/CA-1": (203, 821),
@ -192,18 +192,18 @@ color = {
"shop/token": (1097, 120), "shop/token": (1097, 120),
"shop/trade_token_button": (15, 998), "shop/trade_token_button": (15, 998),
"shop/trade_token_dialog": (717, 694), "shop/trade_token_dialog": (717, 694),
"sign_in/banner": (96, 468), "sign_in/banner": (132, 278),
"sign_in/box/banner": (166, 593), "sign_in/box/banner": (166, 593),
"sign_in/box/collect": (97, 912), "sign_in/box/collect": (97, 912),
"sign_in/box/complete": (208, 937), "sign_in/box/complete": (208, 937),
"sign_in/collect": (1429, 875), "sign_in/collect": (1493, 289),
"sign_in/headhunting/available": (1251, 949), "sign_in/headhunting/available": (1251, 949),
"sign_in/moon_festival/moon_cake": (1216, 503), "sign_in/moon_festival/moon_cake": (1216, 503),
"sign_in/orundum/banner": (100, 837), "sign_in/orundum/banner": (100, 837),
"sign_in/orundum/choose": (1561, 776), "sign_in/orundum/choose": (1561, 776),
"sign_in/orundum/complete": (1561, 776), "sign_in/orundum/complete": (1561, 776),
"sign_in/orundum/confirm": (1561, 778), "sign_in/orundum/confirm": (1561, 778),
"sign_in/shop/banner": (870, 74), "sign_in/shop/banner": (1155, 109),
"sign_in/shop/max": (1566, 617), "sign_in/shop/max": (1566, 617),
"sign_in/shop/price_black": (1238, 279), "sign_in/shop/price_black": (1238, 279),
"sign_in/shop/price_white": (1258, 237), "sign_in/shop/price_white": (1258, 237),
@ -341,7 +341,7 @@ template_matching = {
"mission_weekly": ((685, 15), (1910, 100)), "mission_weekly": ((685, 15), (1910, 100)),
"mission_weekly_on": ((685, 15), (1910, 100)), "mission_weekly_on": ((685, 15), (1910, 100)),
"navigation/activity/banner_ex": (1644, 941), "navigation/activity/banner_ex": (1644, 941),
"navigation/activity/banner_normal": (1290, 970), "navigation/activity/banner_normal": (1402, 922),
"navigation/activity/banner_s": (1735, 896), "navigation/activity/banner_s": (1735, 896),
"navigation/collection/AP_entry": ((0, 170), (1920, 870)), "navigation/collection/AP_entry": ((0, 170), (1920, 870)),
"navigation/collection/CA_entry": ((0, 170), (1920, 870)), "navigation/collection/CA_entry": ((0, 170), (1920, 870)),
@ -488,14 +488,14 @@ template_matching = {
"sign_in/moon_festival/banner": (704, 92), "sign_in/moon_festival/banner": (704, 92),
"sign_in/shop/0": (1341, 618), "sign_in/shop/0": (1341, 618),
"sign_in/shop/buy": ((1250, 800), (1390, 895)), "sign_in/shop/buy": ((1250, 800), (1390, 895)),
"sign_in/shop/entry": (1694, 443), "sign_in/shop/entry": (99, 677),
"sign_in/shop/insufficient": ((1560, 140), (1920, 210)), "sign_in/shop/insufficient": ((1560, 140), (1920, 210)),
"sign_in/shop/out_of_stock": None, "sign_in/shop/out_of_stock": None,
"sign_in/shop/owned": None, "sign_in/shop/owned": None,
"sign_in/spring_festival/done": None, "sign_in/spring_festival/done": None,
"sign_in/spring_festival/login_day": ((1270, 160), (1460, 980)), "sign_in/spring_festival/login_day": ((1270, 160), (1460, 980)),
"sign_in/task/banner": (645, 27), "sign_in/task/banner": (645, 27),
"sign_in/task/entry": (1682, 186), "sign_in/task/entry": (191, 887),
"skill_collect_confirm": (1164, 837), "skill_collect_confirm": (1164, 837),
"sss/abandon": ((0, 504), (289, 564)), "sss/abandon": ((0, 504), (289, 564)),
"sss/accomplished": (640, 381), "sss/accomplished": (640, 381),