# -*- coding: utf-8 -*- """ enable_heal_existing.py —— 登录 → 连入已存在角色 → 开启喝药 → 保活 用法: .venv/bin/python enable_heal_existing.py --name 角色名 [--zone 区ID] """ import argparse import os import socket import sys import threading import time import requests as rq import urllib3 urllib3.disable_warnings() HERE = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, HERE) import login_996pc as L # noqa: E402 import cq2_pure_enter as P # noqa: E402 from combat_bot import enter_game_gate_v2, log # noqa: E402 ZONE_19 = 14504561 # 逐鹿19区 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, default=ZONE_19) ap.add_argument("--name", default="萌新4567") ap.add_argument("--port", type=int, default=0) args = ap.parse_args() # 1. 登录 log(f"[1/5] 登录 {args.user} ...") s = rq.Session() j, _ = L.do_login(s, args.user, args.password) if j.get("code") != 200: raise SystemExit(f"[!] 登录失败: {j.get('msg')}") jwt = j["data"]["token"] uid = (j["data"].get("userInfo") or {}).get("id") or P.UID log(f" uid={uid}") # 2. EnterGameClient (zone) log(f"[2/5] EnterGameClient(zone={args.zone}) ...") r = P.enter_game(s, jwt, args.zone) if r.get("code") != 200: raise SystemExit(f"[!] 进区失败: {r.get('msg')}") # 3. 登录服握手 (重用已有角色) log(f"[3/5] 登录服握手 (重用角色 {args.name})...") ports = [args.port] if args.port else [8041, 8021, 8061, 8001] key32 = sid = tkey = game_port = None got_name = None for pt in ports: try: key32, sid, rname, tkey, game_port = P.login_gate( args.zone, jwt, args.name, pt, uid) if key32: got_name = rname log(f" 登录端口={pt} 角色={rname} 游戏端口={game_port}") break except SystemExit as e: log(f" 端口{pt}失败: {e}") except Exception as e: log(f" 端口{pt}失败: {str(e)[:80]}") if not key32: raise SystemExit("[!] 所有候选端口失败") name = got_name or args.name # 4. 连接游戏服 log(f"[4/5] 连接游戏服 (v2)...") g = enter_game_gate_v2(args.zone, name, tkey, sid, game_port, uid) # 5. 开喝药 log(f"[5/5] 开启自动喝药 ...") state = P.enable_auto_heal(g, sid, want_on=True) log(f" 喝药状态: {state} ✓ 已开启" if state == "on" else f" 喝药状态: {state} ⚠️ 请检查") # 心跳保活 lock = threading.Lock() P.heartbeat_loop(g, sid, lock) log("[完成] 喝药开关已开启, 心跳保活中 (Ctrl+C 退出)...") # 让用户手动验证 try: while True: time.sleep(60) # 周期性确认喝药状态 new_state = P.game_action(g, sid, "@chiyao_kaiqi", 303, 901, wait=1.5) log(f" [心跳] 喝药状态: {new_state}") except KeyboardInterrupt: log("退出") if __name__ == "__main__": main()