make nukie round-end screen good (#12949)

* make nukie round-end screen good

* UNCOMMENT THIS YOU BUFFOON
This commit is contained in:
Nemanja
2022-12-09 21:08:40 -05:00
committed by GitHub
parent 9db34a4e8a
commit 250fde746f
2 changed files with 36 additions and 24 deletions

View File

@@ -27,7 +27,6 @@ using Content.Shared.Roles;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Server.Maps; using Robust.Server.Maps;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Configuration;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
@@ -40,7 +39,6 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
{ {
[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 IConfigurationManager _cfg = default!;
[Dependency] private readonly IServerPreferencesManager _prefs = default!; [Dependency] private readonly IServerPreferencesManager _prefs = default!;
[Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
@@ -144,8 +142,9 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
/// <summary> /// <summary>
/// Players who played as an operative at some point in the round. /// Players who played as an operative at some point in the round.
/// Stores the session as well as the entity name
/// </summary> /// </summary>
private readonly HashSet<IPlayerSession> _operativePlayers = new(); private readonly Dictionary<string, IPlayerSession> _operativePlayers = new();
public override void Initialize() public override void Initialize()
@@ -172,8 +171,9 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
return; return;
var session = mindComponent.Mind?.Session; var session = mindComponent.Mind?.Session;
var name = MetaData(uid).EntityName;
if (session != null) if (session != null)
_operativePlayers.Add(session); _operativePlayers.Add(name, session);
} }
private void OnComponentRemove(EntityUid uid, NukeOperativeComponent component, ComponentRemove args) private void OnComponentRemove(EntityUid uid, NukeOperativeComponent component, ComponentRemove args)
@@ -331,7 +331,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
_winConditions.Add(WinCondition.SomeNukiesAlive); _winConditions.Add(WinCondition.SomeNukiesAlive);
var diskAtCentCom = false; var diskAtCentCom = false;
foreach (var (comp, transform) in EntityManager.EntityQuery<NukeDiskComponent, TransformComponent>()) foreach (var (_, transform) in EntityManager.EntityQuery<NukeDiskComponent, TransformComponent>())
{ {
var diskMapId = transform.MapID; var diskMapId = transform.MapID;
diskAtCentCom = _shuttleSystem.CentComMap == diskMapId; diskAtCentCom = _shuttleSystem.CentComMap == diskMapId;
@@ -373,9 +373,10 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
} }
ev.AddLine(Loc.GetString("nukeops-list-start")); ev.AddLine(Loc.GetString("nukeops-list-start"));
foreach (var nukeop in _operativePlayers) foreach (var (name, session) in _operativePlayers)
{ {
ev.AddLine($"- {nukeop.Name}"); var listing = Loc.GetString("nukeops-list-name", ("name", name), ("user", session.Name));
ev.AddLine(listing);
} }
} }
@@ -545,7 +546,10 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
{ {
ev.PlayerPool.Remove(session); ev.PlayerPool.Remove(session);
GameTicker.PlayerJoinGame(session); GameTicker.PlayerJoinGame(session);
_operativePlayers.Add(session); var name = session.AttachedEntity == null
? string.Empty
: MetaData(session.AttachedEntity.Value).EntityName;
_operativePlayers.Add(name, session);
} }
} }
@@ -580,8 +584,12 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
if (!mind.TryGetSession(out var playerSession)) if (!mind.TryGetSession(out var playerSession))
return; return;
if (_operativePlayers.ContainsValue(playerSession))
return;
_operativePlayers.Add(playerSession); var name = MetaData(uid).EntityName;
_operativePlayers.Add(name, playerSession);
if (_ticker.RunLevel != GameRunLevel.InRound) if (_ticker.RunLevel != GameRunLevel.InRound)
return; return;
@@ -614,8 +622,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
var mapId = _mapManager.CreateMap(); var mapId = _mapManager.CreateMap();
var outpostGrids = _map.LoadMap(mapId, path.ToString()); if (!_map.TryLoad(mapId, path.ToString(), out var outpostGrids) || outpostGrids.Count == 0)
if (outpostGrids.Count == 0)
{ {
Logger.ErrorS("nukies", $"Error loading map {path} for nukies!"); Logger.ErrorS("nukies", $"Error loading map {path} for nukies!");
return false; return false;
@@ -625,10 +632,13 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
_nukieOutpost = outpostGrids[0]; _nukieOutpost = outpostGrids[0];
// Listen I just don't want it to overlap. // Listen I just don't want it to overlap.
var shuttleId = _map.LoadGrid(mapId, shuttlePath.ToString(), new MapLoadOptions() if (!_map.TryLoad(mapId, shuttlePath.ToString(), out var grids, new MapLoadOptions {Offset = Vector2.One*1000f}) || !grids.Any())
{ {
Offset = Vector2.One * 1000f, Logger.ErrorS("nukies", $"Error loading grid {shuttlePath} for nukies!");
}); return false;
}
var shuttleId = grids.First();
// Naughty, someone saved the shuttle as a map. // Naughty, someone saved the shuttle as a map.
if (Deleted(shuttleId)) if (Deleted(shuttleId))
@@ -691,7 +701,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
_stationSpawningSystem.EquipStartingGear(mob, gearPrototype, profile); _stationSpawningSystem.EquipStartingGear(mob, gearPrototype, profile);
_faction.RemoveFaction(mob, "NanoTrasen", false); _faction.RemoveFaction(mob, "NanoTrasen", false);
_faction.AddFaction(mob, "Syndicate", true); _faction.AddFaction(mob, "Syndicate");
} }
private void SpawnOperatives(int spawnCount, List<IPlayerSession> sessions, bool addSpawnPoints) private void SpawnOperatives(int spawnCount, List<IPlayerSession> sessions, bool addSpawnPoints)
@@ -786,7 +796,6 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
return; return;
_nukeopsRuleConfig = nukeOpsConfig; _nukeopsRuleConfig = nukeOpsConfig;
var minPlayers = nukeOpsConfig.MinPlayers; var minPlayers = nukeOpsConfig.MinPlayers;
if (!ev.Forced && ev.Players.Length < minPlayers) if (!ev.Forced && ev.Players.Length < minPlayers)
{ {
@@ -841,8 +850,10 @@ public sealed class NukeopsRuleSystem : GameRuleSystem
var query = EntityQuery<NukeOperativeComponent, MindComponent>(true); var query = EntityQuery<NukeOperativeComponent, MindComponent>(true);
foreach (var (_, mindComp) in query) foreach (var (_, mindComp) in query)
{ {
if (mindComp.Mind != null && mindComp.Mind.TryGetSession(out var session) == true) if (mindComp.Mind == null || !mindComp.Mind.TryGetSession(out var session))
_operativePlayers.Add(session); continue;
var name = MetaData(mindComp.Owner).EntityName;
_operativePlayers.Add(name, session);
} }
if (GameTicker.RunLevel == GameRunLevel.InRound) if (GameTicker.RunLevel == GameRunLevel.InRound)

View File

@@ -5,11 +5,11 @@ nukeops-welcome =
You are a nuclear operative. Your goal is to blow up {$station}, and ensure that it is nothing but a pile of rubble. Your bosses, the Syndicate, have provided you with the tools you'll need for the task. You are a nuclear operative. Your goal is to blow up {$station}, and ensure that it is nothing but a pile of rubble. Your bosses, the Syndicate, have provided you with the tools you'll need for the task.
Death to Nanotrasen! Death to Nanotrasen!
nukeops-opsmajor = Syndicate major victory! nukeops-opsmajor = [color=crimson]Syndicate major victory![/color]
nukeops-opsminor = Syndicate minor victory! nukeops-opsminor = [color=crimson]Syndicate minor victory![/color]
nukeops-neutral = Neutral outcome! nukeops-neutral = [color=yellow]Neutral outcome![/color]
nukeops-crewminor = Crew minor victory! nukeops-crewminor = [color=green]Crew minor victory![/color]
nukeops-crewmajor = Crew major victory! nukeops-crewmajor = [color=green]Crew major victory![/color]
nukeops-cond-nukeexplodedoncorrectstation = The nuclear operatives managed to blow up the station. nukeops-cond-nukeexplodedoncorrectstation = The nuclear operatives managed to blow up the station.
nukeops-cond-nukeexplodedonnukieoutpost = The nuclear operative outpost was destroyed by a nuclear blast. nukeops-cond-nukeexplodedonnukieoutpost = The nuclear operative outpost was destroyed by a nuclear blast.
@@ -23,7 +23,8 @@ nukeops-cond-allnukiesdead = All nuclear operatives have died.
nukeops-cond-somenukiesalive = Some nuclear operatives died. nukeops-cond-somenukiesalive = Some nuclear operatives died.
nukeops-cond-allnukiesalive = No nuclear operatives died. nukeops-cond-allnukiesalive = No nuclear operatives died.
nukeops-list-start = The nuke ops were: nukeops-list-start = The operatives were:
nukeops-list-name = - [color=White]{$name}[/color] ([color=gray]{$user}[/color])
nukeops-not-enough-ready-players = Not enough players readied up for the game! There were {$readyPlayersCount} players readied up out of {$minimumPlayers} needed. Can't start Nukeops. nukeops-not-enough-ready-players = Not enough players readied up for the game! There were {$readyPlayersCount} players readied up out of {$minimumPlayers} needed. Can't start Nukeops.
nukeops-no-one-ready = No players readied up! Can't start Nukeops. nukeops-no-one-ready = No players readied up! Can't start Nukeops.