Custom NPC dislog that doesn't work well

Hello! I wrote a script for custom npc dialog from youtube. But I guess I wrote it wrong, cause it doesn’t work well.

https://youtu.be/tAfqnPn6XDk Here is the tutorial I used

Please, could somebody help and say what did I do wrong. Cause output doesn’t write any errors about this script and GUIs just don’t show like in the tutorial.

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.CharacterAdeed:Wait()
local CharHMR = Character:WaitForChild("HumanoidRootPart")

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

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 == false 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), "In", "Bounce")
			LineLabel:TweenPosition(UDim2.new(0,0,0.8,0), "In", "Bounce")
			
			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", "Bounce")
			LineLabel:TweenPosition(UDim2.new(0,0,1.2,0), "Out", "Bounce")
			
			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", "Bounce")
				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", "Bounce")
			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)
3 Likes

You should apply basic debugging to your code to try and isolate a problem. Remember that the Scripting Support category is not a do-my-work category and you should not be posting your entire code into a thread asking for help. Try identifying what the problem is by applying basic debug strategies in and around the code where you believe an issue may be forming.

There isn’t really a clear indication of what the issue is either. For example, how is it not working well?

3 Likes