Decompiled source of EclipseEditionModpack SERVER test v0.0.1
EclipseTitle.dll
Decompiled a year agousing System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; using VerboseCompany.Properties; [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 = "")] [assembly: AssemblyCompany("VerboseCompany")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("VerboseCompany")] [assembly: AssemblyTitle("VerboseCompany")] [assembly: AssemblyVersion("1.0.0.0")] namespace VerboseCompany { [BepInPlugin("dev.parax.lethalcompany.verbosecompany", "Verbose Company", "1.0.0")] public class Main : BaseUnityPlugin { private const string ModId = "dev.parax.lethalcompany.verbosecompany"; private const string ModName = "Verbose Company"; private const string Version = "1.0.0"; public static AssetBundle verboseCompanyAssets; public static Texture2D titleFontAsset; private void Awake() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown verboseCompanyAssets = AssetBundle.LoadFromMemory(Resources.verbosecompanyassets); verboseCompanyAssets.LoadAllAssets(); titleFontAsset = verboseCompanyAssets.LoadAsset<Texture2D>("filsonfontasset"); Harmony val = new Harmony("dev.parax.lethalcompany.verbosecompany"); val.PatchAll(); } } [HarmonyPatch(typeof(MenuManager))] public class TitleText_MenuManagerPatch { public static string[] LethalSyn = new string[15] { "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company", "Lethal Company" }; public static string[] CompanySyn = new string[14] { "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition", "Eclipse Edition" }; public static GameObject TitleObj; public static TextMeshProUGUI TitleObjText; [HarmonyPatch("Start")] [HarmonyPrefix] private static void Start() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) int num = Random.Range(0, LethalSyn.Length); int num2 = Random.Range(0, CompanySyn.Length); TitleObj = Object.Instantiate<GameObject>(GameObject.Find("Canvas/MenuContainer/MainButtons/HostButton")); ((Object)TitleObj.transform).name = "TitleObj"; TitleObj.transform.SetParent(GameObject.Find("Canvas/MenuContainer").transform); TitleObj.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); TitleObj.transform.localScale = new Vector3(1f, 1f, 1f); TitleObj.transform.localPosition = new Vector3(0f, 140f, 0f); Object.Destroy((Object)(object)TitleObj.GetComponent(typeof(Image))); Object.Destroy((Object)(object)TitleObj.GetComponent(typeof(Button))); Object.Destroy((Object)(object)TitleObj.GetComponent(typeof(Animator))); Object.Destroy((Object)(object)TitleObj.transform.GetChild(0)); Component component = GameObject.Find("Canvas/MenuContainer/TitleObj/Text (TMP)").GetComponent(typeof(TextMeshProUGUI)); TitleObjText = (TextMeshProUGUI)(object)((component is TextMeshProUGUI) ? component : null); ((TMP_Text)TitleObjText).text = LethalSyn[num].ToUpper() + "\n" + CompanySyn[num2].ToUpper(); ((TMP_Text)TitleObjText).faceColor = Color32.op_Implicit(new Color(1f, 0f, 0f)); ((TMP_Text)TitleObjText).fontSize = 90f; Component component2 = ((Component)TitleObjText).GetComponent(typeof(RectTransform)); RectTransform val = (RectTransform)(object)((component2 is RectTransform) ? component2 : null); val.sizeDelta = new Vector2(1000f, 100f); ((TMP_Text)TitleObjText).alignment = (TextAlignmentOptions)4098; ((TMP_Text)TitleObjText).verticalAlignment = (VerticalAlignmentOptions)256; ((TMP_Text)TitleObjText).lineSpacing = -52f; ((TMP_Text)TitleObjText).characterSpacing = -12f; GameObject.Find("Canvas/MenuContainer/MainButtons/HeaderImage").SetActive(false); } [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update() { TitleObj.SetActive(GameObject.Find("Canvas/MenuContainer/MainButtons").activeSelf); } } } namespace VerboseCompany.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("VerboseCompany.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static byte[] verbosecompanyassets { get { object @object = ResourceManager.GetObject("verbosecompanyassets", resourceCulture); return (byte[])@object; } } internal Resources() { } } }
TVLoader.dll
Decompiled a year agousing System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using TVLoader.Utils; using UnityEngine.Video; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("TVLoader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TVLoader")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e59845a7-f2f7-4416-9a61-ca1939ce6e2d")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace TVLoader { [BepInPlugin("rattenbonkers.TVLoader", "TVLoader", "1.0.3")] public class TVLoaderPlugin : BaseUnityPlugin { private const string MyGUID = "rattenbonkers.TVLoader"; private const string PluginName = "TVLoader"; private const string VersionString = "1.0.3"; private static readonly Harmony Harmony = new Harmony("rattenbonkers.TVLoader"); public static ManualLogSource Log = new ManualLogSource("TVLoader"); private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Harmony.PatchAll(); VideoManager.Load(); ((BaseUnityPlugin)this).Logger.LogInfo((object)string.Format("PluginName: {0}, VersionString: {1} is loaded. Video Count: ${2}", "TVLoader", "1.0.3", VideoManager.Videos.Count)); } } } namespace TVLoader.Utils { internal static class VideoManager { public static List<string> Videos = new List<string>(); public static void Load() { string[] directories = Directory.GetDirectories(Paths.PluginPath); foreach (string text in directories) { string path = Path.Combine(Paths.PluginPath, text, "Television Videos"); if (Directory.Exists(path)) { string[] files = Directory.GetFiles(path, "*.mp4"); Videos.AddRange(files); TVLoaderPlugin.Log.LogInfo((object)$"{text} has {files.Length} videos."); } } string path2 = Path.Combine(Paths.PluginPath, "Television Videos"); if (!Directory.Exists(path2)) { Directory.CreateDirectory(path2); } string[] files2 = Directory.GetFiles(path2, "*.mp4"); Videos.AddRange(files2); TVLoaderPlugin.Log.LogInfo((object)$"Global has {files2.Length} videos."); TVLoaderPlugin.Log.LogInfo((object)$"Loaded {Videos.Count} total."); } } } namespace TVLoader.Patches { [HarmonyPatch(typeof(TVScript))] internal class TVScriptPatches { private static FieldInfo currentClipProperty = typeof(TVScript).GetField("currentClip", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo currentTimeProperty = typeof(TVScript).GetField("currentClipTime", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo wasLastFrameProp = typeof(TVScript).GetField("wasTvOnLastFrame", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo timeSinceTurningOffTVProp = typeof(TVScript).GetField("timeSinceTurningOffTV", BindingFlags.Instance | BindingFlags.NonPublic); private static MethodInfo setMatProperty = typeof(TVScript).GetMethod("SetTVScreenMaterial", BindingFlags.Instance | BindingFlags.NonPublic); [HarmonyPatch(typeof(TVScript), "Update")] [HarmonyPrefix] public static bool Update(TVScript __instance) { return false; } [HarmonyPatch(typeof(TVScript), "TurnTVOnOff")] [HarmonyPrefix] public static bool TurnTVOnOff(TVScript __instance, bool on) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 if (VideoManager.Videos.Count == 0) { return false; } if ((int)__instance.video.source != 1) { __instance.video.clip = null; __instance.tvSFX.clip = null; } __instance.tvOn = on; if (on) { PlayNextVideo(__instance); __instance.tvSFX.PlayOneShot(__instance.switchTVOn); WalkieTalkie.TransmitOneShotAudio(__instance.tvSFX, __instance.switchTVOn, 1f); } else { __instance.video.Stop(); __instance.tvSFX.PlayOneShot(__instance.switchTVOff); WalkieTalkie.TransmitOneShotAudio(__instance.tvSFX, __instance.switchTVOff, 1f); } setMatProperty.Invoke(__instance, new object[1] { on }); return false; } [HarmonyPatch(typeof(TVScript), "TVFinishedClip")] [HarmonyPrefix] public static bool TVFinishedClip(TVScript __instance, VideoPlayer source) { PlayNextVideo(__instance); return false; } private static void PlayNextVideo(TVScript instance) { if (VideoManager.Videos.Count != 0) { TVLoaderPlugin.Log.LogInfo((object)"Playing next video..."); int num = (int)currentClipProperty.GetValue(instance); num = (num + 1) % VideoManager.Videos.Count; TVLoaderPlugin.Log.LogInfo((object)$"currentClip: {num} - {VideoManager.Videos[num]}"); currentTimeProperty.SetValue(instance, 0f); currentClipProperty.SetValue(instance, num); instance.tvSFX.time = 0f; instance.video.url = "file://" + VideoManager.Videos[num]; instance.video.source = (VideoSource)1; instance.video.controlledAudioTrackCount = 1; instance.video.audioOutputMode = (VideoAudioOutputMode)1; instance.video.SetTargetAudioSource((ushort)0, instance.tvSFX); instance.video.Play(); instance.SyncTVServerRpc(); } } } }
RouteRandom.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using RouteRandom.Helpers; using TMPro; using UnityEngine; using UnityEngine.Video; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("RouteRandom")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("RouteRandom")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("335007c9-7068-4df7-85b3-b406e9795203")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace RouteRandom { [BepInPlugin("stormytuna.RouteRandom", "Route Random", "1.2.1")] public class RouteRandomBase : BaseUnityPlugin { public const string ModGUID = "stormytuna.RouteRandom"; public const string ModName = "Route Random"; public const string ModVersion = "1.2.1"; public static ManualLogSource Log = Logger.CreateLogSource("stormytuna.RouteRandom"); public static RouteRandomBase Instance; private readonly Harmony harmony = new Harmony("stormytuna.RouteRandom"); public static ConfigEntry<bool> ConfigAllowMildWeather; public static ConfigEntry<bool> ConfigAllowDustCloudsWeather; public static ConfigEntry<bool> ConfigAllowRainyWeather; public static ConfigEntry<bool> ConfigAllowStormyWeather; public static ConfigEntry<bool> ConfigAllowFoggyWeather; public static ConfigEntry<bool> ConfigAllowFloodedWeather; public static ConfigEntry<bool> ConfigAllowEclipsedWeather; public static ConfigEntry<bool> ConfigAllowCostlyPlanets; public static ConfigEntry<bool> ConfigRemoveCostOfCostlyPlanets; public static ConfigEntry<bool> ConfigSkipConfirmation; public static ConfigEntry<bool> ConfigDifferentPlanetEachTime; public static ConfigEntry<bool> ConfigHidePlanet; private void Awake() { if (Instance == null) { Instance = this; } Log.LogInfo((object)"Route Random has awoken!"); LoadConfigs(); harmony.PatchAll(); } private void LoadConfigs() { ConfigAllowMildWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowMildWeather", true, "Whether or not to allow the 'Mild' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowDustCloudsWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowDustCloudsWeather", false, "Whether or not to allow the 'Dust Clouds' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowRainyWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowRainyWeather", false, "Whether or not to allow the 'Rainy' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowStormyWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowStormyWeather", false, "Whether or not to allow the 'Stormy' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowFoggyWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowFoggyWeather", false, "Whether or not to allow the 'Foggy' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowFloodedWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowFloodedWeather", false, "Whether or not to allow the 'Flooded' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowEclipsedWeather = ((BaseUnityPlugin)this).Config.Bind<bool>("Allowed Weathers", "AllowEclipsedWeather", false, "Whether or not to allow the 'Eclipsed' weather to be chosen by the 'route randomfilterweather' command"); ConfigAllowCostlyPlanets = ((BaseUnityPlugin)this).Config.Bind<bool>("Costly Planets", "AllowCostlyPlanets", false, "Whether or not to allow costly planets (85-Rend, 7-Dine, 8-Titan). NOTE: You will still be prompted to pay the fee to fly there, enable the MakeCostlyPlanetsFree option to avoid that"); ConfigRemoveCostOfCostlyPlanets = ((BaseUnityPlugin)this).Config.Bind<bool>("Costly Planets", "RemoveCostOfCostlyPlanets", false, "Whether or not to remove the cost of costly planets when they're chosen randomly and allows them to be chosen even when AllowCostlyPlanets is false"); ConfigSkipConfirmation = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "SkipConfirmation", false, "Whether or not to skip the confirmation screen when using 'route random' or 'route randomwithweather' commands"); ConfigDifferentPlanetEachTime = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DifferentPlanetEachTime", false, "Prevents 'route random' and 'route randomwithweather' commands from choosing the same planet you're on"); ConfigHidePlanet = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HidePlanet", false, "Hides the planet you get randomly routed to, both in the terminal response and at the helm. NOTE: This will ALWAYS hide the orbited planet (even when selected manually) and will skip the confirmation screen"); } } } namespace RouteRandom.Patches { [HarmonyPatch(typeof(StartOfRound))] public class StartOfRoundPatch { [HarmonyPostfix] [HarmonyPatch("SetMapScreenInfoToCurrentLevel")] public static void HideMapScreenInfo(StartOfRound __instance, VideoPlayer ___screenLevelVideoReel, TextMeshProUGUI ___screenLevelDescription) { if (((Object)__instance.currentLevel).name != "CompanyBuildingLevel" && RouteRandomBase.ConfigHidePlanet.Value) { ((TMP_Text)___screenLevelDescription).text = "Orbiting: [REDACTED]\nPopulation: Unknown\nConditions: Unknown\nFauna: Unknown\nWeather: Unknown"; ((Behaviour)___screenLevelVideoReel).enabled = false; ___screenLevelVideoReel.clip = null; ((Component)___screenLevelVideoReel).gameObject.SetActive(false); ___screenLevelVideoReel.Stop(); } } } [HarmonyPatch(typeof(Terminal))] public class TerminalPatch { private class CompatibleNounComparer : EqualityComparer<CompatibleNoun> { public override bool Equals(CompatibleNoun x, CompatibleNoun y) { bool flag = ((Object)x.result).name.Equals(((Object)y.result).name, StringComparison.InvariantCultureIgnoreCase); RouteRandomBase.Log.LogInfo((object)$"Comparing {((Object)x.result).name} against {((Object)y.result).name} - result: {flag}"); return flag; } public override int GetHashCode(CompatibleNoun obj) { return ((object)obj.result).GetHashCode(); } } public static TerminalPatch Instance; private static readonly TerminalNode noSuitablePlanetsNode = new TerminalNode { name = "NoSuitablePlanets", displayText = "\nNo suitable planets found.\nConsider route random.\n\n", clearPreviousText = true }; private static readonly TerminalNode hidePlanetHackNode = new TerminalNode { name = "HidePlanetHack", displayText = "\nRouting autopilot to [REDACTED].\nYour new balance is [playerCredits].\n\nPlease enjoy your flight.", clearPreviousText = true }; private static TerminalKeyword routeKeyword; private static TerminalKeyword randomKeyword; private static TerminalKeyword randomFilterWeatherKeyword; private static CompatibleNoun routeRandomCompatibleNoun; private static CompatibleNoun routeRandomFilterWeatherCompatibleNoun; private static TerminalNode routeRendNodeFree; private static TerminalNode routeDineNodeFree; private static TerminalNode routeTitanNodeFree; private static readonly Random rand = new Random(); [HarmonyPostfix] [HarmonyPatch("Awake")] public static void AddNewTerminalWords(Terminal __instance) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown //IL_009d: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Expected O, but got Unknown //IL_00d0: Expected O, but got Unknown try { routeKeyword = __instance.GetKeyword("Route"); randomKeyword = new TerminalKeyword { word = "random", name = "Random", defaultVerb = routeKeyword }; randomFilterWeatherKeyword = new TerminalKeyword { word = "randomfilterweather", name = "RandomFilterWeather", defaultVerb = routeKeyword }; routeRandomCompatibleNoun = new CompatibleNoun { noun = randomKeyword, result = new TerminalNode { name = "routeRandom", buyRerouteToMoon = -1 } }; routeRandomFilterWeatherCompatibleNoun = new CompatibleNoun { noun = randomFilterWeatherKeyword, result = new TerminalNode { name = "routeRandomFilterWeather", buyRerouteToMoon = -1 } }; TerminalNode result = routeKeyword.compatibleNouns.First((CompatibleNoun cn) => ((Object)cn.result).name == "85route").result; routeRendNodeFree = TerminalHelper.MakeRouteMoonNodeFree(result, "85routefree"); TerminalNode result2 = routeKeyword.compatibleNouns.First((CompatibleNoun cn) => ((Object)cn.result).name == "7route").result; routeDineNodeFree = TerminalHelper.MakeRouteMoonNodeFree(result2, "7routefree"); TerminalNode result3 = routeKeyword.compatibleNouns.First((CompatibleNoun cn) => ((Object)cn.result).name == "8route").result; routeTitanNodeFree = TerminalHelper.MakeRouteMoonNodeFree(result3, "8routefree"); TerminalKeyword keyword = __instance.GetKeyword("Moons"); TerminalNode specialKeywordResult = keyword.specialKeywordResult; specialKeywordResult.displayText += "* Random // Routes you to a random moon, regardless of weather conditions\n* RandomFilterWeather // Routes you to a random moon, filtering out disallowed weather conditions\n\n"; __instance.AddKeywords(randomKeyword, randomFilterWeatherKeyword); __instance.AddCompatibleNounsToKeyword("Route", routeRandomCompatibleNoun, routeRandomFilterWeatherCompatibleNoun); } catch { RouteRandomBase.Log.LogError((object)"Failed to add Terminal keywords and compatible nouns!"); } } [HarmonyPostfix] [HarmonyPatch("ParsePlayerSentence")] public static TerminalNode RouteToRandomPlanet(TerminalNode __result, Terminal __instance) { //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) bool flag = ((Object)__result).name == "routeRandom"; bool flag2 = ((Object)__result).name == "routeRandomFilterWeather"; if (flag || flag2) { List<CompatibleNoun> list = routeKeyword.compatibleNouns.Where((CompatibleNoun noun) => noun.ResultIsRealMoon() && noun.ResultIsAffordable()).Distinct(new CompatibleNounComparer()).ToList(); RouteRandomBase.Log.LogInfo((object)$"Num available moons: {list.Count}"); if (flag2) { foreach (CompatibleNoun item in list.ToList()) { LevelWeatherType weatherType = RoutePlanetNameToWeatherType(((Object)item.result).name, __instance.moonsCatalogueList); if (!WeatherIsAllowed(weatherType)) { list.Remove(item); } } RouteRandomBase.Log.LogInfo((object)$"Num available moons after filtering weather: {list.Count}"); } if (RouteRandomBase.ConfigDifferentPlanetEachTime.Value) { list.RemoveAll((CompatibleNoun rpn) => rpn.result.GetNodeAfterConfirmation().NodeRoutesToCurrentOrbitedMoon()); RouteRandomBase.Log.LogInfo((object)$"Num available moons after filtering orbited moon: {list.Count}"); } if (list.Count <= 0) { RouteRandomBase.Log.LogInfo((object)"Couldn't find a planet with suitable weather!"); return noSuitablePlanetsNode; } TerminalNode val = rand.NextFromCollection(list).result; RouteRandomBase.Log.LogInfo((object)("Chosen node: " + ((Object)val).name)); if (RouteRandomBase.ConfigRemoveCostOfCostlyPlanets.Value) { val = TryGetFreeNodeForCostlyPlanetNode(val); RouteRandomBase.Log.LogInfo((object)"Making node free!"); } if (RouteRandomBase.ConfigHidePlanet.Value) { RouteRandomBase.Log.LogInfo((object)"Hiding stuffs >:3"); TerminalNode nodeAfterConfirmation = val.GetNodeAfterConfirmation(); hidePlanetHackNode.buyRerouteToMoon = nodeAfterConfirmation.buyRerouteToMoon; hidePlanetHackNode.itemCost = ((!RouteRandomBase.ConfigRemoveCostOfCostlyPlanets.Value) ? nodeAfterConfirmation.itemCost : 0); return hidePlanetHackNode; } return RouteRandomBase.ConfigSkipConfirmation.Value ? val.GetNodeAfterConfirmation() : val; } return __result; } private static bool WeatherIsAllowed(LevelWeatherType weatherType) { //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_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected I4, but got Unknown return (weatherType - -1) switch { 0 => RouteRandomBase.ConfigAllowMildWeather.Value, 1 => RouteRandomBase.ConfigAllowDustCloudsWeather.Value, 2 => RouteRandomBase.ConfigAllowRainyWeather.Value, 3 => RouteRandomBase.ConfigAllowStormyWeather.Value, 4 => RouteRandomBase.ConfigAllowFoggyWeather.Value, 5 => RouteRandomBase.ConfigAllowFloodedWeather.Value, 6 => RouteRandomBase.ConfigAllowEclipsedWeather.Value, _ => false, }; } private static LevelWeatherType RoutePlanetNameToWeatherType(string routePlanetName, SelectableLevel[] moonCatalogue) { //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) return (LevelWeatherType)(routePlanetName switch { "41route" => moonCatalogue[0].currentWeather, "220route" => moonCatalogue[1].currentWeather, "56route" => moonCatalogue[2].currentWeather, "21route" => moonCatalogue[3].currentWeather, "61route" => moonCatalogue[4].currentWeather, "85route" => moonCatalogue[5].currentWeather, "7route" => moonCatalogue[6].currentWeather, "8route" => moonCatalogue[7].currentWeather, _ => -1, }); } private static TerminalNode TryGetFreeNodeForCostlyPlanetNode(TerminalNode node) { return (TerminalNode)(((Object)node).name switch { "85route" => routeRendNodeFree, "7route" => routeDineNodeFree, "8route" => routeTitanNodeFree, _ => node, }); } } } namespace RouteRandom.Helpers { public static class RandomHelper { public static TSource NextFromCollection<TSource>(this Random rand, IList<TSource> collection) { int index = rand.Next(collection.Count()); return collection[index]; } } public static class TerminalHelper { public static TerminalKeyword GetKeyword(this Terminal terminal, string keywordName) { return terminal.terminalNodes.allKeywords.First((TerminalKeyword kw) => ((Object)kw).name == keywordName); } public static TerminalNode GetNodeAfterConfirmation(this TerminalNode node) { return node.terminalOptions.First((CompatibleNoun cn) => ((Object)cn.noun).name == "Confirm").result; } public static bool NodeRoutesToCurrentOrbitedMoon(this TerminalNode node) { return (Object)(object)StartOfRound.Instance.levels[node.buyRerouteToMoon] == (Object)(object)StartOfRound.Instance.currentLevel; } public static void AddKeyword(this Terminal terminal, TerminalKeyword newKeyword) { terminal.terminalNodes.allKeywords = CollectionExtensions.AddToArray<TerminalKeyword>(terminal.terminalNodes.allKeywords, newKeyword); } public static void AddKeywords(this Terminal terminal, params TerminalKeyword[] newKeywords) { foreach (TerminalKeyword newKeyword in newKeywords) { terminal.AddKeyword(newKeyword); } } public static void AddCompatibleNounToKeyword(this Terminal terminal, string keywordName, CompatibleNoun newCompatibleNoun) { TerminalKeyword val = ((IEnumerable<TerminalKeyword>)terminal.terminalNodes.allKeywords).FirstOrDefault((Func<TerminalKeyword, bool>)((TerminalKeyword kw) => ((Object)kw).name == keywordName)) ?? throw new ArgumentException("Failed to find keyword with name " + keywordName); val.compatibleNouns = CollectionExtensions.AddToArray<CompatibleNoun>(val.compatibleNouns, newCompatibleNoun); } public static void AddCompatibleNounsToKeyword(this Terminal terminal, string keywordName, params CompatibleNoun[] newCompatibleNouns) { foreach (CompatibleNoun newCompatibleNoun in newCompatibleNouns) { terminal.AddCompatibleNounToKeyword(keywordName, newCompatibleNoun); } } public static bool ResultIsRealMoon(this CompatibleNoun compatibleNoun) { return compatibleNoun.result.buyRerouteToMoon == -2; } public static bool ResultIsAffordable(this CompatibleNoun compatibleNoun) { return compatibleNoun.result.itemCost <= 0 || RouteRandomBase.ConfigAllowCostlyPlanets.Value || RouteRandomBase.ConfigRemoveCostOfCostlyPlanets.Value; } public static TerminalNode MakeRouteMoonNodeFree(TerminalNode routeMoonNode, string name) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Expected O, but got Unknown //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Expected O, but got Unknown TerminalNode result = routeMoonNode.terminalOptions[1].result; TerminalNode result2 = new TerminalNode { name = ((Object)result).name + "Free", buyRerouteToMoon = result.buyRerouteToMoon, clearPreviousText = true, displayText = result.displayText, itemCost = 0 }; TerminalNode val = new TerminalNode(); ((Object)val).name = name; val.buyRerouteToMoon = -2; val.clearPreviousText = true; val.displayPlanetInfo = routeMoonNode.displayPlanetInfo; val.displayText = routeMoonNode.displayText; val.itemCost = 0; val.overrideOptions = true; val.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2] { routeMoonNode.terminalOptions[0], new CompatibleNoun { noun = new TerminalKeyword { name = "Confirm", isVerb = true }, result = result2 } }; return val; } } }
LethalCompanyScalingMaster.dll
Decompiled a year agousing System; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using LC_API.ServerAPI; using LethalCompanyModV2.Component; using LethalCompanyScalingMaster; using LethalCompanyScalingMaster.Component; using Microsoft.CodeAnalysis; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LethalCompanyScalingMaster")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A mod for variable and configurable scaling based on the amount of players in game. Fully customaizable and compatible with biggelobbies and only the host needs it.")] [assembly: AssemblyFileVersion("1.4.0.0")] [assembly: AssemblyInformationalVersion("1.4.0")] [assembly: AssemblyProduct("LethalCompanyScalingMaster")] [assembly: AssemblyTitle("LethalCompanyScalingMaster")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } } public static class NetworkManagerPatch { } namespace LethalCompanyModV2.Patches { [HarmonyPatch(typeof(TimeOfDay))] [HarmonyPatch("SetNewProfitQuota")] internal class QuotaPatch { private static bool Prefix() { TimeOfDay instance = TimeOfDay.Instance; Debug.Log((object)"SetNewProfitQuotaPatch"); instance.timesFulfilledQuota++; int num = instance.quotaFulfilled - instance.profitQuota; float num2 = Mathf.Clamp(1f + (float)instance.timesFulfilledQuota * ((float)instance.timesFulfilledQuota / instance.quotaVariables.increaseSteepness), 0f, 10000f); num2 = instance.quotaVariables.baseIncrease * num2; instance.profitQuota = (int)Mathf.Clamp((float)instance.profitQuota + num2, 0f, 1E+09f); instance.quotaFulfilled = 0; _ = instance.totalTime; _ = instance.quotaVariables.deadlineDaysAmount; int num3 = num / 5 + 15 * instance.daysUntilDeadline; Debug.Log((object)"Syncing new profit quota!"); TimeOfDay.Instance.SyncNewProfitQuotaClientRpc(instance.profitQuota, num3, instance.timesFulfilledQuota); return false; } } } namespace LethalCompanyModV2.Component { public class ControlManager : MonoBehaviour { private bool _isMenuOpen; private GUIManager _guiManager; private bool isInitialized; public void Awake() { Debug.LogWarning((object)"Control Manager Started"); _guiManager = new GUIManager(); } public void Update() { if (!isInitialized && !isInitialized && (Object)(object)StartOfRound.Instance != (Object)null && Plugin.GetConnectedPlayers() == 1 && StartOfRound.Instance.fullyLoadedPlayers.Count > 0) { Debug.Log((object)("Fully loaded players count: " + StartOfRound.Instance.fullyLoadedPlayers.Count)); ((MonoBehaviour)this).Invoke("InitializeFunctions", 2f); isInitialized = true; } if (Keyboard.current.ctrlKey.isPressed && ((ButtonControl)Keyboard.current.mKey).wasPressedThisFrame && Plugin.Host) { Debug.Log((object)"Ctrl key held down and 'm' key pressed - Triggering Method2"); Debug.Log((object)("Plugin Host: " + Plugin.Host)); ToggleMenu(); } } private void InitializeFunctions() { ToggleMenu(); Plugin.SaveValues(); } private void ToggleMenu() { if (Plugin.Host) { _isMenuOpen = !_isMenuOpen; if (_isMenuOpen) { Debug.Log((object)"Opening Menu..."); Cursor.lockState = (CursorLockMode)1; Cursor.visible = true; } else { Debug.Log((object)"Closing Menu..."); Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; } } } private void OnGUI() { if (_isMenuOpen) { _guiManager.OnGUI(); } } } public class GUIManager { public static TimeOfDay _tod; private bool _initialized; public static string _playerCountQuotaModifier; public static string _baseQuota; public static string _baseIncreaseInput; public static float _quotaIncreaseSteepness; public static int _deathPenalty; public static string _daysUntilDeadlineInput; private bool _enableAutoUpdatedScaling = true; private string _perPlayerCredits = "15"; public static int _totalStartingCredits; private GUIStyle _currentStyle; private GUIStyle _textFieldStyle; private GUIStyle _titleLabelStyle; private GUIStyle _headerLabelStyle; private bool _showSideMenu; public void OnGUI() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_05fc: Unknown result type (might be due to invalid IL or missing references) //IL_05f5: Unknown result type (might be due to invalid IL or missing references) //IL_0658: Unknown result type (might be due to invalid IL or missing references) //IL_06dd: Unknown result type (might be due to invalid IL or missing references) if (!_initialized) { Init(); } GUILayout.BeginArea(new Rect(10f, 35f, 500f, 600f)); GUI.Box(new Rect(0f, 0f, 520f, 600f), "", _currentStyle); GUILayout.Label("LC - Better Quota Scaler - Eclipse edition", _headerLabelStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("(CTRL + M TO TOGGLE)", Array.Empty<GUILayoutOption>()); GUILayout.Label("Quota Settings", _titleLabelStyle, Array.Empty<GUILayoutOption>()); GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label("Starting Quota", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(100f) }); GUILayout.Label("=", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label("Base Quota", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); GUILayout.Label("+", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label("(", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label("Player Count", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); GUILayout.Label("X", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label("Player Count Modifier", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(125f) }); GUILayout.Label(")", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); if (float.TryParse(_baseQuota, out var result) && float.TryParse(_playerCountQuotaModifier, out var result2)) { GUILayout.Label(((int)(result + (float)Plugin.GetConnectedPlayers() * result2)).ToString(), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(100f) }); } GUILayout.Label("=", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); _baseQuota = FilterNumericInput(GUILayout.TextField(_baseQuota, _textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) })); GUILayout.Label("+", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label("(", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.Label(Plugin.GetConnectedPlayers().ToString(), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); GUILayout.Label("X", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); _playerCountQuotaModifier = FilterNumericInput(GUILayout.TextField(_playerCountQuotaModifier, _textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(125f) })); GUILayout.Label(")", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(15f) }); GUILayout.EndHorizontal(); GUILayout.EndVertical(); if (float.TryParse(_baseQuota, out var result3) && float.TryParse(_playerCountQuotaModifier, out var result4)) { GUILayout.Label("Starting Profit Quota = " + (int)(result3 + (float)Plugin.GetConnectedPlayers() * result4), Array.Empty<GUILayoutOption>()); } GUILayout.Width(400f); GUILayout.Label("Quota increase steepness: " + _quotaIncreaseSteepness, Array.Empty<GUILayoutOption>()); _quotaIncreaseSteepness = Mathf.Round(GUILayout.HorizontalSlider(_quotaIncreaseSteepness, 0f, 10f, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(300f) }) * 2f) / 2f; GUILayout.Label("Quota increase base increase value: " + _tod.quotaVariables.baseIncrease, Array.Empty<GUILayoutOption>()); _baseIncreaseInput = FilterNumericInput(GUILayout.TextField(_baseIncreaseInput, _textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(300f) })); GUILayout.Label("Deadline settings", _titleLabelStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("Deadline: " + _tod.daysUntilDeadline, Array.Empty<GUILayoutOption>()); _daysUntilDeadlineInput = FilterNumericInput(GUILayout.TextField(_daysUntilDeadlineInput, _textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(300f) })); GUILayout.Label("Death Penalty Settings", _titleLabelStyle, Array.Empty<GUILayoutOption>()); _deathPenalty = Mathf.RoundToInt(GUILayout.HorizontalSlider((float)_deathPenalty / 100f, 0f, 1f, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(300f) }) * 100f); string text = _deathPenalty + "%"; GUILayout.Label("Death Penalty: " + text, Array.Empty<GUILayoutOption>()); GUILayout.Label("Per Player Death Penalty: " + text, Array.Empty<GUILayoutOption>()); GUILayout.Label("Max percentage of money you can lose is " + (_deathPenalty * Plugin.GetConnectedPlayers()).ToString("0.00") + "%", Array.Empty<GUILayoutOption>()); GUILayout.Label("Credit/Funds settings", _titleLabelStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("Per Player Starting Credits: " + _perPlayerCredits, Array.Empty<GUILayoutOption>()); _perPlayerCredits = FilterNumericInput(GUILayout.TextField(_perPlayerCredits, _textFieldStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(300f) })); if (float.TryParse(_perPlayerCredits, out var result5)) { _totalStartingCredits = (int)((float)Plugin.GetConnectedPlayers() * result5); GUILayout.Label("Total Starting credits with these settings " + _totalStartingCredits, Array.Empty<GUILayoutOption>()); } GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUI.backgroundColor = (_enableAutoUpdatedScaling ? Color.green : Color.red); if (GUILayout.Button("Auto Update on player join: " + (_enableAutoUpdatedScaling ? "Enabled" : "Disabled"), (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(250f) })) { _enableAutoUpdatedScaling = !_enableAutoUpdatedScaling; Plugin.AutoUpdateQuota = _enableAutoUpdatedScaling; } GUI.backgroundColor = Color.white; if (GUILayout.Button("Save values", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(250f) })) { Plugin.SaveValues(); } GUILayout.EndHorizontal(); if (GUILayout.Button("Show Calculated Values", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(500f) })) { _showSideMenu = !_showSideMenu; } GUILayout.EndArea(); if (_showSideMenu) { GUILayout.BeginArea(new Rect(560f, 10f, 200f, 550f)); GUILayout.BeginVertical(GUIStyle.op_Implicit("box"), Array.Empty<GUILayoutOption>()); GUILayout.Label("Quotas for the next rounds", _titleLabelStyle, Array.Empty<GUILayoutOption>()); for (int i = 1; i <= 10; i++) { int num = CalculateQuotaForRound(i); GUILayout.Label("Round " + i + ": " + num, Array.Empty<GUILayoutOption>()); } GUILayout.EndVertical(); GUILayout.EndArea(); } } private string FilterNumericInput(string input) { if (string.IsNullOrWhiteSpace(input)) { return "0"; } string text = new string(Enumerable.ToArray(Enumerable.Where(input, (char c) => char.IsDigit(c) || c == '.'))); if (string.IsNullOrWhiteSpace(text)) { return "0"; } return text; } private int CalculateQuotaForRound(int round) { QuotaSettings quotaVariables = _tod.quotaVariables; int num = quotaVariables.startingQuota; if (round == 1) { return num; } for (int i = 1; i < round; i++) { float num2 = Mathf.Clamp(1f + (float)i * ((float)i / quotaVariables.increaseSteepness), 0f, 10000f); num2 = quotaVariables.baseIncrease * num2; num = (int)Mathf.Clamp((float)num + num2, 0f, 1E+09f); } return num; } public void Init() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown _tod = TimeOfDay.Instance; Plugin.DeathPenalty = 80 / Plugin.GetConnectedPlayers(); _deathPenalty = 80 / Plugin.GetConnectedPlayers(); if (_currentStyle == null) { _currentStyle = new GUIStyle(GUI.skin.box); _currentStyle.normal.background = MakeTex(2, 2, new Color(0.2f, 0f, 0f, 1f)); _currentStyle.normal.textColor = new Color(1f, 1f, 1f, 1f); } if (_textFieldStyle == null) { _textFieldStyle = new GUIStyle(GUI.skin.textField); } if (_titleLabelStyle == null) { _titleLabelStyle = new GUIStyle(GUI.skin.label); _titleLabelStyle.fontSize = 15; _titleLabelStyle.alignment = (TextAnchor)3; } if (_headerLabelStyle == null) { _headerLabelStyle = new GUIStyle(GUI.skin.label); _headerLabelStyle.fontSize = 24; _headerLabelStyle.alignment = (TextAnchor)4; } _initialized = true; } private Texture2D MakeTex(int width, int height, Color col) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < array.Length; i++) { array[i] = col; } Texture2D val = new Texture2D(width, height); val.SetPixels(array); val.Apply(); return val; } static GUIManager() { _playerCountQuotaModifier = "20"; _baseQuota = "200"; _baseIncreaseInput = "100"; _quotaIncreaseSteepness = 10f; _deathPenalty = 20; _daysUntilDeadlineInput = "3"; _totalStartingCredits = 0; } } } namespace LethalCompanyScalingMaster { [BepInPlugin("LethalCompanyScalingMaster", "LethalCompanyScalingMaster", "1.4.0")] public class Plugin : BaseUnityPlugin { private static bool _loaded; public static int DeadlineAmount; public static int groupCredits; public static bool AutoUpdateQuota = true; private Harmony _harmony; public static bool Host { get; set; } public static int DeathPenalty { get; set; } private void Awake() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin LethalCompanyScalingMaster is starting up..."); _harmony = new Harmony("LethalCompanyScalingMaster"); _harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin LethalCompanyScalingMaster has loaded!"); } private void Start() { Initialize(); } private void OnDestroy() { Initialize(); } private void Initialize() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) if (!_loaded) { GameObject val = new GameObject("DontDestroy"); Object.DontDestroyOnLoad((Object)val); val.AddComponent<ControlManager>(); val.AddComponent<BroadcastingComponent>(); ModdedServer.SetServerModdedOnly(); _loaded = true; } } public static int GetConnectedPlayers() { return StartOfRound.Instance.connectedPlayersAmount + 1; } public static void OnPlayerJoin() { if (AutoUpdateQuota) { SaveValues(); } } public static void SaveValues() { if (float.TryParse(GUIManager._baseQuota, out var result) && float.TryParse(GUIManager._playerCountQuotaModifier, out var result2)) { int num = (int)(result + (float)GetConnectedPlayers() * result2); GUIManager._tod.quotaVariables.startingQuota = num; GUIManager._tod.profitQuota = num; } if (float.TryParse(GUIManager._baseIncreaseInput, out var result3)) { GUIManager._tod.quotaVariables.baseIncrease = result3; } if (int.TryParse(GUIManager._daysUntilDeadlineInput, out var result4)) { DeadlineAmount = result4; GUIManager._tod.quotaVariables.deadlineDaysAmount = result4; } GUIManager._tod.quotaVariables.increaseSteepness = GUIManager._quotaIncreaseSteepness; groupCredits = GUIManager._totalStartingCredits; DeathPenalty = GUIManager._deathPenalty; BroadcastingComponent.BroadcastDeathPenalty(DeathPenalty); UpdateAndSyncValues(); } public static void UpdateAndSyncValues() { TimeOfDay instance = TimeOfDay.Instance; Debug.Log((object)("Updating Profit Quota's " + GetConnectedPlayers())); if (((NetworkBehaviour)instance).IsServer) { Terminal val = Object.FindObjectOfType<Terminal>(); if (!((NetworkBehaviour)val).IsServer) { Debug.Log((object)"This terminal instance is not a server!!!"); } else { Debug.Log((object)"This terminal instance is a server"); val.SyncGroupCreditsClientRpc(groupCredits, val.numberOfItemsInDropship); } instance.SyncNewProfitQuotaClientRpc(instance.profitQuota, 0, instance.timesFulfilledQuota); instance.SyncTimeClientRpc(instance.globalTime, (int)((float)DeadlineAmount * instance.totalTime)); } } } public static class PluginInfo { public const string PLUGIN_GUID = "LethalCompanyScalingMaster"; public const string PLUGIN_NAME = "LethalCompanyScalingMaster"; public const string PLUGIN_VERSION = "1.4.0"; } } namespace LethalCompanyScalingMaster.Patches { [HarmonyPatch(typeof(HUDManager))] [HarmonyPatch("ApplyPenalty")] internal class DeathPenaltyPatch { private static bool Prefix(ref int playersDead, ref int bodiesInsured) { float num = (float)Plugin.DeathPenalty / 100f; Terminal val = Object.FindObjectOfType<Terminal>(); int groupCredits = val.groupCredits; bodiesInsured = Mathf.Max(bodiesInsured, 0); for (int i = 0; i < playersDead - bodiesInsured; i++) { val.groupCredits -= (int)((double)groupCredits * (double)num); } for (int j = 0; j < bodiesInsured; j++) { val.groupCredits -= (int)((double)groupCredits * ((double)num / 2.5)); } if (val.groupCredits < 0) { val.groupCredits = 0; } Debug.Log((object)("Death penalty is:" + num)); ((TMP_Text)HUDManager.Instance.statsUIElements.penaltyAddition).text = $"{playersDead} casualties: -{(float)((double)num * 100.0 * (double)(playersDead - bodiesInsured))}%\n({bodiesInsured} bodies recovered)"; ((TMP_Text)HUDManager.Instance.statsUIElements.penaltyTotal).text = $"DUE: ${groupCredits - val.groupCredits}"; Debug.Log((object)$"New group credits after penalty: {val.groupCredits}"); return false; } } [HarmonyPatch(typeof(HUDManager), "Start")] public static class HUDManagerStartPatch { [HarmonyPrefix] public static void ApplyStartPrefix() { Debug.Log((object)"APPLYING HUDMANAGER PREFIX"); } } [HarmonyPatch(typeof(StartOfRound))] [HarmonyPatch("OnPlayerConnectedClientRpc")] public class OnPlayerConnectedClientRpcPatch { [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "OnPlayerConnectedClientRpc")] private static void Postfix(ulong clientId, int connectedPlayers, int profitQuota) { Plugin.OnPlayerJoin(); } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Awake")] private static void AwakePostFix() { Debug.Log((object)"Starting the patch: Postfix for OnPlayerConnectedClientRpc()"); Plugin.Host = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost; Debug.Log((object)("Plugin host has been set to: " + ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost)); } } } namespace LethalCompanyScalingMaster.Component { public class BroadcastingComponent : MonoBehaviour { private static BroadcastingComponent _instance; public static BroadcastingComponent Instance { get { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown if ((Object)(object)_instance == (Object)null) { GameObject val = new GameObject("(BroadcastingComponent.cs)BroadcastingComponent"); _instance = val.AddComponent<BroadcastingComponent>(); Object.DontDestroyOnLoad((Object)val); } return _instance; } } public static void BroadcastDeathPenalty(int penalty) { Debug.Log((object)("(BroadcastingComponent.cs) Broadcasting new dp value: " + penalty)); Networking.Broadcast(penalty, "death_penalty"); } private void OnEnable() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Debug.Log((object)"(BroadcastingComponent.cs)Broadcasting: Subscribed"); Networking.GetInt = (GotIntEventDelegate)Delegate.Combine((Delegate?)(object)Networking.GetInt, (Delegate?)new GotIntEventDelegate(OnGotInt)); } private void OnDisable() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown Debug.Log((object)"(BroadcastingComponent.cs)Broadcasting: Unsubscribed"); Networking.GetInt = (GotIntEventDelegate)Delegate.Remove((Delegate?)(object)Networking.GetInt, (Delegate?)new GotIntEventDelegate(OnGotInt)); } private void OnGotInt(int data, string signature) { if (signature.Equals("death_penalty")) { Debug.Log((object)("(BroadcastingComponent.cs) Got an int for (" + signature + ") with data: " + data)); UpdateDeathPenalty(data); } } private void UpdateDeathPenalty(int deathPenalty) { Plugin.DeathPenalty = deathPenalty; GUIManager._deathPenalty = deathPenalty; } private void Awake() { if ((Object)(object)_instance == (Object)null) { _instance = this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } else { Debug.Log((object)"Destroying the Broadcasting component"); Object.Destroy((Object)(object)((Component)this).gameObject); } } } }