wuzilong 5aadc8ec3a 提交” 1 mês atrás
..
docs 5aadc8ec3a 提交” 1 mês atrás
vendor 5aadc8ec3a 提交” 1 mês atrás
Encode6BitBuf_替换表.bin 5aadc8ec3a 提交” 1 mês atrás
README.md 5aadc8ec3a 提交” 1 mês atrás
combat_bot.py 5aadc8ec3a 提交” 1 mês atrás
cq2_pure_enter.py 5aadc8ec3a 提交” 1 mês atrás
delete_all_roles.py 5aadc8ec3a 提交” 1 mês atrás
diag_heal.py 5aadc8ec3a 提交” 1 mês atrás
diag_map.py 5aadc8ec3a 提交” 1 mês atrás
diag_npc_flow.py 5aadc8ec3a 提交” 1 mês atrás
diag_walk.py 5aadc8ec3a 提交” 1 mês atrás
enable_heal_existing.py 5aadc8ec3a 提交” 1 mês atrás
encode6bitbuf_final.py 5aadc8ec3a 提交” 1 mês atrás
list_roles.py 5aadc8ec3a 提交” 1 mês atrás
login_996pc.py 5aadc8ec3a 提交” 1 mês atrás
login_stand.py 5aadc8ec3a 提交” 1 mês atrás
mine_bot.py 5aadc8ec3a 提交” 1 mês atrás
mir_map.py 5aadc8ec3a 提交” 1 mês atrás
probe_npc_index.py 5aadc8ec3a 提交” 1 mês atrás
quest_bot.py 5aadc8ec3a 提交” 1 mês atrás
quest_bot2.py 5aadc8ec3a 提交” 1 mês atrás
quest_bot3.py 5aadc8ec3a 提交” 1 mês atrás
reset_and_stand.py 5aadc8ec3a 提交” 1 mês atrás
reset_role.py 5aadc8ec3a 提交” 1 mês atrás
reset_role_lib.py 5aadc8ec3a 提交” 1 mês atrás
run_create_role_and_autoheal.py 5aadc8ec3a 提交” 1 mês atrás
run_mine998.py 5aadc8ec3a 提交” 1 mês atrás
run_zone19_create_kill.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander2.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander3.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander4.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander5.py 5aadc8ec3a 提交” 1 mês atrás
wait_wander6.py 5aadc8ec3a 提交” 1 mês atrás
walk_final.py 5aadc8ec3a 提交” 1 mês atrás

README.md

protocol_bot — 传奇纯协议客户端(Python)

迁移自实验工程 传奇_bak(2026-09 实测验证),2026-09-21 在本目录复验通过。 能力:HTTP 登录(极验滑块自动破解)→ 选区 → 创角 → 进游戏 → 开喝药,全程无游戏客户端。 2026-09-22: quest_bot3.py 端到端打通新手任务全流程(等待图→NPC传送→比奇→杀2怪), 42 秒完成,基于"实时虚拟环境"架构(见下)。

quest_bot3 — 推送驱动微缩客户端(虚拟环境架构)

.venv/bin/python quest_bot3.py --zone 14492165 --name <角色> -u z1098210167 -p yang535006 --kill 2
# 删角重创(新手任务重置): .venv/bin/python reset_role.py --zone 14492165 --name <角色> ...

架构原则(对照客户端 recv_loop+Lua 消息订阅): bot = 无渲染的虚拟世界镜像, 收帧泵持续把服务器推送解析进虚拟环境(怪/玩家/NPC/任务/HP), 决策循环每个 节拍(150ms)读最新状态并发反馈帧, 绝不 sleep 失明。

