using System; using System.Collections.Generic; 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 BepInEx.Logging; using BrutalCompanyMinus.Minus; using HarmonyLib; using LobbyCompatibility.Attributes; using Microsoft.CodeAnalysis; using StaticNetcodeLib; using TerminalApi; using TerminalApi.Classes; using Unity.Netcode; using UnityEngine; [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("Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1")] [assembly: AssemblyProduct("BrutalCompanyMinusExtraRebornCurrentEventsCommand")] [assembly: AssemblyTitle("Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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 BrutalCompanyMinusExtraRebornCurrentEventsCommand { [BepInPlugin("Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand", "BrutalCompanyMinusExtraRebornCurrentEventsCommand", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [LobbyCompatibility(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [HarmonyPatch] public class BrutalCompanyMinusExtraRebornCurrentEventsCommand : BaseUnityPlugin { public static BrutalCompanyMinusExtraRebornCurrentEventsCommand Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Instance = this; EventDescriptions.ValidateEvents(); Patch(); CommandInfo val = new CommandInfo(); val.DisplayTextSupplier = EventsCommand; val.Description = "Displays details about current events."; TerminalApi.AddCommand("events", val, (string)null, true); Logger.LogInfo((object)"Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand v1.0.1 has loaded!"); } internal static void Patch() { //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 if (Harmony == null) { Harmony = new Harmony("Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } private static string EventsCommand() { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) List list = new List(); List list2 = Net.eventNames.Select((string name) => MEvent.GetEvent(name)).ToList(); if (list2.Count == 0) { return "No Events To Display"; } foreach (MEvent item in list2) { string text = "=============== " + item.Name() + " ===============\n\n"; if (EventDescriptions.descriptions.ContainsKey(item.Name())) { text = text + EventDescriptions.descriptions[item.Name()] + "\n\n"; } text += string.Format("[ColorHex] [Weight] [Type]\n", item.ColorHex, item.Weight, item.Type); int num = 11; int length = item.Weight.ToString().Length; num -= (int)Mathf.Ceil((float)length / 2f); string text2 = new string(' ', num); int num2 = 12 - (int)Mathf.Floor((float)length / 2f); int length2 = ((object)Unsafe.As(ref item.Type)/*cast due to .constrained prefix*/).ToString().Length; num2 -= (int)Mathf.Ceil((float)length2 / 2f); string text3 = new string(' ', num2); text += $" {item.ColorHex}{text2}{item.Weight}{text3}{item.Type}\n"; text = text + "[Descriptions]:\n" + string.Join("\n", item.Descriptions) + "\n"; text = text + "[EventsToSpawnWith]:\n" + string.Join("\n", item.EventsToSpawnWith) + "\n"; list.Add(text); } return string.Join("\n", list); } [HarmonyPostfix] [HarmonyPatch(typeof(EventManager), "ChooseEvents")] private static void ChooseEvents(List ___currentEvents) { if (NetworkManager.Singleton.IsServer) { Net.SyncEvents(___currentEvents); } } [HarmonyPrefix] [HarmonyPatch(typeof(StartOfRound), "ShipLeave")] private static void OnGameEnd() { if (NetworkManager.Singleton.IsServer) { Net.SyncEvents(new List()); } } } public static class EventDescriptions { public static Dictionary descriptions = new Dictionary { { "BigBonus", "Large sum of credis" }, { "ScrapGalore", "Increased scrap value and amount" }, { "GoldenBars", "Only golden bars will spawn on the map" }, { "BigDelivery", "Spawns a shipment with a bunch of items" }, { "PlentyOutsideScrap", "Spawns scrap outside" }, { "BlackFriday", "Everything will go on sale" }, { "SafeOutside", "Will prevents enemies from spawning outside and certain events" }, { "VeryEarlyShip", "Ship is as early as it can be" }, { "Bounty", "Killing enemies will now reward credits" }, { "Bonus", "Sum of credits" }, { "SmallerMap", "Reduces factory size" }, { "MoreScrap", "Increased scrap amount" }, { "HigherScrapValue", "Increased scrap value" }, { "GoldenFacility", "Only spawns Goldencup, Ring, Goldbar, Fancylamp, Perfumebottle, Painting and Cashregister on the map" }, { "Dentures", "Only spawns teeth on the map" }, { "Pickles", "Only spawns pickles on the map" }, { "Honk", "Only spawns horns on the map" }, { "TransmuteScrapSmall", "Takes any one-handed scrap in map scrap pool and only spawns that" }, { "SmallDelivery", "Spawns a shipment with some items" }, { "ScarceOutsideScrap", "Spawns scrap outside" }, { "FragileEnemies", "Decreases enemy hp" }, { "FullAccess", "All Doors are unlocked and open and big doors are all unlocked, prevents facility ghost." }, { "EarlyShip", "Time will start earlier" }, { "MoreExits", "Spawns entrances and exits" }, { "NoBaboons", "Removes Baboon Hawk" }, { "NoBracken", "Removes Bracken" }, { "NoCoilhead", "Removes Coil Head" }, { "NoDogs", "Removes Eyeless Dog" }, { "NoGiants", "Removes Forest Keeper" }, { "NoHoardingBugs", "Removes Hoarding Bug" }, { "NoJester", "Removes Jester" }, { "NoGhosts", "Removes Ghost Girl and Facility Ghost" }, { "NoLizards", "Removes Spore Lizard" }, { "NoSpiders", "Removes Bunker Spider" }, { "NoThumpers", "Removes Thumper" }, { "NoSnareFleas", "Removes Snare Flea" }, { "NoWorm", "Removes Earth Leviathan" }, { "NoSlimes", "Removes Hygrodere" }, { "NoTurrets", "Removes Turret" }, { "NoLandmines", "Removes Landmine" }, { "NoButlers", "Removes butlers" }, { "NoSpikeTraps", "Removes spiketraps" }, { "Nothing", "Nothing" }, { "Locusts", "Spawns Roaming Locusts" }, { "Birds", "Spawns Manticoils" }, { "Trees", "Spawns Trees" }, { "LeaflessBrownTrees", "Spawns trees without leaves" }, { "LeaflessTrees", "Spawns spooky trees" }, { "Gloomy", "Makes the atmosphere foggy" }, { "HeavyRain", "Makes the atmosphere rainy, flooded and stormy. Triple rain." }, { "HoardingBugs", "Spawns Hoarding bugs outside and inside, comes with Scarce Outside Scrap" }, { "Bees", "Spawns Bees outside" }, { "Landmines", "Increased rates of landmines inside" }, { "Lizard", "Spawns Spore Lizard inside" }, { "Slimes", "Spawns Hygrodere outside and inside" }, { "Thumpers", "Spawns Thumpers inside" }, { "Turrets", "Increased rates of turrets inside" }, { "Spiders", "Spawns Bunker Spiders outside and inside, comes with Leafless Brown Trees" }, { "SnareFleas", "Spawns Snare Fleas inside" }, { "FacilityGhost", "The ghost can open/close bigdoors and doors, mess with lights, mess with the breaker and can lock/unlock doors(Rare)" }, { "OutsideTurrets", "Spawns turrets outside, comes with Trees" }, { "OutsideLandmines", "Spawns Landmines outside" }, { "Dustpans", "Makes the game spawn lot of dustpans" }, { "GrabbableTurrets", "Turns some of the turrets on the map into scrap" }, { "ShipmentFees", "Any shipment's on given moon will deduct credits as a fee" }, { "StrongEnemies", "Increases enemy hp" }, { "KamikazieBugs", "Hoarding bugs will now blow up when angered" }, { "Masked", "Spawned masked enemies" }, { "Butlers", "Will Spawn butlers" }, { "SpikeTraps", "Will spawn spike traps inside" }, { "FlowerSnake", "Will spawn flower snakes inside and outside" }, { "LateShip", "Time will start a little later" }, { "HolidaySeason", "Turns scrap into mystery boxes and eggs and spawns nutcrackers and hoarding bugs inside" }, { "WelcomeToTheFactory", "Makes the game spawn metallic objects only" }, { "ShipLightsFailure", "Breaks the light switch and kills the ship lights" }, { "Nutcracker", "Spawns Nutcrackers outside and inside, comes with Turrets" }, { "Arachnophobia", "Spawns alot of Bunker Spiders outside and inside, comes with Leafless Trees" }, { "Bracken", "Spawns Brackens Inside" }, { "Coilhead", "Spawns Coilheads Inside" }, { "BaboonHorde", "Spawns alot of Baboon Hawks outside" }, { "Dogs", "Spawns Eyeless Dogs outside and inside" }, { "Jester", "Spawns Jesters inside" }, { "LittleGirl", "Spawns Ghost Girls inside" }, { "AntiCoilhead", "Changes Coilhead AI and spawns them inside, comes with Leafless Trees and Gloomy" }, { "BadProduce", "Decreased Scrap Value but Increased Scrap Amount" }, { "TransmuteScrapBig", "Takes any two-handed scrap in map scrap pool and only spawns that" }, { "Warzone", "Acts as Quad event including Turrets, Landmines, Outside Turrets and Outside Landmines and will also come with artillery fire!!" }, { "BugHorde", "Spawns a load of Hoarding Bugs outside and inside, comes with Scarce Outside Scrap" }, { "ForestGiant", "Spawns a Forest Keeper inside" }, { "InsideBees", "Spawns Bees outside and inside" }, { "NutSlayer", "Spawns the Nutslayer inside the facility, kills everything... comes with gloomy, thumpers, spiders and masked." }, { "Hell", "Great reward, but at what cost..." }, { "AllWeather", "Acts as Eclipsed, Stormy, Flooded and Raining all in one day" }, { "Worms", "Will spawn worms inside and outside and snare fleas inside and outside" }, { "OldBirds", "Will spawn old birds and comes with Landmines and Outside Landmines" }, { "VeryLateShip", "The ship arrives at a very late hour!" }, { "GiantsOutside", "Spawns a whole bunch of Giants Outside. Alternative to GiantShowdown" } }; private static readonly FieldInfo EventManagervanillaEvents = AccessTools.Field(typeof(EventManager), "vanillaEvents"); private static readonly FieldInfo EventManagermoddedEvents = AccessTools.Field(typeof(EventManager), "moddedEvents"); public static void ValidateEvents() { List source = ((List)EventManagervanillaEvents.GetValue(null)).Concat((List)EventManagermoddedEvents.GetValue(null)).ToList(); List list = source.Select((MEvent e) => e.Name()).ToList(); foreach (string key in descriptions.Keys) { if (!list.Contains(key)) { BrutalCompanyMinusExtraRebornCurrentEventsCommand.Logger.LogWarning((object)("Descriptions Has Non-Existing Event \"" + key + "\"")); } } foreach (string item in list) { if (!Enumerable.Contains(descriptions.Keys, item)) { BrutalCompanyMinusExtraRebornCurrentEventsCommand.Logger.LogWarning((object)("Descriptions Missing Event \"" + item + "\"")); } } } } [StaticNetcode] public static class Net { public static List eventNames = new List(); [ClientRpc] public static void SyncEventsClientRpc(List eventNames) { Net.eventNames = eventNames; } public static void SyncEvents(List events) { SyncEventsClientRpc(events.Select((MEvent e) => e.Name()).ToList()); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Bknibb.BrutalCompanyMinusExtraRebornCurrentEventsCommand"; public const string PLUGIN_NAME = "BrutalCompanyMinusExtraRebornCurrentEventsCommand"; public const string PLUGIN_VERSION = "1.0.1"; } }