• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

GPT-3.5 Turbo Тестирую ChatGPT во все щели

Нейросеть GPT-3.5 Turbo доступна всем пользователям. Для доступа к GPT-4 Turbo необходимо приобрести «Prime».
Для исправления ошибки CS1061 и добавления свойства recoilHeightMax в класс RecoilProperties, вам нужно внести соответствующие изменения в код. Ниже приведен исправленный код:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);
                    
                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом коде добавлено свойство recoilHeightMax в класс RecoilProperties, а также в конструкторе класса устанавливается значение этого свойства. Теперь плагин должен успешно скомпилироваться без ошибок. Пожалуйста, попробуйте использовать этот исправленный код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дальнейшая помощь, не стесняйтесь обращаться.
 
Для исправления ошибки CS1061 и добавления свойства recoilHeightMax в класс RecoilProperties, вам нужно внести соответствующие изменения в код. Ниже приведен исправленный код:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);
                   
                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом коде добавлено свойство recoilHeightMax в класс RecoilProperties, а также в конструкторе класса устанавливается значение этого свойства. Теперь плагин должен успешно скомпилироваться без ошибок. Пожалуйста, попробуйте использовать этот исправленный код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дальнейшая помощь, не стесняйтесь обращаться.
Улучши код добавь что-то новое
 
Улучши код добавь что-то новое
Для улучшения кода и добавления нового функционала можно реализовать механизм случайной генерации отклонения оружия при каждом выстреле. Это добавит больше разнообразия и реализма в отдачу оружия.

Ниже приведен обновленный код с добавлением случайной генерации отклонения при выстреле:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                // Генерируем случайное отклонение для каждого выстрела
                var randomPitch = Random.Range(-0.1f, 0.1f);
                var randomYaw = Random.Range(-0.1f, 0.1f);

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена случайная генерация отклонения для каждого выстрела путем добавления случайных значений к вертикальному и горизонтальному отклонениям. Это придаст оружию более непредсказуемую отдачу, что может улучшить игровой процесс. Надеюсь, этот функционал будет вам полезен. Если у вас есть другие идеи или вопросы, не стесняйтесь обращаться.
 
Для улучшения кода и добавления нового функционала можно реализовать механизм случайной генерации отклонения оружия при каждом выстреле. Это добавит больше разнообразия и реализма в отдачу оружия.

Ниже приведен обновленный код с добавлением случайной генерации отклонения при выстреле:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                // Генерируем случайное отклонение для каждого выстрела
                var randomPitch = Random.Range(-0.1f, 0.1f);
                var randomYaw = Random.Range(-0.1f, 0.1f);

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена случайная генерация отклонения для каждого выстрела путем добавления случайных значений к вертикальному и горизонтальному отклонениям. Это придаст оружию более непредсказуемую отдачу, что может улучшить игровой процесс. Надеюсь, этот функционал будет вам полезен. Если у вас есть другие идеи или вопросы, не стесняйтесь обращаться.
Исправь код RecoilPlugin.cs(36,33): error CS0104: `Random' is an ambiguous reference between `Oxide.Core.Random' and `UnityEngine.Random'
 
Исправь код RecoilPlugin.cs(36,33): error CS0104: `Random' is an ambiguous reference between `Oxide.Core.Random' and `UnityEngine.Random'
Для исправления ошибки CS0104, которая указывает на неоднозначную ссылку между Oxide.Core.Random и UnityEngine.Random, вам необходимо явным образом указать, какую версию Random вы хотите использовать в вашем коде.

Ниже приведен исправленный код, где добавлена явная ссылка на UnityEngine.Random для устранения ошибки:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                // Генерируем случайное отклонение для каждого выстрела
                var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

Теперь код должен успешно скомпилироваться без ошибок. Пробуйте использовать этот исправленный код в вашем плагине. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
 
C
Для исправления ошибки CS0104, которая указывает на неоднозначную ссылку между Oxide.Core.Random и UnityEngine.Random, вам необходимо явным образом указать, какую версию Random вы хотите использовать в вашем коде.

Ниже приведен исправленный код, где добавлена явная ссылка на UnityEngine.Random для устранения ошибки:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                // Генерируем случайное отклонение для каждого выстрела
                var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;
                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

