using System;
using System.Collections;
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 AntlerShed.SkinRegistry;
using AntlerShed.SkinRegistry.Events;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Bozoros.Behaviours;
using Bozoros.Compatibility;
using Bozoros.Compatibility.Moons;
using Bozoros.NetcodePatcher;
using Bozoros.Patches;
using Bozoros.Skins;
using DunGen;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLevelLoader;
using Microsoft.CodeAnalysis;
using Mimics;
using Mimics.API;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.VFX;
using VoxxWeatherPlugin.Behaviours;
using itolib.Behaviours.Interactables;
using itolib.Behaviours.Kinematics;
using itolib.Behaviours.Materials;
using itolib.Behaviours.Props;
using itolib.Extensions;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: IgnoresAccessChecksTo("voxx.LethalElementsPlugin")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Bozoros")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Plugin for LethalMatt's Bozoros, adds configuration and some additional stuff.")]
[assembly: AssemblyFileVersion("2.5.3.0")]
[assembly: AssemblyInformationalVersion("2.5.3+7be9307cd92d04b7d85e84669b1860d26953f87d")]
[assembly: AssemblyProduct("Bozoros")]
[assembly: AssemblyTitle("Bozoros")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.5.3.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.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]
[Microsoft.CodeAnalysis.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]
[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 Bozoros
{
public enum BananaPeelDropLevel
{
AllItems = -1,
HeldItem,
NoItems
}
public class Config
{
public ConfigEntry<bool> STREAMER_FRIENDLY { get; private set; }
public ConfigEntry<float> FIREWORK_PARTICLES { get; private set; }
public ConfigEntry<float> CONFETTI_PARTICLES { get; private set; }
public ConfigEntry<float> BALLOON_PARTICLES { get; private set; }
public ConfigEntry<float> FIREWORK_MUSIC_VOLUME { get; private set; }
public ConfigEntry<float> FIREWORK_EXPLOSION_VOLUME { get; private set; }
public ConfigEntry<float> ANNOUNCER_VOLUME { get; private set; }
public ConfigEntry<float> TENT_MUSIC_VOLUME { get; private set; }
public ConfigEntry<float> DROPSHIP_VOLUME { get; private set; }
public ConfigEntry<string> GOOFY_PUFFER_NAMES { get; private set; }
public ConfigEntry<string> CLOWN_GIANT_NAMES { get; private set; }
public ConfigEntry<string> SANTA_BUTLER_NAMES { get; private set; }
public ConfigEntry<bool> BALLOON_INSTRUCTIONS { get; private set; }
public ConfigEntry<int> BALLOON_PRICE { get; private set; }
public ConfigEntry<bool> FERRIS_WHEEL_EXIT { get; private set; }
public ConfigEntry<float> BANANA_MULTIPLIER_INSIDE { get; private set; }
public ConfigEntry<float> BANANA_MULTIPLIER_OUTSIDE { get; private set; }
public ConfigEntry<BananaPeelDropLevel> BANANA_DROPS_ITEMS { get; private set; }
public ConfigEntry<bool> MODIFY_SHIP_NODE { get; private set; }
public ConfigEntry<bool> ADD_DROPSHIP_NODE { get; private set; }
public ConfigEntry<bool> REDUCE_MOTION_SICKNESS { get; private set; }
public ConfigEntry<bool> CIRCUS_FACILITY_MIMICS { get; private set; }
public ConfigEntry<bool> CIRCUS_PANDORAMUS_PORTAL { get; private set; }
public ConfigEntry<bool> CIRCUS_STARLANCERZERO_DOOR { get; private set; }
public Config(ConfigFile cfg)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: 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_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Expected O, but got Unknown
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Expected O, but got Unknown
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Expected O, but got Unknown
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Expected O, but got Unknown
//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
//IL_02aa: Expected O, but got Unknown
//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0301: Expected O, but got Unknown
//IL_0331: Unknown result type (might be due to invalid IL or missing references)
//IL_033b: Expected O, but got Unknown
cfg.SaveOnConfigSet = false;
STREAMER_FRIENDLY = cfg.Bind<bool>("General", "StreamerFriendly", true, "Whether the music is streamer-friendly or not.");
FIREWORK_PARTICLES = cfg.Bind<float>("Particles", "FireworkParticles", 1f, new ConfigDescription("Intensity of firework particles at the end of a clear day.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
CONFETTI_PARTICLES = cfg.Bind<float>("Particles", "ConfettiParticles", 1f, new ConfigDescription("Intensity of confetti particles during eclipsed weather.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
BALLOON_PARTICLES = cfg.Bind<float>("Particles", "BalloonParticles", 1f, new ConfigDescription("Intensity of balloon particles during stormy weather.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
FIREWORK_MUSIC_VOLUME = cfg.Bind<float>("Audio", "FireworkMusicVolume", 1f, new ConfigDescription("Volume level for the firework music at the end of a clear day.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
FIREWORK_EXPLOSION_VOLUME = cfg.Bind<float>("Audio", "FireworkExplosionVolume", 1f, new ConfigDescription("Volume level for the firework explosion sound effects at the end of a clear day.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
ANNOUNCER_VOLUME = cfg.Bind<float>("Audio", "AnnouncerVolume", 2f, new ConfigDescription("Volume level for the announcer voice at the end of each day.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
TENT_MUSIC_VOLUME = cfg.Bind<float>("Audio", "TentMusicVolume", 1f, new ConfigDescription("Volume level for the circus tent music near every entrance.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
DROPSHIP_VOLUME = cfg.Bind<float>("Audio", "DropshipVolume", 1f, new ConfigDescription("Volume level for the dropship's music when delivering items.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f), Array.Empty<object>()));
GOOFY_PUFFER_NAMES = cfg.Bind<string>("Enemies", "GoofyPufferNames", "Steve,Krusty,Ronald,Arthur,Toodles,Jingles,Dusty,Dumbo,Bingo,Whistle,Mittens,Pancake,Freckles,Chester,Oddball,Snuggles,Charlie,Bashful,Flower,Jumbo,Jimbo,Snickers,Pogo,Giggles,Loofy,Blinky,Ruffles,Dinky,Beebo,Chuckles", "A comma-separated list of names for Spore Lizard enemy variants to show in their scan node. Requires restart.");
CLOWN_GIANT_NAMES = cfg.Bind<string>("Enemies", "ClownGiantNames", "Penn,Teller,Houdini,Dante,Copperfield,Blaine,Angel,Borden,Angier,Merlin,Kaito,Oz,Zatara,Mysterio,Riddler,Eisenheim,Gallico,Splendini", "A comma-separated list of names for Forest Giant enemy variants to show in their scan node. Requires restart.");
SANTA_BUTLER_NAMES = cfg.Bind<string>("Enemies", "SantaButlerNames", "Santa Claus,St. Nicholas,Joulupukki,Sinterklaas,Ded Moroz,Julenisse,Mikulás,Shengdan Laoren,Père Noël,Krampus,Knecht Ruprecht,Kriss Kringle", "A comma-separated list of names for Santa Butler enemy variants to show in their scan node. Requires restart.");
BALLOON_INSTRUCTIONS = cfg.Bind<bool>("Mechanics", "BalloonInstructions", true, "Show a one-time notification with instructions on how to operate balloons. Shows once per session, until the game is reopened.");
BALLOON_PRICE = cfg.Bind<int>("Mechanics", "BalloonPrice", 15, new ConfigDescription("Credits required to purchase a one-time balloon shortcut from one of the balloon stands around the map. Can be set to -1 to disable (if you HATE fun).", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-1, 200), Array.Empty<object>()));
FERRIS_WHEEL_EXIT = cfg.Bind<bool>("Mechanics", "FerrisWheelExit", true, "Whether the Fire Exit inside the Ferris Wheel should spawn or not — wormholes may not be immersive!");
BANANA_MULTIPLIER_INSIDE = cfg.Bind<float>("Mechanics", "BananaMultiplierInside", 1f, new ConfigDescription("Multiply inside banana peel hazard spawning curve across the board (minimum and maximum) by this value. Set to 0 to disable banana peels inside.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 3f), Array.Empty<object>()));
BANANA_MULTIPLIER_OUTSIDE = cfg.Bind<float>("Mechanics", "BananaMultiplierOutside", 1f, new ConfigDescription("Multiply outside banana peel hazard spawning curve across the board (minimum and maximum) by this value. Set to 0 to disable banana peels outside.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 3f), Array.Empty<object>()));
BANANA_DROPS_ITEMS = cfg.Bind<BananaPeelDropLevel>("Mechanics", "BananaDropsItems", BananaPeelDropLevel.HeldItem, "Whether slipping on a banana peel causes players to drop items.");
MODIFY_SHIP_NODE = cfg.Bind<bool>("Other", "ModifyShipNode", false, "Increase (subjective) accuracy of the ship's scan node.");
ADD_DROPSHIP_NODE = cfg.Bind<bool>("Other", "AddDropshipNode", true, "Add a scan node to the dropship and allow it to be scanned.");
REDUCE_MOTION_SICKNESS = cfg.Bind<bool>("Other", "ReduceMotionSickness", false, "Attempts to reduce motion sickness a bit. Currently only stops the camera turning when going through the twisted hallway. ");
CIRCUS_FACILITY_MIMICS = cfg.Bind<bool>("Compatibility", "CircusFacilityMimics", true, "Allow x753's Mimics to spawn in Circus Facility.");
CIRCUS_PANDORAMUS_PORTAL = cfg.Bind<bool>("Compatibility", "CircusPandoramusPortal", true, "Enable Circus Facility's special portal for DemonMae's Pandoramus; otherwise it'll just be the same as regular facility. Requires restart.");
CIRCUS_STARLANCERZERO_DOOR = cfg.Bind<bool>("Compatibility", "CircusStarlancerZeroDoor", true, "Enable Circus Facility swapping StarlancerZero's main entrance door. Requires restart.");
BANANA_DROPS_ITEMS.SettingChanged += delegate(object setting, EventArgs _)
{
if (Plugin.BananaPeelInside != null && !((Object)(object)Plugin.BananaPeelInside.prefabToSpawn == (Object)null))
{
Transform val = Plugin.BananaPeelInside.prefabToSpawn.transform.Find("BananaLauncher");
PlayerLauncher val3 = default(PlayerLauncher);
if (setting is ConfigEntry<BananaPeelDropLevel> val2 && (Object)(object)val != (Object)null && ((Component)val).TryGetComponent<PlayerLauncher>(ref val3))
{
val3.dropHeldItemAtStart = val2.Value < BananaPeelDropLevel.NoItems;
val3.dropPlayerItemsAtEnd = val2.Value < BananaPeelDropLevel.HeldItem;
}
}
};
ClearOrphanedEntries(cfg);
cfg.SaveOnConfigSet = true;
cfg.Save();
}
private static void ClearOrphanedEntries(ConfigFile config)
{
PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
((Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(config))?.Clear();
}
}
[BepInDependency("imabatby.lethallevelloader", "1.4.0")]
[BepInDependency("pacoito.itolib", "0.2.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("LethalMatt.Bozoros", "BozorosPlugin", "2.5.3")]
public class Plugin : BaseUnityPlugin
{
public const string PLUGIN_GUID = "LethalMatt.Bozoros";
public const string PLUGIN_NAME = "BozorosPlugin";
public const string VERSION = "2.5.3";
internal static ManualLogSource StaticLogger { get; private set; }
internal static Harmony Harmony { get; private set; }
public static Config Settings { get; private set; }
public static AssetBundle? BozorosBundle { get; private set; }
public static ExtendedLevel? BozorosExtendedLevel { get; private set; }
public static ExtendedDungeonFlow? CircusFacilityExtendedDungeon { get; private set; }
public static GameObject? GrabbableBalloon { get; private set; }
public static SpawnableMapObject? BananaPeelInside { get; private set; }
public static SpawnableOutsideObjectWithRarity? BananaPeelOutside { get; private set; }
private void Awake()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Expected O, but got Unknown
StaticLogger = ((BaseUnityPlugin)this).Logger;
try
{
Settings = new Config(((BaseUnityPlugin)this).Config);
Harmony = new Harmony("LethalMatt.Bozoros");
NetcodePatcher();
LoadAssets();
Harmony.PatchAll(typeof(LoadPatch));
Harmony.PatchAll(typeof(PopcornNestPatch));
Harmony.PatchAll(typeof(BananaPeelInsidePatch));
StaticLogger.LogInfo((object)"'BozorosPlugin' loaded!");
}
catch (Exception arg)
{
StaticLogger.LogError((object)string.Format("Error while initializing '{0}': {1}", "BozorosPlugin", arg));
}
}
private static void LoadAssets()
{
AssetBundleLoader.AddOnExtendedModLoadedListener((Action<ExtendedMod>)delegate(ExtendedMod bozorosExtended)
{
if (bozorosExtended.ExtendedLevels.Count > 0 && (Object)(object)bozorosExtended.ExtendedLevels[0] != (Object)null)
{
BozorosExtendedLevel = bozorosExtended.ExtendedLevels[0];
BananaPeelOutside = ((IEnumerable<SpawnableOutsideObjectWithRarity>)BozorosExtendedLevel.SelectableLevel.spawnableOutsideObjects).FirstOrDefault((Func<SpawnableOutsideObjectWithRarity, bool>)((SpawnableOutsideObjectWithRarity outsideObject) => (Object)(object)outsideObject?.spawnableObject != (Object)null && (Object)(object)outsideObject.spawnableObject.prefabToSpawn != (Object)null && string.CompareOrdinal(((Object)outsideObject.spawnableObject.prefabToSpawn).name, "BananaPeelSpawn") == 0));
}
else if ((Object)(object)BozorosExtendedLevel == (Object)null)
{
StaticLogger.LogError((object)"Could not load Bozoros... ExtendedLevel not found!");
}
if (bozorosExtended.ExtendedDungeonFlows.Count > 0 && (Object)(object)bozorosExtended.ExtendedDungeonFlows[0] != (Object)null)
{
CircusFacilityExtendedDungeon = bozorosExtended.ExtendedDungeonFlows[0];
BananaPeelInside = ((IEnumerable<SpawnableMapObject>)CircusFacilityExtendedDungeon.SpawnableMapObjects).FirstOrDefault((Func<SpawnableMapObject, bool>)((SpawnableMapObject hazard) => hazard != null && (Object)(object)hazard.prefabToSpawn != (Object)null && string.CompareOrdinal(((Object)hazard.prefabToSpawn).name, "BananaPeel") == 0));
if (BananaPeelInside != null)
{
Transform val = BananaPeelInside.prefabToSpawn.transform.Find("BananaLauncher");
PlayerLauncher val2 = default(PlayerLauncher);
if ((Object)(object)val != (Object)null && ((Component)val).TryGetComponent<PlayerLauncher>(ref val2))
{
val2.dropHeldItemAtStart = Settings.BANANA_DROPS_ITEMS.Value < BananaPeelDropLevel.NoItems;
val2.dropPlayerItemsAtEnd = Settings.BANANA_DROPS_ITEMS.Value < BananaPeelDropLevel.HeldItem;
LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(BananaPeelInside.prefabToSpawn);
}
PrefabSpawner val3 = default(PrefabSpawner);
NetworkObject prefabToSpawn = default(NetworkObject);
if ((Object)(object)BananaPeelOutside?.spawnableObject != (Object)null && (Object)(object)BananaPeelOutside.spawnableObject.prefabToSpawn != (Object)null && BananaPeelOutside.spawnableObject.prefabToSpawn.TryGetComponent<PrefabSpawner>(ref val3) && BananaPeelInside.prefabToSpawn.TryGetComponent<NetworkObject>(ref prefabToSpawn))
{
val3.prefabToSpawn = prefabToSpawn;
}
}
}
else if ((Object)(object)CircusFacilityExtendedDungeon == (Object)null)
{
StaticLogger.LogError((object)"Could not load CircusFacility... ExtendedDungeonFlow not found!");
}
}, "LethalMatt", "Bozoros");
AssetBundleLoader.AddOnLethalBundleLoadedListener((Action<AssetBundle>)delegate(AssetBundle assetBundle)
{
BozorosBundle = assetBundle;
GrabbableBalloon = assetBundle.LoadAsset<GameObject>("GrabbableBalloon.prefab");
if ((Object)(object)GrabbableBalloon != (Object)null)
{
LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(GrabbableBalloon);
}
SnozorosEnabler.IcyLakePrefab = assetBundle.LoadAsset<GameObject>("Ice_Pond.prefab");
if ((Object)(object)SnozorosEnabler.IcyLakePrefab != (Object)null)
{
LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(SnozorosEnabler.IcyLakePrefab);
}
}, "bozoros.lethalbundle");
if (EnemySkinRegistryCompatibility.Enabled)
{
EnemySkinRegistryCompatibility.LoadSkins();
EnemySkinRegistryCompatibility.RegisterSkins();
}
if (MimicsCompatibility.Enabled)
{
MimicsCompatibility.RegisterCircusMimic();
}
if (Settings.CIRCUS_PANDORAMUS_PORTAL.Value)
{
PandoramusCompatibility.RegisterCompat();
}
if (Settings.CIRCUS_STARLANCERZERO_DOOR.Value)
{
StarlancerZeroCompatibility.RegisterCompat();
}
}
private static void NetcodePatcher()
{
Type[] array;
try
{
array = Assembly.GetExecutingAssembly().GetTypes();
}
catch (ReflectionTypeLoadException ex)
{
array = ex.Types.Where((Type type) => type != null).ToArray();
}
Type[] array2 = array;
foreach (Type type2 in array2)
{
MethodInfo[] methods = type2.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
foreach (MethodInfo methodInfo in methods)
{
if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0)
{
methodInfo.Invoke(null, null);
}
}
}
}
}
}
namespace Bozoros.Skins
{
internal sealed class CircusMimic : MimicEventHandler
{
public static GameObject? CircusMimicPrefab { get; internal set; }
public override string ModGUID => "LethalMatt.Bozoros";
public override bool IsMyInteriorLoaded => (Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null && Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon;
public override int Priority => 100;
public override bool OverrideDefaultImperfectionCreation(MimicDoor mimicDoor, Doorway doorway)
{
return false;
}
public override void OnMimicCreated(MimicDoor mimicDoor, Doorway doorway)
{
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
((MimicEventHandler)this).OnMimicCreated(mimicDoor, doorway);
if (!((Object)(object)CircusMimicPrefab == (Object)null))
{
Object.Instantiate<GameObject>(CircusMimicPrefab, ((Component)mimicDoor).transform);
Transform val = ((Component)mimicDoor).transform.Find("Armature/Frame");
if ((Object)(object)val != (Object)null)
{
((Component)val).transform.SetLocalPositionAndRotation(new Vector3(0f, -0.65f, 0f), Quaternion.Euler(new Vector3(90f, 0f, 0f)));
}
((Component)mimicDoor).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
Transform val2 = ((Component)mimicDoor).transform.Find("Armature/Door");
if ((Object)(object)val2 != (Object)null)
{
((Component)val2).gameObject.SetActive(false);
}
Transform val3 = ((Component)mimicDoor).transform.Find("Light");
if ((Object)(object)val3 != (Object)null)
{
((Component)val3).gameObject.SetActive(false);
}
}
}
public override void OnMimicCreateImperfections(MimicDoor mimicDoor)
{
((MimicEventHandler)this).OnMimicCreateImperfections(mimicDoor);
}
public override void OnMimicAttackStart(MimicDoor mimicDoor, PlayerControllerB playerToAttack)
{
((MimicEventHandler)this).OnMimicAttackStart(mimicDoor, playerToAttack);
Transform val = ((Component)mimicDoor).transform.Find("CircusWallDoorMimic(Clone)");
Animator val2 = default(Animator);
if ((Object)(object)val != (Object)null && ((Component)val.GetChild(0).GetChild(1)).TryGetComponent<Animator>(ref val2))
{
val2.SetTrigger("Attack");
}
}
public override void OnMimicAttackEnd(MimicDoor mimicDoor)
{
((MimicEventHandler)this).OnMimicAttackEnd(mimicDoor);
}
}
internal sealed class ClownGiant : Skin, Skinner
{
public string Label => "Clown Giant";
public string Id => "LethalMatt.Bozoros.ClownGiant";
public string EnemyId => "LethalCompany.ForestKeeper";
public Texture2D Icon => (Texture2D)(((Object)(object)EnemySkinRegistryCompatibility.BozorosIcon != (Object)null) ? ((object)EnemySkinRegistryCompatibility.BozorosIcon) : ((object)Texture2D.blackTexture));
public static Material? ClownGiantMaterial { get; internal set; }
public static GameObject? ClownHair { get; internal set; }
public static GameObject? ClownNose { get; internal set; }
public static List<string> ClownGiantNames { get; internal set; } = new List<string>();
public static Random? Random { get; internal set; }
public Skinner CreateSkinner()
{
return (Skinner)(object)new ClownGiant();
}
public void Apply(GameObject enemy)
{
ForestGiantAI val = default(ForestGiantAI);
if ((Object)(object)ClownGiantMaterial == (Object)null || (Object)(object)ClownNose == (Object)null || (Object)(object)ClownHair == (Object)null || (Object)(object)enemy == (Object)null || !enemy.TryGetComponent<ForestGiantAI>(ref val))
{
return;
}
Transform val2 = ((Component)val).transform.Find("FGiantModelContainer");
if ((Object)(object)val2 == (Object)null)
{
return;
}
SkinnedMeshRenderer val3 = default(SkinnedMeshRenderer);
for (int i = 0; i < 3; i++)
{
Transform child = val2.GetChild(i);
if ((Object)(object)child != (Object)null && ((Component)child).TryGetComponent<SkinnedMeshRenderer>(ref val3))
{
((Renderer)val3).sharedMaterial = ClownGiantMaterial;
}
}
Transform val4 = val2.Find("AnimContainer/metarig/spine/spine.003");
if ((Object)(object)val4 != (Object)null)
{
Object.Instantiate<GameObject>(ClownHair, val4);
Object.Instantiate<GameObject>(ClownNose, val4);
}
Transform child2 = ((Component)val).transform.GetChild(1);
ScanNodeProperties val5 = default(ScanNodeProperties);
if (ClownGiantNames.Count > 0 && (Object)(object)child2 != (Object)null && ((Component)child2).TryGetComponent<ScanNodeProperties>(ref val5))
{
val5.headerText = ClownGiantNames[Random?.Next(0, ClownGiantNames.Count) ?? 0] ?? "";
val5.subText = "Clown Giant";
}
}
public void Remove(GameObject enemy)
{
}
}
internal sealed class GoofyPuffer : Skin, Skinner
{
public string Label => "Goofy Puffer";
public string Id => "LethalMatt.Bozoros.GoofyPuffer";
public string EnemyId => "LethalCompany.SporeLizard";
public Texture2D Icon => (Texture2D)(((Object)(object)EnemySkinRegistryCompatibility.BozorosIcon != (Object)null) ? ((object)EnemySkinRegistryCompatibility.BozorosIcon) : ((object)Texture2D.blackTexture));
public static Material? GoofyPufferMaterial { get; internal set; }
public static List<string> GoofyPufferNames { get; internal set; } = new List<string>();
public static Random? Random { get; internal set; }
public Skinner CreateSkinner()
{
return (Skinner)(object)new GoofyPuffer();
}
public void Apply(GameObject enemy)
{
PufferAI val = default(PufferAI);
if ((Object)(object)GoofyPufferMaterial == (Object)null || (Object)(object)enemy == (Object)null || !enemy.TryGetComponent<PufferAI>(ref val))
{
return;
}
Transform val2 = ((Component)val).transform.Find("PufferModel/BezierCurve");
if (!((Object)(object)val2 == (Object)null))
{
SkinnedMeshRenderer val3 = default(SkinnedMeshRenderer);
if (((Component)val2).TryGetComponent<SkinnedMeshRenderer>(ref val3))
{
((Renderer)val3).sharedMaterial = GoofyPufferMaterial;
}
Transform child = ((Component)val).transform.GetChild(1);
ScanNodeProperties val4 = default(ScanNodeProperties);
if (GoofyPufferNames.Count > 0 && (Object)(object)child != (Object)null && ((Component)child).TryGetComponent<ScanNodeProperties>(ref val4))
{
val4.headerText = GoofyPufferNames[Random?.Next(0, GoofyPufferNames.Count) ?? 0] ?? "";
val4.subText = "Goofy Puffer";
}
}
}
public void Remove(GameObject enemy)
{
}
}
internal sealed class SantaButler : Skin, Skinner, ButlerEventHandler, EnemyEventHandler
{
public string Label => "Santa Butler";
public string Id => "LethalMatt.Bozoros.SantaButler";
public string EnemyId => "LethalCompany.Butler";
public Texture2D Icon => (Texture2D)(((Object)(object)EnemySkinRegistryCompatibility.BozorosIcon != (Object)null) ? ((object)EnemySkinRegistryCompatibility.BozorosIcon) : ((object)Texture2D.blackTexture));
public static Mesh? CandyCaneMesh { get; internal set; }
public static Material? CandyCaneMaterial { get; internal set; }
public static GameObject? CandyCaneKnife { get; internal set; }
public static Material? SantaMaterial { get; internal set; }
public static GameObject? SantaHat { get; internal set; }
public static Texture2D? GrinchHornetsTexture { get; internal set; }
public static List<string> SantaButlerNames { get; internal set; } = new List<string>();
public static Random? Random { get; internal set; }
public Skinner CreateSkinner()
{
return (Skinner)(object)new SantaButler();
}
public void Apply(GameObject enemy)
{
ButlerEnemyAI val = default(ButlerEnemyAI);
if ((Object)(object)SantaMaterial == (Object)null || (Object)(object)CandyCaneMesh != (Object)null || (Object)(object)CandyCaneMaterial != (Object)null || (Object)(object)enemy == (Object)null || !enemy.TryGetComponent<ButlerEnemyAI>(ref val) || string.CompareOrdinal(((Object)val).name.Substring(0, 4), "Ross") == 0)
{
return;
}
Transform val2 = ((Component)val).transform.Find("MeshContainer");
if ((Object)(object)val2 == (Object)null)
{
return;
}
SkinnedMeshRenderer val3 = default(SkinnedMeshRenderer);
for (int i = 0; i < 3; i++)
{
Transform child = val2.GetChild(i);
if ((Object)(object)child != (Object)null && ((Component)child).TryGetComponent<SkinnedMeshRenderer>(ref val3))
{
((Renderer)val3).sharedMaterial = SantaMaterial;
}
}
Transform val4 = val2.Find("Rig 1/Arms/RightArm/upperRightArmContainer/upper_arm.R_target/Knife");
MeshFilter val5 = default(MeshFilter);
MeshRenderer val6 = default(MeshRenderer);
if ((Object)(object)val4 != (Object)null && ((Component)val4).TryGetComponent<MeshFilter>(ref val5) && ((Component)val4).TryGetComponent<MeshRenderer>(ref val6))
{
val5.sharedMesh = CandyCaneMesh;
((Renderer)val6).sharedMaterial = CandyCaneMaterial;
}
if ((Object)(object)CandyCaneKnife != (Object)null)
{
Transform val7 = ((Component)val).transform.Find("BloodStabParticle");
if ((Object)(object)val7 != (Object)null)
{
Object.Destroy((Object)(object)((Component)val7).gameObject);
}
GameObject val8 = Object.Instantiate<GameObject>(((Component)CandyCaneKnife.transform.GetChild(2)).gameObject, ((Component)val).transform, false);
val.stabBloodParticle = val8.GetComponent<ParticleSystem>();
val.knifePrefab = CandyCaneKnife;
}
Transform val9 = val2.Find("metarig/spine/spine.001/NeckContainer/spine.004/face");
if ((Object)(object)val9 != (Object)null)
{
Object.Instantiate<GameObject>(SantaHat, val9);
}
Transform val10 = ((Component)val).transform.Find("ScanNode");
ScanNodeProperties val11 = default(ScanNodeProperties);
if (SantaButlerNames.Count > 0 && (Object)(object)val10 != (Object)null && ((Component)val10).TryGetComponent<ScanNodeProperties>(ref val11))
{
val11.headerText = SantaButlerNames[Random?.Next(0, SantaButlerNames.Count) ?? 0] ?? "";
val11.subText = "Santa Butler";
}
EnemySkinRegistry.RegisterEnemyEventHandler((EnemyAI)(object)val, (EnemyEventHandler)(object)this);
}
public void OnSpawnHornets(ButlerEnemyAI instance, ButlerBeesEnemyAI hornets)
{
if (string.CompareOrdinal(((Object)instance).name.Substring(0, 4), "Ross") != 0)
{
Transform child = ((Component)hornets).transform.GetChild(0);
ScanNodeProperties val = default(ScanNodeProperties);
if ((Object)(object)child != (Object)null && ((Component)child).TryGetComponent<ScanNodeProperties>(ref val))
{
val.headerText = "Grinch Particles";
}
VisualEffect val2 = default(VisualEffect);
if ((Object)(object)GrinchHornetsTexture != (Object)null && ((Component)((Component)hornets).transform.Find("BugSwarmParticle")).TryGetComponent<VisualEffect>(ref val2))
{
val2.SetTexture("BugTexture", (Texture)(object)GrinchHornetsTexture);
}
}
}
public void Remove(GameObject enemy)
{
}
}
}
namespace Bozoros.Patches
{
[HarmonyPatch(typeof(RoundManager), "SpawnMapObjects")]
[HarmonyPriority(100)]
internal sealed class BananaPeelInsidePatch
{
[HarmonyPrefix]
private static void SpawnMapObjectsPre(RoundManager __instance, out Keyframe[] __state)
{
__state = Array.Empty<Keyframe>();
float value = Plugin.Settings.BANANA_MULTIPLIER_INSIDE.Value;
if (!((NetworkBehaviour)__instance).IsHost || Plugin.BananaPeelInside == null)
{
return;
}
__state = Plugin.BananaPeelInside.numberToSpawn.keys;
if ((((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null && Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon) || ((Object)(object)Plugin.BozorosExtendedLevel != (Object)null && Plugin.BozorosExtendedLevel.IsCurrentLevel)) && value != 1f)
{
Keyframe[] keys = Plugin.BananaPeelInside.numberToSpawn.keys;
for (int i = 0; i < keys.Length; i++)
{
ref Keyframe reference = ref keys[i];
((Keyframe)(ref reference)).value = ((Keyframe)(ref reference)).value * value;
}
Plugin.BananaPeelInside.numberToSpawn.keys = keys;
}
if (!((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null) || Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon || !((Object)(object)Plugin.BozorosExtendedLevel != (Object)null) || !Plugin.BozorosExtendedLevel.IsCurrentLevel)
{
return;
}
List<SpawnableMapObject> list = __instance.currentLevel.spawnableMapObjects.ToList();
if (list.Contains(Plugin.BananaPeelInside))
{
return;
}
SelectableLevel currentLevel = __instance.currentLevel;
List<SpawnableMapObject> list2 = list;
int num = 0;
SpawnableMapObject[] array = (SpawnableMapObject[])(object)new SpawnableMapObject[1 + list2.Count];
foreach (SpawnableMapObject item in list2)
{
array[num] = item;
num++;
}
array[num] = Plugin.BananaPeelInside;
currentLevel.spawnableMapObjects = array;
if ((Object)(object)__instance.dungeonGenerator != (Object)null && (Object)(object)__instance.dungeonGenerator.Root != (Object)null)
{
RandomMapObject[] componentsInChildren = __instance.dungeonGenerator.Root.GetComponentsInChildren<RandomMapObject>();
RandomMapObject[] array2 = componentsInChildren;
foreach (RandomMapObject val in array2)
{
val.spawnablePrefabs.Add(Plugin.BananaPeelInside.prefabToSpawn);
}
}
}
[HarmonyPostfix]
private static void SpawnMapObjectsPost(RoundManager __instance, Keyframe[] __state)
{
if (!((NetworkBehaviour)__instance).IsHost || Plugin.BananaPeelInside == null)
{
return;
}
if ((((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null && Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon) || ((Object)(object)Plugin.BozorosExtendedLevel != (Object)null && Plugin.BozorosExtendedLevel.IsCurrentLevel)) && Plugin.Settings.BANANA_MULTIPLIER_INSIDE.Value != 1f)
{
Plugin.BananaPeelInside.numberToSpawn.keys = __state;
}
if ((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null && !Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon && (Object)(object)Plugin.BozorosExtendedLevel != (Object)null && Plugin.BozorosExtendedLevel.IsCurrentLevel)
{
List<SpawnableMapObject> list = __instance.currentLevel.spawnableMapObjects.ToList();
if (list.Remove(Plugin.BananaPeelInside))
{
__instance.currentLevel.spawnableMapObjects = list.ToArray();
}
}
}
}
[HarmonyPatch]
internal sealed class LoadPatch
{
public static bool FirstLoad { get; private set; } = true;
public static event Action? OnFinishGeneratingLevelPost;
public static event Action? OnFinishGeneratingNewLevelClientRpcPost;
[HarmonyPatch(typeof(RoundManager), "FinishGeneratingLevel")]
[HarmonyPostfix]
private static void FinishGeneratingLevelPost()
{
LoadPatch.OnFinishGeneratingLevelPost?.Invoke();
}
[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
[HarmonyPostfix]
private static void FinishGeneratingNewLevelClientRpcPost()
{
LoadPatch.OnFinishGeneratingNewLevelClientRpcPost?.Invoke();
}
[HarmonyPatch(typeof(MenuManager), "Start")]
[HarmonyPrefix]
private static void MenuManagerStartPre()
{
if (FirstLoad)
{
FirstLoad = false;
if (LethalElementsCompatibility.Enabled)
{
LethalElementsCompatibility.RegisterSnozoros();
}
}
}
}
[HarmonyPatch]
internal sealed class PopcornNestPatch
{
public static List<Nest> AvailableNestLocations { get; internal set; } = new List<Nest>();
public static PopcornNests? PopcornNestsInstance { get; internal set; }
[HarmonyPatch(typeof(RedLocustBees), "Start")]
[HarmonyPostfix]
private static void RelocateNest(RedLocustBees __instance, GrabbableObject ___hive)
{
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)Plugin.BozorosExtendedLevel == (Object)null) && Plugin.BozorosExtendedLevel.IsCurrentLevel)
{
Transform child = ((Component)__instance).transform.GetChild(0);
ScanNodeProperties val = default(ScanNodeProperties);
if ((Object)(object)child != (Object)null && ((Component)child).TryGetComponent<ScanNodeProperties>(ref val))
{
val.headerText = "Kernel Guardians";
}
Transform val2 = (((Object)(object)___hive != (Object)null) ? ((Component)___hive).transform.GetChild(0) : null);
ScanNodeProperties val3 = default(ScanNodeProperties);
if ((Object)(object)val2 != (Object)null && ((Component)val2).TryGetComponent<ScanNodeProperties>(ref val3))
{
val3.headerText = "...Popcorn?";
}
NetworkObject val4 = default(NetworkObject);
NetworkObject val5 = default(NetworkObject);
if (((NetworkBehaviour)__instance).IsHost && !((Object)(object)___hive == (Object)null) && (Object)(object)PopcornNestsInstance != (Object)null && ((Component)___hive).TryGetComponent<NetworkObject>(ref val4) && ((Component)__instance).TryGetComponent<NetworkObject>(ref val5))
{
PopcornNestsInstance.RelocateNestServerRpc(NetworkObjectReference.op_Implicit(val4), NetworkObjectReference.op_Implicit(val5));
}
}
}
}
}
namespace Bozoros.Compatibility
{
internal sealed class EnemySkinRegistryCompatibility
{
private static bool? _enabled;
public static Texture2D? BozorosIcon { get; private set; }
public static bool Enabled
{
get
{
bool valueOrDefault = _enabled.GetValueOrDefault();
if (!_enabled.HasValue)
{
valueOrDefault = Chainloader.PluginInfos.ContainsKey("antlershed.lethalcompany.enemyskinregistry");
_enabled = valueOrDefault;
}
return _enabled.Value;
}
}
internal static void LoadSkins()
{
AssetBundleLoader.AddOnLethalBundleLoadedListener((Action<AssetBundle>)delegate(AssetBundle assetBundle)
{
BozorosIcon = assetBundle.LoadAsset<Texture2D>("BozorosIcon.png");
GoofyPuffer.GoofyPufferMaterial = assetBundle.LoadAsset<Material>("GoofyPufferMat.mat");
ClownGiant.ClownGiantMaterial = assetBundle.LoadAsset<Material>("ClownGiantMat.mat");
ClownGiant.ClownHair = assetBundle.LoadAsset<GameObject>("ClownHair.prefab");
ClownGiant.ClownNose = assetBundle.LoadAsset<GameObject>("ClownNose.prefab");
SantaButler.CandyCaneMesh = assetBundle.LoadAsset<Mesh>("Xmas_CandyCane_Knife.fbx");
SantaButler.CandyCaneMaterial = assetBundle.LoadAsset<Material>("CandyCaneMat.mat");
SantaButler.CandyCaneKnife = assetBundle.LoadAsset<GameObject>("CandyCaneKnife.prefab");
SantaButler.SantaMaterial = assetBundle.LoadAsset<Material>("Xmas_SantaMat.mat");
SantaButler.SantaHat = assetBundle.LoadAsset<GameObject>("Xmas_SantaHat.prefab");
SantaButler.GrinchHornetsTexture = assetBundle.LoadAsset<Texture2D>("Xmas_GrinchHornets.png");
}, "bozoros.lethalbundle");
if (Plugin.Settings.GOOFY_PUFFER_NAMES.Value.Length > 0)
{
GoofyPuffer.GoofyPufferNames = Plugin.Settings.GOOFY_PUFFER_NAMES.Value.Split(',').ToList();
LoadPatch.OnFinishGeneratingLevelPost += delegate
{
GoofyPuffer.Random = new Random(StartOfRound.Instance.randomMapSeed + 1);
};
}
if (Plugin.Settings.CLOWN_GIANT_NAMES.Value.Length > 0)
{
ClownGiant.ClownGiantNames = Plugin.Settings.CLOWN_GIANT_NAMES.Value.Split(',').ToList();
LoadPatch.OnFinishGeneratingLevelPost += delegate
{
ClownGiant.Random = new Random(StartOfRound.Instance.randomMapSeed + 2);
};
}
if (Plugin.Settings.SANTA_BUTLER_NAMES.Value.Length > 0)
{
SantaButler.SantaButlerNames = Plugin.Settings.SANTA_BUTLER_NAMES.Value.Split(',').ToList();
LoadPatch.OnFinishGeneratingLevelPost += delegate
{
SantaButler.Random = new Random(StartOfRound.Instance.randomMapSeed + 3);
};
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
internal static void RegisterSkins()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: 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_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
EnemySkinRegistry.RegisterSkin((Skin)(object)new GoofyPuffer(), (DefaultSkinConfigData?)new DefaultSkinConfigData((DefaultSkinConfigEntry[])(object)new DefaultSkinConfigEntry[2]
{
new DefaultSkinConfigEntry("circus", 1f),
new DefaultSkinConfigEntry("fun", 1f)
}, 0f, 0f));
EnemySkinRegistry.RegisterSkin((Skin)(object)new ClownGiant(), (DefaultSkinConfigData?)new DefaultSkinConfigData((DefaultSkinConfigEntry[])(object)new DefaultSkinConfigEntry[2]
{
new DefaultSkinConfigEntry("circus", 1f),
new DefaultSkinConfigEntry("fun", 1f)
}, 0f, 0f));
EnemySkinRegistry.RegisterSkin((Skin)(object)new SantaButler(), (DefaultSkinConfigData?)new DefaultSkinConfigData((DefaultSkinConfigEntry[])(object)new DefaultSkinConfigEntry[1]
{
new DefaultSkinConfigEntry("jolly", 1f)
}, 0f, 0f));
}
}
internal sealed class LethalElementsCompatibility
{
private static bool? _enabled;
public static bool Enabled
{
get
{
bool valueOrDefault = _enabled.GetValueOrDefault();
if (!_enabled.HasValue)
{
valueOrDefault = Chainloader.PluginInfos.ContainsKey("voxx.LethalElementsPlugin");
_enabled = valueOrDefault;
}
return _enabled.Value;
}
}
internal static void RegisterSnozoros()
{
if ((Object)(object)Plugin.BozorosExtendedLevel == (Object)null)
{
return;
}
Plugin.BozorosExtendedLevel.LevelEvents.onLevelLoaded.AddListener((Action)delegate
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
SelectableLevel selectableLevel = Plugin.BozorosExtendedLevel.SelectableLevel;
string text = $"{selectableLevel.currentWeather}";
if (text.Contains("Snowfall") || text.Contains("Blizzard"))
{
SpawnableOutsideObjectWithRarity[] spawnableOutsideObjects = selectableLevel.spawnableOutsideObjects;
foreach (SpawnableOutsideObjectWithRarity val in spawnableOutsideObjects)
{
if ((Object)(object)val.spawnableObject != (Object)null && ((Object)val.spawnableObject).name.Contains("Snowman"))
{
val.randomAmount = AnimationCurve.Linear(0f, 1f, 1f, 5f);
}
}
selectableLevel.levelIncludesSnowFootprints = true;
}
});
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
internal static void PoisonLake(QuicksandTrigger waterTrigger)
{
((Component)waterTrigger).gameObject.AddComponent<ToxicFumes>();
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
internal static void SubscribeToSnow(Action<bool> snowAction, bool unsubscribe = false)
{
if ((Object)(object)LevelManipulator.Instance != (Object)null)
{
if (!unsubscribe)
{
LevelManipulator.Instance.OnSnowReady += snowAction;
}
else
{
LevelManipulator.Instance.OnSnowReady -= snowAction;
}
}
}
}
internal sealed class MimicsCompatibility
{
private static bool? _enabled;
public static bool Enabled
{
get
{
bool valueOrDefault = _enabled.GetValueOrDefault();
if (!_enabled.HasValue)
{
valueOrDefault = Chainloader.PluginInfos.ContainsKey("x753.Mimics");
_enabled = valueOrDefault;
}
return _enabled.Value;
}
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
internal static void RegisterCircusMimic()
{
AssetBundleLoader.AddOnLethalBundleLoadedListener((Action<AssetBundle>)delegate(AssetBundle assetBundle)
{
CircusMimic.CircusMimicPrefab = assetBundle.LoadAsset<GameObject>("CircusWallDoorMimic.prefab");
}, "bozoros.lethalbundle");
if (Plugin.Settings.CIRCUS_FACILITY_MIMICS.Value && !Mimics.InteriorWhitelist.Contains("circusfacilityflow"))
{
Mimics.InteriorWhitelist.Add("circusfacilityflow");
}
MimicsAPI.GetAPI().RegisterMimicEventHandler((MimicEventHandler)(object)new CircusMimic());
}
}
}
namespace Bozoros.Compatibility.Moons
{
public class PandoramusCompatibility
{
public static bool Registered { get; private set; }
public static ExtendedLevel? PandoramusLevel { get; internal set; }
public static Material? PortalCircusFacility { get; internal set; }
internal static void RegisterCompat()
{
AssetBundleLoader.AddOnExtendedModLoadedListener((Action<ExtendedMod>)delegate(ExtendedMod pandoramusExtended)
{
if (!Registered && !((Object)(object)Plugin.BozorosBundle == (Object)null))
{
PortalCircusFacility = Plugin.BozorosBundle.LoadAsset<Material>("Portal_CircusFacilityMat.mat");
if (pandoramusExtended.ExtendedLevels.Count > 1 && (Object)(object)pandoramusExtended.ExtendedLevels[1] != (Object)null)
{
PandoramusLevel = pandoramusExtended.ExtendedLevels[1];
LoadPatch.OnFinishGeneratingNewLevelClientRpcPost += PortalSwitch;
Registered = true;
}
}
}, "DemonMae_PAN", "Pandoramus");
}
private static void PortalSwitch()
{
if (!((Object)(object)PortalCircusFacility != (Object)null) || !((Object)(object)PandoramusLevel != (Object)null) || !PandoramusLevel.IsCurrentLevel || !((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null) || !Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon)
{
return;
}
Transform parent = RoundManager.Instance.mapPropsContainer.transform.GetParent();
if (!((Object)(object)parent == (Object)null))
{
Transform val = parent.Find("PortalRing/PortalTexture");
MaterialScroller val2 = default(MaterialScroller);
MeshRenderer val3 = default(MeshRenderer);
if ((Object)(object)val != (Object)null && !((Component)val).TryGetComponent<MaterialScroller>(ref val2) && ((Component)val).TryGetComponent<MeshRenderer>(ref val3))
{
MaterialScroller val4 = ((Component)val3).gameObject.AddComponent<MaterialScroller>();
val4.scrollingMat = PortalCircusFacility;
((Renderer)val3).sharedMaterial = PortalCircusFacility;
}
}
}
}
internal sealed class StarlancerZeroCompatibility
{
public static bool Registered { get; private set; }
public static ExtendedLevel? StarlancerZeroLevel { get; internal set; }
public static GameObject? CircusDoors { get; internal set; }
internal static void RegisterCompat()
{
AssetBundleLoader.AddOnExtendedModLoadedListener((Action<ExtendedMod>)delegate(ExtendedMod starlancerExtended)
{
if (!Registered && !((Object)(object)Plugin.BozorosBundle == (Object)null))
{
CircusDoors = Plugin.BozorosBundle.LoadAsset<GameObject>("MainEntranceOnlyDoor.prefab");
if (starlancerExtended.ExtendedLevels.Count > 2 && (Object)(object)starlancerExtended.ExtendedLevels[2] != (Object)null)
{
StarlancerZeroLevel = starlancerExtended.ExtendedLevels[2];
LoadPatch.OnFinishGeneratingLevelPost += DoorSwitch;
Registered = true;
}
}
}, "AudioKnight", "StarlancerMoons");
}
private static void DoorSwitch()
{
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)CircusDoors != (Object)null) || !((Object)(object)StarlancerZeroLevel != (Object)null) || !StarlancerZeroLevel.IsCurrentLevel || !((Object)(object)Plugin.CircusFacilityExtendedDungeon != (Object)null) || !Plugin.CircusFacilityExtendedDungeon.IsCurrentDungeon || !((Object)(object)RoundManager.Instance != (Object)null) || !((Object)(object)RoundManager.Instance.mapPropsContainer != (Object)null))
{
return;
}
Transform parent = RoundManager.Instance.mapPropsContainer.transform.GetParent();
if (!((Object)(object)parent == (Object)null))
{
Transform val = parent.Find("Pyramid/Pyramid_Thin_Base/Desert_Pyramid_Medium/DoubleDoors");
if ((Object)(object)val != (Object)null)
{
GameObject val2 = Object.Instantiate<GameObject>(CircusDoors, ((Component)val).transform.GetParent());
Transform transform = val2.transform;
transform.localPosition += new Vector3(0f, 3f, -0.1f);
val2.transform.localScale = new Vector3(0.1323f, 2.9661f, 3.0816f);
((Component)val).gameObject.SetActive(false);
}
}
}
}
}
namespace Bozoros.Behaviours
{
[Serializable]
public struct BalloonStand
{
public InteractPurchasable? purchaseScript;
public int variant;
}
public class ChangeSettings : NetworkBehaviour
{
public List<AudioSource> fireworkMusicVolume = new List<AudioSource>();
public List<AudioSource> fireworkExplosionVolume = new List<AudioSource>();
public List<AudioSource> announcerVolume = new List<AudioSource>();
public List<AudioSource> tentMusicVolume = new List<AudioSource>();
public List<AudioSource> dropshipVolume = new List<AudioSource>();
public List<ParticleSystem> fireworkParticles = new List<ParticleSystem>();
public List<ParticleSystem> confettiParticles = new List<ParticleSystem>();
public List<ParticleSystem> balloonParticles = new List<ParticleSystem>();
public AudioClip? fireworkMusicCopyrighted;
public List<BalloonStand> balloonStands = new List<BalloonStand>();
public EntranceTeleport? ferrisWheelExit;
public ScanNodeProperties? shipScanNode;
public ItemDropship? dropship;
public ScanNodeProperties? dropshipScanNode;
public static bool SeenBalloonInstructions { get; private set; }
public Keyframe[]? BananaKeysOutside { get; internal set; }
private void Awake()
{
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01c6: Expected O, but got Unknown
if (fireworkMusicVolume.Count > 0 && (Object)(object)fireworkMusicVolume[0] != (Object)null && !Plugin.Settings.STREAMER_FRIENDLY.Value)
{
fireworkMusicVolume[0].clip = fireworkMusicCopyrighted;
fireworkMusicVolume[0].volume = 0.15f;
}
ApplyVolume(Plugin.Settings.FIREWORK_MUSIC_VOLUME.Value, fireworkMusicVolume);
ApplyVolume(Plugin.Settings.FIREWORK_EXPLOSION_VOLUME.Value, fireworkExplosionVolume);
ApplyVolume(Plugin.Settings.ANNOUNCER_VOLUME.Value, announcerVolume);
ApplyVolume(Plugin.Settings.TENT_MUSIC_VOLUME.Value, tentMusicVolume);
ApplyVolume(Plugin.Settings.DROPSHIP_VOLUME.Value, dropshipVolume);
ApplyParticleIntensity(Plugin.Settings.FIREWORK_PARTICLES.Value, fireworkParticles, firework: true);
ApplyParticleIntensity(Plugin.Settings.CONFETTI_PARTICLES.Value, confettiParticles);
ApplyParticleIntensity(Plugin.Settings.BALLOON_PARTICLES.Value, balloonParticles);
for (int i = 0; i < balloonStands.Count; i++)
{
InteractPurchasable stand = balloonStands[i].purchaseScript;
int variant = balloonStands[i].variant;
if ((Object)(object)stand == (Object)null)
{
continue;
}
stand.spawnPrefab = Plugin.GrabbableBalloon;
stand.onPurchase.AddListener((UnityAction)delegate
{
PlatformGrabbable val = default(PlatformGrabbable);
if ((Object)(object)stand.spawnPrefab != (Object)null && stand.spawnPrefab.TryGetComponent<PlatformGrabbable>(ref val))
{
val.SwitchVariant(variant);
}
});
stand.price = Plugin.Settings.BALLOON_PRICE.Value;
((InteractTrigger)stand).hoverTip = ((InteractTrigger)stand).hoverTip.Replace("PRICE", $"{stand.price}");
if (SeenBalloonInstructions || !Plugin.Settings.BALLOON_INSTRUCTIONS.Value)
{
((Notification)(ref stand.purchaseNotification)).SetNotificationSeen();
}
}
if ((Object)(object)shipScanNode != (Object)null)
{
shipScanNode.headerText = (Plugin.Settings.MODIFY_SHIP_NODE.Value ? "Clown Car" : "Ship");
}
if ((Object)(object)dropship != (Object)null && (Object)(object)dropshipScanNode != (Object)null)
{
((Component)dropshipScanNode).transform.SetParent(((Component)dropship).transform, false);
((Component)dropshipScanNode).gameObject.SetActive(true);
}
}
public override void OnNetworkSpawn()
{
((NetworkBehaviour)this).OnNetworkSpawn();
if (!((NetworkBehaviour)this).IsHost)
{
return;
}
if (!Plugin.Settings.FERRIS_WHEEL_EXIT.Value)
{
DisableFerrisFireExitClientRpc();
}
float value = Plugin.Settings.BANANA_MULTIPLIER_OUTSIDE.Value;
if (value != 1f && Plugin.BananaPeelOutside != null)
{
BananaKeysOutside = Plugin.BananaPeelOutside.randomAmount.keys;
Keyframe[] keys = Plugin.BananaPeelOutside.randomAmount.keys;
for (int i = 0; i < keys.Length; i++)
{
ref Keyframe reference = ref keys[i];
((Keyframe)(ref reference)).value = ((Keyframe)(ref reference)).value * value;
}
Plugin.BananaPeelOutside.randomAmount.keys = keys;
}
}
private void OnDisable()
{
if (BananaKeysOutside != null && Plugin.BananaPeelOutside != null)
{
Plugin.BananaPeelOutside.randomAmount.keys = BananaKeysOutside;
}
SoundManager.Instance.currentLevelAmbience = null;
}
[ClientRpc]
private void DisableFerrisFireExitClientRpc()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2846474551u, val, (RpcDelivery)0);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2846474551u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && (Object)(object)ferrisWheelExit != (Object)null)
{
((Component)((Component)ferrisWheelExit).transform.GetParent()).gameObject.SetActive(false);
}
}
}
private static void ApplyVolume(float value, List<AudioSource> audioSources)
{
foreach (AudioSource audioSource in audioSources)
{
audioSource.volume *= value;
}
}
private static void ApplyParticleIntensity(float multiplier, List<ParticleSystem> particleSystems, bool firework = false)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: 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_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
foreach (ParticleSystem particleSystem in particleSystems)
{
EmissionModule emission = particleSystem.emission;
((EmissionModule)(ref emission)).rateOverTimeMultiplier = ((EmissionModule)(ref emission)).rateOverTimeMultiplier * multiplier;
particleSystem.Emit(0);
if (!firework)
{
break;
}
ParticleSystem[] componentsInChildren = ((Component)((Component)particleSystem).transform).GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem val in componentsInChildren)
{
MainModule main = val.main;
((MainModule)(ref main)).maxParticles = (int)((float)((MainModule)(ref main)).maxParticles * multiplier);
EmissionModule emission2 = val.emission;
((EmissionModule)(ref emission2)).rateOverTimeMultiplier = ((EmissionModule)(ref emission2)).rateOverTimeMultiplier * multiplier;
for (int j = 0; j < ((EmissionModule)(ref emission2)).burstCount; j++)
{
Burst burst = ((EmissionModule)(ref emission2)).GetBurst(j);
((Burst)(ref burst)).minCount = (short)((float)((Burst)(ref burst)).minCount * multiplier);
((Burst)(ref burst)).maxCount = (short)((float)((Burst)(ref burst)).maxCount * multiplier);
}
val.Emit(0);
}
}
}
public void ToggleBalloonInstructions()
{
if (SeenBalloonInstructions)
{
return;
}
SeenBalloonInstructions = true;
foreach (BalloonStand balloonStand in balloonStands)
{
if ((Object)(object)balloonStand.purchaseScript != (Object)null)
{
((Notification)(ref balloonStand.purchaseScript.purchaseNotification)).SetNotificationSeen();
}
}
}
protected override void __initializeVariables()
{
((NetworkBehaviour)this).__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_ChangeSettings()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
NetworkManager.__rpc_func_table.Add(2846474551u, new RpcReceiveHandler(__rpc_handler_2846474551));
}
private static void __rpc_handler_2846474551(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
target.__rpc_exec_stage = (__RpcExecStage)2;
((ChangeSettings)(object)target).DisableFerrisFireExitClientRpc();
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
protected internal override string __getTypeName()
{
return "ChangeSettings";
}
}
public class GiftSpawner : NetworkBehaviour
{
[CompilerGenerated]
private sealed class <ReplaceGiftOnSpawn>d__19 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public NetworkObjectReference giftReference;
public int variant;
public GiftSpawner <>4__this;
private NetworkObject <giftNetworkObject>5__1;
private float <startTime>5__2;
private GiftBoxItem <gift>5__3;
private MeshRenderer <giftRenderer>5__4;
private ScanNodeProperties <scanNode>5__5;
private int <randomScrap>5__6;
private SpawnableItemWithRarity <item>5__7;
object? IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object? IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ReplaceGiftOnSpawn>d__19(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<giftNetworkObject>5__1 = null;
<gift>5__3 = null;
<giftRenderer>5__4 = null;
<scanNode>5__5 = null;
<item>5__7 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<startTime>5__2 = Time.realtimeSinceStartup;
goto IL_005a;
case 1:
<>1__state = -1;
goto IL_005a;
case 2:
{
<>1__state = -1;
if (((Component)<giftNetworkObject>5__1).TryGetComponent<GiftBoxItem>(ref <gift>5__3))
{
if (((Component)<gift>5__3).TryGetComponent<MeshRenderer>(ref <giftRenderer>5__4) && variant > -1)
{
((Renderer)<giftRenderer>5__4).sharedMaterial = <>4__this.giftMaterials[variant];
}
if (((Component)((Component)<gift>5__3).transform.GetChild(0)).TryGetComponent<ScanNodeProperties>(ref <scanNode>5__5))
{
<scanNode>5__5.nodeType = 0;
<scanNode>5__5.headerText = "Gift from Santa";
<scanNode>5__5.subText = "Value: ???";
<scanNode>5__5.minRange = 0;
<scanNode>5__5.maxRange = 40;
<scanNode>5__5.requiresLineOfSight = false;
}
if (!((NetworkBehaviour)<>4__this).IsHost || Random == null)
{
return false;
}
if ((Object)(object)<>4__this.coalItem != (Object)null && (float)Random.Next(0, 100) < <>4__this.chanceForCoal * 100f)
{
<gift>5__3.objectInPresentItem = <>4__this.coalItem;
<gift>5__3.objectInPresent = <>4__this.coalItem.spawnPrefab;
<gift>5__3.objectInPresentValue = 1;
}
else
{
<randomScrap>5__6 = RoundManager.Instance.GetRandomWeightedIndexList(ScrapWeights, Random);
<item>5__7 = RoundManager.Instance.currentLevel.spawnableScrap[<randomScrap>5__6];
if ((Object)(object)<item>5__7?.spawnableItem != (Object)null)
{
<gift>5__3.objectInPresentItem = <item>5__7.spawnableItem;
}
else
{
Plugin.StaticLogger.LogWarning((object)$"Item at index {<randomScrap>5__6} has no spawn prefab. Spawning default gift item instead.");
}
<gift>5__3.objectInPresent = <gift>5__3.objectInPresentItem.spawnPrefab;
<gift>5__3.objectInPresentValue = Math.Clamp((int)((float)Random.Next(<gift>5__3.objectInPresentItem.minValue, <gift>5__3.objectInPresentItem.maxValue) * RoundManager.Instance.scrapValueMultiplier), 0, 65);
<item>5__7 = null;
}
<giftRenderer>5__4 = null;
<scanNode>5__5 = null;
}
return false;
}
IL_005a:
if (!((NetworkObjectReference)(ref giftReference)).TryGet(ref <giftNetworkObject>5__1, (NetworkManager)null) && Time.realtimeSinceStartup - <startTime>5__2 < 8f)
{
<>2__current = (object)new WaitForSeconds(0.03f);
<>1__state = 1;
return true;
}
<>2__current = (object)new WaitForEndOfFrame();
<>1__state = 2;
return true;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private static GameObject? <VanillaGiftbox>k__BackingField;
public List<Transform> spawnLocations = new List<Transform>();
public List<Material> giftMaterials = new List<Material>();
public Item? coalItem;
[Range(0f, 1f)]
public float chanceForCoal = 0f;
public static Random? Random { get; private set; }
public static List<int> ScrapWeights { get; private set; } = new List<int>();
public static GameObject? VanillaGiftbox
{
get
{
if ((Object)(object)<VanillaGiftbox>k__BackingField == (Object)null)
{
Item val = OriginalContent.Items.Find((Item item) => item.itemId == 152767);
VanillaGiftbox = (((Object)(object)val != (Object)null) ? val.spawnPrefab : null);
}
return <VanillaGiftbox>k__BackingField;
}
[CompilerGenerated]
private set
{
<VanillaGiftbox>k__BackingField = value;
}
}
private void Awake()
{
Random = new Random(StartOfRound.Instance.randomMapSeed + 28);
ScrapWeights = RoundManager.Instance.currentLevel.spawnableScrap.Select((SpawnableItemWithRarity item) => item.rarity).ToList();
}
public void SpawnGifts()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
if (!((NetworkBehaviour)this).IsHost || (Object)(object)VanillaGiftbox == (Object)null)
{
return;
}
GiftBoxItem val2 = default(GiftBoxItem);
NetworkObject val3 = default(NetworkObject);
foreach (Transform spawnLocation in spawnLocations)
{
GameObject val = Object.Instantiate<GameObject>(VanillaGiftbox, spawnLocation.position, spawnLocation.rotation, RoundManager.Instance.spawnedScrapContainer);
if (val.TryGetComponent<GiftBoxItem>(ref val2) && ((Component)val2).TryGetComponent<NetworkObject>(ref val3))
{
val3.Spawn(false);
ReplaceGiftClientRpc(NetworkObjectReference.op_Implicit(val3), Random?.Next(0, giftMaterials.Count) ?? (-1));
}
}
}
[ClientRpc]
public void ReplaceGiftClientRpc(NetworkObjectReference giftReference, int variant)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1353726552u, val, (RpcDelivery)0);
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref giftReference, default(ForNetworkSerializable));
BytePacker.WriteValueBitPacked(val2, variant);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1353726552u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
((MonoBehaviour)this).StartCoroutine(ReplaceGiftOnSpawn(giftReference, variant));
}
}
}
[IteratorStateMachine(typeof(<ReplaceGiftOnSpawn>d__19))]
private IEnumerator ReplaceGiftOnSpawn(NetworkObjectReference giftReference, int variant)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ReplaceGiftOnSpawn>d__19(0)
{
<>4__this = this,
giftReference = giftReference,
variant = variant
};
}
protected override void __initializeVariables()
{
((NetworkBehaviour)this).__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_GiftSpawner()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
NetworkManager.__rpc_func_table.Add(1353726552u, new RpcReceiveHandler(__rpc_handler_1353726552));
}
private static void __rpc_handler_1353726552(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: 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_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: 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)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
NetworkObjectReference giftReference = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref giftReference, default(ForNetworkSerializable));
int variant = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref variant);
target.__rpc_exec_stage = (__RpcExecStage)2;
((GiftSpawner)(object)target).ReplaceGiftClientRpc(giftReference, variant);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
protected internal override string? __getTypeName()
{
return "GiftSpawner";
}
}
public class PoisonLake : MonoBehaviour
{
[Tooltip("")]
public QuicksandTrigger? waterTrigger;
private void Awake()
{
if (LethalElementsCompatibility.Enabled && (Object)(object)waterTrigger != (Object)null)
{
LethalElementsCompatibility.PoisonLake(waterTrigger);
}
}
}
[Serializable]
public struct Nest
{
public Transform? nestLocation;
public int minValue;
public int maxValue;
}
public class PopcornNests : NetworkBehaviour
{
[Tooltip("The list of every unique location bees should be teleported to before simply spawning normally.")]
public List<Nest> nestLocations = new List<Nest>();
public static Random? Random { get; internal set; }
private void Awake()
{
if (NetworkManager.Singleton.IsHost)
{
Random = new Random(StartOfRound.Instance.randomMapSeed);
PopcornNestPatch.PopcornNestsInstance = this;
}
}
[ServerRpc]
public void RelocateNestServerRpc(NetworkObjectReference hiveReference, NetworkObjectReference beesReference)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Invalid comparison between Unknown and I4
//IL_00a5: 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_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: 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_0084: Invalid comparison between Unknown and I4
//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0202: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2356761973u, val, (RpcDelivery)0);
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref hiveReference, default(ForNetworkSerializable));
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref beesReference, default(ForNetworkSerializable));
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2356761973u, val, (RpcDelivery)0);
}
NetworkObject val3 = default(NetworkObject);
RedLocustBees val4 = default(RedLocustBees);
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost) && Random != null && nestLocations.Count > 0 && ((NetworkObjectReference)(ref beesReference)).TryGet(ref val3, (NetworkManager)null) && ((Component)val3).TryGetComponent<RedLocustBees>(ref val4))
{
int num = Random.Next(0, nestLocations.Count);
Nest nest = nestLocations[num];
if ((Object)(object)nest.nestLocation != (Object)null && (Object)(object)((EnemyAI)val4).agent != (Object)null && ((EnemyAI)val4).agent.Warp(nest.nestLocation.position))
{
((Component)val4).transform.position = nest.nestLocation.position;
((EnemyAI)val4).SyncPositionToClients();
val4.SyncLastKnownHivePositionServerRpc(nest.nestLocation.position);
RelocateNestClientRpc(hiveReference, num, Random.Next(nest.minValue, nest.maxValue));
}
else
{
Plugin.StaticLogger.LogWarning((object)"Could not relocate beehive!");
}
}
}
[ClientRpc]
public void RelocateNestClientRpc(NetworkObjectReference hiveReference, int locationIndex, int value)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: 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_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2412936553u, val, (RpcDelivery)0);
((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref hiveReference, default(ForNetworkSerializable));
BytePacker.WriteValueBitPacked(val2, locationIndex);
BytePacker.WriteValueBitPacked(val2, value);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2412936553u, val, (RpcDelivery)0);
}
NetworkObject val3 = default(NetworkObject);
GrabbableObject val4 = default(GrabbableObject);
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && ((NetworkObjectReference)(ref hiveReference)).TryGet(ref val3, (NetworkManager)null) && ((Component)val3).TryGetComponent<GrabbableObject>(ref val4))
{
((Component)val4).transform.position = nestLocations[locationIndex].nestLocation.position;
val4.SetScrapValue(value);
nestLocations.RemoveAt(locationIndex);
}
}
}
protected override void __initializeVariables()
{
((NetworkBehaviour)this).__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_PopcornNests()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
NetworkManager.__rpc_func_table.Add(2356761973u, new RpcReceiveHandler(__rpc_handler_2356761973));
NetworkManager.__rpc_func_table.Add(2412936553u, new RpcReceiveHandler(__rpc_handler_2412936553));
}
private static void __rpc_handler_2356761973(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: 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)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Invalid comparison between Unknown and I4
NetworkManager networkManager = target.NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
}
else
{
NetworkObjectReference hiveReference = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref hiveReference, default(ForNetworkSerializable));
NetworkObjectReference beesReference = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref beesReference, default(ForNetworkSerializable));
target.__rpc_exec_stage = (__RpcExecStage)1;
((PopcornNests)(object)target).RelocateNestServerRpc(hiveReference, beesReference);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_2412936553(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: 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_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: 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)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
NetworkObjectReference hiveReference = default(NetworkObjectReference);
((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref hiveReference, default(ForNetworkSerializable));
int locationIndex = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref locationIndex);
int value = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref value);
target.__rpc_exec_stage = (__RpcExecStage)2;
((PopcornNests)(object)target).RelocateNestClientRpc(hiveReference, locationIndex, value);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
protected internal override string? __getTypeName()
{
return "PopcornNests";
}
}
public class PurgeTulipSnake : MonoBehaviour
{
[CompilerGenerated]
private sealed class <DisablePfx>d__3 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public PurgeTulipSnake <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DisablePfx>d__3(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(<>4__this.duration);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if ((Object)(object)<>4__this.tulipSnakePFX != (Object)null)
{
<>4__this.tulipSnakePFX.SetActive(false);
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[Tooltip("Container for the particle effect to play when a Tulip Snake ceases to be.")]
public GameObject? tulipSnakePFX;
[Tooltip("Duration of the particle effect to play, to disable afterwards.")]
public float duration = 0f;
private void OnTriggerEnter(Collider collider)
{
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
FlowerSnakeEnemy val = default(FlowerSnakeEnemy);
if (!((Object)(object)((Component)collider).transform.GetParent() == (Object)null) && !((Object)(object)((Component)collider).transform.GetParent().GetParent() == (Object)null) && ((Component)((Component)collider).transform.parent.parent).TryGetComponent<FlowerSnakeEnemy>(ref val))
{
if ((Object)(object)tulipSnakePFX != (Object)null)
{
tulipSnakePFX.transform.position = ((Component)val).transform.position;
tulipSnakePFX.SetActive(true);
((MonoBehaviour)this).StartCoroutine(DisablePfx());
}
if ((Object)(object)val.clingingToPlayer != (Object)null && PlayerExtensions.IsLocalClient(val.clingingToPlayer) && val.clingPosition == 4)
{
val.StopClingingOnLocalClient(true);
val.StopClingingServerRpc((int)GameNetworkManager.Instance.localPlayerController.playerClientId);
}
if (((NetworkBehaviour)val).IsHost)
{
((EnemyAI)val).KillEnemyOnOwnerClient(false);
}
((Component)val).gameObject.SetActive(false);
}
}
[IteratorStateMachine(typeof(<DisablePfx>d__3))]
private IEnumerator DisablePfx()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DisablePfx>d__3(0)
{
<>4__this = this
};
}
}
public class ReduceMotionSickness : MonoBehaviour
{
[Header("Reduce Motion Sickness")]
[Tooltip("")]
public UnityEvent onReduceMotionSicknessEnabled = new UnityEvent();
[Tooltip("")]
public UnityEvent onReduceMotionSicknessDisabled = new UnityEvent();
public void OnEnable()
{
if (Plugin.Settings.REDUCE_MOTION_SICKNESS.Value)
{
onReduceMotionSicknessEnabled.Invoke();
}
Plugin.Settings.REDUCE_MOTION_SICKNESS.SettingChanged += OnReduceMotionSicknessChange;
}
public void OnDisable()
{
Plugin.Settings.REDUCE_MOTION_SICKNESS.SettingChanged -= OnReduceMotionSicknessChange;
}
public void OnReduceMotionSicknessChange(object sender, EventArgs args)
{
SettingChangedEventArgs val = (SettingChangedEventArgs)(object)((args is SettingChangedEventArgs) ? args : null);
if (val != null && val.ChangedSetting is ConfigEntry<bool> val2)
{
if (val2.Value)
{
onReduceMotionSicknessEnabled.Invoke();
}
else
{
onReduceMotionSicknessDisabled.Invoke();
}
}
}
}
public class SnozorosEnabler : MonoBehaviour
{
[Tooltip("")]
public Material? fakeWaterMaterial;
[Tooltip("")]
public QuicksandTrigger? waterTrigger;
[Tooltip("")]
public MeshRenderer? waterRenderer;
[Tooltip("")]
public Material? snowMaterial;
public static GameObject? IcyLakePrefab { get; internal set; }
public static NetworkObject? IcyLakeInstance { get; private set; }
private void Awake()
{
if (LethalElementsCompatibility.Enabled)
{
LethalElementsCompatibility.SubscribeToSnow(HandleSnow);
}
}
private void OnDestroy()
{
if (LethalElementsCompatibility.Enabled)
{
LethalElementsCompatibility.SubscribeToSnow(HandleSnow, unsubscribe: true);
}
SelectableLevel val = (((Object)(object)Plugin.BozorosExtendedLevel != (Object)null) ? Plugin.BozorosExtendedLevel.SelectableLevel : null);
if (!((Object)(object)val != (Object)null))
{
return;
}
SpawnableOutsideObjectWithRarity[] spawnableOutsideObjects = val.spawnableOutsideObjects;
foreach (SpawnableOutsideObjectWithRarity val2 in spawnableOutsideObjects)
{
if ((Object)(object)val2.spawnableObject != (Object)null && ((Object)val2.spawnableObject).name.Contains("Snowman"))
{
val2.randomAmount = AnimationCurve.Constant(0f, 1f, 0f);
}
}
val.levelIncludesSnowFootprints = false;
}
public void HandleSnow(bool isSnowReady)
{
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0270: Unknown result type (might be due to invalid IL or missing references)
//IL_028a: Unknown result type (might be due to invalid IL or missing references)
//IL_0294: Unknown result type (might be due to invalid IL or missing references)
if (!isSnowReady && (Object)(object)IcyLakeInstance != (Object)null)
{
IcyLakeInstance.Despawn(true);
}
else
{
if ((Object)(object)((Component)this).transform.GetParent() == (Object)null || (Object)(object)((Component)this).transform.GetParent().GetParent() == (Object)null || (Object)(object)((Component)this).transform.GetParent().GetParent().GetParent() == (Object)null)
{
return;
}
Transform val = ((Component)this).transform.GetParent().GetParent().GetParent()
.Find("MeshTerrain_BozorosTerrain");
MeshRenderer val2 = default(MeshRenderer);
if (!((Object)(object)val != (Object)null) || !((Component)val).TryGetComponent<MeshRenderer>(ref val2))
{
return;
}
((Renderer)val2).sharedMaterial = snowMaterial;
((Component)val).tag = "Snow";
if (!((Object)(object)Plugin.BozorosExtendedLevel != (Object)null) || !$"{Plugin.BozorosExtendedLevel.SelectableLevel.currentWeather}".Contains("Snowfall") || !((Object)(object)fakeWaterMaterial != (Object)null) || !((Object)(object)waterRenderer != (Object)null))
{
return;
}
((Renderer)waterRenderer).sharedMaterial = fakeWaterMaterial;
MeshCollider val3 = default(MeshCollider);
if (((Component)waterRenderer).TryGetComponent<MeshCollider>(ref val3))
{
((Collider)val3).enabled = false;
}
BoxCollider val4 = default(BoxCollider);
if ((Object)(object)waterTrigger != (Object)null && ((Component)waterTrigger).TryGetComponent<BoxCollider>(ref val4))
{
((Collider)val4).enabled = true;
((Behaviour)waterTrigger).enabled = true;
}
if (!((Object)(object)IcyLakePrefab != (Object)null))
{
return;
}
if (NetworkManager.Singleton.IsHost && (Object)(object)waterTrigger != (Object)null && (Object)(object)((Component)waterTrigger).transform.GetParent() != (Object)null && (Object)(object)((Component)waterTrigger).transform.GetParent().GetParent() != (Object)null)
{
GameObject val5 = Object.Instantiate<GameObject>(IcyLakePrefab, ((Component)waterTrigger).transform.GetParent().GetParent());
NetworkObject icyLakeInstance = default(NetworkObject);
if (val5.TryGetComponent<NetworkObject>(ref icyLakeInstance))
{
IcyLakeInstance = icyLakeInstance;
IcyLakeInstance.Spawn(true);
}
}
((Component)waterRenderer).transform.position = new Vector3(((Component)waterRenderer).transform.position.x, -3.75f, ((Component)waterRenderer).transform.position.z);
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}
namespace Bozoros.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}