C#:
using Network;
using Oxide.Core;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Oxide.Plugins
{
[Info("Flat", "setfps", "0.0.1")]
[Description("Вспомогательный плагин для античита Flat")]
public class Flat : RustPlugin
{
Dictionary<BasePlayer, Timer> timers = new Dictionary<BasePlayer, Timer>();
private static HashSet<PlayerData> LoadedPlayerData = new HashSet<PlayerData>();
class PlayerData
{
public string HWID;
}
private void LoadData() => LoadedPlayerData = Interface.Oxide.DataFileSystem.ReadObject<HashSet<PlayerData>>("HWIDBan");
private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject("HWIDBan", LoadedPlayerData);
[ConsoleCommand("fban")]
void CommandBan(ConsoleSystem.Arg args)
{
if (!args.IsAdmin) return;
if (args.Args.Length < 1)
{
args.ReplyWith("Синтаксис команды: fban <hwid>");
return;
}
string hwid = args.Args[0];
LoadedPlayerData.Add(new PlayerData
{
HWID = hwid,
});
BasePlayer target = null;
foreach (BasePlayer player in BasePlayer.activePlayerList)
{
if (player != null && player.net.connection != null && player.net.connection.tokenKey == hwid)
{
target = player;
break;
}
}
SaveData();
if (target != null)
{
target.Kick("Ban ban ban!");
}
}
private void OnServerInitialized()
{
Puts("Test worked!");
}
private void CheckPlayer(Connection connection, bool checkIp = true)
{
try
{
if (connection.tokenKey == null || connection.tokenKey.Length < 10)
{
Network.Net.sv.Kick(connection, "Попытка обхода! Установите обновление из группы вк!");
return;
}
if (LoadedPlayerData.Any(p => p.HWID == connection.tokenKey))
{
Network.Net.sv.Kick(connection, "У вас бан, милорд");
return;
}
Puts("Connected player (" + connection.username + ") : HWID (" + connection.tokenKey + ")");
}
catch (Exception e)
{
PrintError(e.Message);
}
}
void OnClientAuth(Connection connection)
{
CheckPlayer(connection);
}
void OnPlayerInit(BasePlayer player)
{
if (player == null) return;
bool kicked = false;
webrequest.Enqueue($"http://45.138.72.222:3000/checkPlayer/{player.userID}", null, (code, response) =>
{
if (response != null)
{
// Puts(response + "1");
if (!response.Contains("true"))
{
kicked = true;
}
}
}, this);
if (kicked) return;
timers.Add(player, timer.Every(60, () =>
{
webrequest.Enqueue($"http://45.138.72.222:3000/checkPlayer/{player.userID}", null, (code, response) =>
{
if (response != null)
{
//Puts(response + "2");
if (!response.Contains("true"))
{
}
}
}, this);
}));
}
void OnPlayerDisconnected(BasePlayer player, string reason)
{
if (player == null) return;
if (timers.ContainsKey(player))
{
timers.Remove(player);
}
}
}
}