So I'm making a horror game where I need to make dialogue and make an NPC move. So I put that in a screengui that is in startergui. It works fine when in single player but in multiplayer, the first user has the only script that works.
The code is all in a server script NOT a local script.
All my code is here:
local player = script.Parent.Parent.Parent while true do if workspace.startGame.Value then break end wait() end local NPC = workspace.Chaperone local humanoid = workspace.Chaperone.Humanoid function anchor() NPC["Left Arm"].Anchored = true NPC["Right Arm"].Anchored = true NPC["Left Leg"].Anchored = true NPC["Right Leg"].Anchored = true NPC.Torso.Anchored = true NPC.Head.Anchored = true end function unanchor() NPC["Left Arm"].Anchored = false NPC["Right Arm"].Anchored = false NPC["Left Leg"].Anchored = false NPC["Right Leg"].Anchored = false NPC.Torso.Anchored = false NPC.Head.Anchored = false end local label = player.PlayerGui.Messages.TextLabel local blackout = player.PlayerGui.Messages.Frame local text = "Chaperone: OH NO!!! The bus broke down!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end for count = 1,2 do NPC.Humanoid:MoveTo(Vector3.new(0,0,10)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(10,0,10)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(10,0,0)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(0,0,0)) NPC.Humanoid.MoveToFinished:Wait() end wait(2) text = "Chaperone: What are we going to do? What are we going to do? What are we going to do?" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end for count = 1,3 do NPC.Humanoid:MoveTo(Vector3.new(0,0,10)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(10,0,10)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(10,0,0)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(0,0,0)) NPC.Humanoid.MoveToFinished:Wait() end wait(0.5) anchor() wait(1) label.Text = "" text = "Chaperone: We should find some wood around here to build a shelter until we are rescued. You might also find some useful items!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end local script1 = workspace.wood.Script local wood = workspace.wood wood.CanCollide = true wood.Transparency = 0 script1.Disabled = false script1 = workspace.wood1.Script wood = workspace.wood1 wood.CanCollide = true wood.Transparency = 0 script1.Disabled = false script1 = workspace.wood2.Script wood = workspace.wood2 wood.CanCollide = true wood.Transparency = 0 script1.Disabled = false script1 = workspace.wood3.Script wood = workspace.wood3 wood.CanCollide = true wood.Transparency = 0 script1.Disabled = false script1 = workspace.wood4.Script wood = workspace.wood4 wood.CanCollide = true wood.Transparency = 0 script1.Disabled = false workspace.woodBarrior.CanCollide = false workspace.woodBarrior1.CanCollide = false workspace.woodBarrior:Destroy() workspace.woodBarrior1:Destroy() unanchor() NPC.Humanoid:MoveTo(Vector3.new(40.57, 0.5, 44.917)) NPC.Humanoid.MoveToFinished:Wait() NPC.Humanoid:MoveTo(Vector3.new(40.57, 0.5, 39.917)) NPC.Humanoid.MoveToFinished:Wait() wait(0.5) anchor() local collecting = workspace.Collecting collecting.Value = true while collecting.Value do local value = workspace.WoodCollected label.Text = "Wood Collected: " .. workspace.WoodCollected.Value if workspace.WoodCollected.Value==5 then collecting.Value = false end wait() end workspace.WoodCollected.Value=5 wait(1) text = "Chaperone: Nice work! Now we have somewhere to stay! Luckily, we can use the bus seats as beds. Now you can keep exploring for a little longer!" local cabin = game.ReplicatedStorage.Cabin:Clone() cabin.Parent = workspace player.PlayerGui.WoodCollected.TextLabel.Text = "" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(30) text = "Chaperone: QUICK! Get into the cabin! It's starting to rain and it's getting dark!!" game.Lighting.TimeOfDay = "20:00:00" wait(5) local damageareas = game.ReplicatedStorage.raindamageareas:Clone() damageareas.Parent = workspace local rain = game.ReplicatedStorage.rain:Clone() rain.Parent = workspace local rain1 = game.ReplicatedStorage.rain1:Clone() rain1.Parent = workspace for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(15) local text = "Chaperone: OK, I think we should go to sleep now..." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end for b = 1,100 do blackout.BackgroundTransparency = blackout.BackgroundTransparency - b/100 wait() end wait(3) game.Lighting.TimeOfDay = "10:00:00" local rain = workspace.rain:GetChildren() for c = 1, #rain do rain[c]:Destroy() end for e = 1,100 do blackout.BackgroundTransparency = blackout.BackgroundTransparency + e/100 wait() end local rain1 = workspace.raindamageareas:GetChildren() for c = 1, #rain1 do rain1[c]:Destroy() end local text="Chaperone: The rescue team should be coming later today or tomorrow. We just have to wait and see..." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(10) label.Text = "" label.BackgroundTransparency = 0.5 wait(60) local text = "Chaperone: It's almost night-time. You should head back to the cabin." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(10) game.Lighting.TimeOfDay = "20:00:00" wait(10) local text = "Chaperone: Uh-oh! The cabin is about to collapse!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(3) local cabinchildren = workspace.Cabin:GetChildren() for g=1, #cabinchildren do cabinchildren[g]:Destroy() end local collapsed = game.ReplicatedStorage.collapsed:Clone() collapsed.Parent = workspace local demon = game.ReplicatedStorage.Demon demon.Parent = workspace local text = "Chaperone: RUN RUN RUN RUN!!!!!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(30) demon:Destroy() local text = "Chaperone: Phew! That was a close one. It should be gone now." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(2) local text = "Chaperone: I think I saw a cave somewhere near here. Maybe we can take shelter there?" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(20) text = "Chaperone: Take shelter in the cave! It's starting to rain!" wait(5) game.ReplicatedStorage.cabindamagearea:Clone().Parent = workspace local damageareas = game.ReplicatedStorage.raindamageareas:Clone() damageareas.Parent = workspace local rain = game.ReplicatedStorage.rain:Clone() rain.Parent = workspace local rain1 = game.ReplicatedStorage.rain1:Clone() rain1.Parent = workspace for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(20) for n = 1,100 do blackout.BackgroundTransparency = blackout.BackgroundTransparency - n/100 wait() end target = CFrame.new(62.11, -15.158, 4427.591) --could be near a brick or in a new area for i, player in ipairs(game.Players:GetChildren()) do --Make sure the character exists and its torso exists if player.Character and player.Character:FindFirstChild("Torso") then --add an offset of 5 for each character player.Character.Torso.CFrame = target + Vector3.new(0, i * 5, 0) end end for m = 1,100 do blackout.BackgroundTransparency = blackout.BackgroundTransparency + m/100 wait() end workspace.SpawnLocation:Destroy() local spawnpoint = game.ReplicatedStorage.SpawnLocation:Clone() spawnpoint.Parent = workspace text = "Chaperone: Oh no! Where are we? NOOO! It looks like the cave collapsed! We have to get out of the cave! Quick!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(2) local demon1 = workspace.Demon1 demon1.Name = "Demon" for timeLeft = 1,60 do label.Text="Get out of the cave! (" .. 60-timeLeft .. ")" wait(1) end local caveDetector = game.ReplicatedStorage.caveDetector:Clone() caveDetector.Parent = workspace workspace.SpawnLocation:Destroy() local spawnlocation1 = game.ReplicatedStorage.SpawnLocation1:Clone() spawnlocation1.Parent = workspace text = "Chaperone: We got out! That was hard..." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(3) wait(1) text = "Chaperone: AAAAAAH!!! IT'S THE DEMON!! " for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(1) workspace.startEnding.Value = true game.ReplicatedFirst.EndPart:Clone().Parent = workspace game.ReplicatedFirst.FocusPart:Clone().Parent = workspace --game.ReplicatedFirst.CameraScript:Clone().Parent = player.PlayerScripts text = "Demon: I have now trapped you!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(3) text = "Demon: You now have nowhere to go..." for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(3) text = "Demon: I now can finally kill you!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(3) text = "..." for i = 1, #text do label.Text = string.sub(text,1,i) wait(1) end wait(1) game.ReplicatedFirst.EndPart1:Clone().Parent = workspace game.ReplicatedFirst.FocusPart1:Clone().Parent = workspace game.ReplicatedStorage["Police Officer."]:Clone().Parent = workspace game.ReplicatedStorage["Police Officer.1"]:Clone().Parent = workspace text = "Police: HALT!!!!" workspace.police.Value = true for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(1) text = "Demon: UH-OH!!!" for i = 1, #text do label.Text = string.sub(text,1,i) wait() end wait(10) label.Text = "You Win!!" script.Parent.Frame.BackgroundTransparency = 1