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

FREE NoSafeZoneSleepers : 1.9 1.9

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
 // Requires: ZoneManager
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Oxide.Plugins {
    [Info("No Safe Zone Sleepers", "NooBlet", "1.9")]
    [Description("Automaticly Creates a Zone to remove sleeping players from Outpost and Bandit Camp")]
    public class NoSafeZoneSleepers : CovalencePlugin {
        List<string> createdZones = new List<string>();
        int number = 0;
#region Cached Variables
        private bool UseCustomZone = true;
        private bool KillSleepers = false;
        private int TimeToKill = 60;
        private int OupostZoneRadius = 150;
        private int BanditCampZoneRadius = 150;
        private int OtherZones = 20;
        private bool UseMessages = false;
        private string EnterMessage = "You are now Entering {0} a No Sleep Zone";
        private string ExitMessage = "You are now leaving {0} a No Sleep Zone";
        private string MessageColor = "#95a5a6";
        private List<object> CustomZones = new List<object> {
            "12345", "54321"
        }
        ;
#endregion
#region Config
        protected override void LoadDefaultConfig() {
            LogWarning("Creating a new configuration file");
        }
        private void LoadConfiguration() {
            CheckCfg<bool>("1 Use Custom SafeZone settings", ref UseCustomZone);
            CheckCfg<bool>("2 Kill Sleepers on disconnect", ref KillSleepers);
            CheckCfg<int>("3 Time to delay Kill", ref TimeToKill);
            CheckCfg<int>("4 Oupost Zone Radius", ref OupostZoneRadius);
            CheckCfg<int>("5 BanditCamp Zone Radius", ref BanditCampZoneRadius);
            CheckCfg<int>("6 Ranch and Fishing Village Zone Radius", ref OtherZones);
            CheckCfg<bool>("7 Use Enter and Leave Messages?", ref UseMessages);
            CheckCfg<string>("8 Enter Message", ref EnterMessage);
            CheckCfg<string>("9 Leave Message", ref ExitMessage);
            CheckCfg<string>("A Message Color", ref MessageColor);
            CheckCfg<List<object>>("Custom SafeZone Zoneid's", ref CustomZones);
            SaveConfig();
        }
        private void CheckCfg<T>(string Key, ref T var) {
            if (Config[Key] is T) var = (T)Config[Key];
            else Config[Key] = var;
        }
#endregion config
#region Hooks
        [PluginReference]
        private Plugin ZoneManager;
        private void OnServerInitialized() {
            LoadConfiguration();
            if (!UseCustomZone) {
                AddZones();
            }
        }
        void Unload() {
            ClearZones();
        }
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            RemoveSleeper(player);
        }
#endregion Hooks
#region Methods
        bool isInPriv(BasePlayer player) {
            if(player == null) {
                return false;
            }
            var priv = player.GetBuildingPrivilege();
            if(priv == null) {
                return false;
            }
            else {
                player.SetPlayerFlag(BasePlayer.PlayerFlags.SafeZone, false) ;
                return true;
            }
        }
        string ZoneName(string message, string zonename) {
            string name = "";
            if (message.Contains("{0}")) {
                name = message.Replace("{0}", zonename);
            }
            else {
                name = message;
            }
            return name;
        }
        private bool CheckCustomZone(BasePlayer player) {
            foreach (var zid in CustomZones) {
                if (ZoneManager.Call<bool>("IsPlayerInZone", zid.ToString(), player)) {
                    return true;
                }
            }
            return false;
        }
        private string GetPlayerZone(BasePlayer player) {
            string zone = "";
            foreach (var zid in CustomZones) {
                if (ZoneManager.Call<bool>("IsPlayerInZone", zid.ToString(), player)) {
                    zone = zid.ToString();
                    return zone;
                }
            }
            return zone;
        }
        private void RemoveSleeper(BasePlayer sleeper) {
            if (!isInPriv(sleeper)) {
                if (UseCustomZone) {
                    if (CheckCustomZone(sleeper)) {
                        if (KillSleepers) {
                            float time = float.Parse(TimeToKill.ToString()) * 60;
                            timer.Once(time, () => {
                                if (!sleeper.IsConnected) {
                                    Addflag(GetPlayerZone(sleeper), "killsleepers");
                                }
                            }
                            );
                        }
                        else {
                            Addflag(GetPlayerZone(sleeper), "ejectsleepers");
                            sleeper.SetPlayerFlag(BasePlayer.PlayerFlags.SafeZone, false);
                        }
                    }
                    return;
                }
                else {
                    foreach (string zone in createdZones) {
                        if (ZoneManager.Call<bool>("isPlayerInZone", zone, sleeper)) {
                            if (KillSleepers) {
                                float time = float.Parse(TimeToKill.ToString()) * 60;
                                timer.Once(time, () => {
                                    if (!sleeper.IsConnected) {
                                        sleeper.Kill();
                                    }
                                }
                                );
                            }
                            else {
                                Addflag(zone, "ejectsleepers");
                                sleeper.SetPlayerFlag(BasePlayer.PlayerFlags.SafeZone, false);
                            }
                        }
                    }
                }
            }
        }
        private void Addflag(string zone, string flag) {
            ZoneManager?.Call("AddFlag", zone, flag);
            timer.Once(10f, () => {
                ZoneManager?.Call("RemoveFlag", zone, flag);
            }
            );
        }
        private void ClearZones() {
            if (createdZones != null) {
                foreach (string zone in createdZones) {
                    ZoneManager?.Call("EraseZone", zone);
                    Puts($"{zone} has been Removed");
                }
            }
        }
        private void AddZones() {
            //  assets/bundled/prefabs/autospawn/monument/medium/stables_a.prefab
            // assets/bundled/prefabs/autospawn/monument/harbor/fishing_village_a.prefab
            // assets/bundled/prefabs/autospawn/monument/harbor/fishing_village_b.prefab
            //assets/bundled/prefabs/autospawn/monument/harbor/fishing_village_c.prefab
            foreach (var current in TerrainMeta.Path.Monuments) {
                if (current.name == "assets/bundled/prefabs/autospawn/monument/medium/compound.prefab" || current.name.Contains("assets/bundled/prefabs/autospawn/monument/medium/bandit_town.prefab")||current.name.Contains("fishing_village") || current.name.Contains("stables")) {
                    string[] messages = new string[4];
                    string name = "";
                    if (UseMessages) {
                        messages = new string[8];
                    }
                    else {
                        messages = new string[4];
                    }
                    if (current.displayPhrase.english.StartsWith("Bandit")) {
                        name = "BanditCamp";
                    }
                    if (current.displayPhrase.english.StartsWith("Outpost")) {
                        name = "OutPost";
                    }
                    if (current.displayPhrase.english.StartsWith("Ranch")) {
                        name = "Ranch";
                    }
                    if (current.displayPhrase.english.StartsWith("Fishing Village")) {
                        name = "Fishing Village";
                    }
                    if (current.displayPhrase.english.StartsWith("Large Fishing Village")) {
                        name = "Large Fishing Village";
                    }
                    string zoneId = $"{name}.{number}";
                    string friendlyname = name;
                    string ID = zoneId;
                    messages[0] = "name";
                    messages[1] = friendlyname;
                    //messages[2] = "ejectsleepers";
                    //messages[3] = "true";
                    messages[2] = "radius";
                    if (name == "OutPost") {
                        messages[3] = OupostZoneRadius.ToString();
                    }
                    else {
                        messages[3] = BanditCampZoneRadius.ToString();
                    }
                    if (name == "Ranch" || name == "Fishing Village" || name == "Large Fishing Village") {
                        messages[3] = OtherZones.ToString();
                    }
                    if (UseMessages) {
                        string entermsg = $"<color=red>[NSZS]</color> :<color={MessageColor}> {ZoneName(EnterMessage, current.displayPhrase.english)} </color> ";
                        string leavemsg = $"<color=red>[NSZS]</color> :<color={MessageColor}> {ZoneName(ExitMessage,current.displayPhrase.english)} </color> ";
                        messages[4] = "enter_message";
                        messages[5] = entermsg;
                        messages[6] = "leave_message";
                        messages[7] = leavemsg;
                    }
                    ZoneManager?.CallHook("CreateOrUpdateZone", ID, messages, current.transform.position);
                    number++;
                    createdZones.Add(zoneId);
                    Puts($"{ID} has been created");
                }
            }
        }
#endregion Methods
        //#region Debug Testing
        //private BasePlayer findPlayer(string name)
        //{
        //    BasePlayer target = BasePlayer.FindAwakeOrSleeping(name);
        //    return target;
        //}
        //[Command("sleep")]
        //private void sleepCommand(IPlayer iplayer, string command, string[] args)
        //{
        //    BasePlayer player = iplayer.Object as BasePlayer;
        //    player.StartSleeping();
        //}
        //#endregion Debug Testing
    }
}

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