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

FREE RustMap : 2.4.2 2.4.2

Нет прав для скачивания
C#:
using Facepunch;
using Network;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using Color = UnityEngine.Color;
namespace Oxide.Plugins {
    [Info("RustMap", "TopPlugins", "2.4.2")]
    [Description("Спасибо за приобретение на topplugin.ru")]
    class RustMap : RustPlugin {
        [PluginReference]
        Plugin Clans, Friends, NTeleportation, Teleport, Teleportation, CustomQuarry, HomesGUI, PlayersClasses;
        public class GenerateMapSave {
            [JsonProperty("Seed карты")]
            public string MapSeed {
                get;
                set;
            }
            [JsonProperty("Размер карты")]
            public int WorldSize {
                get;
                set;
            }
            public GenerateMapSave(string MapSeed, int WorldSize) {
                this.MapSeed = MapSeed;
                this.WorldSize = WorldSize;
            }
        }
        [ChatCommand("addfarm")]
        private void asdsad(BasePlayer player) {
            AddMarkerApi("https://cdn.discordapp.com/attachments/907668879982080040/938853091019726948/island.png", false, 12, 1f, player.transform, "farm");
        }
        Dictionary<BasePlayer, MapMarker> FarmMarkers = new Dictionary<BasePlayer, MapMarker>();
        void AddFarmMarker(BasePlayer player) {
            var transform = player.transform;
            var farm = MapMarker.Create(transform);
            farm.png = "island";
            farm.rotSupport = false;
            farm.name = "Фарм";
            farm.alpha = 1f;
            farm.size = 0.01f;
            farm.position = transform.position;
            FarmMarkers[player] = farm;
            foreach (var sub in subscribers) DrawMapMarker(sub.Key, farm);
        }
        class MapMarker {
            public Transform transform;
            public int Rotation = -1;
            public Vector2 anchorPosition {
                get {
                    return m_Instance.ToScreenCoords(position);
                }
            }
            public Vector2 position = Vector2.zero;
            public string name;
            public string png;
            public bool rotSupport = false;
            public string text;
            public float size;
            public float alpha;
            public int fontsize;
            public ulong counter = 0;
            public bool inMap = true;
            protected MapMarker(Transform transform) {
                this.transform = transform;
            }
            public virtual bool NeedRedraw() {
                if (transform == null) return false;
                var lastRot = Rotation;
                if (rotSupport) Rotation = GetRotation(transform.eulerAngles.y);
                var lastPos = position;
                position = transform.position;
                position.y = 0;
                if (rotSupport && Rotation != lastRot) {
                    position = lastPos;
                    return true;
                }
                if (Vector3.Distance(position, lastPos) > 0.5) return true;
                position = lastPos;
                return false;
            }
            public static MapMarker Create(Transform transform) {
                return new MapMarker(transform);
            }
        }
        class MapPlayer : MapMarker {
            public BasePlayer player;
            public List<MapPlayer> clanTeam = new List<MapPlayer>();
            protected MapPlayer(BasePlayer player) : base(player.transform) {
                this.player = player;
            }
            public override bool NeedRedraw() {
                var lastRot = Rotation;
                if (player == null || transform == null) return false;
                Rotation = GetRotation(player.eyes.rotation.eulerAngles.y);
                var lastPos = position;
                position = transform.position;
                position.y = 0;
                if (Rotation != lastRot) {
                    position = lastPos;
                    return true;
                }
                if (Vector3.Distance(position, lastPos) > 0.5) {
                    return true;
                }
                position = lastPos;
                return false;
            }
            public void OnCloseMap() {
                Rotation = -1;
                position = Vector2.zero;
                clanTeam?.ForEach(p => p.OnCloseMap());
            }
            public static MapPlayer Create(BasePlayer player) {
                return new MapPlayer(player) {
                    alpha = m_Instance.playerIconAlpha, size = m_Instance.playerIconSize
                }
                ;
            }
        }
        bool generated;
        float mapAlpha = 1f;
        float mapSize = 0.48f;
        bool clanSupport = false;
        bool SleepSup = true;
        bool friendsSupport = false;
        float playerIconSize = 0.03f;
        float playerIconAlpha = 0.99f;
        bool playerCoordinates = false;
        bool monuments = true;
        bool caves = true;
        bool water = true;
        bool powersub = true;
        float monumentIconSize = 0.036f;
        float monumentIconAlpha = 0.99f;
        bool monumentIconNames = true;
        float MapUpdate = 0.3f;
        bool raidhomes = false;
        float raidhomeSIze = 0.06f;
        int monumentsFontSize = 11;
        bool bradley = false;
        float bradleyIconSize = 0.05f;
        float bradleyIconAlpha = 0.99f;
        bool plane = true;
        float planeIconSize = 0.035f;
        float planeIconAlpha = 0.99f;
        float TimeToClose = 10f;
        bool NewHeli = true;
        float NewheliIconSize = 0.035f;
        float NewheliIconAlpha = 0.99f;
        bool ship = true;
        float CargoIconSize = 0.05f;
        float CargoIconAlpha = 0.99f;
        bool swamp = true;
        bool Oilrig = false;
        bool NewHeliCrate = true;
        float NewHeliCrateIconSize = 0.05f;
        float NewHeliCrateIconAlpha = 0.99f;
        bool planeDrop = true;
        bool sethome = false;
        float sethomeIconSize = 0.03f;
        float deathIconSize = 0.03f;
        float planeDropIconSize = 0.045f;
        float planeDropIconAlpha = 0.95f;
        bool heli = true;
        float heliIconSize = 0.035f;
        float heliIconAlpha = 0.99f;
        bool heliDrop = true;
        bool quarry = false;
        float quarryIconSize = 0.03f;
        float heliDropIconSize = 0.03f;
        float heliDropIconAlpha = 0.99f;
        bool vendingMachine = false;
        bool vendingMachineEmpty = false;
        float vendingMachineIconSize = 0.02f;
        float vendingMachineIconAlpha = 0.99f;
        string textColor = "0 0.7 0 0.7";
        string textColor1 = "1 1 1 1";
        float bannedSize = 0.04f;
        string mapUrl = "Map.jpg";
        string MapText = "Помощь по карте <color=#ff9d00>/map menu</color>";
        private string version;
        bool NPCVendingMachine = false;
        bool MapGen = false;
        protected override void LoadDefaultConfig() {
            GetVariable("Основные", "Генерация карты через RustMapAPI (Укажите изображение Map.jpg)", ref MapGen);
            GetVariable("Основные", "Изображение карты (https:// или с папки data/RustMap)", ref mapUrl);
            GetVariable("Прозрачность элементов", "Прозрачность карты", ref mapAlpha);
            GetVariable("Размеры элементов", "Размер карты", ref mapSize);
            GetVariable("Элементы", "Отображать местоположение магазинов с Аванпоста", ref NPCVendingMachine);
            GetVariable("Элементы", "Отображать местоположение карьеров (CustomQuarry)", ref quarry);
            GetVariable("Размеры элементов", "Размер иконки карьера", ref quarryIconSize);
            GetVariable("Элементы", "Отображать дома которые рейдят(Нужен NoEscape)", ref raidhomes);
            GetVariable("Размеры элементов", "Размер иконок домов, которые рейдят", ref raidhomeSIze);
            GetVariable("Элементы", "Отображать местоположение соклановцев", ref clanSupport);
            GetVariable("Элементы", "Отображать местоположение друзей (Friends & Team)", ref friendsSupport);
            GetVariable("Элементы", "Отображать местоположение спальников игрока", ref SleepSup);
            GetVariable("Основные", "Цвет текста (RED, GREEN, BLUE, ALPHA)", ref textColor);
            GetVariable("Основные", "Цвет текста кастомных иконок (Homes)", ref textColor1);
            GetVariable("Основные", "Текст внизу карты (советуем оставить /map menu)", ref MapText);
            GetVariable("Элементы", "Отображать местоположение SETHOME игроков? (Поддержка NTeleportation, Teleport, HomesGUI)", ref sethome);
            GetVariable("Размеры элементов", "Размер иконки SETHOME", ref sethomeIconSize);
            GetVariable("Размеры элементов", "Размер иконки DEATH", ref deathIconSize);
            GetVariable("Размеры элементов", "Размер иконки игрока", ref playerIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки игрока", ref playerIconAlpha);
            GetVariable("Элементы", "Показывать текущие координаты игрока", ref playerCoordinates);
            GetVariable("Элементы", "Отображать местоположение монументов", ref monuments);
            GetVariable("Элементы", "Показывать пещеры", ref caves);
            GetVariable("Элементы", "Показывать водонапорные башни", ref water);
            GetVariable("Элементы", "Показывать подстанции", ref powersub);
            GetVariable("Размеры элементов", "Размер иконок монументов", ref monumentIconSize);
            GetVariable("Размеры элементов", "Размер иконки забаненного игрока", ref bannedSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконок монументов", ref monumentIconAlpha);
            GetVariable("Прозрачность элементов", "Показывать название монументов", ref monumentIconNames);
            GetVariable("Размеры элементов", "Размер шрифта монументов", ref monumentsFontSize);
            GetVariable("Элементы", "Отображать местоположение самолета", ref plane);
            GetVariable("Размеры элементов", "Размер иконки самолёта", ref planeIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки самолёта", ref planeIconAlpha);
            GetVariable("Элементы", "Отображать местоположение cброшенного груза с Чинука", ref NewHeliCrate);
            GetVariable("Размеры элементов", "Размер иконки груза с Чинука", ref NewHeliCrateIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки груза с Чинука", ref NewHeliCrateIconAlpha);
            GetVariable("Основные", "Частота обновлений карты", ref MapUpdate);
            GetVariable("Основные", "Время до автоматического закрытия карты после ее открытия", ref TimeToClose);
            GetVariable("Элементы", "Отображать местоположение грузового вертолёта", ref NewHeli);
            GetVariable("Размеры элементов", "Размер иконки грузового вертолёта", ref NewheliIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки грузового вертолёта", ref NewheliIconAlpha);
            GetVariable("Элементы", "Отображать местоположение танка", ref bradley);
            GetVariable("Размеры элементов", "Размер иконки танка", ref bradleyIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки танка", ref bradleyIconAlpha);
            GetVariable("Элементы", "Отображать местоположение вертолёта", ref heli);
            GetVariable("Размеры элементов", "Размер иконок вертолёта", ref heliIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконок вертолёта", ref heliIconAlpha);
            GetVariable("Элементы", "Отображать местоположение cброшенного груза", ref planeDrop);
            GetVariable("Размеры элементов", "Размер иконок cброшенного груза", ref planeDropIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконок cброшенного груза", ref planeDropIconAlpha);
            GetVariable("Элементы", "Отображать местоположение ящиков с вертолёта", ref heliDrop);
            GetVariable("Размеры элементов", "Размер иконок ящиков с вертолёта", ref heliDropIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконок ящиков с вертолёта", ref heliDropIconAlpha);
            GetVariable("Элементы", "Отображать местоположение корабля", ref ship);
            GetVariable("Размеры элементов", "Размер иконки корабля", ref CargoIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконки корабля", ref CargoIconAlpha);
            GetVariable("Элементы", "Отображать местоположение болот", ref swamp);
            GetVariable("Элементы", "Отображать местоположение OilRig(Тестовая функция - Выходит за границы!)", ref Oilrig);
            GetVariable("Элементы", "Отображать местоположение торговых автоматов", ref vendingMachine);
            GetVariable("Элементы", "Отображать местоположение пустых торговых автоматов", ref vendingMachineEmpty);
            GetVariable("Размеры элементов", "Размер иконок торговых автоматов", ref vendingMachineIconSize);
            GetVariable("Прозрачность элементов", "Прозрачность иконок торговых автоматов", ref vendingMachineIconAlpha);
            SaveConfig();
            if (!string.IsNullOrEmpty(mapUrl)) {
                if (!mapUrl.ToLower().Contains("http")) {
                    mapUrl = "file://" + Interface.Oxide.DataDirectory + Path.DirectorySeparatorChar + "RustMap" + Path.DirectorySeparatorChar + mapUrl;
                }
            }
        }
        private bool GetVariable<T>(string MainMenu, string Key, ref T var) {
            if (Config[MainMenu, Key] != null) {
                var = (T)Convert.ChangeType(Config[MainMenu, Key], typeof(T));
                return false;
            }
            Config[MainMenu, Key] = var;
            return true;
        }
        static RustMap m_Instance;
        private string mapIconJson = @"[{""name"":""{0}"",""parent"":""map_mainImage"",""components"":[{""type"":""UnityEngine.UI.RawImage"",""sprite"":""assets/content/textures/generic/fulltransparent.tga"",""png"":""{3}"",""color"":""1 1 1 {4}""},{""type"":""RectTransform"",""anchormin"":""{1}"",""anchormax"":""{2}""}]}]";
        private string mapIconTextJson = @"[{""name"":""{0}"",""parent"":""map_mainImage"",""components"":[{""type"":""UnityEngine.UI.Text"",""text"":""{3}"",""align"":""MiddleCenter"",""fontSize"":12,""color"":""{color}""},{""type"": ""UnityEngine.UI.Outline"",""color"": ""0 0 0 1""},{""type"":""RectTransform"",""anchormin"":""{1}"",""anchormax"":""{2}""}]}]";
        private string mapIconTextJsonIcon = @"[{""name"":""{0}"",""parent"":""map_mainImage"",""components"":[{""type"":""UnityEngine.UI.Text"",""text"":""{3}"",""align"":""MiddleCenter"",""fontSize"":9,""color"":""{color1}""},{""type"": ""UnityEngine.UI.Outline"",""color"": ""0 0 0 1""},{""type"":""RectTransform"",""anchormin"":""{1}"",""anchormax"":""{2}""}]}]";
        private string mapJson = "[{\"name\":\"map_mainImage\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"1 1 1 {1}\",\"png\":\"{0}\"},{\"type\":\"RectTransform\",\"anchormin\":\"{2}\",\"anchormax\":\"{3}\"}]}]";
        private string mapCoordsTextJson = @"[{""name"":""map_coordinates"",""parent"":""map_mainImage"",""components"":[{""type"":""UnityEngine.UI.Text"",""text"":""{0}"",""align"":""MiddleCenter"",""fontSize"":18},{""type"": ""UnityEngine.UI.Outline"",""color"": ""0 0 0 1"",""distance"": ""0.5 -0.5""},{""type"":""RectTransform"",""anchormin"":""0 0.95"",""anchormax"":""1 1""}]}]";
        private string mapMenuJson = @"[{""name"":""map_menu"",""parent"":""map_mainImage"",""components"":[{""type"":""UnityEngine.UI.Text"",""text"":""{0}"",""align"":""MiddleLeft"",""fontSize"":16},{""type"": ""UnityEngine.UI.Outline"",""color"": ""0 0 0 1"",""distance"": ""0.5 -0.5""},{""type"":""RectTransform"",""anchormin"":""0.02 0.001"",""anchormax"":""1 0.05""}]}]";
        Dictionary<BasePlayer, MapPlayer> mapPlayers = new Dictionary<BasePlayer, MapPlayer>();
        Dictionary<BasePlayer, MapPlayer> subscribers = new Dictionary<BasePlayer, MapPlayer>();
        List<MapMarker> temporaryMarkers = new List<MapMarker>();
        const string MAP_ADMIN = "rustmap.admin";
        static string mapSeed;
        static int worldSize;
        string monumentsJson;
        bool init = false;
        private List<BasePlayer> AllPlayerUsers = new List<BasePlayer>();
        private Timer CloseMapTimer;
        [ChatCommand("map")]
        void cmdMapControl(BasePlayer player, string command, string[] args) {
            if (player == null || !player.IsConnected) return;
            if (!init || player == null) {
                SendReply(player, "В данный момент карта не работает!\nОбратитесь к администрации");
                return;
            }
            CuiHelper.DestroyUi(player, "mapmenu_2");
            if (sethome) {
                if (args.Count() >= 1 && args[0] == "homes") {
                    if (data.MapPlayerData[player.userID].Homes == true) {
                        data.MapPlayerData[player.userID].Homes = data.MapPlayerData[player.userID].Homes = false;
                        SendReply(player, $"<color=orange>Map homes</color>: False");
                        return;
                    }
                    if (data.MapPlayerData[player.userID].Homes == false) {
                        data.MapPlayerData[player.userID].Homes = data.MapPlayerData[player.userID].Homes = true;
                        SendReply(player, $"<color=orange>Map homes</color>: True");
                        return;
                    }
                }
            }
            if (friendsSupport) {
                if (args.Count() >= 1 && args[0] == "friends") {
                    if (data.MapPlayerData[player.userID].Friends == true) {
                        data.MapPlayerData[player.userID].Friends = data.MapPlayerData[player.userID].Friends = false;
                        SendReply(player, $"<color=orange>Map friends</color>: False");
                        return;
                    }
                    if (data.MapPlayerData[player.userID].Friends == false) {
                        data.MapPlayerData[player.userID].Friends = data.MapPlayerData[player.userID].Friends = true;
                        SendReply(player, $"<color=orange>Map Friends</color>: True");
                        return;
                    }
                }
            }
            if (clanSupport) {
                if (args.Count() >= 1 && args[0] == "clans") {
                    if (data.MapPlayerData[player.userID].Clans == true) {
                        data.MapPlayerData[player.userID].Clans = data.MapPlayerData[player.userID].Clans = false;
                        SendReply(player, $"<color=orange>Map Clans</color>: False");
                        return;
                    }
                    if (data.MapPlayerData[player.userID].Clans == false) {
                        data.MapPlayerData[player.userID].Clans = data.MapPlayerData[player.userID].Clans = true;
                        SendReply(player, $"<color=orange>Map Clans</color>: True");
                        return;
                    }
                }
            }
            if (permission.UserHasPermission(player.UserIDString, MAP_ADMIN)) {
                if (args.Count() >= 1 && args[0] == "players") {
                    if (data.MapPlayerData[player.userID].AllPlayers == true) {
                        data.MapPlayerData[player.userID].AllPlayers = data.MapPlayerData[player.userID].AllPlayers = false;
                        SendReply(player, $"<color=orange>Map AllPlayers</color>: False");
                        return;
                    }
                    if (data.MapPlayerData[player.userID].AllPlayers == false) {
                        data.MapPlayerData[player.userID].AllPlayers = data.MapPlayerData[player.userID].AllPlayers = true;
                        SendReply(player, $"<color=orange>Map AllPlayers</color>: True");
                        return;
                    }
                }
                if (args.Count() >= 1 && args[0] == "bans") {
                    if (data.MapPlayerData[player.userID].BanPlayers == true) {
                        data.MapPlayerData[player.userID].BanPlayers = data.MapPlayerData[player.userID].BanPlayers = false;
                        SendReply(player, $"<color=orange>Map BanPlayers</color>: False");
                        return;
                    }
                    if (data.MapPlayerData[player.userID].BanPlayers == false) {
                        data.MapPlayerData[player.userID].BanPlayers = data.MapPlayerData[player.userID].BanPlayers = true;
                        SendReply(player, $"<color=orange>Map BanPlayers</color>: True");
                        return;
                    }
                }
            }
            if (subscribers.Keys.Contains(player)) {
                CloseMap(player);
            }
            else {
                if (permission.UserHasPermission(player.UserIDString, MAP_ADMIN)) {
                    if (args.Count() >= 1 && args[0] == "menu") {
                        MenuUI(player);
                        return;
                    }
                    if (data.MapPlayerData[player.userID].AllPlayers == true) {
                        AllPlayerUsers.Add(player);
                    }
                    if (data.MapPlayerData[player.userID].AllPlayers == false) {
                        if (AllPlayerUsers.Contains(player)) AllPlayerUsers.Remove(player);
                    }
                    OpenMap(player);
                    return;
                }
                if (!permission.UserHasPermission(player.UserIDString, MAP_ADMIN)) {
                    if (args.Count() >= 1 && args[0] == "menu") {
                        MenuUI(player);
                        return;
                    }
                    OpenMap(player);
                }
            }
        }
        string button = "[{\"name\":\"CuiElement\",\"parent\":\"mapmenu_2\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"{color}\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.03 {amin}\",\"anchormax\":\"0.97 {amax}\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"CuiElement\",\"parent\":\"CuiElement\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"{text}\",\"fontSize\":16,\"align\":\"MiddleCenter\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0 0 0 0.2784314\",\"distance\":\"1 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"CuiElement\",\"parent\":\"CuiElement\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"{command}\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]}]";
        private string MapMenu = "[{\"name\":\"mapmenu_2\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"0.1647059 0.1647059 0.1647059 1\"},{\"type\":\"NeedsCursor\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.3704246 0.1914063\",\"anchormax\":\"0.6222548 0.7773438\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_3\",\"parent\":\"mapmenu_2\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"0.8431373 0.3372549 0.2509804 1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.9359605\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_4\",\"parent\":\"mapmenu_3\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"<b>Меню карты</b>\",\"fontSize\":18,\"align\":\"MiddleCenter\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0 0 0 0.2784314\",\"distance\":\"1 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_5\",\"parent\":\"mapmenu_2\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"\",\"align\":\"MiddleRight\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.01492521 0.004926026\",\"anchormax\":\"1 0.06896545\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_6\",\"parent\":\"mapmenu_2\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"0.2728048 0.2728048 0.2728048 1\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0.8431373 0.3372549 0.2509804 1\",\"distance\":\"0 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.51 0.07635458\",\"anchormax\":\"0.97 0.135468\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_7\",\"parent\":\"mapmenu_6\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"☓ <b>Закрыть</b>\",\"fontSize\":16,\"align\":\"MiddleCenter\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0 0 0 0.2784314\",\"distance\":\"1 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"button1\",\"parent\":\"mapmenu_6\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"close\":\"mapmenu_2\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\"}]},{\"name\":\"mapmenu_8\",\"parent\":\"mapmenu_2\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"sprite\":\"Assets/Content/UI/UI.Background.Tile.psd\",\"color\":\"0.8431373 0.3372549 0.2509804 1\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0.8431373 0.3372549 0.2509804 1\",\"distance\":\"0 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.03 0.07731612\",\"anchormax\":\"0.48 0.1364295\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"mapmenu_9\",\"parent\":\"mapmenu_8\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"♦ <b>Открыть карту</b>\",\"fontSize\":16,\"align\":\"MiddleCenter\"},{\"type\":\"UnityEngine.UI.Outline\",\"color\":\"0 0 0 0.2784314\",\"distance\":\"1 -1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\",\"offsetmin\":\"0 0\",\"offsetmax\":\"1 1\"}]},{\"name\":\"button2\",\"parent\":\"mapmenu_8\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"map.open\",\"color\":\"1 1 1 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0\",\"anchormax\":\"1 1\"}]}]";
        void MenuUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, "mapmenu_2");
            CuiHelper.AddUi(player, MapMenu.Replace("{version}", Version.ToString()));
            var container = new CuiElementContainer();
            double amin = 0.82;
            double amax = 0.91;
            if (friendsSupport) {
                var color = data.MapPlayerData[player.userID].Friends ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Друзья на карте").Replace("{command}", "cmd.menu friends").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
            }
            if (clanSupport) {
                var color = data.MapPlayerData[player.userID].Clans ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Соклановцы на карте").Replace("{command}", "cmd.menu clans").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
            }
            if (SleepSup) {
                var color = data.MapPlayerData[player.userID].Sleep ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Спальники на карте").Replace("{command}", "cmd.menu sleep").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
            }
            if (sethome) {
                var color = data.MapPlayerData[player.userID].Homes ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Отображение домов на карте").Replace("{command}", "cmd.menu homes").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
            }
            var color1 = data.MapPlayerData[player.userID].Death ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
            CuiHelper.AddUi(player, button.Replace("{text}", "Отображение последней смерти на карте").Replace("{command}", "cmd.menu death").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color1));
            amin = (amin - 0.11);
            amax = (amax - 0.11);
            if (player.IsAdmin || permission.UserHasPermission(player.UserIDString, MAP_ADMIN)) {
                CuiHelper.AddUi(player, button.Replace("{text}", "Админ раздел").Replace("{command}", "").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", "0.85 0.34 0.25 0"));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
                var color = data.MapPlayerData[player.userID].AllPlayers ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Отобразить всех игроков на карте").Replace("{command}", "cmd.menu allplayers").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
                var color2 = data.MapPlayerData[player.userID].BanPlayers ? "0.85 0.34 0.25 1.00" : "0.33 0.33 0.33 1.00";
                CuiHelper.AddUi(player, button.Replace("{text}", "Отобразить забаненых игроков на карте").Replace("{command}", "cmd.menu banplayers").Replace("{amin}", amin.ToString()).Replace("{amax}", amax.ToString()).Replace("{color}", color2));
                amin = (amin - 0.11);
                amax = (amax - 0.11);
            }
        }
        [ConsoleCommand("cmd.menu")]
        private void CmdMenuControll(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            switch (arg.Args[0]) {
                case "friends" : if (data.MapPlayerData[player.userID].Friends) {
                    data.MapPlayerData[player.userID].Friends = false;
                }
                else {
                    data.MapPlayerData[player.userID].Friends = true;
                }
                if (data.MapPlayerData[player.userID].Teams) {
                    data.MapPlayerData[player.userID].Teams = false;
                }
                else {
                    data.MapPlayerData[player.userID].Teams = true;
                }
                break;
                case "sleep" : if (data.MapPlayerData[player.userID].Sleep) {
                    data.MapPlayerData[player.userID].Sleep = false;
                }
                else {
                    data.MapPlayerData[player.userID].Sleep = true;
                }
                break;
                case "clans" : if (data.MapPlayerData[player.userID].Clans) {
                    data.MapPlayerData[player.userID].Clans = false;
                }
                else {
                    data.MapPlayerData[player.userID].Clans = true;
                }
                break;
                case "homes" : if (data.MapPlayerData[player.userID].Homes) {
                    data.MapPlayerData[player.userID].Homes = false;
                }
                else {
                    data.MapPlayerData[player.userID].Homes = true;
                }
                break;
                case "allplayers" : if (data.MapPlayerData[player.userID].AllPlayers) {
                    data.MapPlayerData[player.userID].AllPlayers = false;
                }
                else {
                    data.MapPlayerData[player.userID].AllPlayers = true;
                }
                break;
                case "banplayers" : if (data.MapPlayerData[player.userID].BanPlayers) {
                    data.MapPlayerData[player.userID].BanPlayers = false;
                }
                else {
                    data.MapPlayerData[player.userID].BanPlayers = true;
                }
                break;
                case "death" : if (data.MapPlayerData[player.userID].Death) {
                    data.MapPlayerData[player.userID].Death = false;
                }
                else {
                    data.MapPlayerData[player.userID].Death = true;
                }
                break;
            }
            MenuUI(player);
        }
        [ConsoleCommand("map.wipe")]
        private void MapWipeCmd(ConsoleSystem.Arg arg) {
            if (arg.Connection != null) return;
            LoadData();
            m_FileManager.WipeData();
            Interface.Oxide.ReloadPlugin(Title);
        }
        [ConsoleCommand("map.open")]
        void ConsoleMap(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!init) {
                SendReply(player, "В данный момент карта не работает!\nОбратитесь к администрации");
                return;
            }
            if (subscribers.Keys.Contains(player)) {
                CloseMap(player);
            }
            else {
                OpenMap(player);
            }
            return;
        }
        public bool IsActiveMap() {
            GenerateMapSave generateMap = Interface.Oxide.DataFileSystem.ReadObject<GenerateMapSave>(@"RustMap/" + "MapRender");
            if (generateMap == null || generateMap.MapSeed != mapSeed || generateMap.WorldSize != worldSize) {
                return false;
            }
            return true;
        }
        IEnumerator GenerateMap() {
            string mapName = MapName();
            byte[] MapData = MapRender.Render();
            yield return new WaitForSeconds(3);
            Stream stream = new MemoryStream(MapData);
            Image mapimg = Image.FromStream(stream);
            mapimg.Save(Interface.Oxide.DataDirectory + Path.DirectorySeparatorChar + "RustMap/" + mapName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            generated = true;
            yield break;
        }
        IEnumerator CheckPlugin() {
            string pathMap = @"RustMap/" + "MapRender";
            if ((Interface.Oxide.DataFileSystem.ExistsDatafile(pathMap) && IsActiveMap()) || mapUrl.ToLower().Contains("http")) {
                Puts("Карта обнаружена, начинается инициализцая!");
                Initialize();
            }
            else if (MapGen) {
                Puts("Запущена генерация карты");
                yield return CommunityEntity.ServerInstance.StartCoroutine(GenerateMap());
                if (generated) {
                    Puts("Карта успешно сгенерирована, запущена инициализация");
                    Interface.Oxide.DataFileSystem.WriteObject(pathMap, new GenerateMapSave(World.Seed.ToString(), (int)World.Size));
                    Initialize();
                }
            }
            else {
                Puts("Включите Авто-Генерацию либо укажите ссылку на своё изоброжение.");
                Unload();
            }
            yield break;
        }
        private Timer mtimer;
        void OnServerInitialized() {
            PrintWarning($"-----------------------------------");
            PrintError($"                RustMap            ");
            PrintError($"            Site  =  Top Plugin  ");
            PrintError($"           Discord =  https://discord.com/invite/5DPTsRmd3G      ");
            PrintError($"          Version =  {Version}     ");
            PrintWarning($"------------------------------------");
            PrintError("Передача плагина 3м лицам и выдача доступа к вашему серверу лишает вас обновлений!\n");
            MapPlayerData = Interface.Oxide.DataFileSystem.GetFile("RustMap/MapPlayerData");
            LoadData();
            PermissionService.RegisterPermissions(this, new List<string>() {
                MAP_ADMIN, permissionName
            }
            );
            LoadDefaultConfig();
            CommunityEntity.ServerInstance.StartCoroutine(CheckPlugin());
        }
        private void Initialize() {
            m_Instance = this;
            worldSize = (int)World.Size;
            mapSeed = World.Seed.ToString();
            var anchorMin = new Vector2(0.5f - mapSize * 0.5f, 0.5f - mapSize * 0.800f);
            var anchorMax = new Vector2(0.5f + mapSize * 0.5f, 0.5f + mapSize * 0.930f);
            mapJson = mapJson.Replace("{2}", $"{anchorMin.x} {anchorMin.y}").Replace("{3}", $"{anchorMax.x} {anchorMax.y}");
            mapIconTextJson = mapIconTextJson.Replace("{color}", textColor);
            mapIconTextJsonIcon = mapIconTextJsonIcon.Replace("{color1}", textColor1);
            InitFileManager();
            m_FileManager.StartCoroutine(DownloadMapImage());
            foreach (var player in BasePlayer.activePlayerList) {
                OnPlayerInit(player);
            }
            mtimer = timer.Every(MapUpdate, () => {
                foreach (var mm in temporaryMarkers) if (mm.NeedRedraw()) {
                    ++mm.counter;
                    foreach (var sub in subscribers) DrawMapMarker(sub.Key, mm);
                }
                foreach (var sub in subscribers) {
                    RedrawPlayers(sub.Value);
                }
            }
            );
            BansUpdate();
            timer.Every(20f, BansUpdate);
            foreach (var entity in BaseNetworkable.serverEntities.Select(p => p as BaseEntity).Where(p => p != null)) OnEntitySpawned(entity);
        }
        void LoadData() {
            try {
                if (Interface.Oxide.DataFileSystem.ExistsDatafile("RustMap/ImagesList")) {
                    Dictionary<string, string> ImageList = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, string>>("RustMap/ImagesList");
                    images = ImageList;
                }
                else {
                    PrintWarning("Дата Изоброжений создана");
                    Interface.Oxide.DataFileSystem.WriteObject("RustMap/ImagesList", images);
                }
                data = Interface.GetMod().DataFileSystem.ReadObject<DataStorage>("RustMap/MapPlayerData");
            }
            catch {
                Interface.Oxide.DataFileSystem.WriteObject("RustMap/ImagesList", images);
                data = new DataStorage();
            }
        }
        void OnServerSave() {
            PlayerSaveData();
        }
        private void PlayerSaveData() {
            MapPlayerData.WriteObject(data);
        }
        class DataStorage {
            public Dictionary<ulong, MAPDATA> MapPlayerData = new Dictionary<ulong, MAPDATA>();
            public DataStorage() {
            }
        }
        DataStorage data;
        private DynamicConfigFile MapPlayerData;
        class MAPDATA {
            public string Name;
            public bool Homes;
            public bool Friends;
            public bool Clans;
            public bool Death;
            public bool AllPlayers;
            public bool Teams;
            public bool Sleep;
            public bool BanPlayers;
            public Vector3 CustomIcon;
        }
        void OnPlayerInit(BasePlayer player) {
            if (!mapPlayers.ContainsKey(player)) mapPlayers[player] = MapPlayer.Create(player);
            if (!data.MapPlayerData.ContainsKey(player.userID)) {
                data.MapPlayerData.Add(player.userID, new MAPDATA() {
                    Name = player.displayName, Homes = false, Friends = true, Clans = false, AllPlayers = false, BanPlayers = false, Death = true, Teams = true, Sleep = true, CustomIcon = Vector3.zero
                }
                );
            }
            else {
                data.MapPlayerData[player.userID].Name = player.displayName.ToString();
            }
        }
        void OnNewSave() {
            LoadData();
            PrintWarning("Обнаружен вайп.Обновляем карту!");
            Interface.Oxide.DataFileSystem.WriteObject("RustMap/Images", new Dictionary<string, FileInfo>());
        }
        void Unload() {
            if (m_FileManager != null) {
                m_FileManager.SaveData();
            }
            foreach (var pl in data.MapPlayerData) {
                if (pl.Value.CustomIcon != Vector3.zero) pl.Value.CustomIcon = pl.Value.CustomIcon = Vector3.zero;
            }
            PlayerSaveData();
            if (!init) return;
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "map_mainImage");
                ;
            }
            if (FileManagerObject != null) UnityEngine.Object.Destroy(FileManagerObject);
        }
        void OnEntitySpawned(BaseEntity entity) {
            if (entity == null) return;
            if (plane && entity is CargoPlane) AddTemporaryMarker("plane", true, planeIconSize, planeIconAlpha, entity.transform);
            if (planeDrop && entity is SupplyDrop) {
                AddTemporaryMarker("mapsupply", false, planeDropIconSize, planeDropIconAlpha, entity.transform, "name");
            }
            if (NewHeli && entity is CH47Helicopter) {
                AddTemporaryMarker("newheli", true, NewheliIconSize, NewheliIconAlpha, entity.transform);
            }
            if (NewHeliCrate && entity is HackableLockedCrate) {
                if (!(entity.GetParentEntity() is CargoShip)) AddTemporaryMarker("newhelicreate", false, NewHeliCrateIconSize, NewHeliCrateIconAlpha, entity.transform);
            }
            if (bradley && entity is BradleyAPC) {
                AddTemporaryMarker("bradley", true, bradleyIconSize, bradleyIconAlpha, entity.transform);
            }
            if (heli && entity is BaseHelicopter) {
                AddTemporaryMarker("heli", true, heliIconSize, heliIconAlpha, entity.transform);
            }
            if (ship && entity is CargoShip) {
                AddTemporaryMarker("ship", true, CargoIconSize, CargoIconAlpha, entity.transform);
            }
            if (heliDrop && entity is LockedByEntCrate) {
                AddTemporaryMarker("helidebris", false, heliDropIconSize, heliDropIconAlpha, entity.transform);
            }
            if (vendingMachine && entity is VendingMachine) {
                if (!NPCVendingMachine) if (entity is NPCVendingMachine) return;
                if (vendingMachineEmpty || !((VendingMachine)entity).IsInventoryEmpty()) {
                    AddTemporaryMarker("vending", false, vendingMachineIconSize, vendingMachineIconAlpha, entity.transform);
                }
            }
        }
        void OnEntityKill(BaseNetworkable entity) {
            if (entity?.net?.ID == null) return;
            if (entity is CargoPlane || entity is SupplyDrop || entity is BaseHelicopter || entity is HelicopterDebris || entity is VendingMachine) {
                var transform = entity.transform;
                var mm = temporaryMarkers.Find(p => p.transform == transform);
                if (mm != null) RemoveTemporaryMarker(mm);
            }
        }
        void OpenMap(BasePlayer player) {
            if (!init || player == null) {
                SendReply(player, "В данный момент карта не работает!\nОбратитесь к администрации");
                return;
            }
            if (CloseMapTimer != null) CloseMapTimer.Destroy();
            CuiHelper.AddUi(player, mapJson);
            CuiHelper.AddUi(player, monumentsJson);
            foreach (var mm in temporaryMarkers) DrawMapMarker(player, mm);
            List<ulong> members = new List<ulong>();
            if (PermissionService.HasPermission(player.userID, MAP_ADMIN)) {
                if (data.MapPlayerData[player.userID].BanPlayers == true) {
                    foreach (var mm in bannedMarkers.Values) DrawMapMarker(player, mm);
                }
            }
            if (data.MapPlayerData[player.userID].AllPlayers) {
                mapPlayers[player].clanTeam = BasePlayer.activePlayerList.Where(p => p != player).Select(MapPlayer.Create).ToList();
            }
            else {
                mapPlayers[player].clanTeam = new List<MapPlayer>();
                if (clanSupport) {
                    if (data.MapPlayerData[player.userID].Clans) {
                        var clanmates = Clans.Call("GetClanMembers", player.userID);
                        if (clanmates != null) members.AddRange(clanmates as List<ulong>);
                    }
                }
                if (friendsSupport) {
                    if (data.MapPlayerData[player.userID].Teams) {
                        var teams = GetTeamMembers(player);
                        if (teams != null) members.AddRange(teams);
                    }
                    if (data.MapPlayerData[player.userID].Friends) {
                        var friends = Friends?.Call("GetFriends", player.userID);
                        if (friends != null) members.AddRange(friends as ulong[]);
                        var classes = PlayersClasses?.Call("GetPlayers", player.userID);
                        if (classes != null) members.AddRange(classes as List<ulong>);
                    }
                }
            }
            var homes = GetHomes(player);
            if (sethome && homes != null) foreach (var home in homes) {
                var anchors = ToAnchors(home.Value, sethomeIconSize);
                if (data.MapPlayerData[player.userID].Homes == true) {
                    DrawIconNull(player, "sethome" + home.Key, "sethome" + home.Key, anchors, images["sethome"], 1.0f, $"Дом: \"{home.Key}\"", 8, false);
                }
            }
            if (quarry && CustomQuarry != null) {
                var playerQuarries = GetPlayerQuarries(player.userID);
                if (playerQuarries != null) {
                    foreach (var quarry in playerQuarries) {
                        var anchors = ToAnchors(quarry.Key, quarryIconSize);
                        DrawIconNull(player, "quarry" + quarry.Value, "quarry" + quarry.Value, anchors, images["quarry"], 1.0f, "Топливо: " + quarry.Value, 2, false);
                    }
                }
            }
            if (data.MapPlayerData[player.userID].CustomIcon != Vector3.zero) {
      
// ... [Code preview truncated due to length. Full source in attached file] ...

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