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

FREE EntityItemPicker : 1.0.1 1.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
using Newtonsoft.Json;
namespace Oxide.Plugins {
    [Info("Entity Item Picker", "0x89A", "1.0.1")]
    [Description("Get the item of any deployable with a single button press")]
    class EntityItemPicker : RustPlugin {
        private Configuration _config;
        private const string use = "entityitempicker.use";
        private const string bypassCooldown = "entityitempicker.bypass";
        private Regex _removeRegex = new Regex(".prefab|.deployed|.entity|_deployed|_leather|electrical.|electric.");
        private Dictionary<string, string> _prefabToItemShortname = new Dictionary<string, string> {
            ["sign.huge.wood.prefab"]
            = "sign.wooden.huge", ["sign.large.wood.prefab"] = "sign.wooden.large", ["sign.medium.wood.prefab"] = "sign.wooden.medium", ["sign.small.wood.prefab"] = "sign.wooden.small", ["wall.external.high.wood.prefab"] = "wall.external.high", ["survivalfishtrap.deployed.prefab"] = "fishtrap.small", ["waterpurifier.deployed.prefab"] = "water.purifier", ["refinery_small_deployed.prefab"] = "small.oil.refinery", ["barricade.cover.wood.prefab"] = "barricade.wood.cover"
        }
        ;
        private Dictionary<ulong, float> _lastUseTime = new Dictionary<ulong, float>();
        void Init() {
            permission.RegisterPermission(use, this);
            permission.RegisterPermission(bypassCooldown, this);
        }
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["InvalidObject"]
                = "Please look at a valid object", ["OnCooldown"] = "Please wait {0} more seconds",
            }
            , this);
        }
        void OnPlayerInput(BasePlayer player, InputState input) {
            if (input.WasJustPressed(BUTTON.FIRE_THIRD)) {
                float useTime = 9999f;
                if (!_lastUseTime.TryGetValue(player.userID, out useTime)) _lastUseTime.Add(player.userID, Time.time);
                float time = Time.time - useTime;
                if (permission.UserHasPermission(player.UserIDString, use) && (!_config.useCooldown || permission.UserHasPermission(player.UserIDString, bypassCooldown) || time >= _config.cooldownTime)) {
                    RaycastHit hit;
                    if (Physics.Raycast(player.eyes.HeadRay(), out hit, _config.maxDist)) {
                        BaseCombatEntity entity = null;
                        try {
                            entity = hit.GetEntity() as BaseCombatEntity;
                        }
                        catch {
                            return;
                        }
                        string compareString = _removeRegex.Replace(entity.ShortPrefabName, string.Empty);
                        ItemDefinition itemDef = entity.pickup.itemTarget ?? GetDefinition(compareString, compareString.Replace('_', '.'), compareString.Replace("_", string.Empty), $"electric.{compareString}", GetStringFromDict(entity.ShortPrefabName));
                        if (itemDef != null) {
                            player.GiveItem(ItemManager.Create(itemDef, 1, entity.skinID));
                            if (_config.killWhenShifting && input.IsDown(BUTTON.SPRINT)) entity.AdminKill();
                        }
                        else player.ChatMessage(lang.GetMessage("InvalidObject", this, player.UserIDString));
                        _lastUseTime[player.userID] = Time.time;
                    }
                }
                else if (time < _config.cooldownTime) {
                    player.ChatMessage(lang.GetMessage("OnCooldown", this, player.UserIDString).Replace("{0}", (_config.cooldownTime - Math.Round(time, 1)).ToString()));
                }
            }
        }
        private ItemDefinition GetDefinition(params string[] comparisons) {
            ItemDefinition itemDef = null;
            foreach (string comparison in comparisons) {
                if (ItemManager.itemDictionaryByName.TryGetValue(comparison, out itemDef)) break;
            }
            return itemDef;
        }
        private string GetStringFromDict(string key) {
            string value;
            _prefabToItemShortname.TryGetValue(key, out value);
            return value ?? string.Empty;
        }
#region -Configuration-
        private class Configuration {
            [JsonProperty("Use cooldown")]
            public bool useCooldown = true;
            [JsonProperty("Cooldown duration")]
            public float cooldownTime = 3f;
            [JsonProperty("Maximum distance")]
            public float maxDist = 20f;
            [JsonProperty("Kill on pickup when holding sprint")]
            public bool killWhenShifting = false;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) throw new Exception();
                SaveConfig();
            }
            catch {
                PrintError("Failed to load _config, using default values");
                LoadDefaultConfig();
            }
        }
        protected override void LoadDefaultConfig() => _config = new Configuration();
        protected override void SaveConfig() => Config.WriteObject(_config);
#endregion
    }
}

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