HaywireInteractive / OnAllFronts-Public

UE5 MilSim FPS / RTS Game (formerly ProjectM)
MIT License
112 stars 22 forks source link

When repeatedly switching teams quickly it can lead to crash #940

Closed Leroy231 closed 2 months ago

Leroy231 commented 3 months ago

This may be fixed, just verify with repro steps below.

To repro:

  1. In single process, client net mode, L_Small_1v1Player start PIE
  2. Repeatedly switching teams quickly. It can take ~30 times of trying until error happens.

Error:

[2024.05.06-07.37.39:190][676]LogMass: Error: [FMassArchetypeData::BatchSetFragmentValues] Trying to set fragment values for a fragment type that is not part of the archetype. Ignoring. FragmentType: MassMoveTargetFragment, FirstEntity: [i: 3 sn: 3], EntityRangeLength: 1

Call stack:

>   FMassArchetypeData::BatchSetFragmentValues(EntityCollection, Payload)   C++
    FMassEntityManager::BatchAddFragmentInstancesForEntities(EntityCollections, FragmentsAffected)  C++
    FMassCommandAddFragmentInstances<...>::Execute(System)  C++
    FMassCommandBuffer::Flush(EntityManager)    C++
    FMassEntityManager::FlushCommands(InCommandBuffer)  C++
    FMassCharacterUtils::UpdateMassTagsForCharacterPossessionByAI(EntityManager, LogOwner, Entity, bShouldAddMoveTargetFragment, NewMoveTargetCenter, NewMoveTargetForward) C++
    AMassCharacter::UpdateMassTagsForCharacterPossessionByAI(EntityManager, Entity, bShouldAddMoveTargetFragment)   C++
    AMassCharacter::MulticastUpdateMassAgentSyncTagsForCharacterPossessionByAI_Implementation() C++
    UFunction::Invoke(Obj, Stack, Z_Param__Result)  C++
    UObject::ProcessEvent(Function, Parms)  C++
    AActor::ProcessEvent(Function, Parameters)  C++
    UPossessSoldierEntity_AsyncAction::UnPossessControlledSoldier(UnPossessingController, bIsFromGameOver)  C++
    AProjectM_PlayerController::ServerRequestTeamChange_Implementation()    C++
    UFunction::Invoke(Obj, Stack, Z_Param__Result)  C++
    UObject::ProcessEvent(Function, Parms)  C++
    AActor::ProcessEvent(Function, Parameters)  C++
    FObjectReplicator::ReceivedRPC(Reader, RepFlags, FieldCache, bCanDelayRPC, bOutDelayRPC, UnmappedGuids) C++
    FObjectReplicator::ReceivedBunch(Bunch, RepFlags, bHasRepLayout, bOutHasUnmapped)   C++
    UActorChannel::ProcessBunch(Bunch)  C++
    UActorChannel::ReceivedBunch(Bunch) C++
    UChannel::ReceivedSequencedBunch(Bunch) C++
    UChannel::ReceivedNextBunch(Bunch, bOutSkipAck) C++
    UChannel::ReceivedRawBunch(Bunch, bOutSkipAck)  C++
    UNetConnection::DispatchPacket(Reader, PacketId, bOutSkipAck, bOutHasBunchErrors)   C++
    UNetConnection::ReceivedPacket(Reader, bIsReinjectedPacket, bDispatchPacket)    C++
    UNetConnection::ReceivedRawPacket(InData, Count)    C++
    UIpNetDriver::TickDispatch(DeltaTime)   C++
    UNetDriver::InternalTickDispatch(DeltaSeconds)  C++
    [Inline Frame] Invoke() C++
    [Inline Frame] UE::Core::Private::Tuple::TTupleBase<...>::ApplyAfter()  C++
    TBaseUObjectMethodDelegateInstance<...>::ExecuteIfSafe(<...>)   C++
    [Inline Frame] TMulticastDelegateBase<...>::Broadcast() C++
    TMulticastDelegate<...>::Broadcast(<...>)   C++
    UWorld::Tick(TickType, DeltaSeconds)    C++
    UEditorEngine::Tick(DeltaSeconds, bIdleMode)    C++
    UUnrealEdEngine::Tick(DeltaSeconds, bIdleMode)  C++
    FEngineLoop::Tick() C++
    [Inline Frame] EngineTick() C++
    GuardedMain(CmdLine)    C++
    LaunchWindowsStartup(hInInstance, hPrevInstance, __formal, nCmdShow, CmdLine)   C++
    WinMain(hInInstance, hPrevInstance, pCmdLine, nCmdShow) C++
    [Inline Frame] invoke_main()    C++
    __scrt_common_main_seh()    C++
    00007ffa2544257d()  Unknown
    00007ffa26bcaa48()  Unknown
gilsonmandalogo commented 2 months ago

Switched teams quickly 60 times and no errors raised.