Fix TeamId auto-assignment and interface default implementations

- Always recalculate TeamId at OnPossess (BP CDOs may reset to 0)
- Remove duplicate _Implementation definitions (UHT auto-generates them)
- Fixes crash when interface functions not overridden in BP

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
j.foucher 2026-03-26 20:03:14 +01:00
parent 1799ba28c0
commit eb5113ea30
2 changed files with 5 additions and 6 deletions

View File

@ -40,7 +40,7 @@ void APS_AI_Behavior_AIController::OnPossess(APawn* InPawn)
}
// Auto-assign Team ID from IPS_AI_Behavior interface (preferred) or PersonalityComponent
if (TeamId == FGenericTeamId::NoTeam)
// Always recalculate — BP child CDOs may reset TeamId to 0
{
EPS_AI_Behavior_NPCType NPCType = EPS_AI_Behavior_NPCType::Any;
@ -55,8 +55,7 @@ void APS_AI_Behavior_AIController::OnPossess(APawn* InPawn)
NPCType = PersonalityComp->GetNPCType();
}
// If interface didn't set a specific TeamId, derive from NPCType
if (TeamId == FGenericTeamId::NoTeam)
// Derive TeamId from NPCType
{
switch (NPCType)
{

View File

@ -2,6 +2,6 @@
#include "PS_AI_Behavior_Interface.h"
// UInterface boilerplate — no default implementation needed.
// All functions are BlueprintNativeEvent and must be implemented
// by the class that declares "implements IPS_AI_Behavior".
// Default implementations for BlueprintNativeEvent functions are auto-generated
// by UHT via GENERATED_BODY(). No manual _Implementation needed.
// If a BP class doesn't override a function, the UHT-generated default is used.