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

FREE MyCH47 : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using UnityEngine;
using System.Collections.Generic;
using Oxide.Core;
using Convert = System.Convert;
using System.Linq;
using Newtonsoft.Json;
namespace Oxide.Plugins {
    [Info("My CH47", "FastBurst", "1.0.2")]
    [Description("Spawn a CH47 Helicopter")]
    public class MyCH47 : RustPlugin {
#region Vars
        private const string PREFAB_CH47 = "assets/prefabs/npc/ch47/ch47.entity.prefab";
        private const string CH47spawn = "mych47.spawn";
        private const string CH47cooldown = "mych47.cooldown";
        private bool normalch47kill;
        private float trigger = 60;
        private Timer clock;
        public Dictionary<BasePlayer, BaseVehicle> baseplayerch47 = new Dictionary<BasePlayer, BaseVehicle>();
        //for FUTURE
#endregion
#region Oxide
        private void Init() {
            permission.RegisterPermission(CH47spawn, this);
            permission.RegisterPermission(CH47cooldown, this);
            storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>(Name);
        }
        private void OnServerInitialized() {
            float cooldownsec = (configData.CoolSettings.cooldownmin * 60);
            if (cooldownsec <= 120) {
                PrintError("Please set a longer cooldown time.Minimum is 2 min.");
                return;
            }
            clock = timer.Repeat(trigger, 0, () => {
                LetsClock();
            }
            );
        }
        private void Unload() {
            Interface.Oxide.DataFileSystem.WriteObject(Name, storedData);
        }
        private void OnEntitySpawned(BaseNetworkable entity) {
            if (!configData.DebrisSettings.withoutdebris) return;
            if (normalch47kill == true) {
                if (configData.DebugSettings.debug == true) Puts($"IGNORING DEBRIS REMOVAL - NORMAL CH47 KILLED");
                return;
            }
            if (entity == null) return;
            var prefabname = entity.ShortPrefabName;
            if (string.IsNullOrEmpty(prefabname)) return;
            if (entity is HelicopterDebris && prefabname.Contains("ch47")) {
                var debris = entity.GetComponent<HelicopterDebris>();
                if (debris == null) return;
                entity.Kill();
                if (configData.DebugSettings.debug == true) Puts($"REMOVED DEBRIS FROM myCH47 KILLED");
            }
        }
        private void OnEntityKill(BaseNetworkable entity) {
            if (entity == null) return;
            if (entity.net.ID == null) return;
            CH47Helicopter check = entity as CH47Helicopter;
            if (check == null) return;
            if (storedData.playerch47 == null) return;
            ulong todelete = 0uL;
            if (storedData.playerch47.ContainsValue(entity.net.ID.Value) == false) {
                if (configData.DebugSettings.debug == true) Puts($"KILLED CH47 not from myCH47");
                normalch47kill = true;
                timer.Once(6f, () => {
                    normalch47kill = false;
                }
                );
            }
            foreach (var item in storedData.playerch47) {
                if (item.Value == entity.net.ID.Value) {
                    ChatPlayerOnline(item.Key, "killed");
                    foreach (BasePlayer player in BasePlayer.activePlayerList.ToList()) if (player.userID == item.Key) baseplayerch47.Remove(player);
                    todelete = item.Key;
                }
            }
            if (todelete != 0) storedData.playerch47.Remove(todelete);
        }
#endregion
#region Functions
        private void ChatPlayerOnline(ulong ailldi, string message) {
            foreach (BasePlayer player in BasePlayer.activePlayerList.ToList()) if (player.userID == ailldi) if (message == "killed") Player.Message(player, $"<color={configData.ChatSettings.ChatColor}>{lang.GetMessage("KilledMsg", this, player.UserIDString)}</color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
        }
        private void LetsClock() {
            foreach (BasePlayer player in BasePlayer.activePlayerList.ToList()) {
                float cooldownsec = (configData.CoolSettings.cooldownmin * 60);
                if (configData.DebugSettings.debug) Puts($"cooldown in seconds, calculated from config : {cooldownsec}");
                if (storedData.playercounter.ContainsKey(player.userID) == true) {
                    if (configData.DebugSettings.debug) Puts($"player cooldown counter increment");
                    float counting = new float();
                    storedData.playercounter.TryGetValue(player.userID, out counting);
                    storedData.playercounter.Remove(player.userID);
                    counting = counting + trigger;
                    storedData.playercounter.Add(player.userID, counting);
                    if (configData.DebugSettings.debug) Puts($"player {player.userID} newtime {counting}");
                    if (counting >= cooldownsec) {
                        if (configData.DebugSettings.debug) Puts($"player reached cooldown.removing from dict.");
                        storedData.playercounter.Remove(player.userID);
                    }
                    else {
                        if (configData.DebugSettings.debug) Puts($"player new cooldown counter in minutes : {counting / 60} / {configData.CoolSettings.cooldownmin}");
                        storedData.playercounter.Remove(player.userID);
                        storedData.playercounter.Add(player.userID, counting);
                    }
                }
            }
        }
#endregion
#region Commands
        [ChatCommand("mych47")]
        private void SpawnMyCH47(BasePlayer player, string command, string[] args) {
            bool isspawner = permission.UserHasPermission(player.UserIDString, CH47spawn);
            if (isspawner == false) {
                Player.Message(player, $"<color={configData.ChatSettings.ChatColor}><i>{lang.GetMessage("NoPermMsg", this, player.UserIDString)}</i></color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
                return;
            }
            if (storedData.playerch47.ContainsKey(player.userID) == true) {
                Player.Message(player, $"<color={configData.ChatSettings.ChatColor}>{lang.GetMessage("AlreadyMsg", this, player.UserIDString)}</color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
                return;
            }
            bool hascooldown = permission.UserHasPermission(player.UserIDString, CH47cooldown);
            float minleft = 0;
            if (hascooldown == true) {
                if (storedData.playercounter.ContainsKey(player.userID) == false) storedData.playercounter.Add(player.userID, 0);
                else {
                    float count = new float();
                    storedData.playercounter.TryGetValue(player.userID, out count);
                    minleft = configData.CoolSettings.cooldownmin - (count / 60);
                    if (configData.DebugSettings.debug == true) Puts($"Player DID NOT reach cooldown return.");
                    Player.Message(player, $"<color={configData.ChatSettings.ChatColor}>{lang.GetMessage("CooldownMsg", this, player.UserIDString)} ({minleft} min)</color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
                    return;
                }
            }
            else {
                if (storedData.playercounter.ContainsKey(player.userID)) storedData.playercounter.Remove(player.userID);
            }
            Vector3 position = player.transform.position + (player.transform.forward * 20);
            if (position == null) return;
            BaseVehicle vehicleCH47 = (BaseVehicle)GameManager.server.CreateEntity(PREFAB_CH47, position, new Quaternion());
            if (vehicleCH47 == null) return;
            BaseEntity CHentity = vehicleCH47 as BaseEntity;
            CHentity.OwnerID = player.userID;
            vehicleCH47.Spawn();
            Player.Message(player, $"<color={configData.ChatSettings.ChatColor}>{lang.GetMessage("SpawnedMsg", this, player.UserIDString)}</color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
            ulong ch47uint = vehicleCH47.net.ID.Value;
            if (configData.DebugSettings.debug == true) Puts($"SPAWNED CH47 {ch47uint.ToString()} for player {player.displayName} OWNER {CHentity.OwnerID}");
            storedData.playerch47.Remove(player.userID);
            storedData.playerch47.Add(player.userID, ch47uint);
            baseplayerch47.Remove(player);
            baseplayerch47.Add(player, vehicleCH47);
        }
        [ChatCommand("noch47")]
        private void KillMyCH47(BasePlayer player, string command, string[] args) {
            bool isspawner = permission.UserHasPermission(player.UserIDString, CH47spawn);
            if (isspawner == false) {
                Player.Message(player, $"<color={configData.ChatSettings.ChatColor}><i>{lang.GetMessage("NoPermMsg", this, player.UserIDString)}</i></color>", $"<color={configData.ChatSettings.PrefixColor}> {configData.ChatSettings.Prefix} </color>", configData.ChatSettings.SteamIDIcon);
                return;
            }
            if (storedData.playerch47.ContainsKey(player.userID) == true) {
                ulong deluint;
                storedData.playerch47.TryGetValue(player.userID, out deluint);
                var tokill = BaseNetworkable.serverEntities.Find(new NetworkableId(deluint));
                if (tokill != null) tokill.Kill();
                storedData.playerch47.Remove(player.userID);
                baseplayerch47.Remove(player);
            }
        }
#endregion
#region Config
        private static ConfigData configData;
        private class ConfigData {
            [JsonProperty(PropertyName = "Chat Settings")]
            public ChatOptions ChatSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Cooldown (on permissions)")]
            public CooldownOptions CoolSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Debris Settings")]
            public DebrisOptions DebrisSettings {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Debug Option")]
            public DebugOptions DebugSettings {
                get;
                set;
            }
            public class ChatOptions {
                [JsonProperty(PropertyName = "ChatColor")]
                public string ChatColor {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Prefix")]
                public string Prefix {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Prefix Color")]
                public string PrefixColor {
                    get;
                    set;
                }
                [JsonProperty(PropertyName = "Chat Icon")]
                public ulong SteamIDIcon {
                    get;
                    set;
                }
            }
            public class CooldownOptions {
                [JsonProperty(PropertyName = "Value in minutes")]
                public float cooldownmin {
                    get;
                    set;
                }
            }
            public class DebrisOptions {
                [JsonProperty(PropertyName = "Remove debris")]
                public bool withoutdebris {
                    get;
                    set;
                }
            }
            public class DebugOptions {
                [JsonProperty(PropertyName = "Enable debug Messages in console")]
                public bool debug {
                    get;
                    set;
                }
            }
            public Oxide.Core.VersionNumber Version {
                get;
                set;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            configData = Config.ReadObject<ConfigData>();
            if (configData.Version < Version) UpdateConfigValues();
            Config.WriteObject(configData, true);
        }
        protected override void LoadDefaultConfig() => configData = GetBaseConfig();
        private ConfigData GetBaseConfig() {
            return new ConfigData {
                ChatSettings = new ConfigData.ChatOptions {
                    ChatColor = "#bbffb1", Prefix = "[My CH47]", PrefixColor = "#149800", SteamIDIcon = 76561198332562475
                }
                , CoolSettings = new ConfigData.CooldownOptions {
                    cooldownmin = 60
                }
                , DebrisSettings = new ConfigData.DebrisOptions {
                    withoutdebris = false
                }
                , DebugSettings = new ConfigData.DebugOptions {
                    debug = false
                }
                , Version = Version
            }
            ;
        }
        protected override void SaveConfig() => Config.WriteObject(configData, true);
        private void UpdateConfigValues() {
            PrintWarning("Config update detected! Updating config values...");
            ConfigData baseConfig = GetBaseConfig();
            if (configData.Version < new Core.VersionNumber(1, 0, 0)) configData = baseConfig;
            configData.Version = Version;
            PrintWarning("Config update completed!");
        }
        T GetConfig<T>(string name, T defaultValue) {
            if (Config[name] == null) return defaultValue;
            return (T)Convert.ChangeType(Config[name], typeof(T));
        }
#endregion
#region Localization
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                {
                    "AlreadyMsg", "You already have a CH47 helicopter.\nuse command '/noch47' to remove it."
                }
                , {
                    "SpawnedMsg", "Your CH47 has spawned !\nuse command '/noch47' to remove it."
                }
                , {
                    "KilledMsg", "Your CH47 has been removed/killed."
                }
                , {
                    "NoPermMsg", "You are not allowed to do this."
                }
                , {
                    "CooldownMsg", "You must wait before a new CH47"
                }
                ,
            }
            , this, "en");
        }
#endregion
#region Data
        class StoredData {
            public Dictionary<ulong, ulong> playerch47 = new Dictionary<ulong, ulong>();
            public Dictionary<ulong, float> playercounter = new Dictionary<ulong, float>();
            public StoredData() {
            }
        }
        private StoredData storedData;
#endregion
    }
}

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