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

FREE EMPRocket : 1.2.10 1.2.10

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

namespace Oxide.Plugins
{
    [Info("EMPRocket","Baks","1.2.10")]
    public class EMPRocket : RustPlugin
    {
        #region var

        string rocket;
        private AutoTurret[] autoturrets;
        private GunTrap[] guntraps;
        private SamSite[] samsites;
        private List<GunTrap> gtData = new List<GunTrap>();
        private float time;
        private float radius;
        private bool usePermission;
        private ulong rocketId = 2556236982;
        private Dictionary<string, int> craftItems;

        #endregion

        #region data
        protected override void LoadDefaultConfig()
        {
            Config["На сколько будут отключаться турели(секунды)"] = time = GetConfig("На сколько будут отключаться турели(секунды)", 35f);
            Config["Радиус действия"] = radius = GetConfig("Радиус действия", 40f);
            Config["Использовать пермишен (emprocket.craft)"] = usePermission = GetConfig("Использовать пермишен (emprocket.craft)", false);
        }
        T GetConfig<T>(string name, T value) => Config[name] == null ? value : (T)Convert.ChangeType(Config[name], typeof(T));

        void OnServerInitialized()
        {
            permission.RegisterPermission("emprocket.craft",this);
            LoadDefaultConfig();
            PrintWarning("Config Loaded");
            UpdateList();
            if (!Interface.Oxide.DataFileSystem.ExistsDatafile("EMP Rocket/craft"))
            {
                craftItems = new Dictionary<string, int>
                {
                    ["sulfur"] = 1000,
                    ["techparts"] = 5
                };
                Interface.Oxide.DataFileSystem.WriteObject("EMP Rocket/craft",craftItems);
            }
            else
            {
                craftItems = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, int>>("EMP Rocket/craft");
            }
        }

        #endregion

        #region hooks

        void UpdateList()
        {
            autoturrets = UnityEngine.Object.FindObjectsOfType<AutoTurret>();
            guntraps = UnityEngine.Object.FindObjectsOfType<GunTrap>();
            samsites = UnityEngine.Object.FindObjectsOfType<SamSite>();
            
        }
        
        bool CanBeTargeted(BaseCombatEntity player, GunTrap behaviour)
        {
            if (gtData.Contains(behaviour))
            {
                return false;
            }
            return true;
        }
        

        void OnRocketLaunched(BasePlayer player, BaseEntity entity)
        {

            entity.OwnerID = player.userID;

        }
        void OnEntityKill(BaseNetworkable entity)
        {
            
            if (entity.ShortPrefabName == "rocket_smoke")
            {
                
                
                Vector3 pos = entity.transform.position;
                float minx = pos.x - radius;
                float miny = pos.y - radius;
                float minz = pos.z - radius;
                float maxx = pos.x + radius;
                float maxy = pos.y + radius;
                float maxz = pos.z + radius;
                UpdateList();
                int count = 0;
                foreach (var var in autoturrets)
                {
                    if (var.transform.position.x>minx && var.transform.position.x<maxx && var.transform.position.y>miny && var.transform.position.y<maxy && var.transform.position.z>minz && var.transform.position.z<maxz)
                    {
                        
                        
                        if (var.IsOnline())
                        {
                            var.InitiateShutdown();
                            var.UpdateHasPower(0,0);
                            timer.Once(time, (() =>
                            {
                                var.InitiateStartup();
                                var.UpdateHasPower(25,0);
                                var.SendNetworkUpdate();
                                var.UpdateFacingToTarget(1);
                            }));
                            count++;
                        }
                    }
                    
                }

                foreach (var var in samsites)
                {
                    if (var.transform.position.x>minx && var.transform.position.x<maxx && var.transform.position.y>miny && var.transform.position.y<maxy && var.transform.position.z>minz && var.transform.position.z<maxz)
                    {
                        
                        if (var.IsOn())
                        {
                            count++;
                            var.UpdateHasPower(0,0);
                    
                            timer.Once(time, (() =>
                            {
                                
                                var.UpdateHasPower(25, 0);
                            }));
                        }
                    }
                    
                    
                }
                
                foreach (var var in guntraps)
                {
                    if (var.transform.position.x>minx && var.transform.position.x<maxx && var.transform.position.y>miny && var.transform.position.y<maxy && var.transform.position.z>minz && var.transform.position.z<maxz)
                    {
                        gtData.Add(var);
                        count++;
                        timer.Once(time, (() =>
                        {
                            gtData.Clear();
                        }));
                    }
                }

                BaseEntity ent = entity as BaseEntity;
                BasePlayer player = Player.FindById(ent.OwnerID);
                SendReply(player,$"Устройств отключено:<color=#FF0000>{count}</color> на <color=#3af01e>{time}</color> секунд");
                timer.Once(time, (() =>
                {
                    
                   SendReply(player,$"Включено <color=#FF0000>{count}</color> устройств"); 
                }));
            }
        }

