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 DriveByCar v1.0.0
Plugins/LethalCompanyDriveByMod.dll
Decompiled 10 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("LethalCompanyDriveByMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LethalCompanyDriveByMod")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("cc155f0c-6d57-4daa-909f-c96bf7930aae")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] public class DriveByAI : EnemyAI { private enum CarState { Patrol, LineUp, DriveBy } [Header("Movement")] public float cruiseSpeed = 8f; public float chaseSpeed = 12f; public float turnRate = 4f; public float rePathInterval = 0.5f; [Header("Combat")] public float detectRange = 22f; public float fovDegrees = 110f; public float burstInterval = 0.25f; public int shotsPerBurst = 3; public int damagePerHit = 20; public float bulletRange = 30f; [Header("Refs")] public Transform muzzleLeft; public Transform muzzleRight; private float _aiTimer; private float _burstTimer; private int _burstCount; private PlayerControllerB _target; private NavMeshAgent _agent; private CarState _state = CarState.Patrol; public override void Start() { ((EnemyAI)this).Start(); _agent = ((Component)this).GetComponent<NavMeshAgent>(); _agent.speed = cruiseSpeed; ChooseNewPatrolPoint(); } private void ChooseNewPatrolPoint() { //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_0016: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position + Random.insideUnitSphere * 15f; NavMeshHit val2 = default(NavMeshHit); if (NavMesh.SamplePosition(val, ref val2, 12f, -1)) { _agent.SetDestination(((NavMeshHit)(ref val2)).position); } } public override void Update() { //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_011b: 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_0130: 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_0139: 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_014a: 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_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: 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_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0197: 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_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (!((NetworkBehaviour)this).IsServer) { return; } _aiTimer += Time.deltaTime; if ((Object)(object)_target == (Object)null || !_target.IsAlive()) { _target = FindClosestVisiblePlayer(); } switch (_state) { case CarState.Patrol: _agent.speed = cruiseSpeed; if (_aiTimer > rePathInterval && _agent.remainingDistance < 2f) { _aiTimer = 0f; ChooseNewPatrolPoint(); } if ((Object)(object)_target != (Object)null) { _state = CarState.LineUp; } break; case CarState.LineUp: { if ((Object)(object)_target == (Object)null) { _state = CarState.Patrol; break; } Vector3 up = Vector3.up; Vector3 val = ((Component)_target).transform.position - ((Component)this).transform.position; Vector3 val2 = Vector3.Cross(up, ((Vector3)(ref val)).normalized); Vector3 val3 = ((Component)_target).transform.position + val2 * 3f; _agent.speed = chaseSpeed; _agent.SetDestination(val3); RotateTowards(_agent.steeringTarget); if (Vector3.Distance(((Component)this).transform.position, val3) < 6f) { _burstTimer = 0f; _burstCount = 0; _state = CarState.DriveBy; } break; } case CarState.DriveBy: if ((Object)(object)_target == (Object)null) { _state = CarState.Patrol; break; } _burstTimer += Time.deltaTime; if (_burstTimer >= burstInterval && _burstCount < shotsPerBurst) { _burstTimer = 0f; _burstCount++; FireSideGunsAt(_target); } if (_burstCount >= shotsPerBurst || Vector3.Distance(((Component)this).transform.position, ((Component)_target).transform.position) > 18f) { _target = null; _state = CarState.Patrol; ChooseNewPatrolPoint(); } break; } } private PlayerControllerB FindClosestVisiblePlayer() { //IL_004a: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_0097: 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_00a4: 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_00d2: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB result = null; float num = float.PositiveInfinity; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if ((Object)(object)val == (Object)null || !val.IsAlive()) { continue; } float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val).transform.position); if (!(num2 > detectRange)) { Vector3 val2 = ((Component)val).transform.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; float num3 = Vector3.Angle(((Component)this).transform.forward, normalized); if (!(num3 > fovDegrees * 0.5f) && HasLineOfSight(((Component)val).transform.position) && num2 < num) { result = val; num = num2; } } } return result; } private bool HasLineOfSight(Vector3 worldTarget) { //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_0016: 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_0021: 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_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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0032: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position + Vector3.up * 0.8f; Vector3 val2 = worldTarget - val; Vector3 normalized = ((Vector3)(ref val2)).normalized; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(val, normalized, ref val3, detectRange, -1, (QueryTriggerInteraction)1)) { return (Object)(object)((Component)((RaycastHit)(ref val3)).collider).GetComponentInParent<PlayerControllerB>() != (Object)null; } return true; } private void RotateTowards(Vector3 worldPoint) { //IL_0001: 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_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_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_003f: 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_0051: 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_0063: Unknown result type (might be due to invalid IL or missing references) Vector3 val = worldPoint - ((Component)this).transform.position; val.y = 0f; if (!(((Vector3)(ref val)).sqrMagnitude < 0.01f)) { Quaternion val2 = Quaternion.LookRotation(((Vector3)(ref val)).normalized, Vector3.up); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, Time.deltaTime * turnRate); } } private void FireSideGunsAt(PlayerControllerB target) { //IL_0007: 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_0022: 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_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_0055: 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) //IL_005b: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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_00b0: 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) Transform val = ((Vector3.Distance(muzzleLeft.position, ((Component)target).transform.position) < Vector3.Distance(muzzleRight.position, ((Component)target).transform.position)) ? muzzleLeft : muzzleRight); Vector3 position = val.position; Vector3 position2 = target.playerEye.position; Vector3 val2 = position2 - position; Vector3 normalized = ((Vector3)(ref val2)).normalized; RaycastHit val3 = default(RaycastHit); if (Physics.Raycast(position, normalized, ref val3, bulletRange, -1, (QueryTriggerInteraction)1)) { PlayerControllerB componentInParent = ((Component)((RaycastHit)(ref val3)).collider).GetComponentInParent<PlayerControllerB>(); if ((Object)(object)componentInParent != (Object)null) { int num = damagePerHit; val2 = default(Vector3); componentInParent.DamagePlayer(num, true, true, (CauseOfDeath)7, 0, false, val2); } } } } public static class PlayerExtensions { public static bool IsAlive(this PlayerControllerB pcb) { return (Object)(object)pcb != (Object)null && !pcb.isPlayerDead; } } namespace LethalCompanyDriveByMod; [BepInPlugin("com.noahrix.drivebycar", "DriveByCar", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; public static EnemyType CarEnemyType; public static GameObject CarPrefab; private void Awake() { //IL_0011: 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) Log = ((BaseUnityPlugin)this).Logger; new Harmony("com.noahrix.drivebycar").PatchAll(); CarPrefab = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)CarPrefab).name = "DriveByOrb"; CarPrefab.AddComponent<DriveByAI>(); Light val = CarPrefab.AddComponent<Light>(); val.color = Color.red; val.intensity = 5f; val.range = 6f; val.type = (LightType)2; NavMeshAgent val2 = CarPrefab.AddComponent<NavMeshAgent>(); val2.radius = 0.5f; val2.height = 1f; val2.speed = 8f; NetworkPrefabs.RegisterNetworkPrefab(CarPrefab); CarEnemyType = ScriptableObject.CreateInstance<EnemyType>(); ((Object)CarEnemyType).name = "DriveByOrbType"; CarEnemyType.enemyName = "DriveByOrb"; CarEnemyType.canDie = false; Enemies.RegisterEnemy(CarEnemyType, 1, (LevelTypes)(-1), (SpawnType)0, (TerminalNode)null, (TerminalKeyword)null); Log.LogInfo((object)"DriveByOrb enemy loaded successfully!"); } }