My goal here was to have the text keep on changing as you get closer to the part but only this part of the code works.
repeat wait() until game.Players.LocalPlayer.Character while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 160 then script.Parent.Frame.detect.Text = "Tiny amounts of Dark Energy Detected, be aware" else script.Parent.Frame.detect.Text = "No Dark Energy Detected" end end end
The rest of the code doesn't work, what am I doing wrong here?
repeat wait() until game.Players.LocalPlayer.Character while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 160 then script.Parent.Frame.detect.Text = "Tiny amounts of Dark Energy Detected, be aware" else script.Parent.Frame.detect.Text = "No Dark Energy Detected" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 140 then script.Parent.Frame.detect.Text = "Low amounts of Dark Energy Detected, advised leaving the area" else script.Parent.Frame.detect.Text = "Tiny amounts of Dark Energy Detected, be aware" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 120 then script.Parent.Frame.detect.Text = "Dark Energy Detected, Leave area" else script.Parent.Frame.detect.Text = "Low amounts of Dark Energy Detected, advised leaving the area" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 100 then script.Parent.Frame.detect.Text = "Lots of Dark Energy Detected, Leave area!" else script.Parent.Frame.detect.Text = "Dark Energy Detected, Leave area" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 80 then script.Parent.Frame.detect.Text = "Large amounts of Dark Energy Detected, Leave area now!" else script.Parent.Frame.detect.Text = "Lots of Dark Energy Detected, Leave area!" end end end
repeat wait() until game.Players.LocalPlayer.Character while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 160 then script.Parent.Frame.detect.Text = "Tiny amounts of Dark Energy Detected, be aware" else script.Parent.Frame.detect.Text = "No Dark Energy Detected" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 140 then script.Parent.Frame.detect.Text = "Low amounts of Dark Energy Detected, advised leaving the area" else script.Parent.Frame.detect.Text = "Tiny amounts of Dark Energy Detected, be aware" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 120 then script.Parent.Frame.detect.Text = "Dark Energy Detected, Leave area" else script.Parent.Frame.detect.Text = "Low amounts of Dark Energy Detected, advised leaving the area" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 100 then script.Parent.Frame.detect.Text = "Lots of Dark Energy Detected, Leave area!" else script.Parent.Frame.detect.Text = "Dark Energy Detected, Leave area" end end end while wait() do for i,v in pairs(game.Players:GetChildren()) do if (v.Character.Head.Position - game.Workspace.DEF.Torso.Position).magnitude <= 80 then script.Parent.Frame.detect.Text = "Large amounts of Dark Energy Detected, Leave area now!" else script.Parent.Frame.detect.Text = "Lots of Dark Energy Detected, Leave area!" end end end
Your problem is having a bunch of while loops that you want to run simultaneously to check if a player is getting nearer and nearer. Know that a while loop keeps running until you "break" out of it or it's conditional is set false.
You could use spawn()
function but the problem with this is you'll have multiple loops still running and it'll just look messy. You can condense the code into a single loop but will have to use a number of if-statements. I know there's fancier ways of doing this but to address the main issue:
local def = workspace.DEF while true do for i, v in pairs(game.Players:GetPlayers()) do if v.Character then local hrp = v.Character.HumanoidRootPart local distance = (hrp.Position - def.HumanoidRootPart.Position).magnitude if distance <= 10 then --do stuff elseif distance > 10 and distance <= 20 then --do stuff elseif distance > 20 and distance <= 30 then --do stuff end end end wait() end
Please comment if I missed something. In a class rn qq