        bool GiveEmpRocket(ulong userid, int amount)
        {
            BasePlayer target = BasePlayer.FindByID(userid);
            if (target == null)
            {
                LogToFile(Name,$"Игрок {userid} не найден",this,true,true);
                return false;
            }
            Item item = ItemManager.CreateByPartialName("ammo.rocket.smoke", amount, rocketId);
            item.name = "EMP ракета";
            if (target.inventory.containerBelt.capacity>target.inventory.containerBelt.itemList.Count || target.inventory.containerMain.capacity>target.inventory.containerMain.itemList.Count)
                target.GiveItem(item);
            else
                item.DropAndTossUpwards(target.transform.position, 5);

            return true;
        }
        
        void OnPlayerCraftEmp(BasePlayer player)
        {
            if (usePermission)
                if (!permission.UserHasPermission(player.UserIDString, "emprocket.craft")) SendReply(player,$"У вас нет доступа к этой команде");

            bool craft = false;
            bool precraft = false;
            Dictionary<string, int> back = new Dictionary<string, int>();
            foreach (var var in craftItems)
            {
                foreach (var vara in player.inventory.AllItems())
                {
                    if (vara.info.shortname == var.Key)
                    {
                        precraft = true;
                    }
                }

                if (!precraft)
                {
                    SendReply(player,$"<color=#FF0000>Недостаточно ресурсов</color>");
                    SendReply(player,$"Для крафта необходимо иметь:\n");
                    foreach (var item in craftItems)
                    {
                        SendReply(player,$"{item.Value} x {item.Key}\n ");
                    }
                    return;
                }

                if (player.inventory.FindItemByItemID(var.Key).amount >= var.Value)
                {
                    if (player.inventory.FindItemByItemID(var.Key).amount - var.Value == 0)
                    {
                        player.inventory.FindItemByItemID(var.Key).Remove();
                        back.Add(player.inventory.FindItemByItemID(var.Key).info.shortname,player.inventory.FindItemByItemID(var.Key).amount);
                    }
                    else
                    {
                        player.inventory.FindItemByItemID(var.Key).amount -= var.Value;
                        back.Add(player.inventory.FindItemByItemID(var.Key).info.shortname,player.inventory.FindItemByItemID(var.Key).amount);
                    }  

                    craft = true;
                }
                /*if (player.inventory.FindItemID(var.Key).amount >= var.Value)
                {
                    if (player.inventory.FindItemID(var.Key).amount - var.Value == 0)
                    {
                        player.inventory.FindItemID(var.Key).Remove();
                        back.Add(player.inventory.FindItemID(var.Key).info.shortname,player.inventory.FindItemID(var.Key).amount);
                    }
                    else
                    {
                        player.inventory.FindItemID(var.Key).amount -= var.Value;
                        back.Add(player.inventory.FindItemID(var.Key).info.shortname,player.inventory.FindItemID(var.Key).amount);
                    }

                    craft = true;
                }*/
                else
                {
                    craft = false;
                }
            }

            if (!craft)
            {
                if (back.Count > 0)
                {
                    foreach (var var in back)
                    {
                        ItemManager.CreateByPartialName(var.Key, var.Value).MoveToContainer(player.inventory.containerMain);
                    }
                }
                
                SendReply(player,$"<color=#a30101>Недостаточно ресурсов</color>");
                return;
            }
            
            Item rocket = ItemManager.CreateByPartialName("ammo.rocket.smoke", 1, rocketId);
            rocket.name = "EMP ракета";
            rocket.MoveToContainer(player.inventory.containerMain);
            SendReply(player,$"<color=#3af01e>Вы спешно скрафтили EMP Rocket</color>");
        }

        #endregion

        #region commands

        

        [ChatCommand("emp")]
        void GivePlayerEMP(BasePlayer player,string command, string[] args)
        {
            if (args.Length<1 && player.IsAdmin)
            {
                Item rocket = ItemManager.CreateByPartialName("ammo.rocket.smoke", 1, rocketId);
                rocket.name = "EMP ракета";
                rocket.MoveToContainer(player.inventory.containerMain);
            }

            if (args.Length == 1)
            {
                if (args[0] == "craft")
                {
                    OnPlayerCraftEmp(player);
                }
            }
            
        }

        [ConsoleCommand("gemp")]
        void ConsoleGiveEMP(ConsoleSystem.Arg arg)
        {
            if (arg.Args.Length<2) return;
            if (arg.Player() != null)
            {
                if (arg.Player().IsAdmin) if (GiveEmpRocket(Convert.ToUInt64(arg.Args[0]), arg.Args[1].ToInt()))
                    PrintToConsole(arg.Player(),$"{arg.Args[1]} EMP Rocket gived to {arg.Args[0]}");
            }
            else
            {
                if (GiveEmpRocket(Convert.ToUInt64(arg.Args[0]), arg.Args[1].ToInt()))
                {
                    PrintWarning($"{arg.Args[1]} EMP Rocket gived to {arg.Args[0]}");
                }
            }
        }

        #endregion
    }
}

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