Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Lacrimosum v1.4.1
BepInEx\Plugins\Lacrimosum.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CSync.Extensions; using CSync.Lib; using GameNetcodeStuff; using Lacrimosum.Assets; using Lacrimosum.Helpers; using Lacrimosum.ItemScripts; using Lacrimosum.NetcodePatcher; using Lacrimosum.Patching; using LethalLib.Modules; using Microsoft.CodeAnalysis; using On; using On.GameNetcodeStuff; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("MMHOOK_Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("FragileDeviations")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.4.1.0")] [assembly: AssemblyInformationalVersion("1.0.0+0c7a440b4cf25d0f23be4674045cdbd96c3a57bf")] [assembly: AssemblyProduct("Lacrimosum")] [assembly: AssemblyTitle("Lacrimosum")] [assembly: NeutralResourcesLanguage("en-US")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Lacrimosum { [BepInPlugin("fragiledeviations.lacrimosum", "Lacrimosum", "1.4.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency("com.sigurd.csync", "5.0.1")] internal class RoR2Plugin : BaseUnityPlugin { private const string PluginName = "Lacrimosum"; private const string PluginVersion = "1.4.1"; internal const string PluginGuid = "fragiledeviations.lacrimosum"; internal static readonly string AssemblyLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); internal static ManualLogSource ModConsole; internal static LacrimosumConfig ModConfig; private void Awake() { ModConsole = ((BaseUnityPlugin)this).Logger; ModConsole.LogInfo((object)"Loading fragiledeviations.lacrimosum..."); ModConfig = new LacrimosumConfig(((BaseUnityPlugin)this).Config); ModConsole.LogInfo((object)"Config loaded for fragiledeviations.lacrimosum"); NetcodePatcher(); ModConsole.LogInfo((object)"Netcode patched for fragiledeviations.lacrimosum"); ModAssets.Load(); ModConsole.LogInfo((object)"Assets loaded for fragiledeviations.lacrimosum"); PlayerEventTracker.Init(); ModConsole.LogInfo((object)"PlayerEventTracker loaded"); NetworkPrefabsHelper.Init(); ModConsole.LogInfo((object)"NetworkPrefabsHelper loaded"); MenuMusicReplacer.Init(); ModConsole.LogInfo((object)"MenuMusicReplacer loaded"); MineReplacement.Init(); ModConsole.LogInfo((object)"MineReplacement loaded"); ElevatorMusicReplacer.Init(); ModConsole.LogInfo((object)"ElevatorMusicReplacer loaded"); ModConsole.LogInfo((object)"Loaded fragiledeviations.lacrimosum!"); } private static void NetcodePatcher() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].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); } } } } } internal class LacrimosumConfig : SyncedConfig2<LacrimosumConfig> { private const string GeneralSection = "General"; private const string ScrapSection = "Scrap"; private const string ShopSection = "Shop Items"; public ConfigEntry<bool> AlwaysReplaceMenuMusic { get; set; } public SyncedEntry<bool> AlwaysReplaceElevatorMusic { get; set; } public SyncedEntry<bool> DontOverrideMineCode { get; set; } [field: SyncedEntryField] public SyncedEntry<int> WilloWispSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> GoatHoofSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<float> GoatHoofSpeedIncrease { get; set; } [field: SyncedEntryField] public SyncedEntry<int> WhiteScrapSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> GreenScrapSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> RedScrapSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> YellowScrapSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> BungusSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> BungusHealthIncrease { get; set; } [field: SyncedEntryField] public SyncedEntry<float> BungusHealInterval { get; set; } [field: SyncedEntryField] public SyncedEntry<float> BungusActivationTime { get; set; } [field: SyncedEntryField] public SyncedEntry<bool> BungusMode { get; set; } [field: SyncedEntryField] public SyncedEntry<int> RollOfPenniesSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> RollOfPenniesValueIncrease { get; set; } [field: SyncedEntryField] public SyncedEntry<int> RollOfPenniesMaxValue { get; set; } [field: SyncedEntryField] public SyncedEntry<int> UkuleleSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> GooboJrSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<int> HappiestMaskSpawnWeight { get; set; } [field: SyncedEntryField] public SyncedEntry<bool> EnableShopItems { get; set; } [field: SyncedEntryField] public SyncedEntry<int> SaferSpacesPrice { get; set; } [field: SyncedEntryField] public SyncedEntry<float> SaferSpacesCooldown { get; set; } [field: SyncedEntryField] public SyncedEntry<int> PowerElixirPrice { get; set; } [field: SyncedEntryField] public SyncedEntry<int> PowerElixirHealthThreshold { get; set; } [field: SyncedEntryField] public SyncedEntry<float> PowerElixirHealPercentage { get; set; } public LacrimosumConfig(ConfigFile configFile) : base("fragiledeviations.lacrimosum") { AlwaysReplaceMenuMusic = configFile.Bind<bool>("General", "AlwaysReplaceMenuMusic", false, "Always replace the menu music with the RoR2 menu music."); AlwaysReplaceElevatorMusic = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "General", "AlwaysReplaceElevatorMusic", false, "Always replace the elevator music with the RoR1 final stage theme."); DontOverrideMineCode = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "General", "DontOverrideMineCode", false, "Don't override the mine explosion code. Having this enabled will make Safer Spaces unable to save you from mines."); WilloWispSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "WilloWispSpawnWeight", 20, "Explode enemies on death, except you're the enemy"); GoatHoofSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "GoatHoofSpawnWeight", 20, "Increase movement speed."); GoatHoofSpeedIncrease = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Scrap", "GoatHoofSpeedIncrease", 4.6f, "How much to increase movement speed by. The player's base speed is 4.6, for reference."); WhiteScrapSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "WhiteScrapSpawnWeight", 40, "Does nothing."); GreenScrapSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "GreenScrapSpawnWeight", 30, "Does nothing."); YellowScrapSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "YellowScrapSpawnWeight", 20, "Does nothing."); RedScrapSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "RedScrapSpawnWeight", 10, "Does nothing."); BungusSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "BungusSpawnWeight", 20, "Heal when standing still."); BungusHealthIncrease = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "BungusHealthIncrease", 5, "How much health to increase per heal tick."); BungusHealInterval = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Scrap", "BungusHealInterval", 1f, "How often to heal."); BungusActivationTime = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Scrap", "BungusActivationTime", 1f, "How long to stand still before healing."); BungusMode = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Scrap", "BungusMode", false, "Rename the item to Bungus. If false, it's called Bustling Fungus."); RollOfPenniesSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "RollOfPenniesSpawnWeight", 40, "Increases item value upon taking damage."); RollOfPenniesValueIncrease = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "RollOfPenniesValueIncrease", 20, "How much to increase item value by."); RollOfPenniesMaxValue = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "RollOfPenniesMaxValue", 100, "The maximum value the item can reach."); UkuleleSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "UkuleleSpawnWeight", 30, "...and his music was electric."); GooboJrSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "GooboJrSpawnWeight", 10, "Spawn a gummy clone of yourself. May not be friendly."); HappiestMaskSpawnWeight = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Scrap", "HappiestMaskSpawnWeight", 10, "I hate this thing."); EnableShopItems = SyncedBindingExtensions.BindSyncedEntry<bool>(configFile, "Shop Items", "EnableShopItems", true, "Enable the shop items."); SaferSpacesPrice = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Shop Items", "SaferSpacesPrice", 800, "Block one incoming hit. Recharges after a short delay."); SaferSpacesCooldown = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Shop Items", "SaferSpacesCooldown", 3f, "How long to wait before recharging the block."); PowerElixirPrice = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Shop Items", "PowerElixirPrice", 500, "Heal for a percentage of your health when you reach a certain health threshold."); PowerElixirHealthThreshold = SyncedBindingExtensions.BindSyncedEntry<int>(configFile, "Shop Items", "PowerElixirHealthThreshold", 25, "The health threshold to activate the item."); PowerElixirHealPercentage = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Shop Items", "PowerElixirHealPercentage", 75f, "The percentage of health to heal when activated."); ConfigManager.Register<LacrimosumConfig>((SyncedConfig2<LacrimosumConfig>)this); } } public static class PluginInfo { public const string PLUGIN_GUID = "Lacrimosum"; public const string PLUGIN_NAME = "Lacrimosum"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace Lacrimosum.Patching { internal static class ElevatorMusicReplacer { [CompilerGenerated] private static class <>O { public static hook_OnEnable <0>__OnElevatorEnable; public static hook_ShipLeave <1>__OnShipLeave; public static hook_Start <2>__OnTerminalStart; } private static bool _ranOnce; private static Terminal _terminal; public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_006e: 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_0079: Expected O, but got Unknown object obj = <>O.<0>__OnElevatorEnable; if (obj == null) { hook_OnEnable val = OnElevatorEnable; <>O.<0>__OnElevatorEnable = val; obj = (object)val; } MineshaftElevatorController.OnEnable += (hook_OnEnable)obj; RoR2Plugin.ModConsole.LogDebug((object)"ElevatorMusicReplacer: MineshaftElevatorController.OnEnable hooked!"); object obj2 = <>O.<1>__OnShipLeave; if (obj2 == null) { hook_ShipLeave val2 = OnShipLeave; <>O.<1>__OnShipLeave = val2; obj2 = (object)val2; } StartOfRound.ShipLeave += (hook_ShipLeave)obj2; RoR2Plugin.ModConsole.LogDebug((object)"ElevatorMusicReplacer: StartOfRound.ShipLeave hooked!"); object obj3 = <>O.<2>__OnTerminalStart; if (obj3 == null) { hook_Start val3 = OnTerminalStart; <>O.<2>__OnTerminalStart = val3; obj3 = (object)val3; } Terminal.Start += (hook_Start)obj3; } private static void OnTerminalStart(orig_Start orig, Terminal self) { orig.Invoke(self); _terminal = self; } private static void OnShipLeave(orig_ShipLeave orig, StartOfRound self) { orig.Invoke(self); _ranOnce = false; } private static void OnElevatorEnable(orig_OnEnable orig, MineshaftElevatorController self) { orig.Invoke(self); if (!_ranOnce) { if (SyncedEntry<bool>.op_Implicit(RoR2Plugin.ModConfig.AlwaysReplaceElevatorMusic)) { self.elevatorJingleMusic.clip = ModAssets.ElevatorMusic; _ranOnce = true; } else if (new Random(_terminal.groupCredits * StartOfRound.Instance.connectedPlayersAmount).Next(0, 100) <= 2) { self.elevatorJingleMusic.clip = ModAssets.ElevatorMusic; _ranOnce = true; } } } } internal static class MenuMusicReplacer { [CompilerGenerated] private static class <>O { public static hook_Awake <0>__OnMenuAwake; } private static readonly Random Rnd = new Random(); public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__OnMenuAwake; if (obj == null) { hook_Awake val = OnMenuAwake; <>O.<0>__OnMenuAwake = val; obj = (object)val; } MenuManager.Awake += (hook_Awake)obj; RoR2Plugin.ModConsole.LogDebug((object)"MenuMusicReplacer: MenuManager.Awake hooked!"); } private static void OnMenuAwake(orig_Awake orig, MenuManager self) { if (RoR2Plugin.ModConfig.AlwaysReplaceMenuMusic.Value) { ReplaceMenuMusic(self); ChangeMenuColors(self); AddLilGuy(self); } else if (Rnd.Next(0, 100) < 2) { ReplaceMenuMusic(self); ChangeMenuColors(self); AddLilGuy(self); } orig.Invoke(self); } private static void ChangeMenuColors(MenuManager menu) { //IL_0040: 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) Color color = default(Color); ((Color)(ref color))..ctor(0f, 0.9822383f, 1f, 1f); GameObject gameObject = ((Component)menu.menuAnimator).gameObject; ((Graphic)((Component)gameObject.transform.Find("VersionNum")).gameObject.GetComponent<TextMeshProUGUI>()).color = color; GameObject gameObject2 = ((Component)gameObject.transform.Find("MainButtons")).gameObject; ((Graphic)gameObject2.GetComponent<Image>()).color = color; ((Component)gameObject2.transform.Find("HeaderImage")).gameObject.GetComponent<Image>().sprite = ModAssets.BlueLogo; } private static void ReplaceMenuMusic(MenuManager menu) { menu.menuMusic = ModAssets.RoR2MenuMusic; } private static void AddLilGuy(MenuManager menu) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) GameObject gameObject = ((Component)((Component)menu.menuAnimator).gameObject.transform.Find("MainButtons")).gameObject; RectTransform component = Object.Instantiate<GameObject>(ModAssets.LilGuyPrefab, gameObject.transform).GetComponent<RectTransform>(); ((Transform)component).localPosition = new Vector3(207.6f, 106.5756f, 0f); component.anchoredPosition = new Vector2(207.6f, -130.3f); component.sizeDelta = new Vector2(130f, -130.3f); } } internal static class MineReplacement { [CompilerGenerated] private static class <>O { public static hook_SpawnExplosion <0>__OnMineSpawnExplosion; } public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__OnMineSpawnExplosion; if (obj == null) { hook_SpawnExplosion val = OnMineSpawnExplosion; <>O.<0>__OnMineSpawnExplosion = val; obj = (object)val; } Landmine.SpawnExplosion += (hook_SpawnExplosion)obj; RoR2Plugin.ModConsole.LogDebug((object)"MineReplacement: Landmine.SpawnExplosion hooked!"); } private static void OnMineSpawnExplosion(orig_SpawnExplosion orig, Vector3 explosionPosition, bool spawnExplosionEffect, float killRange, float damageRange, int nonLethalDamage, float physicsForce, GameObject overridePrefab, bool goThroughCar) { //IL_0025: 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) if (SyncedEntry<bool>.op_Implicit(RoR2Plugin.ModConfig.DontOverrideMineCode)) { orig.Invoke(explosionPosition, spawnExplosionEffect, killRange, damageRange, nonLethalDamage, physicsForce, overridePrefab, goThroughCar); } else { Utilities.CreateExplosion(explosionPosition, spawnExplosionEffect, 100, killRange, damageRange, physicsForce.RoundToInt(), (CauseOfDeath)3); } } } internal static class NetworkPrefabsHelper { [CompilerGenerated] private static class <>O { public static hook_Start <0>__OnNetworkManagerStart; } public static readonly List<GameObject> NetworkPrefabs = new List<GameObject>(); public static EnemyType MaskedEnemy; public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__OnNetworkManagerStart; if (obj == null) { hook_Start val = OnNetworkManagerStart; <>O.<0>__OnNetworkManagerStart = val; obj = (object)val; } GameNetworkManager.Start += (hook_Start)obj; } private static void OnNetworkManagerStart(orig_Start orig, GameNetworkManager self) { orig.Invoke(self); foreach (NetworkPrefab prefab in NetworkManager.Singleton.NetworkConfig.Prefabs.Prefabs) { NetworkPrefabs.Add(prefab.Prefab); } FindRequiredPrefabs(); } private static void FindRequiredPrefabs() { MaskedEnemy = NetworkPrefabs.Find((GameObject prefab) => ((Object)prefab).name == "MaskedPlayerEnemy").GetComponent<EnemyAI>().enemyType; } } internal static class PlayerEventTracker { [CompilerGenerated] private static class <>O { public static hook_SpawnDeadBody <0>__PlayerCorpseSpawned; public static hook_DamagePlayer <1>__PlayerDamaged; public static hook_Start <2>__PlayerStart; } public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_006e: 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_0079: Expected O, but got Unknown object obj = <>O.<0>__PlayerCorpseSpawned; if (obj == null) { hook_SpawnDeadBody val = PlayerCorpseSpawned; <>O.<0>__PlayerCorpseSpawned = val; obj = (object)val; } PlayerControllerB.SpawnDeadBody += (hook_SpawnDeadBody)obj; RoR2Plugin.ModConsole.LogDebug((object)"PlayerEventTracker: PlayerControllerB.SpawnDeadBody hooked!"); object obj2 = <>O.<1>__PlayerDamaged; if (obj2 == null) { hook_DamagePlayer val2 = PlayerDamaged; <>O.<1>__PlayerDamaged = val2; obj2 = (object)val2; } PlayerControllerB.DamagePlayer += (hook_DamagePlayer)obj2; RoR2Plugin.ModConsole.LogDebug((object)"PlayerEventTracker: PlayerControllerB.DamagePlayer hooked!"); object obj3 = <>O.<2>__PlayerStart; if (obj3 == null) { hook_Start val3 = PlayerStart; <>O.<2>__PlayerStart = val3; obj3 = (object)val3; } PlayerControllerB.Start += (hook_Start)obj3; RoR2Plugin.ModConsole.LogDebug((object)"PlayerEventTracker: PlayerControllerB.Start hooked!"); } private static void PlayerDamaged(orig_DamagePlayer orig, PlayerControllerB self, int damageNumber, bool hasDamageSfx, bool callRPC, CauseOfDeath causeOfDeath, int deathAnimation, bool fallDamage, Vector3 force) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) RoR2Plugin.ModConsole.LogDebug((object)(self.playerUsername + " damaged")); List<SaferSpaces> activeSpaces = SaferSpaces.ActiveSpaces; if (activeSpaces.Count == 0) { HandlePennies(self); RoR2Plugin.ModConsole.LogDebug((object)("HandlePennies for " + self.playerUsername)); HandlePowerElixir(self, damageNumber); RoR2Plugin.ModConsole.LogDebug((object)("HandlePowerElixir for " + self.playerUsername)); orig.Invoke(self, damageNumber, hasDamageSfx, callRPC, causeOfDeath, deathAnimation, fallDamage, force); RoR2Plugin.ModConsole.LogDebug((object)("Player " + self.playerUsername + " will take damage because no one is holding a Safer Spaces.")); } foreach (SaferSpaces item in activeSpaces) { if (item.IsPlayerHolding(self)) { if (item.CanBlock) { RoR2Plugin.ModConsole.LogDebug((object)("Player " + self.playerUsername + " will not take damage because " + ((Object)((Component)item).gameObject).name + " is holding a Safer Spaces.")); item.PlaySound(); item.StartCooldown(); } else { HandlePennies(self); RoR2Plugin.ModConsole.LogDebug((object)("HandlePennies for " + self.playerUsername)); HandlePowerElixir(self, damageNumber); RoR2Plugin.ModConsole.LogDebug((object)("HandlePowerElixir for " + self.playerUsername)); orig.Invoke(self, damageNumber, hasDamageSfx, callRPC, causeOfDeath, deathAnimation, fallDamage, force); RoR2Plugin.ModConsole.LogDebug((object)("Player " + self.playerUsername + " will take damage because their safer spaces is on cooldown or is out of battery.")); } } } } private static void PlayerCorpseSpawned(orig_SpawnDeadBody orig, PlayerControllerB self, int playerId, Vector3 bodyVelocity, int causeOfDeath, PlayerControllerB deadPlayerController, int deathAnimation, Transform overridePosition, Vector3 positionOffset) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) RoR2Plugin.ModConsole.LogDebug((object)(self.playerUsername + "'s corpse got spawned")); orig.Invoke(self, playerId, bodyVelocity, causeOfDeath, deadPlayerController, deathAnimation, overridePosition, positionOffset); HandleWillOWisp(self); RoR2Plugin.ModConsole.LogDebug((object)("HandleWillOWisp for " + self.playerUsername)); } private static void PlayerStart(orig_Start orig, PlayerControllerB self) { RoR2Plugin.ModConsole.LogDebug((object)("Player " + self.playerUsername + " started!")); orig.Invoke(self); SetupBungusWard(self); SetupSaferSpacesBubble(self); } private static void SetupBungusWard(PlayerControllerB player) { GameObject obj = Object.Instantiate<GameObject>(ModAssets.BungusMushroomWardPrefab, ((Component)player).transform); ((Object)obj).name = "MushroomWard"; obj.SetActive(false); RoR2Plugin.ModConsole.LogDebug((object)("Set up BungusWard for " + player.playerUsername + "!")); } private static void SetupSaferSpacesBubble(PlayerControllerB player) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) GameObject obj = Object.Instantiate<GameObject>(ModAssets.SaferSpacesBubblePrefab, ((Component)player).transform); ((Object)obj).name = "SaferSpacesBubble"; obj.SetActive(false); obj.transform.localPosition = new Vector3(0f, 2.299524f, 0f); obj.transform.SetParent(player.playerGlobalHead, true); RoR2Plugin.ModConsole.LogDebug((object)("Set up SaferSpacesBubble for " + player.playerUsername + "!")); } private static void HandleWillOWisp(PlayerControllerB player) { if (WilloWisp.ActiveWisps.Count == 0) { return; } foreach (WilloWisp activeWisp in WilloWisp.ActiveWisps) { activeWisp.CheckPlayerDeath(player); } } private static void HandlePennies(PlayerControllerB player) { if (RollOfPennies.ActivePennies.Count == 0) { return; } foreach (RollOfPennies activePenny in RollOfPennies.ActivePennies) { activePenny.CheckDamagedPlayer(player); } } private static void HandlePowerElixir(PlayerControllerB player, int damage) { if (PowerElixir.ActiveElixirs.Count == 0) { return; } foreach (PowerElixir activeElixir in PowerElixir.ActiveElixirs) { activeElixir.CheckHealth(player, damage); } } } } namespace Lacrimosum.ItemScripts { [AddComponentMenu("Lacrimosum/Bustling Fungus")] public class Bungus : ItemBehaviour { [Space(10f)] [Header("Bustling Fungus Settings")] [Tooltip("The amount of health to heal per second when in the zone.")] public int addedHealth = 10; [Tooltip("The time between each heal.")] public float healInterval = 1f; [Tooltip("How long the player must be standing for the zone to activate.")] public float activationTime = 3f; [Tooltip("The sound to play when the zone activates.")] public AudioClip activationSound; private bool _isHealing; private GameObject _mushroomWard; public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); addedHealth = SyncedEntry<int>.op_Implicit(RoR2Plugin.ModConfig.BungusHealthIncrease); healInterval = SyncedEntry<float>.op_Implicit(RoR2Plugin.ModConfig.BungusHealInterval); activationTime = SyncedEntry<float>.op_Implicit(RoR2Plugin.ModConfig.BungusActivationTime); if (SyncedEntry<bool>.op_Implicit(RoR2Plugin.ModConfig.BungusMode)) { base.ScanNodeProperties.headerText = "Bungus"; } } public override void GrabItem() { base.GrabItem(); _mushroomWard = ((GrabbableObject)this).playerHeldBy.GetMushroomWard(); } public override void Update() { ((GrabbableObject)this).Update(); if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy)) { if (((GrabbableObject)this).playerHeldBy.timeSincePlayerMoving > activationTime && !_isHealing) { StartHealServerRpc(); } else if (((GrabbableObject)this).playerHeldBy.timeSincePlayerMoving < activationTime && _isHealing) { StopHealServerRpc(); } } } [ServerRpc(RequireOwnership = false)] public void StartHealServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3871419403u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3871419403u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { StartHealClientRpc(); } } } [ClientRpc] public void StartHealClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2151538089u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2151538089u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { _isHealing = true; base.AudioSource.PlayOneShot(activationSound); _mushroomWard.SetActive(true); ((MonoBehaviour)this).StartCoroutine(HealRoutine()); } } } [ServerRpc(RequireOwnership = false)] public void StopHealServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1926513613u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1926513613u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { StopHealClientRpc(); } } } [ClientRpc] public void StopHealClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4147429621u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4147429621u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { _isHealing = false; _mushroomWard.SetActive(false); } } } private IEnumerator HealRoutine() { PlayerControllerB val = default(PlayerControllerB); while (_isHealing) { Collider[] array = Physics.OverlapSphere(((Component)this).transform.position, 3f, LayerMask.GetMask(new string[1] { "Player" })); Collider[] array2 = array; for (int i = 0; i < array2.Length; i++) { if (!((Component)array2[i]).TryGetComponent<PlayerControllerB>(ref val)) { continue; } if (val.health != 100) { PlayerControllerB obj = val; obj.health += addedHealth; if (val.health > 100) { val.health = 100; } ((GrabbableObject)this).playerHeldBy.criticallyInjured = false; if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy.playerBodyAnimator)) { ((GrabbableObject)this).playerHeldBy.playerBodyAnimator.SetBool("Limp", false); } ((GrabbableObject)this).playerHeldBy.bleedingHeavily = false; } yield return (object)new WaitForSeconds(healInterval); } } } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); if (_isHealing) { StopHealServerRpc(); } _mushroomWard.SetActive(false); _mushroomWard = null; } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_Bungus() { //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 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(3871419403u, new RpcReceiveHandler(__rpc_handler_3871419403)); NetworkManager.__rpc_func_table.Add(2151538089u, new RpcReceiveHandler(__rpc_handler_2151538089)); NetworkManager.__rpc_func_table.Add(1926513613u, new RpcReceiveHandler(__rpc_handler_1926513613)); NetworkManager.__rpc_func_table.Add(4147429621u, new RpcReceiveHandler(__rpc_handler_4147429621)); } private static void __rpc_handler_3871419403(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)1; ((Bungus)(object)target).StartHealServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2151538089(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; ((Bungus)(object)target).StartHealClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1926513613(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)1; ((Bungus)(object)target).StopHealServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4147429621(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; ((Bungus)(object)target).StopHealClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "Bungus"; } } [AddComponentMenu("Lacrimosum/Paul's Goat Hoof")] public class GoatHoof : ItemBehaviour { [Space(10f)] [Header("Paul's Goat Hoof Settings")] [Tooltip("The amount of speed to add when held.")] public float addedSpeedPercent = 4.6f; public override void OnNetworkSpawn() { addedSpeedPercent = SyncedEntry<float>.op_Implicit(RoR2Plugin.ModConfig.GoatHoofSpeedIncrease); } public override void GrabItem() { base.GrabItem(); if (((NetworkBehaviour)this).IsOwner) { AddSpeedServerRpc(); } } [ServerRpc(RequireOwnership = false)] private void AddSpeedServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2264686608u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2264686608u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { AddSpeedClientRpc(); } } } [ClientRpc] private void AddSpeedClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3950335989u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3950335989u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy; playerHeldBy.movementSpeed += addedSpeedPercent; } } } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); if (((NetworkBehaviour)this).IsOwner) { RemoveSpeedServerRpc(); } } [ServerRpc(RequireOwnership = false)] private void RemoveSpeedServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2013262870u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2013262870u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { RemoveSpeedClientRpc(); } } } [ClientRpc] private void RemoveSpeedClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2130733099u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2130733099u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { PlayerControllerB lastPlayerHeldBy = LastPlayerHeldBy; lastPlayerHeldBy.movementSpeed -= addedSpeedPercent; } } } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_GoatHoof() { //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 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2264686608u, new RpcReceiveHandler(__rpc_handler_2264686608)); NetworkManager.__rpc_func_table.Add(3950335989u, new RpcReceiveHandler(__rpc_handler_3950335989)); NetworkManager.__rpc_func_table.Add(2013262870u, new RpcReceiveHandler(__rpc_handler_2013262870)); NetworkManager.__rpc_func_table.Add(2130733099u, new RpcReceiveHandler(__rpc_handler_2130733099)); } private static void __rpc_handler_2264686608(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)1; ((GoatHoof)(object)target).AddSpeedServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3950335989(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; ((GoatHoof)(object)target).AddSpeedClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2013262870(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)1; ((GoatHoof)(object)target).RemoveSpeedServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2130733099(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; ((GoatHoof)(object)target).RemoveSpeedClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "GoatHoof"; } } [AddComponentMenu("Lacrimosum/Goobo Jr.")] public class GooboJr : ThrowableItemBehaviour { [Space(10f)] [Header("Goobo Jr. Settings")] [Tooltip("The material to apply to the masked enemy.")] public Material gooboJrMaterial; [Tooltip("The sounds to play when a Goobo is spawned.")] public AudioClip[] gooboSpawnSounds; public override void PlayDropSFX() { ((GrabbableObject)this).PlayDropSFX(); if (WasThrown && !(StartOfRound.Instance.currentLevel.PlanetName == "71 Gordion")) { SpawnMaskedEnemyServerRpc(); } } [ServerRpc(RequireOwnership = false)] private void SpawnMaskedEnemyServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3896560153u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3896560153u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { SpawnMaskedEnemyClientRpc(); } } } [ClientRpc] private void SpawnMaskedEnemyClientRpc() { //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) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3195257550u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3195257550u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } RoundManager.Instance.SpawnEnemyGameObject(((Component)this).transform.position, ((Component)this).transform.rotation.y, 0, NetworkPrefabsHelper.MaskedEnemy); MaskedPlayerEnemy[] array = Object.FindObjectsOfType<MaskedPlayerEnemy>(); foreach (MaskedPlayerEnemy val3 in array) { if (!(Vector3.Distance(((Component)val3).transform.position, ((Component)this).transform.position) > 2f)) { SkinnedMeshRenderer[] componentsInChildren = ((Component)val3).GetComponentsInChildren<SkinnedMeshRenderer>(); for (int j = 0; j < componentsInChildren.Length; j++) { ((Renderer)componentsInChildren[j]).material = gooboJrMaterial; } } } AudioSource.PlayClipAtPoint(gooboSpawnSounds[Random.Range(0, gooboSpawnSounds.Length)], ((Component)this).transform.position); base.NetworkObject.Despawn(true); } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_GooboJr() { //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(3896560153u, new RpcReceiveHandler(__rpc_handler_3896560153)); NetworkManager.__rpc_func_table.Add(3195257550u, new RpcReceiveHandler(__rpc_handler_3195257550)); } private static void __rpc_handler_3896560153(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)1; ((GooboJr)(object)target).SpawnMaskedEnemyServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3195257550(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; ((GooboJr)(object)target).SpawnMaskedEnemyClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "GooboJr"; } } [AddComponentMenu("Lacrimosum/Happiest Mask")] public class HappiestMask : HauntedMaskItem { public override void OnNetworkSpawn() { base.mimicEnemy = NetworkPrefabsHelper.MaskedEnemy; } protected override void __initializeVariables() { ((HauntedMaskItem)this).__initializeVariables(); } protected internal override string __getTypeName() { return "HappiestMask"; } } [AddComponentMenu("Lacrimosum/Item Behaviour")] public class ItemBehaviour : GrabbableObject { protected PlayerControllerB LastPlayerHeldBy; protected NetworkObject NetworkObject => ((Component)this).GetComponent<NetworkObject>(); protected ScanNodeProperties ScanNodeProperties => ((Component)this).GetComponentInChildren<ScanNodeProperties>(); protected AudioSource AudioSource => ((Component)this).GetComponent<AudioSource>(); public override void GrabItem() { ((GrabbableObject)this).GrabItem(); LastPlayerHeldBy = base.playerHeldBy; } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected internal override string __getTypeName() { return "ItemBehaviour"; } } [AddComponentMenu("Lacrimosum/Power Elixir")] public class PowerElixir : ItemBehaviour { public static readonly List<PowerElixir> ActiveElixirs = new List<PowerElixir>(); [Space(10f)] [Header("Power Elixir Settings")] [Tooltip("The amount of health the player must reach to activate.")] public int healthThreshold = 25; [Tooltip("The percentage of health to heal when activated.")] public float healPercentage = 75f; [Tooltip("The sounds to play when activated.")] public AudioClip[] activationSounds; public override void OnNetworkSpawn() { healthThreshold = SyncedEntry<int>.op_Implicit(RoR2Plugin.ModConfig.PowerElixirHealthThreshold); healPercentage = SyncedEntry<float>.op_Implicit(RoR2Plugin.ModConfig.PowerElixirHealPercentage); } public override void GrabItem() { base.GrabItem(); ActiveElixirs.Add(this); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); ActiveElixirs.Remove(this); } public override void OnNetworkDespawn() { ActiveElixirs.Remove(this); ((NetworkBehaviour)this).OnNetworkDespawn(); } public override void OnDestroy() { ActiveElixirs.Remove(this); ((NetworkBehaviour)this).OnDestroy(); } public void CheckHealth(PlayerControllerB player, int damageNumber) { if (!((Object)(object)player != (Object)(object)((GrabbableObject)this).playerHeldBy) && player.health - damageNumber <= healthThreshold) { HealPlayerServerRpc(); } } [ServerRpc(RequireOwnership = false)] private void HealPlayerServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3543231861u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3543231861u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { HealPlayerClientRpc(); } } } [ClientRpc] private void HealPlayerClientRpc() { //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) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(679042488u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 679042488u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { float num = (float)((GrabbableObject)this).playerHeldBy.health * (healPercentage / 100f); if (num > 100f) { num = 100f; } int health = num.RoundToInt(); base.AudioSource.PlayOneShot(activationSounds[Random.Range(0, activationSounds.Length)]); ((GrabbableObject)this).playerHeldBy.health = health; ((GrabbableObject)this).playerHeldBy.criticallyInjured = false; if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy.playerBodyAnimator)) { ((GrabbableObject)this).playerHeldBy.playerBodyAnimator.SetBool("Limp", false); } ((GrabbableObject)this).playerHeldBy.bleedingHeavily = false; ((MonoBehaviour)this).StartCoroutine(Despawn()); } } private IEnumerator Despawn() { yield return (object)new WaitForSeconds(1f); ((GrabbableObject)this).DiscardItemServerRpc(); base.NetworkObject.Despawn(true); } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_PowerElixir() { //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(3543231861u, new RpcReceiveHandler(__rpc_handler_3543231861)); NetworkManager.__rpc_func_table.Add(679042488u, new RpcReceiveHandler(__rpc_handler_679042488)); } private static void __rpc_handler_3543231861(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)1; ((PowerElixir)(object)target).HealPlayerServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_679042488(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; ((PowerElixir)(object)target).HealPlayerClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "PowerElixir"; } } [AddComponentMenu("Lacrimosum/Roll Of Pennies")] public class RollOfPennies : ItemBehaviour { public static readonly List<RollOfPennies> ActivePennies = new List<RollOfPennies>(); [Space(10f)] [Header("Roll Of Pennies Settings")] [Tooltip("The amount of credits to add to the item's value upon taking damage.")] public int addedCredits = 10; [Tooltip("The cap for the item's value.")] public int maxCredits = 100; public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); addedCredits = SyncedEntry<int>.op_Implicit(RoR2Plugin.ModConfig.RollOfPenniesValueIncrease); maxCredits = SyncedEntry<int>.op_Implicit(RoR2Plugin.ModConfig.RollOfPenniesMaxValue); } public override void GrabItem() { base.GrabItem(); ActivePennies.Add(this); } public void CheckDamagedPlayer(PlayerControllerB player) { if (!((Object)(object)player != (Object)(object)((GrabbableObject)this).playerHeldBy) && ((GrabbableObject)this).scrapValue < maxCredits) { AddCreditsServerRpc(); } } [ServerRpc(RequireOwnership = false)] private void AddCreditsServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3084010551u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3084010551u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { AddCreditsClientRpc(); } } } [ClientRpc] private void AddCreditsClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2286663356u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2286663356u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((GrabbableObject)this).scrapValue = ((GrabbableObject)this).scrapValue + addedCredits; base.ScanNodeProperties.scrapValue = ((GrabbableObject)this).scrapValue; base.ScanNodeProperties.subText = $"Value: ${((GrabbableObject)this).scrapValue}"; } } } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); ActivePennies.Remove(this); } public override void OnNetworkDespawn() { ActivePennies.Remove(this); ((NetworkBehaviour)this).OnNetworkDespawn(); } public override void OnDestroy() { ActivePennies.Remove(this); ((NetworkBehaviour)this).OnDestroy(); } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_RollOfPennies() { //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(3084010551u, new RpcReceiveHandler(__rpc_handler_3084010551)); NetworkManager.__rpc_func_table.Add(2286663356u, new RpcReceiveHandler(__rpc_handler_2286663356)); } private static void __rpc_handler_3084010551(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)1; ((RollOfPennies)(object)target).AddCreditsServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2286663356(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; ((RollOfPennies)(object)target).AddCreditsClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "RollOfPennies"; } } [AddComponentMenu("Lacrimosum/Safer Spaces")] public class SaferSpaces : ItemBehaviour { public static readonly List<SaferSpaces> ActiveSpaces = new List<SaferSpaces>(); [Space(10f)] [Header("Safer Spaces Settings")] [Tooltip("The cooldown between each activation.")] public float cooldown = 3f; [Tooltip("A list of sounds to pick from when activated.")] public AudioClip[] activationSounds; [Tooltip("The sound to play when the cooldown ends.")] public AudioClip cooldownEndSound; [NonSerialized] public bool CanBlock = true; public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); cooldown = SyncedEntry<float>.op_Implicit(RoR2Plugin.ModConfig.SaferSpacesCooldown); } public override void GrabItem() { base.GrabItem(); ActiveSpaces.Add(this); StartCooldown(); } public bool IsPlayerHolding(PlayerControllerB player) { return (Object)(object)player == (Object)(object)((GrabbableObject)this).playerHeldBy; } public void PlaySound() { PlaySoundServerRpc(); } [ServerRpc(RequireOwnership = false)] private void PlaySoundServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4256016625u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4256016625u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { int index = Random.Range(0, activationSounds.Length); PlaySoundClientRpc(index); } } } [ClientRpc] private void PlaySoundClientRpc(int index) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_0071: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1970247913u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, index); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1970247913u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { WalkieTalkie.TransmitOneShotAudio(base.AudioSource, activationSounds[index], 1f); base.AudioSource.PlayOneShot(activationSounds[index]); } } } public void StartCooldown() { CooldownServerRpc(); } [ServerRpc(RequireOwnership = false)] private void CooldownServerRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1450211957u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1450211957u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { CooldownClientRpc(); } } } [ClientRpc] private void CooldownClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2238259042u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2238259042u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(Cooldown()); } } } private IEnumerator Cooldown() { ((GrabbableObject)this).playerHeldBy.GetSaferSpacesBubble().SetActive(false); CanBlock = false; yield return (object)new WaitForSeconds(cooldown); ((GrabbableObject)this).playerHeldBy.GetSaferSpacesBubble().SetActive(true); CanBlock = true; base.AudioSource.PlayOneShot(cooldownEndSound); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); ActiveSpaces.Remove(this); LastPlayerHeldBy.GetSaferSpacesBubble().SetActive(false); CanBlock = false; } public override void OnNetworkDespawn() { ActiveSpaces.Remove(this); LastPlayerHeldBy.GetSaferSpacesBubble().SetActive(false); CanBlock = false; ((NetworkBehaviour)this).OnNetworkDespawn(); } public override void OnDestroy() { ActiveSpaces.Remove(this); LastPlayerHeldBy.GetSaferSpacesBubble().SetActive(false); CanBlock = false; ((NetworkBehaviour)this).OnDestroy(); } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_SaferSpaces() { //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 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(4256016625u, new RpcReceiveHandler(__rpc_handler_4256016625)); NetworkManager.__rpc_func_table.Add(1970247913u, new RpcReceiveHandler(__rpc_handler_1970247913)); NetworkManager.__rpc_func_table.Add(1450211957u, new RpcReceiveHandler(__rpc_handler_1450211957)); NetworkManager.__rpc_func_table.Add(2238259042u, new RpcReceiveHandler(__rpc_handler_2238259042)); } private static void __rpc_handler_4256016625(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)1; ((SaferSpaces)(object)target).PlaySoundServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1970247913(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int index = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref index); target.__rpc_exec_stage = (__RpcExecStage)2; ((SaferSpaces)(object)target).PlaySoundClientRpc(index); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1450211957(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)1; ((SaferSpaces)(object)target).CooldownServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2238259042(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; ((SaferSpaces)(object)target).CooldownClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "SaferSpaces"; } } [AddComponentMenu("Lacrimosum/Throwable Item Behaviour")] public class ThrowableItemBehaviour : ItemBehaviour { [Space(10f)] [Header("Throw Curve Settings")] public AnimationCurve itemFallCurve; public AnimationCurve itemVerticalFallCurveNoBounce; protected bool WasThrown; private RaycastHit _itemHit; private Ray _itemThrowRay; private const int StunGrenadeMask = 268437761; public override void ItemActivate(bool used, bool buttonDown = true) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (((NetworkBehaviour)this).IsOwner) { ((GrabbableObject)this).playerHeldBy.DiscardHeldObject(true, (NetworkObject)null, GetGrenadeThrowDestination(), true); WasThrown = true; } } public override void FallWithCurve() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_005b: 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_007e: 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_009a: 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_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((GrabbableObject)this).startFallingPosition - ((GrabbableObject)this).targetFloorPosition; float magnitude = ((Vector3)(ref val)).magnitude; ((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(((GrabbableObject)this).itemProperties.restingRotation.x, ((Component)this).transform.eulerAngles.y, ((GrabbableObject)this).itemProperties.restingRotation.z), 14f * Time.deltaTime / magnitude); ((Component)this).transform.localPosition = Vector3.Lerp(((GrabbableObject)this).startFallingPosition, ((GrabbableObject)this).targetFloorPosition, itemFallCurve.Evaluate(((GrabbableObject)this).fallTime)); ((Component)this).transform.localPosition = Vector3.Lerp(new Vector3(((Component)this).transform.localPosition.x, ((GrabbableObject)this).startFallingPosition.y, ((Component)this).transform.localPosition.z), new Vector3(((Component)this).transform.localPosition.x, ((GrabbableObject)this).targetFloorPosition.y, ((Component)this).transform.localPosition.z), (magnitude > 5f) ? itemVerticalFallCurveNoBounce.Evaluate(((GrabbableObject)this).fallTime) : itemFallCurve.Evaluate(((GrabbableObject)this).fallTime)); ((GrabbableObject)this).fallTime = ((GrabbableObject)this).fallTime + Mathf.Abs(Time.deltaTime * 12f / magnitude); } private Vector3 GetGrenadeThrowDestination() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //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_004a: 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_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_006f: 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_00a3: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0114: 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) Debug.DrawRay(((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.forward, Color.yellow, 15f); _itemThrowRay = new Ray(((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.forward); Vector3 val = ((!Physics.Raycast(_itemThrowRay, ref _itemHit, 12f, 268437761, (QueryTriggerInteraction)1)) ? ((Ray)(ref _itemThrowRay)).GetPoint(10f) : ((Ray)(ref _itemThrowRay)).GetPoint(((RaycastHit)(ref _itemHit)).distance - 0.05f)); Debug.DrawRay(val, Vector3.down, Color.blue, 15f); _itemThrowRay = new Ray(val, Vector3.down); if (Physics.Raycast(_itemThrowRay, ref _itemHit, 30f, 268437761, (QueryTriggerInteraction)1)) { return ((RaycastHit)(ref _itemHit)).point + Vector3.up * 0.05f; } return ((Ray)(ref _itemThrowRay)).GetPoint(30f); } public override void DiscardItem() { if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = false; } ((GrabbableObject)this).isBeingUsed = false; ((GrabbableObject)this).DiscardItem(); } public override void PocketItem() { if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = false; } ((GrabbableObject)this).isBeingUsed = false; ((GrabbableObject)this).PocketItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = true; } public override void GrabItem() { base.GrabItem(); WasThrown = false; } protected override void __initializeVariables() { base.__initializeVariables(); } protected internal override string __getTypeName() { return "ThrowableItemBehaviour"; } } [AddComponentMenu("Lacrimosum/Ukulele")] public class Ukulele : ItemBehaviour { public int shovelHitForce = 1; public bool reelingUp; public bool isHoldingButton; private RaycastHit _rayHit; private Coroutine _reelingUpCoroutine; private RaycastHit[] _objectsHitByShovel; private List<RaycastHit> _objectsHitByShovelList = new List<RaycastHit>(); public AudioClip reelUp; public AudioClip swing; [FormerlySerializedAs("hitSFX")] public AudioClip[] hitSfx; public AudioSource shovelAudio; private PlayerControllerB _previousPlayerHeldBy; private const int ShovelMask = 1084754248; [Header("Ukulele Settings")] [Tooltip("The particles to play when the ukulele hits something")] public ParticleSystem zapEffect; public override void ItemActivate(bool used, bool buttonDown = true) { if ((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null) { return; } isHoldingButton = buttonDown; if (!reelingUp && buttonDown) { reelingUp = true; _previousPlayerHeldBy = ((GrabbableObject)this).playerHeldBy; if (_reelingUpCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_reelingUpCoroutine); } _reelingUpCoroutine = ((MonoBehaviour)this).StartCoroutine(ReelUpShovel()); } } private IEnumerator ReelUpShovel() { ((GrabbableObject)this).playerHeldBy.activatingItem = true; ((GrabbableObject)this).playerHeldBy.twoHanded = true; ((GrabbableObject)this).playerHeldBy.playerBodyAnimator.ResetTrigger("shovelHit"); ((GrabbableObject)this).playerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); shovelAudio.PlayOneShot(reelUp); ReelUpSfxServerRpc(); yield return (object)new WaitForSeconds(0.35f); yield return (object)new WaitUntil((Func<bool>)(() => !isHoldingButton)); SwingShovel(!((GrabbableObject)this).isHeld); yield return (object)new WaitForSeconds(0.13f); yield return (object)new WaitForEndOfFrame(); HitShovel(!((GrabbableObject)this).isHeld); yield return (object)new WaitForSeconds(0.3f); reelingUp = false; _reelingUpCoroutine = null; } [ServerRpc] public void ReelUpSfxServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_00c2: 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 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__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(865132708u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 865132708u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ReelUpSfxClientRpc(); } } [ClientRpc] public void ReelUpSfxClientRpc() { //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)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3368577286u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3368577286u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { shovelAudio.PlayOneShot(reelUp); } } } public override void DiscardItem() { if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.activatingItem = false; } ((GrabbableObject)this).DiscardItem(); } public void SwingShovel(bool cancel = false) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) _previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); if (!cancel) { shovelAudio.PlayOneShot(swing); _previousPlayerHeldBy.UpdateSpecialAnimationValue(true, (short)((Component)_previousPlayerHeldBy).transform.localEulerAngles.y, 0.4f, false); } } public void HitShovel(bool cancel = false) { //IL_0050: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_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_00ff: 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) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: 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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_0194: 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_019b: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_previousPlayerHeldBy == (Object)null) { Debug.LogError((object)"Previousplayerheldby is null on this client when HitShovel is called."); return; } _previousPlayerHeldBy.activatingItem = false; bool flag = false; bool flag2 = false; bool flag3 = false; int num = -1; if (!cancel) { _previousPlayerHeldBy.twoHanded = false; _objectsHitByShovel = Physics.SphereCastAll(((Component)_previousPlayerHeldBy.gameplayCamera).transform.position + ((Component)_previousPlayerHeldBy.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward, 1.5f, 1084754248, (QueryTriggerInteraction)2); _objectsHitByShovelList = _objectsHitByShovel.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); List<EnemyAI> list = new List<EnemyAI>(); IHittable val2 = default(IHittable); foreach (RaycastHit objectsHitByShovel in _objectsHitByShovelList) { RaycastHit val = objectsHitByShovel; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = objectsHitByShovel; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = objectsHitByShovel; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<IHittable>(ref val2)) { continue; } val = objectsHitByShovel; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)_previousPlayerHeldBy).transform) { continue; } val = objectsHitByShovel; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.position; val = objectsHitByShovel; Vector3 point = ((RaycastHit)(ref val)).point; RaycastHit val3 = default(RaycastHit); int collidersAndRoomMaskAndDefault = StartOfRound.Instance.collidersAndRoomMaskAndDefault; if (Physics.Linecast(position, point, ref val3, collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { continue; } } flag = true; Vector3 forward = ((Component)_previousPlayerHeldBy.gameplayCamera).transform.forward; try { val = objectsHitByShovel; EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<EnemyAICollisionDetect>(); if (Object.op_Implicit((Object)(object)component)) { if (Object.op_Implicit((Object)(object)component.mainScript) && !list.Contains(component.mainScript)) { goto IL_0249; } continue; } val = objectsHitByShovel; if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref val)).transform).GetComponent<PlayerControllerB>())) { goto IL_0249; } if (!flag3) { flag3 = true; goto IL_0249; } goto end_IL_01e8; IL_0249: bool flag4 = val2.Hit(shovelHitForce, forward, _previousPlayerHeldBy, true, 1); if (flag4 && (Object)(object)component != (Object)null) { list.Add(component.mainScript); } if (!flag2) { flag2 = flag4; } end_IL_01e8:; } ca