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

FREE TeamSwitchLimit : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Oxide.Core;
using UnityEngine;
using Harmony;

namespace Oxide.Plugins
{
    [Info("TeamSwitchLimit", "Kira", "1.0.0")]
    [Description("Лимит смены тимы")]
    public class TeamSwitchLimit : RustPlugin
    {
        #region [Vars]

        private StoredData _dataBase = new StoredData();

        #endregion

        #region [Lang]

        protected override void LoadDefaultMessages()
        {
            var ru = new Dictionary<string, string>
            {
                ["LIMIT"] = "Ваш лимит смены команды был исчерпан",
                ["LEFT"] = "У вас осталось {0} смены команд"
            };

            var en = new Dictionary<string, string>
            {
                ["LIMIT"] = "Your team change limit has been reached",
                ["LEFT"] = "You have {0} team shift left"
            };
            lang.RegisterMessages(ru, this, "ru");
            lang.RegisterMessages(en, this);
        }

        #endregion

        #region [Configuraton] / [Конфигурация]

        private ConfigData _config;

        public class ConfigData
        {
            [JsonProperty(PropertyName = "TeamSwitchLimit - Настройка")]
            public TeamSwitchLimitCFG TeamSwitchConfig = new TeamSwitchLimitCFG();

            public class TeamSwitchLimitCFG
            {
                [JsonProperty(PropertyName = "Лимит смены команды")]
                public int Limit;
            }
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                TeamSwitchConfig = new ConfigData.TeamSwitchLimitCFG
                {
                    Limit = 2
                }
            };
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();

            try
            {
                _config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintError("Файл конфигурации поврежден (или не существует), создан новый!");
            _config = GetDefaultConfig();
        }

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

        #endregion

        #region [Hooks]

        // ReSharper disable once UnusedMember.Local
        private void OnServerInitialized()
        {
            LoadData();
        }

        // ReSharper disable once UnusedMember.Local
        private object OnTeamAcceptInvite(RelationshipManager.PlayerTeam team, BasePlayer player)
        {
            CheckData(player.userID);
            var leader = team.GetLeader();
            var db1 = _dataBase.LimitData[player.userID];
            var db2 = _dataBase.LimitData[leader.userID];

            if (db1 > 0 & db2 > 0)
            {
                _dataBase.LimitData[player.userID]--;
                _dataBase.LimitData[leader.userID]--;
                SendTip(player,
                    lang.GetMessage("LEFT", this, player.UserIDString).Replace("{0}", _dataBase.LimitData[player.userID].ToString()));
                SendTip(leader,
                    lang.GetMessage("LEFT", this, leader.UserIDString).Replace("{0}", _dataBase.LimitData[leader.userID].ToString()));
                return null;
            }

            if (_dataBase.LimitData[player.userID] <= 0 & _dataBase.LimitData[leader.userID] <= 0)
            {
                SendTip(player, lang.GetMessage("LIMIT", this, player.UserIDString));
                SendTip(leader, lang.GetMessage("LIMIT", this, leader.UserIDString));
                return false;
            }

            if (_dataBase.LimitData[player.userID] <= 0)
            {
                SendTip(player, lang.GetMessage("LIMIT", this, player.UserIDString));
                return false;
            }

            if (_dataBase.LimitData[leader.userID] <= 0)
            {
                SendTip(leader, lang.GetMessage("LIMIT", this, leader.UserIDString));
                return false;
            }

            return null;
        }

        // ReSharper disable once UnusedMember.Local
        private object OnTeamInvite(BasePlayer inviter, BasePlayer target)
        {
            CheckData(inviter.userID);
            CheckData(target.userID);
            var db1 = _dataBase.LimitData[inviter.userID];
            var db2 = _dataBase.LimitData[target.userID];
            if (db1 <= 0)
            {
                SendTip(inviter, lang.GetMessage("LIMIT", this, inviter.UserIDString));
                return false;
            }

            if (db2 <= 0)
            {
                SendTip(target, lang.GetMessage("LIMIT", this, target.UserIDString));
                return false;
            }

            return null;
        }

        // ReSharper disable once UnusedMember.Local
        private object OnTeamLeave(RelationshipManager.PlayerTeam team, BasePlayer player)
        {
            CheckData(player.userID);
            if (_dataBase.LimitData[player.userID] > 0) return null;
            SendTip(player, lang.GetMessage("LIMIT", this, player.UserIDString));
            return false;
        }

        // ReSharper disable once UnusedMember.Local
        // ReSharper disable once UnusedParameter.Local
        private void OnNewSave(string filename)
        {
            LoadData();
            _dataBase.LimitData.Clear();
            SaveData();
            PrintWarning("База данных на лимит смены команд сброшена");
        }

        // ReSharper disable once UnusedMember.Local
        private void OnServerSave()
        {
            timer.Once(5f, SaveData);
        }

        // ReSharper disable once UnusedMember.Local
        private void Unload()
        {
            SaveData();
        }

        #endregion

        #region [Commands]

        [ConsoleCommand("teamlimit.clear")]
        private void ClearDB(ConsoleSystem.Arg args)
        {
            if (args.Player() == null) return;
            if (!args.Player().IsAdmin) return;
            _dataBase.LimitData.Clear();
            SaveData();
        }

        #endregion

        #region [DataBase]

        private class StoredData
        {
            public Dictionary<ulong, int> LimitData = new Dictionary<ulong, int>();
        }

        #endregion

        #region [Helpers]

        private static void SendTip(BasePlayer player, string text)
        {
            player.SendConsoleCommand("showtoast", 0, text);
        }

        private void CheckData(ulong userid)
        {
            if (!_dataBase.LimitData.ContainsKey(userid))
                _dataBase.LimitData.Add(userid, _config.TeamSwitchConfig.Limit);
        }

        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, _dataBase);

        private void LoadData()
        {
            try
            {
                _dataBase = Interface.GetMod().DataFileSystem.ReadObject<StoredData>(Name);
            }
            catch (Exception)
            {
                _dataBase = new StoredData();
            }
        }

        #endregion
    }
}

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