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.

https://developer.roblox.com/en-us/articles/Debugging

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

3 Likes