Update 1.2.6a

- Added server_id
- Added immunity
This commit is contained in:
Dawid Bepierszcz
2024-01-08 22:29:36 +01:00
parent cfe79109a8
commit dd5e72e873
6 changed files with 97 additions and 42 deletions

View File

@@ -43,7 +43,7 @@ namespace CS2_SimpleAdmin
} }
*/ */
public async Task<List<object>> GetAdminFlags(string steamId) public async Task<List<(List<string>, int)>> GetAdminFlags(string steamId)
{ {
/* Unused for now /* Unused for now
if (_adminCache.TryGetValue(steamId, out ConcurrentBag<string>? cachedFlags)) if (_adminCache.TryGetValue(steamId, out ConcurrentBag<string>? cachedFlags))
@@ -56,14 +56,17 @@ namespace CS2_SimpleAdmin
await using var connection = _dbConnection; await using var connection = _dbConnection;
await connection.OpenAsync(); await connection.OpenAsync();
string sql = "SELECT flags, ends FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime)"; 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 }))?.ToList(); List<dynamic>? activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
if (activeFlags == null) if (activeFlags == null)
{ {
return new List<object>(); return new List<(List<string>, int)>();
} }
List<(List<string>, int)> filteredFlagsWithImmunity = new List<(List<string>, int)>();
/*
List<string> filteredFlags = new List<string>(); List<string> filteredFlags = new List<string>();
foreach (var flags in activeFlags) foreach (var flags in activeFlags)
@@ -76,6 +79,30 @@ namespace CS2_SimpleAdmin
filteredFlags.Add(flag); filteredFlags.Add(flag);
} }
} }
*/
foreach (dynamic flags in activeFlags)
{
if (flags is not IDictionary<string, object> flagsDict)
{
continue;
}
if (!flagsDict.TryGetValue("flags", out var flagsValueObj) || !flagsDict.TryGetValue("immunity", out var immunityValueObj))
{
continue;
}
if (!(flagsValueObj is string flagsValue) || !int.TryParse(immunityValueObj.ToString(), out var immunityValue))
{
continue;
}
//Console.WriteLine($"Flags: {flagsValue}, Immunity: {immunityValue}");
filteredFlagsWithImmunity.Add((flagsValue.Split(',').ToList(), immunityValue));
}
/* Unused for now /* Unused for now
bool shouldCache = activeFlags.Any(flags => bool shouldCache = activeFlags.Any(flags =>
@@ -117,8 +144,8 @@ namespace CS2_SimpleAdmin
return flagsToCache.Cast<object>().ToList(); return flagsToCache.Cast<object>().ToList();
} }
*/ */
return filteredFlagsWithImmunity;
return filteredFlags.Cast<object>().ToList(); //return filteredFlags.Cast<object>().ToList();
} }
public async Task DeleteAdminBySteamId(string playerSteamId) public async Task DeleteAdminBySteamId(string playerSteamId)

View File

@@ -20,8 +20,8 @@ namespace CS2_SimpleAdmin
await using var connection = _dbConnection; await using var connection = _dbConnection;
await connection.OpenAsync(); await connection.OpenAsync();
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + 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)"; "VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
await connection.ExecuteAsync(sql, new await connection.ExecuteAsync(sql, new
{ {
@@ -33,7 +33,8 @@ namespace CS2_SimpleAdmin
banReason = reason, banReason = reason,
duration = time, duration = time,
ends = futureTime, ends = futureTime,
created = now created = now,
serverid = CS2_SimpleAdmin.ServerId
}); });
} }
@@ -47,8 +48,8 @@ namespace CS2_SimpleAdmin
await using var connection = _dbConnection; await using var connection = _dbConnection;
await connection.OpenAsync(); await connection.OpenAsync();
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + 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)"; "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
await connection.ExecuteAsync(sql, new await connection.ExecuteAsync(sql, new
{ {
@@ -58,7 +59,8 @@ namespace CS2_SimpleAdmin
banReason = reason, banReason = reason,
duration = time, duration = time,
ends = futureTime, ends = futureTime,
created = now created = now,
serverid = CS2_SimpleAdmin.ServerId
}); });
} }
@@ -72,8 +74,8 @@ namespace CS2_SimpleAdmin
await using var connection = _dbConnection; await using var connection = _dbConnection;
await connection.OpenAsync(); await connection.OpenAsync();
var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + 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)"; "VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
await connection.ExecuteAsync(sql, new await connection.ExecuteAsync(sql, new
{ {
@@ -83,7 +85,8 @@ namespace CS2_SimpleAdmin
banReason = reason, banReason = reason,
duration = time, duration = time,
ends = futureTime, ends = futureTime,
created = now created = now,
serverid = CS2_SimpleAdmin.ServerId
}); });
} }

View File

