mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-03-09 16:18:49 +00:00
1.2.9a
- Major changes - Fixed `css_respawn` - Added discord webhook - Refactoring database class
This commit is contained in:
@@ -1,20 +1,19 @@
|
|||||||
using CounterStrikeSharp.API.Modules.Entities;
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using MySqlConnector;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
internal class AdminSQLManager
|
public class AdminSQLManager
|
||||||
{
|
{
|
||||||
private readonly MySqlConnection _dbConnection;
|
private readonly Database _database;
|
||||||
// Unused for now
|
// Unused for now
|
||||||
//public static readonly ConcurrentDictionary<string, ConcurrentBag<string>> _adminCache = new ConcurrentDictionary<string, ConcurrentBag<string>>();
|
//public static readonly ConcurrentDictionary<string, ConcurrentBag<string>> _adminCache = new ConcurrentDictionary<string, ConcurrentBag<string>>();
|
||||||
public static readonly HashSet<SteamID> _adminCacheSet = new HashSet<SteamID>();
|
public static readonly HashSet<SteamID> _adminCacheSet = new HashSet<SteamID>();
|
||||||
public static readonly Dictionary<SteamID, DateTime?> _adminCacheTimestamps = new Dictionary<SteamID, DateTime?>();
|
public static readonly Dictionary<SteamID, DateTime?> _adminCacheTimestamps = new Dictionary<SteamID, DateTime?>();
|
||||||
|
|
||||||
public AdminSQLManager(string connectionString)
|
public AdminSQLManager(Database database)
|
||||||
{
|
{
|
||||||
_dbConnection = new MySqlConnection(connectionString);
|
_database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -26,7 +25,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
await connection.OpenAsync();
|
||||||
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
@@ -48,16 +47,9 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
public async Task<List<(List<string>, int)>> GetAdminFlags(string steamId)
|
public async Task<List<(List<string>, int)>> GetAdminFlags(string steamId)
|
||||||
{
|
{
|
||||||
/* Unused for now
|
|
||||||
if (_adminCache.TryGetValue(steamId, out ConcurrentBag<string>? cachedFlags))
|
|
||||||
{
|
|
||||||
return cachedFlags.ToList<object>();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "SELECT flags, immunity, ends FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime) AND (server_id IS NULL OR server_id = @serverid)";
|
string sql = "SELECT flags, immunity, ends FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime) AND (server_id IS NULL OR server_id = @serverid)";
|
||||||
List<dynamic>? activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
|
List<dynamic>? activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
|
||||||
@@ -147,8 +139,6 @@ namespace CS2_SimpleAdmin
|
|||||||
return flagsToCache.Cast<object>().ToList();
|
return flagsToCache.Cast<object>().ToList();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return filteredFlagsWithImmunity;
|
return filteredFlagsWithImmunity;
|
||||||
//return filteredFlags.Cast<object>().ToList();
|
//return filteredFlags.Cast<object>().ToList();
|
||||||
}
|
}
|
||||||
@@ -157,8 +147,7 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "SELECT player_steamid, flags, immunity, ends FROM sa_admins WHERE (ends IS NULL OR ends > @CurrentTime) AND (server_id IS NULL OR server_id = @serverid)";
|
string sql = "SELECT player_steamid, flags, immunity, ends FROM sa_admins WHERE (ends IS NULL OR ends > @CurrentTime) AND (server_id IS NULL OR server_id = @serverid)";
|
||||||
List<dynamic>? activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
|
List<dynamic>? activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
|
||||||
@@ -210,8 +199,6 @@ namespace CS2_SimpleAdmin
|
|||||||
filteredFlagsWithImmunity.Add((steamId, flagsValue.Split(',').ToList(), immunityValue, ends));
|
filteredFlagsWithImmunity.Add((steamId, flagsValue.Split(',').ToList(), immunityValue, ends));
|
||||||
}
|
}
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return filteredFlagsWithImmunity;
|
return filteredFlagsWithImmunity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,8 +235,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
//_adminCache.TryRemove(playerSteamId, out _);
|
//_adminCache.TryRemove(playerSteamId, out _);
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "";
|
string sql = "";
|
||||||
|
|
||||||
@@ -263,8 +249,6 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, ServerId = CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, ServerId = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddAdminBySteamId(string playerSteamId, string playerName, string flags, int immunity = 0, int time = 0, bool globalAdmin = false)
|
public async Task AddAdminBySteamId(string playerSteamId, string playerName, string flags, int immunity = 0, int time = 0, bool globalAdmin = false)
|
||||||
@@ -280,8 +264,7 @@ namespace CS2_SimpleAdmin
|
|||||||
else
|
else
|
||||||
futureTime = null;
|
futureTime = null;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `flags`, `immunity`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `flags`, `immunity`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @flags, @immunity, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @flags, @immunity, @ends, @created, @serverid)";
|
||||||
@@ -298,19 +281,14 @@ namespace CS2_SimpleAdmin
|
|||||||
created = now,
|
created = now,
|
||||||
serverid = serverId
|
serverid = serverId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task DeleteOldAdmins()
|
public async Task DeleteOldAdmins()
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
using Dapper;
|
using Dapper;
|
||||||
using MySqlConnector;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
internal class BanManager
|
internal class BanManager
|
||||||
{
|
{
|
||||||
private readonly MySqlConnection _dbConnection;
|
private readonly Database _database;
|
||||||
private readonly CS2_SimpleAdminConfig _config;
|
private readonly CS2_SimpleAdminConfig _config;
|
||||||
|
|
||||||
public BanManager(string connectionString, CS2_SimpleAdminConfig config)
|
public BanManager(Database database, CS2_SimpleAdminConfig config)
|
||||||
{
|
{
|
||||||
_dbConnection = new MySqlConnection(connectionString);
|
_database = database;
|
||||||
_config = config;
|
_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,8 +18,7 @@ namespace CS2_SimpleAdmin
|
|||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
DateTime futureTime = now.AddMinutes(time);
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
@@ -38,8 +36,6 @@ namespace CS2_SimpleAdmin
|
|||||||
created = now,
|
created = now,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddBanBySteamid(string playerSteamId, PlayerInfo issuer, string reason, int time = 0)
|
public async Task AddBanBySteamid(string playerSteamId, PlayerInfo issuer, string reason, int time = 0)
|
||||||
@@ -49,8 +45,7 @@ namespace CS2_SimpleAdmin
|
|||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
DateTime futureTime = now.AddMinutes(time);
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
@@ -66,8 +61,6 @@ namespace CS2_SimpleAdmin
|
|||||||
created = now,
|
created = now,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddBanByIp(string playerIp, PlayerInfo issuer, string reason, int time = 0)
|
public async Task AddBanByIp(string playerIp, PlayerInfo issuer, string reason, int time = 0)
|
||||||
@@ -77,8 +70,7 @@ namespace CS2_SimpleAdmin
|
|||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
DateTime futureTime = now.AddMinutes(time);
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
@@ -94,8 +86,6 @@ namespace CS2_SimpleAdmin
|
|||||||
created = now,
|
created = now,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsPlayerBanned(PlayerInfo player)
|
public async Task<bool> IsPlayerBanned(PlayerInfo player)
|
||||||
@@ -106,8 +96,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
int banCount;
|
int banCount;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(player.IpAddress))
|
if (!string.IsNullOrEmpty(player.IpAddress))
|
||||||
{
|
{
|
||||||
@@ -118,8 +107,6 @@ namespace CS2_SimpleAdmin
|
|||||||
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value, CurrentTime = now });
|
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value, CurrentTime = now });
|
||||||
}
|
}
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return banCount > 0;
|
return banCount > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,8 +115,7 @@ namespace CS2_SimpleAdmin
|
|||||||
string sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)";
|
string sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)";
|
||||||
int banCount;
|
int banCount;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(player.IpAddress))
|
if (!string.IsNullOrEmpty(player.IpAddress))
|
||||||
{
|
{
|
||||||
@@ -140,8 +126,6 @@ namespace CS2_SimpleAdmin
|
|||||||
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value });
|
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value });
|
||||||
}
|
}
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return banCount;
|
return banCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,24 +136,18 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sqlUnban = "UPDATE sa_bans SET status = 'UNBANNED' WHERE player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern AND status = 'ACTIVE'";
|
string sqlUnban = "UPDATE sa_bans SET status = 'UNBANNED' WHERE player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern AND status = 'ACTIVE'";
|
||||||
await connection.ExecuteAsync(sqlUnban, new { pattern = playerPattern });
|
await connection.ExecuteAsync(sqlUnban, new { pattern = playerPattern });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ExpireOldBans()
|
public async Task ExpireOldBans()
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "UPDATE sa_bans SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
string sql = "UPDATE sa_bans SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,12 +11,18 @@ using CounterStrikeSharp.API.Modules.Memory;
|
|||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
using CounterStrikeSharp.API.Modules.Menu;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
|
using Dapper;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MySqlConnector;
|
using MySqlConnector;
|
||||||
|
<<<<<<< Updated upstream
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
=======
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
>>>>>>> Stashed changes
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
@@ -36,14 +42,22 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
public static int? ServerId = null;
|
public static int? ServerId = null;
|
||||||
|
|
||||||
internal string dbConnectionString = string.Empty;
|
internal string dbConnectionString = string.Empty;
|
||||||
public override string ModuleName => "CS2-SimpleAdmin";
|
internal Database? _database;
|
||||||
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
|
||||||
public override string ModuleAuthor => "daffyy";
|
|
||||||
public override string ModuleVersion => "1.2.9d";
|
|
||||||
|
|
||||||
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool> CBasePlayerController_SetPawnFunc = new(
|
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool> CBasePlayerController_SetPawnFunc = new(
|
||||||
RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x49\x89\xFC\x53\x48\x89\xF3\x48\x81\xEC\xC8\x00\x00\x00" : "\\x44\\x88\\x4C\\x24\\x2A\\x55\\x57"
|
RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x49\x89\xFC\x53\x48\x89\xF3\x48\x81\xEC\xC8\x00\x00\x00" : "\\x44\\x88\\x4C\\x24\\x2A\\x55\\x57"
|
||||||
);
|
);
|
||||||
|
public override string ModuleName => "CS2-SimpleAdmin";
|
||||||
|
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
||||||
|
public override string ModuleAuthor => "daffyy";
|
||||||
|
public override string ModuleVersion => "1.2.9a";
|
||||||
|
|
||||||
|
<<<<<<< Updated upstream
|
||||||
|
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool> CBasePlayerController_SetPawnFunc = new(
|
||||||
|
RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x49\x89\xFC\x53\x48\x89\xF3\x48\x81\xEC\xC8\x00\x00\x00" : "\\x44\\x88\\x4C\\x24\\x2A\\x55\\x57"
|
||||||
|
);
|
||||||
|
=======
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
||||||
|
|
||||||
@@ -57,7 +71,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
public async void OnConfigParsed(CS2_SimpleAdminConfig config)
|
||||||
{
|
{
|
||||||
if (config.DatabaseHost.Length < 1 || config.DatabaseName.Length < 1 || config.DatabaseUser.Length < 1)
|
if (config.DatabaseHost.Length < 1 || config.DatabaseName.Length < 1 || config.DatabaseUser.Length < 1)
|
||||||
{
|
{
|
||||||
@@ -77,11 +91,14 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var connection = new MySqlConnection(dbConnectionString))
|
_database = new(dbConnectionString);
|
||||||
{
|
|
||||||
connection.Open();
|
|
||||||
|
|
||||||
string sql = @"CREATE TABLE IF NOT EXISTS `sa_bans` (
|
using (var connection = _database.GetConnection())
|
||||||
|
{
|
||||||
|
using var transaction = await connection.BeginTransactionAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string sql = @"CREATE TABLE IF NOT EXISTS `sa_bans` (
|
||||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
`player_steamid` VARCHAR(64),
|
`player_steamid` VARCHAR(64),
|
||||||
`player_name` VARCHAR(128),
|
`player_name` VARCHAR(128),
|
||||||
@@ -96,13 +113,13 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
`status` ENUM('ACTIVE', 'UNBANNED', 'EXPIRED', '') NOT NULL DEFAULT 'ACTIVE'
|
`status` ENUM('ACTIVE', 'UNBANNED', 'EXPIRED', '') NOT NULL DEFAULT 'ACTIVE'
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;";
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;";
|
||||||
|
|
||||||
MySqlCommand command = new MySqlCommand(sql, connection);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
sql = @"CREATE TABLE IF NOT EXISTS `sa_mutes` (
|
await connection.QueryAsync(sql, transaction: transaction);
|
||||||
|
|
||||||
|
sql = @"CREATE TABLE IF NOT EXISTS `sa_mutes` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`player_steamid` varchar(64) NOT NULL,
|
`player_steamid` varchar(64) NOT NULL,
|
||||||
`player_name` varchar(128) NOT NULL,
|
`player_name` varchar(128) NULL,
|
||||||
`admin_steamid` varchar(64) NOT NULL,
|
`admin_steamid` varchar(64) NOT NULL,
|
||||||
`admin_name` varchar(128) NOT NULL,
|
`admin_name` varchar(128) NOT NULL,
|
||||||
`reason` varchar(255) NOT NULL,
|
`reason` varchar(255) NOT NULL,
|
||||||
@@ -115,10 +132,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci";
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci";
|
||||||
|
|
||||||
command = new MySqlCommand(sql, connection);
|
await connection.QueryAsync(sql, transaction: transaction);
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
sql = @"CREATE TABLE IF NOT EXISTS `sa_admins` (
|
sql = @"CREATE TABLE IF NOT EXISTS `sa_admins` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`player_steamid` varchar(64) NOT NULL,
|
`player_steamid` varchar(64) NOT NULL,
|
||||||
`player_name` varchar(128) NOT NULL,
|
`player_name` varchar(128) NOT NULL,
|
||||||
@@ -130,10 +146,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci";
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci";
|
||||||
|
|
||||||
command = new MySqlCommand(sql, connection);
|
await connection.QueryAsync(sql, transaction: transaction);
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
sql = @"CREATE TABLE IF NOT EXISTS `sa_servers` (
|
sql = @"CREATE TABLE IF NOT EXISTS `sa_servers` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`address` varchar(64) NOT NULL,
|
`address` varchar(64) NOT NULL,
|
||||||
`hostname` varchar(64) NOT NULL,
|
`hostname` varchar(64) NOT NULL,
|
||||||
@@ -142,17 +157,21 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||||
";
|
";
|
||||||
|
|
||||||
command = new MySqlCommand(sql, connection);
|
await connection.QueryAsync(sql, transaction: transaction);
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
connection.Close();
|
await transaction.CommitAsync();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
await transaction.RollbackAsync();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Logger.LogError("Unable to connect to database!");
|
Logger.LogError("Unable to connect to the database!");
|
||||||
Logger.LogDebug(ex.Message);
|
throw new Exception("[CS2-SimpleAdmin] Unable to connect to the Database!");
|
||||||
throw new Exception("[CS2-SimpleAdmin] Unable to connect to Database!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Config = config;
|
Config = config;
|
||||||
@@ -178,6 +197,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/root")]
|
[RequiresPermissions("@css/root")]
|
||||||
public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
if (!Helper.IsValidSteamID64(command.GetArg(1)))
|
if (!Helper.IsValidSteamID64(command.GetArg(1)))
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Invalid SteamID64.");
|
command.ReplyToCommand($"Invalid SteamID64.");
|
||||||
@@ -203,7 +224,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
int time = 0;
|
int time = 0;
|
||||||
int.TryParse(command.GetArg(5), out time);
|
int.TryParse(command.GetArg(5), out time);
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(dbConnectionString);
|
AdminSQLManager _adminManager = new(_database);
|
||||||
_ = _adminManager.AddAdminBySteamId(steamid, name, flags, immunity, time, globalAdmin);
|
_ = _adminManager.AddAdminBySteamId(steamid, name, flags, immunity, time, globalAdmin);
|
||||||
|
|
||||||
command.ReplyToCommand($"Added '{flags}' flags to '{name}' ({steamid})");
|
command.ReplyToCommand($"Added '{flags}' flags to '{name}' ({steamid})");
|
||||||
@@ -214,6 +235,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/root")]
|
[RequiresPermissions("@css/root")]
|
||||||
public void OnDelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnDelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
if (!Helper.IsValidSteamID64(command.GetArg(1)))
|
if (!Helper.IsValidSteamID64(command.GetArg(1)))
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Invalid SteamID64.");
|
command.ReplyToCommand($"Invalid SteamID64.");
|
||||||
@@ -223,7 +246,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
string steamid = command.GetArg(1);
|
string steamid = command.GetArg(1);
|
||||||
bool globalDelete = command.GetArg(2).ToLower().Equals("-g");
|
bool globalDelete = command.GetArg(2).ToLower().Equals("-g");
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(dbConnectionString);
|
AdminSQLManager _adminManager = new(_database);
|
||||||
_ = _adminManager.DeleteAdminBySteamId(steamid, globalDelete);
|
_ = _adminManager.DeleteAdminBySteamId(steamid, globalDelete);
|
||||||
|
|
||||||
AddTimer(2, () =>
|
AddTimer(2, () =>
|
||||||
@@ -239,7 +262,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
AdminManager.ClearPlayerPermissions(steamId);
|
AdminManager.ClearPlayerPermissions(steamId);
|
||||||
AdminManager.RemovePlayerAdminData(steamId);
|
AdminManager.RemovePlayerAdminData(steamId);
|
||||||
}
|
}
|
||||||
});
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
command.ReplyToCommand($"Removed flags from '{steamid}'");
|
command.ReplyToCommand($"Removed flags from '{steamid}'");
|
||||||
}
|
}
|
||||||
@@ -249,6 +272,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/root")]
|
[RequiresPermissions("@css/root")]
|
||||||
public void OnRelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnRelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
foreach (SteamID steamId in AdminSQLManager._adminCacheSet)
|
foreach (SteamID steamId in AdminSQLManager._adminCacheSet)
|
||||||
{
|
{
|
||||||
if (AdminSQLManager._adminCacheSet.Contains(steamId))
|
if (AdminSQLManager._adminCacheSet.Contains(steamId))
|
||||||
@@ -261,7 +286,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
AdminManager.RemovePlayerAdminData(steamId);
|
AdminManager.RemovePlayerAdminData(steamId);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(dbConnectionString);
|
AdminSQLManager _adminManager = new(_database);
|
||||||
_ = _adminManager.GiveAllFlags();
|
_ = _adminManager.GiveAllFlags();
|
||||||
|
|
||||||
command.ReplyToCommand("Reloaded sql admins");
|
command.ReplyToCommand("Reloaded sql admins");
|
||||||
@@ -278,8 +303,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (silentPlayers.Contains((ushort)caller.UserId))
|
if (silentPlayers.Contains((ushort)caller.UserId))
|
||||||
{
|
{
|
||||||
silentPlayers.Remove((ushort)caller.UserId);
|
silentPlayers.Remove((ushort)caller.UserId);
|
||||||
caller.ChangeTeam(CsTeam.Spectator);
|
|
||||||
caller.PrintToChat($"You aren't hidden now!");
|
caller.PrintToChat($"You aren't hidden now!");
|
||||||
|
caller.ChangeTeam(CsTeam.Spectator);
|
||||||
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
||||||
_ = SendWebhookMessage($"{caller.PlayerName} isn't hidden now.");
|
_ = SendWebhookMessage($"{caller.PlayerName} isn't hidden now.");
|
||||||
}
|
}
|
||||||
@@ -292,8 +317,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (caller.PlayerPawn.Value != null && caller.PawnIsAlive)
|
if (caller.PlayerPawn.Value != null && caller.PawnIsAlive)
|
||||||
caller.PlayerPawn.Value.CommitSuicide(true, false);
|
caller.PlayerPawn.Value.CommitSuicide(true, false);
|
||||||
|
|
||||||
AddTimer(1.0f, () => { caller.ChangeTeam(CsTeam.Spectator); });
|
AddTimer(1.0f, () => { caller.ChangeTeam(CsTeam.Spectator); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
AddTimer(1.1f, () => { caller.ChangeTeam(CsTeam.None); });
|
AddTimer(1.1f, () => { caller.ChangeTeam(CsTeam.None); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
caller.PrintToChat($"You are hidden now!");
|
caller.PrintToChat($"You are hidden now!");
|
||||||
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
||||||
_ = SendWebhookMessage($"{caller.PlayerName} is hidden now.");
|
_ = SendWebhookMessage($"{caller.PlayerName} is hidden now.");
|
||||||
@@ -310,12 +335,15 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/generic")]
|
[RequiresPermissions("@css/generic")]
|
||||||
public void OnWhoCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnWhoCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
TargetResult? targets = GetTarget(command);
|
TargetResult? targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid && !player.IsBot && !player.IsHLTV).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid && !player.IsBot && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
Database database = new Database(dbConnectionString);
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
BanManager _banManager = new(database, Config);
|
||||||
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -434,7 +462,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -455,11 +483,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (command.ArgCount >= 2)
|
if (command.ArgCount >= 2)
|
||||||
{
|
{
|
||||||
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason));
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!));
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId))
|
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId))
|
||||||
@@ -483,6 +511,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<#userid or name> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<#userid or name> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnGagCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnGagCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
int time = 0;
|
int time = 0;
|
||||||
string reason = "Unknown";
|
string reason = "Unknown";
|
||||||
|
|
||||||
@@ -490,7 +520,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -500,7 +530,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -548,7 +578,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//MuteManager _muteManager = new(dbConnectionString);
|
//MuteManager _muteManager = new(_database);
|
||||||
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 0);
|
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 0);
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
@@ -594,6 +624,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<steamid> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<steamid> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnAddGagCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAddGagCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
if (command.ArgCount < 2)
|
if (command.ArgCount < 2)
|
||||||
return;
|
return;
|
||||||
if (string.IsNullOrEmpty(command.GetArg(1))) return;
|
if (string.IsNullOrEmpty(command.GetArg(1))) return;
|
||||||
@@ -609,7 +640,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
int time = 0;
|
int time = 0;
|
||||||
string reason = "Unknown";
|
string reason = "Unknown";
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out time);
|
||||||
|
|
||||||
@@ -705,6 +736,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<steamid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<steamid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnUngagCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnUngagCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
if (command.GetArg(1).Length <= 1)
|
if (command.GetArg(1).Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Too short pattern to search.");
|
command.ReplyToCommand($"Too short pattern to search.");
|
||||||
@@ -714,7 +747,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
string pattern = command.GetArg(1);
|
string pattern = command.GetArg(1);
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
if (Helper.IsValidSteamID64(pattern))
|
if (Helper.IsValidSteamID64(pattern))
|
||||||
{
|
{
|
||||||
@@ -775,7 +808,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -811,6 +844,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<#userid or name> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<#userid or name> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnMuteCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnMuteCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
int time = 0;
|
int time = 0;
|
||||||
string reason = "Unknown";
|
string reason = "Unknown";
|
||||||
|
|
||||||
@@ -818,7 +853,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -828,7 +863,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -867,7 +902,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (player == null || !player.IsValid || player.AuthorizedSteamID == null) return;
|
if (player == null || !player.IsValid || player.AuthorizedSteamID == null) return;
|
||||||
|
|
||||||
//MuteManager _muteManager = new(dbConnectionString);
|
//MuteManager _muteManager = new(_database);
|
||||||
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1);
|
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -925,6 +960,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<steamid> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<steamid> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnAddMuteCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAddMuteCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
if (command.ArgCount < 2)
|
if (command.ArgCount < 2)
|
||||||
return;
|
return;
|
||||||
if (string.IsNullOrEmpty(command.GetArg(1))) return;
|
if (string.IsNullOrEmpty(command.GetArg(1))) return;
|
||||||
@@ -940,7 +977,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
int time = 0;
|
int time = 0;
|
||||||
string reason = "Unknown";
|
string reason = "Unknown";
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out time);
|
||||||
|
|
||||||
@@ -1036,6 +1073,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<steamid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<steamid or name>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnUnmuteCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnUnmuteCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
|
if (_database == null) return;
|
||||||
|
|
||||||
if (command.GetArg(1).Length <= 1)
|
if (command.GetArg(1).Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Too short pattern to search.");
|
command.ReplyToCommand($"Too short pattern to search.");
|
||||||
@@ -1044,7 +1083,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
string pattern = command.GetArg(1);
|
string pattern = command.GetArg(1);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
|
|
||||||
if (Helper.IsValidSteamID64(pattern))
|
if (Helper.IsValidSteamID64(pattern))
|
||||||
{
|
{
|
||||||
@@ -1104,7 +1143,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
TargetResult? targets = GetTarget(command);
|
TargetResult? targets = GetTarget(command);
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1151,12 +1190,14 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
Database database = new Database(dbConnectionString);
|
||||||
|
|
||||||
|
BanManager _banManager = new(database, Config);
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out time);
|
||||||
|
|
||||||
@@ -1192,7 +1233,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
await _banManager.BanPlayer(playerInfo, adminInfo, reason, time);
|
await _banManager.BanPlayer(playerInfo, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!));
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
@@ -1250,7 +1291,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
int time = 0;
|
int time = 0;
|
||||||
string reason = "Unknown";
|
string reason = "Unknown";
|
||||||
|
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
Database database = new Database(dbConnectionString);
|
||||||
|
|
||||||
|
BanManager _banManager = new(database, Config);
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out time);
|
||||||
|
|
||||||
@@ -1277,7 +1320,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
player!.Pawn.Value!.Freeze();
|
player!.Pawn.Value!.Freeze();
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!));
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
@@ -1316,7 +1359,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
Database database = new Database(dbConnectionString);
|
||||||
|
|
||||||
|
BanManager _banManager = new(database, Config);
|
||||||
await _banManager.AddBanBySteamid(steamid, adminInfo, reason, time);
|
await _banManager.AddBanBySteamid(steamid, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1402,13 +1447,15 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, "Banned"));
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, "Banned"), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
Database database = new Database(dbConnectionString);
|
||||||
|
|
||||||
|
BanManager _banManager = new(database, Config);
|
||||||
await _banManager.AddBanByIp(ipAddress, adminInfo, reason, time);
|
await _banManager.AddBanByIp(ipAddress, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1427,7 +1474,10 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
string pattern = command.GetArg(1);
|
string pattern = command.GetArg(1);
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
|
||||||
|
Database database = new Database(dbConnectionString);
|
||||||
|
|
||||||
|
BanManager _banManager = new(database, Config);
|
||||||
|
|
||||||
_ = _banManager.UnbanPlayer(pattern);
|
_ = _banManager.UnbanPlayer(pattern);
|
||||||
|
|
||||||
@@ -1945,10 +1995,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
sb.Append(_localizer!["sa_adminchat_template_admin", caller == null ? "Console" : caller.PlayerName, utf8String]);
|
sb.Append(_localizer!["sa_adminchat_template_admin", caller == null ? "Console" : caller.PlayerName, utf8String]);
|
||||||
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
if (Config.DiscordWebhook.Length > 0 && _localizer != null)
|
||||||
{
|
_ = SendWebhookMessage($"ASAY: {caller!.PlayerName}: {utf8String}");
|
||||||
LocalizedString localizedMessage = _localizer["sa_adminchat_template_admin", caller == null ? "Console" : caller.PlayerName, utf8String];
|
|
||||||
_ = SendWebhookMessage(localizedMessage.ToString().Replace("", "").Replace("", ""));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
||||||
{
|
{
|
||||||
@@ -2075,7 +2122,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
player!.Pawn.Value!.Freeze();
|
player!.Pawn.Value!.Freeze();
|
||||||
|
|
||||||
if (time > 0)
|
if (time > 0)
|
||||||
AddTimer(time, () => player.Pawn.Value!.Unfreeze());
|
AddTimer(time, () => player.Pawn.Value!.Unfreeze(), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId))
|
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId))
|
||||||
{
|
{
|
||||||
@@ -2225,7 +2272,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
content = message
|
content = message
|
||||||
};
|
};
|
||||||
|
|
||||||
var jsonPayload = Newtonsoft.Json.JsonConvert.SerializeObject(payload);
|
var jsonPayload = JsonConvert.SerializeObject(payload);
|
||||||
var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
|
var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
var response = await httpClient.PostAsync(Config.DiscordWebhook, content);
|
var response = await httpClient.PostAsync(Config.DiscordWebhook, content);
|
||||||
|
|||||||
26
Database.cs
Normal file
26
Database.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using MySqlConnector;
|
||||||
|
|
||||||
|
public class Database
|
||||||
|
{
|
||||||
|
private readonly string _dbConnectionString;
|
||||||
|
|
||||||
|
public Database(string dbConnectionString)
|
||||||
|
{
|
||||||
|
_dbConnectionString = dbConnectionString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MySqlConnection GetConnection()
|
||||||
|
{
|
||||||
|
var connection = new MySqlConnection(_dbConnectionString);
|
||||||
|
connection.Open();
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DatabaseExtension
|
||||||
|
{
|
||||||
|
public static string WithConnectionPooling(this string connectionString)
|
||||||
|
{
|
||||||
|
return $"{connectionString};Pooling=true;MinimumPoolSize=1;MaximumPoolSize=15";
|
||||||
|
}
|
||||||
|
}
|
||||||
114
Events.cs
114
Events.cs
@@ -4,7 +4,7 @@ using CounterStrikeSharp.API.Modules.Admin;
|
|||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using MySqlConnector;
|
using System.Data;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using static CounterStrikeSharp.API.Core.Listeners;
|
using static CounterStrikeSharp.API.Core.Listeners;
|
||||||
|
|
||||||
@@ -24,7 +24,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
RegisterEventHandler<EventRoundStart>(OnRoundStart);
|
RegisterEventHandler<EventRoundStart>(OnRoundStart);
|
||||||
AddCommandListener("say", OnCommandSay);
|
AddCommandListener("say", OnCommandSay);
|
||||||
AddCommandListener("say_team", OnCommandTeamSay);
|
AddCommandListener("say_team", OnCommandTeamSay);
|
||||||
//AddCommandListener("callvote", OnCommandCallVote);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private HookResult OnPlayerFullConnect(EventPlayerConnectFull @event, GameEventInfo info)
|
/*private HookResult OnPlayerFullConnect(EventPlayerConnectFull @event, GameEventInfo info)
|
||||||
@@ -56,12 +55,15 @@ public partial class CS2_SimpleAdmin
|
|||||||
private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
|
private HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
|
||||||
{
|
{
|
||||||
godPlayers.Clear();
|
godPlayers.Clear();
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnRoundStart]");
|
||||||
|
#endif
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HookResult OnCommandSay(CCSPlayerController? player, CommandInfo info)
|
private HookResult OnCommandSay(CCSPlayerController? player, CommandInfo info)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid || info.GetArg(1).Length == 0) return HookResult.Continue;
|
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || info.GetArg(1).Length == 0) return HookResult.Continue;
|
||||||
|
|
||||||
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
||||||
{
|
{
|
||||||
@@ -73,7 +75,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
private HookResult OnCommandTeamSay(CCSPlayerController? player, CommandInfo info)
|
private HookResult OnCommandTeamSay(CCSPlayerController? player, CommandInfo info)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid || info.GetArg(1).Length == 0) return HookResult.Continue;
|
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || info.GetArg(1).Length == 0) return HookResult.Continue;
|
||||||
|
|
||||||
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
||||||
{
|
{
|
||||||
@@ -108,31 +110,18 @@ public partial class CS2_SimpleAdmin
|
|||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HookResult OnCommandCallVote(CCSPlayerController? player, CommandInfo info)
|
|
||||||
{
|
|
||||||
string reason = info.GetArg(1);
|
|
||||||
|
|
||||||
if (reason == "kick" || reason == "ban")
|
|
||||||
{
|
|
||||||
int.TryParse(info.GetArg(2), out int target);
|
|
||||||
if (target > 0)
|
|
||||||
{
|
|
||||||
if (!player!.CanTarget(Utilities.GetPlayerFromUserid(target)))
|
|
||||||
return HookResult.Handled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return HookResult.Continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnClientPutInServer(int playerSlot)
|
private void OnClientPutInServer(int playerSlot)
|
||||||
{
|
{
|
||||||
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);
|
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnClientPutInServer] Before check");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV)
|
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.Connected == PlayerConnectedState.PlayerDisconnecting)
|
||||||
return;
|
return;
|
||||||
|
#if DEBUG
|
||||||
Console.WriteLine("test");
|
Logger.LogCritical("[OnClientPutInServer] After Check");
|
||||||
|
#endif
|
||||||
|
|
||||||
string? ipAddress = !string.IsNullOrEmpty(player.IpAddress) ? player.IpAddress.Split(":")[0] : null;
|
string? ipAddress = !string.IsNullOrEmpty(player.IpAddress) ? player.IpAddress.Split(":")[0] : null;
|
||||||
|
|
||||||
@@ -153,13 +142,15 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
_ = Task.Run(async () =>
|
_ = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
if (_database == null) return;
|
||||||
|
|
||||||
|
BanManager _banManager = new(_database, Config);
|
||||||
bool isBanned = await _banManager.IsPlayerBanned(playerInfo);
|
bool isBanned = await _banManager.IsPlayerBanned(playerInfo);
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
List<dynamic> activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId!);
|
List<dynamic> activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId!);
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(dbConnectionString);
|
AdminSQLManager _adminManager = new(_database);
|
||||||
List<(List<string>, int)> activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!);
|
List<(List<string>, int)> activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!);
|
||||||
|
|
||||||
Server.NextFrame(() =>
|
Server.NextFrame(() =>
|
||||||
@@ -212,7 +203,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
NativeAPI.IssueServerCommand($"css_tag_unmute {player!.SteamID.ToString()}");
|
NativeAPI.IssueServerCommand($"css_tag_unmute {player!.SteamID.ToString()}");
|
||||||
|
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
_ = _muteManager.UnmutePlayer(player!.SteamID.ToString(), 0);
|
_ = _muteManager.UnmutePlayer(player!.SteamID.ToString(), 0);
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
@@ -254,7 +245,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
|
|
||||||
//MuteManager _muteManager = new(dbConnectionString);
|
//MuteManager _muteManager = new(_database);
|
||||||
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1);
|
//_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1);
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
@@ -338,8 +329,14 @@ public partial class CS2_SimpleAdmin
|
|||||||
private void OnClientDisconnect(int playerSlot)
|
private void OnClientDisconnect(int playerSlot)
|
||||||
{
|
{
|
||||||
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);
|
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnClientDisconnect] Before");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV) return;
|
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV) return;
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnClientDisconnect] After Check");
|
||||||
|
#endif
|
||||||
|
|
||||||
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
if (player != null && player.SteamID.ToString() != "" && gaggedPlayers.Contains(player.SteamID.ToString()))
|
||||||
{
|
{
|
||||||
@@ -386,16 +383,22 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
gaggedPlayers.Clear();
|
gaggedPlayers.Clear();
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(dbConnectionString);
|
if (_database == null) return;
|
||||||
|
|
||||||
|
AdminSQLManager _adminManager = new(_database);
|
||||||
|
|
||||||
AddTimer(60.0f, bannedPlayers.Clear, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
AddTimer(60.0f, bannedPlayers.Clear, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
AddTimer(120.0f, () =>
|
AddTimer(120.0f, async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(dbConnectionString, Config);
|
BanManager _banManager = new(_database, Config);
|
||||||
MuteManager _muteManager = new(dbConnectionString);
|
MuteManager _muteManager = new(_database);
|
||||||
_ = _banManager.ExpireOldBans();
|
await _banManager.ExpireOldBans();
|
||||||
_ = _muteManager.ExpireOldMutes();
|
await _muteManager.ExpireOldMutes();
|
||||||
_ = _adminManager.DeleteOldAdmins();
|
await _adminManager.DeleteOldAdmins();
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnMapStart] Expired check");
|
||||||
|
#endif
|
||||||
|
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
string? path = Path.GetDirectoryName(ModuleDirectory);
|
string? path = Path.GetDirectoryName(ModuleDirectory);
|
||||||
@@ -404,36 +407,37 @@ public partial class CS2_SimpleAdmin
|
|||||||
TagsDetected = true;
|
TagsDetected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddTimer(2.0f, () =>
|
AddTimer(2.0f, async () =>
|
||||||
{
|
{
|
||||||
using (var connection = new MySqlConnection(dbConnectionString))
|
string? address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
||||||
|
string? hostname = ConVar.Find("hostname")!.StringValue;
|
||||||
|
|
||||||
|
await Task.Run(async () =>
|
||||||
{
|
{
|
||||||
connection.Open();
|
using (var connection = _database.GetConnection())
|
||||||
|
{
|
||||||
|
await connection.ExecuteAsync(
|
||||||
|
"INSERT INTO `sa_servers` (address, hostname) VALUES (@address, @hostname) " +
|
||||||
|
"ON DUPLICATE KEY UPDATE hostname = @hostname",
|
||||||
|
new { address = $"{address}", hostname });
|
||||||
|
|
||||||
connection.Execute(
|
int? serverId = await connection.ExecuteScalarAsync<int>(
|
||||||
"INSERT INTO `sa_servers` (address, hostname) VALUES (@address, @hostname) " +
|
"SELECT `id` FROM `sa_servers` WHERE `address` = @address",
|
||||||
"ON DUPLICATE KEY UPDATE hostname = @hostname",
|
new { address = $"{address}" });
|
||||||
new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}", hostname = ConVar.Find("hostname")!.StringValue });
|
|
||||||
|
|
||||||
int? serverId = connection.ExecuteScalar<int>(
|
ServerId = serverId;
|
||||||
"SELECT `id` FROM `sa_servers` WHERE `address` = @address",
|
|
||||||
new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}" });
|
|
||||||
|
|
||||||
ServerId = serverId;
|
|
||||||
|
|
||||||
connection.Close();
|
|
||||||
|
|
||||||
_ = _adminManager.GiveAllFlags();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
await _adminManager.GiveAllFlags();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info)
|
private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info)
|
||||||
{
|
{
|
||||||
CCSPlayerController? player = @event.Userid;
|
CCSPlayerController? player = @event.Userid;
|
||||||
|
|
||||||
if (player == null || !player.IsValid)
|
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV || player.Connected == PlayerConnectedState.PlayerDisconnecting)
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
||||||
if (player.UserId != null && godPlayers.Contains((ushort)player.UserId) && player.PawnIsAlive)
|
if (player.UserId != null && godPlayers.Contains((ushort)player.UserId) && player.PawnIsAlive)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Console.WriteLine($"Setting immunity for SteamID {steamid} to {immunity}");
|
//Console.WriteLine($"Setting immunity for SteamID {steamid} to {immunity}");
|
||||||
AdminManager.SetPlayerImmunity(steamid, (uint)immunity);
|
|
||||||
|
|
||||||
if (flags != null)
|
if (flags != null)
|
||||||
{
|
{
|
||||||
@@ -81,6 +81,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AdminManager.SetPlayerImmunity(steamid, (uint)immunity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using MySqlConnector;
|
|
||||||
using System.Data;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
public class MuteManager
|
public class MuteManager
|
||||||
{
|
{
|
||||||
private readonly MySqlConnection _dbConnection;
|
private readonly Database _database;
|
||||||
|
|
||||||
public MuteManager(string connectionString)
|
public MuteManager(Database database)
|
||||||
{
|
{
|
||||||
_dbConnection = new MySqlConnection(connectionString);
|
_database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task MutePlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
public async Task MutePlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
||||||
{
|
{
|
||||||
if (player == null || player.SteamId == null) return;
|
if (player == null || player.SteamId == null) return;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
DateTime futureTime = now.AddMinutes(time);
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
@@ -44,16 +41,13 @@ namespace CS2_SimpleAdmin
|
|||||||
type = muteType,
|
type = muteType,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddMuteBySteamid(string playerSteamId, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
public async Task AddMuteBySteamid(string playerSteamId, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(playerSteamId)) return;
|
if (string.IsNullOrEmpty(playerSteamId)) return;
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
DateTime futureTime = now.AddMinutes(time);
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
@@ -77,37 +71,29 @@ namespace CS2_SimpleAdmin
|
|||||||
type = muteType,
|
type = muteType,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<dynamic>> IsPlayerMuted(string steamId)
|
public async Task<List<dynamic>> IsPlayerMuted(string steamId)
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
string sql = "SELECT * FROM sa_mutes WHERE player_steamid = @PlayerSteamID AND status = 'ACTIVE' AND (duration = 0 OR ends > @CurrentTime)";
|
string sql = "SELECT * FROM sa_mutes WHERE player_steamid = @PlayerSteamID AND status = 'ACTIVE' AND (duration = 0 OR ends > @CurrentTime)";
|
||||||
var activeMutes = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now })).ToList();
|
var activeMutes = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now })).ToList();
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return activeMutes;
|
return activeMutes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<int> GetPlayerMutes(string steamId)
|
public async Task<int> GetPlayerMutes(string steamId)
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
int muteCount;
|
int muteCount;
|
||||||
string sql = "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID";
|
string sql = "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID";
|
||||||
|
|
||||||
muteCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = steamId });
|
muteCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = steamId });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
|
|
||||||
return muteCount;
|
return muteCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,19 +104,13 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
if (type == 2)
|
if (type == 2)
|
||||||
{
|
{
|
||||||
string _unbanSql = "UPDATE sa_mutes SET status = 'UNMUTED' WHERE (player_steamid = @pattern OR player_name = @pattern) AND status = 'ACTIVE'";
|
string _unbanSql = "UPDATE sa_mutes SET status = 'UNMUTED' WHERE (player_steamid = @pattern OR player_name = @pattern) AND status = 'ACTIVE'";
|
||||||
await connection.ExecuteAsync(_unbanSql, new { pattern = playerPattern });
|
await connection.ExecuteAsync(_unbanSql, new { pattern = playerPattern });
|
||||||
|
|
||||||
if (connection.State != ConnectionState.Closed)
|
|
||||||
{
|
|
||||||
connection.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,19 +122,14 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
string sqlUnban = "UPDATE sa_mutes SET status = 'UNMUTED' WHERE (player_steamid = @pattern OR player_name = @pattern) AND type = @muteType AND status = 'ACTIVE'";
|
string sqlUnban = "UPDATE sa_mutes SET status = 'UNMUTED' WHERE (player_steamid = @pattern OR player_name = @pattern) AND type = @muteType AND status = 'ACTIVE'";
|
||||||
await connection.ExecuteAsync(sqlUnban, new { pattern = playerPattern, muteType });
|
await connection.ExecuteAsync(sqlUnban, new { pattern = playerPattern, muteType });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ExpireOldMutes()
|
public async Task ExpireOldMutes()
|
||||||
{
|
{
|
||||||
await using var connection = _dbConnection;
|
await using var connection = _database.GetConnection();
|
||||||
await connection.OpenAsync();
|
|
||||||
|
|
||||||
string sql = "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
string sql = "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now });
|
||||||
|
|
||||||
await connection.CloseAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CheckMute(PlayerInfo player)
|
public async Task CheckMute(PlayerInfo player)
|
||||||
|
|||||||
Reference in New Issue
Block a user