static void Postfix(BattleTech.Building __instance, ObjectiveGameLogic objective) { if (!ModState.ScaledObjectiveBuildings.Contains(__instance.DistinctId())) { __instance.ScaleHealth(); ModState.ScaledObjectiveBuildings.Add(__instance.DistinctId()); } else { Mod.Log.Info?.Write($" -- building: {__instance.DistinctId()} was already scaled, skipping"); } }
public static void ScaleHealth(this BattleTech.Building building) { Mod.Log.Info?.Write($"Scaling health for building: {building.DistinctId()}" + $" => currentStructure: {building.CurrentStructure} startingStructure: {building.StartingStructure} ratio: {building.HealthAsRatio}"); float adjustedStruct = (float)Math.Floor((building.CurrentStructure * ModState.ActiveContractBuildingScaling.Multi) + ModState.ActiveContractBuildingScaling.Mod); Mod.Log.Info?.Write($" -- adjustedStructure: {adjustedStruct} = ( currentStruct: {building.CurrentStructure} " + $"x scaleMulti: {ModState.ActiveContractBuildingScaling.Multi} ) + scaleMod: {ModState.ActiveContractBuildingScaling.Mod}"); // Update Structure stat and StartingStructure value building.StatCollection.ModifyStat("IRTweaks", -1, ModStats.HBS_Building_Structure, StatCollection.StatOperation.Set, adjustedStruct); Traverse startingStructT = Traverse.Create(building).Property("StartingStructure"); startingStructT.SetValue(adjustedStruct); // Update the destructable group if (building.DestructibleObjectGroup != null) { building.DestructibleObjectGroup.health = adjustedStruct; building.DestructibleObjectGroup.fullHealth = adjustedStruct; Mod.Log.Debug?.Write($" -- new stats for destructibleObjectGroup => health: {building.DestructibleObjectGroup.health} fullHealth: {building.DestructibleObjectGroup.fullHealth}"); } }