public static void Postfix(SGCaptainsQuartersStatusScreen __instance) { var moraleFields = Traverse.Create(__instance).Field("ExpenditureLvlBtnMoraleFields").GetValue <List <TextMeshProUGUI> >(); var SimGameTrav = Traverse.Create(__instance).Field("simState").GetValue <SimGameState>(); EconomyScale expenditureLevel = SimGameTrav.ExpenditureLevel; int num3 = 0; foreach (KeyValuePair <EconomyScale, int> keyValuePair in SimGameTrav.ExpenditureMoraleValue) { SimGameTrav.SetExpenditureLevel(keyValuePair.Key, false); int TechNum = num3 - 2; if (TechNum <= 0) { string ChangeComb = keyValuePair.Value.ToString() + ", " + (2 * TechNum).ToString() + " Skills"; moraleFields[num3].text = ChangeComb; } else { string ChangeComb = "+" + keyValuePair.Value.ToString() + ", +" + TechNum.ToString() + " Skills"; moraleFields[num3].text = ChangeComb; } num3++; } SimGameTrav.SetExpenditureLevel(expenditureLevel, false); }
public static void Postfix(SimGameState __instance, ref int __result, EconomyScale expenditureLevel, bool proRate) { Mod.Log.Info($"SGS:GE entered with {__result}"); // Subtract the base cost of mechs float expenditureCostModifier = __instance.GetExpenditureCostModifier(expenditureLevel); int defaultMechCosts = 0; foreach (MechDef mechDef in __instance.ActiveMechs.Values) { defaultMechCosts += Mathf.RoundToInt(expenditureCostModifier * (float)__instance.Constants.Finances.MechCostPerQuarter); } // Add the new costs int activeMechCosts = Helper.CalculateTotalForUpkeep(__instance); double gearInventorySize = Helper.GetGearInventorySize(__instance); int gearStorageCosts = Helper.CalculateTotalForGearCargo(__instance, gearInventorySize); double mechPartsTonnage = Helper.CalculateTonnageForAllMechParts(__instance); int mechPartsStorageCost = Helper.CalculateTotalForMechPartsCargo(__instance, mechPartsTonnage); int total = __result - defaultMechCosts + activeMechCosts + gearStorageCosts + mechPartsStorageCost; Mod.Log.Info($"SGS:GE - total:{total} ==> result:{__result} - defaultMechCosts:{defaultMechCosts} = {__result - defaultMechCosts} + activeMechs:{activeMechCosts} + gearStorage:{gearStorageCosts} + partsStorage:{mechPartsStorageCost}"); __result = total; }
public static void Postfix(SimGameState __instance, ref int __result, EconomyScale expenditureLevel, bool proRate) { Mod.Log.Trace($"SGS:GE entered with {__result}"); Statistic aerospaceAssets = __instance.CompanyStats.GetStatistic("AerospaceAssets"); int aerospaceSupport = aerospaceAssets != null?aerospaceAssets.Value <int>() : 0; switch (aerospaceSupport) { case 3: __result = __result + Mod.Config.HeavyWingMonthlyCost; Mod.Log.Trace($"Charging player for a heavy wing, result = {__result}."); break; case 2: __result = __result + Mod.Config.MediumWingMonthlyCost; Mod.Log.Trace($"Charging player for a medium wing, result = {__result}."); break; case 1: __result = __result + Mod.Config.LightWingMonthlyCost; Mod.Log.Trace($"Charging player for a light wing, result = {__result}."); break; default: Mod.Log.Trace($"Charging player for no aerospace, result = {__result}"); break; } }
public static bool Prefix(SimGameState __instance, EconomyScale expenditureLevel, bool proRate, int ___ProRateRefund, ref int __result) { FinancesConstantsDef finances = __instance.Constants.Finances; int baseMaintenanceCost = __instance.GetShipBaseMaintenanceCost(); for (int index = 0; index < __instance.ShipUpgrades.Count; ++index) { float pilotQurikModifier = PilotQuirkManager.Instance.getArgoUpgradeCostModifier(__instance.PilotRoster.ToList(), __instance.ShipUpgrades[index].Description.Id, true); float baseCost = (float)__instance.ShipUpgrades[index].AdditionalCost * pilotQurikModifier; baseMaintenanceCost += Mathf.CeilToInt(baseCost * __instance.Constants.CareerMode.ArgoMaintenanceMultiplier); } foreach (MechDef mechDef in __instance.ActiveMechs.Values) { baseMaintenanceCost += finances.MechCostPerQuarter; } for (int index = 0; index < __instance.PilotRoster.Count; ++index) { baseMaintenanceCost += __instance.GetMechWarriorValue(__instance.PilotRoster[index].pilotDef); } float expenditureCostModifier = __instance.GetExpenditureCostModifier(expenditureLevel); __result = Mathf.CeilToInt((float)(baseMaintenanceCost - (proRate ? ___ProRateRefund : 0)) * expenditureCostModifier); return(false); }
public static void Postfix(SimGameState __instance, ref int __result, EconomyScale expenditureLevel, bool proRate) { Mod.Log.Trace?.Write($"SGS:GE entered with {__result}"); // Evaluate old versus new cost int vanillaCosts = 0; int newCosts = 0; for (int i = 0; i < __instance.PilotRoster.Count; i++) { PilotDef def = __instance.PilotRoster[i].pilotDef; vanillaCosts += __instance.GetMechWarriorValue(def); CrewDetails details = ModState.GetCrewDetails(def); newCosts += details.AdjustedSalary; } // Multiply old costs by expenditure. New has that built in. Then subtract them from the running total float expenditureCostModifier = __instance.GetExpenditureCostModifier(expenditureLevel); int vanillaTotal = Mathf.CeilToInt((float)vanillaCosts * expenditureCostModifier); Mod.Log.Trace?.Write($"Removing {vanillaCosts} costs x {expenditureCostModifier} expenditureMulti " + $"= {vanillaTotal} total vanilla costs."); __result -= vanillaTotal; // Add the new costs __result += newCosts; }
public static int Postfix(int num, SimGameState __instance, EconomyScale expenditureLevel, bool proRate = false) { //int ctdebt = __instance.CompanyStats.GetValue<int>("Item.HeatSinkDef.Gear_HeatSink_Generic_Standard"); int ctdebt = __instance.CompanyStats.GetValue <int>(ModInit.Settings.LoanItemDefTypeAndID.ToString()); __instance.CompanyStats.Set <int>(ModInit.Settings.FreeMoneyItemDefTypeAndID.ToString(), 0); int debt = ctdebt * ModInit.Settings.LoanInterestMultiplier; ModState.InterestFromLoans = debt; ModState.MonthlyExpenditures = debt + num; return(debt + num); }
static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, SimGameState ___simState, Transform ___SectionOneExpensesList, LocalizableText ___SectionOneExpensesField) { try { List <KeyValuePair <string, int> > keyValuePairList = new List <KeyValuePair <string, int> >(); float expenditureCostModifier = ___simState.GetExpenditureCostModifier(expenditureLevel); string sectionOneExpenses = ___SectionOneExpensesField.OriginalText; sectionOneExpenses = sectionOneExpenses.Replace("¢", "").Replace(",", ""); int ongoingUpgradeCosts = int.Parse(sectionOneExpenses); List <string> mechNames = new List <string>(); foreach (MechDef mechDef in ___simState.ActiveMechs.Values) { string key = mechDef.Name; mechNames.Add(key); int value = Mathf.RoundToInt(expenditureCostModifier * (float)___simState.Constants.Finances.MechCostPerQuarter); ongoingUpgradeCosts -= value; if (settings.CostByTons) { value = Mathf.RoundToInt(expenditureCostModifier * (float)mechDef.Chassis.Tonnage * settings.cbillsPerTon); if (settings.TonsAdditive) { value += Mathf.RoundToInt(expenditureCostModifier * Helper.CalculateCBillValue(mechDef) * settings.PercentageOfMechCost); } } else { value = Mathf.RoundToInt(expenditureCostModifier * Helper.CalculateCBillValue(mechDef) * settings.PercentageOfMechCost); } ongoingUpgradeCosts += value; keyValuePairList.Add(new KeyValuePair <string, int>(key, value)); } FilterListItems(___SectionOneExpensesList, ___simState, mechNames, keyValuePairList); keyValuePairList.Sort((Comparison <KeyValuePair <string, int> >)((a, b) => b.Value.CompareTo(a.Value))); keyValuePairList.ForEach((Action <KeyValuePair <string, int> >)(entry => { Traverse.Create(__instance).Method("AddListLineItem", new Type[] { typeof(Transform), typeof(string), typeof(string) }).GetValue( new object[] { ___SectionOneExpensesList, entry.Key, SimGameState.GetCBillString(entry.Value) }); })); Traverse.Create(__instance).Method("SetField", new Type[] { typeof(LocalizableText), typeof(string) }).GetValue( new object[] { ___SectionOneExpensesField, SimGameState.GetCBillString(ongoingUpgradeCosts) }); } catch (Exception e) { Helper.Logger.LogError(e); } }
public static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, bool showMoraleChange, Transform ___SectionOneExpensesList, TextMeshProUGUI ___SectionOneExpensesField, SimGameState ___simState) { SimGameState simulation = UnityGameInstance.BattleTechGame.Simulation; bool flag = __instance == null || ___SectionOneExpensesList == null || ___SectionOneExpensesField == null || simulation == null; List <KeyValuePair <string, int> > list = LoanSharks.GetCurrentKeys(___SectionOneExpensesList, ___simState); LoanSharks.ClearListLineItems(___SectionOneExpensesList, ___simState); string name = "Interest From Loans"; int value = ModState.InterestFromLoans; //___simState.CompanyStats.GetValue<int>("Item.HeatSinkDef.Gear_HeatSink_Generic_Standard"); int ongoingUpgradeCosts = 0; list.Add(new KeyValuePair <string, int>(name, value)); list.ForEach(delegate(KeyValuePair <string, int> entry) { ongoingUpgradeCosts += entry.Value; LoanSharks.AddListLineItem(___SectionOneExpensesList, ___simState, entry.Key, SimGameState.GetCBillString(entry.Value)); }); ___SectionOneExpensesField.SetText(SimGameState.GetCBillString(ongoingUpgradeCosts)); }
public static void Postfix(SimGameState __instance, EconomyScale expenditureLevel, ref int __result) { FinancesConstantsDef finances = __instance.Constants.Finances; float expenditureCostModifier = __instance.GetExpenditureCostModifier(expenditureLevel); int baseMaintenanceCost = __result; foreach (MechDef mechDef in __instance.ActiveMechs.Values) { baseMaintenanceCost -= finances.MechCostPerQuarter; if (settings.CostByTons) { baseMaintenanceCost += Mathf.RoundToInt((float)mechDef.Chassis.Tonnage * settings.cbillsPerTon * expenditureCostModifier); if (settings.TonsAdditive) { baseMaintenanceCost += Mathf.RoundToInt(Helper.CalculateCBillValue(mechDef) * settings.PercentageOfMechCost * expenditureCostModifier); } } else { baseMaintenanceCost += Mathf.RoundToInt(Helper.CalculateCBillValue(mechDef) * settings.PercentageOfMechCost * expenditureCostModifier); } } __result = baseMaintenanceCost; }
public static bool Prefix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, bool showMoraleChange, SimGameState ___simState, SGDifficultyIndicatorWidget ___ExpenditureLevelIndicatorWidget, LocalizableText ___ExpenditureLevelField, LocalizableText ___SectionOneExpenseLevel, LocalizableText ___SectionTwoExpenseLevel, SGFinancialForecastWidget ___FinanceWidget, LocalizableText ___MoraleValueField, SGMoraleBar ___MoralBar, Transform ___SectionOneExpensesList, LocalizableText ___SectionOneExpensesField, LocalizableText ___SectionTwoExpensesField, Transform ___SectionTwoExpensesList, LocalizableText ___EndOfQuarterFunds, LocalizableText ___QuarterOperatingExpenses, LocalizableText ___CurrentFunds, List <LocalizableText> ___ExpenditureLvlBtnMoraleFields, List <LocalizableText> ___ExpenditureLvlBtnCostFields) { if (__instance == null || ___simState == null) { return(true); } float expenditureCostModifier = ___simState.GetExpenditureCostModifier(expenditureLevel); Traverse methodSetField = Traverse.Create(__instance) .Method("SetField", new Type[] { typeof(LocalizableText), typeof(string) }); int expLevel = (int)Traverse.Create(__instance) .Method("GetExpendetureLevelIndexNormalized", new object[] { expenditureLevel }).GetValue(); ___ExpenditureLevelIndicatorWidget.SetDifficulty(expLevel * 2); methodSetField.GetValue(new object[] { ___ExpenditureLevelField, string.Format("{0}", (object)expenditureLevel) }); methodSetField.GetValue(new object[] { ___SectionOneExpenseLevel, string.Format("{0}", (object)expenditureLevel) }); methodSetField.GetValue(new object[] { ___SectionTwoExpenseLevel, string.Format("{0}", (object)expenditureLevel) }); ___FinanceWidget.RefreshData(expenditureLevel); int num1 = ___simState.ExpenditureMoraleValue[expenditureLevel]; methodSetField.GetValue(new object[] { ___MoraleValueField, string.Format("{0}{1}", num1 > 0 ? (object)"+" : (object)"", (object)num1) }); if (showMoraleChange) { int morale = ___simState.Morale; ___MoralBar.ShowMoraleChange(morale, morale + num1); } else { ___MoralBar.ShowCurrentMorale(); } Traverse.Create(__instance).Method("ClearListLineItems", new object[] { ___SectionOneExpensesList }).GetValue(); List <KeyValuePair <string, int> > keyValuePairList = new List <KeyValuePair <string, int> >(); int ongoingUpgradeCosts = 0; string key = ___simState.CurDropship == DropshipType.Leopard ? Strings.T("Bank Loan Interest Payment") : Strings.T("Argo Operating Costs"); int num2 = Mathf.RoundToInt(expenditureCostModifier * (float)___simState.GetShipBaseMaintenanceCost()); keyValuePairList.Add(new KeyValuePair <string, int>(key, num2)); foreach (ShipModuleUpgrade shipUpgrade in ___simState.ShipUpgrades) { float pilotQurikModifier = PilotQuirkManager.Instance.getArgoUpgradeCostModifier(___simState.PilotRoster.ToList(), shipUpgrade.Description.Id, true); float baseCost = (float)shipUpgrade.AdditionalCost * pilotQurikModifier; if (___simState.CurDropship == DropshipType.Argo && Mathf.CeilToInt((float)baseCost * ___simState.Constants.CareerMode.ArgoMaintenanceMultiplier) > 0) { string name = shipUpgrade.Description.Name; int num3 = Mathf.RoundToInt(expenditureCostModifier * (float)Mathf.CeilToInt((float)baseCost * ___simState.Constants.CareerMode.ArgoMaintenanceMultiplier)); keyValuePairList.Add(new KeyValuePair <string, int>(name, num3)); } } foreach (MechDef mechDef in ___simState.ActiveMechs.Values) { string name = mechDef.Name; int num3 = Mathf.RoundToInt(expenditureCostModifier * (float)___simState.Constants.Finances.MechCostPerQuarter); keyValuePairList.Add(new KeyValuePair <string, int>(name, num3)); } keyValuePairList.Sort((Comparison <KeyValuePair <string, int> >)((a, b) => b.Value.CompareTo(a.Value))); keyValuePairList.ForEach((Action <KeyValuePair <string, int> >)(entry => { ongoingUpgradeCosts += entry.Value; methodAddLineItem.Invoke(__instance, new object[] { ___SectionOneExpensesList, entry.Key, SimGameState.GetCBillString(entry.Value) }); })); methodSetField.GetValue(new object[] { ___SectionOneExpensesField, SimGameState.GetCBillString(ongoingUpgradeCosts) }); keyValuePairList.Clear(); Traverse.Create(__instance).Method("ClearListLineItems", new object[] { ___SectionTwoExpensesList }).GetValue(); int ongoingMechWariorCosts = 0; foreach (Pilot pilot in ___simState.PilotRoster) { string displayName = pilot.pilotDef.Description.DisplayName; int num3 = Mathf.CeilToInt(expenditureCostModifier * (float)___simState.GetMechWarriorValue(pilot.pilotDef)); keyValuePairList.Add(new KeyValuePair <string, int>(displayName, num3)); } keyValuePairList.Sort((Comparison <KeyValuePair <string, int> >)((a, b) => b.Value.CompareTo(a.Value))); keyValuePairList.ForEach((Action <KeyValuePair <string, int> >)(entry => { ongoingMechWariorCosts += entry.Value; methodAddLineItem.Invoke(__instance, new object[] { ___SectionTwoExpensesList, entry.Key, SimGameState.GetCBillString(entry.Value) }); })); methodSetField.GetValue(new object[] { ___SectionTwoExpensesField, SimGameState.GetCBillString(ongoingMechWariorCosts) }); methodSetField.GetValue(new object[] { ___EndOfQuarterFunds, SimGameState.GetCBillString(___simState.Funds + ___simState.GetExpenditures(false)) }); methodSetField.GetValue(new object[] { ___QuarterOperatingExpenses, SimGameState.GetCBillString(___simState.GetExpenditures(false)) }); methodSetField.GetValue(new object[] { ___CurrentFunds, SimGameState.GetCBillString(___simState.Funds) }); int index = 0; foreach (KeyValuePair <EconomyScale, int> keyValuePair in ___simState.ExpenditureMoraleValue) { ___ExpenditureLvlBtnMoraleFields[index].SetText(string.Format("{0}", (object)keyValuePair.Value), (object[])Array.Empty <object>()); ___ExpenditureLvlBtnCostFields[index].SetText(SimGameState.GetCBillString(___simState.GetExpenditures(keyValuePair.Key, false)), (object[])Array.Empty <object>()); ++index; } return(false); }
public static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, bool showMoraleChange, Transform ___SectionOneExpensesList, TextMeshProUGUI ___SectionOneExpensesField, SimGameState ___simState) { SimGameState simGameState = UnityGameInstance.BattleTechGame.Simulation; if (__instance == null || ___SectionOneExpensesList == null || ___SectionOneExpensesField == null || simGameState == null) { Mod.Log.Info?.Write($"SGCQSS:RD - skipping"); return; } // TODO: Add this to mech parts maybe? //float expenditureCostModifier = simGameState.GetExpenditureCostModifier(expenditureLevel); Mod.Log.Info?.Write($"SGCQSS:RD - entered. Parsing current keys."); List <KeyValuePair <string, int> > currentKeys = GetCurrentKeys(___SectionOneExpensesList, ___simState); // Extract the active mechs from the list, then re-add the updated price List <KeyValuePair <string, int> > filteredKeys = Helper.FilterActiveMechs(currentKeys, ___simState); List <KeyValuePair <string, int> > activeMechs = Helper.GetUpkeepLabels(___simState); filteredKeys.AddRange(activeMechs); // Add the new costs int activeMechCosts = Helper.CalculateTotalForUpkeep(___simState); double gearInventorySize = Helper.GetGearInventorySize(___simState); int gearStorageCost = Helper.CalculateTotalForGearCargo(___simState, gearInventorySize); string gearLabel = new Text(Mod.LocalizedText.Labels[ModText.LT_Label_Cargo_Gear], new object[] { gearInventorySize }).ToString(); filteredKeys.Add(new KeyValuePair <string, int>(gearLabel, gearStorageCost)); double mechPartsTonnage = Helper.CalculateTonnageForAllMechParts(___simState); int mechPartsStorageCost = Helper.CalculateTotalForMechPartsCargo(___simState, mechPartsTonnage); string mechPartsLabel = new Text(Mod.LocalizedText.Labels[ModText.LT_Label_Cargo_Mech_Parts], new object[] { mechPartsTonnage }).ToString(); filteredKeys.Add(new KeyValuePair <string, int>(mechPartsLabel, mechPartsStorageCost)); filteredKeys.Sort(new ExpensesSorter()); Mod.Log.Info?.Write($"SGCQSS:RD - Clearing items"); ClearListLineItems(___SectionOneExpensesList, ___simState); Mod.Log.Info?.Write($"SGCQSS:RD - Adding listLineItems"); int totalCost = 0; try { foreach (KeyValuePair <string, int> kvp in filteredKeys) { Mod.Log.Info?.Write($"SGCQSS:RD - Adding key: '{kvp.Key}' value: '{kvp.Value}'"); totalCost += kvp.Value; AddListLineItem(___SectionOneExpensesList, ___simState, kvp.Key, SimGameState.GetCBillString(kvp.Value)); } } catch (Exception e) { Mod.Log.Info?.Write($"SGCQSS:RD - failed to add lineItemParts due to: {e.Message}"); } // Update summary costs int newCosts = totalCost; string newCostsS = SimGameState.GetCBillString(newCosts); Mod.Log.Debug?.Write($"SGCQSS:RD - total:{newCosts} = activeMechs:{activeMechCosts} + gearStorage:{gearStorageCost} + partsStorage:{mechPartsStorageCost}"); try { ___SectionOneExpensesField.SetText(SimGameState.GetCBillString(newCosts)); Mod.Log.Debug?.Write($"SGCQSS:RD - updated "); } catch (Exception e) { Mod.Log.Info?.Write($"SGCQSS:RD - failed to update summary costs section due to: {e.Message}"); } }
public static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel) { var settings = Pre_Control.Settings; var moraleFields = Traverse.Create(__instance).Field("ExpenditureLvlBtnMoraleFields").GetValue <List <LocalizableText> >(); var SimGameTrav = Traverse.Create(__instance).Field("simState").GetValue <SimGameState>(); var sim = UnityGameInstance.BattleTechGame.Simulation; int num3 = 0; if (settings.AdjustTechs) { string ChangeComb = ""; foreach (KeyValuePair <EconomyScale, int> keyValuePair in SimGameTrav.ExpenditureMoraleValue) { SimGameTrav.SetExpenditureLevel(keyValuePair.Key, false); int TechNum = num3 - 2; if (TechNum == -2) { ChangeComb = keyValuePair.Value.ToString() + ", " + (-4).ToString() + " Techs"; moraleFields[num3].text = ChangeComb; } else if (TechNum <= 0 && TechNum != -2) { ChangeComb = keyValuePair.Value.ToString() + ", " + (2 * TechNum).ToString() + " Techs"; moraleFields[num3].text = ChangeComb; } else { ChangeComb = "+" + keyValuePair.Value.ToString() + ", +" + TechNum.ToString() + " Techs"; moraleFields[num3].text = ChangeComb; } num3++; } SimGameTrav.SetExpenditureLevel(expenditureLevel, false); int ELMV = SimGameTrav.ExpenditureMoraleValue[SimGameTrav.ExpenditureLevel]; int skillnum = 0; if (ELMV == sim.Constants.Story.SpartanMoraleModifier) { skillnum = -4; } if (ELMV == sim.Constants.Story.RestrictedMoraleModifier) { skillnum = -2; } if (ELMV == sim.Constants.Story.NormalMoraleModifier) { skillnum = 0; } if (ELMV == sim.Constants.Story.GenerousMoraleModifier) { skillnum = 1; } if (ELMV == sim.Constants.Story.ExtravagantMoraleModifier) { skillnum = 2; } string MString = ELMV.ToString(); if (ELMV > 0) { MString = "+" + MString; } string SString = skillnum.ToString() + " Techs"; if (skillnum > 0) { SString = "+" + SString; } string ModField = MString + ", " + SString; var instance = Traverse.Create(__instance); var moraleFieldValue = instance.Field("MoraleValueField").GetValue <TextMeshProUGUI>(); instance.Method("SetField", new Type[] { typeof(LocalizableText), typeof(string) }, new object[] { moraleFieldValue, ModField }).GetValue(); } }
public static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, bool showMoraleChange, Transform ___SectionTwoExpensesList, TextMeshProUGUI ___SectionTwoExpensesField, SimGameState ___simState) { // Redo all the mechwarrior cost float expenditureCostModifier = ___simState.GetExpenditureCostModifier(expenditureLevel); ClearListLineItems(___SectionTwoExpensesList, ___simState); int ongoingMechWariorCosts = 0; //int oldCosts = 0; List <KeyValuePair <string, int> > list = new List <KeyValuePair <string, int> >(); foreach (Pilot item in ___simState.PilotRoster) { string key = item.pilotDef.Description.DisplayName; CrewDetails details = ModState.GetCrewDetails(item.pilotDef); //oldCosts += Mathf.CeilToInt(expenditureCostModifier * (float)___simState.GetMechWarriorValue(item.pilotDef)); Mod.Log.Debug?.Write($" Pilot: {item.Name} has salary: {details.AdjustedSalary}"); list.Add(new KeyValuePair <string, int>(key, details.AdjustedSalary)); } // Sort by most expensive list.Sort((KeyValuePair <string, int> a, KeyValuePair <string, int> b) => b.Value.CompareTo(a.Value)); // Create a new line item for each list.ForEach(delegate(KeyValuePair <string, int> entry) { ongoingMechWariorCosts += entry.Value; AddListLineItem(___SectionTwoExpensesList, ___simState, entry.Key, SimGameState.GetCBillString(entry.Value)); }); ___SectionTwoExpensesField.SetText(SimGameState.GetCBillString(ongoingMechWariorCosts)); // Rectify the salary field //SimGameState simGameState = UnityGameInstance.BattleTechGame.Simulation; //if (__instance == null || ___SectionOneExpensesList == null || ___SectionOneExpensesField == null || simGameState == null) //{ // Mod.Log.Debug?.Write($"SGCQSS:RD - skipping"); // return; //} //// TODO: Add this to mech parts maybe? ////float expenditureCostModifier = simGameState.GetExpenditureCostModifier(expenditureLevel); //// Determine the level of aerospace support ////Statistic aerospaceAssets = simGameState.CompanyStats.GetStatistic("AerospaceAssets"); ////int aerospaceSupport = aerospaceAssets != null ? aerospaceAssets.Value<int>() : 0; //Mod.Log.Info?.Write($"SGCQSS:RD - entered. Parsing current keys."); //List<KeyValuePair<string, int>> currentKeys = GetCurrentKeys(___SectionOneExpensesList, ___simState); //// Extract the active mechs from the list, then re-add the updated price //List<KeyValuePair<string, int>> filteredKeys = FilterActiveMechs(currentKeys, ___simState); //List<KeyValuePair<string, int>> activeMechs = GetUpkeepLabels(___simState); //filteredKeys.AddRange(activeMechs); //// Add the new costs //int newActiveMechCosts = MonthlyCostCalcs.SumMonthlyMechCosts(___simState); //filteredKeys.Sort(new ExpensesSorter()); //Mod.Log.Info?.Write($"SGCQSS:RD - Clearing items"); //ClearListLineItems(___SectionOneExpensesList, ___simState); //Mod.Log.Info?.Write($"SGCQSS:RD - Adding listLineItems"); //int totalCost = 0; //try //{ // foreach (KeyValuePair<string, int> kvp in filteredKeys) // { // Mod.Log.Info?.Write($"SGCQSS:RD - Adding key:{kvp.Key} value:{kvp.Value}"); // totalCost += kvp.Value; // AddListLineItem(___SectionOneExpensesList, ___simState, kvp.Key, SimGameState.GetCBillString(kvp.Value)); // } //} //catch (Exception e) //{ // Mod.Log.Info?.Write($"SGCQSS:RD - failed to add lineItemParts due to: {e.Message}"); //} //// Update summary costs //int newCosts = totalCost; //string newCostsS = SimGameState.GetCBillString(newCosts); //Mod.Log.Debug?.Write($"SGCQSS:RD - total:{newCosts} = activeMechs:{newActiveMechCosts}"); //try //{ // ___SectionOneExpensesField.SetText(SimGameState.GetCBillString(newCosts)); // Mod.Log.Debug?.Write($"SGCQSS:RD - updated "); //} //catch (Exception e) //{ // Mod.Log.Info?.Write($"SGCQSS:RD - failed to update summary costs section due to: {e.Message}"); //} }
public static void Postfix(SGCaptainsQuartersStatusScreen __instance, EconomyScale expenditureLevel, bool showMoraleChange, Transform ___SectionOneExpensesList, TextMeshProUGUI ___SectionOneExpensesField, SimGameState ___simState) { SimGameState simGameState = UnityGameInstance.BattleTechGame.Simulation; if (__instance == null || ___SectionOneExpensesList == null || ___SectionOneExpensesField == null || simGameState == null) { Mod.Log.Debug($"SGCQSS:RD - skipping"); return; } // TODO: Add this to mech parts maybe? //float expenditureCostModifier = simGameState.GetExpenditureCostModifier(expenditureLevel); // Determine the level of aerospace support Statistic aerospaceAssets = simGameState.CompanyStats.GetStatistic("AerospaceAssets"); int aerospaceSupport = aerospaceAssets != null?aerospaceAssets.Value <int>() : 0; if (aerospaceSupport == 0) { Mod.Log.Debug($"SGCQSS:RD - no aerospace support configured, skipping."); return; } Mod.Log.Info($"SGCQSS:RD - entered. Parsing current keys."); List <KeyValuePair <string, int> > currentKeys = GetCurrentKeys(___SectionOneExpensesList, ___simState); int aerospaceCost = 0; switch (aerospaceSupport) { case 3: aerospaceCost = Mod.Config.HeavyWingMonthlyCost; currentKeys.Add(new KeyValuePair <string, int>($"Aerospace: Heavy Wing", Mod.Config.HeavyWingMonthlyCost)); break; case 2: aerospaceCost = Mod.Config.MediumWingMonthlyCost; currentKeys.Add(new KeyValuePair <string, int>($"Aerospace: Medium Wing", Mod.Config.MediumWingMonthlyCost)); break; case 1: aerospaceCost = Mod.Config.LightWingMonthlyCost; currentKeys.Add(new KeyValuePair <string, int>($"Aerospace: Light Wing", Mod.Config.LightWingMonthlyCost)); break; } currentKeys.Sort(new ExpensesSorter()); Mod.Log.Info($"SGCQSS:RD - Clearing items"); ClearListLineItems(___SectionOneExpensesList, ___simState); Mod.Log.Info($"SGCQSS:RD - Adding listLineItems"); int totalCost = 0; try { foreach (KeyValuePair <string, int> kvp in currentKeys) { Mod.Log.Info($"SGCQSS:RD - Adding key:{kvp.Key} value:{kvp.Value}"); totalCost += kvp.Value; AddListLineItem(___SectionOneExpensesList, ___simState, kvp.Key, SimGameState.GetCBillString(kvp.Value)); } } catch (Exception e) { Mod.Log.Info($"SGCQSS:RD - failed to add lineItemParts due to: {e.Message}"); } // Update summary costs int newCosts = totalCost; string newCostsS = SimGameState.GetCBillString(newCosts); Mod.Log.Debug($"SGCQSS:RD - total:{newCosts}"); try { ___SectionOneExpensesField.SetText(SimGameState.GetCBillString(newCosts)); Mod.Log.Debug($"SGCQSS:RD - updated "); } catch (Exception e) { Mod.Log.Info($"SGCQSS:RD - failed to update summary costs section due to: {e.Message}"); } }