Please disclose if your mod was created primarily 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 LethalAmpUp v4.0.2
LethalAmpUp.dll
Decompiled 2 years agousing System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalAmpUp.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("LethalAmpUp")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LethalAmpUp")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("295e10bc-e4fe-4a3a-8cc1-c352b4c3f427")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace LethalAmpUp { [BepInPlugin("Janimates.LethalAmpUp", "LethalAmpUp", "1.0.0")] public class LethalAmpUpBase : BaseUnityPlugin { private const string modGUID = "Janimates.LethalAmpUp"; private const string modName = "LethalAmpUp"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("Janimates.LethalAmpUp"); private static LethalAmpUpBase Instance; internal ManualLogSource mls; public static ConfigEntry<bool> EnableModifiers; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } EnableModifiers = ((BaseUnityPlugin)this).Config.Bind<bool>("LAU Additions", "LAU Modifications", false, "(NOT FINISHED) Adds unique modifiers similar to BrutalCompany!"); mls = Logger.CreateLogSource("Janimates.LethalAmpUp"); mls.LogInfo((object)"Amping the mod!"); harmony.PatchAll(typeof(LethalAmpUpBase)); harmony.PatchAll(typeof(RadMechAIBPatch)); harmony.PatchAll(typeof(NutCrackerAIBPatch)); harmony.PatchAll(typeof(MouthDogAIBPatch)); harmony.PatchAll(typeof(ButlerAIBPatch)); harmony.PatchAll(typeof(FlashlightBPatch)); harmony.PatchAll(typeof(BunkerSpiderAIBPatch)); harmony.PatchAll(typeof(ClaySurgeonAIBPatch)); harmony.PatchAll(typeof(GhostGirlAIBPatch)); harmony.PatchAll(typeof(FlowerManAIBPatch)); harmony.PatchAll(typeof(EnemyAIBPatch)); harmony.PatchAll(typeof(SnareFleaAIBPatch)); harmony.PatchAll(typeof(HoardingBugAIBPatch)); harmony.PatchAll(typeof(DoubleWingAIBPatch)); harmony.PatchAll(typeof(ThumperAIBPatch)); harmony.PatchAll(typeof(StartOfRoundBPatch)); harmony.PatchAll(typeof(ForestGiantAIBPatch)); } } } namespace LethalAmpUp.Patches { [HarmonyPatch(typeof(BlobAI))] internal class BlobAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void BlobAIAmplify(ref BlobAI __instance) { ((EnemyAI)__instance).enemyType.pushPlayerForce = 5f; } } [HarmonyPatch(typeof(SandSpiderAI))] internal class BunkerSpiderAIBPatch { public static Dictionary<SandSpiderAI, float> SpiderSpeedBoosts = new Dictionary<SandSpiderAI, float>(); private static readonly float BASE_SPIDER_SPEED = -1.25f; private static readonly float MAX_SPIDER_SPEED = 12.5f; [HarmonyPatch(typeof(SandSpiderAI), "Start")] [HarmonyPostfix] private static void SpiderStart(ref SandSpiderAI __instance) { if (!SpiderSpeedBoosts.ContainsKey(__instance)) { SpiderSpeedBoosts.Add(__instance, BASE_SPIDER_SPEED); } } [HarmonyPatch(typeof(SandSpiderAI), "OnCollideWithPlayer")] [HarmonyPrefix] private static void SpiderDamagePlayer(ref SandSpiderAI __instance, ref Collider other, ref bool ___onWall, ref bool ___spoolingPlayerBody, ref float ___timeSinceHittingPlayer) { if (SpiderSpeedBoosts.ContainsKey(__instance) && !(((EnemyAI)__instance).isEnemyDead | ___onWall) && !((Object)(object)((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, ___spoolingPlayerBody, false) == (Object)null) && !(___timeSinceHittingPlayer <= 1f)) { SpiderSpeedBoosts[__instance] += Random.Range(0.5f, 1.5f); } } [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] private static bool OnCollideWithPlayer(ref SandSpiderAI __instance, ref Collider other) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) if (((EnemyAI)__instance).isEnemyDead && Traverse.Create((object)__instance).Field("onWall").GetValue<bool>()) { return false; } PlayerControllerB val = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, Traverse.Create((object)__instance).Field("SpoolingPlayerBody").GetValue<bool>(), false); if ((Object)(object)val != (Object)null && Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").GetValue<float>() > 0.5f) { Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").SetValue((object)0f); val.DamagePlayer(25, true, true, (CauseOfDeath)6, 0, false, default(Vector3)); __instance.HitPlayerServerRpc((int)GameNetworkManager.Instance.localPlayerController.playerClientId); } return false; } [HarmonyPatch(typeof(SandSpiderAI), "StopChasing")] [HarmonyPostfix] private static void ResetSpeed(ref SandSpiderAI __instance) { if (SpiderSpeedBoosts.ContainsKey(__instance)) { SpiderSpeedBoosts[__instance] = BASE_SPIDER_SPEED; } } [HarmonyPatch(typeof(SandSpiderAI), "Update")] [HarmonyPostfix] private static void SpiderUpdate(ref SandSpiderAI __instance) { if (SpiderSpeedBoosts.ContainsKey(__instance) && ((NetworkBehaviour)__instance).IsOwner && !(((EnemyAI)__instance).stunNormalizedTimer > 0f) && SpiderSpeedBoosts[__instance] != 0f) { ((EnemyAI)__instance).agent.speed = Mathf.Clamp(((EnemyAI)__instance).agent.speed + SpiderSpeedBoosts[__instance], 0f, MAX_SPIDER_SPEED); __instance.spiderSpeed = Mathf.Clamp(__instance.spiderSpeed + SpiderSpeedBoosts[__instance], 0f, MAX_SPIDER_SPEED); } } [HarmonyPatch("Start")] [HarmonyPostfix] private static void BunkerSpiderAmp(ref SandSpiderAI __instance) { ((EnemyAI)__instance).enemyHP = 6; } } [HarmonyPatch(typeof(ButlerEnemyAI))] internal class ButlerAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void ButlerAmplify(ref ButlerEnemyAI __instance) { __instance.idleMovementSpeedBase = 10f; ((EnemyAI)__instance).enemyHP = 10; ((EnemyAI)__instance).enemyType.MaxCount = 1; ((EnemyAI)__instance).enemyType.PowerLevel = 3f; } [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] private static bool ButlerCollidePatch(ref ButlerEnemyAI __instance, ref Collider other) { //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) if (((EnemyAI)__instance).isEnemyDead) { return false; } if (((EnemyAI)__instance).currentBehaviourStateIndex != 2 && Random.Range(0, 100) >= 100) { return false; } if (Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").GetValue<float>() < 0.167f) { return false; } PlayerControllerB val = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, false, false); if ((Object)(object)val == (Object)null || (Object)(object)val != (Object)(object)GameNetworkManager.Instance.localPlayerController) { return false; } Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").SetValue((object)0f); if (((EnemyAI)__instance).currentBehaviourStateIndex != 2) { Traverse.Create((object)__instance).Field("berserkModeTimer").SetValue((object)60f); } val.DamagePlayer(5, true, true, (CauseOfDeath)14, 0, false, default(Vector3)); __instance.StabPlayerServerRpc((int)val.playerClientId, true); return false; } } [HarmonyPatch(typeof(ClaySurgeonAI))] internal class ClaySurgeonAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void ClaySurgeonAmplify(ref ClaySurgeonAI __instance) { __instance.jumpSpeed = 7f; __instance.jumpTime = 1f; __instance.startingInterval = 1.5f; __instance.endingInterval = 0.15f; } } [HarmonyPatch(typeof(SpringManAI))] internal class CoilHeadAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void CoilheadAIAmplify(ref SpringManAI __instance) { ((EnemyAI)__instance).enemyType.MaxCount = 2; Traverse.Create((object)__instance).Field("currentChaseSpeed").SetValue((object)5); } } [HarmonyPatch(typeof(DoublewingAI))] internal class DoubleWingAIBPatch { [HarmonyPatch("AlertBird")] [HarmonyPrefix] private static void DoubleWingExplosive(ref DoublewingAI __instance) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 10f, 0, 30f, (GameObject)null, false); } } [HarmonyPatch(typeof(BaboonBirdAI))] internal class DumbIdiotsAIBPatch { } [HarmonyPatch(typeof(EnemyAI))] internal class EnemyAIBPatch { [HarmonyPatch(typeof(EnemyAI), "ReachedNodeInSearch")] [HarmonyPostfix] private static void EnemyReachedNode(ref EnemyAI __instance) { if (__instance is SandWormAI) { SandWormReachedNode(((Component)__instance).GetComponent<SandWormAI>()); } else if (__instance is RadMechAI) { RadMechReachedNode(((Component)__instance).GetComponent<RadMechAI>()); } } private static void SandWormReachedNode(SandWormAI worm) { if (!((Object)(object)worm == (Object)null) && !((EnemyAI)worm).isEnemyDead && StartOfRound.Instance.livingPlayers != 0 && ((EnemyAI)worm).currentBehaviourStateIndex == 0 && !worm.inEmergingState && Random.Range(0, 100) < 97) { worm.StartEmergeAnimation(); } } private static void RadMechReachedNode(RadMechAI mech) { if (!((Object)(object)mech == (Object)null) && !((EnemyAI)mech).isEnemyDead) { if (Random.Range(0, 100) >= 90) { mech.FlickerFace(); return; } if (Random.Range(0, 100) >= 95) { mech.EnableSpotlight(); return; } if (Random.Range(0, 100) >= 95) { mech.EnableBlowtorch(); return; } mech.DisableSpotlight(); mech.DisableBlowtorch(); } } } [HarmonyPatch(typeof(FlashlightItem))] internal class FlashlightBPatch { private static AudioClip[] sprayCanSFX; [HarmonyPatch("Start")] [HarmonyPostfix] private static void FlashLightChanges(ref FlashlightItem __instance) { if (__instance.flashlightTypeID == 1) { ((GrabbableObject)__instance).itemProperties.batteryUsage = 15f; ((GrabbableObject)__instance).useCooldown = 0.25f; ((GrabbableObject)__instance).insertedBattery.charge = 0f; if (sprayCanSFX == null) { sprayCanSFX = Resources.FindObjectsOfTypeAll<SprayPaintItem>().First().sprayCanShakeSFX; } } } [HarmonyPatch("EquipItem")] [HarmonyPostfix] private static void EquipFlashlightPatch(ref FlashlightItem __instance) { if (__instance.flashlightTypeID == 1) { ((GrabbableObject)__instance).insertedBattery.empty = false; } } [HarmonyPatch("ItemActivate")] [HarmonyPrefix] private static bool ItemActivateChange(ref FlashlightItem __instance) { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) if (__instance.flashlightTypeID != 1) { return true; } __instance.flashlightAudio.PlayOneShot(sprayCanSFX[Random.Range(0, sprayCanSFX.Length)]); ((GrabbableObject)__instance).insertedBattery.charge = Mathf.Clamp01(((GrabbableObject)__instance).insertedBattery.charge + 0.12f); PlayerControllerB playerHeldBy = ((GrabbableObject)__instance).playerHeldBy; if (playerHeldBy != null) { playerHeldBy.playerBodyAnimator.SetBool("Grab", true); } ((GrabbableObject)__instance).insertedBattery.empty = false; ((GrabbableObject)__instance).SyncBatteryServerRpc((int)(((GrabbableObject)__instance).insertedBattery.charge * 100f)); __instance.SwitchFlashlight(true); RoundManager.Instance.PlayAudibleNoise(((Component)__instance).transform.position, 22f, 0.6f, 0, ((GrabbableObject)__instance).isInShipRoom && StartOfRound.Instance.hangarDoorsClosed, 0); return false; } [HarmonyPatch("UseUpBatteries")] [HarmonyPostfix] private static void UseUpBatteriesPatch(ref FlashlightItem __instance) { if (__instance.flashlightTypeID == 1) { ((GrabbableObject)__instance).insertedBattery.empty = false; } } } [HarmonyPatch(typeof(FlowermanAI))] internal class FlowerManAIBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void BrackenAIAmplify(ref FlowermanAI __instance) { if (!((EnemyAI)__instance).isEnemyDead && !__instance.inKillAnimation && !((Object)(object)GameNetworkManager.Instance == (Object)null) && ((EnemyAI)__instance).currentBehaviourStateIndex == 0) { ((EnemyAI)__instance).agent.speed = 1f; } } } [HarmonyPatch(typeof(ForestGiantAI))] internal class ForestGiantAIBPatch { public static List<ForestGiantAI> BlindGiants = new List<ForestGiantAI>(); [HarmonyPatch("Start")] [HarmonyPostfix] private static void GiantAmplify(ref ForestGiantAI __instance) { if (Random.Range(0, 100) < 85 && !BlindGiants.Contains(__instance)) { MakeGiantBlind(__instance); } } [HarmonyPatch("LookForPlayers")] [HarmonyPrefix] private static bool GiantDoesNotSearch(ref ForestGiantAI __instance) { return !BlindGiants.Contains(__instance); } [HarmonyPatch(typeof(ForestGiantAI), "Update")] [HarmonyPostfix] private static void BlindBuff(ref ForestGiantAI __instance) { if (BlindGiants.Contains(__instance) && !(((EnemyAI)__instance).stunNormalizedTimer > 0f)) { ((EnemyAI)__instance).agent.speed = 8.5f; } } private static void MakeGiantBlind(ForestGiantAI giant) { if (!BlindGiants.Contains(giant)) { ScanNodeProperties componentInChildren = ((Component)giant).GetComponentInChildren<ScanNodeProperties>(); if (!((Object)(object)componentInChildren == (Object)null)) { BlindGiants.Add(giant); componentInChildren.headerText = "Blind Giant"; componentInChildren.subText = "Fast, But Blind."; } } } [HarmonyPatch(typeof(EnemyAI), "SetEnemyStunned")] [HarmonyPostfix] private static void GiantStunned(ref EnemyAI __instance) { if (Random.Range(0, 100) < 97) { ForestGiantAI component = ((Component)__instance).GetComponent<ForestGiantAI>(); if (!((Object)(object)component == (Object)null) && !BlindGiants.Contains(component)) { MakeGiantBlind(component); } } } } [HarmonyPatch(typeof(DressGirlAI))] internal class GhostGirlAIBPatch { [HarmonyPatch("ChoosePlayerToHaunt")] [HarmonyPostfix] private static void GhostGirlHauntAmp(ref DressGirlAI __instance) { Traverse.Create((object)__instance).Field("timesStared").SetValue((object)999); Traverse.Create((object)__instance).Field("timesSeenByPlayer").SetValue((object)5); if (Random.Range(0, 100) < 50) { BreakerBox val = Object.FindObjectOfType<BreakerBox>(); if (!((Object)(object)val == (Object)null)) { val.SetSwitchesOff(); RoundManager.Instance.TurnOnAllLights(false); } } } [HarmonyPatch("Start")] [HarmonyPostfix] private static void GhostGirlAmp(ref DressGirlAI __instance) { } } [HarmonyPatch(typeof(HoarderBugAI))] internal class HoardingBugAIBPatch { [HarmonyPatch(typeof(HoarderBugAI), "Update")] [HarmonyPostfix] private static void HoarderSpeedPatch(ref HoarderBugAI __instance) { if (((EnemyAI)__instance).currentBehaviourStateIndex == 1 && !(((EnemyAI)__instance).stunNormalizedTimer > 0f) && __instance.heldItem != null) { ((EnemyAI)__instance).agent.speed = 20f; } } } [HarmonyPatch(typeof(MouthDogAI))] internal class MouthDogAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void MouthDogAmplify(ref MouthDogAI __instance) { } [HarmonyPatch("Update")] [HarmonyPrefix] private static void UpdatePatch(ref MouthDogAI __instance) { if (((NetworkBehaviour)__instance).IsOwner && ((EnemyAI)__instance).currentBehaviourStateIndex == 3 && !(((EnemyAI)__instance).agent.speed > 10f) && !__instance.endingLunge && !Traverse.Create((object)__instance).Field("inKillAnimation").GetValue<bool>()) { __instance.endingLunge = true; Traverse.Create((object)__instance).Field("lungeCooldown").SetValue((object)0.15f); __instance.EndLungeServerRpc(); } } } [HarmonyPatch(typeof(NutcrackerEnemyAI))] internal class NutCrackerAIBPatch { public static List<NutcrackerEnemyAI> Alphred = new List<NutcrackerEnemyAI>(); [HarmonyPatch("TurnTorsoToTargetDegrees")] [HarmonyPrefix] private static void IncreaseSpeed(ref NutcrackerEnemyAI __instance) { NutcrackerEnemyAI obj = __instance; obj.torsoTurnSpeed *= 3f; } [HarmonyPatch("TurnTorsoToTargetDegrees")] [HarmonyPostfix] private static void RevertSpeed(ref NutcrackerEnemyAI __instance) { NutcrackerEnemyAI obj = __instance; obj.torsoTurnSpeed /= 3f; } [HarmonyPatch("GlobalNutcrackerClock")] [HarmonyPrefix] private static bool ReplaceClockFunction(ref NutcrackerEnemyAI __instance) { if (!Traverse.Create((object)__instance).Field("isLeaderScript").GetValue<bool>()) { return false; } if (Time.realtimeSinceStartup - NutcrackerEnemyAI.timeAtNextInspection <= 2f) { return false; } NutcrackerEnemyAI.timeAtNextInspection = Time.realtimeSinceStartup + (float)Random.Range(3, 6); return false; } [HarmonyPatch("ReloadGun")] [HarmonyPostfix] private static void ReloadDefense(ref NutcrackerEnemyAI __instance) { //IL_001f: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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) if (Random.Range(0, 100) >= 99) { Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 15f, 0, 30f, (GameObject)null, false); Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 15f, 5, 30f, (GameObject)null, false); Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 15f, 10, 30f, (GameObject)null, false); Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 15f, 15, 30f, (GameObject)null, false); Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 15f, 20, 30f, (GameObject)null, false); } } [HarmonyPatch("Start")] [HarmonyPostfix] private static void AlphredNut(ref NutcrackerEnemyAI __instance) { if (Random.Range(0, 100) > 99 && !Alphred.Contains(__instance)) { ScanNodeProperties componentInChildren = ((Component)__instance).GetComponentInChildren<ScanNodeProperties>(); if (!((Object)(object)componentInChildren == (Object)null)) { Alphred.Add(__instance); componentInChildren.headerText = "Alphred"; componentInChildren.subText = "He's Alphred."; ((EnemyAI)__instance).enemyHP = 6; } } } } [HarmonyPatch(typeof(RadMechAI))] internal class RadMechAIBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void RadMechAmplify(ref RadMechAI __instance) { RadMechAI obj = __instance; obj.fireRate *= 0.5f; RadMechAI obj2 = __instance; obj2.missileSpeed *= 3f; AISearchRoutine searchForPlayers = __instance.searchForPlayers; searchForPlayers.searchWidth /= 1.5f; RadMechAI obj3 = __instance; obj3.chargeForwardSpeed *= 1.5f; } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerBPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void ExtraRoundManagerStuff(ref RoundManager __instance) { } } [HarmonyPatch(typeof(CentipedeAI))] internal class SnareFleaAIBPatch { [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] private static bool CancelCollide() { return false; } [HarmonyPatch("fallFromCeiling")] [HarmonyPrefix] private static bool FleaFallFromCeilingPatch(ref CentipedeAI __instance, ref IEnumerator __result) { __result = FleaFallFromCeiling(__instance); return false; } private static IEnumerator FleaFallFromCeiling(CentipedeAI flea) { ((EnemyAI)flea).targetNode = null; Vector3 start = ((Component)flea).transform.position; Vector3 ground = ((Component)flea).transform.position; Ray ray = new Ray(((Component)flea).transform.position, Vector3.down); RaycastHit hit = default(RaycastHit); if (!Physics.Raycast(ray, ref hit, 20f, 268435712)) { start = RoundManager.Instance.GetNavMeshPosition(((Ray)(ref ray)).GetPoint(4f), default(NavMeshHit), 7f, -1); if (((NetworkBehaviour)flea).IsOwner) { ((EnemyAI)flea).KillEnemyOnOwnerClient(true); } } else { ground = ((RaycastHit)(ref hit)).point; } float fallTime = 0f; float fallSpeed = 2.5f; while (fallTime < 1f) { yield return null; fallTime += Time.deltaTime * fallSpeed; ((Component)flea).transform.position = Vector3.Lerp(start, ground, flea.fallToGroundCurve.Evaluate(fallTime)); } ((EnemyAI)flea).creatureSFX.PlayOneShot(flea.hitGroundSFX); ((EnemyAI)flea).serverPosition = ((Component)flea).transform.position; if (((NetworkBehaviour)flea).IsOwner) { ((EnemyAI)flea).agent.speed = 0f; } else { ((Component)flea).transform.eulerAngles = new Vector3(0f, ((Component)flea).transform.eulerAngles.y, 0f); } Traverse.Create((object)flea).Field("clingingToCeiling").SetValue((object)false); ((EnemyAI)flea).inSpecialAnimation = false; yield return (object)new WaitForSeconds(0.2f); Landmine.SpawnExplosion(((Component)flea).transform.position, true, 0f, 3f, 45, 25f, (GameObject)null, false); Traverse.Create((object)flea).Field("ceilingAnimationCoroutine").SetValue((object)null); Traverse.Create((object)flea).Field("startedCeilingAnimationCoroutine").SetValue((object)false); } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundBPatch { public static Dictionary<SandSpiderAI, float> SpiderSpeedBoosts = new Dictionary<SandSpiderAI, float>(); public static List<ForestGiantAI> BlindGiants = new List<ForestGiantAI>(); public static List<NutcrackerEnemyAI> Alphred = new List<NutcrackerEnemyAI>(); [HarmonyPatch(typeof(StartOfRound), "StartGame")] [HarmonyPrefix] private static void StartGamePatch() { SpiderSpeedBoosts.Clear(); BlindGiants.Clear(); Alphred.Clear(); } } [HarmonyPatch(typeof(CrawlerAI))] internal class ThumperAIBPatch { [HarmonyPatch("MakeScreech")] [HarmonyPrefix] private static bool NoMoreScreech(ref CrawlerAI __instance) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)__instance).transform.position) < 15f) { GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.75f, true); } return false; } [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] private static bool OnCollideWithPlayerThump(ref CrawlerAI __instance, ref Collider other) { //IL_0068: 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) if (!(Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").GetValue<float>() < 0.2f)) { PlayerControllerB val = ((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, false, false); if ((Object)(object)val != (Object)null) { Traverse.Create((object)__instance).Field("timeSinceHittingPlayer").SetValue((object)0); val.DamagePlayer(10, true, true, (CauseOfDeath)6, 0, false, default(Vector3)); ((EnemyAI)__instance).agent.speed = 0f; __instance.HitPlayerServerRpc((int)GameNetworkManager.Instance.localPlayerController.playerClientId); GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(1f, true); } } return false; } [HarmonyPatch("EatPlayerBodyAnimation")] [HarmonyPrefix] private static void ExplodeOnSuccess(ref CrawlerAI __instance) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) Landmine.SpawnExplosion(((Component)__instance).transform.position, true, 0f, 10f, 15, 55f, (GameObject)null, false); } } }