C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Timer = Oxide.Core.Libraries.Timer;
namespace Oxide.Plugins
{
[Info("DayzList", "kurimimi", "1.4.0")]
public class DayzList : CovalencePlugin
{
private const int MaxCommandSpamCount = 6;
private float CommandSpamWindow = 5f;
private float RegularChatMessageInterval = 1800f;
private Dictionary<string, int> commandSpamCount = new Dictionary<string, int>();
private Dictionary<string, DateTime> lastCommandUsage = new Dictionary<string, DateTime>();
private Timer regularChatMessageTimer;
private void OnServerInitialized()
{
regularChatMessageTimer = timer.Every(RegularChatMessageInterval, SendAdminListToChat);
}
private void Unload()
{
regularChatMessageTimer?.Destroy();
}
private void SendAdminListToChat()
{
var onlineAdmins = players.Connected.Where(onlinePlayer => onlinePlayer.HasPermission("vanish.allow")).ToList();
if (onlineAdmins.Count > 0)
{
StringBuilder message = new StringBuilder("Администраторы в онлайне:\n");
foreach (var onlineAdmin in onlineAdmins)
{
message.AppendLine(onlineAdmin.Name);
}
foreach (var player in players.Connected)
{
player.Reply(message.ToString());
}
}
else
{
foreach (var player in players.Connected)
{
player.Reply("Администрация оффлайн :(");
}
}
}
[Command("admins")]
private void HowCommand(IPlayer player, string command, string[] args)
{
int spamCount = 0;
if (commandSpamCount.TryGetValue(player.Id, out spamCount))
{
var timeSinceLastCommand = DateTime.Now - lastCommandUsage[player.Id];
if (timeSinceLastCommand < TimeSpan.FromSeconds(CommandSpamWindow))
{
spamCount++;
commandSpamCount[player.Id] = spamCount;
if (spamCount >= MaxCommandSpamCount)
{
player.Reply("Вы были кикнуты за спам командой.");
player.Kick("СпамКоммандой");
return;
}
}
else
{
commandSpamCount[player.Id] = 1;
}
}
else
{
commandSpamCount[player.Id] = 1;
}
lastCommandUsage[player.Id] = DateTime.Now;
var onlineAdmins = players.Connected.Where(onlinePlayer => onlinePlayer.HasPermission("vanish.allow")).ToList();
if (onlineAdmins.Count > 0)
{
StringBuilder message = new StringBuilder("Администраторы в онлайне:\n");
foreach (var onlineAdmin in onlineAdmins)
{
message.AppendLine(onlineAdmin.Name);
}
player.Reply(message.ToString());
}
else
{
player.Reply("Администрация оффлайн :(");
}
}
private void OnPlayerDisconnected(IPlayer player, string reason)
{
commandSpamCount.Remove(player.Id);
lastCommandUsage.Remove(player.Id);
}
}
}