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+a0f156be1948ff33140808bae7b044c81da8f9b1")]
[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.4")]
public class RCCarsPlugin : BaseUnityPlugin
{
private const string GUID = "wexop.rc_cars";
private const string NAME = "RCCars";
private const string VERSION = "1.0.4";
public static RCCarsPlugin instance;
public Dictionary<ulong, RegistredCar> RegistredCars = new Dictionary<ulong, RegistredCar>();
public ConfigEntry<float> honkVolume;
public ConfigEntry<float> engineVolume;
public ConfigEntry<float> rotationSpeed;
public ConfigEntry<int> explosionDamage;
public ConfigEntry<float> syncInterval;
public ConfigEntry<string> blacklistCar;
public ConfigEntry<int> carPrice;
public ConfigEntry<int> policeCarPrice;
public ConfigEntry<int> ambulanceCarPrice;
public ConfigEntry<int> sportCarPrice;
public ConfigEntry<int> bombCarPrice;
public ConfigEntry<int> cruiserCarPrice;
public ConfigEntry<int> wexopCarPrice;
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<Item>("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<Item>("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<Item>("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<Item>("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<Item>("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<Item>("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<Item>("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<float>("General", "honkVolume", 1f, "Honk volume. No need to restart the game :)");
CreateFloatConfig(honkVolume, 0f, 2f);
engineVolume = ((BaseUnityPlugin)this).Config.Bind<float>("General", "engineVolume", 0.2f, "Engine volume. No need to restart the game :)");
CreateFloatConfig(engineVolume, 0f, 2f);
rotationSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("General", "rotationSpeed", 7f, "Cars rotation speed. No need to restart the game :)");
CreateFloatConfig(rotationSpeed, 0f, 200f);
explosionDamage = ((BaseUnityPlugin)this).Config.Bind<int>("General", "explosionDamage", 50, "Cars explosion damage on destroy. No need to restart the game :)");
CreateIntConfig(explosionDamage, 0, 200);
blacklistCar = ((BaseUnityPlugin)this).Config.Bind<string>("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);
syncInterval = ((BaseUnityPlugin)this).Config.Bind<float>("General", "syncInterval", 0.35f, "Cars sync interval between players. No need to restart the game :)");
CreateFloatConfig(syncInterval, 0f, 2f);
carPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "carPrice", 100, "Normal car price. You need to restart the game.");
CreateIntConfig(carPrice, 0, 1000, restart: true);
policeCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "policeCarPrice", 150, "Police car price. You need to restart the game.");
CreateIntConfig(policeCarPrice, 0, 1000, restart: true);
ambulanceCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "ambulanceCarPrice", 175, "Ambulance car price. You need to restart the game.");
CreateIntConfig(ambulanceCarPrice, 0, 1000, restart: true);
sportCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "sportCarPrice", 200, "Sport car price. You need to restart the game.");
CreateIntConfig(sportCarPrice, 0, 1000, restart: true);
bombCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "bombCarPrice", 75, "Bomb car price. You need to restart the game.");
CreateIntConfig(bombCarPrice, 0, 1000, restart: true);
cruiserCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("Price", "cruiserCarPrice", 125, "Cruiser car price. You need to restart the game.");
CreateIntConfig(cruiserCarPrice, 0, 1000, restart: true);
wexopCarPrice = ((BaseUnityPlugin)this).Config.Bind<int>("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<float> 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<float>)val).Min = min;
((BaseRangeOptions<float>)val).Max = max;
((BaseOptions)val).RequiresRestart = false;
FloatSliderConfigItem val2 = new FloatSliderConfigItem(configEntry, val);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
}
private void CreateIntConfig(ConfigEntry<int> 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<int>)val).Min = min;
((BaseRangeOptions<int>)val).Max = max;
((BaseOptions)val).RequiresRestart = restart;
IntSliderConfigItem val2 = new IntSliderConfigItem(configEntry, val);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
}
private void CreateStringConfig(ConfigEntry<string> 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<bool> 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<MeshRenderer>();
((Renderer)component).renderingLayerMask = 257u;
}
}
public class RCBombCarItem : RCCarItem
{
public override void Honk()
{
SetNewHealth(0);
}
}
public class RCCarItem : PhysicsProp, IHittable
{
public Rigidbody rigidbody;
public NavMeshAgent navMeshAgent;
public TextMeshProUGUI playerText;
public List<Light> 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<string> list = new List<string> { "[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);
}
public IEnumerator SetPlayerBack(PlayerControllerB player)
{
yield return (object)new WaitForSeconds((Health <= 0) ? 0.8f : 0f);
EnableCamera(enable: false);
if ((Object)(object)playerCamera != (Object)null)
{
player.gameplayCamera = playerCamera;
}
player.disableMoveInput = false;
player.disableLookInput = false;
player.disableInteract = false;
HUDManager.Instance.ClearControlTips();
}
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_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);
((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)
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);
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<float>();
if (num > 0f && honkTimer >= honkInterval)
{
HonkOnEveryClient();
}
Vector3 val = Vector2.op_Implicit(IngamePlayerSettings.Instance.playerInput.actions.FindAction("Move", false).ReadValue<Vector2>());
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_028c: 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<float>();
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<float>();
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<GrabbableObject>();
if (component.grabbable)
{
((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<EnemyAI> list = Object.FindObjectsOfType<EnemyAI>().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<RCCarItem> list2 = Object.FindObjectsOfType<RCCarItem>().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());
}
public IEnumerator DestroyObject()
{
carBody.SetActive(false);
yield return (object)new WaitForSeconds(1f);
RCCarsPlugin.instance.RegistredCars.Remove(((NetworkBehaviour)this).NetworkObjectId);
if (((NetworkBehaviour)this).IsServer)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
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<GrabbableObject> list = Object.FindObjectsByType<GrabbableObject>((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
{
public List<Light> 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;
});
}
public IEnumerator RunBlueLightsAnimation()
{
yield return (object)new WaitForSeconds(10f);
blueLightsAnimationRunning = false;
TurnOffBlueLights();
}
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;
}
}