using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CSync.Extensions;
using CSync.Lib;
using GameNetcodeStuff;
using HarmonyLib;
using LategameCompanyCruiserUpgrades.Misc;
using LategameCompanyCruiserUpgrades.NetcodePatcher;
using LategameCompanyCruiserUpgrades.Patches;
using LategameCompanyCruiserUpgrades.Upgrades.TierUpgrades;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using MoreShipUpgrades.Configuration.Abstractions.TIerUpgrades;
using MoreShipUpgrades.Configuration.Interfaces;
using MoreShipUpgrades.Configuration.Interfaces.TierUpgrades;
using MoreShipUpgrades.Managers;
using MoreShipUpgrades.Misc.Upgrades;
using MoreShipUpgrades.Misc.Util;
using MoreShipUpgrades.UI.TerminalNodes;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
static <Module>()
{
}
}
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace LategameCompanyCruiserUpgrades
{
[BepInPlugin("com.github.WhiteSpike.LategameCompanyCruiserUpgrades", "Lategame Company Cruiser Upgrades", "1.1.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Plugin : BaseUnityPlugin
{
internal static readonly Harmony harmony = new Harmony("com.github.WhiteSpike.LategameCompanyCruiserUpgrades");
internal static readonly ManualLogSource mls = Logger.CreateLogSource("Lategame Company Cruiser Upgrades");
internal static readonly Dictionary<string, GameObject> networkPrefabs = new Dictionary<string, GameObject>();
public static PluginConfig Config;
private void Awake()
{
Config = new PluginConfig(((BaseUnityPlugin)this).Config);
IEnumerable<Type> types;
try
{
types = Assembly.GetExecutingAssembly().GetTypes();
}
catch (ReflectionTypeLoadException ex)
{
types = ex.Types.Where((Type t) => t != null);
}
foreach (Type item in types)
{
MethodInfo[] methods = item.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo[] array = methods;
foreach (MethodInfo methodInfo in array)
{
object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
if (customAttributes.Length != 0)
{
methodInfo.Invoke(null, null);
}
}
}
SetupPerks(ref types);
harmony.PatchAll(typeof(PlayerControllerBPatcher));
mls.LogInfo((object)"Player controllers have been patched");
harmony.PatchAll(typeof(VehicleControllerPatcher));
mls.LogInfo((object)"Vehicles have been patched");
mls.LogInfo((object)"Lategame Company Cruiser Upgrades 1.1.3 has been loaded successfully.");
}
private void SetupPerks(ref IEnumerable<Type> types)
{
foreach (Type type in types)
{
if (type.IsSubclassOf(typeof(BaseUpgrade)))
{
UpgradeBus.Instance.upgradeTypes.Add(type);
MethodInfo method = type.GetMethod("RegisterUpgrade", BindingFlags.Static | BindingFlags.Public);
method.Invoke(null, null);
}
}
mls.LogInfo((object)"Upgrades have been setup");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "LategameCompanyCruiserUpgrades";
public const string PLUGIN_NAME = "MoreShipUpgrades";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace LategameCompanyCruiserUpgrades.Util
{
internal static class Constants
{
internal static readonly string BRAKE_FLUID_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Brake Fluid");
internal static readonly string TURBO_TANK_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Turbo Tank");
internal static readonly string IGNITION_COIL_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Ignition Coil");
internal static readonly string FLUFFY_SEATS_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Fluffy Seats");
internal static readonly string IMPROVED_STEERING_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Improved Steering");
internal static readonly string SUPERCHARGED_PISTONS_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Supercharged Pistons");
internal static readonly string RAPID_MOTORS_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Rapid Motors");
internal static readonly string VEHICLE_PLATING_OVERRIDE_NAME_KEY = string.Format("Alternative name for {0} upgrade", "Vehicle Plating");
internal const string BRAKE_FLUID_ENABLED_KEY = "Enable Brake Fluid Upgrade";
internal const bool BRAKE_FLUID_ENABLED_DEFAULT = true;
internal const string BRAKE_FLUID_ENABLED_DESCRIPTION = "Tier upgrade which increases the braking capability of the Company Cruiser vehicle.";
internal const string BRAKE_FLUID_PRICE_KEY = "Price of Brake Fluid Upgrade";
internal const int BRAKE_FLUID_PRICE_DEFAULT = 100;
internal const string BRAKE_FLUID_CAPACITY_INITIAL_INCREASE_KEY = "Initial Break Power Increase";
internal const int BRAKE_FLUID_CAPACITY_INITIAL_INCREASE_DEFAULT = 25;
internal const string BRAKE_FLUID_CAPACITY_INITIAL_INCREASE_DESCRIPTION = "Percentage of break power increased when first purchasing the upgrade on the Company Cruiser Vehicle";
internal const string BRAKE_FLUID_CAPACITY_INCREMENTAL_INCREASE_KEY = "Incremental Break Power Increase";
internal const int BRAKE_FLUID_CAPACITY_INCREMENTAL_INCREASE_DEFAULT = 25;
internal const string BRAKE_FLUID_CAPACITY_INCREMENTAL_INCREASE_DESCRIPTION = "Percentage of break power increased when purchasing further levels of the upgrade on the Company Cruiser Vehicle";
internal const string TURBO_TANK_ENABLED_KEY = "Enable Turbo Tank Upgrade";
internal const bool TURBO_TANK_ENABLED_DEFAULT = true;
internal const string TURBO_TANK_ENABLED_DESCRIPTION = "Tier upgrade which increases the maximum capacity of Company Cruiser Vehicle's turbo";
internal const string TURBO_TANK_PRICE_KEY = "Price of Turbo Tank Upgrade";
internal const int TURBO_TANK_PRICE_DEFAULT = 200;
internal const string TURBO_TANK_CAPACITY_INITIAL_INCREASE_KEY = "Initial Turbo Capacity Increase";
internal const int TURBO_TANK_CAPACITY_INITIAL_INCREASE_DEFAULT = 2;
internal const string TURBO_TANK_CAPACITY_INITIAL_INCREASE_DESCRIPTION = "Amount of turbo capacity increased when first purchasing the upgrade on the Company Cruiser Vehicle";
internal const string TURBO_TANK_CAPACITY_INCREMENTAL_INCREASE_KEY = "Incremental Turbo Capacity Increase";
internal const int TURBO_TANK_CAPACITY_INCREMENTAL_INCREASE_DEFAULT = 1;
internal const string TURBO_TANK_CAPACITY_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of turbo capacity increased when purchasing further levels of the upgrade on the Company Cruiser Vehicle";
internal const string IGNITION_COIL_ENABLED_KEY = "Enable Ignition Coil Upgrade";
internal const bool IGNITION_COIL_ENABLED_DEFAULT = true;
internal const string IGNITION_COIL_ENABLED_DESCRIPTION = "Tier upgrade which increases the chance of ignition to turn on the Company Cruiser Vehicle.";
internal const string IGNITION_COIL_PRICE_KEY = "Price of Ignition Coil Upgrade";
internal const int IGNITION_COIL_PRICE_DEFAULT = 50;
internal const string IGNITION_COIL_IGNITION_INITIAL_CHANCE_INCREASE_KEY = "Initial Ignition Chance Increase";
internal const int IGNITION_COIL_IGNITION_INITIAL_CHANCE_INCREASE_DEFAULT = 25;
internal const string IGNITION_COIL_IGNITION_INITIAL_CHANCE_INCREASE_DESCRIPTION = "Amount of chance (%) increased when first purchasing the upgrade to ignite on the Company Cruiser Vehicle";
internal const string IGNITION_COIL_IGNITION_INCREMENTAL_CHANCE_INCREASE_KEY = "Incremental Ignition Chance Increase";
internal const int IGNITION_COIL_IGNITION_INCREMENTAL_CHANCE_INCREASE_DEFAULT = 25;
internal const string IGNITION_COIL_IGNITION_INCREMENTAL_CHANCE_INCREASE_DESCRIPTION = "Amount of chance (%) increased when purchasing further levels of the upgrade to ignite on the Company Cruiser Vehicle";
internal const string FLUFFY_SEATS_ENABLED_KEY = "Enable Fluffy Seats Upgrade";
internal const bool FLUFFY_SEATS_ENABLED_DEFAULT = true;
internal const string FLUFFY_SEATS_ENABLED_DESCRIPTION = "Tier upgrade which provides player damage mitigation when bumping too hard with the Company Cruiser Vehicle.";
internal const string FLUFFY_SEATS_PRICE_KEY = "Price of Fluffy Seats Upgrade";
internal const int FLUFFY_SEATS_PRICE_DEFAULT = 100;
internal const string FLUFFY_SEATS_DAMAGE_MITIGATION_INITIAL_INCREASE_KEY = "Initial Player Damage Mitigation Increase";
internal const int FLUFFY_SEATS_DAMAGE_MITIGATION_INITIAL_INCREASE_DEFAULT = 25;
internal const string FLUFFY_SEATS_DAMAGE_MITIGATION_INITIAL_INCREASE_DESCRIPTION = "Amount of damage mitigation (%) increased when first purchasing the upgrade when riding the Company Cruiser Vehicle.";
internal const string FLUFFY_SEATS_DAMAGE_MITIGATION_INCREMENTAL_INCREASE_KEY = "Incremental Player Damage Mitigation Increase";
internal const int FLUFFY_SEATS_DAMAGE_MITIGATION_INCREMENTAL_INCREASE_DEFAULT = 25;
internal const string FLUFFY_SEATS_DAMAGE_MITIGATION_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of damage mitigation (%) increased when purchasing further levels of the upgrade when riding the Company Cruiser Vehicle.";
internal const string IMPROVED_STEERING_ENABLED_KEY = "Enable Improved Steering Upgrade";
internal const bool IMPROVED_STEERING_ENABLED_DEFAULT = true;
internal const string IMPROVED_STEERING_ENABLED_DESCRIPTION = "Tier upgrade which increases the turning speed of the Company Cruiser vehicle";
internal const string IMPROVED_STEERING_PRICE_KEY = "Price of Improved Steering Upgrade";
internal const int IMPROVED_STEERING_PRICE_DEFAULT = 100;
internal const string IMPROVED_STEERING_TURNING_SPEED_INITIAL_INCREASE_KEY = "Initial Turning Speed Increase";
internal const float IMPROVED_STEERING_TURNING_SPEED_INITIAL_INCREASE_DEFAULT = 1f;
internal const string IMPROVED_STEERING_TURNING_SPEED_INITIAL_INCREASE_DESCRIPTION = "Amount of turning speed increased when first purchasing the upgrade to the Company Cruiser vehicle.";
internal const string IMPROVED_STEERING_TURNING_SPEED_INCREMENTAL_INCREASE_KEY = "Incremental Turning Speed Increase";
internal const float IMPROVED_STEERING_TURNING_SPEED_INCREMENTAL_INCREASE_DEFAULT = 0.5f;
internal const string IMPROVED_STEERING_TURNING_SPEED_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of turning speed increased when purchasing further levels of the upgrade to the Company Cruiser vehicle.";
internal const string SUPERCHARGED_PISTONS_ENABLED_KEY = "Enable Supercharged Pistons Upgrade";
internal const bool SUPERCHARGED_PISTONS_ENABLED_DEFAULT = true;
internal const string SUPERCHARGED_PISTONS_ENABLED_DESCRIPTION = "Tier upgrade which increases the company cruiser's maximum speed when driving";
internal const string SUPERCHARGED_PISTONS_PRICE_KEY = "Price of Supercharged Pistons Upgrade";
internal const int SUPERCHARGED_PISTONS_PRICE_DEFAULT = 250;
internal const string SUPERCHARGED_PISTONS_ENGINE_TORQUE_INITIAL_INCREASE_KEY = "Initial Engine Torque Increase";
internal const float SUPERCHARGED_PISTONS_ENGINE_TORQUE_INITIAL_INCREASE_DEFAULT = 40f;
internal const string SUPERCHARGED_PISTONS_ENGINE_TORQUE_INITIAL_INCREASE_DESCRIPTION = "Amount of maximum speed increased when first purchasing the upgrade to the Company Cruiser vehicle.";
internal const string SUPERCHARGED_PISTONS_ENGINE_TORQUE_INCREMENTAL_INCREASE_KEY = "Incremental Engine Torque Increase";
internal const float SUPERCHARGED_PISTONS_ENGINE_TORQUE_INCREMENTAL_INCREASE_DEFAULT = 20f;
internal const string SUPERCHARGED_PISTONS_ENGINE_TORQUE_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of maximum speed increased when purchasing further levels of the upgrade to the Company Cruiser vehicle.";
internal const string RAPID_MOTORS_ENABLED_KEY = "Enable Rapid Motors Upgrade";
internal const bool RAPID_MOTORS_ENABLED_DEFAULT = true;
internal const string RAPID_MOTORS_ENABLED_DESCRIPTION = "Tier upgrade which increases the company cruiser's acceleration when driving.";
internal const string RAPID_MOTORS_PRICE_KEY = "Price of Rapid Motors Upgrade";
internal const int RAPID_MOTORS_PRICE_DEFAULT = 150;
internal const string RAPID_MOTORS_ACCELERATION_INITIAL_INCREASE_KEY = "Initial Acceleration Increase";
internal const float RAPID_MOTORS_ACCELERATION_INITIAL_INCREASE_DEFAULT = 2f;
internal const string RAPID_MOTORS_ACCELERATION_INITIAL_INCREASE_DESCRIPTION = "Amount of acceleration increased when first purchasing the upgrade to the company cruiser vehicle.";
internal const string RAPID_MOTORS_ACCELERATION_INCREMENTAL_INCREASE_KEY = "Incremental Acceleration Increase";
internal const float RAPID_MOTORS_ACCELERATION_INCREMENTAL_INCREASE_DEFAULT = 0.5f;
internal const string RAPID_MOTORS_ACCELERATION_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of acceleration increased when purchasing further levels of the upgrade to the company cruiser vehicle.";
internal const string VEHICLE_PLATING_ENABLED_KEY = "Enable Vehicle Plating Upgrade";
internal const bool VEHICLE_PLATING_ENABLED_DEFAULT = true;
internal const string VEHICLE_PLATING_ENABLED_DESCRIPTION = "Tier upgrade which increases the company cruiser's maximum health to sustain damage from outside sources.";
internal const string VEHICLE_PLATING_PRICE_KEY = "Price of Vehicle Plating Upgrade";
internal const int VEHICLE_PLATING_PRICE_DEFAULT = 150;
internal const string VEHICLE_PLATING_HEALTH_INITIAL_INCREASE_KEY = "Initial Health Increase";
internal const int VEHICLE_PLATING_HEALTH_INITIAL_INCREASE_DEFAULT = 10;
internal const string VEHICLE_PLATING_HEALTH_INITIAL_INCREASE_DESCRIPTION = "Amount of health increased when first purchasing the upgrade to the company cruiser vehicle.";
internal const string VEHICLE_PLATING_HEALTH_INCREMENTAL_INCREASE_KEY = "Incremental Health Increase";
internal const int VEHICLE_PLATING_HEALTH_INCREMENTAL_INCREASE_DEFAULT = 5;
internal const string VEHICLE_PLATING_HEALTH_INCREMENTAL_INCREASE_DESCRIPTION = "Amount of health increased when purchasing further levels of the upgrade to the company cruiser vehicle.";
}
}
namespace LategameCompanyCruiserUpgrades.Upgrades.TierUpgrades
{
internal class BrakeFluid : TierUpgrade
{
internal const string UPGRADE_NAME = "Brake Fluid";
internal const string PRICES_DEFAULT = "100,100,150,250";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.BrakeFluidConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Brake Fluid";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.BrakeFluidConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public static float ComputeIncreasedBrakingPowerPercentage()
{
int num = SyncedEntry<int>.op_Implicit(Plugin.Config.BrakeFluidConfiguration.InitialEffect) + BaseUpgrade.GetUpgradeLevel("Brake Fluid") * SyncedEntry<int>.op_Implicit(Plugin.Config.BrakeFluidConfiguration.IncrementalEffect);
return (float)num / 100f;
}
public static int GetIncreasedBrakingPower(int defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.BrakeFluidConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Brake Fluid"))
{
return defaultValue;
}
float num = ComputeIncreasedBrakingPowerPercentage();
return Mathf.Clamp((int)((float)defaultValue + (float)defaultValue * num), 0, defaultValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - The Company Cruiser vehicle's breaks have an increased power of {2}%.\n", initialPrice, incrementalPrices, (Func<int, float>)infoFunction, false, (PurchaseMode)0);
static float infoFunction(int level)
{
return Plugin.Config.BrakeFluidConfiguration.InitialEffect.Value + level * Plugin.Config.BrakeFluidConfiguration.IncrementalEffect.Value;
}
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Brake Fluid", ((IUpgradeConfiguration)Plugin.Config.BrakeFluidConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Brake Fluid");
val.AddComponent<BrakeFluid>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Brake Fluid"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Brake Fluid", (ITierUpgradeConfiguration)(object)Plugin.Config.BrakeFluidConfiguration, Plugin.networkPrefabs["Brake Fluid"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "BrakeFluid";
}
}
internal class FluffySeats : TierUpgrade
{
internal const string UPGRADE_NAME = "Fluffy Seats";
internal const string PRICES_DEFAULT = "100,100,150,200";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.FluffySeatsConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Fluffy Seats";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.FluffySeatsConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public static float ComputePlayerDamageMitigation()
{
int num = SyncedEntry<int>.op_Implicit(Plugin.Config.FluffySeatsConfiguration.InitialEffect) + BaseUpgrade.GetUpgradeLevel("Fluffy Seats") * SyncedEntry<int>.op_Implicit(Plugin.Config.FluffySeatsConfiguration.IncrementalEffect);
return (100f - (float)num) / 100f;
}
public static int GetPlayerDamageMitigation(int defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.FluffySeatsConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Fluffy Seats"))
{
return defaultValue;
}
float num = ComputePlayerDamageMitigation();
return Mathf.Clamp((int)((float)defaultValue * num), 0, defaultValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Player damage is reduced by {2}% when bumping too hard with the Company Cruiser Vehicle.\n", initialPrice, incrementalPrices, (Func<int, float>)infoFunction, false, (PurchaseMode)0);
static float infoFunction(int level)
{
return Plugin.Config.FluffySeatsConfiguration.InitialEffect.Value + level * Plugin.Config.FluffySeatsConfiguration.IncrementalEffect.Value;
}
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Fluffy Seats", ((IUpgradeConfiguration)Plugin.Config.FluffySeatsConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Fluffy Seats");
val.AddComponent<FluffySeats>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Fluffy Seats"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Fluffy Seats", (ITierUpgradeConfiguration)(object)Plugin.Config.FluffySeatsConfiguration, Plugin.networkPrefabs["Fluffy Seats"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "FluffySeats";
}
}
internal class IgnitionCoil : TierUpgrade
{
internal const string UPGRADE_NAME = "Ignition Coil";
internal const string PRICES_DEFAULT = "50,50,100,100";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.IgnitionCoilConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Ignition Coil";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.IgnitionCoilConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public static float ComputeAdditionalIgnitionChance()
{
return SyncedEntry<int>.op_Implicit(Plugin.Config.IgnitionCoilConfiguration.InitialEffect) + BaseUpgrade.GetUpgradeLevel("Ignition Coil") * SyncedEntry<int>.op_Implicit(Plugin.Config.IgnitionCoilConfiguration.IncrementalEffect);
}
public static float GetAdditionalIgnitionChance(float defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.IgnitionCoilConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Ignition Coil"))
{
return defaultValue;
}
float num = ComputeAdditionalIgnitionChance();
return Mathf.Clamp(defaultValue + num, defaultValue, float.MaxValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.IgnitionCoilConfiguration.InitialEffect.Value + level * Plugin.Config.IgnitionCoilConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Chance to start ignition on Company Cruiser Vehicle is increased by {2}%.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Ignition Coil", ((IUpgradeConfiguration)Plugin.Config.IgnitionCoilConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Ignition Coil");
val.AddComponent<IgnitionCoil>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Ignition Coil"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Ignition Coil", (ITierUpgradeConfiguration)(object)Plugin.Config.IgnitionCoilConfiguration, Plugin.networkPrefabs["Ignition Coil"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "IgnitionCoil";
}
}
internal class ImprovedSteering : TierUpgrade
{
internal const string UPGRADE_NAME = "Improved Steering";
internal const string PRICES_DEFAULT = "100,100,150,250";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.ImprovedSteeringConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Improved Steering";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.ImprovedSteeringConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public override void Load()
{
((BaseUpgrade)this).Load();
UpdateCurrentVehicleTurningSpeed(ComputeAdditionalAcceleration(), add: true);
}
public override void Increment()
{
((TierUpgrade)this).Increment();
UpdateCurrentVehicleTurningSpeed(SyncedEntry<float>.op_Implicit(Plugin.Config.ImprovedSteeringConfiguration.IncrementalEffect), add: true);
}
public override void Unwind()
{
UpdateCurrentVehicleTurningSpeed(ComputeAdditionalAcceleration(), add: false);
((TierUpgrade)this).Unwind();
}
private void UpdateCurrentVehicleTurningSpeed(float additionalTurningSpeed, bool add)
{
VehicleController[] array = Object.FindObjectsOfType<VehicleController>();
foreach (VehicleController val in array)
{
if (!((Object)(object)val == (Object)null))
{
if (add)
{
val.steeringWheelTurnSpeed += additionalTurningSpeed;
}
else
{
val.steeringWheelTurnSpeed -= additionalTurningSpeed;
}
}
}
}
public static float ComputeAdditionalAcceleration()
{
return SyncedEntry<float>.op_Implicit(Plugin.Config.ImprovedSteeringConfiguration.InitialEffect) + (float)BaseUpgrade.GetUpgradeLevel("Improved Steering") * SyncedEntry<float>.op_Implicit(Plugin.Config.ImprovedSteeringConfiguration.IncrementalEffect);
}
public static float GetAdditionalTurningSpeed(float defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.ImprovedSteeringConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Improved Steering"))
{
return defaultValue;
}
float num = ComputeAdditionalAcceleration();
return Mathf.Clamp(defaultValue + num, defaultValue, float.MaxValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.ImprovedSteeringConfiguration.InitialEffect.Value + (float)level * Plugin.Config.ImprovedSteeringConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Company Cruiser vehicle's steering speed (turning speed) is increased by {2}.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Improved Steering", ((IUpgradeConfiguration)Plugin.Config.ImprovedSteeringConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Improved Steering");
val.AddComponent<ImprovedSteering>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Improved Steering"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Improved Steering", (ITierUpgradeConfiguration)(object)Plugin.Config.ImprovedSteeringConfiguration, Plugin.networkPrefabs["Improved Steering"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "ImprovedSteering";
}
}
internal class RapidMotors : TierUpgrade
{
internal const string UPGRADE_NAME = "Rapid Motors";
internal const string PRICES_DEFAULT = "150,200,300,400";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.RapidMotorsConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Rapid Motors";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.RapidMotorsConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public override void Load()
{
((BaseUpgrade)this).Load();
UpdateCurrentVehicleAcceleration(ComputeAdditionalAcceleration(), add: true);
}
public override void Increment()
{
((TierUpgrade)this).Increment();
UpdateCurrentVehicleAcceleration(SyncedEntry<float>.op_Implicit(Plugin.Config.RapidMotorsConfiguration.IncrementalEffect), add: true);
}
public override void Unwind()
{
UpdateCurrentVehicleAcceleration(ComputeAdditionalAcceleration(), add: false);
((TierUpgrade)this).Unwind();
}
private void UpdateCurrentVehicleAcceleration(float additionalAcceleration, bool add)
{
VehicleController[] array = Object.FindObjectsOfType<VehicleController>();
foreach (VehicleController val in array)
{
if (!((Object)(object)val == (Object)null))
{
if (add)
{
val.carAcceleration += additionalAcceleration;
}
else
{
val.carAcceleration -= additionalAcceleration;
}
}
}
}
public static float ComputeAdditionalAcceleration()
{
return SyncedEntry<float>.op_Implicit(Plugin.Config.RapidMotorsConfiguration.InitialEffect) + (float)BaseUpgrade.GetUpgradeLevel("Rapid Motors") * SyncedEntry<float>.op_Implicit(Plugin.Config.RapidMotorsConfiguration.IncrementalEffect);
}
public static float GetAdditionalAcceleration(float defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.RapidMotorsConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Rapid Motors"))
{
return defaultValue;
}
float num = ComputeAdditionalAcceleration();
return Mathf.Clamp(defaultValue + num, defaultValue, float.MaxValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.RapidMotorsConfiguration.InitialEffect.Value + (float)level * Plugin.Config.RapidMotorsConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Company Cruiser vehicle's maximum acceleration is increased by {2}.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Rapid Motors", ((IUpgradeConfiguration)Plugin.Config.RapidMotorsConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Rapid Motors");
val.AddComponent<RapidMotors>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Rapid Motors"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Rapid Motors", (ITierUpgradeConfiguration)(object)Plugin.Config.RapidMotorsConfiguration, Plugin.networkPrefabs["Rapid Motors"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "RapidMotors";
}
}
internal class SuperchargedPistons : TierUpgrade
{
internal const string UPGRADE_NAME = "Supercharged Pistons";
internal const string PRICES_DEFAULT = "250,200,350";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.SuperchargedPistonsConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Supercharged Pistons";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.SuperchargedPistonsConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public override void Load()
{
((BaseUpgrade)this).Load();
UpdateCurrentVehicleEngineTorque(ComputeAdditionalEngineTorque(), add: true);
}
public override void Increment()
{
((TierUpgrade)this).Increment();
UpdateCurrentVehicleEngineTorque(SyncedEntry<float>.op_Implicit(Plugin.Config.SuperchargedPistonsConfiguration.IncrementalEffect), add: true);
}
public override void Unwind()
{
UpdateCurrentVehicleEngineTorque(ComputeAdditionalEngineTorque(), add: false);
((TierUpgrade)this).Unwind();
}
private void UpdateCurrentVehicleEngineTorque(float additionalEngineTorque, bool add)
{
VehicleController[] array = Object.FindObjectsOfType<VehicleController>();
foreach (VehicleController val in array)
{
if (!((Object)(object)val == (Object)null))
{
if (add)
{
val.EngineTorque += additionalEngineTorque;
}
else
{
val.EngineTorque -= additionalEngineTorque;
}
}
}
}
public static float ComputeAdditionalEngineTorque()
{
return SyncedEntry<float>.op_Implicit(Plugin.Config.SuperchargedPistonsConfiguration.InitialEffect) + (float)BaseUpgrade.GetUpgradeLevel("Supercharged Pistons") * SyncedEntry<float>.op_Implicit(Plugin.Config.SuperchargedPistonsConfiguration.IncrementalEffect);
}
public static float GetAdditionalEngineTorque(float defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.SuperchargedPistonsConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Supercharged Pistons"))
{
return defaultValue;
}
float num = ComputeAdditionalEngineTorque();
return Mathf.Clamp(defaultValue + num, defaultValue, float.MaxValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.SuperchargedPistonsConfiguration.InitialEffect.Value + (float)level * Plugin.Config.SuperchargedPistonsConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Company Cruiser vehicle's maximum speed is increased by {2}.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Supercharged Pistons", ((IUpgradeConfiguration)Plugin.Config.SuperchargedPistonsConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Supercharged Pistons");
val.AddComponent<SuperchargedPistons>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Supercharged Pistons"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Supercharged Pistons", (ITierUpgradeConfiguration)(object)Plugin.Config.SuperchargedPistonsConfiguration, Plugin.networkPrefabs["Supercharged Pistons"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "SuperchargedPistons";
}
}
internal class TurboTank : TierUpgrade
{
internal const string UPGRADE_NAME = "Turbo Tank";
internal const string PRICES_DEFAULT = "200,100,200,300";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.TurboTankConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Turbo Tank";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.TurboTankConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public static int ComputeAdditionalTurboCapacity()
{
return SyncedEntry<int>.op_Implicit(Plugin.Config.TurboTankConfiguration.InitialEffect) + BaseUpgrade.GetUpgradeLevel("Turbo Tank") * SyncedEntry<int>.op_Implicit(Plugin.Config.TurboTankConfiguration.IncrementalEffect);
}
public static int GetAdditionalTurboCapacity(int defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.TurboTankConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Turbo Tank"))
{
return defaultValue;
}
int num = ComputeAdditionalTurboCapacity();
return Mathf.Clamp(defaultValue + num, defaultValue, int.MaxValue);
}
public static float GetAdditionalTurboCapacity(float defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.TurboTankConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Turbo Tank"))
{
return defaultValue;
}
float num = ComputeAdditionalTurboCapacity();
return Mathf.Clamp(defaultValue + num, defaultValue, float.MaxValue);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.TurboTankConfiguration.InitialEffect.Value + level * Plugin.Config.TurboTankConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Company Cruiser vehicle's maximum turbo capacity is increased by {2}.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Turbo Tank", ((IUpgradeConfiguration)Plugin.Config.TurboTankConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Turbo Tank");
val.AddComponent<TurboTank>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Turbo Tank"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Turbo Tank", (ITierUpgradeConfiguration)(object)Plugin.Config.TurboTankConfiguration, Plugin.networkPrefabs["Turbo Tank"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "TurboTank";
}
}
internal class VehiclePlating : TierUpgrade
{
internal const string UPGRADE_NAME = "Vehicle Plating";
internal const string PRICES_DEFAULT = "150,300,400,500,600";
public override bool CanInitializeOnStart
{
get
{
string[] array = ((ITierUpgradeConfiguration)Plugin.Config.VehiclePlatingConfiguration).Prices.Value.Split(',');
return array.Length == 0 || (array.Length == 1 && (array[0].Length == 0 || array[0] == "0"));
}
}
public override void Start()
{
((BaseUpgrade)this).upgradeName = "Vehicle Plating";
((BaseUpgrade)this).overridenUpgradeName = SyncedEntry<string>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.VehiclePlatingConfiguration).OverrideName);
((BaseUpgrade)this).Start();
}
public override void Load()
{
((BaseUpgrade)this).Load();
UpdateCurrentVehicleHealth(ComputeAdditionalMaximumHealth(), add: true);
}
public override void Increment()
{
((TierUpgrade)this).Increment();
UpdateCurrentVehicleHealth(SyncedEntry<int>.op_Implicit(Plugin.Config.VehiclePlatingConfiguration.IncrementalEffect), add: true);
}
public override void Unwind()
{
UpdateCurrentVehicleHealth(ComputeAdditionalMaximumHealth(), add: false);
((TierUpgrade)this).Unwind();
}
public static int GetAdditionalMaximumHealth(int defaultValue)
{
if (!SyncedEntry<bool>.op_Implicit(((IUpgradeConfiguration)Plugin.Config.VehiclePlatingConfiguration).Enabled))
{
return defaultValue;
}
if (!BaseUpgrade.GetActiveUpgrade("Vehicle Plating"))
{
return defaultValue;
}
int num = ComputeAdditionalMaximumHealth();
return Mathf.Clamp(defaultValue + num, defaultValue, int.MaxValue);
}
private void UpdateCurrentVehicleHealth(int additionalHealth, bool add)
{
VehicleController[] array = Object.FindObjectsOfType<VehicleController>();
foreach (VehicleController val in array)
{
if (!((Object)(object)val == (Object)null))
{
if (add)
{
val.carHP += additionalHealth;
}
else
{
val.carHP -= additionalHealth;
}
}
}
}
public static int ComputeAdditionalMaximumHealth()
{
return SyncedEntry<int>.op_Implicit(Plugin.Config.VehiclePlatingConfiguration.InitialEffect) + BaseUpgrade.GetUpgradeLevel("Vehicle Plating") * SyncedEntry<int>.op_Implicit(Plugin.Config.VehiclePlatingConfiguration.IncrementalEffect);
}
public override string GetDisplayInfo(int initialPrice = -1, int maxLevels = -1, int[] incrementalPrices = null)
{
Func<int, float> func = (int level) => Plugin.Config.VehiclePlatingConfiguration.InitialEffect.Value + level * Plugin.Config.VehiclePlatingConfiguration.IncrementalEffect.Value;
return Tools.GenerateInfoForUpgrade("LVL {0} - ${1} - Company Cruiser vehicle's maximum health is increased by {2}.\n", initialPrice, incrementalPrices, func, false, (PurchaseMode)0);
}
public static (string, string[]) RegisterScrapToUpgrade()
{
return ("Vehicle Plating", ((IUpgradeConfiguration)Plugin.Config.VehiclePlatingConfiguration).ItemProgressionItems.Value.Split(","));
}
public static void RegisterUpgrade()
{
GameObject val = NetworkPrefabs.CreateNetworkPrefab("Vehicle Plating");
val.AddComponent<VehiclePlating>();
NetworkPrefabs.RegisterNetworkPrefab(val);
Plugin.networkPrefabs["Vehicle Plating"] = val;
}
public static CustomTerminalNode RegisterTerminalNode()
{
return UpgradeBus.Instance.SetupMultiplePurchaseableTerminalNode("Vehicle Plating", (ITierUpgradeConfiguration)(object)Plugin.Config.VehiclePlatingConfiguration, Plugin.networkPrefabs["Vehicle Plating"]);
}
protected override void __initializeVariables()
{
((TierUpgrade)this).__initializeVariables();
}
protected internal override string __getTypeName()
{
return "VehiclePlating";
}
}
}
namespace LategameCompanyCruiserUpgrades.Patches
{
[HarmonyPatch(typeof(PlayerControllerB))]
internal static class PlayerControllerBPatcher
{
[HarmonyPrefix]
[HarmonyPatch("KillPlayer")]
private static bool KillPlayerPrefix(PlayerControllerB __instance, Vector3 bodyVelocity, bool spawnBody, CauseOfDeath causeOfDeath, int deathAnimation, Vector3 positionOffset)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
return PreventInstantKill(ref __instance, bodyVelocity, spawnBody, causeOfDeath, deathAnimation, positionOffset);
}
private static bool PreventInstantKill(ref PlayerControllerB __instance, Vector3 bodyVelocity, bool spawnBody, CauseOfDeath causeOfDeath, int deathAnimation, Vector3 positionOffset)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
if ((int)causeOfDeath == 16)
{
if (!BaseUpgrade.GetActiveUpgrade("Fluffy Seats"))
{
return true;
}
Plugin.mls.LogInfo((object)"Kill player fired due to car crash with Fluffy Seats upgrade on, mitigating 100 damage instead of instant kill...");
__instance.DamagePlayer(FluffySeats.GetPlayerDamageMitigation(100), true, true, causeOfDeath, deathAnimation, false, bodyVelocity);
return false;
}
return true;
}
}
[HarmonyPatch(typeof(VehicleController))]
internal static class VehicleControllerPatcher
{
[HarmonyTranspiler]
[HarmonyPatch("Start")]
[HarmonyPatch("AddEngineOil")]
private static IEnumerable<CodeInstruction> StartTranspiler(IEnumerable<CodeInstruction> instructions)
{
List<CodeInstruction> codes = new List<CodeInstruction>(instructions);
int index = 0;
IncreaseMaximumHealthTranspile(ref index, ref codes);
return codes;
}
[HarmonyPatch("Update")]
private static IEnumerable<CodeInstruction> UpdateTranspiler(IEnumerable<CodeInstruction> instructions)
{
List<CodeInstruction> codes = new List<CodeInstruction>(instructions);
int index = 0;
IncreaseMaximumHealthTranspile(ref index, ref codes);
IncreaseBreakingPowerTranspile(ref index, ref codes);
IncreaseBreakingPowerTranspile(ref index, ref codes);
return codes;
}
[HarmonyTranspiler]
[HarmonyPatch("ReactToDamage")]
private static IEnumerable<CodeInstruction> ReactToDamageTranspiler(IEnumerable<CodeInstruction> instructions)
{
List<CodeInstruction> codes = new List<CodeInstruction>(instructions);
int index = 0;
IncreaseMaximumHealthTranspile(ref index, ref codes);
IncreaseTurboCapacityTranspile(ref index, ref codes, isFloat: true);
return codes;
}
private static void IncreaseMaximumHealthTranspile(ref int index, ref List<CodeInstruction> codes)
{
FieldInfo field = typeof(VehicleController).GetField("baseCarHP");
MethodInfo method = typeof(VehiclePlating).GetMethod("GetAdditionalMaximumHealth");
Tools.FindField(ref index, ref codes, field, method, false, false, false, false, false, false, "Couldn't find the baseCarHP field");
}
private static void IncreaseBreakingPowerTranspile(ref int index, ref List<CodeInstruction> codes)
{
MethodInfo method = typeof(BrakeFluid).GetMethod("GetIncreasedBrakingPower");
Tools.FindFloat(ref index, ref codes, 2000f, method, false, false, false, false, false, false, "Couldn't find the 2000f value for the first wheel");
Tools.FindFloat(ref index, ref codes, 2000f, method, false, false, false, false, false, false, "Couldn't find the 2000f value for the second wheel");
Tools.FindFloat(ref index, ref codes, 2000f, method, false, false, false, false, false, false, "Couldn't find the 2000f value for the third wheel");
Tools.FindFloat(ref index, ref codes, 2000f, method, false, false, false, false, false, false, "Couldn't find the 2000f value for the fourth wheel");
Tools.FindFloat(ref index, ref codes, 2000f, method, false, false, false, false, false, false, "Couldn't find the 2000f value for the remaining wheels");
}
[HarmonyTranspiler]
[HarmonyPatch("DamagePlayerInVehicle")]
private static IEnumerable<CodeInstruction> DamagePlayerInVehicleTranspiler(IEnumerable<CodeInstruction> instructions)
{
MethodInfo method = typeof(FluffySeats).GetMethod("GetPlayerDamageMitigation");
List<CodeInstruction> result = new List<CodeInstruction>(instructions);
int num = 0;
Tools.FindInteger(ref num, ref result, (sbyte)40, method, false, false, false, false, false, false, "Couldn't find the damage player with value of 40");
Tools.FindInteger(ref num, ref result, (sbyte)30, method, false, false, false, false, false, false, "Couldn't find the damage player with value of 30");
Tools.FindInteger(ref num, ref result, (sbyte)10, method, false, false, false, false, false, false, "Couldn't find the damage player with value of 10");
return result;
}
[HarmonyTranspiler]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
private static IEnumerable<CodeInstruction> TryIgnitionTranspiler(IEnumerable<CodeInstruction> instructions)
{
FieldInfo field = typeof(VehicleController).GetField("chanceToStartIgnition", BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo method = typeof(IgnitionCoil).GetMethod("GetAdditionalIgnitionChance");
List<CodeInstruction> result = new List<CodeInstruction>(instructions);
int num = 0;
Tools.FindField(ref num, ref result, field, method, false, false, false, false, false, false, "Couldn't find usage of chanceToStartIgnition field");
return result;
}
[HarmonyTranspiler]
[HarmonyPatch("AddTurboBoost")]
private static IEnumerable<CodeInstruction> AddTurboBoostTranspiler(IEnumerable<CodeInstruction> instructions)
{
List<CodeInstruction> codes = new List<CodeInstruction>(instructions);
int index = 0;
IncreaseTurboCapacityTranspile(ref index, ref codes);
return codes;
}
private static void IncreaseTurboCapacityTranspile(ref int index, ref List<CodeInstruction> codes, bool isFloat = false)
{
if (!isFloat)
{
MethodInfo method = typeof(TurboTank).GetMethod("GetAdditionalTurboCapacity", new Type[1] { typeof(int) });
Tools.FindInteger(ref index, ref codes, (sbyte)5, method, false, false, false, false, false, false, "Couldn't find the defined maximum turbo capacity when adding turbo boost");
}
else
{
MethodInfo method2 = typeof(TurboTank).GetMethod("GetAdditionalTurboCapacity", new Type[1] { typeof(float) });
Tools.FindFloat(ref index, ref codes, 5f, method2, false, false, false, false, false, false, "Couldn't find the defined maximum turbo capacity when updating turbo scale");
}
}
[HarmonyPostfix]
[HarmonyPatch("Start")]
private static void StartPostfix(VehicleController __instance)
{
__instance.carAcceleration = RapidMotors.GetAdditionalAcceleration(__instance.carAcceleration);
__instance.EngineTorque = SuperchargedPistons.GetAdditionalEngineTorque(__instance.EngineTorque);
__instance.steeringWheelTurnSpeed = ImprovedSteering.GetAdditionalTurningSpeed(__instance.steeringWheelTurnSpeed);
}
}
}
namespace LategameCompanyCruiserUpgrades.Misc
{
[DataContract]
public class PluginConfig : SyncedConfig2<PluginConfig>
{
public ITierEffectUpgradeConfiguration<int> BrakeFluidConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<int> TurboTankConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<int> IgnitionCoilConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<int> FluffySeatsConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<float> ImprovedSteeringConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<float> SuperchargedPistonsConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<float> RapidMotorsConfiguration { get; set; }
public ITierEffectUpgradeConfiguration<int> VehiclePlatingConfiguration { get; set; }
public PluginConfig(ConfigFile cfg)
: base("com.github.WhiteSpike.LategameCompanyCruiserUpgrades")
{
string text = "Brake Fluid";
BrakeFluidConfiguration = (ITierEffectUpgradeConfiguration<int>)(object)new TierPrimitiveUpgradeConfiguration<int>(cfg, text, "Tier upgrade which increases the braking capability of the Company Cruiser vehicle.", "100,100,150,250")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Initial Break Power Increase", 25, "Percentage of break power increased when first purchasing the upgrade on the Company Cruiser Vehicle"),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Incremental Break Power Increase", 25, "Percentage of break power increased when purchasing further levels of the upgrade on the Company Cruiser Vehicle")
};
text = "Turbo Tank";
TurboTankConfiguration = (ITierEffectUpgradeConfiguration<int>)(object)new TierPrimitiveUpgradeConfiguration<int>(cfg, text, "Tier upgrade which increases the maximum capacity of Company Cruiser Vehicle's turbo", "200,100,200,300")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Initial Turbo Capacity Increase", 2, "Amount of turbo capacity increased when first purchasing the upgrade on the Company Cruiser Vehicle"),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Incremental Turbo Capacity Increase", 1, "Amount of turbo capacity increased when purchasing further levels of the upgrade on the Company Cruiser Vehicle")
};
text = "Ignition Coil";
IgnitionCoilConfiguration = (ITierEffectUpgradeConfiguration<int>)(object)new TierPrimitiveUpgradeConfiguration<int>(cfg, text, "Tier upgrade which increases the chance of ignition to turn on the Company Cruiser Vehicle.", "50,50,100,100")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Initial Ignition Chance Increase", 25, "Amount of chance (%) increased when first purchasing the upgrade to ignite on the Company Cruiser Vehicle"),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Incremental Ignition Chance Increase", 25, "Amount of chance (%) increased when purchasing further levels of the upgrade to ignite on the Company Cruiser Vehicle")
};
text = "Fluffy Seats";
FluffySeatsConfiguration = (ITierEffectUpgradeConfiguration<int>)(object)new TierPrimitiveUpgradeConfiguration<int>(cfg, text, "Tier upgrade which provides player damage mitigation when bumping too hard with the Company Cruiser Vehicle.", "100,100,150,200")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Initial Player Damage Mitigation Increase", 25, "Amount of damage mitigation (%) increased when first purchasing the upgrade when riding the Company Cruiser Vehicle."),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Incremental Player Damage Mitigation Increase", 25, "Amount of damage mitigation (%) increased when purchasing further levels of the upgrade when riding the Company Cruiser Vehicle.")
};
text = "Improved Steering";
ImprovedSteeringConfiguration = (ITierEffectUpgradeConfiguration<float>)(object)new TierPrimitiveUpgradeConfiguration<float>(cfg, text, "Tier upgrade which increases the turning speed of the Company Cruiser vehicle", "100,100,150,250")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Initial Turning Speed Increase", 1f, "Amount of turning speed increased when first purchasing the upgrade to the Company Cruiser vehicle."),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Incremental Turning Speed Increase", 0.5f, "Amount of turning speed increased when purchasing further levels of the upgrade to the Company Cruiser vehicle.")
};
text = "Supercharged Pistons";
SuperchargedPistonsConfiguration = (ITierEffectUpgradeConfiguration<float>)(object)new TierPrimitiveUpgradeConfiguration<float>(cfg, text, "Tier upgrade which increases the company cruiser's maximum speed when driving", "250,200,350")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Initial Engine Torque Increase", 40f, "Amount of maximum speed increased when first purchasing the upgrade to the Company Cruiser vehicle."),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Incremental Engine Torque Increase", 20f, "Amount of maximum speed increased when purchasing further levels of the upgrade to the Company Cruiser vehicle.")
};
text = "Rapid Motors";
RapidMotorsConfiguration = (ITierEffectUpgradeConfiguration<float>)(object)new TierPrimitiveUpgradeConfiguration<float>(cfg, text, "Tier upgrade which increases the company cruiser's acceleration when driving.", "150,200,300,400")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Initial Acceleration Increase", 2f, "Amount of acceleration increased when first purchasing the upgrade to the company cruiser vehicle."),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, text, "Incremental Acceleration Increase", 0.5f, "Amount of acceleration increased when purchasing further levels of the upgrade to the company cruiser vehicle.")
};
text = "Vehicle Plating";
VehiclePlatingConfiguration = (ITierEffectUpgradeConfiguration<int>)(object)new TierPrimitiveUpgradeConfiguration<int>(cfg, text, "Tier upgrade which increases the company cruiser's maximum health to sustain damage from outside sources.", "150,300,400,500,600")
{
InitialEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Initial Health Increase", 10, "Amount of health increased when first purchasing the upgrade to the company cruiser vehicle."),
IncrementalEffect = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, text, "Incremental Health Increase", 5, "Amount of health increased when purchasing further levels of the upgrade to the company cruiser vehicle.")
};
base.InitialSyncCompleted += PluginConfig_InitialSyncCompleted;
ConfigManager.Register<PluginConfig>((SyncedConfig2<PluginConfig>)this);
}
private void PluginConfig_InitialSyncCompleted(object sender, EventArgs e)
{
UpgradeBus.Instance.Reconstruct();
}
}
internal static class Metadata
{
public const string GUID = "com.github.WhiteSpike.LategameCompanyCruiserUpgrades";
public const string NAME = "Lategame Company Cruiser Upgrades";
public const string VERSION = "1.1.3";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}
namespace LategameCompanyCruiserUpgrades.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}