Okay, so apparently this works in studio when I solo test it, but not on an actual server. Can anyone see the error? I'm trying to make a functioning radio.
script.Parent.Main.EnterText.FocusLost:connect(function () if script.Parent.Main.EnterText.Text == "[ Enter Text ]" then return end if script.Parent.Main.EnterText.Text == "" then return end plyrs = game.Players:GetPlayers() for i = 1, #plyrs do if not plyrs[i].PlayerGui:FindFirstChild("Comms") then if not plyrs[i].Backpack:FindFirstChild("Virgo Comm") then return end L = plyrs[i].Backpack:FindFirstChild("Virgo Comm") L.Main.Messages.MSG5.Text = L.Main.Messages.MSG4.Text wait() L.Main.Messages.MSG4.Text = L.Main.Messages.MSG3.Text wait() L.Main.Messages.MSG3.Text = L.Main.Messages.MSG2.Text wait() L.Main.Messages.MSG2.Text = L.Main.Messages.MSG1.Text wait() L.Main.Messages.MSG1.Text = "" wait() L.Main.Messages.MSG1.Text = script.Parent.Parent.Parent.Name.."// "..game.Players:FindFirstChild(script.Parent.Parent.Parent.Name).PlayerGui.Comms.Main.EnterText.Text wait() L.Comms.Alert:Clone().Parent = L.Parent.Parent.Character.Head() L.Parent.Parent.Character.Head.Alert.PlayOnRemove = true L.Parent.Parent.Character.Head.Alert:remove() end C = plyrs[i].PlayerGui:FindFirstChild("Comms") C.Main.Messages.MSG5.Text = C.Main.Messages.MSG4.Text wait() C.Main.Messages.MSG4.Text = C.Main.Messages.MSG3.Text wait() C.Main.Messages.MSG3.Text = C.Main.Messages.MSG2.Text wait() C.Main.Messages.MSG2.Text = C.Main.Messages.MSG1.Text wait() C.Main.Messages.MSG1.Text = "" wait() C.Main.Messages.MSG1.Text = script.Parent.Parent.Parent.Name.."// "..game.Players:FindFirstChild(script.Parent.Parent.Parent.Name).PlayerGui.Comms.Main.EnterText.Text wait() C.Alert:Play() end script.Parent.Main.EnterText.Text = "[ Enter Text ]" end)
Make sure you use a LocalScript when using events in GUIs! While some events do work in normal scripts, others such as FocusLost do not! The reason it worked in Solo mode but not on a server is because in Solo, normal scripts are executed locally. However, this does create another problem. You can not access another player's PlayerGui from a LocalScript. To solve this, try using a RemoteEvent.
In a LocalScript at the place where you had your script, put this:
local focusLostRemoteEvent = script.Parent:WaitForChild("Main"):WaitForChild("EnterText"):WaitForChild("FocusLostRemoteEvent") script.Parent.Main.EnterText.FocusLost:connect(function() focusLostRemoteEvent:FireServer() end)
Then, replace the code you had in your normal Script with this:
local focusLostRemoteEvent = Instance.new("RemoteEvent") focusLostRemoteEvent.Name = "FocusLostRemoteEvent" focusLostRemoteEvent.Parent = script.Parent.Main.EnterText focusLostRemoteEvent.OnServerEvent:connect(function() if script.Parent.Main.EnterText.Text == "[ Enter Text ]" then return end if script.Parent.Main.EnterText.Text == "" then return end plyrs = game.Players:GetPlayers() for i = 1, #plyrs do if not plyrs[i].PlayerGui:FindFirstChild("Comms") then if not plyrs[i].Backpack:FindFirstChild("Virgo Comm") then return end L = plyrs[i].Backpack:FindFirstChild("Virgo Comm") L.Main.Messages.MSG5.Text = L.Main.Messages.MSG4.Text wait() L.Main.Messages.MSG4.Text = L.Main.Messages.MSG3.Text wait() L.Main.Messages.MSG3.Text = L.Main.Messages.MSG2.Text wait() L.Main.Messages.MSG2.Text = L.Main.Messages.MSG1.Text wait() L.Main.Messages.MSG1.Text = "" wait() L.Main.Messages.MSG1.Text = script.Parent.Parent.Parent.Name.."// "..game.Players:FindFirstChild(script.Parent.Parent.Parent.Name).PlayerGui.Comms.Main.EnterText.Text wait() L.Comms.Alert:Clone().Parent = L.Parent.Parent.Character.Head() L.Parent.Parent.Character.Head.Alert.PlayOnRemove = true L.Parent.Parent.Character.Head.Alert:remove() end C = plyrs[i].PlayerGui:FindFirstChild("Comms") C.Main.Messages.MSG5.Text = C.Main.Messages.MSG4.Text wait() C.Main.Messages.MSG4.Text = C.Main.Messages.MSG3.Text wait() C.Main.Messages.MSG3.Text = C.Main.Messages.MSG2.Text wait() C.Main.Messages.MSG2.Text = C.Main.Messages.MSG1.Text wait() C.Main.Messages.MSG1.Text = "" wait() C.Main.Messages.MSG1.Text = script.Parent.Parent.Parent.Name.."// "..game.Players:FindFirstChild(script.Parent.Parent.Parent.Name).PlayerGui.Comms.Main.EnterText.Text wait() C.Alert:Play() end script.Parent.Main.EnterText.Text = "[ Enter Text ]" end)
Doing that should fix the problem.