Needs fixing at line 50
-----------------
--| Constants |--
-----------------
local BLAST_RADIUS = 12
local BLAST_PRESSURE = 0
local RED_TEXTURE_ID = 'http://www.roblox.com/asset/?id=94691735'
--------------------
--| WaitForChild |--
--------------------
-- Waits for parent.child to exist, then returns it
local function WaitForChild(parent, childName)
assert(parent, "ERROR: WaitForChild: parent is nil")
while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end
return parent[childName]
end
-----------------
--| Variables |--
-----------------
local DebrisService = Game:GetService('Debris')
local ContentProviderService = Game:GetService('ContentProvider')
local TimeBomb = script.Parent
local BombMesh = WaitForChild(TimeBomb, 'Mesh')
local BoomSound = WaitForChild(TimeBomb, 'Boom')
local BeepSound = WaitForChild(TimeBomb, 'Beep')
local CreatorTag = WaitForChild(TimeBomb, 'creator')
local OriginalTextureId = BombMesh.TextureId
local Connection = nil
local ParentTorso = WaitForChild(TimeBomb, 'ParentTorso')
local XGraceDistance=2.5
local YGraceDistance=2.5
-----------------
--| Functions |--
-----------------
-- Returns the ancestor that contains a Humanoid, if it exists
local function FindCharacterAncestor(subject)
if subject and subject ~= Workspace then
local humanoid = subject:FindFirstChild('Humanoid')
if humanoid then
return subject, humanoid
else
return FindCharacterAncestor(subject.Parent)
end
end
return nil
end
-- When a player is hit, if they are alive they will be tagged
local function OnExplosionHit(hitPart)
if hitPart then
local _, humanoid = FindCharacterAncestor(hitPart.Parent)
if humanoid and humanoid.Health > 0 then
humanoid:TakeDamage(50)
end
end
end
-- Needless to say, this should only be called once
local function Explode()
local explosion = Instance.new('Explosion')
explosion.BlastRadius = BLAST_RADIUS
explosion.BlastPressure = BLAST_PRESSURE
explosion.Position = TimeBomb.Position
explosion.Hit:connect(OnExplosionHit)
explosion.Parent = Workspace
BoomSound:Play()
-- NOTE:
-- If we just destroyed the bomb at this point, the boom sound would be destroyed too,
-- so instead we will hide the bomb, keep it in the same spot, and schedule it for deletion
TimeBomb.Transparency = 1
TimeBomb.CanCollide = false
TimeBomb.Anchored = true
DebrisService:AddItem(TimeBomb, 3)
end
--------------------
--| Script Logic |--
--------------------
--Distance check to see if can collide should be true
Spawn(function()
while not TimeBomb.CanCollide and ParentTorso.Value do
local TorsoPosition = ParentTorso.Value.CFrame.p
local XZOffset = TorsoPosition-Vector3.new(TimeBomb.CFrame.p.x,TorsoPosition.y,TimeBomb.CFrame.p.z)
if XZOffset.magnitude>XGraceDistance or math.abs(TorsoPosition.y-TimeBomb.CFrame.p.y)>YGraceDistance then
TimeBomb.CanCollide=true
end
wait(1/30)
end
end)
-- Flash red and beep increasingly fast for about 3 seconds
local tickTime = 0.4
local red = true
repeat
BombMesh.TextureId = red and RED_TEXTURE_ID or OriginalTextureId
BeepSound:Play()
wait(tickTime)
red = not red
tickTime = tickTime * 0.9
until tickTime < 0.1
Explode()
