Natives called "every frame". What does that really mean?

Some natives’ documentation states that they need to be called “every frame”.

What’s a frame in this context on the client and on the server? If there actually is such natives on server side, as I’m not sure.

It would be really strange if it was actually a rendered frame and therefore the native needed to be called more often the more fps a player has.

I’d like to know if there’s some sort of limit to this or I really have to make loops using those natives with only 5ms wait time, heavily impacting performance, just because some players “might” push the game to run at 200fps and introduce glitches due to the native not being called often enough.

Wait times have a minimum granularity of ‘a frame’.

That means if having 30 FPS, any wait time between 0 and 33 is going to be ‘next frame’.

If something has to be called ‘every frame’, that means you need to use 0. Practically, wait times between 1 and 50 should not be used at all, as they might be misunderstood when 0 is meant.

Also,

Calling specific natives does not require all your code to be run at a 0ms tick time. Also, as above: if you’re running at 30 FPS, using 0 or 30 will make no difference in performance at all, because the minimum granularity (i.e. frame time) is 33ms already.

Thanks, that answers my question entirely.

I (mistakenly) thought that the miliseconds time specified for Citizen.Wait(time) was independent of frame time.

Yeah, I think this should be clarified somewhere in the documentation, if it isn’t already.