It's supposed to give you a prompt button (E) to talk to in game characters and it is really confused me and I don't know where I have went wrong? ): ``--// Services

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

--// Main Variables

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

--// Player

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

--// Character

local Character = Player.Character or Player.CharacterAdded: Wait () local CharHMR = Character:WaitForChild ("HumanoidRootPart")

--// NPC

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

--// Functions

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 Exit = true Sounds.Click:Play() end end end)

UIS.InputBegan:Connect(function(Input) if Input.Keycode == Enum.Keycode.Z 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




--// Main Loop

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

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) ``