예제 #1
0
        static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs)
        {
            try {
                Settings settings = Helper.LoadSettings();

                LanceConfiguratorPanel LC = (LanceConfiguratorPanel)ReflectionHelper.GetPrivateField(__instance, "LC");
                if (LC.IsSimGame)
                {
                    float num2 = 0f;
                    int   lanceTonnageRating = SimGameBattleSimulator.GetLanceTonnageRating(LC.sim, mechs, out num2);
                    Fields.cbill = 0f;
                    if (settings.CostByTons)
                    {
                        foreach (MechDef def in mechs)
                        {
                            Fields.cbill += (float)def.Chassis.Tonnage * settings.cbillsPerTon;
                        }
                    }
                    else
                    {
                        foreach (MechDef def in mechs)
                        {
                            Fields.cbill += (float)def.Description.Cost * settings.percentageOfMechCost;
                        }
                    }

                    TextMeshProUGUI simLanceTonnageText = (TextMeshProUGUI)ReflectionHelper.GetPrivateField(__instance, "simLanceTonnageText");
                    simLanceTonnageText.text = string.Format("Operation Costs: {0} ¢ / Lance Weight: {1} TONS", (int)Fields.cbill, (int)num2);
                }
            }
            catch (Exception e) {
                Logger.LogError(e);
            }
        }
        public static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs)
        {
            LanceConfiguratorPanel lanceConfiguratorPanel = (LanceConfiguratorPanel)ReflectionHelper.GetPrivateField(__instance, "LC");

            if (!lanceConfiguratorPanel.IsSimGame)
            {
                return;
            }

            Contract activeContract = (Contract)ReflectionHelper.GetPrivateField(__instance, "activeContract");

            if (activeContract == null)
            {
                return;
            }

            int difficulty   = activeContract.Difficulty;
            int tonnageLimit = 0;

            if (!TonnageLimitByMissionDifficulty.GetTonnageLimit(difficulty, out tonnageLimit))
            {
                return;
            }

            float lanceTonnage = 0;

            foreach (MechDef mech in mechs)
            {
                lanceTonnage += mech.Chassis.Tonnage;
            }

            TextMeshProUGUI tonnageText = (TextMeshProUGUI)ReflectionHelper.GetPrivateField(__instance, "simLanceTonnageText");

            tonnageText.text = string.Format("{0} / {1} TONS", (int)lanceTonnage, tonnageLimit);
        }
        static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs, LocalizableText ___simLanceTonnageText, LanceConfiguratorPanel ___LC)
        {
            try {
                if (___LC.IsSimGame)
                {
                    DropCostManager.Instance.CalculateLanceCost(mechs);

                    // longer strings interfere with messages about incorrect lance configurations
                    ___simLanceTonnageText.SetText($"DROP COST: ¢{DropCostManager.Instance.FormattedCosts}   LANCE WEIGHT: {DropCostManager.Instance.LanceTonnage} TONS");
                    if (DCECore.settings.diffMode != EDifficultyType.NotActive)
                    {
                        SGDifficultyIndicatorWidget lanceRatingWidget = (SGDifficultyIndicatorWidget)AccessTools
                                                                        .Field(typeof(LanceHeaderWidget), "lanceRatingWidget").GetValue(__instance);
                        TextMeshProUGUI label = lanceRatingWidget.transform.parent
                                                .GetComponentsInChildren <TextMeshProUGUI>()
                                                .FirstOrDefault(t => t.transform.name == "label-lanceRating");
                        label.text = "Lance Rating";
                        int difficulty = DropCostManager.Instance.RawCost / DCECore.settings.valuePerHalfSkull;
                        DCECore.modLog.Debug?.Write($"Calculated Drop Rating: {difficulty}, total value: {DropCostManager.Instance.RawCost}");
                        lanceRatingWidget.SetDifficulty(difficulty);
                    }
                }
            }
            catch (Exception e) {
                DCECore.modLog.Error?.Write(e);
            }
        }
