Protect against null access crashes for the lyra team subsystem, ensure when it definitely should exist

#jira UE-176207
#rb ben.hoffman
#preflight none

[CL 24085332 by ben zeigler in ue5-main branch]
This commit is contained in:
ben zeigler
2023-02-08 18:01:01 -05:00
parent 2e825249bd
commit 27a8bc73df
3 changed files with 18 additions and 3 deletions

View File

@@ -20,6 +20,11 @@ UTDM_PlayerSpawningManagmentComponent::UTDM_PlayerSpawningManagmentComponent(con
AActor* UTDM_PlayerSpawningManagmentComponent::OnChoosePlayerStart(AController* Player, TArray<ALyraPlayerStart*>& PlayerStarts)
{
ULyraTeamSubsystem* TeamSubsystem = GetWorld()->GetSubsystem<ULyraTeamSubsystem>();
if (!ensure(TeamSubsystem))
{
return nullptr;
}
const int32 PlayerTeamId = TeamSubsystem->FindTeamFromObject(Player);
// We should have a TeamId by now, but early login stuff before post login can try to do stuff, ignore it.

View File

@@ -90,7 +90,10 @@ void ULyraDamageExecution::Execute_Implementation(const FGameplayEffectCustomExe
if (HitActor)
{
ULyraTeamSubsystem* TeamSubsystem = HitActor->GetWorld()->GetSubsystem<ULyraTeamSubsystem>();
DamageInteractionAllowedMultiplier = TeamSubsystem->CanCauseDamage(EffectCauser, HitActor) ? 1.0 : 0.0;
if (ensure(TeamSubsystem))
{
DamageInteractionAllowedMultiplier = TeamSubsystem->CanCauseDamage(EffectCauser, HitActor) ? 1.0 : 0.0;
}
}
// Determine distance

View File

@@ -40,7 +40,11 @@ void ALyraTeamInfoBase::EndPlay(const EEndPlayReason::Type EndPlayReason)
if (TeamId != INDEX_NONE)
{
ULyraTeamSubsystem* TeamSubsystem = GetWorld()->GetSubsystem<ULyraTeamSubsystem>();
TeamSubsystem->UnregisterTeamInfo(this);
if (TeamSubsystem)
{
// EndPlay can happen at weird times where the subsystem has already been destroyed
TeamSubsystem->UnregisterTeamInfo(this);
}
}
Super::EndPlay(EndPlayReason);
@@ -56,7 +60,10 @@ void ALyraTeamInfoBase::TryRegisterWithTeamSubsystem()
if (TeamId != INDEX_NONE)
{
ULyraTeamSubsystem* TeamSubsystem = GetWorld()->GetSubsystem<ULyraTeamSubsystem>();
RegisterWithTeamSubsystem(TeamSubsystem);
if (ensure(TeamSubsystem))
{
RegisterWithTeamSubsystem(TeamSubsystem);
}
}
}