Fix post-mapinit NPC exception (#40244)

Ensure `NPCBlackboard.Owner` is set during startup
This commit is contained in:
Leon Friedrich
2025-10-08 03:03:45 +13:00
committed by GitHub
parent 6b480673cd
commit 4b51b2953d
4 changed files with 8 additions and 1 deletions

View File

@@ -9,4 +9,5 @@ public abstract partial class NPCComponent : SharedNPCComponent
/// </summary>
[DataField("blackboard", customTypeSerializer: typeof(NPCBlackboardSerializer))]
public NPCBlackboard Blackboard = new();
// TODO FULL GAME SAVE Serialize this
}

View File

@@ -24,6 +24,7 @@ public sealed partial class HTNComponent : NPCComponent
/// </summary>
[ViewVariables]
public HTNPlan? Plan;
// TODO FULL GAME SAVE serialize this?
/// <summary>
/// How long to wait after having planned to try planning again.

View File

@@ -33,6 +33,7 @@ public sealed class HTNSystem : EntitySystem
base.Initialize();
SubscribeLocalEvent<HTNComponent, MobStateChangedEvent>(_npc.OnMobStateChange);
SubscribeLocalEvent<HTNComponent, MapInitEvent>(_npc.OnNPCMapInit);
SubscribeLocalEvent<HTNComponent, ComponentStartup>(_npc.OnNPCStartup);
SubscribeLocalEvent<HTNComponent, PlayerAttachedEvent>(_npc.OnPlayerNPCAttach);
SubscribeLocalEvent<HTNComponent, PlayerDetachedEvent>(_npc.OnPlayerNPCDetach);
SubscribeLocalEvent<HTNComponent, ComponentShutdown>(OnHTNShutdown);

View File

@@ -63,9 +63,13 @@ namespace Content.Server.NPC.Systems
WakeNPC(uid, component);
}
public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args)
public void OnNPCStartup(EntityUid uid, HTNComponent component, ComponentStartup args)
{
component.Blackboard.SetValue(NPCBlackboard.Owner, uid);
}
public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args)
{
WakeNPC(uid, component);
}