Hi so i have this local script inside of a GUI. I'm trying to make an among us style game, but the kill gui does not work properly. When the imposter kills, it only happens on the imposter screen also known as client sided. I don't have much experience with making stuff server side, as I usually build and make UIs. If you can provide how you would do it, thank you.
local gui = script.Parent local players = game:GetService("Players") local player = players.LocalPlayer local run = game:GetService("RunService") local sound = script.KillSound gui.KillButton.MouseButton1Click:Connect(function() local character = player.Character if not character then return end local head = character:FindFirstChild("Head") if not head then return end for _, v in pairs(workspace:GetChildren()) do if v:IsA("Model") and v:FindFirstChild("Humanoid") and v:FindFirstChild("Head") and v ~= character then if (character.Head.Position - v.Head.Position).Magnitude <= 20 and v.Humanoid.Health > 0 and script.Parent.KillButton.Timer.Visible == false then sound:Play() v.Humanoid.Health = 0 character:MoveTo(v.HumanoidRootPart.Position) script.Parent.KillButton.Timer.Visible = true script.Parent.KillButton.Timer.Text = "10" wait(1) script.Parent.KillButton.Timer.Text = "9" wait(1) script.Parent.KillButton.Timer.Text = "8" wait(1) script.Parent.KillButton.Timer.Text = "7" wait(1) script.Parent.KillButton.Timer.Text = "6" wait(1) script.Parent.KillButton.Timer.Text = "5" wait(1) script.Parent.KillButton.Timer.Text = "4" wait(1) script.Parent.KillButton.Timer.Text = "3" wait(1) script.Parent.KillButton.Timer.Text = "2" wait(1) script.Parent.KillButton.Timer.Text = "1" wait(1) script.Parent.KillButton.Timer.Visible = false break end end end end) run.Heartbeat:Connect(function() local character = player.Character if not character then return end local head = character:FindFirstChild("Head") if not head then return end local cankill = false for _, v in pairs(workspace:GetChildren()) do if v:IsA("Model") and v:FindFirstChild("Humanoid") and v:FindFirstChild("Head") and v ~= character then if (character.Head.Position - v.Head.Position).Magnitude <= 20 and v.Humanoid.Health > 0 and script.Parent.KillButton.Timer.Visible == false then cankill = true end end end if cankill then gui.KillButton.ImageTransparency = 0 else gui.KillButton.ImageTransparency = 0.65 end end)
What I would do is, wait for the button to be pressed from the Impostor, use a RemoteEvent to tell the server who their target is, check if the target is close enough and then do the kill. I would then fire to both clients (with a RemoteEvent), receiving the call with RemoteEvent.OnClientEvent and then I would display the Kill GUI and hide it after the appropriate amount of time.
you have posted the same question around 3 times, here is the answer again:
i remember the comment last time, so in a local script, your meant to use:
game.Players.LocalPlayer
to get the local playerLocalScript:
gui = Game.Players.LocalPlayer.PlayerGui["Name"] -- what went wrong local players = game:GetService("Players") local player = players.LocalPlayer local run = game:GetService("RunService") gui.KillButton.MouseButton1Click:Connect(function() gui.RemoteEvent:FireServer(player,gui) -- Carry over the player and gui variable end) run.Heartbeat:Connect(function() gui.RemoteEvent2:FireServer(player,gui) -- Different Remote ok? end)
FIRE THE REMOTEFUNCTION
ServerScript:
local sound = script.KillSound gui.RemoteEvent.OnServerEvent:Connect(function(player,gui) -- Player variable used local character = player.Character if not character then return end local head = character:FindFirstChild("Head") if not head then return end for _, v in pairs(workspace:GetChildren()) do if v:IsA("Model") and v:FindFirstChild("Humanoid") and v:FindFirstChild("Head") and v ~= character then if (character.Head.Position - v.Head.Position).Magnitude <= 20 and v.Humanoid.Health > 0 and script.Parent.KillButton.Timer.Visible == false then sound:Play() v.Humanoid.Health = 0 character:MoveTo(v.HumanoidRootPart.Position) script.Parent.KillButton.Timer.Visible = true wait(1) script.Parent.KillButton.Timer.Text = "9" wait(1) script.Parent.KillButton.Timer.Text = "8" wait(1) script.Parent.KillButton.Timer.Text = "7" wait(1) script.Parent.KillButton.Timer.Text = "6" wait(1) script.Parent.KillButton.Timer.Text = "5" wait(1) script.Parent.KillButton.Timer.Text = "4" wait(1) script.Parent.KillButton.Timer.Text = "3" wait(1) script.Parent.KillButton.Timer.Text = "2" wait(1) script.Parent.KillButton.Timer.Text = "1" wait(1) script.Parent.KillButton.Timer.Visible = false break end end end end) gui.RemoteEvent2.OnServerEvent:Connect(function(player,gui) local character = player.Character if not character then return end local head = character:FindFirstChild("Head") if not head then return end local cankill = false for _, v in pairs(workspace:GetChildren()) do if v:IsA("Model") and v:FindFirstChild("Humanoid") and v:FindFirstChild("Head") and v ~= character then if (character.Head.Position - v.Head.Position).Magnitude <= 20 and v.Humanoid.Health > 0 and script.Parent.KillButton.Timer.Visible == false then cankill = true end end end if cankill then gui.KillButton.ImageTransparency = 0 else gui.KillButton.ImageTransparency = 0.65 end end)
This is why remote events are the best thing, unless you can enable FilteringEnabled for easier but unsafe scripting