using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using REPOLib.Modules; using REPOLib.Objects.Sdk; using TMPro; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [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("Empress")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EmpressFallGuys")] [assembly: AssemblyTitle("EmpressFallGuys")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 Empress.REPO.FallGuys { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.empress.repo.fallguys", "Empress Fall Guys", "1.0.0")] public sealed class EmpressFallGuysPlugin : BaseUnityPlugin { public const string PluginGuid = "com.empress.repo.fallguys"; public const string PluginName = "Empress Fall Guys"; public const string PluginVersion = "1.0.0"; public const string LevelName = "Level - Empress Fall Guys"; public const string DisplayName = "Empress - Fall Guys"; internal const byte FinishEventCode = 176; private static bool _photonHooked; private Harmony _harmony; internal static EmpressFallGuysPlugin Instance { get; private set; } internal static ManualLogSource Log { get; private set; } internal static FallGuysSettings Settings { get; private set; } internal static Level FallGuysLevel { get; private set; } internal static string PluginDirectory { get; private set; } private void Awake() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; PluginDirectory = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); Settings = new FallGuysSettings(((BaseUnityPlugin)this).Config); ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); FallGuysAssets.Load(); FallGuysLevel = FallGuysLevelRegistry.RegisterLevel(); _harmony = new Harmony("com.empress.repo.fallguys"); _harmony.PatchAll(typeof(EmpressFallGuysPlugin).Assembly); FallGuysRuntime.EnsureHost(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Empress Fall Guys v1.0.0 loaded. Level registered: Level - Empress Fall Guys"); } private void OnDestroy() { RemovePhotonHook(); } internal static bool IsFallGuysLevel(Level level) { if ((Object)(object)level != (Object)null) { return ((Object)level).name == "Level - Empress Fall Guys"; } return false; } internal static void EnsurePhotonHooked() { if (!_photonHooked) { LoadBalancingClient networkingClient = PhotonNetwork.NetworkingClient; if (networkingClient != null) { networkingClient.EventReceived -= OnPhotonEvent; networkingClient.EventReceived += OnPhotonEvent; _photonHooked = true; } } } internal static void RemovePhotonHook() { if (_photonHooked) { LoadBalancingClient networkingClient = PhotonNetwork.NetworkingClient; if (networkingClient != null) { networkingClient.EventReceived -= OnPhotonEvent; } _photonHooked = false; } } private static void OnPhotonEvent(EventData ev) { if (ev.CustomData is object[] data && ev.Code == 176) { FallGuysRuntime instance = FallGuysRuntime.Instance; if ((Object)(object)instance != (Object)null) { instance.ReceiveFinish(data); } } } internal static void DebugLog(string message) { if (Settings != null && Settings.DebugLogs.Value) { Log.LogInfo((object)message); } } internal static void RaiseToAll(byte code, object[] data) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0035: Unknown result type (might be due to invalid IL or missing references) EnsurePhotonHooked(); if (!PhotonNetwork.InRoom) { if (code == 176) { FallGuysRuntime.Instance?.ReceiveFinish(data); } } else { RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)1 }; PhotonNetwork.RaiseEvent(code, (object)data, val, SendOptions.SendReliable); } } } internal sealed class FallGuysSettings { public readonly ConfigEntry ForceLevel; public readonly ConfigEntry MasterVolume; public readonly ConfigEntry VoidY; public readonly ConfigEntry FinishRadius; public readonly ConfigEntry FinishReward; public readonly ConfigEntry DebugLogs; public readonly ConfigEntry SpawnX; public readonly ConfigEntry SpawnY; public readonly ConfigEntry SpawnZ; public readonly ConfigEntry SpawnYaw; public readonly ConfigEntry CaptureSpawnKey; public readonly ConfigEntry Hazards; public readonly ConfigEntry UnlimitedStamina; public readonly ConfigEntry JumpBoost; public Vector3 SpawnPosition => new Vector3(SpawnX.Value, SpawnY.Value, SpawnZ.Value); public Quaternion SpawnRotation => Quaternion.Euler(0f, SpawnYaw.Value, 0f); public FallGuysSettings(ConfigFile config) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Expected O, but got Unknown //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Expected O, but got Unknown //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected O, but got Unknown DebugLogs = config.Bind("Debug", "DebugLogs", false, "Logs verbose Empress Fall Guys diagnostics. Off by default."); ForceLevel = config.Bind("Debug", "ForceLevel", false, "Forces every real run level to load Empress - Fall Guys. Useful for testing."); MasterVolume = config.Bind("Audio", "MasterVolume", 0.2f, new ConfigDescription("Volume of the Fall Guys music.", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 1f), Array.Empty())); VoidY = config.Bind("Level", "VoidY", -80f, new ConfigDescription("Players below this Y position are returned to the start.", (AcceptableValueBase)(object)new AcceptableValueRange(-250f, 50f), Array.Empty())); FinishRadius = config.Bind("Level", "FinishRadius", 8f, new ConfigDescription("Distance from the crown needed to finish the level.", (AcceptableValueBase)(object)new AcceptableValueRange(2f, 30f), Array.Empty())); FinishReward = config.Bind("Reward", "FinishReward", 50, new ConfigDescription("Money in thousands awarded to the whole lobby when the crown is reached.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 500), Array.Empty())); SpawnX = config.Bind("Spawn", "SpawnX", -20f, "World X where the truck opens and players spawn. Stand where you want the start and press the capture key to set this."); SpawnY = config.Bind("Spawn", "SpawnY", 0.5f, "World Y of the spawn point."); SpawnZ = config.Bind("Spawn", "SpawnZ", -22f, "World Z of the spawn point."); SpawnYaw = config.Bind("Spawn", "SpawnYaw", -90f, new ConfigDescription("Facing of the spawn in degrees.", (AcceptableValueBase)(object)new AcceptableValueRange(-180f, 180f), Array.Empty())); CaptureSpawnKey = config.Bind("Spawn", "CaptureSpawnKey", (KeyCode)289, "Press while standing in the level to set the spawn and respawn to your current position."); Hazards = config.Bind("Level", "Hazards", true, "When on, the moving obstacles kill players on contact."); UnlimitedStamina = config.Bind("Level", "UnlimitedStamina", true, "When on, players never run out of sprint stamina on this level."); JumpBoost = config.Bind("Level", "JumpBoost", 1.98f, new ConfigDescription("Jump strength multiplier on this level. 1 is normal, higher jumps higher.", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 2.5f), Array.Empty())); } } internal static class FallGuysAccess { private delegate void ModuleSetAllChecklistDelegate(Module module); private delegate void LevelGeneratorGenerateDoneDelegate(LevelGenerator instance, PhotonMessageInfo info); private static readonly FieldInfo EnvironmentSetupDoneField = AccessTools.Field(typeof(EnvironmentDirector), "SetupDone"); private static readonly FieldInfo EnvironmentMainCameraField = AccessTools.Field(typeof(EnvironmentDirector), "MainCamera"); private static readonly FieldInfo EnvironmentAmbientColorField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColor"); private static readonly FieldInfo EnvironmentAmbientColorNewField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColorNew"); private static readonly FieldInfo EnvironmentAmbientColorPreviousField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColorPrevious"); private static readonly FieldInfo EnvironmentAmbientColorAdaptationField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColorAdaptation"); private static readonly FieldInfo EnvironmentAmbientColorAdaptationNewField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColorAdaptationNew"); private static readonly FieldInfo EnvironmentAmbientColorAdaptationPreviousField = AccessTools.Field(typeof(EnvironmentDirector), "AmbientColorAdaptationPrevious"); private static readonly FieldInfo EnvironmentDarkAdaptationLerpField = AccessTools.Field(typeof(EnvironmentDirector), "DarkAdaptationLerp"); private static readonly FieldInfo EnvironmentFogColorField = AccessTools.Field(typeof(EnvironmentDirector), "FogColor"); private static readonly FieldInfo EnvironmentFogColorNewField = AccessTools.Field(typeof(EnvironmentDirector), "FogColorNew"); private static readonly FieldInfo EnvironmentFogColorPreviousField = AccessTools.Field(typeof(EnvironmentDirector), "FogColorPrevious"); private static readonly FieldInfo EnvironmentFogStartDistanceField = AccessTools.Field(typeof(EnvironmentDirector), "FogStartDistance"); private static readonly FieldInfo EnvironmentFogStartDistanceNewField = AccessTools.Field(typeof(EnvironmentDirector), "FogStartDistanceNew"); private static readonly FieldInfo EnvironmentFogStartDistancePreviousField = AccessTools.Field(typeof(EnvironmentDirector), "FogStartDistancePrevious"); private static readonly FieldInfo EnvironmentFogEndDistanceField = AccessTools.Field(typeof(EnvironmentDirector), "FogEndDistance"); private static readonly FieldInfo EnvironmentFogEndDistanceNewField = AccessTools.Field(typeof(EnvironmentDirector), "FogEndDistanceNew"); private static readonly FieldInfo EnvironmentFogEndDistancePreviousField = AccessTools.Field(typeof(EnvironmentDirector), "FogEndDistancePrevious"); private static readonly FieldInfo LevelGeneratorAllPlayersReadyField = AccessTools.Field(typeof(LevelGenerator), "AllPlayersReady"); private static readonly FieldInfo LevelGeneratorEnemyReadyField = AccessTools.Field(typeof(LevelGenerator), "EnemyReady"); private static readonly FieldInfo LevelGeneratorModulesSpawnedField = AccessTools.Field(typeof(LevelGenerator), "ModulesSpawned"); private static readonly FieldInfo LevelGeneratorPlayerSpawnedField = AccessTools.Field(typeof(LevelGenerator), "playerSpawned"); private static readonly FieldInfo RunManagerLevelPreviousField = AccessTools.Field(typeof(RunManager), "levelPrevious"); private static readonly FieldInfo PlayerAvatarIsDisabledField = AccessTools.Field(typeof(PlayerAvatar), "isDisabled"); private static readonly FieldInfo PlayerAvatarDeadSetField = AccessTools.Field(typeof(PlayerAvatar), "deadSet"); private static readonly FieldInfo PlayerAvatarPlayerNameField = AccessTools.Field(typeof(PlayerAvatar), "playerName"); private static readonly FieldInfo PlayerAvatarTumbleField = AccessTools.Field(typeof(PlayerAvatar), "tumble"); private static readonly FieldInfo PlayerTumblePhysGrabObjectField = AccessTools.Field(typeof(PlayerTumble), "physGrabObject"); private static readonly FieldInfo PlayerAvatarRbField = AccessTools.Field(typeof(PlayerAvatar), "rb"); private static readonly FieldInfo PlayerAvatarVisualPositionField = AccessTools.Field(typeof(PlayerAvatarVisuals), "visualPosition"); private static readonly FieldInfo PlayerControllerRbField = AccessTools.Field(typeof(PlayerController), "rb"); private static readonly FieldInfo PlayerControllerVelocityField = AccessTools.Field(typeof(PlayerController), "Velocity"); private static readonly FieldInfo PlayerControllerVelocityRelativeField = AccessTools.Field(typeof(PlayerController), "VelocityRelative"); private static readonly FieldInfo PlayerControllerVelocityRelativeNewField = AccessTools.Field(typeof(PlayerController), "VelocityRelativeNew"); private static readonly FieldInfo PlayerControllerMoveForceTimerField = AccessTools.Field(typeof(PlayerController), "MoveForceTimer"); private static readonly MethodInfo PlayerControllerInputDisableMethod = AccessTools.Method(typeof(PlayerController), "InputDisable", new Type[1] { typeof(float) }, (Type[])null); private static readonly FieldInfo RoundDirectorExtractionPointsField = AccessTools.Field(typeof(RoundDirector), "extractionPoints"); private static readonly FieldInfo RoundDirectorExtractionPointsCompletedField = AccessTools.Field(typeof(RoundDirector), "extractionPointsCompleted"); private static readonly FieldInfo RoundDirectorExtractionPointListField = AccessTools.Field(typeof(RoundDirector), "extractionPointList"); private static readonly FieldInfo ModuleSetupDoneField = AccessTools.Field(typeof(Module), "SetupDone"); private static readonly FieldInfo ModuleStartRoomField = AccessTools.Field(typeof(Module), "StartRoom"); private static readonly FieldInfo ModuleGridXField = AccessTools.Field(typeof(Module), "GridX"); private static readonly FieldInfo ModuleGridYField = AccessTools.Field(typeof(Module), "GridY"); private static readonly FieldInfo ModuleFirstField = AccessTools.Field(typeof(Module), "First"); private static readonly FieldInfo LevelPointInStartRoomField = AccessTools.Field(typeof(LevelPoint), "inStartRoom"); private static readonly MethodInfo ModuleSetAllChecklistMethod = AccessTools.Method(typeof(Module), "SetAllChecklist", (Type[])null, (Type[])null); private static readonly MethodInfo LevelGeneratorGenerateDoneMethod = AccessTools.Method(typeof(LevelGenerator), "GenerateDone", new Type[1] { typeof(PhotonMessageInfo) }, (Type[])null); private static readonly ModuleSetAllChecklistDelegate ModuleSetAllChecklistCall = CreateDelegate(ModuleSetAllChecklistMethod); private static readonly LevelGeneratorGenerateDoneDelegate LevelGeneratorGenerateDoneCall = CreateDelegate(LevelGeneratorGenerateDoneMethod); public static void SetEnvironmentFog(EnvironmentDirector director, Color color, float startDistance, float endDistance) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) SetField(EnvironmentFogColorField, director, color); SetField(EnvironmentFogColorNewField, director, color); SetField(EnvironmentFogColorPreviousField, director, color); SetField(EnvironmentFogStartDistanceField, director, startDistance); SetField(EnvironmentFogStartDistanceNewField, director, startDistance); SetField(EnvironmentFogStartDistancePreviousField, director, startDistance); SetField(EnvironmentFogEndDistanceField, director, endDistance); SetField(EnvironmentFogEndDistanceNewField, director, endDistance); SetField(EnvironmentFogEndDistancePreviousField, director, endDistance); } public static void SetEnvironmentAmbient(EnvironmentDirector director, Color ambient, Color adaptation) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) SetField(EnvironmentAmbientColorField, director, ambient); SetField(EnvironmentAmbientColorNewField, director, ambient); SetField(EnvironmentAmbientColorPreviousField, director, ambient); SetField(EnvironmentAmbientColorAdaptationField, director, adaptation); SetField(EnvironmentAmbientColorAdaptationNewField, director, adaptation); SetField(EnvironmentAmbientColorAdaptationPreviousField, director, adaptation); } public static void SetEnvironmentDarkAdaptation(EnvironmentDirector director, float value) { SetField(EnvironmentDarkAdaptationLerpField, director, value); } public static Camera GetEnvironmentMainCamera(EnvironmentDirector director) { return Get(EnvironmentMainCameraField, director); } public static void SetEnvironmentMainCamera(EnvironmentDirector director, Camera camera) { SetField(EnvironmentMainCameraField, director, camera); } public static void SetEnvironmentSetupDone(EnvironmentDirector director, bool value) { SetField(EnvironmentSetupDoneField, director, value); } public static void SetAllPlayersReady(LevelGenerator generator, bool value) { SetField(LevelGeneratorAllPlayersReadyField, generator, value); } public static bool GetAllPlayersReady(LevelGenerator generator) { return GetBool(LevelGeneratorAllPlayersReadyField, generator); } public static void SetLevelPrevious(RunManager manager, Level level) { SetField(RunManagerLevelPreviousField, manager, level); } public static void SetEnemyReady(LevelGenerator generator, bool value) { SetField(LevelGeneratorEnemyReadyField, generator, value); } public static void SetModulesSpawned(LevelGenerator generator, int value) { SetField(LevelGeneratorModulesSpawnedField, generator, value); } public static void SetPlayerSpawnedCount(LevelGenerator generator, int value) { SetField(LevelGeneratorPlayerSpawnedField, generator, value); } public static int GetPlayerSpawnedCount(LevelGenerator generator) { return GetInt(LevelGeneratorPlayerSpawnedField, generator); } public static bool GetIsDisabled(PlayerAvatar avatar) { return GetBool(PlayerAvatarIsDisabledField, avatar); } public static bool GetDeadSet(PlayerAvatar avatar) { return GetBool(PlayerAvatarDeadSetField, avatar); } public static string GetPlayerName(PlayerAvatar avatar) { return Get(PlayerAvatarPlayerNameField, avatar); } public static PlayerTumble GetPlayerTumble(PlayerAvatar avatar) { return Get(PlayerAvatarTumbleField, avatar); } public static void ResetRoundExtraction(RoundDirector director) { SetField(RoundDirectorExtractionPointsField, director, 0); SetField(RoundDirectorExtractionPointsCompletedField, director, 0); Get>(RoundDirectorExtractionPointListField, director)?.Clear(); } public static void ConfigureStartRoomModule(Module module, int gridX, int gridY) { ModuleSetAllChecklistCall?.Invoke(module); SetField(ModuleSetupDoneField, module, true); SetField(ModuleStartRoomField, module, true); SetField(ModuleFirstField, module, true); SetField(ModuleGridXField, module, gridX); SetField(ModuleGridYField, module, gridY); } public static void MarkLevelPointInStartRoom(LevelPoint point, bool value) { SetField(LevelPointInStartRoomField, point, value); } public static void GenerateDone(LevelGenerator generator) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) LevelGeneratorGenerateDoneCall?.Invoke(generator, default(PhotonMessageInfo)); } public static void TeleportLocalPlayer(Vector3 position, Quaternion rotation) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar val = (((Object)(object)PlayerController.instance != (Object)null) ? PlayerController.instance.playerAvatarScript : null); if ((Object)(object)val == (Object)null) { return; } if ((Object)(object)val.physGrabber != (Object)null) { val.physGrabber.ReleaseObject(-1, 0.1f); } PlayerTumble playerTumble = GetPlayerTumble(val); PhysGrabObject val2 = Get(PlayerTumblePhysGrabObjectField, playerTumble); if ((Object)(object)val2 != (Object)null) { val2.Teleport(position, rotation); } Rigidbody val3 = Get(PlayerAvatarRbField, val); if ((Object)(object)val3 != (Object)null) { val3.velocity = Vector3.zero; val3.angularVelocity = Vector3.zero; val3.position = position; val3.rotation = rotation; } ((Component)val).transform.SetPositionAndRotation(position, rotation); if ((Object)(object)val.playerTransform != (Object)null) { val.playerTransform.SetPositionAndRotation(position, rotation); } if ((Object)(object)val.playerAvatarVisuals != (Object)null) { ((Component)val.playerAvatarVisuals).transform.position = position; SetField(PlayerAvatarVisualPositionField, val.playerAvatarVisuals, position); } PlayerController instance = PlayerController.instance; if ((Object)(object)instance != (Object)null) { ((Component)instance).transform.SetPositionAndRotation(position, rotation); Rigidbody val4 = Get(PlayerControllerRbField, instance); if ((Object)(object)val4 != (Object)null) { val4.velocity = Vector3.zero; val4.angularVelocity = Vector3.zero; val4.position = position; val4.rotation = rotation; } SetField(PlayerControllerVelocityField, instance, Vector3.zero); SetField(PlayerControllerVelocityRelativeField, instance, Vector3.zero); SetField(PlayerControllerVelocityRelativeNewField, instance, Vector3.zero); SetField(PlayerControllerMoveForceTimerField, instance, 0f); PlayerControllerInputDisableMethod?.Invoke(instance, new object[1] { 0.25f }); } } private static T Get(FieldInfo field, object instance) where T : class { if (field == null || instance == null) { return null; } return field.GetValue(instance) as T; } private static bool GetBool(FieldInfo field, object instance) { if (field == null || instance == null) { return false; } object value = field.GetValue(instance); bool flag = default(bool); int num; if (value is bool) { flag = (bool)value; num = 1; } else { num = 0; } return (byte)((uint)num & (flag ? 1u : 0u)) != 0; } private static int GetInt(FieldInfo field, object instance) { if (field == null || instance == null) { return 0; } object value = field.GetValue(instance); if (value is int) { return (int)value; } return 0; } private static void SetField(FieldInfo field, object instance, object value) { if (!(field == null) && instance != null) { field.SetValue(instance, value); } } private static TDelegate CreateDelegate(MethodInfo method) where TDelegate : Delegate { if (method == null) { return null; } return AccessTools.MethodDelegate(method, (object)null, true); } } internal static class FallGuysAssets { private const string BundleFileName = "empress_fall_guys_level.empress"; private const string LevelPrefabName = "EmpressFallGuysLevel"; public static GameObject LevelPrefab { get; private set; } public static void Load() { if ((Object)(object)LevelPrefab != (Object)null) { return; } string text = Path.Combine(EmpressFallGuysPlugin.PluginDirectory, "bundles", "empress_fall_guys_level.empress"); if (!File.Exists(text)) { EmpressFallGuysPlugin.Log.LogError((object)("Missing Empress Fall Guys bundle: " + text)); return; } AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { EmpressFallGuysPlugin.Log.LogError((object)("Could not load Empress Fall Guys bundle: " + text)); return; } LevelPrefab = val.LoadAsset("EmpressFallGuysLevel"); if ((Object)(object)LevelPrefab == (Object)null) { EmpressFallGuysPlugin.Log.LogError((object)"Could not find prefab EmpressFallGuysLevel in empress_fall_guys_level.empress."); } else { EmpressFallGuysPlugin.DebugLog("Loaded EmpressFallGuysLevel from empress_fall_guys_level.empress."); } } } internal static class FallGuysLevelRegistry { private static readonly FieldRef LevelContentLevelRef = AccessTools.FieldRefAccess("_level"); private static readonly FieldRef> LevelContentStartRoomsRef = AccessTools.FieldRefAccess>("_startRooms"); private static readonly FieldRef> LevelContentModulesNormal1Ref = AccessTools.FieldRefAccess>("_modulesNormal1"); private static readonly FieldRef> LevelContentModulesNormal2Ref = AccessTools.FieldRefAccess>("_modulesNormal2"); private static readonly FieldRef> LevelContentModulesNormal3Ref = AccessTools.FieldRefAccess>("_modulesNormal3"); private static readonly FieldRef> LevelContentModulesPassage1Ref = AccessTools.FieldRefAccess>("_modulesPassage1"); private static readonly FieldRef> LevelContentModulesPassage2Ref = AccessTools.FieldRefAccess>("_modulesPassage2"); private static readonly FieldRef> LevelContentModulesPassage3Ref = AccessTools.FieldRefAccess>("_modulesPassage3"); private static readonly FieldRef> LevelContentModulesDeadEnd1Ref = AccessTools.FieldRefAccess>("_modulesDeadEnd1"); private static readonly FieldRef> LevelContentModulesDeadEnd2Ref = AccessTools.FieldRefAccess>("_modulesDeadEnd2"); private static readonly FieldRef> LevelContentModulesDeadEnd3Ref = AccessTools.FieldRefAccess>("_modulesDeadEnd3"); private static readonly FieldRef> LevelContentModulesExtraction1Ref = AccessTools.FieldRefAccess>("_modulesExtraction1"); private static readonly FieldRef> LevelContentModulesExtraction2Ref = AccessTools.FieldRefAccess>("_modulesExtraction2"); private static readonly FieldRef> LevelContentModulesExtraction3Ref = AccessTools.FieldRefAccess>("_modulesExtraction3"); private static readonly FieldRef LevelContentConnectObjectRef = AccessTools.FieldRefAccess("_connectObject"); private static readonly FieldRef LevelContentBlockObjectRef = AccessTools.FieldRefAccess("_blockObject"); public static Level RegisterLevel() { //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) Level val = ScriptableObject.CreateInstance(); ((Object)val).name = "Level - Empress Fall Guys"; val.NarrativeName = "Empress - Fall Guys"; LevelValuables val2 = ScriptableObject.CreateInstance(); ((Object)val2).name = "Valuables - Empress Fall Guys"; val2.tiny = new List(); val2.small = new List(); val2.medium = new List(); val2.big = new List(); val2.wide = new List(); val2.tall = new List(); val2.veryTall = new List(); SetLevelField(val, "ModuleAmount", 0); SetLevelField(val, "PassageMaxAmount", 0); SetLevelField(val, "HasEnemies", false); SetLevelField(val, "ValuablePresets", new List { val2 }); SetLevelField(val, "AmbiencePresets", new List()); SetLevelField(val, "FogColor", (object)new Color(0.62f, 0.78f, 0.95f)); SetLevelField(val, "FogStartDistance", 70f); SetLevelField(val, "FogEndDistance", 650f); SetLevelField(val, "AmbientColor", (object)new Color(0.88f, 0.82f, 0.72f)); SetLevelField(val, "AmbientColorAdaptation", (object)new Color(0.45f, 0.5f, 0.58f)); SetLevelField(val, "ColorTemperature", 8f); SetLevelField(val, "ColorFilter", (object)new Color(1f, 0.92f, 0.82f, 1f)); SetLevelField(val, "BloomIntensity", 0.45f); SetLevelField(val, "BloomThreshold", 1.15f); SetLevelField(val, "VignetteColor", (object)new Color(0f, 0f, 0f, 1f)); SetLevelField(val, "VignetteIntensity", 0.18f); SetLevelField(val, "VignetteSmoothness", 0.7f); SetLevelField(val, "DiscordIcon", "level"); EnsureLevelFieldInstance(val, "LoadingGraphic01"); EnsureLevelFieldInstance(val, "LoadingGraphic02"); EnsureLevelFieldInstance(val, "LoadingGraphic03"); EnsureLevelFieldInstance(val, "ConnectObject"); EnsureLevelFieldInstance(val, "BlockObject"); LevelContent val3 = ScriptableObject.CreateInstance(); ((Object)val3).name = "Empress Fall Guys Content"; LevelContentLevelRef.Invoke(val3) = val; LevelContentStartRoomsRef.Invoke(val3) = new List(); LevelContentModulesNormal1Ref.Invoke(val3) = new List(); LevelContentModulesNormal2Ref.Invoke(val3) = new List(); LevelContentModulesNormal3Ref.Invoke(val3) = new List(); LevelContentModulesPassage1Ref.Invoke(val3) = new List(); LevelContentModulesPassage2Ref.Invoke(val3) = new List(); LevelContentModulesPassage3Ref.Invoke(val3) = new List(); LevelContentModulesDeadEnd1Ref.Invoke(val3) = new List(); LevelContentModulesDeadEnd2Ref.Invoke(val3) = new List(); LevelContentModulesDeadEnd3Ref.Invoke(val3) = new List(); LevelContentModulesExtraction1Ref.Invoke(val3) = new List(); LevelContentModulesExtraction2Ref.Invoke(val3) = new List(); LevelContentModulesExtraction3Ref.Invoke(val3) = new List(); LevelContentConnectObjectRef.Invoke(val3) = null; LevelContentBlockObjectRef.Invoke(val3) = null; Levels.RegisterLevel(val3); return val; } private static void SetLevelField(Level level, string fieldName, object value) { FieldInfo fieldInfo = AccessTools.Field(typeof(Level), fieldName); if (!(fieldInfo == null) && value != null && fieldInfo.FieldType.IsInstanceOfType(value)) { fieldInfo.SetValue(level, value); } } private static void EnsureLevelFieldInstance(Level level, string fieldName) { FieldInfo fieldInfo = AccessTools.Field(typeof(Level), fieldName); if (!(fieldInfo == null) && fieldInfo.FieldType.IsClass && !(fieldInfo.FieldType == typeof(string)) && fieldInfo.GetValue(level) == null) { object uninitializedObject = FormatterServices.GetUninitializedObject(fieldInfo.FieldType); fieldInfo.SetValue(level, uninitializedObject); } } } [HarmonyPatch(typeof(RunManager), "SetRunLevel")] internal static class FallGuysPatchSetRunLevel { private static void Postfix(RunManager __instance) { if (EmpressFallGuysPlugin.Settings != null && EmpressFallGuysPlugin.Settings.ForceLevel.Value && !((Object)(object)EmpressFallGuysPlugin.FallGuysLevel == (Object)null)) { __instance.levelCurrent = EmpressFallGuysPlugin.FallGuysLevel; } } } [HarmonyPatch(typeof(LevelGenerator), "Generate")] internal static class FallGuysPatchGenerate { private static bool Prefix(LevelGenerator __instance, ref IEnumerator __result) { if (!EmpressFallGuysPlugin.IsFallGuysLevel(Object.op_Implicit((Object)(object)RunManager.instance) ? RunManager.instance.levelCurrent : null)) { return true; } __result = FallGuysRuntime.EnsureHost().GenerateLevel(__instance); return false; } } [HarmonyPatch(typeof(LevelPoint), "NavMeshCheck")] internal static class FallGuysPatchNavMeshCheck { private static bool Prefix(ref IEnumerator __result) { if (!EmpressFallGuysPlugin.IsFallGuysLevel(Object.op_Implicit((Object)(object)RunManager.instance) ? RunManager.instance.levelCurrent : null)) { return true; } __result = FallGuysRuntime.EmptyCoroutine(); return false; } } [HarmonyPatch(typeof(EnvironmentDirector), "Setup")] internal static class FallGuysPatchEnvironmentSetup { private static bool Prefix(EnvironmentDirector __instance) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)LevelGenerator.Instance)) { return true; } Level level = LevelGenerator.Instance.Level; if (!Object.op_Implicit((Object)(object)level) || !EmpressFallGuysPlugin.IsFallGuysLevel(level)) { return true; } Color fogColor = level.FogColor; Color ambientColor = level.AmbientColor; FallGuysAccess.SetEnvironmentFog(__instance, fogColor, level.FogStartDistance, level.FogEndDistance); FallGuysAccess.SetEnvironmentAmbient(__instance, ambientColor, level.AmbientColorAdaptation); RenderSettings.fog = true; RenderSettings.fogMode = (FogMode)1; RenderSettings.fogColor = fogColor; RenderSettings.fogStartDistance = level.FogStartDistance; RenderSettings.fogEndDistance = level.FogEndDistance; RenderSettings.ambientLight = ambientColor; RenderSettings.ambientMode = (AmbientMode)3; Camera val = FallGuysAccess.GetEnvironmentMainCamera(__instance); if (!Object.op_Implicit((Object)(object)val)) { val = Camera.main; FallGuysAccess.SetEnvironmentMainCamera(__instance, val); } if (Object.op_Implicit((Object)(object)val)) { val.clearFlags = (CameraClearFlags)2; val.backgroundColor = fogColor; val.farClipPlane = 950f; } FallGuysAccess.SetEnvironmentDarkAdaptation(__instance, 0.25f); FallGuysAccess.SetEnvironmentSetupDone(__instance, value: true); return false; } } [HarmonyPatch(typeof(LoadingUI), "LevelAnimationStart")] internal static class FallGuysPatchLoadingUi { private static Sprite _loadingSprite; private static bool _loadingSpriteAttempted; private static void Postfix(LoadingUI __instance) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if (EmpressFallGuysPlugin.IsFallGuysLevel(Object.op_Implicit((Object)(object)LevelGenerator.Instance) ? LevelGenerator.Instance.Level : null)) { ApplyLoadingImage(__instance); if ((Object)(object)__instance.levelNumberText != (Object)null) { ((TMP_Text)__instance.levelNumberText).text = "FINAL FALL"; ((Graphic)__instance.levelNumberText).color = new Color(1f, 0.74f, 0.36f); ((Component)__instance.levelNumberText).gameObject.SetActive(true); ((TMP_Text)__instance.levelNumberText).transform.SetAsLastSibling(); } if ((Object)(object)__instance.levelNameText != (Object)null) { ((TMP_Text)__instance.levelNameText).text = "Empress - Fall Guys"; ((Graphic)__instance.levelNameText).color = new Color(1f, 0.92f, 0.74f); ((Component)__instance.levelNameText).gameObject.SetActive(true); ((TMP_Text)__instance.levelNameText).transform.SetAsLastSibling(); ApplyHint(__instance); } } } private static void ApplyLoadingImage(LoadingUI loadingUI) { Sprite loadingSprite = GetLoadingSprite(); if (!((Object)(object)loadingSprite == (Object)null)) { SetGraphic(loadingUI.loadingGraphic01, loadingSprite); SetGraphic(loadingUI.loadingGraphic02, loadingSprite); SetGraphic(loadingUI.loadingGraphic03, loadingSprite); } } private static void SetGraphic(Image image, Sprite sprite) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)image == (Object)null)) { image.sprite = sprite; ((Graphic)image).color = Color.white; image.preserveAspect = true; ((Component)image).gameObject.SetActive(true); } } private static Sprite GetLoadingSprite() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) if (_loadingSpriteAttempted) { return _loadingSprite; } _loadingSpriteAttempted = true; string path = Path.Combine(EmpressFallGuysPlugin.PluginDirectory, "loading.png"); if (!File.Exists(path)) { return null; } Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false) { wrapMode = (TextureWrapMode)1 }; if (!ImageConversion.LoadImage(val, File.ReadAllBytes(path))) { return null; } _loadingSprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); return _loadingSprite; } private static void ApplyHint(LoadingUI loadingUI) { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)loadingUI == (Object)null || (Object)(object)loadingUI.levelNameText == (Object)null) { return; } Transform parent = ((TMP_Text)loadingUI.levelNameText).transform.parent; if (!((Object)(object)parent == (Object)null)) { Transform val = parent.Find("Empress Fall Guys Loading Hint"); TextMeshProUGUI val2 = (((Object)(object)val != (Object)null) ? ((Component)val).GetComponent() : null); if ((Object)(object)val2 == (Object)null) { val2 = Object.Instantiate(loadingUI.levelNameText, parent); ((Object)val2).name = "Empress Fall Guys Loading Hint"; } ((TMP_Text)val2).text = "Get to the crown. Falling just means trying again."; ((Graphic)val2).color = new Color(0.82f, 0.9f, 1f); ((TMP_Text)val2).fontSize = Mathf.Max(15f, ((TMP_Text)loadingUI.levelNameText).fontSize * 0.45f); ((TMP_Text)val2).enableAutoSizing = true; ((TMP_Text)val2).fontSizeMin = 12f; ((TMP_Text)val2).fontSizeMax = ((TMP_Text)val2).fontSize; ((TMP_Text)val2).alignment = (TextAlignmentOptions)514; ((Component)val2).gameObject.SetActive(true); RectTransform rectTransform = ((TMP_Text)val2).rectTransform; RectTransform rectTransform2 = ((TMP_Text)loadingUI.levelNameText).rectTransform; rectTransform.anchorMin = rectTransform2.anchorMin; rectTransform.anchorMax = rectTransform2.anchorMax; rectTransform.pivot = rectTransform2.pivot; rectTransform.anchoredPosition = rectTransform2.anchoredPosition + new Vector2(0f, -72f); rectTransform.sizeDelta = new Vector2(Mathf.Max(rectTransform2.sizeDelta.x, 760f), 90f); ((TMP_Text)val2).transform.SetAsLastSibling(); } } } [HarmonyPatch(typeof(ItemManager), "TurnOffIconLights")] internal static class FallGuysPatchIconLights { private static bool Prefix(ItemManager __instance, ref IEnumerator __result) { if (!EmpressFallGuysPlugin.IsFallGuysLevel(Object.op_Implicit((Object)(object)RunManager.instance) ? RunManager.instance.levelCurrent : null)) { return true; } __result = SafeTurnOffIconLights(__instance); return false; } private static IEnumerator SafeTurnOffIconLights(ItemManager itemManager) { if (!((Object)(object)itemManager.itemIconLights == (Object)null)) { while ((Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated) { yield return (object)new WaitForSeconds(0.2f); } itemManager.itemIconLights.SetActive(false); } } } internal sealed class FallGuysRuntime : MonoBehaviour { private static readonly Dictionary SolidColors = new Dictionary { { "Dark Blue New", new Color(0f, 0.592f, 0.961f) }, { "Light Blue New", new Color(0.247f, 0.769f, 0.973f) }, { "background New", new Color(0.166f, 0.558f, 0.906f) }, { "Pink New", new Color(0.855f, 0.278f, 0.631f) }, { "Purple New", new Color(0.584f, 0.271f, 0.698f) }, { "Yellow New", new Color(0.863f, 0.655f, 0.078f) }, { "Light Yellow New", new Color(0.969f, 0.875f, 0.671f) }, { "Dark Grey New", new Color(0.906f, 0.906f, 0.906f) }, { "皮肤", new Color(0.906f, 0.906f, 0.906f) }, { "眼白", new Color(0.906f, 0.906f, 0.906f) }, { "ENV", new Color(0f, 0f, 0f) } }; private static readonly string[] HazardDecorKeywords = new string[6] { "character", "paimon", "派蒙", "crown", "coin", "sun" }; private static readonly Dictionary DoubleSidedCache = new Dictionary(); private Transform _root; private Transform _moduleRoot; private Transform _levelInstance; private Transform _finishPoint; private Vector3 _respawnPosition; private Quaternion _respawnRotation; private List _musicSources = new List(); private int _sceneHandle = -1; private bool _active; private bool _finishAnnounced; private bool _finishSequenceStarted; private float _finishCheckTimer; private float _respawnLockedUntil; private float _baseJumpForce; private bool _jumpCaptured; public static FallGuysRuntime Instance { get; private set; } internal bool Active => _active; public static FallGuysRuntime EnsureHost() { //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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown if ((Object)(object)Instance != (Object)null) { return Instance; } GameObject val = new GameObject("Empress Fall Guys Runtime"); val.transform.parent = null; ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)val); Instance = val.AddComponent(); return Instance; } public static IEnumerator EmptyCoroutine() { yield break; } private void Awake() { Instance = this; } private void Update() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) HandleSceneTransition(); if (!_active) { return; } if (!EmpressFallGuysPlugin.IsFallGuysLevel(Object.op_Implicit((Object)(object)RunManager.instance) ? RunManager.instance.levelCurrent : null)) { Deactivate(); return; } if (Input.GetKeyDown(EmpressFallGuysPlugin.Settings.CaptureSpawnKey.Value)) { CaptureSpawnHere(); } if (EmpressFallGuysPlugin.Settings.UnlimitedStamina.Value) { RefillStamina(); } ApplyJumpBoost(); UpdateMusic(); CheckLocalVoidRespawn(); if (SemiFunc.IsMasterClientOrSingleplayer() && !_finishAnnounced) { CheckFinish(); } } public IEnumerator GenerateLevel(LevelGenerator generator) { EmpressFallGuysPlugin.EnsurePhotonHooked(); FallGuysAssets.Load(); yield return (object)new WaitForSeconds(0.2f); if (!SemiFunc.IsMultiplayer()) { FallGuysAccess.SetAllPlayersReady(generator, value: true); } while (!FallGuysAccess.GetAllPlayersReady(generator)) { generator.State = (LevelState)1; yield return (object)new WaitForSeconds(0.1f); } yield return (object)new WaitForSeconds(0.2f); generator.Level = RunManager.instance.levelCurrent; FallGuysAccess.SetLevelPrevious(RunManager.instance, generator.Level); generator.Generated = false; FallGuysAccess.SetEnemyReady(generator, value: true); FallGuysAccess.SetModulesSpawned(generator, 0); FallGuysAccess.SetPlayerSpawnedCount(generator, 0); generator.LevelPathPoints = new List(); generator.LevelPathTruck = null; if ((Object)(object)RoundDirector.instance != (Object)null) { FallGuysAccess.ResetRoundExtraction(RoundDirector.instance); } generator.State = (LevelState)3; BuildLevel(generator); FallGuysRuntime fallGuysRuntime = this; Scene activeScene = SceneManager.GetActiveScene(); fallGuysRuntime._sceneHandle = ((Scene)(ref activeScene)).handle; yield return (object)new WaitForSeconds(0.2f); if (Object.op_Implicit((Object)(object)EnvironmentDirector.Instance)) { EnvironmentDirector.Instance.Setup(); } if (Object.op_Implicit((Object)(object)PostProcessing.Instance)) { PostProcessing.Instance.Setup(); } if (Object.op_Implicit((Object)(object)LevelMusic.instance)) { LevelMusic.instance.Setup(); } if (Object.op_Implicit((Object)(object)ConstantMusic.instance)) { ConstantMusic.instance.Setup(); } if (SemiFunc.IsMasterClientOrSingleplayer()) { generator.NavMeshSetup(); yield return null; while ((Object)(object)GameDirector.instance == (Object)null || GameDirector.instance.PlayerList.Count == 0) { generator.State = (LevelState)12; yield return (object)new WaitForSeconds(0.1f); } generator.PlayerSpawn(); yield return null; while (FallGuysAccess.GetPlayerSpawnedCount(generator) < GameDirector.instance.PlayerList.Count) { generator.State = (LevelState)13; yield return (object)new WaitForSeconds(0.1f); } if (SemiFunc.IsMultiplayer()) { generator.PhotonView.RPC("GenerateDone", (RpcTarget)3, Array.Empty()); } else { FallGuysAccess.GenerateDone(generator); } } else { while (!generator.Generated) { yield return (object)new WaitForSeconds(0.1f); } } yield return (object)new WaitForSeconds(0.5f); Activate(); } private void BuildLevel(LevelGenerator generator) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)generator.LevelParent != (Object)null) { for (int num = generator.LevelParent.transform.childCount - 1; num >= 0; num--) { Object.Destroy((Object)(object)((Component)generator.LevelParent.transform.GetChild(num)).gameObject); } } GameObject val = new GameObject("Empress Fall Guys Root"); val.transform.SetParent(generator.LevelParent.transform, false); _root = val.transform; GameObject val2 = new GameObject("Empress Fall Guys Module"); val2.transform.SetParent(val.transform, false); _moduleRoot = val2.transform; val2.AddComponent().ObservedComponents = new List(); FallGuysAccess.ConfigureStartRoomModule(val2.AddComponent(), 0, 0); val2.AddComponent(); GameObject levelPrefab = FallGuysAssets.LevelPrefab; if ((Object)(object)levelPrefab != (Object)null) { bool activeSelf = levelPrefab.activeSelf; levelPrefab.SetActive(false); GameObject val3 = Object.Instantiate(levelPrefab, val2.transform, false); levelPrefab.SetActive(activeSelf); ((Object)val3).name = "Empress Fall Guys Course"; _levelInstance = val3.transform; RemoveLeftovers(_levelInstance); FixMaterials(_levelInstance); DisableLevelLights(_levelInstance); MakeDoubleSided(_levelInstance); BuildHurtZones(_levelInstance); val3.SetActive(true); } _respawnPosition = EmpressFallGuysPlugin.Settings.SpawnPosition; _respawnRotation = EmpressFallGuysPlugin.Settings.SpawnRotation; _finishPoint = FindInLevel("COINS-and-CROWN_SF") ?? FindInLevel("CROWN"); RoomVolume roomVolume = BuildRoomVolume(val2); ConfigureMusicAndTriggers(); BuildSpawnPoints(val2.transform, roomVolume, generator); } private RoomVolume BuildRoomVolume(GameObject moduleObject) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) Bounds val = CalculateCourseBounds(moduleObject, _respawnPosition); GameObject val2 = new GameObject("Empress Fall Guys Room Volume"); val2.transform.SetParent(moduleObject.transform, false); RoomVolume result = val2.AddComponent(); BoxCollider obj = val2.AddComponent(); ((Collider)obj).isTrigger = true; obj.center = ((Bounds)(ref val)).center; obj.size = new Vector3(Mathf.Max(((Bounds)(ref val)).size.x + 90f, 420f), Mathf.Max(((Bounds)(ref val)).size.y + 140f, 220f), Mathf.Max(((Bounds)(ref val)).size.z + 90f, 180f)); return result; } private Bounds CalculateCourseBounds(GameObject root, Vector3 fallback) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_006e: 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_0063: Unknown result type (might be due to invalid IL or missing references) bool flag = false; Bounds bounds = default(Bounds); ((Bounds)(ref bounds))..ctor(fallback, Vector3.one); Renderer[] componentsInChildren = root.GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { if (!flag) { bounds = componentsInChildren[i].bounds; flag = true; } else { ((Bounds)(ref bounds)).Encapsulate(componentsInChildren[i].bounds); } } Collider[] componentsInChildren2 = root.GetComponentsInChildren(true); for (int j = 0; j < componentsInChildren2.Length; j++) { if (!flag) { bounds = componentsInChildren2[j].bounds; flag = true; } else { ((Bounds)(ref bounds)).Encapsulate(componentsInChildren2[j].bounds); } } return bounds; } private void ConfigureMusicAndTriggers() { //IL_00d6: Unknown result type (might be due to invalid IL or missing references) _musicSources = new List(); if ((Object)(object)_levelInstance == (Object)null) { return; } AudioSource[] componentsInChildren = ((Component)_levelInstance).GetComponentsInChildren(true); foreach (AudioSource val in componentsInChildren) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val.clip == (Object)null)) { val.spatialBlend = 0f; val.loop = true; val.playOnAwake = false; val.volume = EmpressFallGuysPlugin.Settings.MasterVolume.Value; _musicSources.Add(val); } } float num = _respawnPosition.y - 5f; Transform[] componentsInChildren2 = ((Component)_levelInstance).GetComponentsInChildren(true); foreach (Transform val2 in componentsInChildren2) { if (((Object)val2).name.IndexOf("KillTrigger", StringComparison.OrdinalIgnoreCase) < 0) { continue; } bool flag = val2.position.y < num; Collider[] componentsInChildren3 = ((Component)val2).GetComponentsInChildren(true); for (int k = 0; k < componentsInChildren3.Length; k++) { if (flag) { componentsInChildren3[k].isTrigger = true; if ((Object)(object)((Component)componentsInChildren3[k]).GetComponent() == (Object)null) { ((Component)componentsInChildren3[k]).gameObject.AddComponent(); } } else { componentsInChildren3[k].enabled = false; } } } } private void BuildSpawnPoints(Transform parent, RoomVolume roomVolume, LevelGenerator generator) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) Vector3 val = _respawnRotation * Vector3.right; Vector3 val2 = _respawnRotation * Vector3.forward; Vector3[] array = (Vector3[])(object)new Vector3[4] { Vector3.zero, val * 1.3f, -val * 1.3f, -val2 * 1.3f }; for (int i = 0; i < array.Length; i++) { GameObject val3 = new GameObject("Empress Fall Guys Spawn"); val3.transform.SetParent(parent, false); val3.transform.position = _respawnPosition + array[i] + Vector3.up * 0.15f; val3.transform.rotation = _respawnRotation; val3.AddComponent(); } Vector3 position = _respawnPosition + val2 * 5f; LevelPoint val4 = CreateLevelPoint(parent, roomVolume, generator, _respawnPosition, truck: true); LevelPoint val5 = CreateLevelPoint(parent, roomVolume, generator, position, truck: false); val4.ConnectedPoints = new List { val5 }; val5.ConnectedPoints = new List { val4 }; generator.LevelPathTruck = val4; } private static LevelPoint CreateLevelPoint(Transform parent, RoomVolume roomVolume, LevelGenerator generator, Vector3 position, bool truck) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("Empress Fall Guys Level Point"); int num = LayerMask.NameToLayer("Other"); if (num >= 0) { val.layer = num; } val.transform.SetParent(parent, false); val.transform.position = position; SphereCollider obj = val.AddComponent(); ((Collider)obj).isTrigger = true; obj.radius = 0.35f; LevelPoint val2 = val.AddComponent(); val2.ConnectedPoints = new List(); val2.Room = roomVolume; val2.Truck = truck; val2.ModuleConnect = false; FallGuysAccess.MarkLevelPointInStartRoom(val2, value: true); if (generator.LevelPathPoints == null) { generator.LevelPathPoints = new List(); } generator.LevelPathPoints.Add(val2); return val2; } private void FixMaterials(Transform levelRoot) { //IL_0096: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)levelRoot == (Object)null) { return; } Shader val = Shader.Find("Standard"); if ((Object)(object)val == (Object)null) { EmpressFallGuysPlugin.Log.LogWarning((object)"Standard shader not found; Fall Guys materials may render pink."); } HashSet hashSet = new HashSet(); Renderer[] componentsInChildren = ((Component)levelRoot).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { Material[] sharedMaterials = componentsInChildren[i].sharedMaterials; foreach (Material val2 in sharedMaterials) { if (!((Object)(object)val2 == (Object)null) && hashSet.Add(val2)) { if ((Object)(object)val != (Object)null) { val2.shader = val; } if (SolidColors.TryGetValue(((Object)val2).name, out var value)) { val2.SetColor("_Color", value); } } } } EmpressFallGuysPlugin.DebugLog("Fixed " + hashSet.Count + " Fall Guys materials."); } private void RemoveLeftovers(Transform levelRoot) { Transform[] componentsInChildren = ((Component)levelRoot).GetComponentsInChildren(true); foreach (Transform val in componentsInChildren) { if ((Object)(object)val != (Object)null && ((Object)val).name.IndexOf("StoryLog", StringComparison.OrdinalIgnoreCase) >= 0) { Object.DestroyImmediate((Object)(object)((Component)val).gameObject); } } } private void DisableLevelLights(Transform levelRoot) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 Light[] componentsInChildren = ((Component)levelRoot).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { if ((int)componentsInChildren[i].type == 1) { componentsInChildren[i].intensity = Mathf.Min(componentsInChildren[i].intensity, 1f); } else { ((Behaviour)componentsInChildren[i]).enabled = false; } } } private void MakeDoubleSided(Transform levelRoot) { MeshFilter[] componentsInChildren = ((Component)levelRoot).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { Mesh sharedMesh = componentsInChildren[i].sharedMesh; if (!((Object)(object)sharedMesh == (Object)null) && sharedMesh.isReadable) { if (!DoubleSidedCache.TryGetValue(((Object)sharedMesh).GetInstanceID(), out var value)) { value = BuildDoubleSided(sharedMesh); DoubleSidedCache[((Object)sharedMesh).GetInstanceID()] = value; } if ((Object)(object)value != (Object)null) { componentsInChildren[i].sharedMesh = value; } } } } private static Mesh BuildDoubleSided(Mesh source) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) Vector3[] vertices = source.vertices; Vector3[] normals = source.normals; Vector2[] uv = source.uv; int num = vertices.Length; if (num == 0) { return null; } Vector3[] array = (Vector3[])(object)new Vector3[num * 2]; Vector2[] array2 = (Vector2[])(object)((uv != null && uv.Length == num) ? new Vector2[num * 2] : null); Vector3[] array3 = (Vector3[])(object)((normals != null && normals.Length == num) ? new Vector3[num * 2] : null); for (int i = 0; i < num; i++) { array[i] = vertices[i]; array[i + num] = vertices[i]; if (array2 != null) { array2[i] = uv[i]; array2[i + num] = uv[i]; } if (array3 != null) { array3[i] = normals[i]; array3[i + num] = -normals[i]; } } Mesh val = new Mesh { indexFormat = (IndexFormat)1 }; val.vertices = array; if (array2 != null) { val.uv = array2; } if (array3 != null) { val.normals = array3; } val.subMeshCount = source.subMeshCount; for (int j = 0; j < source.subMeshCount; j++) { int[] triangles = source.GetTriangles(j); int[] array4 = new int[triangles.Length * 2]; for (int k = 0; k < triangles.Length; k++) { array4[k] = triangles[k]; } for (int l = 0; l < triangles.Length; l += 3) { array4[triangles.Length + l] = triangles[l] + num; array4[triangles.Length + l + 1] = triangles[l + 2] + num; array4[triangles.Length + l + 2] = triangles[l + 1] + num; } val.SetTriangles(array4, j); } if (array3 == null) { val.RecalculateNormals(); } val.RecalculateBounds(); return val; } private void BuildHurtZones(Transform levelRoot) { if (!EmpressFallGuysPlugin.Settings.Hazards.Value) { return; } Animator[] componentsInChildren = ((Component)levelRoot).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { if (IsDecor(((Object)((Component)componentsInChildren[i]).gameObject).name) || ((Object)((Component)componentsInChildren[i]).gameObject).name.IndexOf("Circle", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } Collider[] componentsInChildren2 = ((Component)componentsInChildren[i]).GetComponentsInChildren(true); for (int j = 0; j < componentsInChildren2.Length; j++) { componentsInChildren2[j].enabled = false; } MeshFilter[] componentsInChildren3 = ((Component)componentsInChildren[i]).GetComponentsInChildren(true); for (int k = 0; k < componentsInChildren3.Length; k++) { Mesh sharedMesh = componentsInChildren3[k].sharedMesh; if (!((Object)(object)sharedMesh == (Object)null) && sharedMesh.isReadable) { GameObject gameObject = ((Component)componentsInChildren3[k]).gameObject; if (!((Object)(object)gameObject.GetComponent() != (Object)null)) { MeshCollider obj = gameObject.AddComponent(); obj.sharedMesh = sharedMesh; obj.convex = true; ((Collider)obj).isTrigger = true; gameObject.AddComponent(); } } } } } private static bool IsDecor(string name) { string text = name.ToLowerInvariant(); for (int i = 0; i < HazardDecorKeywords.Length; i++) { if (text.Contains(HazardDecorKeywords[i])) { return true; } } return false; } private void RefillStamina() { PlayerController instance = PlayerController.instance; if ((Object)(object)instance != (Object)null) { instance.EnergyCurrent = instance.EnergyStart; } } private void ApplyJumpBoost() { PlayerController instance = PlayerController.instance; if (!((Object)(object)instance == (Object)null)) { if (!_jumpCaptured) { _baseJumpForce = instance.JumpForce; _jumpCaptured = true; } instance.JumpForce = _baseJumpForce * EmpressFallGuysPlugin.Settings.JumpBoost.Value; } } private void RestoreJumpBoost() { if (_jumpCaptured && (Object)(object)PlayerController.instance != (Object)null) { PlayerController.instance.JumpForce = _baseJumpForce; } _jumpCaptured = false; } private void CaptureSpawnHere() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: 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_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar val = LocalAvatar(); if (IsPlayable(val)) { Vector3 position = ((Component)val).transform.position; float y = ((Component)val).transform.eulerAngles.y; EmpressFallGuysPlugin.Settings.SpawnX.Value = position.x; EmpressFallGuysPlugin.Settings.SpawnY.Value = position.y; EmpressFallGuysPlugin.Settings.SpawnZ.Value = position.z; EmpressFallGuysPlugin.Settings.SpawnYaw.Value = ((y > 180f) ? (y - 360f) : y); _respawnPosition = position; _respawnRotation = Quaternion.Euler(0f, y, 0f); EmpressFallGuysPlugin.Log.LogInfo((object)("Fall Guys spawn set to " + position.x.ToString("F2") + ", " + position.y.ToString("F2") + ", " + position.z.ToString("F2") + " (yaw " + y.ToString("F1") + ").")); SemiFunc.UIFocusText("Spawn set: " + position.x.ToString("F0") + ", " + position.y.ToString("F0") + ", " + position.z.ToString("F0"), new Color(0.6f, 1f, 0.6f), Color.white, 2.5f); } } private void Activate() { //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) _active = true; _finishAnnounced = false; _finishSequenceStarted = false; _finishCheckTimer = 0f; _respawnLockedUntil = 0f; UpdateMusic(); for (int i = 0; i < _musicSources.Count; i++) { AudioSource val = _musicSources[i]; if ((Object)(object)val != (Object)null && (Object)(object)val.clip != (Object)null && !val.isPlaying) { val.Play(); } } SemiFunc.UIFocusText("Get to the crown.", new Color(1f, 0.72f, 0.34f), Color.white, 4f); } private void Deactivate() { _active = false; RestoreJumpBoost(); for (int i = 0; i < _musicSources.Count; i++) { if ((Object)(object)_musicSources[i] != (Object)null && _musicSources[i].isPlaying) { _musicSources[i].Stop(); } } _musicSources.Clear(); _root = null; _moduleRoot = null; _levelInstance = null; _finishPoint = null; } private void HandleSceneTransition() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (_active) { Scene activeScene = SceneManager.GetActiveScene(); int handle = ((Scene)(ref activeScene)).handle; if (_sceneHandle != -1 && handle != _sceneHandle) { Deactivate(); } } } private void UpdateMusic() { float volume = ((EmpressFallGuysPlugin.Settings != null) ? EmpressFallGuysPlugin.Settings.MasterVolume.Value : 0.8f); for (int i = 0; i < _musicSources.Count; i++) { if ((Object)(object)_musicSources[i] != (Object)null) { _musicSources[i].volume = volume; } } } private void CheckLocalVoidRespawn() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar val = LocalAvatar(); if (IsPlayable(val)) { float num = ((EmpressFallGuysPlugin.Settings != null) ? EmpressFallGuysPlugin.Settings.VoidY.Value : (-80f)); if (((Component)val).transform.position.y < num) { RespawnLocal(force: true); } } } private void CheckFinish() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_finishPoint == (Object)null) { return; } _finishCheckTimer -= Time.deltaTime; if (_finishCheckTimer > 0f) { return; } _finishCheckTimer = 0.2f; float value = EmpressFallGuysPlugin.Settings.FinishRadius.Value; List list = PlayablePlayers(); for (int i = 0; i < list.Count; i++) { if (Vector3.Distance(((Component)list[i]).transform.position, _finishPoint.position) <= value) { CompleteHost(list[i]); break; } } } private void CompleteHost(PlayerAvatar winner) { if (!_finishAnnounced) { _finishAnnounced = true; int value = EmpressFallGuysPlugin.Settings.FinishReward.Value; string text = (((Object)(object)winner != (Object)null) ? FallGuysAccess.GetPlayerName(winner) : null); SemiFunc.StatSetRunCurrency(SemiFunc.StatGetRunCurrency() + value); SemiFunc.StatSetRunTotalHaul(SemiFunc.StatGetRunTotalHaul() + value); if ((Object)(object)CurrencyUI.instance != (Object)null) { CurrencyUI.instance.FetchCurrency(); } EmpressFallGuysPlugin.RaiseToAll(176, new object[2] { value, text }); } } internal void ReceiveFinish(object[] data) { if (!_finishSequenceStarted) { _finishSequenceStarted = true; int reward = ((data != null && data.Length != 0) ? ToInt(data[0]) : 50); string winnerName = ((data != null && data.Length > 1) ? (data[1] as string) : null); ((MonoBehaviour)this).StartCoroutine(FinishSequence(reward, winnerName)); } } private IEnumerator FinishSequence(int reward, string winnerName) { SemiFunc.UIFocusText((string.IsNullOrEmpty(winnerName) ? "A player" : winnerName) + " grabbed the crown!\n$" + reward + ",000 to the team", new Color(1f, 0.86f, 0.28f), Color.white, 5f); if ((Object)(object)CurrencyUI.instance != (Object)null) { CurrencyUI.instance.FetchCurrency(); } float timer = 5f; while (timer > 0f) { timer -= Time.unscaledDeltaTime; yield return null; } if (SemiFunc.IsMasterClientOrSingleplayer() && (Object)(object)RunManager.instance != (Object)null && EmpressFallGuysPlugin.IsFallGuysLevel(RunManager.instance.levelCurrent)) { RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)0); } } internal void RespawnFromTrigger(Collider other) { if (!_active || (Object)(object)other == (Object)null) { return; } PlayerAvatar val = LocalAvatar(); if (IsPlayable(val)) { PlayerAvatar componentInParent = ((Component)other).GetComponentInParent(); PlayerController componentInParent2 = ((Component)other).GetComponentInParent(); if ((Object)(object)componentInParent == (Object)(object)val || (Object)(object)componentInParent2 == (Object)(object)PlayerController.instance || ((Component)other).transform.IsChildOf(((Component)val).transform)) { RespawnLocal(force: false); } } } private void RespawnLocal(bool force) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (force || !(Time.time < _respawnLockedUntil)) { _respawnLockedUntil = Time.time + 1.2f; FallGuysAccess.TeleportLocalPlayer(_respawnPosition + Vector3.up * 0.8f, _respawnRotation); SemiFunc.UIFocusText("Back to the start.", new Color(0.58f, 0.88f, 1f), Color.white, 1.8f); } } private Transform FindInLevel(string name) { if ((Object)(object)_levelInstance == (Object)null) { return null; } Transform[] componentsInChildren = ((Component)_levelInstance).GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { if (((Object)componentsInChildren[i]).name == name) { return componentsInChildren[i]; } } return null; } private static PlayerAvatar LocalAvatar() { if (!((Object)(object)PlayerController.instance != (Object)null)) { return null; } return PlayerController.instance.playerAvatarScript; } private static bool IsPlayable(PlayerAvatar avatar) { if ((Object)(object)avatar != (Object)null && !FallGuysAccess.GetIsDisabled(avatar)) { return !FallGuysAccess.GetDeadSet(avatar); } return false; } private List PlayablePlayers() { List list = new List(); if ((Object)(object)GameDirector.instance != (Object)null && GameDirector.instance.PlayerList != null) { for (int i = 0; i < GameDirector.instance.PlayerList.Count; i++) { PlayerAvatar val = GameDirector.instance.PlayerList[i]; if (IsPlayable(val)) { list.Add(val); } } } if (list.Count == 0) { PlayerAvatar val2 = LocalAvatar(); if (IsPlayable(val2)) { list.Add(val2); } } return list; } private static int ToInt(object value) { if (value is int) { return (int)value; } if (value is short) { return (short)value; } if (value is byte) { return (byte)value; } if (value is long num) { return (int)num; } if (value is float num2) { return Mathf.RoundToInt(num2); } if (value is double num3) { return Mathf.RoundToInt((float)num3); } return 0; } } internal sealed class FallGuysRespawnTrigger : MonoBehaviour { private void OnTriggerEnter(Collider other) { FallGuysRuntime.Instance?.RespawnFromTrigger(other); } } internal sealed class FallGuysHurtZone : MonoBehaviour { private void OnTriggerEnter(Collider other) { TryKill(other); } private void OnTriggerStay(Collider other) { TryKill(other); } private static void TryKill(Collider other) { FallGuysRuntime instance = FallGuysRuntime.Instance; if ((Object)(object)instance == (Object)null || !instance.Active || (Object)(object)other == (Object)null) { return; } PlayerAvatar val = (((Object)(object)PlayerController.instance != (Object)null) ? PlayerController.instance.playerAvatarScript : null); if (!((Object)(object)val == (Object)null) && !FallGuysAccess.GetIsDisabled(val) && !FallGuysAccess.GetDeadSet(val)) { PlayerAvatar componentInParent = ((Component)other).GetComponentInParent(); PlayerController componentInParent2 = ((Component)other).GetComponentInParent(); if ((Object)(object)componentInParent == (Object)(object)val || (Object)(object)componentInParent2 == (Object)(object)PlayerController.instance || ((Component)other).transform.IsChildOf(((Component)val).transform)) { val.PlayerDeath(-1); } } } } }