From 1f6c311e7cc897d607e71e746917531669a15765 Mon Sep 17 00:00:00 2001 From: v6st Date: Wed, 21 Jan 2026 18:40:18 +0300 Subject: [PATCH 01/12] idkkdi --- .../Lobby/ClientPreferencesManager.cs | 16 ++ Content.Client/Lobby/LobbyUIController.cs | 14 ++ .../Lobby/UI/HumanoidProfileEditor.xaml | 7 + .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 110 ++++++++- .../Lobby/UI/LobbyCharacterPreviewPanel.xaml | 2 + .../UI/LobbyCharacterPreviewPanel.xaml.cs | 14 ++ Content.Client/Shuttles/UI/DockingScreen.xaml | 6 + .../Shuttles/UI/DockingScreen.xaml.cs | 44 ++++ Content.Client/Shuttles/UI/NavScreen.xaml | 5 + Content.Client/Shuttles/UI/NavScreen.xaml.cs | 46 +++- .../Shuttles/UI/ShuttleMapControl.xaml.cs | 29 ++- .../Shuttles/UI/ShuttleNavControl.xaml.cs | 129 ++++++++-- .../ShipShields/ShipShieldOverlay.cs | 6 +- .../_Forge/Company/CompanySelectControl.xaml | 47 ++++ .../Company/CompanySelectControl.xaml.cs | 107 +++++++++ .../FireControl/UI/FireControlNavControl.cs | 2 +- Content.Server/Access/Systems/IdCardSystem.cs | 24 ++ Content.Server/PDA/PdaSystem.cs | 22 ++ .../Shuttles/Systems/ShuttleConsoleSystem.cs | 20 +- .../ShipShields/ShipShieldsSystem.cs | 35 ++- Content.Server/_Mono/Company/CompanySystem.cs | 197 ++++++++++++++++ .../FireControl/FireControlSystem.Console.cs | 24 +- .../_Mono/FireControl/FireControlSystem.cs | 1 + .../_Mono/Ships/LimitedShuttleSystem.cs | 179 ++++++++++++++ .../Ships/Systems/CrewedShuttleSystem.cs | 53 +++++ .../_Mono/Shipyard/ShipyardDirectionSystem.cs | 98 ++++++++ .../Components/ShipyardVoucherComponent.cs | 5 + .../Systems/ShipyardSystem.Consoles.cs | 106 ++++++++- .../_NF/Shipyard/Systems/ShuttleDeedSystem.cs | 8 + .../Access/Components/IdCardComponent.cs | 7 + .../Access/Systems/SharedIdCardSystem.cs | 35 +++ Content.Shared/CCVar/CCVars.Game.cs | 5 + Content.Shared/PDA/PdaUpdateState.cs | 1 + .../Preferences/HumanoidCharacterProfile.cs | 37 ++- .../Systems/SharedShuttleSystem.IFF.cs | 42 +++- .../ShipShields/ShipShieldEmitterComponent.cs | 5 + .../_Mono/Company/CompanyPrototype.cs | 9 + .../_Mono/Ships/CrewedShuttleComponent.cs | 18 ++ .../_Mono/Ships/ShipActivityComponent.cs | 55 +++++ Content.Shared/_Mono/Ships/VesselComponent.cs | 19 ++ .../AttemptShipyardShuttlePurchaseEvent.cs | 16 ++ .../Shipyard/ShipyardShuttlePurchaseEvent.cs | 11 + .../Systems/CharacterRequirements.Misc.cs | 56 +++++ .../Components/ShuttleDeedComponent.cs | 6 + .../Shipyard/Prototypes/VesselPrototype.cs | 24 ++ .../shipyard/shipyard-console-component.ftl | 2 + .../ui/humanoid-profile-editor.ftl | 4 + Resources/Locale/ru-RU/_Forge/company.ftl | 28 +++ .../customization/character-requirements.ftl | 1 + Resources/Locale/ru-RU/_Mono/shipyard.ftl | 14 ++ .../ru-RU/_Mono/shuttles/shuttle-console.ftl | 1 + .../shipyard/shipyard-console-component.ftl | 8 - Resources/Locale/ru-RU/shuttles/console.ftl | 2 + .../Structures/Decoration/banners.yml | 20 ++ .../Structures/Wallmounts/Signs/posters.yml | 22 ++ .../_Forge/Roles/Jobs/Syndicate/Cadet.yml | 2 + .../_Forge/Roles/Jobs/Syndicate/Commander.yml | 2 + .../Roles/Jobs/Syndicate/EngineerSyn.yml | 2 + .../_Forge/Roles/Jobs/Syndicate/MedSyn.yml | 2 + .../_Forge/Roles/Jobs/Syndicate/Smuggler.yml | 2 + .../Roles/Jobs/Syndicate/Stormtrooper.yml | 2 + .../_Forge/Shipyard/Mercenary/Corvet.yml | 2 +- .../_Forge/Shipyard/Mercenary/Star_track.yml | 2 +- .../_Forge/Shipyard/Mercenary/dreadnought.yml | 2 +- .../_Forge/Shipyard/Nfsd/empress.yml | 2 +- Resources/Prototypes/_Forge/company.yml | 222 ++++++++++++++++++ Resources/Prototypes/_Mono/tags.yml | 4 + .../Objects/Devices/Misc/ship_vouchers.yml | 8 + Resources/Textures/Forge/Companies/dme.png | Bin 0 -> 107138 bytes Resources/Textures/Forge/Companies/lvhi.png | Bin 0 -> 93252 bytes .../Textures/Forge/Companies/lvhi_up.png | Bin 0 -> 97421 bytes .../Decoration/banner.rsi/banner_nexus.png | Bin 0 -> 844 bytes .../Decoration/banner.rsi/banner_sune.png | Bin 0 -> 822 bytes .../Decoration/banner.rsi/meta.json | 6 + .../posters.rsi/cf_poster1_legit.png | Bin 0 -> 707 bytes .../posters.rsi/cf_poster2_legit.png | Bin 0 -> 396 bytes .../Wallmounts/posters.rsi/meta.json | 8 +- 77 files changed, 1988 insertions(+), 84 deletions(-) create mode 100644 Content.Client/_Forge/Company/CompanySelectControl.xaml create mode 100644 Content.Client/_Forge/Company/CompanySelectControl.xaml.cs create mode 100644 Content.Server/_Mono/Company/CompanySystem.cs create mode 100644 Content.Server/_Mono/Ships/LimitedShuttleSystem.cs create mode 100644 Content.Server/_Mono/Ships/Systems/CrewedShuttleSystem.cs create mode 100644 Content.Server/_Mono/Shipyard/ShipyardDirectionSystem.cs create mode 100644 Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs create mode 100644 Content.Shared/_Mono/Ships/ShipActivityComponent.cs create mode 100644 Content.Shared/_Mono/Ships/VesselComponent.cs create mode 100644 Content.Shared/_Mono/Shipyard/AttemptShipyardShuttlePurchaseEvent.cs create mode 100644 Content.Shared/_Mono/Shipyard/ShipyardShuttlePurchaseEvent.cs create mode 100644 Content.Shared/_NC/Customization/Systems/CharacterRequirements.Misc.cs create mode 100644 Resources/Locale/ru-RU/_Forge/company.ftl create mode 100644 Resources/Locale/ru-RU/_Forge/customization/character-requirements.ftl create mode 100644 Resources/Locale/ru-RU/_Mono/shipyard.ftl create mode 100644 Resources/Locale/ru-RU/_Mono/shuttles/shuttle-console.ftl create mode 100644 Resources/Prototypes/_Forge/company.yml create mode 100644 Resources/Prototypes/_Mono/tags.yml create mode 100644 Resources/Textures/Forge/Companies/dme.png create mode 100644 Resources/Textures/Forge/Companies/lvhi.png create mode 100644 Resources/Textures/Forge/Companies/lvhi_up.png create mode 100644 Resources/Textures/Forge/Structures/Decoration/banner.rsi/banner_nexus.png create mode 100644 Resources/Textures/Forge/Structures/Decoration/banner.rsi/banner_sune.png create mode 100644 Resources/Textures/Forge/Structures/Wallmounts/posters.rsi/cf_poster1_legit.png create mode 100644 Resources/Textures/Forge/Structures/Wallmounts/posters.rsi/cf_poster2_legit.png diff --git a/Content.Client/Lobby/ClientPreferencesManager.cs b/Content.Client/Lobby/ClientPreferencesManager.cs index 63a12a99bf2d..1b28a80ee886 100644 --- a/Content.Client/Lobby/ClientPreferencesManager.cs +++ b/Content.Client/Lobby/ClientPreferencesManager.cs @@ -6,6 +6,7 @@ using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using Content.Shared._Mono.Company; // Forge-change namespace Content.Client.Lobby { @@ -62,6 +63,21 @@ public void SelectCharacter(int slot) public void UpdateCharacter(ICharacterProfile profile, int slot) { var collection = IoCManager.Instance!; + + // Forge-change-start + // Verify company exists if this is a humanoid profile + if (profile is HumanoidCharacterProfile humanoidProfile) + { + var protoManager = IoCManager.Resolve(); + if (!string.IsNullOrEmpty(humanoidProfile.Company) && + humanoidProfile.Company != "None" && + !protoManager.HasIndex(humanoidProfile.Company)) + { + profile = humanoidProfile.WithCompany("None"); + } + } + // Forge-change-end + profile.EnsureValid(_playerManager.LocalSession!, collection); var characters = new Dictionary(Preferences.Characters) {[slot] = profile}; Preferences = new PlayerPreferences(characters, Preferences.SelectedCharacterIndex, Preferences.AdminOOCColor, Preferences.ConstructionFavorites); diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index d07ae222d10d..d2db3e399e0f 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -25,6 +25,7 @@ using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using Content.Shared._Mono.Company; // Forge-change namespace Content.Client.Lobby; @@ -186,6 +187,7 @@ private void RefreshLobbyPreview() PreviewPanel.SetSprite(EntityUid.Invalid); PreviewPanel.SetSummaryText(string.Empty); PreviewPanel.SetBankBalanceText(string.Empty); // Frontier + PreviewPanel.SetCompanyText(string.Empty); // Forge-change Company Display return; } @@ -193,6 +195,18 @@ private void RefreshLobbyPreview() PreviewPanel.SetSprite(dummy); PreviewPanel.SetSummaryText(humanoid.Summary); PreviewPanel.SetBankBalanceText(humanoid.BankBalanceText); // Frontier + + // Forge-change-start: Company Display + var companyId = humanoid.Company; + if (_prototypeManager.TryIndex(companyId, out var company)) + { + PreviewPanel.SetCompanyText($"[color={company.Color.ToHex()}]{company.Name}[/color]"); + } + else + { + PreviewPanel.SetCompanyText(Loc.GetString("humanoid-profile-editor-company-label") + $" [color=yellow]{companyId}[/color]"); + } + // Forge-change-end } private void RefreshProfileEditor() diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml index e7a48ab6e429..99775c7bb2b6 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml @@ -140,6 +140,13 @@ + + + + + + + diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index 37da2497045c..5069b5c6948d 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -39,6 +39,8 @@ using Robust.Shared.Prototypes; using Robust.Shared.Utility; using Direction = Robust.Shared.Maths.Direction; +using Content.Shared._Mono.Company; // Forge-change +using Content.Client._Forge.Company.UI; // Forge-change namespace Content.Client.Lobby.UI { @@ -108,6 +110,8 @@ public sealed partial class HumanoidProfileEditor : BoxContainer private ColorSelectorSliders _rgbSkinColorSelector; + private CompanySelectControl? _companySelect; // Forge-change + private bool _isDirty; [ValidatePrototypeId] @@ -144,6 +148,7 @@ public HumanoidProfileEditor( _controller = UserInterfaceManager.GetUIController(); _sprite = _entManager.System(); _sponsorMan = sponsorMan; + _companySelect = new CompanySelectControl(); // Forge-change _maxNameLength = _cfgManager.GetCVar(CCVars.MaxNameLength); _allowFlavorText = _cfgManager.GetCVar(CCVars.FlavorText); @@ -441,11 +446,48 @@ public HumanoidProfileEditor( RefreshTraits(); + // Forge-change-start: take _Mono company + #region Company + + TabContainer.SetTabTitle(3, Loc.GetString("humanoid-profile-editor-company-tab")); + + var username = _playerManager.LocalPlayer?.Session?.Name; + var companies = _prototypeManager.EnumeratePrototypes() + .Where(c => !c.Disabled || (username != null && c.Logins.Contains(username))) + .OrderBy(c => c.Name) + .ToList(); + + // Переносим "None" в начало списка + var noneIndex = companies.FindIndex(c => c.ID == "None"); + if (noneIndex != -1) + { + var none = companies[noneIndex]; + companies.RemoveAt(noneIndex); + companies.Insert(0, none); + } + + _companySelect?.Populate(companies, Profile?.Company); + + if (_companySelect != null) + { + _companySelect.OnCompanySelected += companyId => + { + // Сохраняем выбор сразу + Profile = Profile?.WithCompany(companyId); + SetDirty(); + }; + } + + CompanyContainer.AddChild(_companySelect!); + + #endregion Company + // Forge-change-end + TabContainer.SetTabTitle(2, Loc.GetString("humanoid-profile-editor-traits-tab")); // Frontier: 3<2 #region Markings - TabContainer.SetTabTitle(3, Loc.GetString("humanoid-profile-editor-markings-tab")); // Frontier: 4<3 + TabContainer.SetTabTitle(4, Loc.GetString("humanoid-profile-editor-markings-tab")); // Forge-change Markings.OnMarkingAdded += OnMarkingChange; Markings.OnMarkingRemoved += OnMarkingChange; @@ -483,6 +525,7 @@ public HumanoidProfileEditor( SpeciesInfoButton.OnPressed += OnSpeciesInfoButtonPressed; UpdateSpeciesGuidebookIcon(); + UpdateCompanyControls(); // Forge-change IsDirty = false; } @@ -788,15 +831,37 @@ public void RefreshAntags() private void SetDirty() { // If it equals default then reset the button. - if (Profile == null || - _preferencesManager.Preferences?.SelectedCharacter.MemberwiseEquals(Profile, out _) == true) // Forge-Change + // if (Profile == null || + // _preferencesManager.Preferences?.SelectedCharacter.MemberwiseEquals(Profile, out _) == true) // Forge-Change + // If profile is null, we can't be dirty + if (Profile == null) { IsDirty = false; return; } // TODO: Check if profile matches default. - IsDirty = true; + // IsDirty = true; + + // If we have no selected character to compare against, we're dirty + if (_preferencesManager.Preferences?.SelectedCharacter == null) + { + IsDirty = true; + return; + } + + // Get the selected character for comparison + var selectedCharacter = (HumanoidCharacterProfile)_preferencesManager.Preferences.SelectedCharacter; + + // Check explicitly if company changed + if (selectedCharacter.Company != Profile.Company) + { + IsDirty = true; + return; + } + + // Check if entire profile matches + IsDirty = !selectedCharacter.MemberwiseEquals(Profile, out _); } /// @@ -864,6 +929,7 @@ public void SetProfile(HumanoidCharacterProfile? profile, int? slot) UpdateHairPickers(); UpdateCMarkingsHair(); UpdateCMarkingsFacialHair(); + UpdateCompanyControls(); RefreshAntags(); RefreshJobs(); @@ -1712,8 +1778,11 @@ private void UpdateEyePickers() private void UpdateSaveButton() { - SaveButton.Disabled = Profile is null || !IsDirty; - ResetButton.Disabled = Profile is null || !IsDirty; + // SaveButton.Disabled = Profile is null || !IsDirty; + // ResetButton.Disabled = Profile is null || !IsDirty; + var canSave = Profile is not null; + SaveButton.Disabled = !canSave || !IsDirty; + ResetButton.Disabled = !canSave || !IsDirty; } private void SetPreviewRotation(Direction direction) @@ -1827,5 +1896,34 @@ private void EndExport() ImportButton.Disabled = false; ExportButton.Disabled = false; } + + // Forge-change-start: take _Mono company + private void UpdateCompanyControls() + { + if (Profile is null) + return; + + var username = _playerManager.LocalPlayer?.Session?.Name; + var companies = _prototypeManager.EnumeratePrototypes() + .Where(c => !c.Disabled || (username != null && c.Logins.Contains(username))) + .OrderBy(c => c.Name) + .ToList(); + + var noneIndex = companies.FindIndex(c => c.ID == "None"); + if (noneIndex != -1) + { + var none = companies[noneIndex]; + companies.RemoveAt(noneIndex); + companies.Insert(0, none); + } + + _companySelect?.Populate(companies, Profile?.Company); + + if (Profile?.Company != null && !companies.Any(c => c.ID == Profile.Company)) + { + Profile = Profile.WithCompany("None"); + } + } + // Forge-change-end } } diff --git a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml index c4ef8b457739..96a413401b12 100644 --- a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml +++ b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml @@ -11,6 +11,8 @@ public static readonly CVarDef GameHostnameInTitlebar = CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); + + // Forge-change-start + public static readonly CVarDef MinPlayersRequirement = + CVarDef.Create("game.role_minplayers_req", true, CVar.SERVER | CVar.ARCHIVE); + // Forge-change-end } diff --git a/Content.Shared/PDA/PdaUpdateState.cs b/Content.Shared/PDA/PdaUpdateState.cs index 1c1ca0949d5c..cfeb5186cb0e 100644 --- a/Content.Shared/PDA/PdaUpdateState.cs +++ b/Content.Shared/PDA/PdaUpdateState.cs @@ -56,6 +56,7 @@ public struct PdaIdInfoText public string? ActualOwnerName; public string? IdOwner; public string? JobTitle; + public string? CompanyName; // Forge-change: take _Mono company public string? StationAlertLevel; public Color StationAlertColor; } diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index 0e6005ce87b0..fccf4e5be09d 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -18,6 +18,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Utility; +using Content.Shared._Mono.Company; // Forge-change: _Mono company, y namespace Content.Shared.Preferences { @@ -144,6 +145,12 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile public PreferenceUnavailableMode PreferenceUnavailable { get; private set; } = PreferenceUnavailableMode.SpawnAsOverflow; + /// + /// The company affiliation of the character + /// + [DataField] + public string Company { get; private set; } = "None"; // Forge-change: take _Mono company + public HumanoidCharacterProfile( string name, string flavortext, @@ -160,7 +167,8 @@ public HumanoidCharacterProfile( HashSet> antagPreferences, HashSet> traitPreferences, Dictionary loadouts, - string barkVoice) // Corvax-Frontier-Barks + string barkVoice, // Corvax-Frontier-Barks + string company = "None") // Forge-change: _Mono company { Name = name; FlavorText = flavortext; @@ -178,6 +186,7 @@ public HumanoidCharacterProfile( _traitPreferences = traitPreferences; _loadouts = loadouts; BarkVoice = barkVoice; // Corvax-Frontier-Barks + Company = company; // Forge-change: _Mono company } /// Copy constructor but with overridable references (to prevent useless copies) @@ -188,7 +197,7 @@ private HumanoidCharacterProfile( HashSet> traitPreferences, Dictionary loadouts) : this(other.Name, other.FlavorText, other.Species, other.Voice, other.Age, other.Sex, other.Gender, other.BankBalance, other.Appearance, other.SpawnPriority, - jobPriorities, other.PreferenceUnavailable, antagPreferences, traitPreferences, loadouts, other.BarkVoice) + jobPriorities, other.PreferenceUnavailable, antagPreferences, traitPreferences, loadouts, other.BarkVoice, other.Company) { } @@ -209,7 +218,8 @@ public HumanoidCharacterProfile(HumanoidCharacterProfile other) new HashSet>(other.AntagPreferences), new HashSet>(other.TraitPreferences), new Dictionary(other.Loadouts), - other.BarkVoice) // Corvax-Frontier-Barks + other.BarkVoice, // Corvax-Frontier-Barks + other.Company) { } @@ -425,6 +435,12 @@ public HumanoidCharacterProfile WithPreferenceUnavailable(PreferenceUnavailableM return new(this) { PreferenceUnavailable = mode }; } + // Forge-change: _Mono company + public HumanoidCharacterProfile WithCompany(string company) + { + return new(this) { Company = company }; + } + public HumanoidCharacterProfile WithAntagPreferences(IEnumerable> antagPreferences) { return new(this) @@ -554,6 +570,11 @@ public bool MemberwiseEquals(ICharacterProfile maybeOther, out string? error) error = $"Вид: {Species} не совпадает с {other.Species}"; return false; } + if (Company != other.Company) // Forge-change: _Mono company + { + error = $"Компания: {Company} не совпадает с {other.Company}"; + return false; + } if (BankBalance != other.BankBalance) // Frontier { error = $"Баланс банка: {BankBalance} не совпадает с {other.BankBalance}"; @@ -782,6 +803,16 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection Appearance = appearance; SpawnPriority = spawnPriority; + // Forge-change-start: _Mono company + // Check if the company exists, if not set to "None" + if (!string.IsNullOrEmpty(Company) && + Company != "None" && + !prototypeManager.HasIndex(Company)) + { + Company = "None"; + } + // Forge-change-start + _jobPriorities.Clear(); foreach (var (job, priority) in priorities) diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs index c9d948ba4afd..cf3130a8f6d9 100644 --- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs +++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs @@ -1,6 +1,8 @@ using System.Linq; using Content.Shared.Shuttles.Components; using JetBrains.Annotations; +using Content.Shared._Mono.Company; +using Robust.Shared.Prototypes; namespace Content.Shared.Shuttles.Systems; @@ -63,7 +65,45 @@ public Color GetIFFColor(EntityUid gridUid, bool self = false, IFFComponent? com } var suffix = component != null ? GetServiceFlagsSuffix(component.ServiceFlags) : string.Empty; - return string.IsNullOrEmpty(entName) ? Loc.GetString("shuttle-console-unknown") : entName + suffix; + + // Forge-change-start: _Mono company + // Get the company information if available + Color? companyColor = null; + string? companyName = null; + + if (TryComp<_Mono.Company.CompanyComponent>(gridUid, out var companyComp) && !string.IsNullOrEmpty(companyComp.CompanyName)) + { + if (IoCManager.Resolve().TryIndex(companyComp.CompanyName, out var prototype)) + { + // Don't include "None" companies in the IFF label + if (prototype.ID != "None") + { + companyName = prototype.Name; + companyColor = prototype.Color; + } + } + else + { + // For unknown companies, still check if it's not "None" + if (companyComp.CompanyName != "None") + { + companyName = companyComp.CompanyName; + companyColor = Color.Yellow; + } + } + } + + var labelText = string.IsNullOrEmpty(entName) ? Loc.GetString("shuttle-console-unknown") : entName; + + // Add company info if available + if (companyName != null && companyColor != null) + { + // Return a formatted label that the client can parse properly + return $"{labelText}\n{companyName}"; + } + + return labelText; + // Forge-change-end } /// diff --git a/Content.Shared/_Crescent/ShipShields/ShipShieldEmitterComponent.cs b/Content.Shared/_Crescent/ShipShields/ShipShieldEmitterComponent.cs index 70f7da6dcdfc..d186c991c06d 100644 --- a/Content.Shared/_Crescent/ShipShields/ShipShieldEmitterComponent.cs +++ b/Content.Shared/_Crescent/ShipShields/ShipShieldEmitterComponent.cs @@ -10,7 +10,10 @@ namespace Content.Shared._Crescent.ShipShields; [RegisterComponent] public sealed partial class ShipShieldEmitterComponent : Component { + [ViewVariables] public EntityUid? Shield; + + [ViewVariables] public EntityUid? Shielded; [DataField] @@ -71,7 +74,9 @@ public sealed partial class ShipShieldEmitterComponent : Component [DataField] public Color ShieldColor = Color.White; + [ViewVariables] public float OverloadAccumulator = 0f; + /// /// On power up, players for all on vessel, pitched down. /// diff --git a/Content.Shared/_Mono/Company/CompanyPrototype.cs b/Content.Shared/_Mono/Company/CompanyPrototype.cs index 1149b845b7cd..9c4caf82e739 100644 --- a/Content.Shared/_Mono/Company/CompanyPrototype.cs +++ b/Content.Shared/_Mono/Company/CompanyPrototype.cs @@ -6,6 +6,7 @@ // SPDX-License-Identifier: AGPL-3.0-or-later using Robust.Shared.Prototypes; +using Robust.Shared.Audio; // Forge-change namespace Content.Shared._Mono.Company; @@ -66,4 +67,12 @@ public sealed class CompanyPrototype : IPrototype /// [DataField("image")] public string? Image { get; private set; } + + // Forge-change + [DataField("entityIcon", required: false)] + public EntProtoId? EntityIcon { get; private set; } + + [DataField("spawnSound")] + public SoundSpecifier? SpawnSound; + // Forge-change-end } diff --git a/Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs b/Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs new file mode 100644 index 000000000000..3e40d4de2a91 --- /dev/null +++ b/Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2025 sleepyyapril +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +namespace Content.Shared._Mono.Ships.Components; + +/// +/// This is used for knowing whether a shuttle should be forced to be crewed. +/// +[RegisterComponent] +public sealed partial class CrewedShuttleComponent : Component +{ + [DataField] + public List ShuttleConsoles; + + [DataField] + public List GunneryConsoles; +} diff --git a/Content.Shared/_Mono/Ships/ShipActivityComponent.cs b/Content.Shared/_Mono/Ships/ShipActivityComponent.cs new file mode 100644 index 000000000000..005a4a52420d --- /dev/null +++ b/Content.Shared/_Mono/Ships/ShipActivityComponent.cs @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2025 sleepyyapril +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Robust.Shared.GameStates; + +namespace Content.Shared._Mono.Ships.Components; + +/// +/// This is used for tracking ships that are inactive. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShipActivityComponent : Component +{ + [ViewVariables] + public TimeSpan LastChecked { get; set; } + + [ViewVariables] + public TimeSpan CheckInterval { get; set; } = TimeSpan.FromSeconds(5); + + [ViewVariables] + public bool InactivePastThreshold { get; set; } + + [ViewVariables] + public bool InactiveLastCheck { get; set; } + + [ViewVariables] + public int TimesInactive { get; set; } + + [ViewVariables] + public int InactiveThresholdMinutes { get; set; } = 1; + + public int GetSecondsInactive() + { + // The first time does not count as 5 seconds. + var inactiveTimes = TimesInactive - 1; + + if (inactiveTimes <= 0) + return 0; + + return inactiveTimes * (int) CheckInterval.TotalSeconds; + } + + public int GetMinutesInactive() + { + // The first time does not count as 5 seconds. + var inactiveTimes = TimesInactive - 1; + + if (inactiveTimes <= 0) + return 0; + + var seconds = inactiveTimes * (int) CheckInterval.TotalSeconds; + return seconds / 60; + } +} diff --git a/Content.Shared/_Mono/Ships/VesselComponent.cs b/Content.Shared/_Mono/Ships/VesselComponent.cs new file mode 100644 index 000000000000..7b5f7f2555b6 --- /dev/null +++ b/Content.Shared/_Mono/Ships/VesselComponent.cs @@ -0,0 +1,19 @@ +// SPDX-FileCopyrightText: 2025 sleepyyapril +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Shared._NF.Shipyard.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Mono.Ships.Components; + +/// +/// This is used for storing the ID of the VesselPrototype for a ship. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class VesselComponent : Component +{ + [DataField] + public ProtoId VesselId { get; set; } +} diff --git a/Content.Shared/_Mono/Shipyard/AttemptShipyardShuttlePurchaseEvent.cs b/Content.Shared/_Mono/Shipyard/AttemptShipyardShuttlePurchaseEvent.cs new file mode 100644 index 000000000000..b34e47a606da --- /dev/null +++ b/Content.Shared/_Mono/Shipyard/AttemptShipyardShuttlePurchaseEvent.cs @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: 2025 sleepyyapril +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Shared._NF.Shipyard.Prototypes; + +namespace Content.Shared._Mono.Shipyard; + +[ByRefEvent] +public sealed class AttemptShipyardShuttlePurchaseEvent(EntityUid shuttle, EntityUid purchaser, VesselPrototype vessel, LocId? cancelReason = null) : CancellableEntityEventArgs +{ + public EntityUid Shuttle { get; } = shuttle; + public EntityUid Purchaser { get; } = purchaser; + public VesselPrototype Vessel { get; } = vessel; + public LocId CancelReason { get; set; } = cancelReason ?? "shipyard-console-denied"; +} diff --git a/Content.Shared/_Mono/Shipyard/ShipyardShuttlePurchaseEvent.cs b/Content.Shared/_Mono/Shipyard/ShipyardShuttlePurchaseEvent.cs new file mode 100644 index 000000000000..aa75387777a4 --- /dev/null +++ b/Content.Shared/_Mono/Shipyard/ShipyardShuttlePurchaseEvent.cs @@ -0,0 +1,11 @@ +// SPDX-FileCopyrightText: 2025 sleepyyapril +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +namespace Content.Shared._Mono.Shipyard; + +public sealed class ShipyardShuttlePurchaseEvent(EntityUid shuttle, EntityUid purchaser) +{ + public EntityUid Shuttle { get; } = shuttle; + public EntityUid Purchaser { get; } = purchaser; +} diff --git a/Content.Shared/_NC/Customization/Systems/CharacterRequirements.Misc.cs b/Content.Shared/_NC/Customization/Systems/CharacterRequirements.Misc.cs new file mode 100644 index 000000000000..dab37fe0408f --- /dev/null +++ b/Content.Shared/_NC/Customization/Systems/CharacterRequirements.Misc.cs @@ -0,0 +1,56 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Shared.Preferences; +using Content.Shared.Roles; +using JetBrains.Annotations; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Content.Shared.CCVar; +using Robust.Shared.Configuration; + +namespace Content.Shared.Customization.Systems; + +/// +/// Requires the server to have at least a minimum number of players. +/// +[UsedImplicitly] +[Serializable, NetSerializable] +public sealed partial class MinPlayersRequirement : JobRequirement +{ + [DataField(required: true)] + public int Min; + + public override bool Check(IEntityManager entManager, + IPrototypeManager protoManager, + HumanoidCharacterProfile? profile, + IReadOnlyDictionary playTimes, + [NotNullWhen(false)] out FormattedMessage? reason) + { + var playerManager = IoCManager.Resolve(); + var playerCount = playerManager.PlayerCount; + + // CVar-флаг, чтобы можно было включать/выключать проверку + var configManager = IoCManager.Resolve(); + var enabled = configManager.GetCVar(CCVars.MinPlayersRequirement); + + reason = FormattedMessage.FromMarkupPermissive( + Loc.GetString("character-minPlayers-requirement", ("min", Min))); + + if (!enabled) + return true; + + if (!Inverted) + { + if (playerCount < Min) + return false; + } + else + { + if (playerCount >= Min) + return false; + } + + return true; + } +} diff --git a/Content.Shared/_NF/Shipyard/Components/ShuttleDeedComponent.cs b/Content.Shared/_NF/Shipyard/Components/ShuttleDeedComponent.cs index c9e540801605..c16e4a2590aa 100644 --- a/Content.Shared/_NF/Shipyard/Components/ShuttleDeedComponent.cs +++ b/Content.Shared/_NF/Shipyard/Components/ShuttleDeedComponent.cs @@ -31,4 +31,10 @@ public sealed partial class ShuttleDeedComponent : Component // Forge-change [DataField, AutoNetworkedField] public string? ShuttleModel = "Unknown"; + + /// + /// The ID card entity that holds this deed + /// + [DataField] + public EntityUid? DeedHolder; } diff --git a/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs b/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs index 73afcbf4bc31..ab3576c51b9f 100644 --- a/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs +++ b/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs @@ -2,6 +2,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; using Robust.Shared.Utility; +using Content.Shared.Tag; // Forge-change namespace Content.Shared._NF.Shipyard.Prototypes; @@ -95,6 +96,29 @@ public sealed class VesselPrototype : IPrototype, IInheritingPrototype [DataField] [AlwaysPushInheritance] public ComponentRegistry AddComponents { get; set; } = new(); + + // Forge-change-start: take from _Mono + + /// + /// Whether the ship should be crewed or not + /// This is automatically set to true when the ship is a Capital-class ship. + /// + [DataField] + public bool RequireCrew; + + /// + /// The amount of this ship that can active at any given time. + /// 0 for unlimited. + /// + [DataField("limit")] + public int LimitActive; + + [DataField] + public HashSet> Tags = new(); + + [DataField("requiredCompany")] + public string? RequiredCompany; + // Forge-change-end } public enum VesselSize : byte diff --git a/Resources/Locale/en-US/_NF/shipyard/shipyard-console-component.ftl b/Resources/Locale/en-US/_NF/shipyard/shipyard-console-component.ftl index 68511aab499b..7cdb333fe82c 100644 --- a/Resources/Locale/en-US/_NF/shipyard/shipyard-console-component.ftl +++ b/Resources/Locale/en-US/_NF/shipyard/shipyard-console-component.ftl @@ -22,6 +22,8 @@ shipyard-console-deed-label = Registered Ship: shipyard-console-appraisal-label = Shuttle Resale Value:{" "} shipyard-console-no-voucher-redemptions = All voucher redemptions have been used. shipyard-console-invalid-voucher-type = This voucher cannot be used at this console. +shipyard-console-denied = You cannot purchase this ship at this time. +shipyard-console-limited = There are too many active shuttles of this type, try again later! shipyard-console-contraband-onboard = Smuggled contraband detected onboard. shipyard-console-station-resources = Vital station resources detected onboard. diff --git a/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl b/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl index 8345a841b153..d06c8844e1af 100644 --- a/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl +++ b/Resources/Locale/en-US/preferences/ui/humanoid-profile-editor.ftl @@ -64,3 +64,7 @@ humanoid-profile-editor-trait-count-hint = Points available: [{$current}/{$max}] trait-category-disabilities = Disabilities trait-category-speech = Speech traits trait-category-quirks = Quirks + +# Company +humanoid-profile-editor-company-tab = Company +humanoid-profile-editor-company-label = Company: diff --git a/Resources/Locale/ru-RU/_Forge/company.ftl b/Resources/Locale/ru-RU/_Forge/company.ftl new file mode 100644 index 000000000000..ca6871945f55 --- /dev/null +++ b/Resources/Locale/ru-RU/_Forge/company.ftl @@ -0,0 +1,28 @@ +company-select-button = Выбрать +company-leave-button = Покинуть +humanoid-profile-editor-company-tab = Компании +humanoid-profile-editor-company-label = Компания: +company-none-description = Свобода - тоже выбор. +company-no-logins-tooltip = Вы не приглашены в компанию. + +company-nanotrasen-description = Описания не будет, идите вики читать. Его же кто-то делает, да?? ДА?? + +company-ems-description = Свободное объединение спасателей, техников, хирургов и всех, кто служит делу жизни. Общие испытания и опыт соединяют тех, кто в решающий момент обращается к человеку с простым призывом: «Не умирай». Поддержка друг друга, обмен знаниями и опытом между ветеранами и новичками, создание прочной стены помощи для тех, кто берёт на себя нелёгкую и часто неблагодарную миссию - помогать пострадавшим в секторе. Служение выражается в благотворительных делах, в обмене знаниями и умениями, а порой и в работе под огнём во время экспедиций вдали от дома. В основе всей организации — стремление идти туда, где ждут, и быть рядом с теми, кто надеется что помощь придёт. + +company-far-star-biotech-description = Где бы вы ни находились — знайте, что ваше тело в безопасности с нами. Far Star Biotech занимает уникальное положение в центральной экономике: корпорация Nanotrasen пощадила их от полного уничтожения после того, как они согласились лицензировать свою интеллектуальную собственность. Корабли FSB теперь стали привычным зрелищем на рубежах, а слухи ходят о возрождении боевых подразделений Bioseers — несмотря на существующие договоры, запрещающие перевооружение. + +company-lvhi-description = Основанная как альянс обанкротившихся земных индустриальных гильдий, компания выжила, сменив профиль с планетарной добычи на космическую. Их прорывом стал контракт по спасению и утилизации разрушенной станции «Гефест». Подход «ремонтировать сваркой, а не заменять» и умение создавать производство из подручного хлама принесли им известность. Этот успех позволил компании выкупить патенты на ряд устаревших, но чрезвычайно надежных технологий жизнеобеспечения и двигателей. С тех пор «Langstad-Voigt Heavy Industries» занимается полным циклом освоения рубежей: от поиска ресурсов и строительства аванпостов до производства оборудования и сборки собственных утилитарных, «неубиваемых» кораблей. Их репутация — это репутация грубых прагматиков. Их станции и суда лишены изящества, но работают в условиях, где более технологичные конкуренты отказывают. Они не продают будущее — они продают результат. + +company-nexus-description = Галактический торговый альянс созданный множеством компаний и корпораций. Во главе альянса находится сильно раздробленный совет “Три Колонны”. Центр альянса «Нексус» представляет собой единую точку входа для покупателей и мощную поддержку для производителей, сам альянс при этом не владеет заводами. С недавнего времени альянс появился на арене дальнего космоса. Как крупный, но далеко не доминирующий торговый представитель. К особенностям NCS относятся гибкая система контрактов, подразумевающая единый контракт на сделку - вы заключаете с альянсом договор, и можете использовать его для покупки или производства любого товара. Такая система создает множество каналов сбыта, юридический щит и многопоточную логистику для компаний производителей заключивших контракт. + +company-daybreak-description = «Мы разные, но всегда вооружены.» «Рассвет» - это не классическая ЧВК, а сеть наёмнических групп, действующих под единым флагом. Каждый отряд сохраняет собственный стиль ведения боя и внутреннюю иерархию, что делает организацию непредсказуемой и хаотичной. Первые группы «Рассвета» возникли как спонтанные союзы наёмников и авантюристов, которым было выгодно выступать под одним именем. В какой-то момент Департамент Службы Безопасности Фронтира признал «Рассвет» официально, выдав им разрешение на использование специальных боевых модификаций шаттлов. Внутри сети нет единого командования - решения принимаются на сборе лидеров отрядов, где каждый тянет одеяло на себя. Это делает «Рассвет» одновременно гибким и опасным: никто не может предсказать, как поведёт себя та или иная группа. Хаотичность структуры стала проблемой: разные отряды «Рассвета» часто действуют на грани дозволенного, что вызвало резкое охлаждение отношений с ДСБФ. + +company-ardente-description = Ardente Group - это полу-хаотичные группы наёмников, действующие под флагом Ardente Advanced Manufacturing. Они служат живой рекламой продукции компании: кораблей и корабельных орудий. В боевых контрактах и охранных миссиях эти отряды демонстрируют надёжность и мощь технологий AAM, превращая каждое столкновение в показательный тест для потенциальных покупателей. За свою деятельность Ardente Group получает спонсирование от AAM, а также эксклюзивные контракты на защиту газодобывающих шаттлов, работающих преимущественно под флагом Langstad-Voigt Heavy Industries. Именно эти шаттлы обеспечивают производство AAM необходимыми ресурсами, а присутствие Ardente Group гарантирует их безопасность. В секторе Жандер Ardente Group стала главным инструментом продвижения бренда AAM. Поскольку сама Ardente Advanced Manufacturing является молодой компанией на этом рынке и только начинает завоёвывать репутацию и позиции, её наёмники играют роль живой витрины, демонстрируя силу и эффективность технологий корпорации. Хаотичная структура и разнообразие отрядов создают образ независимой силы, но на деле они тесно связаны с интересами AAM. Для местных жителей и конкурентов это означает, что появление Ardente Group почти всегда предвещает расширение влияния Ardente Advanced Manufacturing. + +company-ardente-manufacture-description = Ardente Advanced Manufacturing начинала как небольшая мастерская по ремонту шаттлов. Со временем компания перешла к более амбициозной деятельности: скупала старые боевые корабли, восстанавливала их и перепродавала. После постройки полноценной «Верфи Арденте» AAM начала активно приобретать чертежи и лицензии устаревших боевых судов, модифицировать их и выводить на рынок. Аналогично компания занимается торговлей корабельными орудиями, покупая лицензии и продавая модернизированные версии. На других рынках Фронтира Ardente Advanced Manufacturing уже успела закрепиться как надёжный поставщик вооружённых кораблей и технологий. Теперь компания начинает покорять сектор Жандер, стремясь занять здесь столь же прочные позиции и доказать конкурентам свою силу. + +company-gobliniade-description = Возродим великий Гоблинат! Из мусора - в оружие, из хлама - в будущее! Мы - дети свалки, а каждый ржавый болт это наш манифест. Пусть Жандер дрожат: гоблины идут, чтобы построить новый порядок из старого металлолома! «Надо переписать, не круто» + +company-ussp-description = Тут пока нет описания. Увы. + +company-techniclogistic-description = TechnicLogistic — автономная мегакорпорация, обладает собственной территорией, флотом и независимой армией. В TechnicLogistic преобладает жесткая иерархическая система с четким разделением обязанностей. Сама корпорация является сеткой из множества департаментов и советов во главе которой стоит Совет девяти - группа из девяти самых влиятельных членов корпорации, совместно контролирующих ~60% акций компании. В организации также есть система званий схожая с имперской, последние можно получить за успешную работу в компании или идя по военной сфере за соответствующие заслуги. TechnicLogistic имеет один из крупнейших флотов, сравнимый с флотами небольших государственных формирований. Корпорация ведет тесное сотрудничество с NanoTrasen, благодаря этому обладает рядом передовых технологий в области исследований Блюспейса. На текущий момент находится в состоянии замороженного вооруженного конфликта с группой компаний Гефест. diff --git a/Resources/Locale/ru-RU/_Forge/customization/character-requirements.ftl b/Resources/Locale/ru-RU/_Forge/customization/character-requirements.ftl new file mode 100644 index 000000000000..f20d368bf24c --- /dev/null +++ b/Resources/Locale/ru-RU/_Forge/customization/character-requirements.ftl @@ -0,0 +1 @@ +character-minPlayers-requirement = Роль доступна от {$min} игроков в сети. diff --git a/Resources/Locale/ru-RU/_Mono/shipyard.ftl b/Resources/Locale/ru-RU/_Mono/shipyard.ftl new file mode 100644 index 000000000000..eeee718d7b43 --- /dev/null +++ b/Resources/Locale/ru-RU/_Mono/shipyard.ftl @@ -0,0 +1,14 @@ +shipyard-direction-message = Ваш {$shipName} находится примерно в {$distance} метрах на {$direction}! +ship-access-denied = Вам нужен акт на корабль, чтобы получить доступ. +shipyard-console-capital-limited = Вы не можете иметь больше одного активного капитального судна! + +shipyard-console-denied = Вы не можете приобрести этот шаттл в данный момент. +shipyard-console-limited = Слишком много активных шаттлов этого типа. Попробуйте позже! + +shipyard-console-unassign-deed = Отвязать +shipyard-console-deed-unassigned = Шаттл был успешно отвязан от ID карты. +shipyard-console-confirm-unassign = Вы уверены? +shipyard-console-unassign-cooldown = Подождите {$minutes} минут, прежде чем отвязать шаттл. +shipyard-console-rename-label = Переименовать +shipyard-console-rename-placeholder = Название +shipyard-console-name-empty = Название не может быть пустым diff --git a/Resources/Locale/ru-RU/_Mono/shuttles/shuttle-console.ftl b/Resources/Locale/ru-RU/_Mono/shuttles/shuttle-console.ftl new file mode 100644 index 000000000000..0dcdfa949f82 --- /dev/null +++ b/Resources/Locale/ru-RU/_Mono/shuttles/shuttle-console.ftl @@ -0,0 +1 @@ +shuttle-console-crewed = Вы не сможете использовать консоль управления и консоль орудий виесте на этом шаттле.. Найдите ещё одного! diff --git a/Resources/Locale/ru-RU/_NF/shipyard/shipyard-console-component.ftl b/Resources/Locale/ru-RU/_NF/shipyard/shipyard-console-component.ftl index edc90b2131c9..862a021c6186 100644 --- a/Resources/Locale/ru-RU/_NF/shipyard/shipyard-console-component.ftl +++ b/Resources/Locale/ru-RU/_NF/shipyard/shipyard-console-component.ftl @@ -82,14 +82,6 @@ shipyard-console-dangerous-materials = На борту обнаружены оп shipyard-console-invalid-voucher-type = Этот ваучер не может быть использован на этой консоли. shipyard-console-fallback-prevent-sale = Обнаружены ошибки класса YML на борту. Пожалуйста, отправьте отчет об ошибке, когда это возможно. -shipyard-console-unassign-deed = Отвязать -shipyard-console-deed-unassigned = Шаттл был успешно отвязан от ID карты. -shipyard-console-confirm-unassign = Вы уверены? -shipyard-console-unassign-cooldown = Подождите {$minutes} минут, прежде чем отвязать шаттл. -shipyard-console-rename-label = Переименовать -shipyard-console-rename-placeholder = Название -shipyard-console-name-empty = Название не может быть пустым - shipyard-console-name-too-long = Имя корабля не может превышать { $max } символов. shipyard-console-rename-success = Шаттл переименован в «{ $name }». shipyard-console-rename-failed = Не удалось переименовать шаттл. diff --git a/Resources/Locale/ru-RU/shuttles/console.ftl b/Resources/Locale/ru-RU/shuttles/console.ftl index 8fb10d0cecb5..7b3b37986daa 100644 --- a/Resources/Locale/ru-RU/shuttles/console.ftl +++ b/Resources/Locale/ru-RU/shuttles/console.ftl @@ -20,6 +20,7 @@ shuttle-console-nav-settings = Настройки shuttle-console-iff-toggle = Показ системы опознавания shuttle-console-dock-toggle = Показ стыковочных портов shuttle-console-iffshuttles-toggle = Показать шаттлы +shuttle-console-extra-info-toggle = Показать доп. информацию # MAP @@ -50,3 +51,4 @@ shuttle-console-orientation-value = {$angle} shuttle-console-linear-velocity-value = {$X}, {$Y} shuttle-console-angular-velocity-value = {$angularVelocity} shuttle-console-ftl-state-Invalid = Неверный +shuttle-console-undock-all-label = Отстыковать все diff --git a/Resources/Prototypes/_Forge/Entities/Structures/Decoration/banners.yml b/Resources/Prototypes/_Forge/Entities/Structures/Decoration/banners.yml index fc269c64c5d5..74cb494bb588 100644 --- a/Resources/Prototypes/_Forge/Entities/Structures/Decoration/banners.yml +++ b/Resources/Prototypes/_Forge/Entities/Structures/Decoration/banners.yml @@ -7,3 +7,23 @@ - type: Sprite sprite: Forge/Structures/Decoration/banner.rsi state: banner_tl + +- type: entity + id: BannerNexus + parent: BannerBase + name: Banner Nexus + description: Nexus corporation banner. + components: + - type: Sprite + sprite: Forge/Structures/Decoration/banner.rsi + state: banner_nexus + +- type: entity + id: BannerDaybreak + parent: BannerBase + name: Banner Daybreak + description: Daybreak corporation banner. + components: + - type: Sprite + sprite: Forge/Structures/Decoration/banner.rsi + state: banner_sune diff --git a/Resources/Prototypes/_Forge/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/_Forge/Entities/Structures/Wallmounts/Signs/posters.yml index e99b5b60a410..799b2fd232fc 100644 --- a/Resources/Prototypes/_Forge/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/_Forge/Entities/Structures/Wallmounts/Signs/posters.yml @@ -7,3 +7,25 @@ - type: Sprite sprite: Forge/Structures/Wallmounts/posters.rsi state: cf_poster1_contraband + +- type: entity + parent: PosterBase + id: PosterLegitArdenteGroup + name: Ardente Group + description: Welcome to Ardente. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: Forge/Structures/Wallmounts/posters.rsi + state: cf_poster2_legit + +- type: entity + parent: PosterBase + id: PosterLegitArdenteAM + name: Ardente Advanced Manufacturing + description: Entrust your ship to us. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: Forge/Structures/Wallmounts/posters.rsi + state: cf_poster1_legit diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Cadet.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Cadet.yml index 5eef1ca02934..25ae5116c6aa 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Cadet.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Cadet.yml @@ -22,6 +22,8 @@ description: forge-job-desc-smugglerbodyguard playTimeTracker: JobsmugglerBodyguard requirements: + - !type:MinPlayersRequirement + min: 20 - !type:OverallPlaytimeRequirement time: 72000 # 20 hours - !type:RoleTimeRequirement diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Commander.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Commander.yml index 53840d183203..cfec328e0e1c 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Commander.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Commander.yml @@ -4,6 +4,8 @@ description: forge-job-desc-syndicommander playTimeTracker: JobCommander requirements: + - !type:MinPlayersRequirement + min: 20 - !type:OverallPlaytimeRequirement time: 144000 # 40 hours - !type:RoleTimeRequirement diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/EngineerSyn.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/EngineerSyn.yml index 33303f45f83c..ead3bd3770a0 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/EngineerSyn.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/EngineerSyn.yml @@ -7,6 +7,8 @@ - SyndicateAgent - NuclearOperative requirements: + - !type:MinPlayersRequirement + min: 20 - !type:RoleTimeRequirement role: JobStormtrooper time: 108000 # 30 hours diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/MedSyn.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/MedSyn.yml index 6be6098e3a13..af3f931494b5 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/MedSyn.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/MedSyn.yml @@ -7,6 +7,8 @@ - SyndicateAgent - NuclearOperative requirements: + - !type:MinPlayersRequirement + min: 20 - !type:OverallPlaytimeRequirement time: 144000 # 40 hours - !type:RoleTimeRequirement diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Smuggler.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Smuggler.yml index df9dfdfc38f6..0cbab9b9c458 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Smuggler.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Smuggler.yml @@ -4,6 +4,8 @@ description: forge-job-desc-smuggler playTimeTracker: Jobsmuggler requirements: + - !type:MinPlayersRequirement + min: 20 - !type:OverallPlaytimeRequirement time: 144000 # 40 hours - !type:RoleTimeRequirement diff --git a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Stormtrooper.yml b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Stormtrooper.yml index e552f9846aed..ce3aef546f83 100644 --- a/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Stormtrooper.yml +++ b/Resources/Prototypes/_Forge/Roles/Jobs/Syndicate/Stormtrooper.yml @@ -4,6 +4,8 @@ description: forge-job-desc-stormtrooper playTimeTracker: JobStormtrooper requirements: + - !type:MinPlayersRequirement + min: 20 - !type:OverallPlaytimeRequirement time: 144000 # 40 hours - !type:RoleTimeRequirement diff --git a/Resources/Prototypes/_Forge/Shipyard/Mercenary/Corvet.yml b/Resources/Prototypes/_Forge/Shipyard/Mercenary/Corvet.yml index ad059973172d..52c9488509b3 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Mercenary/Corvet.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Mercenary/Corvet.yml @@ -14,7 +14,7 @@ name: SBI Корвет description: Среднегабаритный шаттл наёмников, созданный для выполнения опасных целей. price: 75900 - category: Small + category: Medium group: Mercenary shuttlePath: /Maps/_Forge/Shuttles/Mercenary/corvet.yml addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Mercenary/Star_track.yml b/Resources/Prototypes/_Forge/Shipyard/Mercenary/Star_track.yml index d766c106c13e..30abc0a8f944 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Mercenary/Star_track.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Mercenary/Star_track.yml @@ -14,7 +14,7 @@ name: SBI Энтерпрайз description: Крупногабаритный шаттл для наёмников, рекомендуемый состав экипажа 4 человека. price: 239500 - category: Small + category: Large group: Mercenary shuttlePath: /Maps/_Forge/Shuttles/Mercenary/star_track.yml addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Mercenary/dreadnought.yml b/Resources/Prototypes/_Forge/Shipyard/Mercenary/dreadnought.yml index 0f61959104d0..3292ab0e081e 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Mercenary/dreadnought.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Mercenary/dreadnought.yml @@ -16,7 +16,7 @@ name: SBI Дредноут description: Крупногабаритный шаттл для наёмников, рекомендуемый состав экипажа 4 человека. price: 195500 - category: Small + category: Large group: Mercenary shuttlePath: /Maps/_Forge/Shuttles/Mercenary/dreadnought.yml addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml index 68c136be6bfe..72fb747f1e26 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml @@ -12,7 +12,7 @@ id: Empress parent: BaseVessel name: NSF Императрица - description: Крупногабаритный патрульшый шаттл ДСБФ. Рекомендованный состав команды 4-8 человек. + description: Крупногабаритный патрульный шаттл ДСБФ. Рекомендованный состав команды 4-8 человек. price: 382500 #Appraisal value is 150000 category: Large group: Security diff --git a/Resources/Prototypes/_Forge/company.yml b/Resources/Prototypes/_Forge/company.yml new file mode 100644 index 000000000000..6a60e97d90d9 --- /dev/null +++ b/Resources/Prototypes/_Forge/company.yml @@ -0,0 +1,222 @@ +# "None" - DO NOT REMOVE! +- type: company + id: None + form: Neutral # Do NOT apply "Neutral" to anywhere outside "None" + name: Свободный + color: "#FFFFFF" + +# ==== DO NOT TOUCH - ADMIN COMPANIES ==== +# On a less serious note, these are just companies that are auto-assigned to jobs. +# You can add to this in CompanySystem.cs in Content.Server + +- type: company + id: NFSD + form: Protagonist + name: ДСБФ + color: "#5c7d4d" + disabled: true + entityIcon: BannerNfsd + +- type: company + id: Syndicate + form: Antagonist + name: Синдикат + color: "#5c0d1a" + disabled: true + entityIcon: BannerSyndicate + spawnSound: !type:SoundPathSpecifier + path: "/Audio/Ambience/Antag/traitor_start.ogg" + +- type: company + id: Hospital + form: Protagonist + name: Госпиталь + color: "#74c3f7" + disabled: true + entityIcon: BannerMedical + +- type: company + id: Nanotrasen # Nanotrasen?.. + form: Protagonist + name: Nanotrasen + description: company-nanotrasen-description + color: "#253461" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: BannerNanotrasen + logins: + - Eifall + - IMERATOR + - mersen + - Weilpatent + - v6st + - Ruki + - goster + - LeviyNosok + - DanielDelo + - Protection + - Ryomzeck + +# ==== GENERAL COMPANIES ==== + +- type: company + id: EMS + form: Protagonist + name: Emergency Medical Society + description: company-ems-description + color: "#0079c9" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: NFSignEms1 + +- type: company + id: LVHI + form: Protagonist + name: Langstad-Voigt Heavy Industries + description: company-lvhi-description + color: "#c78256" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: NFPosterContrabandLvhiStation + +- type: company + id: FarStarBiotech + form: Protagonist + name: Far Star Biotech + description: company-far-star-biotech-description + color: "#006479" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-fsb.png + entityIcon: BannerFsb + +- type: company + id: ArdenteGroup + form: Protagonist + name: Ardente Group + description: company-ardente-description + color: "#a07a3c" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: PosterLegitArdenteGroup + +# Logins company +- type: company + id: Daybreak + form: Protagonist + name: Рассвет + description: company-daybreak-description + color: "#bd6566" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: BannerDaybreak + disabled: true + logins: + - Eifall + - IMERATOR + - mersen + - v6st + - Weilpatent + - Ruki + - LeviyNosok + - DanielDelo + - Bingu + - Protection + - Ryomzeck + - shlakoblokun + - eyes_of_wisdom + - Egor17777 + - GGONZALES + - Marsello + - JunJun + - Borisovych + - beybasigma + - Wehaid + - Wasdom + - JaBa909 + - Gmkhts_sh + - nykeoke + - Atima + - IDontKnowWHatToD_2 + +- type: company + id: ArdenteAdvM + form: Protagonist + name: Ardente Advanced Manufacturing + description: company-ardente-manufacture-description + color: "#6c8079" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: PosterLegitArdenteAM + logins: # Yep, AAM + - Eifall + - IMERATOR + - mersen + - v6st + - Weilpatent + - Ruki + - shlakoblokun + - LeviyNosok + - DanielDelo + - Bingu + - JaBa909 + - Gmkhts_sh + - Atima + +- type: company + id: TechnicLogistic + form: Protagonist + name: TechnicLogistic + description: company-techniclogistic-description + color: "#83489d" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: BannerTL + logins: + - Eifall + - IMERATOR + - mersen + - v6st + +- type: company + id: Gobliniade + form: Protagonist + name: Великий Гоблинат + description: company-gobliniade-description + color: "#564d91" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: BannerGoblin01 + spawnSound: !type:SoundPathSpecifier + path: "/Audio/Ambience/Antag/pirate_start.ogg" + logins: + - Eifall + - IMERATOR + - mersen + - v6st + - Xent + +- type: company + id: USSP + form: Protagonist + name: СССП + description: company-ussp-description + color: "#921d1b" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: PosterContrabandCommunistState + spawnSound: !type:SoundPathSpecifier + path: "/Audio/Ambience/Antag/headrev_start.ogg" + logins: + - Eifall + - IMERATOR + - mersen + - v6st + - Ruki + - LeviyNosok + - DanielDelo + +- type: company + id: Nexus + form: Protagonist + name: Nexus Star Consortium + description: company-nexus-description + color: "#0f3b62" + # image: /Textures/_NF/Structures/Decoration/banner.rsi/banner-wizard.png + entityIcon: BannerNexus + logins: + - Eifall + - IMERATOR + - mersen + - v6st + - Ruki + - LeviyNosok diff --git a/Resources/Prototypes/_Mono/tags.yml b/Resources/Prototypes/_Mono/tags.yml new file mode 100644 index 000000000000..a0129f2a223d --- /dev/null +++ b/Resources/Prototypes/_Mono/tags.yml @@ -0,0 +1,4 @@ +# Ship tags + +- type: Tag + id: CrewedShuttle diff --git a/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/ship_vouchers.yml b/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/ship_vouchers.yml index 8e672023a8a1..93f824456680 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/ship_vouchers.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/ship_vouchers.yml @@ -42,6 +42,7 @@ - Sergeant # Frontier accessGroups: # Frontier - GeneralNfsdAccess # Frontier + companyName: NFSD - type: entity parent: ShipVoucherNfsdSergeant @@ -60,6 +61,7 @@ - Bailiff # Frontier accessGroups: # Frontier - GeneralNfsdAccess # Frontier + companyName: NFSD # Frontier vouchers - type: entity @@ -79,6 +81,7 @@ consoleType: Sr access: - Janitor + companyName: Nanotrasen - type: entity parent: ShipVoucherFrontierJanitor @@ -93,6 +96,7 @@ - type: ShipyardVoucher access: - Service + companyName: Nanotrasen - type: entity parent: ShipVoucherFrontierJanitor @@ -107,6 +111,7 @@ - type: ShipyardVoucher access: - Mail + companyName: Nanotrasen - type: entity parent: ShipVoucherFrontierJanitor @@ -121,6 +126,7 @@ - type: ShipyardVoucher access: - Brig # odd, but potentially restricts cadets in lieu of a security guard-only access level + companyName: Nanotrasen - type: entity parent: ShipVoucherFrontierJanitor @@ -135,6 +141,7 @@ - type: ShipyardVoucher access: - StationTrafficController + companyName: Nanotrasen # Forge-Frontier - type: entity @@ -154,5 +161,6 @@ consoleType: Modules access: - Modules # Frontier + companyName: NFSD - type: StaticPrice #CorvaxFrontier price: 1200 diff --git a/Resources/Textures/Forge/Companies/dme.png b/Resources/Textures/Forge/Companies/dme.png new file mode 100644 index 0000000000000000000000000000000000000000..35f5e7a3826a50eb71752619726caa799d266621 GIT binary patch literal 107138 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
  • K^~*^IeNl7fK7w#6YQ8xUbZqbUi)DIO1e(ozN#Nj}N(_VwwQDOpN=PaX5%a`Q838 zK`H`uW`w9DTeSE$28z_Pox*4Cu)Khm=_i(%OTwPg&k(zQC&*yi81e}i)kiyirRd*{ zl0-v*RX@D-5GYR8E>nJMhl#%XOZPmv6=syf|2bZ*8XG>H#zyyVn_*=wf1jyGQ^ zU0nB_OJ^{$WE*hygjkV4LedR~*mFac@*bCF4-_*N!I1egQDqZ9fsL2!MBS&xX9S zShkfiI7pgS5S{gb=Q}hXt*7KIlV_+CUXZ2VuyHCiiS+{hqr5N2S4~_nQRCs?evLG5 zVXw85%a+tkg!k4N|D5cV8CdS;;(T~_<6OGKIFHA5t`l#f?G3Khr&Sp(3mspgUzXW6 zG||D8N@TU9ZEPQ*cXmh23@UsqII zY^}8`)u3b@7Th+Zm9Sm6LqnUSLjx0guBnsLTodnF1m5<<}d3?UeHgC|pN4ZTuD&YVr5Yhp3FiPrmW6R414SEF$^ zBe7}o&mMFNiW>Xr4s=iZUp^Zg=wIsoTfKBfmHtb5Blbtzwh45n;^HciD>uo2jOJ-> zo|jwLUyis@YM4k75yB>Nog^8tChHw-C*sR_BEtHrarh0SmJPc!m^ox{S=!c3qGC7B=5-s;Oy64Cp^cis2G-dd*1u036~ zC88Z5{M`65yNsCsXzn^!Y$cGaY4>#1Lw5B}iCce0Lko%s^OM3u*)RUmJ}0Q2f7$e& zeHl%@MRd$bn`m0U_MPU-$qI()I%a@4aH^1zTv{s-N28;v)=uF%6RAB;z*zzM0qCYY zQxLs39?`HtT~2o%XP03~7-y^47!?{SNns#1?p{N|)5hsuXa*p#%7YH#OK4%hmvbYv z4N_7wLFT#hX}bq?<8ja%chaj@CRuVV=ywr3?6f`?!{~6w zJG8ewl}6g01ezy%h1oEaNi#&3ahE6E>ql5I_|NUEmN}Xk5yt;oCdJuy6cF}j^=;$_ zdaWcA(K>O@zK=a#0IzoXd@6u9rac?0P zA6Dv*F$+`9Hkg_WMdYhM)^YjBd!id(W0(d*^#JYm@hdo~?xmdQSDN zx=h$yPzwT_2Z(-Do}k=Mbw&a}ho%)Iard^I6h=Pun*tFCx`hB{1Dd1r@NI9oJ3@1X zOW*#Bp>s7>mFvX)&Bj_(ul^asDMZ$g#=Vvn3DT*(_;S;S!3NnX#rk4yg9*sghuxlM zT&kpX&sS*q-YyjR9Ic#RT@23IOER22#c9-8zbTi`l|;zKb@wGt2FkKM`llQ}Z zFa-vN@M7^+qd)uzSRYhGxZP+WpzRrTC7{2#VpFY1gQWTJc84K$eEowzbSRGPjQcpK z@JcIajU>rTCx5dx9Kw~3iJk3TEqH2X?ZO9A+2=95-xm6Gku6{K{@Mq) zmF#C8xPUJN%jgqkX%^Jn+w(%LQoS0VqMdGQYID?BWBPD9dli|%*YNkPk9QP$!)vQY zY=n2IBNqR$m3$xZSxn-uY4B{yU0)FL@95HCBqc25!YLj7>8Sp`9;m;7Q~~dYBIOqt zJKX?wW&rR%PPzHkTI8Ii{v9Ml1LSG2kdUpE&?5slSsAZ|X_NGBNZVvR(-lLQOEfk< zn_M`qev*#b@`?MWs@je{_iC2MrffUzyr!q;^{)AFx0f5mPfRH$0dwjRkd)fd4W?T* zCNRx=>;2Z7@L#DJ*{xq<<)GRgmHCW&Y&*%-``-9-MfV-oP;GlIrTOet8SS`sP1%(B zUjHa`D*tlyVZhjKv#5F@k8kF^>-f8x4>$IOH8uP%&Mzc_49JDIjrG5|PqNlLV%VE+ zZ$TW*>1k;--lN8IGxqiao1!!{?&A|rp@wt#U*qAN+zwk4XHSv~6ypqJEA~W5KP_AZ zOYgQ-kL1-mFf8i--OSF@^dITa3u*^)tt&1+2vEGey|u8R9ep>pM;|DaVDbt8jiB(1 zFlzkYrpBP~O)h+tlL*bCGcq$i9{h8f5vjF4iQ^w*%-=m`4!$M`zuzB#19zHKKf|Ua zDA;iAwR1YJ*LdAHPFTptMJCkhkA_|5O3gQWVhn9E2TsxEd5z6iC}n1~gR7g2I}jK^ zh+bc%eh0c65X3QJ;&RMk{jZlPYVgFv>A+Fg$~E-BhgeMMK;Vm;E#S^|mz?@Z+aruM zK25dA<2bSf9wm6`kx5;bQKyr&;Qk+MX zp1U5WZ}=dlXBvsm0QZ#Vc&6{BG`~e~u~p6Tx@N7{pC`zkAsf5|_PCbi(g78@Jbywv6~w!Z|r129Ia4{;2w0 zEYNDWFFz+lfCWpkW&j$Bz-R-*W5?D~;(dW?atqJth1zl9_u+Y(8%G~%&9Zj*x6g(! zMTRVkZ0_AX3qaO(8hzw?#*-cv&QV8RzNN7_g2f;KthuZg6VdEuKq!R?L^sx0E32z+ zxmDt;>?F4smvwoP`kq+Ux*w6Bq#CN#O0Up%cEU?~zH)9E)a0|ffbX;06y6`bA1kNex7x6pPPCs$5gr^3>;()ONIN%Lj$8;bL zD^ysO>|M4#qo$oeNT_@9GoewI zp&=x?4xOIh)?&*~WXWu2sy<>CTIsC$*+;!?v&d{;ewbDOOiH|7lF|PJ&H|YD!{v#g zstN`6YgKRwfUO9v$oG(Adl+tmNm623niMF_zPy|~v`oZ(Djd>`GvqNiDla5Y2kT#o zn`Lm>TXA=|`KsGP?;u9c=6RqXVkkD0yo~r|7zt4r6L%8g#wZzBXrTLup#9b6hD->) zpuk0YU0uZ_^FlSw#c)c7H>E$l8Tcja2~X(>=8Xpo|4OzWE~P1GlCQ7syEXOi94lEJ z?g#~oL^Wa8kFHA(3>yo{-_QB6Y|Zk0(s=t`N1EWY$KVXzDR@jYMZ**yLho-TMN`cc zwG`SuZLzld{nDiko&+Lu+b(wd8%xzu&ps{4P5@UDDu1XirkoNQm}Eer0GGqT>8Jx$ z2L!yEmku1jL9Tb%yIUS@oG{GdRvRZL4F04I`hZb4hCDBgqC%qlQ^<1U263n@1xW6H*_GPc&_mbXWqH6a#sEVGkFD3=E$D*t%P0_^yZJGRS z`Te)#@$ytC3oO}Ktw=M?1!F^(NuKSMI!vse)MEXojes?{V*rdkHMd6H)v2k!k9~(1 z;(&=Ux8s>@_O=f5NeYUje~&DYxouR+DBC~RVx?&RFGCwhJE)rCZTzO3hcwU6zH zi6w2t@grWyW{9pmt1X19xh8OwCwFgcDJoknZ|i}%Ya;ckM4?m+6X;2RR-;m&YGrNx zue}l2$1a;tZ0y*RaIfMaccKai|J8J)wVuo5JjD5^%X^Jz>EoT2mp+p%Xu5S zcT4zU=lW0-fnZn{G9ubFP%fh{*A|PF)aY+v_MvT{)Oo4 zsD;<7CFT4 z{;$0&;Yw<2!w1A1KtU?CEXAbZmXg_EgNi7asHtU{W_q)ztW519YKaO?=rxBhr@YRU z+2oXSBxyOMrRIDMCG$FEfMseqeVe}fC%&~l7A(#>>#*4i&Uw$XpZ9s6cUy}ho*H?n zgc1?1%}X;DFwkRb9g_YTG#}N>5+j+zD~lmoP=~er%wGAj&o(D;>XLJQ!BYFahMX8e z-ODhJN}NUGH>Cn+*8lC5J=4Q<2)Prh;iCK&DhhfZ_>%=+a&hZPciLvqtOnI)f>$_CX@QZ-rN z1;vOu=h&Ss2Eh3Ts0cATYOM#c8xCv;YP-F&-mft5&S%Y81PH0H9<%P!_BkDsZv}Qz zvvX-*w;kAy9eP6L=y8Li*KHlwAmF6dcW(jhoZan}bNV4J>-WQDr`U51c4#1n0#Cp! z0h$_=L4vF{_%^Tr=i?8kaPiX^_IYRX$IOB&ENhv%kwyAS4RHvps5BVkl75L~*euPP*I$x17FN84n;`CeSC&{@Jy ztFac{Y^zWfEi}eJKl}P!bL7x9oPs}d634u<4l><3EIc78+-TU#)j>3kzI*@wRzx&kl0f&dQ7zFZ5J`iLA3EB-T4g{_>l>UZ= zZ6u%)<7Sk-_&%OTl2+pFl*wjF!n7(kV-*5(^)+XWKp_JGK#_ZPTFamVR2lR^NhrE# zypV5>`*{K`AcbqxT%PvBM&LCU_j7hzYWjZ@ zhk(}yC3k`OTY-pTi{T!U9T%t6eL}4BZGp63Q5XU_BB5m=dihK~p(Tvt3f!K5s;1Sq z#NPRXIlU76B7#sw{5E@$6D46{1g|Xx@8T*#cKnI9vSbt0fyb`J_9Tn^ZZlqoX`Y)o z&u!q`@Mg7rfO`P^(JpBXYk+J~?GPvr`{>h0(YKsju1LD)rPWn)vO+E0aY%#zstjwbHN`%Zl_Ms=!%a_$= zFQ&A9DcN1}yks}pfem6Oe|2(I!t}kBxz_++`VU-fJFY7{iBJC!uO9@rm{jGL{$tL@ zgt9RJso1oDS_#uKM|0jON@+jKy-(ppX5jLNa|y3J^97MTqQ0E9{hTKi7R>ln+#lCi zaaakFl*wXqCh9;>AMdR@#V}^haMtpK))5HYmTJBOpD=_K=HtmTjRS@5w83;ebQAZc zB|Z|Y`aJzs-FG+ZJOpGc9$gO~7*6VMSl6lPr{xF#%hTl(x9dn^(bcJ4O^b&hPq^H6 zTqm6ukb25S4M>kf#&lz7J|*M_S2i2rf*KirYdCZVC)AG$PG%i4-P3C=lD3VbAo_RK z=l=wkYC_c3Gvlj#%{e_2K;oPy@X8fjs^5c(AMuyR($oDz2AZc_&BVb4U#`kDGoPgQ z&0d1yRnn5^yXk1ncSI18cqMz$d6J~UMQd4pMK#fz`Nkpsv|_G{e5D5M;u{x1oALsR z%0+aGId&&haxst9UmECooYDaQ%$*+g{fTy8rTaPNyHN?3V)6pA>PeWUJDW?WCA^H) zKhGdPoL?xEnJJ{D5f92G&I#S^z*3o4;rTX<(=q?EH*Q6qAD_86lK$-J>tICRCi<9n zjB|8JxG4?++R>_UX)3-BVS^p*9eX@7Y*QqAosumjF4K!hnN8QN6KV*)R8e(Dm3i#- zzNwIS^HHqNU#vXZI=75U4pI}Gj>gGV7uQ`+g@)!EPR7Ib`_;$VC2h{d!M3X`1wz0v zIhJKAa`etzg`T!#J)F-8ziP;nh3kgO!qZey=7;k;fe0G_x5ylGLzL5f<(9MLS|YK6 z+eslbCu~;W-u1cEEz%1`WItNim(c1;I|*xFqSbT~l@kcCt1Sl4Q^8f?3Q*%WxyL8V zN8QtW1@=IhurM!oTFgBJfTo3NQ-W z?t7SSC{;B|*C|<{q^W#R4_WQb*Jq?wE3|<8j%rlvQ-=5S%>_Y)WZi+%5dWBZyaJ-Y zx~JUt;g=05I4YvJDjHGH_;>QWaY==e4jrzE7=M6ZMz9P_Wm~!eCtvZr!6bPJvyUjk zNdM=bTtka&yz`Px{1?LqJnahX2c|GPwKrMnl&cg64=oKijWW_T6~4KZp>>8=H%(pYUQt0vtsC+ z+rpGoK5aZG5E-A-wjx_Ys?i=W{zg@2!_waVy=Q0kyNH;orCS5tg-qg%A ziQjnLI-pNT%k$S=cB{H|;B#+Qn%C-Y+YH2U{d5%64r~~)KAvkX)p+^y0s2roct56{txXdIZAalnB5$=& zu?{^Hxyw6VNI5pJFRjM2w2AuOlk^cMda=|LoQlSOds$d@>$;eSeGd1jnpynsW@|bMdcQ;1!A-{p6{bMajf|JEkFtabKQAvKX&oD(%t@onYpqT+0>QT2 zWag0BC|NK*i=e$zgTk5@uM|a`Hc_YvsU)!!5}G*~sjaWC_%C-#r%3=I;qa~NL;IG! zQ8;>_i@09Xm|S%JyREIn7Mb))uFujyj@VQ6B&$^pGlw(a_<%UCyKt21NK88ixhE## zGh!mO!ORR&qHeq!2vMFPaQlMldxAD{TB{;VOwwX%^-7iks*ASGZ)3${ZzJ+Mu>Zq9 vf^bF7SFyIV_~yFD5CkcoccNZ6as=8Aw&lS~`greF4^3hF` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Forge/Companies/lvhi.png b/Resources/Textures/Forge/Companies/lvhi.png new file mode 100644 index 0000000000000000000000000000000000000000..d1efdb6e798a77fd010eb85308e3d36d48bf409a GIT binary patch literal 93252 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 #lV%nU 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

    8S3S1=!>jJ`kC0%um6L)1o^X`iB%|27w_ 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 z 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

    n)A7$G#+Ze;b( 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Forge/Structures/Decoration/banner.rsi/banner_sune.png b/Resources/Textures/Forge/Structures/Decoration/banner.rsi/banner_sune.png new file mode 100644 index 0000000000000000000000000000000000000000..01f47d05172642d1d06f01e8750a3dbe5c253f34 GIT binary patch literal 822 zcmV-61Ihe}P)Px%@JU2LR9JG5M>^>}vHqaT@mk?%#mDK~BbfCm5zubyIIaRmU-e>u}89LyRpG8x#810Le| zw*y{JeK)>-(}Vy3U}Q2dW*)$H91L8$f!w$SBhw1E9mhX!>kqjerr(KM0V>?uSO)++ zd6e_dJ1JIwXZjv$$JKa|H9F!i=j*w?r zYUuIQf@1aCJNeM8z%8If%6oVRyaA40b_ziC>Fjl3&xII|j>Bd3!W9Usq;AIc)T<>G zOL>5#ZbHvaNE^$7L;|ogmJR3o;y{D|VKdHNNyh?|4@oG9G5~8pgGYz2N}2K?jp}zb zfJADj<6yqGd`SNL<>dircv$fLy7-=cNS;44thQXK2{l3hK0GRz@8Lnpm7j_Lt`iw< zkxD?4PY<;9vk<&rJb)ma26xQ_e+|}Jr41wip#pHJ--rxPO^gLJH5A~k5m=-WfS`WT z002OU4fKSEH?vcL{*(ZM5L*}?32<^!#pYS-vK12!0L|=F8^mV)Z_DSjp$?#XeK-TK zdwK={c&qh5E4Y}K_;Xt+xbVClUrYUz002NoFZ#?Olu8AB_PT-nCc5AMf|vLxG}9Ut zZ0$DzbOQiPa}0k<`#8a|IzZA(z%3H!+BwL2{s_R4(2N!hc8df_Bq9MqHzZ4|%bHz3 z@IipqikN2b>F0xW^tS2j`T>?!mqWK>LI57ZEs{_W_Q(diMIsd*2|$ZN&|*Q@BOMp% zL={O#YwqDQ4*-nhVB2`taN3_O9~?JxB>Px%eMv+?R9J=Wm%nS(P!z|%hD?!|kRb?0=;YMNO>ht=@y9MA>Qo+GL{Kqx_C-(- zmq+Pj#i4(I7N^po(5+J^C&4#JhLGpOOd)lUb3ON0ZsMxnrMc(abHAUPo0psd|GG|% zEy%L$q%S|8&qu8}crqD(-g+ToWmRkQ?mc@o3dA{yjNiX}f;5Sx905?A0}TbSCb_Yy zG>P%GtN;Lk?-?P|Bt}`)P7p1~jhnVZ;Cs@}`7WEblOO=#>fMI`faBe5lvOQiudO{d zf=Gib%TD-?RRh`;&yfP(6XvA74{xO!;P=sR2w%Me+%)h#G;JqhWmQYY1lF{jX3p;h z!I-20@Z0Gc^P?eyrtNU^!6T{0W^M#1fBZzfSmMI@v(_Rp*YGn8e9vh3<=c0}QRoJ! z7fS)c$3qlHVefoXP6ObRCwU>oHj7+btGS)oREqD+rqUWTR^@3C#bC3@wZ(akpl+{k zNCv8z?ao*M$bgFJn$D4r36R%K@&c2*kaB~b0hjnrXhGBNIJ~L07r;d7g85q+0cc_M zLF4Mnak(~QJ%WpuFJbM*6)Cp$Xz@UIyltmj}8u{ zzx)W)9Odi9Qi`e4K1Q!M)}3eTdg0g}&NvG3cslF<7*Ub!RcvZLhRmZ^yebWVjMF5> z>h=3lj^6RAxe1E*0!`Z?J#!kXE9cw*HgiD#yi&u$&G`49x+V_k1fYo@-@O4~Z!}08 z0?>Pgl{698reo`E$v70lNMX))fwsND~*AJme$K)7h<+=MiyJ08`Rn`Ap%+m1&A pm_Tf%V~j@ws310t{nzZjegU9;hthGep`8E#002ovPDHLkV1n!`RlNWJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Forge/Structures/Wallmounts/posters.rsi/cf_poster2_legit.png b/Resources/Textures/Forge/Structures/Wallmounts/posters.rsi/cf_poster2_legit.png new file mode 100644 index 0000000000000000000000000000000000000000..d186ad0e7237799dfc37cf54901b7114945f3eee GIT binary patch literal 396 zcmV;70dxL|P)Px$MoC0LR9J=WmO%=GKnz7==?Mm0DoBN1#FKQ}3-k!RK({?fFCr*~b}7si?4~18 z6O-72n|V7WGx?b$GXaQ1HYQoK=ujSe>VMnR=Kc0-oI01%MkNe3S}~$ga7;NpR{*yM zz0UhiC1fW#cP`~4{)(Uo>$r4@0)q3v`}JJfX9TvDM5t>ZY@FrA@J$`RMJOv^8a*cl zgN03TE(Iu|r|My`1~_NoJIjl~F=rz&6QIpKj+l#HQwypSkQ`ZUOaiPMTGy(&Aj=DL zji2Us zehaiBG3-mFy$z{)n8HO5V7vz?sCux#3TT@;32*u@EJY6>v|-!SNtklDba46B4kYRs qPBW6>6Z_jpCW*nU8A>CO&G`Vw_@G$90QPPG0000 Date: Thu, 22 Jan 2026 02:24:19 +0900 Subject: [PATCH 02/12] DataBaseInit --- ...0121171509_AddCompanyToProfile.Designer.cs | 2140 +++++++++++++++++ .../20260121171509_AddCompanyToProfile.cs | 29 + .../PostgresServerDbContextModelSnapshot.cs | 5 + ...0121171502_AddCompanyToProfile.Designer.cs | 2063 ++++++++++++++++ .../20260121171502_AddCompanyToProfile.cs | 29 + .../SqliteServerDbContextModelSnapshot.cs | 5 + Content.Server.Database/Model.cs | 2 + Content.Server/Database/ServerDbBase.cs | 7 +- 8 files changed, 4279 insertions(+), 1 deletion(-) create mode 100644 Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.cs diff --git a/Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.Designer.cs b/Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.Designer.cs new file mode 100644 index 000000000000..89de5304799e --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.Designer.cs @@ -0,0 +1,2140 @@ +// +using System; +using System.Collections.Generic; +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("20260121171509_AddCompanyToProfile")] + partial class AddCompanyToProfile + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .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("Deadminned") + .HasColumnType("boolean") + .HasColumnName("deadminned"); + + b.Property("Suspended") + .HasColumnType("boolean") + .HasColumnName("suspended"); + + 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") + .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") + .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.IPIntelCache", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("ipintel_cache_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Score") + .HasColumnType("real") + .HasColumnName("score"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.HasKey("Id") + .HasName("PK_ipintel_cache"); + + b.ToTable("ipintel_cache", (string)null); + }); + + 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.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.PrimitiveCollection>("ConstructionFavorites") + .IsRequired() + .HasColumnType("text[]") + .HasColumnName("construction_favorites"); + + 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("BankBalance") + .HasColumnType("integer") + .HasColumnName("bank_balance"); + + b.Property("BarkVoice") + .IsRequired() + .HasColumnType("text") + .HasColumnName("bark_voice"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Company") + .IsRequired() + .HasColumnType("text") + .HasColumnName("company"); + + 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("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + 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("Voice") + .IsRequired() + .HasColumnType("text") + .HasColumnName("voice"); + + 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.ProfileLoadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("loadout_name"); + + b.Property("ProfileLoadoutGroupId") + .HasColumnType("integer") + .HasColumnName("profile_loadout_group_id"); + + b.HasKey("Id") + .HasName("PK_profile_loadout"); + + b.HasIndex("ProfileLoadoutGroupId"); + + b.ToTable("profile_loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileLoadoutGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_loadout_group_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("GroupName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("group_name"); + + b.Property("ProfileRoleLoadoutId") + .HasColumnType("integer") + .HasColumnName("profile_role_loadout_id"); + + b.HasKey("Id") + .HasName("PK_profile_loadout_group"); + + b.HasIndex("ProfileRoleLoadoutId"); + + b.ToTable("profile_loadout_group", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_role_loadout_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EntityName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("entity_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_name"); + + b.HasKey("Id") + .HasName("PK_profile_role_loadout"); + + b.HasIndex("ProfileId"); + + b.ToTable("profile_role_loadout", (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.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.ProfileLoadout", b => + { + b.HasOne("Content.Server.Database.ProfileLoadoutGroup", "ProfileLoadoutGroup") + .WithMany("Loadouts") + .HasForeignKey("ProfileLoadoutGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_loadout_profile_loadout_group_profile_loadout_group~"); + + b.Navigation("ProfileLoadoutGroup"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileLoadoutGroup", b => + { + b.HasOne("Content.Server.Database.ProfileRoleLoadout", "ProfileRoleLoadout") + .WithMany("Groups") + .HasForeignKey("ProfileRoleLoadoutId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_loadout_group_profile_role_loadout_profile_role_loa~"); + + b.Navigation("ProfileRoleLoadout"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_role_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + 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.ProfileLoadoutGroup", b => + { + b.Navigation("Loadouts"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.Navigation("Groups"); + }); + + 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/20260121171509_AddCompanyToProfile.cs b/Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.cs new file mode 100644 index 000000000000..39fdf0004463 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20260121171509_AddCompanyToProfile.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class AddCompanyToProfile : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "company", + table: "profile", + type: "text", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "company", + table: "profile"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index 9b6185bce66b..88261349540d 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -845,6 +845,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("text") .HasColumnName("char_name"); + b.Property("Company") + .IsRequired() + .HasColumnType("text") + .HasColumnName("company"); + b.Property("EyeColor") .IsRequired() .HasColumnType("text") diff --git a/Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.Designer.cs new file mode 100644 index 000000000000..7eab09c46290 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.Designer.cs @@ -0,0 +1,2063 @@ +// +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("20260121171502_AddCompanyToProfile")] + partial class AddCompanyToProfile + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.1"); + + 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("Deadminned") + .HasColumnType("INTEGER") + .HasColumnName("deadminned"); + + b.Property("Suspended") + .HasColumnType("INTEGER") + .HasColumnName("suspended"); + + 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") + .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") + .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.IPIntelCache", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("ipintel_cache_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Score") + .HasColumnType("REAL") + .HasColumnName("score"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.HasKey("Id") + .HasName("PK_ipintel_cache"); + + b.HasIndex("Address") + .IsUnique(); + + b.ToTable("ipintel_cache", (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.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.PrimitiveCollection("ConstructionFavorites") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("construction_favorites"); + + 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("BankBalance") + .HasColumnType("INTEGER") + .HasColumnName("bank_balance"); + + b.Property("BarkVoice") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("bark_voice"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Company") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("company"); + + 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("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + 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("Voice") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("voice"); + + 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.ProfileLoadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_loadout_id"); + + b.Property("LoadoutName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("loadout_name"); + + b.Property("ProfileLoadoutGroupId") + .HasColumnType("INTEGER") + .HasColumnName("profile_loadout_group_id"); + + b.HasKey("Id") + .HasName("PK_profile_loadout"); + + b.HasIndex("ProfileLoadoutGroupId"); + + b.ToTable("profile_loadout", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileLoadoutGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_loadout_group_id"); + + b.Property("GroupName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("group_name"); + + b.Property("ProfileRoleLoadoutId") + .HasColumnType("INTEGER") + .HasColumnName("profile_role_loadout_id"); + + b.HasKey("Id") + .HasName("PK_profile_loadout_group"); + + b.HasIndex("ProfileRoleLoadoutId"); + + b.ToTable("profile_loadout_group", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_role_loadout_id"); + + b.Property("EntityName") + .HasMaxLength(256) + .HasColumnType("TEXT") + .HasColumnName("entity_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_name"); + + b.HasKey("Id") + .HasName("PK_profile_role_loadout"); + + b.HasIndex("ProfileId"); + + b.ToTable("profile_role_loadout", (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.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.ProfileLoadout", b => + { + b.HasOne("Content.Server.Database.ProfileLoadoutGroup", "ProfileLoadoutGroup") + .WithMany("Loadouts") + .HasForeignKey("ProfileLoadoutGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_loadout_profile_loadout_group_profile_loadout_group_id"); + + b.Navigation("ProfileLoadoutGroup"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileLoadoutGroup", b => + { + b.HasOne("Content.Server.Database.ProfileRoleLoadout", "ProfileRoleLoadout") + .WithMany("Groups") + .HasForeignKey("ProfileRoleLoadoutId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_loadout_group_profile_role_loadout_profile_role_loadout_id"); + + b.Navigation("ProfileRoleLoadout"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Loadouts") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_role_loadout_profile_profile_id"); + + b.Navigation("Profile"); + }); + + 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.ProfileLoadoutGroup", b => + { + b.Navigation("Loadouts"); + }); + + modelBuilder.Entity("Content.Server.Database.ProfileRoleLoadout", b => + { + b.Navigation("Groups"); + }); + + 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/20260121171502_AddCompanyToProfile.cs b/Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.cs new file mode 100644 index 000000000000..5690137cbfc0 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20260121171502_AddCompanyToProfile.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class AddCompanyToProfile : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "company", + table: "profile", + type: "TEXT", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "company", + table: "profile"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index dc1a3c14078f..b0882c9aca35 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -796,6 +796,11 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("TEXT") .HasColumnName("char_name"); + b.Property("Company") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("company"); + b.Property("EyeColor") .IsRequired() .HasColumnType("TEXT") diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index 185aaa8bf035..1dee8036fa9b 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -425,6 +425,8 @@ public class Profile [Column("pref_unavailable")] public DbPreferenceUnavailableMode PreferenceUnavailable { get; set; } + public string Company { get; set; } = "None"; // Forge-Change: Mono + public int PreferenceId { get; set; } public Preference Preference { get; set; } = null!; } diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 4f93c64d63e4..1125f173c2b9 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -268,6 +268,10 @@ private static HumanoidCharacterProfile ConvertProfiles(Profile profile) loadouts[role.RoleName] = loadout; } + // Forge-Change: Mono + // Get the company with fallback to default "None" + var company = profile.Company ?? "None"; + // Forge-Change Corvax-Wega-Hair-Extended-start List hairColors; try @@ -307,7 +311,8 @@ private static HumanoidCharacterProfile ConvertProfiles(Profile profile) antags.ToHashSet(), traits.ToHashSet(), loadouts, - barkVoice // Corvax-Frontier-Barks + barkVoice, // Corvax-Frontier-Barks + company // Forge-Change: Mono ); } From 47c175729f231968f3b0b0d5a30c250d99258355 Mon Sep 17 00:00:00 2001 From: v6st Date: Thu, 22 Jan 2026 04:20:27 +0300 Subject: [PATCH 03/12] visual's --- Content.Client/PDA/PdaMenu.xaml.cs | 18 +++++++- Content.Client/Shuttles/UI/DockingScreen.xaml | 6 --- .../Shuttles/UI/DockingScreen.xaml.cs | 44 ------------------- Content.Server/PDA/PdaSystem.cs | 2 + Content.Server/_Mono/Company/CompanySystem.cs | 38 ++++++++++++++++ .../Access/Systems/IdExaminableSystem.cs | 25 ++++++++++- Content.Shared/PDA/PdaUpdateState.cs | 1 + Resources/Locale/ru-RU/_Forge/company.ftl | 14 ++++++ 8 files changed, 94 insertions(+), 54 deletions(-) diff --git a/Content.Client/PDA/PdaMenu.xaml.cs b/Content.Client/PDA/PdaMenu.xaml.cs index a4858cc88d35..f51febfa1b2f 100644 --- a/Content.Client/PDA/PdaMenu.xaml.cs +++ b/Content.Client/PDA/PdaMenu.xaml.cs @@ -154,8 +154,22 @@ public void UpdateState(PdaUpdateState state) if (state.PdaOwnerInfo.ActualOwnerName != null) { _pdaOwner = state.PdaOwnerInfo.ActualOwnerName; - PdaOwnerLabel.SetMarkup(Loc.GetString("comp-pda-ui-owner", - ("actualOwnerName", _pdaOwner))); + + // Forge-change-start: take _Mono company + // Check if we have company information to display + if (!string.IsNullOrWhiteSpace(state.PdaOwnerInfo.CompanyName)) + { + PdaOwnerLabel.SetMarkup(Loc.GetString("comp-pda-ui-owner-with-company", + ("actualOwnerName", _pdaOwner), + ("companyName", state.PdaOwnerInfo.CompanyName), + ("companyColor", state.PdaOwnerInfo.CompanyColor.ToHex()))); + } + else + { + PdaOwnerLabel.SetMarkup(Loc.GetString("comp-pda-ui-owner", + ("actualOwnerName", _pdaOwner))); + } + // Forge-change-end PdaOwnerLabel.Visible = true; } else diff --git a/Content.Client/Shuttles/UI/DockingScreen.xaml b/Content.Client/Shuttles/UI/DockingScreen.xaml index e0d8d63b32ef..c1c93ed3791f 100644 --- a/Content.Client/Shuttles/UI/DockingScreen.xaml +++ b/Content.Client/Shuttles/UI/DockingScreen.xaml @@ -23,12 +23,6 @@ - - - diff --git a/Content.Client/Shuttles/UI/DockingScreen.xaml.cs b/Content.Client/Shuttles/UI/DockingScreen.xaml.cs index 60f0fbbcd945..ef71774a218c 100644 --- a/Content.Client/Shuttles/UI/DockingScreen.xaml.cs +++ b/Content.Client/Shuttles/UI/DockingScreen.xaml.cs @@ -29,7 +29,6 @@ public sealed partial class DockingScreen : BoxContainer public event Action? DockRequest; public event Action? UndockRequest; - public event Action>? UndockAllRequest; public DockingScreen() { @@ -46,8 +45,6 @@ public DockingScreen() { UndockRequest?.Invoke(entity); }; - - UndockAllButton.OnPressed += _ => OnUndockAllPressed(); // Forge-change } private void OnView(NetEntity obj) @@ -64,19 +61,6 @@ public void UpdateState(EntityUid? shuttle, DockingInterfaceState state) DockingControl.DockState = state; DockingControl.GridEntity = shuttle; BuildDocks(shuttle); - - // Enable the undock all button only if there are docked ports - var hasDockedPorts = false; - if (shuttle != null) - { - var netEntity = _entManager.GetNetEntity(shuttle.Value); - if (Docks.TryGetValue(netEntity, out var shuttleDocks)) - { - hasDockedPorts = shuttleDocks.Any(d => d.Connected); - } - } - - UndockAllButton.Disabled = !hasDockedPorts; } private void BuildDocks(EntityUid? shuttle) @@ -193,32 +177,4 @@ private void OnDockPress(DockingPortState state) { DockingControl.SetViewedDock(state); } - - // Forge-change-start: take from _Mono - private void OnUndockAllPressed() - { - if (UndockAllRequest == null) - return; - - // Find all docks that belong to the current shuttle and are docked - var netEntity = _entManager.GetNetEntity(DockingControl.GridEntity!.Value); - if (!Docks.TryGetValue(netEntity, out var shuttleDocks)) - return; - - var dockedPorts = new List(); - - foreach (var dock in shuttleDocks) - { - if (dock.Connected) - { - dockedPorts.Add(dock.Entity); - } - } - - if (dockedPorts.Count > 0) - { - UndockAllRequest.Invoke(dockedPorts); - } - } - // Forge-change-end } diff --git a/Content.Server/PDA/PdaSystem.cs b/Content.Server/PDA/PdaSystem.cs index aa978135117b..48792e8880af 100644 --- a/Content.Server/PDA/PdaSystem.cs +++ b/Content.Server/PDA/PdaSystem.cs @@ -249,6 +249,8 @@ public override void UpdatePdaUi(EntityUid uid, PdaComponent? pda = null, Entity ActualOwnerName = pda.OwnerName, IdOwner = id?.FullName, JobTitle = id?.LocalizedJobTitle, + CompanyName = companyName, // Forge-change: Mono company + CompanyColor = companyColor, // Forge-change StationAlertLevel = pda.StationAlertLevel, StationAlertColor = pda.StationAlertColor }, diff --git a/Content.Server/_Mono/Company/CompanySystem.cs b/Content.Server/_Mono/Company/CompanySystem.cs index 7744e9b6e02c..e449aebe41f4 100644 --- a/Content.Server/_Mono/Company/CompanySystem.cs +++ b/Content.Server/_Mono/Company/CompanySystem.cs @@ -9,6 +9,7 @@ using Robust.Shared.Prototypes; using Robust.Server.Audio; // Forge-change: spawnSound using Robust.Shared.Audio; // Forge-change: spawnSound +using Content.Shared.Examine; namespace Content.Server._Mono.Company; @@ -64,6 +65,14 @@ public sealed class CompanySystem : EntitySystem "MailCarrier", }; + // Freelancers = no company + private readonly HashSet _noneJobs = new() + { + "NFPirateCaptain", + "NFPirateFirstMate", + "NFPirate", + }; + private readonly HashSet _hospitalJobs = new() { "DirectorOfCare", @@ -79,6 +88,9 @@ public override void Initialize() // Subscribe to player detached event to clean up stored preferences SubscribeLocalEvent(OnPlayerDetached); + + // Subscribe to examination to show the company on examine + SubscribeLocalEvent(OnExamined); } private void OnPlayerDetached(PlayerDetachedEvent args) @@ -124,6 +136,11 @@ private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) // Assign Syndicate company companyComp.CompanyName = "Nanotrasen"; } + else if (args.JobId != null && _noneJobs.Contains(args.JobId)) + { + // Assign "None" company + companyComp.CompanyName = "None"; + } else { // Only consider whitelist if the player has NO specific company preference @@ -194,4 +211,25 @@ private void UpdateIdCardCompany(EntityUid playerEntity, string companyName) _idCardSystem.TryChangeCompanyName(cardId, companyName, idCard); } } + + private void OnExamined(EntityUid uid, Shared._Mono.Company.CompanyComponent component, ExaminedEvent args) + { + if (_prototypeManager.TryIndex(component.CompanyName, out var prototype) && component.CompanyName != "None") + { + // Use the color from the prototype with gender-appropriate pronoun + args.PushMarkup(Loc.GetString("examine-company", + ("entity", uid), + ("company", $"[color={prototype.Color.ToHex()}]{prototype.Name}[/color]")), + priority: 100); // Much higher priority (100) will ensure it's at the top + } + else if (component.CompanyName != "None" && component.CompanyName != "Syndicate") // Forge-change: add Syndicate + { + // Fallback for companies without prototypes + args.PushMarkup(Loc.GetString("examine-company", + ("entity", uid), + ("company", $"[color=yellow]{component.CompanyName}[/color]")), + priority: 100); + } + // Don't show anything for "None" company // Forge-change: and for Syndicate + } } diff --git a/Content.Shared/Access/Systems/IdExaminableSystem.cs b/Content.Shared/Access/Systems/IdExaminableSystem.cs index c05262f2f610..2a11a2030a48 100644 --- a/Content.Shared/Access/Systems/IdExaminableSystem.cs +++ b/Content.Shared/Access/Systems/IdExaminableSystem.cs @@ -4,6 +4,8 @@ using Content.Shared.PDA; using Content.Shared.Verbs; using Robust.Shared.Utility; +using Content.Shared._Mono.Company; // Forge-change +using Robust.Shared.Prototypes; // Forge-change namespace Content.Shared.Access.Systems; @@ -11,6 +13,7 @@ public sealed class IdExaminableSystem : EntitySystem { [Dependency] private readonly ExamineSystemShared _examineSystem = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; // Forge-change public override void Initialize() { @@ -69,12 +72,30 @@ private string GetNameAndJob(IdCardComponent id) { var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})"; + // Forge-change-start: take _Mono company + // Get company information if available + var companySuffix = string.Empty; + if (!string.IsNullOrWhiteSpace(id.CompanyName) && id.CompanyName != "None") + { + if (_prototypeManager.TryIndex(id.CompanyName, out var companyProto)) + { + companySuffix = $" - [color={companyProto.Color.ToHex()}]{companyProto.Name}[/color]"; + } + else + { + companySuffix = $" - {id.CompanyName}"; + } + } + // Forge-change-end + var val = string.IsNullOrWhiteSpace(id.FullName) ? Loc.GetString(id.NameLocId, - ("jobSuffix", jobSuffix)) + ("jobSuffix", jobSuffix), + ("companySuffix", companySuffix)) // Forge-change : Loc.GetString(id.FullNameLocId, ("fullName", id.FullName), - ("jobSuffix", jobSuffix)); + ("jobSuffix", jobSuffix), + ("companySuffix", companySuffix)); // Forge-change return val; } diff --git a/Content.Shared/PDA/PdaUpdateState.cs b/Content.Shared/PDA/PdaUpdateState.cs index cfeb5186cb0e..21d02b74b74e 100644 --- a/Content.Shared/PDA/PdaUpdateState.cs +++ b/Content.Shared/PDA/PdaUpdateState.cs @@ -57,6 +57,7 @@ public struct PdaIdInfoText public string? IdOwner; public string? JobTitle; public string? CompanyName; // Forge-change: take _Mono company + public Color CompanyColor; // Forge-change public string? StationAlertLevel; public Color StationAlertColor; } diff --git a/Resources/Locale/ru-RU/_Forge/company.ftl b/Resources/Locale/ru-RU/_Forge/company.ftl index ca6871945f55..45ab352d88e1 100644 --- a/Resources/Locale/ru-RU/_Forge/company.ftl +++ b/Resources/Locale/ru-RU/_Forge/company.ftl @@ -1,10 +1,24 @@ +# -- random staff -- company-select-button = Выбрать company-leave-button = Покинуть humanoid-profile-editor-company-tab = Компании humanoid-profile-editor-company-label = Компания: +company-examine = Состоит в: {$company} + +# Company examination text with gender-appropriate pronouns + +examine-company = {GENDER($entity) -> + [male] Он состоит в {$company}. + [female] Она состоит в {$company}. + *[other] Они состоят в {$company}. +} + +comp-pda-ui-owner-with-company = Владелец: [color=white]{$actualOwnerName}[/color] ([color={$companyColor}]{$companyName}[/color]) company-none-description = Свобода - тоже выбор. company-no-logins-tooltip = Вы не приглашены в компанию. +# -- Descriptions -- + company-nanotrasen-description = Описания не будет, идите вики читать. Его же кто-то делает, да?? ДА?? company-ems-description = Свободное объединение спасателей, техников, хирургов и всех, кто служит делу жизни. Общие испытания и опыт соединяют тех, кто в решающий момент обращается к человеку с простым призывом: «Не умирай». Поддержка друг друга, обмен знаниями и опытом между ветеранами и новичками, создание прочной стены помощи для тех, кто берёт на себя нелёгкую и часто неблагодарную миссию - помогать пострадавшим в секторе. Служение выражается в благотворительных делах, в обмене знаниями и умениями, а порой и в работе под огнём во время экспедиций вдали от дома. В основе всей организации — стремление идти туда, где ждут, и быть рядом с теми, кто надеется что помощь придёт. From 825c3ec22a598b8174b291744ebc9b4180fc775d Mon Sep 17 00:00:00 2001 From: v6st Date: Fri, 23 Jan 2026 22:16:26 +0300 Subject: [PATCH 04/12] fix limits, limit vessel proto --- .../{ => Systems}/LimitedShuttleSystem.cs | 55 ++------------- Content.Server/_NF/Shipyard/ShipyardEvents.cs | 6 ++ .../Systems/ShipyardSystem.Consoles.cs | 70 ++++++++++++++----- .../_NF/Shipyard/Systems/ShipyardSystem.cs | 2 + .../CrewedShuttleComponent.cs | 0 .../{ => Components}/ShipActivityComponent.cs | 2 +- .../Ships/{ => Components}/VesselComponent.cs | 0 .../Shipyard/Prototypes/VesselPrototype.cs | 3 + .../BlackMarket/QueenAnnesRevenge.yml | 1 + .../_Forge/Shipyard/Nfsd/centurion.yml | 1 + .../_Forge/Shipyard/Nfsd/empress.yml | 1 + .../Prototypes/_Forge/Shipyard/Nfsd/orion.yml | 3 +- .../_Forge/Shipyard/Nfsd/ravager.yml | 1 + .../_Forge/Shipyard/Nfsd/union4.yml | 2 +- .../_Forge/Shipyard/Nfsd/vostok.yml | 1 + .../Prototypes/_Forge/Shipyard/Nfsd/wasp.yml | 1 + .../_Forge/Shipyard/Syndicate/triton.yml | 1 + 17 files changed, 82 insertions(+), 68 deletions(-) rename Content.Server/_Mono/Ships/{ => Systems}/LimitedShuttleSystem.cs (73%) create mode 100644 Content.Server/_NF/Shipyard/ShipyardEvents.cs rename Content.Shared/_Mono/Ships/{ => Components}/CrewedShuttleComponent.cs (100%) rename Content.Shared/_Mono/Ships/{ => Components}/ShipActivityComponent.cs (95%) rename Content.Shared/_Mono/Ships/{ => Components}/VesselComponent.cs (100%) diff --git a/Content.Server/_Mono/Ships/LimitedShuttleSystem.cs b/Content.Server/_Mono/Ships/Systems/LimitedShuttleSystem.cs similarity index 73% rename from Content.Server/_Mono/Ships/LimitedShuttleSystem.cs rename to Content.Server/_Mono/Ships/Systems/LimitedShuttleSystem.cs index 67de5418eeed..0db291d4665b 100644 --- a/Content.Server/_Mono/Ships/LimitedShuttleSystem.cs +++ b/Content.Server/_Mono/Ships/Systems/LimitedShuttleSystem.cs @@ -1,15 +1,12 @@ -// SPDX-FileCopyrightText: 2025 sleepyyapril -// -// SPDX-License-Identifier: AGPL-3.0-or-later - using Content.Server.Power.Components; using Content.Server.Shuttles.Components; using Content.Shared._Mono.Ships.Components; using Content.Shared._Mono.Shipyard; using Content.Shared._NF.Shipyard; using Robust.Shared.Timing; -using Robust.Shared.Prototypes; -using Content.Shared._NF.Shipyard.Prototypes; +using Robust.Shared.Prototypes; // Forge-change +using Content.Shared._NF.Shipyard.Prototypes; // Forge-change +using Robust.Shared.Configuration; // Forge-change namespace Content.Server._Mono.Ships.Systems; @@ -21,10 +18,11 @@ public sealed class LimitedShuttleSystem : EntitySystem [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ShuttleDeedSystem _shuttleDeed = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; // Forge-change + [Dependency] private readonly IConfigurationManager _configurationManager = default!; // Forge-change private TimeSpan _lastUpdate = TimeSpan.Zero; - private readonly TimeSpan _interval = TimeSpan.FromMinutes(10); + private readonly TimeSpan _interval = TimeSpan.FromMinutes(1); private const double PoweredInactivityThreshold = 0.5; @@ -102,26 +100,6 @@ private void OnAttemptShuttlePurchase(ref AttemptShipyardShuttlePurchaseEvent ev ev.CancelReason = "shipyard-console-limited"; ev.Cancel(); } - - // Forge-change-start: only 1 Capital-ship - if (ev.Vessel.Classes.Contains(VesselClass.Capital)) - { - var capitalQuery = EntityQueryEnumerator(); - - while (capitalQuery.MoveNext(out var uid, out var targetVessel)) - { - if (!_prototypeManager.TryIndex(targetVessel.VesselId, out VesselPrototype? proto)) - continue; - - if (!proto.Classes.Contains(VesselClass.Capital)) - continue; - - ev.CancelReason = "shipyard-console-capital-limited"; - ev.Cancel(); - return; - } - } - // Forge-change-end } private bool IsActive(Entity vessel) @@ -155,25 +133,4 @@ private bool IsActive(Entity vessel) return false; } - public int GetRemainingPurchases(VesselPrototype vessel) - { - if (vessel.LimitActive <= 0) - return int.MaxValue; - - var query = EntityQueryEnumerator(); - var activeCount = 0; - - while (query.MoveNext(out var uid, out var targetVessel)) - { - if (targetVessel.VesselId != vessel.ID) - continue; - - if (!TryComp(uid, out var inactivity) || inactivity.InactivePastThreshold) - continue; - - activeCount++; - } - - return Math.Max(0, vessel.LimitActive - activeCount); - } } diff --git a/Content.Server/_NF/Shipyard/ShipyardEvents.cs b/Content.Server/_NF/Shipyard/ShipyardEvents.cs new file mode 100644 index 000000000000..2d42813a4e39 --- /dev/null +++ b/Content.Server/_NF/Shipyard/ShipyardEvents.cs @@ -0,0 +1,6 @@ +namespace Content.Server._NF.Shipyard; + +///

    +/// Raised on a ship when it is bought. +/// +public record struct ShipBoughtEvent(); diff --git a/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.Consoles.cs b/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.Consoles.cs index e2d6b4b01aea..578da6a936a1 100644 --- a/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.Consoles.cs +++ b/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.Consoles.cs @@ -187,7 +187,7 @@ private void OnPurchaseMessage(EntityUid shipyardConsoleUid, ShipyardConsoleComp { PlayDenySound(player, shipyardConsoleUid, component); ConsolePopup(player, Loc.GetString(ev.CancelReason)); - TryQueueDel(shuttleUid); + Del(shuttleUid); return; } // Forge-change-end @@ -204,7 +204,7 @@ private void OnPurchaseMessage(EntityUid shipyardConsoleUid, ShipyardConsoleComp PlayDenySound(player, shipyardConsoleUid, component); if (voucher!.DestroyOnEmpty) { - QueueDel(targetId); + Del(targetId); } return; } @@ -220,6 +220,14 @@ private void OnPurchaseMessage(EntityUid shipyardConsoleUid, ShipyardConsoleComp } else { + if (bank.Balance <= vessel.Price) + { + Del(shuttleUid); + ConsolePopup(player, Loc.GetString("cargo-console-insufficient-funds", ("cost", vessel.Price))); + PlayDenySound(player, shipyardConsoleUid, component); + return; + } + if (!_bank.TryBankWithdraw(player, vessel.Price)) { Del(shuttleUid); @@ -242,12 +250,27 @@ private void OnPurchaseMessage(EntityUid shipyardConsoleUid, ShipyardConsoleComp // return; // } - // Forge-change-start: Mono Add company information to the shuttle - if (TryComp(player, out var playerCompany) && - !string.IsNullOrEmpty(playerCompany.CompanyName)) + // Add company information to the shuttle from the ID card or voucher + string? companyName = null; + + // First try to get company from ID card + if (TryComp(targetId, out var idCardCompany) && + !string.IsNullOrEmpty(idCardCompany.CompanyName)) + { + companyName = idCardCompany.CompanyName; + } + // If no ID card company, try to get from voucher + else if (TryComp(targetId, out var voucherCompany) && + !string.IsNullOrEmpty(voucherCompany.CompanyName)) { - var shipCompany = EnsureComp(shuttleUid); - shipCompany.CompanyName = playerCompany.CompanyName; + companyName = voucherCompany.CompanyName; + } + + // Apply company to ship if we found one + if (!string.IsNullOrEmpty(companyName)) + { + var shipCompany = EnsureComp(shuttleUid); + shipCompany.CompanyName = companyName; Dirty(shuttleUid, shipCompany); } // Forge-change-end @@ -288,6 +311,12 @@ private void OnPurchaseMessage(EntityUid shipyardConsoleUid, ShipyardConsoleComp _idSystem.TryChangeJobTitle(targetId, Loc.GetString(component.NewJobTitle), idCard, player); } + if (!voucherUsed) + { + if (!string.IsNullOrEmpty(component.NewJobTitle)) + _idSystem.TryChangeJobTitle(targetId, component.NewJobTitle, idCard, player); + } + // The following block of code is entirely to do with trying to sanely handle moving records from station to station. // it is ass. // This probably shouldnt be messed with further until station records themselves become more robust @@ -598,6 +627,15 @@ private void OnConsoleUIOpened(EntityUid uid, ShipyardConsoleComponent component } var fullName = deed != null ? GetFullName(deed) : null; + + // If the player is on cooldown, disable the unassign button + var remainingCooldown = GetRemainingCooldownTime(player); + if (remainingCooldown.HasValue) + { + // TODO: Update UI to show cooldown time on button + // For now we'll just let them see the cooldown message when they try to use it + } + RefreshState(uid, bank.Balance, true, fullName, sellValue, targetId, (ShipyardConsoleUiKey)args.UiKey, voucherUsed); } @@ -700,15 +738,15 @@ private void OnItemSlotChanged(EntityUid uid, ShipyardConsoleComponent component var fullName = deed != null ? GetFullName(deed) : null; - // Forge-change-start: take from _Mono:388 - // If the player is on cooldown, disable the unassign button - var remainingCooldown = GetRemainingCooldownTime(player); - if (remainingCooldown.HasValue) - { - // TODO: Update UI to show cooldown time on button - // For now we'll just let them see the cooldown message when they try to use it - } - // Forge-change-end + // // Forge-change-start: take from _Mono:388 + // // If the player is on cooldown, disable the unassign button + // var remainingCooldown = GetRemainingCooldownTime(player); + // if (remainingCooldown.HasValue) + // { + // // TODO: Update UI to show cooldown time on button + // // For now we'll just let them see the cooldown message when they try to use it + // } + // // Forge-change-end RefreshState(uid, bank.Balance, diff --git a/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.cs b/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.cs index d029ee00bf2a..966f4973d90d 100644 --- a/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.cs +++ b/Content.Server/_NF/Shipyard/Systems/ShipyardSystem.cs @@ -144,6 +144,8 @@ public bool TryPurchaseShuttle(EntityUid stationUid, ResPath shuttlePath, [NotNu } _sawmill.Info($"Shuttle {shuttlePath} was purchased at {ToPrettyString(stationUid)} for {price:f2}"); + var ev = new ShipBoughtEvent(); + RaiseLocalEvent(shuttleGrid.Value, ev); //can do TryFTLDock later instead if we need to keep the shipyard map paused _shuttle.TryFTLDock(shuttleGrid.Value, shuttleComponent, targetGrid.Value); shuttleEntityUid = shuttleGrid; diff --git a/Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs b/Content.Shared/_Mono/Ships/Components/CrewedShuttleComponent.cs similarity index 100% rename from Content.Shared/_Mono/Ships/CrewedShuttleComponent.cs rename to Content.Shared/_Mono/Ships/Components/CrewedShuttleComponent.cs diff --git a/Content.Shared/_Mono/Ships/ShipActivityComponent.cs b/Content.Shared/_Mono/Ships/Components/ShipActivityComponent.cs similarity index 95% rename from Content.Shared/_Mono/Ships/ShipActivityComponent.cs rename to Content.Shared/_Mono/Ships/Components/ShipActivityComponent.cs index 005a4a52420d..687bad725494 100644 --- a/Content.Shared/_Mono/Ships/ShipActivityComponent.cs +++ b/Content.Shared/_Mono/Ships/Components/ShipActivityComponent.cs @@ -28,7 +28,7 @@ public sealed partial class ShipActivityComponent : Component public int TimesInactive { get; set; } [ViewVariables] - public int InactiveThresholdMinutes { get; set; } = 1; + public int InactiveThresholdMinutes { get; set; } = 10; public int GetSecondsInactive() { diff --git a/Content.Shared/_Mono/Ships/VesselComponent.cs b/Content.Shared/_Mono/Ships/Components/VesselComponent.cs similarity index 100% rename from Content.Shared/_Mono/Ships/VesselComponent.cs rename to Content.Shared/_Mono/Ships/Components/VesselComponent.cs diff --git a/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs b/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs index ab3576c51b9f..3304140066b7 100644 --- a/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs +++ b/Content.Shared/_NF/Shipyard/Prototypes/VesselPrototype.cs @@ -116,6 +116,9 @@ public sealed class VesselPrototype : IPrototype, IInheritingPrototype [DataField] public HashSet> Tags = new(); + /// + /// The company that can buy this shuttle + /// [DataField("requiredCompany")] public string? RequiredCompany; // Forge-change-end diff --git a/Resources/Prototypes/_Forge/Shipyard/BlackMarket/QueenAnnesRevenge.yml b/Resources/Prototypes/_Forge/Shipyard/BlackMarket/QueenAnnesRevenge.yml index 165e85f70b79..d2b1b7d6ba4d 100644 --- a/Resources/Prototypes/_Forge/Shipyard/BlackMarket/QueenAnnesRevenge.yml +++ b/Resources/Prototypes/_Forge/Shipyard/BlackMarket/QueenAnnesRevenge.yml @@ -19,6 +19,7 @@ category: Medium group: BlackMarket shuttlePath: /Maps/_Forge/Shuttles/BlackMarket/queenAnnesRevenge.yml + limit: 1 addComponents: - type: IFF flags: [HideLabel] diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/centurion.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/centurion.yml index dbec16ab1a20..da483426d27c 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/centurion.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/centurion.yml @@ -20,6 +20,7 @@ group: Security access: Bailiff shuttlePath: /Maps/_Forge/Shuttles/Nfsd/centurion.yml + limit: 1 class: - Capital addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml index 72fb747f1e26..c9295fe9d30f 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/empress.yml @@ -19,6 +19,7 @@ access: Frontier shuttlePath: /Maps/_Forge/Shuttles/Nfsd/empress.yml guidebookPage: Null + limit: 1 class: - Capital addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/orion.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/orion.yml index 1e40f8517242..7de304b13cc6 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/orion.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/orion.yml @@ -15,12 +15,13 @@ parent: BaseVessel name: TL Орион MK2 description: Крупногабаритный линейный крейсер. Рекомендованный состав команды 4-8 человек. - price: 523100 + price: 100 category: Large group: Security access: Frontier shuttlePath: /Maps/_Forge/Shuttles/Nfsd/orion.yml guidebookPage: Null + limit: 1 class: - Capital addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/ravager.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/ravager.yml index 5af2a3cf2f74..9eea58b0f3dd 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/ravager.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/ravager.yml @@ -21,6 +21,7 @@ access: Frontier shuttlePath: /Maps/_Forge/Shuttles/Nfsd/ravager.yml guidebookPage: Null + limit: 1 class: - Capital addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/union4.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/union4.yml index 49b62e20d0df..ce150b9f5994 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/union4.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/union4.yml @@ -21,10 +21,10 @@ access: Bailiff shuttlePath: /Maps/_Forge/Shuttles/Nfsd/union4.yml guidebookPage: Null + limit: 1 class: - Capital - Detainment - - Expedition addComponents: - type: ShuttleFaction faction: NFSD diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/vostok.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/vostok.yml index ca03840465f7..866af7a90f23 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/vostok.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/vostok.yml @@ -21,6 +21,7 @@ access: Frontier shuttlePath: /Maps/_Forge/Shuttles/Nfsd/vostok.yml guidebookPage: Null + limit: 1 class: - Capital addComponents: diff --git a/Resources/Prototypes/_Forge/Shipyard/Nfsd/wasp.yml b/Resources/Prototypes/_Forge/Shipyard/Nfsd/wasp.yml index 6b71f8b6bb34..0e3796b89abe 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Nfsd/wasp.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Nfsd/wasp.yml @@ -19,6 +19,7 @@ access: Bailiff shuttlePath: /Maps/_Forge/Shuttles/Nfsd/wasp.yml guidebookPage: Null + limit: 1 class: - Capital - Detainment diff --git a/Resources/Prototypes/_Forge/Shipyard/Syndicate/triton.yml b/Resources/Prototypes/_Forge/Shipyard/Syndicate/triton.yml index b03c9ce002df..f0dbc7dacc4f 100644 --- a/Resources/Prototypes/_Forge/Shipyard/Syndicate/triton.yml +++ b/Resources/Prototypes/_Forge/Shipyard/Syndicate/triton.yml @@ -26,6 +26,7 @@ - type: ShuttleFaction faction: Syndicate guidebookPage: Null + limit: 1 class: - Syndicate From 2c6aa8d80916621fde691845ee3bef1ea191c958 Mon Sep 17 00:00:00 2001 From: v6st Date: Sat, 24 Jan 2026 01:53:45 +0300 Subject: [PATCH 05/12] traits --- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 399 +++++++++++++++++- .../Lobby/UI/Roles/TraitCategoryButton.xaml | 7 + .../UI/Roles/TraitCategoryButton.xaml.cs | 69 +++ .../UI/Roles/TraitExpandCollapseButtons.cs | 61 +++ .../UI/Roles/TraitPreferenceSelector.xaml | 16 +- .../UI/Roles/TraitPreferenceSelector.xaml.cs | 119 +++++- Content.Client/Stylesheets/StyleBase.cs | 4 +- Content.Client/Stylesheets/StyleNano.cs | 23 + .../_Mono/Traits/Physical/BionicLegsSystem.cs | 131 ++++++ .../_Mono/Traits/Physical/GlassJawSystem.cs | 52 +++ .../_Mono/Traits/Physical/HemophiliaSystem.cs | 59 +++ .../_Mono/Traits/Physical/LethargySystem.cs | 63 +++ .../Physical/PlateletFactoriesSystem.cs | 88 ++++ .../Physical/PrybarProstheticsSystem.cs | 148 +++++++ .../_Mono/Traits/Physical/SelfAwareSystem.cs | 93 ++++ .../Traits/Physical/StrikingCallusesSystem.cs | 30 ++ .../_Mono/Traits/Physical/TenacitySystem.cs | 44 ++ .../_Mono/Traits/Physical/VigorSystem.cs | 67 +++ .../_Mono/Traits/Physical/WillToDieSystem.cs | 44 ++ .../_Mono/Traits/Physical/WillToLiveSystem.cs | 45 ++ .../Preferences/HumanoidCharacterProfile.cs | 10 + .../Strip/Components/ThievingComponent.cs | 19 + .../Strip/SharedStrippableSystem.cs | 11 +- Content.Shared/Strip/ThievingSystem.cs | 1 + Content.Shared/Traits/TraitPrototype.cs | 16 + .../Traits/Physical/BionicLegsComponent.cs | 4 + .../Traits/Physical/GlassJawComponent.cs | 14 + .../Traits/Physical/HemophiliaComponent.cs | 26 ++ .../_Mono/Traits/Physical/IronmanComponent.cs | 9 + .../Traits/Physical/LethargyComponent.cs | 28 ++ .../Physical/PlateletFactoriesComponent.cs | 37 ++ .../Physical/PrybarProstheticsComponent.cs | 7 + .../Traits/Physical/SelfAwareComponent.cs | 9 + .../Physical/StrikingCallusesComponent.cs | 14 + .../Traits/Physical/TenacityComponent.cs | 16 + .../Traits/Physical/TrapAvoiderComponent.cs | 9 + .../Traits/Physical/TrapAvoiderSystem.cs | 21 + .../_Mono/Traits/Physical/VigorComponent.cs | 27 ++ .../Traits/Physical/VoraciousComponent.cs | 16 + .../Traits/Physical/WillToDieComponent.cs | 16 + .../Traits/Physical/WillToLiveComponent.cs | 14 + .../Locale/ru-RU/_Mono/traits/self-aware.ftl | 5 + .../Locale/ru-RU/_Mono/traits/traits.ftl | 64 +++ .../ui/humanoid-profile-editor.ftl | 8 +- Resources/Prototypes/Traits/categories.yml | 6 + .../Prototypes/_Mono/Traits/physical.yml | 223 ++++++++++ 46 files changed, 2162 insertions(+), 30 deletions(-) create mode 100644 Content.Client/Lobby/UI/Roles/TraitCategoryButton.xaml create mode 100644 Content.Client/Lobby/UI/Roles/TraitCategoryButton.xaml.cs create mode 100644 Content.Client/Lobby/UI/Roles/TraitExpandCollapseButtons.cs create mode 100644 Content.Server/_Mono/Traits/Physical/BionicLegsSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/GlassJawSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/HemophiliaSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/LethargySystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/PlateletFactoriesSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/PrybarProstheticsSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/SelfAwareSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/StrikingCallusesSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/TenacitySystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/VigorSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/WillToDieSystem.cs create mode 100644 Content.Server/_Mono/Traits/Physical/WillToLiveSystem.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/BionicLegsComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/GlassJawComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/HemophiliaComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/IronmanComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/LethargyComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/PlateletFactoriesComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/PrybarProstheticsComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/SelfAwareComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/StrikingCallusesComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/TenacityComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/TrapAvoiderComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/TrapAvoiderSystem.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/VigorComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/VoraciousComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/WillToDieComponent.cs create mode 100644 Content.Shared/_Mono/Traits/Physical/WillToLiveComponent.cs create mode 100644 Resources/Locale/ru-RU/_Mono/traits/self-aware.ftl create mode 100644 Resources/Locale/ru-RU/_Mono/traits/traits.ftl create mode 100644 Resources/Prototypes/_Mono/Traits/physical.yml diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index 5069b5c6948d..017ab0befadc 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -41,6 +41,7 @@ using Direction = Robust.Shared.Maths.Direction; using Content.Shared._Mono.Company; // Forge-change using Content.Client._Forge.Company.UI; // Forge-change +using Content.Client.UserInterface.Controls; // Forge-changeL _Mono:2522 namespace Content.Client.Lobby.UI { @@ -617,6 +618,8 @@ public void RefreshTraits() { TraitsList.DisposeAllChildren(); + EnforceSpeciesTraitRestrictions(); // Forge-change: _Mono:2522 + var traits = _prototypeManager.EnumeratePrototypes().OrderBy(t => Loc.GetString(t.Name)).ToList(); // TabContainer.SetTabTitle(2, Loc.GetString("humanoid-profile-editor-traits-tab")); // Frontier: 3<2 @@ -630,11 +633,50 @@ public void RefreshTraits() return; } + // Forge-change-start: take from _Monolith 37 & 2522 + // Dictionary to store category buttons - moved up before it's used + Dictionary categoryButtons = new(); + + var clearAllButton = new ConfirmButton + { + Text = Loc.GetString("humanoid-profile-editor-clear-all-traits-button"), + ConfirmationText = Loc.GetString("humanoid-profile-editor-clear-all-traits-confirm"), + MinSize = new Vector2(0, 30) + }; + clearAllButton.OnPressed += _ => + { + if (Profile == null) + return; + + Profile = Profile.WithoutAllTraitPreferences(); + SetDirty(); + RefreshTraits(); + }; + TraitsList.AddChild(clearAllButton); + + // Add expand/collapse all buttons + var expandCollapseButtons = new TraitExpandCollapseButtons(); + expandCollapseButtons.OnExpandCollapseAll += expanded => + { + // Set the static dictionary state + TraitCategoryButton.SetAllExpanded(expanded); + + // Update all visible category buttons + foreach (var button in categoryButtons.Values) + { + button.SetExpanded(expanded); + } + }; + TraitsList.AddChild(expandCollapseButtons); + // Forge-change-end + // Setup model Dictionary> traitGroups = new(); List defaultTraits = new(); traitGroups.Add(TraitCategoryPrototype.Default, defaultTraits); + var allSelectors = new Dictionary, TraitPreferenceSelector>(); // Forge-change: take from _Monolith 37 & 2522 + foreach (var trait in traits) { if (trait.Category == null) @@ -653,19 +695,55 @@ public void RefreshTraits() // Create UI view from model foreach (var (categoryId, categoryTraits) in traitGroups) { + // Forge-change-start: take from _Monolith 37 & 2522 + // Skip the default category if it has no traits + if (categoryId == TraitCategoryPrototype.Default && categoryTraits.Count == 0) + continue; + TraitCategoryPrototype? category = null; + string categoryName; + int? maxTraitPoints = null; + // Forge-change-end if (categoryId != TraitCategoryPrototype.Default) { + // Forge-change-start: take from _Monolith 37 & 2522 category = _prototypeManager.Index(categoryId); // Label - TraitsList.AddChild(new Label - { - Text = Loc.GetString(category.Name), - Margin = new Thickness(0, 10, 0, 0), - StyleClasses = { StyleBase.StyleClassLabelHeading }, - }); + // TraitsList.AddChild(new Label + // { + // Text = Loc.GetString(category.Name), + // Margin = new Thickness(0, 10, 0, 0), + // StyleClasses = { StyleBase.StyleClassLabelHeading }, + // }); + categoryName = Loc.GetString(category.Name); + maxTraitPoints = category.MaxTraitPoints; } + else + { + categoryName = Loc.GetString("humanoid-profile-editor-traits-default-category"); + } + + categoryTraits.Sort((a, b) => + { + var traitA = _prototypeManager.Index(a); + var traitB = _prototypeManager.Index(b); + + var costCompare = traitA.Cost.CompareTo(traitB.Cost); + if (costCompare != 0) + return costCompare; + + var traitNameA = Loc.GetString(traitA.Name); + var traitNameB = Loc.GetString(traitB.Name); + return string.Compare(traitNameA, traitNameB, StringComparison.CurrentCulture); + }); + + // Create category button + var categoryButton = new TraitCategoryButton(categoryName); + categoryButtons[categoryId] = categoryButton; + TraitsList.AddChild(categoryButton); + // Forge-change-end + List selectors = new(); var selectionCount = 0; @@ -679,11 +757,79 @@ public void RefreshTraits() if (selector.Preference) selectionCount += trait.Cost; + // Forge-change-start: take from _Monolith 37 & 2522 + { + var tooltipParts = new List(); + if (trait.Description is { } tdesc) + tooltipParts.Add(Loc.GetString(tdesc)); + + if (trait.MutuallyExclusiveTraits.Count > 0) + { + var names = new List(); + foreach (var exId in trait.MutuallyExclusiveTraits) + { + if (_prototypeManager.TryIndex(exId, out var exProto)) + names.Add($"[color=#ADD8E6]{Loc.GetString(exProto.Name)}[/color]"); + } + if (names.Count > 0) + tooltipParts.Add(Loc.GetString("humanoid-profile-editor-traits-not-have", ("names", string.Join(", ", names)))); + } + + if (trait.SpeciesBlacklist.Count > 0) + { + var names = new List(); + foreach (var speciesId in trait.SpeciesBlacklist) + { + if (_prototypeManager.TryIndex(speciesId, out var speciesProto)) + names.Add($"[color=#087209]{Loc.GetString(speciesProto.Name)}[/color]"); + } + if (names.Count > 0) + tooltipParts.Add(Loc.GetString("humanoid-profile-editor-traits-not-be", ("names", string.Join(", ", names)))); + } + + if (tooltipParts.Count > 0) + selector.SetTooltip(string.Join("\n", tooltipParts)); + } + + allSelectors[trait.ID] = selector; + selector.PreferenceChanged += preference => { if (preference) { + // Calculate current points for this category before adding the new trait + var currentPoints = 0; + if (category != null && category.MaxTraitPoints >= 0) + { + foreach (var existingTraitId in Profile?.TraitPreferences ?? new HashSet>()) + { + if (!_prototypeManager.TryIndex(existingTraitId, out var existingProto)) + continue; + + if (existingProto.Category == categoryId) + currentPoints += existingProto.Cost; + } + + // Check if adding this trait would exceed the maximum points + if (currentPoints + trait.Cost > category.MaxTraitPoints) + { + // Reset the selection without triggering the event + selector.Preference = false; + return; + } + } + + var oldProfile = Profile; Profile = Profile?.WithTraitPreference(trait.ID, _prototypeManager); + + // If the profile didn't change, it means the trait couldn't be added (e.g., due to point limits) + if (Profile == oldProfile) + { + // Reset the selection without triggering the event + selector.Preference = false; + return; + } + // Forge-change-end } else { @@ -691,7 +837,68 @@ public void RefreshTraits() } SetDirty(); - RefreshTraits(); // If too many traits are selected, they will be reset to the real value. + // Forge-change-start: take from _Monolith 37 & 2522 + // RefreshTraits(); // If too many traits are selected, they will be reset to the real value. + + UpdateTraitIncompatibilityVisibility(allSelectors); + + // Instead of refreshing the entire UI, just update the point counter if needed + if (category is { MaxTraitPoints: >= 0 }) + { + // Recalculate points for this category + var currentPoints = 0; + foreach (var traitId in Profile?.TraitPreferences ?? new HashSet>()) + { + if (!_prototypeManager.TryIndex(traitId, out var proto)) + continue; + + if (proto.Category == category.ID) + currentPoints += proto.Cost; + } + + // Find and update the point counter label + if (categoryButton.TraitsContainer.ChildCount >= 2) + { + var maxPoints = category.MaxTraitPoints.Value; + float pointsLeft = maxPoints - currentPoints; + if (categoryButton.TraitsContainer.GetChild(0) is ProgressBar progressBar) + { + progressBar.Value = pointsLeft; + float percentRemaining = pointsLeft / maxPoints; + + Color barColor; + + if (percentRemaining > 0.5f) + { + barColor = Color.FromHex("#33FF33"); + } + else if (percentRemaining > 0.25f) + { + barColor = Color.FromHex("#FFFF33"); + } + else + { + barColor = Color.FromHex("#FF3333"); + } + + if (progressBar.ForegroundStyleBoxOverride is StyleBoxFlat styleBox) + { + styleBox.BackgroundColor = barColor; + } + } + + if (categoryButton.TraitsContainer.GetChild(1) is Label pointsLabel) + { + pointsLabel.Text = Loc.GetString("humanoid-profile-editor-trait-count-hint", + ("current", pointsLeft), + ("max", category.MaxTraitPoints)); + } + } + + // Update all trait colors based on the new point total + RefreshTraitColors(categoryButton, category, currentPoints); + } + // Forge-change-end }; selectors.Add(selector); } @@ -699,9 +906,45 @@ public void RefreshTraits() // Selection counter if (category is { MaxTraitPoints: >= 0 }) { - TraitsList.AddChild(new Label + // Forge-change-start: take from _Monolith 37 & 2522 + var maxPoints = category.MaxTraitPoints.Value; + var progressBar = new ProgressBar + { + MinHeight = 4, + SetHeight = 4f, + MinValue = 0, + MaxValue = maxPoints, + Value = Math.Max(0, maxPoints - selectionCount), + Margin = new Thickness(0, 0, 0, 2) + }; + + float pointsLeft = Math.Max(0, maxPoints - selectionCount); + float percentRemaining = pointsLeft / maxPoints; + + Color barColor; + if (percentRemaining > 0.5f) + { + barColor = Color.FromHex("#33FF33"); + } + else if (percentRemaining > 0.25f) + { + barColor = Color.FromHex("#FFFF33"); + } + else { - Text = Loc.GetString("humanoid-profile-editor-trait-count-hint", ("current", selectionCount), ("max", category.MaxTraitPoints)), + barColor = Color.FromHex("#FF3333"); + } + + progressBar.ForegroundStyleBoxOverride = new StyleBoxFlat + { + BackgroundColor = barColor, + }; + + categoryButton.AddTrait(progressBar); + + categoryButton.AddTrait(new Label + { + Text = Loc.GetString("humanoid-profile-editor-trait-count-hint", ("current", pointsLeft), ("max", category.MaxTraitPoints)), FontColorOverride = Color.Gray }); } @@ -711,17 +954,118 @@ public void RefreshTraits() if (selector == null) continue; - if (category is { MaxTraitPoints: >= 0 } && - selector.Cost + selectionCount > category.MaxTraitPoints) + // if (category is { MaxTraitPoints: >= 0 } && + // selector.Cost + selectionCount > category.MaxTraitPoints) + // Color traits red if they would exceed the point limit + if (category is { MaxTraitPoints: >= 0 }) { - selector.Checkbox.Label.FontColorOverride = Color.Red; + // selector.Checkbox.Label.FontColorOverride = Color.Red; + // If this trait would exceed the limit by itself + if (selector.Cost > category.MaxTraitPoints) + { + selector.SetUnavailable(true); + } + // If this trait would exceed the limit when added to current selection + else if (!selector.Preference && selector.Cost + selectionCount > category.MaxTraitPoints) + { + selector.SetUnavailable(true); + } + // If this trait is already selected but would exceed the limit if added now + else if (selector.Preference && selectionCount - selector.Cost + selector.Cost > category.MaxTraitPoints) + { + // This shouldn't happen normally, but just in case + selector.SetUnavailable(true); + } } - TraitsList.AddChild(selector); + // TraitsList.AddChild(selector); + categoryButton.AddTrait(selector); } + UpdateTraitIncompatibilityVisibility(allSelectors); } } + // Helper method to refresh trait colors when points change + private void RefreshTraitColors(TraitCategoryButton categoryButton, TraitCategoryPrototype category, int currentPoints) + { + // Skip the first child which is the points label + for (int i = 1; i < categoryButton.TraitsContainer.ChildCount; i++) + { + if (categoryButton.TraitsContainer.GetChild(i) is TraitPreferenceSelector selector) + { + // Reset color + selector.TraitButton.ModulateSelfOverride = null; + selector.SetUnavailable(false); + + // If this trait would exceed the limit by itself + if (selector.Cost > category.MaxTraitPoints) + { + selector.SetUnavailable(true); + } + // If this trait would exceed the limit when added to current selection + else if (!selector.Preference && selector.Cost + currentPoints > category.MaxTraitPoints) + { + selector.SetUnavailable(true); + } + // Enable traits that can now be selected + else if (!selector.Preference && selector.Cost + currentPoints <= category.MaxTraitPoints) + { + selector.SetUnavailable(false); + } + } + } + } + + private void UpdateTraitIncompatibilityVisibility(Dictionary, TraitPreferenceSelector> allSelectors) + { + var selected = Profile?.TraitPreferences ?? new HashSet>(); + var currentSpecies = Profile?.Species; + + foreach (var (traitId, selector) in allSelectors) + { + var hide = false; + + if (selected.Contains(traitId)) + { + selector.Visible = true; + continue; + } + + if (!_prototypeManager.TryIndex(traitId, out var thisProto)) + { + selector.Visible = false; + continue; + } + + if (currentSpecies != null) + { + ProtoId speciesId = currentSpecies.Value; + if (thisProto.SpeciesBlacklist.Contains(speciesId)) + { + hide = true; + } + } + + if (!hide) + { + foreach (var sel in selected) + { + if (!_prototypeManager.TryIndex(sel, out var selProto)) + continue; + + if (selProto.MutuallyExclusiveTraits.Contains(traitId) || thisProto.MutuallyExclusiveTraits.Contains(sel)) + { + hide = true; + break; + } + } + } + + selector.Visible = !hide; + } + } + // Forge-change-end + /// /// Refreshes the species selector. /// @@ -1406,6 +1750,7 @@ private void SetSpecies(string newSpecies) Profile = Profile?.WithSpecies(newSpecies); OnSkinColorOnValueChanged(); // Species may have special color prefs, make sure to update it. Markings.SetSpecies(newSpecies); // Repopulate the markings tab as well. + EnforceSpeciesTraitRestrictions(); // In case there's job restrictions for the species RefreshJobs(); // In case there's species restrictions for loadouts @@ -1417,6 +1762,34 @@ private void SetSpecies(string newSpecies) ReloadPreview(); } + // Forge-change-start: take from _Monolith 37 & 2522 + private void EnforceSpeciesTraitRestrictions() + { + if (Profile == null) + return; + + var species = Profile.Species; + var toRemove = new List>(); + + foreach (var traitId in Profile.TraitPreferences) + { + if (!_prototypeManager.TryIndex(traitId, out TraitPrototype? trait)) + continue; + + if (trait.SpeciesBlacklist.Contains(species)) + toRemove.Add(traitId); + } + + foreach (var traitId in toRemove) + { + Profile = Profile.WithoutTraitPreference(traitId, _prototypeManager); + } + + if (toRemove.Count > 0) + SetDirty(); + } + // Forge-change-end + private void SetName(string newName) { Profile = Profile?.WithName(newName); diff --git a/Content.Client/Lobby/UI/Roles/TraitCategoryButton.xaml b/Content.Client/Lobby/UI/Roles/TraitCategoryButton.xaml new file mode 100644 index 000000000000..4454173f154b --- /dev/null +++ b/Content.Client/Lobby/UI/Roles/TraitCategoryButton.xaml @@ -0,0 +1,7 @@ + + + + diff --git a/Content.Client/Lobby/UI/Roles/TraitPreferenceSelector.xaml.cs b/Content.Client/Lobby/UI/Roles/TraitPreferenceSelector.xaml.cs index a52a3fa2dbc3..b7ec153b9247 100644 --- a/Content.Client/Lobby/UI/Roles/TraitPreferenceSelector.xaml.cs +++ b/Content.Client/Lobby/UI/Roles/TraitPreferenceSelector.xaml.cs @@ -3,6 +3,7 @@ using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Utility; // Forge-change: take from _Monolith 37 & 2522 namespace Content.Client.Lobby.UI.Roles; @@ -10,34 +11,134 @@ namespace Content.Client.Lobby.UI.Roles; public sealed partial class TraitPreferenceSelector : Control { public int Cost; + private bool _preference; // Forge-change: take from _Monolith 37 & 2522 public bool Preference { - get => Checkbox.Pressed; - set => Checkbox.Pressed = value; + // Forge-change-start: take from _Monolith 37 & 2522 + get => _preference; + set + { + _preference = value; + UpdateButtonState(); + } + // Forge-change-end } public event Action? PreferenceChanged; + // Forge-change-start: take from _Monolith 37 & 2522 public TraitPreferenceSelector(TraitPrototype trait) { RobustXamlLoader.Load(this); - var text = trait.Cost != 0 ? $"[{trait.Cost}] " : ""; - text += Loc.GetString(trait.Name); - Cost = trait.Cost; - Checkbox.Text = text; - Checkbox.OnToggled += OnCheckBoxToggled; + + // Set the trait name + NameLabel.Text = Loc.GetString(trait.Name); + + // Set the cost text and color + string costText = ""; + if (trait.Cost > 0) + { + costText = $"-{trait.Cost}"; + CostLabel.FontColorOverride = Color.Red; + } + else if (trait.Cost < 0) + { + costText = $"+{-trait.Cost}"; + CostLabel.FontColorOverride = Color.Green; + } + else + { + costText = $"{trait.Cost}"; + CostLabel.FontColorOverride = Color.Gray; + } + + CostLabel.Text = costText; + + // Set up button event + TraitButton.OnPressed += OnTraitButtonPressed; if (trait.Description is { } desc) { - Checkbox.ToolTip = Loc.GetString(desc); + TraitButton.ToolTip = Loc.GetString(desc); } + + UpdateButtonState(); } - private void OnCheckBoxToggled(BaseButton.ButtonToggledEventArgs args) + public void SetTooltip(string tooltip) + { + TraitButton.TooltipSupplier = _ => + { + var tip = new Robust.Client.UserInterface.CustomControls.Tooltip(); + tip.SetMessage(FormattedMessage.FromMarkupPermissive(tooltip)); + return tip; + }; + } + + private void OnTraitButtonPressed(BaseButton.ButtonEventArgs args) { + // Clicking the trait button toggles selection + Preference = !Preference; PreferenceChanged?.Invoke(Preference); } + + private void UpdateButtonState() + { + if (Preference) + { + // Add a visual indicator that it's selected + TraitButton.StyleClasses.Remove("OpenBottom"); + TraitButton.AddStyleClass("OpenBottomSelected"); + + TraitButton.ModulateSelfOverride = Color.FromHex("#3e6c45"); + } + else + { + // Remove the selected visual indicator + TraitButton.StyleClasses.Remove("OpenBottomSelected"); + TraitButton.StyleClasses.Add("OpenBottom"); + + // Reset the background color + TraitButton.ModulateSelfOverride = null; + } + } + + /// + /// Sets the trait as unavailable for selection by coloring the name text red + /// instead of coloring the entire button. + /// + /// Whether the trait is unavailable for selection + public void SetUnavailable(bool unavailable) + { + if (unavailable) + { + NameLabel.FontColorOverride = Color.Red; + TraitButton.Disabled = true; + + // Preserve the darker gray background if this trait is selected + if (Preference) + { + TraitButton.ModulateSelfOverride = Color.FromHex("#3c3c3d"); + } + } + else + { + NameLabel.FontColorOverride = null; + TraitButton.Disabled = false; + + // Restore the appropriate background color based on selection state + if (Preference) + { + TraitButton.ModulateSelfOverride = Color.FromHex("#626662"); + } + else + { + TraitButton.ModulateSelfOverride = null; + } + } + } + // Forge-change-end } diff --git a/Content.Client/Stylesheets/StyleBase.cs b/Content.Client/Stylesheets/StyleBase.cs index 5a03a6b8ecea..c850ad3a29fd 100644 --- a/Content.Client/Stylesheets/StyleBase.cs +++ b/Content.Client/Stylesheets/StyleBase.cs @@ -21,9 +21,11 @@ public abstract class StyleBase public const string ClassAngleRect = "AngleRect"; public const string ButtonOpenRight = "OpenRight"; + public const string ButtonOpenRightSelected = "OpenRightSelected"; // Forge-change: take from _Monolith 37 & 2522 public const string ButtonOpenLeft = "OpenLeft"; public const string ButtonOpenBoth = "OpenBoth"; - public const string ButtonSquare = "ButtonSquare"; + public const string ButtonOpenBothSelected = "OpenBothSelected"; + public const string ButtonSquare = "ButtonSquare"; // Forge-change: take from _Monolith 37 & 2522 public const string ButtonCaution = "Caution"; diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index 157f886179cc..80e6ad13e872 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -827,6 +827,13 @@ public StyleNano(IResourceCache resCache) : base(resCache) .Class(ButtonOpenRight) .Prop(ContainerButton.StylePropertyStyleBox, BaseButtonOpenRight), + // Forge-change-start: take from _Monolith 37 & 2522 + Element().Class(ContainerButton.StyleClassButton) + .Class(ButtonOpenRightSelected) + .Prop(ContainerButton.StylePropertyStyleBox, BaseButtonOpenRight) + .Prop(Control.StylePropertyModulateSelf, ButtonColorGoodDefault), + // Forge-change-end + Element().Class(ContainerButton.StyleClassButton) .Class(ButtonOpenLeft) .Prop(ContainerButton.StylePropertyStyleBox, BaseButtonOpenLeft), @@ -1985,6 +1992,22 @@ public StyleNano(IResourceCache resCache) : base(resCache) new StyleProperty(TextureButton.StylePropertyTexture, resCache.GetTexture("/Textures/Interface/Bwoink/un_pinned.png")) }), + // Forge-change-start: take from _Monolith 37 & 2522 + // Add the style rule for OpenRightSelected + Element