Иконка ресурса

FREE UltraLauncher : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins;

[Info("UltraLauncher", "TEGIR", "1.0.0")]
public class UltraLauncher : RustPlugin
{
    #region Configuration

    private static Configuration _config = new Configuration();
    public class Configuration
    {
        [JsonProperty("Колличество доп ракет которые могут быть заряжены в лаунчер")]
        public int RocketsCount { get; set; } = 4;

        [JsonProperty("Время (секунды) интервала между выпуском ракет из 1 лаунчера")]
        public float TimeInterval { get; set; } = 0.2f;

        [JsonProperty(
            "Может ли человек без пермишна использовать заряженную ракетницу? (иначе будут разряжаться ракеты при выстреле)")]
        public bool CanShootWhitoutPermission { get; set; } = false;


        [JsonProperty("Блеклист ракет для мультизапуска")]
        public List<string> Blacklist  = new List<string>();


        public static Configuration GetNewConfiguration()
        {
            return new Configuration
            {
                Blacklist = new List<string>{"ammo.rocket.fire"}
            };
        }
    }
    protected override void LoadConfig()
    {
        base.LoadConfig();
        try
        {
            _config = Config.ReadObject<Configuration>();
            if (_config == null) LoadDefaultConfig();
        }
        catch
        {
            Puts("!!!!ОШИБКА КОНФИГУРАЦИИ!!!! создаем новую");
            LoadDefaultConfig();
        }

        NextTick(SaveConfig);
    }
    protected override void LoadDefaultConfig() => _config = Configuration.GetNewConfiguration();
    protected override void SaveConfig() => Config.WriteObject(_config);

    #endregion
    void OnServerInitialized()
    {
        permission.RegisterPermission("UltraLauncher.use", this);
    }
   
    
    
    void OnRocketLaunched(BasePlayer player, BaseEntity entity)
    {
        if(entity.ShortPrefabName != "rocket_basic") return;
        BaseProjectile proj =  player.GetHeldEntity() as BaseProjectile;
        if (proj != null && proj.primaryMagazine.contents > 0)
        {
            if (!_config.CanShootWhitoutPermission)
            {
                if (!permission.UserHasPermission(player.UserIDString, "UltraLauncher.use"))
                {
                    Item itemtodrop = ItemManager.CreateByItemID(proj.primaryMagazine.ammoType.itemid,
                        proj.primaryMagazine.contents);
                    itemtodrop.Drop(player.transform.position, player.eyes.HeadForward().normalized * 1,
                        player.eyes.rotation);
                    player.ChatMessage(
                        "Упс..Дополнительные ракеты для запуска выпали из ракетницы потому что вы не можете пользоваться мультизапуском ракет.");
                    proj.primaryMagazine.contents = 0;
                    return;
                }
                
            }
            
            ServerMgr.Instance.StartCoroutine(SendRockets(player, proj.primaryMagazine.contents, GetPrefabRocket(proj.primaryMagazine.ammoType.shortname)));
            proj.primaryMagazine.contents = 0;
            proj.SendNetworkUpdate();
        }

    }

    string GetPrefabRocket(string shortname)
    {
        switch (shortname)
        {
            case "ammo.rocket.hv":
                return "assets/prefabs/ammo/rocket/rocket_hv.prefab|35|0.01";
            case "ammo.rocket.basic":
                return "assets/prefabs/ammo/rocket/rocket_basic.prefab|17|0.2";
            case "ammo.rocket.fire":
                return "assets/prefabs/ammo/rocket/rocket_fire.prefab|17|0.2";
            default:
                return "assets/prefabs/ammo/rocket/rocket_basic.prefab|17|0.2";
        }
    }

    IEnumerator SendRockets(BasePlayer player, int rockets, string prefab)
    {
        yield return new WaitForSeconds(_config.TimeInterval);
        for (int i = 0; i < rockets; i++)
        {
            if(!player.IsAlive()) yield break;
            Effect x = new Effect("assets/prefabs/weapons/rocketlauncher/effects/attack.prefab", player, 0, new Vector3(), new Vector3()); 
            EffectNetwork.Send(x, player.Connection);
            var prop = GameManager.server.CreateEntity(prefab.Split("|")[0], player.eyes.position + player.eyes.BodyForward().normalized, player.eyes.rotation);
            ServerProjectile sProjectile = prop.GetComponent<ServerProjectile>();
            sProjectile.InitializeVelocity(player.eyes.HeadForward().normalized * int.Parse(prefab.Split("|")[1]));
            sProjectile.gravityModifier = float.Parse(prefab.Split("|")[2]);
            prop.OwnerID = player.userID;
            prop.Spawn();
            yield return new WaitForSeconds(_config.TimeInterval);
        }
        yield break;
    }
    
     object OnWeaponReload(BaseProjectile weapon, BasePlayer player)
     {
         if (weapon.ShortPrefabName != "rocket_launcher.entity") return null;
         if (permission.UserHasPermission(player.UserIDString, "UltraLauncher.use"))
         {
             if (_config.Blacklist.Contains(weapon.primaryMagazine.ammoType.shortname))
             {
                 weapon.primaryMagazine.capacity = 1;
                 return null;
             }
             weapon.primaryMagazine.capacity = _config.RocketsCount + 1;
         }
         else
         {
             weapon.primaryMagazine.capacity = 1;
         }
         return null;
     }
    
    

   

    

    
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху