Hello, so this is a dialogue system script from my game (NOT BY ME, JUST WANTING TO ASK SOMEONE IF THEY CAN FIX IT) and the fade out and fade in gui thing is kind of broken. to make it work, make an "NPCS" (HAS TO BE THE SAME CAPITALIZATION) folder in workspace and put your character in there, then create a folder in the character named "Lines" and create some StringValues in them, name then Line1, Line2 and so on and then play. Just walk around a bit and you'll see how broken it is. This is the script:

local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Players = game:GetService("Players")

local DetectedNPC = nil
local Detected = false
local Chatting = false
local Skip = false
local Exit = false

local Player = Players.LocalPlayer
local Camera = game.Workspace.CurrentCamera

local Gui = script.Parent
local Sounds = Gui.Sounds
local PromptLabel = Gui.PromptLabel
local LineLabel = Gui.LineLabel
local Character = Player.Character or Player.CharacterAdded:Wait()
local CharHMR = Character:WaitForChild("HumanoidRootPart")

local NPCS = game.Workspace:WaitForChild("NPCS")

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X
	then
		if Chatting == true then
			Skip = true
			Sounds.Click:Play()
		end
	end
end)

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.Z
	then
		if Chatting == true then
			Skip = true
			Sounds.Click:Play()
		end
	end
end)

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.E then
	
		if Detected == true then
			local Lines = DetectedNPC:FindFirstChild("Lines")
			if Lines then
				Sounds.Click:Play()
				
				Chatting = true
				Detected = false
				
				LineLabel.Text = " "
				
				PromptLabel:TweenSize(UDim2.new (0, 0, 0, 0), "Out", "Linear")
				LineLabel:TweenPosition(UDim2.new (0, 0, 0.8, 0), "In", "Linear")
				
				wait(0.5)
				
				for i, Line in pairs(Lines:GetChildren()) do
					local Text = Line.Value
					for i = 1, #Text do
						LineLabel.Text = string.sub(Text, 1, i)
						Sounds.Talk:Play()
						if Skip == true then
							Skip = false
							LineLabel.Text = Text
							break
						end
						if Exit == true then
							break
						end
						wait(0.07)
					end
					if Exit == true then
						Exit = false
						break
					end
					repeat wait() until Skip == true or Exit == true
					Skip = false
			end
			Exit = false
			Skip = false
			
			PromptLabel:TweenSize(UDim2.new (0, 0, 0, 0), "Out", "Linear")
				LineLabel:TweenPosition(UDim2.new (0, 0, 1.2, 0), "Out", "Linear")
				
				wait(0.5)
				Chatting = false
				Detected = false
		end
		end
		end
		end)
	
	RunService.RenderStepped:Connect(function()
		
		if Detected == false and Chatting == false then
			for i, NPC in pairs(NPCS:GetChildren()) do
				local Humanoid = NPC:FindFirstChild("Humanoid")
				local HMR = NPC:FindFirstChild("HumanoidRootPart")
				
				if Humanoid and HMR then
					if (HMR.Position - CharHMR.Position).magnitude < 15 then
						Detected = true
						DetectedNPC = NPC
						PromptLabel:TweenSize(UDim2.new(0, 60, 0, 60), "In", "Linear")
						print(DetectedNPC.Name)
					end
				end
			end
		end
		
		if Detected == true and Chatting == false then
			local Humanoid = DetectedNPC:FindFirstChild("Humanoid")
				local HMR = DetectedNPC:FindFirstChild("HumanoidRootPart")
				
				if Humanoid and HMR then
			if (HMR.Position - CharHMR.Position).magnitude > 15 then
				Detected = false
				DetectedNPC = nil
				PromptLabel:TweenSize(UDim2.new (0, 0, 0, 0), "Out", "Linear")
				print("No Longer Detected NPC")
			else
					local WTSP = Camera:WorldToScreenPoint(HMR.Position)
					PromptLabel.Position = UDim2.new(0, WTSP.X, 0, WTSP.Y)
			end
		end
		
		end
	
	if Chatting == true then
		local Humanoid = DetectedNPC:FindFirstChild("Humanoid")
				local HMR = DetectedNPC:FindFirstChild("HumanoidRootPart")
				
				if Humanoid and HMR then
					Camera.CameraType = Enum.CameraType.Scriptable
					Camera.CFrame = Camera.CFrame:Lerp(HMR.CFrame * CFrame.new(-4, 4, -7) * CFrame.fromOrientation(math.rad(-20), math.rad(215), 0), 0.07)
	end
	else
		Camera.CameraType = Enum.CameraType.Custom
		
	end
	
	end)

Instructions on where to put it and stuff: in startergui, make a ScreenGUI called NPC_Chat_System_Gui (at least that's what it is in my game) create a TextLabel called PromptLabel and as the text just enter in E (cause that's how to activate the dialogue system) and then a TextLabel called LineLabel with the text Label (this is supposed to be the dialogue box). and then, a local script with the pasted script in it.

MODEL IF YOU'RE LAZY: https://www.roblox.com/library/5311093150/dialog-thing

hope somebody can help me, goodbye