@@ -27,12 +27,13 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public static List<int> GodPlayers = new List<int>(); public static List<int> GodPlayers = new List<int>();
public static bool TagsDetected = false; public static bool TagsDetected = false;
public static bool voteInProgress = false; public static bool voteInProgress = false;
public static int? ServerId = null;
internal string dbConnectionString = string.Empty; internal string dbConnectionString = string.Empty;
public override string ModuleName => "CS2-SimpleAdmin"; public override string ModuleName => "CS2-SimpleAdmin";
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy"; public override string ModuleAuthor => "daffyy";
public override string ModuleVersion => "1.2.5a"; public override string ModuleVersion => "1.2.6a";
public CS2_SimpleAdminConfig Config { get; set; } = new(); public CS2_SimpleAdminConfig Config { get; set; } = new();
@@ -81,6 +82,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
`duration` INT NOT NULL, `duration` INT NOT NULL,
`ends` TIMESTAMP NOT NULL, `ends` TIMESTAMP NOT NULL,
`created` TIMESTAMP NOT NULL, `created` TIMESTAMP NOT NULL,
`server_id` INT NULL,
`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;";
@@ -98,6 +100,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
`ends` timestamp NOT NULL, `ends` timestamp NOT NULL,
`created` timestamp NOT NULL, `created` timestamp NOT NULL,
`type` enum('GAG','MUTE','') NOT NULL DEFAULT 'GAG', `type` enum('GAG','MUTE','') NOT NULL DEFAULT 'GAG',
`server_id` INT NULL,
`status` enum('ACTIVE','UNMUTED','EXPIRED','') NOT NULL DEFAULT 'ACTIVE', `status` enum('ACTIVE','UNMUTED','EXPIRED','') NOT NULL DEFAULT 'ACTIVE',
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";
@@ -109,9 +112,10 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
`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,
`flags` TEXT, `flags` TEXT NOT NULL,
`immunity` varchar(64) NOT NULL DEFAULT '0', `immunity` varchar(64) NOT NULL DEFAULT '0',
`ends` timestamp, `server_id` INT NULL,
`ends` timestamp NULL,
`created` timestamp NOT NULL, `created` timestamp NOT NULL,
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";

View File

@@ -2,7 +2,10 @@
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Entities;
using Dapper;
using MySqlConnector;
using System.Text; using System.Text;
using static CounterStrikeSharp.API.Core.Listeners; using static CounterStrikeSharp.API.Core.Listeners;
@@ -139,6 +142,7 @@ public partial class CS2_SimpleAdmin
Task.Run(async () => Task.Run(async () =>
{ {
BanManager _banManager = new(dbConnectionString); BanManager _banManager = new(dbConnectionString);
bool isBanned = await _banManager.IsPlayerBanned(playerInfo); bool isBanned = await _banManager.IsPlayerBanned(playerInfo);
@@ -146,7 +150,7 @@ public partial class CS2_SimpleAdmin
List<dynamic> activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId!); List<dynamic> activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId!);
AdminSQLManager _adminManager = new(dbConnectionString); AdminSQLManager _adminManager = new(dbConnectionString);
List<dynamic> activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!); List<(List<string>, int)> activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!);
Server.NextFrame(() => Server.NextFrame(() =>
{ {
@@ -239,7 +243,7 @@ public partial class CS2_SimpleAdmin
} }
} }
AddTimer(14, () => Helper.GivePlayerFlags(player, activeFlags)); AddTimer(6, () => Helper.GivePlayerFlags(player, activeFlags));
/* /*
@@ -333,6 +337,24 @@ public partial class CS2_SimpleAdmin
{ {
TagsDetected = true; TagsDetected = true;
} }
using (var connection = new MySqlConnection(dbConnectionString))
{
connection.Open();
connection.Execute(
"INSERT INTO `sa_servers` (address, hostname) VALUES (@address, @hostname) " +
"ON DUPLICATE KEY UPDATE hostname = @hostname",
new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}", hostname = ConVar.Find("hostname")!.StringValue });
int? serverId = connection.ExecuteScalar<int>(
"SELECT `id` FROM `sa_servers` WHERE `address` = @address",
new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}" });
ServerId = serverId;
connection.Close();
}
} }
private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info)

View File

@@ -47,33 +47,30 @@ namespace CS2_SimpleAdmin
return Regex.IsMatch(input, pattern); return Regex.IsMatch(input, pattern);
} }
public static void GivePlayerFlags(CCSPlayerController player, dynamic flags) public static void GivePlayerFlags(CCSPlayerController player, List<(List<string>, int)> flagsWithImmunity)
{ {
if (player == null) return; if (player == null) return;
foreach (var flagsValue in flags) foreach (var (flags, immunity) in flagsWithImmunity)
{ {
if (!string.IsNullOrEmpty(flagsValue)) AdminManager.SetPlayerImmunity(player, (uint)immunity);
{
string[] _flags = flagsValue.Split(',');
Console.WriteLine(flagsValue);
foreach (var _flag in _flags) foreach (var flag in flags)
{
if (!string.IsNullOrEmpty(flag))
{ {
Server.NextFrame(() => if (flag.StartsWith("@"))
{ {
if (_flag.StartsWith("@")) AdminManager.AddPlayerPermissions(player, flag);
{ }
AdminManager.AddPlayerPermissions(player, _flag); else if (flag.StartsWith("#"))
} {
if (_flag.StartsWith("#")) AdminManager.AddPlayerToGroup(player, flag);
{ }
AdminManager.AddPlayerToGroup(player, _flag);
}
});
} }
} }
} }
} }
/* /*

View File

@@ -28,8 +28,8 @@ namespace CS2_SimpleAdmin
if (type == 1) if (type == 1)
muteType = "MUTE"; muteType = "MUTE";
var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`) " + var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type)"; "VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type, @serverid)";
await connection.ExecuteAsync(sql, new await connection.ExecuteAsync(sql, new
{ {
@@ -42,6 +42,7 @@ namespace CS2_SimpleAdmin
ends = futureTime, ends = futureTime,
created = now, created = now,
type = muteType, type = muteType,
serverid = CS2_SimpleAdmin.ServerId
}); });
} }
@@ -59,8 +60,8 @@ namespace CS2_SimpleAdmin
if (type == 1) if (type == 1)
muteType = "MUTE"; muteType = "MUTE";
var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`) " + var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
"VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type)"; "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type, @serverid)";
await connection.ExecuteAsync(sql, new await connection.ExecuteAsync(sql, new
{ {
@@ -71,7 +72,8 @@ namespace CS2_SimpleAdmin
duration = time, duration = time,
ends = futureTime, ends = futureTime,
created = now, created = now,
type = muteType type = muteType,
serverid = CS2_SimpleAdmin.ServerId
}); });
} }