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
Ananta-ps/internal/gameserver/routers/game_router_milk_car.go
T

39 lines
2.0 KiB
Go
Raw Normal View History

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
}