2018-06-05 17:31:36 -04:00
|
|
|
|
using SharedLibraryCore.Database.Models;
|
|
|
|
|
using SharedLibraryCore.Helpers;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
2019-09-09 18:40:04 -04:00
|
|
|
|
using System.Linq;
|
2018-06-05 17:31:36 -04:00
|
|
|
|
|
|
|
|
|
namespace IW4MAdmin.Plugins.Stats.Models
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// This class houses the information for anticheat snapshots (used for validating a ban)
|
|
|
|
|
/// </summary>
|
|
|
|
|
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; }
|
2019-06-15 18:37:43 -04:00
|
|
|
|
public double RecoilOffset { get; set; }
|
2018-09-23 20:45:54 -04:00
|
|
|
|
public int LastStrainAngleId { get; set; }
|
|
|
|
|
[ForeignKey("LastStrainAngleId")]
|
2018-06-05 17:31:36 -04:00
|
|
|
|
public Vector3 LastStrainAngle { get; set; }
|
2018-09-23 20:45:54 -04:00
|
|
|
|
public int HitOriginId { get; set; }
|
|
|
|
|
[ForeignKey("HitOriginId")]
|
2018-06-05 17:31:36 -04:00
|
|
|
|
public Vector3 HitOrigin { get; set; }
|
2018-09-23 20:45:54 -04:00
|
|
|
|
public int HitDestinationId { get; set; }
|
|
|
|
|
[ForeignKey("HitDestinationId")]
|
2018-06-05 17:31:36 -04:00
|
|
|
|
public Vector3 HitDestination { get; set; }
|
|
|
|
|
public double Distance { get; set; }
|
2019-09-27 16:53:52 -04:00
|
|
|
|
public double SessionAverageSnapValue { get; set; }
|
|
|
|
|
public int SessionSnapHits { get; set; }
|
2018-09-23 20:45:54 -04:00
|
|
|
|
public int CurrentViewAngleId { get; set; }
|
|
|
|
|
[ForeignKey("CurrentViewAngleId")]
|
2018-06-05 17:31:36 -04:00
|
|
|
|
public Vector3 CurrentViewAngle { get; set; }
|
|
|
|
|
public IW4Info.WeaponName WeaponId { get; set; }
|
|
|
|
|
public IW4Info.HitLocation HitLocation { get; set; }
|
|
|
|
|
public IW4Info.MeansOfDeath HitType { get; set; }
|
2019-09-09 18:40:04 -04:00
|
|
|
|
public virtual ICollection<EFACSnapshotVector3> PredictedViewAngles { get; set; }
|
|
|
|
|
|
|
|
|
|
[NotMapped]
|
|
|
|
|
public string CapturedViewAngles => PredictedViewAngles?.Count > 0 ?
|
|
|
|
|
string.Join(", ", PredictedViewAngles.OrderBy(_angle => _angle.ACSnapshotVector3Id).Select(_angle => _angle.Vector.ToString())) :
|
|
|
|
|
"";
|
2018-06-05 17:31:36 -04:00
|
|
|
|
}
|
|
|
|
|
}
|