using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BongoMod.Patches;
using BongoMod.Revive;
using BongoMod.SoundAPI;
using Dawn;
using Dawn.Utils;
using GameNetcodeStuff;
using LethalNetworkAPI;
using Microsoft.CodeAnalysis;
using On;
using On.GameNetcodeStuff;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
using loaforcsSoundAPI;
using loaforcsSoundAPI.Core;
using loaforcsSoundAPI.SoundPacks;
using loaforcsSoundAPI.SoundPacks.Data;
using loaforcsSoundAPI.SoundPacks.Data.Conditions;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("EasyTextEffects")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("me.loaforc.soundapi")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AccessibilityModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AndroidJNIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AnimationModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AssetBundleModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AudioModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClothModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClusterInputModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClusterRendererModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ContentLoadModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.CoreModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.CrashReportingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.DirectorModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine")]
[assembly: IgnoresAccessChecksTo("UnityEngine.DSPGraphModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GameCenterModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GridModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.HotReloadModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ImageConversionModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.IMGUIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.InputLegacyModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.InputModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.JSONSerializeModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.LocalizationModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ParticleSystemModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PerformanceReportingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.Physics2DModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PhysicsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ProfilerModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PropertiesModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ScreenCaptureModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SharedInternalsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SpriteMaskModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SpriteShapeModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.StreamingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SubstanceModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SubsystemsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TerrainModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TerrainPhysicsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextCoreFontEngineModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextCoreTextEngineModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextRenderingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TilemapModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TLSModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UIElementsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UmbraModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityAnalyticsCommonModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityAnalyticsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityConnectModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityCurlModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityTestProtocolModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestAssetBundleModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestAudioModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestTextureModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestWWWModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VehiclesModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VFXModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VideoModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VirtualTexturingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VRModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.WindModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.XRModule")]
[assembly: AssemblyCompany("me.loaforc.bongomod")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BongoMod")]
[assembly: AssemblyTitle("me.loaforc.bongomod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BongoMod
{
[BepInPlugin("me.loaforc.bongomod", "BongoMod", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class BongoMod : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_Start <>9__7_1;
internal void <Awake>b__7_1(orig_Start orig, GameNetworkManager self)
{
NetworkManager.Singleton.AddNetworkPrefab(NetworkerPrefab);
orig.Invoke(self);
}
}
internal static GameObject NetworkerPrefab;
internal static IReviveMechanic ReviveMechanic;
internal static LNetworkMessage<int> PlayerRevive;
internal static ManualLogSource Logger { get; private set; }
private void Awake()
{
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Expected O, but got Unknown
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Expected O, but got Unknown
Logger = Logger.CreateLogSource("me.loaforc.bongomod");
BongoModConfig.Init(((BaseUnityPlugin)this).Config);
BongoModSoundAPI.Init(((BaseUnityPlugin)this).Config);
HUDManagerPatches.Init();
StartOfRoundPatches.Init();
TimeOfDayPatches.Init();
RoundManagerPatches.Init();
PlayerControllerPatches.Init();
HangarShipDoorPatches.Init();
DeadBodyInfoPatches.Init();
VehicleControllerPatches.Init();
PlayerRevive = LNetworkMessage<int>.Connect("BongoMod.PlayerRevive", (Action<int, ulong>)null, (Action<int>)null, (Action<int, ulong>)null);
PlayerRevive.OnServerReceived += delegate(int player, ulong _)
{
PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[player];
Logger.LogInfo((object)("playerrevive.onServerRecieved = " + val3.playerUsername));
PlayerReviveOnOnClientReceived(player);
PlayerRevive.SendClients(player);
};
PlayerRevive.OnClientReceived += PlayerReviveOnOnClientReceived;
NetworkerPrefab = new GameObject("BongoNetworker")
{
hideFlags = (HideFlags)61
};
NetworkerPrefab.AddComponent<BongoModManager>();
NetworkObject val = NetworkerPrefab.AddComponent<NetworkObject>();
val.GlobalObjectIdHash = BitConverter.ToUInt32(Encoding.UTF8.GetBytes(((Object)NetworkerPrefab).name), 0);
Logger.LogDebug((object)$"NetworkerHash: {val.GlobalObjectIdHash}");
object obj = <>c.<>9__7_1;
if (obj == null)
{
hook_Start val2 = delegate(orig_Start orig, GameNetworkManager self)
{
NetworkManager.Singleton.AddNetworkPrefab(NetworkerPrefab);
orig.Invoke(self);
};
<>c.<>9__7_1 = val2;
obj = (object)val2;
}
GameNetworkManager.Start += (hook_Start)obj;
Logger.LogInfo((object)"me.loaforc.bongomod v1.0.0 has loaded!");
}
private void PlayerReviveOnOnClientReceived(int id)
{
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[id];
if (!val.isPlayerDead)
{
Logger.LogWarning((object)("Tried to revive: " + val.playerUsername + " but they are still alive!"));
return;
}
StartOfRound instance = StartOfRound.Instance;
instance.livingPlayers++;
int num = Array.IndexOf(StartOfRound.Instance.allPlayerScripts, val);
val.ResetPlayerBloodObjects(val.isPlayerDead);
if (!val.isPlayerDead && !val.isPlayerControlled)
{
return;
}
val.isClimbingLadder = false;
if (!val.inSpecialInteractAnimation || (Object)(object)val.currentTriggerInAnimationWith == (Object)null || !Object.op_Implicit((Object)(object)((Component)val.currentTriggerInAnimationWith).GetComponentInChildren<MoveToExitSpecialAnimation>()))
{
val.clampLooking = false;
((Component)val.gameplayCamera).transform.localEulerAngles = new Vector3(((Component)val.gameplayCamera).transform.localEulerAngles.x, 0f, ((Component)val.gameplayCamera).transform.localEulerAngles.z);
val.inVehicleAnimation = false;
}
val.disableMoveInput = false;
val.ResetZAndXRotation();
((Collider)val.thisController).enabled = true;
val.health = 100;
val.hasBeenCriticallyInjured = false;
val.disableLookInput = false;
val.disableInteract = false;
((Behaviour)val.nightVisionRadar).enabled = false;
if (val.isPlayerDead)
{
val.isPlayerDead = false;
val.isPlayerControlled = true;
val.isInElevator = true;
val.isInHangarShipRoom = true;
val.isInsideFactory = false;
val.parentedToElevatorLastFrame = false;
val.overrideGameOverSpectatePivot = null;
StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
val.TeleportPlayer(StartOfRound.Instance.GetPlayerSpawnPosition(0, false), false, 0f, false, true);
val.setPositionOfDeadPlayer = false;
val.DisablePlayerModel(StartOfRound.Instance.allPlayerObjects[num], true, true);
((Behaviour)val.helmetLight).enabled = false;
val.Crouch(false);
val.criticallyInjured = false;
if ((Object)(object)val.playerBodyAnimator != (Object)null)
{
val.playerBodyAnimator.SetBool("Limp", false);
}
val.bleedingHeavily = false;
val.activatingItem = false;
val.twoHanded = false;
val.inShockingMinigame = false;
val.inSpecialInteractAnimation = false;
val.freeRotationInInteractAnimation = false;
val.disableSyncInAnimation = false;
val.inAnimationWithEnemy = null;
val.holdingWalkieTalkie = false;
val.speakingToWalkieTalkie = false;
val.isSinking = false;
val.isUnderwater = false;
val.sinkingValue = 0f;
val.statusEffectAudio.Stop();
val.DisableJetpackControlsLocally();
val.health = 100;
val.mapRadarDotAnimator.SetBool("dead", false);
val.externalForceAutoFade = Vector3.zero;
if (((NetworkBehaviour)val).IsOwner)
{
HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
val.hasBegunSpectating = false;
HUDManager.Instance.RemoveSpectateUI();
HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
val.hinderedMultiplier = 1f;
val.isMovementHindered = 0;
val.sourcesCausingSinking = 0;
val.reverbPreset = StartOfRound.Instance.shipReverb;
}
}
SoundManager.Instance.earsRingingTimer = 0f;
val.voiceMuffledByEnemy = false;
SoundManager.Instance.playerVoicePitchTargets[num] = 1f;
SoundManager.Instance.SetPlayerPitch(1f, num);
if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null)
{
StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
}
if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null)
{
if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
{
val.currentVoiceChatIngameSettings.InitializeComponents();
}
if (!((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null))
{
((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
}
}
}
}
internal static class BongoModConfig
{
public enum ReviveMode
{
None,
IndividualTimed,
WaveTimed
}
[Flags]
public enum ReviveHintMode
{
SpotBody = 2,
CollectBody = 4
}
[CompilerGenerated]
private sealed class <GetStartingUnlockables>d__32 : IEnumerable<DawnUnlockableItemInfo>, IEnumerable, IEnumerator<DawnUnlockableItemInfo>, IEnumerator, IDisposable
{
private int <>1__state;
private DawnUnlockableItemInfo <>2__current;
private int <>l__initialThreadId;
private IEnumerator<DawnUnlockableItemInfo> <>7__wrap1;
DawnUnlockableItemInfo IEnumerator<DawnUnlockableItemInfo>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetStartingUnlockables>d__32(int <>1__state)
{
this.<>1__state = <>1__state;
<>l__initialThreadId = Environment.CurrentManagedThreadId;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<>7__wrap1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
try
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>7__wrap1 = ((Registry<DawnUnlockableItemInfo>)(object)LethalContent.Unlockables).Values.GetEnumerator();
<>1__state = -3;
break;
case 1:
<>1__state = -3;
break;
}
while (<>7__wrap1.MoveNext())
{
DawnUnlockableItemInfo current = <>7__wrap1.Current;
if (_file.Bind<bool>("Start Unlockables", ((object)((DawnBaseInfo<DawnUnlockableItemInfo>)(object)current).Key).ToString(), false, "Start with this unlockable? Note that not all will be supported here probably").Value)
{
<>2__current = current;
<>1__state = 1;
return true;
}
}
<>m__Finally1();
<>7__wrap1 = null;
return false;
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<>7__wrap1 != null)
{
<>7__wrap1.Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
[DebuggerHidden]
IEnumerator<DawnUnlockableItemInfo> IEnumerable<DawnUnlockableItemInfo>.GetEnumerator()
{
if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
{
<>1__state = 0;
return this;
}
return new <GetStartingUnlockables>d__32(0);
}
[DebuggerHidden]
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<DawnUnlockableItemInfo>)this).GetEnumerator();
}
}
private static ConfigFile _file;
public static ReviveMode ReviveMechanic { get; private set; }
public static float IndividualTimer { get; private set; }
public static float WaveTimer { get; private set; }
public static float ReviveScrapPercentage { get; private set; }
public static ReviveHintMode ReviveScrapHint { get; private set; }
public static int MaximumRevives { get; private set; }
public static bool BodyReviveRequirement { get; private set; }
internal static void Init(ConfigFile file)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Expected O, but got Unknown
_file = file;
ReviveMechanic = file.Bind<ReviveMode>("Revive Mechanics", "Revive Mechanic", ReviveMode.None, "Implement a revive mechanic? Setting to something other than None will disable voting the ship to leave.").Value;
MaximumRevives = file.Bind<int>("Revive Mechanics", "Maximum Revives", 0, new ConfigDescription("Maximum amount of times a player can revive in a single round. Setting to 0 will allow infinite revives.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 10), Array.Empty<object>())).Value;
IndividualTimer = file.Bind<int>("Revive Mechanics", "Individual Timer", 40, "(IndividualTimed) How long a revive will take").Value;
WaveTimer = file.Bind<int>("Revive Mechanics", "Wave Timer", 90, "(WaveTimed) How long a revive will take. The timer starts when the first person in a wave dies.").Value;
}
[IteratorStateMachine(typeof(<GetStartingUnlockables>d__32))]
internal static IEnumerable<DawnUnlockableItemInfo> GetStartingUnlockables()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetStartingUnlockables>d__32(-2);
}
}
public class BongoModManager : NetworkSingleton<BongoModManager>
{
public override void OnNetworkSpawn()
{
base.OnNetworkSpawn();
BongoMod.ReviveMechanic = BongoModConfig.ReviveMechanic switch
{
BongoModConfig.ReviveMode.None => new NoOpReviveMechanic(),
BongoModConfig.ReviveMode.IndividualTimed => new IndividualTimedRevive(BongoModConfig.IndividualTimer),
BongoModConfig.ReviveMode.WaveTimed => ((Component)this).GetComponent<WaveTimedRevive>(),
_ => throw new ArgumentOutOfRangeException(),
};
}
[ServerRpc(RequireOwnership = false)]
public void RevivePlayerServerRPC(PlayerControllerReference reference)
{
RevivePlayerClientRPC(reference);
}
[ClientRpc]
private void RevivePlayerClientRPC(PlayerControllerReference reference)
{
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_0278: Unknown result type (might be due to invalid IL or missing references)
PlayerControllerB val = PlayerControllerReference.op_Implicit(reference);
if (!val.isPlayerDead)
{
BongoMod.Logger.LogWarning((object)("Tried to revive: " + val.playerUsername + " but they are still alive!"));
return;
}
StartOfRound instance = StartOfRound.Instance;
instance.livingPlayers++;
int num = Array.IndexOf(StartOfRound.Instance.allPlayerScripts, val);
val.ResetPlayerBloodObjects(val.isPlayerDead);
if (!val.isPlayerDead && !val.isPlayerControlled)
{
return;
}
val.isClimbingLadder = false;
if (!val.inSpecialInteractAnimation || (Object)(object)val.currentTriggerInAnimationWith == (Object)null || !Object.op_Implicit((Object)(object)((Component)val.currentTriggerInAnimationWith).GetComponentInChildren<MoveToExitSpecialAnimation>()))
{
val.clampLooking = false;
((Component)val.gameplayCamera).transform.localEulerAngles = new Vector3(((Component)val.gameplayCamera).transform.localEulerAngles.x, 0f, ((Component)val.gameplayCamera).transform.localEulerAngles.z);
val.inVehicleAnimation = false;
}
val.disableMoveInput = false;
val.ResetZAndXRotation();
((Collider)val.thisController).enabled = true;
val.health = 100;
val.hasBeenCriticallyInjured = false;
val.disableLookInput = false;
val.disableInteract = false;
((Behaviour)val.nightVisionRadar).enabled = false;
if (val.isPlayerDead)
{
val.isPlayerDead = false;
val.isPlayerControlled = true;
val.isInElevator = true;
val.isInHangarShipRoom = true;
val.isInsideFactory = false;
val.parentedToElevatorLastFrame = false;
val.overrideGameOverSpectatePivot = null;
StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
val.TeleportPlayer(StartOfRound.Instance.GetPlayerSpawnPosition(0, false), false, 0f, false, true);
val.setPositionOfDeadPlayer = false;
val.DisablePlayerModel(StartOfRound.Instance.allPlayerObjects[num], true, true);
((Behaviour)val.helmetLight).enabled = false;
val.Crouch(false);
val.criticallyInjured = false;
if ((Object)(object)val.playerBodyAnimator != (Object)null)
{
val.playerBodyAnimator.SetBool("Limp", false);
}
val.bleedingHeavily = false;
val.activatingItem = false;
val.twoHanded = false;
val.inShockingMinigame = false;
val.inSpecialInteractAnimation = false;
val.freeRotationInInteractAnimation = false;
val.disableSyncInAnimation = false;
val.inAnimationWithEnemy = null;
val.holdingWalkieTalkie = false;
val.speakingToWalkieTalkie = false;
val.isSinking = false;
val.isUnderwater = false;
val.sinkingValue = 0f;
val.statusEffectAudio.Stop();
val.DisableJetpackControlsLocally();
val.health = 100;
val.mapRadarDotAnimator.SetBool("dead", false);
val.externalForceAutoFade = Vector3.zero;
if (((NetworkBehaviour)val).IsOwner)
{
HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
val.hasBegunSpectating = false;
HUDManager.Instance.RemoveSpectateUI();
HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
val.hinderedMultiplier = 1f;
val.isMovementHindered = 0;
val.sourcesCausingSinking = 0;
val.reverbPreset = StartOfRound.Instance.shipReverb;
}
}
SoundManager.Instance.earsRingingTimer = 0f;
val.voiceMuffledByEnemy = false;
SoundManager.Instance.playerVoicePitchTargets[num] = 1f;
SoundManager.Instance.SetPlayerPitch(1f, num);
if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null)
{
StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
}
if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null)
{
if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
{
val.currentVoiceChatIngameSettings.InitializeComponents();
}
if (!((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null))
{
((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
}
}
}
}
public class PossibleStringGroup : NetworkBehaviour
{
public List<string> PossibleValues = new List<string>();
public NetworkVariable<string> CurrentValue = new NetworkVariable<string>((string)null, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);
private Random _random = new Random();
public override void OnNetworkSpawn()
{
((NetworkBehaviour)this).OnNetworkSpawn();
ChooseNew();
}
public void ChooseNew()
{
CurrentValue.Value = RandomExtensions.NextItem<string>(_random, (IList<string>)PossibleValues);
}
}
internal static class BongoModSoundAPI
{
public class BongoModSAPIEmitter
{
public string MatchString { get; private set; }
public bool Enabled { get; private set; }
public BongoModSAPIEmitter(string matchString, ConfigFile file)
{
MatchString = matchString;
Enabled = file.Bind<bool>("SoundAPI Emitters", matchString, true, "").Value;
}
internal void Emit()
{
if (Enabled)
{
PlaySound(MatchString);
}
}
}
private static AudioSource _currentEmitter;
private static bool _isEnabled;
public static BongoModSAPIEmitter LocalPlayerDied;
public static BongoModSAPIEmitter LocalPlayerRevived;
public static BongoModSAPIEmitter ShipOpen;
internal static void Init(ConfigFile file)
{
LocalPlayerDied = new BongoModSAPIEmitter("BongoMod:local_player_died", file);
LocalPlayerRevived = new BongoModSAPIEmitter("BongoMod:local_player_revived", file);
ShipOpen = new BongoModSAPIEmitter("BongoMod:ship_open", file);
_isEnabled = true;
SoundAPI.RegisterAll(Assembly.GetExecutingAssembly());
SceneManager.sceneLoaded += delegate
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)_currentEmitter))
{
_currentEmitter = new GameObject("BongoModSoundAPI-Emitter").AddComponent<AudioSource>();
_currentEmitter.spatialize = false;
AudioSourceAdditionalData orCreate = AudioSourceAdditionalData.GetOrCreate(_currentEmitter);
orCreate.DisableReplacing = true;
Object.DontDestroyOnLoad((Object)(object)((Component)_currentEmitter).gameObject);
}
};
}
private static void PlaySound(string matchString)
{
if (_isEnabled)
{
string text = "*";
string[] array = matchString.Split(":");
int num = 0;
string[] array2 = new string[1 + array.Length];
array2[num] = text;
num++;
ReadOnlySpan<string> readOnlySpan = new ReadOnlySpan<string>(array);
readOnlySpan.CopyTo(new Span<string>(array2).Slice(num, readOnlySpan.Length));
num += readOnlySpan.Length;
string[] array3 = array2;
SoundReplacementGroup val = default(SoundReplacementGroup);
AudioClip val2 = default(AudioClip);
if (SoundReplacementHandler.TryGetReplacementClip(array3, ref val, ref val2, (IContext)(object)DefaultConditionContext.DEFAULT))
{
_currentEmitter.PlayOneShot(val2);
}
}
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "me.loaforc.bongomod";
public const string PLUGIN_NAME = "BongoMod";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace BongoMod.SoundAPI
{
[SoundAPICondition("BongoMod:synced_random", false, null)]
public class SyncedValueCondition : Condition
{
public static Dictionary<string, int> IDToValue = new Dictionary<string, int>();
public static Dictionary<string, int> IDToMaxValue = new Dictionary<string, int>();
public string SyncID { get; private set; }
public int Value { get; private set; }
public override bool Evaluate(IContext context)
{
return Value == IDToValue.GetValueOrDefault(SyncID, 0);
}
public override void OnRegistered()
{
((Condition)this).OnRegistered();
if (Value > IDToMaxValue.GetValueOrDefault(SyncID, 0))
{
IDToMaxValue[SyncID] = Value;
}
}
}
}
namespace BongoMod.Revive
{
public class CollectScrapRevive : NetworkBehaviour, IReviveMechanic
{
public void OnLocalPlayerRevive()
{
throw new NotImplementedException();
}
public float GetLocalPlayerProgress()
{
throw new NotImplementedException();
}
public string GetText()
{
throw new NotImplementedException();
}
}
public class IndividualTimedRevive : IReviveMechanic
{
[CompilerGenerated]
private float <duration>P;
private float _time;
public IndividualTimedRevive(float duration)
{
<duration>P = duration;
base..ctor();
}
public void OnLocalPlayerRevive()
{
_time = 0f;
}
public float GetLocalPlayerProgress()
{
_time += Time.deltaTime;
return _time / <duration>P;
}
public string GetText()
{
return "Waiting to revive...";
}
}
public interface IReviveMechanic
{
void OnLocalPlayerRevive();
float GetLocalPlayerProgress();
string GetText();
}
public class NoOpReviveMechanic : IReviveMechanic
{
public void OnLocalPlayerRevive()
{
}
public float GetLocalPlayerProgress()
{
return 0f;
}
public string GetText()
{
return "[error: NoOpReviveMechanic]";
}
}
public class WaveTimedRevive : NetworkBehaviour, IReviveMechanic
{
private float _time;
private NetworkVariable<bool> _isTicking = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);
public void OnLocalPlayerRevive()
{
}
public float GetLocalPlayerProgress()
{
if (!_isTicking.Value && _time == 0f)
{
_time = 0.1f;
StartTickingRPC();
}
return _time / BongoModConfig.WaveTimer;
}
public string GetText()
{
return "Reviving everyone...";
}
[Rpc(/*Could not decode attribute arguments.*/)]
public void StartTickingRPC()
{
_isTicking.Value = true;
}
private void Update()
{
if (_isTicking.Value || _time > 1f)
{
_time += Time.deltaTime;
}
}
private void LateUpdate()
{
if (!(GetLocalPlayerProgress() < 1f))
{
_time = 0f;
if (((NetworkBehaviour)this).IsServer)
{
_isTicking.Value = false;
}
}
}
}
}
namespace BongoMod.Patches
{
internal static class DeadBodyInfoPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_Update <0>__CheckIfBodyRecovered;
}
internal static bool BodyRecovered { get; private set; }
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
object obj = <>O.<0>__CheckIfBodyRecovered;
if (obj == null)
{
hook_Update val = CheckIfBodyRecovered;
<>O.<0>__CheckIfBodyRecovered = val;
obj = (object)val;
}
DeadBodyInfo.Update += (hook_Update)obj;
}
private static void CheckIfBodyRecovered(orig_Update orig, DeadBodyInfo self)
{
orig.Invoke(self);
if ((Object)(object)self.playerScript == (Object)(object)GameNetworkManager.Instance.localPlayerController)
{
BodyRecovered = self.isInShip;
}
}
}
internal static class HangarShipDoorPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_SetDoorButtonsEnabled <0>__HangarShipDoorOnSetDoorButtonsEnabled;
}
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
object obj = <>O.<0>__HangarShipDoorOnSetDoorButtonsEnabled;
if (obj == null)
{
hook_SetDoorButtonsEnabled val = HangarShipDoorOnSetDoorButtonsEnabled;
<>O.<0>__HangarShipDoorOnSetDoorButtonsEnabled = val;
obj = (object)val;
}
HangarShipDoor.SetDoorButtonsEnabled += (hook_SetDoorButtonsEnabled)obj;
}
private static void HangarShipDoorOnSetDoorButtonsEnabled(orig_SetDoorButtonsEnabled orig, HangarShipDoor self, bool doorbuttonsenabled)
{
orig.Invoke(self, doorbuttonsenabled);
if (doorbuttonsenabled)
{
BongoModSoundAPI.ShipOpen.Emit();
}
}
}
internal static class HUDManagerPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_Update <0>__UpdateVotingMeter;
}
internal static int RevivesThisRound;
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
object obj = <>O.<0>__UpdateVotingMeter;
if (obj == null)
{
hook_Update val = UpdateVotingMeter;
<>O.<0>__UpdateVotingMeter = val;
obj = (object)val;
}
HUDManager.Update += (hook_Update)obj;
}
private static void UpdateVotingMeter(orig_Update orig, HUDManager self)
{
orig.Invoke(self);
if (!GameNetworkManager.Instance.localPlayerController.isPlayerDead || StartOfRound.Instance.allPlayersDead || BongoMod.ReviveMechanic is NoOpReviveMechanic)
{
return;
}
if (BongoModConfig.MaximumRevives > 0 && RevivesThisRound >= BongoModConfig.MaximumRevives)
{
((Component)self.holdButtonToEndGameEarlyMeter).gameObject.SetActive(false);
((TMP_Text)self.holdButtonToEndGameEarlyText).text = "Out of revives!";
((TMP_Text)self.holdButtonToEndGameEarlyVotesText).text = string.Empty;
return;
}
float localPlayerProgress = BongoMod.ReviveMechanic.GetLocalPlayerProgress();
((Component)self.holdButtonToEndGameEarlyMeter).gameObject.SetActive(localPlayerProgress > 0f);
self.holdButtonToEndGameEarlyMeter.fillAmount = localPlayerProgress;
((TMP_Text)self.holdButtonToEndGameEarlyText).text = BongoMod.ReviveMechanic.GetText();
((TMP_Text)self.holdButtonToEndGameEarlyVotesText).text = string.Empty;
if (localPlayerProgress >= 1f)
{
BongoMod.PlayerRevive.SendServer(Array.IndexOf(StartOfRound.Instance.allPlayerScripts, GameNetworkManager.Instance.localPlayerController));
BongoMod.ReviveMechanic.OnLocalPlayerRevive();
RevivesThisRound++;
BongoModSoundAPI.LocalPlayerRevived.Emit();
}
}
}
internal static class PlayerControllerPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_KillPlayer <0>__TryTriggerDeathSound;
}
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
object obj = <>O.<0>__TryTriggerDeathSound;
if (obj == null)
{
hook_KillPlayer val = TryTriggerDeathSound;
<>O.<0>__TryTriggerDeathSound = val;
obj = (object)val;
}
PlayerControllerB.KillPlayer += (hook_KillPlayer)obj;
}
private static void TryTriggerDeathSound(orig_KillPlayer orig, PlayerControllerB self, Vector3 bodyvelocity, bool spawnbody, CauseOfDeath causeofdeath, int deathanimation, Vector3 positionoffset)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: 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)
orig.Invoke(self, bodyvelocity, spawnbody, causeofdeath, deathanimation, positionoffset);
BongoModSoundAPI.LocalPlayerDied.Emit();
}
}
internal static class RoundManagerPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_GenerateNewLevelClientRpc <0>__RefreshSoundAPIValues;
}
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
object obj = <>O.<0>__RefreshSoundAPIValues;
if (obj == null)
{
hook_GenerateNewLevelClientRpc val = RefreshSoundAPIValues;
<>O.<0>__RefreshSoundAPIValues = val;
obj = (object)val;
}
RoundManager.GenerateNewLevelClientRpc += (hook_GenerateNewLevelClientRpc)obj;
}
private static void RefreshSoundAPIValues(orig_GenerateNewLevelClientRpc orig, RoundManager self, int randomseed, int levelid, int molditerations, int moldstartposition, int[] syncdestroyedmold)
{
orig.Invoke(self, randomseed, levelid, molditerations, moldstartposition, syncdestroyedmold);
Random random = new Random(randomseed + 395823);
foreach (var (text2, num2) in SyncedValueCondition.IDToMaxValue.OrderBy((KeyValuePair<string, int> it) => it.Key))
{
SyncedValueCondition.IDToValue[text2] = random.Next(0, num2 + 1);
BongoMod.Logger.LogInfo((object)$"synced_random: {text2} -> {SyncedValueCondition.IDToValue[text2]} (0-{num2 + 1})");
}
HUDManagerPatches.RevivesThisRound = 0;
}
}
internal static class StartOfRoundPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__StartOfRoundOnAwake;
public static hook_ReviveDeadPlayers <1>__StartOfRoundOnReviveDeadPlayers;
}
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
object obj = <>O.<0>__StartOfRoundOnAwake;
if (obj == null)
{
hook_Awake val = StartOfRoundOnAwake;
<>O.<0>__StartOfRoundOnAwake = val;
obj = (object)val;
}
StartOfRound.Awake += (hook_Awake)obj;
object obj2 = <>O.<1>__StartOfRoundOnReviveDeadPlayers;
if (obj2 == null)
{
hook_ReviveDeadPlayers val2 = StartOfRoundOnReviveDeadPlayers;
<>O.<1>__StartOfRoundOnReviveDeadPlayers = val2;
obj2 = (object)val2;
}
StartOfRound.ReviveDeadPlayers += (hook_ReviveDeadPlayers)obj2;
}
private static void StartOfRoundOnReviveDeadPlayers(orig_ReviveDeadPlayers orig, StartOfRound self)
{
if (GameNetworkManager.Instance.localPlayerController.isPlayerDead)
{
BongoModSoundAPI.LocalPlayerRevived.Emit();
}
orig.Invoke(self);
}
private static void StartOfRoundOnAwake(orig_Awake orig, StartOfRound self)
{
orig.Invoke(self);
NetworkObjectExtensions.OnSpawn(((NetworkBehaviour)self).NetworkObject, (Action)delegate
{
if (((NetworkBehaviour)self).IsServer)
{
GameObject val = Object.Instantiate<GameObject>(BongoMod.NetworkerPrefab, ((Component)self).transform.parent);
val.GetComponent<NetworkObject>().Spawn(false);
}
});
}
}
internal static class TimeOfDayPatches
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_VoteShipToLeaveEarly <>9__0_0;
internal void <Init>b__0_0(orig_VoteShipToLeaveEarly orig, TimeOfDay self)
{
}
}
internal static void Init()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
object obj = <>c.<>9__0_0;
if (obj == null)
{
hook_VoteShipToLeaveEarly val = delegate
{
};
<>c.<>9__0_0 = val;
obj = (object)val;
}
TimeOfDay.VoteShipToLeaveEarly += (hook_VoteShipToLeaveEarly)obj;
}
}
internal static class VehicleControllerPatches
{
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__SetVehicleRadio;
public static hook_SetRadioStationClientRpc <1>__FixZeekerss;
}
internal static void Init()
{
//IL_0010: 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_001b: Expected O, but got Unknown
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
object obj = <>O.<0>__SetVehicleRadio;
if (obj == null)
{
hook_Awake val = SetVehicleRadio;
<>O.<0>__SetVehicleRadio = val;
obj = (object)val;
}
VehicleController.Awake += (hook_Awake)obj;
object obj2 = <>O.<1>__FixZeekerss;
if (obj2 == null)
{
hook_SetRadioStationClientRpc val2 = FixZeekerss;
<>O.<1>__FixZeekerss = val2;
obj2 = (object)val2;
}
VehicleController.SetRadioStationClientRpc += (hook_SetRadioStationClientRpc)obj2;
}
private static void FixZeekerss(orig_SetRadioStationClientRpc orig, VehicleController self, int radiostation, int signalquality)
{
orig.Invoke(self, radiostation, signalquality);
self.SetRadioOnLocalClient(true, true);
}
private static void SetVehicleRadio(orig_Awake orig, VehicleController self)
{
orig.Invoke(self);
if (SoundPackDataHandler.SoundReplacements.TryGetValue("VehicleRadio", out var value))
{
IContext context = (IContext)(object)DefaultConditionContext.DEFAULT;
value = value.Where((SoundReplacementGroup it) => ((Conditional)it.Parent).Evaluate(context) && ((Conditional)it).Evaluate(context) && SoundReplacementHandler.CheckGroupMatches(it, new string[3] { "*", "BongoMod", "VehicleRadio" })).ToList();
AudioClip[] radioClips = (from it in value.SelectMany((SoundReplacementGroup it) => it.Sounds)
where ((Conditional)it).Evaluate(context)
select it.Clip).ToArray();
self.radioClips = radioClips;
}
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}