using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using GameNetcodeStuff; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using LethalLib.Modules; using Microsoft.CodeAnalysis; using RCCars.Scripts; using StaticNetcodeLib; using TMPro; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RCCars")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("RCCars")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+56ef83ab3a53582b5a2640b0c0cba298129384c8")] [assembly: AssemblyProduct("RCCars")] [assembly: AssemblyTitle("RCCars")] [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 RCCars { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("wexop.rc_cars", "RCCars", "1.0.8")] public class RCCarsPlugin : BaseUnityPlugin { private const string GUID = "wexop.rc_cars"; private const string NAME = "RCCars"; private const string VERSION = "1.0.8"; public static RCCarsPlugin instance; public Dictionary RegistredCars = new Dictionary(); public ConfigEntry honkVolume; public ConfigEntry engineVolume; public ConfigEntry rotationSpeed; public ConfigEntry explosionDamage; public ConfigEntry syncInterval; public ConfigEntry blacklistCar; public ConfigEntry carPrice; public ConfigEntry policeCarPrice; public ConfigEntry ambulanceCarPrice; public ConfigEntry sportCarPrice; public ConfigEntry bombCarPrice; public ConfigEntry cruiserCarPrice; public ConfigEntry wexopCarPrice; public ConfigEntry carCanGrabItem; private void Awake() { instance = this; ((BaseUnityPlugin)this).Logger.LogInfo((object)"RCCars starting...."); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "rccars"); AssetBundle bundle = AssetBundle.LoadFromFile(text); LoadConfigs(); RegisterCar(bundle); ((BaseUnityPlugin)this).Logger.LogInfo((object)"RCCars ready !!"); } private void RegisterCar(AssetBundle bundle) { Item val = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCar.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val.spawnPrefab} prefab"); if (!CarIsInBlacklist(val.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Utilities.FixMixerGroups(val.spawnPrefab); Items.RegisterItem(val); Items.RegisterShopItem(val, instance.carPrice.Value); } Item val2 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCarPolice.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val2).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val2.spawnPrefab} prefab"); if (!CarIsInBlacklist(val2.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab); Utilities.FixMixerGroups(val2.spawnPrefab); Items.RegisterItem(val2); Items.RegisterShopItem(val2, instance.policeCarPrice.Value); } Item val3 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCarAmbulance.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val3).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val3.spawnPrefab} prefab"); if (!CarIsInBlacklist(val3.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val3.spawnPrefab); Utilities.FixMixerGroups(val3.spawnPrefab); Items.RegisterItem(val3); Items.RegisterShopItem(val3, instance.ambulanceCarPrice.Value); } Item val4 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCSportCar.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val4).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val4.spawnPrefab} prefab"); if (!CarIsInBlacklist(val4.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val4.spawnPrefab); Utilities.FixMixerGroups(val4.spawnPrefab); Items.RegisterItem(val4); Items.RegisterShopItem(val4, instance.sportCarPrice.Value); } Item val5 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCarBomb.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val5).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val5.spawnPrefab} prefab"); if (!CarIsInBlacklist(val5.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val5.spawnPrefab); Utilities.FixMixerGroups(val5.spawnPrefab); Items.RegisterItem(val5); Items.RegisterShopItem(val5, instance.bombCarPrice.Value); } Item val6 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCruiserCar.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val6).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val6.spawnPrefab} prefab"); if (!CarIsInBlacklist(val6.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val6.spawnPrefab); Utilities.FixMixerGroups(val6.spawnPrefab); Items.RegisterItem(val6); Items.RegisterShopItem(val6, instance.cruiserCarPrice.Value); } Item val7 = bundle.LoadAsset("Assets/LethalCompany/Mods/RCCars/RCCarWexop.asset"); ((BaseUnityPlugin)this).Logger.LogInfo((object)(((Object)val7).name + " FOUND")); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"{val7.spawnPrefab} prefab"); if (!CarIsInBlacklist(val7.itemName)) { NetworkPrefabs.RegisterNetworkPrefab(val7.spawnPrefab); Utilities.FixMixerGroups(val7.spawnPrefab); Items.RegisterItem(val7); Items.RegisterShopItem(val7, instance.wexopCarPrice.Value); } } public void LoadConfigs() { honkVolume = ((BaseUnityPlugin)this).Config.Bind("General", "honkVolume", 1f, "Honk volume. No need to restart the game :)"); CreateFloatConfig(honkVolume, 0f, 2f); engineVolume = ((BaseUnityPlugin)this).Config.Bind("General", "engineVolume", 0.2f, "Engine volume. No need to restart the game :)"); CreateFloatConfig(engineVolume, 0f, 2f); rotationSpeed = ((BaseUnityPlugin)this).Config.Bind("General", "rotationSpeed", 7f, "Cars rotation speed. No need to restart the game :)"); CreateFloatConfig(rotationSpeed, 0f, 200f); explosionDamage = ((BaseUnityPlugin)this).Config.Bind("General", "explosionDamage", 50, "Cars explosion damage on destroy. No need to restart the game :)"); CreateIntConfig(explosionDamage, 0, 200); blacklistCar = ((BaseUnityPlugin)this).Config.Bind("General", "blacklistCar", "RCWexopCar", "Blacklist car, they will not be added into the game. You can find cars name into the terminal store. Use this config like this : RCCar,RCPoliceCar"); CreateStringConfig(blacklistCar, requireRestart: true); carCanGrabItem = ((BaseUnityPlugin)this).Config.Bind("General", "carCanGrabItem", true, "Blacklist car, they will not be added into the game. You can find cars name into the terminal store. Use this config like this : RCCar,RCPoliceCar"); CreateBoolConfig(carCanGrabItem); syncInterval = ((BaseUnityPlugin)this).Config.Bind("General", "syncInterval", 0.35f, "Cars sync interval between players. No need to restart the game :)"); CreateFloatConfig(syncInterval, 0f, 2f); carPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "carPrice", 100, "Normal car price. You need to restart the game."); CreateIntConfig(carPrice, 0, 1000, restart: true); policeCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "policeCarPrice", 150, "Police car price. You need to restart the game."); CreateIntConfig(policeCarPrice, 0, 1000, restart: true); ambulanceCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "ambulanceCarPrice", 175, "Ambulance car price. You need to restart the game."); CreateIntConfig(ambulanceCarPrice, 0, 1000, restart: true); sportCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "sportCarPrice", 200, "Sport car price. You need to restart the game."); CreateIntConfig(sportCarPrice, 0, 1000, restart: true); bombCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "bombCarPrice", 75, "Bomb car price. You need to restart the game."); CreateIntConfig(bombCarPrice, 0, 1000, restart: true); cruiserCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "cruiserCarPrice", 125, "Cruiser car price. You need to restart the game."); CreateIntConfig(cruiserCarPrice, 0, 1000, restart: true); wexopCarPrice = ((BaseUnityPlugin)this).Config.Bind("Price", "wexopCarPrice", 200, "Wexop car price. You need to restart the game."); CreateIntConfig(wexopCarPrice, 0, 1000, restart: true); } public static string ConditionalString(string value) { string text = value.ToLower(); while (text.Contains(" ")) { text = text.Replace(" ", ""); } return text; } private bool CarIsInBlacklist(string name) { if (instance.blacklistCar.Value == "") { return false; } string nameSearch = ConditionalString(name); bool disable = false; instance.blacklistCar.Value.Split(",").ToList().ForEach(delegate(string hazard) { if (hazard != "") { string value = ConditionalString(hazard); if (nameSearch.Contains(value)) { disable = true; } } }); return disable; } private void CreateFloatConfig(ConfigEntry configEntry, float min = 0f, float max = 100f) { //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_000e: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown FloatSliderOptions val = new FloatSliderOptions(); ((BaseRangeOptions)val).Min = min; ((BaseRangeOptions)val).Max = max; ((BaseOptions)val).RequiresRestart = false; FloatSliderConfigItem val2 = new FloatSliderConfigItem(configEntry, val); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); } private void CreateIntConfig(ConfigEntry configEntry, int min = 0, int max = 100, bool restart = false) { //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_000e: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown IntSliderOptions val = new IntSliderOptions(); ((BaseRangeOptions)val).Min = min; ((BaseRangeOptions)val).Max = max; ((BaseOptions)val).RequiresRestart = restart; IntSliderConfigItem val2 = new IntSliderConfigItem(configEntry, val); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); } private void CreateStringConfig(ConfigEntry configEntry, bool requireRestart = false) { //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_0014: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown TextInputFieldConfigItem val = new TextInputFieldConfigItem(configEntry, new TextInputFieldOptions { RequiresRestart = requireRestart }); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val); } private void CreateBoolConfig(ConfigEntry configEntry) { //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_0014: Expected O, but got Unknown //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown BoolCheckBoxConfigItem val = new BoolCheckBoxConfigItem(configEntry, new BoolCheckBoxOptions { RequiresRestart = false }); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val); } } public static class PluginInfo { public const string PLUGIN_GUID = "RCCars"; public const string PLUGIN_NAME = "RCCars"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace RCCars.Scripts { public class EnableDecalLayer : MonoBehaviour { private void Start() { MeshRenderer component = ((Component)this).GetComponent(); ((Renderer)component).renderingLayerMask = 257u; } } public class RCBombCarItem : RCCarItem { public override void Honk() { SetNewHealth(0); } } public class RCCarItem : PhysicsProp, IHittable { [CompilerGenerated] private sealed class d__57 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RCCarItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__57(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.carBody.SetActive(false); <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; RCCarsPlugin.instance.RegistredCars.Remove(((NetworkBehaviour)<>4__this).NetworkObjectId); if (((NetworkBehaviour)<>4__this).IsServer) { Object.Destroy((Object)(object)((Component)<>4__this).gameObject); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__44 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerControllerB player; public RCCarItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__44(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds((<>4__this.Health <= 0) ? 0.8f : 0f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.EnableCamera(enable: false); if ((Object)(object)<>4__this.playerCamera != (Object)null) { player.gameplayCamera = <>4__this.playerCamera; } player.disableMoveInput = false; player.disableLookInput = false; player.disableInteract = false; HUDManager.Instance.ClearControlTips(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public Rigidbody rigidbody; public NavMeshAgent navMeshAgent; public TextMeshProUGUI playerText; public List carLights; public Light carVisionLight; public Color carLightsColor; public Camera carCamera; public Transform itemHeldPosition; public AudioSource SfxAudioSource; public AudioSource drivingAudioSource; public GameObject carBody; public AudioClip honkAudio; public AudioClip drivingLoop; public GrabbableObject itemHeld; public float speed = 0.4f; public float syncInterval = 0.5f; public bool playerIsDriving; public bool playerIsLocal; public float honkInterval = 1f; public float rotationSpeed = 10f; public int MaxHealth = 2; public int Health = 2; public ParticleSystem smokeParticules; public ParticleSystem explosion; public AudioClip explosionAudio; public float explosionRange; private PlayerControllerB playerDriving; private Camera playerCamera; private Ray interactRay; private RaycastHit hit; private Vector3 dropPos; private bool shouldBeDropPos; private bool carIsMoving; private bool lastFrameCarIsMoving; private float interactTimer; private float honkTimer; private float posSyncTimer; private float hitTimer; public void RegisterCar() { if (RCCarsPlugin.instance.RegistredCars.ContainsKey(((NetworkBehaviour)this).NetworkObjectId)) { RCCarsPlugin.instance.RegistredCars.Remove(((NetworkBehaviour)this).NetworkObjectId); } RegistredCar registredCar = new RegistredCar(); registredCar.networkObjectId = ((NetworkBehaviour)this).NetworkObjectId; registredCar.rcCarItem = this; RCCarsPlugin.instance.RegistredCars.Add(((NetworkBehaviour)this).NetworkObjectId, registredCar); } public void RefreshPluginValues() { drivingAudioSource.volume = RCCarsPlugin.instance.engineVolume.Value; SfxAudioSource.volume = RCCarsPlugin.instance.honkVolume.Value; rotationSpeed = RCCarsPlugin.instance.rotationSpeed.Value; syncInterval = RCCarsPlugin.instance.syncInterval.Value; } public override void Start() { ((GrabbableObject)this).Start(); EnableCamera(enable: false); CarLights(on: false); navMeshAgent.speed = 50f; ((Behaviour)navMeshAgent).enabled = false; RegisterCar(); RefreshPluginValues(); ((TMP_Text)playerText).text = ""; } public void EnableCamera(bool enable) { ((Component)carCamera).gameObject.SetActive(enable); } public void CarLights(bool on) { carLights.ForEach(delegate(Light l) { //IL_0017: 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) l.color = (on ? carLightsColor : Color.black); }); ((Behaviour)carVisionLight).enabled = on; } public void ChangeToolTips() { List list = new List { "[G] Leave RCCar", "[LMB] Honk" }; if ((Object)(object)itemHeld != (Object)null) { list.Add("[E] Drop " + itemHeld.itemProperties.itemName); } HUDManager.Instance.ClearControlTips(); HUDManager.Instance.ChangeControlTipMultiple(list.ToArray(), false, (Item)null); } [IteratorStateMachine(typeof(d__44))] public IEnumerator SetPlayerBack(PlayerControllerB player) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__44(0) { <>4__this = this, player = player }; } public void ChangePlayerControls(PlayerControllerB player, bool driving) { //IL_00af: 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_01ec: 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_0208: 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_0111: 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_0173: 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_017d: Unknown result type (might be due to invalid IL or missing references) RefreshPluginValues(); playerIsLocal = player.playerClientId == GameNetworkManager.Instance.localPlayerController.playerClientId; if (player.isInHangarShipRoom && driving) { if (playerIsLocal) { HUDManager.Instance.DisplayTip("Warning", "You can't drive in the ship !", false, false, "LC_Tip1"); } return; } if (RoundManager.Instance.currentLevel.PlanetName.Contains("Gordion") && driving) { if (playerIsLocal) { HUDManager.Instance.DisplayTip("Warning", "You can't drive in company building !", false, false, "LC_Tip1"); } return; } dropPos = ((Component)this).transform.localPosition; playerIsDriving = driving; ((GrabbableObject)this).grabbable = !driving; CarLights(driving); rigidbody.useGravity = driving; ((Behaviour)navMeshAgent).enabled = driving; if (driving) { if (playerIsLocal) { EnableCamera(enable: true); player.DiscardHeldObject(false, (NetworkObject)null, default(Vector3), true); playerCamera = player.gameplayCamera; player.gameplayCamera = carCamera; player.disableMoveInput = true; player.disableLookInput = true; player.disableInteract = true; ChangeToolTips(); } else { ((TMP_Text)playerText).text = player.playerUsername; } ((GrabbableObject)this).targetFloorPosition = ((GrabbableObject)this).GetItemFloorPosition(((Component)this).transform.localPosition); ((GrabbableObject)this).parentObject = null; honkTimer = honkInterval - 1f; playerDriving = player; } else { if (playerIsLocal) { ((MonoBehaviour)this).StartCoroutine(SetPlayerBack(player)); } ((GrabbableObject)this).parentObject = null; ((TMP_Text)playerText).text = ""; ((GrabbableObject)this).reachedFloorTarget = false; ((Component)this).transform.localPosition = dropPos; ((GrabbableObject)this).startFallingPosition = dropPos; ((GrabbableObject)this).FallToGround(false, false, default(Vector3)); ((GrabbableObject)this).grabbable = true; DropHeldItem(); drivingAudioSource.Stop(); playerIsLocal = false; } } public void OnStopUsingCar(Vector3 pos) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)playerDriving)) { ((Component)this).transform.position = pos; if (playerIsLocal) { ChangePlayerControls(GameNetworkManager.Instance.localPlayerController, driving: false); } else { ChangePlayerControls(playerDriving, driving: false); } } } public void DropHeldItem() { //IL_0038: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)itemHeld == (Object)null)) { itemHeld.reachedFloorTarget = false; ((Component)itemHeld).transform.position = ((Component)itemHeld).transform.position; itemHeld.targetFloorPosition = ((Component)itemHeld).transform.position; itemHeld.startFallingPosition = ((Component)itemHeld).transform.position; itemHeld.FallToGround(false, false, default(Vector3)); itemHeld.grabbable = true; itemHeld = null; ChangeToolTips(); } } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (Object.op_Implicit((Object)(object)((GrabbableObject)this).playerHeldBy)) { ChangePlayerControls(((GrabbableObject)this).playerHeldBy, driving: true); } } public void GrabItem(GrabbableObject item) { DropHeldItem(); itemHeld = item; itemHeld.grabbable = false; ChangeToolTips(); } public void HonkOnEveryClient() { RCCarNetwork.CarHonkServerRpc(((NetworkBehaviour)this).NetworkObjectId); } public virtual void Honk() { RefreshPluginValues(); SfxAudioSource.clip = honkAudio; SfxAudioSource.Play(); honkTimer = 0f; } public void SyncPositionClient(Vector3 pos) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)playerDriving) && !playerIsLocal && ((Behaviour)navMeshAgent).enabled) { navMeshAgent.SetDestination(pos); } } public void StopDrivingSoundClient(bool turnOff) { if (turnOff) { drivingAudioSource.Stop(); } else { drivingAudioSource.Play(); } } public override void Update() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0132: 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_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0205: 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) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: 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_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) hitTimer += Time.deltaTime; if (Object.op_Implicit((Object)(object)playerDriving) && !playerIsLocal) { Vector3 velocity = navMeshAgent.velocity; carIsMoving = !((Vector3)(ref velocity)).Equals(Vector3.zero); if (carIsMoving != lastFrameCarIsMoving) { lastFrameCarIsMoving = carIsMoving; if (!carIsMoving) { drivingAudioSource.Stop(); } else { drivingAudioSource.clip = drivingLoop; drivingAudioSource.Play(); } } } if (shouldBeDropPos) { ((Component)this).transform.position = dropPos; shouldBeDropPos = false; } if (!playerIsDriving) { ((GrabbableObject)this).Update(); } if (!playerIsDriving || !playerIsLocal) { return; } if (playerDriving.isPlayerDead) { RCCarNetwork.StopUseCarServerRpc(((NetworkBehaviour)this).NetworkObjectId, ((Component)this).transform.position); } if (!playerIsDriving) { return; } interactTimer += Time.deltaTime; honkTimer += Time.deltaTime; posSyncTimer += Time.deltaTime; float num = IngamePlayerSettings.Instance.playerInput.actions.FindAction("ActivateItem", false).ReadValue(); if (num > 0f && honkTimer >= honkInterval) { HonkOnEveryClient(); } Vector3 val = Vector2.op_Implicit(IngamePlayerSettings.Instance.playerInput.actions.FindAction("Move", false).ReadValue()); if (val.x != 0f || val.y != 0f) { if (!drivingAudioSource.isPlaying) { drivingAudioSource.clip = drivingLoop; drivingAudioSource.Play(); } if (val.y > 0f) { navMeshAgent.Move(((Component)this).transform.forward * speed * Time.deltaTime); } ((Component)this).transform.eulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y + val.x * rotationSpeed, 0f); } else { drivingAudioSource.Stop(); } } public override void LateUpdate() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //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_0071: 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_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_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_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_0166: 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) if (!playerIsDriving) { ((GrabbableObject)this).LateUpdate(); } if ((Object)(object)itemHeld != (Object)null) { ((GrabbableObject)this).reachedFloorTarget = false; itemHeld.targetFloorPosition = itemHeldPosition.position; itemHeld.startFallingPosition = itemHeldPosition.position; ((Component)itemHeld).gameObject.transform.position = itemHeldPosition.position + Vector3.up * (float)itemHeld.itemProperties.floorYOffset; } if (!playerIsDriving || !playerIsLocal) { return; } float num = IngamePlayerSettings.Instance.playerInput.actions.FindAction("Interact", false).ReadValue(); if (num > 0f && (Object)(object)itemHeld != (Object)null && interactTimer >= 1f) { interactTimer = 0f; RCCarNetwork.CarDropItemServerRpc(((NetworkBehaviour)this).NetworkObjectId); ChangeToolTips(); } float num2 = IngamePlayerSettings.Instance.playerInput.actions.FindAction("Discard", false).ReadValue(); if (num2 > 0f) { RCCarNetwork.StopUseCarServerRpc(((NetworkBehaviour)this).NetworkObjectId, ((Component)this).transform.position); } interactRay = new Ray(((Component)this).transform.position, ((Component)this).transform.forward); if (Physics.Raycast(interactRay, ref hit, 10f, 1073742656) && ((Component)((RaycastHit)(ref hit)).collider).gameObject.layer != 8 && ((Component)((RaycastHit)(ref hit)).collider).gameObject.layer != 30) { GrabbableObject component = ((Component)((RaycastHit)(ref hit)).collider).gameObject.GetComponent(); if (component.grabbable && RCCarsPlugin.instance.carCanGrabItem.Value) { ((TMP_Text)GameNetworkManager.Instance.localPlayerController.cursorTip).text = "Grab : [E]"; if (num > 0f) { interactTimer = 0f; RCCarNetwork.CarGrabItemServerRpc(((NetworkBehaviour)this).NetworkObjectId, ((NetworkBehaviour)component).NetworkObjectId); } } } if (posSyncTimer >= syncInterval) { posSyncTimer = 0f; RCCarNetwork.SyncCarPositionServerRpc(((NetworkBehaviour)this).NetworkObjectId, ((Component)this).transform.position); } } public void SetNewHealth(int health) { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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_00d9: 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) Health = health; if (Health < MaxHealth && !smokeParticules.isPlaying) { smokeParticules.Play(); } if (Health > 0) { return; } explosion.Play(); SfxAudioSource.PlayOneShot(explosionAudio); RCCarNetwork.StopUseCarServerRpc(((NetworkBehaviour)this).NetworkObjectId, ((Component)this).transform.position); if (Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)this).transform.position) <= explosionRange) { GameNetworkManager.Instance.localPlayerController.DamagePlayer(RCCarsPlugin.instance.explosionDamage.Value, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); } List list = Object.FindObjectsOfType().ToList(); list.ForEach(delegate(EnemyAI enemy) { //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) if (Vector3.Distance(((Component)enemy).transform.position, ((Component)this).transform.position) <= explosionRange) { enemy.HitEnemy(3, (PlayerControllerB)null, false, -1); } }); List list2 = Object.FindObjectsOfType().ToList(); list2.ForEach(delegate(RCCarItem car) { //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) if (((NetworkBehaviour)car).NetworkObjectId != ((NetworkBehaviour)this).NetworkObjectId && car.Health > 0 && Vector3.Distance(((Component)car).transform.position, ((Component)this).transform.position) <= explosionRange && ((NetworkBehaviour)this).IsServer) { RCCarNetwork.SetCarHealthServerRpc(((NetworkBehaviour)car).NetworkObjectId, car.Health - 2); } }); ((MonoBehaviour)this).StartCoroutine(DestroyObject()); } [IteratorStateMachine(typeof(d__57))] public IEnumerator DestroyObject() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__57(0) { <>4__this = this }; } public bool Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { if (hitTimer >= 0.2f) { hitTimer = 0f; RCCarNetwork.SetCarHealthServerRpc(((NetworkBehaviour)this).NetworkObjectId, Health - force); } return true; } } [StaticNetcode] public class RCCarNetwork { public static RegistredCar GetRegistredCar(ulong networkId) { RegistredCar registredCar = null; if (RCCarsPlugin.instance.RegistredCars.ContainsKey(networkId)) { registredCar = RCCarsPlugin.instance.RegistredCars[networkId]; } if (registredCar == null) { Debug.LogError((object)$"COULD NOT FOUND CAR WITH ID {networkId}"); } return registredCar; } public static GrabbableObject GetItem(ulong networkId) { List list = Object.FindObjectsByType((FindObjectsSortMode)0).ToList(); GrabbableObject val = list.Find((GrabbableObject e) => ((NetworkBehaviour)e).NetworkObjectId == networkId); if ((Object)(object)val == (Object)null) { Debug.LogError((object)$"COULD NOT FOUND ITEM WITH ID {networkId}"); } return val; } [ServerRpc] public static void CarHonkServerRpc(ulong networkId) { CarHonkClientRpc(networkId); } [ClientRpc] public static void CarHonkClientRpc(ulong networkId) { GetRegistredCar(networkId)?.rcCarItem.Honk(); } [ServerRpc] public static void StopUseCarServerRpc(ulong networkId, Vector3 pos) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) StopUseCarClientRpc(networkId, pos); } [ClientRpc] public static void StopUseCarClientRpc(ulong networkId, Vector3 pos) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) GetRegistredCar(networkId)?.rcCarItem.OnStopUsingCar(pos); } [ServerRpc] public static void UpdateDrivingSoundServerRpc(ulong networkId, bool value) { UpdateDrivingSoundClientRpc(networkId, value); } [ClientRpc] public static void UpdateDrivingSoundClientRpc(ulong networkId, bool value) { GetRegistredCar(networkId)?.rcCarItem.StopDrivingSoundClient(value); } [ServerRpc] public static void CarGrabItemServerRpc(ulong networkId, ulong itemNetworkId) { CarGrabItemClientRpc(networkId, itemNetworkId); } [ClientRpc] public static void CarGrabItemClientRpc(ulong networkId, ulong itemNetworkId) { RegistredCar registredCar = GetRegistredCar(networkId); if (registredCar != null) { GrabbableObject item = GetItem(itemNetworkId); if (!((Object)(object)item == (Object)null)) { registredCar.rcCarItem.GrabItem(item); } } } [ServerRpc] public static void CarDropItemServerRpc(ulong networkId) { CarDropItemClientRpc(networkId); } [ClientRpc] public static void CarDropItemClientRpc(ulong networkId) { GetRegistredCar(networkId)?.rcCarItem.DropHeldItem(); } [ServerRpc] public static void SyncCarPositionServerRpc(ulong networkId, Vector3 pos) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) SyncCarPositionClientRpc(networkId, pos); } [ClientRpc] public static void SyncCarPositionClientRpc(ulong networkId, Vector3 pos) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) GetRegistredCar(networkId)?.rcCarItem.SyncPositionClient(pos); } [ServerRpc] public static void SetCarHealthServerRpc(ulong networkId, int health) { SetCarHealthClientRpc(networkId, health); } [ClientRpc] public static void SetCarHealthClientRpc(ulong networkId, int health) { GetRegistredCar(networkId)?.rcCarItem.SetNewHealth(health); } } public class RCPoliceCarItem : RCCarItem { [CompilerGenerated] private sealed class d__8 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public RCPoliceCarItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(10f); <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.blueLightsAnimationRunning = false; <>4__this.TurnOffBlueLights(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public List blueLights; private bool blueLightsAnimationRunning; private int actualBlueLightEnabled; private float blueLightsAnimationTimer; private float blueLightsInterval = 0.5f; public override void Start() { TurnOffBlueLights(); base.Start(); } public void SwitchBlueLights() { ((Behaviour)blueLights[0]).enabled = actualBlueLightEnabled == 1; ((Behaviour)blueLights[1]).enabled = actualBlueLightEnabled == 0; actualBlueLightEnabled = ((actualBlueLightEnabled == 0) ? 1 : 0); } public void TurnOffBlueLights() { blueLights.ForEach(delegate(Light l) { ((Behaviour)l).enabled = false; }); } [IteratorStateMachine(typeof(d__8))] public IEnumerator RunBlueLightsAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__8(0) { <>4__this = this }; } public override void Honk() { base.Honk(); blueLightsAnimationRunning = true; ((MonoBehaviour)this).StopCoroutine(RunBlueLightsAnimation()); ((MonoBehaviour)this).StartCoroutine(RunBlueLightsAnimation()); } public override void Update() { if (blueLightsAnimationRunning) { blueLightsAnimationTimer += Time.deltaTime; if (blueLightsAnimationTimer >= blueLightsInterval) { SwitchBlueLights(); blueLightsAnimationTimer = 0f; } } base.Update(); } } public class RegistredCar { public ulong networkObjectId; public RCCarItem rcCarItem; } }