using SharedLibraryCore.Database.Models; using SharedLibraryCore.Helpers; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; namespace IW4MAdmin.Plugins.Stats.Models { /// /// This class houses the information for anticheat snapshots (used for validating a ban) /// public class EFACSnapshot : SharedEntity { [Key] public int SnapshotId { get; set; } public int ClientId { get; set; } [ForeignKey("ClientId")] public EFClient Client { get; set; } public DateTime When { get; set; } public int CurrentSessionLength { get; set; } public int TimeSinceLastEvent { get; set; } public double EloRating { get; set; } public int SessionScore { get; set; } public double SessionSPM { get; set; } public int Hits { get; set; } public int Kills { get; set; } public int Deaths { get; set; } public double CurrentStrain { get; set; } public double StrainAngleBetween { get; set; } public double SessionAngleOffset { get; set; } public double RecoilOffset { get; set; } public int LastStrainAngleId { get; set; } [ForeignKey("LastStrainAngleId")] public Vector3 LastStrainAngle { get; set; } public int HitOriginId { get; set; } [ForeignKey("HitOriginId")] public Vector3 HitOrigin { get; set; } public int HitDestinationId { get; set; } [ForeignKey("HitDestinationId")] public Vector3 HitDestination { get; set; } public double Distance { get; set; } public int CurrentViewAngleId { get; set; } [ForeignKey("CurrentViewAngleId")] public Vector3 CurrentViewAngle { get; set; } public IW4Info.WeaponName WeaponId { get; set; } public IW4Info.HitLocation HitLocation { get; set; } public IW4Info.MeansOfDeath HitType { get; set; } public virtual ICollection PredictedViewAngles { get; set; } [NotMapped] public string CapturedViewAngles => PredictedViewAngles?.Count > 0 ? string.Join(", ", PredictedViewAngles.OrderBy(_angle => _angle.ACSnapshotVector3Id).Select(_angle => _angle.Vector.ToString())) : ""; } }