List antags in custody in round end screen (#21566)
* List antags in custody in round end screen * Only show the message for traitors
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
using Content.Server.GameTicking;
|
using Content.Server.GameTicking;
|
||||||
using Content.Server.GameTicking.Rules.Components;
|
using Content.Server.GameTicking.Rules.Components;
|
||||||
using Content.Server.Mind;
|
using Content.Server.Mind;
|
||||||
|
using Content.Server.Shuttles.Systems;
|
||||||
|
using Content.Shared.Cuffs.Components;
|
||||||
using Content.Shared.Mind;
|
using Content.Shared.Mind;
|
||||||
|
using Content.Shared.Mobs.Systems;
|
||||||
using Content.Shared.Objectives.Components;
|
using Content.Shared.Objectives.Components;
|
||||||
using Content.Shared.Objectives.Systems;
|
using Content.Shared.Objectives.Systems;
|
||||||
using Content.Shared.Random;
|
using Content.Shared.Random;
|
||||||
@@ -18,6 +21,7 @@ public sealed class ObjectivesSystem : SharedObjectivesSystem
|
|||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
[Dependency] private readonly MindSystem _mind = default!;
|
[Dependency] private readonly MindSystem _mind = default!;
|
||||||
|
[Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -71,12 +75,18 @@ public sealed class ObjectivesSystem : SharedObjectivesSystem
|
|||||||
{
|
{
|
||||||
// first get the total number of players that were in these game rules combined
|
// first get the total number of players that were in these game rules combined
|
||||||
var total = 0;
|
var total = 0;
|
||||||
|
var totalInCustody = 0;
|
||||||
foreach (var (_, minds) in summary)
|
foreach (var (_, minds) in summary)
|
||||||
{
|
{
|
||||||
total += minds.Count;
|
total += minds.Count;
|
||||||
|
totalInCustody += minds.Where(m => IsInCustody(m)).Count();
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = Loc.GetString("objectives-round-end-result", ("count", total), ("agent", agent));
|
var result = Loc.GetString("objectives-round-end-result", ("count", total), ("agent", agent));
|
||||||
|
if (agent == Loc.GetString("traitor-round-end-agent-name"))
|
||||||
|
{
|
||||||
|
result += "\n" + Loc.GetString("objectives-round-end-result-in-custody", ("count", total), ("custody", totalInCustody), ("agent", agent));
|
||||||
|
}
|
||||||
// next add all the players with its own prepended text
|
// next add all the players with its own prepended text
|
||||||
foreach (var (prepend, minds) in summary)
|
foreach (var (prepend, minds) in summary)
|
||||||
{
|
{
|
||||||
@@ -123,14 +133,16 @@ public sealed class ObjectivesSystem : SharedObjectivesSystem
|
|||||||
|
|
||||||
result += "\n";
|
result += "\n";
|
||||||
|
|
||||||
|
var custody = IsInCustody(mindId, mind) ? Loc.GetString("objectives-in-custody") + " " : "";
|
||||||
|
|
||||||
var objectives = mind.AllObjectives.ToArray();
|
var objectives = mind.AllObjectives.ToArray();
|
||||||
if (objectives.Length == 0)
|
if (objectives.Length == 0)
|
||||||
{
|
{
|
||||||
result += Loc.GetString("objectives-no-objectives", ("title", title), ("agent", agent));
|
result += Loc.GetString("objectives-no-objectives", ("custody", custody), ("title", title), ("agent", agent));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
result += Loc.GetString("objectives-with-objectives", ("title", title), ("agent", agent));
|
result += Loc.GetString("objectives-with-objectives", ("custody", custody), ("title", title), ("agent", agent));
|
||||||
|
|
||||||
foreach (var objectiveGroup in objectives.GroupBy(o => Comp<ObjectiveComponent>(o).Issuer))
|
foreach (var objectiveGroup in objectives.GroupBy(o => Comp<ObjectiveComponent>(o).Issuer))
|
||||||
{
|
{
|
||||||
@@ -197,6 +209,27 @@ public sealed class ObjectivesSystem : SharedObjectivesSystem
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns whether a target is considered 'in custody' (cuffed on the shuttle).
|
||||||
|
/// </summary>
|
||||||
|
private bool IsInCustody(EntityUid mindId, MindComponent? mind = null)
|
||||||
|
{
|
||||||
|
if (!Resolve(mindId, ref mind))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Ghosting will not save you
|
||||||
|
bool originalEntityInCustody = false;
|
||||||
|
EntityUid? originalEntity = GetEntity(mind.OriginalOwnedEntity);
|
||||||
|
if (originalEntity.HasValue && originalEntity != mind.OwnedEntity)
|
||||||
|
{
|
||||||
|
originalEntityInCustody = TryComp<CuffableComponent>(originalEntity, out var origCuffed) && origCuffed.CuffedHandCount > 0
|
||||||
|
&& _emergencyShuttle.IsTargetEscaping(originalEntity.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return originalEntityInCustody || (TryComp<CuffableComponent>(mind.OwnedEntity, out var cuffed) && cuffed.CuffedHandCount > 0
|
||||||
|
&& _emergencyShuttle.IsTargetEscaping(mind.OwnedEntity.Value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -3,12 +3,16 @@ objectives-round-end-result = {$count ->
|
|||||||
*[other] There were {$count} {MAKEPLURAL($agent)}.
|
*[other] There were {$count} {MAKEPLURAL($agent)}.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
objectives-round-end-result-in-custody = {$custody} out of {$count} {MAKEPLURAL($agent)} were in custody.
|
||||||
|
|
||||||
objectives-player-user-named = [color=White]{$name}[/color] ([color=gray]{$user}[/color])
|
objectives-player-user-named = [color=White]{$name}[/color] ([color=gray]{$user}[/color])
|
||||||
objectives-player-user = [color=gray]{$user}[/color]
|
objectives-player-user = [color=gray]{$user}[/color]
|
||||||
objectives-player-named = [color=White]{$name}[/color]
|
objectives-player-named = [color=White]{$name}[/color]
|
||||||
|
|
||||||
objectives-no-objectives = {$title} was a {$agent}.
|
objectives-no-objectives = [bold][color=red]{$custody}[/color]{$title} was a {$agent}.
|
||||||
objectives-with-objectives = {$title} was a {$agent} who had the following objectives:
|
objectives-with-objectives = [bold][color=red]{$custody}[/color]{$title} was a {$agent} who had the following objectives:
|
||||||
|
|
||||||
objectives-objective-success = {$objective} | [color={$markupColor}]Success![/color]
|
objectives-objective-success = {$objective} | [color={$markupColor}]Success![/color]
|
||||||
objectives-objective-fail = {$objective} | [color={$markupColor}]Failure![/color] ({$progress}%)
|
objectives-objective-fail = {$objective} | [color={$markupColor}]Failure![/color] ({$progress}%)
|
||||||
|
|
||||||
|
objectives-in-custody = | IN CUSTODY |
|
||||||
Reference in New Issue
Block a user