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

FREE Broadcaster : 1.1.15 1.1.15

Нет прав для скачивания
C#:
using System.Collections.Generic;
using Oxide.Core.Configuration;
using Oxide.Core;
using System;
namespace Oxide.Plugins {
    [Info("Broadcaster", "topplugin.ru", "1.1.15")]
    class Broadcaster : RustPlugin {
#region Global Variables
        string usagePerm = "broadcaster.hide";
        string joinIcon = "[ <color=#66ff66>+</color> ]";
        string leaveIcon = "[ <color=#c12c34>-</color> ]";
        string firstMessageFormat;
        string joinMessageFormat;
        string leaveMessageFormat;
        string motdMessage;
        string motdColour;
        bool motdEnabled;
        bool onlineCommand;
        bool joinLeaveIcons;
        string joinColour;
        string firstJoinColour;
        string leaveColour;
        string nameColour;
        string broadcastPrefix;
        bool broadcastPrefixEnabled;
        string broadcastPrefixColour;
        bool broadcastRandomMessages;
        int broadcastInterval;
        Timer autoBroadcastTimer;
        List<object> broadcastMessages = new List<object>();
        StoredData storedData;
        string DataFile = "Join_Data";
        string errorColour = "#FFFFFF";
        string mainColour = "#f4b342";
        string mainPrefix = "<color=#FFC040>[Broadcaster]</color>";
#endregion
        void Init() {
            openDataFile();
            LoadDefaultMessages();
            RegisterPermissions();
            initGlobals();
            LoadConfig();
            foreach (BasePlayer p in BasePlayer.activePlayerList) if (getPlayerInfo(p) != null) addNewPlayer(p, false);
        }
        void Loaded() {
            if (broadcastRandomMessages) startTimer(broadcastInterval);
        }
#region Player Commands
        [ChatCommand("who")]
        void OnCommandWho(BasePlayer sender, string command, string[] args) => OnCommandPlayers(sender, command, args);
        [ChatCommand("online")]
        void OnCommandOnline(BasePlayer sender, string command, string[] args) => OnCommandPlayers(sender, command, args);
        [ChatCommand("players")]
        void OnCommandPlayers(BasePlayer sender, string command, string[] args) {
            if (!onlineCommand) return;
            string playerList = color(mainColour, "Онлайн игроки:");
            foreach (BasePlayer player in BasePlayer.activePlayerList) playerList += $"\n- {player.displayName}";
            if (BasePlayer.activePlayerList.Count < 20) PrintToChat(sender, playerList);
            else PrintToChat(sender, "Список игроков слишком длинный для чата.\n Нажмите F1, затем снова введите /players в чате, затем F1, чтобы посмотреть полный список игроков.");
            sender.Command("echo", $"{playerList}");
        }
#endregion
#region Admin Commands
        [ChatCommand("whois")]
        void OnCommandWhois(BasePlayer sender, string command, string[] args) {
            if (!sender.IsAdmin) {
                sendMessage(sender, "NoPermission");
                return;
            }
            BasePlayer target = getPlayer(args[0]);
            showPlayerInfo(target, sender);
        }
        [ChatCommand("forcebroadcast")]
        void OnCommandForce(BasePlayer sender, string command, string[] args) {
            if (!sender.IsAdmin) {
                sendMessage(sender, "NoPermission");
                return;
            }
            broadcastRandomMessage();
        }
        [ChatCommand("bc")]
        void OnCommandAp(BasePlayer sender, string command, string[] args) {
            if (!sender.IsAdmin) {
                sendMessage(sender, "NoPermission");
                return;
            }
            if (args.Length < 1) {
                sendError(sender, "Используйте /bc reload", "/bc reload");
                return;
            }
            if (args[0] == "reload") {
                sendMessage(sender, "Конфиг Перезагружен");
                LoadConfig();
                autoBroadcastTimer.Destroy();
                initGlobals();
                startTimer(broadcastInterval);
                SaveConfig();
                return;
            }
        }
#endregion
#region Auto Broadcast
        void startTimer(int interval) {
            autoBroadcastTimer = timer.Every(interval, broadcastRandomMessage);
        }
        void broadcastRandomMessage() {
            foreach (BasePlayer p in BasePlayer.activePlayerList) PrintToChat(p, getMessageFormat(p, "AutoBroadcast"));
        }
        int CurrentNum = -1;
        string getRandomBroadcast() {
            CurrentNum++;
            if (CurrentNum >= broadcastMessages.Count) CurrentNum = 0;
            return (string)broadcastMessages[CurrentNum];
        }
#endregion
#region Join / Leave Messages
        void OnPlayerInit(BasePlayer player) {
            addNewPlayer(player);
            sendJoinMessage(player);
            if (motdEnabled) sendMOTD(player);
            updatePlayerInfo(player);
        }
        void updatePlayerInfo(BasePlayer player) {
            PlayerInfo playerInfo = getPlayerInfo(player);
            playerInfo.displayName = player.displayName;
            playerInfo.addAlias(player.displayName);
            playerInfo.ipAddress = player.net.connection.ipaddress;
            writeFile();
        }
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            sendLeaveMessage(player);
        }
        void sendJoinMessage(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, usagePerm)) return;
            string text = getMessageFormat(player, "Join");
            foreach (BasePlayer p in BasePlayer.activePlayerList) PrintToChat(p, text);
        }
        void sendLeaveMessage(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, usagePerm)) return;
            string text = getMessageFormat(player, "Leave");
            foreach (BasePlayer p in BasePlayer.activePlayerList) PrintToChat(p, text);
        }
        void sendMOTD(BasePlayer player) {
            string text = getMessageFormat(player, "Motd");
            PrintToChat(player, text);
        }
