Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Dialog script not waiting for you to press E after you have chatted with the npc once?

Asked by 6 years ago

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

Answer this question