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); } }
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; }
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."); } }
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); } }
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); } } }