c5375b661b
broke data out into its own library. may be breaking changes with existing plugins
53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using SharedLibraryCore;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using Data.Models.Client;
|
|
using Data.Models.Client.Stats;
|
|
using Data.Models.Server;
|
|
|
|
namespace IW4MAdmin.Plugins.Stats.Helpers
|
|
{
|
|
class ServerStats
|
|
{
|
|
public IList<EFClientKill> HitCache { get; private set; }
|
|
public EFServerStatistics ServerStatistics { get; private set; }
|
|
public EFServer Server { get; private set; }
|
|
private readonly Server _server;
|
|
public bool IsTeamBased { get; set; }
|
|
public SemaphoreSlim OnSaving { get; private set; }
|
|
|
|
public ServerStats(EFServer sv, EFServerStatistics st, Server server)
|
|
{
|
|
HitCache = new List<EFClientKill>();
|
|
ServerStatistics = st;
|
|
Server = sv;
|
|
_server = server;
|
|
OnSaving = new SemaphoreSlim(1, 1);
|
|
}
|
|
|
|
~ServerStats()
|
|
{
|
|
OnSaving.Dispose();
|
|
}
|
|
|
|
public int TeamCount(IW4Info.Team teamName)
|
|
{
|
|
var PlayerStats = _server.GetClientsAsList()
|
|
.Select(_c => _c.GetAdditionalProperty<EFClientStatistics>(StatManager.CLIENT_STATS_KEY))
|
|
.Where(_c => _c != null);
|
|
|
|
if (PlayerStats.Count(p => p.Team == (int)IW4Info.Team.None) / (double)PlayerStats.Count() <= 0.25)
|
|
{
|
|
return IsTeamBased ? Math.Max(PlayerStats.Count(p => p.Team == (int)teamName), 1) : Math.Max(PlayerStats.Count() - 1, 1);
|
|
}
|
|
|
|
else
|
|
{
|
|
return IsTeamBased ? (int)Math.Max(Math.Floor(PlayerStats.Count() / 2.0), 1) : Math.Max(PlayerStats.Count() - 1, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|