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 LethalPisser v1.0.0
LethalPisser.dll
Decompiled 2 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using Microsoft.CodeAnalysis; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LethalPisser")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LethalPisser")] [assembly: AssemblyTitle("LethalPisser")] [assembly: AssemblyVersion("1.0.0.0")] [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 LethalPisser { [BepInPlugin("com.lethalpisser.plugin", "LethalPisser", "1.1.0")] public sealed class LethalPisserPlugin : BaseUnityPlugin { public const string PluginGuid = "com.lethalpisser.plugin"; public const string PluginName = "LethalPisser"; public const string PluginVersion = "1.1.0"; private const string RequestMessageName = "LethalPisser.RequestPeeState"; private const string StateMessageName = "LethalPisser.PeeState"; private const float ChargerShockCooldown = 0.85f; private const int ChargerShockDamage = 35; private static ManualLogSource? logger; private readonly Dictionary<ulong, PeeStream> activeStreams = new Dictionary<ulong, PeeStream>(); private readonly List<ulong> staleStreamIds = new List<ulong>(); private InputAction? peeAction; private NetworkManager? registeredNetworkManager; private bool localPlayerIsPeeing; private float nextLocalChargerShockTime; private void Awake() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_002e: 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) logger = ((BaseUnityPlugin)this).Logger; peeAction = new InputAction("LethalPisser.Pee", (InputActionType)1, (string)null, (string)null, (string)null, (string)null); InputActionSetupExtensions.AddBinding(peeAction, "<Keyboard>/p", (string)null, (string)null, (string)null); InputActionSetupExtensions.AddBinding(peeAction, "<Gamepad>/dpad/up", (string)null, (string)null, (string)null); peeAction.Enable(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"LethalPisser 1.1.0 loaded for Lethal Company v81."); } private void Update() { EnsureNetworkHandlers(); UpdateLocalPeeInput(); CleanupInvalidStreams(); } private void OnDestroy() { StopLocalPeeing(); UnregisterNetworkHandlers(); InputAction? obj = peeAction; if (obj != null) { obj.Disable(); } InputAction? obj2 = peeAction; if (obj2 != null) { obj2.Dispose(); } peeAction = null; foreach (PeeStream value in activeStreams.Values) { if ((Object)(object)value != (Object)null) { Object.Destroy((Object)(object)((Component)value).gameObject); } } activeStreams.Clear(); } private void UpdateLocalPeeInput() { PlayerControllerB localPlayer = GetLocalPlayer(); if (!CanPlayerPee(localPlayer)) { if (localPlayerIsPeeing) { StopLocalPeeing(); } return; } bool flag = IsPeeInputHeld(); if (flag == localPlayerIsPeeing) { if (localPlayerIsPeeing && (Object)(object)localPlayer != (Object)null) { SetPeeState(localPlayer.playerClientId, isPeeing: true); } } else if (flag) { StartLocalPeeing(localPlayer); } else { StopLocalPeeing(); } } private static PlayerControllerB? GetLocalPlayer() { if ((Object)(object)GameNetworkManager.Instance != (Object)null && (Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null) { return GameNetworkManager.Instance.localPlayerController; } if (!((Object)(object)StartOfRound.Instance != (Object)null)) { return null; } return StartOfRound.Instance.localPlayerController; } private static bool CanPlayerPee(PlayerControllerB? player) { if ((Object)(object)player == (Object)null || !player.isPlayerControlled || player.isPlayerDead) { return false; } if (player.isTypingChat || player.inTerminalMenu) { return false; } if (!((Object)(object)player.quickMenuManager == (Object)null)) { return !player.quickMenuManager.isMenuOpen; } return true; } private bool IsPeeInputHeld() { try { if (peeAction != null) { return peeAction.IsPressed(); } } catch (Exception ex) { ManualLogSource? obj = logger; if (obj != null) { obj.LogDebug((object)("InputSystem read failed; falling back to legacy keyboard input. " + ex.Message)); } } return Input.GetKey((KeyCode)112); } private void StartLocalPeeing(PlayerControllerB localPlayer) { localPlayerIsPeeing = true; SetPeeState(localPlayer.playerClientId, isPeeing: true); SendPeeState(localPlayer.playerClientId, isPeeing: true); } private void StopLocalPeeing() { if (localPlayerIsPeeing) { localPlayerIsPeeing = false; PlayerControllerB localPlayer = GetLocalPlayer(); if (!((Object)(object)localPlayer == (Object)null)) { SetPeeState(localPlayer.playerClientId, isPeeing: false); SendPeeState(localPlayer.playerClientId, isPeeing: false); } } } private void EnsureNetworkHandlers() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown NetworkManager singleton = NetworkManager.Singleton; if (!((Object)(object)singleton == (Object)null) && singleton.CustomMessagingManager != null && registeredNetworkManager != singleton) { UnregisterNetworkHandlers(); singleton.CustomMessagingManager.RegisterNamedMessageHandler("LethalPisser.RequestPeeState", new HandleNamedMessageDelegate(HandleRequestMessage)); singleton.CustomMessagingManager.RegisterNamedMessageHandler("LethalPisser.PeeState", new HandleNamedMessageDelegate(HandleStateMessage)); registeredNetworkManager = singleton; } } private void UnregisterNetworkHandlers() { if ((Object)(object)registeredNetworkManager == (Object)null || registeredNetworkManager.CustomMessagingManager == null) { registeredNetworkManager = null; return; } registeredNetworkManager.CustomMessagingManager.UnregisterNamedMessageHandler("LethalPisser.RequestPeeState"); registeredNetworkManager.CustomMessagingManager.UnregisterNamedMessageHandler("LethalPisser.PeeState"); registeredNetworkManager = null; } private void SendPeeState(ulong playerClientId, bool isPeeing) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if ((Object)(object)singleton == (Object)null || singleton.CustomMessagingManager == null || !singleton.IsListening) { return; } if (singleton.IsServer) { BroadcastPeeState(playerClientId, isPeeing); return; } FastBufferWriter val = CreateStateWriter(playerClientId, isPeeing); try { singleton.CustomMessagingManager.SendNamedMessage("LethalPisser.RequestPeeState", 0uL, val, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } private void HandleRequestMessage(ulong senderClientId, FastBufferReader reader) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if (!((Object)(object)singleton == (Object)null) && singleton.IsServer && TryReadState(reader, out var playerClientId, out var isPeeing)) { PlayerControllerB val = FindPlayerByPlayerClientId(playerClientId); if (!((Object)(object)val == (Object)null) && val.actualClientId == senderClientId) { SetPeeState(playerClientId, isPeeing); BroadcastPeeState(playerClientId, isPeeing); } } } private void HandleStateMessage(ulong senderClientId, FastBufferReader reader) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) NetworkManager singleton = NetworkManager.Singleton; if ((!((Object)(object)singleton != (Object)null) || singleton.IsServer || senderClientId == 0L) && TryReadState(reader, out var playerClientId, out var isPeeing)) { SetPeeState(playerClientId, isPeeing); } } private void BroadcastPeeState(ulong playerClientId, bool isPeeing) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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) NetworkManager singleton = NetworkManager.Singleton; if ((Object)(object)singleton == (Object)null || singleton.CustomMessagingManager == null || !singleton.IsServer || !singleton.IsListening) { return; } FastBufferWriter val = CreateStateWriter(playerClientId, isPeeing); try { singleton.CustomMessagingManager.SendNamedMessageToAll("LethalPisser.PeeState", val, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } private static FastBufferWriter CreateStateWriter(ulong playerClientId, bool isPeeing) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) FastBufferWriter result = default(FastBufferWriter); ((FastBufferWriter)(ref result))..ctor(16, (Allocator)2, -1); ((FastBufferWriter)(ref result)).WriteValueSafe<ulong>(ref playerClientId, default(ForPrimitives)); ((FastBufferWriter)(ref result)).WriteValueSafe<bool>(ref isPeeing, default(ForPrimitives)); return result; } private static bool TryReadState(FastBufferReader reader, out ulong playerClientId, out bool isPeeing) { //IL_000c: 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_001d: 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) playerClientId = 0uL; isPeeing = false; try { ((FastBufferReader)(ref reader)).ReadValueSafe<ulong>(ref playerClientId, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref isPeeing, default(ForPrimitives)); return true; } catch (Exception ex) { ManualLogSource? obj = logger; if (obj != null) { obj.LogWarning((object)("Failed to read pee state message: " + ex.Message)); } return false; } } private void SetPeeState(ulong playerClientId, bool isPeeing) { if (!isPeeing) { StopStream(playerClientId); return; } PlayerControllerB val = FindPlayerByPlayerClientId(playerClientId); PeeStream value; if (!CanRenderPeeStream(val)) { DestroyStream(playerClientId); } else if (activeStreams.TryGetValue(playerClientId, out value) && (Object)(object)value != (Object)null) { value.Bind(val, OnStreamHitCharger); } else { activeStreams[playerClientId] = PeeStream.Create(val, OnStreamHitCharger); } } private void StopStream(ulong playerClientId) { if (activeStreams.TryGetValue(playerClientId, out PeeStream value) && (Object)(object)value != (Object)null) { value.StopFlow(); } } private void OnStreamHitCharger(PlayerControllerB streamPlayer, ItemCharger charger, Vector3 hitPoint) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayer = GetLocalPlayer(); if (!((Object)(object)localPlayer == (Object)null) && !((Object)(object)streamPlayer != (Object)(object)localPlayer) && !localPlayer.isPlayerDead && !(Time.time < nextLocalChargerShockTime)) { nextLocalChargerShockTime = Time.time + 0.85f; PlayLocalChargerZap(charger); charger.PlayChargeItemEffectServerRpc((int)localPlayer.playerClientId); Vector3 val = ((Component)localPlayer).transform.position - hitPoint; Vector3 val2 = ((Vector3)(ref val)).normalized * 10f + Vector3.up * 4f; localPlayer.DamagePlayer(35, true, true, (CauseOfDeath)11, 0, false, val2); } } private static void PlayLocalChargerZap(ItemCharger charger) { if ((Object)(object)charger.zapAudio != (Object)null) { charger.zapAudio.Play(); } if ((Object)(object)charger.chargeStationAnimator != (Object)null) { charger.chargeStationAnimator.SetTrigger("zap"); } } private static bool CanRenderPeeStream(PlayerControllerB? player) { if ((Object)(object)player != (Object)null && player.isPlayerControlled && !player.isPlayerDead) { return ((Component)player).gameObject.activeInHierarchy; } return false; } private static PlayerControllerB? FindPlayerByPlayerClientId(ulong playerClientId) { PlayerControllerB[] array = (((Object)(object)StartOfRound.Instance != (Object)null) ? StartOfRound.Instance.allPlayerScripts : null); if (array == null) { return null; } foreach (PlayerControllerB val in array) { if ((Object)(object)val != (Object)null && val.playerClientId == playerClientId) { return val; } } return null; } private void CleanupInvalidStreams() { staleStreamIds.Clear(); foreach (KeyValuePair<ulong, PeeStream> activeStream in activeStreams) { if ((Object)(object)activeStream.Value == (Object)null || !activeStream.Value.HasValidTarget) { staleStreamIds.Add(activeStream.Key); } } for (int i = 0; i < staleStreamIds.Count; i++) { DestroyStream(staleStreamIds[i]); } } private void DestroyStream(ulong playerClientId) { if (activeStreams.TryGetValue(playerClientId, out PeeStream value)) { activeStreams.Remove(playerClientId); if ((Object)(object)value != (Object)null) { Object.Destroy((Object)(object)((Component)value).gameObject); } } } } internal sealed class PeeStream : MonoBehaviour { private const int MaxSegments = 16; private const float SegmentTime = 0.045f; private const float StreamSpeed = 11.5f; private const float GravityScale = 0.58f; private const float SplashEmissionRate = 45f; private const float BaseAudioVolume = 0.08f; private const float FizzleDuration = 0.7f; private const float MinimumShockStrength = 0.35f; private static readonly Color streamColor = new Color(1f, 0.78f, 0.12f, 0.92f); private static readonly Color streamEndColor = new Color(1f, 0.95f, 0.35f, 0.55f); private static Material? streamMaterial; private static AudioClip? streamAudioClip; private readonly Vector3[] pathPoints = (Vector3[])(object)new Vector3[16]; private readonly RaycastHit[] raycastHits = (RaycastHit[])(object)new RaycastHit[12]; private PlayerControllerB? player; private Action<PlayerControllerB, ItemCharger, Vector3>? chargerHitHandler; private LineRenderer lineRenderer; private ParticleSystem splashParticles; private AudioSource audioSource; private float seed; private bool isFlowing = true; private float fizzleTimer; public bool HasValidTarget { get { if ((Object)(object)player != (Object)null && player.isPlayerControlled && !player.isPlayerDead) { return ((Component)player).gameObject.activeInHierarchy; } return false; } } public static PeeStream Create(PlayerControllerB player, Action<PlayerControllerB, ItemCharger, Vector3> chargerHitHandler) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) PeeStream peeStream = new GameObject($"LethalPisser_Stream_{player.playerClientId}").AddComponent<PeeStream>(); peeStream.Bind(player, chargerHitHandler); return peeStream; } public void Bind(PlayerControllerB targetPlayer, Action<PlayerControllerB, ItemCharger, Vector3> chargerHitHandler) { player = targetPlayer; this.chargerHitHandler = chargerHitHandler; isFlowing = true; fizzleTimer = 0f; } public void StopFlow() { isFlowing = false; fizzleTimer = 0f; } private void Awake() { seed = Random.Range(0f, 1000f); lineRenderer = ((Component)this).gameObject.AddComponent<LineRenderer>(); ConfigureLineRenderer(); ConfigureSplashParticles(); ConfigureAudio(); } private void OnDestroy() { if ((Object)(object)audioSource != (Object)null) { audioSource.Stop(); } } private void LateUpdate() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00ae: 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_00ba: 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_00d1: 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_0168: Unknown result type (might be due to invalid IL or missing references) if (!HasValidTarget || (Object)(object)player == (Object)null) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } float streamStrength = GetStreamStrength(); if (streamStrength <= 0f) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { if (!TryGetEmitter(streamStrength, out var origin, out var velocity)) { return; } int pointCount; Vector3 impactPoint; Vector3 impactNormal; Collider hitCollider; bool flag = BuildPath(origin, velocity, streamStrength, out pointCount, out impactPoint, out impactNormal, out hitCollider); lineRenderer.positionCount = pointCount; lineRenderer.widthMultiplier = streamStrength; for (int i = 0; i < pointCount; i++) { lineRenderer.SetPosition(i, pathPoints[i]); } ((Component)splashParticles).transform.position = impactPoint + impactNormal * 0.015f; ((Component)splashParticles).transform.rotation = Quaternion.LookRotation(impactNormal); SetSplashEmission(flag ? (45f * streamStrength) : 0f); ((Component)audioSource).transform.position = origin; audioSource.volume = 0.08f * streamStrength; if (!audioSource.isPlaying) { audioSource.Play(); } if (flag && streamStrength >= 0.35f && (Object)(object)hitCollider != (Object)null) { ItemCharger componentInParent = ((Component)hitCollider).GetComponentInParent<ItemCharger>(); if ((Object)(object)componentInParent != (Object)null) { chargerHitHandler?.Invoke(player, componentInParent, impactPoint); } } } } private void ConfigureLineRenderer() { //IL_006c: 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_0087: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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_0137: Unknown result type (might be due to invalid IL or missing references) lineRenderer.useWorldSpace = true; lineRenderer.textureMode = (LineTextureMode)0; lineRenderer.alignment = (LineAlignment)0; lineRenderer.numCapVertices = 5; lineRenderer.numCornerVertices = 3; ((Renderer)lineRenderer).shadowCastingMode = (ShadowCastingMode)0; ((Renderer)lineRenderer).receiveShadows = false; lineRenderer.widthCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 0.035f), new Keyframe(0.7f, 0.028f), new Keyframe(1f, 0.012f) }); Material material = GetMaterial(); if ((Object)(object)material != (Object)null) { ((Renderer)lineRenderer).material = material; } Gradient val = new Gradient(); val.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(streamColor, 0f), new GradientColorKey(streamEndColor, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(streamColor.a, 0f), new GradientAlphaKey(streamEndColor.a, 1f) }); lineRenderer.colorGradient = val; } private void ConfigureSplashParticles() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_0136: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Expected O, but got Unknown //IL_017c: 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_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0192: 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_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("Splash"); val.transform.SetParent(((Component)this).transform, false); splashParticles = val.AddComponent<ParticleSystem>(); MainModule main = splashParticles.main; ((MainModule)(ref main)).loop = true; ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(0.12f, 0.28f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(0.25f, 0.85f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.018f, 0.04f); ((MainModule)(ref main)).startColor = new MinMaxGradient(streamColor, streamEndColor); ((MainModule)(ref main)).maxParticles = 90; EmissionModule emission = splashParticles.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(45f); ShapeModule shape = splashParticles.shape; ((ShapeModule)(ref shape)).enabled = true; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)4; ((ShapeModule)(ref shape)).angle = 38f; ((ShapeModule)(ref shape)).radius = 0.025f; VelocityOverLifetimeModule velocityOverLifetime = splashParticles.velocityOverLifetime; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled = true; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).space = (ParticleSystemSimulationSpace)0; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).y = new MinMaxCurve(0.08f, 0.45f); ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).x = new MinMaxCurve(-0.25f, 0.25f); ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).z = new MinMaxCurve(-0.25f, 0.25f); ColorOverLifetimeModule colorOverLifetime = splashParticles.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true; Gradient val2 = new Gradient(); val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(streamColor, 0f), new GradientColorKey(streamEndColor, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(0.85f, 0f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val2); ParticleSystemRenderer component = val.GetComponent<ParticleSystemRenderer>(); component.renderMode = (ParticleSystemRenderMode)0; ((Renderer)component).sortingOrder = 1; Material material = GetMaterial(); if ((Object)(object)material != (Object)null) { ((Renderer)component).material = material; } } private void ConfigureAudio() { audioSource = ((Component)this).gameObject.AddComponent<AudioSource>(); audioSource.clip = GetAudioClip(); audioSource.loop = true; audioSource.playOnAwake = false; audioSource.spatialBlend = 1f; audioSource.dopplerLevel = 0f; audioSource.rolloffMode = (AudioRolloffMode)1; audioSource.minDistance = 1.5f; audioSource.maxDistance = 9f; audioSource.volume = 0.08f; } private float GetStreamStrength() { if (isFlowing) { return 1f; } fizzleTimer += Time.deltaTime; float num = Mathf.Clamp01(fizzleTimer / 0.7f); return Mathf.SmoothStep(1f, 0f, num); } private bool TryGetEmitter(float streamStrength, out Vector3 origin, out Vector3 velocity) { //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_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0058: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) origin = Vector3.zero; velocity = Vector3.zero; if ((Object)(object)player == (Object)null) { return false; } Transform val = (((Object)(object)player.gameplayCamera != (Object)null) ? ((Component)player.gameplayCamera).transform : ((Component)player).transform); Vector3 forward = val.forward; Vector3 forward2 = ((Component)player).transform.forward; Vector3 val2 = Vector3.Cross(Vector3.up, forward2); if (((Vector3)(ref val2)).sqrMagnitude < 0.01f) { val2 = ((Component)player).transform.right; } ((Vector3)(ref val2)).Normalize(); bool flag = (Object)(object)GameNetworkManager.Instance != (Object)null && (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)(object)player; origin = (flag ? (val.position + forward * 0.22f - val.up * 0.48f + val2 * 0.04f) : (((Component)player).transform.position + Vector3.up * 0.78f + forward2 * 0.34f + val2 * 0.04f)); float num = Mathf.Sin(Time.time * 24f + seed) * 1.35f; float num2 = Mathf.Sin(Time.time * 31f + seed * 0.37f) * 0.75f; Quaternion val3 = Quaternion.AngleAxis(num, Vector3.up) * Quaternion.AngleAxis(num2, val2); Vector3 val4 = forward + Vector3.down * 0.11f; Vector3 val5 = val3 * ((Vector3)(ref val4)).normalized; velocity = ((Vector3)(ref val5)).normalized * Mathf.Lerp(2.5f, 11.5f, streamStrength); return true; } private bool BuildPath(Vector3 origin, Vector3 velocity, float streamStrength, out int pointCount, out Vector3 impactPoint, out Vector3 impactNormal, out Collider? hitCollider) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0013: 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) //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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0061: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_0083: 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_008a: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_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_0104: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) pathPoints[0] = origin; pointCount = 1; impactPoint = origin; impactNormal = Vector3.up; hitCollider = null; Vector3 from = origin; bool flag = false; int num = Mathf.Max(3, Mathf.CeilToInt(16f * Mathf.Lerp(0.22f, 1f, streamStrength))); for (int i = 1; i < num; i++) { float num2 = (float)i * 0.045f; Vector3 val = origin + velocity * num2 + Physics.gravity * (0.29f * num2 * num2); val += Vector3.right * (Mathf.Sin(Time.time * 18f + seed + (float)i * 0.8f) * 0.01f * (float)i * streamStrength); if (TryGetSegmentHit(from, val, out var closestHit)) { pathPoints[pointCount] = ((RaycastHit)(ref closestHit)).point; pointCount++; impactPoint = ((RaycastHit)(ref closestHit)).point; Vector3 normal = ((RaycastHit)(ref closestHit)).normal; impactNormal = ((((Vector3)(ref normal)).sqrMagnitude > 0.01f) ? ((RaycastHit)(ref closestHit)).normal : Vector3.up); hitCollider = ((RaycastHit)(ref closestHit)).collider; flag = true; break; } pathPoints[pointCount] = val; pointCount++; from = val; } if (!flag) { impactPoint = pathPoints[pointCount - 1]; } return flag; } private bool TryGetSegmentHit(Vector3 from, Vector3 to, out RaycastHit closestHit) { //IL_0001: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_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_0024: 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_0086: 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) closestHit = default(RaycastHit); Vector3 val = to - from; float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude <= 0.001f) { return false; } int num = Physics.RaycastNonAlloc(from, val / magnitude, raycastHits, magnitude, -1, (QueryTriggerInteraction)2); float num2 = float.MaxValue; bool result = false; for (int i = 0; i < num; i++) { RaycastHit val2 = raycastHits[i]; if (!((Object)(object)((RaycastHit)(ref val2)).collider == (Object)null) && !ShouldIgnoreCollider(((RaycastHit)(ref val2)).collider) && ((RaycastHit)(ref val2)).distance < num2) { num2 = ((RaycastHit)(ref val2)).distance; closestHit = val2; result = true; } } return result; } private bool ShouldIgnoreCollider(Collider hitCollider) { if ((Object)(object)player == (Object)null) { return true; } if ((Object)(object)((Component)hitCollider).transform == (Object)(object)((Component)player).transform || ((Component)hitCollider).transform.IsChildOf(((Component)player).transform)) { return true; } if (hitCollider.isTrigger) { return (Object)(object)((Component)hitCollider).GetComponentInParent<ItemCharger>() == (Object)null; } return false; } private void SetSplashEmission(float rate) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) EmissionModule emission = splashParticles.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(rate); } private static Material? GetMaterial() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_0092: 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_00dc: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)streamMaterial != (Object)null) { return streamMaterial; } Shader val = Shader.Find("Sprites/Default") ?? Shader.Find("HDRP/Unlit") ?? Shader.Find("Universal Render Pipeline/Unlit") ?? Shader.Find("Unlit/Color") ?? Shader.Find("Standard"); if ((Object)(object)val == (Object)null) { return null; } streamMaterial = new Material(val) { name = "LethalPisser_StreamMaterial" }; if (streamMaterial.HasProperty("_Color")) { streamMaterial.SetColor("_Color", streamColor); } if (streamMaterial.HasProperty("_BaseColor")) { streamMaterial.SetColor("_BaseColor", streamColor); } if (streamMaterial.HasProperty("_UnlitColor")) { streamMaterial.SetColor("_UnlitColor", streamColor); } return streamMaterial; } private static AudioClip GetAudioClip() { if ((Object)(object)streamAudioClip != (Object)null) { return streamAudioClip; } int num = Mathf.CeilToInt(9922.5f); float[] array = new float[num]; int num2 = 7231; for (int i = 0; i < num; i++) { num2 = num2 * 1103515245 + 12345; float num3 = (float)((num2 >> 16) & 0x7FFF) / 16384f - 1f; float num4 = Mathf.Sin((float)i * 0.17f) * 0.012f + Mathf.Sin((float)i * 0.041f) * 0.008f; array[i] = num3 * 0.018f + num4; } streamAudioClip = AudioClip.Create("LethalPisser_StreamLoop", num, 1, 22050, false); streamAudioClip.SetData(array, 0); return streamAudioClip; } } }