diff --git a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs index 777140911c3..9abe0ed451c 100644 --- a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs +++ b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs @@ -130,11 +130,17 @@ private void CharacterUpdated(CharacterData data) Modulate = Color.Gray }; - objectiveControl.AddChild(new Label + + var objectiveText = new FormattedMessage(); + objectiveText.TryAddMarkup(Loc.GetString($"objective-issuer-{groupId}"), out _); // backmen: locale + + var objectiveLabel = new RichTextLabel { - Text = groupId, - Modulate = Color.LightSkyBlue - }); + StyleClasses = {StyleNano.StyleClassTooltipActionTitle} + }; + objectiveLabel.SetMessage(objectiveText); + + objectiveControl.AddChild(objectiveLabel); foreach (var condition in conditions) { diff --git a/Content.Server/Backmen/EvilTwin/EvilTwinSystem.cs b/Content.Server/Backmen/EvilTwin/EvilTwinSystem.cs index 9d54001d7e2..a0f86ba7aad 100644 --- a/Content.Server/Backmen/EvilTwin/EvilTwinSystem.cs +++ b/Content.Server/Backmen/EvilTwin/EvilTwinSystem.cs @@ -384,7 +384,7 @@ private void OnRoundEnd(RoundEndTextAppendEvent ev) { var name = mind.CharacterName; var username = mind.Session?.Name; - var objectives = mind.AllObjectives.ToArray(); + var objectives = mind.Objectives.ToArray(); if (objectives.Length == 0) { if (username != null) @@ -427,15 +427,14 @@ private void OnRoundEnd(RoundEndTextAppendEvent ev) result.Append("\n" + Loc.GetString("evil-twin-was-an-evil-twin-with-objectives-named", ("name", name))); } - foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).Issuer)) + foreach (var objectiveGroup in objectives.Select(x=>(Entity)(x, Comp(x))) + .GroupBy(o => o.Comp.LocIssuer)) { - if (objectiveGroup.Key == "SpaceBank") - { - continue; - } - foreach (var objective in objectiveGroup) { + if(objective.Comp.HideFromTotal) + continue; + var info = _objectivesSystem.GetInfo(objective, mindId); if (info == null) continue; diff --git a/Content.Server/Backmen/Fugitive/FugitiveSystem.cs b/Content.Server/Backmen/Fugitive/FugitiveSystem.cs index 293e9c8c822..d2d9560d837 100644 --- a/Content.Server/Backmen/Fugitive/FugitiveSystem.cs +++ b/Content.Server/Backmen/Fugitive/FugitiveSystem.cs @@ -425,15 +425,14 @@ private void OnRoundEnd(RoundEndTextAppendEvent ev) else if (name != null) result.AppendLine(Loc.GetString("fugitive-was-a-fugitive-with-objectives-named", ("name", name))); - foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).Issuer)) + foreach (var objectiveGroup in objectives.Select(x=>(Entity)(x, Comp(x))) + .GroupBy(o => o.Comp.LocIssuer)) { - if (objectiveGroup.Key == "SpaceBank") - { - continue; - } - foreach (var objective in objectiveGroup) { + if(objective.Comp.HideFromTotal) + continue; + var info = _objectivesSystem.GetInfo(objective, mindId, mind); if (info == null) continue; diff --git a/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs b/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs index d2d73855872..9412b79abf9 100644 --- a/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs +++ b/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs @@ -219,10 +219,11 @@ protected override void AppendRoundEndText(EntityUid uid, BlobRuleComponent blob else if (name != null) result += "\n" + Loc.GetString("blob-was-a-blob-with-objectives-named", ("name", name)); - foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).Issuer)) + foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).LocIssuer)) { foreach (var objective in objectiveGroup) { + var info = _objectivesSystem.GetInfo(objective, mindId, mind); if (info == null) continue; diff --git a/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs b/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs index 668ccc56f79..f4dad1737d2 100644 --- a/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs +++ b/Content.Server/Backmen/GameTicking/Rules/FleshCultRuleSystem.cs @@ -567,21 +567,27 @@ protected override void AppendRoundEndText(EntityUid uid, FleshCultRuleComponent ("name", name)); } - foreach (var objectiveGroup in objectives.GroupBy(o => Comp(o).Issuer)) + foreach (var objectiveGroup in objectives.Select(x=>(Entity)(x, Comp(x))) + .GroupBy(o => o.Comp.LocIssuer)) { - if (objectiveGroup.Key == "SpaceBank") - { - continue; - } - - result += "\n" + Loc.GetString($"preset-flesh-cult-objective-issuer-{objectiveGroup.Key}"); + var hasTitle = false; foreach (var objective in objectiveGroup) { + if(objective.Comp.HideFromTotal) + continue; + var info = _objectivesSystem.GetInfo(objective, mindId); if (info == null) continue; + if (!hasTitle) + { + result += "\n" + Loc.GetString($"preset-flesh-cult-objective-issuer-{objectiveGroup.Key}"); + hasTitle = true; + } + + var objectiveTitle = info.Value.Title; var progress = info.Value.Progress; if (progress > 0.99f) diff --git a/Content.Server/CharacterInfo/CharacterInfoSystem.cs b/Content.Server/CharacterInfo/CharacterInfoSystem.cs index 3099b2f90fc..336b22f9c44 100644 --- a/Content.Server/CharacterInfo/CharacterInfoSystem.cs +++ b/Content.Server/CharacterInfo/CharacterInfoSystem.cs @@ -43,7 +43,7 @@ private void OnRequestCharacterInfoEvent(RequestCharacterInfoEvent msg, EntitySe continue; // group objectives by their issuer - var issuer = Comp(objective).LocIssuer; + string issuer = Comp(objective).Issuer; if (!objectives.ContainsKey(issuer)) objectives[issuer] = new List(); objectives[issuer].Add(info.Value); diff --git a/Content.Server/Objectives/Commands/ListObjectivesCommand.cs b/Content.Server/Objectives/Commands/ListObjectivesCommand.cs index f611c443860..543b1ad8493 100644 --- a/Content.Server/Objectives/Commands/ListObjectivesCommand.cs +++ b/Content.Server/Objectives/Commands/ListObjectivesCommand.cs @@ -35,7 +35,8 @@ public override void Execute(IConsoleShell shell, string argStr, string[] args) shell.WriteLine($"Objectives for player {player.UserId}:"); var objectivesGr = mind.Objectives.ToList() - .Select(x=> (Entity)(x,_entities.GetComponentOrNull(x))).GroupBy(x=>x.Comp?.Issuer ?? "") //backmen: locale + .Select(x=> (Entity)(x,_entities.GetComponentOrNull(x))) + .GroupBy(x=>x.Comp?.LocIssuer ?? "") //backmen: locale .ToList(); if (objectivesGr.Count == 0) { @@ -47,7 +48,7 @@ public override void Execute(IConsoleShell shell, string argStr, string[] args) foreach (var objective in objectivesGr) { var objectives = objective.ToList(); - shell.WriteMarkup(Loc.GetString($"objective-issuer-{objective.Key}")+":"); + shell.WriteMarkup(objective.Key+":"); for (var i = 0; i < objectives.Count; i++) { var info = objectivesSystem.GetInfo(objectives[i], mindId, mind); diff --git a/Content.Shared/Backmen/GhostTheme/GhostThemePrototype.cs b/Content.Shared/Backmen/GhostTheme/GhostThemePrototype.cs index 2dc81545cfe..b1d199c4972 100644 --- a/Content.Shared/Backmen/GhostTheme/GhostThemePrototype.cs +++ b/Content.Shared/Backmen/GhostTheme/GhostThemePrototype.cs @@ -2,7 +2,7 @@ namespace Content.Shared.Backmen.GhostTheme; -[Prototype("ghostTheme")] +[Prototype("ghostTheme", -2)] public sealed partial class GhostThemePrototype : IPrototype { /// diff --git a/Content.Shared/Objectives/Components/ObjectiveComponent.cs b/Content.Shared/Objectives/Components/ObjectiveComponent.cs index fb2e6ca0a68..2fa63899e2d 100644 --- a/Content.Shared/Objectives/Components/ObjectiveComponent.cs +++ b/Content.Shared/Objectives/Components/ObjectiveComponent.cs @@ -23,7 +23,7 @@ public sealed partial class ObjectiveComponent : Component /// Organisation that issued this objective, used for grouping and as a header above common objectives. /// [DataField("issuer", required: true)] - private LocId Issuer { get; set; } + public LocId Issuer { get; set; } [ViewVariables(VVAccess.ReadOnly)] public string LocIssuer => Loc.GetString(Issuer); @@ -41,6 +41,9 @@ public sealed partial class ObjectiveComponent : Component /// [DataField] public SpriteSpecifier? Icon; + + [DataField("hideFromTotal")] + public bool HideFromTotal = false; } /// diff --git a/Resources/Locale/ru-RU/backmen/objectives/conditions/syndicate.ftl b/Resources/Locale/ru-RU/backmen/objectives/conditions/syndicate.ftl index d194ab3f82e..5a4025e65fe 100644 --- a/Resources/Locale/ru-RU/backmen/objectives/conditions/syndicate.ftl +++ b/Resources/Locale/ru-RU/backmen/objectives/conditions/syndicate.ftl @@ -31,3 +31,5 @@ issuer-Waffle-Corporation = [color=Brown]Waffle Corporation[/color] При вашем раскрытии, мы используем все возможные силы да бы вытащить вас, не брезгуйте замарать руки. Убивайте остальных агентов синдиката. Кроме агентов MI13. objective-issuer-Waffle-Corporation = [color=Brown]Waffle Corporation[/color] + +objective-issuer-vamp = objective-issuer-vamp diff --git a/Resources/Locale/ru-RU/corvax/station-events/events/evil-twin.ftl b/Resources/Locale/ru-RU/corvax/station-events/events/evil-twin.ftl index a37b95007b6..062fc213884 100644 --- a/Resources/Locale/ru-RU/corvax/station-events/events/evil-twin.ftl +++ b/Resources/Locale/ru-RU/corvax/station-events/events/evil-twin.ftl @@ -15,3 +15,5 @@ evil-twin-user-was-an-evil-twin-with-objectives-named = [color=White]{ $name }[/ evil-twin-was-an-evil-twin-with-objectives-named = [color=white]{ $name }[/color] был(а) злым двойником со следующими целями: roles-antag-evil-twin-name = Злой двойник roles-antag-evil-twin-objective = Ваша задача - устранение и замена оригинальной персоны. +objective-issuer-evil-twin = Злой двойник +objective-issuer-self = Сам diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/blob.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/blob.ftl index 83a67253393..f012670a2f1 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/blob.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/blob.ftl @@ -26,3 +26,4 @@ ent-ReflectiveBlobTile = Отражающая плитка блоба .desc = Обновление укреплённой клетки в которой платят меньшой крепкостью, за возможность отражать с шансом 90% только энергетические снаряды и лазеры. ent-MobObserverBlob = Блоб наблюдатель .desc = { "" } +objective-issuer-blob = Блоб diff --git a/Resources/Prototypes/_Backmen/Objectives/blobObjectives.yml b/Resources/Prototypes/_Backmen/Objectives/blobObjectives.yml index 99e70ffc328..5565280e0c7 100644 --- a/Resources/Prototypes/_Backmen/Objectives/blobObjectives.yml +++ b/Resources/Prototypes/_Backmen/Objectives/blobObjectives.yml @@ -4,7 +4,7 @@ id: BaseBlobObjective components: - type: Objective - issuer: blob + issuer: objective-issuer-blob unique: true difficulty: 1 icon: diff --git a/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml b/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml index a58a979fec3..fd9807205e5 100644 --- a/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml +++ b/Resources/Prototypes/_Backmen/Objectives/cultistObjectives.yml @@ -6,7 +6,7 @@ description: objective-condition-create-flesh-heart-description components: - type: Objective - issuer: flesh-cult + issuer: objective-issuer-flesh-cult difficulty: 1.3 icon: Interface/Actions/fleshCultistFleshHeart.png - type: RoleRequirement @@ -23,7 +23,7 @@ description: objective-condition-flesh-cultist-survival-description components: - type: Objective - issuer: flesh-cult + issuer: objective-issuer-flesh-cult difficulty: 0.5 icon: Interface/Actions/fleshCultistSurvivalObjective.png - type: RoleRequirement diff --git a/Resources/Prototypes/_Backmen/Objectives/evilTwinObjectives.yml b/Resources/Prototypes/_Backmen/Objectives/evilTwinObjectives.yml index f6c9c7d278a..dfb7201be20 100644 --- a/Resources/Prototypes/_Backmen/Objectives/evilTwinObjectives.yml +++ b/Resources/Prototypes/_Backmen/Objectives/evilTwinObjectives.yml @@ -4,7 +4,7 @@ id: BaseEvilTwinObjective components: - type: Objective - issuer: Злой Близнец + issuer: objective-issuer-evil-twin difficulty: 1 - type: RoleRequirement roles: @@ -46,8 +46,9 @@ components: - type: Objective difficulty: 0 + hideFromTotal: true unique: true - issuer: SpaceBank + issuer: objective-issuer-SpaceBank icon: sprite: Backmen/Objects/Tools/rimbank.rsi state: icon diff --git a/Resources/Prototypes/_Backmen/Objectives/fugitiveObjective.yml b/Resources/Prototypes/_Backmen/Objectives/fugitiveObjective.yml index e4121e4e3b4..8fd82ef732f 100644 --- a/Resources/Prototypes/_Backmen/Objectives/fugitiveObjective.yml +++ b/Resources/Prototypes/_Backmen/Objectives/fugitiveObjective.yml @@ -4,7 +4,7 @@ id: BaseFugitiveObjective components: - type: Objective - issuer: self + issuer: objective-issuer-self unique: true difficulty: 1 icon: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorCybersun.yml b/Resources/Prototypes/_Backmen/Objectives/traitorCybersun.yml index 7d52ed54609..7934abed5cd 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorCybersun.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorCybersun.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: Cybersun-Industries + issuer: objective-issuer-Cybersun-Industries - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorDonk.yml b/Resources/Prototypes/_Backmen/Objectives/traitorDonk.yml index cd317021aec..96cd355324f 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorDonk.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorDonk.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: Donk-Pocket-Corp + issuer: objective-issuer-Donk-Pocket-Corp - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml b/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml index cf06ea096db..35772d3025d 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorGorlex.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: Gorlex-Marauders + issuer: objective-issuer-Gorlex-Marauders - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorInterdyne.yml b/Resources/Prototypes/_Backmen/Objectives/traitorInterdyne.yml index 77ec4554f5c..b13959d23cb 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorInterdyne.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorInterdyne.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: Interdyne-Pharmaceutics + issuer: objective-issuer-Interdyne-Pharmaceutics - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorMI13.yml b/Resources/Prototypes/_Backmen/Objectives/traitorMI13.yml index b0041cf6a0d..4f9452b2c3c 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorMI13.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorMI13.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: MI13 + issuer: objective-issuer-MI13 - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/traitorWaffle.yml b/Resources/Prototypes/_Backmen/Objectives/traitorWaffle.yml index ce8acb9d70b..90e9a8a1f91 100644 --- a/Resources/Prototypes/_Backmen/Objectives/traitorWaffle.yml +++ b/Resources/Prototypes/_Backmen/Objectives/traitorWaffle.yml @@ -8,7 +8,7 @@ components: - TraitorRole - type: Objective - issuer: Waffle-Corporation + issuer: objective-issuer-Waffle-Corporation - type: ObjectiveBlacklistRequirement blacklist: tags: diff --git a/Resources/Prototypes/_Backmen/Objectives/vampire.yml b/Resources/Prototypes/_Backmen/Objectives/vampire.yml index 05cab6939e4..07e0d95cb09 100644 --- a/Resources/Prototypes/_Backmen/Objectives/vampire.yml +++ b/Resources/Prototypes/_Backmen/Objectives/vampire.yml @@ -49,7 +49,7 @@ id: BaseBloodsuckerObjective components: - type: Objective - issuer: Коалиция вампиров + issuer: objective-issuer-vamp unique: true difficulty: 1 icon: @@ -58,4 +58,4 @@ - type: RoleRequirement roles: components: - - VampireRole \ No newline at end of file + - VampireRole diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/anomaly2.png b/Resources/Textures/Structures/Wallmounts/signs.rsi/anomaly2.png new file mode 100644 index 00000000000..6b7361f21c2 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs.rsi/anomaly2.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json index 76250dcefb6..db2d5df273a 100644 --- a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json @@ -226,22 +226,6 @@ ] ] }, - { - "name": "chemistry1", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "chemistry2", - "delays": [ - [ - 1 - ] - ] - }, { "name": "commander", "delays": [ @@ -266,14 +250,6 @@ ] ] }, - { - "name": "court", - "delays": [ - [ - 1 - ] - ] - }, { "name": "cryogenics", "delays": [ @@ -746,14 +722,6 @@ ] ] }, - { - "name": "drones", - "delays": [ - [ - 1 - ] - ] - }, { "name": "electrical", "delays": [ @@ -834,30 +802,6 @@ ] ] }, - { - "name": "hydro1", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "hydro2", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "hydro3", - "delays": [ - [ - 1 - ] - ] - }, { "name": "interrogation", "delays": [ @@ -930,14 +874,6 @@ ] ] }, - { - "name": "miner_dock", - "delays": [ - [ - 1 - ] - ] - }, { "name": "monkey_painting", "delays": [ @@ -1074,22 +1010,6 @@ ] ] }, - { - "name": "science1", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "science2", - "delays": [ - [ - 1 - ] - ] - }, { "name": "secure", "delays": [ @@ -1106,14 +1026,6 @@ ] ] }, - { - "name": "shield", - "delays": [ - [ - 1 - ] - ] - }, { "name": "shock", "delays": [ @@ -1154,14 +1066,6 @@ ] ] }, - { - "name": "toxins2", - "delays": [ - [ - 1 - ] - ] - }, { "name": "toxins", "delays": [ @@ -1186,22 +1090,6 @@ ] ] }, - { - "name": "xenobio2", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "xenolab", - "delays": [ - [ - 1 - ] - ] - }, { "name": "zomlab", "delays": [ @@ -1386,14 +1274,6 @@ ] ] }, - { - "name": "atmominsky", - "delays": [ - [ - 1 - ] - ] - }, { "name": "one", "delays": [ @@ -1489,6 +1369,39 @@ 1 ] ] + }, + { + "name": "cans" + }, + { + "name": "xenoarch" + }, + { + "name": "drama1" + }, + { + "name": "cryo" + }, + { + "name": "ai_upload" + }, + { + "name": "kitchen" + }, + { + "name": "vault" + }, + { + "name": "hydro" + }, + { + "name": "restroom" + }, + { + "name": "data" + }, + { + "name": "mats" } ] }