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

FREE Ping : 1.3.1 1.3.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
/*
TODO:
- Add optional banning instead of kicking
- Add warning and timed kick option
- Fix "a connected player can't be found in the player list (kicked)" in H2o
*/

using System;
using System.Collections.Generic;
using Oxide.Core.Libraries.Covalence;

namespace Oxide.Plugins
{
    [Info("Ping", "Wulf/lukespragg", "1.3.1")]
    [Description("Ping command and automatic kicking of players with high pings")]

    class Ping : CovalencePlugin
    {
        // Do NOT edit this file, instead edit Ping.json in oxide/config and Ping.en.json in the oxide/lang directory,
        // or create a new language file for another language using the 'en' file as a default.#region Configuration

        const string permBypass = "ping.bypass";

        bool adminExcluded;
        bool highPingKick;
        bool kickNotices;
        int pingLimit;

        protected override void LoadDefaultConfig()
        {
            Config["AdminExluded"] = adminExcluded = GetConfig("AdminExcluded", true);
            Config["HighPingKick"] = highPingKick = GetConfig("HighPingKick", true);
            Config["KickNotices"] = kickNotices = GetConfig("KickNotices", true);
            Config["PingLimit"] = pingLimit = GetConfig("PingLimit", 200); // Milliseconds
            SaveConfig();
        }

        #endregion

        #region Localization

        void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["PingTooHigh"] = "Ping is too high: {ping}ms",
                ["PlayerKicked"] = "{name} kicked for high ping ({ping}ms)",
                ["YourPing"] = "You have a ping of {ping}ms"
            }, this);
        }

        #endregion

        #region Initialization

        void Init()
        {
            LoadDefaultConfig();
            LoadDefaultMessages();
            permission.RegisterPermission(permBypass, this);
        }

        #endregion

        #region Chat Command

        [Command("ping")]
        void ChatPing(IPlayer player, string command, string[] args) => player.Reply(Lang("YourPing").Replace("{ping}", player.ConnectedPlayer.Ping.ToString()));

        #endregion

        #region Ping Check

        void HandlePing(string name, string id, int ping)
        {
            if (IsAllowed(id, permBypass) || (adminExcluded && IsAdmin(id)) || ping < pingLimit) return;
            if (!highPingKick) return;

            var player = players.GetOnlinePlayer(id);
            player?.Kick(Lang("PingTooHigh").Replace("{ping}", ping.ToString()));

            if (kickNotices)
            {
                Puts(Lang("PlayerKicked").Replace("{name}", name).Replace("{ping}", ping.ToString()));
                server.Broadcast(Lang("PlayerKicked").Replace("{name}", name).Replace("{ping}", ping.ToString()));
            }
        }

        #if HIDEHOLDOUT
        void OnPlayerConnected(PlayerInfos player)
        {
            timer.In(5f, () =>
            {
                if (!player.connected) return;
                HandlePing(player.Nickname, player.account_id, player.NetPlayer.averagePing);
            });
        }
        #endif

        #if HURTWORLD
        void OnPlayerInit(PlayerSession session)
        {
            timer.In(5f, () =>
            {
                if (!session.IsLoaded) return;
                HandlePing(session.Name, session.SteamId.ToString(), session.Player.averagePing);
            });
        }
        #endif

        #if REIGNOFKINGS
        void OnPlayerConnected(CodeHatch.Engine.Networking.Player player)
        {
            timer.In(5f, () =>
            {
                if (!player.Connection.IsConnected) return;
                HandlePing(player.Name, player.Id.ToString(), player.Connection.AveragePing);
            });
        }
        #endif

        #if RUST
        void OnPlayerInit(BasePlayer player)
        {
            timer.In(5f, () =>
            {
                if (!player.IsConnected()) return;
                HandlePing(player.displayName, player.UserIDString, Network.Net.sv.GetAveragePing(player.net.connection));
            });
        }
        #endif

        #if RUSTLEGACY
        void OnPlayerConnected(NetUser netUser)
        {
            timer.In(5f, () =>
            {
                if (!netUser.connected) return;
                HandlePing(netUser.displayName, netUser.userID.ToString(), netUser.networkPlayer.averagePing);
            });
        }
        #endif

        #endregion

        #region Helper Methods

        T GetConfig<T>(string name, T defaultValue)
        {
            if (Config[name] == null) return defaultValue;
            return (T)Convert.ChangeType(Config[name], typeof(T));
        }

        string Lang(string key, string id = null) => lang.GetMessage(key, this, id);

        bool IsAllowed(string id, string perm) => permission.UserHasPermission(id, perm);

        bool IsAdmin(string id) => permission.UserHasGroup(id, "admin");

        #endregion
    }
}

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