Теперь код должен успешно скомпилироваться без ошибок. Пробуйте использовать этот исправленный код в вашем плагине. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
Улучши код и уменьши разброс и сделай проверку на холик и 8x прицел
 
Улучши код и уменьши разброс и сделай проверку на холик и 8x прицел
Для уменьшения разброса оружия при использовании холоскопа (холик) и 8-кратного прицела, можно добавить дополнительную логику проверки типа прицела и уменьшить разброс в зависимости от этого. Ниже приведен обновленный код с улучшениями:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от типа прицела
                    if (item.HasAimCone(1)) // Если установлен холоскоп (холик)
                    {
                        recoilPitch *= 0.5f;
                        recoilYaw *= 0.5f;
                    }
                    else if (item.HasAimCone(2)) // Если установлен 8-кратный прицел
                    {
                        recoilPitch *= 0.2f;
                        recoilYaw *= 0.2f;
                    }

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена логика для уменьшения разброса в зависимости от установленного прицела (холик или 8x). Теперь разброс будет различным в зависимости от выбранного прицела. Попробуйте использовать этот улучшенный код в вашем плагине. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
 
Для уменьшения разброса оружия при использовании холоскопа (холик) и 8-кратного прицела, можно добавить дополнительную логику проверки типа прицела и уменьшить разброс в зависимости от этого. Ниже приведен обновленный код с улучшениями:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от типа прицела
                    if (item.HasAimCone(1)) // Если установлен холоскоп (холик)
                    {
                        recoilPitch *= 0.5f;
                        recoilYaw *= 0.5f;
                    }
                    else if (item.HasAimCone(2)) // Если установлен 8-кратный прицел
                    {
                        recoilPitch *= 0.2f;
                        recoilYaw *= 0.2f;
                    }

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена логика для уменьшения разброса в зависимости от установленного прицела (холик или 8x). Теперь разброс будет различным в зависимости от выбранного прицела. Попробуйте использовать этот улучшенный код в вашем плагине. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
Исправь код RecoilPlugin.cs(45,35): error CS1061: Type `Item' does not contain a definition for `HasAimCone' and no extension method `HasAimCone' of type `Item' could be found. Are you missing an assembly reference?
 
Исправь код RecoilPlugin.cs(45,35): error CS1061: Type `Item' does not contain a definition for `HasAimCone' and no extension method `HasAimCone' of type `Item' could be found. Are you missing an assembly reference?
Для исправления ошибки CS1061, которая указывает на отсутствие определения метода HasAimCone у типа Item, вам нужно добавить соответствующую логику проверки на наличие холоскопа или 8-кратного прицела в инвентаре игрока.

