i want to make a npc E to chat i know about how to create E to start the chat but what i wanna know is that how do i make it so the E button i created goes to the npcs torso? and when i press E the camera gets near the NPC i tried a 200 line script and it gave me 40 errors ( yep) so i have come to devforum
script ive tried so far"
--// Do not COPY!!!!
--// Services
local RunServices = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Players = game:GetService("Players")
--// Main Variales
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.E then
if Detected == true then
local Lines = DetectedNPC:GetChildren()
if Lines then
Sounds.Click:Play()
Chatting = true
Detected = false
LineLabel.Text = " "
PromptLabel:Tweensize(Udim2.new.new(0, 0, 0, 0), "Out", "Linear")
LineLabel:Tweensize(Udim2.new.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.7)
end
end
end
end
end
RunServices.RenderStepped:Connect(function()
if Detected == false and Chatting == false then
for i , NPCS 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).Magnitiude < 15 then
Detected = true
DetectedNPC = NPC
PromptLabel:TweenSize(Udim2.new.new.new.new()(0,60,0,60), "In" , "Linear" )
print(DetectedNPC.Name)
end
end
end
end
end)
if Detected == true and Chatting == false then
local Humanoid = NPC:FindFirstChild("Humanoid")
local HMR = DetectedNPC:FindFirstChild("HumanoidRootPart")
if Humanoid and HMR then
if (HMR.Position - CharHMR.Position).Magnitiude > 15 then
Detected = false
DetectedNPC = nil
PromptLabel:TweenSize(Udim2.new(0,0,0,0), "Out" , "Linear" )
print ("THIS SCRIPT IS HARD BUT NO LONGER DETECTED NPC")
else
local WTSP = Camera:WorldToScreenPoint(HMR.Position)
Promptlabel.Position = Udim2.new.new.new.new(0, WTSP.X , 0 , WTSP.Y)
end
end
end
if chatting == true then
local Humanoid = NPC: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)