Compare commits

..

No commits in common. "main" and "build-1.8.1a" have entirely different histories.

6 changed files with 20 additions and 39 deletions

View file

@ -22,7 +22,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
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.8.2b"; public override string ModuleVersion => "1.8.1a";
public override void Load(bool hotReload) public override void Load(bool hotReload)
{ {

View file

@ -253,7 +253,7 @@ public partial class CS2_SimpleAdmin
player.DiePosition = null; player.DiePosition = null;
} }
AddTimer(0.5f, () => AddTimer(0.41f, () =>
{ {
foreach (var list in RenamedPlayers) foreach (var list in RenamedPlayers)
{ {

View file

@ -73,7 +73,7 @@ internal class CacheManager: IDisposable
if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp) if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp)
{ {
// Optimization: Load IP history and build cache in single pass // Optimization: Load IP history and build cache in single pass
var ipHistory = await connection.QueryAsync<IpHistoryRow>( var ipHistory = await connection.QueryAsync<(ulong steamid, string? name, uint address, DateTime used_at)>(
"SELECT steamid, name, address, used_at FROM sa_players_ips ORDER BY steamid, address, used_at DESC"); "SELECT steamid, name, address, used_at FROM sa_players_ips ORDER BY steamid, address, used_at DESC");
var unknownName = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; var unknownName = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
@ -84,24 +84,24 @@ internal class CacheManager: IDisposable
foreach (var record in ipHistory) foreach (var record in ipHistory)
{ {
// When we encounter a new steamid, save the previous one // When we encounter a new steamid, save the previous one
if ((ulong)record.Steamid != currentSteamId && currentSteamId != 0) if (record.steamid != currentSteamId && currentSteamId != 0)
{ {
_playerIpsCache[currentSteamId] = currentIpSet; _playerIpsCache[currentSteamId] = currentIpSet;
currentIpSet = new HashSet<IpRecord>(new IpRecordComparer()); currentIpSet = new HashSet<IpRecord>(new IpRecordComparer());
latestIpTimestamps.Clear(); latestIpTimestamps.Clear();
} }
currentSteamId = (ulong)record.Steamid; currentSteamId = record.steamid;
// Only keep the latest timestamp for each IP // Only keep the latest timestamp for each IP
if (!latestIpTimestamps.TryGetValue(record.Address, out var existingTimestamp) || if (!latestIpTimestamps.TryGetValue(record.address, out var existingTimestamp) ||
record.Used_at > existingTimestamp) record.used_at > existingTimestamp)
{ {
latestIpTimestamps[record.Address] = record.Used_at; latestIpTimestamps[record.address] = record.used_at;
currentIpSet.Add(new IpRecord( currentIpSet.Add(new IpRecord(
record.Address, record.address,
record.Used_at, record.used_at,
string.IsNullOrEmpty(record.Name) ? unknownName : record.Name string.IsNullOrEmpty(record.name) ? unknownName : record.name
)); ));
} }
} }
@ -283,23 +283,23 @@ internal class CacheManager: IDisposable
if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp) if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp)
{ {
var ipHistory = (await connection.QueryAsync<IpHistoryRow>( var ipHistory = (await connection.QueryAsync<(ulong steamid, string? name, uint address, DateTime used_at)>(
"SELECT steamid, name, address, used_at FROM sa_players_ips WHERE used_at >= @lastUpdate ORDER BY used_at DESC LIMIT 300", "SELECT steamid, name, address, used_at FROM sa_players_ips WHERE used_at >= @lastUpdate ORDER BY used_at DESC LIMIT 300",
new { lastUpdate = _lastUpdateTime })); new { lastUpdate = _lastUpdateTime }));
foreach (var group in ipHistory.AsValueEnumerable().GroupBy(x => x.Steamid)) foreach (var group in ipHistory.AsValueEnumerable().GroupBy(x => x.steamid))
{ {
var ipSet = new HashSet<IpRecord>( var ipSet = new HashSet<IpRecord>(
group group
.GroupBy(x => x.Address) .GroupBy(x => x.address)
.Select(g => .Select(g =>
{ {
var latest = g.MaxBy(x => x.Used_at); var latest = g.MaxBy(x => x.used_at);
return new IpRecord( return new IpRecord(
g.Key, g.Key,
latest.Used_at, latest.used_at,
!string.IsNullOrEmpty(latest.Name) !string.IsNullOrEmpty(latest.name)
? latest.Name ? latest.name
: CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown" : CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"
); );
}), }),
@ -307,7 +307,7 @@ internal class CacheManager: IDisposable
); );
_playerIpsCache.AddOrUpdate( _playerIpsCache.AddOrUpdate(
(ulong)group.Key, group.Key,
_ => ipSet, _ => ipSet,
(_, existingSet) => (_, existingSet) =>
{ {

View file

@ -275,16 +275,6 @@ internal class PlayerManager
/// </remarks> /// </remarks>
public void CheckPlayersTimer() public void CheckPlayersTimer()
{ {
CS2_SimpleAdmin.Instance.AddTimer(5f, () =>
{
foreach (var (steamid, name) in CS2_SimpleAdmin.RenamedPlayers)
{
var player = Helper.GetPlayerFromSteamid64(steamid);
if (player == null || !player.IsValid || player.PlayerName == name) continue;
player.Rename(name);
}
}, TimerFlags.REPEAT);
CS2_SimpleAdmin.Instance.PlayersTimer = CS2_SimpleAdmin.Instance.AddTimer(61.0f, () => CS2_SimpleAdmin.Instance.PlayersTimer = CS2_SimpleAdmin.Instance.AddTimer(61.0f, () =>
{ {
#if DEBUG #if DEBUG

View file

@ -1,9 +0,0 @@
namespace CS2_SimpleAdmin.Models;
public record IpHistoryRow
{
public long Steamid { get; init; }
public string? Name { get; init; }
public uint Address { get; init; }
public DateTime Used_at { get; init; }
}

View file

@ -1 +1 @@
1.8.2b 1.8.1a