void ApplyWizardSettings()
{
ConsoleWrite("Applying Wizard settings ...", 0);
// Validate the numbers
ValidateIntRange(ref MaximumPlayersForMode, "Maximum Players For Mode", 8, 70, 64, false);
ValidateIntRange(ref LowestMaximumTicketsForMode, "Lowest Maximum Tickets For Mode", 20, 10000, 300, false);
ValidateIntRange(ref HighestMaximumTicketsForMode, "Highest Maximum Tickets For Mode", 20, 10000, 400, false);
if (HighestMaximumTicketsForMode < LowestMaximumTicketsForMode) {
ConsoleError("^b" + "Highest Maximum Tickets For Mode" + "^n must be greater than ^b" + "Lowest Maximum Tickets For Mode" + "^n, corrected");
int tmp = HighestMaximumTicketsForMode;
HighestMaximumTicketsForMode = LowestMaximumTicketsForMode;
LowestMaximumTicketsForMode = tmp;
}
try {
String modeName = WhichMode;
if (modeName == "Conq Small or Dom or Scav") modeName = "Conq Small, Dom, Scav"; // settings don't like commas in enum
ConsoleWrite("For mode: ^b" + modeName, 0);
PerModeSettings perMode = null;
if (fPerMode == null) {
ConsoleWarn("Settings Wizard failed due to being disabled, please enable the plugin!");
return;
}
if (fPerMode.TryGetValue(modeName, out perMode) && perMode != null) {
bool isCTF = (modeName == "CTF");
bool isCarrierAssault = modeName.Contains("Carrier");
bool isObliteration = modeName.Contains("Obliteration");
// Set the per mode Max Players
perMode.MaxPlayers = MaximumPlayersForMode;
ConsoleWrite("Set ^bMax Players^n to " + perMode.MaxPlayers, 0);
// Set the Population ranges
if (MaximumPlayersForMode >= 64) {
perMode.DefinitionOfHighPopulationForPlayers = 48;
perMode.DefinitionOfLowPopulationForPlayers = 16;
} else if (MaximumPlayersForMode >= 56) {
perMode.DefinitionOfHighPopulationForPlayers = 40;
perMode.DefinitionOfLowPopulationForPlayers = 16;
} else if (MaximumPlayersForMode >= 48) {
perMode.DefinitionOfHighPopulationForPlayers = 32;
perMode.DefinitionOfLowPopulationForPlayers = 16;
} else if (MaximumPlayersForMode >= 40) {
perMode.DefinitionOfHighPopulationForPlayers = 28;
perMode.DefinitionOfLowPopulationForPlayers = 12;
} else if (MaximumPlayersForMode >= 32) {
perMode.DefinitionOfHighPopulationForPlayers = 24;
perMode.DefinitionOfLowPopulationForPlayers = 8;
} else if (MaximumPlayersForMode >= 24) {
perMode.DefinitionOfHighPopulationForPlayers = 16;
perMode.DefinitionOfLowPopulationForPlayers = 8;
} else if (MaximumPlayersForMode >= 16) {
perMode.DefinitionOfHighPopulationForPlayers = 12;
perMode.DefinitionOfLowPopulationForPlayers = 4;
} else {
perMode.DefinitionOfHighPopulationForPlayers = 6;
perMode.DefinitionOfLowPopulationForPlayers = 4;
}
ConsoleWrite("Set ^bDefinition Of High Population For Players^n to " + perMode.DefinitionOfHighPopulationForPlayers, 0);
ConsoleWrite("Set ^bDefinition Of Low Population For Players^n to " + perMode.DefinitionOfLowPopulationForPlayers, 0);
// Set the Phase ranges
if (!isCTF && !isCarrierAssault && !isObliteration) {
double high = HighestMaximumTicketsForMode;
double low = LowestMaximumTicketsForMode;
double late = low/4.0; // late always 25% of low
// Try 33% of high first
double delta = high / 3.0;
if ((low - delta - late) < Math.Min(50.0, low/2)) {
// Try 25% of high
delta = high / 4.0;
if ((low - delta - late) < Math.Min(50.0, low/2)) {
// Use 33% of low
delta = low / 3.0;
}
}
perMode.DefinitionOfEarlyPhaseFromStart = Math.Min(300, Convert.ToInt32(delta)); // adaptive early
perMode.DefinitionOfLatePhaseFromEnd = Math.Min(300, Convert.ToInt32(late));
ConsoleWrite("Set ^bDefinition Of Early Phase As Tickets From Start^n to " + perMode.DefinitionOfEarlyPhaseFromStart, 0);
ConsoleWrite("Set ^bDefinition Of Late Phase As Tickets From End^n to " + perMode.DefinitionOfLatePhaseFromEnd, 0);
} else if (isCTF) {
ConsoleWrite("CTF Phase definitions cannot be set with the wizard, skipping.", 0);
} else if (isCarrierAssault) {
ConsoleWrite("Carrier Assault Phase definitions cannot be set with the wizard, skipping.", 0);
}
else if (isObliteration) {
ConsoleWrite("Obliteration Phase definitions cannot be set with the wizard, skipping.", 0);
}
if (MetroIsInMapRotation && modeName.Contains("Conq")) {
// Use half of low
perMode.MetroAdjustedDefinitionOfLatePhase = LowestMaximumTicketsForMode / 2;
ConsoleWrite("Set ^bMetro Adjusted Defintion Of Late Phase^n to " + perMode.MetroAdjustedDefinitionOfLatePhase, 0);
}
switch (PreferredStyleOfBalancing) {
case PresetItems.Standard:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Fast, Speed.Adaptive, Speed.Adaptive};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Fast, Speed.Adaptive, Speed.Adaptive};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Stop, Speed.Stop, Speed.Stop};
break;
case PresetItems.Aggressive:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Fast, Speed.Fast, Speed.Fast};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Fast, Speed.Fast, Speed.Fast};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Fast, Speed.Fast, Speed.Fast};
break;
case PresetItems.Passive:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Slow, Speed.Slow, Speed.Slow};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Slow, Speed.Slow, Speed.Slow};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Stop, Speed.Stop, Speed.Stop};
break;
case PresetItems.Intensify:
// TBD: Needs Speed.OverBalance (similar to Fast, but puts more players on losing team)
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Adaptive, Speed.Adaptive, Speed.Adaptive};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Adaptive, Speed.Adaptive, Speed.Adaptive};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Stop, Speed.Stop, Speed.Stop};
break;
case PresetItems.Retain:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Slow, Speed.Adaptive, Speed.Slow};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Slow, Speed.Adaptive, Speed.Slow};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Stop, Speed.Stop, Speed.Stop};
break;
case PresetItems.BalanceOnly:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Adaptive, Speed.Adaptive, Speed.Adaptive};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Adaptive, Speed.Adaptive, Speed.Adaptive};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Stop, Speed.Stop, Speed.Stop};
break;
case PresetItems.UnstackOnly:
EarlyPhaseBalanceSpeed = new Speed[3] { Speed.Unstack, Speed.Unstack, Speed.Unstack};
MidPhaseBalanceSpeed = new Speed[3] { Speed.Unstack, Speed.Unstack, Speed.Unstack};
LatePhaseBalanceSpeed = new Speed[3] { Speed.Unstack, Speed.Unstack, Speed.Unstack};
break;
case PresetItems.None:
break;
default:
break;
}
if (MetroIsInMapRotation && modeName.Contains("Conq")) {
// In sure that Metro adjustment results in a Stop speed
LatePhaseBalanceSpeed = new Speed[3] {Speed.Stop, Speed.Stop, Speed.Stop};
}
// Set unstacking maximum ticket gap
if (!isCTF && !isCarrierAssault && !isObliteration) {
perMode.MaxUnstackingTicketDifference = (HighestMaximumTicketsForMode / 2); // 50% of max
ConsoleWrite("Set ^bMax Unstacking Ticket Difference^n to " + perMode.MaxUnstackingTicketDifference, 0);
}
ConsoleWrite("Please review your Section 3 Early, Mid and Late Balance Speeds set to style " + PreferredStyleOfBalancing, 0);
ConsoleWrite("COMPLETED application of Wizard settings! Please review your Section 8 settings for ^b" + modeName, 0);
}
} catch (Exception e) {
ConsoleException(e);
}
}