Ниже представлен обновленный код без использования метода HasAimCone:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от наличия прицела
                    var scopeMultiplier = 1.0f;
                    if (HasScope(player))
                    {
                        if (HasScope8x(player))
                            scopeMultiplier = 0.2f;
                        else
                            scopeMultiplier = 0.5f;
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде добавлена логика проверки наличия холоскопа и 8-кратного прицела в инвентаре игрока без использования метода HasAimCone. Обновите логику проверки в методах HasScope и HasScope8x в соответствии с вашими требованиями. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
 
Для исправления ошибки CS1061, которая указывает на отсутствие определения метода HasAimCone у типа Item, вам нужно добавить соответствующую логику проверки на наличие холоскопа или 8-кратного прицела в инвентаре игрока.

Ниже представлен обновленный код без использования метода HasAimCone:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f;
        private const float baseRecoilYaw = 0.1f;
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от наличия прицела
                    var scopeMultiplier = 1.0f;
                    if (HasScope(player))
                    {
                        if (HasScope8x(player))
                            scopeMultiplier = 0.2f;
                        else
                            scopeMultiplier = 0.5f;
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде добавлена логика проверки наличия холоскопа и 8-кратного прицела в инвентаре игрока без использования метода HasAimCone. Обновите логику проверки в методах HasScope и HasScope8x в соответствии с вашими требованиями. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, обращайтесь.
Сделай отдачу ещё меньши
 
Сделай отдачу ещё меньши
Для уменьшения отдачи оружия еще больше, вы можете уменьшить коэффициенты scopeMultiplier, которые управляют уровнем уменьшения разброса в зависимости от наличия прицела. Также, можно уменьшить значения отдачи recoilPitch и recoilYaw.

Ниже приведен обновленный код с увеличенным уровнем уменьшения отдачи:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.05f; // Уменьшаем значение отдачи по pitch
        private const float baseRecoilYaw = 0.05f; // Уменьшаем значение отдачи по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от наличия прицела
                    var scopeMultiplier = 0.5f; // Уменьшаем коэффициент уменьшения разброса
                    if (HasScope(player))
                    {
                        if (HasScope8x(player))
                            scopeMultiplier = 0.1f; // Дополнительно уменьшаем разброс для 8x прицела
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения
                    var randomYaw = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде отдача оружия дополнительно уменьшена путем уменьшения значений отдачи recoilPitch и recoilYaw, а также уменьшения коэффициентов scopeMultiplier, контролирующих уровень уменьшения разброса. Попробуйте использовать этот улучшенный код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
Для уменьшения отдачи оружия еще больше, вы можете уменьшить коэффициенты scopeMultiplier, которые управляют уровнем уменьшения разброса в зависимости от наличия прицела. Также, можно уменьшить значения отдачи recoilPitch и recoilYaw.

Ниже приведен обновленный код с увеличенным уровнем уменьшения отдачи:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.05f; // Уменьшаем значение отдачи по pitch
        private const float baseRecoilYaw = 0.05f; // Уменьшаем значение отдачи по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от наличия прицела
                    var scopeMultiplier = 0.5f; // Уменьшаем коэффициент уменьшения разброса
                    if (HasScope(player))
                    {
                        if (HasScope8x(player))
                            scopeMultiplier = 0.1f; // Дополнительно уменьшаем разброс для 8x прицела
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерируем случайное отклонение для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения
                    var randomYaw = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создаем объект RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде отдача оружия дополнительно уменьшена путем уменьшения значений отдачи recoilPitch и recoilYaw, а также уменьшения коэффициентов scopeMultiplier, контролирующих уровень уменьшения разброса. Попробуйте использовать этот улучшенный код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
Сделай чтобы отдача применялась для всех игроков
 
Сделай чтобы отдача применялась для всех игроков
Для того чтобы отдача применялась ко всем игрокам на сервере, вам нужно модифицировать ваш плагин таким образом, чтобы отдача рассчитывалась и применялась ко всем игрокам, а не только к игроку, стреляющему из оружия. Ниже приведен обновленный код, который применяет отдачу ко всем игрокам:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.05f; // Уменьшаем значение отдачи по pitch
        private const float baseRecoilYaw = 0.05f; // Уменьшаем значение отдачи по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;

                        var scopeMultiplier = 0.5f; // Уменьшаем коэффициент уменьшения разброса
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f; // Дополнительно уменьшаем разброс для 8x прицела
                        }

                        recoilPitch *= scopeMultiplier;
                        recoilYaw *= scopeMultiplier;

                        var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения
                        var randomYaw = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

Этот обновленный код рассчитывает и применяет отдачу ко всем активным игрокам на сервере, применяя уменьшение разброса к оружию у всех игроков, а не только к стреляющему игроку. Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
Для того чтобы отдача применялась ко всем игрокам на сервере, вам нужно модифицировать ваш плагин таким образом, чтобы отдача рассчитывалась и применялась ко всем игрокам, а не только к игроку, стреляющему из оружия. Ниже приведен обновленный код, который применяет отдачу ко всем игрокам:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.05f; // Уменьшаем значение отдачи по pitch
        private const float baseRecoilYaw = 0.05f; // Уменьшаем значение отдачи по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;

                        var scopeMultiplier = 0.5f; // Уменьшаем коэффициент уменьшения разброса
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f; // Дополнительно уменьшаем разброс для 8x прицела
                        }

                        recoilPitch *= scopeMultiplier;
                        recoilYaw *= scopeMultiplier;

                        var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения
                        var randomYaw = UnityEngine.Random.Range(-0.05f, 0.05f); // Уменьшаем диапазон случайного отклонения

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        // Метод для проверки наличия холоскопа
        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        // Метод для проверки наличия 8-кратного прицела
        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

Этот обновленный код рассчитывает и применяет отдачу ко всем активным игрокам на сервере, применяя уменьшение разброса к оружию у всех игроков, а не только к стреляющему игроку. Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
Уменьши отдачу в ноль
 
Уменьши отдачу в ноль
Понял, чтобы уменьшить отдачу в ноль, вы можете просто установить значения recoilPitch и recoilYaw равными нулю. Вот обновленный код с отдачей, установленной в ноль:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0f; // Устанавливаем отдачу по pitch в ноль
        private const float baseRecoilYaw = 0f; // Устанавливаем отдачу по yaw в ноль
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;

                        var scopeMultiplier = 0.5f;
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f;
                        }

                        recoilPitch *= scopeMultiplier;
                        recoilYaw *= scopeMultiplier;

                        var randomPitch = 0f; // Устанавливаем случайное отклонение по pitch в ноль
                        var randomYaw = 0f; // Устанавливаем случайное отклонение по yaw в ноль

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        private bool HasScope(BasePlayer player)
        {
            return false;
        }

        private bool HasScope8x(BasePlayer player)
        {
            return false;
        }
    }
}

