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

FREE ConnectionMessages : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using Network;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("ConnectionMessages", "Vlad-00003", "1.0.0")]
    [Description("Show message on user connection")]
    /*
     * Author info:
     *   E-mail: Vlad-00003@mail.ru
     *   Vk: vk.com/vlad_00003
     */
    class ConnectionMessages : RustPlugin
    {

        #region Vars

        private PluginConfig _config;
        private List<Connection> _connections;

        #endregion

        #region Configuration

        private class MessageConfig
        {
            [JsonProperty("Заголовок")]
            private string _title;
            [JsonProperty("Текст")]
            private string _text;

            #region Default Config

            public static MessageConfig DefaultConfig => new MessageConfig
            {
                _title = "Welcome to <color=red>Server #1</color>!",
                _text = "<i>deep.exe</i>"
            };
            public static MessageConfig DefaultConfig2 => new MessageConfig
            {
                _title = "<u>Hello there!</u>",
                _text = "<b>You are joining <size=15>Server #1</size></b>"
            };

            #endregion

            public void Send(Connection connection)
            {
                if (!Net.sv.write.Start()) return;
                Net.sv.write.PacketID(Message.Type.Message);
                Net.sv.write.String(_title);
                Net.sv.write.String(_text);
                Net.sv.write.Send(new SendInfo(connection));
            }
        }

        private class PluginConfig
        {
            [JsonProperty("Частота сообщений.0 - сообщение будет показано 1 раз")]
            public float MessageRate;
            [JsonProperty("Менять сообщение при каждом обновлении")]
            private bool _newEveryTime;
            [JsonProperty("Выбирать сообщение случайно (false - в порядке очереди)")]
            private bool _randomMessage;
            [JsonProperty("Список сообщений")]
            private List<MessageConfig> _messages;

            #region Default Config

            public static PluginConfig DefaultConfig => new PluginConfig
            {
                MessageRate = 0,
                _newEveryTime = false,
                _randomMessage = false,
                _messages = new List<MessageConfig>
                {
                    MessageConfig.DefaultConfig,
                    MessageConfig.DefaultConfig2
                }
            };

            #endregion

            [JsonIgnore]
            private Dictionary<Connection, MessageConfig> _chosenMessages;
            [JsonIgnore]
            private Dictionary<Connection, int> _messageOrder;

            private MessageConfig GetMessage(Connection con)
            {
                if (_randomMessage)
                    return _messages[UnityEngine.Random.Range(0, _messages.Count)];

                if (!_messageOrder.ContainsKey(con))
                    _messageOrder[con] = -1;
                if (++_messageOrder[con] >= _messages.Count)
                    _messageOrder[con] = 0;
                return _messages[_messageOrder[con]];
            }

            public void Init()
            {
                if (!_randomMessage)
                    _messageOrder = new Dictionary<Connection, int>();
                if (!_newEveryTime)
                    _chosenMessages = new Dictionary<Connection, MessageConfig>();
            }

            public void SendMessage(Connection con, bool newConnection = true)
            {
                MessageConfig message;
                if (newConnection || _newEveryTime)
                    message = GetMessage(con);
                else
                {
                    if (!_chosenMessages.TryGetValue(con, out message))
                    {
                        message = GetMessage(con);
                        _chosenMessages[con] = message;
                    }
                }
                message.Send(con);
            }
        }

        #endregion

        #region Config Initialization

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<PluginConfig>();
            }
            catch (Exception ex)
            {
                PrintError("Failed to load config file(is the config file corrupt ?)(" + ex.Message + ")");
            }

            //version check
            if (CheckConfig())
                SaveConfig();
        }

        private bool CheckConfig()
        {
            return false;
        }

        protected override void LoadDefaultConfig()
        {
            _config = PluginConfig.DefaultConfig;
        }

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

        #endregion

        #region Initialization

        private void Init()
        {
            _config.Init();
            if (_config.MessageRate <= 0)
            {
                Unsubscribe("OnPlayerConnected");
                return;
            }
            _connections = new List<Connection>();
            ServerMgr.Instance.InvokeRepeating(MessagesCycle, _config.MessageRate, _config.MessageRate);
        }

        private void MessagesCycle()
        {
            _connections.ForEach(x => _config.SendMessage(x, false));
        }
        #endregion

        #region Oxide Hooks

        private void OnClientAuth(Connection connection)
        {
            _config.SendMessage(connection);
            if (_config.MessageRate <= 0)
                return;

            _connections.Add(connection);
        }

        private void OnPlayerConnected(BasePlayer player)
        {
            _connections.Remove(player.net.connection);
        }
        #endregion
    }
}

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