It is a localscript inside the StarterPlayerScript which detects NPCs. But it breaks and doesn't detect anyone after a player dies.

local NPCS = {"Father Zhang Yixin", "Innkeeper GuoXin", "Fisherman LiuCan", "Mother ZhangJunyan"}
local player = game.Players.LocalPlayer
repeat wait() until workspace:FindFirstChild(player.Name) ~= nil
local character = player.Character
local Humanoid = character.Humanoid
repeat wait() until character:FindFirstChild("Humanoid")

character.Humanoid.Changed:connect(function()
	for i,v in pairs(workspace:GetChildren())do
		for a,k in pairs(NPCS)do
			if v.Name == k then
				local A = v.HumanoidRootPart.CFrame.p
				local B = character.HumanoidRootPart.CFrame.p
				local max = 10
				if (A-B).magnitude <= max then
					v.EGui.Enabled = true
					script.CurrentNPC.Value = v.Name
					script.InDistance.Value = true
					local Dialog = player.PlayerGui.NPCInteraction
					game:GetService("UserInputService").InputBegan:Connect(function(key)
						if key.KeyCode == Enum.KeyCode.F then
							if v.EGui.Talking.Value == false and v.Name == script.CurrentNPC.Value and script.InDistance.Value == true then
						    v.EGui.Talking.Value = true
						    v.EGui.Walked.Value = false
							Dialog.Frame:TweenPosition(UDim2.new(0.242,0,0.725,0),"Out","Quart",1)
							local Text = v.EGui.Message
							local NPCName = v.EGui.NPCName
							local RealText = Text.Value
							local NPCNames = NPCName.Value
							for i=1,#RealText do
								if v.EGui.Walked.Value ~= true then
								Dialog.Frame.TextLabel.Text = string.sub(RealText,1,i)
								Dialog.Frame.NPCName.Text = string.sub(NPCNames,1,i)
								wait(0.01)
							else
								   break
								end
							end
							if v.EGui.Walked.Value == false then
							Dialog.Frame.Left.BackgroundTransparency = 0
							Dialog.Frame.Left.Text = Text.Answer1.Value
							Dialog.Frame.Left.Todo.Value = Text.Todo.Value
							Dialog.Frame.Left.Todo.NPC.Value = Text.Todo.NPC.Value
							Dialog.Frame.Right.BackgroundTransparency = 0
							Dialog.Frame.Right.Text = Text.Answer2.Value
							Dialog.Frame.Right.Todo.Value = Text.Todo.Value
							Dialog.Frame.Right.Todo.NPC.Value = Text.Todo.NPC.Value
							end
							else
								local v = workspace:FindFirstChild(script.CurrentNPC.Value)
							end
						end
					end)
				else
					if v.Name == script.CurrentNPC.Value then
						local Text = v.EGui.Message
						local Dialog = player.PlayerGui.NPCInteraction
				    	v.EGui.Enabled = false	
				        Dialog.Frame.Position = UDim2.new(2.242,0,0.725,0)
					    Dialog.Frame.Left.BackgroundTransparency = 1
					    Dialog.Frame.Left.Text = ""
					    Dialog.Frame.Left.Todo.Value = ""
					    Dialog.Frame.Left.Todo.NPC.Value = ""
					    Dialog.Frame.Right.BackgroundTransparency = 1
					    Dialog.Frame.Right.Text = ""
					    Dialog.Frame.Right.Todo.Value = ""
					    Dialog.Frame.Right.Todo.NPC.Value = ""
					    Dialog.Frame.TextLabel.Text = ""
					    v.EGui.Talking.Value = false
					    v.EGui.Walked.Value = true
					    script.CurrentNPC.Value = ""
					    script.InDistance.Value = false
					break
					end				
				end
			end
		end
	end
end)

1 comment

0

You need to re-create the event when the NPC respawns.