Этот код устанавливает отдачу по pitch и yaw в ноль, а также устанавливает случайное отклонение в ноль, что позволит уменьшить отдачу до минимума. Примените этот код в вашем плагине, чтобы уменьшить отдачу оружия до нуля для всех игроков на сервере. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
Понял, чтобы уменьшить отдачу в ноль, вы можете просто установить значения recoilPitch и recoilYaw равными нулю. Вот обновленный код с отдачей, установленной в ноль:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0f; // Устанавливаем отдачу по pitch в ноль
        private const float baseRecoilYaw = 0f; // Устанавливаем отдачу по yaw в ноль
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;

                        var scopeMultiplier = 0.5f;
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f;
                        }

                        recoilPitch *= scopeMultiplier;
                        recoilYaw *= scopeMultiplier;

                        var randomPitch = 0f; // Устанавливаем случайное отклонение по pitch в ноль
                        var randomYaw = 0f; // Устанавливаем случайное отклонение по yaw в ноль

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        private bool HasScope(BasePlayer player)
        {
            return false;
        }

        private bool HasScope8x(BasePlayer player)
        {
            return false;
        }
    }
}

Этот код устанавливает отдачу по pitch и yaw в ноль, а также устанавливает случайное отклонение в ноль, что позволит уменьшить отдачу до минимума. Примените этот код в вашем плагине, чтобы уменьшить отдачу оружия до нуля для всех игроков на сервере. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
Убери разброс в право и лево
 
Убери разброс в право и лево
Чтобы убрать разброс вправо и влево (отклонение по yaw) и оставить только вертикальное отклонение (отклонение по pitch), вам нужно установить значение переменной recoilYaw равным нулю. Ниже приведен обновленный код, учитывающий это изменение:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f; // Устанавливаем отдачу по pitch
        private const float baseRecoilYaw = 0f; // Убираем отдачу по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;
                        
                        var scopeMultiplier = 0.5f;
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f;
                        }

                        recoilPitch *= scopeMultiplier;

                        var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Оставляем только вертикальное отклонение

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде отдача по yaw установлена в ноль, чтобы убрать отклонение вправо и влево. Оставлено только вертикальное отклонение по pitch. Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
Чтобы убрать разброс вправо и влево (отклонение по yaw) и оставить только вертикальное отклонение (отклонение по pitch), вам нужно установить значение переменной recoilYaw равным нулю. Ниже приведен обновленный код, учитывающий это изменение:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f; // Устанавливаем отдачу по pitch
        private const float baseRecoilYaw = 0f; // Убираем отдачу по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var players = BasePlayer.activePlayerList;

                foreach (var targetPlayer in players)
                {
                    var heldEntity = targetPlayer.GetHeldEntity() as BaseProjectile;
                    if (heldEntity != null)
                    {
                        var aimCone = heldEntity.aimCone;
                       
                        var scopeMultiplier = 0.5f;
                        if (HasScope(targetPlayer))
                        {
                            if (HasScope8x(targetPlayer))
                                scopeMultiplier = 0.1f;
                        }

                        recoilPitch *= scopeMultiplier;

                        var randomPitch = UnityEngine.Random.Range(-0.05f, 0.05f); // Оставляем только вертикальное отклонение

                        aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                        heldEntity.aimCone = aimCone;

                        PrintToChat(targetPlayer, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                    }
                }
            }
        }

        private bool HasScope(BasePlayer player)
        {
            // Реализация проверки наличия холоскопа
            return false; // Замените на логику проверки наличия холоскопа
        }

        private bool HasScope8x(BasePlayer player)
        {
            // Реализация проверки наличия 8-кратного прицела
            return false; // Замените на логику проверки наличия 8x прицела
        }
    }
}

