| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- # -*- 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()
|