No, it wouldn’t. Remotes can be fired in quick succession without issue. Connecting a blank function would mute the error while starting quite literally a blank thread (meaning no code is really running, except for the beginning and ending of a new thread).
I’ve had this issue before with remotes that aren’t just the CharacterSoundEvent remote of the Sound script. Hooking a blank muted it; so did ensuring my remotes were listened properly without calls being done out of line (Server calling OnClient or vice versa, or whatever).
Standard remotes already are able to handle firing quickly. You can see this with, say, guns with automatic firing cycles that fire remotes every time they’re shot. You don’t get this error.
You can see this for yourself by setting up an experiment.
Removed the experiment - it’s not an accurate one.
Got a working experiment down that reproduced the issue in the OP. It’s a similar setup to the one I deleted, but seeing those results doesn’t matter. It just shows that you can fire remotes in rapid succession without any problem - I put a fire in a while true do wait() end loop and got over 3000 prints without error.
How to set up the experiment:
RemoteEvent > ReplicatedStorage
Script > ServerScriptService
LocalScript > StarterPlayer.StarterPlayerScripts
Contents of the Script:
local replicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = replicatedStorage.RemoteEvent
remoteEvent.OnClientEvent:Connect(function () end)
Contents of the LocalScript:
local replicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = replicatedStorage.RemoteEvent
while true do
remoteEvent:FireServer()
print("fired")
wait()
end
Means that the issue is being fired or listened from the wrong environment. It has nothing to do with the speed of a remote being fired. A remote can be fired in quick succession faster than you think.
Simply change “OnClientEvent” in any server script to “OnServerEvent” and do it vice versa for the client. Same goes with FireEnvironment; server for client, client(player)/allclients for the server.
I just can’t understand why a Roblox has such an implementation on a RemoteEvent. I know that multiple scripts can access the RemoteEvent, so could it be possible if a LocalScript has an OnClientEvent event to the RemoteEvent, while a Script has an OnServerEvent event on the same RemoteEvent?
Not entirely. The repeated spam only comes from how many times its being fired and because the event is being wrongly listened/fired. What I’m addressing is the root problem, which is why the error is appearing in the first place.
The limit is 60KB/s and this limit is only applicable to how much data can be sent. Firing a remote without data doesn’t negate this limit or take away from it. This makes my point remain unchanged. The code sample I provided listens OnEnvironmentEvent and starts a blank scope. If at minimum one event is there, the event won’t show due to improper connection. I’ve also provided other ways to mute or fix the issue being presented.
RemoteEvents are fine to be connected multiple times, because OnEnvironmentEvent is an RBXScriptSignal. It’s the same as doing something like Players.PlayerAdded:Connect multiple times or using some other RBXScriptSignal from both the client and the server.
The events of those remotes are completely separate and just signals to run whatever is connected. There is absolutely nothing wrong with using a single remote and doing both OnClientEvent and OnServerEvent on them, multiple times or once, in several scripts or just one. It’s done pretty frequently.
Another solution is to remove the RemoteEvent, so it only produces one error, as it will stop the firing and will error only because the variable or statement referencing the Remote in the assumed LocalScript is nil.
I haven’t had time to read all the replies, but it’s not possible to crash a server by firing that remote event. Using exploits and while in a controlled environment, I tested it my self. I was able to make the ping for my client around 40,000ms, but the server still held strong for the other people in the server.
If I had to guess, it’s a problem with a RemoteEvent or RemoteFunction that you guys created yourself. If you don’t check if a player is spamming an event, they can completely crash the server with ease. The best way to handle this is to add rate limiting to your Remotes. A simple ratelimit:
local SampleEvent = game.ReplicatedStorage:WaitForChild("SampleEvent")
local RateLimit = {}
SampleEvent.OnServerEvent:Connect(function(Player)
if RateLimit[Player] == nil or tick() - RateLimit[Player] > 1 then -- The number is how many seconds between firing the player can do
RateLimit[Player] = tick()
-- Do stuff here
end
end)
When testing with exploits, I never got that error message to pop up, so maybe I’m doing something incorrectly. I got another error message that said that I was spamming the event, but it wasn’t the one that you guys got.
From my personal experience, ive seen people “Shutdown” servers by spamming remotes connected to character sounds. Most of them get patched fairly quickly (~ a month) but I guess anything is possible.
This is still an ongoing issue, I’ve seen these error messages in several games. While I haven’t experienced crashes due to this, I believe ROBLOX should fix this as soon as possible.
Since about a month ago, the console almost always shows an error originated from ROBLOX’s scripts. When one got fixed, another popped up.
Before the aforementioned issue, a warning was also being spammed at random:
What happened was - I accidentally duplicated one of my scripts. Ctrl-D must have gotten away(oof).
I only happened to notice that, because I had some logging that was being repeated - in addition to this error.
I traced it down to having CharacterAutoLoads = false, and calling player:LoadCharacter() twice at the same time.(from separate player connect functions) - but seems to be inconsistent.
HeadFreeFalling.rbxl (16.6 KB) Repro
(not always consistent, takes about 30 seconds for it to start throwing error, seems more consistent if you test multiple players) If it doesn’t error after a minute, I usually restart it. Your patience may vary.
This is not a bug report, it’s a thread from 4 months ago that is hardly prevalent anymore which asked about the error itself. It was just upped back for a potential fix, for whatever reason, even though such solutions are already available.
I believe the mute fix was applied internally, which makes this a non-issue as it stands.