快捷功能
4 张卡场景切换
发放全道具
说明
发放全武器:解锁全部武器,游戏内通过武器轮盘装备。
发放全道具:每个道具只占一个格子,重复点击会把已有格子补到上面填的数量。
发放全货币:金币 / 钻石 / 绑定钻三种钱包货币各自补到 999 万(已 ≥ 该数的币种不会重复发放)。
⛑️ 钱包货币不进背包——塞进背包会让 HUD 与背包显示不一致,所以这三种是被道具发放主动跳过的,只能从「发放全货币」走钱包通道。
三者都会写入玩家存档,重登后仍在。
生成敌人(敌对单位)
说明
注意同名陷阱:黑金节奏手 有 20+ 条同名记录,按名字选必错,只有精确 Id 可用。
同名同模型的重复项已折叠为最小 ID,在「或输入ID」填被折叠的 ID 可精确生成。
生成载具
说明
两条生成路径走的是同一条命令 /api/vehicle/spawn,只是飞行 / 水上多带一个 force:true 绕过车队白名单。
「进入 / 离开」与下面的调试输出框对两种生成方式共用。
飞行/水上载具需要合适地形(船要水面,飞机要开阔空域)。走近按 F 登机。
角色、时间和天气
3 张卡时间与天气
切换主控角色
说明
服务端直切,不切场景、不播换人演出,目标直接出现在你当前位置。
名单是 roster 全部角色,含 CanJoin=false 的剧情角色 —— 这些在 Z 轮盘里是灰的,只能从这里切。
资源不全的角色切过去会 T-pose 或无武器,属正常,换回即可。
角色日程
传送落点 / 状态判读
「传送过去」会落在角色斜后方约 7 米并转向面向他,不会贴在脸上。 状态栏写「走近才出现」= 还没进 260 m 的放出范围。
职业和独立玩法
8 张卡Seymour 大停电
这条链怎么走 / 怎么看成功
服务端只做三件事:① 发任务图 SyncPlayerLoadTaskSpoonDebug(60002222, 34)
② 用 SyncGadgetAOIAddAndRemove 放下控制器 Gadgets_Hacker_Tetris
(pathId 1166913245,GraphId 36003094)③ 回答 AskStart 的 deadline、
在 Report 时推那一下 Creation 56860922。
灭灯、广告牌换肤、俄罗斯方块 UI 全是客户端原生图自己的事,服务端不演。
这次特意没做 Lua 下发:donor 靠 SyncDoToLuaMaster(45437825) 帮玩家按那个按钮,
我们没实现那条 GATE 通道。所以刷完控制器后服务端就停手,等客户端自己触发。
官方玩法 = 对着广告牌骇入(2026-09-23 实测定论):走到广告牌前 → 鼠标中键骇入
AskHack(44) → 城市停电 → 在广告牌上玩俄罗斯方块。所以控制器必须刷在
广告牌坐标上,骇入交互点才落在牌子本身。
⛑️ 别刷在玩家脚下:那会得到「距离恒为 0 ⇒ 站哪都能骇入」的假象(实测过)。
⭐ 落点 = 屏幕正中心(用户定):面板给的三个框是控制器坐标,
默认 2001.48 / 70 / 2287.69 = 官方牌 mall006a 屏幕的中心。人不要传那里 —— 70 m 高空;
「人传过去」永远走 BO_SPOTS[*].l(人行道点 1992.47,-0.01,2313.44)。
⚠️ 屏幕在高空 ⇒ 骇入交互可能超出射程。按不到就点「退回牌子脚下」把控制器放回地面。
⛔ donor §6.3 的 Position=(0,0,0) 已被实测否掉 —— 交互点会在 4 km 外。
结果读法:ok waiting-for-interact = 控制器已被客户端 ack,现在轮到客户端出牌。
controller-ack-timeout = 20 秒内没 ack,去 Player.log 找 deserialize failed。
通缉系统(警车版)
这条链怎么走 / 目前能干什么
涨犯罪值(服务端自己记,不吃客户端任何犯罪上报):打中 NPC +10、击杀 +60;
阈值 50/100/200/400/800 ⇒ 1~5 星,星级一变就推
SyncPlayerCrimeLevel(68841232) 刷 HUD 星数。
出警:按星级刷 1~3 台真警车(81007029 / 81007078 / 81004027),
落在玩家背后 30~54 m;追人是客户端自己的车辆 AI,
玩家在车上时额外发 SyncPoliceDispatchVehicleChase(68586100) 咬住那台车。
结算:逃脱 等级 × 5000 入账,被捕 等级 × 2500 罚款。
自动判据(服务端真信号):通缉持续满 90 s ⇒ 自动逃脱;玩家倒地 ⇒ 自动被捕。
⛔ 这一版没有步行警员:捐赠端那半靠它自己的 crowd-agent 管线,本方没有,
而且它那份日志早于它自己的最后一次改动 ⇒ 那半根本没被实机验证过,不照抄。
⛔ 不接官方犯罪通道:SyncAgentCrimeAdd(68831313) /
ReportPoliceCrimeEvent(67146776) / GmAddCrimeValue(69946581) 全都没碰,
代价是「只有服务端认可的行为会涨值」,好处是不会踩官方那套没摸清的帧时序。
⛔ 也没有犯罪任务链(商店抢劫 / 偷车)—— 那半依赖本方完全没有的任务状态物件。
怎么验:面板点「设为 3 星」⇒ 游戏里背后应当冒出 3 台警车并追过来;点「判定被捕」⇒
推 SyncPoliceBeginArrest(68839124) 并扣钱。日志搜 [WANTED]。
势力入侵(嘉姆 · 占领地盘)
说明
官方那套「操控嘉姆占敌方地盘」拆成三步,本面板把它们串起来;
⛑ 不代切角色 —— 请先自己在角色界面切到嘉姆(spiritId 15020989)。
两个随从(2026-10-01 改过)= TAB 轮盘实际会下发的那两个槽:
slot 10520000 → 40651922 晴、slot 10520017 → 40155016 盖斯;
原来那两个 40651920/40651921 的解锁条件是「成立犬魔社」,玩家没解锁,轮盘里压根不出现。
⛑ 随从没有血条、不会主动出手(模板无 ShowHPBar/InitWeaponId、attacks=none),
生成成功时只会站在你旁边 —— 日志里能看到 AskInteractCmd 就说明它出现了。
占领只是推一个包:SyncFactionInfluenceAreaOccupy(64830440) = areaId + occupy
两个字段,地图上的变色由客户端自己画(MapSubSystem_Gangster.lua)。
点位表:ClientData/4229938/Configs/FactionInvasionSpots.json,
由 ConfigDump_v3 的势力地盘/势力事件/任务事件三张表 join 导出。
⛔ 边界:本面板只做到「送到地方 + 放两个随从 + 推一个占领包」,
没有敌人波次、占领进度条、结算 —— 那套是客户端 lua 的状态机
(MapSubSystem_Gangster.lua / GangsterAreaClientState.lua),
主线服务端没有对应驱动。
科斯机甲:原生控制
这条链怎么走 / 怎么用 / 怎么验
它为什么进不了花名册:FightSpiritConfig 15022030 "特摄战原型-科斯"
IsPublish=false / CanJoin=false / Invisible=true ⇒ GM 面板的换人下拉里选不到它,
客户端 roster 里也永远不会有它。这是隐藏可控原型,不是普通车辆。
服务端要补的三件事(缺一不可,见 GameRouter.Kesi.cs):
① SyncPlayerAddNewSpirit(64691088) 增量补 SpiritViewData —— 登录包里没有它,
客户端 SpiritManager.Id_to_Tid 查不到 tid,后面所有和它相关的包会被静默丢掉;
② 科斯专属 loadout —— Sceneitem 80003500"科斯冲锋枪"(没有 WheelIcon,
所以常规军械库过滤器会判掉它,必须单独建一份);
③ 走本服已在用的切换链路做身份移交,不另发明一套切人。
怎么用:进游戏 → 下车 → 站室外空地 → 点「控制科斯机甲」;想退出时点「返回原角色」。
⛔ 需实机验证:能确认的只有服务端协议侧齐了。模型异步加载、镜头、
机甲武器与技能面板还没用游戏画面确认过 —— 捐赠端自己也标了"尚需游戏内验证"。
怎么验:服务端日志搜 [KESI],成功应为 enter=True ok=True;
失败先看是不是 缺少科斯原生武器/技能配置,再看 [SWITCH-MIN]。
里希盘查
原生盘查测试:切换里希,下车并退出机械狗骑乘/遥控,点「生成盘查测试 NPC」。等模型加载后站到 6 米内,点击“启动原生盘查”,无需 F。此入口仅选择本场景已生成的最近 4065053;地图市民与其他模型暂不开放。
⛑ 测试模板固定为 4065053,不要改:客户端按 AgentConfig.json → ExamType 判定盘查资格,只有 ExamType=2 的模板才会挂原生盘查流程(40431099 等 ExamType=0 的模板面板能开但按键无反应)。
盘查走客户端 S002 原生流程,已接搜身/询问回复,但实际界面与双人动画仍需验证;卡住请「结束盘查」,不会删除 NPC 或召回支援。罚单判定、押送结案、直升机搜查未完整恢复,不发放虚构奖励。机械巡卫犬 / 武装支援本次未移植(依赖 HackerDevices 与友方随从子系统)。
牢房这条链能做到哪一步 / 怎么验
能做的:把服务端账本里的 NPC(行人 / 地盘敌人 / 功能 NPC)移进牢房内坐标、
停掉它的 AI、改写服务端账本;带出时移回门口并按原值恢复 AI。
⛔ 做不了的:① 门口的 F 交互按钮 —— 捐赠端靠
SyncDoToLuaMaster(45437825) 的 GATE Lua 通道下发
InteractBtnMgr:AddBtn —— 这条通道主线已经搭好了
(见「街头篮球」卡里的「🧪 客户端 Lua(GATE 下发)」,10-04 已从本卡搬过去),
但按钮脚本本身还没接;② 原生押送过场
—— 要客户端 AskPoliceEscortInteract 加捐赠端那整套
PoliceRuntime 状态机,主线没有。
⇒ 所以入口就是这里这两个按钮(POST /api/police/prison)。
怎么用:① 切成里希、回主城(实例 20001222);② 走到警局牢房门口
4 m 内(X 2379.89 / Z 1823.08);③ 用上面「生成一个 NPC 并盘查」刷个人,
把它的 uid 填进左边;④ 点「收押进牢房」。
怎么验:服务端日志搜 [POLICE-PRISON];本页「刷新」看
当前收押 uid 与 离门口。
这条链怎么走 / 怎么用 / 怎么验
主入口(推荐):切成里希(FightSpiritId 15021021)→
点「生成一个 NPC 并盘查」⇒ 服务端在你正前方 3.5 m 生成一个市民
(默认 40954013 咖啡店店员,EnemyClassType=9 非敌对),
等 1.2 s 让客户端把单位建好,然后直接对它开盘查面板。再点一次会先回收上一次生成的那个。
⛑ 为什么这条路最靠谱:uid、坐标、时机全在服务端手里,不依赖客户端任何事件 ⇒ 点一下必然出结果。
⛔ 退出只能用这里:面板里长按 F / ESC 都不做退出了 ——
四版客户端按键钩子全部实机失败(12:2x 拍板放弃),游戏内钩子已停用。
⇒ 要关面板就点「强制关闭面板」,服务端会连发两帧收盘查帧防丢包。
怎么用(备选:扫描模式):① 切成里希;② 勾上面「扫描模式」;
③ 回游戏走到人多的地方 ⇒ 客户端每扫到一个附近的人就开盘查面板。
⛔ 关键事实:cmd=33 的 s1
不是"你准星对着的那个人" —— 10:46:37 实机取证:那批 s1 是连号 13 个、每秒约 3 个,
玩家并没在瞄准谁。它是客户端批量上报附近实体。
⇒ 所以"点一下装备 → 等你聚焦"这个模型在协议层不成立。现在改成由这个开关控制开/关。
⛔ 一次性:弹一次后聚焦模式自动关闭,再想盘查必须再点一次按钮;
60 秒内没用上也自动失效(防"陈年武装")。
为什么不是按 F / 按 R / 说话:
· 按 F —— AskPoliceExamInteract(63233964) 实机 0 条;街头 NPC 没有交互位。
· 按 R —— 客户端钩键两次实机都没打通,代码还在但别指望它。
· 说话(cmd=34) —— 它同时是交互心跳,会周期自动发 ⇒ "有时候触发有时候不触发"。
召唤物不当盘查对象:机械狗 / 无人机 / 蜘蛛的 uid 判成 kind=summon ⇒ 不开面板。
怎么验:服务端日志搜 [EXAM-AUTO];客户端 Player.log(grep 要 -a)搜 [DRMK-EXAM]
看 SyncAgentPoliceExamData … opening POLICE_INQUIRY_PANEL。
街头篮球
B 档 QTE 投篮小游戏(BasketballGameManager.CreateGameCs):在玩家脚下开一局,
球架与双方模型全由客户端自己生成。
⛑ 篮筐:服务端自动刷篮筐的功能已删除(10-04),现在场上只有判定点
(锚点 +(0,+2.98,+1.61)),投的是「虚空」。
⛑ 对手红铁桶(42071029):模型其实加载成功,但 body /
body01 两个 SkinnedMeshRenderer 是 enabled=false
⇒ 预设里已用 coroutine.start + coroutine.wait 在开局后
1.5 s 起轮询点亮,Player.log 搜
[DRMK] basketball npc poll。
街头篮球怎么开 / 怎么验 / 坑在哪
开一局:点上面的「开始游戏」即可,在玩家脚下开局。
一局约 14 秒(00:0x 实测:开局到 TriggerBasketballFinish 只有 14 s)。
⛔ 别再看下拉:GATE Lua 下拉里的「④ 街头篮球 — 在脚下开一局 /
⑤ 街头篮球 — 收摊」两项 10-04 已移除,现在只用本卡这两个按钮。
收摊:点上面的「结束游戏」,只 DestroyGame
(自动刷篮筐已删,不再扫场景收 gadget)。
怎么验:客户端 Player.log(grep 要 -a)搜
[DRMK] basketball start = 开局脚本到了;[DRMK] basketball npc poll1 n=2
turned=2 off=0 = 对手已点亮。
⛔ 三个已证实的坑:
① 别信「模型没加载」 —— 模型一直在,只是网格被关;判据是
SkinnedMeshRenderer.enabled,不是节点存不存在。
② NpcNode 下 npc1..npc15 是空占位,children=0 是正常的;
模型挂在 baseUnit.ModelSlot.transform,按篮架 slotPosition 摆位。
③ 面板页面会被浏览器缓存 —— 改完面板必须 Ctrl+F5,否则跑的还是旧 JS
(判据:新 hook 不触发、旧 hook 触发)。
④ Lua 延时用 coroutine.start + coroutine.wait(实测可用);
裸 wait / UpdateBeat.Add 在本版是 nil。
不要抬头!(搜打撤)
说明
整套默认关:config/private-server.json 里 world.content.extraction.enabled=false。
关着的时候所有搜打撤相关 handler 一律 ack-only 跳过。
进图两条路:① 勾「伪造匹配」后在游戏里点开始(⛑ 开着时所有开局都会进来);② 直接点「进图」。两者走同一个 SwitchSceneAsync。
武器轮盘:下标 0 = 拳头、1 = 私有武器、下标 = CellX + 2(第一格是 2)。 整表恒 9 槽(2 + 7),空槽必须是 null,下标 0 也不能空 —— 空了就切不回拳头。
验收顺序:进图 → 开一个容器(应有按品质长短不同的读条)→ 把枪拖进背包 → 右键装备 →
看这张表里多出一行 → 游戏里 Tab / 滚轮能依次切到。服务端日志应有 [EXTRACT] wheel snapshot pushed … slots=9。
还没做的:① 撤离点负载没抓到包;② 结算帧只有 32 字节的空战斗数据;③ 容器内容不落盘,重登一天重洗。
排球
C 档 零协议小游戏(VolleyballGameManager.CreateLuaGameCs):在玩家脚下开一局,
球场、球网、球、相机、4 个角色(玩家 + 我方 AI + 对方 AI×2)全部由客户端 prefab 生成,
服务端一个协议都不用发,也不需要世界里摆任何 gadget / waypoint / NPC 实体。
赛制:6 分制、需净胜 2 分;扣杀 / 传球走 QTE(完美 / 正常 / 过早 / 过晚 / 假动作五档)。
⛔ 4 个角色是「替换形象」:本版客户端排球原生的 modelId
(86952591~94)建不出模型 —— Lua 版
GetDialogModel(modelId) 与原生版
GetCutSceneModel→LoadModel 两条路都 NRE。
预设已改走 GetDialogModelByAgentId,4 个角色统一用玩家自己的形象
(队伍靠 curTeam 和站位区分)。
⛑ 试过给 4 个角色分不同形象(玩家 / Garm / Rin / Bansy),但只有玩家自己那个能建成
⇒ loadFinishCount 到不了 4 ⇒ OnAllLoaded 不触发
⇒ 局根本开不起来,所以不再分。
排球怎么开 / 怎么验 / 坑在哪
开一局:点上面的「开始游戏」,在玩家脚下开局。
收摊:点「结束游戏」。球场是 prefab 实例,
DestroyLuaGame() 会连带 Destroy(rootNode),
不像篮球那样需要额外收篮筐。
怎么验:客户端 Player.log(grep 要加 -a)搜
[DRMK] volleyball start = 脚本到了;
[DRMK] volleyball poll1 game ok chars=4 = 球场已生成、4 个角色加载完。
· mgr=nil ⇒ 客户端 lua 里没有 gVolleyballGameMgr(该玩法没打包进 4229938)。
· 一直 no game yet ⇒ prefab
VolleyballGameRootNodeCopy.prefab 加载失败。
⛔ 两个已证实的坑:
① 参数必须传位置数组 —— 排球内部是
Vector3.New(unpack(rootPosition)),传
{x=..,y=..,z=..} 具名表会 unpack 出 nil ⇒ 直接报错。
篮球那边是 position.x 具名访问所以能过,别把篮球的写法复制过来。
② 结算发不出去 —— 正常打完会发
SetChallengeResult(63571710),主线
Ananta.Handlers 里没有这个 handler ⇒ 掉
unknown-methods.log。画面不受影响。
任务和动画播放
3 张卡过场动画/时间轴播放
说明
过场由客户端自己播(NPC、摄像机、视频都在游戏里)。播不出来多半是这条时间轴要求特定场景/位置,先传送过去再试。
切人演出(按动画)
说明
数据源是 SwitchSpiritConfig.json,一行 = 一出切人演出
—— 这才是官方的粒度:主下拉是动画(地点 · 动作 · timeline),第二个下拉才是「切成哪个角色」。
源文件 201 行,但 ClientConfigRepository 装载时按
SwitchType=2 / RaidId=23300888 / 未作废 / Weight>0 / TimeLine 非空
过滤掉 131 条 ⇒ 这里能列出的是 70 条(其中 1 条带随从,服务端补不出 ⇒ 默认范围排除)。
走 SyncPreSwitchSpirit 两段式:先推这条演出的配置,等客户端播完回报
ReportPreSwitchSpiritFinish 再真正换人,并落到该行的 Position
锚点(演出本身就有镜头位移,所以会跟着走到那里)。
① 目标角色下拉由这条演出的 FightSpiritId 填充 ——
不是每个角色都能播每一条,官方是按这种搭配编写的。选不到某个角色是正常的。
② 「随从行」(AgentId 非空)服务端这条链路补不出陪衬角色,默认范围已排除;
切成后只是演出里少几个 NPC,不会崩。
③ 演出会把你传送到它的锚点,可能几百米外 —— 这是原版行为。
剧情对话 / 台词播放
说明
走 SyncShowDialog(64967628):服务端只发 dialogId +
beginDialog + 全零 param,文本、镜头、语音都在客户端自己的
DialogConfig 里,服务端不搬内容。索引共 — 条,其中带镜头过场
— 条。
索引里查不到的 id 也照样能下发(客户端有自己的表)。如果点了没反应, 多半是这条台词要求特定任务/场景上下文。
人流和车流
2 张卡车流调参(即时生效 · 免重启)
说明
改完点「保存改动」:写回 正在使用的那份 private-server.json(会自动同步一份到
Ananta.Server/Ananta.App/bin/Debug/net8.0/config/)并热重载,不用重启服务端,
车流下一 tick 就按新值跑。带 ⚠ 的项改坏了会让车不动或满街撞,改动前先看括号里的提示。
人流调参(即时生效 · 需手动推送)
说明
★ 改完必须点「立即推送密度」:人群没有 tick 循环,只在「进世界」和「移动
>35 米」推包,原地改配置是没有第二个时机让它生效的。
⛔ 硬前置:trafficEnabled(车流总开关)必须是 true ——
HasZoneGraph=true 是走车辆 init 那条线发的,车流关着人群根本不会初始化。
上方读数显示你脚下此刻会算出的密度,改参数后不用走到 35 米,点右边「重新载入」就能看到目标值怎么变。
crowdDensity 超过 1 会不会被客户端 clamp 未验证,别一次拉到 4 以上。
生成和铺设NPC
7 张卡生成NPC(角色)
说明
生成的是独立 NPC 实体,不接管玩家控制。没出现就查服务端日志 [NPC] spirit-spawn。
生成市民(非敌对单位)
说明
同名同模型的重复项已折叠为最小 ID,在「或输入ID」填被折叠的 ID 可精确生成。本地生成不读坐标——直接用玩家脚下位置,不会浮空。
街头市民(预设整组)
查看该组市民清单(最多 60 个)
说明
生成位置:玩家当前站位前方 3 米起的一块方阵,槽位随机打乱,想摆在哪条街上就走到那条街再点。
★ 系统行为:排在最后十几组的是对话 / 伙伴 AI / 阵营交互之类的系统动作,刷出来大概率没反应或姿势怪,属正常现象。
不持久化:重登 / 换场景这批市民由客户端自行清掉,想再来一批重新点即可。
按地块铺市民(真实街区)
说明
按城市里真实的地块(住宅区 / 商业区 / 学院区…)把市民放到人行道上,而不是排在角色面前。
「半径」是离你多远以内的地块参与;人多时按距离由近到远分配,远的会先被砍掉。
「时段」决定每个地块放多少人——数据来自该地块自带的一天 24 小时人流曲线。选「跟随游戏时钟」就用当前游戏里的时间。
想先看效果可以把时段固定成 18。占地块一样:不持久化。
功能 NPC(店员 / 售票 · 固定点位)
说明
把带 F 交互的 NPC 放到它本来该在的位置:店员站在自己店门口,摩天轮售票员站在摩天轮下。
默认不用点:进城后跟随循环自己跑 —— 走近 130 m 自动出现、走远 230 m 自动撤走,全程无需操作。
坐标来自 ShopConfig.Position / 城市玩法点 / 室内场景锚点,并已吸附到最近的人行道站位。
服务端只负责把人放下去 —— 按 F 之后干什么是客户端 lua 的事,服务端不参与、也不扣钱。
点位文件:ClientData/4229938/Configs/FunctionalNpcSpots.json,手动改坐标即时生效。
地盘敌人(帮派势力 / 营地)
说明
把帮派分子放到官方地盘坐标上 —— 犬魔社、谜面帮、电视脑、黑金组、龙治团、焱风联合会…
默认不用点:进城后跟随循环自己跑,走近 90 m 出现、走远 160 m 撤走。
坐标来源:FactionInfluenceAreaConfig 的 24 个地盘 × FactionAreaPointConfig 的 85 个角点,
Y 吸附到最近的人行道站位(dump 只给了 XZ)。
行为:走 SpawnAgentAsync,forbidAetherAI=true ⇒ 出生后由客户端行为树接管,
所以它们不像市民那样沿人行道走,而是在地盘附近待机、玩家靠近才进入战斗。
想让城市「有人晃但不追着你打」:配置 Aether.EnemyTerritoryEngage=false。
点位文件:Configs/EnemyTerritorySpots.json,改完重启服务端生效。
批量生成氛围NPC
说明
没出现就查服务端日志:要有 [AETHER] donor init sent 和 [NPC] STATIC_PEDESTRIAN_SPAWN_SENT 两条才算通。
公共交通
1 张卡杂项功能
4 张卡玩家状态(每2秒刷新)
字段说明
位置 / 朝向 · 单位 / 模板 / 就绪 / 变换 / 待传送 · 副本 / 实例 / 宇宙 · 载具 / 座位 · 会话 / 最后在线。
由轮询 /api/status 得到,未连接时显示「无玩家会话(请先登录游戏客户端)」。
客户端 Lua(GATE 下发)
Player.log(grep 要 -a)里的
print_debug / print_error。⛑ 街头篮球的预设已从本下拉移除 —— 那两个按钮在「职业和独立玩法 → 街头篮球」卡里。
无敌模式
说明
根因:敌人施法是我们伪造的,命中与硬直由客户端本地结算(我们从不下发伤害),官服那一步由服务端在结算里解除,我们没人解除 → 永久卡住。
「精选」发 24 个明确的控制/施法锁状态;若无效再用「暴力清空」。
自动解除默认开启:客户端没有「玩家被击中」的上报包,只能从发过施法指令这一刻起算。
说明
敌人每次施法命中由服务端结算并记账([PLAYER-HIT]),扣的就是服务端权威血量,
每次挨打 -100(满血 1000,10 下倒地)。
「锁定生命值」只控制能不能归零,不控制掉不掉血 —— 这是有意的:锁定状态下你依然能看到战斗反馈和血条压力。
取消勾选后可归零 → 倒地 → 服务端计时 8 秒后自动回满并清除倒地状态(不走官服送医流程)。
⛑ 只锁生死,不锁硬直 / 击退 —— 该被打断照样被打断,想解开用上面的解除按钮。
自动驾驶巡航速度
说明
值写进 config/autonomous-driving.json(不动 private-server.json,删掉这个文件就回到主配置的 cruiseSpeed)。
正在自动驾驶时保存 = 热应用:先 Abort(4) 掉旧巡航任务,再用新速度重建,路线不变;没在开车则下次开启生效。
已保存 但写着「下次开启生效」是正常的 —— 那只说明当前没有在自驾的车。
⛑ 若车速被道路限速压住,是 DrivingFlags 里的 DFAdjustCruiseSpeedBasedOnRoadSpeed(16384)
在起作用,把它从 gameplay.vehicleNavigation.cruiseDrivingFlags 里去掉(改成 187)即可。
调试信息
1 张卡控制台
说明
列出客户端发来、服务端没有对应 handler 的方法(logs/unknown-methods.log 的尾部)。
⛑ 日志里 0 次只能证明「客户端没发」,不等于接住了。