MCPcopy
hub / github.com/MAA1999/M9A / analyze

Method analyze

agent/custom/reco/auto_promotion.py:253–396  ·  view source on GitHub ↗
(
        self,
        context: Context,
        argv: CustomRecognition.AnalyzeArg,
    )

Source from the content-addressed store, hash-verified

251 cls._seen_non_map = False
252
253 def analyze(
254 self,
255 context: Context,
256 argv: CustomRecognition.AnalyzeArg,
257 ) -> CustomRecognition.AnalyzeResult | RectType | None:
258
259 try:
260 params = parse_params(argv.custom_recognition_param)
261 except ValueError as e:
262 logger.error(f"[AutoPromotion] 导航参数解析失败({e}),使用默认值")
263 params = {}
264 query = params.get("query", "nav")
265 self.apply_param_overrides(params)
266
267 target = self.CARD_NAME.strip()
268
269 if query == "nav":
270 if not target or target == "当前页面":
271 return None
272 APCardFinder.reset_nav_state()
273 logger.info(f"[AutoPromotion] 开始导航至「{target}」")
274 return CustomRecognition.AnalyzeResult(box=[0, 0, 0, 0], detail={})
275
276 if query == "arrived":
277 # 必须先离开过地图页再回到地图页才算到达:启动时若已在某张
278 # 地图页(可能是别的活动的),直接判到达会在错误的地图上推图
279 if not is_stage_map(context, argv.image):
280 APCardFinder._seen_non_map = True
281 return None
282 # 活动入口界面(有「步入剧情」按钮)被 APExploreAnchorOCR 误判为地图页时的防御:
283 # 入口界面不是关卡地图,需先点「步入剧情」才进入地图
284 if is_hit(context.run_recognition("AP_NavStoryEnter", argv.image)):
285 APCardFinder._seen_non_map = True
286 return None
287 # 卡片详情页(有「活动正篇/主线正篇」按钮)被 APStageNumberOCR 误判为地图页时的防御:
288 # 详情页标题含活动编号(如「77号往事」),OCR 把「77」误读为关卡号;
289 # 需先点「活动正篇」才进入关卡地图
290 if is_hit(context.run_recognition("AP_NavMainEntry", argv.image)):
291 APCardFinder._seen_non_map = True
292 return None
293 if not APCardFinder._seen_non_map:
294 return None
295 logger.info("[AutoPromotion] 已到达关卡地图页,导航完成")
296 APCardFinder.reset_nav_state()
297 return CustomRecognition.AnalyzeResult(box=[0, 0, 0, 0], detail={})
298
299 if query == "pv":
300 if APCardFinder._pv_taps >= self.PV_TAP_LIMIT:
301 return None
302 detail = context.run_recognition("APNavFullOCR", argv.image)
303 tokens = [r for r in ocr_results(detail) if len(r.text.strip()) >= 2]
304 if len(tokens) > self.PV_MAX_TOKENS:
305 return None
306 APCardFinder._pv_taps += 1
307 logger.info(
308 f"[AutoPromotion] 疑似 PV 播放中(第 {APCardFinder._pv_taps} 次),"
309 "点击唤出跳过按钮"
310 )

Callers

nothing calls this directly

Calls 10

_is_image_pageMethod · 0.95
_card_titlesMethod · 0.95
_title_matchMethod · 0.95
_signature_textMethod · 0.95
parse_paramsFunction · 0.90
is_hitFunction · 0.90
ocr_resultsFunction · 0.90
is_stage_mapFunction · 0.85
apply_param_overridesMethod · 0.80
reset_nav_stateMethod · 0.80

Tested by

no test coverage detected