#endregion
#region Player Information
        void showPlayerInfo(BasePlayer player, BasePlayer sender) {
            PlayerInfo playerInfo = getPlayerInfo(player);
            string names = "\n";
            foreach (string name in playerInfo.Aliases) names += $"- {name}\n";
            string message = $"Информация об игроке: {color("#FFC040", player.displayName)}." + $"\nID Игрока: {color("#66ff66", playerInfo.userID.ToString())}\nОперационная система: {color("#66ff66", player.net.connection.os)}\nIP Адресс: {color("#66ff66", player.net.connection.ipaddress)}\nПсевдонимы:{color("#66ff66", names)}";
            PrintToChat(sender, message);
        }
        void addNewPlayer(BasePlayer player, bool firstTime = true) {
            if (getPlayerInfo(player) != null) return;
            var playerInfo = new PlayerInfo(player.displayName, player.userID);
            playerInfo.newPlayer = firstTime;
            storedData.Players.Add(playerInfo);
            Puts("[BC] Новый игрок добавлен.");
            writeFile();
        }
#endregion
#region Config, Saved Data & Helpers
        void RegisterPermissions() {
            permission.RegisterPermission(usagePerm, this);
        }
        void initGlobals() {
            LoadConfig();
            firstMessageFormat = (string)Config["Формат сообщения о первом присоеденение игрока"];
            joinMessageFormat = (string)Config["Формат сообщения при подключение игрока"];
            leaveMessageFormat = (string)Config["Формат сообщения при отключение игрока"];
            joinLeaveIcons = (bool)Config["Использование иконок"];
            onlineCommand = (bool)Config["Включить команды /players /who /online"];
            joinColour = (string)Config["Цвет сообщения подключения игрока"];
            leaveColour = (string)Config["Цвет сообщения об отключение игрока"];
            firstJoinColour = (string)Config["Цвет сообщения для первого присоединения игрока"];
            nameColour = (string)Config["Цвет имени игрока"];
            motdEnabled = (bool)Config["Включение MOTD"];
            motdMessage = (string)Config["MOTD"];
            motdColour = (string)Config["Цвет MOTD"];
            broadcastMessages = (List<object>)Config["Автоматические сообщения"];
            broadcastPrefix = (string)Config["Префикс"];
            broadcastPrefixEnabled = (bool)Config["Включить префикс новостей"];
            broadcastPrefixColour = (string)Config["Цвет префикса сообщений"];
            broadcastRandomMessages = (bool)Config["Включить автоматические сообщения в чат"];
            broadcastInterval = (int)Config["Интервал сообщений"];
        }
        protected override void LoadDefaultConfig() {
            Config["Использование иконок"] = true;
            Config["Включить команды /players /who /online"] = true;
            Config["Цвет сообщения подключения игрока"] = "#FFFFFF";
            Config["Формат сообщения при подключение игрока"] = "{PLAYER} присоединился к игре.";
            Config["Цвет имени игрока"] = "#FFC040";
            Config["Цвет сообщения об отключение игрока"] = "#FFFFFF";
            Config["Цвет сообщения для первого присоединения игрока"] = "#FFFFFF";
            Config["Формат сообщения при отключение игрока"] = "{PLAYER} вышел с игры.";
            Config["Формат сообщения о первом присоеденение игрока"] = "{PLAYER} присоединился к нам первый раз!";
            Config["Включение MOTD"] = true;
            Config["Цвет MOTD"] = "#FFFFFF";
            Config["MOTD"] = "Привет, {PLAYER}!{LINE}Не забывай посещать нашу группу Вконтакте!{LINE}http://vk.com/groupname";
            Config["Автоматические сообщения"] = GenerateDefaultBroadcastMessages();
            Config["Включить префикс новостей"] = true;
            Config["Префикс"] = "[Префикс]";
            Config["Цвет префикса сообщений"] = "#66ff66";
            Config["Включить автоматические сообщения в чат"] = true;
            Config["Интервал сообщений"] = 90;
            SaveConfig();
        }
        List<string> GenerateDefaultBroadcastMessages() {
            List<string> defaultMessages = new List<string> {
                "Добро пожаловать на мой сервер! Хорошо провести время.", "Не забывайте посетить наш магазин: http://domianname.ru", "У нас есть наборы для игроков, используйте /kit"
            }
            ;
            return defaultMessages;
        }
        void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["NoPermission"]
                = "У тебя нету доступа к этой команде.", ["Arguments"] = "Ошибка, используйте {0}", ["Reloaded"] = "Конфигурация успешно загружена."
            }
            , this);
        }
        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        void writeFile() {
            Interface.Oxide.DataFileSystem.WriteObject(DataFile, storedData);
        }
        void openDataFile() {
            storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>(DataFile);
        }
