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 SCP682 v1.0.6
scripts/plugins/ProjectSCP.SCP682.dll
Decompiled 4 days 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.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using LethalLib.Modules; using Md.CaveDwellerAI; using Md.JesterAI; using Md.LungProp; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using MonoDetour.Reflection.Unspeakable; using MonoMod.Utils; using ProjectSCP.SCP682.NetcodePatcher; using SCP682.Configuration; using SCP682.Hooks; using SCP682.SCPEnemy; using SCP682.SCPEnemy.DoorBreak; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Video; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MonoDetourTargets(typeof(LungProp), Members = new string[] { "DisconnectFromMachinery" })] [assembly: MonoDetourTargets(typeof(CaveDwellerAI), Members = new string[] { "Start" })] [assembly: MonoDetourTargets(typeof(JesterAI), Members = new string[] { "Start" })] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ProjectSCP.SCP682")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.6.0")] [assembly: AssemblyInformationalVersion("1.0.6+3117961102d0635f7dddcae92ba3892c6dadf004")] [assembly: AssemblyProduct("ProjectSCP.SCP682")] [assembly: AssemblyTitle("SCP682")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Hamunii/LC-SCP-682-Enemy")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Md.LungProp { internal static class DisconnectFromMachinery { public delegate void PrefixSignature(LungProp self); public delegate void PostfixSignature(LungProp self, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, LungProp> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, LungProp> self, ref bool continueEnumeration); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MonoDetourHook PrefixMoveNext(PrefixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook PostfixMoveNext(PostfixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHookMoveNext(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook((MethodBase)StateMachineTarget(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(LungProp); MethodInfo method = typeFromHandle.GetMethod("DisconnectFromMachinery", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("LungProp", "DisconnectFromMachinery"); } return method; } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } } namespace Md.JesterAI { internal static class Start { public delegate void PrefixSignature(JesterAI self); public delegate void PostfixSignature(JesterAI self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(JesterAI); MethodInfo method = typeFromHandle.GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("JesterAI", "Start"); } return method; } } } namespace Md.CaveDwellerAI { internal static class Start { public delegate void PrefixSignature(CaveDwellerAI self); public delegate void PostfixSignature(CaveDwellerAI self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { Type typeFromHandle = typeof(CaveDwellerAI); MethodInfo method = typeFromHandle.GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null); if ((object)method == null) { throw new MissingMethodException("CaveDwellerAI", "Start"); } return method; } } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace SCP682 { internal static class AddEnemyScript { internal static void SCP682AI(EnemyType enemyType, AssetBundle assets) { GameObject enemyPrefab = enemyType.enemyPrefab; SCP682AI sCP682AI = enemyPrefab.AddComponent<SCP682AI>(); ((EnemyAI)sCP682AI).enemyType = enemyType; ((EnemyAI)sCP682AI).creatureAnimator = enemyPrefab.GetComponentInChildren<Animator>(); ((EnemyAI)sCP682AI).creatureVoice = ((Component)enemyPrefab.transform.Find("ModelRoot/CrocodileModel/CG/Pelvis/CreatureVoice")).GetComponent<AudioSource>(); ((EnemyAI)sCP682AI).creatureSFX = ((Component)enemyPrefab.transform.Find("CreatureSFX")).GetComponent<AudioSource>(); ((EnemyAI)sCP682AI).eye = enemyPrefab.transform.Find("Eye"); ((EnemyAI)sCP682AI).dieSFX = assets.LoadAsset<AudioClip>("SkibidiDeath"); ((EnemyAI)sCP682AI).enemyBehaviourStates = (EnemyBehaviourState[])(object)new EnemyBehaviourState[20]; ((EnemyAI)sCP682AI).AIIntervalTime = 0.2f; ((EnemyAI)sCP682AI).agent = enemyPrefab.GetComponent<NavMeshAgent>(); ((EnemyAI)sCP682AI).updatePositionThreshold = 0.1f; ((EnemyAI)sCP682AI).syncMovementSpeed = 0.22f; ((EnemyAI)sCP682AI).enemyHP = 18; EnemyAICollisionDetect componentInChildren = enemyPrefab.GetComponentInChildren<EnemyAICollisionDetect>(); componentInChildren.mainScript = (EnemyAI)(object)sCP682AI; DoorDestroyerCollider doorDestroyerCollider = ((Component)componentInChildren).gameObject.AddComponent<DoorDestroyerCollider>(); doorDestroyerCollider.AI = sCP682AI; } internal static void RemoveComponent<T>(this GameObject gameObject) where T : Component { T component = gameObject.GetComponent<T>(); Object.Destroy((Object)(object)component); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("ProjectSCP.SCP682", "SCP682", "1.0.6")] public class Plugin : BaseUnityPlugin { public static AssetBundle? modAssets; internal static EnemyType SCP682ET; public const string Id = "ProjectSCP.SCP682"; internal static ManualLogSource Logger { get; private set; } internal static PluginConfig BoundConfig { get; private set; } public static string Name => "SCP682"; public static string Version => "1.0.6"; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Stopwatch stopwatch = Stopwatch.StartNew(); Logger.LogInfo((object)("Plugin ProjectSCP.SCP682 " + Version + " started loading...")); BoundConfig = new PluginConfig(((BaseUnityPlugin)this).Config); InitializeNetworkBehaviours(); string path = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "SCP682Assets"); modAssets = AssetBundle.LoadFromFile(Path.Combine(path, "scp682assets")); if (modAssets == null) { Logger.LogError((object)"Failed to load custom assets."); return; } SFX.InitializeSFX(modAssets); SCP682ET = modAssets.LoadAsset<EnemyType>("SCP682ET"); TerminalNode val = modAssets.LoadAsset<TerminalNode>("SCP682TN"); AssetBundle val2 = AssetBundle.LoadFromFile(Path.Combine(path, "scp682videobundle")); VideoClip displayVideo = val2.LoadAsset<VideoClip>("SCP682Spin"); val.displayVideo = displayVideo; AddEnemyScript.SCP682AI(SCP682ET, modAssets); NetworkPrefabs.RegisterNetworkPrefab(SCP682ET.enemyPrefab); Enemies.RegisterEnemy(SCP682ET, 20, (LevelTypes)(-1), val, (TerminalKeyword)null); JesterListHook.Init(); ApparatusTakenHook.Init(); CaveDwellerList.Init(); stopwatch.Stop(); Logger.LogInfo((object)string.Format("{0} loaded in {1}ms!", "ProjectSCP.SCP682", stopwatch.ElapsedMilliseconds)); } private static void InitializeNetworkBehaviours() { Type[] array; try { array = Assembly.GetExecutingAssembly().GetTypes(); } catch (ReflectionTypeLoadException ex) { array = ex.Types.Where((Type t) => t != null).ToArray(); } Type[] array2 = array; foreach (Type type in array2) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array3 = methods; foreach (MethodInfo methodInfo in array3) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } } internal static class PLog { internal static void Log(object data) { Plugin.Logger.LogInfo(data); } internal static void LogWarning(object data) { Plugin.Logger.LogWarning(data); } internal static void LogError(object data) { Plugin.Logger.LogError(data); } } } namespace SCP682.Hooks { internal static class ApparatusTakenHook { internal static void Init() { DisconnectFromMachinery.PostfixMoveNext(Postfix_LungProp_DisconnectFromMachinery_MoveNext); } private static void Postfix_LungProp_DisconnectFromMachinery_MoveNext(SpeakableEnumerator<object, LungProp> self, ref bool continueEnumeration) { if (!continueEnumeration) { if (Random.Range(0, 2) == 0) { SpawnSCP682(outside: true); } else { SpawnSCP682(outside: false); } } } internal static void SpawnSCP682(bool outside) { //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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00c6: 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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsHost && Plugin.SCP682ET.numberSpawned <= 0) { RoundManager instance = RoundManager.Instance; GameObject[] array; if (outside) { array = GameObject.FindGameObjectsWithTag("OutsideAINode"); instance.currentOutsideEnemyPower += Plugin.SCP682ET.PowerLevel; } else { array = GameObject.FindGameObjectsWithTag("AINode"); instance.currentEnemyPower += Plugin.SCP682ET.PowerLevel; } EnemyType sCP682ET = Plugin.SCP682ET; sCP682ET.numberSpawned++; Vector3 position = array[instance.AnomalyRandom.Next(0, array.Length)].transform.position; position = instance.GetRandomNavMeshPositionInBoxPredictable(position, 10f, default(NavMeshHit), instance.AnomalyRandom, instance.GetLayermaskForEnemySizeLimit(Plugin.SCP682ET, false, -1), 1f); position = instance.PositionWithDenialPointsChecked(position, array, Plugin.SCP682ET, -1f, (Random)null); NetworkObjectReference val = instance.SpawnEnemyGameObject(position, 0f, 1, Plugin.SCP682ET); NetworkObject val2 = default(NetworkObject); if (!((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null)) { Plugin.Logger.LogError((object)"Couldn't get network object for spawned enemy!"); return; } SCP682AI component = ((Component)val2).GetComponent<SCP682AI>(); ((EnemyAI)component).enemyType.isOutsideEnemy = outside; } } } internal static class CaveDwellerList { [CompilerGenerated] private sealed class <GetBabyCaveDwellers>d__3 : IEnumerable<CaveDwellerAI>, IEnumerable, IEnumerator<CaveDwellerAI>, IEnumerator, IDisposable { private int <>1__state; private CaveDwellerAI <>2__current; private int <>l__initialThreadId; private int <i>5__2; CaveDwellerAI IEnumerator<CaveDwellerAI>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetBabyCaveDwellers>d__3(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; goto IL_007b; } <>1__state = -1; <i>5__2 = 0; goto IL_008b; IL_007b: <i>5__2++; goto IL_008b; IL_008b: if (<i>5__2 < caveDwellerEnemies.Count) { CaveDwellerAI val = caveDwellerEnemies[<i>5__2]; if ((Object)(object)val == (Object)null || ((EnemyAI)val).currentBehaviourStateIndex != 0) { caveDwellerEnemies.RemoveAt(<i>5__2); <i>5__2--; goto IL_007b; } <>2__current = val; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<CaveDwellerAI> IEnumerable<CaveDwellerAI>.GetEnumerator() { if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; return this; } return new <GetBabyCaveDwellers>d__3(0); } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<CaveDwellerAI>)this).GetEnumerator(); } } public static List<CaveDwellerAI?> caveDwellerEnemies = new List<CaveDwellerAI>(); internal static void Init() { Md.CaveDwellerAI.Start.Postfix(Postfix_CaveDwellerAI_Start); } private static void Postfix_CaveDwellerAI_Start(CaveDwellerAI self) { caveDwellerEnemies.Add(self); } [IteratorStateMachine(typeof(<GetBabyCaveDwellers>d__3))] public static IEnumerable<CaveDwellerAI> GetBabyCaveDwellers() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetBabyCaveDwellers>d__3(-2); } } internal static class JesterListHook { [CompilerGenerated] private sealed class <GetJesters>d__3 : IEnumerable<JesterAI>, IEnumerable, IEnumerator<JesterAI>, IEnumerator, IDisposable { private int <>1__state; private JesterAI <>2__current; private int <>l__initialThreadId; private int <i>5__2; JesterAI IEnumerator<JesterAI>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetJesters>d__3(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; goto IL_0073; } <>1__state = -1; <i>5__2 = 0; goto IL_0083; IL_0073: <i>5__2++; goto IL_0083; IL_0083: if (<i>5__2 < jesterEnemies.Count) { JesterAI val = jesterEnemies[<i>5__2]; if ((Object)(object)val == (Object)null) { jesterEnemies.RemoveAt(<i>5__2); <i>5__2--; goto IL_0073; } <>2__current = val; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<JesterAI> IEnumerable<JesterAI>.GetEnumerator() { if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; return this; } return new <GetJesters>d__3(0); } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<JesterAI>)this).GetEnumerator(); } } public static List<JesterAI?> jesterEnemies = new List<JesterAI>(); internal static void Init() { Md.JesterAI.Start.Postfix(Postfix_JesterAI_Start); } private static void Postfix_JesterAI_Start(JesterAI self) { jesterEnemies.Add(self); } [IteratorStateMachine(typeof(<GetJesters>d__3))] public static IEnumerable<JesterAI> GetJesters() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetJesters>d__3(-2); } } } namespace SCP682.SCPEnemy { public abstract class ModEnemyAI<T> : ModEnemyAINetworkLayer where T : ModEnemyAI<T> { public abstract class AIBehaviorState : AIBase { public abstract List<AIStateTransition> Transitions { get; set; } public abstract IEnumerator OnStateEntered(); public virtual void Update() { } public virtual void LateUpdate() { } public virtual void AIInterval() { } public virtual void OnCollideWithPlayer(Collider other) { } public virtual void OnCollideWithEnemy(Collider other, EnemyAI? collidedEnemy) { } public abstract IEnumerator OnStateExit(); } public abstract class AIStateTransition : AIBase { public abstract bool CanTransitionBeTaken(); public virtual void AIInterval() { } public abstract AIBehaviorState NextState(); public virtual void OnCollideWithPlayer(Collider other) { } } public abstract class AIBase { public T self; public NavMeshAgent Agent => ((EnemyAI)self).agent; public PlayerControllerB? TargetPlayer { get { return self.targetPlayer; } set { self.targetPlayer = value; } } public Random EnemyRandom => self.enemyRandom; public Animator CreatureAnimator => ((EnemyAI)self).creatureAnimator; public AudioSource CreatureSFX => ((EnemyAI)self).creatureSFX; public AudioSource CreatureVoice => ((EnemyAI)self).creatureVoice; } private class TransitionType { internal readonly Type type; internal readonly bool isTransition; public TransitionType(Type type, bool isTransition) { this.type = type; this.isTransition = isTransition; base..ctor(); } } public enum PlayerState { Dead, Outside, Inside, Ship } [CompilerGenerated] private sealed class <AllPlayers>d__41 : IEnumerable<PlayerControllerB>, IEnumerable, IEnumerator<PlayerControllerB>, IEnumerator, IDisposable { private int <>1__state; private PlayerControllerB <>2__current; private int <>l__initialThreadId; private PlayerControllerB[] <>7__wrap1; private int <>7__wrap2; PlayerControllerB IEnumerator<PlayerControllerB>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AllPlayers>d__41(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>7__wrap1 = null; <>1__state = -2; } private bool MoveNext() { int num = <>1__state; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; goto IL_0065; } <>1__state = -1; <>7__wrap1 = StartOfRound.Instance.allPlayerScripts; <>7__wrap2 = 0; goto IL_0073; IL_0065: <>7__wrap2++; goto IL_0073; IL_0073: if (<>7__wrap2 < <>7__wrap1.Length) { PlayerControllerB val = <>7__wrap1[<>7__wrap2]; if (!val.isPlayerDead && val.isPlayerControlled) { <>2__current = val; <>1__state = 1; return true; } goto IL_0065; } <>7__wrap1 = null; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<PlayerControllerB> IEnumerable<PlayerControllerB>.GetEnumerator() { if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; return this; } return new <AllPlayers>d__41(0); } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<PlayerControllerB>)this).GetEnumerator(); } } [CompilerGenerated] private sealed class <GetAllTransitions>d__28 : IEnumerable<AIStateTransition>, IEnumerable, IEnumerator<AIStateTransition>, IEnumerator, IDisposable { private int <>1__state; private AIStateTransition <>2__current; private int <>l__initialThreadId; public ModEnemyAI<T> <>4__this; private List<AIStateTransition>.Enumerator <>7__wrap1; ModEnemyAI<T>.AIStateTransition IEnumerator<AIStateTransition>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetAllTransitions>d__28(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { switch (<>1__state) { case -3: case 1: try { } finally { <>m__Finally1(); } break; case -4: case 2: try { } finally { <>m__Finally2(); } break; } <>7__wrap1 = default(List<AIStateTransition>.Enumerator); <>1__state = -2; } private bool MoveNext() { try { int num = <>1__state; ModEnemyAI<T> modEnemyAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>7__wrap1 = modEnemyAI.globalTransitions.GetEnumerator(); <>1__state = -3; goto IL_007f; case 1: <>1__state = -3; goto IL_007f; case 2: { <>1__state = -4; break; } IL_007f: if (<>7__wrap1.MoveNext()) { AIStateTransition current = <>7__wrap1.Current; modEnemyAI.InitializeStateTransition(current, modEnemyAI.self); <>2__current = current; <>1__state = 1; return true; } <>m__Finally1(); <>7__wrap1 = default(List<AIStateTransition>.Enumerator); <>7__wrap1 = modEnemyAI.activeState.Transitions.GetEnumerator(); <>1__state = -4; break; } if (<>7__wrap1.MoveNext()) { AIStateTransition current2 = <>7__wrap1.Current; modEnemyAI.InitializeStateTransition(current2, modEnemyAI.self); <>2__current = current2; <>1__state = 2; return true; } <>m__Finally2(); <>7__wrap1 = default(List<AIStateTransition>.Enumerator); return false; } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; ((IDisposable)<>7__wrap1).Dispose(); } private void <>m__Finally2() { <>1__state = -1; ((IDisposable)<>7__wrap1).Dispose(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<AIStateTransition> IEnumerable<AIStateTransition>.GetEnumerator() { <GetAllTransitions>d__28 result; if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; result = this; } else { result = new <GetAllTransitions>d__28(0) { <>4__this = <>4__this }; } return result; } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<AIStateTransition>)this).GetEnumerator(); } } [CompilerGenerated] private sealed class <InitializeAndEnterState>d__29 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AIBehaviorState activeState; public T self; public ModEnemyAI<T> <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <InitializeAndEnterState>d__29(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; ModEnemyAI<T> modEnemyAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; activeState.self = self; <>2__current = ((MonoBehaviour)modEnemyAI).StartCoroutine(activeState.OnStateEntered()); <>1__state = 1; return true; case 1: <>1__state = -1; modEnemyAI._transitionCoroutineInProgress = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <TransitionState>d__33 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string stateOrTransitionName; public ModEnemyAI<T> <>4__this; public int randomSeed; private AIStateTransition <localNextTransition>5__2; private TransitionType <transitionOrBehavior>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TransitionState>d__33(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <localNextTransition>5__2 = null; <transitionOrBehavior>5__3 = null; <>1__state = -2; } private bool MoveNext() { int num = <>1__state; ModEnemyAI<T> modEnemyAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <localNextTransition>5__2 = null; if (!ModEnemyAI<T>._typeNameAndInstanceTypeToTransitionType.TryGetValue((stateOrTransitionName, ((object)modEnemyAI.self).GetType()), out <transitionOrBehavior>5__3)) { modEnemyAI.ValidateAndCacheTransitionType(stateOrTransitionName, ref <transitionOrBehavior>5__3); } if (<transitionOrBehavior>5__3.isTransition) { <localNextTransition>5__2 = (AIStateTransition)Activator.CreateInstance(<transitionOrBehavior>5__3.type); modEnemyAI.InitializeStateTransition(<localNextTransition>5__2, modEnemyAI.self); if (<localNextTransition>5__2.NextState().GetType() == modEnemyAI.activeState.GetType()) { return false; } } modEnemyAI.DebugLog($"{((NetworkBehaviour)modEnemyAI).__getTypeName()} #{((EnemyAI)modEnemyAI.self).thisEnemyIndex} is Exiting: {modEnemyAI.activeState}"); <>2__current = ((MonoBehaviour)modEnemyAI).StartCoroutine(modEnemyAI.activeState.OnStateExit()); <>1__state = 1; return true; case 1: { <>1__state = -1; Type type = modEnemyAI.activeState.GetType(); if (<localNextTransition>5__2 != null) { modEnemyAI.DebugLog($"{((NetworkBehaviour)modEnemyAI).__getTypeName()} #{((EnemyAI)modEnemyAI.self).thisEnemyIndex} is Transitioning via: {<localNextTransition>5__2}"); modEnemyAI.activeState = <localNextTransition>5__2.NextState(); } else { modEnemyAI.DebugLog($"{((NetworkBehaviour)modEnemyAI).__getTypeName()} #{((EnemyAI)modEnemyAI.self).thisEnemyIndex} is Transitioning via: State Override"); modEnemyAI.activeState = (AIBehaviorState)Activator.CreateInstance(<transitionOrBehavior>5__3.type); } modEnemyAI.previousStateType = type; modEnemyAI.DebugLog($"{((NetworkBehaviour)modEnemyAI).__getTypeName()} #{((EnemyAI)modEnemyAI.self).thisEnemyIndex} is Entering: {modEnemyAI.activeState}"); ((MonoBehaviour)modEnemyAI).StartCoroutine(modEnemyAI.InitializeAndEnterState(modEnemyAI.activeState, modEnemyAI.self, new Random(randomSeed))); StartOfRound.Instance.ClientPlayerList.TryGetValue(NetworkManager.Singleton.LocalClientId, out var value); modEnemyAI.DebugLog($"CREATURE: {((Object)((EnemyAI)modEnemyAI).enemyType).name} #{((EnemyAI)modEnemyAI.self).thisEnemyIndex} STATE: {modEnemyAI.activeState} ON PLAYER: #{value} ({StartOfRound.Instance.allPlayerScripts[value].playerUsername})"); return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly Dictionary<(string, Type), TransitionType> _typeNameAndInstanceTypeToTransitionType = new Dictionary<(string, Type), TransitionType>(); internal AIBehaviorState activeState; internal Type? previousStateType; internal Random enemyRandom; internal float AITimer; internal bool printDebugs; internal PlayerState myValidState = PlayerState.Inside; internal AIStateTransition nextTransition; internal List<AIStateTransition> globalTransitions = new List<AIStateTransition>(); internal T self; private PlayerControllerB? _lastSyncedTargetPlayer; public PlayerControllerB? targetPlayer { get { if (((NetworkBehaviour)this).IsOwner && (Object)(object)((EnemyAI)this).targetPlayer != (Object)(object)_lastSyncedTargetPlayer) { if (((EnemyAI)this).targetPlayer != null) { SetTargetServerRpc((int)((EnemyAI)this).targetPlayer.actualClientId); } else { SetTargetServerRpc(-1); } } return ((EnemyAI)this).targetPlayer; } set { if (!((Object)(object)value == (Object)(object)_lastSyncedTargetPlayer) || !((Object)(object)_lastSyncedTargetPlayer == (Object)(object)((EnemyAI)this).targetPlayer)) { if (value != null) { SetTargetServerRpc((int)value.actualClientId); } else { SetTargetServerRpc(-1); } } } } internal abstract T GetThis(); internal abstract AIBehaviorState GetInitialState(); public override string __getTypeName() { return ((object)this).GetType().Name; } public override void Start() { self = GetThis(); activeState = GetInitialState(); enemyRandom = new Random(StartOfRound.Instance.randomMapSeed + ((EnemyAI)this).thisEnemyIndex); myValidState = (((EnemyAI)this).enemyType.isOutsideEnemy ? PlayerState.Outside : PlayerState.Inside); ((EnemyAI)this).creatureAnimator.Rebind(); ((EnemyAI)this).Start(); if (!((EnemyAI)this).agent.isOnNavMesh && ((NetworkBehaviour)this).IsOwner) { DebugLog("CREATURE " + ((NetworkBehaviour)this).__getTypeName() + " WAS NOT PLACED ON NAVMESH, DESTROYING..."); ((EnemyAI)this).KillEnemyOnOwnerClient(false); } _transitionCoroutineInProgress = ((MonoBehaviour)this).StartCoroutine(InitializeAndEnterState(activeState, self, enemyRandom)); } public override void Update() { if (((EnemyAI)this).isEnemyDead) { return; } ((EnemyAI)this).Update(); AITimer += Time.deltaTime; if (((NetworkBehaviour)this).IsOwner) { if (_transitionCoroutineInProgress != null) { return; } foreach (AIStateTransition allTransition in GetAllTransitions()) { if (allTransition.CanTransitionBeTaken() && ((NetworkBehaviour)this).IsOwner) { nextTransition = allTransition; TransitionStateServerRpc(nextTransition.ToString(), enemyRandom.Next()); return; } } } activeState.Update(); } internal void LateUpdate() { if (_transitionCoroutineInProgress == null) { activeState.LateUpdate(); } } public override void DoAIInterval() { ((EnemyAI)this).DoAIInterval(); if (_transitionCoroutineInProgress != null) { return; } foreach (AIStateTransition allTransition in GetAllTransitions()) { allTransition.AIInterval(); } activeState.AIInterval(); } public override void OnCollideWithPlayer(Collider other) { ((EnemyAI)this).OnCollideWithPlayer(other); activeState.OnCollideWithPlayer(other); foreach (AIStateTransition allTransition in GetAllTransitions()) { allTransition.OnCollideWithPlayer(other); } } public override void OnCollideWithEnemy(Collider other, EnemyAI? collidedEnemy = null) { ((EnemyAI)this).OnCollideWithEnemy(other, collidedEnemy); activeState.OnCollideWithEnemy(other, collidedEnemy); } [IteratorStateMachine(typeof(ModEnemyAI<>.<GetAllTransitions>d__28))] private IEnumerable<AIStateTransition> GetAllTransitions() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetAllTransitions>d__28(-2) { <>4__this = this }; } [IteratorStateMachine(typeof(ModEnemyAI<>.<InitializeAndEnterState>d__29))] private IEnumerator InitializeAndEnterState(AIBehaviorState activeState, T self, Random enemyRandom) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <InitializeAndEnterState>d__29(0) { <>4__this = this, activeState = activeState, self = self }; } private void InitializeStateTransition(AIStateTransition transition, T self) { transition.self = self; } internal void DebugLog(object data) { if (printDebugs) { PLog.Log(data); } } internal void OverrideState(AIBehaviorState state) { if (!((EnemyAI)this).isEnemyDead) { TransitionStateServerRpc(state.ToString(), enemyRandom.Next()); } } [IteratorStateMachine(typeof(ModEnemyAI<>.<TransitionState>d__33))] internal override IEnumerator TransitionState(string stateOrTransitionName, int randomSeed) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TransitionState>d__33(0) { <>4__this = this, stateOrTransitionName = stateOrTransitionName, randomSeed = randomSeed }; } private void ValidateAndCacheTransitionType(string stateOrTransitionName, [NotNull] ref TransitionType? transitionOrBehavior) { Type type = Type.GetType(stateOrTransitionName) ?? throw new ArgumentException("'" + stateOrTransitionName + "' wasn't found as a type!", "stateOrTransitionName"); if (type.IsSubclassOf(typeof(AIStateTransition))) { transitionOrBehavior = new TransitionType(type, isTransition: true); _typeNameAndInstanceTypeToTransitionType.Add((stateOrTransitionName, ((object)self).GetType()), transitionOrBehavior); return; } if (type.IsSubclassOf(typeof(AIBehaviorState))) { transitionOrBehavior = new TransitionType(type, isTransition: false); _typeNameAndInstanceTypeToTransitionType.Add((stateOrTransitionName, ((object)self).GetType()), transitionOrBehavior); return; } throw new ArgumentException("'" + stateOrTransitionName + "' is neither an AIStateTransition nor an AIBehaviorState!", "stateOrTransitionName"); } protected override void SetTarget(int PlayerID) { if (PlayerID == -1) { ((EnemyAI)this).targetPlayer = null; _lastSyncedTargetPlayer = null; DebugLog($"Clearing target on {this}"); } else if ((Object)(object)StartOfRound.Instance.allPlayerScripts[PlayerID] == (Object)null) { DebugLog($"Index invalid! {this}"); } else { ((EnemyAI)this).targetPlayer = StartOfRound.Instance.allPlayerScripts[PlayerID]; _lastSyncedTargetPlayer = ((EnemyAI)this).targetPlayer; DebugLog($"{this} setting target to: {((EnemyAI)this).targetPlayer.playerUsername}"); } } internal AIBehaviorState? CreatePreviousState() { if ((object)previousStateType == null) { return null; } return (AIBehaviorState)Activator.CreateInstance(previousStateType); } internal bool AnimationIsFinished(string AnimName, int layerIndex) { //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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) AnimatorStateInfo currentAnimatorStateInfo = ((EnemyAI)this).creatureAnimator.GetCurrentAnimatorStateInfo(layerIndex); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName(AnimName)) { DebugLog(((NetworkBehaviour)this).__getTypeName() + ": Checking for animation " + AnimName + ", but current animation is " + ((Object)((AnimatorClipInfo)(ref ((EnemyAI)this).creatureAnimator.GetCurrentAnimatorClipInfo(layerIndex)[0])).clip).name); return true; } currentAnimatorStateInfo = ((EnemyAI)this).creatureAnimator.GetCurrentAnimatorStateInfo(layerIndex); return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime >= 1f; } internal bool PlayerCanBeTargeted(PlayerControllerB myPlayer) { return GetPlayerState(myPlayer) == myValidState; } internal PlayerState GetPlayerState(PlayerControllerB myPlayer) { if (myPlayer.isPlayerDead) { return PlayerState.Dead; } if (myPlayer.isInsideFactory) { return PlayerState.Inside; } if (myPlayer.isInHangarShipRoom) { return PlayerState.Ship; } return PlayerState.Outside; } internal void MoveTimerValue(ref float Timer, bool ShouldRaise = false) { if (ShouldRaise) { Timer += Time.deltaTime; } else if (!(Timer <= 0f)) { Timer -= Time.deltaTime; } } [IteratorStateMachine(typeof(ModEnemyAI<>.<AllPlayers>d__41))] public IEnumerable<PlayerControllerB> AllPlayers() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <AllPlayers>d__41(-2); } public PlayerControllerB? IsAnyPlayerWithinLOS(int range = 45, float width = 60f, int proximityAwareness = -1, bool DoLinecast = true, bool PrintResults = false, bool SortByDistance = false) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) float num = range; PlayerControllerB result = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (!val.isPlayerDead && val.isPlayerControlled && IsTargetPlayerWithinLOS(val, range, width, proximityAwareness, DoLinecast, PrintResults)) { if (!SortByDistance) { return val; } float num2 = Vector3.Distance(((Component)val).transform.position, ((Component)this).transform.position); if (num2 < num) { num = num2; result = val; } } } return result; } public bool IsTargetPlayerWithinLOS(PlayerControllerB player, int range = 45, float width = 60f, int proximityAwareness = -1, bool DoLinecast = true, bool PrintResults = false) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Distance(((Component)this).transform.position, ((Component)player.gameplayCamera).transform.position); bool flag = num < (float)range; float num2 = Vector3.Angle(((Component)((EnemyAI)this).eye).transform.forward, ((Component)player.gameplayCamera).transform.position - ((Component)((EnemyAI)this).eye).transform.position); bool flag2 = num2 < width; bool flag3 = num < (float)proximityAwareness; bool flag4 = DoLinecast && Physics.Linecast(((Component)((EnemyAI)this).eye).transform.position, ((Component)player).transform.position, StartOfRound.Instance.collidersRoomDefaultAndFoliage, (QueryTriggerInteraction)1); if (PrintResults) { DebugLog($"Target in Distance: {flag} ({num})" + $"Target within view cone: {flag2} ({num2})" + $"LOSBlocked: {flag4}"); } if (!(flag && flag2)) { if (flag3) { return !flag4; } return false; } return true; } public bool IsTargetPlayerWithinLOS(int range = 45, float width = 60f, int proximityAwareness = -1, bool DoLinecast = true, bool PrintResults = false) { if ((Object)(object)targetPlayer == (Object)null) { DebugLog(((NetworkBehaviour)this).__getTypeName() + " called Target Player LOS check called with null target player; returning false!"); return false; } return IsTargetPlayerWithinLOS(targetPlayer, range, width, proximityAwareness, DoLinecast, PrintResults); } public PlayerControllerB FindNearestPlayer(bool ValidateNav = false) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val = null; float num = 20000f; for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { PlayerControllerB val2 = StartOfRound.Instance.allPlayerScripts[i]; if (!ValidateNav || ((EnemyAI)this).agent.CalculatePath(((Component)val2).transform.position, ((EnemyAI)this).path1)) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val2).transform.position); if (num2 < num) { val = val2; num = num2; } } } if ((Object)(object)val == (Object)null) { DebugLog("There is somehow no closest player. get fucked"); return null; } return val; } internal bool IsPlayerReachable() { if ((Object)(object)targetPlayer == (Object)null) { PLog.LogError("Player Reach Test has no target player or passed in argument!"); return false; } return IsPlayerReachable(targetPlayer); } internal bool IsPlayerReachable(PlayerControllerB? playerToCheck) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Invalid comparison between Unknown and I4 if (playerToCheck == null) { return false; } Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(((Component)playerToCheck).transform.position, RoundManager.Instance.navHit, 2.7f, -1); if (!RoundManager.Instance.GotNavMeshPositionResult) { DebugLog("Player Reach Test: No NavMesh position"); return false; } ((EnemyAI)this).agent.CalculatePath(navMeshPosition, ((EnemyAI)this).agent.path); bool flag = (int)((EnemyAI)this).agent.path.status == 0; DebugLog($"Player Reach Test: {flag}"); return flag; } internal float PlayerDistanceFromShip(PlayerControllerB playerToCheck) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) if (playerToCheck == null) { PLog.LogError("PlayerNearShip check has no target player or passed in argument!"); return -1f; } float num = Vector3.Distance(((Component)playerToCheck).transform.position, ((Component)StartOfRound.Instance.shipBounds).transform.position); DebugLog($"PlayerNearShip check: {num}"); return num; } internal bool PlayerWithinRange(PlayerControllerB player, float range, bool includeYAxis = true) { return DistanceFromPlayer(player, includeYAxis) <= range; } private float DistanceFromTargetPlayer(bool IncludeYAxis) { if ((Object)(object)targetPlayer == (Object)null) { PLog.LogError($"{this} attempted DistanceFromTargetPlayer with null target; returning -1!"); return -1f; } return DistanceFromPlayer(targetPlayer, IncludeYAxis); } private float DistanceFromPlayer(PlayerControllerB player, bool IncludeYAxis) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (IncludeYAxis) { return Vector3.Distance(((Component)player).transform.position, ((Component)this).transform.position); } Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(((Component)player).transform.position.x, ((Component)player).transform.position.z); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(((Component)this).transform.position.x, ((Component)this).transform.position.z); return Vector2.Distance(val, val2); } public void SetEnemyOutside(bool toOutside) { if (toOutside) { myValidState = PlayerState.Outside; ((EnemyAI)this).SetEnemyOutside(true); } else { myValidState = PlayerState.Inside; ((EnemyAI)this).SetEnemyOutside(false); } } protected override void TeleportSelfToOtherEntrance(bool isOutside) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) EntranceTeleport val = RoundManager.FindMainEntranceScript(!isOutside); Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(val.entrancePoint.position, default(NavMeshHit), 5f, -1); if (((NetworkBehaviour)this).IsOwner) { ((Behaviour)((EnemyAI)this).agent).enabled = false; ((Component)this).transform.position = navMeshPosition; ((Behaviour)((EnemyAI)this).agent).enabled = true; } else { ((Component)this).transform.position = navMeshPosition; } ((EnemyAI)this).serverPosition = navMeshPosition; SetEnemyOutside(!isOutside); PlayEntranceOpeningSound(val); } private void PlayEntranceOpeningSound(EntranceTeleport entrance) { if (entrance.doorAudios != null && entrance.doorAudios.Length != 0) { entrance.entrancePointAudio.PlayOneShot(entrance.doorAudios[0]); WalkieTalkie.TransmitOneShotAudio(entrance.entrancePointAudio, entrance.doorAudios[0], 1f); } } internal void EnterSpecialAnimationWithPlayer(PlayerControllerB player, bool stopMovementCalculations = true) { if (player.inSpecialInteractAnimation && (Object)(object)player.currentTriggerInAnimationWith != (Object)null) { player.currentTriggerInAnimationWith.CancelAnimationExternally(); } player.inSpecialInteractAnimation = true; player.inAnimationWithEnemy = (EnemyAI)(object)self; ((EnemyAI)self).inSpecialAnimationWithPlayer = player; if (stopMovementCalculations) { ((EnemyAI)self).inSpecialAnimation = true; } } internal bool TryGetValidPlayerFromCollision(Collider other, [NotNullWhen(true)] out PlayerControllerB? player, bool allowNonLocalPlayer = false) { player = null; if (((EnemyAI)this).isEnemyDead) { return false; } if (!((EnemyAI)this).ventAnimationFinished) { return false; } if (((EnemyAI)this).stunNormalizedTimer >= 0f) { return false; } player = ((Component)other).gameObject.GetComponent<PlayerControllerB>(); if ((Object)(object)player == (Object)null || (!allowNonLocalPlayer && (Object)(object)player != (Object)(object)GameNetworkManager.Instance.localPlayerController)) { return false; } if (!((EnemyAI)this).PlayerIsTargetable(player, false, false, true)) { return false; } return true; } internal bool IsPlayerInsideCollider(PlayerControllerB? player, Collider collider, float colliderScale = 1f) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)player == (Object)null) { return false; } int num = 8; Bounds bounds = collider.bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = collider.bounds; Collider[] array = Physics.OverlapBox(center, ((Bounds)(ref bounds)).extents / 2f * colliderScale, Quaternion.identity, num); Collider[] array2 = array; foreach (Collider val in array2) { if (((Component)val).CompareTag("Player") && TryGetValidPlayerFromCollision(val, out PlayerControllerB player2, allowNonLocalPlayer: true) && (Object)(object)player2 == (Object)(object)player) { return true; } } return false; } protected override void __initializeVariables() { base.__initializeVariables(); } protected override void __initializeRpcs() { base.__initializeRpcs(); } protected internal override string __getTypeName() { return "ModEnemyAI`1"; } } public abstract class ModEnemyAINetworkLayer : EnemyAI { internal Coroutine? _transitionCoroutineInProgress; [ServerRpc] internal void TransitionStateServerRpc(string stateName, int randomSeed) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Invalid comparison between Unknown and I4 //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_010d: 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 != 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(1357830014u, val, (RpcDelivery)0); bool flag = stateName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(stateName, false); } BytePacker.WriteValueBitPacked(val2, randomSeed); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1357830014u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; TransitionStateClientRpc(stateName, randomSeed); } } [ClientRpc] internal void TransitionStateClientRpc(string stateName, int randomSeed) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_0088: 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_010c: 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) //IL_00c7: 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 != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(755577249u, val, (RpcDelivery)0); bool flag = stateName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(stateName, false); } BytePacker.WriteValueBitPacked(val2, randomSeed); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 755577249u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; _transitionCoroutineInProgress = ((MonoBehaviour)this).StartCoroutine(TransitionState(stateName, randomSeed)); } } internal abstract IEnumerator TransitionState(string stateOrTransitionName, int randomSeed); [ServerRpc] protected void SetTargetServerRpc(int PlayerID) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Invalid comparison between Unknown and I4 //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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(314908443u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, PlayerID); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 314908443u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SetTargetClientRpc(PlayerID); } } [ClientRpc] private void SetTargetClientRpc(int PlayerID) { //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) //IL_00ce: 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.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2468484041u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, PlayerID); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2468484041u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SetTarget(PlayerID); } } } protected abstract void SetTarget(int PlayerID); [ServerRpc(RequireOwnership = false)] internal void SetAnimTriggerOnServerRpc(string name) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_0088: 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_00ff: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(217962959u, val, (RpcDelivery)0); bool flag = name != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(name, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 217962959u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsServer) { base.creatureAnimator.SetTrigger(name); } } } [ServerRpc(RequireOwnership = false)] internal void SetAnimBoolOnServerRpc(string name, bool state) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: 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_0088: 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_011a: 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_00c1: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4090843431u, val, (RpcDelivery)0); bool flag = name != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(name, false); } ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref state, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4090843431u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsServer) { base.creatureAnimator.SetBool(name, state); } } } [ClientRpc] public void TeleportSelfToOtherEntranceClientRpc(bool isOutside) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(463666875u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref isOutside, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 463666875u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; TeleportSelfToOtherEntrance(isOutside); } } } protected abstract void TeleportSelfToOtherEntrance(bool isOutside); protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1357830014u, new RpcReceiveHandler(__rpc_handler_1357830014), "TransitionStateServerRpc"); ((NetworkBehaviour)this).__registerRpc(755577249u, new RpcReceiveHandler(__rpc_handler_755577249), "TransitionStateClientRpc"); ((NetworkBehaviour)this).__registerRpc(314908443u, new RpcReceiveHandler(__rpc_handler_314908443), "SetTargetServerRpc"); ((NetworkBehaviour)this).__registerRpc(2468484041u, new RpcReceiveHandler(__rpc_handler_2468484041), "SetTargetClientRpc"); ((NetworkBehaviour)this).__registerRpc(217962959u, new RpcReceiveHandler(__rpc_handler_217962959), "SetAnimTriggerOnServerRpc"); ((NetworkBehaviour)this).__registerRpc(4090843431u, new RpcReceiveHandler(__rpc_handler_4090843431), "SetAnimBoolOnServerRpc"); ((NetworkBehaviour)this).__registerRpc(463666875u, new RpcReceiveHandler(__rpc_handler_463666875), "TeleportSelfToOtherEntranceClientRpc"); ((EnemyAI)this).__initializeRpcs(); } private static void __rpc_handler_1357830014(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 //IL_00a8: 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_00d9: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string stateName = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref stateName, false); } int randomSeed = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref randomSeed); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).TransitionStateServerRpc(stateName, randomSeed); target.__rpc_exec_stage = (__RpcExecStage)0; } private static void __rpc_handler_755577249(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string stateName = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref stateName, false); } int randomSeed = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref randomSeed); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).TransitionStateClientRpc(stateName, randomSeed); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_314908443(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } } else { int targetServerRpc = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref targetServerRpc); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).SetTargetServerRpc(targetServerRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2468484041(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 targetClientRpc = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref targetClientRpc); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).SetTargetClientRpc(targetClientRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_217962959(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string animTriggerOnServerRpc = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref animTriggerOnServerRpc, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).SetAnimTriggerOnServerRpc(animTriggerOnServerRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4090843431(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_009a: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string name = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref name, false); } bool state = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref state, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).SetAnimBoolOnServerRpc(name, state); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_463666875(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool isOutside = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref isOutside, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ModEnemyAINetworkLayer)(object)target).TeleportSelfToOtherEntranceClientRpc(isOutside); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "ModEnemyAINetworkLayer"; } } internal class SCP682AI : ModEnemyAI<SCP682AI>, IVisibleThreat { public enum Speed { Stopped = 0, Walking = 3, Running = 10 } public enum EnemyScale { Small, Big } private static class Anim { internal const string isMoving = "isMoving"; internal const string isMovingInverted = "isMovingInverted"; internal const string isRunning = "isRunning"; internal const string isOnShip = "isOnShip"; internal const string doKillEnemy = "KillEnemy"; internal const string doRevive = "doRevive"; internal const string doBite = "doBite"; internal const string doRoar = "doRoar"; } private class WanderToShipState : AIBehaviorState { [CompilerGenerated] private sealed class <OnStateEntered>d__4 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public WanderToShipState <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <OnStateEntered>d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; WanderToShipState wanderToShipState = <>4__this; if (num != 0) { return false; } <>1__state = -1; wanderToShipState.self.AnimatorSetBool("isMoving", value: true); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <OnStateExit>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <OnStateExit>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public override List<AIStateTransition> Transitions { get; set; } = new List<ModEnemyAI<SCP682AI>.AIStateTransition>(3) { new OnShipAmbushState.ArrivedAtShipTransition(), new InvestigatePlayerTransition(), new AttackEnemyState.TargetEnemyTransition() }; [IteratorStateMachine(typeof(<OnStateEntered>d__4))] public override IEnumerator OnStateEntered() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <OnStateEntered>d__4(0) { <>4__this = this }; } public override void AIInterval() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)self).SetDestinationToPosition(self.PosOnTopOfShip, false); } [IteratorStateMachine(typeof(<OnStateExit>d__6))] public override IEnumerator OnStateExit() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <OnStateExit>d__6(0); } } private class OnShipAmbushState : AIBehaviorState { internal class ArrivedAtShipTransition : AIStateTransition { public override bool CanTransitionBeTaken() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(self.PosOnTopOfShip, ((Component)self).gameObject.transform.position) < 3f) { return true; } return false; } public override AIBehaviorState NextState() { return new OnShipAmbushState(); } } private class AmbushPlayerFromShipTransition : AIStateTransition { public override bool CanTransitionBeTaken() { if ((Object)(object)self.PlayerHeardFromNoise != (Object)null) { base.TargetPlayer = self.PlayerHeardFromNoise; if (!self.PlayerWithinRange(base.TargetPlayer, 30f)) { return false; } return true; } base.TargetPlayer = self.FindNearestPlayer(); return false; } public override AIBehaviorState NextState() { return new FromAmbushJumpPlayerState(); } } private class BoredOfAmbushTransition : AIStateTransition { private float boredOfAmbushTimer = 35f; public override bool CanTransitionBeTaken() { boredOfAmbushTimer -= Time.deltaTime; if (boredOfAmbushTimer <= 0f) { return true; } return false; } public override AIBehaviorState NextState() { return new WanderThroughEntranceState(); } } [CompilerGenerated] private sealed class <OnStateEntered>d__4 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public OnShipAmbushState <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <OnStateEntered>d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; OnShipAmbushState onShipAmbushState = <>4__this; if (num != 0) { return false; } <>1__state = -1; onShipAmbushState.self.AnimatorSetBool("isMoving", value: false); onShipAmbushState.self.AnimatorSetBool("isOnShip", value: true); onShipAmbushState.Agent.SetDestination(((Component)onShipAmbushState.Agent).transform.position); ((EnemyAI)onShipAmbushState.self).destination = ((Component)onShipAmbushState.Agent).transform.position; ((Behaviour)onShipAmbushState.Agent).enabled = false; ((Component)onShipAmbushState.self).gameObject.transform.position = onShipAmbushState.self.PosOnTopOfShip; if (onShipAmbushState.self.changeScaleCoroutine != null) { ((MonoBehaviour)onShipAmbushState.self).StopCoroutine(onShipAmbushState.self.changeScaleCoroutine); } ((MonoBehaviour)onShipAmbushState.self).StartCoroutine(onShipAmbushState.self.ChangeEnemyScaleTo(EnemyScale.Small)); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <OnStateExit>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public OnShipAmbushState <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <OnStateExit>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; OnShipAmbushState onShipAmbushState = <>4__this; if (num != 0) { return false; } <>1__state = -1; onShipAmbushState.self.AnimatorSetBool("isMoving", value: true); onShipAmbushState.self.AnimatorSetBool("isOnShip", value: false); ((Behaviour)onShipAmbushState.Agent).enabled = true; if (onShipAmbushState.self.changeScaleCoroutine != null) { ((MonoBehaviour)onShipAmbushState.self).StopCoroutine(onShipAmbushState.self.changeScaleCoroutine); } ((MonoBehaviour)onShipAmbushState.self).StartCoroutine(onShipAmbushState.self.ChangeEnemyScaleTo(EnemyScale.Big)); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public override List<AIStateTransition> Transitions { get; set; } = new List<ModEnemyAI<SCP682AI>.AIStateTransition>(2) { new AmbushPlayerFromShipTransition(), new BoredOfAmbushTransition() }; [IteratorStateMachine(typeof(<OnStateEntered>d__4))] public override IEnumerator OnStateEntered() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <OnStateEntered>d__4(0) { <>4__this = this }; } public override void Update() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_0079: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)base.TargetPlayer == (Object)null)) { self.turnCompass.LookAt(((Component)base.TargetPlayer).transform); ((Component)self).transform.rotation = Quaternion.Lerp(((Component)self).transform.rotation, Quaternion.Euler(new Vector3(0f, self.turnCompass.eulerAngles.y, 0f)), 1f * Time.deltaTime); } } [IteratorStateMachine(typeof(<OnStateExit>d__6))] public override IEnumerator OnStateExit() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <OnStateExit>d__6(0) { <>4__this = this }; } } private class FromAmbushJumpPlayerState : AIBehaviorState { private class TouchTargetPlayerAndStartDraggingTransition : AIStateTransition { public override bool CanTransitionBeTaken() { return self.IsPlayerInsideCollider(base.TargetPlayer, (Collider)(object)self.mainCollider); } public override AIBehaviorState NextState() { return new DragPlayerState(); } } [CompilerGenerated] private sealed class <OnStateEntered>d__4 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FromAmbushJumpPlayerState <>4__this; private Vector3 <positionBehindPlayer>5__2; private Vector3 <positionInBetweenInAir>5__3; private Vector3 <originalPosition>5__4; private float <normalizedTimer>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <OnStateEntered>d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_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_00c6: 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_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: 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_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; FromAmbushJumpPlayerState fromAmbushJumpPlayerState = <>4__this; switch (num) { default: return false; case 0: { <>1__state = -1; if ((Object)(object)fromAmbushJumpPlayerState.TargetPlayer == (Object)null) { Plugin.Logger.LogError((object)"Trying to ambush player, but targetPlayer is null! Not jumping."); ((MonoBehaviour)fromAmbushJumpPlayerState.self).StartCoroutine(fromAmbushJumpPlayerState.self.RoarAndRunCoroutine()); return false; } if (fromAmbushJumpPlayerState.TargetPlayer.isInHangarShipRoom) { fromAmbushJumpPlayerState.self.DebugLog("TargetPlayer is inside ship, attacking without a jump."); ((MonoBehaviour)fromAmbushJumpPlayerState.self).StartCoroutine(fromAmbushJumpPlayerState.self.RoarAndRunCoroutine()); return false; } Vector3 val = ((Component)fromAmbushJumpPlayerState.TargetPlayer).transform.position - Vector3.Scale(new Vector3(10f, 0f, 10f), ((Component)fromAmbushJumpPlayerState.TargetPlayer).transform.forward); NavMeshHit val2 = default(NavMeshHit); if (!NavMesh.SamplePosition(val, ref val2, 10f, -1)) { Plugin.Logger.LogWarning((object)"Trying to ambush player, but didn't find NavMesh near target player! Not jumping."); ((MonoBehaviour)fromAmbushJumpPlayerState.self).StartCoroutine(fromAmbushJumpPlayerState.self.RoarAndRunCoroutine()); return false; } <positionBehindPlayer>5__2 = ((NavMeshHit)(ref val2)).position; <positionInBetweenInAir>5__3 = (<positionBehindPlayer>5__2 + <positionBehindPlayer>5__2) / 2f + Vector3.up * 10f; <originalPosition>5__4 = ((Component)fromAmbushJumpPlayerState.self).transform.position; fromAmbushJumpPlayerState.Agent.speed = 0f; fromAmbushJumpPlayerState.self.AnimatorSetBool("isRunning", value: true); ((Behaviour)fromAmbushJumpPlayerState.Agent).enabled = false; <normalizedTimer>5__5 = 0f; break; } ca
scripts/plugins/SCP682Assets/ProjectSCP.SCP682.UnityRef.dll
Decompiled 4 days agousing System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using Microsoft.CodeAnalysis; using SCP682.UnityRef.Extensions; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ProjectSCP.SCP682.UnityRef")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.6.0")] [assembly: AssemblyInformationalVersion("1.0.6+3117961102d0635f7dddcae92ba3892c6dadf004")] [assembly: AssemblyProduct("ProjectSCP.SCP682.UnityRef")] [assembly: AssemblyTitle("SCP682.UnityRef")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Hamunii/LC-SCP-682-Enemy")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [BepInPlugin("ProjectSCP.SCP682.UnityRef", "SCP682.UnityRef", "1.0.6")] public class Plugin : BaseUnityPlugin { public const string Id = "ProjectSCP.SCP682.UnityRef"; public static string Name => "SCP682.UnityRef"; public static string Version => "1.0.6"; } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace SCP682.UnityRef { public class SCP682AnimatorAudio : MonoBehaviour { [field: SerializeField] public AudioSource CreatureSFX { get; private set; } [field: SerializeField] public AudioSource CreatureVoice { get; private set; } [field: SerializeField] public List<AudioClip> WalkSFX { get; private set; } = new List<AudioClip>(); [field: SerializeField] public List<AudioClip> RunSFX { get; private set; } = new List<AudioClip>(); [field: SerializeField] public List<AudioClip> RoarSFX { get; private set; } = new List<AudioClip>(); [field: SerializeField] public List<AudioClip> BiteSFX { get; private set; } = new List<AudioClip>(); public void PlayWalkSFX() { CreatureSFX.PlayOneShot(WalkSFX.Random()); } public void PlayRunSFX() { CreatureSFX.PlayOneShot(RunSFX.Random()); } public void PlayRoarSFX() { CreatureVoice.PlayOneShot(RoarSFX.Random()); } public void PlayBiteSFX() { CreatureVoice.PlayOneShot(BiteSFX.Random()); } } } namespace SCP682.UnityRef.Extensions { internal static class AudioClipExtensions { private static readonly Random random = new Random(); public static AudioClip Random(this List<AudioClip> clips) { return clips[random.Next(clips.Count)]; } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ConstantExpectedAttribute : Attribute { public object? Min { get; set; } public object? Max { get; set; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ExperimentalAttribute : Attribute { public string DiagnosticId { get; } public string? UrlFormat { get; set; } public ExperimentalAttribute(string diagnosticId) { DiagnosticId = diagnosticId; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SetsRequiredMembersAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class StringSyntaxAttribute : Attribute { public const string CompositeFormat = "CompositeFormat"; public const string DateOnlyFormat = "DateOnlyFormat"; public const string DateTimeFormat = "DateTimeFormat"; public const string EnumFormat = "EnumFormat"; public const string GuidFormat = "GuidFormat"; public const string Json = "Json"; public const string NumericFormat = "NumericFormat"; public const string Regex = "Regex"; public const string TimeOnlyFormat = "TimeOnlyFormat"; public const string TimeSpanFormat = "TimeSpanFormat"; public const string Uri = "Uri"; public const string Xml = "Xml"; public string Syntax { get; } public object?[] Arguments { get; } public StringSyntaxAttribute(string syntax) { Syntax = syntax; Arguments = new object[0]; } public StringSyntaxAttribute(string syntax, params object?[] arguments) { Syntax = syntax; Arguments = arguments; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class UnscopedRefAttribute : Attribute { } } namespace System.Runtime.Versioning { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiresPreviewFeaturesAttribute : Attribute { public string? Message { get; } public string? Url { get; set; } public RequiresPreviewFeaturesAttribute() { } public RequiresPreviewFeaturesAttribute(string? message) { Message = message; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CallerArgumentExpressionAttribute : Attribute { public string ParameterName { get; } public CallerArgumentExpressionAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CollectionBuilderAttribute : Attribute { public Type BuilderType { get; } public string MethodName { get; } public CollectionBuilderAttribute(Type builderType, string methodName) { BuilderType = builderType; MethodName = methodName; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CompilerFeatureRequiredAttribute : Attribute { public const string RefStructs = "RefStructs"; public const string RequiredMembers = "RequiredMembers"; public string FeatureName { get; } public bool IsOptional { get; set; } public CompilerFeatureRequiredAttribute(string featureName) { FeatureName = featureName; } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute { public string[] Arguments { get; } public InterpolatedStringHandlerArgumentAttribute(string argument) { Arguments = new string[1] { argument }; } public InterpolatedStringHandlerArgumentAttribute(params string[] arguments) { Arguments = arguments; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerAttribute : Attribute { } [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal static class IsExternalInit { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ModuleInitializerAttribute : Attribute { } [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class OverloadResolutionPriorityAttribute : Attribute { public int Priority { get; } public OverloadResolutionPriorityAttribute(int priority) { Priority = priority; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)] [ExcludeFromCodeCoverage] internal sealed class ParamCollectionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal sealed class RequiresLocationAttribute : Attribute { } [AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SkipLocalsInitAttribute : Attribute { } }