Help with UI Dialogue System - How to fix this Camera problem?

Does anyone know how I can fix my UI Dialogue System?

  • I’ve hired a scripter to script 3 different UI dialogues for me, the problem is that when you talk to a different npc the camera glitches out.

  • I asked the scripter since he said he would help me if any bugs occured but he blocked me.

  • I already tried my best to try to fix this, but since I didn’t script it and I’m not the best scripter myself I haven’t had any success in fixing it.

  • The problem only seems to occur when talking to the NPC called Joey, and then after it also doesn’t work with the other NPCs

--// Start local UI = script.Parent local TS = game:GetService("TweenService") local Player = game.Players.LocalPlayer local Char = Player.Character local HRP = Char:WaitForChild("HumanoidRootPart") --// Components local UpFrame = UI:WaitForChild("UpperFrame") local LowFrame = UI:WaitForChild("LowerFrame") local Dialogue = LowFrame:WaitForChild("TextDialogue") local SkipButton = LowFrame:WaitForChild("SkipDialogue") local Option = script:WaitForChild("Option") --// Functions local function upFrameTween()	local goal = {Position = UDim2.new(0.5,0,0.055,0)}	local info = TweenInfo.new(.25)	UpFrame.Visible = true	local Tween = TS:Create(UpFrame,info,goal)	Tween:Play() end local function lowFrameTween()	local goal = {Position = UDim2.new(0.5,0,0.945,0)}	local info = TweenInfo.new(.25)	LowFrame.Visible = true	local Tween = TS:Create(LowFrame,info,goal)	Tween:Play() end local function upFrameTweenOut()	local goal = {Position = UDim2.new(0.5,0,-0.25,0)}	local info = TweenInfo.new(.25)	local Tween = TS:Create(UpFrame,info,goal)	Tween:Play()	Tween.Completed:Connect(function()	UpFrame.Visible = false	end) end local function lowFrameTweenOut()	local goal = {Position = UDim2.new(0.5,0,1.25,0)}	local info = TweenInfo.new(.25)	local Tween = TS:Create(LowFrame,info,goal)	Tween:Play()	Tween.Completed:Connect(function()	LowFrame.Visible = false	end) end local isCameraTweenComplete = false local function tweenCameraToPart(part)	local camera = game.Workspace.CurrentCamera	camera.CameraType = Enum.CameraType.Scriptable	local startPosition = camera.CFrame	local endPosition = part.CFrame	local tweenInfo = TweenInfo.new(.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)	local tween = TS:Create(camera, tweenInfo, {CFrame = endPosition})	tween:Play()	tween.Completed:Connect(function()	isCameraTweenComplete = true	end) end local function tweenCameraToStartPosition()	local camera = game.Workspace.CurrentCamera	camera.CameraType = Enum.CameraType.Custom end local function goodOption(button)	button.BorderColor3 = Color3.new(0, 1, 0) end local function badOption(button)	button.BorderColor3 = Color3.new(1, 0, 0) end --// Prompt local NPC = game.Workspace:WaitForChild("NPCs"):WaitForChild("Kay") local Prompt = NPC:WaitForChild("DialoguePrompt"):WaitForChild("ProximityPrompt") local cams = NPC:WaitForChild("Camera") local OptionFrame = LowFrame.OptionFrame local UIList = OptionFrame:WaitForChild('UIListLayout') local function clearChildExcept(thing)	for _, child in ipairs(OptionFrame:GetChildren()) do	if child.Name ~= thing.Name then	child:Destroy()	end	end end local function tweenLighting()	local blur = game.Lighting.Blur	local goal = {Size = 8}	local info = TweenInfo.new(.25)	TS:Create(blur, info, goal):Play() end local function tweenLightingOut()	local blur = game.Lighting.Blur	local goal = {Size = 0}	local info = TweenInfo.new(.25)	TS:Create(blur, info, goal):Play() end local function anchorPlayer()	HRP.Anchored = true end local function unanchorPlayer()	HRP.Anchored = false end --// Mute Button Function local MuteBtn = LowFrame:WaitForChild("MuteBtn") local muted = false MuteBtn.MouseButton1Click:Connect(function()	if muted == false then	muted = true	script.SFX.Volume = 0	MuteBtn.Image = script.MuteIcons.MutedImage.Value	elseif muted == true then	muted = false	script.SFX.Volume = 0.5	MuteBtn.Image = script.MuteIcons.UnmutedImage.Value	end end) --// Typing Function local skipClicked = false local function typing(Dialogue, text)	for i = 1, #text do	if not skipClicked then	Dialogue.Text = string.sub(text, 1, i)	script.SFX:Play()	wait(0.055)	else	Dialogue.Text = text	break	end	end end --// Add a function to check the player's distance from the NPC local function checkPlayerDistance()	local distanceThreshold = 10 -- Set your desired distance threshold here	while true do	local playerPosition = HRP.Position	local npcPosition = NPC.HumanoidRootPart.Position	local distance = (playerPosition - npcPosition).Magnitude	if distance > distanceThreshold then	-- If the player moves away, close the dialogue	Dialogue.Text = ""	tweenCameraToStartPosition()	lowFrameTweenOut()	upFrameTweenOut()	clearChildExcept(UIList)	tweenLightingOut()	Prompt.Enabled = true	end	wait(1) -- Check the distance every second	end end --// Skip Mouse Detection SkipButton.MouseButton1Click:Connect(function()	skipClicked = true end) local Active = false Prompt.TriggerEnded:Connect(function()	spawn(checkPlayerDistance)	isCameraTweenComplete = false	tweenLighting()	upFrameTween()	lowFrameTween()	tweenCameraToPart(cams.Part)	clearChildExcept(UIList)	Dialogue.Text = ""	Prompt.Enabled = false	task.wait(.5)	--// Dialogues	anchorPlayer()	typing(Dialogue, "Hello.", 3, true, 0.05)	wait(1)	unanchorPlayer()	--// Option Handler	local existingOption = OptionFrame:FindFirstChild("NeutralOption")	if existingOption then	clearChildExcept(UIList)	existingOption:Destroy()	end	Dialogue.Text = "Hello."	local NeutralOpt = Option:Clone()	NeutralOpt.Parent = OptionFrame	NeutralOpt.Name = "NeutralOption"	NeutralOpt.Text = "Hello!"	skipClicked = false	NeutralOpt.MouseButton1Click:Connect(function()	clearChildExcept(UIList)	anchorPlayer()	typing(Dialogue, "How are you?", 3, true, 0.05)	wait(1)	unanchorPlayer()	skipClicked = false	Dialogue.Text = "How are you?"	--// Option 1 Handler	local existingOption = OptionFrame:FindFirstChild("Option1")	if existingOption then	existingOption:Destroy()	end	local Option1 = Option:Clone()	Option1.Text = "Good."	Option1.Parent = OptionFrame	Option1.Name = "Option1"	goodOption(Option1)	Option1.MouseButton1Click:Connect(function()	clearChildExcept(UIList)	anchorPlayer()	typing(Dialogue, "That's nice to hear!", 3, true, 0.05)	wait(1)	unanchorPlayer()	local existingOption = OptionFrame:FindFirstChild("LastOption")	if existingOption then	existingOption:Destroy()	end	--// Why?	local FinalOption = Option:Clone()	FinalOption.Parent = OptionFrame	FinalOption.Name = "LastOption"	FinalOption.Text = "Why?"	FinalOption.MouseButton1Click:Connect(function()	clearChildExcept(UIList)	skipClicked = false	anchorPlayer()	typing(Dialogue, "Just asking...", 3, true, 0.05)	wait(1)	unanchorPlayer()	--// Close dialogue function	Dialogue.Text = ""	skipClicked = false	tweenCameraToStartPosition()	lowFrameTweenOut()	upFrameTweenOut()	tweenLightingOut()	Prompt.Enabled = true	end)	end)	--// Option 2 Handler	local existingOption = OptionFrame:FindFirstChild("Option2")	if existingOption then	existingOption:Destroy()	end	local Option2 = Option:Clone()	Option2.Text = "Bad."	Option2.Parent = OptionFrame	Option2.Name = "Option2"	badOption(Option2)	Option2.MouseButton1Click:Connect(function()	clearChildExcept(UIList)	skipClicked = false	anchorPlayer()	typing(Dialogue, "Haha loser", 3, true, 0.05)	wait(1)	unanchorPlayer()	--// Close dialogue function	Dialogue.Text = ""	skipClicked = false	tweenCameraToStartPosition()	lowFrameTweenOut()	tweenLightingOut()	upFrameTweenOut()	Prompt.Enabled = true	end)	end) end) local CloseBtn = LowFrame:WaitForChild("ImageButton") CloseBtn.MouseButton1Click:Connect(function()	Dialogue.Text = ""	tweenCameraToStartPosition()	lowFrameTweenOut()	upFrameTweenOut()	Prompt.Enabled = true	clearChildExcept(UIList)	tweenLightingOut() end) 

If you need me to describe anything specific in the script feel free to ask.

How it normally works

What it does when you talk to a different npc
https://media.discordapp.net/attachments/1233090122417700895/1250520278509813862/image.png?ex=66a49683&is=66a34503&hm=7cc2bbbf19f395bf172ae33d505de34cd7748d52788ad82a435b0ad1bddf3ee6&=&format=webp&quality=lossless&width=1876&height=1056
https://media.discordapp.net/attachments/1233090122417700895/1250520390657376348/image.png?ex=66a4969e&is=66a3451e&hm=f793657d442764f6ca3fb1bbc38fd01f074d63100619d851384331defe0362c9&=&format=webp&quality=lossless&width=1100&height=648

If you need me to describe anything else please feel free to ask.

1 Like

The bottom two links dont work btw.

1 Like

Thank you for telling me, but it doesn’t seem like anyone is able to help anyway haha