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 Be A Bot v1.1.1
EmpressBotPlayers.dll
Decompiled 4 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("Omniscye")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EmpressBotPlayers")] [assembly: AssemblyTitle("EmpressBotPlayers")] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Empress.PlayerBot { [HarmonyPatch(typeof(InputManager))] public static class BotInputPatches { [HarmonyPatch("GetMovementX")] [HarmonyPrefix] public static bool MoveX(ref float __result) { if (!PlayerIsBotComplete.IsActive) { return true; } __result = PlayerIsBotComplete.MoveInput.x; return false; } [HarmonyPatch("GetMovementY")] [HarmonyPrefix] public static bool MoveY(ref float __result) { if (!PlayerIsBotComplete.IsActive) { return true; } __result = PlayerIsBotComplete.MoveInput.y; return false; } [HarmonyPatch("GetMouseX")] [HarmonyPrefix] public static bool LookX(ref float __result) { if (!PlayerIsBotComplete.IsActive) { return true; } __result = PlayerIsBotComplete.LookInput.x; return false; } [HarmonyPatch("GetMouseY")] [HarmonyPrefix] public static bool LookY(ref float __result) { if (!PlayerIsBotComplete.IsActive) { return true; } __result = PlayerIsBotComplete.LookInput.y; return false; } [HarmonyPatch("KeyHold")] [HarmonyPrefix] public static bool KeyHold(InputKey key, ref bool __result) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Invalid comparison between Unknown and I4 //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Invalid comparison between Unknown and I4 if (!PlayerIsBotComplete.IsActive) { return true; } if ((int)key == 1) { __result = PlayerIsBotComplete.InputJump; return false; } if ((int)key == 2) { __result = PlayerIsBotComplete.InputInteract; return false; } if ((int)key == 4) { __result = PlayerIsBotComplete.InputThrow; return false; } if ((int)key == 10) { __result = PlayerIsBotComplete.InputGrab; return false; } if ((int)key == 15) { __result = PlayerIsBotComplete.InputSprint; return false; } return true; } [HarmonyPatch("KeyDown")] [HarmonyPrefix] public static bool KeyDown(InputKey key, ref bool __result) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Invalid comparison between Unknown and I4 //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Invalid comparison between Unknown and I4 if (!PlayerIsBotComplete.IsActive) { return true; } if ((int)key == 1) { __result = PlayerIsBotComplete.InputJump; return false; } if ((int)key == 2) { __result = PlayerIsBotComplete.InputInteract; return false; } if ((int)key == 4) { __result = PlayerIsBotComplete.InputThrow; return false; } if ((int)key == 10) { __result = PlayerIsBotComplete.InputGrab; return false; } if ((int)key == 15) { __result = PlayerIsBotComplete.InputSprint; return false; } return true; } } public class PlayerBotBrain : MonoBehaviour { public enum State { Initializing, Wandering, ChasingLoot, Grabbing, CarryingToTruck, GoingToTruck, StartingEngine, WaitingForActivation } private PlayerController _player; private State _currentState = State.Initializing; private PhysGrabObject _targetLoot; private PhysGrabObject _lastTargetLoot; private ExtractionPoint _targetExtractor; private float _chaseTimer; private int _lastActivateId; private float _lastActivateTime; private float _grabAttemptTimer; private float _truckInteractTimer; private float _extractorActivationTimer; private string _debugStatus = "Initializing..."; private bool _reachedTruck; private float _retargetTimer; private float _waitingForActivationTimer; public Transform CamTr { get; private set; } public PlayerBotNavigation Navigation { get; private set; } public PlayerBotLootScanner LootScanner { get; private set; } public PlayerBotCarryController CarryController { get; private set; } public PlayerBotExtractionController ExtractionController { get; private set; } public PlayerBotCombatController CombatController { get; private set; } private void Start() { PlayerIsBotComplete.Log.LogInfo((object)"BotBrain: Start() called."); _player = ((Component)this).GetComponent<PlayerController>(); Camera val = ((Component)this).GetComponentInChildren<Camera>(); if (!Object.op_Implicit((Object)(object)val)) { val = Camera.main; } if (Object.op_Implicit((Object)(object)val)) { CamTr = ((Component)val).transform; } else { CamTr = ((Component)this).transform; } Navigation = new PlayerBotNavigation(this); LootScanner = new PlayerBotLootScanner(this); CarryController = new PlayerBotCarryController(this); ExtractionController = new PlayerBotExtractionController(this); CombatController = new PlayerBotCombatController(this); ((MonoBehaviour)this).StartCoroutine(InitLevelData()); } private void OnDisable() { PlayerIsBotComplete.IsActive = false; if (CarryController != null && Object.op_Implicit((Object)(object)CarryController.CarriedItem)) { CarryController.ReleaseItem(immediate: true); } } private void OnGUI() { //IL_0001: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_024f: 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) GUI.color = Color.cyan; GUI.skin.label.fontStyle = (FontStyle)1; GUI.skin.box.fontStyle = (FontStyle)1; GUI.Box(new Rect(10f, 10f, 300f, 200f), "BOT BRAIN v5.1 (EMP-7.1 Logic)"); GUI.Label(new Rect(20f, 35f, 280f, 20f), $"State: {_currentState}"); GUI.Label(new Rect(20f, 50f, 280f, 20f), "Target: " + (Object.op_Implicit((Object)(object)_targetLoot) ? ((Object)_targetLoot).name : "None")); GUI.Label(new Rect(20f, 65f, 280f, 20f), "Carrying: " + (Object.op_Implicit((Object)(object)CarryController.CarriedItem) ? ((Object)CarryController.CarriedItem).name : "None")); GUI.Label(new Rect(20f, 80f, 280f, 20f), $"Stuck: {Navigation.StuckTimer:F1}"); GUI.Label(new Rect(20f, 95f, 280f, 20f), "Status: " + _debugStatus); GUI.Label(new Rect(20f, 110f, 280f, 20f), $"Carry Time: {CarryController.CarryTimer:F1}s"); GUI.Label(new Rect(20f, 125f, 280f, 20f), $"Reached Truck: {_reachedTruck}"); string text = ((Object.op_Implicit((Object)(object)CarryController.Grabber) && Object.op_Implicit((Object)(object)CarryController.Grabber.grabbedObject)) ? ((Object)CarryController.Grabber.grabbedObject).name : "Nothing"); GUI.Label(new Rect(20f, 155f, 280f, 20f), "Hand: " + text); GUI.Label(new Rect(20f, 170f, 280f, 20f), $"Inputs Locked: {PlayerIsBotComplete.IsActive}"); GUI.skin.label.fontStyle = (FontStyle)0; GUI.skin.box.fontStyle = (FontStyle)0; } public void SetDebugStatus(string status) { _debugStatus = status; } private IEnumerator InitLevelData() { _debugStatus = "Waiting for LevelGen..."; while ((Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated) { yield return (object)new WaitForSeconds(1f); } _debugStatus = "Waiting for NavMesh..."; yield return (object)new WaitForSeconds(1f); bool placed = false; while (!placed) { if (Navigation.TryPlaceOnNavMesh(((Component)this).transform.position)) { placed = true; _debugStatus = "Ready"; PlayerIsBotComplete.IsActive = true; PlayerIsBotComplete.Log.LogInfo((object)"BotBrain: Agent placed. ACTIVATING."); } else { _debugStatus = "Retrying NavMesh..."; yield return (object)new WaitForSeconds(2f); } } Navigation.BuildGlobalTargets(); Navigation.PickWanderDest(); } private void Update() { //IL_002c: 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) if ((Object)(object)Navigation.Agent == (Object)null) { return; } Navigation.Agent.nextPosition = ((Component)this).transform.position; if (!Navigation.Agent.isOnNavMesh) { Navigation.TryPlaceOnNavMesh(((Component)this).transform.position); return; } LootScanner.UpdateTimers(); ExtractionController.Update(); CombatController.UpdateCombat(); UpdateDecisions(); Navigation.UpdateMovement(); UpdateAiming(); if (Object.op_Implicit((Object)(object)CarryController.CarriedItem)) { CarryController.KeepItemAttached(); } } private void UpdateDecisions() { //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0494: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_07bc: Unknown result type (might be due to invalid IL or missing references) //IL_0630: Unknown result type (might be due to invalid IL or missing references) //IL_0640: Unknown result type (might be due to invalid IL or missing references) //IL_0708: Unknown result type (might be due to invalid IL or missing references) //IL_0560: Unknown result type (might be due to invalid IL or missing references) //IL_056b: Unknown result type (might be due to invalid IL or missing references) //IL_0575: Unknown result type (might be due to invalid IL or missing references) //IL_057a: Unknown result type (might be due to invalid IL or missing references) PlayerIsBotComplete.InputSprint = false; if (Object.op_Implicit((Object)(object)_player) && _player.EnergyStart > 0f) { float num = _player.EnergyCurrent / _player.EnergyStart; if (num >= 0.5f) { bool flag = Navigation.Agent.hasPath && !Navigation.Agent.pathPending; float remainingDistance = Navigation.Agent.remainingDistance; if (flag && remainingDistance > 5f) { Vector3 val = Navigation.Agent.steeringTarget - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Vector3.Angle(((Component)this).transform.forward, normalized) < 20f) { PlayerIsBotComplete.InputSprint = true; } } } } if (_currentState == State.WaitingForActivation) { _waitingForActivationTimer += Time.deltaTime; if (!Object.op_Implicit((Object)(object)_targetExtractor)) { _currentState = State.Wandering; _waitingForActivationTimer = 0f; } else if (Object.op_Implicit((Object)(object)RoundDirector.instance) && RoundDirector.instance.extractionPointActive && (Object)(object)RoundDirector.instance.extractionPointCurrent == (Object)(object)_targetExtractor) { _currentState = State.Wandering; _targetExtractor = null; _debugStatus = "Extractor Activated! Resuming..."; _waitingForActivationTimer = 0f; Navigation.PickWanderDest(); } else if (_waitingForActivationTimer > 3f) { _debugStatus = "Activation wait complete, resuming..."; _currentState = State.Wandering; _targetExtractor = null; _waitingForActivationTimer = 0f; Navigation.PickWanderDest(); } else { Navigation.Agent.ResetPath(); } return; } if ((Object)(object)CarryController.CarriedItem != (Object)null) { _currentState = State.CarryingToTruck; _chaseTimer = 0f; CarryController.UpdateCarryTimer(); ExtractionPoint targetEP = null; Vector3 goal; bool flag2 = TryResolveDeliveryTarget(out goal, out targetEP); if (!flag2) { ExtractionPoint val2 = SemiFunc.ExtractionPointGetNearest(((Component)this).transform.position); if (Object.op_Implicit((Object)(object)val2)) { targetEP = val2; goal = ((Component)val2).transform.position; flag2 = true; } } if (flag2) { Navigation.SetDestination(goal); Navigation.Agent.stoppingDistance = 0.5f; } float num2 = Vector3.Distance(((Component)this).transform.position, goal); if (num2 <= 3f && !CarryController.IsDropping) { if (Object.op_Implicit((Object)(object)targetEP) && !IsDeliveryDropAllowed(targetEP)) { _debugStatus = "Dropping item to activate extractor..."; CarryController.ReleaseItem(immediate: false); TryActivateExtraction(targetEP); _targetExtractor = targetEP; _currentState = State.WaitingForActivation; _waitingForActivationTimer = 0f; ExtractionController.StartActivation(targetEP); return; } if (IsDeliveryDropAllowed(targetEP) || Time.time < ExtractionController.ActivationGraceUntil || CarryController.CarryTimer > 12f) { _debugStatus = "Dropping item into chute..."; CarryController.StartDrop(targetEP); } } PlayerIsBotComplete.InputInteract = false; return; } PlayerIsBotComplete.InputThrow = false; PlayerIsBotComplete.InputInteract = false; bool flag3 = false; if (Object.op_Implicit((Object)(object)RoundDirector.instance) && RoundDirector.instance.allExtractionPointsCompleted) { flag3 = true; } bool flag4 = false; if (!PhotonNetwork.InRoom || PhotonNetwork.CurrentRoom.PlayerCount <= 1) { flag4 = true; } if (flag4) { if (SemiFunc.RunIsShop()) { flag3 = true; } if (!SemiFunc.RunIsLevel()) { flag3 = true; } } if (flag3) { _currentState = State.GoingToTruck; _targetLoot = null; _chaseTimer = 0f; Vector3 truckDestination = Navigation.GetTruckDestination(); Navigation.SetDestination(truckDestination); Navigation.Agent.stoppingDistance = 1.5f; float num3 = Vector3.Distance(((Component)this).transform.position, truckDestination); if (num3 <= 3f && !_reachedTruck) { _reachedTruck = true; _truckInteractTimer = 0f; _debugStatus = "At truck, looking for screen..."; } if (_reachedTruck && Object.op_Implicit((Object)(object)TruckScreenText.instance)) { _currentState = State.StartingEngine; _debugStatus = "Interacting with truck screen..."; if (_truckInteractTimer > 8f) { _reachedTruck = false; _truckInteractTimer = 0f; Navigation.TryPlaceOnNavMesh(((Component)this).transform.position - ((Component)this).transform.forward * 2f); _debugStatus = "Retrying Screen Approach..."; } } } else if ((Object)(object)_targetLoot != (Object)null) { if ((Object)(object)_targetLoot != (Object)(object)_lastTargetLoot) { _lastTargetLoot = _targetLoot; _chaseTimer = 0f; } if (!((Component)_targetLoot).gameObject.activeInHierarchy || (Object)(object)_targetLoot.rb == (Object)null || SemiFunc.PhysGrabObjectIsGrabbed(_targetLoot)) { _targetLoot = null; _currentState = State.Wandering; return; } float num4 = Vector3.Distance(((Component)this).transform.position, ((Component)_targetLoot).transform.position); if (num4 < 2.5f) { _currentState = State.Grabbing; _chaseTimer = 0f; Navigation.Agent.ResetPath(); _grabAttemptTimer += Time.deltaTime; if (_grabAttemptTimer > 3f) { LootScanner.IgnorePermanent(((Object)_targetLoot).GetInstanceID()); _targetLoot = null; _grabAttemptTimer = 0f; Navigation.PickWanderDest(); } return; } _currentState = State.ChasingLoot; _grabAttemptTimer = 0f; Navigation.SetDestination(((Component)_targetLoot).transform.position); _chaseTimer += Time.deltaTime; if (_chaseTimer > 15f) { PlayerIsBotComplete.Log.LogWarning((object)("BotBrain: Chase timeout! Abandoning '" + ((Object)_targetLoot).name + "'.")); LootScanner.IgnorePermanent(((Object)_targetLoot).GetInstanceID()); _targetLoot = null; _lastTargetLoot = null; _chaseTimer = 0f; Navigation.PickWanderDest(); } } else { PhysGrabObject val3 = LootScanner.ScanForLoot(((Component)this).transform.position, Navigation.SpawnTruckPos); if ((Object)(object)val3 != (Object)null) { _targetLoot = val3; } _currentState = State.Wandering; _chaseTimer = 0f; _retargetTimer -= Time.deltaTime; bool flag5 = !Navigation.Agent.pathPending && Navigation.Agent.remainingDistance <= Navigation.Agent.stoppingDistance + 1f; if (_retargetTimer <= 0f || flag5) { Navigation.PickWanderDest(); _retargetTimer = Random.Range(3f, 8f); } } } private bool TryResolveDeliveryTarget(out Vector3 goal, out ExtractionPoint targetEP) { //IL_0008: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) goal = ((Component)this).transform.position; targetEP = null; try { if (Object.op_Implicit((Object)(object)RoundDirector.instance)) { if (RoundDirector.instance.allExtractionPointsCompleted) { goal = Navigation.GetTruckDestination(); return true; } if (RoundDirector.instance.extractionPointActive && Object.op_Implicit((Object)(object)RoundDirector.instance.extractionPointCurrent)) { targetEP = RoundDirector.instance.extractionPointCurrent; goal = ((Component)targetEP).transform.position; return true; } ExtractionPoint val = SemiFunc.ExtractionPointGetNearestNotActivated(((Component)this).transform.position); if (Object.op_Implicit((Object)(object)val)) { targetEP = val; goal = ((Component)val).transform.position; return true; } } } catch { } return false; } private bool IsDeliveryDropAllowed(ExtractionPoint targetEP) { try { if ((Object)(object)targetEP != (Object)null && (Object)(object)targetEP.spotlight1 != (Object)null && ((Behaviour)targetEP.spotlight1).enabled) { return true; } if (Object.op_Implicit((Object)(object)RoundDirector.instance)) { if (RoundDirector.instance.allExtractionPointsCompleted) { return true; } if ((Object)(object)targetEP == (Object)null) { return false; } return RoundDirector.instance.extractionPointActive && (Object)(object)RoundDirector.instance.extractionPointCurrent == (Object)(object)targetEP; } } catch { } return true; } private void TryActivateExtraction(ExtractionPoint ep) { if (!Object.op_Implicit((Object)(object)ep)) { return; } int instanceID = ((Object)ep).GetInstanceID(); if (_lastActivateId == instanceID && Time.time - _lastActivateTime < 0.75f) { return; } _lastActivateId = instanceID; _lastActivateTime = Time.time; try { ep.OnClick(); } catch { } } private void UpdateAiming() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0065: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_008d: 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_024c: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029c: 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_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_043d: Unknown result type (might be due to invalid IL or missing references) //IL_0448: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Unknown result type (might be due to invalid IL or missing references) //IL_0452: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) PlayerIsBotComplete.LookInput = Vector2.zero; PlayerIsBotComplete.InputInteract = false; PlayerIsBotComplete.InputGrab = false; Vector3 val2; if (_currentState == State.WaitingForActivation) { _debugStatus = "Waiting for extractor activation..."; } else if (_currentState == State.Grabbing && (Object)(object)_targetLoot != (Object)null) { Vector3 val = ((Component)_targetLoot).transform.position; Collider component = ((Component)_targetLoot).GetComponent<Collider>(); if (Object.op_Implicit((Object)(object)component)) { Bounds bounds = component.bounds; val = ((Bounds)(ref bounds)).center; } val2 = val - CamTr.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; Vector3 forward = CamTr.forward; val2 = new Vector3(forward.x, 0f, forward.z); Vector3 normalized2 = ((Vector3)(ref val2)).normalized; val2 = new Vector3(normalized.x, 0f, normalized.z); Vector3 normalized3 = ((Vector3)(ref val2)).normalized; float num = Vector3.SignedAngle(normalized2, normalized3, Vector3.up); float num2 = Mathf.Asin(normalized.y) * 57.29578f - Mathf.Asin(forward.y) * 57.29578f; float x = Mathf.Clamp(num / 15f, -1f, 1f); float y = Mathf.Clamp(num2 / 15f, -1f, 1f); if (Mathf.Abs(num) > 1f) { PlayerIsBotComplete.LookInput.x = x; } if (Mathf.Abs(num2) > 1f) { PlayerIsBotComplete.LookInput.y = y; } _debugStatus = $"Aiming: Y={num:F1}° P={num2:F1}°"; float num3 = Vector3.Angle(forward, normalized); if (num3 < 15f && CarryController.CanReachTarget(_targetLoot)) { CarryController.PickUpItem(_targetLoot); _targetLoot = null; _grabAttemptTimer = 0f; } } else if (_currentState == State.StartingEngine && Object.op_Implicit((Object)(object)TruckScreenText.instance)) { Vector3 position = ((Component)TruckScreenText.instance).transform.position; if (Object.op_Implicit((Object)(object)TruckScreenText.instance.staticGrabCollider)) { position = TruckScreenText.instance.staticGrabCollider.transform.position; } val2 = position - CamTr.position; Vector3 normalized4 = ((Vector3)(ref val2)).normalized; Vector3 forward2 = CamTr.forward; val2 = new Vector3(forward2.x, 0f, forward2.z); Vector3 normalized5 = ((Vector3)(ref val2)).normalized; val2 = new Vector3(normalized4.x, 0f, normalized4.z); Vector3 normalized6 = ((Vector3)(ref val2)).normalized; float num4 = Vector3.SignedAngle(normalized5, normalized6, Vector3.up); float num5 = Mathf.Asin(normalized4.y) * 57.29578f - Mathf.Asin(forward2.y) * 57.29578f; float x2 = Mathf.Clamp(num4 / 15f, -1f, 1f); float y2 = Mathf.Clamp(num5 / 15f, -1f, 1f); if (Mathf.Abs(num4) > 1f) { PlayerIsBotComplete.LookInput.x = x2; } if (Mathf.Abs(num5) > 1f) { PlayerIsBotComplete.LookInput.y = y2; } float num6 = Vector3.Angle(forward2, normalized4); _debugStatus = $"Starting Engine... Angle: {num6:F1}°"; _truckInteractTimer += Time.deltaTime; if (num6 < 30f) { PlayerIsBotComplete.InputGrab = true; if (_truckInteractTimer > 2f) { _debugStatus = "Held grab, starting..."; } } } else if (Navigation.Agent.hasPath && !Navigation.Agent.pathPending) { val2 = Navigation.Agent.steeringTarget - ((Component)this).transform.position; Vector3 normalized7 = ((Vector3)(ref val2)).normalized; normalized7.y = 0f; if (normalized7 != Vector3.zero) { float num7 = Vector3.SignedAngle(((Component)this).transform.forward, normalized7, Vector3.up); float num8 = Mathf.Clamp(num7 / 45f, -1f, 1f) * 1.5f; PlayerIsBotComplete.LookInput = new Vector2(num8, 0f); } } } } public class PlayerBotCarryController { private PlayerBotBrain _brain; private Transform _holdPoint; private Rigidbody _carriedRB; private List<Collider> _carriedCols = new List<Collider>(); private Collider[] _myCols; public PhysGrabber Grabber { get; private set; } public PhysGrabObject CarriedItem { get; private set; } public float CarryTimer { get; private set; } public bool IsDropping { get; private set; } public PlayerBotCarryController(PlayerBotBrain brain) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) _brain = brain; Grabber = ((Component)brain).GetComponentInChildren<PhysGrabber>(); _holdPoint = new GameObject("BotHoldPoint").transform; _holdPoint.SetParent(((Component)brain).transform, false); _holdPoint.localPosition = new Vector3(0f, 1f, 0.6f); _holdPoint.localRotation = Quaternion.identity; _myCols = ((Component)brain).GetComponentsInChildren<Collider>(true); } public void UpdateCarryTimer() { CarryTimer += Time.deltaTime; } public bool CanReachTarget(PhysGrabObject target) { //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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) Vector3 position = _holdPoint.position; float num = Vector3.Distance(position, ((Component)target).transform.position); return num < 2f; } public void PickUpItem(PhysGrabObject item) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)item) || (Object)(object)CarriedItem != (Object)null) { return; } CarriedItem = item; _carriedRB = item.rb; try { ((Component)item).transform.SetParent((Transform)null, true); if (Object.op_Implicit((Object)(object)_carriedRB)) { _carriedRB.velocity = Vector3.zero; _carriedRB.angularVelocity = Vector3.zero; _carriedRB.isKinematic = true; } item.OverrideKnockOutOfGrabDisable(2f); } catch { } SetCarryCollisionIgnore(ignore: true); CarryTimer = 0f; _brain.ExtractionController.ResetGrace(); _brain.SetDebugStatus("Picked up item!"); } public void KeepItemAttached() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)CarriedItem)) { Transform transform = ((Component)CarriedItem).transform; if ((Object)(object)transform.parent != (Object)(object)_holdPoint) { transform.SetParent(_holdPoint, false); } transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; } } public void ReleaseItem(bool immediate, bool addForce = false) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00cf: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)CarriedItem)) { return; } PhysGrabObject carriedItem = CarriedItem; int instanceID = ((Object)carriedItem).GetInstanceID(); _brain.LootScanner.IgnoreTemp(instanceID, 5f); try { ((Component)carriedItem).transform.SetParent((Transform)null, true); if (Object.op_Implicit((Object)(object)_carriedRB)) { _carriedRB.isKinematic = false; _carriedRB.velocity = Vector3.zero; _carriedRB.angularVelocity = Vector3.zero; } } catch { } SetCarryCollisionIgnore(ignore: false); Vector3 position = ((Component)carriedItem).transform.position + ((Component)_brain).transform.forward * 0.8f; ((Component)carriedItem).transform.position = position; if (addForce && Object.op_Implicit((Object)(object)_carriedRB)) { _carriedRB.AddForce(((Component)_brain).transform.forward * 4f, (ForceMode)1); } CarriedItem = null; _carriedRB = null; CarryTimer = 0f; _brain.ExtractionController.ResetGrace(); _brain.SetDebugStatus("Dropped item"); } public void StartDrop(ExtractionPoint activeEP) { IsDropping = true; ((MonoBehaviour)_brain).StartCoroutine(DropGently(activeEP)); } private IEnumerator DropGently(ExtractionPoint activeEP) { if (!Object.op_Implicit((Object)(object)CarriedItem)) { IsDropping = false; yield break; } PhysGrabObject released = CarriedItem; Transform tform = ((Component)released).transform; try { tform.SetParent((Transform)null, true); } catch { } Vector3 start = tform.position; Vector3 val; Vector3 val2; if (!Object.op_Implicit((Object)(object)activeEP)) { val = ((Component)_brain).transform.forward; } else { val2 = (((Component)activeEP).transform.position - ((Component)_brain).transform.position).WithY(0f); val = ((Vector3)(ref val2)).normalized; } Vector3 fwd = val; if (((Vector3)(ref fwd)).sqrMagnitude < 0.0001f) { fwd = ((Component)_brain).transform.forward; } Vector3 end = start + fwd * 0.6f + Vector3.down * 0.3f; float t = 0f; float dur = 0.25f; while (t < dur && Object.op_Implicit((Object)(object)CarriedItem)) { t += Time.deltaTime; float a = Mathf.Clamp01(t / dur); tform.position = Vector3.Lerp(start, end, a); tform.rotation = Quaternion.Slerp(tform.rotation, Quaternion.identity, a * 0.5f); yield return null; } try { if (Object.op_Implicit((Object)(object)_carriedRB)) { _carriedRB.isKinematic = false; _carriedRB.detectCollisions = true; if ((int)_carriedRB.collisionDetectionMode == 0) { _carriedRB.collisionDetectionMode = (CollisionDetectionMode)2; } _carriedRB.velocity = Vector3.zero; _carriedRB.angularVelocity = Vector3.zero; } } catch { } SetCarryCollisionIgnore(ignore: false); if (Object.op_Implicit((Object)(object)_brain.Navigation.Agent) && _brain.Navigation.Agent.isOnNavMesh) { Vector3 position = ((Component)_brain).transform.position; val2 = Random.insideUnitSphere.WithY(0f); Vector3 aside = position + ((Vector3)(ref val2)).normalized * 1.2f; NavMeshHit hit = default(NavMeshHit); if (NavMesh.SamplePosition(aside, ref hit, 2f, -1)) { _brain.Navigation.SetDestination(((NavMeshHit)(ref hit)).position); } hit = default(NavMeshHit); } yield return (object)new WaitForFixedUpdate(); HardReleaseAndSeparate(((Component)_brain).transform.position); int id = ((Object)released).GetInstanceID(); _brain.LootScanner.IgnoreTemp(id, 5f); CarriedItem = null; _carriedRB = null; CarryTimer = 0f; _brain.ExtractionController.ResetGrace(); IsDropping = false; _brain.SetDebugStatus("Item delivered!"); } private void HardReleaseAndSeparate(Vector3 awayFrom, float minSeparation = 0.9f) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0080: 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_0093: 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_009d: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_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_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_00f8: 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_00db: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)CarriedItem == (Object)null) { return; } try { ((Component)CarriedItem).transform.SetParent((Transform)null, true); } catch { } Vector3 val = (((Component)CarriedItem).transform.position - awayFrom).WithY(0f); if (((Vector3)(ref val)).sqrMagnitude < 0.0001f) { val = ((Component)_brain).transform.forward; } val = ((Vector3)(ref val)).normalized; Vector3 position = ((Component)CarriedItem).transform.position + val * minSeparation; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(((Component)CarriedItem).transform.position + Vector3.up * 0.1f, val, ref val2, minSeparation, -1, (QueryTriggerInteraction)1)) { position = ((RaycastHit)(ref val2)).point - val * 0.05f; } ((Component)CarriedItem).transform.position = position; Physics.SyncTransforms(); try { if (Object.op_Implicit((Object)(object)_carriedRB)) { _carriedRB.AddForce(val * 1.25f, (ForceMode)1); } } catch { } } private void SetCarryCollisionIgnore(bool ignore) { if ((Object)(object)CarriedItem == (Object)null) { return; } _carriedCols.Clear(); ((Component)CarriedItem).GetComponentsInChildren<Collider>(true, _carriedCols); for (int i = 0; i < _myCols.Length; i++) { Collider val = _myCols[i]; if (!Object.op_Implicit((Object)(object)val)) { continue; } for (int j = 0; j < _carriedCols.Count; j++) { Collider val2 = _carriedCols[j]; if (Object.op_Implicit((Object)(object)val2)) { try { Physics.IgnoreCollision(val, val2, ignore); } catch { } } } } } } public class PlayerBotCombatController { private PlayerBotBrain _brain; private float _scanTimer; private const float KILL_RANGE_MIN = 3f; private const float KILL_RANGE_MAX = 15f; public PlayerBotCombatController(PlayerBotBrain brain) { _brain = brain; } public void UpdateCombat() { //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0121: 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) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: 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) _scanTimer += Time.deltaTime; if (_scanTimer < 0.25f) { return; } _scanTimer = 0f; if ((Object)(object)EnemyDirector.instance == (Object)null) { return; } List<EnemyParent> enemiesSpawned = EnemyDirector.instance.enemiesSpawned; for (int i = 0; i < enemiesSpawned.Count; i++) { EnemyParent val = enemiesSpawned[i]; if (!((Object)(object)val == (Object)null) && val.Spawned && !((Object)(object)val.Enemy == (Object)null) && !((Object)(object)val.Enemy.Health == (Object)null)) { float num = Vector3.Distance(((Component)_brain).transform.position, ((Component)val.Enemy).transform.position); if (num > 3f && num < 15f) { Vector3 val2 = ((Component)val.Enemy).transform.position - ((Component)_brain).transform.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; val.Enemy.Health.Hurt(999, normalized); } } } } } public class PlayerBotExtractionController { private PlayerBotBrain _brain; private int _lastActivateId; private float _lastActivateTime; private float _activationTimer; public float ActivationGraceUntil { get; private set; } public bool IsActivating { get; private set; } public PlayerBotExtractionController(PlayerBotBrain brain) { _brain = brain; } public void ResetGrace() { ActivationGraceUntil = 0f; } public void Update() { if (IsActivating) { _activationTimer += Time.deltaTime; if (_activationTimer > 3f) { IsActivating = false; _activationTimer = 0f; } } } public bool IsDeliveryDropAllowed(ExtractionPoint targetEP) { try { if (Object.op_Implicit((Object)(object)RoundDirector.instance)) { if (RoundDirector.instance.allExtractionPointsCompleted) { return true; } if ((Object)(object)targetEP == (Object)null) { return false; } return RoundDirector.instance.extractionPointActive && (Object)(object)RoundDirector.instance.extractionPointCurrent == (Object)(object)targetEP; } } catch { } return true; } public void StartActivation(ExtractionPoint ep) { if (Object.op_Implicit((Object)(object)ep)) { int instanceID = ((Object)ep).GetInstanceID(); if (_lastActivateId != instanceID || !(Time.time - _lastActivateTime < 0.75f)) { _lastActivateId = instanceID; _lastActivateTime = Time.time; ActivationGraceUntil = Time.time + 2f; IsActivating = true; _activationTimer = 0f; } } } public void CancelActivation() { IsActivating = false; _activationTimer = 0f; } } public class PlayerBotLootScanner { private PlayerBotBrain _brain; private HashSet<int> _permanentIgnoreIds = new HashSet<int>(); private Dictionary<int, float> _tempIgnoreIds = new Dictionary<int, float>(); private float _scanTimer; public PlayerBotLootScanner(PlayerBotBrain brain) { _brain = brain; } public void IgnorePermanent(int id) { _permanentIgnoreIds.Add(id); } public void IgnoreTemp(int id, float duration) { _tempIgnoreIds[id] = Time.time + duration; } public void UpdateTimers() { List<int> list = new List<int>(); foreach (KeyValuePair<int, float> tempIgnoreId in _tempIgnoreIds) { if (Time.time > tempIgnoreId.Value) { list.Add(tempIgnoreId.Key); } } foreach (int item in list) { _tempIgnoreIds.Remove(item); } } public PhysGrabObject ScanForLoot(Vector3 scanOrigin, Vector3 defaultDropZone) { //IL_0034: 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) _scanTimer -= Time.deltaTime; if (_scanTimer > 0f) { return null; } _scanTimer = 0.5f; return FindLoot(scanOrigin, defaultDropZone); } private PhysGrabObject FindLoot(Vector3 origin, Vector3 defaultDropZone) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_00f4: 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_0111: Unknown result type (might be due to invalid IL or missing references) Collider[] array = Physics.OverlapSphere(origin, 20f); float num = 999f; PhysGrabObject result = null; Vector3 val = defaultDropZone; if (Object.op_Implicit((Object)(object)RoundDirector.instance) && RoundDirector.instance.extractionPointActive && Object.op_Implicit((Object)(object)RoundDirector.instance.extractionPointCurrent)) { val = ((Component)RoundDirector.instance.extractionPointCurrent).transform.position; } Collider[] array2 = array; foreach (Collider val2 in array2) { ValuableObject componentInParent = ((Component)val2).GetComponentInParent<ValuableObject>(); if (!Object.op_Implicit((Object)(object)componentInParent)) { continue; } PhysGrabObject component = ((Component)componentInParent).GetComponent<PhysGrabObject>(); if (!Object.op_Implicit((Object)(object)component)) { continue; } int instanceID = ((Object)component).GetInstanceID(); if (!SemiFunc.PhysGrabObjectIsGrabbed(component) && !_permanentIgnoreIds.Contains(instanceID) && !_tempIgnoreIds.ContainsKey(instanceID) && !(Vector3.Distance(((Component)component).transform.position, val) < 4f)) { float num2 = Vector3.Distance(origin, ((Component)component).transform.position); if (num2 < num) { num = num2; result = component; } } } return result; } } public class PlayerBotNavigation { private PlayerBotBrain _brain; private List<Vector3> _globalPoints = new List<Vector3>(); private bool _haveGlobal; private float _stuckTimer; private Vector3 _lastPos; private float _strafeDir = 1f; public NavMeshAgent Agent { get; private set; } public Vector3 SpawnTruckPos { get; private set; } public float StuckTimer => _stuckTimer; public PlayerBotNavigation(PlayerBotBrain brain) { _brain = brain; Agent = ((Component)brain).gameObject.AddComponent<NavMeshAgent>(); Agent.updatePosition = false; Agent.updateRotation = false; Agent.updateUpAxis = false; Agent.radius = 0.5f; Agent.height = 1.8f; Agent.speed = 0f; Agent.acceleration = 9999f; Agent.autoBraking = true; } public bool TryPlaceOnNavMesh(Vector3 desired) { //IL_0001: 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) NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(desired, ref val, 10f, -1)) { return Agent.Warp(((NavMeshHit)(ref val)).position); } return false; } public void BuildGlobalTargets() { //IL_0019: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0120: 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_0080: 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) _globalPoints.Clear(); SpawnTruckPos = ((Component)_brain).transform.position; try { if (Object.op_Implicit((Object)(object)LevelGenerator.Instance) && LevelGenerator.Instance.LevelPathPoints != null) { foreach (LevelPoint levelPathPoint in LevelGenerator.Instance.LevelPathPoints) { if (Object.op_Implicit((Object)(object)levelPathPoint)) { _globalPoints.Add(((Component)levelPathPoint).transform.position); if (Object.op_Implicit((Object)(object)levelPathPoint.Room) && levelPathPoint.Room.Truck) { SpawnTruckPos = ((Component)levelPathPoint).transform.position; } } } } } catch { } if (_globalPoints.Count == 0) { try { NavMeshTriangulation val = NavMesh.CalculateTriangulation(); Vector3[] vertices = val.vertices; int num = Mathf.Max(1, vertices.Length / 64); NavMeshHit val2 = default(NavMeshHit); for (int i = 0; i < vertices.Length; i += num) { if (NavMesh.SamplePosition(vertices[i], ref val2, 3f, -1)) { _globalPoints.Add(((NavMeshHit)(ref val2)).position); } } } catch { } } _haveGlobal = _globalPoints.Count > 0; } public void PickWanderDest() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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_004e: 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_0027: 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_007c: 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) Vector3 val = ((!_haveGlobal) ? (((Component)_brain).transform.position + Random.insideUnitSphere * 15f) : _globalPoints[Random.Range(0, _globalPoints.Count)]); NavMeshHit val2 = default(NavMeshHit); if (NavMesh.SamplePosition(val, ref val2, 5f, -1)) { Agent.SetDestination(((NavMeshHit)(ref val2)).position); } else { Agent.SetDestination(val); } } public Vector3 GetTruckDestination() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) Vector3 result = SpawnTruckPos; try { if (Object.op_Implicit((Object)(object)LevelGenerator.Instance) && LevelGenerator.Instance.LevelPathPoints != null) { foreach (LevelPoint levelPathPoint in LevelGenerator.Instance.LevelPathPoints) { if (!Object.op_Implicit((Object)(object)levelPathPoint) || !Object.op_Implicit((Object)(object)levelPathPoint.Room) || !levelPathPoint.Room.Truck) { continue; } result = ((Component)levelPathPoint).transform.position; break; } } } catch { } return result; } public void SetDestination(Vector3 target) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) Agent.SetDestination(target); } public void UpdateMovement() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_0081: 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) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_01db: 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_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: 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_01fe: 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_020e: Unknown result type (might be due to invalid IL or missing references) //IL_0121: 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_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0231: 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_0164: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) PlayerIsBotComplete.MoveInput = Vector2.zero; PlayerIsBotComplete.InputJump = false; bool flag = Physics.Raycast(((Component)_brain).transform.position + Vector3.up, ((Component)_brain).transform.forward, 1.2f); bool flag2 = Agent.hasPath && !Agent.pathPending && Agent.remainingDistance > 0.4f; float num = Vector3.Distance(((Component)_brain).transform.position, _lastPos); _lastPos = ((Component)_brain).transform.position; if (num < 0.02f && flag2) { _stuckTimer += Time.deltaTime; if (_stuckTimer > 0.5f && _stuckTimer <= 1.5f) { if (Time.frameCount % 20 == 0) { _strafeDir *= -1f; } PlayerIsBotComplete.MoveInput = new Vector2(_strafeDir, 1f); } else if (_stuckTimer > 1.5f && _stuckTimer <= 2.5f) { PlayerIsBotComplete.MoveInput = new Vector2(0f, 1f); PlayerIsBotComplete.InputJump = true; } else if (_stuckTimer > 2.5f) { Agent.ResetPath(); PickWanderDest(); _stuckTimer = 0f; } } else { _stuckTimer = 0f; } if (!flag2 || !(_stuckTimer <= 0.5f)) { return; } Vector3 val = Agent.steeringTarget - ((Component)_brain).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; normalized.y = 0f; if (normalized != Vector3.zero) { float num2 = Vector3.SignedAngle(((Component)_brain).transform.forward, normalized, Vector3.up); float num3 = ((Mathf.Abs(num2) < 60f) ? 1f : 0f); if (Mathf.Abs(num2) > 45f) { num3 = 0.5f; } PlayerIsBotComplete.MoveInput = new Vector2(0f, num3); } } } [BepInPlugin("Empress.PlayerBotComplete", "Player Is The Bot (Complete)", "4.4.0")] public class PlayerIsBotComplete : BaseUnityPlugin { public static PlayerIsBotComplete Instance; public static ManualLogSource Log; private Harmony _harmony; public static bool IsActive; public static Vector2 MoveInput; public static Vector2 LookInput; public static bool InputJump; public static bool InputInteract; public static bool InputThrow; public static bool InputGrab; public static bool InputSprint; private void Awake() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); Instance = this; Log = ((BaseUnityPlugin)this).Logger; _harmony = new Harmony("Empress.PlayerBotComplete"); _harmony.PatchAll(); Log.LogInfo((object)"=== Player Bot (Complete) v4.4 Loaded. Waiting for player... ==="); ((MonoBehaviour)this).StartCoroutine(WaitForPlayer()); } private void OnDestroy() { _harmony.UnpatchSelf(); } private IEnumerator WaitForPlayer() { while (true) { if ((Object)(object)PlayerController.instance != (Object)null) { bool isClient = false; try { if (PhotonNetwork.InRoom && !PhotonNetwork.IsMasterClient) { isClient = true; } } catch { } if (isClient) { break; } PlayerBotBrain brain = ((Component)PlayerController.instance).gameObject.GetComponent<PlayerBotBrain>(); if ((Object)(object)brain == (Object)null) { Log.LogInfo((object)">>> Injecting Bot Brain into Player GameObject <<<"); ((Component)PlayerController.instance).gameObject.AddComponent<PlayerBotBrain>(); } } yield return (object)new WaitForSeconds(1f); } Log.LogWarning((object)"PlayerBot: You are a Client (Not Host). Bot disabled."); } } public static class VectorExtensions { public static Vector3 WithY(this Vector3 v, float y) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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) v.y = y; return v; } } }