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 Dont Touch Me v1.2.8
BepInEx/plugins/DontTouchMe.dll
Decompiled 6 hours agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; 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 DontTouchMe.NetcodePatcher; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("Kittenji")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DontTouchMe")] [assembly: AssemblyTitle("DontTouchMe")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace DontTouchMe { public class Assets { public static AssetBundle MainAssetBundle; public static EnemyType EnemyType; public static TerminalNode EnemyNode; public static TerminalKeyword EnemyKeyword; public static AudioClip AudioMasked1; public static AudioClip AudioMasked2; internal static Stream GetEmbededResource(string name) { return Assembly.GetExecutingAssembly().GetManifestResourceStream("DontTouchMe." + name); } public static void Init() { MainAssetBundle = AssetBundle.LoadFromStream(GetEmbededResource("dtm.bundle")); EnemyType = MainAssetBundle.LoadAsset<EnemyType>("Assets/Mods/DontTouchMe/Resources/DTMEnemy.asset"); EnemyNode = MainAssetBundle.LoadAsset<TerminalNode>("Assets/Mods/DontTouchMe/Resources/DTMNode.asset"); EnemyKeyword = MainAssetBundle.LoadAsset<TerminalKeyword>("Assets/Mods/DontTouchMe/Resources/DTMKeyword.asset"); AudioMasked1 = MainAssetBundle.LoadAsset<AudioClip>("Assets/Mods/DontTouchMe/Resources/dtm_masked_laugh1.wav"); AudioMasked2 = MainAssetBundle.LoadAsset<AudioClip>("Assets/Mods/DontTouchMe/Resources/dtm_masked_laugh2.wav"); } } public class DTMEntityAI : EnemyAI { [CompilerGenerated] private sealed class <>c__DisplayClass29_0 { public float startTime; public PlayerControllerB killedPlayer; internal bool <ExplodePlayerEffect>b__0() { if (!(Time.realtimeSinceStartup - startTime > 1f)) { return (Object)(object)killedPlayer.deadBody != (Object)null; } return true; } } [CompilerGenerated] private sealed class <ExplodePlayerEffect>d__29 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int clientId; private <>c__DisplayClass29_0 <>8__1; public DTMEntityAI <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ExplodePlayerEffect>d__29(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; DTMEntityAI dTMEntityAI = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass29_0(); <>8__1.killedPlayer = StartOfRound.Instance.allPlayerScripts[clientId]; <>8__1.startTime = Time.realtimeSinceStartup; <>2__current = (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - <>8__1.startTime > 1f || (Object)(object)<>8__1.killedPlayer.deadBody != (Object)null)); <>1__state = 1; return true; case 1: { <>1__state = -1; Transform transform = ((Component)<>8__1.killedPlayer).transform; if ((Object)(object)<>8__1.killedPlayer.deadBody != (Object)null) { transform = ((Component)<>8__1.killedPlayer.deadBody).transform; } Object.Instantiate<GameObject>(StartOfRound.Instance.explosionPrefab, transform.position + Vector3.up * 0.5f, Quaternion.Euler(-90f, 0f, 0f), RoundManager.Instance.mapPropsContainer.transform).SetActive(true); ((EnemyAI)dTMEntityAI).inSpecialAnimation = false; 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 static List<DTMEntityAI> Instances = new List<DTMEntityAI>(); [Header("DTM Specific")] public InteractTrigger[] Triggers; public GameObject Music; public AudioSource VoiceA; public AudioSource VoiceB; private float AttackTime; private bool IsAttacking; private bool HasAttacked; private bool AttemptedMurder; public MaskedPlayerEnemy MaskedEnemy; [Header("Disguise")] public GameObject MainModel; public GameObject Disguise; private int DisguiseID; private float ScreenShakeTime; private const float KillWindowMin = 2.3f; private const float KillWindowMax = 3.5f; private float KillWindowStart = 2.8f; private const string ButtonTouchParam = "Touched"; private const string ButtonPressParam = "Press"; private Coroutine ExplodePlayerCoroutine; public static int Count => Instances.Count; public static DTMEntityAI GetClosest(Vector3 pos) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) DTMEntityAI dTMEntityAI = null; if (Instances.Count == 0) { return dTMEntityAI; } if (Instances.Count == 1) { return Instances[0]; } float num = float.MaxValue; foreach (DTMEntityAI instance in Instances) { if ((Object)(object)instance == (Object)null) { Instances.RemoveAll((DTMEntityAI v) => (Object)(object)v == (Object)null); dTMEntityAI = GetClosest(pos); break; } float num2 = Vector3.Distance(((Component)instance).transform.position, pos); if ((Object)(object)dTMEntityAI == (Object)null || num2 < num) { dTMEntityAI = instance; num = num2; } } return dTMEntityAI; } public void SetTrigger(bool interactable) { InteractTrigger[] triggers = Triggers; for (int i = 0; i < triggers.Length; i++) { triggers[i].interactable = interactable; } } public bool CanBeShocked() { if (!IsAttacking) { return !HasAttacked; } return false; } public override void OnDestroy() { ((EnemyAI)this).OnDestroy(); Instances.Remove(this); } public override void Start() { //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown Instances.Add(this); base.skinnedMeshRenderers = ((Component)this).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(true); base.meshRenderers = ((Component)this).gameObject.GetComponentsInChildren<MeshRenderer>(true); base.thisNetworkObject = ((Component)this).gameObject.GetComponentInChildren<NetworkObject>(true); base.thisEnemyIndex = RoundManager.Instance.numberOfEnemiesInScene; RoundManager instance = RoundManager.Instance; instance.numberOfEnemiesInScene++; base.isOutside = Plugin.SpawnOutsideChance > 0 && Random.Range(0, 100) < Plugin.SpawnOutsideChance; if (base.isOutside) { base.allAINodes = GameObject.FindGameObjectsWithTag("OutsideAINode"); if ((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null) { ((EnemyAI)this).EnableEnemyMesh(!StartOfRound.Instance.hangarDoorsClosed || !GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom, false, false); } } else { base.allAINodes = GameObject.FindGameObjectsWithTag("AINode"); } base.serverPosition = ((Component)this).transform.position; base.updatePositionThreshold = 0f; base.path1 = new NavMeshPath(); base.openDoorSpeedMultiplier = base.enemyType.doorSpeedMultiplier; ResetInteraction(changeLocation: true); Debug.Log((object)"DON'T TOUCH ME | DON'T TOUCH ME | DON'T TOUCH ME | DON'T TOUCH ME | DON'T TOUCH ME | DON'T TOUCH ME"); Debug.Log((object)("Spawned Outside: " + base.isOutside)); } private void ResetInteraction(bool changeLocation) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) MaskedEnemy = null; base.targetPlayer = null; IsAttacking = false; HasAttacked = false; AttemptedMurder = false; SetTrigger(interactable: true); ((Component)VoiceA).gameObject.SetActive(false); base.creatureAnimator.ResetTrigger("Touched"); base.creatureAnimator.ResetTrigger("Press"); if (changeLocation) { if (((NetworkBehaviour)this).IsOwner) { Vector3 position = base.allAINodes[Random.Range(0, base.allAINodes.Length)].transform.position; position = RoundManager.Instance.GetNavMeshPosition(position, RoundManager.Instance.navHit, 1f, -1); ((Component)this).transform.position = position; ((Component)this).transform.rotation = Quaternion.Euler(0f, Random.Range(-180f, 180f), 0f); DisguiseID = ((Random.Range(0, 100) < Plugin.DisguiseAsItemChance) ? Random.Range(1, Disguise.transform.childCount) : (-1)); Debug.Log((object)"[DTM] Trying to sync position with other players."); SyncSpawnOnServer(); } else { base.isClientCalculatingAI = false; } } } public override void Update() { //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) if (!IsAttacking) { return; } if (Object.op_Implicit((Object)(object)MaskedEnemy)) { MaskedEnemy = null; base.targetPlayer = null; } float num = Time.time - AttackTime; PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; bool flag = ((EnemyAI)this).PlayerIsTargetable(localPlayerController, false, false, true) || (localPlayerController.hasBegunSpectating && Object.op_Implicit((Object)(object)localPlayerController.spectatedPlayerScript) && ((EnemyAI)this).PlayerIsTargetable(localPlayerController.spectatedPlayerScript, false, false, true)); if (flag && ScreenShakeTime < Time.time) { HUDManager.Instance.ShakeCamera((ScreenShakeType)3); ScreenShakeTime = Time.time + 0.1f; } AudioSource voiceA = VoiceA; bool flag3 = (VoiceB.mute = flag); voiceA.mute = !flag3; if (num > KillWindowStart && num < 4.4f) { if (localPlayerController.isPlayerControlled && !localPlayerController.isPlayerDead && flag) { Vector3 val = ((Component)localPlayerController).transform.position - ((Component)this).transform.position; Vector3 val2 = ((Vector3)(ref val)).normalized * Random.Range(15f, 30f); val2.y = Random.Range(10f, 15f); Vector3 val3 = val2; val = default(Vector3); localPlayerController.KillPlayer(val3, true, (CauseOfDeath)3, 0, val, false); ExplodePlayerServerRpc((int)localPlayerController.playerClientId); } if (Plugin.IncludeMonstersOnKill && ((NetworkBehaviour)this).IsServer && !AttemptedMurder) { foreach (EnemyAI spawnedEnemy in RoundManager.Instance.SpawnedEnemies) { if (Object.op_Implicit((Object)(object)spawnedEnemy) && spawnedEnemy.isOutside == base.isOutside && (Object)(object)((Component)spawnedEnemy).gameObject != (Object)(object)((Component)this).gameObject && spawnedEnemy.thisNetworkObject.IsSpawned && (Plugin.IncludeUnkillableMonsters || spawnedEnemy.enemyType.canDie)) { Debug.Log((object)("[DTM] Killing " + ((Object)spawnedEnemy).name)); spawnedEnemy.thisNetworkObject.Despawn(true); } } AttemptedMurder = true; } } if (num >= 5f) { if (Plugin.DestroyEntityAfterTouch) { IsAttacking = false; HasAttacked = true; ((EnemyAI)this).KillEnemy(true); } else { ResetInteraction(Plugin.ChangeLocationAfterTouch); } } } [IteratorStateMachine(typeof(<ExplodePlayerEffect>d__29))] private IEnumerator ExplodePlayerEffect(int clientId) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ExplodePlayerEffect>d__29(0) { <>4__this = this, clientId = clientId }; } [ClientRpc] private void ExplodePlayerClientRpc(int clientId) { //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) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3906254083u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3906254083u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (ExplodePlayerCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(ExplodePlayerCoroutine); } ExplodePlayerCoroutine = ((MonoBehaviour)this).StartCoroutine(ExplodePlayerEffect(clientId)); } } [ServerRpc(RequireOwnership = false)] private void ExplodePlayerServerRpc(int clientId) { //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.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(877622320u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 877622320u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; ExplodePlayerClientRpc(clientId); } } } private void UpdateDisguise() { MainModel.SetActive(DisguiseID < 1); Disguise.SetActive(!MainModel.activeSelf); if (Disguise.activeSelf) { Transform transform = Disguise.transform; for (int i = 1; i < transform.childCount; i++) { ((Component)transform.GetChild(i)).gameObject.SetActive(i == DisguiseID); } } } private void SyncSpawnOnServer() { //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_0058: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) base.serverPosition = ((Component)this).transform.position; Debug.Log((object)("[DTM] Sync Spawn On Server: " + DisguiseID)); if (((NetworkBehaviour)this).IsOwner) { SpawnClientRpc(base.serverPosition, ((Component)this).transform.eulerAngles.y, DisguiseID); } else { SpawnServerRpc(base.serverPosition, ((Component)this).transform.eulerAngles.y, DisguiseID); } } [ClientRpc] public void SpawnClientRpc(Vector3 newPos, float yRot, int disguise) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) 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(3860255087u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref newPos); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref yRot, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, disguise); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3860255087u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Debug.Log((object)("[DTM] Received new spawn: " + DisguiseID)); DisguiseID = disguise; ((Component)this).transform.position = newPos; ((Component)this).transform.rotation = Quaternion.Euler(0f, yRot, 0f); Music.SetActive(Plugin.PlayMusic && DisguiseID < 1); UpdateDisguise(); } } } [ServerRpc] public void SpawnServerRpc(Vector3 newPos, float yRot, int disguise) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Invalid comparison between Unknown and I4 //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: 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_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: 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(2003288437u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref newPos); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref yRot, default(ForPrimitives)); BytePacker.WriteValueBitPacked(val2, disguise); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2003288437u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SpawnClientRpc(newPos, yRot, disguise); } } public void OnTouched(PlayerControllerB player) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) if (!IsAttacking && !((Object)(object)player == (Object)null)) { int num = ((DisguiseID > 0) ? 80 : 20); if (Random.Range(0, 100) > num) { StartAttack(!player.isInsideFactory); } else if (Random.Range(0, 100) < 10) { player.JumpToFearLevel(1f, true); } else { player.DamagePlayer(999, true, true, (CauseOfDeath)0, Random.Range(1, 3), false, default(Vector3)); } } } public void StartAttack(bool outside) { Debug.Log((object)"[DTM] Starting attack"); if (((NetworkBehaviour)this).IsOwner) { AttackClientRpc(outside); } else { AttackServerRpc(outside); } } [ClientRpc] public void AttackClientRpc(bool outside) { //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) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3888608358u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref outside, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3888608358u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Debug.Log((object)"[DTM] Attempting attack on client"); if (!IsAttacking && !HasAttacked) { AttackTime = Time.time; ScreenShakeTime = 0f; KillWindowStart = Random.Range(2.3f, 3.5f); DisguiseID = -1; Disguise.SetActive(false); MainModel.SetActive(true); Music.SetActive(false); ((Component)VoiceA).gameObject.SetActive(true); base.isOutside = outside; SetTrigger(interactable: false); IsAttacking = true; base.creatureAnimator.SetTrigger("Touched"); } } } [ServerRpc(RequireOwnership = false)] public void AttackServerRpc(bool outside) { //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.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2283008872u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref outside, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2283008872u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Debug.Log((object)"[DTM] Attempting attack from server"); AttackClientRpc(outside); } } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { Debug.Log((object)("[DTM] Hit by enemy: " + (object)playerWhoHit)); OnTouched(playerWhoHit); } public override void SetEnemyStunned(bool setToStunned, float setToStunTime = 1f, PlayerControllerB setStunnedByPlayer = null) { if (setToStunned) { OnTouched(setStunnedByPlayer); } } 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 ((NetworkBehaviour)this).__registerRpc(3906254083u, new RpcReceiveHandler(__rpc_handler_3906254083), "ExplodePlayerClientRpc"); ((NetworkBehaviour)this).__registerRpc(877622320u, new RpcReceiveHandler(__rpc_handler_877622320), "ExplodePlayerServerRpc"); ((NetworkBehaviour)this).__registerRpc(3860255087u, new RpcReceiveHandler(__rpc_handler_3860255087), "SpawnClientRpc"); ((NetworkBehaviour)this).__registerRpc(2003288437u, new RpcReceiveHandler(__rpc_handler_2003288437), "SpawnServerRpc"); ((NetworkBehaviour)this).__registerRpc(3888608358u, new RpcReceiveHandler(__rpc_handler_3888608358), "AttackClientRpc"); ((NetworkBehaviour)this).__registerRpc(2283008872u, new RpcReceiveHandler(__rpc_handler_2283008872), "AttackServerRpc"); ((EnemyAI)this).__initializeRpcs(); } private static void __rpc_handler_3906254083(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 clientId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).ExplodePlayerClientRpc(clientId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_877622320(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 clientId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).ExplodePlayerServerRpc(clientId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3860255087(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_003c: 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_004b: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 newPos = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref newPos); float yRot = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref yRot, default(ForPrimitives)); int disguise = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref disguise); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).SpawnClientRpc(newPos, yRot, disguise); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2003288437(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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //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!"); } return; } Vector3 newPos = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref newPos); float yRot = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref yRot, default(ForPrimitives)); int disguise = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref disguise); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).SpawnServerRpc(newPos, yRot, disguise); target.__rpc_exec_stage = (__RpcExecStage)0; } private static void __rpc_handler_3888608358(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 outside = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref outside, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).AttackClientRpc(outside); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2283008872(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 outside = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref outside, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((DTMEntityAI)(object)target).AttackServerRpc(outside); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "DTMEntityAI"; } } public class DTMHitBox : MonoBehaviour, IHittable, IShockableWithGun { public DTMEntityAI mainScript; bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID = -1) { ((EnemyAI)mainScript).SetEnemyStunned(true, 1f, playerWhoHit); return true; } bool IShockableWithGun.CanBeShocked() { return mainScript.CanBeShocked(); } Vector3 IShockableWithGun.GetShockablePosition() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((EnemyAI)mainScript).eye != (Object)null) { return ((EnemyAI)mainScript).eye.position; } return ((Component)this).transform.position + Vector3.up * 1f; } float IShockableWithGun.GetDifficultyMultiplier() { return ((EnemyAI)mainScript).enemyType.stunGameDifficultyMultiplier; } void IShockableWithGun.ShockWithGun(PlayerControllerB shockedByPlayer) { ((EnemyAI)mainScript).SetEnemyStunned(true, 0.25f, shockedByPlayer); DTMEntityAI dTMEntityAI = mainScript; ((EnemyAI)dTMEntityAI).stunnedIndefinitely = ((EnemyAI)dTMEntityAI).stunnedIndefinitely + 1; } Transform IShockableWithGun.GetShockableTransform() { return ((Component)this).transform; } NetworkObject IShockableWithGun.GetNetworkObject() { return ((NetworkBehaviour)mainScript).NetworkObject; } void IShockableWithGun.StopShockingWithGun() { } } [BepInPlugin("Kittenji.DontTouchMe", "Don't Touch Me", "1.2.7")] public class Plugin : BaseUnityPlugin { [HarmonyPatch(typeof(GameNetworkManager))] internal class GameNetworkManagerPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch() { ((Component)GameNetworkManager.Instance).GetComponent<NetworkManager>().AddNetworkPrefab(Assets.EnemyType.enemyPrefab); Debug.Log((object)"[DTM] Added network prefab"); } } [HarmonyPatch(typeof(Terminal))] internal class TerminalPatch { [CompilerGenerated] private sealed class <SpecialEvent>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Terminal __instance; public int index; private PlayerControllerB <localPlayer>5__2; private InteractTrigger <trigger>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SpecialEvent>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <localPlayer>5__2 = null; <trigger>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_010d: 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_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: 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_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0131: 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_03fe: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040e: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; HandlingSpecialEvent = true; <localPlayer>5__2 = GameNetworkManager.Instance.localPlayerController; <trigger>5__3 = GetTrigger(__instance); if (!Object.op_Implicit((Object)(object)<trigger>5__3)) { HandlingSpecialEvent = false; return false; } <>2__current = (object)new WaitForSeconds(0.35f); <>1__state = 1; return true; case 1: <>1__state = -1; switch (index) { case 1: break; case 2: goto IL_015b; case 3: goto IL_01ce; case 4: goto IL_0272; case 5: goto IL_032c; case 6: goto IL_03b5; default: goto end_IL_0008; } __instance.QuitTerminal(true); if (Random.Range(0, 100) < 34) { goto IL_00ef; } Debug.LogWarning((object)"GET OUT!"); break; case 2: <>1__state = -1; goto IL_00ef; case 3: <>1__state = -1; goto IL_0180; case 4: <>1__state = -1; goto IL_01f3; case 5: <>1__state = -1; goto IL_0297; case 6: <>1__state = -1; goto IL_0351; case 7: { <>1__state = -1; goto IL_03da; } IL_03b5: __instance.QuitTerminal(true); goto IL_03da; IL_03da: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 7; return true; } if (!StartOfRound.Instance.inShipPhase) { <localPlayer>5__2.KillPlayer(Vector3.up, true, (CauseOfDeath)0, 0, default(Vector3), false); Debug.LogError((object)"Curiosity killed the cat, in this case... you"); } break; IL_0180: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 3; return true; } if (!StartOfRound.Instance.inShipPhase) { index = RoundManager.Instance.GetRandomWeightedIndex(Terminal_Weights_TP, (Random)null); PerformRandomTPOnPlayer(<localPlayer>5__2, index); } break; IL_032c: __instance.QuitTerminal(true); goto IL_0351; IL_0351: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 6; return true; } if (!StartOfRound.Instance.inShipPhase && <localPlayer>5__2.health > 5) { <localPlayer>5__2.DamagePlayer(<localPlayer>5__2.health - 5, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); Debug.LogError((object)"Ouch, that must hurt."); } break; IL_015b: __instance.QuitTerminal(true); goto IL_0180; IL_01ce: __instance.QuitTerminal(true); goto IL_01f3; IL_01f3: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 4; return true; } for (int i = 0; i < <localPlayer>5__2.ItemSlots.Length; i++) { GrabbableObject val = <localPlayer>5__2.ItemSlots[i]; if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.itemProperties) && val.itemProperties.requiresBattery) { val.insertedBattery = new Battery(true, 0f); } } Debug.LogError((object)"This mod is not sponsored by DURACELL"); break; IL_00ef: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 2; return true; } <localPlayer>5__2.DropAllHeldItems(true, false, false, false, default(Vector3), default(Vector3), default(Vector3), default(Vector3), default(Vector3)); Debug.LogError((object)"Haha, butter fingers!"); break; IL_0272: __instance.QuitTerminal(true); goto IL_0297; IL_0297: if (<trigger>5__3.currentCooldownValue > 0f) { <>2__current = null; <>1__state = 5; return true; } if (!StartOfRound.Instance.inShipPhase && RoundManager.Instance.outsideAINodes.Length != 0) { int num = Random.Range(1, 5); for (int j = 0; j < num; j++) { RoundManager.Instance.SpawnEnemyOnServer(Vector3.zero, Random.Range(-180f, 180f), -3); } Debug.LogError((object)("OOPS! Have fun with " + ((num > 1) ? "those" : "that") + "...")); } break; end_IL_0008: break; } HandlingSpecialEvent = false; 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 Random TerminalRandom = new Random(); private static FieldInfo InteractTriggerField = AccessTools.Field(typeof(Terminal), "terminalTrigger"); private static InteractTrigger m_Trigger; private static bool HandlingSpecialEvent; private static InteractTrigger GetTrigger(Terminal __instance) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown if ((Object)(object)m_Trigger == (Object)null) { m_Trigger = (InteractTrigger)InteractTriggerField.GetValue(__instance); } return m_Trigger; } private static void PerformRandomTPOnPlayer(PlayerControllerB localPlayer, int index, bool redirected = false) { //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0066: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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_00d3: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) if (localPlayer.isPlayerDead) { return; } bool flag; Vector3 val; switch (index) { default: return; case 0: case 1: { flag = index == 0; GameObject[] array = (flag ? RoundManager.Instance.insideAINodes : RoundManager.Instance.outsideAINodes); if (array.Length != 0) { val = array[Random.Range(0, array.Length)].transform.position; val = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(val, 10f, default(NavMeshHit)); Debug.LogWarning((object)"Where am I anyway?"); break; } return; } case 2: { Turret[] array2 = Object.FindObjectsOfType<Turret>(false); if (array2 == null || array2.Length == 0) { PerformRandomTPOnPlayer(localPlayer, redirected ? Random.Range(0, 2) : 3, redirected: true); return; } Turret val2 = array2[Random.Range(0, array2.Length)]; if ((Object)(object)val2 == (Object)null) { return; } val = ((Component)val2).transform.position; flag = val.y < -80f; val = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(val, 2f, default(NavMeshHit)); Debug.LogError((object)"Run Forest, RUN!!!"); break; } case 3: { Landmine[] array3 = Object.FindObjectsOfType<Landmine>(false); if (array3 == null || array3.Length == 0) { PerformRandomTPOnPlayer(localPlayer, redirected ? Random.Range(0, 2) : 2, redirected: true); return; } Landmine val3 = array3[Random.Range(0, array3.Length)]; if ((Object)(object)val3 == (Object)null) { return; } val = ((Component)val3).transform.position; flag = val.y < -80f; val = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(val, 2f, default(NavMeshHit)); Debug.LogError((object)"WAIT, DON'T MOVE!!!... Or do... I'm a programmer, not a land mine inspector."); break; } case 4: { List<EnemyAI> spawnedEnemies = RoundManager.Instance.SpawnedEnemies; if (spawnedEnemies == null || spawnedEnemies.Count == 0) { PerformRandomTPOnPlayer(localPlayer, Random.Range(0, 2), redirected: true); return; } val = ((Component)spawnedEnemies[Random.Range(0, spawnedEnemies.Count)]).transform.position; flag = val.y < -80f; val = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(val, 8f, default(NavMeshHit)); Debug.LogError((object)"OH NO!, that is horrible!!!............ anyway.."); break; } case 5: val = ((Component)localPlayer).transform.position + Vector3.up * 100f; flag = false; Debug.LogError((object)"Fly like a bird... wait, why are you falling?"); break; } if (!localPlayer.isPlayerDead) { localPlayer.DropAllHeldItems(true, false, false, false, default(Vector3), default(Vector3), default(Vector3), default(Vector3), default(Vector3)); localPlayer.isInElevator = false; localPlayer.isInHangarShipRoom = false; localPlayer.isInsideFactory = flag; localPlayer.averageVelocity = 0f; localPlayer.velocityLastFrame = Vector3.zero; localPlayer.TeleportPlayer(val, false, 0f, false, true); HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } [IteratorStateMachine(typeof(<SpecialEvent>d__6))] private static IEnumerator SpecialEvent(Terminal __instance, int index) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SpecialEvent>d__6(0) { __instance = __instance, index = index }; } [HarmonyPatch("RunTerminalEvents")] [HarmonyPostfix] private static void RunTerminalEventsPatch(ref Terminal __instance, TerminalNode node) { if (node.terminalEvent == "dontReadMe") { Debug.Log((object)"Don't read me, please."); int randomWeightedIndex = RoundManager.Instance.GetRandomWeightedIndex(Terminal_Weights, TerminalRandom); if (!HandlingSpecialEvent) { ((MonoBehaviour)__instance).StartCoroutine(SpecialEvent(__instance, randomWeightedIndex)); } } } [HarmonyPatch("Start")] [HarmonyPrefix] private static void StartPatch(ref Terminal __instance) { //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown Debug.Log((object)"[DTM] Adding terminal entries"); TerminalNode terminalNode = Assets.EnemyNode; TerminalKeyword val = __instance.terminalNodes.allKeywords.First((TerminalKeyword k) => k.word == "info"); if (!__instance.enemyFiles.Any((TerminalNode x) => x.creatureName == terminalNode.creatureName)) { TerminalKeyword keyword = Assets.EnemyKeyword; keyword.defaultVerb = val; List<TerminalKeyword> list = __instance.terminalNodes.allKeywords.ToList(); if (!list.Any((TerminalKeyword x) => x.word == keyword.word)) { list.Add(keyword); __instance.terminalNodes.allKeywords = list.ToArray(); } List<CompatibleNoun> list2 = val.compatibleNouns.ToList(); if (!list2.Any((CompatibleNoun x) => x.noun.word == keyword.word)) { list2.Add(new CompatibleNoun(keyword, terminalNode)); } val.compatibleNouns = list2.ToArray(); terminalNode.creatureFileID = __instance.enemyFiles.Count; __instance.enemyFiles.Add(terminalNode); Assets.EnemyType.enemyPrefab.GetComponentInChildren<ScanNodeProperties>().creatureScanID = terminalNode.creatureFileID; Debug.Log((object)"[DTM] Done adding entries."); } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void AwakePatch(ref StartOfRound __instance) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown EnemyType enemyDef = Assets.EnemyType; SelectableLevel[] levels = __instance.levels; foreach (SelectableLevel val in levels) { if (val.Enemies.Count >= 2 && !val.Enemies.Any((SpawnableEnemyWithRarity e) => (Object)(object)e.enemyType == (Object)(object)enemyDef)) { Debug.Log((object)("[DTM] Adding entity to level: " + val.PlanetName)); val.Enemies.Add(new SpawnableEnemyWithRarity(enemyDef, SpawnRarity)); } } } } private const string modGUID = "Kittenji.DontTouchMe"; private readonly Harmony harmony = new Harmony("Kittenji.DontTouchMe"); public static bool PlayMusic = true; public static bool IncludeMonstersOnKill = true; public static bool IncludeUnkillableMonsters = true; public static bool DestroyMonstersOnKill = true; public static int SpawnRarity = 24; public static int SpawnOutsideChance = 2; public static bool ChangeLocationAfterTouch = true; public static bool DestroyEntityAfterTouch = true; public static int DisguiseAsItemChance = 40; private const int Terminal_Weight_None = 0; private const int Terminal_Weight_Quit = 0; private const int Terminal_Weight_TP = 15; private const int Terminal_Weight_Battery = 14; private const int Terminal_Weight_Punish = 14; private const int Terminal_Weight_Break = 3; private const int Terminal_Weight_Kill = 1; private const int Terminal_Weight_TP_Inside = 36; private const int Terminal_Weight_TP_Outside = 36; private const int Terminal_Weight_TP_Turret = 18; private const int Terminal_Weight_TP_Landmine = 6; private const int Terminal_Weight_TP_Monster = 3; private const int Terminal_Weight_TP_Sky = 1; private const int Terminal_Punish_Min = 1; private const int Terminal_Punish_Max = 5; private static readonly int[] Terminal_Weights = new int[7] { 0, 0, 15, 14, 14, 3, 1 }; private static readonly int[] Terminal_Weights_TP = new int[6] { 36, 36, 18, 6, 3, 1 }; private void Awake() { SpawnRarity = ((BaseUnityPlugin)this).Config.Bind<int>("Spawning", "Spawn Rarity", 24, "Spawn rarity. Lower value means lower chance to spawn. (default = 24)").Value; SpawnOutsideChance = ((BaseUnityPlugin)this).Config.Bind<int>("Spawning", "Spawn Rarity Outside", 2, "Random chance percentage for this entity to spawn outside. (default = 2)").Value; DisguiseAsItemChance = ((BaseUnityPlugin)this).Config.Bind<int>("Spawning", "Disguise As Item Chance", 45, "Random chance percentage for this entity to disguise itself as an item. (default = 45)").Value; ChangeLocationAfterTouch = ((BaseUnityPlugin)this).Config.Bind<bool>("Interaction", "Changes Location", true, "If 'true' the entity will change it's position to a random location after the animation. (default = true)").Value; DestroyEntityAfterTouch = ((BaseUnityPlugin)this).Config.Bind<bool>("Interaction", "Destroy After Touch", false, "If 'true' the entity will hide for the rest of the round after touch. It will teleport to a different location. (default = false)").Value; IncludeMonstersOnKill = ((BaseUnityPlugin)this).Config.Bind<bool>("Interaction", "Include Monsters On Kill", true, "If 'true' the entity will not pick favorites and will try killing monsters in the facility as well. (default = true)").Value; DestroyMonstersOnKill = ((BaseUnityPlugin)this).Config.Bind<bool>("Interaction", "Destroy Monsters On Kill", true, "If 'true' monsters will directly despawn to prevent lag and other potential issues. (default = true)").Value; IncludeUnkillableMonsters = ((BaseUnityPlugin)this).Config.Bind<bool>("Interaction", "Include Unkillable Monsters", true, "If 'true' the entity will also kill unkillable monsters too. (default = true)").Value; PlayMusic = ((BaseUnityPlugin)this).Config.Bind<bool>("Audio", "Play Music", true, "If 'true' the entity will play ominous music (Lobotomy Corp OST - Neutral 01) that can be heard in the distance, getting more noticeable the closer you get to it. (default = true)").Value; SpawnRarity = Mathf.Min(100, Mathf.Max(1, SpawnRarity)); SpawnOutsideChance = Mathf.Min(100, Mathf.Max(0, SpawnOutsideChance)); DisguiseAsItemChance = Mathf.Min(100, Mathf.Max(0, DisguiseAsItemChance)); ((BaseUnityPlugin)this).Config.Save(); Assets.Init(); harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Patched!"); Type[] types = Assembly.GetExecutingAssembly().GetTypes(); for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace DontTouchMe.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }