here is the code on the local script:
local replicatedStorage = game:GetService("ReplicatedStorage") local starterRebirthAmount = 5000 local player = game.Players.LocalPlayer local mainFrame = script.Parent:WaitForChild("MainFrame") local rebirthMenu = mainFrame:WaitForChild("RebirthMenu") local mainButton = script.Parent:WaitForChild("MainButton") local rebirthButton = rebirthMenu:WaitForChild("RebirthButton") local strengthToRebirth = rebirthMenu:WaitForChild("StrengthToRebirth") local rebirths = player:WaitForChild("leaderstats").Rebirths strengthToRebirth.Text = "You need at least "..math.floor((starterRebirthAmount + (rebirths.Value) * math.sqrt(50000000))).."strength to rebirth" mainButton.MouseButton1Click:Connect(function() mainFrame.Visible = not mainFrame.Visible end) rebirthButton.MouseButton1Click:Connect(function() local result = replicatedStorage.Remotes.Rebirth:FireServer() if result == true then rebirthButton.Text = "Nice Job 8D" wait(5) rebirthButton.Text = "CLICK HERE TO REBIRTH" elseif result == "NotEnoughStrength" then rebirthButton.Text = "Sorry :'(" wait(1) rebirthButton.Text = "CLICK HERE TO REBIRTH" end end) rebirths:GetPropertyChangedSignal("Value"):Connect(function() strengthToRebirth.Text = "You need at least "..math.floor((starterRebirthAmount + (rebirths.Value) * math.sqrt(50000000))).."strength to rebirth" end)
and here is the normal script
local replicatedStorage = game:GetService("ReplicatedStorage") local remoteData = game:GetService("ServerStorage"):WaitForChild("RemoteData") local starterRebirthAmount = 5000 local rebirth = game:GetService("ReplicatedStorage").Remotes.Rebirth local cooldown = 0.1 replicatedStorage.Remotes.Lift.OnServerEvent:Connect(function(player) if not remoteData:FindFirstChild(player.Name) then return "NoFolder" end local debounce = remoteData:WaitForChild(player.Name).Debounce if debounce.Value == false then debounce.Value = true player.leaderstats.Strength.Value = player.leaderstats.Strength.Value + 1 * (player.leaderstats.Rebirths.Value + 1) wait(cooldown) debounce.Value = false end end) function rebirth.OnServerInvoke:Connect(player) if not remoteData:FindFirstChild(player.Name) then return "NoFolder" end local rebirths = player.leaderstats.Rebirths if player.leaderstats.Strength.Value >= (math.floor((starterRebirthAmount + (rebirths.Value) * math.sqrt(50000000)))) then rebirths.Value = rebirths.Value + 1 player.leaderstats.Strength.Value = 0 player:LoadCharacter() return true else return "NotEnoughStrength" end end
and the output:
21:25:56.263 - OnServerInvoke is not a valid member of RemoteEvent 21:25:56.269 - Stack Begin 21:25:56.273 - Script 'ServerScriptService.Remotes', Line 26 21:25:56.275 - Stack End
more details will be shown, I think there was an update that messed this up... or I'm just dumb
Your code has two primary problems causing the remote function to fail:
You've got to use a RemoteFunction
, not a RemoteEvent
. Make sure you're using the correct type of object. All you have to do to fix this is to go into the Remotes
folder (I'm assuming it's a folder) in ReplicatedStorage
and change the Rebirth
object from a RemoteEvent
to a RemoteFunction
.
Your second problem is that OnServerInvoke isn't like an event listener. You cant do the standard :Connect(function()
that you're used to.
Binding a function to OnServerInvoke is done with the assignment operator =, and not with an event. That is because OnServerInvoke is a callback and expects a function to be assigned to it. When the RemoteFunction is invoked, it will execute the function that was assigned to the onInvoke function.
So, on line 26
, it should be
rebirth.OnServerInvoke = function(player) -- code end
neither
function rebirth.OnServerInvoke:Connect(player) -- code end
nor
rebirth.OnServerInvoke:Connect(function(player) -- code end)
will work. I hope this helps! Have a great day scripting.