I am aware of those however when I fire server there are waits etc that would affect the yielding time of the local script. I think I will just use a bool value to find out when the server got it and go from there.
You can use return when coding the OnServerEvent, and only run the code if it returns true or something, and use an If Statement to check. Or you can do
local result = remotes.DoAction:FireServer("Shoot", {state}
repeat wait(.1) until result == true
--rest of the code