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

FREE ServerBroadcast : 1.0.6 1.0.6

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using Newtonsoft.Json.Converters;
using Facepunch;
using VLB;

using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Oxide.Plugins
{
    [Info("ServerBroadcast", "EcoSmile", "1.0.6")]
    class ServerBroadcast : RustPlugin
    {
        static ServerBroadcast ins;
        PluginConfig config;

        public class PluginConfig
        {
            //[JsonProperty("Message display interval (Time in minutes)")]
            [JsonProperty("Интервал показа сообщений (Время в минутах)")]
            public float TimeInterval;
            //[JsonProperty("The Steam ID of the account from which to display the avatar in the chat.(0 - standart icon)")]
            [JsonProperty("SteamID аккаунта с которого отображать аватарка в чате.(0 - стандартная иконка)")]
            public ulong SteamID;
            //[JsonProperty("List of messages to display to players (language - messages)")]
            [JsonProperty("Список сообщения для вывода игрокам (язык - сообщения)")]
            public Dictionary<string, List<string>> messageList;
        }

        protected override void LoadDefaultConfig()
        {
            config = new PluginConfig
            {
                TimeInterval = 30f,
                SteamID = 0,
                messageList = new Dictionary<string, List<string>>()
                {
                    ["en"] = new List<string>
                    {
                        "Here you can write any text using formatting <b>fat</b>, <i>slope</i>, <size=25>size</size> and <color=#FF8000FF>color</color>\nA as well as line wrapping",
                        "Here you can write any text using formatting <b>fat</b>, <i>slope</i>, <size=25>size</size> and <color=#FF8000FF>color</color>\nA as well as line wrapping"
                    },
                    ["ru"] = new List<string>()
                    {
                        "Здесь можно писать любой текст, используя форматирование <b>жирности</b>, <i>наклона</i>, <size=25>размера</size> и <color=#FF8000FF>цвета</color>\nА так-же перенос строк",
                        "Здесь можно писать любой текст, используя форматирование <b>жирности</b>, <i>наклона</i>, <size=25>размера</size> и <color=#FF8000FF>цвета</color>\nА так-же перенос строк",
                        "Здесь можно писать любой текст, используя форматирование <b>жирности</b>, <i>наклона</i>, <size=25>размера</size> и <color=#FF8000FF>цвета</color>\nА так-же перенос строк",
                    }
                }
            }; 
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(config);
        }

        Broadcaster broadcaster;
        Dictionary<string, MsgData> langCount = new Dictionary<string, MsgData>();
        public class MsgData
        {
            public int Max;
            public int Current;
        }
        private void OnServerInitialized()
        {
            ins = this;
            foreach (var msg in config.messageList.Keys.ToList())
            {
                if (langCount.ContainsKey(msg))
                    langCount[msg].Max = config.messageList[msg].Count;
                else
                    langCount[msg] = new MsgData { Max = config.messageList[msg].Count, Current = 0 };
            }
            broadcaster = new GameObject().AddComponent<Broadcaster>();
        }

        void Unload()
        {
            UnityEngine.Object.Destroy(broadcaster);
            ins = null;
        }

        [ChatCommand("sbhide")]
        void SBHidecmd(BasePlayer player)
        {
            if (!hideData.ContainsKey(player))
                hideData[player] = false;

            hideData[player] = !hideData[player];
            SendReply(player, $"Вы {(hideData[player] ? "ОТКЛЮЧИЛИ" : "ВКЛЮЧИЛИ")} отображение информационнах сообщений");
        }

        Dictionary<BasePlayer, bool> hideData = new Dictionary<BasePlayer, bool>();
        [PluginReference] Plugin BlueberryMenu;
        public class Broadcaster : FacepunchBehaviour
        {
            void Awake()
            {
                InvokeRepeating(MessageRepitter, 0, ins.config.TimeInterval * 60f);
            }

            void MessageRepitter()
            {
                foreach (var player in BasePlayer.activePlayerList)
                {
                    if (ins.BlueberryMenu != null && ins.BlueberryMenu.Call("IsHide", player.userID) != null)
                        if (ins.BlueberryMenu.Call<bool>("IsHide", player.userID))
                            continue;

                    if (ins.hideData.ContainsKey(player) && ins.hideData[player])
                        continue;

                    var lang = ins.lang.GetLanguage(player.UserIDString);
                    var text = "";
                    var index = 0;
                    if (ins.langCount.ContainsKey(lang))
                        index = ins.langCount[lang].Current;
                    else
                        index = ins.langCount.FirstOrDefault().Value.Current;

                    if (ins.config.messageList.ContainsKey(lang))
                        text = ins.config.messageList[lang][index];
                    else
                        text = ins.config.messageList.FirstOrDefault().Value[index];

                    ConsoleNetwork.SendClientCommand(player.Connection, "chat.add", new object[]
                    {
                        2,
                        ins.config.SteamID,
                        text
                    });
                }
                foreach (var index in ins.langCount)
                {
                    index.Value.Current++;
                    if (index.Value.Current >= index.Value.Max)
                        index.Value.Current = 0;
                }

            }

            void OnDestroy()
            {
                CancelInvoke(MessageRepitter);
                Destroy(this);
            }
        }

    }
}

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