#endregion
#region Formatting
        string color(string color, string text) {
            return $"<color={color}>{text}</color>";
        }
        string getMessageFormat(BasePlayer player, string type) {
            PlayerInfo playerInfo = getPlayerInfo(player);
            if (type == "Join") {
                if (playerInfo.newPlayer) {
                    string message = firstMessageFormat.Replace("{PLAYER}", $"{color(nameColour, player.displayName)}");
                    getPlayerInfo(player).newPlayer = false;
                    writeFile();
                    if (joinLeaveIcons) return $"{joinIcon} {color(firstJoinColour, message)}";
                    return $"{message}";
                }
                else if (!playerInfo.newPlayer) {
                    string message = joinMessageFormat.Replace("{PLAYER}", $"{color(nameColour, player.displayName)}");
                    if (joinLeaveIcons) return $"{joinIcon} {color(joinColour, message)}";
                    return $"{message}";
                }
            }
            else if (type == "Leave") {
                string message = leaveMessageFormat.Replace("{PLAYER}", $"{color(nameColour, player.displayName)}");
                if (joinLeaveIcons) return $"{leaveIcon} {color(leaveColour, message)}";
                return $"{message}";
            }
            else if (type == "Motd") {
                string message = motdMessage.Replace("{PLAYER}", $"{color(nameColour, player.displayName)}");
                message = message.Replace("{LINE}", "\n");
                return $"{color(motdColour, message)}";
            }
            else if (type == "AutoBroadcast") {
                string message = getRandomBroadcast().Replace("{LINE}", "\n");
                if (broadcastPrefixEnabled) return $"{color(broadcastPrefixColour, broadcastPrefix)} {message}";
                return message;
            }
            return "<Error>";
        }
#endregion
        void sendError(BasePlayer player, string type, string extra = "") {
            PrintToChat(player, mainPrefix + " " + color(errorColour, Lang(type, player.UserIDString, extra)));
        }
        void sendMessage(BasePlayer player, string type, string extra = "") {
            PrintToChat(player, mainPrefix + " " + color(mainColour, Lang(type, player.UserIDString, extra)));
        }
        PlayerInfo getPlayerInfo(BasePlayer player) {
            foreach (PlayerInfo p in storedData.Players) if (p.userID == player.userID) return p;
            return null;
        }
        BasePlayer getPlayer(PlayerInfo player) {
            foreach (BasePlayer p in BasePlayer.activePlayerList) if (p.userID == player.userID) return p;
            return null;
        }
        BasePlayer getPlayer(string partialName) {
            foreach (BasePlayer p in BasePlayer.activePlayerList) if (p.displayName.ToLower() == partialName.ToLower()) return p;
            return null;
        }
        class PlayerInfo {
            public string displayName;
            public ulong userID;
            public bool newPlayer = true;
            public string ipAddress;
            public List<string> Aliases = new List<string>();
            public PlayerInfo(string name, ulong id) {
                this.displayName = name;
                this.userID = id;
                this.Aliases.Add(name);
            }
            public void addAlias(string name) {
                foreach (string s in Aliases) if (s == name) return;
                Aliases.Add(name);
            }
        }
        class StoredData {
            public List<PlayerInfo> Players = new List<PlayerInfo>();
        }
    }
}

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