I have a TimeLine class with a SetTimer for ticking the timeline.
The UKTimelineObject is owned by a ACharacter
The Timer is initiated on the server. Suddently the callback function isn’t called anymore.
As you can see on the server log, the timer stops calling the function on position 30. It should normally goes till 100.
[2017.08.17-14.53.29:247][941]LogDamage:Verbose: AKBaseCharacter::AddCharacterAlteration_Implementation - Type=5 Value=0.200000 Role=ROLE_Authority
[2017.08.17-14.53.29:258][941]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000000000000000 Role=ROLE_Authority
[2017.08.17-14.53.29:268][941]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - KCA_PowerDecayRate TemporaryUpDownCurve=0000015C0F6A8080
[2017.08.17-14.53.29:278][941]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - bCreated = true Data=0000015C0C5E43E8
[2017.08.17-14.53.29:289][941]LogDamage:Verbose: AKBaseCharacter::AddCharacterAlteration_Implementation - KCA_PowerDecayRate alteration is not running
[2017.08.17-14.53.29:299][941]LogDamage:Verbose: AKBaseCharacter::AddAlteration_Implementation - KCA_PowerDecayRate Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.29:310][941]LogDamage:Verbose: AKBaseCharacter::AddCharacterAlteration_Implementation - Add a new alteration in CharacterAlterations array CharacterAlterations.Num=1 Value=0.200000 Duration=30.000000
[2017.08.17-14.53.29:320][941]LogDamage:Verbose: AKBaseCharacter::AddCharacterAlteration_Implementation - bValid Duration=30.000000 length=100.000000 playrate=1.000000 delta=0.300000 CurrentTime=51.188900
[2017.08.17-14.53.29:331][941]LogDebug:VeryVerbose: UKTimelineObject::PlayFromStart
[2017.08.17-14.53.29:341][941]LogDebug:VeryVerbose: UKTimelineObject::Activate: DeltaTime=0.300000
[2017.08.17-14.53.29:352][941]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.29:362][941]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=51.188900 Position=0.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.29:372][941]LogDamage:VeryVerbose: AKBaseCharacter::PlayAlterationHit - Alterations.Num=1 Role=ROLE_Authority
[2017.08.17-14.53.29:383][941]LogDamage:VeryVerbose: AKBaseCharacter::PlayAlterationHit - OnServer call ReplicateAlterationHit
[2017.08.17-14.53.29:393][941]LogDamage:VeryVerbose: AKBaseCharacter::ReplicateAlterationHit - Alterations.Num=1 Role=ROLE_Authority
[2017.08.17-14.53.29:404][941]LogDamage:VeryVerbose: AKBaseCharacter::ReplicateAlterationHit - Assign LastTakeAlterationHitInfo with Alterations.Num=1
[2017.08.17-14.53.29:414][941]LogKSGMWeapon:Warning: AKSpell::TouchedGround - GroundTemplate is not set.
[2017.08.17-14.53.29:426][942]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=0.000000 DeltaTime=0.300000
[2017.08.17-14.53.29:435][942]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.29:445][942]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=51.588902 Position=1.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.29:455][942]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=1.000000 DeltaTime=0.300000
[2017.08.17-14.53.29:466][942]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.29:477][942]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=51.588902 Position=2.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.29:768][948]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=2.000000 DeltaTime=0.300000
[2017.08.17-14.53.29:778][948]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.29:788][948]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=51.798313 Position=3.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.30:094][952]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=3.000000 DeltaTime=0.300000
[2017.08.17-14.53.30:102][952]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.30:113][952]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=52.256607 Position=4.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.30:237][960]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=4.000000 DeltaTime=0.300000
[2017.08.17-14.53.30:247][960]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.30:258][960]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=52.400646 Position=5.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.30:535][977]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=5.000000 DeltaTime=0.300000
[2017.08.17-14.53.30:540][977]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.30:551][977]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=52.698093 Position=6.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.30:825][994]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=6.000000 DeltaTime=0.300000
[2017.08.17-14.53.30:828][994]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.30:838][994]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=52.989033 Position=7.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.31:131][ 12]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=7.000000 DeltaTime=0.300000
[2017.08.17-14.53.31:141][ 12]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.31:151][ 12]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=53.294807 Position=8.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.31:439][ 30]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=8.000000 DeltaTime=0.300000
[2017.08.17-14.53.31:441][ 30]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.31:451][ 30]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=53.602905 Position=9.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.31:727][ 47]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=9.000000 DeltaTime=0.300000
[2017.08.17-14.53.31:731][ 47]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.31:742][ 47]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=53.890377 Position=10.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.31:869][ 55]LogDebug: AKTeamInfo::UpdateTeamLeaders
[2017.08.17-14.53.31:875][ 55]LogDebug: AKTeamInfo::UpdateTeamLeaders
[2017.08.17-14.53.32:033][ 65]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=10.000000 DeltaTime=0.300000
[2017.08.17-14.53.32:041][ 65]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.32:051][ 65]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=54.197323 Position=11.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.32:341][ 83]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=11.000000 DeltaTime=0.300000
[2017.08.17-14.53.32:343][ 83]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.32:354][ 83]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=54.504402 Position=12.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.32:630][100]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=12.000000 DeltaTime=0.300000
[2017.08.17-14.53.32:632][100]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.32:643][100]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=54.793678 Position=13.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.32:937][118]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=13.000000 DeltaTime=0.300000
[2017.08.17-14.53.32:943][118]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.32:954][118]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=55.101429 Position=14.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.33:229][135]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=14.000000 DeltaTime=0.300000
[2017.08.17-14.53.33:234][135]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.33:244][135]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=55.392872 Position=15.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.33:535][153]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=15.000000 DeltaTime=0.300000
[2017.08.17-14.53.33:545][153]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.33:555][153]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=55.698639 Position=16.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.33:830][170]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=16.000000 DeltaTime=0.300000
[2017.08.17-14.53.33:836][170]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.33:846][170]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=55.993927 Position=17.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.34:138][188]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=17.000000 DeltaTime=0.300000
[2017.08.17-14.53.34:147][188]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.34:158][188]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=56.302006 Position=18.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.34:433][205]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=18.000000 DeltaTime=0.300000
[2017.08.17-14.53.34:438][205]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.34:449][205]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=56.596424 Position=19.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.34:738][223]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=19.000000 DeltaTime=0.300000
[2017.08.17-14.53.34:748][223]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.34:759][223]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=56.901604 Position=20.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.34:869][230]LogDebug: AKTeamInfo::UpdateTeamLeaders
[2017.08.17-14.53.34:874][230]LogDebug: AKTeamInfo::UpdateTeamLeaders
[2017.08.17-14.53.35:032][240]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=20.000000 DeltaTime=0.300000
[2017.08.17-14.53.35:041][240]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.35:052][240]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=57.196369 Position=21.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.35:339][258]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=21.000000 DeltaTime=0.300000
[2017.08.17-14.53.35:341][258]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.35:352][258]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=57.502361 Position=22.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.35:630][275]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=22.000000 DeltaTime=0.300000
[2017.08.17-14.53.35:631][275]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.35:641][275]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=57.792988 Position=23.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.35:932][293]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=23.000000 DeltaTime=0.300000
[2017.08.17-14.53.35:942][293]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.35:953][293]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=58.095749 Position=24.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.36:230][310]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=24.000000 DeltaTime=0.300000
[2017.08.17-14.53.36:235][310]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.36:245][310]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=58.393993 Position=25.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.36:535][328]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=25.000000 DeltaTime=0.300000
[2017.08.17-14.53.36:545][328]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.36:555][328]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=58.698933 Position=26.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.36:829][345]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=26.000000 DeltaTime=0.300000
[2017.08.17-14.53.36:835][345]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.36:846][345]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=58.993317 Position=27.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.37:133][363]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=27.000000 DeltaTime=0.300000
[2017.08.17-14.53.37:135][363]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.37:146][363]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=59.296795 Position=28.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.37:436][381]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=28.000000 DeltaTime=0.300000
[2017.08.17-14.53.37:438][381]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.37:449][381]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=59.598488 Position=29.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.37:735][399]LogDebug:VeryVerbose: UKTimelineObject::TimerTimelineTick: GetTimelineLength=100.000000 GetPlayRate=1.000000 GetPosition=29.000000 DeltaTime=0.300000
[2017.08.17-14.53.37:737][399]LogDamage:VeryVerbose: AKBaseCharacter::GetAlterationTimeline - Type=5 Data=0000015C0C5E43E8 Role=ROLE_Authority
[2017.08.17-14.53.37:747][399]LogDamage:VeryVerbose: AKBaseCharacter::TempPowerDecayRateFactorTimelineTick - CurrentTime=59.899078 Position=30.000000 Length=100.000000 TempAttributes.SpeedFactor.Value=0.800000 Data->InitialValue=1.000000 Data->TempTargetValue=0.800000
[2017.08.17-14.53.37:862][406]LogOnline:Verbose: AKGameSession::UpdateGameState
[2017.08.17-14.53.37:872][406]LogOnline:Verbose: AKGameSession::UpdateGameState NM_DedicatedServer
[2017.08.17-14.53.37:883][406]LogOnline:Verbose: AKGameSession::UpdateGameState SessionInterface.IsValid
[2017.08.17-14.53.37:893][406]LogOnline:Verbose: AKGameSession::UpdateGameState UpdateSession FKOnlineSessionSettings
[2017.08.17-14.54.05:162][ 57]LogDebug:Verbose: AKPlayerController::ServerSuicide_Implementation - this=KPlayerController_0 GameMode=KDeathGameMode_0 Role=ROLE_Authority
The code for the UKTimelineObject. It is like the UTimelineComponent.
Header:
/**
* @brief Interface of the UKTimelineObject class.
*
* @info Copyright (c) 2015 Kadeo. All rights reserved.
*
* This source code is only intended as a supplement to the Kadeo User's Guide and
* related electronic documentation provided with the library. See these sources for
* detailed information regarding the Kadeo product.
*
* @author dominique.aigroz@kadeo.net
* @date 16.05.2015
*
* @file D:\KadeoGames\UDK\KSGM\Source\KSGM\Helpers\UObjects\KTimelineObject.h
*/
#pragma once
#include "Components/TimelineComponent.h"
#include "KTimelineObject.generated.h"
/**
* UKTimelineObject holds a FTimeline.
* Events can be triggered at keyframes along the timeline.
* Floats, vectors, and colors are interpolated between keyframes along the timeline.
*/
UCLASS()
class UKTimelineObject : public UObject
{
GENERATED_UCLASS_BODY()
public:
/**
* @brief Initializes the timeline with a vector curve and set the tick and finish call-back functions.
*
* @param VectorCurve If non-null, the vector curve.
* @param TickFunc The function to call on every tick.
* @param FinishedFunc The finished function.
* @param InOwner The actor owner.
* @param InDeltaTime (Optional) the delta time between the play rate value. Default is 1.0
* @param InPlayRate (Optional) the play rate. Default is 1.0
* @param InLengthMode (Optional) the in length mode. Default is ETimelineLengthMode::TL_TimelineLength.
* @param InLength (Optional) the initial length. Default is 100.
* @param PropertyName (Optional) name of the property. Default is NAME_None.
*/
void Initialize(class UCurveVector* VectorCurve, FOnTimelineVector TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime = 1.0f, float InPlayRate = 1.0f, ETimelineLengthMode InLengthMode = ETimelineLengthMode::TL_TimelineLength, const float InLength = 100.0f, FName PropertyName = NAME_None);
/**
* @brief Initializes the timeline with a float curve and set the tick and finish call-back functions.
*
* @param FloatCurve If non-null, the float curve.
* @param TickFunc The function to call on every tick.
* @param FinishedFunc The finished function.
* @param InOwner The actor owner.
* @param InDeltaTime (Optional) the delta time between the play rate value. Default is 1.0
* @param InPlayRate (Optional) the play rate. Default is 1.0
* @param InLengthMode (Optional) the in length mode. Default is ETimelineLengthMode::TL_TimelineLength.
* @param InLength (Optional) the initial length. Default is 100.
* @param PropertyName (Optional) name of the property. Default is NAME_None.
*/
void Initialize(class UCurveFloat* FloatCurve, FOnTimelineFloat TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime = 1.0f, float InPlayRate = 1.0f, ETimelineLengthMode InLengthMode = ETimelineLengthMode::TL_TimelineLength, const float InLength = 100.0f, FName PropertyName = NAME_None);
/**
* @brief Initializes the timeline with a linear color curve and set the tick and finish call-back functions.
*
* @param LinearColorCurve If non-null, the linear color curve.
* @param TickFunc The function to call on every tick.
* @param FinishedFunc The finished function.
* @param InOwner The actor owner.
* @param InDeltaTime (Optional) the delta time between the play rate value. Default is 1.0
* @param InPlayRate (Optional) the play rate. Default is 1.0
* @param InLengthMode (Optional) the in length mode. Default is ETimelineLengthMode::TL_TimelineLength.
* @param InLength (Optional) the initial length. Default is 100.
* @param PropertyName (Optional) name of the property. Default is NAME_None.
*/
void Initialize(class UCurveLinearColor* LinearColorCurve, FOnTimelineLinearColor TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime = 1.0f, float InPlayRate = 1.0f, ETimelineLengthMode InLengthMode = ETimelineLengthMode::TL_TimelineLength, const float InLength = 100.0f, FName PropertyName = NAME_None);
/** Start playback of timeline */
void Play();
/** Start playback of timeline from the start */
void PlayFromStart();
/** Start playback of timeline in reverse */
void Reverse();
/** Start playback of timeline in reverse from the end */
void ReverseFromEnd();
/** Stop playback of timeline */
void Stop();
/** Get whether this timeline is playing or not. */
bool IsPlaying() const;
/** Get whether we are reversing or not */
bool IsReversing() const;
/** Jump to a position in the timeline. If bFireEvents is true, event functions will fire, otherwise will not. */
void SetPlaybackPosition(float NewPosition, bool bFireEvents);
/** Get the current playback position of the Timeline */
float GetPlaybackPosition() const;
/** true means we whould loop, false means we should not. */
void SetLooping(bool bNewLooping);
/** Get whether we are looping or not */
bool IsLooping() const;
/** Sets the new play rate for this timeline */
void SetPlayRate(float NewRate);
/** Get the current play rate for this timeline */
float GetPlayRate() const;
/**
* @brief Sets the delta time between play rate for this timeline.
* @param NewDeltaTime The new delta time.
*/
void SetDeltaTime(float NewDeltaTime);
/** Get the current delta time between play rate for this timeline */
float GetDeltaTime() const;
/** Set the new playback position time to use */
void SetNewTime(float NewTime);
/** Get length of the timeline */
float GetTimelineLength() const;
/** Set length of the timeline */
void SetTimelineLength(float NewLength);
/** Sets the length mode of the timeline */
void SetTimelineLengthMode(ETimelineLengthMode NewLengthMode);
/** Get the initial length of the timeline */
float GetInitialTimelineLength() const;
/**
* @brief Sets initial timeline length.
* @param InLength The new initial time length.
*/
void SetInitialTimelineLength(const float InLength);
/** @brief Sets back the timeline length to initial length. */
void SetTimelineLengthToInitial();
UFUNCTION()
void OnRep_Timeline();
/** Add a callback event to the timeline */
void AddEvent(float Time, FOnTimelineEvent EventFunc);
/** Add a vector interpolation to the timeline */
void AddInterpVector(UCurveVector* VectorCurve, FOnTimelineVector InterpFunc, FName PropertyName = NAME_None);
/** Add a float interpolation to the timeline */
void AddInterpFloat(UCurveFloat* FloatCurve, FOnTimelineFloat InterpFunc, FName PropertyName = NAME_None);
/** Add a linear color interpolation to the timeline */
void AddInterpLinearColor(UCurveLinearColor* LinearColorCurve, FOnTimelineLinearColor InterpFunc, FName PropertyName = NAME_None);
/** Optionally provide an object to automatically update properties on */
void SetPropertySetObject(UObject* NewPropertySetObject);
/** Set the delegate to call after each timeline tick */
void SetTimelinePostUpdateFunc(FOnTimelineEvent NewTimelinePostUpdateFunc);
/** Set the delegate to call when timeline is finished */
void SetTimelineFinishedFunc(FOnTimelineEvent NewTimelineFinishedFunc);
/** Set the delegate to call when timeline is finished */
void SetDirectionPropertyName(FName DirectionPropertyName);
/** Get all curves used by the Timeline
void GetAllCurves(TSet<class UCurveBase*>& InOutCurves) const;
*/
private:
/**
* @brief Activates the timer for ticking the timeline.
*/
void Activate();
/**
* @brief Deactivates the timer for ticking the timeline.
*/
void Deactivate();
/**
* @brief Timer timeline on tick call-back.
*/
void TimerTimelineTick();
private:
/** The actual timeline structure */
UPROPERTY(ReplicatedUsing = OnRep_Timeline)
FTimeline TheTimeline;
/** @brief The initial timeline length. */
float InitialTimelineLength;
/** @brief The delta time used for ticking the timeline. */
float DeltaTime;
/** @brief Handle of the timer for ticking the timeline. */
FTimerHandle TimerTimelineHandle;
/** @brief The actor owning this timeline object. Needed to access the GetWorlTimerManager(). */
const AActor* TheActor;
};
/**
// End of D:\KadeoGames\UDK\KSGM\Source\KSGM\Helpers\UObjects\KTimelineObject.h
*/
Source:
/**
* @brief Implementation of the UKTimelineObject class.
*
* @info Copyright (c) 2015 Kadeo. All rights reserved.
*
* This source code is only intended as a supplement to the Kadeo User's Guide and
* related electronic documentation provided with the library. See these sources for
* detailed information regarding the Kadeo product.
*
* @author dominique.aigroz@kadeo.net
* @date 16.05.2015
*
* @file D:\KadeoGames\UDK\KSGM\Source\KSGM\Helpers\UObjects\KTimelineObject.cpp
*/
#include "KSGM.h"
#include "Components/TimelineComponent.h"
#include "KTimelineObject.h"
UKTimelineObject::UKTimelineObject(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
, InitialTimelineLength(5.0f)
, DeltaTime(0.2f)
, TheActor(nullptr)
{
}
void UKTimelineObject::Initialize(UCurveVector* VectorCurve, FOnTimelineVector TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime, float InPlayRate, ETimelineLengthMode InLengthMode, const float InLength, FName PropertyName)
{
TheTimeline.AddInterpVector(VectorCurve, TickFunc, PropertyName);
TheTimeline.SetTimelineFinishedFunc(FinishedFunc);
TheTimeline.SetTimelineLengthMode(InLengthMode);
DeltaTime = InDeltaTime;
SetPlayRate(InPlayRate);
TheActor = InOwner;
SetInitialTimelineLength(InLength);
}
void UKTimelineObject::Initialize(UCurveFloat* FloatCurve, FOnTimelineFloat TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime, float InPlayRate, ETimelineLengthMode InLengthMode, const float InLength, FName PropertyName)
{
TheTimeline.AddInterpFloat(FloatCurve, TickFunc, PropertyName);
TheTimeline.SetTimelineFinishedFunc(FinishedFunc);
TheTimeline.SetTimelineLengthMode(InLengthMode);
DeltaTime = InDeltaTime;
SetPlayRate(InPlayRate);
TheActor = InOwner;
SetInitialTimelineLength(InLength);
}
void UKTimelineObject::Initialize(UCurveLinearColor* LinearColorCurve, FOnTimelineLinearColor TickFunc, FOnTimelineEvent FinishedFunc, const AActor* InOwner, float InDeltaTime, float InPlayRate, ETimelineLengthMode InLengthMode, const float InLength, FName PropertyName)
{
TheTimeline.AddInterpLinearColor(LinearColorCurve, TickFunc, PropertyName);
TheTimeline.SetTimelineFinishedFunc(FinishedFunc);
TheTimeline.SetTimelineLengthMode(InLengthMode);
DeltaTime = InDeltaTime;
SetPlayRate(InPlayRate);
TheActor = InOwner;
SetInitialTimelineLength(InLength);
}
void UKTimelineObject::Activate()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::Activate: DeltaTime=%f"), DeltaTime);
if (TheActor && !TimerTimelineHandle.IsValid())
TheActor->GetWorldTimerManager().SetTimer(TimerTimelineHandle, this, &UKTimelineObject::TimerTimelineTick, DeltaTime, true, 0.0f);
else
{
UE_LOG(LogDebug, Warning, TEXT("UKTimelineObject::Activate: TimerTimelineHandle is already running"));
}
}
void UKTimelineObject::Deactivate()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::Deactivate: ClearTimer"));
if (TheActor)
{
TheActor->GetWorldTimerManager().ClearTimer(TimerTimelineHandle);
}
TimerTimelineHandle.Invalidate();
}
void UKTimelineObject::TimerTimelineTick()
{
if (TheTimeline.IsPlaying())
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::TimerTimelineTick: GetTimelineLength=%f GetPlayRate=%f GetPosition=%f DeltaTime=%f"), GetTimelineLength(), GetPlayRate(), GetPlaybackPosition(), GetDeltaTime());
TheTimeline.TickTimeline(GetPlayRate());
}
else
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::TimerTimelineTick: Deactivate"));
Deactivate();
}
}
void UKTimelineObject::Play()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::Play"));
Activate();
TheTimeline.Play();
}
void UKTimelineObject::PlayFromStart()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::PlayFromStart"));
Activate();
TheTimeline.PlayFromStart();
}
void UKTimelineObject::Reverse()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::Reverse"));
Activate();
TheTimeline.Reverse();
}
void UKTimelineObject::ReverseFromEnd()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::ReverseFromEnd"));
Activate();
TheTimeline.ReverseFromEnd();
}
void UKTimelineObject::Stop()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::Stop"));
TheTimeline.Stop();
}
bool UKTimelineObject::IsPlaying() const
{
return TheTimeline.IsPlaying();
}
void UKTimelineObject::AddEvent(float Time, FOnTimelineEvent Event)
{
TheTimeline.AddEvent(Time, Event);
}
void UKTimelineObject::AddInterpVector(UCurveVector* VectorCurve, FOnTimelineVector InterpFunc, FName PropertyName)
{
TheTimeline.AddInterpVector(VectorCurve, InterpFunc, PropertyName);
}
void UKTimelineObject::AddInterpFloat(UCurveFloat* FloatCurve, FOnTimelineFloat InterpFunc, FName PropertyName)
{
TheTimeline.AddInterpFloat(FloatCurve, InterpFunc, PropertyName);
}
void UKTimelineObject::AddInterpLinearColor(UCurveLinearColor* LinearColorCurve, FOnTimelineLinearColor InterpFunc, FName PropertyName)
{
TheTimeline.AddInterpLinearColor(LinearColorCurve, InterpFunc, PropertyName);
}
void UKTimelineObject::SetPlaybackPosition(float NewPosition, bool bFireEvents)
{
TheTimeline.SetPlaybackPosition(NewPosition, bFireEvents);
}
float UKTimelineObject::GetPlaybackPosition() const
{
return TheTimeline.GetPlaybackPosition();
}
void UKTimelineObject::SetLooping(bool bNewLooping)
{
TheTimeline.SetLooping(bNewLooping);
}
bool UKTimelineObject::IsLooping() const
{
return TheTimeline.IsLooping();
}
bool UKTimelineObject::IsReversing() const
{
return TheTimeline.IsReversing();
}
void UKTimelineObject::SetPlayRate(float NewRate)
{
TheTimeline.SetPlayRate(NewRate);
}
float UKTimelineObject::GetPlayRate() const
{
return TheTimeline.GetPlayRate();
}
void UKTimelineObject::SetDeltaTime(float NewDeltaTime)
{
DeltaTime = NewDeltaTime;
}
float UKTimelineObject::GetDeltaTime() const
{
return DeltaTime;
}
void UKTimelineObject::SetNewTime(float NewTime)
{
TheTimeline.SetNewTime(NewTime);
}
float UKTimelineObject::GetTimelineLength() const
{
return TheTimeline.GetTimelineLength();
}
void UKTimelineObject::SetTimelineLength(float NewLength)
{
return TheTimeline.SetTimelineLength(NewLength);
}
void UKTimelineObject::SetTimelineLengthMode(ETimelineLengthMode NewLengthMode)
{
TheTimeline.SetTimelineLengthMode(NewLengthMode);
}
float UKTimelineObject::GetInitialTimelineLength() const
{
return InitialTimelineLength;
}
void UKTimelineObject::SetInitialTimelineLength(const float InLength)
{
InitialTimelineLength = InLength;
SetTimelineLengthToInitial();
}
void UKTimelineObject::SetTimelineLengthToInitial()
{
SetTimelineLength(InitialTimelineLength);
}
void UKTimelineObject::SetPropertySetObject(UObject* NewPropertySetObject)
{
TheTimeline.SetPropertySetObject(NewPropertySetObject);
}
void UKTimelineObject::SetTimelinePostUpdateFunc(FOnTimelineEvent NewTimelinePostUpdateFunc)
{
TheTimeline.SetTimelinePostUpdateFunc(NewTimelinePostUpdateFunc);
}
void UKTimelineObject::SetTimelineFinishedFunc(FOnTimelineEvent NewTimelineFinishedFunc)
{
TheTimeline.SetTimelineFinishedFunc(NewTimelineFinishedFunc);
}
void UKTimelineObject::SetDirectionPropertyName(FName DirectionPropertyName)
{
TheTimeline.SetDirectionPropertyName(DirectionPropertyName);
}
/* Linker error. Can't find TheTimeline.GetAllCurves.
void UKTimelineObject::GetAllCurves(TSet& InOutCurves) const
{
TheTimeline.GetAllCurves(InOutCurves);
}
*/
void UKTimelineObject::OnRep_Timeline()
{
UE_LOG(LogDebug, VeryVerbose, TEXT("UKTimelineObject::OnRep_Timeline"));
}
void UKTimelineObject::GetLifetimeReplicatedProps(TArray & OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(UKTimelineObject, TheTimeline);
}
/**
// End of D:\KadeoGames\UDK\KSGM\Source\KSGM\Helpers\UObjects\KTimelineObject.cpp
*/
I have no idea why the timer stops. Is there is a way to debug this ?