# -*- coding: utf-8 -*- """diag_map.py — 会话内 dump SC51/800/801 原始帧, 核实协议图名。 用法: .venv/bin/python diag_map.py [--name 萌新2814] """ import argparse import json import sys import time import zlib 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 quest_bot3 as Q # noqa: E402 from encode6bitbuf_final import decode6 # noqa: E402 from combat_bot import log # noqa: E402 ZONE = 14492170 def body_text(body): for fn in (lambda b: b.decode("utf-8"), lambda b: "zlib:" + zlib.decompress(b).decode("utf-8"), lambda b: "e6:" + decode6(b).decode("utf-8")): try: return fn(body) except Exception: continue return repr(body[:60]) def main(): ap = argparse.ArgumentParser() ap.add_argument("--name", default="萌新2814") args = ap.parse_args() s = rq.Session() j, _ = L.do_login(s, "longwu988", "Longwu1988") assert j.get("code") == 200, j.get("msg") jwt = j["data"]["token"] uid = str(j["data"]["userInfo"]["id"]) g, bot = Q.enter_world(s, jwt, uid, ZONE, args.name, 0) seen = [] orig = bot._dispatch def wrapped(mid, recog, p1, p2, p3, body): if mid in (51, 634, 800, 801, 658, 2, 55): seen.append((mid, recog, p1, p2, p3, body)) return orig(mid, recog, p1, p2, p3, body) bot._dispatch = wrapped log(f"出生: map={bot.me.get('mapname')} @({bot.me['x']},{bot.me['y']}) me.map={bot.me.get('map')!r}") t0 = time.time() while time.time() - t0 < 5: bot.pump(0.3) # 触发任务链传送, 捕获目的图 SC51 if 1 in bot.mission_bodies: bot.send(3031, 0, 0, 0, bot.sid, json.dumps(bot.mission_bodies[1], separators=(",", ":")).encode()) bot.send(1011, 0, 0, 0, bot.sid, json.dumps( {"Act": "@renwu_mov,1", "UserID": "999999999", "index": 999999999}, separators=(",", ":")).encode()) log(">>> 已发 @renwu_mov,1 — 等待传送链帧 ...") t0 = time.time() while time.time() - t0 < 8: bot.pump(0.3) log(f"--- 地图相关帧 dump ({len(seen)}条) ---") for mid, recog, p1, p2, p3, body in seen[:30]: log(f"SC{mid} r={recog} p1={p1} p2={p2} p3={p3} | {body_text(body)[:260]}") log(f"最终: mapname={bot.me.get('mapname')!r} me.map={bot.me.get('map')!r} @({bot.me['x']},{bot.me['y']})") g.close() if __name__ == "__main__": main()