Hello scripting helpers i have a problem with a custom dialog system. Where you chat with a npc and stuff.
The problem is that when i'm done with a chat with a npc and then start a chat with it again it does not wait for you to click E it just continues for the first message but then goes back to normal in the next message so for example it would first be: "Hello to you" and then it would not wait for you to press E but just go to the next message and for example say: "This is a problem" and then wait for you to press E in the rest of the dialog.
--These two scripts are placed in the startergui
--Module script
local m = {}
local chatui = script.Parent.Parent.Parent:WaitForChild("ChatUi")
local ui = script.Parent.Parent.Parent:WaitForChild("ui") --Some other stuff
local background = chatui:WaitForChild("Background")
local chatfr = background:WaitForChild("Chat")
local chatnamefr = background:WaitForChild("ChatName")
local chatimagefr = background:WaitForChild("ChatImage")
local pressefr = background:WaitForChild("PressE")
local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse()
local chatting = false
function m.preparechat(chatname,chatimage) --Just setting some things up
chatui.Enabled = true
ui.Enabled = false
chatfr.Text = ""
chatnamefr.Text = chatname
chatimagefr.Image = "rbxassetid://"..chatimage
end
function m.settext(text)
chatfr.Text = text
end
function m.startchat(chats,chatname,chatimage,open) --This is the main script
if #chats > 0 then
local currentnumber = 0
if chatting == false then
chatting = true
m.preparechat(chatname,chatimage)
for a,b in pairs(chats) do --Getting the messages
pressefr.Visible = false
keypressed = false
currentnumber = a
for i = 1,#b do --A effect with the words where it "types"
local text = string.sub(b,1,i)
m.settext(text)
if string.sub(b,i,i) == "." or string.sub(b,i,i) == "!" or string.sub(b,i,i) == "?" then
if i ~= #b then --A wait
wait(.2)
end
elseif string.sub(b,i,i) == "," then --A shorter wait
if i ~= #b then
wait(.05)
end
end
wait()
end
pressefr.Visible = true
local number = a
mouse.KeyDown:connect(function(key)
key = string.upper(key)
if key == "E" then --When you have read the message and what to continue the chat
if number == currentnumber then --Debug
keypressed = true
end
end
end)
repeat wait() until keypressed == true --Waits until you have pressed E
end
if open then --Checks if open is a thing
open.Visible = true
end
end
chatui.Enabled = false
ui.Enabled = true
chatting = false
end
return true
end
return m
--Local script
local chat = require(script.Parent:WaitForChild("Modules"):WaitForChild("Chat"))
local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse()
local char = plr.Character or plr.CharacterAdded:Wait()
local range = 20
local chatting = false
local open = script.Parent.Parent:WaitForChild("ui"):WaitForChild("InventoryUi")
local target = workspace:WaitForChild("Dummy")
while true do
if (target:WaitForChild("HumanoidRootPart").CFrame.p - char.HumanoidRootPart.CFrame.p).magnitude <= range then
local billboard
if chatting == false then --Debug
if not target:WaitForChild("HumanoidRootPart"):FindFirstChildOfClass("BillboardGui") then --A billboard that says E
billboard = script:WaitForChild("BillboardGui"):Clone()
billboard.Parent = target:WaitForChild("HumanoidRootPart")
end
end
mouse.KeyDown:connect(function(key) --Checks if the player wants to chat with the target
if string.upper(key) == "E" then
if chatting == false then
chatting = true
local done = chat.startchat({"Hello i think i know you. But i'm not sure... So i'm just going so think me about","From - Harry.","Your good friend from your home town"} --Chat,"Harry" --Chat name,1650560222 --Chat image,open --And what gui that is going to open)
repeat wait() until done
chatting = false
end
end
end)
else
if target:WaitForChild("HumanoidRootPart"):FindFirstChildOfClass("BillboardGui") then
target:WaitForChild("HumanoidRootPart"):FindFirstChildOfClass("BillboardGui"):Destroy()
end
end
wait()
end
