| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- # -*- coding: utf-8 -*-
- """
- login_stand.py —— 最小登录验证: 复用角色 → 进世界 → 开喝药 → 原地站立60s(只心跳+收帧)。
- 每5s报一次坐标。用于诊断"是否真实在线+位置正确"。
- """
- 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 combat_bot import (CombatBot, enter_game_gate_v2, # noqa: E402
- send_init_frames, log)
- 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=None)
- ap.add_argument("--seconds", type=float, default=60)
- a = ap.parse_args()
- name = a.name or ("矿工" + str(random.randint(1000, 9999)))
- log("[1/5] 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(8)
- if not j or j.get("code") != 200:
- raise SystemExit("[!] 登录失败")
- jwt = j["data"]["token"]
- uid = str((j["data"].get("userInfo") or {}).get("id") or P.UID)
- log(f"[2/5] 选区 {a.zone}...")
- j2 = None
- for att in range(5):
- try:
- j2 = P.enter_game(s, jwt, a.zone)
- if j2.get("code") == 200:
- break
- except Exception as e:
- log(f" 异常({att+1}): {str(e)[:60]}")
- time.sleep(8)
- if not j2 or j2.get("code") != 200:
- raise SystemExit("[!] enter_game 失败")
- log(f"[3/5] 登录服(复用 {name})...")
- ok = None
- for pt in (8041, 8021, 8061, 8001, 8063, 8043):
- try:
- r = P.login_gate(a.zone, jwt, name, pt, uid)
- if r and r[0]:
- ok = r
- break
- except SystemExit as e:
- log(f" 端口{pt}: {e}")
- except Exception as e:
- log(f" 端口{pt}: {str(e)[:50]}")
- if not ok:
- raise SystemExit("[!] 所有端口失败")
- key32, sid, rname, tkey, gp = ok
- log(f" 角色={rname} 端口={gp}")
- log("[4/5] 进世界...")
- g = enter_game_gate_v2(a.zone, rname, tkey, sid, gp, uid)
- bot = CombatBot(g, sid, rname)
- P.heartbeat_loop(g, sid, sender=bot.send)
- t0 = time.time()
- while time.time() - t0 < 10:
- bot.pump(0.3)
- if 658 in bot.frame_log:
- log(" SC658 ✓")
- break
- send_init_frames(bot, uid)
- for _ in range(24):
- bot.pump(0.5)
- if bot.me["id"] and bot.me.get("mapname"):
- break
- if not bot.me["id"]:
- g.close()
- raise SystemExit("[!] 未收到 SC50")
- log(f" 主玩家 uid尾号={str(bot.me.get('uid',''))[-6:]} @({bot.me['x']},{bot.me['y']}) map={bot.me.get('mapname')}")
- log("[5/5] 开喝药...")
- st = P.enable_auto_heal(g, sid, want_on=True)
- log(f" 喝药状态读数={st}")
- log(f"[站] 原地站立 {a.seconds}s, 每5s报坐标(角色名请找: {rname})")
- t_end = time.time() + a.seconds
- n = 0
- while time.time() < t_end and bot.alive:
- evs = bot.pump(1.0)
- n += 1
- if n % 5 == 0:
- log(f" t+{n}s 站位({bot.me['x']},{bot.me['y']}) 心跳收发={bot.frame_log.get(60000,0)} 视野actor={len(bot.npcs)+len(bot.monsters)}")
- log(f"[完] 存活={bot.alive} 收帧统计={sorted(bot.frame_log.items(), key=lambda kv: -kv[1])[:10]}")
- g.close()
- if __name__ == "__main__":
- main()
|