diff --git a/Content.Client/UserInterface/HumanoidProfileEditor.Random.cs b/Content.Client/UserInterface/HumanoidProfileEditor.Random.cs
index 65f039fd08..761e88d751 100644
--- a/Content.Client/UserInterface/HumanoidProfileEditor.Random.cs
+++ b/Content.Client/UserInterface/HumanoidProfileEditor.Random.cs
@@ -17,6 +17,8 @@ namespace Content.Client.UserInterface
{
Profile = HumanoidCharacterProfile.Random();
UpdateSexControls();
+ UpdateGenderControls();
+ UpdateClothingControls();
UpdateAgeEdit();
UpdateNameEdit();
UpdateHairPickers();
diff --git a/Content.Client/UserInterface/HumanoidProfileEditor.cs b/Content.Client/UserInterface/HumanoidProfileEditor.cs
index 3ab41fa719..4c38b7cbee 100644
--- a/Content.Client/UserInterface/HumanoidProfileEditor.cs
+++ b/Content.Client/UserInterface/HumanoidProfileEditor.cs
@@ -17,6 +17,7 @@ using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
+using Robust.Shared.Localization.Macros;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -40,7 +41,8 @@ namespace Content.Client.UserInterface
private readonly Button _saveButton;
private readonly Button _sexFemaleButton;
private readonly Button _sexMaleButton;
- private readonly Button _sexClassifiedButton;
+ private readonly OptionButton _genderButton;
+ private readonly OptionButton _clothingButton;
private readonly HairStylePicker _hairPicker;
private readonly FacialHairStylePicker _facialHairPicker;
@@ -165,27 +167,34 @@ namespace Content.Client.UserInterface
Text = Loc.GetString("Male"),
Group = sexButtonGroup
};
- _sexMaleButton.OnPressed += args => { SetSex(Sex.Male); };
+ _sexMaleButton.OnPressed += args =>
+ {
+ SetSex(Sex.Male);
+ if (Profile.Gender == Gender.Female)
+ {
+ SetGender(Gender.Male);
+ UpdateGenderControls();
+ }
+ };
_sexFemaleButton = new Button
{
Text = Loc.GetString("Female"),
Group = sexButtonGroup
};
- _sexFemaleButton.OnPressed += args => { SetSex(Sex.Female); };
-
- _sexClassifiedButton = new Button
+ _sexFemaleButton.OnPressed += args =>
{
- /* DUR WHAT IF I PUT ATTACK HELICOPTER HERE DUR HUR AHUHRUHWUIDHAEILUBFOWEL(*&RFH#W*(OBFD&*/
- Text = Loc.GetString("Classified"),
- Group = sexButtonGroup
+ SetSex(Sex.Female);
+ if (Profile.Gender == Gender.Male)
+ {
+ SetGender(Gender.Female);
+ UpdateGenderControls();
+ }
};
- _sexClassifiedButton.OnPressed += args => { SetSex(Sex.Classified); };
hBox.AddChild(sexLabel);
hBox.AddChild(_sexMaleButton);
hBox.AddChild(_sexFemaleButton);
- hBox.AddChild(_sexClassifiedButton);
panel.AddChild(hBox);
sexAndAgeRow.AddChild(panel);
}
@@ -213,6 +222,34 @@ namespace Content.Client.UserInterface
#endregion Age
+ #region Gender
+
+ {
+ var panel = HighlightedContainer();
+ var hBox = new HBoxContainer();
+ var genderLabel = new Label { Text = Loc.GetString("Pronouns:") };
+
+ _genderButton = new OptionButton();
+
+ _genderButton.AddItem(Loc.GetString("He / Him"), (int) Gender.Male);
+ _genderButton.AddItem(Loc.GetString("She / Her"), (int) Gender.Female);
+ _genderButton.AddItem(Loc.GetString("They / Them"), (int) Gender.Epicene);
+ _genderButton.AddItem(Loc.GetString("It / It"), (int) Gender.Neuter);
+
+ _genderButton.OnItemSelected += args =>
+ {
+ _genderButton.SelectId(args.Id);
+ SetGender((Gender) args.Id);
+ };
+
+ hBox.AddChild(genderLabel);
+ hBox.AddChild(_genderButton);
+ panel.AddChild(hBox);
+ sexAndAgeRow.AddChild(panel);
+ }
+
+ #endregion Gender
+
#region Hair
{
@@ -270,6 +307,32 @@ namespace Content.Client.UserInterface
}
#endregion Hair
+
+ #region Clothing
+
+ {
+ var panel = HighlightedContainer();
+ var hBox = new HBoxContainer();
+ var clothingLabel = new Label { Text = Loc.GetString("Clothing:") };
+
+ _clothingButton = new OptionButton();
+
+ _clothingButton.AddItem(Loc.GetString("Jumpsuit"), (int) ClothingPreference.Jumpsuit);
+ _clothingButton.AddItem(Loc.GetString("Jumpskirt"), (int) ClothingPreference.Jumpskirt);
+
+ _clothingButton.OnItemSelected += args =>
+ {
+ _clothingButton.SelectId(args.Id);
+ SetClothing((ClothingPreference) args.Id);
+ };
+
+ hBox.AddChild(clothingLabel);
+ hBox.AddChild(_clothingButton);
+ panel.AddChild(hBox);
+ appearanceVBox.AddChild(panel);
+ }
+
+ #endregion Clothing
}
#endregion
@@ -588,12 +651,24 @@ namespace Content.Client.UserInterface
IsDirty = true;
}
+ private void SetGender(Gender newGender)
+ {
+ Profile = Profile?.WithGender(newGender);
+ IsDirty = true;
+ }
+
private void SetName(string newName)
{
Profile = Profile?.WithName(newName);
IsDirty = true;
}
+ private void SetClothing(ClothingPreference newClothing)
+ {
+ Profile = Profile?.WithClothingPreference(newClothing);
+ IsDirty = true;
+ }
+
public void Save()
{
IsDirty = false;
@@ -638,6 +713,16 @@ namespace Content.Client.UserInterface
_sexFemaleButton.Pressed = true;
}
+ private void UpdateGenderControls()
+ {
+ _genderButton.SelectId((int) Profile.Gender);
+ }
+
+ private void UpdateClothingControls()
+ {
+ _clothingButton.SelectId((int) Profile.Clothing);
+ }
+
private void UpdateHairPickers()
{
_hairPicker.SetData(
@@ -667,6 +752,8 @@ namespace Content.Client.UserInterface
if (Profile is null) return;
UpdateNameEdit();
UpdateSexControls();
+ UpdateGenderControls();
+ UpdateClothingControls();
UpdateAgeEdit();
UpdateHairPickers();
UpdateSaveButton();
diff --git a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs
index f0ffd50b59..21552467f9 100644
--- a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs
+++ b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs
@@ -6,6 +6,7 @@ using Content.Shared;
using Content.Shared.GameTicking;
using Content.Shared.Preferences;
using Content.Shared.Roles;
+using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines;
using Robust.Client.Interfaces.GameObjects.Components;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -140,13 +141,15 @@ namespace Content.Client.UserInterface
inventory.ClearAllSlotVisuals();
- foreach (var (slot, itemType) in gear.Equipment)
+ foreach (var slot in AllSlots)
{
- var item = entityMan.SpawnEntity(itemType, MapCoordinates.Nullspace);
-
- inventory.SetSlotVisuals(slot, item);
-
- item.Delete();
+ var itemType = gear.GetGear(slot, profile);
+ if (itemType != "")
+ {
+ var item = entityMan.SpawnEntity(itemType, MapCoordinates.Nullspace);
+ inventory.SetSlotVisuals(slot, item);
+ item.Delete();
+ }
}
}
}
diff --git a/Content.IntegrationTests/DummyGameTicker.cs b/Content.IntegrationTests/DummyGameTicker.cs
index 0f1a706a4d..9a98794513 100644
--- a/Content.IntegrationTests/DummyGameTicker.cs
+++ b/Content.IntegrationTests/DummyGameTicker.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using Content.Server.GameTicking;
using Content.Server.Interfaces.GameTicking;
using Content.Shared.Roles;
+using Content.Shared.Preferences;
using Content.Server.Mobs;
using Robust.Server.Interfaces.Player;
using Robust.Server.Interfaces.Console;
@@ -76,7 +77,7 @@ namespace Content.IntegrationTests
public EntityCoordinates GetJobSpawnPoint(string jobId) => EntityCoordinates.Invalid;
public EntityCoordinates GetObserverSpawnPoint() => EntityCoordinates.Invalid;
- public void EquipStartingGear(IEntity entity, StartingGearPrototype startingGear)
+ public void EquipStartingGear(IEntity entity, StartingGearPrototype startingGear, HumanoidCharacterProfile profile)
{
}
diff --git a/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.Designer.cs b/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.Designer.cs
new file mode 100644
index 0000000000..9fd3c7c83d
--- /dev/null
+++ b/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.Designer.cs
@@ -0,0 +1,570 @@
+//
+using System;
+using System.Net;
+using Content.Server.Database;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace Content.Server.Database.Migrations.Postgres
+{
+ [DbContext(typeof(PostgresServerDbContext))]
+ [Migration("20201203093409_ClothingAndPronouns")]
+ partial class ClothingAndPronouns
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .UseIdentityByDefaultColumns()
+ .HasAnnotation("Relational:MaxIdentifierLength", 63)
+ .HasAnnotation("ProductVersion", "5.0.0");
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Property("UserId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property("AdminRankId")
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_id");
+
+ b.Property("Title")
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.HasKey("UserId");
+
+ b.HasIndex("AdminRankId");
+
+ b.ToTable("admin");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("admin_flag_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("AdminId")
+ .HasColumnType("uuid")
+ .HasColumnName("admin_id");
+
+ b.Property("Flag")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("flag");
+
+ b.Property("Negative")
+ .HasColumnType("boolean")
+ .HasColumnName("negative");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AdminId");
+
+ b.HasIndex("Flag", "AdminId")
+ .IsUnique();
+
+ b.ToTable("admin_flag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id");
+
+ b.ToTable("admin_rank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_flag_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("AdminRankId")
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_id");
+
+ b.Property("Flag")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("flag");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AdminRankId");
+
+ b.HasIndex("Flag", "AdminRankId")
+ .IsUnique();
+
+ b.ToTable("admin_rank_flag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Antag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("antag_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("AntagName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("antag_name");
+
+ b.Property("ProfileId")
+ .HasColumnType("integer")
+ .HasColumnName("profile_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProfileId", "AntagName")
+ .IsUnique();
+
+ b.ToTable("antag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AssignedUserId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("assigned_user_id_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("user_name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.HasIndex("UserName")
+ .IsUnique();
+
+ b.ToTable("assigned_user_id");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Job", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("job_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("job_name");
+
+ b.Property("Priority")
+ .HasColumnType("integer")
+ .HasColumnName("priority");
+
+ b.Property("ProfileId")
+ .HasColumnType("integer")
+ .HasColumnName("profile_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProfileId");
+
+ b.ToTable("job");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresConnectionLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("connection_log_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("inet")
+ .HasColumnName("address");
+
+ b.Property("Time")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("time");
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("user_name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("connection_log");
+
+ b.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresPlayer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("player_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("FirstSeenTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("first_seen_time");
+
+ b.Property("LastSeenAddress")
+ .IsRequired()
+ .HasColumnType("inet")
+ .HasColumnName("last_seen_address");
+
+ b.Property("LastSeenTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("last_seen_time");
+
+ b.Property("LastSeenUserName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("last_seen_user_name");
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LastSeenUserName");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.ToTable("player");
+
+ b.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresServerBan", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("server_ban_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property?>("Address")
+ .HasColumnType("inet")
+ .HasColumnName("address");
+
+ b.Property("BanTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("ban_time");
+
+ b.Property("BanningAdmin")
+ .HasColumnType("uuid")
+ .HasColumnName("banning_admin");
+
+ b.Property("ExpirationTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expiration_time");
+
+ b.Property("Reason")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("reason");
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Address");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("server_ban");
+
+ b.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address");
+
+ b.HasCheckConstraint("HaveEitherAddressOrUserId", "address IS NOT NULL OR user_id IS NOT NULL");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresServerUnban", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("unban_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("BanId")
+ .HasColumnType("integer")
+ .HasColumnName("ban_id");
+
+ b.Property("UnbanTime")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("unban_time");
+
+ b.Property("UnbanningAdmin")
+ .HasColumnType("uuid")
+ .HasColumnName("unbanning_admin");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BanId")
+ .IsUnique();
+
+ b.ToTable("server_unban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("preference_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("SelectedCharacterSlot")
+ .HasColumnType("integer")
+ .HasColumnName("selected_character_slot");
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.ToTable("preference");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("profile_id")
+ .UseIdentityByDefaultColumn();
+
+ b.Property("Age")
+ .HasColumnType("integer")
+ .HasColumnName("age");
+
+ b.Property("CharacterName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("char_name");
+
+ b.Property("Clothing")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("clothing");
+
+ b.Property("EyeColor")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("eye_color");
+
+ b.Property("FacialHairColor")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("facial_hair_color");
+
+ b.Property("FacialHairName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("facial_hair_name");
+
+ b.Property("Gender")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("gender");
+
+ b.Property("HairColor")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("hair_color");
+
+ b.Property("HairName")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("hair_name");
+
+ b.Property("PreferenceId")
+ .HasColumnType("integer")
+ .HasColumnName("preference_id");
+
+ b.Property("PreferenceUnavailable")
+ .HasColumnType("integer")
+ .HasColumnName("pref_unavailable");
+
+ b.Property("Sex")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("sex");
+
+ b.Property("SkinColor")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("skin_color");
+
+ b.Property("Slot")
+ .HasColumnType("integer")
+ .HasColumnName("slot");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PreferenceId");
+
+ b.HasIndex("Slot", "PreferenceId")
+ .IsUnique();
+
+ b.ToTable("profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.HasOne("Content.Server.Database.AdminRank", "AdminRank")
+ .WithMany("Admins")
+ .HasForeignKey("AdminRankId")
+ .OnDelete(DeleteBehavior.SetNull);
+
+ b.Navigation("AdminRank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
+ {
+ b.HasOne("Content.Server.Database.Admin", "Admin")
+ .WithMany("Flags")
+ .HasForeignKey("AdminId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Admin");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
+ {
+ b.HasOne("Content.Server.Database.AdminRank", "Rank")
+ .WithMany("Flags")
+ .HasForeignKey("AdminRankId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Rank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Antag", b =>
+ {
+ b.HasOne("Content.Server.Database.Profile", "Profile")
+ .WithMany("Antags")
+ .HasForeignKey("ProfileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Job", b =>
+ {
+ b.HasOne("Content.Server.Database.Profile", "Profile")
+ .WithMany("Jobs")
+ .HasForeignKey("ProfileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresServerUnban", b =>
+ {
+ b.HasOne("Content.Server.Database.PostgresServerBan", "Ban")
+ .WithOne("Unban")
+ .HasForeignKey("Content.Server.Database.PostgresServerUnban", "BanId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.HasOne("Content.Server.Database.Preference", "Preference")
+ .WithMany("Profiles")
+ .HasForeignKey("PreferenceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Preference");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Navigation("Admins");
+
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresServerBan", b =>
+ {
+ b.Navigation("Unban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Navigation("Profiles");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Navigation("Antags");
+
+ b.Navigation("Jobs");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.cs b/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.cs
new file mode 100644
index 0000000000..ec7318fc4b
--- /dev/null
+++ b/Content.Server.Database/Migrations/Postgres/20201203093409_ClothingAndPronouns.cs
@@ -0,0 +1,35 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace Content.Server.Database.Migrations.Postgres
+{
+ public partial class ClothingAndPronouns : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "clothing",
+ table: "profile",
+ type: "text",
+ nullable: false,
+ defaultValue: "");
+
+ migrationBuilder.AddColumn(
+ name: "gender",
+ table: "profile",
+ type: "text",
+ nullable: false,
+ defaultValue: "");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "clothing",
+ table: "profile");
+
+ migrationBuilder.DropColumn(
+ name: "gender",
+ table: "profile");
+ }
+ }
+}
diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs
index 16f84e3e27..589940e4a6 100644
--- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs
+++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs
@@ -16,24 +16,24 @@ namespace Content.Server.Database.Migrations.Postgres
{
#pragma warning disable 612, 618
modelBuilder
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
- .HasAnnotation("ProductVersion", "3.1.4")
- .HasAnnotation("Relational:MaxIdentifierLength", 63);
+ .UseIdentityByDefaultColumns()
+ .HasAnnotation("Relational:MaxIdentifierLength", 63)
+ .HasAnnotation("ProductVersion", "5.0.0");
modelBuilder.Entity("Content.Server.Database.Admin", b =>
{
b.Property("UserId")
.ValueGeneratedOnAdd()
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.Property("AdminRankId")
- .HasColumnName("admin_rank_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_id");
b.Property("Title")
- .HasColumnName("title")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("title");
b.HasKey("UserId");
@@ -46,22 +46,22 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_flag_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("admin_flag_id")
+ .UseIdentityByDefaultColumn();
b.Property("AdminId")
- .HasColumnName("admin_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("admin_id");
b.Property("Flag")
.IsRequired()
- .HasColumnName("flag")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("flag");
b.Property("Negative")
- .HasColumnName("negative")
- .HasColumnType("boolean");
+ .HasColumnType("boolean")
+ .HasColumnName("negative");
b.HasKey("Id");
@@ -77,14 +77,14 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_rank_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("admin_rank_id")
+ .UseIdentityByDefaultColumn();
b.Property("Name")
.IsRequired()
- .HasColumnName("name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("name");
b.HasKey("Id");
@@ -95,18 +95,18 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_rank_flag_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("admin_rank_flag_id")
+ .UseIdentityByDefaultColumn();
b.Property("AdminRankId")
- .HasColumnName("admin_rank_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("admin_rank_id");
b.Property("Flag")
.IsRequired()
- .HasColumnName("flag")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("flag");
b.HasKey("Id");
@@ -122,18 +122,18 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("antag_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("antag_id")
+ .UseIdentityByDefaultColumn();
b.Property("AntagName")
.IsRequired()
- .HasColumnName("antag_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("antag_name");
b.Property("ProfileId")
- .HasColumnName("profile_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("profile_id");
b.HasKey("Id");
@@ -147,18 +147,18 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("assigned_user_id_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("assigned_user_id_id")
+ .UseIdentityByDefaultColumn();
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.Property("UserName")
.IsRequired()
- .HasColumnName("user_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("user_name");
b.HasKey("Id");
@@ -175,22 +175,22 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("job_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("job_id")
+ .UseIdentityByDefaultColumn();
b.Property("JobName")
.IsRequired()
- .HasColumnName("job_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("job_name");
b.Property("Priority")
- .HasColumnName("priority")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("priority");
b.Property("ProfileId")
- .HasColumnName("profile_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("profile_id");
b.HasKey("Id");
@@ -203,27 +203,27 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("connection_log_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("connection_log_id")
+ .UseIdentityByDefaultColumn();
b.Property("Address")
.IsRequired()
- .HasColumnName("address")
- .HasColumnType("inet");
+ .HasColumnType("inet")
+ .HasColumnName("address");
b.Property("Time")
- .HasColumnName("time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("time");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.Property("UserName")
.IsRequired()
- .HasColumnName("user_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("user_name");
b.HasKey("Id");
@@ -238,31 +238,31 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("player_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("player_id")
+ .UseIdentityByDefaultColumn();
b.Property("FirstSeenTime")
- .HasColumnName("first_seen_time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("first_seen_time");
b.Property("LastSeenAddress")
.IsRequired()
- .HasColumnName("last_seen_address")
- .HasColumnType("inet");
+ .HasColumnType("inet")
+ .HasColumnName("last_seen_address");
b.Property("LastSeenTime")
- .HasColumnName("last_seen_time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("last_seen_time");
b.Property("LastSeenUserName")
.IsRequired()
- .HasColumnName("last_seen_user_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("last_seen_user_name");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -280,34 +280,34 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("server_ban_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("server_ban_id")
+ .UseIdentityByDefaultColumn();
b.Property?>("Address")
- .HasColumnName("address")
- .HasColumnType("inet");
+ .HasColumnType("inet")
+ .HasColumnName("address");
b.Property("BanTime")
- .HasColumnName("ban_time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("ban_time");
b.Property("BanningAdmin")
- .HasColumnName("banning_admin")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("banning_admin");
b.Property("ExpirationTime")
- .HasColumnName("expiration_time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expiration_time");
b.Property("Reason")
.IsRequired()
- .HasColumnName("reason")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("reason");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -326,21 +326,21 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("unban_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("unban_id")
+ .UseIdentityByDefaultColumn();
b.Property("BanId")
- .HasColumnName("ban_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("ban_id");
b.Property("UnbanTime")
- .HasColumnName("unban_time")
- .HasColumnType("timestamp with time zone");
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("unban_time");
b.Property("UnbanningAdmin")
- .HasColumnName("unbanning_admin")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("unbanning_admin");
b.HasKey("Id");
@@ -354,17 +354,17 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("preference_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("preference_id")
+ .UseIdentityByDefaultColumn();
b.Property("SelectedCharacterSlot")
- .HasColumnName("selected_character_slot")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("selected_character_slot");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("uuid");
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -378,65 +378,75 @@ namespace Content.Server.Database.Migrations.Postgres
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("profile_id")
.HasColumnType("integer")
- .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+ .HasColumnName("profile_id")
+ .UseIdentityByDefaultColumn();
b.Property("Age")
- .HasColumnName("age")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("age");
b.Property("CharacterName")
.IsRequired()
- .HasColumnName("char_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("char_name");
+
+ b.Property("Clothing")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("clothing");
b.Property("EyeColor")
.IsRequired()
- .HasColumnName("eye_color")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("eye_color");
b.Property("FacialHairColor")
.IsRequired()
- .HasColumnName("facial_hair_color")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("facial_hair_color");
b.Property("FacialHairName")
.IsRequired()
- .HasColumnName("facial_hair_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("facial_hair_name");
+
+ b.Property("Gender")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("gender");
b.Property("HairColor")
.IsRequired()
- .HasColumnName("hair_color")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("hair_color");
b.Property("HairName")
.IsRequired()
- .HasColumnName("hair_name")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("hair_name");
b.Property("PreferenceId")
- .HasColumnName("preference_id")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("preference_id");
b.Property("PreferenceUnavailable")
- .HasColumnName("pref_unavailable")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("pref_unavailable");
b.Property("Sex")
.IsRequired()
- .HasColumnName("sex")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("sex");
b.Property("SkinColor")
.IsRequired()
- .HasColumnName("skin_color")
- .HasColumnType("text");
+ .HasColumnType("text")
+ .HasColumnName("skin_color");
b.Property("Slot")
- .HasColumnName("slot")
- .HasColumnType("integer");
+ .HasColumnType("integer")
+ .HasColumnName("slot");
b.HasKey("Id");
@@ -454,6 +464,8 @@ namespace Content.Server.Database.Migrations.Postgres
.WithMany("Admins")
.HasForeignKey("AdminRankId")
.OnDelete(DeleteBehavior.SetNull);
+
+ b.Navigation("AdminRank");
});
modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
@@ -463,6 +475,8 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("AdminId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Admin");
});
modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
@@ -472,6 +486,8 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("AdminRankId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Rank");
});
modelBuilder.Entity("Content.Server.Database.Antag", b =>
@@ -481,6 +497,8 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("ProfileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.Job", b =>
@@ -490,6 +508,8 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("ProfileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.PostgresServerUnban", b =>
@@ -499,6 +519,8 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("Content.Server.Database.PostgresServerUnban", "BanId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Ban");
});
modelBuilder.Entity("Content.Server.Database.Profile", b =>
@@ -508,6 +530,37 @@ namespace Content.Server.Database.Migrations.Postgres
.HasForeignKey("PreferenceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Preference");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Navigation("Admins");
+
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.PostgresServerBan", b =>
+ {
+ b.Navigation("Unban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Navigation("Profiles");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Navigation("Antags");
+
+ b.Navigation("Jobs");
});
#pragma warning restore 612, 618
}
diff --git a/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.Designer.cs
new file mode 100644
index 0000000000..01243e826a
--- /dev/null
+++ b/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.Designer.cs
@@ -0,0 +1,537 @@
+//
+using System;
+using Content.Server.Database;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace Content.Server.Database.Migrations.Sqlite
+{
+ [DbContext(typeof(SqliteServerDbContext))]
+ [Migration("20201203093351_ClothingAndPronouns")]
+ partial class ClothingAndPronouns
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "5.0.0");
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Property("UserId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.Property("AdminRankId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
+
+ b.Property("Title")
+ .HasColumnType("TEXT")
+ .HasColumnName("title");
+
+ b.HasKey("UserId");
+
+ b.HasIndex("AdminRankId");
+
+ b.ToTable("admin");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_flag_id");
+
+ b.Property("AdminId")
+ .HasColumnType("TEXT")
+ .HasColumnName("admin_id");
+
+ b.Property("Flag")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("flag");
+
+ b.Property("Negative")
+ .HasColumnType("INTEGER")
+ .HasColumnName("negative");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AdminId");
+
+ b.HasIndex("Flag", "AdminId")
+ .IsUnique();
+
+ b.ToTable("admin_flag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("name");
+
+ b.HasKey("Id");
+
+ b.ToTable("admin_rank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_flag_id");
+
+ b.Property("AdminRankId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
+
+ b.Property("Flag")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("flag");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AdminRankId");
+
+ b.HasIndex("Flag", "AdminRankId")
+ .IsUnique();
+
+ b.ToTable("admin_rank_flag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Antag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("antag_id");
+
+ b.Property("AntagName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("antag_name");
+
+ b.Property("ProfileId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProfileId", "AntagName")
+ .IsUnique();
+
+ b.ToTable("antag");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AssignedUserId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("assigned_user_id_id");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("user_name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.HasIndex("UserName")
+ .IsUnique();
+
+ b.ToTable("assigned_user_id");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Job", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("job_id");
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("job_name");
+
+ b.Property("Priority")
+ .HasColumnType("INTEGER")
+ .HasColumnName("priority");
+
+ b.Property("ProfileId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProfileId");
+
+ b.ToTable("job");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("preference_id");
+
+ b.Property("SelectedCharacterSlot")
+ .HasColumnType("INTEGER")
+ .HasColumnName("selected_character_slot");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.ToTable("preference");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
+
+ b.Property("Age")
+ .HasColumnType("INTEGER")
+ .HasColumnName("age");
+
+ b.Property("CharacterName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("char_name");
+
+ b.Property("Clothing")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("clothing");
+
+ b.Property("EyeColor")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("eye_color");
+
+ b.Property("FacialHairColor")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("facial_hair_color");
+
+ b.Property("FacialHairName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("facial_hair_name");
+
+ b.Property("Gender")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("gender");
+
+ b.Property("HairColor")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("hair_color");
+
+ b.Property("HairName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("hair_name");
+
+ b.Property("PreferenceId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("preference_id");
+
+ b.Property("PreferenceUnavailable")
+ .HasColumnType("INTEGER")
+ .HasColumnName("pref_unavailable");
+
+ b.Property("Sex")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("sex");
+
+ b.Property("SkinColor")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("skin_color");
+
+ b.Property("Slot")
+ .HasColumnType("INTEGER")
+ .HasColumnName("slot");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PreferenceId");
+
+ b.HasIndex("Slot", "PreferenceId")
+ .IsUnique();
+
+ b.ToTable("profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteConnectionLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("connection_log_id");
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("address");
+
+ b.Property("Time")
+ .HasColumnType("TEXT")
+ .HasColumnName("time");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("user_name");
+
+ b.HasKey("Id");
+
+ b.ToTable("connection_log");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqlitePlayer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("player_id");
+
+ b.Property("FirstSeenTime")
+ .HasColumnType("TEXT")
+ .HasColumnName("first_seen_time");
+
+ b.Property("LastSeenAddress")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_address");
+
+ b.Property("LastSeenTime")
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_time");
+
+ b.Property("LastSeenUserName")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_user_name");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LastSeenUserName");
+
+ b.ToTable("player");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteServerBan", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("ban_id");
+
+ b.Property("Address")
+ .HasColumnType("TEXT")
+ .HasColumnName("address");
+
+ b.Property("BanTime")
+ .HasColumnType("TEXT")
+ .HasColumnName("ban_time");
+
+ b.Property("BanningAdmin")
+ .HasColumnType("TEXT")
+ .HasColumnName("banning_admin");
+
+ b.Property("ExpirationTime")
+ .HasColumnType("TEXT")
+ .HasColumnName("expiration_time");
+
+ b.Property("Reason")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("reason");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id");
+
+ b.ToTable("ban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteServerUnban", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasColumnName("unban_id");
+
+ b.Property("BanId")
+ .HasColumnType("INTEGER")
+ .HasColumnName("ban_id");
+
+ b.Property("UnbanTime")
+ .HasColumnType("TEXT")
+ .HasColumnName("unban_time");
+
+ b.Property("UnbanningAdmin")
+ .HasColumnType("TEXT")
+ .HasColumnName("unbanning_admin");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BanId")
+ .IsUnique();
+
+ b.ToTable("unban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.HasOne("Content.Server.Database.AdminRank", "AdminRank")
+ .WithMany("Admins")
+ .HasForeignKey("AdminRankId")
+ .OnDelete(DeleteBehavior.SetNull);
+
+ b.Navigation("AdminRank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
+ {
+ b.HasOne("Content.Server.Database.Admin", "Admin")
+ .WithMany("Flags")
+ .HasForeignKey("AdminId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Admin");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
+ {
+ b.HasOne("Content.Server.Database.AdminRank", "Rank")
+ .WithMany("Flags")
+ .HasForeignKey("AdminRankId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Rank");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Antag", b =>
+ {
+ b.HasOne("Content.Server.Database.Profile", "Profile")
+ .WithMany("Antags")
+ .HasForeignKey("ProfileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Job", b =>
+ {
+ b.HasOne("Content.Server.Database.Profile", "Profile")
+ .WithMany("Jobs")
+ .HasForeignKey("ProfileId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Profile");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.HasOne("Content.Server.Database.Preference", "Preference")
+ .WithMany("Profiles")
+ .HasForeignKey("PreferenceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Preference");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteServerUnban", b =>
+ {
+ b.HasOne("Content.Server.Database.SqliteServerBan", "Ban")
+ .WithOne("Unban")
+ .HasForeignKey("Content.Server.Database.SqliteServerUnban", "BanId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Navigation("Admins");
+
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Navigation("Profiles");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Navigation("Antags");
+
+ b.Navigation("Jobs");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteServerBan", b =>
+ {
+ b.Navigation("Unban");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.cs b/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.cs
new file mode 100644
index 0000000000..763b9623a8
--- /dev/null
+++ b/Content.Server.Database/Migrations/Sqlite/20201203093351_ClothingAndPronouns.cs
@@ -0,0 +1,35 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace Content.Server.Database.Migrations.Sqlite
+{
+ public partial class ClothingAndPronouns : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "clothing",
+ table: "profile",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: "");
+
+ migrationBuilder.AddColumn(
+ name: "gender",
+ table: "profile",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: "");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "clothing",
+ table: "profile");
+
+ migrationBuilder.DropColumn(
+ name: "gender",
+ table: "profile");
+ }
+ }
+}
diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs
index bf24a18637..f6c1eb5e3a 100644
--- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs
+++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs
@@ -14,22 +14,22 @@ namespace Content.Server.Database.Migrations.Sqlite
{
#pragma warning disable 612, 618
modelBuilder
- .HasAnnotation("ProductVersion", "3.1.4");
+ .HasAnnotation("ProductVersion", "5.0.0");
modelBuilder.Entity("Content.Server.Database.Admin", b =>
{
b.Property("UserId")
.ValueGeneratedOnAdd()
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.Property("AdminRankId")
- .HasColumnName("admin_rank_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
b.Property("Title")
- .HasColumnName("title")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("title");
b.HasKey("UserId");
@@ -42,21 +42,21 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_flag_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_flag_id");
b.Property("AdminId")
- .HasColumnName("admin_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("admin_id");
b.Property("Flag")
.IsRequired()
- .HasColumnName("flag")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("flag");
b.Property("Negative")
- .HasColumnName("negative")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("negative");
b.HasKey("Id");
@@ -72,13 +72,13 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_rank_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
b.Property("Name")
.IsRequired()
- .HasColumnName("name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("name");
b.HasKey("Id");
@@ -89,17 +89,17 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("admin_rank_flag_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_flag_id");
b.Property("AdminRankId")
- .HasColumnName("admin_rank_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("admin_rank_id");
b.Property("Flag")
.IsRequired()
- .HasColumnName("flag")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("flag");
b.HasKey("Id");
@@ -115,17 +115,17 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("antag_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("antag_id");
b.Property("AntagName")
.IsRequired()
- .HasColumnName("antag_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("antag_name");
b.Property("ProfileId")
- .HasColumnName("profile_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
b.HasKey("Id");
@@ -139,17 +139,17 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("assigned_user_id_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("assigned_user_id_id");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.Property("UserName")
.IsRequired()
- .HasColumnName("user_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_name");
b.HasKey("Id");
@@ -166,21 +166,21 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("job_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("job_id");
b.Property("JobName")
.IsRequired()
- .HasColumnName("job_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("job_name");
b.Property("Priority")
- .HasColumnName("priority")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("priority");
b.Property("ProfileId")
- .HasColumnName("profile_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
b.HasKey("Id");
@@ -193,16 +193,16 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("preference_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("preference_id");
b.Property("SelectedCharacterSlot")
- .HasColumnName("selected_character_slot")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("selected_character_slot");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -216,64 +216,74 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("profile_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("profile_id");
b.Property("Age")
- .HasColumnName("age")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("age");
b.Property("CharacterName")
.IsRequired()
- .HasColumnName("char_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("char_name");
+
+ b.Property("Clothing")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("clothing");
b.Property("EyeColor")
.IsRequired()
- .HasColumnName("eye_color")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("eye_color");
b.Property("FacialHairColor")
.IsRequired()
- .HasColumnName("facial_hair_color")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("facial_hair_color");
b.Property("FacialHairName")
.IsRequired()
- .HasColumnName("facial_hair_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("facial_hair_name");
+
+ b.Property("Gender")
+ .IsRequired()
+ .HasColumnType("TEXT")
+ .HasColumnName("gender");
b.Property("HairColor")
.IsRequired()
- .HasColumnName("hair_color")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("hair_color");
b.Property("HairName")
.IsRequired()
- .HasColumnName("hair_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("hair_name");
b.Property("PreferenceId")
- .HasColumnName("preference_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("preference_id");
b.Property("PreferenceUnavailable")
- .HasColumnName("pref_unavailable")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("pref_unavailable");
b.Property("Sex")
.IsRequired()
- .HasColumnName("sex")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("sex");
b.Property("SkinColor")
.IsRequired()
- .HasColumnName("skin_color")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("skin_color");
b.Property("Slot")
- .HasColumnName("slot")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("slot");
b.HasKey("Id");
@@ -289,26 +299,26 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("connection_log_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("connection_log_id");
b.Property("Address")
.IsRequired()
- .HasColumnName("address")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("address");
b.Property("Time")
- .HasColumnName("time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("time");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.Property("UserName")
.IsRequired()
- .HasColumnName("user_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_name");
b.HasKey("Id");
@@ -319,30 +329,30 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("player_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("player_id");
b.Property("FirstSeenTime")
- .HasColumnName("first_seen_time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("first_seen_time");
b.Property("LastSeenAddress")
.IsRequired()
- .HasColumnName("last_seen_address")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_address");
b.Property("LastSeenTime")
- .HasColumnName("last_seen_time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_time");
b.Property("LastSeenUserName")
.IsRequired()
- .HasColumnName("last_seen_user_name")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("last_seen_user_name");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -355,33 +365,33 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("ban_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("ban_id");
b.Property("Address")
- .HasColumnName("address")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("address");
b.Property("BanTime")
- .HasColumnName("ban_time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("ban_time");
b.Property("BanningAdmin")
- .HasColumnName("banning_admin")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("banning_admin");
b.Property("ExpirationTime")
- .HasColumnName("expiration_time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("expiration_time");
b.Property("Reason")
.IsRequired()
- .HasColumnName("reason")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("reason");
b.Property("UserId")
- .HasColumnName("user_id")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("user_id");
b.HasKey("Id");
@@ -392,20 +402,20 @@ namespace Content.Server.Database.Migrations.Sqlite
{
b.Property("Id")
.ValueGeneratedOnAdd()
- .HasColumnName("unban_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("unban_id");
b.Property("BanId")
- .HasColumnName("ban_id")
- .HasColumnType("INTEGER");
+ .HasColumnType("INTEGER")
+ .HasColumnName("ban_id");
b.Property("UnbanTime")
- .HasColumnName("unban_time")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("unban_time");
b.Property("UnbanningAdmin")
- .HasColumnName("unbanning_admin")
- .HasColumnType("TEXT");
+ .HasColumnType("TEXT")
+ .HasColumnName("unbanning_admin");
b.HasKey("Id");
@@ -421,6 +431,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.WithMany("Admins")
.HasForeignKey("AdminRankId")
.OnDelete(DeleteBehavior.SetNull);
+
+ b.Navigation("AdminRank");
});
modelBuilder.Entity("Content.Server.Database.AdminFlag", b =>
@@ -430,6 +442,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("AdminId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Admin");
});
modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b =>
@@ -439,6 +453,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("AdminRankId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Rank");
});
modelBuilder.Entity("Content.Server.Database.Antag", b =>
@@ -448,6 +464,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("ProfileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.Job", b =>
@@ -457,6 +475,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("ProfileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.Profile", b =>
@@ -466,6 +486,8 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("PreferenceId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Preference");
});
modelBuilder.Entity("Content.Server.Database.SqliteServerUnban", b =>
@@ -475,6 +497,37 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasForeignKey("Content.Server.Database.SqliteServerUnban", "BanId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+
+ b.Navigation("Ban");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Admin", b =>
+ {
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.AdminRank", b =>
+ {
+ b.Navigation("Admins");
+
+ b.Navigation("Flags");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Preference", b =>
+ {
+ b.Navigation("Profiles");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.Profile", b =>
+ {
+ b.Navigation("Antags");
+
+ b.Navigation("Jobs");
+ });
+
+ modelBuilder.Entity("Content.Server.Database.SqliteServerBan", b =>
+ {
+ b.Navigation("Unban");
});
#pragma warning restore 612, 618
}
diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs
index 2b2ac59a14..e5d365b602 100644
--- a/Content.Server.Database/Model.cs
+++ b/Content.Server.Database/Model.cs
@@ -91,12 +91,14 @@ namespace Content.Server.Database
[Column("char_name")] public string CharacterName { get; set; } = null!;
[Column("age")] public int Age { get; set; }
[Column("sex")] public string Sex { get; set; } = null!;
+ [Column("gender")] public string Gender { get; set; } = null!;
[Column("hair_name")] public string HairName { get; set; } = null!;
[Column("hair_color")] public string HairColor { get; set; } = null!;
[Column("facial_hair_name")] public string FacialHairName { get; set; } = null!;
[Column("facial_hair_color")] public string FacialHairColor { get; set; } = null!;
[Column("eye_color")] public string EyeColor { get; set; } = null!;
[Column("skin_color")] public string SkinColor { get; set; } = null!;
+ [Column("clothing")] public string Clothing { get; set; } = null!;
public List Jobs { get; } = new();
public List Antags { get; } = new();
diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs
index 0ee380040e..929532fc21 100644
--- a/Content.Server/Database/ServerDbBase.cs
+++ b/Content.Server/Database/ServerDbBase.cs
@@ -9,6 +9,7 @@ using Content.Shared.Preferences;
using Microsoft.EntityFrameworkCore;
using Robust.Shared.Maths;
using Robust.Shared.Network;
+using Robust.Shared.Localization.Macros;
namespace Content.Server.Database
{
@@ -130,10 +131,24 @@ namespace Content.Server.Database
{
var jobs = profile.Jobs.ToDictionary(j => j.JobName, j => (JobPriority) j.Priority);
var antags = profile.Antags.Select(a => a.AntagName);
+
+ var sex = Sex.Male;
+ if (Enum.TryParse