local gui = script.Parent
local text = gui.TextBackground.Text
local op1 = gui.TextBackground.Option1
local op2 = gui.TextBackground.Option2
local headPic = gui.TextBackground.HeadPicture
local range = 7
local npcName = gui.TextBackground.NPCName
local plr = game.Players.LocalPlayer


local NPCs = {}

for i, descendant in pairs(workspace:GetDescendants()) do

	if descendant:FindFirstChild("Dialogue") then
		table.insert(NPCs, descendant)
		descendant.Head.InteractGui.Interact.Size = UDim2.new(0, 0, 0, 0)
	end
end


local closestNPC = script:WaitForChild("nil")
local previousClosestNPC = closestNPC

game:GetService("RunService").RenderStepped:Connect(function()


	previousClosestNPC = closestNPC
	closestNPC = script:WaitForChild("nil")


	local NPCsInRange = {}
	for i, NPC in pairs(NPCs) do

		local distance = plr:DistanceFromCharacter(NPC.HumanoidRootPart.Position)

		if distance <= range then
			table.insert(NPCsInRange, NPC)
		end
	end


	for i, NPCInRange in pairs(NPCsInRange) do

		if not closestNPC then closestNPC = NPCInRange end

		if closestNPC.Name == "nil" or plr:DistanceFromCharacter(closestNPC.HumanoidRootPart.Position) > plr:DistanceFromCharacter(NPCInRange.HumanoidRootPart.Position) then
			closestNPC = NPCInRange
		end
	end


	script:WaitForChild("ClosestNPC").Value = closestNPC 
end)


script:WaitForChild("ClosestNPC"):GetPropertyChangedSignal("Value"):Connect(function()

	if closestNPC.Name == "nil" then

		for i, NPC in pairs(NPCs) do

			NPC.Head.InteractGui.Interact:TweenSize(UDim2.new(0, 0, 0, 0), "InOut", "Quint", 0.3, true)
		end

		gui.TextBackground:TweenPosition(UDim2.new(0.5, 0, 1 + gui.TextBackground.Size.Y.Scale, 0), "InOut", "Quint", 0.3, true)

	else

		if previousClosestNPC and previousClosestNPC.Name ~= "nil" then previousClosestNPC.Head.InteractGui.Interact:TweenSize(UDim2.new(0, 0, 0, 0), "InOut", "Quint", 0.3, true) end

		closestNPC.Head.InteractGui.Interact:TweenSize(UDim2.new(1, 0, 1, 0), "InOut", "Quint", 0.3, true)


		previousClosestNPC = closestNPC
	end
end)


local function handleChoice(interactVal, option)

	local character = plr.Character or plr.CharacterAdded:Wait()
	local debounce = false

	if string.find(interactVal, 'H2Restaurant') and debounce == false then
		print('went thru rest')
		if option == 1 then
			debounce = true
			plr.PlayerGui.FoodShop.Frame.Visible = true 
		end


	elseif string.find(interactVal, 'H2Accessories') and debounce == false then
		print('went thru acess')
		if option == 1 then
			debounce = true
			plr.PlayerGui.AccessShop.Frame.Visible = true 
		end
	end

	gui.TextBackground:TweenPosition(UDim2.new(0.5, 0, 1 + gui.TextBackground.Size.Y.Scale, 0), "InOut", "Quint", 0.3, true)
end


local uis = game:GetService("UserInputService")

uis.InputBegan:Connect(function(inp, processed)

	if processed or not closestNPC then return end

	if inp.KeyCode == Enum.KeyCode.E then

		local interactValue = closestNPC.Dialogue.Value
		
		local npcImage = closestNPC:FindFirstChild('ImageLabel')
		
		headPic.Image = npcImage.Image
		
		npcName.Text = closestNPC.Name
		
		op1.OptionText.Text = closestNPC.Option1.Value
		op2.OptionText.Text = closestNPC.Option2.Value 
		text.Text = ""
		gui.TextBackground:TweenPosition(UDim2.new(0.5, 0, 0.866, 0), "InOut", "Quint", 0.3, true)
		wait(0.3)


		op1.MouseButton1Click:Connect(function()
			handleChoice(interactValue, 1)
		end)
		op2.MouseButton1Click:Connect(function()
			handleChoice(interactValue, 2)
		end)


		for i = 1, #interactValue do

			text.Text = string.sub(interactValue, 1, i)
			wait()
		end
	end
end)

An NPC needs a option1, option2, and and dialogue. Whenever I go to a NPC, it works fine, but the moment I go to another, it gives both of their things at the same time. I really don't know what the problem is. Please help? Thank you!