已破译机制(全部实测, 详见 quest_bot3.py 注释):

  • 任务链: SC55 推任务体 → CS3031 回构造(实时body,非模板) → CS1011 @renwu_mov,1 → SC800 传送(body JSON UserID=自己uid; SC801 是他人飞入广播勿混) → CS1010 {UserID:NPC aid(动态,每角色不同), index:35} → 传送比奇(289-293,615-621 杀怪区)
  • 传送 ACK: SC800/SC51 到达即发 CS5012+CS5027(body=协议图名: 比奇'0' 盟重'3' 等待图中文名)+CS5012('cTh'); 不发则服务器不下发该图视野推送(SC10 一帧不来)
  • 怪物双雷达: SC10 进视野(race>1000=怪)+SC14 攻击广播(怪打人时 UserID=怪短ID, X/Y=怪坐标) 补录 — 传送瞬间批量帧里的 SC10 会丢, 雷达互备
  • 怪物移动: SC11/13 = 全体 actor 移动广播(body.UserID 查表更新, Lua 真源 netActorController handle_MSG_SC_ACTOR_WALK)
  • 挂机 = 客户端 AI: @startguaji/CS9102 只是声明, 打怪是客户端行为树 (AutoController: 选怪→走位→CS3014 攻击{skillID:0,targetID:字符串短ID}), bot 复刻此 AI, 0.65s/刀(HitTime)
  • 走路帧: CS3013 跑 p1=dir,p2=起点point(Y<<16|X),p3=sid; CS3011 走 recog=point,p2=dir,p3=起点point; body=地图名(容忍过期缓存)
  • 死亡: SC32 body=死亡actorID(主玩家/怪共用); 自己死→等SC27复活;
  • 必处理帧: SC31(受击HP)/SC53(HP恢复,管道格式); SC881/14表现帧可弃(但14可当雷达)

已知问题: 位置偶发漂移 (1,1) 已修复(两类SC28异常帧: X/Y反序帧按就近解读采信, (0,0)清位帧忽略, run28/30/32/37 四轮验证零漂移); 新手任务怪池有限 — 账号杀满后 该区域不再刷怪(游戏机制, 非bot缺陷), 换号/reset_role 即可; SC14 自ID学习 (攻击回显匹配自身短会话ID, 供SC11自回显精确匹配)已加入, 怪密集场景下生效。

快速使用

cd protocol_bot
.venv/bin/python run_create_role_and_autoheal.py --zone <区ID> [--name 角色名] [--port 8041]
  • 区 ID 来源:https://list-box.dhsf.xqhuyu.com/box_serverlist/206923.txt(state=1 的 serverid)
  • 端口默认自动轮询 8041/8021/8061/8001;游戏端口由 SC525 自动下发
  • 角色名缺省随机"萌新XXXX";角色已存在时自动复用列表内角色(522=名字重复,属正常)

文件说明

文件 职责
run_create_role_and_autoheal.py 入口:登录→创角→进游戏→开喝药→心跳保活60s
login_996pc.py 996盒子 HTTP 登录(RSA+极验v4滑块求解+token 管理)
cq2_pure_enter.py TCP 协议链:2001→529→104→530→100→520→101→521→103→525→CS20 握手→17帧初始化→enable_auto_heal
encode6bitbuf_final.py 协议头 Encode6BitBuf 编解码(算法文档见 docs/)
Encode6BitBuf_替换表.bin 编码替换表(运行时必需,勿删)
vendor/geeked/ 极验 v4 滑块求解器(onnx 模型+签名,来自 GeekedTest)
docs/ui60_初始化模板.json 17 帧初始化之 5277 功能位图模板(缺则服务器静默)
.venv/ Python 3.12,site-packages 符号链接至 传奇_bak/.venv-mac(共享依赖,勿单独删除源)

关键协议备忘

  • 开喝药:CS3199 {"index":109,"act":"@openmianban,23"} → {"index":303,"act":"@chiyao_kaiqi"},回包 zlib 面板中 yd_cy1 控件 but_1.png=on
  • 创角:CS101 JSON(server_name/chr/job/sex/account/sdkid)→ SC521 票据 名/UserID
  • 心跳:CS60000(recog=unix秒),≥2s 间隔
  • 17 帧初始化:1018/1046×4/2020/5026(145B指纹)/5028/5027/5260/1078/1079/5148/5277(415B位图)/1103/1151/6209/6208/5027 — 不发则服务器丢弃 UI 交互
  • 端口陷阱:SC60005≠占线,可能是错端口假响应→换端口重试

依赖(共享自 传奇_bak/.venv-mac)

requests / pycryptodome / pymysql / opencv-headless / numpy / curl_cffi

注意

  • DB_CONFIG(公钥缓存源)在 login_996pc.py,可用环境变量 CQ2DB* 覆盖
  • 测试账号 longwu988(自己注册);token 缓存 token_pc.txt(未迁移,登录自动重取)
  • ⚠️ 仅限学习研究,勿高频调用/勿用于商业用途