So, sometimes on line 6 (in this script and another nearly identical one) it says "attempted to index nil with Parent. After doing some test I believe that it means hit is returning nil. Why? Sometimes when I start the game it will work fine and hit will return as it normally would (Both in-studio and in-game), but sometimes it will return nil. In the local script the player is teleport to a part 0.5 seconds after they touch the pad, but changing this to more time and less time didn't seem to affect it.
local vamp = game.ReplicatedStorage.Vampire
game.ReplicatedStorage.VampPad.OnServerEvent:Connect(function(player, hit)
print("GIVING VAMPIRE!")
local cvamp = vamp:Clone()
cvamp.Parent = hit.Parent
cvamp.CFrame = hit.Parent.Torso.CFrame
print("welding")
local weld = Instance.new("Weld")
weld.Part0 = hit.Parent.Torso
weld.Part1 = cvamp
weld.C0 = hit.Parent.Torso.CFrame:Inverse()
weld.C1 = cvamp.CFrame:Inverse()
weld.Parent = cvamp
hit.Parent.Humanoid.WalkSpeed = 20
end)
Here's the Server script:
local sgiver = game.Workspace.GiveVampire
local plr = game.Players.LocalPlayer
local VampGiver = game.ReplicatedStorage.VampPad
local CD = false
sgiver.Touched:Connect(function(hit)
if hit.Parent:WaitForChild("Humanoid") ~= nil and CD == false then
CD = true
print("Touched")
-- gives vampire to player (code below)
wait()
VampGiver:FireServer(hit)
print("Fired")
-- Teleports Player
wait(0.5)
hit.Parent.Torso.CFrame = game.Workspace.SpawnPart.CFrame
game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = 20
wait(0.5)
-- This is the cooldown V
CD = false
end
end)
I don't know if this is relevant, but the game is a team create game. That's also why there are so many notes.

3 comments
Since "hit" is one of the arguments passed to the function which is connected to the Remote, it's very difficult for us to spot why "hit" is nil. Could you provide us with the script that is firing the Remote?
Yes, I'll add that right now
Ok I added the server script