AnalyticsService:LogCustomEvent does not play well with Players.PlayerRemoving event

As a Roblox developer, it is currently too hard to LogCustomEvent in the Players.PlayerRemoving event. We are trying to see after player joined a battle, when do they leave. So intuitively, we use:

Players.PlayerRemoving:Connect(function(player: Player)
  print(player.Parent) -- this print out "nil"
  local inBattleTime = tick() - _G.battleStartTime
  AnalyticsService:LogCustomEvent(player, "LeaveBattleTime", inBattleTime)
end)

When the event does triggered, analytics service gives an error:
AnalyticsService: player must be a child of 'Players'.
Some developers suspected that we are running the code in another thread so the player.Parent becomes nil. Further investigation reveals that our workspace settings “SignalBehaviour” is set to “Deferred” which is the current Roblox prefered setting. Changing the behaviour to “Immediate” seems to solve the problem and the player.Parent remains Players. However, we are not comfortable with changing the setting away from what Roblox prefers.

If Roblox is able to address this issue, it would improve my development experience because we will not need to risk having problems in other part of existing codes that may be affected by the signal behaviour settings. And we do not want to constantly fire a lot of such custom events just to get the last battle time event.

6 Likes

Hi! Thanks for letting us know! This was a false error that only occurred in Studio. We have fixed it, and you should be able to send events on player removing now. :saluting_face:

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.