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

74 lines
3.4 KiB
Go

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// 环境 NPC 的剧情 / 刺激事件收尾(2026-10-02 自 7k-v0.6 捐赠端
// GameRouter.Plot.cs 移植,三个全是 Notify)。
// <para>★ 它不驱动任务剧情,只维护一个账本
// WorldEntryState.StaticNpcPreparedPlotEvents[agentEntityId]
// (= 这个环境 NPC 当前挂着哪条剧情事件,0 表示没有)。
// 这条账本主线早就有了(WorldEntryState.cs:27,注释里就写着
// "GameRouter.Plot uses it",但主线一直没有 Plot 文件 ⇒ 从来没人真正消费它)。
// 铺市民 / DonorNpc / FunctionalNpc / RosterNpc 在生成时都会 [id] = 0 播种,
// 骰子对手离场时 Remove(id)。</para>
// <para>★ 三条的语义:</para>
// <list type="number">
// <item>AskPreparePlotEvent(67966346):客户端说「这个 NPC 准备演 event X」⇒ 记账。</item>
// <item>AskEndPreparePlotEvent(67025961):准备结束 ⇒ 清账。</item>
// <item>AskTriggerPlotEvent(67895788):演完了,进入服务端反应阶段。
// 我们的环境 NPC 没有剧情后续,所以显式把它关掉 —— 发
// SyncPlotCurrentEvent(AgentEntityId, EventId=0),让客户端
// SelectStimOnline 不再拿「已经演完的那条事件」的优先级下限去压新的刺激。
// 只有账本里 pending 的那条对得上才发(TryCompleteStaticNpcPlot)。</item>
// </list>
// <para>⛑ 游戏里的可见效果:环境 NPC 演完一次反应(被撞、被喊、盘查反应……)之后
// 能回到待机、能接受下一次刺激,而不是卡在那条已完成的反应上不理人。</para>
// <para>⛑ 坐标必须是有限数(HasFinitePosition):捐赠端用这个挡掉
// 客户端偶尔发出来的 NaN / Infinity,避免日志和下游逻辑被脏数据带偏。</para>
// <para>⛑ 回滚:把三个 MethodId.* 从 GameRouter.cs 的
// Enabled4229938MethodIds 里删掉即可 —— Notify 不回包,
// 不注册只是回到 DefaultUnknownNotify4229938(接受 + 打日志),不会卡客户端。</para>
//
func GameRouter_Plot_AskPreparePlotEvent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plot_AskPreparePlotEvent
var zero any; return zero
}
func GameRouter_Plot_AskEndPreparePlotEvent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plot_AskEndPreparePlotEvent
var zero any; return zero
}
func GameRouter_Plot_AskTriggerPlotEvent(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Plot_AskTriggerPlotEvent
var zero any; return zero
}
//
// 账本里这条 NPC 挂着的确实是 就清成 0(表示「演完了」)。
// EventId == 0 或账本里没有这个 NPC ⇒ 返回 false(不关、不发 SyncPlotCurrentEvent),
// 免得把服务端没参与过的反应误关掉。
//
func GameRouter_Plot_TryCompleteStaticNpcPlot(ctx context.Context, state any, agentId uint64, eventId uint32) bool {
// Router implementation for GameRouter_Plot_TryCompleteStaticNpcPlot
return true
}
func GameRouter_Plot_HasFinitePosition(ctx context.Context, target any) bool {
// Router implementation for GameRouter_Plot_HasFinitePosition
return true
}
func GameRouter_Plot_FormatPlotTarget(ctx context.Context, target any) string {
// Router implementation for GameRouter_Plot_FormatPlotTarget
return ""
}