diff --git a/.gitignore b/.gitignore
index 88f5619d..4d13c548 100644
--- a/.gitignore
+++ b/.gitignore
@@ -332,7 +332,3 @@ ASALocalRun/
# Local History for Visual Studio
.localhistory/
-
-# Migrations Folder
-Migrations/
-/Properties/launchSettings.json
diff --git a/ReallifeGamemode.Server/Migrations/20190226185806_Initial.Designer.cs b/ReallifeGamemode.Server/Migrations/20190226185806_Initial.Designer.cs
new file mode 100644
index 00000000..43a6f29c
--- /dev/null
+++ b/ReallifeGamemode.Server/Migrations/20190226185806_Initial.Designer.cs
@@ -0,0 +1,1000 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using reallife_gamemode.Server.Models;
+
+namespace ReallifeGamemode.Migrations
+{
+ [DbContext(typeof(DatabaseContext))]
+ [Migration("20190226185806_Initial")]
+ partial class Initial
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
+ .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Ban", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Applied");
+
+ b.Property("BannedBy");
+
+ b.Property("Reason");
+
+ b.Property("UntilDateTime");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Bans");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.BusinessBankAccount", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Balance");
+
+ b.Property("BusinessId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BusinessId")
+ .IsUnique();
+
+ b.ToTable("BusinessBankAccounts");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Character", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Ageing");
+
+ b.Property("AgeingOpacity");
+
+ b.Property("BeardColor");
+
+ b.Property("Blemishes");
+
+ b.Property("BlemishesOpacity");
+
+ b.Property("Blush");
+
+ b.Property("BlushColor");
+
+ b.Property("BlushOpacity");
+
+ b.Property("BrowDepth");
+
+ b.Property("BrowHeight");
+
+ b.Property("CheekDepth");
+
+ b.Property("CheekboneHeight");
+
+ b.Property("CheekboneWidth");
+
+ b.Property("ChestHair");
+
+ b.Property("ChestHairColor");
+
+ b.Property("ChestHairOpacity");
+
+ b.Property("ChinDepth");
+
+ b.Property("ChinHeight");
+
+ b.Property("ChinIndent");
+
+ b.Property("ChinWidth");
+
+ b.Property("Complexion");
+
+ b.Property("ComplexionOpacity");
+
+ b.Property("EyeColor");
+
+ b.Property("EyeSize");
+
+ b.Property("EyebrowColor");
+
+ b.Property("Eyebrows");
+
+ b.Property("EyebrowsOpacity");
+
+ b.Property("FacialHair");
+
+ b.Property("FacialHairOpacity");
+
+ b.Property("Father");
+
+ b.Property("Freckles");
+
+ b.Property("FrecklesOpacity");
+
+ b.Property("Gender");
+
+ b.Property("Hair");
+
+ b.Property("HairColor");
+
+ b.Property("HairHighlightColor");
+
+ b.Property("JawShape");
+
+ b.Property("JawWidth");
+
+ b.Property("LipThickness");
+
+ b.Property("Lipstick");
+
+ b.Property("LipstickColor");
+
+ b.Property("LipstickOpacity");
+
+ b.Property("Makeup");
+
+ b.Property("MakeupOpacity");
+
+ b.Property("Mother");
+
+ b.Property("NeckWidth");
+
+ b.Property("NoseBottomHeight");
+
+ b.Property("NoseBridgeDepth");
+
+ b.Property("NoseBroken");
+
+ b.Property("NoseTipHeight");
+
+ b.Property("NoseTipLength");
+
+ b.Property("NoseWidth");
+
+ b.Property("Similarity");
+
+ b.Property("SkinSimilarity");
+
+ b.Property("SunDamage");
+
+ b.Property("SunDamageOpacity");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Characters");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.CharacterCloth", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ClothId");
+
+ b.Property("Duty");
+
+ b.Property("SlotId");
+
+ b.Property("SlotType");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("CharacterClothes");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.ClothCombination", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Gender");
+
+ b.Property("Top");
+
+ b.Property("Torso");
+
+ b.Property("Undershirt");
+
+ b.HasKey("Id");
+
+ b.ToTable("ClothCombinations");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Door", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Category");
+
+ b.Property("FactionId");
+
+ b.Property("Locked");
+
+ b.Property("Model");
+
+ b.Property("Name");
+
+ b.Property("Radius");
+
+ b.Property("X");
+
+ b.Property("Y");
+
+ b.Property("Z");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FactionId");
+
+ b.ToTable("Doors");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.DutyCloth", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ClothId");
+
+ b.Property("FactionId");
+
+ b.Property("Gender");
+
+ b.Property("SlotId");
+
+ b.Property("SlotType");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FactionId");
+
+ b.ToTable("DutyClothes");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Faction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Name")
+ .HasMaxLength(32);
+
+ b.Property("StateOwned");
+
+ b.HasKey("Id");
+
+ b.ToTable("Factions");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.FactionBankAccount", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Balance");
+
+ b.Property("Bic")
+ .HasMaxLength(12);
+
+ b.Property("FactionId");
+
+ b.Property("Iban")
+ .HasMaxLength(32);
+
+ b.HasKey("Id");
+
+ b.HasIndex("FactionId");
+
+ b.ToTable("FactionBankAccounts");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.FactionRank", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("FactionId");
+
+ b.Property("Order");
+
+ b.Property("RankName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FactionId");
+
+ b.ToTable("FactionRanks");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.GotoPoint", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Description")
+ .HasMaxLength(32);
+
+ b.Property("X");
+
+ b.Property("Y");
+
+ b.Property("Z");
+
+ b.HasKey("Id");
+
+ b.ToTable("GotoPoints");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Interior", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("EnterPositionStr")
+ .HasColumnName("EnterPosition");
+
+ b.Property("ExitPositionStr")
+ .HasColumnName("ExitPosition");
+
+ b.Property("Name");
+
+ b.HasKey("Id");
+
+ b.ToTable("Interiors");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.News", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Caption");
+
+ b.Property("Content");
+
+ b.Property("Timestamp");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("News");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.ServerVehicle", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue(true);
+
+ b.Property("Discriminator")
+ .IsRequired();
+
+ b.Property("Heading");
+
+ b.Property("Locked");
+
+ b.Property("Model");
+
+ b.Property("NumberPlate")
+ .HasMaxLength(8);
+
+ b.Property("PositionX");
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.Property("PrimaryColor");
+
+ b.Property("SecondaryColor");
+
+ b.HasKey("Id");
+
+ b.ToTable("ServerVehicles");
+
+ b.HasDiscriminator("Discriminator").HasValue("ServerVehicle");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.User", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AdminLevel");
+
+ b.Property("BanId");
+
+ b.Property("BusinessId");
+
+ b.Property("CharacterId");
+
+ b.Property("Dead");
+
+ b.Property("Email")
+ .HasMaxLength(64);
+
+ b.Property("FactionId");
+
+ b.Property("FactionLeader");
+
+ b.Property("FactionRankId");
+
+ b.Property("LogUserId");
+
+ b.Property("Name")
+ .HasMaxLength(32);
+
+ b.Property("Password")
+ .HasMaxLength(64);
+
+ b.Property("PositionX");
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.Property("RegistrationDate")
+ .ValueGeneratedOnAdd();
+
+ b.Property("SocialClubName")
+ .HasMaxLength(32);
+
+ b.HasKey("Id");
+
+ b.HasIndex("BanId");
+
+ b.HasIndex("BusinessId")
+ .IsUnique();
+
+ b.HasIndex("CharacterId");
+
+ b.HasIndex("FactionId");
+
+ b.HasIndex("FactionRankId");
+
+ b.ToTable("Users");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.UserBankAccount", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Balance");
+
+ b.Property("Bic")
+ .HasMaxLength(12);
+
+ b.Property("Iban")
+ .HasMaxLength(32);
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("UserBankAccounts");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.UserItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Amount");
+
+ b.Property("ItemId");
+
+ b.Property("Slot");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("UserItems");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.VehicleMod", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ModId");
+
+ b.Property("ServerVehicleId");
+
+ b.Property("Slot");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ServerVehicleId", "Slot")
+ .IsUnique();
+
+ b.ToTable("VehicleMods");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Entities.Whitelist", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("SocialClubName");
+
+ b.HasKey("Id");
+
+ b.ToTable("WhitelistEntries");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Logs.BankAccountTransactionHistory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Fee");
+
+ b.Property("MoneySent");
+
+ b.Property("NewReceiverBalance");
+
+ b.Property("NewSenderBalance");
+
+ b.Property("Origin")
+ .HasMaxLength(32);
+
+ b.Property("Receiver")
+ .HasMaxLength(32);
+
+ b.Property("ReceiverBalance");
+
+ b.Property("Sender")
+ .HasMaxLength(32);
+
+ b.Property("SenderBalance");
+
+ b.Property("Timestamp")
+ .ValueGeneratedOnAdd();
+
+ b.HasKey("Id");
+
+ b.ToTable("BankAccountTransactionLogs");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Logs.Death", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("CauseOfDeath")
+ .HasMaxLength(64);
+
+ b.Property("KillerHeading");
+
+ b.Property("KillerId");
+
+ b.Property("KillerPositionX");
+
+ b.Property("KillerPositionY");
+
+ b.Property("KillerPositionZ");
+
+ b.Property("Timestamp")
+ .ValueGeneratedOnAdd();
+
+ b.Property("VictimHeading");
+
+ b.Property("VictimId");
+
+ b.Property("VictimPositionX");
+
+ b.Property("VictimPositionY");
+
+ b.Property("VictimPositionZ");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KillerId");
+
+ b.HasIndex("VictimId");
+
+ b.ToTable("DeathLogs");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Saves.SavedBlip", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Alpha");
+
+ b.Property("Color");
+
+ b.Property("Dimension");
+
+ b.Property("DrawDistance");
+
+ b.Property("Name");
+
+ b.Property("PositionX");
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.Property("Rotation");
+
+ b.Property("Scale");
+
+ b.Property("ShortRange");
+
+ b.Property("Sprite");
+
+ b.HasKey("Id");
+
+ b.ToTable("Blips");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Saves.SavedMarker", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("ColorA");
+
+ b.Property("ColorB");
+
+ b.Property("ColorG");
+
+ b.Property("ColorR");
+
+ b.Property("Dimension");
+
+ b.Property("DirectionX");
+
+ b.Property("DirectionY");
+
+ b.Property("DirectionZ");
+
+ b.Property("PositionX");
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.Property("RotationX");
+
+ b.Property("RotationY");
+
+ b.Property("RotationZ");
+
+ b.Property("Scale");
+
+ b.Property("Type");
+
+ b.Property("Visible");
+
+ b.HasKey("Id");
+
+ b.ToTable("Markers");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Saves.SavedPed", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Dimension");
+
+ b.Property("HashModel");
+
+ b.Property("Heading");
+
+ b.Property("PositionX");
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.HasKey("Id");
+
+ b.ToTable("Peds");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Saves.SavedPickup", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("Dimension");
+
+ b.Property("PositionX")
+ .HasMaxLength(128);
+
+ b.Property("PositionY");
+
+ b.Property("PositionZ");
+
+ b.Property("RespawnTime");
+
+ b.Property("RotationX");
+
+ b.Property("RotationY");
+
+ b.Property("RotationZ");
+
+ b.Property("Vehicle");
+
+ b.HasKey("Id");
+
+ b.ToTable("Pickups");
+ });
+
+ modelBuilder.Entity("reallife_gamemode.Server.Saves.SavedTextLabel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Active");
+
+ b.Property("ColorA");
+
+ b.Property("ColorB");
+
+ b.Property("ColorG");
+
+ b.Property("ColorR");
+
+ b.Property("Dimension");
+
+ b.Property