diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index f63b6cd586..97dccfd79f 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -283,7 +283,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered +using System; +using System.Net; +using System.Text.Json; +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; +using NpgsqlTypes; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20250604092320_ClothingRemoval")] + partial class ClothingRemoval + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + 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") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("boolean") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("ban_template_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("interval") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("Trust") + .HasColumnType("real") + .HasColumnName("trust"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("Time"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("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") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CustomColorTint") + .HasColumnType("text") + .HasColumnName("custom_color_tint"); + + b.Property("CustomDescription") + .HasColumnType("text") + .HasColumnName("custom_description"); + + b.Property("CustomHeirloom") + .HasColumnType("boolean") + .HasColumnName("custom_heirloom"); + + b.Property("CustomName") + .HasColumnType("text") + .HasColumnName("custom_name"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + 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") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("CustomSpecieName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("custom_specie_name"); + + b.Property("CyborgName") + .HasColumnType("text") + .HasColumnName("cyborg_name"); + + b.Property("DisplayPronouns") + .HasColumnType("text") + .HasColumnName("display_pronouns"); + + b.Property("Employer") + .IsRequired() + .HasColumnType("text") + .HasColumnName("employer"); + + 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("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + 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("Height") + .HasColumnType("real") + .HasColumnName("height"); + + b.Property("Lifepath") + .IsRequired() + .HasColumnType("text") + .HasColumnName("lifepath"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("Nationality") + .IsRequired() + .HasColumnType("text") + .HasColumnName("nationality"); + + 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.Property("SpawnPriority") + .HasColumnType("integer") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.Property("StationAiName") + .HasColumnType("text") + .HasColumnName("station_ai_name"); + + b.Property("Width") + .HasColumnType("real") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("text") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + 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") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + 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() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ConnectionLogId") + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ConnectionLogId"); + + b1.ToTable("connection_log"); + + b1.WithOwner() + .HasForeignKey("ConnectionLogId") + .HasConstraintName("FK_connection_log_connection_log_connection_log_id"); + }); + + b.Navigation("HWId"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.OwnsOne("Content.Server.Database.TypedHwid", "LastSeenHWId", b1 => + { + b1.Property("PlayerId") + .HasColumnType("integer") + .HasColumnName("player_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("last_seen_hwid_type"); + + b1.HasKey("PlayerId"); + + b1.ToTable("player"); + + b1.WithOwner() + .HasForeignKey("PlayerId") + .HasConstraintName("FK_player_player_player_id"); + }); + + b.Navigation("LastSeenHWId"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ServerBanId") + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ServerBanId"); + + b1.ToTable("server_ban"); + + b1.WithOwner() + .HasForeignKey("ServerBanId") + .HasConstraintName("FK_server_ban_server_ban_server_ban_id"); + }); + + b.Navigation("CreatedBy"); + + b.Navigation("HWId"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ServerRoleBanId") + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ServerRoleBanId"); + + b1.ToTable("server_role_ban"); + + b1.WithOwner() + .HasForeignKey("ServerRoleBanId") + .HasConstraintName("FK_server_role_ban_server_role_ban_server_role_ban_id"); + }); + + b.Navigation("CreatedBy"); + + b.Navigation("HWId"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20250604092320_ClothingRemoval.cs b/Content.Server.Database/Migrations/Postgres/20250604092320_ClothingRemoval.cs new file mode 100644 index 0000000000..1ac30e4407 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20250604092320_ClothingRemoval.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class ClothingRemoval : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "backpack", + table: "profile"); + + migrationBuilder.DropColumn( + name: "clothing", + table: "profile"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "backpack", + table: "profile", + type: "text", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "clothing", + table: "profile", + type: "text", + nullable: false, + defaultValue: ""); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index 70c35a3593..80a698e4d9 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -834,11 +834,6 @@ namespace Content.Server.Database.Migrations.Postgres .HasColumnType("integer") .HasColumnName("age"); - b.Property("Backpack") - .IsRequired() - .HasColumnType("text") - .HasColumnName("backpack"); - b.Property("BodyType") .IsRequired() .HasColumnType("text") @@ -849,11 +844,6 @@ namespace Content.Server.Database.Migrations.Postgres .HasColumnType("text") .HasColumnName("char_name"); - b.Property("Clothing") - .IsRequired() - .HasColumnType("text") - .HasColumnName("clothing"); - b.Property("ClownName") .HasColumnType("text") .HasColumnName("clown_name"); diff --git a/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.Designer.cs new file mode 100644 index 0000000000..5fb1c3e56e --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.Designer.cs @@ -0,0 +1,1974 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20250604092224_ClothingRemoval")] + partial class ClothingRemoval + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.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") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + 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") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("Dismissed") + .HasColumnType("INTEGER") + .HasColumnName("dismissed"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", null, t => + { + t.HasCheckConstraint("NotDismissedAndSeen", "NOT dismissed OR seen"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + 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") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + 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") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + 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") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + 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") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("ban_template_id"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("Length") + .HasColumnType("TEXT") + .HasColumnName("length"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.Property("Title") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("Id") + .HasName("PK_ban_template"); + + b.ToTable("ban_template", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("Trust") + .HasColumnType("REAL") + .HasColumnName("trust"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("Time"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + 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") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("loadout_id"); + + b.Property("CustomColorTint") + .HasColumnType("TEXT") + .HasColumnName("custom_color_tint"); + + b.Property("CustomDescription") + .HasColumnType("TEXT") + .HasColumnName("custom_description"); + + b.Property("CustomHeirloom") + .HasColumnType("INTEGER") + .HasColumnName("custom_heirloom"); + + b.Property("CustomName") + .HasColumnType("TEXT") + .HasColumnName("custom_name"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_loadout"); + + b.HasIndex("ProfileId", "LoadoutName") + .IsUnique(); + + b.ToTable("loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + 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") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + 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("CustomSpecieName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("custom_specie_name"); + + b.Property("CyborgName") + .HasColumnType("TEXT") + .HasColumnName("cyborg_name"); + + b.Property("DisplayPronouns") + .HasColumnType("TEXT") + .HasColumnName("display_pronouns"); + + b.Property("Employer") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("employer"); + + 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("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + 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("Height") + .HasColumnType("REAL") + .HasColumnName("height"); + + b.Property("Lifepath") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("lifepath"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("Nationality") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("nationality"); + + 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.Property("SpawnPriority") + .HasColumnType("INTEGER") + .HasColumnName("spawn_priority"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.Property("StationAiName") + .HasColumnType("TEXT") + .HasColumnName("station_ai_name"); + + b.Property("Width") + .HasColumnType("REAL") + .HasColumnName("width"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("RoleId") + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.HasKey("PlayerUserId", "RoleId") + .HasName("PK_role_whitelists"); + + b.ToTable("role_whitelists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .HasColumnType("TEXT") + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_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("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_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") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", 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") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + 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() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ConnectionLogId") + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ConnectionLogId"); + + b1.ToTable("connection_log"); + + b1.WithOwner() + .HasForeignKey("ConnectionLogId") + .HasConstraintName("FK_connection_log_connection_log_connection_log_id"); + }); + + b.Navigation("HWId"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Loadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.OwnsOne("Content.Server.Database.TypedHwid", "LastSeenHWId", b1 => + { + b1.Property("PlayerId") + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("last_seen_hwid_type"); + + b1.HasKey("PlayerId"); + + b1.ToTable("player"); + + b1.WithOwner() + .HasForeignKey("PlayerId") + .HasConstraintName("FK_player_player_player_id"); + }); + + b.Navigation("LastSeenHWId"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("JobWhitelists") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_role_whitelists_player_player_user_id"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ServerBanId") + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ServerBanId"); + + b1.ToTable("server_ban"); + + b1.WithOwner() + .HasForeignKey("ServerBanId") + .HasConstraintName("FK_server_ban_server_ban_server_ban_id"); + }); + + b.Navigation("CreatedBy"); + + b.Navigation("HWId"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.OwnsOne("Content.Server.Database.TypedHwid", "HWId", b1 => + { + b1.Property("ServerRoleBanId") + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b1.Property("Hwid") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b1.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("hwid_type"); + + b1.HasKey("ServerRoleBanId"); + + b1.ToTable("server_role_ban"); + + b1.WithOwner() + .HasForeignKey("ServerRoleBanId") + .HasConstraintName("FK_server_role_ban_server_role_ban_server_role_ban_id"); + }); + + b.Navigation("CreatedBy"); + + b.Navigation("HWId"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + + b.Navigation("JobWhitelists"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Loadouts"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.cs b/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.cs new file mode 100644 index 0000000000..dd69ef2c3a --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20250604092224_ClothingRemoval.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class ClothingRemoval : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "backpack", + table: "profile"); + + migrationBuilder.DropColumn( + name: "clothing", + table: "profile"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "backpack", + table: "profile", + type: "TEXT", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "clothing", + table: "profile", + type: "TEXT", + nullable: false, + defaultValue: ""); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index 5c7748c71b..c4728d395a 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -783,11 +783,6 @@ namespace Content.Server.Database.Migrations.Sqlite .HasColumnType("INTEGER") .HasColumnName("age"); - b.Property("Backpack") - .IsRequired() - .HasColumnType("TEXT") - .HasColumnName("backpack"); - b.Property("BodyType") .IsRequired() .HasColumnType("TEXT") @@ -798,11 +793,6 @@ namespace Content.Server.Database.Migrations.Sqlite .HasColumnType("TEXT") .HasColumnName("char_name"); - b.Property("Clothing") - .IsRequired() - .HasColumnType("TEXT") - .HasColumnName("clothing"); - b.Property("ClownName") .HasColumnType("TEXT") .HasColumnName("clown_name"); diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index 0a7342cd5c..9117b75f3a 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -413,8 +413,6 @@ namespace Content.Server.Database public string FacialHairColor { get; set; } = null!; public string EyeColor { get; set; } = null!; public string SkinColor { get; set; } = null!; - public string Clothing { get; set; } = null!; - public string Backpack { get; set; } = null!; public int SpawnPriority { get; set; } = 0; public List Jobs { get; } = new(); public List Antags { get; } = new(); diff --git a/Content.Server/Administration/Commands/SetOutfitCommand.cs b/Content.Server/Administration/Commands/SetOutfitCommand.cs index 54e36a91ec..8e37c09fba 100644 --- a/Content.Server/Administration/Commands/SetOutfitCommand.cs +++ b/Content.Server/Administration/Commands/SetOutfitCommand.cs @@ -108,7 +108,7 @@ namespace Content.Server.Administration.Commands foreach (var slot in slots) { invSystem.TryUnequip(target, slot.Name, true, true, false, inventoryComponent); - var gearStr = startingGear.GetGear(slot.Name, profile); + var gearStr = startingGear.GetGear(slot.Name); if (gearStr == string.Empty) { continue; diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 7d2e93827b..141a1c63c0 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -190,14 +190,6 @@ namespace Content.Server.Database if (Enum.TryParse(profile.Sex, true, out var sexVal)) sex = sexVal; - var clothing = ClothingPreference.Jumpsuit; - if (Enum.TryParse(profile.Clothing, true, out var clothingVal)) - clothing = clothingVal; - - var backpack = BackpackPreference.Backpack; - if (Enum.TryParse(profile.Backpack, true, out var backpackVal)) - backpack = backpackVal; - var spawnPriority = (SpawnPriorityPreference) profile.SpawnPriority; var gender = sex == Sex.Male ? Gender.Male : Gender.Female; @@ -256,8 +248,6 @@ namespace Content.Server.Database ), spawnPriority, jobs, - clothing, - backpack, (PreferenceUnavailableMode) profile.PreferenceUnavailable, antags.ToHashSet(), traits.ToHashSet(), @@ -304,8 +294,6 @@ namespace Content.Server.Database profile.FacialHairColor = appearance.FacialHairColor.ToHex(); profile.EyeColor = appearance.EyeColor.ToHex(); profile.SkinColor = appearance.SkinColor.ToHex(); - profile.Clothing = humanoid.Clothing.ToString(); - profile.Backpack = humanoid.Backpack.ToString(); profile.SpawnPriority = (int) humanoid.SpawnPriority; profile.Markings = markings; profile.Slot = slot; diff --git a/Content.Shared/Preferences/BackpackPreference.cs b/Content.Shared/Preferences/BackpackPreference.cs deleted file mode 100644 index da2c4b8fe8..0000000000 --- a/Content.Shared/Preferences/BackpackPreference.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Content.Shared.Preferences -{ - /// - /// The backpack preference for a profile. Stored in database! - /// - public enum BackpackPreference - { - Backpack, - Satchel, - Duffelbag - } -} diff --git a/Content.Shared/Preferences/ClothingPreference.cs b/Content.Shared/Preferences/ClothingPreference.cs deleted file mode 100644 index 24a4b206c7..0000000000 --- a/Content.Shared/Preferences/ClothingPreference.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Shared.Preferences -{ - /// - /// The clothing preference for a profile. Stored in database! - /// - public enum ClothingPreference - { - Jumpsuit, - Jumpskirt - } -} diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index 26cc2d5763..d89f4d64b1 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -122,11 +122,6 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile [DataField] public HumanoidCharacterAppearance Appearance { get; set; } = new(); - [DataField] - public ClothingPreference Clothing { get; set; } - [DataField] - public BackpackPreference Backpack { get; set; } - /// When spawning into a round what's the preferred spot to spawn [DataField] public SpawnPriorityPreference SpawnPriority { get; private set; } = SpawnPriorityPreference.None; @@ -169,8 +164,6 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile HumanoidCharacterAppearance appearance, SpawnPriorityPreference spawnPriority, Dictionary, JobPriority> jobPriorities, - ClothingPreference clothing, - BackpackPreference backpack, PreferenceUnavailableMode preferenceUnavailable, HashSet> antagPreferences, HashSet> traitPreferences, @@ -199,8 +192,6 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile Appearance = appearance; SpawnPriority = spawnPriority; _jobPriorities = jobPriorities; - Clothing = clothing; - Backpack = backpack; PreferenceUnavailable = preferenceUnavailable; _antagPreferences = antagPreferences; _traitPreferences = traitPreferences; @@ -247,8 +238,6 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile other.Appearance.Clone(), other.SpawnPriority, new Dictionary, JobPriority>(other.JobPriorities), - other.Clothing, - other.Backpack, other.PreferenceUnavailable, new HashSet>(other.AntagPreferences), new HashSet>(other.TraitPreferences), @@ -387,10 +376,7 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile public HumanoidCharacterProfile WithCharacterAppearance(HumanoidCharacterAppearance appearance) => new(this) { Appearance = appearance }; - public HumanoidCharacterProfile WithClothingPreference(ClothingPreference clothing) => - new(this) { Clothing = clothing }; - public HumanoidCharacterProfile WithBackpackPreference(BackpackPreference backpack) => - new(this) { Backpack = backpack }; + public HumanoidCharacterProfile WithSpawnPriorityPreference(SpawnPriorityPreference spawnPriority) => new(this) { SpawnPriority = spawnPriority }; diff --git a/Content.Shared/Roles/StartingGearPrototype.cs b/Content.Shared/Roles/StartingGearPrototype.cs index fca4849467..d36bf6d598 100644 --- a/Content.Shared/Roles/StartingGearPrototype.cs +++ b/Content.Shared/Roles/StartingGearPrototype.cs @@ -12,18 +12,6 @@ public sealed partial class StartingGearPrototype : IPrototype, IInheritingProto [AlwaysPushInheritance] public Dictionary Equipment = new(); - /// - /// If empty, there is no skirt override - instead the uniform provided in equipment is added. - /// - [DataField] - public EntProtoId? InnerClothingSkirt; - - [DataField] - public EntProtoId? Satchel; - - [DataField] - public EntProtoId? Duffelbag; - [DataField] [AlwaysPushInheritance] public List Inhand = new(0); @@ -64,23 +52,8 @@ public sealed partial class StartingGearPrototype : IPrototype, IInheritingProto [NeverPushInheritance] public bool Abstract { get; } - public string GetGear(string slot, HumanoidCharacterProfile? profile) + public string GetGear(string slot) { - if (profile != null) - { - switch (slot) - { - case "jumpsuit" when profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt): - case "jumpsuit" when profile.Species == "Harpy" && !string.IsNullOrEmpty(InnerClothingSkirt): - case "jumpsuit" when profile.Species == "Lamia" && !string.IsNullOrEmpty(InnerClothingSkirt): - return InnerClothingSkirt; - case "back" when profile.Backpack == BackpackPreference.Satchel && !string.IsNullOrEmpty(Satchel): - return Satchel; - case "back" when profile.Backpack == BackpackPreference.Duffelbag && !string.IsNullOrEmpty(Duffelbag): - return Duffelbag; - } - } - return Equipment.TryGetValue(slot, out var equipment) ? equipment : string.Empty; } } diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index 95c3f4f7f1..77bbe0767e 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -95,7 +95,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem { foreach (var slot in slotDefinitions) { - var equipmentStr = startingGear.GetGear(slot.Name, null); + var equipmentStr = startingGear.GetGear(slot.Name); if (string.IsNullOrEmpty(equipmentStr)) continue; @@ -209,9 +209,6 @@ public abstract class SharedStationSpawningSystem : EntitySystem newStartingGear = new StartingGearPrototype() { Equipment = startingGear.Equipment.ToDictionary(static entry => entry.Key, static entry => entry.Value), - InnerClothingSkirt = startingGear.InnerClothingSkirt, - Satchel = startingGear.Satchel, - Duffelbag = startingGear.Duffelbag, Inhand = new List(startingGear.Inhand), Storage = startingGear.Storage.ToDictionary( static entry => entry.Key, @@ -220,16 +217,6 @@ public abstract class SharedStationSpawningSystem : EntitySystem }; } - // Apply the sub-gear's equipment to this starting gear - if (subGearProto.InnerClothingSkirt != null) - newStartingGear.InnerClothingSkirt = subGearProto.InnerClothingSkirt; - - if (subGearProto.Satchel != null) - newStartingGear.Satchel = subGearProto.Satchel; - - if (subGearProto.Duffelbag != null) - newStartingGear.Duffelbag = subGearProto.Duffelbag; - foreach (var (slot, entProtoId) in subGearProto.Equipment) { // Don't remove items in pockets, instead put them in the backpack or hands @@ -238,7 +225,7 @@ public abstract class SharedStationSpawningSystem : EntitySystem { var pocketProtoId = slot == "pocket1" ? pocket1 : pocket2; - if (string.IsNullOrEmpty(newStartingGear.GetGear("back", null))) + if (string.IsNullOrEmpty(newStartingGear.GetGear("back"))) newStartingGear.Inhand.Add(pocketProtoId); else { diff --git a/Resources/Prototypes/Roles/Antags/pirate.yml b/Resources/Prototypes/Roles/Antags/pirate.yml index d4eaced235..b2b7532220 100644 --- a/Resources/Prototypes/Roles/Antags/pirate.yml +++ b/Resources/Prototypes/Roles/Antags/pirate.yml @@ -8,9 +8,6 @@ id: PiratePDA belt: ClothingBeltUtility pocket1: AppraisalTool - innerClothingSkirt: ClothingUniformJumpsuitPirate - satchel: ClothingBackpackPirateFilled - duffelbag: ClothingBackpackPirateFilled - type: startingGear id: PirateCaptainGear @@ -24,9 +21,6 @@ pocket1: AppraisalTool pocket2: EnergyCutlass outerClothing: ClothingOuterCoatPirate - innerClothingSkirt: ClothingUniformJumpskirtColorLightBrown - satchel: ClothingBackpackPirateFilled - duffelbag: ClothingBackpackPirateFilled - type: startingGear id: PirateFirstmateGear @@ -39,6 +33,3 @@ belt: ClothingBeltUtility pocket1: AppraisalTool outerClothing: ClothingOuterCoatGentle - innerClothingSkirt: ClothingUniformJumpsuitPirate - satchel: ClothingBackpackPirateFilled - duffelbag: ClothingBackpackPirateFilled diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml index 5145877bb3..f8fc355ca1 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml @@ -11,7 +11,7 @@ - Maintenance extendedAccess: - Salvage - - Orders # DeltaV - Orders, see Resources/Prototypes/DeltaV/Access/cargo.yml + - Orders requirements: - !type:CharacterEmployerRequirement employers: @@ -30,9 +30,6 @@ id: CargoPDA ears: ClothingHeadsetCargo pocket1: AppraisalTool - innerClothingSkirt: ClothingUniformJumpskirtCargo - satchel: ClothingBackpackSatchelCargoFilled - duffelbag: ClothingBackpackDuffelCargoFilled - type: startingGear id: CargoTechPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 9ce877ef6f..d89caa4c8a 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -25,12 +25,12 @@ access: - Cargo - Salvage - - Mail # Nyanotrasen - MailCarrier, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Cargo/mail-carrier.yml + - Mail - Quartermaster - Maintenance - Command - - Orders # DeltaV - Orders, see Resources/Prototypes/DeltaV/Access/cargo.yml - - External # DeltaV - for promoting salvage specialists + - Orders + - External - Cryogenics special: - !type:AddImplantSpecial @@ -52,12 +52,9 @@ back: ClothingBackpackQuartermasterFilled shoes: ClothingShoesColorBrown id: QuartermasterPDA - ears: ClothingHeadsetAltCargo # Goobstation + ears: ClothingHeadsetAltCargo belt: BoxFolderClipboard pocket1: AppraisalTool - innerClothingSkirt: ClothingUniformJumpskirtQM - satchel: ClothingBackpackSatchelQuartermasterFilled - duffelbag: ClothingBackpackDuffelQuartermasterFilled - type: startingGear id: QuartermasterPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml index d8f567a923..3a49736c84 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml @@ -4,16 +4,16 @@ description: job-description-salvagespec playTimeTracker: JobSalvageSpecialist requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP - # department: Logistics # DeltaV - Logistics Department replacing Cargo - # min: 21600 #DeltaV 6 hrs + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement + # department: Logistics + # min: 21600 + # WD EDIT END - !type:CharacterEmployerRequirement employers: - OrionExpress - PMCG - NanoTrasen - # - !type:OverallPlaytimeRequirement #DeltaV - # time: 36000 #10 hrs icon: "JobIconShaftMiner" startingGear: SalvageSpecialistGear supervisors: job-supervisors-qm @@ -30,12 +30,10 @@ equipment: jumpsuit: ClothingUniformJumpsuitSalvageSpecialist back: ClothingBackpackSalvageFilled - shoes: ClothingShoesBootsSalvageFilled # WWDP + shoes: ClothingShoesBootsSalvageFilled # WD EDIT: ClothingShoesBootsSalvage -> ClothingShoesBootsSalvageFilled id: SalvagePDA ears: ClothingHeadsetCargo - # pocket1: MiningVoucher # WWDP - satchel: ClothingBackpackSatchelSalvageFilled - duffelbag: ClothingBackpackDuffelSalvageFilled + pocket1: MiningVoucher - type: startingGear id: SalvageSpecialistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml index dce7969682..df0a7a46d5 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/assistant.yml @@ -19,9 +19,6 @@ shoes: ClothingShoesColorBlack id: PassengerPDA ears: ClothingHeadsetGrey - innerClothingSkirt: ClothingUniformJumpskirtColorGrey - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: PassengerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml index 78e498273d..30da0e5513 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml @@ -35,9 +35,6 @@ shoes: ClothingShoesColorBlack id: BartenderPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtBartender - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: BartenderPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/botanist.yml b/Resources/Prototypes/Roles/Jobs/Civilian/botanist.yml index 448511d106..37a376ed43 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/botanist.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/botanist.yml @@ -32,9 +32,6 @@ ears: ClothingHeadsetService outerClothing: ClothingOuterApronBotanist belt: ClothingBeltPlantFilled - innerClothingSkirt: ClothingUniformJumpskirtHydroponics - satchel: ClothingBackpackSatchelHydroponicsFilled - duffelbag: ClothingBackpackDuffelHydroponicsFilled - type: startingGear id: BotanistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml index d95e39d94a..779c3ad469 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml @@ -54,9 +54,6 @@ id: ChaplainPDA ears: ClothingHeadsetScience pocket1: BookPsionicsGuidebook - innerClothingSkirt: ClothingUniformJumpskirtChaplain - satchel: ClothingBackpackSatchelChaplainFilled - duffelbag: ClothingBackpackDuffelChaplainFilled - type: startingGear id: ChaplainPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml index 1b8da7d2c1..a0da8ede9e 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml @@ -4,9 +4,11 @@ description: job-description-chef playTimeTracker: JobChef requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement # department: Civilian - # min: 3600 #DeltaV 1 hour + # min: 3600 + # WD EDIT END - !type:CharacterEmployerRequirement employers: - NanoTrasen @@ -21,13 +23,13 @@ - Kitchen extendedAccess: - Hydroponics - - Bar #Nyano - Summary: After this line, Professional Che is a component to be added. Very important. + - Bar special: - !type:AddComponentSpecial components: - - type: ProfessionalChef #Nyano - End Summary. - - type: GrantCqc # Goobstation - Martial Arts - isBlocked: true # Goobstation - Martial Arts + - type: ProfessionalChef + - type: GrantCqc + isBlocked: true - type: startingGear id: ChefGear @@ -43,9 +45,6 @@ ears: ClothingHeadsetService outerClothing: ClothingOuterApronChef belt: ClothingBeltChefFilled - innerClothingSkirt: ClothingUniformJumpskirtChef - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: ChefPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index e9c7551433..7a0b99b3c2 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -9,7 +9,7 @@ access: - Theatre - Maintenance - - Clown # DeltaV - Add Clown access + - Clown special: - !type:AddComponentSpecial components: @@ -40,8 +40,6 @@ pocket2: ClownRecorder id: ClownPDA ears: ClothingHeadsetService - satchel: ClothingBackpackSatchelClownFilled - duffelbag: ClothingBackpackDuffelClownFilled - type: startingGear id: ClownPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml index ac097e7e30..2dcaf3e1fc 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml @@ -28,9 +28,6 @@ gloves: ClothingHandsGlovesJanitor ears: ClothingHeadsetService belt: ClothingBeltJanitorFilled - innerClothingSkirt: ClothingUniformJumpskirtJanitor - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: JanitorPlasmamanGear @@ -50,6 +47,3 @@ head: ClothingHeadHatCatEars ears: ClothingHeadsetService belt: ClothingBeltJanitorFilled - innerClothingSkirt: ClothingUniformJumpskirtJanimaid - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml index 07564a85c5..515625b631 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml @@ -30,9 +30,6 @@ pocket2: BookSpaceLaw inhand: - BriefcaseBrownFilled - innerClothingSkirt: ClothingUniformJumpskirtLawyerBlack - satchel: ClothingBackpackSatchelLawyerFilled - duffelbag: ClothingBackpackDuffelLawyerFilled - type: startingGear id: LawyerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml index c0375dcd5b..b33d843063 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml @@ -56,9 +56,6 @@ ears: ClothingHeadsetScience pocket1: BookPsionicsGuidebook pocket2: HandLabeler - innerClothingSkirt: ClothingUniformJumpskirtLibrarian - satchel: ClothingBackpackSatchelLibrarianFilled - duffelbag: ClothingBackpackDuffelLibrarianFilled - type: startingGear id: LibrarianPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml index 84176ae0bf..09c2bdc5ed 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml @@ -9,7 +9,7 @@ access: - Theatre - Maintenance - - Mime # DeltaV - Add Mime access + - Mime special: - !type:AddComponentSpecial components: @@ -32,9 +32,6 @@ mask: ClothingMaskMime id: MimePDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtMime - satchel: ClothingBackpackSatchelMimeFilled - duffelbag: ClothingBackpackDuffelMimeFilled - type: startingGear id: MimePlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/musician.yml b/Resources/Prototypes/Roles/Jobs/Civilian/musician.yml index 113b0fccac..b6bf626a9b 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/musician.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/musician.yml @@ -9,7 +9,7 @@ access: - Maintenance # TODO Remove maint access for all gimmick jobs once access work is completed - Theatre - - Musician # DeltaV - Add Musician access + - Musician special: - !type:GiveItemOnHolidaySpecial holiday: MikuDay @@ -26,8 +26,6 @@ shoes: ClothingShoesBootsLaceup id: MusicianPDA ears: ClothingHeadsetService - satchel: ClothingBackpackSatchelMusicianFilled - duffelbag: ClothingBackpackDuffelMusicianFilled - type: startingGear id: MusicianPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml index a37d49de2d..447a1bc337 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml @@ -6,14 +6,13 @@ startingGear: ServiceWorkerGear icon: "JobIconServiceWorker" supervisors: job-supervisors-service - canBeAntag: true # DeltaV - Can be antagonist access: - Service - Maintenance extendedAccess: - Hydroponics - - Bar # DeltaV - moved to extended access - - Kitchen # DeltaV - moved to extended access + - Bar + - Kitchen requirements: - !type:CharacterEmployerRequirement inverted: true @@ -25,14 +24,11 @@ subGear: - ServiceWorkerPlasmamanGear equipment: - jumpsuit: ClothingUniformJumpsuitColorDarkGreen # DeltaV + jumpsuit: ClothingUniformJumpsuitColorDarkGreen back: ClothingBackpackFilled shoes: ClothingShoesColorBlack id: ServiceWorkerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorDarkGreen # DeltaV - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: ServiceWorkerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index 18bdd79617..0449da6cda 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -47,9 +47,6 @@ shoes: ClothingShoesBootsLaceup id: CaptainPDA ears: ClothingHeadsetAltCommand - innerClothingSkirt: ClothingUniformJumpskirtCaptain - satchel: ClothingBackpackSatchelCaptainFilled - duffelbag: ClothingBackpackDuffelCaptainFilled - type: startingGear id: CaptainPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index 1a56f99b7a..b9224d302b 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -14,9 +14,7 @@ employers: - NanoTrasen - IdrisIncorporated - - !type:CharacterOverallTimeRequirement # WWDP - min: 7200 - weight: 10 # DeltaV - Changed HoP weight from 20 to 10 due to them not being more important than other Heads + weight: 10 startingGear: HoPGear icon: "JobIconHeadOfPersonnel" requireAdminNotify: true @@ -31,33 +29,29 @@ - Janitor - Theatre - Kitchen - - Chapel # WD EDIT - Hydroponics - External - Cryogenics - # I mean they'll give themselves the rest of the access levels *anyways*. - # As of 15/03/23 they can't do that so here's MOST of the rest of the access levels. - # Head level access that isn't their own was deliberately left out, get AA from the captain instead. - # Delta V - fuck all of this HoP is a service role + - Lawyer + - Cargo + - Boxer + - Clown + - Library + - Mime + - Musician + - Reporter + - Zookeeper + # WD EDIT START + - Atmospherics + - Medical - Chemistry + - Chapel - Engineering - Research - Detective - Salvage - - Security # NoooOoOo!! My HoPcurity!1 + - Security - Brig - - Lawyer - - Cargo - - Atmospherics - - Medical - - Boxer # WD EDIT - - Clown # WD EDIT - - Library # WD EDIT - - Mime # WD EDIT - - Musician # WD EDIT - - Reporter # WD EDIT - - Zookeeper - # WD EDIT START - Quartermaster - Mail - Paramedic @@ -83,12 +77,9 @@ equipment: jumpsuit: ClothingUniformJumpsuitHoP back: ClothingBackpackHOPFilled - shoes: ClothingShoesLeather # DeltaV - HoP needs something better than plebe shoes. + shoes: ClothingShoesLeather id: HoPPDA - ears: ClothingHeadsetHoP # DeltaV - HoP is now a service role, replaces their all channels headset. - innerClothingSkirt: ClothingUniformJumpskirtHoP - satchel: ClothingBackpackSatchelHOPFilled - duffelbag: ClothingBackpackDuffelHOPFilled + ears: ClothingHeadsetHoP - type: startingGear id: HoPPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml index 5ca1dcffc0..899b1994d7 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml @@ -4,16 +4,20 @@ description: job-description-atmostech playTimeTracker: JobAtmosphericTechnician requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement # department: Engineering - # min: 36000 # DeltaV - 10 hours + # min: 36000 + # WD EDIT END - !type:CharacterEmployerRequirement employers: - HephaestusIndustries - EinsteinEngines - NanoTrasen - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 3600 + # WD EDIT END startingGear: AtmosphericTechnicianGear icon: "JobIconAtmosphericTechnician" supervisors: job-supervisors-ce @@ -27,16 +31,12 @@ id: AtmosphericTechnicianGear subGear: - AtmosphericTechnicianPlasmamanGear - equipment: jumpsuit: ClothingUniformJumpsuitAtmos back: ClothingBackpackAtmospherics shoes: ClothingShoesColorWhite id: AtmosPDA ears: ClothingHeadsetEngineering - innerClothingSkirt: ClothingUniformJumpskirtAtmos - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled - type: startingGear id: AtmosphericTechnicianPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index 4d685d3aad..f4bbfba705 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -51,10 +51,7 @@ back: ClothingBackpackChiefEngineerFilled shoes: ClothingShoesColorBrown id: CEPDA - ears: ClothingHeadsetAltEngineering # Goobstation - innerClothingSkirt: ClothingUniformJumpskirtChiefEngineer - satchel: ClothingBackpackSatchelChiefEngineerFilled - duffelbag: ClothingBackpackDuffelChiefEngineerFilled + ears: ClothingHeadsetAltEngineering - type: startingGear id: ChiefEngineerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml index aa5f82f5fe..8592ffc157 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml @@ -44,6 +44,3 @@ # eyes: ClothingEyesGlassesMeson # WWDP # belt: ClothingBeltUtilityEngineering # WWDP ears: ClothingHeadsetEngineering - innerClothingSkirt: ClothingUniformJumpskirtSeniorEngineer - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml index 54184be64c..dd6d2f24bb 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml @@ -37,9 +37,6 @@ # eyes: ClothingEyesGlassesMeson # WWDP # belt: ClothingBeltUtilityEngineering # WWDP ears: ClothingHeadsetEngineering - innerClothingSkirt: ClothingUniformJumpskirtEngineering - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled - type: startingGear id: StationEngineerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml index 5a29508c5f..254bebeef9 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml @@ -6,7 +6,6 @@ startingGear: TechnicalAssistantGear icon: "JobIconTechnicalAssistant" supervisors: job-supervisors-engineering - canBeAntag: true # DeltaV - Can be antagonist access: - Maintenance - Engineering @@ -28,9 +27,6 @@ back: ClothingBackpackEngineeringFilled shoes: ClothingShoesBootsWork id: TechnicalAssistantPDA - # belt: ClothingBeltUtilityEngineering # WWDP + # belt: ClothingBeltUtilityEngineering - WD EDIT ears: ClothingHeadsetEngineering - pocket1: BookEngineersHandbook - innerClothingSkirt: ClothingUniformJumpskirtColorYellow - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled + pocket2: BookEngineersHandbook diff --git a/Resources/Prototypes/Roles/Jobs/Fun/cult_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/cult_startinggear.yml index 6c97d37799..8748367830 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/cult_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/cult_startinggear.yml @@ -10,9 +10,6 @@ shoes: ClothingShoesCult id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorBlack - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: CultistGear @@ -24,6 +21,3 @@ shoes: ClothingShoesColorRed id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorBlack - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index b14985c258..f07ed28d2a 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -13,9 +13,6 @@ shoes: ClothingShoesBootsJack id: PassengerPDA ears: ClothingHeadsetGrey - innerClothingSkirt: ClothingUniformJumpskirtColorBlack - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled # Syndicate Operative Outfit - Civilian - type: startingGear @@ -63,17 +60,16 @@ jumpsuit: ClothingUniformJumpsuitDeathSquad back: ClothingBackpackDeathSquadFilled mask: ClothingMaskGasDeathSquad - eyes: ClothingEyesGlassesMedSec # WWDP + eyes: ClothingEyesGlassesMedSec # WD EDIT: ClothingEyesHudSecurity -> ClothingEyesGlassesMedSec ears: ClothingHeadsetAltCentCom gloves: ClothingHandsGlovesCombat outerClothing: ClothingOuterHardsuitDeathsquad - suitstorage: OxygenTankFilled # WWDP - shoes: ClothingShoesBootsMagSecAdv # WWDP + suitstorage: OxygenTankFilled # WD EDIT: AirTankFilled -> OxygenTankFilled + shoes: ClothingShoesBootsMagAdv # WD EDI: ClothingShoesBootsMagAdv -> ClothingShoesBootsMagSecAdv id: DeathsquadPDA pocket1: EnergySword pocket2: EnergyShield - belt: ClothingBeltMilitaryWebbingDeathsquadFilled # WWDP - innerClothingSkirt: ClothingUniformJumpsuitDeathSquad # WWDP + belt: ClothingBeltMilitaryWebbingDeathsquadFilled # WD EDIT: ClothingBeltMilitaryWebbingMedFilled -> ClothingBeltMilitaryWebbingDeathsquadFilled #Syndicate Operative Outfit - Full Kit - type: startingGear @@ -93,9 +89,6 @@ pocket1: DoubleEmergencyOxygenTankFilled pocket2: BaseUplinkRadio40TC belt: ClothingBeltMilitaryWebbing - innerClothingSkirt: ClothingUniformJumpskirtOperative - satchel: ClothingBackpackDuffelSyndicateOperative - duffelbag: ClothingBackpackDuffelSyndicateOperative #Nuclear Operative Commander Gear - type: startingGear @@ -118,9 +111,6 @@ belt: ClothingBeltMilitaryWebbing inhand: - NukeOpsDeclarationOfWar - innerClothingSkirt: ClothingUniformJumpskirtOperative - satchel: ClothingBackpackDuffelSyndicateOperative - duffelbag: ClothingBackpackDuffelSyndicateOperative #Nuclear Operative Medic Gear - type: startingGear @@ -140,9 +130,6 @@ pocket1: DoubleEmergencyOxygenTankFilled pocket2: BaseUplinkRadio40TC belt: ClothingBeltMilitaryWebbingMedFilled - innerClothingSkirt: ClothingUniformJumpskirtOperative - satchel: ClothingBackpackDuffelSyndicateOperativeMedic - duffelbag: ClothingBackpackDuffelSyndicateOperativeMedic #Syndicate Lone Operative Outfit - Full Kit - type: startingGear @@ -160,9 +147,6 @@ pocket1: DoubleEmergencyOxygenTankFilled pocket2: BaseUplinkRadio60TC belt: ClothingBeltMilitaryWebbing - innerClothingSkirt: ClothingUniformJumpskirtOperative - satchel: ClothingBackpackDuffelSyndicateOperative - duffelbag: ClothingBackpackDuffelSyndicateOperative # Syndicate Footsoldier Gear - type: startingGear @@ -179,9 +163,6 @@ back: ClothingBackpackFilled shoes: ClothingShoesBootsCombat id: SyndiPDA - innerClothingSkirt: ClothingUniformJumpsuitOperative - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelSyndicateOperative # Syndicate Footsoldier Gear - No Headset - type: startingGear @@ -197,9 +178,6 @@ back: ClothingBackpackFilled shoes: ClothingShoesBootsCombat id: SyndiPDA - innerClothingSkirt: ClothingUniformJumpsuitOperative - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelSyndicateOperative # Nanotrasen Paramilitary Unit Gear - type: startingGear @@ -214,11 +192,8 @@ head: ClothingHeadHelmetSwat mask: ClothingMaskGasSwat outerClothing: ClothingOuterArmorBasicSlim - ears: ClothingHeadsetAltSecurityRegular # Goobstation + ears: ClothingHeadsetAltSecurityRegular gloves: ClothingHandsGlovesCombat - innerClothingSkirt: ClothingUniformJumpskirtSec - satchel: ClothingBackpackSatchelSecurityFilled - duffelbag: ClothingBackpackDuffelSecurityFilled #CBURN Unit Gear - Full Kit - type: startingGear @@ -239,9 +214,6 @@ pocket2: WeaponLaserGun suitstorage: OxygenTankFilled belt: ClothingBeltBandolier - innerClothingSkirt: ClothingUniformJumpsuitColorBrown - satchel: ClothingBackpackDuffelCBURNFilled - duffelbag: ClothingBackpackDuffelCBURNFilled - type: startingGear id: BoxingKangarooGear @@ -298,9 +270,6 @@ ears: ClothingHeadsetBrigmedic mask: ClothingMaskBreathMedicalSecurity belt: ClothingBeltMedicalFilled - innerClothingSkirt: ClothingUniformJumpskirtBrigmedic - satchel: ClothingBackpackSatchelBrigmedicFilled - duffelbag: ClothingBackpackDuffelBrigmedicFilled # Aghost - type: startingGear diff --git a/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml index 9f32796073..596e42776b 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml @@ -9,9 +9,6 @@ shoes: ClothingShoesWizard id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorDarkBlue - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: WizardRedGear @@ -23,9 +20,6 @@ shoes: ClothingShoesWizard id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorRed - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: WizardVioletGear @@ -37,9 +31,6 @@ shoes: ClothingShoesWizard id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorPurple - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: WizardHardsuitGear @@ -50,6 +41,3 @@ shoes: ClothingShoesWizard id: PassengerPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpskirtColorPurple - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml index eef0731a40..62daf6c93d 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml @@ -4,9 +4,11 @@ description: job-description-chemist playTimeTracker: JobChemist requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement # department: Medical - # min: 28800 # DeltaV - 8 hours + # min: 28800 + # WD EDIT END - !type:CharacterEmployerRequirement employers: - ZengHuPharmaceuticals @@ -36,9 +38,6 @@ shoes: ClothingShoesColorWhite id: ChemistryPDA ears: ClothingHeadsetMedical - innerClothingSkirt: ClothingUniformJumpskirtChemistry - satchel: ClothingBackpackSatchelChemistryFilled - duffelbag: ClothingBackpackDuffelChemistryFilled - type: startingGear id: ChemistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index b366cc3b0c..c79da1818d 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -31,9 +31,9 @@ - Maintenance - Chemistry - ChiefMedicalOfficer - - Paramedic # DeltaV - Add Paramedic access - - External # DeltaV - Paramedics need this access - - Psychologist # DeltaV - Add Psychologist access + - Paramedic + - External + - Psychologist - Cryogenics special: - !type:AddImplantSpecial @@ -61,10 +61,7 @@ back: ClothingBackpackCMOFilled shoes: ClothingShoesColorBrown id: CMOPDA - ears: ClothingHeadsetAltMedical # Goobstation - innerClothingSkirt: ClothingUniformJumpskirtCMO - satchel: ClothingBackpackSatchelCMOFilled - duffelbag: ClothingBackpackDuffelCMOFilled + ears: ClothingHeadsetAltMedical - type: startingGear id: CMOPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index ccf7b65a88..04bffbd83f 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -20,7 +20,7 @@ - Maintenance extendedAccess: - Chemistry - - Paramedic # DeltaV - Add Paramedic access + - Paramedic special: - !type:AddComponentSpecial components: @@ -38,9 +38,6 @@ shoes: ClothingShoesColorWhite id: MedicalPDA ears: ClothingHeadsetMedical - innerClothingSkirt: ClothingUniformJumpskirtMedicalDoctor - satchel: ClothingBackpackSatchelMedicalFilled - duffelbag: ClothingBackpackDuffelMedicalFilled - type: startingGear id: DoctorPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml index e091277d58..15be8ae0d9 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml @@ -4,10 +4,6 @@ description: job-description-intern playTimeTracker: JobMedicalIntern requirements: - # - !type:DepartmentTimeRequirement # DeltaV - Removes time limit - # department: Medical - # time: 54000 # 15 hrs - # inverted: true # stop playing intern if you're good at med! - !type:CharacterEmployerRequirement employers: - ZengHuPharmaceuticals @@ -16,7 +12,6 @@ startingGear: MedicalInternGear icon: "JobIconMedicalIntern" supervisors: job-supervisors-medicine - canBeAntag: true # DeltaV - Can be antagonist access: - Medical - Maintenance @@ -32,12 +27,9 @@ subGear: - DoctorPlasmamanGear equipment: - jumpsuit: UniformScrubsColorBlue # DeltaV - Intern starts with blue scrubs + jumpsuit: UniformScrubsColorBlue back: ClothingBackpackMedicalFilled shoes: ClothingShoesColorWhite id: MedicalInternPDA ears: ClothingHeadsetMedical pocket2: BookMedicalReferenceBook - # innerClothingSkirt: ClothingUniformJumpskirtColorWhite # DeltaV - satchel: ClothingBackpackSatchelMedicalFilled - duffelbag: ClothingBackpackDuffelMedicalFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index 418065361a..0aee19a1c0 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -4,19 +4,16 @@ description: job-description-paramedic playTimeTracker: JobParamedic requirements: - # - !type:RoleTimeRequirement # DeltaV - No Medical Doctor time requirement - # role: JobMedicalDoctor - # time: 14400 #4 hrs - # - !type:CharacterDepartmentTimeRequirement # DeltaV - Medical dept time requirement # WWDP - # department: Medical - # min: 28800 # DeltaV - 8 hours + # WD EDIT START + - !type:CharacterDepartmentTimeRequirement + department: Medical + min: 28800 # DeltaV - 8 hours + # WD EDIT END - !type:CharacterEmployerRequirement employers: - Interdyne - NanoTrasen - ZengHuPharmaceuticals - # - !type:OverallPlaytimeRequirement # DeltaV - No playtime requirement - # time: 54000 # 15 hrs startingGear: ParamedicGear icon: "JobIconParamedic" supervisors: job-supervisors-cmo @@ -24,7 +21,7 @@ - Medical - Maintenance - External - - Paramedic # DeltaV - Add Paramedic access + - Paramedic extendedAccess: - Chemistry special: @@ -32,7 +29,7 @@ components: - type: CPRTraining - type: SurgerySpeedModifier - speedModifier: 2 # WWDP + speedModifier: 2 # WD EDIT - type: startingGear id: ParamedicGear @@ -44,12 +41,11 @@ shoes: ClothingShoesColorBlue id: ParamedicPDA ears: ClothingHeadsetMedical - # belt: ClothingBeltMedicalEMTFilled # WWDP moved to locker - # pocket1: HandheldGPSBasic # WWDP moved to locker - # pocket2: HandheldCrewMonitor # WWDP moved to locker - innerClothingSkirt: ClothingUniformJumpskirtParamedic - satchel: ClothingBackpackSatchelParamedicFilledDV - duffelbag: ClothingBackpackDuffelParamedicFilledDV + # WD EDIT START + # belt: ClothingBeltMedicalEMTFilled + # pocket1: HandheldGPSBasic + # pocket2: HandheldCrewMonitor + # WD EDIT END - type: startingGear id: ParamedicPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml b/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml index e33632cf93..f93c1e29ff 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml @@ -5,7 +5,8 @@ playTimeTracker: JobSeniorPhysician setPreference: false # WWDP disabled role, not mapped requirements: - # - !type:CharacterPlaytimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterPlaytimeRequirement # tracker: JobChemist # min: 21600 #6 hrs # - !type:CharacterPlaytimeRequirement @@ -14,6 +15,7 @@ # - !type:CharacterDepartmentTimeRequirement # department: Medical # min: 216000 # 60 hrs + # WD EDIT END - !type:CharacterEmployerRequirement employers: - ZengHuPharmaceuticals @@ -45,7 +47,4 @@ outerClothing: ClothingOuterCoatLabSeniorPhysician id: SeniorPhysicianPDA ears: ClothingHeadsetMedical - # belt: ClothingBeltMedicalFilled # WWDP moved to lockers - innerClothingSkirt: ClothingUniformJumpskirtSeniorPhysician - satchel: ClothingBackpackSatchelMedicalFilled - duffelbag: ClothingBackpackDuffelMedicalFilled + # belt: ClothingBeltMedicalFilled - WD EDIT diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml b/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml index af10daa5aa..8d5681f4ee 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml @@ -4,10 +4,6 @@ description: job-description-research-assistant playTimeTracker: JobResearchAssistant requirements: - # - !type:DepartmentTimeRequirement # DeltaV - Removes time limit - # department: Science - # time: 54000 #15 hrs - # inverted: true # stop playing intern if you're good at science! - !type:CharacterEmployerRequirement employers: - NanoTrasen @@ -15,7 +11,6 @@ startingGear: ResearchAssistantGear icon: "JobIconResearchAssistant" supervisors: job-supervisors-science - canBeAntag: true # DeltaV - Can be antagonist access: - Research - Maintenance @@ -32,6 +27,3 @@ ears: ClothingHeadsetScience pocket1: BookPsionicsGuidebook pocket2: BookScientistsGuidebook - innerClothingSkirt: ClothingUniformJumpskirtColorWhite - satchel: ClothingBackpackSatchelScienceFilled - duffelbag: ClothingBackpackDuffelScienceFilled diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 23d05b3470..da3b112540 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -37,18 +37,18 @@ - Command - Maintenance - ResearchDirector - - Mantis # DeltaV - Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml - - Chapel # DeltaV - Chaplain is in Epistemics - - External # DeltaV - AI satellite access + - Mantis + - Chapel + - External - Cryogenics - special: # Nyanotrasen - Mystagogue can use the Bible + special: - !type:AddComponentSpecial components: - - type: BibleUser # Nyano - Lets them heal with bibles - - type: Psionic # Nyano - They start with telepathic chat + - type: BibleUser + - type: Psionic powerSlots: 3 baselinePowerCost: 75 - nextPowerCost: 75 # No that's fully intended that he has the "Full" power pull. Have fun with being a crew-aligned wizard/cultist. + nextPowerCost: 75 - type: CommandStaff - type: InnatePsionicPowers powersToAdd: @@ -72,12 +72,9 @@ back: ClothingBackpackResearchDirectorFilled shoes: ClothingShoesColorBrown id: RnDPDA - ears: ClothingHeadsetAltScience # Goobstation + ears: ClothingHeadsetAltScience pocket1: BookPsionicsGuidebook pocket2: BibleMystagogue - innerClothingSkirt: ClothingUniformJumpskirtResearchDirector - satchel: ClothingBackpackSatchelResearchDirectorFilled - duffelbag: ClothingBackpackDuffelResearchDirectorFilled - type: startingGear id: ResearchDirectorPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml b/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml index a62eb83172..d980406627 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/roboticist.yml @@ -32,9 +32,6 @@ id: RoboticsPDA ears: ClothingHeadsetRobotics pocket1: BookPsionicsGuidebook - innerClothingSkirt: ClothingUniformJumpskirtRoboticist - satchel: ClothingBackpackSatchelRoboticsFilled - duffelbag: ClothingBackpackDuffelRoboticsFilled - type: startingGear id: RoboticistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index 9cb389b0d6..917c524c7d 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -4,9 +4,11 @@ description: job-description-scientist playTimeTracker: JobScientist requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP - # department: Epistemics # DeltaV - Epistemics Department replacing Science + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement + # department: Epistemics # min: 14400 #4 hrs + # WD EDIT END - !type:CharacterEmployerRequirement employers: - NanoTrasen @@ -26,13 +28,10 @@ jumpsuit: ClothingUniformJumpsuitScientist back: ClothingBackpackScienceFilled shoes: ClothingShoesColorWhite - # outerClothing: ClothingOuterCoatRnd # WWDP disabled + # outerClothing: ClothingOuterCoatRnd - WD EDIT id: SciencePDA ears: ClothingHeadsetScience pocket1: BookPsionicsGuidebook - innerClothingSkirt: ClothingUniformJumpskirtScientist - satchel: ClothingBackpackSatchelScienceFilled - duffelbag: ClothingBackpackDuffelScienceFilled - type: startingGear id: ScientistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml index 863244a34a..75175acea5 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml @@ -5,9 +5,11 @@ playTimeTracker: JobSeniorResearcher setPreference: false # WWDP disabled role, not mapped requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP - # department: Epistemics # DeltaV - Epistemics Department replacing Science + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement + # department: Epistemics # min: 216000 #60 hrs + # WD EDIT END - !type:CharacterEmployerRequirement employers: - NanoTrasen @@ -32,6 +34,3 @@ id: SeniorResearcherPDA ears: ClothingHeadsetScience pocket1: BookPsionicsGuidebook - innerClothingSkirt: ClothingUniformJumpskirtSeniorResearcher - satchel: ClothingBackpackSatchelScienceFilled - duffelbag: ClothingBackpackDuffelScienceFilled diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml index ca917d2c37..6f5385e893 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml @@ -4,9 +4,11 @@ description: job-description-detective playTimeTracker: JobDetective requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement # department: Security - # min: 36000 # DeltaV - 10 hours + # min: 36000 + # WD EDIT END - !type:CharacterTraitRequirement inverted: true traits: @@ -21,15 +23,16 @@ - ZavodskoiInterstellar - PMCG - NanoTrasen - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 3600 + # WD EDIT END startingGear: DetectiveGear icon: "JobIconDetective" supervisors: job-supervisors-hos canBeAntag: false access: - Security - #- Brig # Delta V: Removed - Maintenance - Service - Detective @@ -48,7 +51,6 @@ id: DetectiveGear subGear: - DetectivePlasmamanGear - equipment: jumpsuit: ClothingUniformJumpsuitDetective back: ClothingBackpackSecurity @@ -57,11 +59,8 @@ head: ClothingHeadHatFedoraBrown # outerClothing: ClothingOuterVestDetective - WD EDIT id: DetectivePDA - ears: ClothingHeadsetAltSecurityRegular # Goobstation + ears: ClothingHeadsetAltSecurityRegular belt: ClothingBeltHolsterFilled - innerClothingSkirt: ClothingUniformJumpskirtDetective - satchel: ClothingBackpackSatchelSecurity - duffelbag: ClothingBackpackDuffelSecurity - type: startingGear id: DetectivePlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index aa7baba8c6..a2e72252c9 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -18,8 +18,10 @@ - ZavodskoiInterstellar - PMCG - NanoTrasen - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 7200 + # WD EDIT END weight: 10 startingGear: HoSGear icon: "JobIconHeadOfSecurity" @@ -29,14 +31,12 @@ access: - HeadOfSecurity - Command - #- Brig # Delta V: Removed - Security - Armory - Maintenance - Service - External - Detective - - Corpsman # DeltaV - added Corpsman access - Cryogenics special: - !type:AddImplantSpecial @@ -63,9 +63,6 @@ # gloves: ClothingHandsGlovesCombat - WD EDIT ears: ClothingHeadsetAltSecurity # belt: ClothingBeltSecurityFilled - WD EDIT - innerClothingSkirt: ClothingUniformJumpskirtHoS - satchel: ClothingBackpackSatchelHOSFilled - duffelbag: ClothingBackpackDuffelHOSFilled - type: startingGear id: HoSPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index a890ee32c4..bb2978dcbd 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -25,7 +25,6 @@ canBeAntag: false access: - Security - #- Brig # Delta V: Removed - Maintenance - Service - External @@ -45,12 +44,10 @@ - SecurityOfficerPlasmamanGear equipment: jumpsuit: ClothingUniformJumpsuitColorRed - back: ClothingBackpackSecurityFilled # WWDP - shoes: ClothingShoesBootsJack # WWDP - # outerClothing: ClothingOuterArmorDuraVest # DeltaV - ClothingOuterArmorBasic replaced in favour of stab vest. Sucks to suck, cadets # WWDP + back: ClothingBackpackSecurityFilled # WD EDIT: ClothingBackpackSecurity -> ClothingBackpackSecurityFilled + shoes: ClothingShoesBootsCombatFilled # WD EDIT: ClothingShoesBootsCombatFilled -> ClothingShoesBootsJack + # outerClothing: ClothingOuterArmorDuraVest - WD EDIT id: SecurityCadetPDA - ears: ClothingHeadsetAltSecurityRegular # Goobstation - pocket1: BookSecurity - innerClothingSkirt: ClothingUniformJumpskirtColorRed - satchel: ClothingBackpackSatchelSecurity - duffelbag: ClothingBackpackDuffelSecurity + ears: ClothingHeadsetAltSecurityRegular + # belt: ClothingBeltSecurityFilled - WD EDIT + pocket2: BookSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index fa015fd362..adeeb32c21 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -4,9 +4,11 @@ description: job-description-security playTimeTracker: JobSecurityOfficer requirements: - # - !type:CharacterDepartmentTimeRequirement # WWDP - # department: Security - # min: 36000 # 10 hours + # WD EDIT START + # - !type:CharacterDepartmentTimeRequirement + # department: Security + # min: 36000 # 10 hours + # WD EDIT END - !type:CharacterTraitRequirement inverted: true traits: @@ -22,15 +24,16 @@ - PMCG - NanoTrasen - EastOrionCompany - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 3600 + # WD EDIT END startingGear: SecurityOfficerGear icon: "JobIconSecurityOfficer" supervisors: job-supervisors-hos canBeAntag: false access: - Security - #- Brig # Delta V: Removed - Maintenance - Service - External @@ -50,17 +53,14 @@ - SecurityOfficerPlasmamanGear equipment: jumpsuit: ClothingUniformJumpsuitSec - back: ClothingBackpackSecurity # WD EDIT: ClothingBackpackSecurity -> ClothingBackpackSecurityFilled - shoes: ClothingShoesBootsCombatFilled # WD EDIT: ClothingShoesBootsCombatFilled -> ClothingShoesBootsJack + back: ClothingBackpackSecurityFilled # WD EDIT: ClothingBackpackSecurity -> ClothingBackpackSecurityFilled + shoes: ClothingShoesBootsJack # WD EDIT: ClothingShoesBootsCombatFilled -> ClothingShoesBootsJack # eyes: ClothingEyesGlassesSecurity - WD EDIT # head: ClothingHeadHelmetBasic - WD EDIT # outerClothing: ClothingOuterArmorPlateCarrier - WD EDIT id: SecurityPDA - ears: ClothingHeadsetAltSecurityRegular # Goobstation + ears: ClothingHeadsetAltSecurityRegular # belt: ClothingBeltSecurityFilled - WD EDIT - innerClothingSkirt: ClothingUniformJumpskirtSec - satchel: ClothingBackpackSatchelSecurity - duffelbag: ClothingBackpackDuffelSecurity - type: startingGear id: SecurityOfficerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml index 30c8f3a779..ada1e3f6cc 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/senior_officer.yml @@ -5,7 +5,8 @@ playTimeTracker: JobSeniorOfficer setPreference: false # WWDP disabled role, not mapped requirements: - # - !type:CharacterPlaytimeRequirement # WWDP + # WD EDIT START + # - !type:CharacterPlaytimeRequirement # tracker: JobWarden # min: 21600 #6 hrs # - !type:CharacterPlaytimeRequirement @@ -17,6 +18,7 @@ # - !type:CharacterDepartmentTimeRequirement # department: Security # min: 216000 # 60 hrs + # WD EDIT END - !type:CharacterTraitRequirement inverted: true traits: @@ -32,15 +34,16 @@ - PMCG - NanoTrasen - EastOrionCompany - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 3600 + # WD EDIT END startingGear: SeniorOfficerGear icon: "JobIconSeniorOfficer" supervisors: job-supervisors-hos canBeAntag: false access: - Security - #- Brig # Delta V: Removed - Maintenance - Service - External @@ -59,13 +62,11 @@ - SecurityOfficerPlasmamanGear equipment: jumpsuit: ClothingUniformJumpsuitSeniorOfficer - back: ClothingBackpackSecurityFilled # WWDP - shoes: ClothingShoesBootsJack # WWDP - # eyes: ClothingEyesGlassesSecurity # WWDP + back: ClothingBackpackSecurityFilled # WD EDIT: ClothingBackpackSecurity -> ClothingBackpackSecurityFilled + shoes: ClothingShoesBootsJack # WD EDIT: ClothingBackpackSecurityFilled -> ClothingShoesBootsJack + # eyes: ClothingEyesGlassesSecurity - WD EDIT head: ClothingHeadHatBeretSecurity - # outerClothing: ClothingOuterArmorPlateCarrier # DeltaV - ClothingOuterArmorBasic replaced in favour of plate carrier # WWDP + # outerClothing: ClothingOuterArmorPlateCarrier - WD EDIT id: SeniorOfficerPDA ears: ClothingHeadsetSecurity - innerClothingSkirt: ClothingUniformJumpskirtSeniorOfficer - satchel: ClothingBackpackSatchelSecurity - duffelbag: ClothingBackpackDuffelSecurity + # belt: ClothingBeltSecurityFilled - WD EDIT diff --git a/Resources/Prototypes/Roles/Jobs/Security/warden.yml b/Resources/Prototypes/Roles/Jobs/Security/warden.yml index 13ca34266c..168c1d80ac 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/warden.yml @@ -4,13 +4,14 @@ description: job-description-warden playTimeTracker: JobWarden requirements: - # WWDP disabled trackers - # - !type:CharacterPlaytimeRequirement # DeltaV - JobSecurityOfficer time requirement. Make them experienced in proper officer work. + # WD EDIT START + # - !type:CharacterPlaytimeRequirement # tracker: JobSecurityOfficer # min: 43200 # DeltaV - 12 hrs - # - !type:CharacterPlaytimeRequirement # DeltaV - JobDetective time requirement. Give them an understanding of basic forensics. + # - !type:CharacterPlaytimeRequirement # tracker: JobDetective # min: 14400 # DeltaV - 4 hours + # WD EDIT END - !type:CharacterWhitelistRequirement - !type:CharacterTraitRequirement inverted: true @@ -26,15 +27,16 @@ - ZavodskoiInterstellar - PMCG - NanoTrasen - - !type:CharacterOverallTimeRequirement # WWDP + # WD EDIT START + - !type:CharacterOverallTimeRequirement min: 3600 + # WD EDIT END startingGear: WardenGear icon: "JobIconWarden" supervisors: job-supervisors-hos canBeAntag: false access: - Security - #- Brig # Delta V: Removed - Armory - Maintenance - Service @@ -62,11 +64,8 @@ # eyes: ClothingEyesGlassesSecurity - WD EDIT # outerClothing: ClothingOuterCoatWarden - WD EDIT id: WardenPDA - ears: ClothingHeadsetAltSecurityRegular # Goobstation + ears: ClothingHeadsetAltSecurityRegular # belt: ClothingBeltSecurityFilled - WD EDIT - innerClothingSkirt: ClothingUniformJumpskirtWarden - satchel: ClothingBackpackSatchelSecurity - duffelbag: ClothingBackpackDuffelSecurity - type: startingGear id: WardenPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/nanotrasen.yml b/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/nanotrasen.yml deleted file mode 100644 index 765c9a745e..0000000000 --- a/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/nanotrasen.yml +++ /dev/null @@ -1,69 +0,0 @@ -#These are startingGear definitions for the currently yet=to-be-added Ship VS. Ship gamemode. -#These are not gamemode-ready and are just here so that people know what their general outfit is supposed to look like. -#For the love of god, please move these out of this file when the gamemode is actually added. They are currently all here for convienence's sake. - -#CREW -#Recruit -- type: startingGear - id: RecruitNTGear - equipment: - jumpsuit: ClothingUniformJumpsuitRecruitNT - back: ClothingBackpackFilled - shoes: ClothingShoesColorBlack - gloves: ClothingHandsGlovesColorBlack - id: PassengerPDA - ears: ClothingHeadsetGrey - innerClothingSkirt: ClothingUniformJumpsuitRecruitNT #Wearing a jumpskirt into combat is a little unfitting and silly, so there is no jumpskirt counterpart for any of the Ship VS. Ship suits. - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - -#Repairman -- type: startingGear - id: RepairmanNTGear - equipment: - head: ClothingHeadHatHardhatYellow - jumpsuit: ClothingUniformJumpsuitRepairmanNT - back: ClothingBackpackEngineeringFilled - shoes: ClothingShoesBootsWork - gloves: ClothingHandsGlovesColorYellow #Should maybe still be in lockers - this is just so people know that they're there and a part of the outfit. - id: EngineerPDA - eyes: ClothingEyesGlassesMeson - belt: ClothingBeltUtilityEngineering - ears: ClothingHeadsetAltCommand #Should use the "alt" engineering headset sprite. - innerClothingSkirt: ClothingUniformJumpsuitRepairmanNT - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled - -#Paramedic -- type: startingGear - id: ParamedicNTGear - equipment: - jumpsuit: ClothingUniformJumpsuitParamedicNT - back: ClothingBackpackFilled #The medical backpack sprite looks way worse so this will do for now. - shoes: ClothingShoesColorBlue - id: MedicalPDA - ears: ClothingHeadsetMedical - eyes: ClothingEyesHudMedical - gloves: ClothingHandsGlovesLatex - belt: ClothingBeltMedicalFilled - innerClothingSkirt: ClothingUniformJumpskirtMedicalDoctor - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - -#HEADS OF STAFF -#Chief Engineer -- type: startingGear - id: ChiefEngineerNTGear - equipment: - head: ClothingHeadHatHardhatArmored - jumpsuit: ClothingUniformJumpsuitChiefEngineerNT - back: ClothingBackpackFilled #Again, the regular sprite here looks way worse than the regular backpack. - shoes: ClothingShoesBootsJack - gloves: ClothingHandsGlovesCombat - id: CEPDA - eyes: ClothingEyesGlassesMeson - ears: ClothingHeadsetAltCommand #Same as repairman - make this use the alt headset sprite. - belt: ClothingBeltUtilityEngineering - innerClothingSkirt: ClothingUniformJumpsuitChiefEngineerNT - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/syndicate.yml b/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/syndicate.yml deleted file mode 100644 index b7a4daf8f2..0000000000 --- a/Resources/Prototypes/Roles/Jobs/Ship_VS_Ship/syndicate.yml +++ /dev/null @@ -1,68 +0,0 @@ -#These are startingGear definitions for the currently yet=to-be-added Ship VS. Ship gamemode. -#Refer to Nanotrasen.yml for additional comments. - -#CREW -#Recruit -- type: startingGear - id: RecruitSyndieGear - equipment: - jumpsuit: ClothingUniformJumpsuitRecruitSyndie - back: ClothingBackpackFilled - shoes: ClothingShoesColorBlack - gloves: ClothingHandsGlovesColorBlack - id: PassengerPDA - ears: ClothingHeadsetGrey - innerClothingSkirt: ClothingUniformJumpsuitRecruitSyndie #Wearing a jumpskirt into combat is a little unfitting and silly, so there is no jumpskirt counterpart for any of the Ship VS. Ship suits. - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - -#Repairman -- type: startingGear - id: RepairmanSyndieGear - equipment: - head: ClothingHeadHatHardhatYellow - jumpsuit: ClothingUniformJumpsuitRepairmanSyndie - back: ClothingBackpackFilled #The regular industrial backpack looks really weird here, so I've opted for this instead for now. If a new one is never made, then make sure to make a prototype that has this with extended internals! - shoes: ClothingShoesBootsWork - gloves: ClothingHandsGlovesColorYellow #Should maybe still be in lockers - this is just so people know that they're there and a part of the outfit. - id: EngineerPDA - eyes: ClothingEyesGlassesMeson - belt: ClothingBeltUtilityEngineering - ears: ClothingHeadsetAltCommand #Should use the "alt" engineering headset sprite. - innerClothingSkirt: ClothingUniformJumpsuitRepairmanSyndie - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - -#Paramedic -- type: startingGear - id: ParamedicSyndieGear - equipment: - jumpsuit: ClothingUniformJumpsuitParamedicSyndie - back: ClothingBackpackFilled #The default job backpack again looks way worse. Same case as the NT Paramedc and Syndicate repairman. - shoes: ClothingShoesColorRed - id: MedicalPDA - ears: ClothingHeadsetMedical - eyes: ClothingEyesHudMedical - gloves: ClothingHandsGlovesLatex - belt: ClothingBeltMedicalFilled - innerClothingSkirt: ClothingUniformJumpsuitParamedicSyndie - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - -#HEADS OF STAFF -#Chief Engineer -- type: startingGear - id: ChiefEngineerSyndieGear - equipment: - head: ClothingHeadHatHardhatArmored - jumpsuit: ClothingUniformJumpsuitChiefEngineerSyndie - back: ClothingBackpackFilled #In a running theme, the default station job backpack still continues to look strange in comparison to the regular one. It's not as bad as on the syndicate engineer here, though. - shoes: ClothingShoesBootsJack - gloves: ClothingHandsGlovesCombat - id: CEPDA - eyes: ClothingEyesGlassesMeson - ears: ClothingHeadsetAltCommand - belt: ClothingBeltUtilityEngineering - innerClothingSkirt: ClothingUniformJumpsuitChiefEngineerSyndie - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled diff --git a/Resources/Prototypes/Roles/Jobs/Wildcards/boxer.yml b/Resources/Prototypes/Roles/Jobs/Wildcards/boxer.yml index 05bdb02d7b..51e5717a0a 100644 --- a/Resources/Prototypes/Roles/Jobs/Wildcards/boxer.yml +++ b/Resources/Prototypes/Roles/Jobs/Wildcards/boxer.yml @@ -9,9 +9,9 @@ supervisors: job-supervisors-hop access: - Maintenance - - Theatre # DeltaV - Add Theatre access - - Boxer # DeltaV - Add Boxer access - special: # Nyanotrasen - BoxerComponent, see Content.Server/Nyanotrasen/Abilities/Boxer/Boxer/BoxerComponent.cs + - Theatre + - Boxer + special: - !type:AddTraitSpecial traits: - MartialArtist @@ -28,10 +28,6 @@ gloves: ClothingHandsGlovesBoxingRed shoes: ClothingShoesColorRed belt: ClothingBeltChampion - pocket2: CandyBucket - innerClothingSkirt: UniformShortsRedWithTop - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: BoxerPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Wildcards/psychologist.yml b/Resources/Prototypes/Roles/Jobs/Wildcards/psychologist.yml index 1637723b04..5c11892a63 100644 --- a/Resources/Prototypes/Roles/Jobs/Wildcards/psychologist.yml +++ b/Resources/Prototypes/Roles/Jobs/Wildcards/psychologist.yml @@ -9,7 +9,7 @@ access: - Medical - Maintenance - - Psychologist # DeltaV - Add Psychologist access + - Psychologist extendedAccess: - Chemistry requirements: @@ -24,14 +24,10 @@ - PsychologistPlasmamanGear equipment: jumpsuit: ClothingUniformJumpsuitPsychologist - back: ClothingBackpackPsychologistFilled #DeltaV - stamp included + back: ClothingBackpackPsychologistFilled shoes: ClothingShoesLeather id: PsychologistPDA ears: ClothingHeadsetMedical - # pocket2: CandyBucket # WWDP - innerClothingSkirt: ClothingUniformJumpsuitPsychologist - satchel: ClothingBackpackSatchelPsychologistFilled #DeltaV - stamp included - duffelbag: ClothingBackpackDuffelPsychologistFilled #DeltaV - stamp included - type: startingGear id: PsychologistPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Wildcards/reporter.yml b/Resources/Prototypes/Roles/Jobs/Wildcards/reporter.yml index d56c0b36fc..2f1e403588 100644 --- a/Resources/Prototypes/Roles/Jobs/Wildcards/reporter.yml +++ b/Resources/Prototypes/Roles/Jobs/Wildcards/reporter.yml @@ -9,8 +9,8 @@ access: - Service - Maintenance - - Theatre # DeltaV - Add Theatre access - - Reporter # DeltaV - Add Reporter access + - Theatre + - Reporter requirements: - !type:CharacterEmployerRequirement inverted: true @@ -27,9 +27,6 @@ shoes: ClothingShoesColorWhite id: ReporterPDA ears: ClothingHeadsetService - innerClothingSkirt: ClothingUniformJumpsuitJournalist - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: ReporterPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/Wildcards/zookeeper.yml b/Resources/Prototypes/Roles/Jobs/Wildcards/zookeeper.yml index ff0b0fe6ad..1148d21ee0 100644 --- a/Resources/Prototypes/Roles/Jobs/Wildcards/zookeeper.yml +++ b/Resources/Prototypes/Roles/Jobs/Wildcards/zookeeper.yml @@ -10,7 +10,7 @@ access: - Service - Maintenance - - Zookeeper # DeltaV - Add Zookeeper access + - Zookeeper requirements: - !type:CharacterEmployerRequirement inverted: true @@ -28,10 +28,6 @@ shoes: ClothingShoesColorWhite id: ZookeeperPDA ears: ClothingHeadsetService - pocket2: CandyBucket - innerClothingSkirt: ClothingUniformJumpsuitSafari - satchel: ClothingBackpackSatchelFilled - duffelbag: ClothingBackpackDuffelFilled - type: startingGear id: ZookeeperPlasmamanGear diff --git a/Resources/Prototypes/Roles/Jobs/departments.yml b/Resources/Prototypes/Roles/Jobs/departments.yml index 5d60ea8e72..11803b3c8d 100644 --- a/Resources/Prototypes/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/Roles/Jobs/departments.yml @@ -6,7 +6,7 @@ - CargoTechnician - Quartermaster - SalvageSpecialist - - MailCarrier # Nyanotrasen - MailCarrier, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Cargo/mail-carrier.yml + - MailCarrier - type: department id: Civilian @@ -17,12 +17,10 @@ - Bartender - Botanist - Boxer - # - Chaplain # DeltaV - Move Chaplain into Epistemics - Chef - Clown - HeadOfPersonnel - Janitor - # - Lawyer # DeltaV - Move Lawyer into Justice - Mime - Musician - Passenger @@ -30,10 +28,10 @@ - Visitor - Zookeeper - ServiceWorker - - MartialArtist # Nyanotrasen - MartialArtist, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/martialartist.yml - # - Prisoner # WWDP moved to Security - - Gladiator # Nyanotrasen - Gladiator, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/gladiator.yml - - Hobo # White Dream + - MartialArtist + # - Prisoner - WD EDIT: Moved to Security + - Gladiator + - Hobo # WD EDIT - type: department id: Command @@ -48,8 +46,7 @@ - HeadOfSecurity - ResearchDirector - Quartermaster - - Maid # White Dream - - ChiefJustice # DeltaV - chief justice is in command staff + - ChiefJustice - CentralCommandOfficial - CBURN - ERTLeader @@ -59,20 +56,23 @@ - ERTSecurity - ERTEngineer - DeathSquad - - AdministrativeAssistant # Delta V - Administrative Assistant, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Command/admin_assistant.yml + - AdministrativeAssistant + - Maid # WD EDIT primary: false weight: 100 -# - type: department # WWDP disabled +# WD EDIT START +# - type: department # id: Dignitary # description: department-Dignitary-description # color: "#33FE6D" # roles: -# - BlueshieldOfficer # Goobstation -# - NanotrasenRepresentative # Goobstation -# - Magistrate # Goobstation +# - BlueshieldOfficer +# - NanotrasenRepresentative +# - Magistrate # primary: false # weight: 101 +# WD EDIT END - type: department id: Engineering @@ -97,7 +97,7 @@ - Psychologist - Paramedic - SeniorPhysician - - MedicalBorg # Delta V - Medical Borg, see Resources/Prototypes/DeltaV/Roles/Jobs/Medical/medicalborg.yml + - MedicalBorg - type: department id: Security @@ -111,12 +111,12 @@ - SeniorOfficer - Detective - Warden - - PrisonGuard # Nyanotrasen - PrisonGuard, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Security/prisonguard.yml - - Brigmedic # DeltaV - Brigmedic, see Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml - - Prisoner # Nyanotrasen - Prisoner, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml # WWDP moved to SEC + - PrisonGuard + - Brigmedic + - Prisoner # WD EDIT: Moved from Civilian - type: department - id: Epistemics # DeltaV - Epistemics Department replacing Science + id: Epistemics description: department-Science-description color: "#D381C9" roles: @@ -124,8 +124,8 @@ - SeniorResearcher - Scientist - ResearchAssistant - - Chaplain # DeltaV - Move Chaplain into Epistemics - - ForensicMantis # Nyanotrasen - ForensicMantis, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml + - Chaplain + - ForensicMantis - Librarian - Roboticist @@ -137,7 +137,8 @@ - Borg - StationAi -# - type: department # WWDP disabled +# WD EDIT START +# - type: department # id: Specific # description: department-Specific-description # color: "#9FED58" @@ -147,8 +148,9 @@ # - Reporter # - Zookeeper # - Psychologist -# - MartialArtist # Nyanotrasen - MartialArtist, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/martialartist.yml -# - Gladiator # Nyanotrasen - Gladiator, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/gladiator.yml -# - Prisoner # Nyanotrasen - Prisoner, see Resrouces/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml -# - Brigmedic # DeltaV - Corpsman, see Resources/Prototypes/DeltaV/Roles/Jobs/Security/brigmedic.yml +# - MartialArtist +# - Gladiator +# - Prisoner +# - Brigmedic # primary: false +# WD EDIT END