PRoConEvents.MULTIbalancer.ApplyWizardSettings C# (CSharp) Method

ApplyWizardSettings() public method

public ApplyWizardSettings ( ) : void
return void
        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);
            }
        }
MULTIbalancer