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 OtakuCompany v1.0.0
OtakuCompany.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("OtakuCompany")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Basic ass version of weebshit")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("OtakuCompany")] [assembly: AssemblyTitle("OtakuCompany")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace OtakuCompany { [BepInPlugin("OtakuCompany", "OtakuCompany", "1.0.0")] public class Plugin : BaseUnityPlugin { public static AssetBundle MainAssets; private void Awake() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } MainAssets = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("OtakuCompany.dll", "otakucompany")); Item val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/Figurine/Figurine.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 70, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Figurine is loaded!"); val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/BodyPillow/BodyPillow.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 70, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Body Pillow is loaded!"); val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/Katana/Katana.asset"); NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 40, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Katana is loaded!"); val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/Onigiri/Onigiri.asset"); FoodItem foodItem = val.spawnPrefab.AddComponent<FoodItem>(); foodItem.foodAudio = ((Component)foodItem).gameObject.GetComponent<AudioSource>(); foodItem.eatFoodAudio = MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Items/Onigiri/Munch1.ogg"); foodItem.eatParticle = ((Component)foodItem).gameObject.GetComponent<ParticleSystem>(); ((GrabbableObject)foodItem).grabbable = true; ((GrabbableObject)foodItem).itemProperties = val; NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 80, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Onigiri is loaded!"); val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/Dango/Dango.asset"); foodItem = val.spawnPrefab.AddComponent<FoodItem>(); foodItem.foodAudio = ((Component)foodItem).gameObject.GetComponent<AudioSource>(); foodItem.eatFoodAudio = MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Items/Dango/Munch1.ogg"); foodItem.eatParticle = ((Component)foodItem).gameObject.GetComponent<ParticleSystem>(); ((GrabbableObject)foodItem).grabbable = true; ((GrabbableObject)foodItem).itemProperties = val; NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 80, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Dango is loaded!"); val = MainAssets.LoadAsset<Item>("Assets/Scripts/Items/Ramen/Ramen.asset"); foodItem = val.spawnPrefab.AddComponent<FoodItem>(); foodItem.foodAudio = ((Component)foodItem).gameObject.GetComponent<AudioSource>(); foodItem.eatFoodAudio = MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Items/Dango/Munch1.ogg"); foodItem.eatParticle = ((Component)foodItem).gameObject.GetComponent<ParticleSystem>(); ((GrabbableObject)foodItem).grabbable = true; ((GrabbableObject)foodItem).itemProperties = val; foodItem.heal = 50; NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, 40, (LevelTypes)510); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Ramen is loaded!"); EnemyType val2 = MainAssets.LoadAsset<EnemyType>("Assets/Scripts/Enemies/TruckKun/TruckKun.asset"); TerminalNode val3 = MainAssets.LoadAsset<TerminalNode>("Assets/Scripts/Enemies/TruckKun/Node.asset"); TerminalKeyword val4 = MainAssets.LoadAsset<TerminalKeyword>("Assets/Scripts/Enemies/TruckKun/Keyword.asset"); val2.enemyPrefab.AddComponent<TruckKunAI>(); ((EnemyAI)val2.enemyPrefab.GetComponent<TruckKunAI>()).enemyType = val2; NetworkPrefabs.RegisterNetworkPrefab(val2.enemyPrefab); Enemies.RegisterEnemy(val2, 100, (LevelTypes)510, (SpawnType)2, val3, val4); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Truck-kun is loaded!"); val2 = MainAssets.LoadAsset<EnemyType>("Assets/Scripts/Enemies/FatBastard/FatBastard.asset"); val2.enemyPrefab.AddComponent<FatBastardAI>(); ((EnemyAI)val2.enemyPrefab.GetComponent<FatBastardAI>()).enemyType = val2; NetworkPrefabs.RegisterNetworkPrefab(val2.enemyPrefab); Enemies.RegisterEnemy(val2, 40, (LevelTypes)510, (SpawnType)0, (TerminalNode)null, (TerminalKeyword)null); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Oji-san is loaded!"); EnemyType val5 = MainAssets.LoadAsset<EnemyType>("Assets/Scripts/Enemies/FatBastard/FatBastardBondageTrap.asset"); val5.enemyPrefab.AddComponent<FatBastardBondageTrap>(); NetworkPrefabs.RegisterNetworkPrefab(val5.enemyPrefab); val2.enemyPrefab.GetComponent<FatBastardAI>().bondageTrapPrefab = val5.enemyPrefab; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Oji-san's trap is loaded!"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin OtakuCompany is loaded!"); ((BaseUnityPlugin)this).Logger.LogWarning((object)$"\r\n⠄⠄⠄⢰⣧⣼⣯⠄⣸⣠⣶⣶⣦⣾⠄⠄⠄⠄⡀⠄⢀⣿⣿⠄⠄⠄⢸⡇⠄⠄\r\n⠄⠄⠄⣾⣿⠿⠿⠶⠿⢿⣿⣿⣿⣿⣦⣤⣄⢀⡅⢠⣾⣛⡉⠄⠄⠄⠸⢀⣿⠄\r\n⠄⠄⢀⡋⣡⣴⣶⣶⡀⠄⠄⠙⢿⣿⣿⣿⣿⣿⣴⣿⣿⣿⢃⣤⣄⣀⣥⣿⣿⠄\r\n⠄⠄⢸⣇⠻⣿⣿⣿⣧⣀⢀⣠⡌⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣿⣿⣿⠄\r\n⠄⢀⢸⣿⣷⣤⣤⣤⣬⣙⣛⢿⣿⣿⣿⣿⣿⣿⡿⣿⣿⡍⠄⠄⢀⣤⣄⠉⠋⣰\r\n⠄⣼⣖⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⢇⣿⣿⡷⠶⠶⢿⣿⣿⠇⢀⣤\r\n⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣿⡇⣿⣿⣿⣿⣿⣿⣷⣶⣥⣴⣿⡗\r\n⢀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠄\r\n⢸⣿⣦⣌⣛⣻⣿⣿⣧⠙⠛⠛⡭⠅⠒⠦⠭⣭⡻⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠄\r\n⠘⣿⣿⣿⣿⣿⣿⣿⣿⡆⠄⠄⠄⠄⠄⠄⠄⠄⠹⠈⢋⣽⣿⣿⣿⣿⣵⣾⠃⠄\r\n⠄⠘⣿⣿⣿⣿⣿⣿⣿⣿⠄⣴⣿⣶⣄⠄⣴⣶⠄⢀⣾⣿⣿⣿⣿⣿⣿⠃⠄⠄\r\n⠄⠄⠈⠻⣿⣿⣿⣿⣿⣿⡄⢻⣿⣿⣿⠄⣿⣿⡀⣾⣿⣿⣿⣿⣛⠛⠁⠄⠄⠄\r\n⠄⠄⠄⠄⠈⠛⢿⣿⣿⣿⠁⠞⢿⣿⣿⡄⢿⣿⡇⣸⣿⣿⠿⠛⠁⠄⠄⠄⠄⠄\r\n⠄⠄⠄⠄⠄⠄⠄⠉⠻⣿⣿⣾⣦⡙⠻⣷⣾⣿⠃⠿⠋⠁⠄⠄⠄⠄⠄⢀⣠⣴\r\n⣿⣿⣿⣶⣶⣮⣥⣒⠲⢮⣝⡿⣿⣿⡆⣿⡿⠃⠄⠄⠄⠄⠄⠄⠄⣠⣴⣿⣿⣿"); } } public class FoodItem : GrabbableObject { public ParticleSystem eatParticle; public AudioSource foodAudio; public AudioClip eatFoodAudio; private PlayerControllerB previousPlayerHeldBy; public int heal = 30; public override void EquipItem() { ((GrabbableObject)this).EquipItem(); previousPlayerHeldBy = base.playerHeldBy; } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!((Object)(object)base.playerHeldBy == (Object)null)) { base.playerHeldBy.activatingItem = true; base.playerHeldBy.inSpecialInteractAnimation = true; base.playerHeldBy.DamagePlayer(-heal, false, true, (CauseOfDeath)0, 0, false, default(Vector3)); base.playerHeldBy.inSpecialInteractAnimation = false; EatFoodServerRpc(); } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); base.playerHeldBy.activatingItem = false; } [ServerRpc(RequireOwnership = false)] private void EatFoodServerRpc() { EatFoodClientRpc(); } [ClientRpc] private void EatFoodClientRpc() { eatParticle.Play(); foodAudio.PlayOneShot(eatFoodAudio); WalkieTalkie.TransmitOneShotAudio(foodAudio, eatFoodAudio, 1f); if ((Object)(object)base.playerHeldBy != (Object)null) { base.playerHeldBy.activatingItem = false; ((GrabbableObject)this).DestroyObjectInHand(base.playerHeldBy); } } } public class TruckKunAI : EnemyAI, IVisibleThreat { private RoundManager roundManager; private Vector3 previousPosition; private Vector3 agentLocalVelocity; private float agentSpeedWithNegative; private Vector3 targetDir; private float turnAngleThreshhold = 90f; public bool isTurnRound; private Vector3 endDes; private bool hasSetTurnRoundDes; private Vector3 d1; private float turnTimer = 0f; public AudioClip screamSFX; public AudioClip breathingSFX; public AudioClip crashSFX; public float[] playerStealthMeters = new float[4]; public Transform lookTarget; public float detectionRadius = 12f; private Collider[] allPlayerColliders = (Collider[])(object)new Collider[4]; private float closestPlayerDist; private Collider tempTargetCollider; public bool detectingPlayers; public AISearchRoutine searchForPlayers; public AISearchRoutine roamPlanet; public bool investigating; public bool hasBegunInvestigating; public Vector3 investigatePosition; private float stopAndLookInterval; private float stopAndLookTimer; public PlayerControllerB chasingPlayer; public bool lostPlayerInChase; public bool hasLostPlayerInChaseDebounce; public Vector3 lastSeenPlayerPositionInChase; private bool chasingPlayerInLOS; private float noticePlayerTimer; public float timeSinceHittingPlayer; ThreatType IVisibleThreat.type => (ThreatType)4; int IVisibleThreat.SendSpecialBehaviour(int id) { return 0; } int IVisibleThreat.GetThreatLevel(Vector3 seenByPosition) { return 18; } int IVisibleThreat.GetInterestLevel() { return 0; } Transform IVisibleThreat.GetThreatLookTransform() { return base.eye; } Transform IVisibleThreat.GetThreatTransform() { return ((Component)this).transform; } Vector3 IVisibleThreat.GetThreatVelocity() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) if (((NetworkBehaviour)this).IsOwner) { return base.agent.velocity; } return Vector3.zero; } float IVisibleThreat.GetVisibility() { if (base.isEnemyDead) { return 0f; } if (((Vector3)(ref agentLocalVelocity)).sqrMagnitude > 0f) { return 1f; } return 0.75f; } public override void Start() { //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown ((EnemyAI)this).Start(); Debug.Log((object)"Truck-kun: Starting TruckKunAI"); ((Component)((Component)this).transform.GetChild(0)).gameObject.layer = 22; ((Component)((Component)this).transform.GetChild(0)).gameObject.tag = "DoNotSet"; ((Component)((Component)this).transform.GetChild(1)).gameObject.layer = 14; ((Component)((Component)this).transform.GetChild(1)).gameObject.tag = "DoNotSet"; base.useSecondaryAudiosOnAnimatedObjects = false; base.eye = ((Component)this).transform.Find("eye"); ((Component)this).gameObject.AddComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)this; ((Component)this).gameObject.AddComponent<OccludeAudio>(); base.agent.angularSpeed = 120f; for (int i = 0; i < 2; i++) { EnemyBehaviourState val = new EnemyBehaviourState(); val.name = i.ToString(); val.playOneShotSFX = false; val.playOneShotVoice = false; base.enemyBehaviourStates = CollectionExtensions.AddToArray<EnemyBehaviourState>(base.enemyBehaviourStates, val); } AudioClip voiceClip = Plugin.MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Enemies/TruckKun/Truckhorn.mp3"); base.enemyBehaviourStates[1].VoiceClip = voiceClip; base.enemyBehaviourStates[1].VoiceClip.LoadAudioData(); base.enemyBehaviourStates[1].playOneShotVoice = true; base.creatureSFX = ((Component)((Component)this).transform.GetChild(7)).GetComponent<AudioSource>(); base.creatureVoice = ((Component)this).GetComponent<AudioSource>(); crashSFX = Plugin.MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Enemies/TruckKun/Crash.mp3"); base.AIIntervalTime = 0.1f; if (Random.Range(0, 10) < 2) { base.creatureVoice.pitch = Random.Range(0.6f, 1.3f); } else { base.creatureVoice.pitch = Random.Range(0.9f, 1.1f); } base.currentBehaviourStateIndex = 0; } public override void DoAIInterval() { //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).DoAIInterval(); if (StartOfRound.Instance.livingPlayers == 0 || base.isEnemyDead) { return; } if (base.currentBehaviourStateIndex != 0) { if (base.currentBehaviourStateIndex != 1) { return; } investigating = false; hasBegunInvestigating = false; if (roamPlanet.inProgress) { ((EnemyAI)this).StopSearch(roamPlanet, false); } if (lostPlayerInChase) { if (!searchForPlayers.inProgress) { searchForPlayers.searchWidth = 25f; ((EnemyAI)this).StartSearch(lastSeenPlayerPositionInChase, searchForPlayers); Debug.Log((object)"Truck-kun lost player in chase; beginning search where the player was last seen"); } } else { if (searchForPlayers.inProgress) { ((EnemyAI)this).StopSearch(searchForPlayers, true); Debug.Log((object)"Truck-kun found player during chase; stopping search coroutine and moving after target player"); } ((EnemyAI)this).SetMovingTowardsTargetPlayer(chasingPlayer); } return; } ((EnemyAI)this).SetMovingTowardsTargetPlayer((PlayerControllerB)null); if (searchForPlayers.inProgress) { ((EnemyAI)this).StopSearch(searchForPlayers, true); } if (investigating) { if (!hasBegunInvestigating) { hasBegunInvestigating = true; ((EnemyAI)this).StopSearch(roamPlanet, false); ((EnemyAI)this).SetDestinationToPosition(investigatePosition, false); } if (Vector3.Distance(((Component)this).transform.position, investigatePosition) < 5f) { investigating = false; hasBegunInvestigating = false; } } else if (!roamPlanet.inProgress) { ((EnemyAI)this).StartSearch(((Component)this).transform.position, roamPlanet); } } public override void FinishedCurrentSearchRoutine() { if (((NetworkBehaviour)this).IsOwner && base.currentBehaviourStateIndex == 1 && lostPlayerInChase && !chasingPlayerInLOS) { Debug.Log((object)"Truck-kun finished search; player not in line of sight, lost player, returning to roaming mode"); ((EnemyAI)this).SwitchToBehaviourState(0); } } public override void ReachedNodeInSearch() { ((EnemyAI)this).ReachedNodeInSearch(); if (((NetworkBehaviour)this).IsOwner && base.currentBehaviourStateIndex == 0 && stopAndLookInterval > 12f) { stopAndLookInterval = 0f; stopAndLookTimer = Random.Range(3f, 10f); } } public override void Update() { //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.isEnemyDead || !base.ventAnimationFinished) { return; } timeSinceHittingPlayer += Time.deltaTime; stopAndLookInterval += Time.deltaTime; angleToTerrain(); switch (base.currentBehaviourStateIndex) { case 0: lostPlayerInChase = false; hasLostPlayerInChaseDebounce = false; lookForPlayers(); CalculateAgentSpeed(); if (stopAndLookTimer > 0f) { stopAndLookTimer -= Time.deltaTime; base.agent.speed = 0f; } break; case 1: lookForPlayers(); CalculateAgentSpeed(); if (lostPlayerInChase) { if (!hasLostPlayerInChaseDebounce) { hasLostPlayerInChaseDebounce = true; HasLostPlayerInChaseClientRpc(); } if (chasingPlayerInLOS) { noticePlayerTimer = 0f; lostPlayerInChase = false; break; } noticePlayerTimer += Time.deltaTime; if (noticePlayerTimer > 9f) { noticePlayerTimer = 0f; ((EnemyAI)this).SwitchToBehaviourState(0); } break; } if (hasLostPlayerInChaseDebounce) { hasLostPlayerInChaseDebounce = false; HasFoundPlayerInChaseClientRpc(); } if (chasingPlayerInLOS) { noticePlayerTimer = 0f; lastSeenPlayerPositionInChase = ((Component)chasingPlayer).transform.position; break; } noticePlayerTimer += Time.deltaTime; if (noticePlayerTimer > 3f) { lostPlayerInChase = true; } break; case 2: return; } smoothTurn(); } private void lookForPlayers() { //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: 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_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) float num = 15f; if (base.currentBehaviourStateIndex == 1) { num = 30f; } if (base.currentBehaviourStateIndex == 2) { num = 10f; } PlayerControllerB[] allPlayersInLineOfSight = ((EnemyAI)this).GetAllPlayersInLineOfSight(num, 100, base.eye, -1f, StartOfRound.Instance.collidersRoomDefaultAndFoliage); if (allPlayersInLineOfSight == null) { if (base.currentBehaviourStateIndex == 1) { chasingPlayerInLOS = false; } return; } PlayerControllerB val = allPlayersInLineOfSight[0]; if (base.currentBehaviourStateIndex == 1) { if (lostPlayerInChase) { chasingPlayerInLOS = (Object)(object)val != (Object)null; return; } chasingPlayerInLOS = allPlayersInLineOfSight.Contains(chasingPlayer); } if (!investigating) { investigating = true; hasBegunInvestigating = false; investigatePosition = RoundManager.Instance.GetNavMeshPosition(((Component)val).transform.position, default(NavMeshHit), 5f, -1); BeginChasingNewPlayerServerRpc((int)val.playerClientId); } } private void CalculateAgentSpeed() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) Vector3 val = previousPosition - ((Component)this).transform.position; float num = ((Vector3)(ref val)).sqrMagnitude / (Time.deltaTime / 1.4f); previousPosition = ((Component)this).transform.position; if (base.currentBehaviourStateIndex == 0) { base.agent.speed = 4f; base.agent.acceleration = 5f; agentSpeedWithNegative = base.agent.speed; } else if (base.currentBehaviourStateIndex == 1) { agentSpeedWithNegative += Time.deltaTime * 20f; base.agent.speed = Mathf.Clamp(agentSpeedWithNegative, -3f, 100f); base.agent.acceleration = 20f; } } private void angleToTerrain() { //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_002e: 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_0045: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (Physics.Raycast(((Component)this).transform.position, Vector3.down, ref val, float.PositiveInfinity)) { ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, Quaternion.LookRotation(Vector3.Cross(((Component)this).transform.TransformDirection(Vector3.right), ((RaycastHit)(ref val)).normal)), 30f * Time.deltaTime); } } private void smoothTurn() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //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_0018: 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) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0118: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: 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) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) Vector3 val = base.destination - ((Component)this).transform.position; targetDir = ((Vector3)(ref val)).normalized; if (Vector3.Angle(targetDir, ((Component)this).transform.forward) > turnAngleThreshhold && !isTurnRound) { endDes = base.destination; isTurnRound = true; base.agent.autoBraking = false; } if (isTurnRound) { turnTimer += Time.deltaTime; if (turnTimer >= 4f) { turnTimer = 0f; base.agent.SetDestination(endDes); hasSetTurnRoundDes = false; isTurnRound = false; } if (!hasSetTurnRoundDes) { d1 = findTurnPoint(endDes); hasSetTurnRoundDes = true; base.agent.SetDestination(d1); } if (Vector3.Distance(((Component)this).transform.position, d1) <= base.agent.stoppingDistance + 1f && Vector3.Angle(endDes - ((Component)this).transform.position, ((Component)this).transform.forward) > turnAngleThreshhold) { d1 = findTurnPoint(endDes); base.agent.SetDestination(d1); } if (Vector3.Angle(endDes - ((Component)this).transform.position, ((Component)this).transform.forward) < turnAngleThreshhold) { base.agent.SetDestination(endDes); hasSetTurnRoundDes = false; isTurnRound = false; } } } private Vector3 findTurnPoint(Vector3 des) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) //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_00b6: 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_00c7: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00fa: 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) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_0088: 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_00a6: 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_0119: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) float num = 5f; float num2 = 120f; Vector3 val = Vector3.Cross(((Component)this).transform.forward, targetDir); Vector3 val2 = ((!(val.y < 0f)) ? (((Component)this).transform.position - ((Component)this).transform.right * num - ((Component)this).transform.right * (num * Mathf.Cos(num2 * (MathF.PI / 180f))) + ((Component)this).transform.forward * (num * Mathf.Sin(num2 * (MathF.PI / 180f)))) : (((Component)this).transform.position - ((Component)this).transform.right * num - ((Component)this).transform.right * (num * Mathf.Cos(180f - num2 * (MathF.PI / 180f))) + ((Component)this).transform.forward * (num * Mathf.Sin(180f - num2 * (MathF.PI / 180f))))); NavMeshHit val3 = default(NavMeshHit); if (NavMesh.SamplePosition(val2, ref val3, 2f, -1)) { return ((NavMeshHit)(ref val3)).position; } return endDes; } [ServerRpc(RequireOwnership = false)] private void BeginChasingNewPlayerServerRpc(int playerId) { BeginChasingNewPlayerClientRpc(playerId); } [ClientRpc] private void BeginChasingNewPlayerClientRpc(int playerId) { chasingPlayer = StartOfRound.Instance.allPlayerScripts[playerId]; lostPlayerInChase = false; ((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(1); } [ClientRpc] private void HasLostPlayerInChaseClientRpc() { lostPlayerInChase = true; hasLostPlayerInChaseDebounce = false; } [ClientRpc] private void HasFoundPlayerInChaseClientRpc() { lostPlayerInChase = false; } public override void OnCollideWithPlayer(Collider other) { //IL_00c9: 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_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_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: 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_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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) ((EnemyAI)this).OnCollideWithPlayer(other); PlayerControllerB component = ((Component)other).gameObject.GetComponent<PlayerControllerB>(); if (base.isEnemyDead || !((Object)(object)component != (Object)null) || !((Object)(object)component == (Object)(object)GameNetworkManager.Instance.localPlayerController) || !((Object)(object)component.inAnimationWithEnemy == (Object)null)) { return; } Debug.Log((object)$"Truck-kun colliding with {component.playerUsername}"); if (component.isPlayerDead) { return; } if (component.isInHangarShipRoom) { Debug.Log((object)$"{component.playerUsername} is in ship, no damage"); } else if (timeSinceHittingPlayer > 0.5f) { float num = 55f; Vector3 val = base.agent.velocity; float num2 = Mathf.Clamp(((Vector3)(ref val)).magnitude, 5f, 100f); val = ((Component)component.gameplayCamera).transform.position - ((Component)this).transform.position; Vector3 val2 = ((Vector3)(ref val)).normalized * num; timeSinceHittingPlayer = 0f; component.DamagePlayer((int)num2 * 2, true, true, (CauseOfDeath)1, 0, false, val2); component.externalForces += val2; MakeCrashNoiseServerRpc(); float num3 = Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)this).transform.position); if (num3 < 10f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } else if (num3 < 20f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } if (Random.Range(1, 100) > 90) { TeleportPlayerServerRpc((int)component.playerClientId); } } } [ServerRpc(RequireOwnership = false)] public void MakeCrashNoiseServerRpc() { Debug.Log((object)"Truck-kun: Sending serverrpc for crash"); MakeCrashNoiseClientRpc(); } [ClientRpc] public void MakeCrashNoiseClientRpc() { Debug.Log((object)"Truck-kun: recieving clientrpc for crash"); MakeCrashNoise(); } private void MakeCrashNoise() { //IL_005f: 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) Debug.Log((object)"Truck-kun: make crash noise"); base.creatureVoice.pitch = Random.Range(0.96f, 1.04f); base.creatureVoice.PlayOneShot(crashSFX); WalkieTalkie.TransmitOneShotAudio(base.creatureVoice, crashSFX, 1f); if (Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)this).transform.position) < 30f) { GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.3f, true); } } [ServerRpc(RequireOwnership = false)] public void TeleportPlayerServerRpc(int playerId) { Debug.Log((object)"Truck-kun: Sending serverrpc for teleport"); TeleportPlayerClientRpc(playerId); } [ClientRpc] public void TeleportPlayerClientRpc(int playerId) { Debug.Log((object)"Truck-kun: recieving clientrpc for teleport"); TeleportPlayer(playerId); } public void TeleportPlayer(int playerId) { //IL_0023: 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) //IL_002e: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_004f: Unknown result type (might be due to invalid IL or missing references) Vector3 position = RoundManager.Instance.insideAINodes[Random.Range(0, RoundManager.Instance.insideAINodes.Length)].transform.position; position = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(position, 10f, default(NavMeshHit)); StartOfRound.Instance.allPlayerScripts[playerId].TeleportPlayer(position, false, 0f, false, true); } } public class FatBastardAI : EnemyAI, INoiseListener { private enum Kink { Voyeurism, Exhibitionism, Auralism } private Vector3 mainEntrancePosition; private bool inKillAnimation; private Transform homeNode; private Kink currentKink; private float arousalMeter; private float arousalMaxThreshhold; private float arousalCurrentThreshold; private float[] arousalThresholds = new float[4] { 0f, 0.2f, 0.4f, 0.6f }; private float enrageTimer; private float hearNoiseCooldown; private float makeNoiseTimer; private bool standingIdle; private Transform turnCompass; private PlayerControllerB lookAtPlayer; private SkinnedMeshRenderer mesh; private Vector3 previousPosition; private float carryingPlayerDebounce; private AudioSource carryingPlayerAudio; private bool carryingPlayer; private PlayerControllerB playerBeingCarried; private Transform holdPlayerPoint; private FatBastardBondageTrap chosenTrap; private int maxToysToPlace; public GameObject bondageTrapPrefab; private int maxBondageTrapsToPlace; private List<FatBastardBondageTrap> bondageTraps = new List<FatBastardBondageTrap>(); private float timeSincePlacingBondageTrap; public override void Start() { //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Expected O, but got Unknown //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Start(); Debug.Log((object)"Oji-san: Starting FatBastardAI"); ((Component)((Component)this).transform.GetChild(0)).gameObject.layer = 22; ((Component)((Component)this).transform.GetChild(0)).gameObject.tag = "DoNotSet"; ((Component)((Component)this).transform.GetChild(1)).gameObject.layer = 14; ((Component)((Component)this).transform.GetChild(1)).gameObject.tag = "DoNotSet"; ((Component)((Component)this).transform.Find("Man")).tag = "Enemy"; base.useSecondaryAudiosOnAnimatedObjects = false; base.eye = ((Component)this).transform.Find("eye"); holdPlayerPoint = ((Component)this).transform.Find("holdPlayerPoint"); turnCompass = ((Component)this).transform.Find("turnCompass"); ((Component)((Component)this).transform.Find("Man")).gameObject.AddComponent<EnemyAICollisionDetect>().mainScript = (EnemyAI)(object)this; base.agent.angularSpeed = 180f; for (int i = 0; i < 3; i++) { EnemyBehaviourState val = new EnemyBehaviourState(); val.name = i.ToString(); val.playOneShotSFX = false; val.playOneShotVoice = false; base.enemyBehaviourStates = CollectionExtensions.AddToArray<EnemyBehaviourState>(base.enemyBehaviourStates, val); } base.currentBehaviourStateIndex = 0; base.creatureVoice = ((Component)this).GetComponent<AudioSource>(); mainEntrancePosition = RoundManager.FindMainEntrancePosition(false, false); maxToysToPlace = Random.Range(2, 4); maxBondageTrapsToPlace = Random.Range(1, 3); homeNode = ((EnemyAI)this).ChooseClosestNodeToPosition(((Component)this).transform.position, false, 2); currentKink = (Kink)Random.Range(0, Enum.GetNames(typeof(Kink)).Length - 1); arousalMaxThreshhold = Random.Range(80f, 120f); base.enemyHP = Random.Range(5, 7); mesh = ((Component)((Component)this).transform.Find("Man").Find("default")).GetComponent<SkinnedMeshRenderer>(); } public override void DoAIInterval() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_0189: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: 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_00ec: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) if (StartOfRound.Instance.livingPlayers == 0) { ((EnemyAI)this).DoAIInterval(); return; } switch (base.currentBehaviourStateIndex) { case 0: base.targetNode = ((EnemyAI)this).ChooseClosestNodeToPosition(((Component)this).transform.position, false, 2); ((EnemyAI)this).SetDestinationToPosition(base.targetNode.position, false); break; case 1: if (((EnemyAI)this).TargetClosestPlayer(1.5f, false, 140f)) { if (Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position) < 5f && !standingIdle) { Vector3 randomNavMeshPositionInRadiusSpherical = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(((Component)base.targetPlayer).transform.position, 5f, default(NavMeshHit)); ((EnemyAI)this).SetDestinationToPosition(randomNavMeshPositionInRadiusSpherical, false); standingIdle = true; } else if (!standingIdle) { ((EnemyAI)this).SetMovingTowardsTargetPlayer(base.targetPlayer); } if (Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position) > 10f && standingIdle) { ((EnemyAI)this).SetMovingTowardsTargetPlayer(base.targetPlayer); standingIdle = false; } } else if (carryingPlayer) { ((EnemyAI)this).SetDestinationToPosition(((Component)chosenTrap).transform.position, true); } else { ((EnemyAI)this).SetDestinationToPosition(homeNode.position, true); } break; case 2: ((EnemyAI)this).SetMovingTowardsTargetPlayer(base.targetPlayer); break; } ((EnemyAI)this).DoAIInterval(); } public override void Update() { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_0094: 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_00c8: 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_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (base.isEnemyDead || inKillAnimation || (Object)(object)GameNetworkManager.Instance == (Object)null) { return; } if (!carryingPlayer) { carryingPlayerDebounce += Time.deltaTime; } hearNoiseCooldown -= Time.deltaTime; CalculateAlphaOpacity(); Vector3 val = Vector3.ClampMagnitude(((Component)this).transform.position - previousPosition, 1f); float num = ((Vector3)(ref val)).sqrMagnitude / (Time.deltaTime / 4f); base.creatureAnimator.SetFloat("speedMultiplier", num); previousPosition = ((Component)this).transform.position; switch (base.currentBehaviourStateIndex) { case 0: if (timeSincePlacingBondageTrap > 4f) { timeSincePlacingBondageTrap = Random.Range(0f, 1f); AttemptPlaceBondageTrap(); if (bondageTraps.Count >= maxBondageTrapsToPlace) { ((EnemyAI)this).SwitchToBehaviourServerRpc(1); } } else { timeSincePlacingBondageTrap += Time.deltaTime; } break; case 1: if (base.stunNormalizedTimer > 0f) { ReleasePlayer(); AddToArousalMeter(0.1f * Time.deltaTime); base.agent.speed = 0f; } if (carryingPlayer) { LookAtPlayerOfInterest(); base.agent.speed = Mathf.Clamp(base.agent.speed + Time.deltaTime * 7.25f, 4f, 10f); } else { LookAtPlayerOfInterest(); base.agent.speed = Mathf.Clamp(base.agent.speed + Time.deltaTime * 4.25f, 0f, 4f); } if (carryingPlayer && (Object)(object)chosenTrap != (Object)null && Vector3.Distance(((Component)this).transform.position, ((Component)chosenTrap).transform.position) < 3f) { PlayerControllerB player = playerBeingCarried; ReleasePlayer(); chosenTrap.Lock(player); } CheckKink(); CheckNoise(); break; case 2: base.agent.speed = 10f; enrageTimer -= Time.deltaTime; if (((NetworkBehaviour)this).IsOwner && enrageTimer <= 0f && !carryingPlayer) { ((EnemyAI)this).SwitchToBehaviourState(1); } break; } } private void LateUpdate() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerBeingCarried != (Object)null) { ((Component)playerBeingCarried).transform.position = holdPlayerPoint.position; ((Component)playerBeingCarried).transform.rotation = holdPlayerPoint.rotation; } } private void CalculateAlphaOpacity() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) Color color = ((Renderer)mesh).material.color; float num = Math.Clamp(arousalMeter * 0.001f, 0f, 0.1f); ((Renderer)mesh).material.color = new Color(color.r, color.g, color.b, num); if (base.currentBehaviourStateIndex == 2) { ((Renderer)mesh).material.color = new Color(color.r, color.g, color.b, 1f); } } public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesNoisePlayedInOneSpot = 0, int noiseID = 0) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) if (currentKink != Kink.Auralism || base.currentBehaviourStateIndex == 2) { return; } ((EnemyAI)this).DetectNoise(noisePosition, noiseLoudness, timesNoisePlayedInOneSpot, noiseID); if (base.stunNormalizedTimer > 0f || noiseID == 7 || noiseID == 6 || noiseID == 546 || inKillAnimation || hearNoiseCooldown >= 0f || timesNoisePlayedInOneSpot > 15) { return; } float num = Vector3.Distance(((Component)this).transform.position, noisePosition); if (!(num > 15f)) { Debug.Log((object)$"Oji-san '{((Object)((Component)this).gameObject).name}': Heard noise! Distance: {num} meters"); Debug.Log((object)$"Oji-san '{((Object)((Component)this).gameObject).name}': Noise ID: {noiseID}"); if (Physics.Linecast(((Component)this).transform.position, noisePosition, 256)) { noiseLoudness /= 2f; } if (!(noiseLoudness < 0.25f)) { AddToArousalMeter(10f); hearNoiseCooldown = 1f; } } } private void LookAtPlayerOfInterest() { //IL_0056: 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_008c: 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_00a1: Unknown result type (might be due to invalid IL or missing references) if (base.currentBehaviourStateIndex == 2) { lookAtPlayer = base.targetPlayer; } else { lookAtPlayer = ((EnemyAI)this).GetClosestPlayer(false, false, false); } if ((Object)(object)lookAtPlayer != (Object)null) { turnCompass.LookAt(((Component)lookAtPlayer.gameplayCamera).transform.position); ((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(new Vector3(0f, turnCompass.eulerAngles.y, 0f)), 30f * Time.deltaTime); } } private void CheckKink() { //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_0149: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB val = ((EnemyAI)this).CheckLineOfSightForClosestPlayer(360f, 15, 5, 1f); if ((Object)(object)val != (Object)null) { AddToArousalMeter(1f * Time.deltaTime); switch (currentKink) { case Kink.Voyeurism: { PlayerControllerB[] allPlayersInLineOfSight = ((EnemyAI)this).GetAllPlayersInLineOfSight(90f, 15, base.eye, -1f, StartOfRound.Instance.collidersAndRoomMaskAndDefault); if (allPlayersInLineOfSight != null) { AddToArousalMeter((float)allPlayersInLineOfSight.Length * Time.deltaTime); } break; } case Kink.Exhibitionism: { int num = StartOfRound.Instance.allPlayerScripts.Length; for (int i = 0; i < num; i++) { if (((EnemyAI)this).PlayerIsTargetable(StartOfRound.Instance.allPlayerScripts[i], false, false) && StartOfRound.Instance.allPlayerScripts[i].HasLineOfSightToPosition(((Component)this).transform.position + Vector3.up * 1.6f, 68f, 15, -1f) && Vector3.Distance(((Component)StartOfRound.Instance.allPlayerScripts[i].gameplayCamera).transform.position, base.eye.position) > 0.3f) { AddToArousalMeter(3f * Time.deltaTime); } } break; } case Kink.Auralism: break; } } else { AddToArousalMeter(-0.5f * Time.deltaTime); } } private void AddToArousalMeter(float amount) { if (!(arousalMeter + amount < arousalCurrentThreshold) && !carryingPlayer) { CheckArousalThreshhold(); arousalMeter += amount; if (arousalMeter >= arousalMaxThreshhold && ChooseUnoccupiedTrap()) { Debug.Log((object)$"Oji-san '{((Object)((Component)this).gameObject).name}': Threshhold reached, enraging"); arousalMeter = 0f; arousalCurrentThreshold = 0f; arousalMaxThreshhold = Random.Range(80f, 120f); enrageTimer = Random.Range(10f, 15f); ((EnemyAI)this).SwitchToBehaviourServerRpc(2); } } } private void CheckArousalThreshhold() { for (int i = 0; i < arousalThresholds.Length; i++) { float num = arousalMaxThreshhold * arousalThresholds[arousalThresholds.Length - 1 - i]; if (arousalMeter >= num) { arousalCurrentThreshold = num; break; } } } [ServerRpc(RequireOwnership = false)] private void GrabPlayerServerRpc(int playerId) { GrabPlayerClientRpc(playerId); } [ClientRpc] private void GrabPlayerClientRpc(int playerId) { GrabPlayer(playerId); } private void GrabPlayer(int playerId) { //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) carryingPlayer = true; playerBeingCarried = StartOfRound.Instance.allPlayerScripts[playerId]; playerBeingCarried.DropAllHeldItems(true, false); playerBeingCarried.inSpecialInteractAnimation = true; playerBeingCarried.inAnimationWithEnemy = (EnemyAI)(object)this; base.creatureAnimator.SetBool("carryingPlayer", true); Debug.Log((object)$"Oji-san: grabbing player {playerBeingCarried.playerUsername}"); if ((Object)(object)playerBeingCarried.currentVoiceChatAudioSource == (Object)null) { StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects(); } if ((Object)(object)playerBeingCarried.currentVoiceChatAudioSource != (Object)null) { ((Component)playerBeingCarried.currentVoiceChatAudioSource).GetComponent<AudioLowPassFilter>().lowpassResonanceQ = 5f; OccludeAudio component = ((Component)playerBeingCarried.currentVoiceChatAudioSource).GetComponent<OccludeAudio>(); component.overridingLowPass = true; component.lowPassOverride = 700f; playerBeingCarried.voiceMuffledByEnemy = true; } if (carryingPlayer) { GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(1f, true); } if (Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)this).transform.position) < 15f) { GameNetworkManager.Instance.localPlayerController.JumpToFearLevel(0.3f, true); } ((EnemyAI)this).SwitchToBehaviourServerRpc(1); } [ServerRpc] private void ReleasePlayerServerRpc() { ReleasePlayerClientRpc(); } [ClientRpc] private void ReleasePlayerClientRpc() { ReleasePlayer(); } private void ReleasePlayer() { if (carryingPlayer) { if ((Object)(object)playerBeingCarried.currentVoiceChatAudioSource == (Object)null) { StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects(); } if ((Object)(object)playerBeingCarried.currentVoiceChatAudioSource != (Object)null) { ((Component)playerBeingCarried.currentVoiceChatAudioSource).GetComponent<AudioLowPassFilter>().lowpassResonanceQ = 1f; OccludeAudio component = ((Component)playerBeingCarried.currentVoiceChatAudioSource).GetComponent<OccludeAudio>(); component.overridingLowPass = false; component.lowPassOverride = 20000f; playerBeingCarried.voiceMuffledByEnemy = false; } carryingPlayerDebounce = 0f; playerBeingCarried.inSpecialInteractAnimation = false; playerBeingCarried.inAnimationWithEnemy = null; carryingPlayer = false; playerBeingCarried = null; base.creatureAnimator.SetBool("carryingPlayer", false); } } private void OnEnable() { ((UnityEvent<PlayerControllerB>)(object)StartOfRound.Instance.playerTeleportedEvent).AddListener((UnityAction<PlayerControllerB>)OnPlayerTeleport); } private void OnDisable() { ((UnityEvent<PlayerControllerB>)(object)StartOfRound.Instance.playerTeleportedEvent).RemoveListener((UnityAction<PlayerControllerB>)OnPlayerTeleport); } private void OnPlayerTeleport(PlayerControllerB playerTeleported) { if (carryingPlayer && !((Object)(object)playerBeingCarried != (Object)(object)playerTeleported)) { ReleasePlayer(); } } private void CheckNoise() { makeNoiseTimer -= Time.deltaTime; if (makeNoiseTimer <= 0f) { makeNoiseTimer = Random.Range(5f, 10f); if (Random.Range(0f, arousalMaxThreshhold) < arousalMeter) { MakeNoiseServerRpc(); } } } [ServerRpc] private void MakeNoiseServerRpc() { MakeNoiseClientRpc(); } [ClientRpc] private void MakeNoiseClientRpc() { MakeNoise(); } private void MakeNoise() { Debug.Log((object)"Oji-san: Playing sound"); RoundManager.PlayRandomClip(base.creatureVoice, base.enemyType.audioClips, true, 1f, 0, 1000); } private bool AttemptPlaceBondageTrap() { //IL_0017: 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_005a: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < bondageTraps.Count; i++) { if (Vector3.Distance(((Component)bondageTraps[i]).transform.position, ((Component)this).transform.position) < 3f) { return false; } } SpawnBondageTrapServerRpc(((Component)this).transform.position); return false; } [ServerRpc] private void SpawnBondageTrapServerRpc(Vector3 position) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) SpawnBondageTrapClientRpc(position); } [ClientRpc] private void SpawnBondageTrapClientRpc(Vector3 position) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_020c: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: 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_014e: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015f: 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_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(bondageTrapPrefab, position, Quaternion.identity, RoundManager.Instance.mapPropsContainer.transform); FatBastardBondageTrap componentInChildren = val.GetComponentInChildren<FatBastardBondageTrap>(); bondageTraps.Add(componentInChildren); componentInChildren.trapID = bondageTraps.Count - 1; componentInChildren.mainScript = this; Ray val2 = default(Ray); ((Ray)(ref val2))..ctor(val.transform.position, val.transform.forward); Vector3 position2 = val.transform.position; bool flag = false; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val2, ref val3, 0.1f, StartOfRound.Instance.playersMask) && !flag) { ((Ray)(ref val2)).origin = position2 + Vector3.forward; if (!Physics.Raycast(val2, ref val3, 0.1f, StartOfRound.Instance.playersMask)) { val.transform.position = position2 + Vector3.forward; flag = true; } ((Ray)(ref val2)).origin = position2 - Vector3.forward; if (!Physics.Raycast(val2, ref val3, 0.1f, StartOfRound.Instance.playersMask) && !flag) { val.transform.position = position2 - Vector3.forward; flag = true; } ((Ray)(ref val2)).origin = position2 + Vector3.right; if (!Physics.Raycast(val2, ref val3, 0.1f, StartOfRound.Instance.playersMask) && !flag) { val.transform.position = position2 + Vector3.right; flag = true; } ((Ray)(ref val2)).origin = position2 - Vector3.right; if (!Physics.Raycast(val2, ref val3, 0.1f, StartOfRound.Instance.playersMask) && !flag) { val.transform.position = position2 - Vector3.right; flag = true; } Debug.Log((object)((object)(RaycastHit)(ref val3)).ToString()); } if (Physics.Raycast(val2, ref val3, 2f, StartOfRound.Instance.playersMask)) { val.transform.Rotate(0f, 90f, 0f); Debug.Log((object)((object)(RaycastHit)(ref val3)).ToString()); } } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = true, int hitID = -1) { ((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, hitID); if (!base.isEnemyDead) { if (!base.inSpecialAnimation) { base.creatureAnimator.SetTrigger("Hurt"); } base.enemyHP -= force; if (base.enemyHP <= 0 && ((NetworkBehaviour)this).IsOwner) { ((EnemyAI)this).KillEnemyOnOwnerClient(false); } } } public override void KillEnemy(bool destroy = false) { ((EnemyAI)this).KillEnemy(false); } public override void OnCollideWithPlayer(Collider other) { if (base.currentBehaviourStateIndex == 2) { ((EnemyAI)this).OnCollideWithPlayer(other); PlayerControllerB val = ((EnemyAI)this).MeetsStandardPlayerCollisionConditions(other, carryingPlayer || carryingPlayerDebounce < 20f, false); if ((Object)(object)val != (Object)null && ChooseUnoccupiedTrap()) { GrabPlayerServerRpc((int)val.playerClientId); } } } private bool ChooseUnoccupiedTrap() { for (int i = 0; i < bondageTraps.Count; i++) { if (!bondageTraps[i].occupied) { chosenTrap = bondageTraps[i]; return true; } } chosenTrap = null; return false; } } public class FatBastardBondageTrap : MonoBehaviour { public FatBastardAI mainScript; public int trapID; public bool occupied; public PlayerControllerB trappedPlayer; private float trapDamageInterval = 3f; private DoorLock trapLock; private AudioClip zapSFX; private void Start() { zapSFX = Plugin.MainAssets.LoadAsset<AudioClip>("Assets/Scripts/Enemies/FatBastard/Zap1.mp3"); trapLock = ((Component)((Component)this).gameObject.transform.Find("cage").Find("interact")).GetComponent<DoorLock>(); ((Component)((Component)this).gameObject.transform.Find("cage").Find("interact")).tag = "InteractTrigger"; } private void OnEnable() { ((UnityEvent<PlayerControllerB>)(object)StartOfRound.Instance.playerTeleportedEvent).AddListener((UnityAction<PlayerControllerB>)OnPlayerTeleport); } private void OnDisable() { ((UnityEvent<PlayerControllerB>)(object)StartOfRound.Instance.playerTeleportedEvent).RemoveListener((UnityAction<PlayerControllerB>)OnPlayerTeleport); } private void OnPlayerTeleport(PlayerControllerB playerTeleported) { if (occupied && !((Object)(object)playerTeleported != (Object)(object)trappedPlayer)) { Unlock(); trapLock.UnlockDoorSyncWithServer(); } } public void Update() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) if (occupied) { if (trapDamageInterval <= 0f) { trappedPlayer.DamagePlayer(10, true, true, (CauseOfDeath)11, 0, false, default(Vector3)); trapDamageInterval = Random.Range(3f, 15f); trapLock.doorLockSFX.pitch = Random.Range(0.96f, 1.04f); trapLock.doorLockSFX.PlayOneShot(zapSFX); } else { trapDamageInterval -= Time.deltaTime; } } if ((Object)(object)trappedPlayer != (Object)null && !trapLock.isLocked) { Unlock(); } } public void Lock(PlayerControllerB player) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) occupied = true; trappedPlayer = player; trappedPlayer.inSpecialInteractAnimation = true; trappedPlayer.inAnimationWithEnemy = (EnemyAI)(object)mainScript; ((Component)trappedPlayer).transform.position = ((Component)this).transform.Find("holdPosition").position; trapLock.LockDoor(30f); } public void Unlock() { trappedPlayer.inSpecialInteractAnimation = false; trappedPlayer.inAnimationWithEnemy = null; occupied = false; trappedPlayer = null; trapLock.UnlockDoorSyncWithServer(); } } public class FatBastardLock : NetworkBehaviour { private InteractTrigger lockTrigger; public float maxTimeLeft = 60f; public float lockPickTimeLeft = 60f; public bool isLocked; public bool isPickingLock; [Space(5f)] public Transform lockPickerPosition; public Transform lockPickerPosition2; public AudioClip pickingLockSFX; public AudioClip unlockSFX; public AudioSource doorLockSFX; private bool displayedLockTip; private bool localPlayerPickingLock; private int playersPickingDoor; private float playerPickingLockProgress; public void Awake() { lockTrigger = ((Component)this).gameObject.AddComponent<InteractTrigger>(); lockPickerPosition = ((Component)this).transform; lockPickerPosition2 = ((Component)this).transform; } public void Unlock() { doorLockSFX.Stop(); doorLockSFX.PlayOneShot(unlockSFX); if (isLocked) { isLocked = false; } } public void Lock() { isLocked = true; } [ServerRpc] public void UnlockServerRpc() { UnlockClientRpc(); } [ClientRpc] public void UnlockClientRpc() { Unlock(); } public void UnlockSyncWithServer() { if (isLocked) { Unlock(); UnlockServerRpc(); } } private void Update() { if (isLocked) { if ((Object)(object)GameNetworkManager.Instance == (Object)null || (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) { return; } if ((Object)(object)GameNetworkManager.Instance.localPlayerController.currentlyHeldObjectServer != (Object)null && GameNetworkManager.Instance.localPlayerController.currentlyHeldObjectServer.itemProperties.itemId == 14) { if (StartOfRound.Instance.localPlayerUsingController) { lockTrigger.disabledHoverTip = "Use key: [R-trigger]"; } else { lockTrigger.disabledHoverTip = "Use key: [ LMB ]"; } } else { lockTrigger.disabledHoverTip = "Locked"; } if (playersPickingDoor > 0) { playerPickingLockProgress = Mathf.Clamp(playerPickingLockProgress + (float)playersPickingDoor * 0.85f * Time.deltaTime, 1f, 3.5f); } lockTrigger.timeToHoldSpeedMultiplier = Mathf.Clamp((float)playersPickingDoor * 0.85f, 1f, 3.5f); } if (isLocked && isPickingLock) { lockPickTimeLeft -= Time.deltaTime; lockTrigger.disabledHoverTip = $"Picking lock: {(int)lockPickTimeLeft} sec."; if (((NetworkBehaviour)this).IsServer && lockPickTimeLeft < 0f) { Unlock(); UnlockServerRpc(); } } } public static implicit operator DoorLock(FatBastardLock v) { return v; } } public class YandereAI : EnemyAI { private int timesOshiLeftDungeon; private float timeOshiAwayFromDungeon; private bool oshiReturned; private bool oshiDead; private PlayerControllerB oshi; public override void Start() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown ((EnemyAI)this).Start(); Debug.Log((object)"Oji-san: Starting YandereAI"); for (int i = 0; i < 3; i++) { EnemyBehaviourState val = new EnemyBehaviourState(); val.name = i.ToString(); val.playOneShotSFX = false; val.playOneShotVoice = false; base.enemyBehaviourStates = CollectionExtensions.AddToArray<EnemyBehaviourState>(base.enemyBehaviourStates, val); } base.currentBehaviourStateIndex = 0; base.creatureVoice = ((Component)this).GetComponent<AudioSource>(); ChooseOshi(); } public override void DoAIInterval() { ((EnemyAI)this).DoAIInterval(); if (StartOfRound.Instance.livingPlayers != 0 && !base.isEnemyDead && base.currentBehaviourStateIndex == 0) { } } public override void Update() { ((EnemyAI)this).Update(); if (!base.isEnemyDead) { } } private void ChooseOshi() { PlayerControllerB[] allPlayerScripts = RoundManager.Instance.playersManager.allPlayerScripts; oshi = allPlayerScripts[0]; } private void CheckOshi() { if (!oshiDead && oshi.isPlayerDead) { oshiDead = true; ((EnemyAI)this).SwitchToBehaviourState(4); } if (!oshi.isInsideFactory && oshiReturned) { oshiReturned = false; timesOshiLeftDungeon++; } else if (oshi.isInsideFactory && !oshiReturned) { oshiReturned = true; } if (!oshi.isInsideFactory) { timeOshiAwayFromDungeon += Time.deltaTime; } } } public class MagicGirlAI : NetworkBehaviour { } public static class PluginInfo { public const string PLUGIN_GUID = "OtakuCompany"; public const string PLUGIN_NAME = "OtakuCompany"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace OtakuCompany.Patches { [HarmonyPatch(typeof(KeyItem))] internal class KeyItemPatch { [HarmonyPatch("ItemActivate")] [HarmonyPostfix] private static void ItemActivatePatch(ref KeyItem __instance) { //IL_0012: 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) //IL_002d: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Ray(((Component)((GrabbableObject)__instance).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)__instance).playerHeldBy.gameplayCamera).transform.forward), ref val, 3f, 2816)) { FatBastardLock component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<FatBastardLock>(); if ((Object)(object)component != (Object)null && component.isLocked && !component.isPickingLock) { component.UnlockSyncWithServer(); ((GrabbableObject)__instance).playerHeldBy.DespawnHeldObject(); } } } } [HarmonyPatch(typeof(LockPicker))] internal class LockPickerPatch { [HarmonyPatch("ItemActivate")] [HarmonyPostfix] private static void ItemActivatePatch(ref LockPicker __instance) { //IL_0012: 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) //IL_002d: 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_00ad: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Ray(((Component)((GrabbableObject)__instance).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)__instance).playerHeldBy.gameplayCamera).transform.forward), ref val, 3f, 2816)) { FatBastardLock component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<FatBastardLock>(); if ((Object)(object)component != (Object)null && component.isLocked && !component.isPickingLock) { ((GrabbableObject)__instance).playerHeldBy.DiscardHeldObject(true, ((NetworkBehaviour)component).NetworkObject, component.lockPickerPosition.localPosition, true); Debug.Log((object)"discard held object called from lock picker"); __instance.PlaceLockPickerServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)component).NetworkObject), true); __instance.PlaceOnDoor((DoorLock)component, true); } } } } }