diag_map.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. """diag_map.py — 会话内 dump SC51/800/801 原始帧, 核实协议图名。
  3. 用法: .venv/bin/python diag_map.py [--name 萌新2814]
  4. """
  5. import argparse
  6. import json
  7. import sys
  8. import time
  9. import zlib
  10. import requests as rq
  11. import urllib3
  12. urllib3.disable_warnings()
  13. HERE = __file__.rsplit("/", 1)[0]
  14. sys.path.insert(0, HERE)
  15. import login_996pc as L # noqa: E402
  16. import quest_bot3 as Q # noqa: E402
  17. from encode6bitbuf_final import decode6 # noqa: E402
  18. from combat_bot import log # noqa: E402
  19. ZONE = 14492170
  20. def body_text(body):
  21. for fn in (lambda b: b.decode("utf-8"),
  22. lambda b: "zlib:" + zlib.decompress(b).decode("utf-8"),
  23. lambda b: "e6:" + decode6(b).decode("utf-8")):
  24. try:
  25. return fn(body)
  26. except Exception:
  27. continue
  28. return repr(body[:60])
  29. def main():
  30. ap = argparse.ArgumentParser()
  31. ap.add_argument("--name", default="萌新2814")
  32. args = ap.parse_args()
  33. s = rq.Session()
  34. j, _ = L.do_login(s, "longwu988", "Longwu1988")
  35. assert j.get("code") == 200, j.get("msg")
  36. jwt = j["data"]["token"]
  37. uid = str(j["data"]["userInfo"]["id"])
  38. g, bot = Q.enter_world(s, jwt, uid, ZONE, args.name, 0)
  39. seen = []
  40. orig = bot._dispatch
  41. def wrapped(mid, recog, p1, p2, p3, body):
  42. if mid in (51, 634, 800, 801, 658, 2, 55):
  43. seen.append((mid, recog, p1, p2, p3, body))
  44. return orig(mid, recog, p1, p2, p3, body)
  45. bot._dispatch = wrapped
  46. log(f"出生: map={bot.me.get('mapname')} @({bot.me['x']},{bot.me['y']}) me.map={bot.me.get('map')!r}")
  47. t0 = time.time()
  48. while time.time() - t0 < 5:
  49. bot.pump(0.3)
  50. # 触发任务链传送, 捕获目的图 SC51
  51. if 1 in bot.mission_bodies:
  52. bot.send(3031, 0, 0, 0, bot.sid,
  53. json.dumps(bot.mission_bodies[1], separators=(",", ":")).encode())
  54. bot.send(1011, 0, 0, 0, bot.sid, json.dumps(
  55. {"Act": "@renwu_mov,1", "UserID": "999999999", "index": 999999999},
  56. separators=(",", ":")).encode())
  57. log(">>> 已发 @renwu_mov,1 — 等待传送链帧 ...")
  58. t0 = time.time()
  59. while time.time() - t0 < 8:
  60. bot.pump(0.3)
  61. log(f"--- 地图相关帧 dump ({len(seen)}条) ---")
  62. for mid, recog, p1, p2, p3, body in seen[:30]:
  63. log(f"SC{mid} r={recog} p1={p1} p2={p2} p3={p3} | {body_text(body)[:260]}")
  64. log(f"最终: mapname={bot.me.get('mapname')!r} me.map={bot.me.get('map')!r} @({bot.me['x']},{bot.me['y']})")
  65. g.close()
  66. if __name__ == "__main__":
  67. main()