В этом обновленном коде отдача по yaw установлена в ноль, чтобы убрать отклонение вправо и влево. Оставлено только вертикальное отклонение по pitch. Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
Сделай логику для холика и 8x чтобы разброс был меньше
 
Сделай логику для холика и 8x чтобы разброс был меньше
Для добавления логики, чтобы разброс был меньше при использовании холоскопа (холика) и 8-кратного прицела, вам нужно адаптировать код таким образом, чтобы уменьшить разброс в зависимости от типа прицела. Вот обновленный код с добавленной логикой для уменьшения разброса при использовании различных прицелов:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f; // Отдача по pitch
        private const float baseRecoilYaw = 0f; // Отдача по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от типа прицела
                    var scopeMultiplier = 1.0f;
                    if (item.HasAimCone(1)) // Проверка наличия холоскопа (холика)
                    {
                        scopeMultiplier = 0.5f; // Уменьшаем разброс для холоскопа
                    }
                    else if (item.HasAimCone(2)) // Проверка наличия 8-кратного прицела
                    {
                        scopeMultiplier = 0.2f; // Уменьшаем разброс для 8x прицела
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерация случайного отклонения для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создание объекта RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена логика для уменьшения разброса в зависимости от типа прицела (холоскопа и 8-кратного прицела). Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
И
Для добавления логики, чтобы разброс был меньше при использовании холоскопа (холика) и 8-кратного прицела, вам нужно адаптировать код таким образом, чтобы уменьшить разброс в зависимости от типа прицела. Вот обновленный код с добавленной логикой для уменьшения разброса при использовании различных прицелов:

C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;

namespace RecoilPlugin
{
    public class RecoilProperties
    {
        public float recoilHeightMax { get; set; } // Добавляем свойство recoilHeightMax

        // Конструктор класса RecoilProperties
        public RecoilProperties(float recoilHeightMax)
        {
            this.recoilHeightMax = recoilHeightMax;
        }
    }

    [Info("NewRecoil", "YourName", "1.0.0")]
    public class NewRecoilPlugin : RustPlugin
    {
        private const float baseRecoilPitch = 0.1f; // Отдача по pitch
        private const float baseRecoilYaw = 0f; // Отдача по yaw
        private const float recoilIncrease = 0.05f;

        void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
        {
            if (item.info.shortname == "rifle.ak")
            {
                var recoilPitch = baseRecoilPitch;
                var recoilYaw = baseRecoilYaw;

                var heldEntity = player.GetHeldEntity() as BaseProjectile;
                if (heldEntity != null)
                {
                    var aimCone = heldEntity.aimCone;

                    // Уменьшаем разброс в зависимости от типа прицела
                    var scopeMultiplier = 1.0f;
                    if (item.HasAimCone(1)) // Проверка наличия холоскопа (холика)
                    {
                        scopeMultiplier = 0.5f; // Уменьшаем разброс для холоскопа
                    }
                    else if (item.HasAimCone(2)) // Проверка наличия 8-кратного прицела
                    {
                        scopeMultiplier = 0.2f; // Уменьшаем разброс для 8x прицела
                    }

                    recoilPitch *= scopeMultiplier;
                    recoilYaw *= scopeMultiplier;

                    // Генерация случайного отклонения для каждого выстрела
                    var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
                    var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);

                    aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
                    heldEntity.aimCone = aimCone;

                    // Создание объекта RecoilProperties с заданным значением recoilHeightMax
                    var recoilProps = new RecoilProperties(2.0f);

                    PrintToChat(player, "Отдача для rifle.ak обработана. Новое вертикальное отклонение: " + aimCone);
                }
            }
        }
    }
}

В этом обновленном коде добавлена логика для уменьшения разброса в зависимости от типа прицела (холоскопа и 8-кратного прицела). Попробуйте использовать этот код в вашем плагине. Если у вас возникнут другие вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
Исправь ошибку RecoilPlugin.cs(45,35): error CS1061: Type `Item' does not contain a definition for `HasAimCone' and no extension method `HasAimCone' of type `Item' could be found. Are you missing an assembly reference?
 
Активность
Пока никто не печатает сообщение