diff --git a/Application/Application.csproj b/Application/Application.csproj
index cfade8ce..91495317 100644
--- a/Application/Application.csproj
+++ b/Application/Application.csproj
@@ -5,7 +5,7 @@
net8.0
false
RaidMax.IW4MAdmin.Application
- 2020.0.0.0
+ 2024.0.0.0
RaidMax
Forever None
IW4MAdmin
diff --git a/Application/Extensions/StartupExtensions.cs b/Application/Extensions/StartupExtensions.cs
index be6acabe..d7b59a07 100644
--- a/Application/Extensions/StartupExtensions.cs
+++ b/Application/Extensions/StartupExtensions.cs
@@ -47,9 +47,9 @@ namespace IW4MAdmin.Application.Extensions
{
loggerConfig = loggerConfig.WriteTo.Console(
outputTemplate:
- "[{Timestamp:HH:mm:ss} {Server} {Level:u3}] {Message:lj}{NewLine}{Exception}")
- .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
- .MinimumLevel.Debug();
+ "{Message:lj}{NewLine}{Exception}")
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
+ .MinimumLevel.Warning();
}
_defaultLogger = loggerConfig.CreateLogger();
diff --git a/Application/IW4MServer.cs b/Application/IW4MServer.cs
index 810b5579..35db2f72 100644
--- a/Application/IW4MServer.cs
+++ b/Application/IW4MServer.cs
@@ -1458,7 +1458,7 @@ namespace IW4MAdmin
MaxClients = maxplayers;
FSGame = game.Value;
Gametype = gametype;
- IP = ip.Value is "localhost" or "0.0.0.0" ? ServerConfig.IPAddress : ip.Value ?? ServerConfig.IPAddress;
+ IP = ServerConfig.IPAddress;
GamePassword = gamePassword.Value;
PrivateClientSlots = privateClients.Value;
diff --git a/Application/Main.cs b/Application/Main.cs
index 0362688b..12193b40 100644
--- a/Application/Main.cs
+++ b/Application/Main.cs
@@ -59,7 +59,7 @@ namespace IW4MAdmin.Application
/// entrypoint of the application
///
///
- public static async Task Main(bool noConfirm = false, int? maxConcurrentRequests = 25, int? requestQueueLimit = 25)
+ public static async Task Main(bool noConfirm = false, int? maxConcurrentRequests = 40, int? requestQueueLimit = 40)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Utilities.OperatingDirectory);
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
diff --git a/Data/Context/DatabaseContext.cs b/Data/Context/DatabaseContext.cs
index 81f18afd..ae60d6e1 100644
--- a/Data/Context/DatabaseContext.cs
+++ b/Data/Context/DatabaseContext.cs
@@ -38,6 +38,9 @@ namespace Data.Context
public DbSet HitStatistics { get; set; }
public DbSet Weapons { get; set; }
public DbSet WeaponAttachments { get; set; }
+
+ public DbSet ClientStatTags { get; set; }
+ public DbSet ClientStatTagValues { get; set; }
public DbSet Maps { get; set; }
#endregion
@@ -58,7 +61,7 @@ namespace Data.Context
public DbSet ZombieClientStatAggregates { get; set; }
public DbSet ZombieClientStatRecords { get; set; }
public DbSet ZombieEvents { get; set; }
-
+
#endregion
private void SetAuditColumns()
@@ -103,19 +106,6 @@ namespace Data.Context
client.NetworkId,
client.GameName
});
-
-
- /* entity.HasMany(prop => prop.ZombieMatchClientStats)
- .WithOne(prop => prop.Client)
- .HasForeignKey(prop => prop.ClientId);
-
- entity.HasMany(prop => prop.ZombieRoundClientStats)
- .WithOne(prop => prop.Client)
- .HasForeignKey(prop => prop.ClientId);
-
- entity.HasMany(prop => prop.ZombieAggregateClientStats)
- .WithOne(prop => prop.Client)
- .HasForeignKey(prop => prop.ClientId);*/
});
modelBuilder.Entity(entity =>
@@ -185,11 +175,11 @@ namespace Data.Context
modelBuilder.Entity().ToTable(nameof(EFServerSnapshot));
modelBuilder.Entity().ToTable(nameof(EFClientConnectionHistory));
- modelBuilder.Entity().ToTable($"EF{nameof(ZombieMatch)}");
+ modelBuilder.Entity().ToTable($"EF{nameof(ZombieMatches)}");
modelBuilder.Entity(ent =>
{
- ent.ToTable($"EF{nameof(ZombieClientStat)}");
+ ent.ToTable($"EF{nameof(ZombieClientStat)}s");
ent.HasOne(prop => prop.Client)
.WithMany(prop => prop.ZombieClientStats)
.HasForeignKey(prop => prop.ClientId);
@@ -197,23 +187,39 @@ namespace Data.Context
modelBuilder.Entity(ent =>
{
- ent.ToTable($"EF{nameof(ZombieMatchClientStat)}");
+ ent.ToTable($"EF{nameof(ZombieMatchClientStats)}");
});
modelBuilder.Entity(ent =>
{
- ent.ToTable($"EF{nameof(ZombieRoundClientStat)}");
+ ent.ToTable($"EF{nameof(ZombieRoundClientStats)}");
});
modelBuilder.Entity(ent =>
{
- ent.ToTable($"EF{nameof(ZombieAggregateClientStat)}");
+ ent.ToTable($"EF{nameof(ZombieClientStatAggregates)}");
});
- modelBuilder.Entity().ToTable($"EF{nameof(ZombieEvents)}");
-
- modelBuilder.Entity().ToTable($"EF{nameof(ZombieClientStatRecord)}");
+ modelBuilder.Entity(ent =>
+ {
+ ent.ToTable($"EF{nameof(ZombieEvents)}");
+ });
+ modelBuilder.Entity(ent =>
+ {
+ ent.ToTable($"EF{nameof(ZombieClientStatRecords)}");
+ });
+
+ modelBuilder.Entity(ent =>
+ {
+ ent.ToTable($"EF{nameof(ClientStatTags)}");
+ });
+
+ modelBuilder.Entity(ent =>
+ {
+ ent.ToTable($"EF{nameof(ClientStatTagValues)}");
+ });
+
Models.Configuration.StatsModelConfiguration.Configure(modelBuilder);
base.OnModelCreating(modelBuilder);
diff --git a/Data/Migrations/Sqlite/20230905194120_IntitialZombieStats.Designer.cs b/Data/Migrations/Sqlite/20230905194120_IntitialZombieStats.Designer.cs
deleted file mode 100644
index 8bb4b764..00000000
--- a/Data/Migrations/Sqlite/20230905194120_IntitialZombieStats.Designer.cs
+++ /dev/null
@@ -1,1959 +0,0 @@
-//
-using System;
-using Data.MigrationContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Data.Migrations.Sqlite
-{
- [DbContext(typeof(SqliteDatabaseContext))]
- [Migration("20230905194120_IntitialZombieStats")]
- partial class IntitialZombieStats
- {
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "6.0.1");
-
- modelBuilder.Entity("Data.Models.Client.EFACSnapshotVector3", b =>
- {
- b.Property("ACSnapshotVector3Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("SnapshotId")
- .HasColumnType("INTEGER");
-
- b.Property("Vector3Id")
- .HasColumnType("INTEGER");
-
- b.HasKey("ACSnapshotVector3Id");
-
- b.HasIndex("SnapshotId");
-
- b.HasIndex("Vector3Id");
-
- b.ToTable("EFACSnapshotVector3", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.EFClient", b =>
- {
- b.Property("ClientId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("AliasLinkId")
- .HasColumnType("INTEGER");
-
- b.Property("Connections")
- .HasColumnType("INTEGER");
-
- b.Property("CurrentAliasId")
- .HasColumnType("INTEGER");
-
- b.Property("FirstConnection")
- .HasColumnType("TEXT");
-
- b.Property("GameName")
- .HasColumnType("INTEGER");
-
- b.Property("LastConnection")
- .HasColumnType("TEXT");
-
- b.Property("Level")
- .HasColumnType("INTEGER");
-
- b.Property("Masked")
- .HasColumnType("INTEGER");
-
- b.Property("NetworkId")
- .HasColumnType("INTEGER");
-
- b.Property("Password")
- .HasColumnType("TEXT");
-
- b.Property("PasswordSalt")
- .HasColumnType("TEXT");
-
- b.Property("TotalConnectionTime")
- .HasColumnType("INTEGER");
-
- b.HasKey("ClientId");
-
- b.HasAlternateKey("NetworkId", "GameName");
-
- b.HasIndex("AliasLinkId");
-
- b.HasIndex("CurrentAliasId");
-
- b.HasIndex("LastConnection");
-
- b.HasIndex("NetworkId");
-
- b.ToTable("EFClients", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.EFClientConnectionHistory", b =>
- {
- b.Property("ClientConnectionId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("ConnectionType")
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("ClientConnectionId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("CreatedDateTime");
-
- b.HasIndex("ServerId");
-
- b.ToTable("EFClientConnectionHistory", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.EFClientKill", b =>
- {
- b.Property("KillId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("AttackerId")
- .HasColumnType("INTEGER");
-
- b.Property("Damage")
- .HasColumnType("INTEGER");
-
- b.Property("DeathOriginVector3Id")
- .HasColumnType("INTEGER");
-
- b.Property("DeathType")
- .HasColumnType("INTEGER");
-
- b.Property("Fraction")
- .HasColumnType("REAL");
-
- b.Property("HitLoc")
- .HasColumnType("INTEGER");
-
- b.Property("IsKill")
- .HasColumnType("INTEGER");
-
- b.Property("KillOriginVector3Id")
- .HasColumnType("INTEGER");
-
- b.Property("Map")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("VictimId")
- .HasColumnType("INTEGER");
-
- b.Property("ViewAnglesVector3Id")
- .HasColumnType("INTEGER");
-
- b.Property("VisibilityPercentage")
- .HasColumnType("REAL");
-
- b.Property("Weapon")
- .HasColumnType("INTEGER");
-
- b.Property("WeaponReference")
- .HasColumnType("TEXT");
-
- b.Property("When")
- .HasColumnType("TEXT");
-
- b.HasKey("KillId");
-
- b.HasIndex("AttackerId");
-
- b.HasIndex("DeathOriginVector3Id");
-
- b.HasIndex("KillOriginVector3Id");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("VictimId");
-
- b.HasIndex("ViewAnglesVector3Id");
-
- b.ToTable("EFClientKills", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.EFClientMessage", b =>
- {
- b.Property("MessageId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("Message")
- .HasColumnType("TEXT");
-
- b.Property("SentIngame")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("TimeSent")
- .HasColumnType("TEXT");
-
- b.HasKey("MessageId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("TimeSent");
-
- b.ToTable("EFClientMessages", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFACSnapshot", b =>
- {
- b.Property("SnapshotId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("CurrentSessionLength")
- .HasColumnType("INTEGER");
-
- b.Property("CurrentStrain")
- .HasColumnType("REAL");
-
- b.Property("CurrentViewAngleId")
- .HasColumnType("INTEGER");
-
- b.Property("Deaths")
- .HasColumnType("INTEGER");
-
- b.Property("Distance")
- .HasColumnType("REAL");
-
- b.Property("EloRating")
- .HasColumnType("REAL");
-
- b.Property("HitDestinationId")
- .HasColumnType("INTEGER");
-
- b.Property("HitLocation")
- .HasColumnType("INTEGER");
-
- b.Property("HitLocationReference")
- .HasColumnType("TEXT");
-
- b.Property("HitOriginId")
- .HasColumnType("INTEGER");
-
- b.Property("HitType")
- .HasColumnType("INTEGER");
-
- b.Property("Hits")
- .HasColumnType("INTEGER");
-
- b.Property("Kills")
- .HasColumnType("INTEGER");
-
- b.Property("LastStrainAngleId")
- .HasColumnType("INTEGER");
-
- b.Property("RecoilOffset")
- .HasColumnType("REAL");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("SessionAngleOffset")
- .HasColumnType("REAL");
-
- b.Property("SessionAverageSnapValue")
- .HasColumnType("REAL");
-
- b.Property("SessionSPM")
- .HasColumnType("REAL");
-
- b.Property("SessionScore")
- .HasColumnType("INTEGER");
-
- b.Property("SessionSnapHits")
- .HasColumnType("INTEGER");
-
- b.Property("StrainAngleBetween")
- .HasColumnType("REAL");
-
- b.Property("TimeSinceLastEvent")
- .HasColumnType("INTEGER");
-
- b.Property("WeaponId")
- .HasColumnType("INTEGER");
-
- b.Property("WeaponReference")
- .HasColumnType("TEXT");
-
- b.Property("When")
- .HasColumnType("TEXT");
-
- b.HasKey("SnapshotId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("CurrentViewAngleId");
-
- b.HasIndex("HitDestinationId");
-
- b.HasIndex("HitOriginId");
-
- b.HasIndex("LastStrainAngleId");
-
- b.HasIndex("ServerId");
-
- b.ToTable("EFACSnapshot", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFClientHitStatistic", b =>
- {
- b.Property("ClientHitStatisticId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("DamageInflicted")
- .HasColumnType("INTEGER");
-
- b.Property("DamageReceived")
- .HasColumnType("INTEGER");
-
- b.Property("DeathCount")
- .HasColumnType("INTEGER");
-
- b.Property("HitCount")
- .HasColumnType("INTEGER");
-
- b.Property("HitLocationId")
- .HasColumnType("INTEGER");
-
- b.Property("KillCount")
- .HasColumnType("INTEGER");
-
- b.Property("MeansOfDeathId")
- .HasColumnType("INTEGER");
-
- b.Property("ReceivedHitCount")
- .HasColumnType("INTEGER");
-
- b.Property("Score")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("SuicideCount")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("UsageSeconds")
- .HasColumnType("INTEGER");
-
- b.Property("WeaponAttachmentComboId")
- .HasColumnType("INTEGER");
-
- b.Property("WeaponId")
- .HasColumnType("INTEGER");
-
- b.HasKey("ClientHitStatisticId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("HitLocationId");
-
- b.HasIndex("MeansOfDeathId");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("WeaponAttachmentComboId");
-
- b.HasIndex("WeaponId");
-
- b.ToTable("EFClientHitStatistics", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFClientRankingHistory", b =>
- {
- b.Property("ClientRankingHistoryId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Newest")
- .HasColumnType("INTEGER");
-
- b.Property("PerformanceBucket")
- .HasColumnType("TEXT");
-
- b.Property("PerformanceMetric")
- .HasColumnType("REAL");
-
- b.Property("Ranking")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("ZScore")
- .HasColumnType("REAL");
-
- b.HasKey("ClientRankingHistoryId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("CreatedDateTime");
-
- b.HasIndex("Ranking");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("UpdatedDateTime");
-
- b.HasIndex("ZScore");
-
- b.ToTable("EFClientRankingHistory", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFClientRatingHistory", b =>
- {
- b.Property("RatingHistoryId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.HasKey("RatingHistoryId");
-
- b.HasIndex("ClientId");
-
- b.ToTable("EFClientRatingHistory", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFClientStatistics", b =>
- {
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("AverageSnapValue")
- .HasColumnType("REAL");
-
- b.Property("Deaths")
- .HasColumnType("INTEGER");
-
- b.Property("EloRating")
- .HasColumnType("REAL");
-
- b.Property("Kills")
- .HasColumnType("INTEGER");
-
- b.Property("MaxStrain")
- .HasColumnType("REAL");
-
- b.Property("RollingWeightedKDR")
- .HasColumnType("REAL");
-
- b.Property("SPM")
- .HasColumnType("REAL");
-
- b.Property("Skill")
- .HasColumnType("REAL");
-
- b.Property("SnapHitCount")
- .HasColumnType("INTEGER");
-
- b.Property("TimePlayed")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedAt")
- .HasColumnType("TEXT");
-
- b.Property("ZScore")
- .HasColumnType("REAL");
-
- b.HasKey("ClientId", "ServerId");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("ZScore");
-
- b.HasIndex("ClientId", "TimePlayed", "ZScore");
-
- b.ToTable("EFClientStatistics", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFHitLocationCount", b =>
- {
- b.Property("HitLocationCountId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("EFClientStatisticsClientId")
- .HasColumnType("INTEGER")
- .HasColumnName("EFClientStatisticsClientId");
-
- b.Property("EFClientStatisticsServerId")
- .HasColumnType("INTEGER")
- .HasColumnName("EFClientStatisticsServerId");
-
- b.Property("HitCount")
- .HasColumnType("INTEGER");
-
- b.Property("HitOffsetAverage")
- .HasColumnType("REAL");
-
- b.Property("Location")
- .HasColumnType("INTEGER");
-
- b.Property("MaxAngleDistance")
- .HasColumnType("REAL");
-
- b.HasKey("HitLocationCountId");
-
- b.HasIndex("EFClientStatisticsServerId");
-
- b.HasIndex("EFClientStatisticsClientId", "EFClientStatisticsServerId");
-
- b.ToTable("EFHitLocationCounts", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.EFRating", b =>
- {
- b.Property("RatingId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("ActivityAmount")
- .HasColumnType("INTEGER");
-
- b.Property("Newest")
- .HasColumnType("INTEGER");
-
- b.Property("Performance")
- .HasColumnType("REAL");
-
- b.Property("Ranking")
- .HasColumnType("INTEGER");
-
- b.Property("RatingHistoryId")
- .HasColumnType("INTEGER");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("When")
- .HasColumnType("TEXT");
-
- b.HasKey("RatingId");
-
- b.HasIndex("RatingHistoryId");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("Performance", "Ranking", "When");
-
- b.HasIndex("When", "ServerId", "Performance", "ActivityAmount");
-
- b.ToTable("EFRating", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFHitLocation", b =>
- {
- b.Property("HitLocationId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("HitLocationId");
-
- b.HasIndex("Name");
-
- b.ToTable("EFHitLocations", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFMap", b =>
- {
- b.Property("MapId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("MapId");
-
- b.ToTable("EFMaps", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFMeansOfDeath", b =>
- {
- b.Property("MeansOfDeathId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("MeansOfDeathId");
-
- b.ToTable("EFMeansOfDeath", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFWeapon", b =>
- {
- b.Property("WeaponId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("WeaponId");
-
- b.HasIndex("Name");
-
- b.ToTable("EFWeapons", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFWeaponAttachment", b =>
- {
- b.Property("WeaponAttachmentId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("WeaponAttachmentId");
-
- b.ToTable("EFWeaponAttachments", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Client.Stats.Reference.EFWeaponAttachmentCombo", b =>
- {
- b.Property("WeaponAttachmentComboId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Attachment1Id")
- .HasColumnType("INTEGER");
-
- b.Property("Attachment2Id")
- .HasColumnType("INTEGER");
-
- b.Property("Attachment3Id")
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("Game")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("WeaponAttachmentComboId");
-
- b.HasIndex("Attachment1Id");
-
- b.HasIndex("Attachment2Id");
-
- b.HasIndex("Attachment3Id");
-
- b.ToTable("EFWeaponAttachmentCombos", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.EFAlias", b =>
- {
- b.Property("AliasId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("DateAdded")
- .HasColumnType("TEXT");
-
- b.Property("IPAddress")
- .HasColumnType("INTEGER");
-
- b.Property("LinkId")
- .HasColumnType("INTEGER");
-
- b.Property("Name")
- .IsRequired()
- .HasMaxLength(24)
- .HasColumnType("TEXT");
-
- b.Property("SearchableIPAddress")
- .ValueGeneratedOnAddOrUpdate()
- .HasMaxLength(255)
- .HasColumnType("TEXT")
- .HasComputedColumnSql("((IPAddress & 255) || '.' || ((IPAddress >> 8) & 255)) || '.' || ((IPAddress >> 16) & 255) || '.' || ((IPAddress >> 24) & 255)", true);
-
- b.Property("SearchableName")
- .HasMaxLength(24)
- .HasColumnType("TEXT");
-
- b.HasKey("AliasId");
-
- b.HasIndex("IPAddress");
-
- b.HasIndex("LinkId");
-
- b.HasIndex("Name");
-
- b.HasIndex("SearchableIPAddress");
-
- b.HasIndex("SearchableName");
-
- b.HasIndex("Name", "IPAddress");
-
- b.ToTable("EFAlias", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.EFAliasLink", b =>
- {
- b.Property("AliasLinkId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.HasKey("AliasLinkId");
-
- b.ToTable("EFAliasLinks", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.EFChangeHistory", b =>
- {
- b.Property("ChangeHistoryId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("Comment")
- .HasMaxLength(128)
- .HasColumnType("TEXT");
-
- b.Property("CurrentValue")
- .HasColumnType("TEXT");
-
- b.Property("ImpersonationEntityId")
- .HasColumnType("INTEGER");
-
- b.Property("OriginEntityId")
- .HasColumnType("INTEGER");
-
- b.Property("PreviousValue")
- .HasColumnType("TEXT");
-
- b.Property("TargetEntityId")
- .HasColumnType("INTEGER");
-
- b.Property("TimeChanged")
- .HasColumnType("TEXT");
-
- b.Property("TypeOfChange")
- .HasColumnType("INTEGER");
-
- b.HasKey("ChangeHistoryId");
-
- b.ToTable("EFChangeHistory");
- });
-
- modelBuilder.Entity("Data.Models.EFMeta", b =>
- {
- b.Property("MetaId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("ClientId")
- .HasColumnType("INTEGER");
-
- b.Property("Created")
- .HasColumnType("TEXT");
-
- b.Property("Extra")
- .HasColumnType("TEXT");
-
- b.Property("Key")
- .IsRequired()
- .HasMaxLength(32)
- .HasColumnType("TEXT");
-
- b.Property("LinkedMetaId")
- .HasColumnType("INTEGER");
-
- b.Property("Updated")
- .HasColumnType("TEXT");
-
- b.Property("Value")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("MetaId");
-
- b.HasIndex("ClientId");
-
- b.HasIndex("Key");
-
- b.HasIndex("LinkedMetaId");
-
- b.ToTable("EFMeta");
- });
-
- modelBuilder.Entity("Data.Models.EFPenalty", b =>
- {
- b.Property("PenaltyId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("AutomatedOffense")
- .HasColumnType("TEXT");
-
- b.Property("Expires")
- .HasColumnType("TEXT");
-
- b.Property("IsEvadedOffense")
- .HasColumnType("INTEGER");
-
- b.Property("LinkId")
- .HasColumnType("INTEGER");
-
- b.Property("OffenderId")
- .HasColumnType("INTEGER");
-
- b.Property("Offense")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.Property("PunisherId")
- .HasColumnType("INTEGER");
-
- b.Property("Type")
- .HasColumnType("INTEGER");
-
- b.Property("When")
- .HasColumnType("TEXT");
-
- b.HasKey("PenaltyId");
-
- b.HasIndex("LinkId");
-
- b.HasIndex("OffenderId");
-
- b.HasIndex("PunisherId");
-
- b.ToTable("EFPenalties", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.EFPenaltyIdentifier", b =>
- {
- b.Property("PenaltyIdentifierId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("IPv4Address")
- .HasColumnType("INTEGER");
-
- b.Property("NetworkId")
- .HasColumnType("INTEGER");
-
- b.Property("PenaltyId")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("PenaltyIdentifierId");
-
- b.HasIndex("IPv4Address");
-
- b.HasIndex("NetworkId");
-
- b.HasIndex("PenaltyId");
-
- b.ToTable("EFPenaltyIdentifiers", (string)null);
- });
-
- modelBuilder.Entity("Data.Models.Misc.EFInboxMessage", b =>
- {
- b.Property("InboxMessageId")
- .ValueGeneratedOnAdd()
- .HasColumnType("INTEGER");
-
- b.Property("CreatedDateTime")
- .HasColumnType("TEXT");
-
- b.Property("DestinationClientId")
- .HasColumnType("INTEGER");
-
- b.Property("IsDelivered")
- .HasColumnType("INTEGER");
-
- b.Property("Message")
- .HasColumnType("TEXT");
-
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("SourceClientId")
- .HasColumnType("INTEGER");
-
- b.Property("UpdatedDateTime")
- .HasColumnType("TEXT");
-
- b.HasKey("InboxMessageId");
-
- b.HasIndex("DestinationClientId");
-
- b.HasIndex("ServerId");
-
- b.HasIndex("SourceClientId");
-
- b.ToTable("InboxMessages");
- });
-
- modelBuilder.Entity("Data.Models.Server.EFServer", b =>
- {
- b.Property("ServerId")
- .HasColumnType("INTEGER");
-
- b.Property("Active")
- .HasColumnType("INTEGER");
-
- b.Property("EndPoint")
- .HasColumnType("TEXT");
-
- b.Property