diff --git a/Modules/Utils.cs b/Modules/Utils.cs
index 48e24f8bc..ee93ba563 100644
--- a/Modules/Utils.cs
+++ b/Modules/Utils.cs
@@ -1369,7 +1369,7 @@ public static class Utils
case "DisableAirshipDevices" when Main.CurrentMap != MapNames.Airship:
case "PolusReactorTimeLimit" when Main.CurrentMap != MapNames.Polus:
case "AirshipReactorTimeLimit" when Main.CurrentMap != MapNames.Airship:
- case "ImpCanBeRole" or "CrewCanBeRole" or "NeutralCanBeRole" when f1:
+ case "ImpCanBeRole" or "CrewCanBeRole" or "NeutralCanBeRole" or "CovenCanBeRole" when f1:
continue;
}
@@ -3837,8 +3837,13 @@ public static class Utils
return name;
}
+ private static (int AddonsProgress, int RolesProgress) QuickSetupProgress;
+
public static void EnterQuickSetupRoles(bool addons)
{
+ int progress = addons ? QuickSetupProgress.AddonsProgress : QuickSetupProgress.RolesProgress;
+ bool continuation = progress > 0;
+
int all = Options.CustomRoleSpawnChances.Keys.Count(x => addons ? x.IsAdditionRole() : !x.IsAdditionRole());
var count = 0;
@@ -3848,6 +3853,8 @@ public static class Utils
count++;
+ if (continuation && progress >= count) continue;
+
string str = GetString($"{role}InfoLong");
string infoLong;
@@ -3867,10 +3874,19 @@ public static class Utils
rotStr = ColorString(at.GetAddonTypeColor(), GetString($"ROT.AddonType.{at}"));
}
+ Action increment = () =>
+ {
+ if (addons) QuickSetupProgress.AddonsProgress++;
+ else QuickSetupProgress.RolesProgress++;
+
+ if (addons && QuickSetupProgress.AddonsProgress >= all)
+ QuickSetupProgress = (0, 0);
+ };
+
Prompt.Show(
string.Format(GetString("Promt.EnableRole"), count, all, rotStr, role.ToColoredString(), infoLong),
- () => option.SetValue(1),
- () => option.SetValue(0));
+ (() => option.SetValue(1)) + increment,
+ (() => option.SetValue(0)) + increment);
}
if (addons) return;
diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs
index a62f2a4fa..1c41af47e 100644
--- a/Patches/IntroPatch.cs
+++ b/Patches/IntroPatch.cs
@@ -360,23 +360,28 @@ internal static class SetUpRoleTextPatch
string disabledRoleStr = GetString("Rate0");
var i = 0;
- foreach (OptionItem o in OptionItem.AllOptions)
+ foreach ((TabGroup tab, OptionItem[] options) in Options.GroupedOptions)
{
- if (!o.IsCurrentlyHidden() && (o.Parent == null ? !o.GetString().Equals(disabledRoleStr) : AllParentsEnabled(o)))
- sb.Append($"{(o.Parent == null ? o.GetName(true, true).RemoveHtmlTags().PadRightV2(40) : $"┗ {o.GetName(true, true).RemoveHtmlTags()}".PadRightV2(41))}:{o.GetString().RemoveHtmlTags()}\n");
+ sb.Append($"\n----{GetString($"TabGroup.{tab}")}----\n");
- if (i++ > 20)
+ foreach (OptionItem o in options)
{
- yield return null;
- i = 0;
- }
+ if (!o.IsCurrentlyHidden() && (o.Parent == null ? !o.GetString().Equals(disabledRoleStr) : AllParentsEnabled(o)))
+ sb.Append($"{(o.Parent == null ? o.GetName(true, true).RemoveHtmlTags().PadRightV2(40) : $"┗ {o.GetName(true, true).RemoveHtmlTags()}".PadRightV2(41))}:{o.GetString().RemoveHtmlTags()}\n");
- continue;
+ if (i++ > 20)
+ {
+ yield return null;
+ i = 0;
+ }
- bool AllParentsEnabled(OptionItem oi)
- {
- if (oi.Parent == null) return true;
- return oi.Parent.GetBool() && AllParentsEnabled(oi.Parent);
+ continue;
+
+ bool AllParentsEnabled(OptionItem oi)
+ {
+ if (oi.Parent == null) return true;
+ return oi.Parent.GetBool() && AllParentsEnabled(oi.Parent);
+ }
}
}
diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json
index a2e41fc95..775d2fad5 100644
--- a/Resources/Lang/en_US.json
+++ b/Resources/Lang/en_US.json
@@ -4041,7 +4041,7 @@
"AnalystInfoLong": "(Crewmates):\\nAs the Analyst, you may use your kill button on someone to analyze them. You will have to stand next to your target for a few seconds to complete the analysis. When the analysis is complete, you will see how many players they've killed so far, how many times they've vented so far, and their role basis.\\n\\nNote: If the host's settings don't allow you to see an information, the result will show 0 or nothing!\\nNote: None of these factors determine whether someone is evil or not! Think twice before judging too fast!",
"AnalyzerCD": "Analyze Cooldown",
"AnalyzerDur": "Analyze Time",
- "AnalyzerResult": "\\n\\nShowing analyzation result for {0}:\\nKills: {1}, Vents: {2}, Role Basis: {3}",
+ "AnalyzerResult": "Showing analyzation result for {0}:\\nKills: {1}, Vents: {2}, Role Basis: {3}",
"AnalyzerKillButtonText": "Analyze",
"AnalyzeCD": "Analyze Cooldown",
"AnalyzeDur": "Analyze Duration",
@@ -4382,7 +4382,7 @@
"PostmanCorrectDeliver": "Deliver successful.",
"PostmanTargetDied": "Your target died.",
"PostmanGetNewTarget": "Your new target is {0}.",
- "PostmanDone": "\\n\\nYou're done delivering messages!\\nYou'll win with the winning team at the end.",
+ "PostmanDone": "You're done delivering messages!\\nYou'll win with the winning team at the end.",
"PostmanTarget": "Target: {0}",
"DeliverCooldown": "Deliver Cooldown",
"NecroGuesser": "Necro-Guesser",
@@ -9093,13 +9093,13 @@
"AlchemistVisionOnLightsOut": "Vision During Lights Out During Sight Potion",
"AlchemistVisionDur": "Sight Potion Duration",
"AlchemistVentButtonText": "Drink",
- "AlchemistGotShieldPotion": "\\n\\nPotion Name: Shield Potion\\nDescription: Grants a temporary shield\\nActivate by Venting/Petting",
- "AlchemistGotSightPotion": "\\n\\nPotion Name: Sight Potion\\nDescription: Increases your vision temporarily\\nActivate by Venting/Petting",
- "AlchemistGotInvisPotion": "\\n\\nPotion Name: Invisibility Potion\\nDescription: Turns you temporarily invisible\\nActivate by Venting/Petting",
- "AlchemistGotQFPotion": "\\n\\nPotion Name: Quick Fix Potion\\nDescription: You can fix the next critical sabotage alone\\nActivates automatically",
- "AlchemistGotSpeedPotion": "\\n\\nPotion Name: Speed Potion\\nDescription: Increases your speed temporarily\\nActivate by Venting/Petting",
- "AlchemistGotTPPotion": "\\n\\nPotion Name: Teleport Potion\\nDescription: Teleports you to a random player\\nActivate by Venting/Petting",
- "AlchemistGotSuicidePotion": "\\n\\n\\nAwkward Potion\\nLooks like you've mixed the wrong ingredients!\\nDrinking this potion will kill you!\\nActivate by Venting/Petting",
+ "AlchemistGotShieldPotion": "Potion Name: Shield Potion\\nDescription: Grants a temporary shield\\nActivate by Venting/Petting",
+ "AlchemistGotSightPotion": "Potion Name: Sight Potion\\nDescription: Increases your vision temporarily\\nActivate by Venting/Petting",
+ "AlchemistGotInvisPotion": "Potion Name: Invisibility Potion\\nDescription: Turns you temporarily invisible\\nActivate by Venting/Petting",
+ "AlchemistGotQFPotion": "Potion Name: Quick Fix Potion\\nDescription: You can fix the next critical sabotage alone\\nActivates automatically",
+ "AlchemistGotSpeedPotion": "Potion Name: Speed Potion\\nDescription: Increases your speed temporarily\\nActivate by Venting/Petting",
+ "AlchemistGotTPPotion": "Potion Name: Teleport Potion\\nDescription: Teleports you to a random player\\nActivate by Venting/Petting",
+ "AlchemistGotSuicidePotion": "Awkward Potion\\nLooks like you've mixed the wrong ingredients!\\nDrinking this potion will kill you!\\nActivate by Venting/Petting",
"AlchemistNoPotion": "You don't have any potions ready to drink",
"AlchemistShielded": "Shield Potion active",
"AlchemistHasSpeed": "Speed Potion active",