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 abandonedcompanyassetsfork v0.17.2
BepInEx/plugins/AbandonedCompanyAssets.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using AbandonedCompanyAssets.NetcodePatcher; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; [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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("AbandonedCompanyAssets")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Find abandoned company assets.")] [assembly: AssemblyFileVersion("0.17.2.0")] [assembly: AssemblyInformationalVersion("0.17.2")] [assembly: AssemblyProduct("AbandonedCompanyAssets")] [assembly: AssemblyTitle("AbandonedCompanyAssets")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.17.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] 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 AbandonedCompanyAssets { [BepInPlugin("AbandonedCompanyAssets", "AbandonedCompanyAssets", "0.17.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource ACALog; internal static Plugin instance; private void Awake() { instance = this; ACALog = ((BaseUnityPlugin)this).Logger; TerminalNode val = ScriptableObject.CreateInstance<TerminalNode>(); val.clearPreviousText = true; val.displayText = "The Candle. A cheap but extremely unreliable method of lighting your way. The Company is not responsible for any fires.\n\n"; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin AbandonedCompanyAssets is loaded!"); } } public static class PluginInfo { public const string PLUGIN_GUID = "AbandonedCompanyAssets"; public const string PLUGIN_NAME = "AbandonedCompanyAssets"; public const string PLUGIN_VERSION = "0.17.2"; } } namespace AbandonedCompanyAssets.itemStuff { internal sealed class AbandonedFlashlightStuff : FlashlightItem { private enum FaultyTrait { None, Flicker, DrainWhenOff, FastDrainWhenOn, DropWhenHeld, BulbFail } [SerializeField] private AudioClip bulbFlickerClip; [SerializeField] private AudioClip bulbExplodeClip; [SerializeField] private float minIntensity = 50f; [SerializeField] private float maxIntensity = 120f; [SerializeField] [Min(1f)] private int smoothingSamples = 12; [SerializeField] [Min(0.001f)] private float flickerTickIntervalSeconds = 0.03f; private readonly NetworkVariable<int> syncedTraitId = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); private int savedTraitId; private bool hasSavedTrait; private FaultyTrait trait; private int lastAppliedTraitId; private bool serverTraitPushed; private bool loggedOnce; private float revealDelaySeconds; private float revealTimerSeconds; private bool traitRevealed; private AudioSource audioSource; private float flickerTickTimer; private float targetIntensity; private float currentIntensity; private Light activeFlickerLight; private float activeFlickerBaselineIntensity; private bool activeFlickerBaselineCaptured; private PlayerControllerB cachedHelmetOwner; private float helmetOwnerRescanSeconds; private float dropTimerSeconds; private float nextDropDelaySeconds; private float bulbFailTimerSeconds; private float nextBulbFailDelaySeconds; private int bulbFailures; public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); int num = syncedTraitId.Value; if (num < 1 || num > 5) { num = ((savedTraitId < 1 || savedTraitId > 5) ? 1 : savedTraitId); } return num; } public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); if (saveData >= 1 && saveData <= 5) { savedTraitId = saveData; hasSavedTrait = true; } else { savedTraitId = 0; hasSavedTrait = false; } serverTraitPushed = false; } public override void Start() { ((FlashlightItem)this).Start(); audioSource = base.flashlightAudio ?? ((Component)this).GetComponent<AudioSource>(); revealDelaySeconds = Random.Range(10f, 30f); nextDropDelaySeconds = Random.Range(120f, 240f); nextBulbFailDelaySeconds = Random.Range(45f, 120f); float num = Mathf.Min(minIntensity, maxIntensity); float num2 = Mathf.Max(minIntensity, maxIntensity); currentIntensity = Random.Range(num, num2); targetIntensity = currentIntensity; if (((NetworkBehaviour)this).IsServer) { PushTraitToClientsIfNeeded(); } ApplyTraitFromNetvar(); } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if (((NetworkBehaviour)this).IsServer) { PushTraitToClientsIfNeeded(); } } public override void Update() { //IL_023c: Unknown result type (might be due to invalid IL or missing references) ((FlashlightItem)this).Update(); if (((NetworkBehaviour)this).IsServer) { PushTraitToClientsIfNeeded(); } ApplyTraitFromNetvar(); if (!traitRevealed && (((GrabbableObject)this).isHeld || ((GrabbableObject)this).isBeingUsed)) { revealTimerSeconds += Time.deltaTime; if (revealTimerSeconds >= revealDelaySeconds) { traitRevealed = true; } } if (!traitRevealed || trait == FaultyTrait.None) { RestoreFlickerBaseline(); return; } if (trait == FaultyTrait.Flicker) { UpdateFlicker(); return; } RestoreFlickerBaseline(); if (((GrabbableObject)this).insertedBattery != null && ((GrabbableObject)this).insertedBattery.charge > 0f) { if (trait == FaultyTrait.DrainWhenOff && !((GrabbableObject)this).isBeingUsed) { ((GrabbableObject)this).insertedBattery.charge = Mathf.Max(0f, ((GrabbableObject)this).insertedBattery.charge - Time.deltaTime / 350f); ((GrabbableObject)this).insertedBattery.empty = ((GrabbableObject)this).insertedBattery.charge <= 0f; } else if (trait == FaultyTrait.FastDrainWhenOn && ((GrabbableObject)this).isBeingUsed) { ((GrabbableObject)this).insertedBattery.charge = Mathf.Max(0f, ((GrabbableObject)this).insertedBattery.charge - Time.deltaTime / 200f); ((GrabbableObject)this).insertedBattery.empty = ((GrabbableObject)this).insertedBattery.charge <= 0f; } } if (trait == FaultyTrait.DropWhenHeld) { if (((GrabbableObject)this).isHeld && ((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { dropTimerSeconds += Time.deltaTime; if (dropTimerSeconds >= nextDropDelaySeconds) { if (Random.Range(0, 100) > 60) { ((GrabbableObject)this).playerHeldBy.DiscardHeldObject(true, (NetworkObject)null, ((Component)((GrabbableObject)this).playerHeldBy).transform.position, true); } dropTimerSeconds = 0f; nextDropDelaySeconds = Random.Range(120f, 240f); } } else { dropTimerSeconds = 0f; } } if (trait != FaultyTrait.BulbFail) { return; } if (((GrabbableObject)this).isBeingUsed) { bulbFailTimerSeconds += Time.deltaTime; if (bulbFailTimerSeconds >= nextBulbFailDelaySeconds && Random.Range(0, 100) > 40) { bulbFailures++; bulbFailTimerSeconds = 0f; nextBulbFailDelaySeconds = Random.Range(45f, 120f); audioSource.pitch = Random.Range(0.8f, 1.1f); audioSource.PlayOneShot(bulbFlickerClip); if (((NetworkBehaviour)this).IsOwner) { ((FlashlightItem)this).SwitchFlashlight(false); } } } else { bulbFailTimerSeconds = 0f; } } public override void ChargeBatteries() { ((GrabbableObject)this).ChargeBatteries(); bulbFailures = 0; bulbFailTimerSeconds = 0f; nextBulbFailDelaySeconds = Random.Range(45f, 120f); } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_00d6: Unknown result type (might be due to invalid IL or missing references) ((FlashlightItem)this).ItemActivate(used, buttonDown); if (trait == FaultyTrait.BulbFail && used && bulbFailures >= 2 && Random.Range(0, 100) > 60) { audioSource.pitch = 1f; audioSource.PlayOneShot(bulbExplodeClip); if (((GrabbableObject)this).insertedBattery != null) { ((GrabbableObject)this).insertedBattery.charge = 0f; ((GrabbableObject)this).insertedBattery.empty = true; } if (((NetworkBehaviour)this).IsOwner && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.DiscardHeldObject(true, (NetworkObject)null, ((Component)((GrabbableObject)this).playerHeldBy).transform.position, true); } if (((NetworkBehaviour)this).IsOwner) { ((FlashlightItem)this).SwitchFlashlight(false); } } } private void PushTraitToClientsIfNeeded() { if (!serverTraitPushed || syncedTraitId.Value < 1 || syncedTraitId.Value > 5) { int num = 0; if (hasSavedTrait && savedTraitId >= 1 && savedTraitId <= 5) { num = savedTraitId; } if (num == 0) { num = Random.Range(1, 6); } syncedTraitId.Value = num; serverTraitPushed = true; if (!loggedOnce) { loggedOnce = true; Plugin.ACALog.LogDebug((object)$"AbandonedFlashlight trait={(FaultyTrait)num}"); } } } private void ApplyTraitFromNetvar() { int num = syncedTraitId.Value; if (num != lastAppliedTraitId) { lastAppliedTraitId = num; if (num < 0 || num > 5) { num = 0; } trait = (FaultyTrait)num; revealTimerSeconds = 0f; traitRevealed = false; dropTimerSeconds = 0f; bulbFailTimerSeconds = 0f; float num2 = Mathf.Min(minIntensity, maxIntensity); float num3 = Mathf.Max(minIntensity, maxIntensity); currentIntensity = Random.Range(num2, num3); targetIntensity = currentIntensity; flickerTickTimer = 0f; RestoreFlickerBaseline(); } } private void UpdateFlicker() { Light flickerLightTarget = GetFlickerLightTarget(); bool flag = ((GrabbableObject)this).isBeingUsed && ((Behaviour)flickerLightTarget).enabled; if (flag && (Object)(object)flickerLightTarget == (Object)(object)base.flashlightBulb && ((base.flashlightInterferenceLevel <= FlashlightItem.globalFlashlightInterferenceLevel) ? FlashlightItem.globalFlashlightInterferenceLevel : base.flashlightInterferenceLevel) != 0) { flag = false; } if (!flag) { RestoreFlickerBaseline(); return; } if ((Object)(object)activeFlickerLight != (Object)(object)flickerLightTarget) { RestoreFlickerBaseline(); activeFlickerLight = flickerLightTarget; activeFlickerBaselineIntensity = flickerLightTarget.intensity; activeFlickerBaselineCaptured = true; float num = Mathf.Min(minIntensity, maxIntensity); float num2 = Mathf.Max(minIntensity, maxIntensity); currentIntensity = Random.Range(num, num2); targetIntensity = currentIntensity; flickerTickTimer = 0f; } flickerTickTimer -= Time.deltaTime; if (flickerTickTimer <= 0f) { float num3 = Mathf.Min(minIntensity, maxIntensity); float num4 = Mathf.Max(minIntensity, maxIntensity); targetIntensity = Random.Range(num3, num4); flickerTickTimer = Mathf.Max(0.001f, flickerTickIntervalSeconds); } float num5 = 1f / (float)Mathf.Max(1, smoothingSamples); currentIntensity = Mathf.Lerp(currentIntensity, targetIntensity, num5); activeFlickerLight.intensity = currentIntensity; } private Light GetFlickerLightTarget() { if (!base.usingPlayerHelmetLight) { return base.flashlightBulb; } if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { cachedHelmetOwner = ((GrabbableObject)this).playerHeldBy; } if ((Object)(object)cachedHelmetOwner == (Object)null || (Object)(object)cachedHelmetOwner.helmetLight == (Object)null) { helmetOwnerRescanSeconds -= Time.deltaTime; if (helmetOwnerRescanSeconds <= 0f) { helmetOwnerRescanSeconds = 0.5f; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if ((Object)(object)val.pocketedFlashlight == (Object)(object)this) { cachedHelmetOwner = val; break; } } } } Light val2 = cachedHelmetOwner?.helmetLight; return val2 ?? base.flashlightBulb; } private void RestoreFlickerBaseline() { if (activeFlickerBaselineCaptured) { if ((Object)(object)activeFlickerLight != (Object)null) { activeFlickerLight.intensity = activeFlickerBaselineIntensity; } activeFlickerBaselineCaptured = false; activeFlickerLight = null; } } protected override void __initializeVariables() { if (syncedTraitId == null) { throw new Exception("AbandonedFlashlightStuff.syncedTraitId cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)syncedTraitId).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)syncedTraitId, "syncedTraitId"); ((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)syncedTraitId); ((FlashlightItem)this).__initializeVariables(); } protected override void __initializeRpcs() { ((FlashlightItem)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "AbandonedFlashlightStuff"; } } internal sealed class AbandonedWalkieStuff : WalkieTalkie { private enum FaultyTrait { None, Distortion, FastDrainWhenOn, HalfChargeOnRecharge, RandomPowerOff, RandomGarbled, DrainWhenOff } private readonly NetworkVariable<int> syncedTraitId = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); private int savedTraitId; private bool hasSavedTrait; private bool serverTraitPushed; private int randomtrait; private bool traitGenerated; private float powertimer; private float randompowerofftime; private float randomgarbletime; private float stoprandomgarble; private float maintimer; private float revealtime; private float garbletimer; private int lastAppliedTraitId = int.MinValue; private AudioDistortionFilter cachedDistortion; private bool distortionSearched; public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); int num = syncedTraitId.Value; if (num < 0 || num > 6) { num = ((savedTraitId >= 0 && savedTraitId <= 6) ? savedTraitId : 0); } return num; } public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); if (saveData >= 0 && saveData <= 6) { savedTraitId = saveData; hasSavedTrait = true; } else { savedTraitId = 0; hasSavedTrait = false; } serverTraitPushed = false; } public override void Start() { ((WalkieTalkie)this).Start(); revealtime = Random.Range(60, 90); randompowerofftime = Random.Range(180f, 360f); randomgarbletime = Random.Range(60f, 180f); stoprandomgarble = Random.Range(10f, 30f); if (((GrabbableObject)this).insertedBattery != null) { ((GrabbableObject)this).insertedBattery.charge = Random.Range(0.3f, 0.8f); } if (((NetworkBehaviour)this).IsServer) { PushTraitToClientsIfNeeded(); } ApplyTraitFromNetvar(); } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if (((NetworkBehaviour)this).IsServer) { PushTraitToClientsIfNeeded(); } } public override void Update() { ((WalkieTalkie)this).Update(); ApplyTraitFromNetvar(); if (!traitGenerated || randomtrait == 0) { return; } if (((GrabbableObject)this).isHeld || ((GrabbableObject)this).isBeingUsed) { maintimer += Time.deltaTime; if (randomtrait == 3 || randomtrait == 5) { powertimer += Time.deltaTime; } } if (maintimer < revealtime) { return; } if (randomtrait == 1) { AudioDistortionFilter distortionFilter = GetDistortionFilter(); if ((Object)(object)distortionFilter != (Object)null) { distortionFilter.distortionLevel = 0.7f; } else if (((NetworkBehaviour)this).IsServer) { ForceNewRandomTrait(); } } if (randomtrait == 2 && ((GrabbableObject)this).isBeingUsed && ((GrabbableObject)this).insertedBattery != null) { Battery insertedBattery = ((GrabbableObject)this).insertedBattery; insertedBattery.charge -= Time.deltaTime / 200f; } if (randomtrait == 4 && powertimer >= randompowerofftime) { ((WalkieTalkie)this).SwitchWalkieTalkieOn(false); powertimer = 0f; } if (randomtrait == 5) { if (powertimer >= randomgarbletime) { base.playingGarbledVoice = true; garbletimer += Time.deltaTime; } if (garbletimer >= stoprandomgarble) { base.playingGarbledVoice = false; powertimer = 0f; garbletimer = 0f; } } if (randomtrait == 6 && !((GrabbableObject)this).isBeingUsed && ((GrabbableObject)this).insertedBattery != null && ((GrabbableObject)this).insertedBattery.charge > 0f) { Battery insertedBattery2 = ((GrabbableObject)this).insertedBattery; insertedBattery2.charge -= Time.deltaTime / 350f; } } public override void ChargeBatteries() { ((GrabbableObject)this).ChargeBatteries(); if (randomtrait == 3 && ((GrabbableObject)this).insertedBattery != null) { ((GrabbableObject)this).insertedBattery.charge = 0.5f; } } private void PushTraitToClientsIfNeeded() { if (!serverTraitPushed || syncedTraitId.Value < 0 || syncedTraitId.Value > 6) { int value = ((!hasSavedTrait || savedTraitId < 0 || savedTraitId > 6) ? Random.Range(0, 7) : savedTraitId); syncedTraitId.Value = value; serverTraitPushed = true; } } private void ApplyTraitFromNetvar() { int num = syncedTraitId.Value; if (num != lastAppliedTraitId) { lastAppliedTraitId = num; if (num < 0 || num > 6) { num = 0; } randomtrait = num; traitGenerated = true; } } private void ForceNewRandomTrait() { int value = Random.Range(0, 7); syncedTraitId.Value = value; serverTraitPushed = true; } private AudioDistortionFilter GetDistortionFilter() { if ((Object)(object)cachedDistortion != (Object)null) { return cachedDistortion; } if (distortionSearched) { return null; } distortionSearched = true; Transform val = FindChildRecursive(((Component)this).transform, "Target"); if ((Object)(object)val == (Object)null) { return null; } cachedDistortion = ((Component)val).GetComponent<AudioDistortionFilter>(); return cachedDistortion; } private static Transform FindChildRecursive(Transform root, string childName) { int childCount = root.childCount; for (int i = 0; i < childCount; i++) { Transform child = root.GetChild(i); if (((Object)child).name == childName) { return child; } Transform val = FindChildRecursive(child, childName); if ((Object)(object)val != (Object)null) { return val; } } return null; } protected override void __initializeVariables() { if (syncedTraitId == null) { throw new Exception("AbandonedWalkieStuff.syncedTraitId cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)syncedTraitId).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)syncedTraitId, "syncedTraitId"); ((NetworkBehaviour)this).NetworkVariableFields.Add((NetworkVariableBase)(object)syncedTraitId); ((WalkieTalkie)this).__initializeVariables(); } protected override void __initializeRpcs() { ((WalkieTalkie)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "AbandonedWalkieStuff"; } } internal sealed class CandleStuff : GrabbableObject { [SerializeField] private Light toggleLight; [SerializeField] private UnityEvent[] onTurnOnEvents; [SerializeField] private UnityEvent[] onTurnOffEvents; [SerializeField] private AudioClip blockedConditionClip; [SerializeField] private ScanNodeProperties scanNode; private const float EnvironmentCheckIntervalSeconds = 0.2f; private ParticleSystem[] cachedParticleSystems; private AudioSource[] cachedAudioSourceChildren; private AudioSource cachedAudioSource; private bool isItemOn; private bool underwaterDead; private string soakedHeaderText = "Soaked Antique Candle"; private string normalHeaderText; public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); underwaterDead = (saveData & 1) != 0; ApplyScanNodeHeader(); } public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); return underwaterDead ? 1 : 0; } public override void Start() { ((GrabbableObject)this).Start(); cachedParticleSystems = ((Component)this).GetComponentsInChildren<ParticleSystem>(true); cachedAudioSourceChildren = ((Component)this).GetComponentsInChildren<AudioSource>(); cachedAudioSource = ((Component)this).GetComponent<AudioSource>(); ApplyScanNodeHeader(); isItemOn = false; ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); ApplyVisualState(turnOn: false); } private void SetMute(AudioSource[] sources, bool muted) { for (int i = 0; i < sources.Length; i++) { sources[i].mute = muted; } } public override void PocketItem() { ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); SetMute(cachedAudioSourceChildren, muted: true); cachedAudioSource.mute = true; TurnOffByPlayer(); ((GrabbableObject)this).PocketItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); SetMute(cachedAudioSourceChildren, muted: false); cachedAudioSource.mute = false; if (!buttonDown) { return; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (underwaterDead) { PlayBlockedSound(); } else if (IsUnderwaterNow(localPlayerController)) { if (!isItemOn) { isItemOn = true; } KillByUnderwater(); } else if (IsOutside(localPlayerController) && IsRainOrFlooded()) { PlayBlockedSound(); if (isItemOn) { TurnOffByWeather(); } } else if (isItemOn) { TurnOffByPlayer(); } else { TurnOnByPlayer(); } } private void TurnOnByPlayer() { isItemOn = true; ApplyVisualState(turnOn: true); ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); ((MonoBehaviour)this).InvokeRepeating("EnvironmentTick", 0.2f, 0.2f); } private void TurnOffByPlayer() { isItemOn = false; ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); ApplyVisualState(turnOn: false); } private void TurnOffByWeather() { isItemOn = false; ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); ApplyVisualState(turnOn: false); } private void KillByUnderwater() { if (!underwaterDead && isItemOn) { underwaterDead = true; ApplyScanNodeHeader(); PlayBlockedSound(); isItemOn = false; ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); ApplyVisualState(turnOn: false); } } private void EnvironmentTick() { if (!isItemOn) { ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); return; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!IsEquippedByLocalPlayer(localPlayerController)) { ((MonoBehaviour)this).CancelInvoke("EnvironmentTick"); } else if (IsUnderwaterNow(localPlayerController)) { KillByUnderwater(); } else if (IsOutside(localPlayerController) && IsRainOrFlooded()) { TurnOffByWeather(); } } private bool IsUnderwaterNow(PlayerControllerB player) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) Collider underwaterCollider = player.underwaterCollider; if ((Object)(object)underwaterCollider == (Object)null) { return false; } Vector3 position = ((Component)player.gameplayCamera).transform.position; Vector3 point = ((Component)player).transform.position + Vector3.up * 0.7f; return IsPointInsideCollider(underwaterCollider, position) || IsPointInsideCollider(underwaterCollider, point); } private bool IsPointInsideCollider(Collider collider, Vector3 point) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: 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_000a: 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_0010: Unknown result type (might be due to invalid IL or missing references) Vector3 val = collider.ClosestPoint(point); Vector3 val2 = val - point; return ((Vector3)(ref val2)).sqrMagnitude < 0.0001f; } private bool IsEquippedByLocalPlayer(PlayerControllerB localPlayer) { return base.isHeld && !base.isPocketed && (Object)(object)base.playerHeldBy == (Object)(object)localPlayer; } private bool IsOutside(PlayerControllerB player) { return !player.isInsideFactory && !player.isInHangarShipRoom; } private bool IsRainOrFlooded() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_0013: Invalid comparison between Unknown and I4 //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Invalid comparison between Unknown and I4 LevelWeatherType currentWeather = StartOfRound.Instance.currentLevel.currentWeather; return (int)currentWeather == 1 || (int)currentWeather == 4; } private void PlayBlockedSound() { cachedAudioSource.PlayOneShot(blockedConditionClip); } private void ApplyScanNodeHeader() { normalHeaderText = scanNode.headerText; scanNode.headerText = (underwaterDead ? soakedHeaderText : normalHeaderText); } private void ApplyVisualState(bool turnOn) { ((Behaviour)toggleLight).enabled = turnOn; if (turnOn) { InvokeEvents(onTurnOnEvents); return; } StopAndClearParticles(); InvokeEvents(onTurnOffEvents); } private void InvokeEvents(UnityEvent[] eventsToInvoke) { for (int i = 0; i < eventsToInvoke.Length; i++) { eventsToInvoke[i].Invoke(); } } private void StopAndClearParticles() { for (int i = 0; i < cachedParticleSystems.Length; i++) { ParticleSystem val = cachedParticleSystems[i]; val.Pause(true); val.Stop(true, (ParticleSystemStopBehavior)0); val.Clear(true); } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { ((GrabbableObject)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "CandleStuff"; } } internal sealed class GlowstickStuff : GrabbableObject { [CompilerGenerated] private sealed class <ApplyInitialMotionNextFixed>d__25 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Rigidbody body; public Vector3 velocity; public Vector3 angularVelocity; public GlowstickStuff <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ApplyInitialMotionNextFixed>d__25(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_005c: 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) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForFixedUpdate(); <>1__state = 1; return true; case 1: <>1__state = -1; body.isKinematic = false; body.useGravity = true; body.velocity = velocity; body.angularVelocity = angularVelocity; 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 <DestroyHeldAfterDelay>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerControllerB player; public float delaySeconds; public GlowstickStuff <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DestroyHeldAfterDelay>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(delaySeconds); <>1__state = 1; return true; case 1: <>1__state = -1; player.DestroyItemInSlotAndSync(player.currentItemSlot); 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(); } } [SerializeField] private GameObject droppedGlowstickPrefab; [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip snapClip; [SerializeField] [Min(0f)] private int startingGlowstickCount = 3; [SerializeField] private GameObject glowstickVisualA; [SerializeField] private GameObject glowstickVisualB; [SerializeField] private GameObject glowstickVisualC; [SerializeField] private float spawnForwardOffset = 0.75f; [SerializeField] private float spawnUpOffset = 1.1f; [SerializeField] private float throwForwardSpeed = 8f; [SerializeField] private float throwUpSpeed = 1.5f; [SerializeField] private float randomAngularSpeed = 10f; [SerializeField] private Light[] lightsToToggle; private Light[] cachedLights; private int remainingGlowsticks; private bool destroyScheduled; public override void Start() { ((GrabbableObject)this).Start(); cachedLights = ((lightsToToggle != null && lightsToToggle.Length != 0) ? lightsToToggle : ((Component)this).GetComponentsInChildren<Light>(true)); remainingGlowsticks = startingGlowstickCount; ApplyVisuals(remainingGlowsticks); SetLightsEnabled(enabled: true); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); ApplyVisuals(remainingGlowsticks); SetLightsEnabled(enabled: true); } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); SetLightsEnabled(enabled: false); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); base.isPocketed = false; ((GrabbableObject)this).EnableItemMeshes(true); ApplyVisuals(remainingGlowsticks); SetLightsEnabled(enabled: true); } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (buttonDown && ((NetworkBehaviour)this).IsOwner && !((Object)(object)base.playerHeldBy == (Object)null) && remainingGlowsticks > 0) { if (((NetworkBehaviour)this).IsServer) { ConsumeAndSpawnServer(base.playerHeldBy, replicateState: true); } else { ConsumeAndSpawnServerRpc(); } } } [ServerRpc] private void ConsumeAndSpawnServerRpc(ServerRpcParams rpcParams = default(ServerRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Invalid comparison between Unknown and I4 //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(482332507u, rpcParams, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val, 482332507u, rpcParams, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; PlayerControllerB playerByClientId = GetPlayerByClientId(rpcParams.Receive.SenderClientId); if (!((Object)(object)playerByClientId == (Object)null)) { ConsumeAndSpawnServer(playerByClientId, replicateState: true); } } } private void ConsumeAndSpawnServer(PlayerControllerB player, bool replicateState) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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) if (remainingGlowsticks > 0) { BuildSpawnData(player, out var spawnPosition, out var spawnRotation, out var velocity, out var angularVelocity); SpawnDroppedClientRpc(spawnPosition, spawnRotation, velocity, angularVelocity); remainingGlowsticks--; if (remainingGlowsticks < 0) { remainingGlowsticks = 0; } if (replicateState) { ApplyConsumedClientRpc(remainingGlowsticks); } } } private void BuildSpawnData(PlayerControllerB player, out Vector3 spawnPosition, out Quaternion spawnRotation, out Vector3 velocity, out Vector3 angularVelocity) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_0039: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_008a: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) Vector3 val = (((Object)(object)player.gameplayCamera != (Object)null) ? ((Component)player.gameplayCamera).transform.forward : ((Component)player).transform.forward); spawnPosition = ((Component)player).transform.position + val * spawnForwardOffset + Vector3.up * spawnUpOffset; spawnRotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f); velocity = val * throwForwardSpeed + Vector3.up * throwUpSpeed; angularVelocity = Random.insideUnitSphere * randomAngularSpeed; } [ClientRpc] private void SpawnDroppedClientRpc(Vector3 spawnPosition, Quaternion spawnRotation, Vector3 velocity, Vector3 angularVelocity) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(313037180u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref spawnPosition); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref spawnRotation); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref velocity); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref angularVelocity); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 313037180u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Transform propsContainer = StartOfRound.Instance.propsContainer; GameObject val3 = Object.Instantiate<GameObject>(droppedGlowstickPrefab, spawnPosition, spawnRotation, propsContainer); Rigidbody component = val3.GetComponent<Rigidbody>(); ((MonoBehaviour)this).StartCoroutine(ApplyInitialMotionNextFixed(component, velocity, angularVelocity)); } } } [IteratorStateMachine(typeof(<ApplyInitialMotionNextFixed>d__25))] private IEnumerator ApplyInitialMotionNextFixed(Rigidbody body, Vector3 velocity, Vector3 angularVelocity) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ApplyInitialMotionNextFixed>d__25(0) { <>4__this = this, body = body, velocity = velocity, angularVelocity = angularVelocity }; } [ClientRpc] private void ApplyConsumedClientRpc(int newRemaining) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(957138190u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, newRemaining); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 957138190u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; remainingGlowsticks = newRemaining; audioSource.PlayOneShot(snapClip); ApplyVisuals(remainingGlowsticks); if (remainingGlowsticks == 0 && ((NetworkBehaviour)this).IsOwner && !destroyScheduled && (Object)(object)base.playerHeldBy != (Object)null) { destroyScheduled = true; ((MonoBehaviour)this).StartCoroutine(DestroyHeldAfterDelay(base.playerHeldBy, 0.3f)); } } } [IteratorStateMachine(typeof(<DestroyHeldAfterDelay>d__27))] private IEnumerator DestroyHeldAfterDelay(PlayerControllerB player, float delaySeconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DestroyHeldAfterDelay>d__27(0) { <>4__this = this, player = player, delaySeconds = delaySeconds }; } private void ApplyVisuals(int countRemaining) { int num = ((countRemaining >= 3) ? 3 : Mathf.Max(0, countRemaining)); glowstickVisualA.SetActive(num >= 1); glowstickVisualB.SetActive(num >= 2); glowstickVisualC.SetActive(num >= 3); } private void SetLightsEnabled(bool enabled) { for (int i = 0; i < cachedLights.Length; i++) { ((Behaviour)cachedLights[i]).enabled = enabled; } } private static PlayerControllerB GetPlayerByClientId(ulong clientId) { PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (val.actualClientId == clientId) { return val; } } return null; } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(482332507u, new RpcReceiveHandler(__rpc_handler_482332507), "ConsumeAndSpawnServerRpc"); ((NetworkBehaviour)this).__registerRpc(313037180u, new RpcReceiveHandler(__rpc_handler_313037180), "SpawnDroppedClientRpc"); ((NetworkBehaviour)this).__registerRpc(957138190u, new RpcReceiveHandler(__rpc_handler_957138190), "ApplyConsumedClientRpc"); ((GrabbableObject)this).__initializeRpcs(); } private static void __rpc_handler_482332507(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } } else { ServerRpcParams server = rpcParams.Server; target.__rpc_exec_stage = (__RpcExecStage)1; ((GlowstickStuff)(object)target).ConsumeAndSpawnServerRpc(server); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_313037180(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 spawnPosition = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref spawnPosition); Quaternion spawnRotation = default(Quaternion); ((FastBufferReader)(ref reader)).ReadValueSafe(ref spawnRotation); Vector3 velocity = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref velocity); Vector3 angularVelocity = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref angularVelocity); target.__rpc_exec_stage = (__RpcExecStage)1; ((GlowstickStuff)(object)target).SpawnDroppedClientRpc(spawnPosition, spawnRotation, velocity, angularVelocity); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_957138190(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int newRemaining = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref newRemaining); target.__rpc_exec_stage = (__RpcExecStage)1; ((GlowstickStuff)(object)target).ApplyConsumedClientRpc(newRemaining); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "GlowstickStuff"; } } internal sealed class IndustrialFlashlightStuff : FlashlightItem { [SerializeField] private AudioClip chargingOnFloorClip; [SerializeField] private AudioClip batteryFullClip; private float lastChargeTime; private bool tickScheduled; private AudioSource flashlightAudioSource; private AudioClip previousClip; private bool previousLoop; private bool chargingLoopActive; private bool fullyChargedSoundPlayed; private void OnEnable() { flashlightAudioSource = ((Component)this).GetComponent<AudioSource>(); StartTick(); } private void OnDisable() { StopTick(); StopChargingLoop(); } private void StartTick() { if (!tickScheduled) { tickScheduled = true; lastChargeTime = Time.time; ((MonoBehaviour)this).InvokeRepeating("ChargeTick", 0.2f, 0.2f); } } private void StopTick() { if (tickScheduled) { tickScheduled = false; ((MonoBehaviour)this).CancelInvoke("ChargeTick"); } } private void ChargeTick() { float time = Time.time; float num = time - lastChargeTime; lastChargeTime = time; if (((GrabbableObject)this).insertedBattery.charge < 1f) { fullyChargedSoundPlayed = false; } bool flag = ((GrabbableObject)this).isInShipRoom && ((GrabbableObject)this).insertedBattery.charge < 1f && (Object)(object)((GrabbableObject)this).playerHeldBy == (Object)null; if (flag) { StartChargingLoop(); } else { StopChargingLoop(); } if (flag) { float charge = ((GrabbableObject)this).insertedBattery.charge; float num2 = Mathf.Min(1f, charge + num / 375f); ((GrabbableObject)this).insertedBattery.charge = num2; if (!fullyChargedSoundPlayed && charge < 1f && num2 >= 1f) { fullyChargedSoundPlayed = true; StopChargingLoop(); PlayBatteryFullSound(); } } } private void StartChargingLoop() { if (!chargingLoopActive) { previousClip = flashlightAudioSource.clip; previousLoop = flashlightAudioSource.loop; flashlightAudioSource.clip = chargingOnFloorClip; flashlightAudioSource.loop = true; flashlightAudioSource.Play(); chargingLoopActive = true; } } private void StopChargingLoop() { if (chargingLoopActive) { if ((Object)(object)flashlightAudioSource.clip == (Object)(object)chargingOnFloorClip) { flashlightAudioSource.Stop(); } flashlightAudioSource.loop = previousLoop; flashlightAudioSource.clip = previousClip; chargingLoopActive = false; } } private void PlayBatteryFullSound() { flashlightAudioSource.PlayOneShot(batteryFullClip); } protected override void __initializeVariables() { ((FlashlightItem)this).__initializeVariables(); } protected override void __initializeRpcs() { ((FlashlightItem)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "IndustrialFlashlightStuff"; } } internal sealed class lighterStuff : GrabbableObject { private struct PendingWebRelease { public SandSpiderWebTrap WebTrap; public float ReadyTime; } [SerializeField] private Light toggleLight; [SerializeField] private UnityEvent[] onTurnOnImmediateEvents; [SerializeField] private UnityEvent[] onTurnOnDelayedEvents; [SerializeField] private UnityEvent[] onTurnOffEvents; [SerializeField] [Min(0f)] private float turnOnDelayedSeconds = 0.3f; [SerializeField] [Min(0f)] private float fuel; private bool getsExtraFuel; [SerializeField] private Collider webBurnTrigger; [SerializeField] private GameObject webBurnSpawnPrefab; [SerializeField] private bool usesFuelToWebBurn; [SerializeField] [Min(0f)] private float webBurnFuelMin = 30f; [SerializeField] [Min(0f)] private float webBurnFuelMax = 60f; [SerializeField] [Min(0f)] private float webBurnCooldownSeconds = 0.5f; [SerializeField] [Min(0f)] private float webBurnRadius = 2f; [SerializeField] private LayerMask webBurnLayerMask = LayerMask.op_Implicit(2097152); [SerializeField] [Min(0f)] private float webBurnScanIntervalSeconds = 0.1f; [SerializeField] [Min(0f)] private float webLeaveAfterBurnDelaySeconds = 0.2f; private const float FuelTickIntervalSeconds = 0.25f; private ParticleSystem[] cachedParticleSystems; private AudioSource[] cachedAudioSourceChildren; private AudioSource cachedAudioSource; private static readonly Dictionary<int, SandSpiderWebTrap> webTrapByColliderId = new Dictionary<int, SandSpiderWebTrap>(64); private static readonly Dictionary<int, float> nextBurnTimeByWebId = new Dictionary<int, float>(32); private static readonly Dictionary<int, PendingWebRelease> pendingWebReleasesByWebId = new Dictionary<int, PendingWebRelease>(16); private static readonly List<int> pendingWebReleaseKeysToRemove = new List<int>(16); private static readonly FieldInfo hinderingLocalPlayerField = typeof(SandSpiderWebTrap).GetField("hinderingLocalPlayer", BindingFlags.Instance | BindingFlags.NonPublic); private readonly Collider[] webBurnOverlapResults = (Collider[])(object)new Collider[32]; private float nextWebBurnScanTime; private bool isOn; private bool isTurnOnPending; private bool hasLoadedFuelFromSave; private bool isFuelEmpty; public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); fuel = Mathf.Max(0f, (float)saveData); hasLoadedFuelFromSave = true; isFuelEmpty = fuel <= 0f; } public override int GetItemDataToSave() { ((GrabbableObject)this).GetItemDataToSave(); return Mathf.RoundToInt(fuel); } public override void Start() { ((GrabbableObject)this).Start(); cachedParticleSystems = ((Component)this).GetComponentsInChildren<ParticleSystem>(true); cachedAudioSourceChildren = ((Component)this).GetComponentsInChildren<AudioSource>(); cachedAudioSource = ((Component)this).GetComponent<AudioSource>(); isOn = false; isTurnOnPending = false; nextWebBurnScanTime = 0f; if (!hasLoadedFuelFromSave) { fuel = (getsExtraFuel ? Random.Range(500f, 2000f) : Random.Range(300f, 1500f)); } isFuelEmpty = fuel <= 0f; ApplyLightState(enabledState: false); SetWebBurnTriggerState(enabledState: false); StopAndClearParticles(); ((MonoBehaviour)this).CancelInvoke("ConsumeFuelTick"); UpdateFuelTooltip(); } public override void SetControlTipsForItem() { ((GrabbableObject)this).SetControlTipsForItem(); UpdateFuelTooltip(); } private void SetMute(AudioSource[] sources, bool muted) { for (int i = 0; i < sources.Length; i++) { sources[i].mute = muted; } } public override void PocketItem() { if (base.isHeld && (Object)(object)base.playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController) { HUDManager.Instance.ChangeControlTip(2, "", false); } SetMute(cachedAudioSourceChildren, muted: true); cachedAudioSource.mute = true; ForceOffInternal(); ((GrabbableObject)this).PocketItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); SetMute(cachedAudioSourceChildren, muted: false); cachedAudioSource.mute = false; if (!buttonDown) { return; } if (isOn) { if (!isTurnOnPending) { SetOffInternal(); RefreshTipsIfLocalHeld(); } } else if (isFuelEmpty) { RefreshTipsIfLocalHeld(); } else { SetOnInternal(); RefreshTipsIfLocalHeld(); } } private void SetOnInternal() { ((MonoBehaviour)this).CancelInvoke("ApplyDelayedTurnOn"); ((MonoBehaviour)this).CancelInvoke("ConsumeFuelTick"); isOn = true; isTurnOnPending = true; ApplyLightState(enabledState: false); SetWebBurnTriggerState(enabledState: false); InvokeEvents(onTurnOnImmediateEvents); ((MonoBehaviour)this).InvokeRepeating("ConsumeFuelTick", 0.3f, 0.25f); float num = Mathf.Max(0f, turnOnDelayedSeconds); if (num <= 0f) { ApplyDelayedTurnOn(); } else { ((MonoBehaviour)this).Invoke("ApplyDelayedTurnOn", num); } } private void ConsumeFuelTick() { if (isOn && !isFuelEmpty) { fuel = Mathf.Max(0f, fuel - 0.25f); if (fuel <= 0f) { isFuelEmpty = true; ForceOffInternal(); ((MonoBehaviour)this).CancelInvoke("ConsumeFuelTick"); RefreshTipsIfLocalHeld(); } else { RefreshTipsIfLocalHeld(); } } } private void ApplyDelayedTurnOn() { if (isOn) { isTurnOnPending = false; ApplyLightState(enabledState: true); SetWebBurnTriggerState(enabledState: true); InvokeEvents(onTurnOnDelayedEvents); } } private void SetOffInternal() { ((MonoBehaviour)this).CancelInvoke("ApplyDelayedTurnOn"); ((MonoBehaviour)this).CancelInvoke("ConsumeFuelTick"); isOn = false; isTurnOnPending = false; ApplyLightState(enabledState: false); SetWebBurnTriggerState(enabledState: false); StopAndClearParticles(); InvokeEvents(onTurnOffEvents); } private void ForceOffInternal() { ((MonoBehaviour)this).CancelInvoke("ApplyDelayedTurnOn"); ((MonoBehaviour)this).CancelInvoke("ConsumeFuelTick"); isOn = false; isTurnOnPending = false; ApplyLightState(enabledState: false); SetWebBurnTriggerState(enabledState: false); StopAndClearParticles(); InvokeEvents(onTurnOffEvents); } private void ApplyLightState(bool enabledState) { ((Behaviour)toggleLight).enabled = enabledState; } private void SetWebBurnTriggerState(bool enabledState) { webBurnTrigger.enabled = enabledState; } private void InvokeEvents(UnityEvent[] eventsToInvoke) { for (int i = 0; i < eventsToInvoke.Length; i++) { eventsToInvoke[i].Invoke(); } } private void StopAndClearParticles() { for (int i = 0; i < cachedParticleSystems.Length; i++) { ParticleSystem val = cachedParticleSystems[i]; val.Pause(true); val.Stop(true, (ParticleSystemStopBehavior)0); val.Clear(true); } } private void UpdateFuelTooltip() { if (base.isHeld && !((Object)(object)base.playerHeldBy != (Object)(object)GameNetworkManager.Instance.localPlayerController)) { HUDManager.Instance.ChangeControlTip(2, $"[Fuel = {Mathf.RoundToInt(fuel)}]", false); } } private void RefreshTipsIfLocalHeld() { if (base.isHeld && !((Object)(object)base.playerHeldBy != (Object)(object)GameNetworkManager.Instance.localPlayerController)) { ((GrabbableObject)this).SetControlTipsForItem(); UpdateFuelTooltip(); } } public override void Update() { //IL_0086: 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) ((GrabbableObject)this).Update(); ProcessPendingWebReleases(); if (!isOn || isTurnOnPending || isFuelEmpty) { return; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!base.isHeld || (Object)(object)base.playerHeldBy != (Object)(object)localPlayerController) { return; } float time = Time.time; if (!(time < nextWebBurnScanTime)) { nextWebBurnScanTime = time + webBurnScanIntervalSeconds; int num = Physics.OverlapSphereNonAlloc(((Component)localPlayerController).transform.position, webBurnRadius, webBurnOverlapResults, LayerMask.op_Implicit(webBurnLayerMask), (QueryTriggerInteraction)2); for (int i = 0; i < num; i++) { TryBurnWeb(webBurnOverlapResults[i]); } } } private void ProcessPendingWebReleases() { if (pendingWebReleasesByWebId.Count == 0) { return; } PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; float time = Time.time; pendingWebReleaseKeysToRemove.Clear(); foreach (KeyValuePair<int, PendingWebRelease> item in pendingWebReleasesByWebId) { PendingWebRelease value = item.Value; if ((Object)(object)value.WebTrap == (Object)null) { pendingWebReleaseKeysToRemove.Add(item.Key); } else if (!(time < value.ReadyTime)) { ReleaseLocalPlayerFromWebIfNeeded(value.WebTrap, localPlayerController); pendingWebReleaseKeysToRemove.Add(item.Key); } } for (int i = 0; i < pendingWebReleaseKeysToRemove.Count; i++) { pendingWebReleasesByWebId.Remove(pendingWebReleaseKeysToRemove[i]); } } private void OnTriggerStay(Collider other) { if (isOn && !isTurnOnPending && !isFuelEmpty && !base.isHeld && NetworkManager.Singleton.IsHost) { TryBurnWeb(other); } } private void TryBurnWeb(Collider other) { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) int instanceID = ((Object)other).GetInstanceID(); if (!webTrapByColliderId.TryGetValue(instanceID, out var value) || (Object)(object)value == (Object)null) { value = ((Component)other).GetComponentInParent<SandSpiderWebTrap>(); webTrapByColliderId[instanceID] = value; } if ((Object)(object)value == (Object)null) { return; } int instanceID2 = ((Object)value).GetInstanceID(); if (nextBurnTimeByWebId.TryGetValue(instanceID2, out var value2) && Time.time < value2) { return; } nextBurnTimeByWebId[instanceID2] = Time.time + webBurnCooldownSeconds; QueueReleaseFromWebAfterBurnIfNeeded(value); if (NetworkManager.Singleton.IsHost) { value.mainScript.BreakWebClientRpc(((Component)value).transform.position, value.trapID); } else { value.mainScript.BreakWebServerRpc(value.trapID, (int)GameNetworkManager.Instance.localPlayerController.playerClientId); } SpawnWebBurnFxServerRpc(value.centerOfWeb.position); if (usesFuelToWebBurn) { float num = Random.Range(webBurnFuelMin, webBurnFuelMax); fuel = Mathf.Max(0f, fuel - num); if (fuel <= 0f) { isFuelEmpty = true; ForceOffInternal(); } } RefreshTipsIfLocalHeld(); } private void QueueReleaseFromWebAfterBurnIfNeeded(SandSpiderWebTrap webTrap) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!((Object)(object)webTrap.currentTrappedPlayer != (Object)(object)localPlayerController)) { float num = (NetworkManager.Singleton.IsHost ? 0f : webLeaveAfterBurnDelaySeconds); pendingWebReleasesByWebId[((Object)webTrap).GetInstanceID()] = new PendingWebRelease { WebTrap = webTrap, ReadyTime = Time.time + num }; } } private void ReleaseLocalPlayerFromWebIfNeeded(SandSpiderWebTrap webTrap, PlayerControllerB localPlayer) { if (hinderingLocalPlayerField != null) { if (!(bool)hinderingLocalPlayerField.GetValue(webTrap)) { return; } hinderingLocalPlayerField.SetValue(webTrap, false); } if (localPlayer.isMovementHindered > 0) { localPlayer.isMovementHindered--; } localPlayer.hinderedMultiplier = Mathf.Clamp(localPlayer.hinderedMultiplier * 0.4f, 1f, 100f); if ((Object)(object)webTrap.currentTrappedPlayer == (Object)(object)localPlayer) { webTrap.currentTrappedPlayer = null; } AudioSource webAudio = webTrap.webAudio; if (webAudio != null) { webAudio.Stop(); } SandSpiderAI mainScript = webTrap.mainScript; if (mainScript != null) { mainScript.PlayerLeaveWebServerRpc(webTrap.trapID, (int)localPlayer.playerClientId); } } [ServerRpc(RequireOwnership = false)] private void SpawnWebBurnFxServerRpc(Vector3 position) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_00d5: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(145500242u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 145500242u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SpawnWebBurnFxClientRpc(position); } } } [ClientRpc] private void SpawnWebBurnFxClientRpc(Vector3 position) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(736457865u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 736457865u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Object.Instantiate<GameObject>(webBurnSpawnPrefab, position, Quaternion.identity, StartOfRound.Instance.propsContainer); } } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(145500242u, new RpcReceiveHandler(__rpc_handler_145500242), "SpawnWebBurnFxServerRpc"); ((NetworkBehaviour)this).__registerRpc(736457865u, new RpcReceiveHandler(__rpc_handler_736457865), "SpawnWebBurnFxClientRpc"); ((GrabbableObject)this).__initializeRpcs(); } private static void __rpc_handler_145500242(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((lighterStuff)(object)target).SpawnWebBurnFxServerRpc(position); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_736457865(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); target.__rpc_exec_stage = (__RpcExecStage)1; ((lighterStuff)(object)target).SpawnWebBurnFxClientRpc(position); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "lighterStuff"; } } internal sealed class SignalFlare : GrabbableObject { [CompilerGenerated] private sealed class <ConsumeAfterDelayRoutine>d__8 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public SignalFlare <>4__this; private float <delay>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ConsumeAfterDelayRoutine>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <delay>5__1 = Mathf.Max(0f, <>4__this.consumeDelaySeconds); if (<delay>5__1 > 0f) { <>2__current = (object)new WaitForSeconds(<delay>5__1); <>1__state = 1; return true; } break; case 1: <>1__state = -1; break; } if (!((NetworkBehaviour)<>4__this).IsOwner) { return false; } if ((Object)(object)((GrabbableObject)<>4__this).playerHeldBy == (Object)null) { return false; } ((GrabbableObject)<>4__this).playerHeldBy.DestroyItemInSlotAndSync(((GrabbableObject)<>4__this).playerHeldBy.currentItemSlot); 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(); } } [SerializeField] private GameObject flarePrefab; [SerializeField] [Min(0f)] private float consumeDelaySeconds = 0.3f; [SerializeField] private UnityEvent[] onActivateEvents; private bool hasActivated; private bool consumeScheduled; public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!buttonDown || hasActivated) { return; } PlayerControllerB playerHeldBy = base.playerHeldBy; if (playerHeldBy.isInsideFactory || playerHeldBy.isInHangarShipRoom) { return; } hasActivated = true; int num = Random.Range(0, 10); if (num == 8) { ShowUrgentWarningTipForLocalPlayer(); if (((NetworkBehaviour)this).IsServer) { ApplyMultiplier(5); } } else if (num == 3 || num == 4) { ShowWarningTipForLocalPlayer(); if (((NetworkBehaviour)this).IsServer) { ApplyMultiplier(2); } } SpawnFlareLocal(playerHeldBy); InvokeEvents(onActivateEvents); ScheduleConsumeAfterDelay(); } private void SpawnFlareLocal(PlayerControllerB activatingPlayer) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)activatingPlayer).transform.position; position.y += Random.Range(80f, 180f); Transform propsContainer = StartOfRound.Instance.propsContainer; Object.Instantiate<GameObject>(flarePrefab, position, Quaternion.identity, propsContainer); } private void ScheduleConsumeAfterDelay() { if (!consumeScheduled) { consumeScheduled = true; ((MonoBehaviour)this).StartCoroutine(ConsumeAfterDelayRoutine()); } } [IteratorStateMachine(typeof(<ConsumeAfterDelayRoutine>d__8))] private IEnumerator ConsumeAfterDelayRoutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ConsumeAfterDelayRoutine>d__8(0) { <>4__this = this }; } private static void ShowWarningTipForLocalPlayer() { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!localPlayerController.isInsideFactory) { HUDManager.Instance.DisplayTip("WARNING!", "Increase in moon activity detected.", true, false, "LC_Tip1"); } } private static void ShowUrgentWarningTipForLocalPlayer() { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!localPlayerController.isInsideFactory) { HUDManager.Instance.DisplayTip("URGENT WARNING!", "MASSIVE INCREASE IN MOON ACTIVITY DETECTED, EVACTUATION ADVISED.", true, false, "LC_Tip1"); } } private static void ApplyMultiplier(int multiplier) { RoundManager instance = RoundManager.Instance; SelectableLevel currentLevel = instance.currentLevel; currentLevel.maxEnemyPowerCount *= multiplier; SelectableLevel currentLevel2 = instance.currentLevel; currentLevel2.maxDaytimeEnemyPowerCount *= multiplier; SelectableLevel currentLevel3 = instance.currentLevel; currentLevel3.maxOutsideEnemyPowerCount *= multiplier; instance.currentMaxOutsidePower *= (float)multiplier; } private static void InvokeEvents(UnityEvent[] eventsToInvoke) { for (int i = 0; i < eventsToInvoke.Length; i++) { eventsToInvoke[i].Invoke(); } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { ((GrabbableObject)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "SignalFlare"; } } internal class TZPAbandonedStuff : TetraChemicalItem { [CompilerGenerated] private sealed class <DamageTimerWhileEmittingGas>d__8 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TZPAbandonedStuff <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DamageTimerWhileEmittingGas>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (((TetraChemicalItem)<>4__this).emittingGas) { if (((GrabbableObject)<>4__this).isBeingUsed && ((TetraChemicalItem)<>4__this).emittingGas) { <>4__this.damagetimer += Time.deltaTime; } <>2__current = null; <>1__state = 1; return true; } <>4__this.damageTimerRoutine = null; 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 <DrunknessWhileEmittingGas>d__9 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public TZPAbandonedStuff <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DrunknessWhileEmittingGas>d__9(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (((TetraChemicalItem)<>4__this).emittingGas) { ((TetraChemicalItem)<>4__this).previousPlayerHeldBy.drunknessInertia = Mathf.Clamp(((TetraChemicalItem)<>4__this).previousPlayerHeldBy.drunknessInertia + Time.deltaTime / 1f * ((TetraChemicalItem)<>4__this).previousPlayerHeldBy.drunknessSpeed, 0.1f, 10f); <>2__current = null; <>1__state = 1; return true; } <>4__this.drunknessRoutine = null; 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(); } } private float damagetimer; private float damagetime = 1f; private int damageAmount; private int playerhealth; private Coroutine damageTimerRoutine; private Coroutine drunknessRoutine; public override void Start() { ((GrabbableObject)this).Start(); for (int i = 0; i < GameNetworkManager.Instance.connectedPlayers; i++) { playerhealth = StartOfRound.Instance.allPlayerScripts[i].health; } } public override void Update() { //IL_0080: 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) ((TetraChemicalItem)this).Update(); if (base.emittingGas) { if (damageTimerRoutine == null) { damageTimerRoutine = ((MonoBehaviour)this).StartCoroutine(DamageTimerWhileEmittingGas()); } if (drunknessRoutine == null) { drunknessRoutine = ((MonoBehaviour)this).StartCoroutine(DrunknessWhileEmittingGas()); } } if (damagetimer >= damagetime && ((NetworkBehaviour)this).IsOwner) { GameNetworkManager.Instance.localPlayerController.DamagePlayer(damageAmount, false, true, (CauseOfDeath)0, 0, false, default(Vector3)); damageAmount = Random.Range(0, playerhealth); damagetimer = 0f; } } [IteratorStateMachine(typeof(<DamageTimerWhileEmittingGas>d__8))] private IEnumerator DamageTimerWhileEmittingGas() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DamageTimerWhileEmittingGas>d__8(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<DrunknessWhileEmittingGas>d__9))] private IEnumerator DrunknessWhileEmittingGas() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DrunknessWhileEmittingGas>d__9(0) { <>4__this = this }; } public override void EquipItem() { ((TetraChemicalItem)this).EquipItem(); damagetime = Random.Range(2, 10); damageAmount = Random.Range(0, playerhealth); } protected override void __initializeVariables() { ((TetraChemicalItem)this).__initializeVariables(); } protected override void __initializeRpcs() { ((TetraChemicalItem)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "TZPAbandonedStuff"; } } } namespace AbandonedCompanyAssets.Behaviours { internal sealed class DimThenKill : MonoBehaviour { [CompilerGenerated] private sealed class <BeginAudioRoutine>d__14 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public DimThenKill <>4__this; private float <delaySeconds>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <BeginAudioRoutine>d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if ((Object)(object)<>4__this.flareAudioSource == (Object)null) { return false; } <delaySeconds>5__1 = Mathf.Max(0f, <>4__this.beginAudioSeconds); if (<delaySeconds>5__1 > 0f) { <>2__current = (object)new WaitForSeconds(<delaySeconds>5__1); <>1__state = 1; return true; } break; case 1: <>1__state = -1; break; } if ((Object)(object)<>4__this.explosionClip != (Object)null) { <>4__this.flareAudioSource.PlayOneShot(<>4__this.explosionClip); } if ((Object)(object)<>4__this.flareLoopClip != (Object)null) { <>4__this.flareAudioSource.clip = <>4__this.flareLoopClip; <>4__this.flareAudioSource.loop = true; <>4__this.flareAudioSource.Play(); } 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 <BuildLightIntensityRoutine>d__15 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public DimThenKill <>4__this; private float <durationSeconds>5__1; private float <elapsedSeconds>5__2; private float <t>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <BuildLightIntensityRoutine>d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if ((Object)(object)<>4__this.flareLight == (Object)null) { return false; } <durationSeconds>5__1 = Mathf.Max(0f, <>4__this.intensityBuildSeconds); if (<durationSeconds>5__1 <= 0f) { <>4__this.flareLight.intensity = <>4__this.targetIntensity; return false; } <elapsedSeconds>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<elapsedSeconds>5__2 < <durationSeconds>5__1) { <elapsedSeconds>5__2 += Time.deltaTime; <t>5__3 = Mathf.Clamp01(<elapsedSeconds>5__2 / <durationSeconds>5__1); <>4__this.flareLight.intensity = Mathf.Lerp(0f, <>4__this.targetIntensity, <t>5__3); <>2__current = null; <>1__state = 1; return true; } <>4__this.flareLight.intensity = <>4__this.targetIntensity; 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 <RunDimCycle>d__16 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public DimThenKill <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RunDimCycle>d__16(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } <>4__this.time += Time.deltaTime; if ((Object)(object)<>4__this.flareLight != (Object)null) { if (<>4__this.time > <>4__this.dimindelay && <>4__this.time < <>4__this.killafterseconds && <>4__this.flareLight.range < <>4__this.defaultrange) { Light flareLight = <>4__this.flareLight; flareLight.range += <>4__this.dimrate; } if (<>4__this.time > <>4__this.killafterseconds) { if (!(<>4__this.flareLight.range > 0f)) { <>4__this.DespawnOrDestroy(); return false; } Light flareLight2 = <>4__this.flareLight; flareLight2.range -= <>4__this.dimrate; } } <>2__current = null; <>1__state = 1; return true; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [SerializeField] private AudioSource flareAudioSource; [SerializeField] private AudioClip explosionClip; [SerializeField] [Min(0f)] private float beginAudioSeconds; [SerializeField] private AudioClip flareLoopClip; [SerializeField] private Light flareLight; [SerializeField] [Min(0f)] private float intensityBuildSeconds = 0.5f; [SerializeField] private float targetIntensity = 20000f; [SerializeField] private bool dimin; [SerializeField] private float killafterseconds; [SerializeField] private float dimrate; [SerializeField] private float defaultrange; [SerializeField] private float dimindelay; private float time; private void Start() { if ((Object)(object)flareLight != (Object)null) { flareLight.intensity = 0f; } if (dimrate == 0f) { dimrate = 0.005f; } if ((Object)(object)flareLight != (Object)null) { ((MonoBehaviour)this).StartCoroutine(BuildLightIntensityRoutine()); } ((MonoBehaviour)this).StartCoroutine(BeginAudioRoutine()); ((MonoBehaviour)this).StartCoroutine(RunDimCycle()); } [IteratorStateMachine(typeof(<BeginAudioRoutine>d__14))] private IEnumerator BeginAudioRoutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <BeginAudioRoutine>d__14(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<BuildLightIntensityRoutine>d__15))] private IEnumerator BuildLightIntensityRoutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <BuildLightIntensityRoutine>d__15(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<RunDimCycle>d__16))] private IEnumerator RunDimCycle() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <RunDimCycle>d__16(0) { <>4__this = this }; } private void DespawnOrDestroy() { Object.Destroy((Object)(object)((Component)this).gameObject); } } internal sealed class DroppedGlowstick : MonoBehaviour { [CompilerGenerated] private sealed class <DestroyAfterLifetime>d__6 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public DroppedGlowstick <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DestroyAfterLifetime>d__6(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(<>4__this.lifetimeSeconds); <>1__state = 1; return true; case 1: <>1__state = -1; 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 <DimRoutine>d__7 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public DroppedGlowstick <>4__this; private float <dimStart>5__1; private float <elapsed>5__2; private float <t>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DimRoutine>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <dimStart>5__1 = Mathf.Max(0f, <>4__this.lifetimeSeconds - <>4__this.dimDurationSeconds); <elapsed>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<elapsed>5__2 < <>4__this.lifetimeSeconds) { <elapsed>5__2 += Time.deltaTime; if (<>4__this.dimDurationSeconds > 0f && <elapsed>5__2 >= <dimStart>5__1) { <t>5__3 = Mathf.Clamp01((<elapsed>5__2 - <dimStart>5__1) / <>4__this.dimDurationSeconds); <>4__this.glowLight.intensity = Mathf.Lerp(<>4__this.startIntensity, 0f, <t>5__3); <>4__this.glowLight.range = Mathf.Lerp(<>4__this.startRange, 0f, <t>5__3); } <>2__current = null; <>1__state = 1; return true; } <>4__this.glowLight.intensity = 0f; <>4__this.glowLight.range = 0f; ((Behaviour)<>4__this.glowLight).enabled = false; 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(); } } [SerializeField] private Light glowLight; [SerializeField] [Min(0f)] private float lifetimeSeconds = 560f; [SerializeField] [Min(0f)] private float dimDurationSeconds = 30f; private float startIntensity; private float startRange; private void Start() { if ((Object)(object)glowLight == (Object)null) { glowLight = ((Component)this).GetComponentInChildren<Light>(); } startIntensity = glowLight.intensity; startRange = glowLight.range; ((MonoBehaviour)this).StartCoroutine(DimRoutine()); ((MonoBehaviour)this).StartCoroutine(DestroyAfterLifetime()); } [IteratorStateMachine(typeof(<DestroyAfterLifetime>d__6))] private IEnumerator DestroyAfterLifetime() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DestroyAfterLifetime>d__6(0) { <>4__this = this }; } [IteratorStateMachine(typeof(<DimRoutine>d__7))] private IEnumerator DimRoutine() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DimRoutine>d__7(0) { <>4__this = this }; } } internal sealed class FlickeringLight : MonoBehaviour { [SerializeField] private Light lightSource; [SerializeField] private float minIntensity = 100f; [SerializeField] private float maxIntensity = 200f; [SerializeField] [Min(1f)] private int smoothingSamples = 35; [SerializeField] [Min(0.001f)] private float tickIntervalSeconds = 0.03f; [SerializeField] private bool playOnStart; private float[] intensitySamples = new float[1]; private int intensitySampleIndex; private int intensitySampleCount; private float intensitySum; private bool isFlickering; private void Awake() { AllocateSmoothingBuffer(); } private void Start() { if (playOnStart) { BeginFlicker(); } } public void BeginFlicker() { if (!isFlickering) { isFlickering = true; AllocateSmoothingBuffer(); ((MonoBehaviour)this).CancelInvoke("FlickerTick"); ((MonoBehaviour)this).InvokeRepeating("FlickerTick", 0f, tickIntervalSeconds); } } public void EndFlicker() { if (isFlickering) { isFlickering = false; ((MonoBehaviour)this).CancelInvoke("FlickerTick"); } } public void ToggleFlicker(bool shouldFlicker) { if (shouldFlicker) { BeginFlicker(); } else { EndFlicker(); } } public void SetIntensityRange(float newMinIntensity, float newMaxIntensity) { minIntensity = newMinIntensity; maxIntensity = newMaxIntensity; } private void FlickerTick() { float sampledIntensity = Random.Range(minIntensity, maxIntensity); ApplySampledIntensity(sampledIntensity); } private void ApplySampledIntensity(float sampledIntensity) { if (smoothingSamples <= 1) { lightSource.intensity = sampledIntensity; return; } if (intensitySampleCount < smoothingSamples) { intensitySamples[intensitySampleIndex] = sampledIntensity; intensitySum += sampledIntensity; intensitySampleCount++; } else { float num = intensitySamples[intensitySampleIndex]; intensitySamples[intensitySampleIndex] = sampledIntensity; intensitySum += sampledIntensity - num; } intensitySampleIndex++; if (intensitySampleIndex >= smoothingSamples) { intensitySampleIndex = 0; } lightSource.intensity = intensitySum / (float)intensitySampleCount; } private void AllocateSmoothingBuffer() { int num = Mathf.Max(1, smoothingSamples); if (intensitySamples.Length != num) { smoothingSamples = num; intensitySamples = new float[smoothingSamples]; intensitySampleIndex = 0; intensitySampleCount = 0; intensitySum = 0f; } } } internal class PlayAudioAnimationEventExtended : MonoBehaviour { [Header("Audio Sources")] [SerializeField] private AudioSource audioToPlay; [SerializeField] private AudioSource audioToPlayB; [Header("Audio Clips")] [SerializeField] private AudioClip audioClip1; [SerializeField] private bool audioClip1Loop; [SerializeField] private AudioClip audioClip2; [SerializeField] private AudioClip audioClip3; [SerializeField] private AudioClip audioClip4; [SerializeField] private AudioClip audioClip5; [SerializeField] private AudioClip audioClip6; public void PlayAudio1() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip1 == (Object)null)) { if (audioClip1Loop) { audioToPlay.clip = audioClip1; audioToPlay.Play(); } else { audioToPlay.PlayOneShot(audioClip1); } } } public void PlayAudio2() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip2 == (Object)null)) { audioToPlay.PlayOneShot(audioClip2); } } public void PlayAudio3() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip3 == (Object)null)) { audioToPlay.PlayOneShot(audioClip3); } } public void PlayAudio4() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip4 == (Object)null)) { audioToPlay.PlayOneShot(audioClip4); } } public void PlayAudio5() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip5 == (Object)null)) { audioToPlay.PlayOneShot(audioClip5); } } public void PlayAudio6() { if (!((Object)(object)audioToPlay == (Object)null) && !((Object)(object)audioClip6 == (Object)null)) { audioToPlay.PlayOneShot(audioClip6); } } public void PlayAudioB1() { if (!