|
|
@@ -1,8 +1,12 @@
|
|
|
-"""T3 — 任务指引→天然洞穴寻图杀怪 20(驻留洞穴, 不点任务跳转)。"""
|
|
|
+"""T3 — 任务指引→天然洞穴寻图杀怪 20(昨天验证的 AutoFight 模式)。
|
|
|
+
|
|
|
+传送链: KillBehavior renwu_mov,2(任务指引 → 天然洞穴一层, 全随机落点);
|
|
|
+战斗: AutoFightBehavior(d011 墙格先验 + 贴身出刀 + 低血逃跑)。
|
|
|
+洞穴是副本图: 死亡回盟重 → 轮次循环走任务链/传送回洞续杀。
|
|
|
+"""
|
|
|
from __future__ import annotations
|
|
|
|
|
|
-import sys
|
|
|
-from pathlib import Path
|
|
|
+import time
|
|
|
|
|
|
from pipeline.ctx import PipelineContext, TaskResult
|
|
|
|
|
|
@@ -10,27 +14,48 @@ TASK_TITLE = "T3 天然洞穴杀怪20"
|
|
|
|
|
|
KILL_TARGET = 20
|
|
|
CAVE_MAP = "天然洞穴一层"
|
|
|
-_SCRIPTS = str(Path(__file__).resolve().parents[2] / "scripts")
|
|
|
+_MAX_ROUNDS = 8
|
|
|
|
|
|
|
|
|
def run_task(ctx: PipelineContext) -> TaskResult:
|
|
|
- """进洞驻留杀怪; 达标且终图在洞穴才算成功。"""
|
|
|
- if _SCRIPTS not in sys.path:
|
|
|
- sys.path.insert(0, _SCRIPTS)
|
|
|
- from run_juece13_cave30_v2 import CaveStayKillBehavior
|
|
|
-
|
|
|
- from pbot.bot.runner import run
|
|
|
-
|
|
|
- baseline = ctx.world.kills
|
|
|
- goal = baseline + KILL_TARGET
|
|
|
- bh = CaveStayKillBehavior(sid=ctx.sid, kill_target=goal,
|
|
|
+ """进洞(renwu 链) → AutoFight 轮次杀满 20 只增量。"""
|
|
|
+ import sys
|
|
|
+ from pathlib import Path
|
|
|
+
|
|
|
+ scripts = str(Path(__file__).resolve().parents[2] / "scripts")
|
|
|
+ if scripts not in sys.path:
|
|
|
+ sys.path.insert(0, scripts)
|
|
|
+ from run_juece13_wugong_autofight import AutoFightBehavior
|
|
|
+
|
|
|
+ from pbot.bot.kill import KillBehavior
|
|
|
+ from pbot.bot.pathfind import load_walls_from_map
|
|
|
+ from pbot.bot.runner import pump, run
|
|
|
+
|
|
|
+ root = Path(__file__).resolve().parents[2]
|
|
|
+ walls = load_walls_from_map(str(root / "assets/maps/d011.map"))
|
|
|
+ total = 0
|
|
|
+ for rnd in range(1, _MAX_ROUNDS + 1):
|
|
|
+ if ctx.world.me.map_name != CAVE_MAP:
|
|
|
+ ctx.log.info("[T3] 第%d轮 进洞(当前 %s)", rnd,
|
|
|
+ ctx.world.me.map_name)
|
|
|
+ bh = KillBehavior(sid=ctx.sid, kill_target=0,
|
|
|
renwu_act="renwu_mov,2", allow_reroll=True)
|
|
|
- result = run(ctx.conn, ctx.world, ctx.updater, bh,
|
|
|
- duration_s=max(1500.0, KILL_TARGET * 75.0))
|
|
|
- killed = ctx.world.kills - baseline
|
|
|
- ok = killed >= KILL_TARGET and ctx.world.me.map_name == CAVE_MAP
|
|
|
- ctx.log.info("[T3] result=%s 击杀=%d/%d map=%s", result.value, killed,
|
|
|
- KILL_TARGET, ctx.world.me.map_name)
|
|
|
- if ok:
|
|
|
- return TaskResult.done(f"洞穴击杀 {killed}/{KILL_TARGET}")
|
|
|
- return TaskResult.fail(f"{killed}/{KILL_TARGET} map={ctx.world.me.map_name}")
|
|
|
+ r = run(ctx.conn, ctx.world, ctx.updater, bh, duration_s=300.0)
|
|
|
+ if ctx.world.me.map_name != CAVE_MAP:
|
|
|
+ ctx.log.warning("[T3] 传送失败 result=%s — 3s 重试", r.value)
|
|
|
+ time.sleep(3.0)
|
|
|
+ continue
|
|
|
+ time.sleep(3.0)
|
|
|
+ _ = pump(ctx.conn, ctx.world, ctx.updater, 2.0)
|
|
|
+ need = KILL_TARGET - total
|
|
|
+ af = AutoFightBehavior(sid=ctx.sid, map_name=CAVE_MAP, walls=walls,
|
|
|
+ farthest_fn=None, kill_goal=need)
|
|
|
+ r = run(ctx.conn, ctx.world, ctx.updater, af,
|
|
|
+ duration_s=max(600.0, need * 60.0))
|
|
|
+ total += af.kills
|
|
|
+ ctx.log.info("[T3] 第%d轮 result=%s 轮杀=%d 累计=%d/%d", rnd,
|
|
|
+ r.value, af.kills, total, KILL_TARGET)
|
|
|
+ if total >= KILL_TARGET:
|
|
|
+ return TaskResult.done(f"洞穴击杀 {total}/{KILL_TARGET}")
|
|
|
+ return TaskResult.fail(f"{total}/{KILL_TARGET} 轮次耗尽 "
|
|
|
+ f"map={ctx.world.me.map_name}")
|