probe_fresh.py.bak 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """M2超速惩罚实验: 全新角色 + 1.5s 保守步距 + 只走 8 步。"""
  2. import logging, random, sys, time
  3. sys.path.insert(0, "src")
  4. logging.basicConfig(level=logging.INFO, stream=sys.stdout, format="%(asctime)s %(message)s")
  5. log = logging.getLogger("probe")
  6. import requests
  7. from pbot.bot.runner import pump
  8. from pbot.game.session import enter_world
  9. from pbot.login.box_client import enter_game_client, login
  10. from pbot.transport.gateway import create_role_needed, login_gate_with_retry
  11. from pbot.config import Account, RoleSpec
  12. acct = Account(username="longwu988", password="Longwu1988")
  13. http = requests.Session(); http.trust_env = False; http.verify = False
  14. jwt, uid = login(acct)
  15. _ = enter_game_client(http, jwt, 14504562)
  16. role = create_role_needed(RoleSpec(name="")) # 列表最后一个或新建
  17. key32, sid, real, ticket, gport = login_gate_with_retry(14504562, jwt, uid, role, (8041,8021,8061,8001))
  18. log.info(f"角色={real} sid={sid}")
  19. stop = [False]
  20. conn, world, updater = enter_world(14504562, real, ticket, sid, gport, uid, stop=stop)
  21. log.info(f"SC51位 map={world.me.map_name!r} @({world.me.x},{world.me.y})")
  22. # 静置 15s 洗计数(walk_final:278 实证)
  23. t0 = time.time()
  24. while time.time() - t0 < 15:
  25. pump(conn, world, updater, 0.3)
  26. log.info(f"静置后 @({world.me.x},{world.me.y})")
  27. confirmed = rejected = 0
  28. heading = 2
  29. t_end = time.time() + 40
  30. while time.time() < t_end and confirmed < 6 and rejected < 8:
  31. frames = pump(conn, world, updater, 0.1)
  32. for f in frames:
  33. if f.msg_id == 1 and f.tail == 817:
  34. confirmed += 1
  35. log.info(f" << SC1 ★确认 #{confirmed} @({f.recog},{f.p1}) dir={f.p2}")
  36. elif f.msg_id == 28 and f.p3 != 32368232:
  37. rejected += 1
  38. log.info(f" << SC28 拒 @({f.recog},{f.p1}) dir={f.p2}")
  39. x, y = world.me.x, world.me.y
  40. if confirmed + rejected == 0:
  41. pass # 首步立即发
  42. time.sleep(1.5)
  43. _ = conn.send_frame(3011, 0, heading, (y << 16) | x, sid,
  44. (world.me.map_name or "等待地图").encode())
  45. log.info(f"[试] ({x},{y}) d{heading} 确认={confirmed} 拒={rejected}")
  46. time.sleep(1.5)
  47. log.info(f"结束 @({world.me.x},{world.me.y}) 确认={confirmed} 拒={rejected}")
  48. stop[0] = True; conn.close()