C#:
using Oxide.Core;
using Oxide.Core.Libraries;
using System.Collections.Generic;
using Network;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("GameProtection", "<3", "1.0")]
public class GameProtection : RustPlugin
{
#region Variables
Dictionary<BasePlayer, Timer> tmrList = new Dictionary<BasePlayer, Timer>();
private Configuration _config;
#endregion
#region Configuration
public class Configuration
{
[JsonProperty("Причина кика, если не запущен античит")]
public string ReasonNoConnect = "Не обнаружено соединение с античитом!";
[JsonProperty("Причина кика, если человек был забанен в античите")]
public string ReasonBanned = "Вы забанены! Для разблокировки обращайтесь в тех.поддержку!";
[JsonProperty("Причина кика, если человек выключил античит")]
public string ReasonOFF = "Античит неожиданно закрыл подключение!";
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
this._config = Config.ReadObject<Configuration>();
}
catch
{
PrintError("Произошла ошибка в чтении конфига!");
}
}
protected override void LoadDefaultConfig()
{
Config.WriteObject(new Configuration(), true);
}
#endregion
#region Join
void OnPlayerInit(BasePlayer player)
{
webrequest.Enqueue($"http://a0576975.xsph.ru/admin/connections/{player.userID}.txt", null, (code, response) =>
{
if (code != 200 || response == null)
{
player.Kick(_config.ReasonNoConnect);
}
if (response.StartsWith("Banned"))
{
player.Kick(_config.ReasonBanned);
}
if (!response.StartsWith("Connected"))
{
player.Kick(_config.ReasonNoConnect);
}
}, this, RequestMethod.GET);
tmrList.Add(player, timer.Every(10f, () =>
{
webrequest.Enqueue($"http://a0576975.xsph.ru/admin/connections/{player.userID}.txt", null, (code, response) =>
{
if (code != 200 || response == null)
{
player.Kick(_config.ReasonOFF);
}
if (response.StartsWith("Banned"))
{
player.Kick(_config.ReasonBanned);
}
if (!response.StartsWith("Connected"))
{
player.Kick(_config.ReasonOFF);
}
}, this, RequestMethod.GET);
}));
}
#endregion
#region Timer
void OnPlayerDisconnected(BasePlayer player, string reason)
{
if(tmrList.ContainsKey(player))
{
Timer t;
tmrList.TryGetValue(player, out t);
t.Destroy();
tmrList.Remove(player);
}
}
#endregion
}
}