# -*- coding: utf-8 -*- """ reset_and_stand.py —— 删两个矿工角色 → 重创同名 → quest_bot3 同款进世界 → 开喝药 → 走到矿场总兵(19,23)旁 → 原地站立报告坐标。 进世界完全复用 quest_bot3 的 enter_world(已验证可活的会话链)。 """ import argparse import json import random import sys import time import requests as rq import urllib3 urllib3.disable_warnings() HERE = __file__.rsplit("/", 1)[0] sys.path.insert(0, HERE) import login_996pc as L # noqa: E402 import cq2_pure_enter as P # noqa: E402 from quest_bot3 import enter_world, log # noqa: E402 def main(): ap = argparse.ArgumentParser() ap.add_argument("-u", "--user", default="longwu988") ap.add_argument("-p", "--password", default="Longwu1988") ap.add_argument("--zone", type=int, required=True) ap.add_argument("--name", default="矿工7268") ap.add_argument("--stand-seconds", type=float, default=120) a = ap.parse_args() log("[1/4] HTTP登录...") s = rq.Session() j = None for att in range(5): try: j, _ = L.do_login(s, a.user, a.password) if j.get("code") == 200: break except Exception as e: log(f" 异常({att+1}): {str(e)[:60]}") time.sleep(10) if not j or j.get("code") != 200: raise SystemExit("[!] 登录失败") jwt = j["data"]["token"] uid = str(j["data"]["userInfo"]["id"]) log("[2/4] 删除旧角色(矿工7268/矿工2934)...") from reset_role_lib import delete_roles delete_roles(a.zone, a.user, a.password, ["矿工7268", "矿工2934"]) # 删角落库有延迟, 同名重创需静置(git log: "522 recovery - settle pause") log(" 删角完成, 静置 8s 等落库...") time.sleep(8) log(f"[3/4] quest_bot3 同款进世界, 重创 {a.name}...") g = bot = None for att in range(3): try: g, bot = enter_world(s, jwt, uid, a.zone, a.name, 0) break except SystemExit as e: log(f" 进世界尝试{att+1}: {e}") time.sleep(10) if not bot: raise SystemExit("[!] 进世界失败") try: log(f" 出生: map={bot.me.get('mapname')} @({bot.me['x']},{bot.me['y']})") log(" 开喝药...") st = P.enable_auto_heal(g, sid=bot.sid, want_on=True) if hasattr(P, "enable_auto_heal") else None log(f" 喝药={st}") log("[4/4] 走向矿场总兵(19,23)旁...") n = 0 while not (abs(bot.me["x"] - 19) <= 2 and abs(bot.me["y"] - 23) <= 2) and n < 80 and bot.alive: moved, arrived = bot.walk_step_toward(19, 23) bot.pump(0.4) if not moved: log(f" 走步{n}: 未移动 me=({bot.me['x']},{bot.me['y']})") time.sleep(0.5) n += 1 time.sleep(0.6) log(f" 到位: ({bot.me['x']},{bot.me['y']}) 距(19,23) " f"dx={abs(bot.me['x']-19)} dy={abs(bot.me['y']-23)}") log(f"[站] 原地站立 {a.stand_seconds}s — 角色名【{a.name}】, 请在客户端确认") t_end = time.time() + a.stand_seconds k = 0 while time.time() < t_end and bot.alive: bot.pump(1.0) k += 1 if k % 5 == 0: log(f" t+{k}s @({bot.me['x']},{bot.me['y']}) 心跳={bot.frame_log.get(60000,0)}") log(f"[完] 存活={bot.alive} 帧统计={sorted(bot.frame_log.items(), key=lambda kv: -kv[1])[:10]}") finally: g.close() if __name__ == "__main__": main()