Decompiled source of Lethal Prop Hunt v1.0.2
Lethal_Prop_Hunt.dll
Decompiled 4 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using LethalPropHunt; using LethalPropHunt.Audio; using LethalPropHunt.Gamemode; using LethalPropHunt.Input; using LethalPropHunt.Patches; using Lethal_Prop_Hunt.Gamemode.Utils; using Lethal_Prop_Hunt.NetcodePatcher; using Lethal_Prop_Hunt.Patches; using MoreCompany.Cosmetics; using TMPro; using Trouble_In_Company_Town.UI; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.InputSystem; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Trouble In Company Town")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Trouble In Company Town")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7a18e8a9-6e8a-4b29-be3c-4b4f892febcb")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace Trouble_In_Company_Town.UI { public class LPHTauntCountdown : MonoBehaviour { public PlayerControllerB Player; private TextMeshProUGUI _timer; public LPHTauntCountdown(HUDManager hudManager) { FindComponents(hudManager); } private void FindComponents(HUDManager hudManager) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0176: 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_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_014e: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("Systems/UI/Canvas/IngamePlayerHUD/TopLeftCorner"); GameObject val2 = new GameObject("TauntCooldownText"); val2.transform.SetParent(val.transform, false); _timer = val2.AddComponent<TextMeshProUGUI>(); if ((Object)(object)hudManager.weightCounter != (Object)null) { TextMeshProUGUI weightCounter = hudManager.weightCounter; ((TMP_Text)_timer).font = ((TMP_Text)weightCounter).font; ((TMP_Text)_timer).fontSize = ((TMP_Text)weightCounter).fontSize; ((Graphic)_timer).color = Color.white; ((TMP_Text)_timer).alignment = (TextAlignmentOptions)514; ((TMP_Text)_timer).enableAutoSizing = ((TMP_Text)weightCounter).enableAutoSizing; ((TMP_Text)_timer).fontSizeMin = ((TMP_Text)weightCounter).fontSizeMin; ((TMP_Text)_timer).fontSizeMax = ((TMP_Text)weightCounter).fontSizeMax; if ((Object)(object)((TMP_Text)weightCounter).fontMaterial != (Object)null) { ((TMP_Text)_timer).fontSharedMaterial = new Material(((TMP_Text)weightCounter).fontMaterial); } if ((Object)(object)((TMP_Text)weightCounter).transform.parent != (Object)null) { RectTransform component = ((Component)((TMP_Text)weightCounter).transform.parent).GetComponent<RectTransform>(); if ((Object)(object)component != (Object)null) { RectTransform component2 = ((Component)_timer).GetComponent<RectTransform>(); ((Transform)component2).localRotation = ((Transform)component).localRotation; } } } else { ((TMP_Text)_timer).fontSize = 24f; ((Graphic)_timer).color = Color.white; ((TMP_Text)_timer).alignment = (TextAlignmentOptions)514; } RectTransform component3 = val2.GetComponent<RectTransform>(); component3.anchorMin = new Vector2(0f, 1f); component3.anchorMax = new Vector2(0f, 1f); component3.pivot = new Vector2(0f, 1f); int num = 0; int num2 = -120; component3.anchoredPosition = new Vector2((float)(-53 + num), (float)(-95 + num2)); } public void SetTimer(int currentCooldown) { if (currentCooldown <= 0) { ((TMP_Text)_timer).text = "Taunting"; } else { ((TMP_Text)_timer).text = "Auto Taunt: " + currentCooldown + "s"; } } internal void HideTimer() { ((TMP_Text)_timer).text = ""; } } } namespace Lethal_Prop_Hunt.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("Lethal_Prop_Hunt.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static Bitmap crosshair { get { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown object @object = ResourceManager.GetObject("crosshair", resourceCulture); return (Bitmap)@object; } } internal Resources() { } } } namespace Lethal_Prop_Hunt.Patches { [HarmonyPatch(typeof(GrabbableObject))] internal class GrabbableObjectPatch { [HarmonyPatch("Update")] [HarmonyPrefix] public static void UpdatePatch(GrabbableObject __instance) { if (__instance.isBeingUsed && (Object)(object)__instance.itemProperties != (Object)null && __instance.itemProperties.requiresBattery && __instance.insertedBattery != null) { __instance.insertedBattery.charge = 1f; } } } [HarmonyPatch(typeof(ShotgunItem))] internal class ShotgunPatch { [HarmonyPostfix] [HarmonyPatch(typeof(ShotgunItem), "Start")] public static void StartPatch(ShotgunItem __instance) { __instance.shellsLoaded = 100; __instance.isReloading = false; } [HarmonyPrefix] [HarmonyPatch(typeof(ShotgunItem), "Update")] public static void UpdatePatch(ShotgunItem __instance) { __instance.shellsLoaded = 100; __instance.isReloading = false; } [HarmonyPostfix] [HarmonyPatch(typeof(ShotgunItem), "ShootGun")] public static void ShootGun(Vector3 shotgunPosition, Vector3 shotgunForward, ShotgunItem __instance, ref RaycastHit[] ___enemyColliders) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!((GrabbableObject)__instance).isHeld || !((Object)(object)((GrabbableObject)__instance).playerHeldBy != (Object)null) || !((Object)(object)localPlayerController != (Object)null) || !((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)localPlayerController) || !((GrabbableObject)__instance).playerHeldBy.isInsideFactory || !LPHRoundManager.Instance.GetPlayerRole(localPlayerController).Equals(LPHRoundManager.HUNTERS_ROLE)) { return; } Ray val = default(Ray); ((Ray)(ref val))..ctor(shotgunPosition - shotgunForward * 5f, shotgunForward); if (___enemyColliders == null) { ___enemyColliders = (RaycastHit[])(object)new RaycastHit[10]; } int num = Physics.SphereCastNonAlloc(val, 5f, ___enemyColliders, 15f, 64, (QueryTriggerInteraction)2); bool flag = false; RaycastHit val2 = default(RaycastHit); GrabbableObject val3 = default(GrabbableObject); for (int i = 0; i < num; i++) { PropHuntBase.mls.LogDebug((object)("Collided with " + ((Object)((RaycastHit)(ref ___enemyColliders[i])).collider).name)); if (Physics.Linecast(shotgunPosition, ((RaycastHit)(ref ___enemyColliders[i])).point, ref val2, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) { Debug.DrawRay(((RaycastHit)(ref val2)).point, Vector3.up, Color.red, 15f); Debug.DrawLine(shotgunPosition, ((RaycastHit)(ref ___enemyColliders[i])).point, Color.cyan, 15f); Debug.Log((object)"Raycast hit wall"); } else { if (!((Object)(object)((RaycastHit)(ref ___enemyColliders[i])).collider != (Object)null) || !((Component)((RaycastHit)(ref ___enemyColliders[i])).collider).gameObject.TryGetComponent<GrabbableObject>(ref val3) || flag) { continue; } float num2 = Vector3.Distance(shotgunPosition, ((RaycastHit)(ref ___enemyColliders[i])).point); int num3 = ((num2 < 3.7f) ? 5 : ((!(num2 < 6f)) ? 2 : 3)); Debug.Log((object)$"Hit enemy, hitDamage: {num3}"); bool flag2 = false; foreach (GrabbableObject value in LPHRoundManager.Props.Values) { if (((NetworkBehaviour)value).NetworkObjectId == ((NetworkBehaviour)val3).NetworkObjectId) { flag2 = true; break; } } if (!flag2) { flag = true; ((GrabbableObject)__instance).playerHeldBy.DamagePlayer(10, true, true, (CauseOfDeath)7, 0, false, default(Vector3)); } } } } } [HarmonyPatch(typeof(Shovel))] internal class ShovelPatch { [HarmonyPostfix] [HarmonyPatch(typeof(Shovel), "HitShovel")] public static void HitShovelPatch(bool cancel, Shovel __instance, ref RaycastHit[] ___objectsHitByShovel, ref List<RaycastHit> ___objectsHitByShovelList, ref int ___shovelMask) { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayerController == (Object)null || (Object)(object)((GrabbableObject)__instance).playerHeldBy != (Object)(object)localPlayerController || !LPHRoundManager.Instance.GetPlayerRole(localPlayerController).Equals(LPHRoundManager.HUNTERS_ROLE)) { return; } int num = -1; if (cancel) { return; } ___objectsHitByShovel = Physics.SphereCastAll(((Component)localPlayerController.gameplayCamera).transform.position + ((Component)localPlayerController.gameplayCamera).transform.right * -0.35f, 0.8f, ((Component)localPlayerController.gameplayCamera).transform.forward, 1.5f, ___shovelMask | 0x40, (QueryTriggerInteraction)2); ___objectsHitByShovelList = ___objectsHitByShovel.OrderBy((RaycastHit x) => ((RaycastHit)(ref x)).distance).ToList(); GrabbableObject val2 = default(GrabbableObject); RaycastHit val3 = default(RaycastHit); for (int i = 0; i < ___objectsHitByShovelList.Count; i++) { RaycastHit val = ___objectsHitByShovelList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 8) { val = ___objectsHitByShovelList[i]; if (((Component)((RaycastHit)(ref val)).transform).gameObject.layer != 11) { val = ___objectsHitByShovelList[i]; if (!((Component)((RaycastHit)(ref val)).transform).TryGetComponent<GrabbableObject>(ref val2)) { continue; } val = ___objectsHitByShovelList[i]; if ((Object)(object)((RaycastHit)(ref val)).transform == (Object)(object)((Component)localPlayerController).transform) { continue; } val = ___objectsHitByShovelList[i]; if (!(((RaycastHit)(ref val)).point == Vector3.zero)) { Vector3 position = ((Component)localPlayerController.gameplayCamera).transform.position; val = ___objectsHitByShovelList[i]; if (Physics.Linecast(position, ((RaycastHit)(ref val)).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { continue; } } if (!Object.op_Implicit((Object)(object)val2)) { continue; } bool flag = false; foreach (GrabbableObject value in LPHRoundManager.Props.Values) { if (((NetworkBehaviour)value).NetworkObjectId == ((NetworkBehaviour)val2).NetworkObjectId) { flag = true; break; } } if (!flag) { ((GrabbableObject)__instance).playerHeldBy.DamagePlayer(10, true, true, (CauseOfDeath)1, 0, false, default(Vector3)); } continue; } } val = ___objectsHitByShovelList[i]; string tag = ((Component)((RaycastHit)(ref val)).collider).gameObject.tag; for (int j = 0; j < StartOfRound.Instance.footstepSurfaces.Length; j++) { if (StartOfRound.Instance.footstepSurfaces[j].surfaceTag == tag) { num = j; break; } } } } } [HarmonyPatch(typeof(TimeOfDay))] internal class TimeOfDayPatch { [HarmonyPatch("SetInsideLightingDimness")] [HarmonyPostfix] public static void SetInsideLightingDimnessPatch(bool doNotLerp, bool setValueTo) { if (LPHRoundManager.Instance.IsRunning) { HUDManager.Instance.SetClockVisible(true); } } [HarmonyPatch("Start")] [HarmonyPrefix] private static void startPatch(ref float ___globalTimeSpeedMultiplier) { ___globalTimeSpeedMultiplier = ConfigManager.TimeMultiplier.Value; } } } namespace Lethal_Prop_Hunt.Gamemode.Utils { internal class ConfigManager { public static bool init; public static ConfigEntry<int> PlayerDistribution { get; private set; } public static ConfigEntry<float> MapMultiplier { get; private set; } public static ConfigEntry<float> ScrapMultiplier { get; private set; } public static ConfigEntry<float> TimeMultiplier { get; private set; } public static ConfigEntry<bool> AllowKeys { get; private set; } public static ConfigEntry<int> ForceTauntInterval { get; private set; } public static ConfigEntry<bool> ForceTaunt { get; private set; } public static ConfigEntry<float> PropDamageScale { get; private set; } public static ConfigEntry<bool> ForcePropWeight { get; private set; } public static void InitConfigurations() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Expected O, but got Unknown //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Expected O, but got Unknown //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Expected O, but got Unknown //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Expected O, but got Unknown //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Expected O, but got Unknown //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Expected O, but got Unknown //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Expected O, but got Unknown //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected O, but got Unknown //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Expected O, but got Unknown //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Expected O, but got Unknown //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Expected O, but got Unknown //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Expected O, but got Unknown //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Expected O, but got Unknown //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Expected O, but got Unknown //IL_0317: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Expected O, but got Unknown //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Expected O, but got Unknown //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_033b: Expected O, but got Unknown //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Expected O, but got Unknown //IL_0375: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Expected O, but got Unknown //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Expected O, but got Unknown //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Expected O, but got Unknown if (!init) { init = true; PlayerDistribution = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<int>("Players", "Player Team Balancing", 50, new ConfigDescription("How teams are balanced as a percentage, 50% means half the players are props and half are hunters. If the number of players is an odd number, this will favor hunters", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<int> playerDistribution = PlayerDistribution; IntInputFieldOptions val = new IntInputFieldOptions(); ((BaseRangeOptions<int>)(object)val).Min = 0; ((BaseRangeOptions<int>)(object)val).Max = 100; ((BaseOptions)val).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(playerDistribution, val)); ForceTaunt = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<bool>("Props", "Force Taunt", true, new ConfigDescription("Whether or not to force the player to taunt after a period of time if they have not already done it manually.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<bool> forceTaunt = ForceTaunt; BoolCheckBoxOptions val2 = new BoolCheckBoxOptions(); ((BaseOptions)val2).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(forceTaunt, val2)); ForceTauntInterval = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<int>("Props", "Taunting Interval", 30, new ConfigDescription("Forces the player to taunt after a number of seconds.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<int> forceTauntInterval = ForceTauntInterval; val = new IntInputFieldOptions(); ((BaseRangeOptions<int>)(object)val).Min = 1; ((BaseRangeOptions<int>)(object)val).Max = 60; ((BaseOptions)val).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(forceTauntInterval, val)); ForcePropWeight = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<bool>("Props", "Force Prop Weight Restriction", false, new ConfigDescription("Forces prop players to gain weight equal to their prop which will hinder sprinting. This is a possible balancing feature but I can also see how props need this advantage so its off by default.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<bool> forcePropWeight = ForcePropWeight; val2 = new BoolCheckBoxOptions(); ((BaseOptions)val2).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(forcePropWeight, val2)); MapMultiplier = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<float>("Map", "Map Size Multiplier", 1f, "This tells the level generator how big you want the maps to be."); ConfigEntry<float> mapMultiplier = MapMultiplier; FloatInputFieldOptions val3 = new FloatInputFieldOptions(); ((BaseRangeOptions<float>)(object)val3).Min = 1f; ((BaseRangeOptions<float>)(object)val3).Max = 10f; ((BaseOptions)val3).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(mapMultiplier, val3)); ScrapMultiplier = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<float>("Map", "Scrap Multiplier", 20f, "The multiplier on how much scrap is generated for the given level."); ConfigEntry<float> scrapMultiplier = ScrapMultiplier; val3 = new FloatInputFieldOptions(); ((BaseRangeOptions<float>)(object)val3).Min = 1f; ((BaseRangeOptions<float>)(object)val3).Max = 100f; ((BaseOptions)val3).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(scrapMultiplier, val3)); TimeMultiplier = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<float>("Map", "Time Multiplier", 2f, "The multiplier on how fast time passes, 1 being a normal round. <1 is slower rounds, >1 is faster rounds."); ConfigEntry<float> timeMultiplier = TimeMultiplier; val3 = new FloatInputFieldOptions(); ((BaseRangeOptions<float>)(object)val3).Min = 1E-05f; ((BaseRangeOptions<float>)(object)val3).Max = 100f; ((BaseOptions)val3).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(timeMultiplier, val3)); AllowKeys = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<bool>("Props", "Allow Keys", true, new ConfigDescription("Whether or not to include the key as a scrap item because its kinda really small and OP.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<bool> allowKeys = AllowKeys; val2 = new BoolCheckBoxOptions(); ((BaseOptions)val2).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(allowKeys, val2)); PropDamageScale = ((BaseUnityPlugin)PropHuntBase.Instance).Config.Bind<float>("Props", "DamageScaling", 2f, new ConfigDescription("How damage is scaled based on prop weight, 1 is disabled.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<float> propDamageScale = PropDamageScale; val3 = new FloatInputFieldOptions(); ((BaseRangeOptions<float>)(object)val3).Min = 1f; ((BaseRangeOptions<float>)(object)val3).Max = 100f; ((BaseOptions)val3).CanModifyCallback = new CanModifyDelegate(CanModifyCallback); LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(propDamageScale, val3)); } } private static CanModifyResult CanModifyCallback() { //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_003c: Unknown result type (might be due to invalid IL or missing references) return CanModifyResult.op_Implicit(((Object)(object)RoundManager.Instance != (Object)null && (((NetworkBehaviour)RoundManager.Instance).IsHost || ((NetworkBehaviour)RoundManager.Instance).IsServer), "Must be the host or server to modify this")); } } } namespace LethalPropHunt { [BepInPlugin("jackexe.LethalPropHunt", "Letahl Prop Hunt", "1.0.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class PropHuntBase : BaseUnityPlugin { private const string modGUID = "jackexe.LethalPropHunt"; private const string modName = "Letahl Prop Hunt"; private const string modVersion = "1.0.2"; private readonly Harmony harmony = new Harmony("jackexe.LethalPropHunt"); public static PropHuntBase Instance; public static ManualLogSource mls; public GameObject netManagerPrefab; public static AssetBundle bundle; public static LPHInputManagement InputActionsInstance = new LPHInputManagement(); public static ConfigEntry<bool> ShowCursor { get; private set; } public static ConfigEntry<Vector3> Offset { get; private set; } public static Transform Camera { get; internal set; } public static Transform OriginalTransform { get; internal set; } public Sprite CrosshairSprite { get; private set; } private void Awake() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) Type[] types = Assembly.GetExecutingAssembly().GetTypes(); ShowCursor = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "ShowCursor", true, (ConfigDescription)null); Offset = ((BaseUnityPlugin)this).Config.Bind<Vector3>("Options", "CameraOffset", new Vector3(0f, -1f, -2f), (ConfigDescription)null); SetCrosshairSprite(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } if ((Object)(object)Instance == (Object)null) { Instance = this; } string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); string text = Path.Combine(directoryName, "lphassets"); bundle = AssetBundle.LoadFromFile(text); netManagerPrefab = bundle.LoadAsset<GameObject>("Assets/LPHAssets/LPHAssets.prefab"); netManagerPrefab.AddComponent<LPHNetworkHandler>(); mls = Logger.CreateLogSource("jackexe.LethalPropHunt"); harmony.PatchAll(typeof(PropHuntBase)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(StartOfRoundPatch)); harmony.PatchAll(typeof(NetworkObjectManagerPatch)); harmony.PatchAll(typeof(HudManagerPatches)); harmony.PatchAll(typeof(RoundManagerPatch)); harmony.PatchAll(typeof(ShotgunPatch)); harmony.PatchAll(typeof(ShovelPatch)); harmony.PatchAll(typeof(GrabbableObjectPatch)); harmony.PatchAll(typeof(AudioManager)); harmony.PatchAll(typeof(TimeOfDayPatch)); LethalConfigManager.SetModDescription("Configuration for Lethal Prop Hunt"); LPHRoundManager.Init(); } internal void SetCrosshairSprite() { CrosshairSprite = PlayerControllerBPatch.CreateCrosshairSprite(); } public static bool IsModLoaded(string guid) { return Chainloader.PluginInfos.ContainsKey(guid); } public static bool IsMoreCompanyLoaded() { return IsModLoaded("me.swipez.melonloader.morecompany"); } } } namespace LethalPropHunt.Patches { [HarmonyPatch(typeof(HUDManager))] internal class HudManagerPatches { public static LPHTauntCountdown TauntCooldownUI; [HarmonyPatch("Start")] [HarmonyPostfix] public static void StartPatch(ref HUDManager __instance) { TauntCooldownUI = new LPHTauntCountdown(__instance); } [HarmonyPatch("SetSpectatingTextToPlayer")] [HarmonyPostfix] public static void SetSpectatingTextToPlayerPatch(PlayerControllerB playerScript, ref HUDManager __instance) { if ((Object)(object)playerScript == (Object)null) { ((TMP_Text)__instance.spectatingPlayerText).text = ""; return; } string playerRole = LPHRoundManager.Instance.GetPlayerRole(playerScript); if (playerRole != null) { ((TMP_Text)__instance.spectatingPlayerText).text = "(Spectating: " + playerScript.playerUsername + " - " + playerRole + ")"; } } [HarmonyPatch("UpdateBoxesSpectateUI")] [HarmonyPostfix] public static void UpdateBoxesSpectateUI(HUDManager __instance) { Dictionary<Animator, PlayerControllerB> dictionary = Traverse.Create((object)__instance).Field("spectatingPlayerBoxes").GetValue() as Dictionary<Animator, PlayerControllerB>; PlayerControllerB playerScript; for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { playerScript = StartOfRound.Instance.allPlayerScripts[i]; if (dictionary.Values.Contains(playerScript)) { GameObject gameObject = ((Component)dictionary.FirstOrDefault((KeyValuePair<Animator, PlayerControllerB> x) => (Object)(object)x.Value == (Object)(object)playerScript).Key).gameObject; string playerRole = LPHRoundManager.Instance.GetPlayerRole(playerScript); if (playerRole != null) { ((TMP_Text)gameObject.GetComponentInChildren<TextMeshProUGUI>()).text = playerScript.playerUsername + " - " + playerRole; } } } } [HarmonyPatch("FillEndGameStats")] [HarmonyPrefix] public static void FillEndGameStatsPatch(object[] __args) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown EndOfGameStats val = (EndOfGameStats)__args[0]; for (int i = 0; i < val.allPlayerStats.Length; i++) { PlayerStats val2 = val.allPlayerStats[i]; PlayerControllerB player = StartOfRound.Instance.allPlayerScripts[i]; string playerRole = LPHRoundManager.Instance.GetPlayerRole(player); if (playerRole != null) { val2.playerNotes.Clear(); val2.playerNotes.Add("Role: " + playerRole); } } } [HarmonyPrefix] [HarmonyPatch("UpdateScanNodes")] private static void UnderwaterPrepatch(PlayerControllerB playerScript) { //IL_0028: 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) if (!((Object)(object)PropHuntBase.Camera == (Object)null)) { ((Component)playerScript.gameplayCamera).transform.position = ((Component)PropHuntBase.Camera).transform.position; ((Component)playerScript.gameplayCamera).transform.rotation = ((Component)PropHuntBase.Camera).transform.rotation; } } [HarmonyPostfix] [HarmonyPatch("UpdateScanNodes")] private static void UnderwaterPostpatch(PlayerControllerB playerScript) { //IL_0028: 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) if (!((Object)(object)PropHuntBase.OriginalTransform == (Object)null)) { ((Component)playerScript.gameplayCamera).transform.position = ((Component)PropHuntBase.OriginalTransform).transform.position; ((Component)playerScript.gameplayCamera).transform.rotation = ((Component)PropHuntBase.OriginalTransform).transform.rotation; } } [HarmonyPatch("Update")] [HarmonyPostfix] public static void UpdatePatch(ref HUDManager __instance) { //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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) if (LPHRoundManager.Instance.IsRunning) { if (!StartOfRound.Instance.localPlayerController.isPlayerDead && LPHRoundManager.Instance.IsPlayerProp(StartOfRound.Instance.localPlayerController)) { _ = LPHInputManagement.LastLocalTaunt; if (true) { TauntCooldownUI.SetTimer((int)((double)ConfigManager.ForceTauntInterval.Value - DateTime.Now.Subtract(LPHInputManagement.LastLocalTaunt).TotalSeconds)); } else { TauntCooldownUI.HideTimer(); } __instance.ChangeControlTip(__instance.controlTipLines.Length - 3, "Taunt: [" + PropHuntBase.InputActionsInstance.Taunt.controls[0].displayName + "]", false); if (LPHRoundManager.Props.ContainsKey(StartOfRound.Instance.localPlayerController.playerClientId)) { GrabbableObject val = LPHRoundManager.Props[StartOfRound.Instance.localPlayerController.playerClientId]; if ((Object)(object)val != (Object)null && (Object)(object)val.itemProperties != (Object)null && val.itemProperties.usableInSpecialAnimations) { __instance.ChangeControlTip(__instance.controlTipLines.Length - 2, "Prop Interact: [LMB]", false); } else { __instance.ChangeControlTip(__instance.controlTipLines.Length - 2, "", false); } __instance.ChangeControlTip(__instance.controlTipLines.Length - 1, "Drop Disguse: [" + PropHuntBase.InputActionsInstance.DropProp.controls[0].displayName + "]", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 4, "Lock Rotation: [" + PropHuntBase.InputActionsInstance.LockRotation.controls[0].displayName + "]", false); } else { __instance.ChangeControlTip(__instance.controlTipLines.Length - 2, "", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 1, "", false); } } else if (LPHRoundManager.Instance.IsPlayerProp(StartOfRound.Instance.localPlayerController)) { TauntCooldownUI.HideTimer(); __instance.ChangeControlTip(__instance.controlTipLines.Length - 3, "", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 2, "", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 1, "", false); } } else { TauntCooldownUI.HideTimer(); __instance.ChangeControlTip(__instance.controlTipLines.Length - 3, "", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 2, "", false); __instance.ChangeControlTip(__instance.controlTipLines.Length - 1, "", false); } } } [HarmonyPatch] public class NetworkObjectManagerPatch { [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Init(GameNetworkManager __instance) { ((Component)__instance).GetComponent<NetworkManager>().AddNetworkPrefab(PropHuntBase.Instance.netManagerPrefab); } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Awake")] private static void SpawnNetworkHandler() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) { GameObject val = Object.Instantiate<GameObject>(PropHuntBase.Instance.netManagerPrefab, Vector3.zero, Quaternion.identity); val.GetComponent<NetworkObject>().Spawn(false); } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { public static Dictionary<ulong, CosmeticApplication> PlayerCosmetics = new Dictionary<ulong, CosmeticApplication>(); [HarmonyPatch("Awake")] [HarmonyPostfix] public static void AwakePatch(RoundManager __instance) { ConfigManager.InitConfigurations(); __instance.scrapAmountMultiplier = ConfigManager.ScrapMultiplier.Value; __instance.mapSizeMultiplier = ConfigManager.MapMultiplier.Value; Terminal val = Object.FindObjectOfType<Terminal>(); if ((Object)(object)val != (Object)null) { val.groupCredits = 99999; } } [HarmonyPatch("Update")] [HarmonyPostfix] public static void UpdatePatch() { //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) EnemyAI[] array = Object.FindObjectsOfType<EnemyAI>(); if (array != null && array.Length != 0) { for (int i = 0; i < array.Length; i++) { if (!array[i].isEnemyDead) { ((Component)array[i]).gameObject.SetActive(false); } } } Landmine[] array2 = Object.FindObjectsOfType<Landmine>(); if (array2 != null && array2.Length != 0) { for (int j = 0; j < array2.Length; j++) { ((Component)array2[j]).gameObject.SetActive(false); } } Turret[] array3 = Object.FindObjectsOfType<Turret>(); if (array3 != null && array3.Length != 0) { for (int k = 0; k < array3.Length; k++) { ((Component)array3[k]).gameObject.SetActive(false); } } if (LPHRoundManager.Instance.IsRunning && !LPHRoundManager.Instance.IsRoundEnding) { foreach (ulong key in LPHRoundManager.Props.Keys) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[key]; GrabbableObject val2 = LPHRoundManager.Props[key]; if (val.isPlayerDead) { InteractTrigger component = ((Component)val2).gameObject.GetComponent<InteractTrigger>(); val2.EnablePhysics(true); if ((Object)(object)component != (Object)null) { component.interactable = true; } LPHNetworkHandler.Instance.SyncPropOwnershipServerRpc(key, ((NetworkBehaviour)val2).NetworkObjectId, owned: false); } else { ((Component)val2).transform.parent = null; val2.EnablePhysics(false); val2.targetFloorPosition = ((Component)val).transform.localPosition + new Vector3(0f, 0.2f, 0f); if (!LPHRoundManager.IsPlayerRotationLocked.ContainsKey(key) || !LPHRoundManager.IsPlayerRotationLocked[key]) { ((Component)val2).transform.rotation = Quaternion.Euler(((Component)val.gameplayCamera).transform.eulerAngles.x, ((Component)val.gameplayCamera).transform.eulerAngles.y, ((Component)val.gameplayCamera).transform.eulerAngles.z); } if (val.playerClientId == StartOfRound.Instance.localPlayerController.playerClientId) { Collider[] propColliders = val2.propColliders; for (int l = 0; l < propColliders.Length; l++) { if ((Object)(object)propColliders[l] != (Object)null) { Physics.IgnoreCollision(val.playerCollider, propColliders[l], true); } } InteractTrigger component2 = ((Component)val2).gameObject.GetComponent<InteractTrigger>(); if ((Object)(object)component2 != (Object)null) { component2.interactable = false; } } } } return; } foreach (ulong key2 in LPHRoundManager.Props.Keys) { GrabbableObject val3 = LPHRoundManager.Props[key2]; InteractTrigger component3 = ((Component)val3).gameObject.GetComponent<InteractTrigger>(); val3.EnablePhysics(true); if ((Object)(object)component3 != (Object)null) { component3.interactable = true; } } } public static CosmeticApplication GetPlayerCosmetics(PlayerControllerB player) { if (PlayerCosmetics.ContainsKey(player.playerClientId)) { return PlayerCosmetics[player.playerClientId]; } CosmeticApplication component = ((Component)((Component)player).transform.Find("ScavengerModel").Find("metarig")).gameObject.GetComponent<CosmeticApplication>(); if ((Object)(object)component != (Object)null) { PropHuntBase.mls.LogDebug((object)("Found cosmetics for " + player.playerUsername + " number of cosmetics " + component.spawnedCosmetics.Count)); PlayerCosmetics.Add(player.playerClientId, component); } return component; } private static IEnumerator StartLPHRound() { yield return (object)new WaitForSeconds(7f); if (PropHuntBase.IsMoreCompanyLoaded()) { PlayerCosmetics.Clear(); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB player in allPlayerScripts) { CosmeticApplication component = ((Component)((Component)player).transform.Find("ScavengerModel").Find("metarig")).gameObject.GetComponent<CosmeticApplication>(); if ((Object)(object)component != (Object)null) { PlayerCosmetics.Add(player.playerClientId, component); } } } Terminal terminal = Object.FindObjectOfType<Terminal>(); if ((Object)(object)terminal != (Object)null) { terminal.groupCredits = 999999; } if (((NetworkBehaviour)StartOfRound.Instance).IsHost || ((NetworkBehaviour)StartOfRound.Instance).IsServer) { LPHRoundManager.Instance.StartRound(StartOfRound.Instance); } } [HarmonyPatch("LoadNewLevelWait")] [HarmonyPostfix] public static void LoadNewLevelWaitPatch(RoundManager __instance) { ((MonoBehaviour)__instance).StartCoroutine(StartLPHRound()); } [HarmonyPatch("SetLockedDoors")] [HarmonyPrefix] public static bool SetLockedDoorsPatch(Vector3 mainEntrancePosition, RoundManager __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) if (!ConfigManager.AllowKeys.Value) { return false; } List<DoorLock> list = Object.FindObjectsOfType<DoorLock>().ToList(); for (int num = list.Count - 1; num >= 0; num--) { if (((Component)list[num]).transform.position.y > -160f) { list.RemoveAt(num); } } list = list.OrderByDescending(delegate(DoorLock x) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) Vector3 val = mainEntrancePosition - ((Component)x).transform.position; return ((Vector3)(ref val)).sqrMagnitude; }).ToList(); float num2 = 1.1f; int num3 = 0; for (int i = 0; i < list.Count; i++) { if (__instance.LevelRandom.NextDouble() < (double)num2) { num3++; } num2 /= 1.55f; } if (((NetworkBehaviour)__instance).IsServer) { for (int j = 0; j < num3; j++) { int num4 = __instance.AnomalyRandom.Next(0, __instance.insideAINodes.Length); Vector3 randomNavMeshPositionInBoxPredictable = __instance.GetRandomNavMeshPositionInBoxPredictable(__instance.insideAINodes[num4].transform.position, 8f, __instance.navHit, __instance.AnomalyRandom, -1); Object.Instantiate<GameObject>(__instance.keyPrefab, randomNavMeshPositionInBoxPredictable, Quaternion.identity, __instance.spawnedScrapContainer).GetComponent<NetworkObject>().Spawn(false); } } return false; } [HarmonyPatch("SetBigDoorCodes")] [HarmonyPostfix] private static void SetBigDoorCodesPatch(Vector3 mainEntrancePosition) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) TerminalAccessibleObject[] array = Object.FindObjectsOfType<TerminalAccessibleObject>().OrderBy(delegate(TerminalAccessibleObject x) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)x).transform.position - mainEntrancePosition; return ((Vector3)(ref val)).sqrMagnitude; }).ToArray(); for (int i = 0; i < array.Length; i++) { if (array[i].isBigDoor) { array[i].SetDoorOpen(true); } } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("OnShipLandedMiscEvents")] [HarmonyPostfix] private static void OnShipLandedMiscEventsPatch(StartOfRound __instance) { if (!((NetworkBehaviour)__instance).IsHost && !((NetworkBehaviour)__instance).IsServer) { return; } foreach (PlayerControllerB hunter in LPHRoundManager.Hunters) { LPHNetworkHandler.Instance.GiveHunterWeaponsServerRpc(hunter.playerClientId); } if (LPHRoundManager.Instance.IsRoundEnding || LPHRoundManager.Instance.IsRoundOver) { StartOfRound.Instance.EndGameServerRpc(0); } } [HarmonyPatch("Update")] [HarmonyPostfix] private static void UpdatePatch(StartOfRound __instance) { if ((Object)(object)__instance.mapScreen != (Object)null) { ((Behaviour)__instance.mapScreen).enabled = false; ((Component)__instance.mapScreen).gameObject.SetActive(false); } if ((((NetworkBehaviour)__instance).IsHost || ((NetworkBehaviour)__instance).IsServer) && !LPHRoundManager.Instance.IsInitializing) { if (LPHRoundManager.Instance.IsRunning && !LPHRoundManager.Instance.IsRoundEnding) { StartMatchLever val = Object.FindObjectOfType<StartMatchLever>(); ((Behaviour)val.triggerScript).enabled = false; LPHRoundManager.Instance.CheckIfRoundOver(__instance); } else if (LPHRoundManager.Instance.IsRoundEnding && !LPHRoundManager.Instance.IsRoundOver) { LPHRoundManager.Instance.SetRoundOver(); LPHNetworkHandler.Instance.NotifyOfRoundEndingServerRpc(); StartOfRound.Instance.EndGameServerRpc(0); } if (LPHRoundManager.Instance.IsRunning && __instance.shipIsLeaving && TimeOfDay.Instance.currentDayTime / TimeOfDay.Instance.totalTime >= TimeOfDay.Instance.shipLeaveAutomaticallyTime) { LPHRoundManager.Instance.HandleShipLeaveMidnight(__instance); } } if (!__instance.inShipPhase) { return; } StartMatchLever val2 = Object.FindObjectOfType<StartMatchLever>(); int num = 0; for (int i = 0; i < __instance.allPlayerScripts.Length; i++) { PlayerControllerB val3 = __instance.allPlayerScripts[i]; if (((Behaviour)val3).isActiveAndEnabled && (val3.isPlayerControlled || val3.isPlayerDead)) { num++; } } if (num < 2) { ((Behaviour)val2.triggerScript).enabled = false; val2.triggerScript.hoverTip = "At least 2 players are required"; val2.triggerScript.disableTriggerMesh = true; } else { ((Behaviour)val2.triggerScript).enabled = true; val2.triggerScript.hoverTip = "Start Round"; val2.triggerScript.disableTriggerMesh = false; } } [HarmonyPatch("PassTimeToNextDay")] [HarmonyPostfix] private static void PassTimeToNextDayPatch(StartOfRound __instance) { int currentLevelID = StartOfRound.Instance.currentLevelID; StartOfRound.Instance.ResetShip(); __instance.ChangeLevel(currentLevelID); __instance.ChangePlanet(); Terminal val = Object.FindObjectOfType<Terminal>(); if ((Object)(object)val != (Object)null) { val.groupCredits = 99999; } TimeOfDay.Instance.daysUntilDeadline = 1; StartMatchLever val2 = Object.FindObjectOfType<StartMatchLever>(); ((Behaviour)val2.triggerScript).enabled = true; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val3 in allPlayerScripts) { ((Renderer)val3.thisPlayerModel).enabled = true; ((Component)val3.thisPlayerModel).gameObject.SetActive(true); ((Component)val3.thisPlayerModelLOD1).gameObject.SetActive(true); ((Component)val3.thisPlayerModelLOD2).gameObject.SetActive(true); ((Component)val3.usernameCanvas).gameObject.SetActive(true); ((Component)val3.usernameBillboard).gameObject.SetActive(true); ((Component)val3.usernameBillboardText).gameObject.SetActive(true); ((TMP_Text)val3.usernameBillboardText).SetText(val3.playerUsername, true); ((Behaviour)val3.helmetLight).enabled = false; if (ConfigManager.ForcePropWeight.Value) { val3.carryWeight = 1f; } if (!PropHuntBase.IsMoreCompanyLoaded() || !RoundManagerPatch.PlayerCosmetics.ContainsKey(val3.playerClientId)) { continue; } CosmeticApplication val4 = RoundManagerPatch.PlayerCosmetics[val3.playerClientId]; if (!((Object)(object)val4 != (Object)null)) { continue; } ((Behaviour)val4).enabled = true; foreach (CosmeticInstance spawnedCosmetic in val4.spawnedCosmetics) { ((Component)spawnedCosmetic).gameObject.SetActive(true); } } PlayerControllerBPatch.OnDisable(); UnlockableSuit.SwitchSuitForAllPlayers(0, false); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { public static PlayerControllerB Instance; private static bool InThirdPerson = false; private static bool TriggerAwake; private static int OriginalCullingMask; private static ShadowCastingMode OriginalShadowCastingMode; public static Vector3 DefaultScale; private static readonly string[] IgnoreGameObjectPrefixes = new string[1] { "VolumeMain" }; public static void OnEnable() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) if (!InThirdPerson && !((Object)(object)Instance == (Object)null)) { InThirdPerson = true; Transform localVisor = Instance.localVisor; SkinnedMeshRenderer thisPlayerModel = Instance.thisPlayerModel; ((Component)localVisor).gameObject.SetActive(false); ((Renderer)thisPlayerModel).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)Instance.thisPlayerModelArms).enabled = false; Instance.grabDistance = Math.Max(Instance.grabDistance - PropHuntBase.Offset.Value.z, 5f); Instance.gameplayCamera.cullingMask = OriginalCullingMask | 0x800000; } } public static void OnDisable() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (InThirdPerson && !((Object)(object)Instance == (Object)null)) { InThirdPerson = false; Transform localVisor = Instance.localVisor; SkinnedMeshRenderer thisPlayerModel = Instance.thisPlayerModel; ((Component)localVisor).gameObject.SetActive(true); ((Renderer)thisPlayerModel).shadowCastingMode = OriginalShadowCastingMode; ((Renderer)Instance.thisPlayerModelArms).enabled = true; Instance.grabDistance = 5f; Instance.gameplayCamera.cullingMask = OriginalCullingMask; } } [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake() { TriggerAwake = true; } [HarmonyPrefix] [HarmonyPatch("Update")] private static void PatchUpdate(ref PlayerControllerB __instance, ref bool ___isCameraDisabled, ref bool ___isPlayerControlled, ref MeshFilter ___playerBadgeMesh, ref MeshRenderer ___playerBetaBadgeMesh) { //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0554: Unknown result type (might be due to invalid IL or missing references) //IL_0568: Unknown result type (might be due to invalid IL or missing references) //IL_056d: Unknown result type (might be due to invalid IL or missing references) //IL_05f5: Unknown result type (might be due to invalid IL or missing references) //IL_0614: Unknown result type (might be due to invalid IL or missing references) //IL_0638: Unknown result type (might be due to invalid IL or missing references) //IL_065c: Unknown result type (might be due to invalid IL or missing references) ((Component)___playerBadgeMesh).gameObject.SetActive(false); ((Renderer)___playerBetaBadgeMesh).enabled = false; ((Component)___playerBetaBadgeMesh).gameObject.SetActive(false); if (LPHRoundManager.Instance.IsRunning && !LPHRoundManager.Instance.IsRoundEnding) { if (__instance.playerClientId == StartOfRound.Instance.localPlayerController.playerClientId && LPHRoundManager.Instance.IsPlayerProp(StartOfRound.Instance.localPlayerController)) { _ = LPHInputManagement.LastLocalTaunt; if (false) { LPHInputManagement.LastLocalTaunt = DateTime.Now; } if ((DateTime.Now - LPHInputManagement.LastLocalTaunt).TotalSeconds > (double)ConfigManager.ForceTauntInterval.Value && ConfigManager.ForceTaunt.Value) { LPHNetworkHandler.Instance.SyncPlayAudioServerRpc(__instance.playerClientId, AudioManager.SelectRandomClip(LPHRoundManager.PROPS_ROLE)); LPHInputManagement.LastLocalTaunt = DateTime.Now; LPHInputManagement.HasTauntedYet = true; } } PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (LPHRoundManager.Instance.IsPlayerProp(val) && LPHRoundManager.Props.ContainsKey(val.playerClientId) && !val.isPlayerDead) { ((Component)val.thisPlayerModel).gameObject.SetActive(false); ((Component)val.thisPlayerModelLOD1).gameObject.SetActive(false); ((Component)val.thisPlayerModelLOD2).gameObject.SetActive(false); ((Renderer)val.thisPlayerModel).enabled = false; ((Component)val.usernameCanvas).gameObject.SetActive(false); ((Component)val.usernameBillboard).gameObject.SetActive(false); ((Component)val.usernameBillboardText).gameObject.SetActive(false); ((TMP_Text)val.usernameBillboardText).SetText("", true); if (!PropHuntBase.IsMoreCompanyLoaded()) { continue; } CosmeticApplication playerCosmetics = RoundManagerPatch.GetPlayerCosmetics(val); if ((Object)(object)playerCosmetics != (Object)null) { foreach (CosmeticInstance spawnedCosmetic in playerCosmetics.spawnedCosmetics) { ((Component)spawnedCosmetic).gameObject.SetActive(false); } } else { PropHuntBase.mls.LogDebug((object)("Could not find cosmetics for " + val.playerClientId)); } continue; } ((Renderer)val.thisPlayerModel).enabled = true; ((Component)val.thisPlayerModel).gameObject.SetActive(true); ((Component)val.thisPlayerModelLOD1).gameObject.SetActive(true); ((Component)val.thisPlayerModelLOD2).gameObject.SetActive(true); ((Component)val.usernameCanvas).gameObject.SetActive(true); ((Component)val.usernameBillboard).gameObject.SetActive(true); ((Component)val.usernameBillboardText).gameObject.SetActive(true); ((TMP_Text)val.usernameBillboardText).SetText(val.playerUsername, true); if (!PropHuntBase.IsMoreCompanyLoaded()) { continue; } CosmeticApplication playerCosmetics2 = RoundManagerPatch.GetPlayerCosmetics(val); if (!((Object)(object)playerCosmetics2 != (Object)null)) { continue; } foreach (CosmeticInstance spawnedCosmetic2 in playerCosmetics2.spawnedCosmetics) { ((Component)spawnedCosmetic2).gameObject.SetActive(true); } } } else if (LPHRoundManager.Instance.IsRunning && LPHRoundManager.Instance.IsRoundEnding) { PlayerControllerB[] allPlayerScripts2 = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts2) { ((Renderer)val2.thisPlayerModel).enabled = true; ((Component)val2.thisPlayerModel).gameObject.SetActive(true); ((Component)val2.thisPlayerModelLOD1).gameObject.SetActive(true); ((Component)val2.thisPlayerModelLOD2).gameObject.SetActive(true); ((Component)val2.usernameCanvas).gameObject.SetActive(true); ((Component)val2.usernameBillboard).gameObject.SetActive(true); ((Component)val2.usernameBillboardText).gameObject.SetActive(true); ((TMP_Text)val2.usernameBillboardText).SetText(val2.playerUsername, true); if (!PropHuntBase.IsMoreCompanyLoaded()) { continue; } CosmeticApplication playerCosmetics3 = RoundManagerPatch.GetPlayerCosmetics(val2); if (!((Object)(object)playerCosmetics3 != (Object)null)) { continue; } foreach (CosmeticInstance spawnedCosmetic3 in playerCosmetics3.spawnedCosmetics) { ((Component)spawnedCosmetic3).gameObject.SetActive(true); } } } if ((!___isPlayerControlled | ___isCameraDisabled) || __instance.playerClientId != StartOfRound.Instance.localPlayerController.playerClientId) { return; } if (TriggerAwake) { Instance = __instance; OriginalCullingMask = Instance.gameplayCamera.cullingMask; OriginalShadowCastingMode = ((Renderer)Instance.thisPlayerModel).shadowCastingMode; DefaultScale = ((Component)Instance.playerCollider).transform.localScale; TriggerAwake = false; } if (!((Object)(object)Instance == (Object)null)) { if ((Object)(object)PropHuntBase.OriginalTransform == (Object)null) { PropHuntBase.OriginalTransform = CopyTransform(((Component)Instance.gameplayCamera).transform, "LPHThirdPerson_Original Camera Position"); PropHuntBase.Camera = CopyTransform(((Component)Instance.gameplayCamera).transform, "LPHThirdPerson_Camera Position"); } PropHuntBase.Camera.position = ((Component)Instance.gameplayCamera).transform.position; PropHuntBase.Camera.rotation = ((Component)Instance.gameplayCamera).transform.rotation; ((Component)Instance.gameplayCamera).transform.rotation = ((Component)PropHuntBase.OriginalTransform).transform.rotation; ((Component)Instance.gameplayCamera).transform.position = ((Component)PropHuntBase.OriginalTransform).transform.position; } } [HarmonyPostfix] [HarmonyPatch("LateUpdate")] private static void PatchCamera(ref bool ___isCameraDisabled, ref bool ___isPlayerControlled, ref MeshFilter ___playerBadgeMesh, ref MeshRenderer ___playerBetaBadgeMesh) { //IL_009d: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: 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_018a: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) ((Component)___playerBadgeMesh).gameObject.SetActive(false); ((Renderer)___playerBetaBadgeMesh).enabled = false; ((Component)___playerBetaBadgeMesh).gameObject.SetActive(false); if ((Object)(object)Instance == (Object)null || Instance.playerClientId != StartOfRound.Instance.localPlayerController.playerClientId) { return; } Transform originalTransform = PropHuntBase.OriginalTransform; if ((!___isPlayerControlled | ___isCameraDisabled) || (Object)(object)originalTransform == (Object)null) { return; } Camera gameplayCamera = Instance.gameplayCamera; ((Component)originalTransform).transform.rotation = ((Component)gameplayCamera).transform.rotation; if (InThirdPerson && !Instance.inTerminalMenu) { Vector3 val = ((Component)originalTransform).transform.right * PropHuntBase.Offset.Value.x + ((Component)originalTransform).transform.up * PropHuntBase.Offset.Value.y; Vector3 position = ((Component)originalTransform).transform.position; Vector3 val2 = ((Component)originalTransform).transform.position + val + ((Component)originalTransform).transform.forward * PropHuntBase.Offset.Value.z; RaycastHit val3 = default(RaycastHit); val = ((!Physics.Linecast(position, val2, ref val3, StartOfRound.Instance.collidersAndRoomMask) || IgnoreCollision(((Object)((RaycastHit)(ref val3)).transform).name)) ? (val + ((Component)originalTransform).transform.forward * -2f) : (val + ((Component)originalTransform).transform.forward * (0f - Mathf.Max(((RaycastHit)(ref val3)).distance, 0f)))); ((Component)gameplayCamera).transform.position = ((Component)originalTransform).transform.position + val; if (!Instance.isClimbingLadder) { MethodInfo method = typeof(PlayerControllerB).GetMethod("SetHoverTipAndCurrentInteractTrigger", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(Instance, new object[0]); } } } [HarmonyPrefix] [HarmonyPatch("SetFaceUnderwaterFilters")] private static void UnderwaterPrepatch() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Instance == (Object)null) && !((Object)(object)PropHuntBase.Camera == (Object)null)) { ((Component)Instance.gameplayCamera).transform.position = ((Component)PropHuntBase.Camera).transform.position; ((Component)Instance.gameplayCamera).transform.rotation = ((Component)PropHuntBase.Camera).transform.rotation; } } [HarmonyPostfix] [HarmonyPatch("SetFaceUnderwaterFilters")] private static void UnderwaterPostpatch() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Instance == (Object)null) && !((Object)(object)PropHuntBase.OriginalTransform == (Object)null)) { ((Component)Instance.gameplayCamera).transform.position = ((Component)PropHuntBase.OriginalTransform).transform.position; ((Component)Instance.gameplayCamera).transform.rotation = ((Component)PropHuntBase.OriginalTransform).transform.rotation; } } [HarmonyPostfix] [HarmonyPatch("SpawnPlayerAnimation")] private static void SpawnPlayerPostpatch(ref bool ___isPlayerControlled) { if (!((Object)(object)Instance == (Object)null) && ___isPlayerControlled && InThirdPerson) { OnEnable(); } } private static Transform CopyTransform(Transform copyTransform, string gameObjectName) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) Transform transform = new GameObject(gameObjectName).transform; transform.position = copyTransform.position; transform.rotation = copyTransform.rotation; transform.parent = copyTransform.parent; return transform; } private static bool IgnoreCollision(string name) { return IgnoreGameObjectPrefixes.Any((string prefix) => name.StartsWith(prefix)); } internal static Sprite CreateCrosshairSprite() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) string name = "Lethal_Prop_Hunt.crosshair.png"; Assembly executingAssembly = Assembly.GetExecutingAssembly(); Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(name); Texture2D val = new Texture2D(2, 2); using (MemoryStream memoryStream = new MemoryStream()) { manifestResourceStream.CopyTo(memoryStream); ImageConversion.LoadImage(val, memoryStream.ToArray()); } ((Texture)val).filterMode = (FilterMode)0; return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2((float)(((Texture)val).width / 2), (float)(((Texture)val).height / 2))); } [HarmonyPostfix] [HarmonyPatch("LateUpdate")] private static void PatchUpdate(ref PlayerControllerB __instance, ref bool ___isCameraDisabled) { if (!(!__instance.isPlayerControlled | ___isCameraDisabled) && InThirdPerson && PropHuntBase.ShowCursor.Value && !__instance.inTerminalMenu && !((Behaviour)__instance.cursorIcon).enabled) { ((Behaviour)__instance.cursorIcon).enabled = true; __instance.cursorIcon.sprite = PropHuntBase.Instance.CrosshairSprite; } } [HarmonyPrefix] [HarmonyPatch("BeginGrabObject")] public static bool BeginGrabObjectPatch(PlayerControllerB __instance, ref int ___interactableObjectsMask) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (!LPHRoundManager.Instance.IsRunning) { return true; } Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)__instance.gameplayCamera).transform.position, ((Component)__instance.gameplayCamera).transform.forward); RaycastHit val2 = default(RaycastHit); if (!Physics.Raycast(val, ref val2, __instance.grabDistance, ___interactableObjectsMask) || ((Component)((RaycastHit)(ref val2)).collider).gameObject.layer == 8 || !(((Component)((RaycastHit)(ref val2)).collider).tag == "PhysicsProp")) { return true; } GrabbableObject component = ((Component)((Component)((RaycastHit)(ref val2)).collider).transform).gameObject.GetComponent<GrabbableObject>(); PropHuntBase.mls.LogDebug((object)("Checking object " + (object)component)); if ((Object)(object)component == (Object)null || __instance.inSpecialInteractAnimation) { return true; } NetworkObject networkObject = ((NetworkBehaviour)component).NetworkObject; if ((Object)(object)networkObject == (Object)null || !networkObject.IsSpawned) { return true; } if (LPHRoundManager.Instance.IsPlayerProp(__instance)) { PropHuntBase.mls.LogDebug((object)("I am becoming a prop on layer " + ((Component)component).gameObject.layer)); if ((Object)(object)component.itemProperties != (Object)null) { if (ConfigManager.ForcePropWeight.Value) { __instance.carryWeight += Mathf.Clamp(component.itemProperties.weight - 1f, 0f, 10f); } PropHuntBase.mls.LogDebug((object)("Prop is " + Mathf.RoundToInt(Mathf.Clamp(component.itemProperties.weight - 1f, 0f, 100f) * 105f) + "lbs")); } if (LPHRoundManager.Props.ContainsKey(__instance.playerClientId)) { LPHNetworkHandler.Instance.SwapPropOwnershipServerRpc(__instance.playerClientId, ((NetworkBehaviour)LPHRoundManager.Props[__instance.playerClientId]).NetworkObjectId, ((NetworkBehaviour)component).NetworkObjectId); } else { LPHNetworkHandler.Instance.SyncPropOwnershipServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, ((NetworkBehaviour)component).NetworkObjectId, owned: true); } return false; } bool flag = false; foreach (GrabbableObject value in LPHRoundManager.Props.Values) { if (((NetworkBehaviour)value).NetworkObjectId == ((NetworkBehaviour)component).NetworkObjectId) { flag = true; break; } } if (flag) { return false; } return true; } [HarmonyPrefix] [HarmonyPatch("PlayFootstepSound")] public static bool PlayFootstepSoundPatch(PlayerControllerB __instance) { return !LPHRoundManager.Instance.IsPlayerProp(__instance) || !LPHRoundManager.Props.ContainsKey(__instance.playerClientId); } [HarmonyPrefix] [HarmonyPatch("PlayFootstepLocal")] public static bool PlayFootstepLocalPatch(PlayerControllerB __instance) { return !LPHRoundManager.Instance.IsPlayerProp(__instance) || !LPHRoundManager.Props.ContainsKey(__instance.playerClientId); } [HarmonyPrefix] [HarmonyPatch("PlayFootstepServer")] public static bool PlayFootstepServerPatch(PlayerControllerB __instance) { return !LPHRoundManager.Instance.IsPlayerProp(__instance) || !LPHRoundManager.Props.ContainsKey(__instance.playerClientId); } [HarmonyPrefix] [HarmonyPatch("Jump_performed")] private static bool Jump_performedPatch(CallbackContext context, PlayerControllerB __instance, ref bool ___isJumping, ref float ___playerSlidingTimer, ref Coroutine ___jumpCoroutine) { MethodInfo method = typeof(PlayerControllerB).GetMethod("IsPlayerNearGround", BindingFlags.Instance | BindingFlags.NonPublic); bool flag = (bool)method.Invoke(__instance, new object[0]); if (!__instance.quickMenuManager.isMenuOpen && ((((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject)) || __instance.isTestingPlayer) && !__instance.inSpecialInteractAnimation && !__instance.isTypingChat && (__instance.isMovementHindered <= 0 || __instance.isUnderwater) && !__instance.isExhausted && (__instance.thisController.isGrounded || (!___isJumping && flag)) && !___isJumping && (!__instance.isPlayerSliding || ___playerSlidingTimer > 2.5f) && !__instance.isCrouching) { ___playerSlidingTimer = 0f; ___isJumping = true; __instance.sprintMeter = Mathf.Clamp(__instance.sprintMeter - 0.08f, 0f, 1f); if (!LPHRoundManager.Instance.IsPlayerProp(__instance) || !LPHRoundManager.Props.ContainsKey(__instance.playerClientId)) { __instance.movementAudio.PlayOneShot(StartOfRound.Instance.playerJumpSFX); } if (___jumpCoroutine != null) { ((MonoBehaviour)__instance).StopCoroutine(___jumpCoroutine); } method = typeof(PlayerControllerB).GetMethod("PlayerJump", BindingFlags.Instance | BindingFlags.NonPublic); ___jumpCoroutine = ((MonoBehaviour)__instance).StartCoroutine((IEnumerator)method.Invoke(__instance, new object[0])); } return false; } [HarmonyPrefix] [HarmonyPatch("PlayerHitGroundEffects")] private static bool PlayerHitGroundEffectsPatch(PlayerControllerB __instance) { //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) __instance.GetCurrentMaterialStandingOn(); if (__instance.fallValue < -9f) { if (__instance.fallValue < -16f) { if (LPHRoundManager.Props.ContainsKey(__instance.playerClientId)) { GrabbableObject val = LPHRoundManager.Props[__instance.playerClientId]; if ((Object)(object)val.itemProperties != (Object)null && (Object)(object)val.itemProperties.dropSFX != (Object)null) { __instance.movementAudio.PlayOneShot(val.itemProperties.dropSFX); } } else { __instance.movementAudio.PlayOneShot(StartOfRound.Instance.playerHitGroundHard, 1f); } WalkieTalkie.TransmitOneShotAudio(__instance.movementAudio, StartOfRound.Instance.playerHitGroundHard, 1f); } else if (__instance.fallValue < -2f) { if (LPHRoundManager.Props.ContainsKey(__instance.playerClientId)) { GrabbableObject val2 = LPHRoundManager.Props[__instance.playerClientId]; if ((Object)(object)val2.itemProperties != (Object)null && (Object)(object)val2.itemProperties.dropSFX != (Object)null) { __instance.movementAudio.PlayOneShot(val2.itemProperties.dropSFX); } } else { __instance.movementAudio.PlayOneShot(StartOfRound.Instance.playerHitGroundSoft, 1f); } } __instance.LandFromJumpServerRpc(__instance.fallValue < -16f); } if (__instance.takingFallDamage && !__instance.jetpackControls && !__instance.disablingJetpackControls && !__instance.isSpeedCheating) { Debug.Log((object)$"Fall damage: {__instance.fallValueUncapped}"); if (__instance.fallValueUncapped < -48.5f) { __instance.DamagePlayer(100, true, true, (CauseOfDeath)2, 0, false, default(Vector3)); } else if (__instance.fallValueUncapped < -45f) { __instance.DamagePlayer(80, true, true, (CauseOfDeath)2, 0, false, default(Vector3)); } else if (__instance.fallValueUncapped < -40f) { __instance.DamagePlayer(50, true, true, (CauseOfDeath)2, 0, false, default(Vector3)); } else { __instance.DamagePlayer(30, true, true, (CauseOfDeath)2, 0, false, default(Vector3)); } } if (__instance.fallValue < -16f) { RoundManager.Instance.PlayAudibleNoise(((Component)__instance).transform.position, 7f, 0.5f, 0, false, 0); } return false; } [HarmonyPrefix] [HarmonyPatch("DamagePlayer")] public static void DamagePlayerPatch(ref int damageNumber, bool hasDamageSFX, bool callRPC, CauseOfDeath causeOfDeath, int deathAnimation, bool fallDamage, Vector3 force, PlayerControllerB __instance) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) if (!LPHRoundManager.Instance.IsPlayerProp(__instance) || !LPHRoundManager.Props.ContainsKey(__instance.playerClientId)) { return; } GrabbableObject val = LPHRoundManager.Props[__instance.playerClientId]; if ((Object)(object)val != (Object)null && (Object)(object)val.itemProperties != (Object)null && damageNumber > 0) { __instance.DropBlood(-((Component)__instance).transform.forward, true, false); __instance.DropBlood(-((Component)__instance).transform.forward, true, false); __instance.DropBlood(-((Component)__instance).transform.forward, true, false); __instance.DropBlood(-((Component)__instance).transform.forward, true, false); int num = Mathf.RoundToInt(Mathf.Clamp(val.itemProperties.weight - 1f, 0f, 100f) * 105f); int num2 = Mathf.CeilToInt((float)num / ConfigManager.PropDamageScale.Value); if (num2 > 0 && (float)num > ConfigManager.PropDamageScale.Value && ConfigManager.PropDamageScale.Value != 1f) { PropHuntBase.mls.LogDebug((object)("Prop is of size " + num + " factor set to " + num2 + " damaged reduced from " + damageNumber + " to " + damageNumber / num2)); damageNumber = Mathf.RoundToInt((float)(damageNumber / num2)); } } } [HarmonyPatch("RandomizeBloodRotationAndScale")] [HarmonyPostfix] public static void RandomizeBloodScale(ref Transform blood, PlayerControllerB __instance) { //IL_0006: 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_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) Transform val = blood; val.localScale *= 4f; Transform obj = blood; obj.position += new Vector3((float)Random.Range(-1, 1) * 4f, 0.55f, (float)Random.Range(-1, 1) * 4f); } } } namespace LethalPropHunt.Input { public class LPHInputManagement : LcInputActions { public static int TAUNT_DELAY = 5; public static bool HasTauntedYet = false; public static DateTime LastLocalTaunt; [InputAction("<Keyboard>/k", Name = "Lock Rotation")] public InputAction LockRotation { get; set; } [InputAction("<Keyboard>/g", Name = "Drop Possessed Prop")] public InputAction DropProp { get; set; } [InputAction("<Keyboard>/z", Name = "Taunt")] public InputAction Taunt { get; set; } [InputAction("<Mouse>/leftButton", Name = "Activate Possessed Item")] public InputAction ActivatePossessedItem { get; set; } public LPHInputManagement() { LockRotation.performed += LockRotationListener; DropProp.performed += DropPropListener; Taunt.performed += TauntListener; ActivatePossessedItem.performed += ActivatePossessedItemListener; } private void ActivatePossessedItemListener(CallbackContext action) { if (!((CallbackContext)(ref action)).performed || !LPHRoundManager.Instance.IsRunning) { return; } PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController; if (LPHRoundManager.Instance.IsPlayerProp(localPlayerController) && LPHRoundManager.Props.ContainsKey(localPlayerController.playerClientId)) { GrabbableObject val = LPHRoundManager.Props[localPlayerController.playerClientId]; if (!localPlayerController.quickMenuManager.isMenuOpen && !localPlayerController.isPlayerDead && !((Object)(object)val == (Object)null) && !((Object)(object)val.itemProperties == (Object)null) && (!val.itemProperties.usableInSpecialAnimations || (!localPlayerController.isGrabbingObjectAnimation && !localPlayerController.inTerminalMenu && !localPlayerController.isTypingChat && (!localPlayerController.inSpecialInteractAnimation || localPlayerController.inShockingMinigame)))) { val.UseItemOnClient(true); } } } public void LockRotationListener(CallbackContext action) { if (((CallbackContext)(ref action)).performed) { LPHNetworkHandler.Instance.NotifyOfRotationLockChangeServerRpc(StartOfRound.Instance.localPlayerController.playerClientId); } } public void DropPropListener(CallbackContext action) { if (((CallbackContext)(ref action)).performed && LPHRoundManager.Instance.IsRunning && LPHRoundManager.Props.ContainsKey(StartOfRound.Instance.localPlayerController.playerClientId)) { if (ConfigManager.ForcePropWeight.Value) { PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController; localPlayerController.carryWeight -= Mathf.Clamp(LPHRoundManager.Props[StartOfRound.Instance.localPlayerController.playerClientId].itemProperties.weight - 1f, 0f, 10f); } LPHNetworkHandler.Instance.SyncPropOwnershipServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, ((NetworkBehaviour)LPHRoundManager.Props[StartOfRound.Instance.localPlayerController.playerClientId]).NetworkObjectId, owned: false); } } public static double ConvertToUnixTimestamp(DateTime date) { DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); return Math.Floor((date.ToUniversalTime() - dateTime).TotalSeconds); } private void TauntListener(CallbackContext action) { if (((CallbackContext)(ref action)).performed && LPHRoundManager.Instance != null && LPHRoundManager.Instance.IsRunning) { _ = LastLocalTaunt; if (!HasTauntedYet || !((DateTime.Now - LastLocalTaunt).TotalSeconds < (double)TAUNT_DELAY)) { LastLocalTaunt = DateTime.Now; HasTauntedYet = true; LPHNetworkHandler.Instance.SyncPlayAudioServerRpc(StartOfRound.Instance.localPlayerController.playerClientId, AudioManager.SelectRandomClip(LPHRoundManager.Instance.IsPlayerProp(StartOfRound.Instance.localPlayerController) ? LPHRoundManager.PROPS_ROLE : LPHRoundManager.HUNTERS_ROLE)); } } } } } namespace LethalPropHunt.Gamemode { internal class LPHNetworkHandler : NetworkBehaviour { internal ManualLogSource mls; public AudioSource teleporterAudio; public AudioClip teleporterBeamUpSFX; public AudioClip startTeleportingSFX; public AudioClip teleporterPrimeSFX; public static LPHNetworkHandler Instance { get; private set; } public override void OnNetworkSpawn() { if ((NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) && (Object)(object)Instance != (Object)null) { ((Component)Instance).gameObject.GetComponent<NetworkObject>().Despawn(true); } Instance = this; if (mls == null) { mls = Logger.CreateLogSource("LPHNetworkManager"); } ((NetworkBehaviour)this).OnNetworkSpawn(); } private ClientRpcParams createBroadcastConfig() { //IL_003e: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) List<ulong> list = new List<ulong>(); for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { list.Add(StartOfRound.Instance.allPlayerScripts[i].playerClientId); } ClientRpcParams result = default(ClientRpcParams); result.Send = new ClientRpcSendParams { TargetClientIds = list.ToArray() }; return result; } [ServerRpc(RequireOwnership = false)] public void sendRoleServerRpc(ulong id, string role) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0153: 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)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1353985003u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, id); bool flag = role != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(role, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1353985003u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { if (mls == null) { mls = Logger.CreateLogSource("LPHNetworkManager"); } mls.LogDebug((object)("Sending role " + role + " to " + id)); ClientRpcParams clientRpcParams = createBroadcastConfig(); sendRoleClientRpc(id, role, clientRpcParams); } } [ClientRpc] public void sendRoleClientRpc(ulong id, string role, ClientRpcParams clientRpcParams = default(ClientRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02de: 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)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(3630197351u, clientRpcParams, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val, id); bool flag = role != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe(role, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val, 3630197351u, clientRpcParams, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } if (mls == null) { mls = Logger.CreateLogSource("LPHNetworkManager"); } mls.LogDebug((object)("recieved role " + role + " to " + id)); PlayerControllerB val2 = StartOfRound.Instance.allPlayerScripts[id]; if (!((Object)(object)val2 != (Object)null)) { return; } if (id == StartOfRound.Instance.localPlayerController.playerClientId) { Utilities.DisplayTips("You are a ", role, role.Equals(LPHRoundManager.HUNTERS_ROLE)); Utilities.AddChatMessage("You are a " + role, role.Equals(LPHRoundManager.HUNTERS_ROLE) ? "FF0000" : "008000"); LPHRoundManager.Instance.RegisterLocalPlayersRole(role, val2); if (role.Equals(LPHRoundManager.PROPS_ROLE)) { EntranceTeleport[] array = Object.FindObjectsOfType<EntranceTeleport>(); if (array != null && array.Length != 0) { for (int i = 0; i < array.Length; i++) { ((Behaviour)array[i]).enabled = false; InteractTrigger component = ((Component)array[i]).gameObject.GetComponent<InteractTrigger>(); if ((Object)(object)component != (Object)null) { component.interactable = false; } } } } } else { LPHRoundManager.Instance.RegisterOtherPlayersRole(role, val2); } if (role.Equals(LPHRoundManager.PROPS_ROLE)) { UnlockableSuit.SwitchSuitForPlayer(val2, 24, true); if (RoundManager.Instance.insideAINodes.Length != 0) { Vector3 position = RoundManager.Instance.insideAINodes[Random.Range(0, RoundManager.Instance.insideAINodes.Length)].transform.position; position = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(position, 10f, default(NavMeshHit)); ((MonoBehaviour)this).StartCoroutine(Utilities.TeleportPlayerCoroutine((int)val2.playerClientId, position)); } } else if (id == StartOfRound.Instance.localPlayerController.playerClientId) { UnlockableSuit.SwitchSuitForPlayer(val2, 0, false); } } [ServerRpc(RequireOwnership = false)] public void NotifyRoundOverServerRpc(string winner) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_015b: 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)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(135113771u, val, (RpcDelivery)0); bool flag = winner != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(winner, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 135113771u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { if (mls == null) { mls = Logger.CreateLogSource("LPHNetworkManager"); } mls.LogDebug((object)("Round ended, winner " + winner)); HUDManager.Instance.AddTextToChatOnServer("Round over winner is: " + winner, -1); ClientRpcParams clientRpcParams = createBroadcastConfig(); NotifyRoundOverClientRpc(winner, winner.Equals(LPHRoundManager.HUNTERS_ROLE), clientRpcParams); } } [ClientRpc] public void NotifyRoundOverClientRpc(string winner, bool warn, ClientRpcParams clientRpcParams = default(ClientRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(1905837613u, clientRpcParams, (RpcDelivery)0); bool flag = winner != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe(winner, false); } ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref warn, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val, 1905837613u, clientRpcParams, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } if (mls == null) { mls = Logger.CreateLogSource("LPHNetworkManager"); } mls.LogDebug((object)("Round ended received, winner " + winner)); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; Utilities.DisplayTips("Round Over ", "Winner: " + winner, warn); PlayerControllerBPatch.OnDisable(); if (!localPlayerController.isPlayerDead) { StartOfRound.Instance.ForcePlayerIntoShip(); string playerRole = LPHRoundManager.Instance.GetPlayerRole(StartOfRound.Instance.localPlayerController); if (playerRole != null && !winner.Equals(playerR