This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

116 lines
6.5 KiB
JSON
Vendored
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"_说明": [
"★ 这是 AnantaUnifiedLoader 的【最小依赖副本】,只带两个模块:bowling(保龄球瓶)+ balloon(气球)。",
" 其余通道(A 户外 gadget 网格 / B 场景物品网格 / D 地铁座位 / E 室内扇区 / F 显式摆放)",
" **服务端已经接管**,注入器再开就是白刷负载,所以这里**一个都不放**。",
" (addbtn / settingsfix 也一并去掉:addbtn 已降级为手动兜底,settingsfix 是纯手动 RPC。)",
"",
"⛑ 改动这里的 enabled 之后要**重启本加载器**才生效(config 只在启动时读一次)。",
"⛑⛑ balloon 依赖服务端写的 %LOCALAPPDATA%\\AnantaBalloon\\balloon_push.json(GameRouter.Balloon.cs:1140-1159)。",
" ★ 2026-09-29 修复:balloon_fix.js:3417 的 PUSH_PATHS 默认是作者机器的 D:\\Ananta\\gym_tools\\...,",
" 原 exe 会在装载时把这一行整个改写成本机路径,**我们漏了这步** ⇒ agent 读不到文件 ⇒ pushN 恒 0。",
" 现在由 loader_common.apply_balloon_paths() 在 create_script 前改写(js 本身保持与上游逐字节一致)。"
],
"_attachGate说明": [
"★★ 为什么要有这道闸门(2026-09-29,响应用户『以前有注入器得先进入世界再启动』的担心):",
" bowling_agent.js:5547 的 Il2Cpp.perform **没有重试** —— ",
" var blob = bfClass('LX6.Item.SceneItemBlob');",
" if (!blob) { sendlog('ERR: SceneItemBlob not found'); return; }",
" 拿不到类就**永久放弃**,直到重新 attach 才会再试。所以『游戏刚起就挂』是有风险的。",
" 解决办法:先看服务端日志确认玩家已经进世界,再 attach —— 复现你手动『进世界→再开加载器』这条已验证的路径。",
"",
" mode=serverLog:轮询 <服务端>/logs/ 里**最新**那份 console-*.log,只扫**本次启动之后新增的字节**,",
" 命中 markers 里任意一条即放行。⛑ 只扫新增字节很重要 —— 否则会把上一局的历史内容当成『已进世界』。",
" mode=process :不做闸门,Ananta.exe 一出现就 attach(老行为)。排查时用它。",
" 超时(timeoutSec)到了还没命中 ⇒ 按 fallback 处理(attachAnyway = 照样挂,只是打一条 warn)。",
"",
" markers 选的都是『只有 world-ready 之后才会打』的行:",
" [WORLD-V7] ready → ★ 最准的 world-ready,比 RESTOCK 早约 26 秒(2026-09-29 实测)",
" [RESTOCK] raid=.. 进入格子 → PropRestock 按格子推进",
" [GADGET-GRID] push group → 户外 gadget 网格(★ 该循环只在 world-ready 起,见硬规则 234)",
" [SCENE-ITEM-GRID] push group → 场景物品网格",
" 三条全关(服务端 world.content 全 false)时闸门会走超时兜底,不会把你卡死。"
],
"attachGate": {
"mode": "serverLog",
"serverLogDir": "../../logs",
"serverLogGlob": "console-*.log",
"markers": [
"[WORLD-V7] ready",
"[RESTOCK] raid=",
"[GADGET-GRID] push group",
"[SCENE-ITEM-GRID] push group"
],
"timeoutSec": 900,
"fallback": "attachAnyway",
"pollSec": 1.0,
"_delayAfterMarkerSec说明": [
"★ 2026-09-30:命中 marker 后**再等 N 秒**才 attach —— 命中瞬间正是客户端",
" 「进世界黑屏加载」的爆发期,此刻 attach(V8 编译 + Il2Cpp 域遍历 + 热路径挂 hook)",
" 会把客户端钉死在黑屏上,直到注入器断开才放行。等爆发期过了再挂则无感。",
" 代价:进世界后头 N 秒没注入器(走到保龄球馆/气球区远不止 30 秒,无影响)。"
],
"delayAfterMarkerSec": 30
},
"_armedGuard说明": [
"★★ 第二道保险:闸门只保证『时机对』,不保证 hook 真装上。",
" 所以 attach 之后持续轮询各模块的 bfStatus.armed:",
" armed=true → hook 已装上,正常(tpl=false 是正常的,那只是还没拿到模板,不要重挂)",
" armed=false → 说明脚本里 return 掉了(多半是类没找到)⇒ 等 maxWaitSec 后**主动重挂**",
" 重挂会先优雅卸载再重新 attach,最多连试 maxAttempts 次,之后退避到 backoffSec 再试,不无限刷。"
],
"armedGuard": {
"enabled": true,
"maxWaitSec": 60,
"recheckEverySec": 10,
"maxAttempts": 5,
"backoffSec": 120
},
"groups": {
"_说明": [
"★★ 2026-10-01 新增:**分组开关** —— 每个模块用 `\"group\": \"xxx\"` 声明组别,这里整组一起开关。",
" 改布尔值即可(改完**重启加载器**生效,config 只在启动时读一次)。",
" 目前只有 `minigame` 一组(bowling 保龄球瓶 + balloon 气球)。",
" ⛔ `traffic` 组(vehicle_go.js)已于 2026-10-01 晚**整组删除**:那条思路 hook",
" `AetherVehicleViewManager:CheckShouldNotUseGo` 实机 8 探针全 0 命中、类根本没在用;",
" 车流改走服务端 `trafficCruiseDrive`(SyncAssignVehicleAITask + Cruise 参数)。",
"⛑ 与每个模块的 enabled、命令行 --no 是**叠加**关系(任一处关掉就不挂)。",
"⛑⛑ 同一时刻**只能有一个 frida 会话**挂在 Ananta.exe 上(两个 = 游戏必崩)——",
" 所以「拆分」是同一个进程内的模块取舍,不是开两个加载器,别去复制第二份目录。"
],
"minigame": true
},
"modules": [
{
"name": "bowling",
"group": "minigame",
"file": "modules/bowling_agent.js",
"enabled": true,
"desc": "通道 C 补表类 —— 保龄球球瓶(服务端没有对应 S2C,只能注入端补)",
"drive": [
{
"rpc": "bfStatus",
"everySec": 30.0
}
],
"statusRpc": [
"bfStatus"
],
"_判据": "bfStatus 里 armed=true 才算 hook 装上;tpl=true 才算拿到球瓶模板。tpl=false 时站进保龄球馆让 AOI 表加载一次。"
},
{
"name": "balloon",
"group": "minigame",
"file": "modules/balloon_fix.js",
"enabled": true,
"desc": "通道 C 补表类 —— 打气球的气球本体(需服务端同机写 side-channel)",
"drive": [],
"statusRpc": [
"bfStatus"
],
"_判据": "bfStatus 里 armed=true;pushN 是服务端推送的条目数(>0 才算读到 side-channel)。"
}
],
"statusPollSec": 30.0
}