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

FREE AnnouncerPlus : 1.1.0 1.1.0

Нет прав для скачивания
C#:
/***********************************************************************************************************************/
/*** DO NOT edit this file! Edit the files under `oxide/config` and/or `oxide/lang`, created once plugin has loaded. ***/
/***********************************************************************************************************************/
/*** Developed and maintained by netch.dev                                                                           ***/
/*** Copyright, All rights reserved.                                                                                 ***/
/*** Permission is granted to use this on your server only. You do not have permission to re-sell or steal code.     ***/
/*** Website: https://www.modpulse.com                                                                               ***/
/*** Support Discord: https://discord.com/invite/yz5D3PBXa8                                                          ***/
/***********************************************************************************************************************/

using Newtonsoft.Json;
using System.Collections.Generic;

namespace Oxide.Plugins {
    [Info("AnnouncerPlus", "Netch", "1.1.0")]
    [Description("Announces separate messages to default and VIP players")]
    public class AnnouncerPlus : RustPlugin {
        #region Vars
        private const string VIP_PERM = "announcerplus.vip"; // Receive VIP messages instead of default

        private int _defaultMessageIndex = 0;
        private int _vipMessageIndex = 0;
        #endregion

        #region Oxide Hooks
        private void OnServerInitialized() {
            if (!permission.PermissionExists(VIP_PERM, this)) permission.RegisterPermission(VIP_PERM, this);

            timer.Every(config.MessageInterval, () => SendGlobalMessages());
        }
        #endregion

        #region Config
        private ConfigData config;

        private class ConfigData {
            [JsonProperty("Message Interval (s)")] public int MessageInterval;
            [JsonProperty("Default Message Lang IDs [EDIT MESSAGES IN /OXIDE/LANG/]")] public List<string> DefaultMessages;
            [JsonProperty("VIP Message Lang IDs (announcerplus.vip) [EDIT MESSAGES IN /OXIDE/LANG/]")] public List<string> VipMessages;
            [JsonProperty("Chat Settings")] public ChatSettings ChatSettings;
        }
        
        public class ChatSettings {
            [JsonProperty("Message Icon (Steam64 ID)")] public ulong SteamIDIcon = 0;
            [JsonProperty("Message Color")] public string MessageColour = "#FFFFFF";
        }
        private ConfigData GetDefaultConfig() {
            return new ConfigData {
                MessageInterval = 600,
                DefaultMessages = new List<string> {
                    "M1",
                    "M2",
                    "M3",
                    "[EXAMPLE] Add as many messages as you need just make sure the ID is unique."
                },
                VipMessages = new List<string> {
                    "V1",
                    "V2",
                    "V3",
                    "V4",

                },
                ChatSettings = new ChatSettings()
            };
        }
        
        protected override void LoadConfig() {
            base.LoadConfig();

            try {
                config = Config.ReadObject<ConfigData>();

                if (config == null)
                {
                    LoadDefaultConfig();
                }
            } catch {
                LoadDefaultConfig();
            }

            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            PrintError("Configuration file is corrupt(or doesn't exist), creating a new one!");
            config = GetDefaultConfig();
        }

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

        #region Localization
        private void SendGlobalMessages() {
            string defaultMessageID = config.DefaultMessages[_defaultMessageIndex];
            string vipMessageID = config.VipMessages.Count > 0 ? config.VipMessages[_vipMessageIndex] : defaultMessageID;
            _defaultMessageIndex++; if (_defaultMessageIndex >= config.DefaultMessages.Count) _defaultMessageIndex = 0;
            _vipMessageIndex++; if (_vipMessageIndex >= config.VipMessages.Count) _vipMessageIndex = 0;

            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                if (permission.UserHasPermission(player.UserIDString, VIP_PERM)) Print(player, Lang(vipMessageID, player.UserIDString));
                else Print(player, Lang(defaultMessageID, player.UserIDString));
            }
        }

        private void Print(BasePlayer player, string message) {
            if (string.IsNullOrEmpty(message)) return;
            player.SendConsoleCommand("chat.add", 2, config.ChatSettings.SteamIDIcon, $"{Lang("P", player.UserIDString)} <color={config.ChatSettings.MessageColour}>{message}</color>");
        }

        private string Lang(string key, string playerID = null, params object[] args) {
            return string.Format(lang.GetMessage(key, this, playerID), args);
        }

        protected override void LoadDefaultMessages() {
            Dictionary<string, string> messages = new Dictionary<string, string> {
                { "P", "<color=#FFD700>[Announcer]</color>" }
            };

            foreach (string item in config.DefaultMessages) {
                if (item.StartsWith("[EXAMPLE]")) continue;
                if (!messages.ContainsKey(item)) messages.Add(item, $"Update message {item} in the oxide/lang/ files");
            }
            foreach (string item in config.VipMessages) {
                if (!messages.ContainsKey(item)) messages.Add(item, $"Update message {item} in the oxide/lang/ files");
            }
            lang.RegisterMessages(messages, this);
        }
        #endregion
    }
}

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