Fixed players without headrevs ticked being picked anyway (#20895)

* Fixy fix fix uwu merge pwease

* admin message to inform them

* oop
This commit is contained in:
Vasilis
2023-10-19 05:48:55 +02:00
committed by GitHub
parent 3e32e75737
commit e04d6a312c
4 changed files with 12 additions and 4 deletions

View File

@@ -116,14 +116,13 @@ public sealed class AntagSelectionSystem : GameRuleSystem<GameRuleComponent>
var antags = Math.Clamp(allPlayers.Count / antagsPerPlayer, 1, maxAntags); var antags = Math.Clamp(allPlayers.Count / antagsPerPlayer, 1, maxAntags);
for (var antag = 0; antag < antags; antag++) for (var antag = 0; antag < antags; antag++)
{ {
IPlayerSession chosenPlayer; IPlayerSession chosenPlayer = null!;
if (prefList.Count == 0) if (prefList.Count == 0)
{ {
if (playerList.Count == 0) if (playerList.Count == 0)
{ {
break; break;
} }
chosenPlayer = _random.PickAndTake(playerList);
} }
else else
{ {

View File

@@ -29,6 +29,9 @@ public sealed partial class RevolutionaryRuleComponent : Component
[DataField] [DataField]
public Dictionary<string, EntityUid> HeadRevs = new(); public Dictionary<string, EntityUid> HeadRevs = new();
[DataField]
public ProtoId<AntagPrototype> HeadRevPrototypeId = "HeadRev";
[DataField] [DataField]
public ProtoId<AntagPrototype> RevPrototypeId = "Rev"; public ProtoId<AntagPrototype> RevPrototypeId = "Rev";

View File

@@ -142,9 +142,14 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem<RevolutionaryRuleCo
var query = QueryActiveRules(); var query = QueryActiveRules();
while (query.MoveNext(out _, out var comp, out _)) while (query.MoveNext(out _, out var comp, out _))
{ {
_antagSelection.EligiblePlayers(comp.RevPrototypeId, comp.MaxHeadRevs, comp.PlayersPerHeadRev, comp.HeadRevStartSound, _antagSelection.EligiblePlayers(comp.HeadRevPrototypeId, comp.MaxHeadRevs, comp.PlayersPerHeadRev, comp.HeadRevStartSound,
"head-rev-role-greeting", "#5e9cff", out var chosen); "head-rev-role-greeting", "#5e9cff", out var chosen);
GiveHeadRev(chosen, comp.RevPrototypeId, comp); if (!chosen.Any())
GiveHeadRev(chosen, comp.RevPrototypeId, comp);
else
{
_chatManager.SendAdminAnnouncement(Loc.GetString("rev-no-heads"));
}
} }
} }

View File

@@ -46,6 +46,7 @@ rev-description = Revolutionaries are among us.
rev-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 a Revolution. rev-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 a Revolution.
rev-no-one-ready = No players readied up! Can't start a Revolution. rev-no-one-ready = No players readied up! Can't start a Revolution.
rev-no-heads = There were no Head Revolutionaries to be selected. Can't start a Revolution.
rev-all-heads-dead = All the heads are dead, now finish up the rest of the crew! rev-all-heads-dead = All the heads are dead, now finish up the rest of the crew!