UPDATE: Hit is defined, line 12
This script is inside a tool, meant to kill Zombies (Hostile NPCs with a Humanoid named Zombie), and when the tool is fired the ball(bullet) kills the Zombie. It works on test mode in ROBLOX Studio, but not when a physically play the game. Script looks very long, but all I worry about are lines 12-34
--Script looks very long, but all I worry about are lines 12-34
ball = script.Parent
damage = math.random(30,60)
local hitt = false
HitSound = Instance.new("Sound")
HitSound.Name = "HitSound"
HitSound.SoundId = "http://www.roblox.com/asset/?id=11945266"
HitSound.Pitch = .8
HitSound.Volume = 1
HitSound.Parent = ball
function onTouched(hit)
if hit.Parent:findFirstChild("ForceField") ~= nil then return end
if hit.CanCollide == false and hit.Parent:findFirstChild("Zombie") == nil then return end
if hit.Parent.className == "Hat" and hitt == false then
hitt = true
hit:BreakJoints()
hit.Velocity = ball.Velocity
hit.Parent.Parent = game.Workspace
end
if hit:findFirstChild("Metal") ~= nil and hitt == false then
hitt = true
for i = 1,math.random(1,3) do
local j = Instance.new("Part")
j.formFactor = "Plate"
j.Size = Vector3.new(1,.4,1)
j.BrickColor = BrickColor.new("Bright yellow")
j.CanCollide = false
j.Velocity = Vector3.new(math.random(-10,10),math.random(-10,10),math.random(-10,10))
j.CFrame = script.Parent.CFrame
j.Parent = game.Workspace
end
end
local humanoid = hit.Parent:findFirstChild("Zombie")
if humanoid ~= nil and hitt == false then
hitt = true
tagHumanoid(humanoid)
if hit.Name == "Head" then
humanoid.Health = humanoid.Health - damage * 2
elseif hit.Name == "Torso" then
humanoid.Health = humanoid.Health - damage * 1.5
else
humanoid.Health = humanoid.Health - damage
end
wait(.2)
untagHumanoid(humanoid)
end
if hitt == true then
HitSound:play()
ball.Parent = nil
end
end
function tagHumanoid(humanoid)
local tag = ball:findFirstChild("creator")
if tag ~= nil then
local new_tag = tag:clone()
new_tag.Parent = humanoid
end
end
function untagHumanoid(humanoid)
if humanoid ~= nil then
local tag = humanoid:findFirstChild("creator")
if tag ~= nil then
tag.Parent = nil
end
end
end
connection = ball.Touched:connect(onTouched)
while true do
wait(.01)
if damage < 0 then
break
else
damage = damage - .2
end
end
ball.Parent = nil
The ball(bullet) spawns when fired, but does not take any damage to the Zombie. The scripting is correct, no errors, bullet spawns works on studio but not when played. Please help!

2 comments
Have you checked out the developer console while playing on a server? If you can't do that, test with a server started through Studio. I am betting on there being an issue with client-server communication.
I have still nothing