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

FREE TwigRemover : 0.2 0.2

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

namespace Oxide.Plugins
{
    [Info("Twig Remover", "bawNg", 0.2)]
    class TwigRemover : RustPlugin
    {
        const float cupboardDistance = 60f;
        
        [ConsoleCommand("twigs.count")]
        void cmdCountTwigs(ConsoleSystem.Arg arg)
        {
            if (arg.Player() && !arg.Player().IsAdmin())
            {
                SendReply(arg, "You need to be admin to use that command");
                return;
            }
            var twig_blocks = FindAllCupboardlessTwigBlocks();
            SendReply(arg, $"There are {twig_blocks.Count} twig blocks outside of cupboard range");
        }

        [ConsoleCommand("twigs.remove")]
        void cmdRemoveTwigs(ConsoleSystem.Arg arg)
        {
            if (arg.Player() && !arg.Player().IsAdmin())
            {
                SendReply(arg, "You need to be admin to use that command");
                return;
            }
            PrintToChat("<color=red>Admin is removing all twig blocks outside of cupboard range...</color>");
            var twig_blocks = FindAllCupboardlessTwigBlocks();
            var started_at = Time.realtimeSinceStartup;
            foreach (var building_block in twig_blocks)
                building_block.Kill();
            Puts($"[TwigRemover] Destroyed {twig_blocks.Count} twig blocks in {Time.realtimeSinceStartup - started_at:0.000} seconds");
            PrintToChat($"<color=yellow>Admin has removed {twig_blocks.Count} twig blocks from the map</color>");
        }

        HashSet<BuildingBlock> FindAllCupboardlessTwigBlocks()
        {
            var tool_cupboards = FindAllToolCupboards();
            var twig_blocks = FindAllTwigBuildingBlocks();                        
            var started_at = Time.realtimeSinceStartup;
            Puts($"[TwigRemover] Checking {twig_blocks.Count} twig blocks against {tool_cupboards.Length} tool cupboards...");
            foreach (var cupboard in tool_cupboards)
            {
                foreach (var collider in Physics.OverlapSphere(cupboard.transform.position, cupboardDistance))
                {
                    var building_block = collider.GetComponentInParent<BuildingBlock>();
                    if (building_block) twig_blocks.Remove(building_block);
                }
            }
            Puts($"[TwigRemover] Finding {twig_blocks.Count} cupboardless twig blocks took {Time.realtimeSinceStartup - started_at:0.000} seconds");
            return twig_blocks;
        }
        
        HashSet<BuildingBlock> FindAllTwigBuildingBlocks()
        {
            var started_at = Time.realtimeSinceStartup;
            Puts("[TwigRemover] Finding all twig blocks...");
            var building_blocks = UnityEngine.Object.FindObjectsOfType<BuildingBlock>();
            var twig_blocks = new HashSet<BuildingBlock>(building_blocks.Where(block => block.grade == BuildingGrade.Enum.Twigs));
            Puts($"[TwigRemover] Finding {twig_blocks.Count} twig blocks took {Time.realtimeSinceStartup - started_at:0.000} seconds");
            return twig_blocks;
        }

        BaseCombatEntity[] FindAllToolCupboards()
        {
            var started_at = Time.realtimeSinceStartup;
            Puts("[TwigRemover] Finding all tool cupboards...");
            var combat_entities = UnityEngine.Object.FindObjectsOfType<BaseCombatEntity>();
            var tool_cupboards = combat_entities.Where(entity => entity.LookupPrefabName() == "items/cupboard.tool.deployed").ToArray();
            Puts($"[TwigRemover] Finding {tool_cupboards.Length} tool cupboards took {Time.realtimeSinceStartup - started_at:0.000} seconds");
            return tool_cupboards;
        }
    }
}

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