Nuke agent is separete role (#15385)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
@@ -408,8 +408,10 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
||||
var playersPerOperative = nukeops.PlayersPerOperative;
|
||||
var maxOperatives = nukeops.MaxOperatives;
|
||||
|
||||
// Dear lord what is happening HERE.
|
||||
var everyone = new List<IPlayerSession>(ev.PlayerPool);
|
||||
var prefList = new List<IPlayerSession>();
|
||||
var medPrefList = new List<IPlayerSession>();
|
||||
var cmdrPrefList = new List<IPlayerSession>();
|
||||
var operatives = new List<IPlayerSession>();
|
||||
|
||||
@@ -427,7 +429,10 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
||||
{
|
||||
prefList.Add(player);
|
||||
}
|
||||
|
||||
if (profile.AntagPreferences.Contains(nukeops.MedicRoleProto))
|
||||
{
|
||||
medPrefList.Add(player);
|
||||
}
|
||||
if (profile.AntagPreferences.Contains(nukeops.CommanderRolePrototype))
|
||||
{
|
||||
cmdrPrefList.Add(player);
|
||||
@@ -438,31 +443,38 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
||||
|
||||
for (var i = 0; i < numNukies; i++)
|
||||
{
|
||||
// TODO: Please fix this if you touch it.
|
||||
IPlayerSession nukeOp;
|
||||
// Only one commander, so we do it at the start
|
||||
if (i == 0)
|
||||
{
|
||||
if (cmdrPrefList.Count == 0)
|
||||
{
|
||||
if (prefList.Count == 0)
|
||||
if (medPrefList.Count == 0)
|
||||
{
|
||||
if (everyone.Count == 0)
|
||||
if (prefList.Count == 0)
|
||||
{
|
||||
Logger.InfoS("preset",
|
||||
"Insufficient ready players to fill up with nukeops, stopping the selection");
|
||||
break;
|
||||
if (everyone.Count == 0)
|
||||
{
|
||||
Logger.InfoS("preset", "Insufficient ready players to fill up with nukeops, stopping the selection");
|
||||
break;
|
||||
}
|
||||
nukeOp = _random.PickAndTake(everyone);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commanders, agents or nukies, picking at random.");
|
||||
}
|
||||
else
|
||||
{
|
||||
nukeOp = _random.PickAndTake(prefList);
|
||||
everyone.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commander or agents, picking at random from regular op list.");
|
||||
}
|
||||
|
||||
nukeOp = _random.PickAndTake(everyone);
|
||||
Logger.InfoS("preset",
|
||||
"Insufficient preferred nukeop commanders or nukies, picking at random.");
|
||||
}
|
||||
else
|
||||
{
|
||||
nukeOp = _random.PickAndTake(prefList);
|
||||
nukeOp = _random.PickAndTake(medPrefList);
|
||||
everyone.Remove(nukeOp);
|
||||
Logger.InfoS("preset",
|
||||
"Insufficient preferred nukeop commanders, picking at random from regular op list.");
|
||||
prefList.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commanders, picking an agent");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -470,29 +482,44 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
||||
nukeOp = _random.PickAndTake(cmdrPrefList);
|
||||
everyone.Remove(nukeOp);
|
||||
prefList.Remove(nukeOp);
|
||||
medPrefList.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Selected a preferred nukeop commander.");
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (i == 1)
|
||||
{
|
||||
if (prefList.Count == 0)
|
||||
if (medPrefList.Count == 0)
|
||||
{
|
||||
if (everyone.Count == 0)
|
||||
if (prefList.Count == 0)
|
||||
{
|
||||
Logger.InfoS("preset",
|
||||
"Insufficient ready players to fill up with nukeops, stopping the selection");
|
||||
break;
|
||||
if (everyone.Count == 0)
|
||||
{
|
||||
Logger.InfoS("preset", "Insufficient ready players to fill up with nukeops, stopping the selection");
|
||||
break;
|
||||
}
|
||||
nukeOp = _random.PickAndTake(everyone);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commanders, agents or nukies, picking at random.");
|
||||
}
|
||||
else
|
||||
{
|
||||
nukeOp = _random.PickAndTake(prefList);
|
||||
everyone.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commander or agents, picking at random from regular op list.");
|
||||
}
|
||||
|
||||
nukeOp = _random.PickAndTake(everyone);
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeops, picking at random.");
|
||||
}
|
||||
else
|
||||
{
|
||||
nukeOp = _random.PickAndTake(prefList);
|
||||
nukeOp = _random.PickAndTake(medPrefList);
|
||||
everyone.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Selected a preferred nukeop.");
|
||||
Logger.InfoS("preset", "Insufficient preferred nukeop commanders, picking an agent");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
nukeOp = _random.PickAndTake(prefList);
|
||||
everyone.Remove(nukeOp);
|
||||
Logger.InfoS("preset", "Selected a preferred nukeop commander.");
|
||||
}
|
||||
|
||||
operatives.Add(nukeOp);
|
||||
@@ -641,7 +668,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
||||
break;
|
||||
case 1:
|
||||
name = Loc.GetString("nukeops-role-agent") + " " + _random.PickAndTake(component.OperativeNames[component.NormalNames]);
|
||||
role = component.OperativeRoleProto;
|
||||
role = component.MedicRoleProto;
|
||||
gear = component.MedicStartGearPrototype;
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user