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

Need help finding errors in this script? Script function is chatting

Asked by 4 years ago
Edited by Ziffixture 4 years ago

Please encode Lua code in the Lua block code tag (look for the Lua icon in the editor).
--// Made BY: Razorboots (Roblox 2019)
--// NPC Chat System: Gui Usage, Tweening, Camera Manipulation, Varible Switching





--// Services

local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Players = game:GetService("Players")






--//Main Variables


local DetectedNPC = nil
local Detected = false
local Chatting = false
local Skip = false
local Exit = false





--// Player


local Player = Players.LocalPlayer
local Camera = game.Workspace.CurrentCamera

local Gui = script.Parent
local Sounds = Gui.Sounds
local PromptLabel = Gui.PromptLabel
local LineLabel = Gui.LineLabel





--// Character


local Character = Player.Character or Player.CharacterAdded:Wait()
local CharHMR = Character:WaitForChild("HumanoidRootPart")





--//NPC


local NPCS = game.Workspace.WaitForChild("NPCS")





--// Functions


UIS.InputBegan:Connect(function(Input)
    if Input.KeyCode == Enum.KeyCode.X then
        if Chatting == true then
            skip = true
            Sounds.Click:Play()
        end
    end
end)

UIS.InputBegan:Connect(function(Input)
    if Input.KeyCode == Enum.KeyCode.Z then
        if Chatting == true then
            skip = true
            Sounds.Click:Play()
        end
    end
end)

UIS.InputBegan:Connect(Function(input))
    if Input.KeyCode == Enum.Keycode.Z then


        if Detected == true then
            local Lines = DetectNPC:FindFirstChild("Lines")

            if Lines then
                Sounds.Click:Play() 

                Chatting = true
                Detected = false

                LineLabel.Text = "   "

                PromptLabel:TweenSize(UDim2.new(0, 0, 0, 0), "Out", "Linear")
                LineLabel:TweenPosition(UDim2.new(0, 0, 0.8, 0), "In", "Linear")

            wait(0.5)

            for i, Line in pairs(Lines:GetChildren()) do
                local Text = Line.Value

                for i = 1 "Text" do
                    LineLabel.Text = string.sub(Text, 1, i)
                    Sounds.Talk:Play()
                    if Skip == true then
                        Skip = false
                        LineLabel.Text = Text
                        break
                    end
                    if Exit == true then
                        break
                    end
                    wait(0.07
                end
                    if Exit = true then
                        Exit = false
                        break
                    end
                    repeat wait() until Skip == true or Exit == true
                    Skip = false
                        end

                Exit = false
                Skip = false

            PromptLabel:TweenSize(UDim2.new 0, 0, 0, 0), "Out", "Linear")
            LineLabel:TweenPosition(UDim2.new(0,0, 1.2, 0), "In" "Linear")

            wait(0.5)

            Chatting = false
            Detected = false
        end
        end
    end
end)



--// Main Loop


RunService.RenderStepped:Connect(function()


    if Detected == false and Chatting == false then
        for i, NPC in pairs (NPCS:GetChildren()) do
            local Humanoid = NPC:FindFirstChild("Humanoid")
            local HMR = NPC:FindFirstChild("HumanoidRootPart")

            if Humanoid and HMR then 
                if (HMR.Position - CharHMR.Position).magnitude < 15 then
                    Detected = true
                    DetectedNPC = NPC
                    PromptLabel:TweenSize(UDim2.new(0, 60, 0, 60), "In", "Linear"
                    print(DetectedNPC.Name)
                end
            end

        end
    end

    if Detected == true and Chatting == false then
        local Humanoid = DetectedNPC:FindFirstChild("Humanoid")
        local HMR = DetectedNPC:FindFirstChild("HumanoidRootPart")

        if Humanoid and HMR then
            if (HMR.Position - CharHMR.Position).magnitude < 15 then
                Detected = false
                DetectedNPC = nil
                PromptLabel:TweenSize(UDim2.new((0, 60, 0, 60), "Out", "Linear")
                    print("No Longer Detected NPC")
            else
                local WTSP = Camera:WorldToScreenPoint(HMR.Position)
                PromptLabel.Position = UDim2.new(0, WTSP.X, 0, WTSP.Y)
            end
        end
    end

    if Chatting == true then
        local Humanoid = DetectedNPC:FindFirstChild("Humanoid")
        local HMR = DetectedNPC:FindFirstChild("HumanoidRootPart")

        if Humanoid and HMR then 
            Camera.CameraType = Enum.CameraType.Scriptable
            Camera.CFrame = Camera.CFrame:Lerp(HMR.CFrame * CFrame.new(-4, -4, -7 * Cframe.fromOrientation(math.rad(-20), math.rad(215), 0) )
    end
        else
            Camera.CameraType = Enum.CameraType.Scriptable
    )
        end

Answer this question