@@ -16,7 +16,7 @@ class AutoFishTask(DNAOneTimeTask, BaseDNATask):
1616 def __init__ (self , * args , ** kwargs ):
1717 super ().__init__ (* args , ** kwargs )
1818 self .name = "自动钓鱼"
19- self .description = "无悠闲全自动钓鱼 (作者 : B站无敌大蜜瓜),如果识别不到鱼条修改配置降低面积要求"
19+ self .description = "无悠闲全自动钓鱼 (原作者 : B站无敌大蜜瓜),如果识别不到鱼条修改配置降低面积要求"
2020
2121 # 默认配置(会被 configs/AutoFishTask.json 覆盖)
2222 self .default_config .update (
@@ -213,6 +213,13 @@ def phase_start(self) -> bool:
213213 logger .info ("检测到fish_chance(授渔以鱼)-> 按下E键使用授渔以鱼抛竿" )
214214 self .stats ["chance_used" ] = self .stats .get ("chance_used" , 0 ) + 1
215215 self .info_set ("授渔以鱼" , self .stats ["chance_used" ])
216+ # 上一轮的鱼被用作鱼饵,不计入轮数
217+ if self .stats ["rounds_completed" ] > 0 :
218+ self .stats ["rounds_completed" ] -= 1
219+ self .info_set ("完成轮数" , self .stats ["rounds_completed" ])
220+ logger .info (
221+ f"上一轮的鱼作为鱼饵,轮数调整为: { self .stats ['rounds_completed' ]} "
222+ )
216223 self .send_key ("e" , down_time = 0.06 )
217224 elif not has_cast_icon :
218225 logger .info ("开始阶段未找到fish_cast,尝试按空格抛竿并等待fish_bite出现" )
@@ -279,8 +286,6 @@ def phase_fight(self) -> bool:
279286
280287 # 硬编码的常量
281288 BAR_MISSING_TIMEOUT = 2.5 # 鱼条丢失超时
282- BAR_STATIC_TIMEOUT = 2.5 # 鱼条静止超时
283- MOVE_THRESHOLD = 5 # 静止判定阈值(像素)
284289 MERGE_GRACE_SECONDS = 0.20 # 合并宽限时间
285290
286291 # 运行时状态
@@ -289,8 +294,6 @@ def phase_fight(self) -> bool:
289294 last_known_icon_y_relative = 0.0
290295
291296 bar_missing_start_time = None
292- last_bar_position = None
293- last_bar_move_time = time .monotonic ()
294297 merge_start_time = None
295298
296299 def set_hold (target_hold : bool ):
@@ -330,27 +333,6 @@ def set_hold(target_hold: bool):
330333 else :
331334 bar_missing_start_time = None
332335
333- # 检查鱼条是否静止
334- if has_bar :
335- if last_bar_position is None :
336- last_bar_position = bar_center
337- last_bar_move_time = now
338- else :
339- distance = (
340- (bar_center [0 ] - last_bar_position [0 ]) ** 2
341- + (bar_center [1 ] - last_bar_position [1 ]) ** 2
342- ) ** 0.5
343- if distance > MOVE_THRESHOLD :
344- last_bar_position = bar_center
345- last_bar_move_time = now
346- elif now - last_bar_move_time >= BAR_STATIC_TIMEOUT :
347- logger .info (
348- f"鱼条静止超过 { BAR_STATIC_TIMEOUT } s -> 溜鱼结束"
349- )
350- return True
351- else :
352- last_bar_position = None
353-
354336 # 主控制逻辑:两层控制系统
355337 if has_bar and bar_rect :
356338 bar_top = bar_rect [1 ]
@@ -473,24 +455,36 @@ def run(self):
473455 # main loop: start -> fight -> end
474456 while True :
475457 try :
476- # 检查是否达到目标轮数
458+ # 检查是否达到目标轮数(在phase_start之前检查,因为可能会遇到授渔以鱼导致轮数减少)
477459 if max_rounds > 0 and self .stats ["rounds_completed" ] >= max_rounds :
478- elapsed_time = time .time () - self .stats ["start_time" ]
479- hours = int (elapsed_time // 3600 )
480- minutes = int ((elapsed_time % 3600 ) // 60 )
481- seconds = int (elapsed_time % 60 )
482-
483- logger .info ("=" * 50 )
484- logger .info (
485- f"✓ 已完成目标轮数: { self .stats ['rounds_completed' ]} 轮"
486- )
487- logger .info (f"✓ 总耗时: { hours :02d} :{ minutes :02d} :{ seconds :02d} " )
488- if self .stats ["rounds_completed" ] > 0 :
489- avg_time = elapsed_time / self .stats ["rounds_completed" ]
490- logger .info (f"✓ 平均每轮: { avg_time :.1f} 秒" )
491- logger .info ("自动钓鱼任务完成!" )
492- logger .info ("=" * 50 )
493- break
460+ # 需要再执行一次phase_start来检查是否有授渔以鱼
461+ # 如果有授渔以鱼,上一轮不计数,需要继续
462+
463+ # 临时检查授渔以鱼
464+ has_chance_icon , _ = self .find_fish_chance ()
465+ if has_chance_icon :
466+ logger .info ("检测到授渔以鱼,上一轮不计数,继续钓鱼..." )
467+ # 轮数会在phase_start中自动减1
468+ else :
469+ # 确实完成了目标轮数
470+ elapsed_time = time .time () - self .stats ["start_time" ]
471+ hours = int (elapsed_time // 3600 )
472+ minutes = int ((elapsed_time % 3600 ) // 60 )
473+ seconds = int (elapsed_time % 60 )
474+
475+ logger .info ("=" * 50 )
476+ logger .info (
477+ f"✓ 已完成目标轮数: { self .stats ['rounds_completed' ]} 轮"
478+ )
479+ logger .info (
480+ f"✓ 总耗时: { hours :02d} :{ minutes :02d} :{ seconds :02d} "
481+ )
482+ if self .stats ["rounds_completed" ] > 0 :
483+ avg_time = elapsed_time / self .stats ["rounds_completed" ]
484+ logger .info (f"✓ 平均每轮: { avg_time :.1f} 秒" )
485+ logger .info ("自动钓鱼任务完成!" )
486+ logger .info ("=" * 50 )
487+ break
494488
495489 if not self .phase_start ():
496490 self .sleep (1.0 )
0 commit comments