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

FREE RocketGuns : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("RocketGuns", "Koks", "1.0.0")]
    [Description("RocketGuns")]
    public class RocketGuns : RustPlugin
    {
        private readonly List<string> Guns = new List<string>()
        {
            "rifle.ak",
            "rifle.ak.ice",
            "rifle.bolt",
            "hmlmg",
            "rifle.l96",
            "rifle.lr300",
            "lmg.m249",
            "rifle.m39",
            "rifle.semiauto"
        };
        private const string PermUse = "rocketguns.use";

        #region[Commands]
        [ChatCommand("t")]
        private void ToggleRocketCMD(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.userID.ToString(), PermUse))
            {
                SendReply(player, lang.GetMessage("NoPerm", this, player.userID.ToString()));
                return;
            }
            if (ActiveGUNS.Contains(player.userID))
            {
                SendReply(player, lang.GetMessage("Off", this, player.userID.ToString()));
                ActiveGUNS.Remove(player.userID);
                DestroyCUI(player);
                return;
            }
            else
            {
                SendReply(player, lang.GetMessage("On", this, player.userID.ToString()));
                ActiveGUNS.Add(player.userID);
                CreateUi(player);
                return;
            }

        }
        #endregion[Commands]

        #region[Rocket prefabs]
        public string Rocket = "assets/prefabs/ammo/rocket/rocket_basic.prefab";
        public string Hv = "assets/prefabs/ammo/rocket/rocket_hv.prefab";
        public string Fire = "assets/content/vehicles/mlrs/rocket_mlrs.prefab";
        #endregion[Rocket prefabs]

        #region GUI
        List<ulong> ActiveGUNS = new List<ulong>();
        void DestroyCUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, "GunUI");
        }

        public void CreateUi(BasePlayer player)
        {
            DestroyCUI(player);
            CuiElementContainer elements = new CuiElementContainer();
            string panel = elements.Add(new CuiPanel
            {
                Image = { Color = "0.5 0.5 0.5 0.0" },
                RectTransform = { AnchorMin = config.ImageAnchorMin, AnchorMax = config.ImageAnchorMax }
            }, "Hud.Menu", "GunUI");
            elements.Add(new CuiElement
            {
                Parent = panel,
                Components =
                {
                    new CuiRawImageComponent {Color = config.ImageColor, Url = config.ImageUrlIcon},
                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1"}
                }
            });
            CuiHelper.AddUi(player, elements);
        }

        #endregion GUI

        #region[Hooks]
        void Unload()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                DestroyCUI(player);
            }
            ActiveGUNS = null;
        }
        private void Init()
        {
            permission.RegisterPermission(PermUse, this);
        }
        void OnPlayerDisconnected(BasePlayer player)
        {
            if (ActiveGUNS.Contains(player.userID))
            {
                DestroyCUI(player);
            }
            else return;
        }
        private void OnWeaponFired(BaseProjectile projectile, BasePlayer player, ItemModProjectile mod, ProjectileShoot projectileShoot)
        {
            if (player == null) return;
            if (ActiveGUNS.Contains(player.userID) && Guns.Contains(projectile.GetItem()?.info?.shortname))
            {
                string ammo = string.Empty;
                float speed = 0;
                if (mod.name.Contains("hv"))
                {
                    ammo = Hv;
                    speed = config.HvSpeed;
                }
                if (config.UseFire && mod.name.Contains("fire"))
                {
                    ammo = Fire;
                    speed = config.FireSpeed;
                }
                if (mod.name.Contains("explosive"))
                {
                    ammo = Rocket;
                    speed = config.NormalSpeed;
                }
                var heldEntity = projectile.GetItem();
                projectile.primaryMagazine.contents = projectile.primaryMagazine.capacity;
                projectile.SendNetworkUpdateImmediate();
                int projectileID = projectileShoot.projectiles[0].projectileID;
                if (string.IsNullOrEmpty(ammo)) { return; }
                FireRockets(player, speed, ammo);
            }
            else return;
        }
        void OnLoseCondition(Item item, ref float amount)
        {               
            if (item == null) return;                                     
            BasePlayer player = item.GetOwnerPlayer();
            if (player == null) return;
            if(ActiveGUNS.Contains(player.userID))amount = 0;
        }
        #endregion[Hooks]

        #region[Core]
        public void FireRockets(BasePlayer player, float speed, string ammo)
        {
            if (player == null) return;
            var rocket = GameManager.server.CreateEntity(ammo, player.eyes.position, new Quaternion());
            if (rocket != null)
            {
                rocket.creatorEntity = player;
                rocket.SendMessage("InitializeVelocity", player.eyes.HeadForward() * speed);
                rocket.OwnerID = player.userID;
                rocket.Spawn();
                rocket.ClientRPC(null, "RPCFire");
                return;
            }
        }
        #endregion[Core]

        #region Config
        public Configuration config;
        public class Configuration
        {
            [JsonProperty("Allow fire rockets (may cause server lag if too many fired)")]
            public bool UseFire = false;

            [JsonProperty("Hv rocket speed ")]
            public float HvSpeed = 200;

            [JsonProperty("Normal rocket speed")]
            public float NormalSpeed = 100;

            [JsonProperty("Fire rocket speed")]
            public float FireSpeed = 100;

            [JsonProperty("Icon URL (.png or.jpg)")]
            public string ImageUrlIcon = "https://www.citypng.com/public/uploads/preview/fire-explosion-mushroom-cartoon-illustration-hd-png-11665511403qjc2bf8lnu.png";

            [JsonProperty("Image Color")]
            public string ImageColor = "1 1 1 1";

            [JsonProperty("Image AnchorMin")]
            public string ImageAnchorMin = "0.645 0.023";

            [JsonProperty("Image AnchorMax")]
            public string ImageAnchorMax = "0.688 0.095";

        }
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                SaveConfig();
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                PrintWarning("Creating new config file.");
                LoadDefaultConfig();
            }
        }
        protected override void LoadDefaultConfig() => config = new Configuration();
        protected override void SaveConfig() => Config.WriteObject(config);
        #endregion

        #region[Localization]
        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NoPerm"] = "You dont have permission to use this command",
                ["Off"] = "Raid gun disengaged",
                ["On"] = "Raid gun engaged"
            }, this);
        }
        #endregion[Localization]
    }
}

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