Explanation
So, I have a game with two npcs and when you come to them within a 6 stud radius a billboard gui appears with the keycap H and when you press H it starts up the dialogue. It works greatly but once i talk to anyone of them then go to the other the text glitches and the name doesn't change.
I checked the scripts and it should work normally.
Scripts(3):
dialogue script
local player = game.Players.LocalPlayer
local CreateDialogueEvent = game.ReplicatedStorage.CreateDialogueEvent
local DialogueFrame = player.PlayerGui.dialogue.Frame
local order
--{0.278, 0},{0.656, 0}
local function playSound(sound_id) -- Plays typing sound
local sound = Instance.new("Sound",game.ReplicatedStorage)
sound.SoundId = sound_id
sound.Volume = .1
sound.PlayOnRemove = true
sound:Destroy()
end
local function textAnimate(content) -- Animates each letter
for i=1,string.len(content) do
DialogueFrame.Content.Text = string.sub(content,1,i)
playSound("rbxassetid://915576050")
if string.sub(content,i,i) == "!" or string.sub(content,i,i) == "." or string.sub(content,i,i) == "?" then
wait(1)
elseif string.sub(content,i,i) == "," then
wait(.5)
else
wait(.05)
end
end
content = nil
return true
end
CreateDialogueEvent.Event:Connect(function(nameS, content, content2) -- activates when called from the Server
if not player:findFirstChild("secretEnding") then
DialogueFrame.name.Text = nameS
DialogueFrame.Content.Text = ""
DialogueFrame.Visible = true
DialogueFrame.Continue.Visible = false
local bool = textAnimate(content)
print(bool)
if bool == true and content2 ~= nil then
wait(1)
bool = textAnimate(content2)
if bool == true then
DialogueFrame.Continue.Visible = true
DialogueFrame.Continue.MouseButton1Click:Connect(function()
DialogueFrame.Visible = false
player.Character.Humanoid.WalkSpeed = 16
nameS, content, content2 = nil
end)
end
else
DialogueFrame.Continue.Visible = true
DialogueFrame.Continue.MouseButton1Click:Connect(function()
DialogueFrame.Visible = false
player.Character.Humanoid.WalkSpeed = 16
nameS, content, content2 = nil
end)
end
end
end)
npc 1 script
local inputServ = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local char = player.Character
local npc = game.Workspace.Bartender
local near = false
local clicked = false
local npcName = "Joe"
local content = npc.D1
local content2 = npc.D2 -- can be nill
local pTorso = char:FindFirstChild("UpperTorso")
local nTorso = npc.UpperTorso
while wait(0.3) do
if (pTorso.CFrame.p - nTorso.CFrame.p).magnitude <= 6.25 and near == false and clicked == false then
near = true
npc.PresH.Enabled = true
-- check for H input
inputServ.InputBegan:Connect(function(input, gameProccesed)
if input.UserInputType == Enum.UserInputType.Keyboard and clicked == false then
if input.KeyCode == Enum.KeyCode.H and clicked == false then
clicked = true
npc.PresH.Enabled = false
game.ReplicatedStorage.CreateDialogueEvent:Fire(npcName, content.Value, content2.Value)
end
end
end)
elseif (pTorso.CFrame.p - nTorso.CFrame.p).magnitude > 6.25 then
near = false
npc.PresH.Enabled = false
clicked = false
end
end
npc 2 script
local inputServ = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local char = player.Character
local npc = game.Workspace.DrDenaro
local near = false
local clicked = false
local npcName = "Dr. Denaro"
local content = npc.D1
local content2 = nil -- can be nill
local pTorso = char:FindFirstChild("UpperTorso")
local nTorso = npc.UpperTorso
while wait(0.3) do
if (pTorso.CFrame.p - nTorso.CFrame.p).magnitude <= 6.25 and near == false and clicked == false then
near = true
npc.PresH.Enabled = true
-- check for H input
inputServ.InputBegan:Connect(function(input, gameProccesed)
if input.UserInputType == Enum.UserInputType.Keyboard and clicked == false then
if input.KeyCode == Enum.KeyCode.H and clicked == false then
clicked = true
npc.PresH.Enabled = false
game.ReplicatedStorage.CreateDialogueEvent:Fire(npcName, content.Value, content2)
end
end
end)
elseif (pTorso.CFrame.p - nTorso.CFrame.p).magnitude > 6.25 then
near = false
npc.PresH.Enabled = false
clicked = false
end
end
