using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using STSharedAudioLib; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering.HighDefinition; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("LCCrashBandicootCratesMod")] [assembly: AssemblyCompany("LCSplatBombGrenadeMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Replace the visuals and sounds of the Grenades with Bombs from Splatoon!")] [assembly: AssemblyFileVersion("1.5.4.0")] [assembly: AssemblyInformationalVersion("1.5.4")] [assembly: AssemblyProduct("LCSplatBombGrenadeMod")] [assembly: AssemblyTitle("LCSplatBombGrenadeMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LCSplatBombGrenadeMod { public class Configs { public static ConfigEntry SplatBombConfig; public static ConfigEntry FizzyBombConfig; public static ConfigEntry BurstBombConfig; public static ConfigEntry ScreenSplatters; public static ConfigEntry CratesConfig; public static ConfigEntry LoadingScreenConfig; public Configs(ConfigFile cfg) { SplatBombConfig = cfg.Bind("Customization", "Splat Bombs", true, "Set whether Splat Bombs replace Stun Grenades."); FizzyBombConfig = cfg.Bind("Customization", "Fizzy Bombs", true, "Set whether Fizzy Bombs replace Homemade Flashbangs."); BurstBombConfig = cfg.Bind("Customization", "Burst Bombs", true, "Set whether Burst Bombs replace Easter Eggs."); ScreenSplatters = cfg.Bind("Customization", "Screen Splatters", true, "Set whether Splat Bombs and Fizzy Bombs replace the grenade's flashbang filter with ink splatters."); CratesConfig = cfg.Bind("Secret", "LCCrashBandicootCratesMod", true, "Enable compatibility to add special crates."); LoadingScreenConfig = cfg.Bind("Secret", "LCSimonTendoPlaylistsMod", true, "Enable compatibility to add loading screen music."); } public static void DisplayConfigs() { if (!SplatBombConfig.Value && !BurstBombConfig.Value && !FizzyBombConfig.Value) { Plugin.Logger.LogInfo((object)"Configs [Splat Bombs], [Fizzy Bombs], and [Burst Bombs] are all set to FALSE. :("); return; } if (SplatBombConfig.Value) { Plugin.Logger.LogInfo((object)"Config [Splat Bombs] is set to TRUE. Splat Bombs will replace Stun Grenades."); } else { Plugin.Logger.LogInfo((object)"Config [Splat Bombs] is set to FALSE. Stun Grenades will not be replaced."); } if (FizzyBombConfig.Value) { Plugin.Logger.LogInfo((object)"Config [Fizzy Bombs] is set to TRUE. Fizzy Bombs will replace Homemade Flashbangs."); } else { Plugin.Logger.LogInfo((object)"Config [Fizzy Bombs] is set to FALSE. Homemade Flashbangs will not be replaced."); } if (BurstBombConfig.Value) { Plugin.Logger.LogInfo((object)"Config [Burst Bombs] is set to TRUE. Burst Bombs will replace Easter Eggs."); } else { Plugin.Logger.LogInfo((object)"Config [Burst Bombs] is set to FALSE. Easter Eggs will not be replaced."); } if (ScreenSplatters.Value) { Plugin.Logger.LogInfo((object)"Config [Screen Splatters] is set to TRUE. Burst Bombs and Fizzy Bombs will replace the flashbang filter."); } else { Plugin.Logger.LogInfo((object)"Config [Screen Splatters] is set to FALSE. The grenade's normal flashbang filter will be used."); } if (CratesConfig.Value) { Plugin.Logger.LogDebug((object)"Config [LCCrashBandicootCratesMod] is set to TRUE. Enabling compatibility with crates..."); } if (LoadingScreenConfig.Value) { Plugin.Logger.LogDebug((object)"Config [LCSimonTendoPlaylistsMod] is set to TRUE. Enabling compatibility with loading screens..."); } } } public class HarmonyPatches { [HarmonyPatch(typeof(StartOfRound))] public class NewStartOfRound { [HarmonyPostfix] [HarmonyPatch("Awake")] public static void AwakePostfix(StartOfRound __instance) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown GameObject spawnPrefabSplat = null; GameObject spawnPrefabBurst = null; GameObject spawnPrefabFizzy = null; if (Configs.ScreenSplatters.Value) { GameObject val = new GameObject("LCSplatBombGrenadeMod"); val.transform.SetParent(Plugin.SearchForObject("SimonTendoManagers", ((Component)StartOfRound.Instance).gameObject.transform.parent).transform); val.AddComponent(); } for (int i = 0; i < __instance.allItemsList.itemsList.Count; i++) { Item val2 = __instance.allItemsList.itemsList[i]; if ((Object)(object)val2 == (Object)null) { continue; } if (((Object)val2).name == "StunGrenade" && Configs.SplatBombConfig.Value) { Plugin.Logger.LogDebug((object)"Found stun grenade, setting item properties and terminal text to Splat Bomb..."); val2.itemName = "Splat Bomb"; val2.toolTips[0] = "Use Splat Bomb : [LMB]"; ((Vector3)(ref val2.positionOffset)).Set(-0.2f, 0.17f, 0.03f); ((Vector3)(ref val2.rotationOffset)).Set(180f, -25f, 0f); val2.verticalOffset = 0.03f; val2.spawnPrefab.GetComponent().mesh = ((Component)Plugin.SplatBomb.transform.GetChild(0)).GetComponent().mesh; ((Component)val2.spawnPrefab.transform.GetChild(0)).GetComponent().mesh = null; StunGrenadeItem component = val2.spawnPrefab.GetComponent(); component.pullPinSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatPullPinSFX.ogg"); component.explodeSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatExplodeSFX.ogg"); ((GrabbableObject)component).itemProperties.itemIcon = Plugin.SplatBombModAssets.LoadAsset("Assets/ItemIcon.png"); ((GrabbableObject)component).itemProperties.grabSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatGrabSFX.ogg"); ((GrabbableObject)component).itemProperties.pocketSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatPocketSFX.ogg"); ((GrabbableObject)component).itemProperties.dropSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatDropSFX.ogg"); component.stunGrenadeExplosion = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatInk/GroundSplatters/SplatBombInkSplattersGround.prefab"); Plugin.SetSplatBombKeyword(); if (Configs.CratesConfig.Value) { spawnPrefabSplat = val2.spawnPrefab; } } else if (((Object)val2).name == "DiyFlashbang" && Configs.FizzyBombConfig.Value) { Plugin.Logger.LogDebug((object)"Found DIYflashbang, setting item properties to Fizzy Bomb..."); val2.itemName = "Fizzy Bomb"; val2.toolTips[0] = "Use Fizzy Bomb : [LMB]"; ((Vector3)(ref val2.positionOffset)).Set(0.07f, 0.1f, -0.09f); ((Vector3)(ref val2.restingRotation)).Set(0f, 0f, 270f); val2.verticalOffset = 0.08f; ((Component)val2.spawnPrefab.transform.GetChild(0)).GetComponent().mesh = null; val2.spawnPrefab.GetComponentInChildren().headerText = "Fizzy Bomb"; val2.spawnPrefab.GetComponent().mesh = Plugin.FizzyBomb.GetComponent().mesh; StunGrenadeItem component2 = val2.spawnPrefab.GetComponent(); component2.pullPinSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyPullPinSFX.ogg"); component2.explodeSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyExplodeSFX.ogg"); ((GrabbableObject)component2).itemProperties.itemIcon = Plugin.SplatBombModAssets.LoadAsset("Assets/FizzyBombAssets/FizzyBombIcon.png"); ((GrabbableObject)component2).itemProperties.grabSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyGrabSFX.ogg"); ((GrabbableObject)component2).itemProperties.pocketSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyPocketSFX.ogg"); ((GrabbableObject)component2).itemProperties.dropSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyDropSFX.ogg"); component2.stunGrenadeExplosion = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatInk/GroundSplatters/SplatBombInkSplattersGround.prefab"); if (Configs.CratesConfig.Value) { spawnPrefabFizzy = val2.spawnPrefab; } } else if (((Object)val2).name == "EasterEgg" && Configs.BurstBombConfig.Value) { Plugin.Logger.LogDebug((object)"Found easter egg, setting item properties to Burst Bomb..."); val2.itemName = "Burst Bomb"; ((Vector3)(ref val2.positionOffset)).Set(-0.03f, 0.08f, -0.09f); ((Vector3)(ref val2.restingRotation)).Set(180f, 180f, 180f); val2.spawnPrefab.GetComponentInChildren().headerText = "Burst Bomb"; val2.spawnPrefab.GetComponent().mesh = Plugin.BurstBomb.GetComponent().mesh; StunGrenadeItem component3 = val2.spawnPrefab.GetComponent(); component3.explodeSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/BurstExplodeSFX.ogg"); ((GrabbableObject)component3).itemProperties.itemIcon = Plugin.SplatBombModAssets.LoadAsset("Assets/BurstBombAssets/BurstBombIcon.png"); ((GrabbableObject)component3).itemProperties.grabSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/BurstGrabSFX.ogg"); ((GrabbableObject)component3).itemProperties.pocketSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/BurstPocketSFX.ogg"); ((GrabbableObject)component3).itemProperties.dropSFX = Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/BurstDropSFX.ogg"); if (Configs.CratesConfig.Value) { spawnPrefabBurst = val2.spawnPrefab; } } if (ModCompatibility.CrashBandicootCratesCompatible) { CheckCrateToSetContent(val2, spawnPrefabSplat, spawnPrefabBurst, spawnPrefabFizzy); } } } private static void CheckCrateToSetContent(Item item, GameObject spawnPrefabSplat, GameObject spawnPrefabBurst, GameObject spawnPrefabFizzy) { if (item.itemName == "Splat Bomb Crate" && (Object)(object)spawnPrefabSplat != (Object)null) { Plugin.Logger.LogDebug((object)$"Found {item}, setting spawnPrefab to {spawnPrefabSplat}..."); CreateACrate.GetRuntimeParameters(item).spawnPrefab = spawnPrefabSplat; CreateACrate.RegisterProjectile(ModCompatibility.splatBombProjectile.GetComponent(), spawnPrefabSplat.GetComponent()); } else if (item.itemName == "Burst Bomb Crate" && (Object)(object)spawnPrefabBurst != (Object)null) { Plugin.Logger.LogDebug((object)$"Found {item}, setting spawnPrefab to {spawnPrefabBurst}..."); CreateACrate.GetRuntimeParameters(item).spawnPrefab = spawnPrefabBurst; CreateACrate.RegisterProjectile(ModCompatibility.burstBombProjectile.GetComponent(), spawnPrefabBurst.GetComponent()); } else if (item.itemName == "Fizzy Bomb Crate" && (Object)(object)spawnPrefabFizzy != (Object)null) { Plugin.Logger.LogDebug((object)$"Found {item}, setting spawnPrefab to {spawnPrefabFizzy}..."); CreateACrate.GetRuntimeParameters(item).spawnPrefab = spawnPrefabFizzy; CreateACrate.RegisterProjectile(ModCompatibility.fizzyBombProjectile.GetComponent(), spawnPrefabFizzy.GetComponent()); } } [HarmonyPrefix] [HarmonyPatch("Start")] public static void StartPrefix(StartOfRound __instance) { if (ModCompatibility.PlaylistsModCompatible) { ModCompatibility.CreateSplatBombGrenadeModLoadingScreen(); } } } [HarmonyPatch(typeof(RoundManager))] public class NewRoundManager { [HarmonyPostfix] [HarmonyPatch("GenerateNewLevelClientRpc")] public static void GenerateNewLevelClientRpcPostfix() { if ((Object)(object)StartOfRound.Instance != (Object)null) { Plugin.Logger.LogDebug((object)$"NewRoundManagerGenerateLevel starting with randomMapSeed {StartOfRound.Instance.randomMapSeed}"); colorRandomizer = new Random(StartOfRound.Instance.randomMapSeed); } } } [HarmonyPatch(typeof(StunGrenadeItem))] public class NewStunGrenade { [HarmonyPostfix] [HarmonyPatch("Start")] public static void StartPostfix(StunGrenadeItem __instance) { if ((Object)(object)__instance == (Object)null) { return; } if (((Object)__instance).name == "StunGrenade(Clone)" && Configs.SplatBombConfig.Value) { Object.Instantiate(Plugin.SplatBomb, ((Component)__instance).transform); } else if (((Object)__instance).name == "DiyFlashbang(Clone)" && Configs.FizzyBombConfig.Value) { Object.Instantiate(Plugin.FizzyBomb, ((Component)__instance).transform); } else if (((Object)__instance).name == "EasterEgg(Clone)" && Configs.BurstBombConfig.Value) { Object.Instantiate(Plugin.BurstBomb, ((Component)__instance).transform); int num = 4; if (colorRandomizer != null) { num = colorRandomizer.Next(0, 9); } Plugin.Logger.LogDebug((object)$"#{((NetworkBehaviour)__instance).NetworkObjectId} | randomNr = {num}"); ((Renderer)((Component)((Component)__instance).transform.GetChild(2)).GetComponent()).material = Plugin.SplatBombModAssets.LoadAsset($"Assets/BurstBombAssets/BurstBombMaterials/BurstBombMaterial{num}.mat"); __instance.stunGrenadeExplosion = Plugin.SplatBombModAssets.LoadAsset($"Assets/SplatInk/GroundSplatters/BurstBomb/BurstBombInkSplatters{num}.prefab"); } } [HarmonyPostfix] [HarmonyPatch("SetControlTipForGrenade")] public static void SetControlTipForGrenadePostfix(StunGrenadeItem __instance) { if (((NetworkBehaviour)__instance).IsOwner) { if (((Object)((Component)__instance).gameObject).name == "StunGrenade(Clone)" && Configs.SplatBombConfig.Value) { string[] array = ((!__instance.pinPulled) ? new string[1] { "Activate Splat Bomb : [LMB] " } : new string[1] { "Throw Splat Bomb : [LMB]" }); HUDManager.Instance.ChangeControlTipMultiple(array, true, ((GrabbableObject)__instance).itemProperties); } else if (((Object)((Component)__instance).gameObject).name == "EasterEgg(Clone)" && Configs.BurstBombConfig.Value) { string[] array2 = new string[1] { "Toss Burst Bomb : [LMB] " }; HUDManager.Instance.ChangeControlTipMultiple(array2, true, ((GrabbableObject)__instance).itemProperties); } else if (((Object)((Component)__instance).gameObject).name == "DiyFlashbang(Clone)" && Configs.FizzyBombConfig.Value) { string[] array3 = new string[1] { "Use Fizzy Bomb : [LMB] " }; HUDManager.Instance.ChangeControlTipMultiple(array3, true, ((GrabbableObject)__instance).itemProperties); } } } [HarmonyPrefix] [HarmonyPatch("ExplodeStunGrenade")] public static void ExplodeStunGrenadePrefix(StunGrenadeItem __instance) { object obj; if (__instance == null) { obj = null; } else { GameObject gameObject = ((Component)__instance).gameObject; obj = ((gameObject != null) ? ((Object)gameObject).name : null); } if ((string?)obj == "StunGrenade(Clone)" && Configs.SplatBombConfig.Value) { ((Renderer)((Component)((Component)__instance).transform.GetChild(2).GetChild(1)).GetComponent()).material = Plugin.SplatBombEmptyMaterial; } } [HarmonyPostfix] [HarmonyPatch("StunExplosion")] public static void StunExplosionPostfix(Vector3 explosionPosition) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (Configs.ScreenSplatters.Value && (Object)(object)SplatBehaviour.Instance != (Object)null) { SplatBehaviour.Instance.PerformInkSplatterCheck(explosionPosition); } } } public static Random colorRandomizer; } internal class ModCompatibility { [HarmonyPatch(typeof(Projectile))] public class NewProjectile { [HarmonyPostfix] [HarmonyPatch("CreateProjectile")] public static void CreateProjectilePostfix(Projectile __instance) { if ((Object)(object)__instance == (Object)null || (Object)(object)__instance.firedBy == (Object)null) { Plugin.Logger.LogDebug((object)"A1"); return; } if (((Object)__instance).name != "BazookaProjectileSplatBomb(Clone)" && ((Object)__instance).name != "BazookaProjectileBurstBomb(Clone)" && ((Object)__instance).name != "BazookaProjectileFizzyBomb(Clone)") { Plugin.Logger.LogDebug((object)"B1"); return; } MeshRenderer component = ((Component)__instance).GetComponent(); if ((Object)(object)component == (Object)null) { Plugin.Logger.LogDebug((object)"C1"); return; } int num = (((int)__instance.firedBy.playerClientId % 2 == 0) ? 4 : 0); ((Renderer)component).material = Plugin.SplatBombModAssets.LoadAsset($"Assets/BurstBombAssets/BurstBombMaterials/BurstBombMaterial{num}.mat"); Plugin.Logger.LogDebug((object)$"D1: {__instance.firedBy}"); } [HarmonyPrefix] [HarmonyPatch("SpawnOnDestroy")] public static void SpawnOnDestroyPrefix(Projectile __instance) { if ((Object)(object)__instance == (Object)null || (Object)(object)__instance.firedBy == (Object)null) { Plugin.Logger.LogDebug((object)"A2"); return; } if (((Object)__instance).name != "BazookaProjectileSplatBomb(Clone)" && ((Object)__instance).name != "BazookaProjectileBurstBomb(Clone)" && ((Object)__instance).name != "BazookaProjectileFizzyBomb(Clone)") { Plugin.Logger.LogDebug((object)"B2"); return; } DecalProjector componentInChildren = __instance.spawnOnDestroy.GetComponentInChildren(); if ((Object)(object)componentInChildren == (Object)null) { Plugin.Logger.LogDebug((object)"C2"); return; } int num = (((int)__instance.firedBy.playerClientId % 2 == 0) ? 4 : 0); componentInChildren.material = Plugin.SplatBombModAssets.LoadAsset($"Assets/SplatInk/GroundSplatters/BurstBomb/BurstBombInkSplattersMaterial{num}.mat"); Plugin.Logger.LogDebug((object)$"D2: {__instance.firedBy}"); } } [HarmonyPatch(typeof(StunGrenadeItem))] public class NewStunGrenadeItem { [HarmonyPrefix] [HarmonyPatch("ExplodeStunGrenade")] public static bool ExplodeStunGrenadePrefix(StunGrenadeItem __instance) { if ((Object)(object)__instance == (Object)null || ((Object)__instance).name != "EasterEgg(Clone)" || !__instance.hasCollided) { return true; } CrashBandicootCratesManagerScript instance = CrashBandicootCratesManagerScript.Instance; if ((Object)(object)instance == (Object)null || instance.allCurrentProjectiles == null || instance.allCurrentProjectiles.Count == 0) { return true; } for (int i = 0; i < instance.allCurrentProjectiles.Count; i++) { Projectile val = instance.allCurrentProjectiles[i]; if ((Object)(object)val != (Object)null && (Object)(object)val.firedBy == (Object)(object)__instance.playerThrownBy) { Plugin.Logger.LogDebug((object)$"F: {__instance}"); __instance.hasExploded = true; return false; } } return true; } } public static bool CrashBandicootCratesCompatible; private static bool addedCrates; public static bool PlaylistsModCompatible; private static bool addedLoadingScreen; public static GameObject splatBombProjectile; public static GameObject burstBombProjectile; public static GameObject fizzyBombProjectile; public static void CreateSplatBombGrenadeModCrates() { if (Configs.CratesConfig.Value && CrashBandicootCratesCompatible && !addedCrates) { if (Configs.SplatBombConfig.Value) { SplatBombCrate(); } if (Configs.BurstBombConfig.Value) { BurstBombCrate(); } if (Configs.FizzyBombConfig.Value) { FizzyBombCrate(); } addedCrates = true; } } private static void SplatBombCrate() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: 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_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) CrashBandicootCratesAllAssets allAssets = CrashBandicootCratesManagerScript.allAssets; Material val = Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateRimMatSplat.mat"); val.mainTexture = allAssets.allCrateMaterials[1].mainTexture; Vector4 val2 = default(Vector4); ((Vector4)(ref val2))..ctor(0.9803f, 0.945f, 0.1725f, 1f); val.color = Color.op_Implicit(val2); Item val3 = CreateACrate.MakeItem("Splat Bomb Crate", true, true, false, true, 1.3f, false, false, true, false, 100, 50, false, 0f, false, Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/IconSplatCrate.png"), "HoldLung", (AudioClip)null, (AudioClip)null, (AudioClip)null, false, new string[2] { "Thank you for playing:", "LCSplatBombGrenadeMod" }, 0.01f, 0, true, default(Vector3), default(Vector3), default(Vector3), (Mesh[])null, (Material[])null, false, false); CrateData val4 = CreateACrate.MakeCrateData((AudioClip)null, (AudioClip)null, (AudioClip[])null, true, true, false, true, 0.5f, 10f, 2f, (Material[])null, (int[])null, 2f, 10f, 1f, (AnimationCurve)null, -1f, -1f, -1f, false, false, false, false, false, false, false, false, false, false, (GameObject[])null, false, false, 0.2f, -1, 2, -1, -1, false, false, false, true, 0, true, 45f); Vector3 val5 = default(Vector3); ModdedCrateRuntimeParameters val6 = CreateACrate.MakeModdedCrateRuntimeParameters(val4, val3, (string)null, (Material[])(object)new Material[3] { val, allAssets.allCrateMaterials[0], Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateMatSplat.mat") }, (Mesh)null, val5, (GameObject)null, Color.op_Implicit(val2), (GameObject)null, default(Color), true, (string)null, (string)null, 0.25f, 20f, 0, 4, true, 0, 1, 99, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (GameObject)null, 8, -1f, (GameObject)null); CreateACrate.RegisterCrateToAllLevelsWithRarity(val6, 2, 2, 2, 4, 4, 4, 8, 1, 8, 8, 8, 4); Projectile val7 = CreateACrate.MakeProjectile(Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaProjectileSplatBomb.prefab"), 3, 8f, 2f, new Vector3(-1f, -1f, -1f), Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaImpactSplat.prefab"), 210f, new int[1] { -1 }, (AudioClip[])(object)new AudioClip[1] { Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatShootSFX.ogg") }, Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatExplodeSFX.ogg"), true, 25f, 1f, new Vector3(0.25f, 0.25f, 0.25f), new Vector3(0.15f, 0.15f, 0.15f), (string[])null, (string[])null); ExplosionSpawner val8 = val7.spawnOnDestroy.AddComponent(); val8.explosiveCrate = true; val8.explosionKillRange = 4f; val8.explosionDamageRange = 8f; val8.explosionNonLethalDamage = 20; val8.explosionPhysicsForce = 0f; val8.stunCrate = false; val8.stunAffectAudio = false; val8.stunSeverityMultiplier = 0.75f; val8.stunEnemyTime = 5f; val8.stunDistanceRolloff = 1f; splatBombProjectile = ((Component)val7).gameObject; } private static void BurstBombCrate() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_016e: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: 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_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) CrashBandicootCratesAllAssets allAssets = CrashBandicootCratesManagerScript.allAssets; Material val = Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateRimMatBurst.mat"); val.mainTexture = allAssets.allCrateMaterials[1].mainTexture; Vector4 val2 = default(Vector4); ((Vector4)(ref val2))..ctor(0.1607f, 0.098f, 0.4823f, 1f); val.color = Color.op_Implicit(val2); Item val3 = CreateACrate.MakeItem("Burst Bomb Crate", true, true, false, true, 1.1f, false, false, true, false, 150, 50, false, 0f, false, Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/IconBurstCrate.png"), "HoldLung", (AudioClip)null, (AudioClip)null, (AudioClip)null, false, new string[2] { "Thank you for playing:", "LCSplatBombGrenadeMod" }, 0.01f, 0, true, default(Vector3), default(Vector3), default(Vector3), (Mesh[])null, (Material[])null, false, false); CrateData val4 = CreateACrate.MakeCrateData((AudioClip)null, (AudioClip)null, (AudioClip[])null, true, true, false, true, 0.5f, 10f, 2f, (Material[])null, (int[])null, 2f, 10f, 1f, (AnimationCurve)null, -1f, -1f, -1f, false, false, false, false, false, false, false, false, false, false, (GameObject[])null, false, false, 0.1f, -1, 2, -1, -1, false, false, false, false, 0, true, 45f); Vector3 val5 = default(Vector3); ModdedCrateRuntimeParameters val6 = CreateACrate.MakeModdedCrateRuntimeParameters(val4, val3, (string)null, (Material[])(object)new Material[3] { val, allAssets.allCrateMaterials[0], Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateMatBurst.mat") }, (Mesh)null, val5, (GameObject)null, Color.op_Implicit(val2), (GameObject)null, default(Color), true, (string)null, (string)null, 0.25f, 20f, 0, 4, true, 0, 1, 99, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (GameObject)null, 8, -1f, (GameObject)null); CreateACrate.RegisterCrateToAllLevelsWithRarity(val6, 6, 6, 6, 12, 12, 12, 24, 3, 24, 24, 24, 12); Projectile val7 = CreateACrate.MakeProjectile(Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaProjectileBurstBomb.prefab"), 1, 16f, 1f, default(Vector3), Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaImpactBurst.prefab"), 210f, (int[])null, (AudioClip[])(object)new AudioClip[1] { Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatShootSFX.ogg") }, Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/BurstExplodeSFX.ogg"), true, 7.5f, 0.5f, new Vector3(0.3f, 0.3f, 0.3f), new Vector3(0.1f, 0.1f, 0.1f), (string[])null, (string[])null); burstBombProjectile = ((Component)val7).gameObject; } private static void FizzyBombCrate() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_016e: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) CrashBandicootCratesAllAssets allAssets = CrashBandicootCratesManagerScript.allAssets; Material val = Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateRimMatFizzy.mat"); val.mainTexture = allAssets.allCrateMaterials[1].mainTexture; Vector4 val2 = default(Vector4); ((Vector4)(ref val2))..ctor(1f, 0.1882f, 0.4823f, 1f); val.color = Color.op_Implicit(val2); Item val3 = CreateACrate.MakeItem("Fizzy Bomb Crate", true, true, false, true, 1.2f, false, false, true, false, 200, 25, false, 0f, false, Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/IconFizzyCrate.png"), "HoldLung", (AudioClip)null, (AudioClip)null, (AudioClip)null, false, new string[2] { "Thank you for playing:", "LCSplatBombGrenadeMod" }, 0.01f, 0, true, default(Vector3), default(Vector3), default(Vector3), (Mesh[])null, (Material[])null, false, false); CrateData val4 = CreateACrate.MakeCrateData((AudioClip)null, (AudioClip)null, (AudioClip[])null, true, true, false, true, 0.5f, 10f, 2f, (Material[])null, (int[])null, 2f, 10f, 1f, (AnimationCurve)null, -1f, -1f, -1f, false, false, false, false, false, false, false, false, false, false, (GameObject[])null, false, false, 0.15f, -1, 2, -1, -1, false, false, false, true, 0, true, 45f); Vector3 val5 = default(Vector3); ModdedCrateRuntimeParameters val6 = CreateACrate.MakeModdedCrateRuntimeParameters(val4, val3, (string)null, (Material[])(object)new Material[3] { val, allAssets.allCrateMaterials[0], Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/CrashCrateMatFizzy.mat") }, (Mesh)null, val5, (GameObject)null, Color.op_Implicit(val2), (GameObject)null, default(Color), true, (string)null, (string)null, 0.25f, 20f, 0, 4, true, 0, 1, 99, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (UnityAction)null, (GameObject)null, 8, -1f, (GameObject)null); CreateACrate.RegisterCrateToAllLevelsWithRarity(val6, 4, 4, 4, 8, 8, 8, 16, 2, 16, 16, 16, 8); Projectile val7 = CreateACrate.MakeProjectile(Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaProjectileFizzyBomb.prefab"), 2, 24f, 0.25f, new Vector3(0f, 0f, 2f), Plugin.SplatBombModAssets.LoadAsset("Assets/ModCompatibility/BazookaImpactFizzy.prefab"), 210f, new int[1] { -1 }, (AudioClip[])(object)new AudioClip[1] { Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/SplatShootSFX.ogg") }, Plugin.SplatBombModAssets.LoadAsset("Assets/SplatSounds/FizzyExplodeSFX.ogg"), true, 15f, 0.75f, new Vector3(0.2f, 0.2f, 0.4f), new Vector3(0.1f, 0.1f, 0.2f), (string[])null, (string[])null); ExplosionSpawner val8 = val7.spawnOnDestroy.AddComponent(); val8.explosiveCrate = false; val8.explosionKillRange = 2.5f; val8.explosionDamageRange = 5f; val8.explosionNonLethalDamage = 50; val8.explosionPhysicsForce = 5f; val8.stunCrate = true; val8.stunAffectAudio = true; val8.stunSeverityMultiplier = 1f; val8.stunEnemyTime = 10f; val8.stunDistanceRolloff = 1f; fizzyBombProjectile = ((Component)val7).gameObject; } public static void CreateSplatBombGrenadeModLoadingScreen() { if (Configs.LoadingScreenConfig.Value && PlaylistsModCompatible && !addedLoadingScreen) { SharedAudioComponent genericPlaylistsContainer = GetGenericPlaylistsContainer(); if (!((Object)(object)genericPlaylistsContainer == (Object)null)) { AudioList val = SharedAudioMethods.AudioListGetByName("LCSimonTendoPlaylistsMod - Loading Screen", genericPlaylistsContainer, false, true); string text = "Assets/ModCompatibility/SplatBombLoadingMusic"; SharedAudioMethods.AudioClipAddNew(Plugin.SplatBombModAssets.LoadAsset(text + "1.ogg"), val, true, 25, false); SharedAudioMethods.AudioClipAddNew(Plugin.SplatBombModAssets.LoadAsset(text + "2.ogg"), val, true, 75, false); SharedAudioMethods.AudioClipAddNew(Plugin.SplatBombModAssets.LoadAsset(text + "3.ogg"), val, true, 125, false); SharedAudioMethods.AudioClipAddNew(Plugin.SplatBombModAssets.LoadAsset(text + "4.ogg"), val, true, 75, false); addedLoadingScreen = true; } } } private static SharedAudioComponent GetGenericPlaylistsContainer() { ManualLogSource logger = Plugin.Logger; if ((Object)(object)StartOfRound.Instance == (Object)null) { return null; } Transform val = ((Component)StartOfRound.Instance).transform.parent.Find("SimonTendoManagers"); if ((Object)(object)val == (Object)null) { logger.LogWarning((object)"failed to find: SimonTendoManagers"); return null; } Transform val2 = val.Find("LCSimonTendoPlaylistsMod"); if ((Object)(object)val2 == (Object)null) { logger.LogWarning((object)"failed to find: LCSimonTendoPlaylistsMod"); return null; } SharedAudioComponent component = ((Component)val2).GetComponent(); if ((Object)(object)component == (Object)null) { logger.LogError((object)"failed to find: SharedAudioComponent"); } return component; } public static bool FlashFromProjectile(Vector3 stunPos) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) ExplosionSpawner[] array = Object.FindObjectsByType((FindObjectsSortMode)0); if (array == null || array.Length == 0) { return false; } foreach (ExplosionSpawner val in array) { if (!((Object)(object)val == (Object)null) && val.stunCrate && ((Component)val).transform.position == stunPos) { Plugin.Logger.LogDebug((object)$"E: {val}"); return true; } } return false; } } [BepInPlugin("LCSplatBombGrenadeMod", "LCSplatBombGrenadeMod", "1.5.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; public static AssetBundle SplatBombModAssets; public static GameObject SplatBomb; public static GameObject FizzyBomb; public static GameObject BurstBomb; public static Material SplatBombEmptyMaterial; public static GameObject InkScreenSplatters; public static Configs MyConfig { get; internal set; } private void Awake() { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Plugin LCSplatBombGrenadeMod is loaded!"); SplatBombModAssets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "splatbombmodassets")); if ((Object)(object)SplatBombModAssets == (Object)null) { Logger.LogError((object)"Failed to load SplatBomb AssetBundle"); return; } Logger.LogInfo((object)"Loaded SplatBomb AssetBundle"); ModCompatibility.CrashBandicootCratesCompatible = CheckForPlugin("LCCrashBandicootCratesMod"); ModCompatibility.PlaylistsModCompatible = CheckForPlugin("LCSimonTendoPlaylistsMod"); DoHarmonyPatches(new Harmony("LCSplatBombGrenadeMod")); MyConfig = new Configs(((BaseUnityPlugin)this).Config); Configs.DisplayConfigs(); SplatBomb = SplatBombModAssets.LoadAsset("Assets/SplatBombPrefab.prefab"); SplatBombEmptyMaterial = SplatBombModAssets.LoadAsset("Assets/SplatBombAssets/EmptyMaterial.mat"); FizzyBomb = SplatBombModAssets.LoadAsset("Assets/FizzyBombAssets/FizzyBombPrefab.prefab"); BurstBomb = SplatBombModAssets.LoadAsset("Assets/BurstBombAssets/BurstBombPrefab.prefab"); InkScreenSplatters = SplatBombModAssets.LoadAsset("Assets/SplatInk/ScreenSplatters/SplatBombInkSplattersScreen.prefab"); ModCompatibility.CreateSplatBombGrenadeModCrates(); } private static void DoHarmonyPatches(Harmony harmony) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Expected O, but got Unknown //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Expected O, but got Unknown harmony.Patch((MethodBase)typeof(StartOfRound).GetMethod("Awake", BindingFlags.Instance | BindingFlags.NonPublic), (HarmonyMethod)null, new HarmonyMethod(typeof(HarmonyPatches.NewStartOfRound).GetMethod("AwakePostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StartOfRound).GetMethod("Start", BindingFlags.Instance | BindingFlags.NonPublic), new HarmonyMethod(typeof(HarmonyPatches.NewStartOfRound).GetMethod("StartPrefix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(RoundManager).GetMethod("GenerateNewLevelClientRpc", BindingFlags.Instance | BindingFlags.Public), (HarmonyMethod)null, new HarmonyMethod(typeof(HarmonyPatches.NewRoundManager).GetMethod("GenerateNewLevelClientRpcPostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StunGrenadeItem).GetMethod("Start", BindingFlags.Instance | BindingFlags.Public), (HarmonyMethod)null, new HarmonyMethod(typeof(HarmonyPatches.NewStunGrenade).GetMethod("StartPostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StunGrenadeItem).GetMethod("SetControlTipForGrenade", BindingFlags.Instance | BindingFlags.NonPublic), (HarmonyMethod)null, new HarmonyMethod(typeof(HarmonyPatches.NewStunGrenade).GetMethod("SetControlTipForGrenadePostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StunGrenadeItem).GetMethod("ExplodeStunGrenade", BindingFlags.Instance | BindingFlags.NonPublic), new HarmonyMethod(typeof(HarmonyPatches.NewStunGrenade).GetMethod("ExplodeStunGrenadePrefix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StunGrenadeItem).GetMethod("StunExplosion", BindingFlags.Static | BindingFlags.Public), (HarmonyMethod)null, new HarmonyMethod(typeof(HarmonyPatches.NewStunGrenade).GetMethod("StunExplosionPostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); if (ModCompatibility.CrashBandicootCratesCompatible) { PatchCrashBandicootCrates(harmony); } } private static void PatchCrashBandicootCrates(Harmony harmony) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown harmony.Patch((MethodBase)typeof(Projectile).GetMethod("CreateProjectile"), (HarmonyMethod)null, new HarmonyMethod(typeof(ModCompatibility.NewProjectile).GetMethod("CreateProjectilePostfix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(Projectile).GetMethod("SpawnOnDestroy"), new HarmonyMethod(typeof(ModCompatibility.NewProjectile).GetMethod("SpawnOnDestroyPrefix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)typeof(StunGrenadeItem).GetMethod("ExplodeStunGrenade", BindingFlags.Instance | BindingFlags.NonPublic), new HarmonyMethod(typeof(ModCompatibility.NewStunGrenadeItem).GetMethod("ExplodeStunGrenadePrefix")), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void SetSplatBombKeyword() { Terminal val = Object.FindObjectOfType(); TerminalKeyword val2 = null; bool flag = false; bool flag2 = false; TerminalKeyword[] allKeywords = val.terminalNodes.allKeywords; foreach (TerminalKeyword val3 in allKeywords) { if (((Object)val3).name == "StunGrenade") { val3.word = "splat"; flag = true; } else if (((Object)val3).name == "Buy") { val2 = val3; flag2 = true; } if (flag && flag2) { break; } } if ((Object)(object)val2 == (Object)null) { return; } TerminalNode val4 = null; CompatibleNoun[] compatibleNouns = val2.compatibleNouns; foreach (CompatibleNoun val5 in compatibleNouns) { if (((Object)val5.noun).name == "StunGrenade") { val4 = val5.result; break; } } if (!((Object)(object)val4 == (Object)null)) { val4.displayText = "You have requested to order Splat Bombs. Amount: [variableAmount].\nTotal cost of items: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"; val4.terminalOptions[0].result.displayText = "Ordered [variableAmount] Splat Bombs. Your new balance is [playerCredits].\n\nOur contractors enjoy fast, free shipping while on the job! Any purchased items will arrive hourly at your approximate location.\n\nBooyah!\n\n"; } } public static GameObject SearchForObject(string name, Transform parentTransform = null) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown Logger.LogDebug((object)("Starting search for " + name)); GameObject[] array = Object.FindObjectsByType((FindObjectsSortMode)0); GameObject[] array2 = array; GameObject[] array3 = array2; GameObject result; foreach (GameObject val in array3) { if (((Object)val).name == name) { result = val; Logger.LogDebug((object)("Found existing " + ((Object)val).name + ", using as parent.")); return result; } } result = new GameObject(name); if ((Object)(object)parentTransform != (Object)null) { result.transform.SetParent(parentTransform, false); } Logger.LogDebug((object)("Did not find existing " + name + ", instantiating new " + ((Object)result).name)); return result; } private static bool CheckForPlugin(string pluginName, bool printDebug = true) { foreach (PluginInfo value in Chainloader.PluginInfos.Values) { if (value.Metadata.Name == pluginName) { if (printDebug) { Logger.LogDebug((object)("Successfully found " + pluginName)); } return true; } } if (printDebug) { Logger.LogDebug((object)("Failed to find " + pluginName)); } return false; } } internal class SplatBehaviour : MonoBehaviour { public static SplatBehaviour Instance; private Image InkSplattersScreen; private bool FlashFromInkBomb; private void Awake() { //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) Instance = this; StartOfRound instance = StartOfRound.Instance; object obj; if (instance == null) { obj = null; } else { Transform parent = ((Component)instance).transform.parent; if (parent == null) { obj = null; } else { Transform parent2 = parent.parent; if (parent2 == null) { obj = null; } else { Transform obj2 = parent2.Find("UI"); obj = ((obj2 != null) ? ((Component)obj2).GetComponentInChildren() : null); } } } Canvas val = (Canvas)obj; Plugin.Logger.LogDebug((object)$"found canvas: {val}"); if ((Object)(object)val != (Object)null) { GameObject val2 = Object.Instantiate(Plugin.InkScreenSplatters, ((Component)val).transform.GetChild(0)); InkSplattersScreen = val2.GetComponent(); Color color = ((Graphic)InkSplattersScreen).color; color.a = 0f; ((Graphic)InkSplattersScreen).color = color; } } private void Update() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) if (FlashFromInkBomb && (Object)(object)HUDManager.Instance != (Object)null && HUDManager.Instance.flashFilter > 0.025f) { Color color = ((Graphic)InkSplattersScreen).color; color.a = HUDManager.Instance.flashFilter; ((Graphic)InkSplattersScreen).color = color; } else { FlashFromInkBomb = false; Color color2 = ((Graphic)InkSplattersScreen).color; color2.a = 0f; ((Graphic)InkSplattersScreen).color = color2; } } internal void PerformInkSplatterCheck(Vector3 stunPos) { //IL_002c: 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_00bf: 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_0100: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)InkSplattersScreen == (Object)null || (Object)(object)HUDManager.Instance == (Object)null || HUDManager.Instance.flashFilter < ((Graphic)InkSplattersScreen).color.a) { return; } StunGrenadeItem[] array = Object.FindObjectsByType((FindObjectsSortMode)0); if (array == null || array.Length == 0) { return; } bool flag = false; for (int i = 0; i < array.Length; i++) { if (((Configs.SplatBombConfig.Value && ((Object)((Component)array[i]).gameObject).name == "StunGrenade(Clone)") || (Configs.FizzyBombConfig.Value && ((Object)((Component)array[i]).gameObject).name == "DiyFlashbang(Clone)")) && stunPos == ((Component)array[i]).transform.position) { flag = true; break; } } if (!flag && ModCompatibility.CrashBandicootCratesCompatible) { flag = ModCompatibility.FlashFromProjectile(stunPos); } AddInkToScreen(flag, stunPos); } public void AddInkToScreen(bool setTo, Vector3 pos) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val = StartOfRound.Instance.localPlayerController; if (StartOfRound.Instance.localPlayerController.isPlayerDead && (Object)(object)StartOfRound.Instance.localPlayerController.spectatedPlayerScript != (Object)null) { val = StartOfRound.Instance.localPlayerController.spectatedPlayerScript; } float num = Vector3.Distance(pos, val.playerEye.position); if (num < 15f) { FlashFromInkBomb = setTo; } Plugin.Logger.LogDebug((object)$"distance: {num} | FlashFromInkBomb: {FlashFromInkBomb}"); } } public static class PluginInfo { public const string PLUGIN_GUID = "LCSplatBombGrenadeMod"; public const string PLUGIN_NAME = "LCSplatBombGrenadeMod"; public const string PLUGIN_VERSION = "1.5.4"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }