74 lines
3.4 KiB
Go
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 ""
|
|
}
|
|
|