Program(123,48): Error: 'MyDetectedEntityType' does not contain a definition for 'Character'
space engineers
```csharp
// Скрипт управления турелью в Space Engineers
// Автоматически наводит турель на игроков и включает орудие

IMySensorBlock sensor;
IMyMotorStator yawRotor;
IMyMotorStator pitchHinge;
IMyUserControllableGun cannon; // Замените тип в зависимости от вашего орудия

// Параметры настройки
const double AIM_TOLERANCE_DEGREES = 2.0; // Допуск прицеливания в градусах
const double ROTATION_SPEED_DEGREES_PER_SECOND = 30.0; // Скорость поворота в градусах в секунду

// Информация о цели
Vector3D targetPosition = Vector3D.Zero;
bool targetFound = false;

// Желаемые углы
double targetYaw = 0.0;
double targetPitch = 0.0;

public Program()
{
    // Инициализация ссылок на блоки
    sensor = GridTerminalSystem.GetBlockWithName("Sensor") as IMySensorBlock;
    if (sensor == null)
        Echo("Блок Sensor не найден.");

    yawRotor = GridTerminalSystem.GetBlockWithName("Rotor") as IMyMotorStator;
    if (yawRotor == null)
        Echo("Блок Yaw Rotor не найден.");

    pitchHinge = GridTerminalSystem.GetBlockWithName("Hinge") as IMyMotorStator;
    if (pitchHinge == null)
        Echo("Блок Pitch Hinge не найден.");

    cannon = GridTerminalSystem.GetBlockWithName("Weapon") as IMyUserControllableGun; // Измените тип при необходимости
    if (cannon == null)
        Echo("Блок Cannon не найден.");

    // Настройка сенсора
    if (sensor != null)
    {
        sensor.Enabled = true;
        sensor.DetectPlayers = true;
        sensor.DetectFloatingObjects = false;
        sensor.DetectAsteroids = false;
        sensor.DetectSmallShips = true;
        sensor.DetectLargeShips = true;
        sensor.DetectStations = true;
        sensor.SetValueFloat("Radius", 100.0f); // Установка радиуса обнаружения через метод SetValueFloat
    }

    // Настройка роторного компонента по оси Yaw
    if (yawRotor != null)
    {
        yawRotor.TargetVelocityRPM = (float)(ROTATION_SPEED_DEGREES_PER_SECOND / 360.0);
        // Удалено: yawRotor.CurrentVelocity = 0f; // Некорректное свойство
    }

    // Настройка шарнира по оси Pitch
    if (pitchHinge != null)
    {
        pitchHinge.TargetVelocityRPM = (float)(ROTATION_SPEED_DEGREES_PER_SECOND / 360.0);
        // Удалено: pitchHinge.CurrentVelocity = 0f; // Некорректное свойство
    }

    // Установка частоты обновления
    Runtime.UpdateFrequency = UpdateFrequency.Update10; // 10 раз в секунду
}

public void Save()
{
    // Метод для сохранения состояния программы, если необходимо
}

public void Main(string argument, UpdateType updateSource)
{
    // Проверка наличия всех необходимых блоков
    if (sensor == null || yawRotor == null || pitchHinge == null || cannon == null)
    {
        Echo("Один или несколько блоков не найдены. Скрипт не будет работать.");
        return;
    }

    // Шаг 1: Поиск цели
    AcquireTarget();

    if (!targetFound)
    {
        // Если цель не обнаружена, останавливаем роторы и прекращаем огонь
        yawRotor.TargetVelocityRPM = 0f;
        pitchHinge.TargetVelocityRPM = 0f;
        ToggleCannon(false);
        Echo("Цель не обнаружена.");
        return;
    }

    // Шаг 2: Вычисление углов прицеливания
    CalculateAiming();

    // Шаг 3: Корректировка ориентации
    AdjustOrientation();

    // Шаг 4: Стрельба по цели, если наведено
    FireWeapon();
}

void AcquireTarget()
{
    // Сброс предыдущей цели
    targetFound = false;
    targetPosition = Vector3D.Zero;

    // Получение списка обнаруженных объектов сенсором
    List<MyDetectedEntityInfo> detectedEntities = new List<MyDetectedEntityInfo>();
    sensor.DetectedEntities(detectedEntities);

    double closestDistance = double.MaxValue;

    foreach (var entity in detectedEntities)
    {
        // Фильтрация по типу сущности
        if (entity.Type == MyDetectedEntityType.Character ||
            entity.Type == MyDetectedEntityType.SmallGrid ||
            entity.Type == MyDetectedEntityType.LargeGrid)
        {
            double distance = Vector3D.Distance(sensor.GetPosition(), entity.Position);
            if (distance < closestDistance)
            {
                closestDistance = distance;
                targetPosition = entity.Position;
                targetFound = true;
            }
        }
    }

    if (targetFound)
    {
        Echo($"Цель обнаружена на расстоянии {closestDistance:F1} м.");
    }
}

void CalculateAiming()
{
    // Получение мировой матрицы сенсора
    MatrixD sensorMatrix = sensor.WorldMatrix;

    // Направление к цели в мировых координатах
    Vector3D direction = Vector3D.Normalize(targetPosition - sensorMatrix.Translation);

    // Преобразование направления в локальные координаты сенсора
    Vector3D localDirection = Vector3D.TransformNormal(direction, MatrixD.Transpose(sensorMatrix));

    // Вычисление углов Yaw и Pitch в градусах
    double desiredYaw = Math.Atan2(localDirection.X, localDirection.Z) * (180.0 / Math.PI);
    double desiredPitch = Math.Asin(localDirection.Y) * (180.0 / Math.PI);

    // Нормализация углов
    desiredYaw = NormalizeAngle(desiredYaw);
    desiredPitch = NormalizeAngle(desiredPitch);

    // Сохранение желаемых углов
    targetYaw = desiredYaw;
    targetPitch = desiredPitch;

    Echo($"Желаемый Yaw: {desiredYaw:F2}°, Желаемый Pitch: {desiredPitch:F2}°");
}

void AdjustOrientation()
{
    // Текущие углы Rotor и Hinge (в радианах)
    double currentYaw = yawRotor.Angle * (180.0 / Math.PI); // Изменено: AngleRadians на Angle
    double currentPitch = pitchHinge.Angle * (180.0 / Math.PI); // Изменено: AngleRadians на Angle

    // Нормализация текущих углов
    currentYaw = NormalizeAngle(currentYaw);
    currentPitch = NormalizeAngle(currentPitch);

    // Вычисление ошибок по углам
    double yawError = targetYaw - currentYaw;
    double pitchError = targetPitch - currentPitch;

    // Нормализация ошибок
    yawError = NormalizeAngle(yawError);
    pitchError = NormalizeAngle(pitchError);

    // Настройка скорости вращения по Yaw
    if (Math.Abs(yawError) > AIM_TOLERANCE_DEGREES)
    {
        double yawSpeed = ROTATION_SPEED_DEGREES_PER_SECOND;
        if (yawError < 0)
            yawSpeed = -ROTATION_SPEED_DEGREES_PER_SECOND;

        yawRotor.TargetVelocityRPM = (float)(yawSpeed / 360.0);
        Echo($"Поворот по Yaw со скоростью {yawSpeed} °/с");
    }
    else
    {
        yawRotor.TargetVelocityRPM = 0f;
        Echo("Yaw выровнен.");
    }

    // Настройка скорости вращения по Pitch
    if (Math.Abs(pitchError) > AIM_TOLERANCE_DEGREES)
    {
        double pitchSpeed = ROTATION_SPEED_DEGREES_PER_SECOND;
        if (pitchError < 0)
            pitchSpeed = -ROTATION_SPEED_DEGREES_PER_SECOND;

        pitchHinge.TargetVelocityRPM = (float)(pitchSpeed / 360.0);
        Echo($"Поворот по Pitch со скоростью {pitchSpeed} °/с");
    }
    else
    {
        pitchHinge.TargetVelocityRPM = 0f;
        Echo("Pitch выровнен.");
    }
}

void FireWeapon()
{
    // Вычисление разницы углов
    double yawDifference = Math.Abs(NormalizeAngle(targetYaw - (yawRotor.Angle * (180.0 / Math.PI))));
    double pitchDifference = Math.Abs(NormalizeAngle(targetPitch - (pitchHinge.Angle * (180.0 / Math.PI))));

    if (yawDifference <= AIM_TOLERANCE_DEGREES && pitchDifference <= AIM_TOLERANCE_DEGREES)
    {
        // Включение орудия
        ToggleCannon(true);
        Echo("Выстрел!");
    }
    else
    {
        // Выключение орудия
        ToggleCannon(false);
        Echo("Наведение...");
    }
}

void ToggleCannon(bool enable)
{
    if (cannon != null)
    {
        if (enable)
            cannon.ApplyAction("Shoot_On"); // Возможно, потребуется заменить на "OnOff_On"
        else
            cannon.ApplyAction("Shoot_Off"); // Возможно, потребуется заменить на "OnOff_Off"
    }
}

double NormalizeAngle(double angle)
{
    angle %= 360.0;
    if (angle < -180.0)
        angle += 360.0;
    else if (angle > 180.0)
        angle -= 360.0;
    return angle;
}
```