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

40 lines
2.0 KiB
Go
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.
package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// 牛奶车(gadget 版)交互的服务端那一半。
// 背景(2026-10-01 实机):用 debugPlace 探针把 T_MilkCar(pathId 331844513) /
// T_Milk_Drive_mcTemp(530867541) 摆到玩家面前 6 m 后,客户端给出四个交互点:
// 车侧面=调查日报 / 联系联络员 / 道具制作,车尾=回血。
// 抓包结论:
// - 车尾「回血」客户端会发 AskDrinkMilk(67579042, 0x04072CA2),body 8 字节
// = gadget uniqueId(实测 0x5000000000000001,与 debugPlace 的 Seq 逐位吻合)。
// - 侧面三个里「调查日报 / 道具制作」客户端一个 RPC 都不发 ⇒ 纯客户端本地演出,
// 服务端无从介入(调查日报点下去还会卡在读取演出界面,属客户端 bug,重连即可解除)。
// - 「联系联络员」走的是通用对话线 AskStartDialog(63754798),已在
// GameRouter.Dialog.cs 里回 0u,不需要在这里重复。
// 所以本文件只做一件事:接住 AskDrinkMilk 并把血回满。
// 回法沿用 GameAdminBridge.RestorePlayerHealthAsync 的既定顺序(硬规则 52):
// 先属性表(SyncUnitAttrs,带 MaxHp 分母)再绝对值(SyncUnitHp);同时把
// state.PlayerHp 这本账一起改掉,否则下一次受击会从旧值结算、立刻又把人打死。
// ⛑ 回滚:把 GameRouter.cs 白名单里的 MethodId.AskDrinkMilk 那一行删掉即可
// (handler 不注册 ⇒ 回落到 typed-default 兜底,点回血只剩演出、不回血)。
//
//
// `IGameSceneToClient.AskDrinkMilk(ulong instanceId)` — 67579042 (0x04072CA2, dump.cs:1730509)。
// 返回 `UXRPCTask`(void)⇒ 回空 OK。请求体实测 8 字节 = 牛奶车 gadget 的 uniqueId。
// ⛑⛑ 必须先回包再推血:客户端 await 的是这个 void,先推血会让回包晚一拍。
//
func GameRouter_MilkCar_AskDrinkMilk(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_MilkCar_AskDrinkMilk
var zero any; return zero
}