It's supposed to give you a prompt button (E) to talk to in game characters and it is really confused me and I don't know where I have went wrong? ): ``--// 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 Exit = 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 = DetectedNPC: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)"Out", "Linear")
wait (0.5)
Chatting = false
Detected = false
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
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, 0, 0, 0), "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), 0.07) end else Camera.CameraType = Enum.CameraType.Custom end end) ``