예제 #4
0
        static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs, LocalizableText ___simLanceTonnageText, LanceConfiguratorPanel ___LC)
        {
            try {
                Settings settings        = Helper.LoadSettings();
                string   freeTonnageText = "";


                if (___LC.IsSimGame)
                {
                    int   lanceTonnage = 0;
                    float dropCost     = 0f;
                    if (settings.CostByTons)
                    {
                        foreach (MechDef def in mechs)
                        {
                            dropCost     += (def.Chassis.Tonnage * settings.cbillsPerTon);
                            lanceTonnage += (int)def.Chassis.Tonnage;
                        }
                    }
                    else
                    {
                        foreach (MechDef def in mechs)
                        {
                            dropCost     += (Helper.CalculateCBillValue(def) * settings.percentageOfMechCost);
                            lanceTonnage += (int)def.Chassis.Tonnage;
                        }
                    }
                    if (settings.CostByTons && settings.someFreeTonnage)
                    {
                        freeTonnageText = $"({settings.freeTonnageAmount} TONS FREE)";
                        dropCost        = Math.Max(0f, (lanceTonnage - settings.freeTonnageAmount) * settings.cbillsPerTon);
                    }

                    string formattedDropCost = string.Format("{0:n0}", dropCost);
                    Fields.DropCost          = dropCost;
                    Fields.LanceTonnage      = lanceTonnage;
                    Fields.FormattedDropCost = formattedDropCost;
                    Fields.FreeTonnageText   = freeTonnageText;

                    // longer strings interfere with messages about incorrect lance configurations
                    ___simLanceTonnageText.SetText($"DROP COST: ¢{Fields.FormattedDropCost}   LANCE WEIGHT: {Fields.LanceTonnage} TONS {Fields.FreeTonnageText}");
                }
            }
            catch (Exception e) {
                Logger.LogError(e);
            }
        }
        public static void Postfix(LanceConfiguratorPanel __instance, ref bool __result)
        {
            if (!__instance.IsSimGame)
            {
                return;
            }

            if (__instance.activeContract == null)
            {
                return;
            }

            int difficulty   = __instance.activeContract.Difficulty;
            int tonnageLimit = 0;

            if (!TonnageLimitByMissionDifficulty.GetTonnageLimit(difficulty, out tonnageLimit))
            {
                return;
            }

            float          lanceTonnage = 0;
            List <MechDef> mechs        = TonnageLimitByMissionDifficulty.GetMechDefs(__instance);

            foreach (MechDef mech in mechs)
            {
                lanceTonnage += mech.Chassis.Tonnage;
            }

            if (lanceTonnage <= tonnageLimit)
            {
                return;
            }

            __instance.lanceValid = false;

            String errorString = String.Format("Lance exceeds tonnage limit by {0} tons\n", lanceTonnage - tonnageLimit);

            LanceHeaderWidget headerWidget = (LanceHeaderWidget)ReflectionHelper.GetPrivateField(__instance, "headerWidget");

            headerWidget.RefreshLanceInfo(__instance.lanceValid, errorString, mechs);

            ReflectionHelper.SetPrivateField(__instance, "lanceErrorText", errorString);

            __result = __instance.lanceValid;
        }
예제 #6
0
        static void Postfix(LanceConfiguratorPanel __instance)
        {
            Main.LogDebug("[LanceConfiguratorPanelContinueConfirmClickedPatch] Patching");
            GameObject lanceHeaderWidgetGo = GameObject.Find("uixPrfPanel_LC_LanceConfigTopBar-Widget-MANAGED");

            if (lanceHeaderWidgetGo != null)
            {
                LanceHeaderWidget           lanceHeaderWidget = lanceHeaderWidgetGo.GetComponent <LanceHeaderWidget>();
                SGDifficultyIndicatorWidget lanceRatingWidget = (SGDifficultyIndicatorWidget)AccessTools.Field(typeof(LanceHeaderWidget), "lanceRatingWidget").GetValue(lanceHeaderWidget);

                MissionControl.Instance.PlayerLanceDropDifficultyValue = lanceRatingWidget.Difficulty;
                MissionControl.Instance.PlayerLanceDropSkullRating     = lanceRatingWidget.Difficulty / 2f;
                CalculateTonnage();
            }
            else
            {
                Main.Logger.LogError("[LanceConfiguratorPanelContinueConfirmClickedPatch] Unable to get object 'uixPrfPanel_LC_LanceConfigTopBar-Widget-MANAGED'. Name must have changed in an BT update.");
            }
        }
예제 #7
0
 static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs)
 {
     try {
         LanceConfiguratorPanel LC = (LanceConfiguratorPanel)AccessTools.Field(typeof(LanceHeaderWidget), "LC").GetValue(__instance);
         if (LC.IsSimGame)
         {
             Settings settings = Helper.LoadSettings();
             SGDifficultyIndicatorWidget lanceRatingWidget = (SGDifficultyIndicatorWidget)AccessTools.Field(typeof(LanceHeaderWidget), "lanceRatingWidget").GetValue(__instance);
             TextMeshProUGUI             label             = lanceRatingWidget.transform.parent.GetComponentsInChildren <TextMeshProUGUI>().FirstOrDefault(t => t.transform.name == "label-lanceRating");
             label.text = "Lance Rating";
             int totalMechWorth = 0;
             foreach (MechDef mech in mechs)
             {
                 totalMechWorth += Mathf.RoundToInt(Helper.CalculateCBillValue(mech));
             }
             lanceRatingWidget.SetDifficulty(Mathf.Min(10, totalMechWorth / settings.CostPerHalfSkull));
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
     }
 }
예제 #8
0
        static void Postfix(LanceHeaderWidget __instance, List <MechDef> mechs)
        {
            if (UnityGameInstance.BattleTechGame.Simulation != null)
            {
                if ((DropCostPerMech.Settings.BEXCE && UnityGameInstance.BattleTechGame.Simulation.Constants.Story.MaximumDebt != 42))
                {
                    return;
                }

                try
                {
                    var    settings        = DropCostPerMech.Settings;
                    string freeTonnageText = "";

                    LanceConfiguratorPanel LC = (LanceConfiguratorPanel)ReflectionHelper.GetPrivateField(__instance, "LC");
                    if (LC.IsSimGame)
                    {
                        int   lanceTonnage = 0;
                        float dropCost     = 0f;
                        if (settings.CostByTons)
                        {
                            foreach (MechDef def in mechs)
                            {
                                dropCost     += (def.Chassis.Tonnage * settings.cbillsPerTon);
                                lanceTonnage += (int)def.Chassis.Tonnage;
                            }
                        }
                        else
                        {
                            foreach (MechDef def in mechs)
                            {
                                dropCost     += (Helper.CalculateCBillValue(def) * settings.percentageOfMechCost);
                                lanceTonnage += (int)def.Chassis.Tonnage;
                            }
                        }
                        if (settings.CostByTons && settings.someFreeTonnage && !settings.NewAlgorithm)
                        {
                            freeTonnageText = $"({settings.freeTonnageAmount} TONS FREE)";
                            dropCost        = Math.Max(0f, (lanceTonnage - settings.freeTonnageAmount) * settings.cbillsPerTon);
                        }
                        else if (settings.CostByTons && settings.someFreeTonnage && settings.NewAlgorithm)
                        {
                            freeTonnageText = $"({settings.freeTonnageAmount} TONS FREE)";
                            if (lanceTonnage >= settings.freeTonnageAmount)
                            {
                                dropCost = (lanceTonnage - settings.freeTonnageAmount) * (lanceTonnage - settings.freeTonnageAmount) * settings.cbillsPerTon / settings.freeTonnageAmount;
                            }
                            else
                            {
                                dropCost = 0;
                            }
                        }

                        string formattedDropCost = string.Format("{0:n0}", dropCost);
                        Fields.DropCost          = dropCost;
                        Fields.LanceTonnage      = lanceTonnage;
                        Fields.FormattedDropCost = formattedDropCost;
                        Fields.FreeTonnageText   = freeTonnageText;

                        TextMeshProUGUI simLanceTonnageText = (TextMeshProUGUI)ReflectionHelper.GetPrivateField(__instance, "simLanceTonnageText");
                        // longer strings interfere with messages about incorrect lance configurations
                        simLanceTonnageText.text = $"DROP COST: \n¢{Fields.FormattedDropCost}\nWEIGHT:\n{Fields.LanceTonnage} TONS";
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                }
            }
        }