Decompiled source of ModdedCompany0 v0.0.4
BepInEx/plugins/plugins/BetterClock.dll
Decompiled 2 months agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using GameNetcodeStuff; using HarmonyLib; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("BetterClock")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BetterClock")] [assembly: AssemblyCopyright("Copyright © BlueAmulet 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("de27b4d1-820d-4505-a953-6001420281e4")] [assembly: AssemblyFileVersion("1.0.3")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.3.0")] namespace BetterClock { [BepInPlugin("BlueAmulet.BetterClock", "BetterClock", "1.0.3")] public class BetterClock : BaseUnityPlugin { internal const string Name = "BetterClock"; internal const string Author = "BlueAmulet"; internal const string ID = "BlueAmulet.BetterClock"; internal const string Version = "1.0.3"; public void Awake() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Settings.InitConfig(((BaseUnityPlugin)this).Config); Harmony val = new Harmony("BlueAmulet.BetterClock"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Applying Harmony patches"); val.PatchAll(Assembly.GetExecutingAssembly()); int num = 0; foreach (MethodBase patchedMethod in val.GetPatchedMethods()) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Patched " + patchedMethod.DeclaringType.Name + "." + patchedMethod.Name)); num++; } ((BaseUnityPlugin)this).Logger.LogInfo((object)(num + " patches applied")); } } internal static class Settings { internal static ConfigEntry<bool> compact; internal static ConfigEntry<bool> leadingZero; internal static ConfigEntry<bool> darkZero; internal static ConfigEntry<bool> fasterUpdate; internal static ConfigEntry<bool> raiseClock; internal static ConfigEntry<bool> hours24; internal static ConfigEntry<bool> properTime; internal static ConfigEntry<float> visibilityShip; internal static ConfigEntry<float> visibilityOutside; internal static ConfigEntry<float> visibilityInside; internal static ConfigEntry<float> visibilityOverride; internal static ConfigEntry<KeyboardShortcut> overrideKeybind; internal static ConfigEntry<bool> overrideToggle; public static void InitConfig(ConfigFile config) { //IL_0144: Unknown result type (might be due to invalid IL or missing references) compact = config.Bind<bool>("Clock", "CompactClock", true, "Makes the clock more compact"); leadingZero = config.Bind<bool>("Clock", "LeadingZero", true, "Adds a leading zero to hours before 10"); darkZero = config.Bind<bool>("Clock", "DarkZero", true, "Leading zeros are dark"); fasterUpdate = config.Bind<bool>("Clock", "FasterUpdate", true, "Update the clock more often"); raiseClock = config.Bind<bool>("Clock", "RaiseClock", true, "Raise the clock near the top of the screen"); hours24 = config.Bind<bool>("Clock", "24Hours", false, "Use 24 hour time"); properTime = config.Bind<bool>("Clock", "ProperTime", true, "Fix time formatting caused by the game or other mods"); visibilityShip = config.Bind<float>("Clock", "VisibilityShip", 1f, "Visibility of clock inside ship"); visibilityOutside = config.Bind<float>("Clock", "VisibilityOutside", 1f, "Visibility of clock outside"); visibilityInside = config.Bind<float>("Clock", "VisibilityInside", 0.25f, "Visibility of clock inside factory"); visibilityOverride = config.Bind<float>("Clock", "VisibilityOverride", 1f, "Visibility when using override keybind"); overrideKeybind = config.Bind<KeyboardShortcut>("Clock", "OverrideKeybind", KeyboardShortcut.Empty, "Keybind to trigger visibility override"); overrideToggle = config.Bind<bool>("Clock", "OverrideToggle", false, "Switch the override keybind between toggle or hold"); } } } namespace BetterClock.Patches { [HarmonyPatch(typeof(HUDManager))] internal static class ClockPatch { private static int lastTime = -1; private static bool overrideDisplay = false; [HarmonyPostfix] [HarmonyPatch("Awake")] public static void PostfixAwake(ref HUDManager __instance) { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) if (!Settings.compact.Value) { return; } Transform parent = ((TMP_Text)__instance.clockNumber).transform.parent; if (Settings.raiseClock.Value) { Dictionary<string, PluginInfo> pluginInfos = Chainloader.PluginInfos; if (pluginInfos.ContainsKey("SolosRingCompass") || pluginInfos.ContainsKey("LineCompassPlugin")) { parent.localPosition += new Vector3(0f, 20f, 0f); } else { parent.localPosition += new Vector3(0f, 40f, 0f); } } RectTransform component = ((Component)parent).GetComponent<RectTransform>(); component.sizeDelta = new Vector2(component.sizeDelta.x, 50f); ((TMP_Text)__instance.clockNumber).enableWordWrapping = false; RectTransform component2 = ((Component)__instance.clockIcon).GetComponent<RectTransform>(); component2.sizeDelta *= 0.6f; if (!Settings.hours24.Value) { Transform transform = ((TMP_Text)__instance.clockNumber).transform; transform.localPosition += new Vector3(10f, -1f, 0f); Transform transform2 = ((Component)__instance.clockIcon).transform; transform2.localPosition += new Vector3(-25f, -2f, 0f); } } [HarmonyPrefix] [HarmonyPatch("SetClockVisible")] public static bool PrefixVisible(ref HUDManager __instance) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut value = Settings.overrideKeybind.Value; if (Settings.overrideToggle.Value) { if (((KeyboardShortcut)(ref value)).IsDown()) { overrideDisplay = !overrideDisplay; } } else { overrideDisplay = ((KeyboardShortcut)(ref value)).IsPressed(); } if (overrideDisplay) { __instance.Clock.targetAlpha = Settings.visibilityOverride.Value; return false; } GameNetworkManager instance = GameNetworkManager.Instance; PlayerControllerB val = null; if ((Object)(object)instance != (Object)null) { val = instance.localPlayerController; } if ((Object)(object)val != (Object)null) { if (val.isInHangarShipRoom) { __instance.Clock.targetAlpha = Settings.visibilityShip.Value; } else if (val.isInsideFactory) { __instance.Clock.targetAlpha = Settings.visibilityInside.Value; } else { __instance.Clock.targetAlpha = Settings.visibilityOutside.Value; } return false; } return true; } [HarmonyPostfix] [HarmonyPatch("SetClock")] public static void PostfixSetClock(ref HUDManager __instance, ref float timeNormalized, ref float numberOfHours) { int num = (int)(timeNormalized * (60f * numberOfHours)) + 360; int num2 = num / 60 % 24; int num3 = num % 60; string text = ((!Settings.hours24.Value) ? ((TMP_Text)__instance.clockNumber).text : $"{num2}:{num3:00}"); if (Settings.properTime.Value) { if (text.Length >= 3 && text[0] == '0' && text[2] == ':') { text = text.Substring(1); } else if (text.StartsWith("24:")) { text = "0:" + text.Substring(3); } if (text.StartsWith("0:") && text.EndsWith("M")) { text = "12:" + text.Substring(2); } if (num2 < 12 && text.EndsWith("PM")) { text = text.Substring(0, text.Length - 2) + "AM"; } else if (num2 >= 12 && text.EndsWith("AM")) { text = text.Substring(0, text.Length - 2) + "PM"; } } if (Settings.compact.Value) { text = text.Replace('\n', ' ').Replace(" ", " "); } if (Settings.leadingZero.Value && (text.Length <= 4 || text.Length == 7)) { text = ((!Settings.darkZero.Value) ? ("0" + text) : ("<color=#602000>0</color>" + text)); } ((TMP_Text)__instance.clockNumber).text = text; } [HarmonyPostfix] [HarmonyPatch(typeof(TimeOfDay))] [HarmonyPatch("MoveTimeOfDay")] public static void PostfixMoveTimeOfDay(ref TimeOfDay __instance, ref float ___changeHUDTimeInterval) { if (Settings.fasterUpdate.Value) { int num = (int)(__instance.normalizedTimeOfDay * (60f * (float)__instance.numberOfHours)); if (num != lastTime) { lastTime = num; HUDManager.Instance.SetClock(__instance.normalizedTimeOfDay, (float)__instance.numberOfHours, true); ___changeHUDTimeInterval = 0f; } } } } }
BepInEx/plugins/plugins/BetterStamina.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using BetterStamina.Config; using BetterStamina.Patches; using GameNetcodeStuff; using HarmonyLib; using Unity.Collections; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("BetterStamina")] [assembly: AssemblyDescription("Mod made by flipf17")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BetterStamina")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("1c42022e-b386-4342-baf0-67de1b7529e2")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace BetterStamina { [BepInPlugin("FlipMods.BetterStamina", "BetterStamina", "1.5.6")] public class Plugin : BaseUnityPlugin { private Harmony _harmony; public static Plugin instance; private static ManualLogSource logger; private void Awake() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown instance = this; CreateCustomLogger(); ConfigSettings.BindConfigSettings(); _harmony = new Harmony("BetterStamina"); PatchAll(); Log("BetterStamina loaded"); } private void PatchAll() { IEnumerable<Type> enumerable; try { enumerable = Assembly.GetExecutingAssembly().GetTypes(); } catch (ReflectionTypeLoadException ex) { enumerable = ex.Types.Where((Type t) => t != null); } foreach (Type item in enumerable) { _harmony.PatchAll(item); } } private void CreateCustomLogger() { try { logger = Logger.CreateLogSource(string.Format("{0}-{1}", "BetterStamina", "1.5.6")); } catch { logger = ((BaseUnityPlugin)this).Logger; } } public static void Log(string message) { logger.LogInfo((object)message); } public static void LogError(string message) { logger.LogError((object)message); } public static void LogWarning(string message) { logger.LogWarning((object)message); } public static bool IsModLoaded(string guid) { return Chainloader.PluginInfos.ContainsKey(guid); } } public static class PluginInfo { public const string PLUGIN_GUID = "FlipMods.BetterStamina"; public const string PLUGIN_NAME = "BetterStamina"; public const string PLUGIN_VERSION = "1.5.6"; } } namespace BetterStamina.Patches { [HarmonyPatch] public static class PlayerSpeedPatch { private static float defaultMovementSpeed = -1f; private static float defaultCrouchSpeed = 0.6666666f; private static float defaultSprintSpeed = 2.25f; private static float defaultLimpMultiplier = -1f; private static float defaultClimbSpeed = -1f; private static float defaultJumpForce = 5f; private static Dictionary<PlayerControllerB, float> previousPlayerMovementSpeeds = new Dictionary<PlayerControllerB, float>(); private static Dictionary<PlayerControllerB, float> previousPlayerClimbSpeeds = new Dictionary<PlayerControllerB, float>(); private static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; internal static void OnSyncedWithHost() { PatchLocalPlayerController(); } private static void PatchLocalPlayerController() { if (Object.op_Implicit((Object)(object)localPlayerController)) { float num = ConfigSync.instance.jumpForceMultiplier; if (localPlayerController.drunkness > 0f) { num *= ConfigSync.instance.drunkJumpForceMultiplier; } PlayerControllerB obj = localPlayerController; obj.jumpForce *= Mathf.Pow(num, 0.55f); } } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPostfix] private static void Init() { previousPlayerMovementSpeeds?.Clear(); previousPlayerClimbSpeeds?.Clear(); } [HarmonyPatch(typeof(PlayerControllerB), "Start")] [HarmonyPostfix] private static void InitPlayer(PlayerControllerB __instance) { if (ConfigSync.isSynced && (Object)(object)__instance == (Object)(object)localPlayerController) { PatchLocalPlayerController(); } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPrefix] private static void UpdatePrefix(ref bool ___isPlayerControlled, ref bool ___isWalking, ref bool ___isCrouching, ref bool ___isSprinting, ref bool ___isClimbingLadder, ref bool ___isInsideFactory, ref float ___movementSpeed, ref float ___sprintMultiplier, ref float ___climbSpeed, ref float ___drunkness, PlayerControllerB __instance) { previousPlayerMovementSpeeds[__instance] = ___movementSpeed; previousPlayerClimbSpeeds[__instance] = ___climbSpeed; if (!___isPlayerControlled || !ConfigSync.isSynced) { return; } ___movementSpeed *= ConfigSync.instance.walkSpeedMultiplier; if (___isCrouching) { ___movementSpeed *= ConfigSync.instance.crouchSpeedMultiplier / defaultCrouchSpeed; } ___movementSpeed *= (___isInsideFactory ? ConfigSync.instance.speedMultiplierInsideFactory : ConfigSync.instance.speedMultiplierOutsideFactory); ___climbSpeed *= ConfigSync.instance.ladderClimbSpeedMultiplier; if (___isClimbingLadder & ___isSprinting) { ___climbSpeed *= ConfigSync.instance.ladderSprintSpeedMultiplier; } if (___drunkness > 0f) { ___movementSpeed *= ConfigSync.instance.drunkSpeedMultiplier; ___climbSpeed *= ConfigSync.instance.drunkSpeedMultiplier; } if ((Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) { float num = Mathf.Max((ConfigSync.instance.sprintSpeedMultiplier - defaultSprintSpeed) / defaultSprintSpeed, 0f); if (___isSprinting) { ___sprintMultiplier = Mathf.Lerp(___sprintMultiplier, ConfigSync.instance.sprintSpeedMultiplier, Time.deltaTime * num * 0.5f); } else if (!___isWalking) { ___sprintMultiplier = (ConfigSync.instance.enableInstantSprinting ? 1f : Mathf.Lerp(___sprintMultiplier, 1f, Time.deltaTime * 10f * (1f + num * 0.1f))); } else { ___sprintMultiplier = (ConfigSync.instance.enableInstantSprinting ? 1f : Mathf.Lerp(___sprintMultiplier, 1f, Time.deltaTime * 10f * num * 0.1f)); } } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPostfix] private static void UpdatePostfix(ref float ___movementSpeed, ref float ___climbSpeed, PlayerControllerB __instance) { if (ConfigSync.isSynced && previousPlayerMovementSpeeds.ContainsKey(__instance)) { ___movementSpeed = previousPlayerMovementSpeeds[__instance]; ___climbSpeed = previousPlayerClimbSpeeds[__instance]; } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> SpoofSprintMultiplierUpdate(IEnumerable<CodeInstruction> instructions) { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(instructions); MethodInfo method = typeof(PlayerSpeedPatch).GetMethod("GetAdjustedSprintMultiplier", BindingFlags.Static | BindingFlags.Public); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && list[i].operand is float num && num == defaultSprintSpeed) { list[i] = new CodeInstruction(OpCodes.Call, (object)method); } } return list.AsEnumerable(); } public static float GetAdjustedSprintMultiplier() { if ((Object)(object)StartOfRound.Instance?.localPlayerController == (Object)null || !ConfigSync.isSynced) { return defaultSprintSpeed; } return ConfigSync.instance.sprintSpeedMultiplier; } } [HarmonyPatch(typeof(PlayerControllerB))] public static class PlayerWeightPenaltyPatch { [HarmonyPatch("Update")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> SpoofWeightValuesUpdate(IEnumerable<CodeInstruction> instructions) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown if (Plugin.IsModLoaded("com.malco.lethalcompany.moreshipupgrades")) { return instructions; } bool flag = false; List<CodeInstruction> list = new List<CodeInstruction>(instructions); FieldInfo field = typeof(PlayerControllerB).GetField("carryWeight", BindingFlags.Instance | BindingFlags.Public); MethodInfo method = typeof(PlayerWeightPenaltyPatch).GetMethod("GetAdjustedWeight", BindingFlags.Static | BindingFlags.Public); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldfld && (FieldInfo)list[i].operand == field) { list[i] = new CodeInstruction(OpCodes.Call, (object)method); list.RemoveAt(i - 1); flag = true; } } if (!flag) { Plugin.LogError("Failed to apply Transpiler patch on PlayerControllerB.Update. Modified carry weight penalty may not work as intended."); } return list.AsEnumerable(); } [HarmonyPatch("LateUpdate")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> SpoofWeightValuesLateUpdate(IEnumerable<CodeInstruction> instructions) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown if (Plugin.IsModLoaded("com.malco.lethalcompany.moreshipupgrades")) { return instructions; } bool flag = false; List<CodeInstruction> list = new List<CodeInstruction>(instructions); FieldInfo field = typeof(PlayerControllerB).GetField("carryWeight", BindingFlags.Instance | BindingFlags.Public); MethodInfo method = typeof(PlayerWeightPenaltyPatch).GetMethod("GetAdjustedWeight", BindingFlags.Static | BindingFlags.Public); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldfld && (FieldInfo)list[i].operand == field) { list[i] = new CodeInstruction(OpCodes.Call, (object)method); list.RemoveAt(i - 1); flag = true; } } if (!flag) { Plugin.LogError("Failed to apply Transpiler patch on PlayerControllerB.LateUpdate. Modified carry weight penalty may not work as intended."); } return list.AsEnumerable(); } public static float GetAdjustedWeight() { if ((Object)(object)StartOfRound.Instance?.localPlayerController == (Object)null) { return 1f; } float num = StartOfRound.Instance.localPlayerController.carryWeight - 1f; return num * ConfigSync.instance.carryWeightPenaltyMultiplier + 1f; } } [HarmonyPatch(typeof(PlayerControllerB))] public static class PlayerStaminaPatch { private static float previousSprintMeter; [HarmonyPatch("LateUpdate")] [HarmonyPrefix] private static void LateUpdatePrefix(ref bool ___isPlayerControlled, ref float ___sprintMeter, PlayerControllerB __instance) { if (___isPlayerControlled && (Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) { previousSprintMeter = ___sprintMeter; } } [HarmonyPatch("LateUpdate")] [HarmonyPostfix] private static void LateUpdatePostfix(ref bool ___isPlayerControlled, ref bool ___isWalking, ref bool ___isCrouching, ref bool ___isSprinting, ref bool ___isClimbingLadder, ref bool ___isInsideFactory, ref float ___sprintMeter, ref float ___drunkness, PlayerControllerB __instance) { if (!((ConfigSync.isSynced && (Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) & ___isPlayerControlled)) { return; } float num = 1f; float num2 = ___sprintMeter - previousSprintMeter; if (num2 < 0f) { if (___isSprinting) { num *= ConfigSync.instance.sprintStaminaConsumptionMultiplier; } if (___drunkness > 0f) { num *= ConfigSync.instance.drunkStaminaConsumptionMultiplier; } num *= (___isInsideFactory ? ConfigSync.instance.staminaRegenMultiplierInsideFactory : ConfigSync.instance.staminaRegenMultiplierOutsideFactory); } else if (num2 > 0f) { num *= ((!___isWalking && !___isSprinting && !___isClimbingLadder) ? ConfigSync.instance.idleStaminaRegenMultiplier : ConfigSync.instance.walkStaminaRegenMultiplier); if (___isCrouching) { num *= ConfigSync.instance.crouchStaminaRegenMultiplier; } if (___drunkness > 0f) { num *= ConfigSync.instance.drunkStaminaRegenMultiplier; } num *= (___isInsideFactory ? ConfigSync.instance.staminaConsumptionMultiplierInsideFactory : ConfigSync.instance.staminaConsumptionMultiplierOutsideFactory); } if (num != 1f) { ___sprintMeter = Mathf.Clamp(previousSprintMeter + num2 * num, 0f, 1f); } } [HarmonyPatch("Jump_performed")] [HarmonyPrefix] private static void JumpPerformedPrefix(ref bool ___isPlayerControlled, ref float ___sprintMeter, PlayerControllerB __instance) { if (((Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) & ___isPlayerControlled) { previousSprintMeter = ___sprintMeter; } else { previousSprintMeter = -1f; } } [HarmonyPatch("Jump_performed")] [HarmonyPostfix] private static void JumpPerformedPostfix(ref bool ___isPlayerControlled, ref bool ___isInsideFactory, ref float ___sprintMeter, ref float ___drunkness, PlayerControllerB __instance) { if (!((ConfigSync.isSynced && (Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) & ___isPlayerControlled) || !(previousSprintMeter >= 0f)) { return; } float num = ___sprintMeter - previousSprintMeter; if (num < 0f) { float num2 = ConfigSync.instance.jumpStaminaConsumptionMultiplier; if (___drunkness > 0f) { num2 *= ConfigSync.instance.drunkStaminaConsumptionMultiplier; } num2 *= (___isInsideFactory ? ConfigSync.instance.staminaConsumptionMultiplierInsideFactory : ConfigSync.instance.staminaConsumptionMultiplierOutsideFactory); if (num2 != 1f) { ___sprintMeter = Mathf.Max(previousSprintMeter + num * num2, 0f); } } } } } namespace BetterStamina.Config { [Serializable] public static class ConfigSettings { public static ConfigEntry<float> carryWeightPenaltyMultiplierConfig; public static ConfigEntry<float> idleStaminaRegenMultiplierConfig; public static ConfigEntry<float> walkStaminaRegenMultiplierConfig; public static ConfigEntry<float> crouchStaminaRegenMultiplierConfig; public static ConfigEntry<float> drunkStaminaRegenMultiplierConfig; public static ConfigEntry<float> sprintStaminaConsumptionMultiplierConfig; public static ConfigEntry<float> jumpStaminaConsumptionMultiplierConfig; public static ConfigEntry<float> drunkStaminaConsumptionMultiplierConfig; public static ConfigEntry<float> walkSpeedMultiplierConfig; public static ConfigEntry<float> crouchSpeedMultiplierConfig; public static ConfigEntry<float> sprintSpeedMultiplierConfig; public static ConfigEntry<float> limpSpeedMultiplierConfig; public static ConfigEntry<float> ladderClimbSpeedMultiplierConfig; public static ConfigEntry<float> ladderSprintSpeedMultiplierConfig; public static ConfigEntry<float> drunkSpeedMultiplierConfig; public static ConfigEntry<bool> enableInstantSprintingConfig; public static ConfigEntry<float> jumpForceMultiplierConfig; public static ConfigEntry<float> drunkJumpForceMultiplierConfig; public static ConfigEntry<float> staminaRegenMultiplierInsideFactoryConfig; public static ConfigEntry<float> staminaRegenMultiplierOutsideFactoryConfig; public static ConfigEntry<float> staminaConsumptionMultiplierInsideFactoryConfig; public static ConfigEntry<float> staminaConsumptionMultiplierOutsideFactoryConfig; public static ConfigEntry<float> speedMultiplierInsideFactoryConfig; public static ConfigEntry<float> speedMultiplierOutsideFactoryConfig; public static Dictionary<string, ConfigEntryBase> currentConfigEntries = new Dictionary<string, ConfigEntryBase>(); public static List<ConfigEntryBase> configEntries = new List<ConfigEntryBase>(); public static void BindConfigSettings() { Plugin.Log("Binding Configs"); carryWeightPenaltyMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("CarryWeight", "CarryWeightPenaltyMultiplier", 0.5f, "[Host-only] Multiplier for how much your speed/stamina consumption are affected by weight. (Lower is better/forgiving)")); idleStaminaRegenMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Regen", "IdleStaminaRegenMultiplier", 1.4f, "[Host-only] Multiplier for how fast your stamina regens while idle.")); walkStaminaRegenMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Regen", "WalkStaminaRegenMultiplier", 1.25f, "[Host-only] Multiplier for how fast your stamina regens while walking.")); crouchStaminaRegenMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Regen", "CrouchStaminaRegenMultiplier", 1.2f, "[Host-only] Multiplier for how fast your stamina regens while crouching.\nThis will be applied on top of other stamina regen modifiers.\nExample multiplier while crouching and idle: 1.4 * 1.25 = 1.75")); drunkStaminaRegenMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Regen", "DrunkStaminaRegenMultiplier", 1f, "[Host-only] Multiplier for how fast your stamina regens while drunk.\nThis will be applied on top of other stamina regen modifiers.")); sprintStaminaConsumptionMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Consumption", "SprintStaminaConsumptionMultiplier", 0.75f, "[Host-only] Multiplier for how much stamina drains while sprinting.")); jumpStaminaConsumptionMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Consumption", "JumpStaminaConsumptionMultiplier", 0.75f, "[Host-only] Multiplier for how much stamina jumping consumes.")); drunkStaminaConsumptionMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Stamina Consumption", "DrunkStaminaConsumptionMultiplier", 1f, "[Host-only] Multiplier for how much stamina drains while drunk.\nThis will be applied on top of other stamina consumption modifiers.")); walkSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "WalkSpeedMultiplier", 1f, "[Host-only] Movement speed multiplier while walking.\nThis modifier will ultimately affect crouching, sprinting, and limping speed.")); crouchSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "CrouchSpeedMultiplier", 0.66f, "[Host-only] Movement speed multiplier while crouching.\nVanilla default: ~0.66")); sprintSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "SprintSpeedMultiplier", 2.25f, "[Host-only] Movement speed multiplier while sprinting.\nVanilla default: 2.25")); limpSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "LimpSpeedMultiplier", 0.2f, "[Host-only] Movement speed multiplier while limping.\nVanilla default: 0.2")); ladderClimbSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "LadderClimbSpeedMultiplier", 1f, "[Host-only] Player speed multiplier while climbing ladders.")); ladderSprintSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "LadderClimbSprintSpeedMultiplier", 1.5f, "[Host-only] Player sprint speed multiplier while climbing on ladders.\nSet this value to 1 if the vanilla game ever decides to implement this. This will avoid applied multiple sprint speed modifiers.")); drunkSpeedMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Movement Speed", "DrunkSpeedMultiplier", 1f, "[Host-only] Movement speed multiplier while drunk.\nThis will be applied on top of other speed modifiers.")); enableInstantSprintingConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Movement Speed", "EnableInstantSprinting", false, "[Host-only] If true, sprinting to max speed will be instant, rather than a build up in speed over time.")); jumpForceMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Jumping", "JumpForceMultiplier", 1f, "[Host-only] Player jump force multiplier.\nNOTE: Jump force may might represent jump height perfectly due to how Unity's force physics work.\nNOTE: You may take fall damage if this value is set too high.")); drunkJumpForceMultiplierConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Jumping", "DrunkJumpForceMultiplier", 1f, "[Host-only] Player jump height multiplier while drunk.\nThis will be applied on top of other jump force modifiers.")); staminaRegenMultiplierInsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "StaminaRegenMultiplierInsideFactory", 1f, "[Host-only] Multiplier for stamina regen while inside the factory/dungeon.\nThis will be applied on top of other stamina regen modifiers.")); staminaRegenMultiplierOutsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "StaminaRegenMultiplierOutsideFactory", 1f, "[Host-only] Multiplier for stamina regen while outside the factory/dungeon.\nThis will be applied on top of other stamina regen modifiers.")); staminaConsumptionMultiplierInsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "SprintStaminaConsumptionInsideFactory", 1f, "[Host-only] Multiplier for sprinting stamina consumption while inside the factory/dungeon.\nThis will be applied on top of other stamina consumption modifiers.")); staminaConsumptionMultiplierOutsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "SprintStaminaConsumptionOutsideFactory", 1f, "[Host-only] Multiplier for sprinting stamina consumption while outside the factory/dungeon.\nThis will be applied on top of other stamina consumption modifiers.")); speedMultiplierInsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "SpeedMultiplierInsideFactory", 1f, "[Host-only] Movement speed multiplier while inside the factory/dungeon.\nThis will be applied on top of other speed modifiers.")); speedMultiplierOutsideFactoryConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("Factory", "SpeedMultiplierOutsideFactory", 1f, "[Host-only] Movement speed multiplier while outside the factory/dungeon.\nThis will be applied on top of other speed modifiers.")); crouchSpeedMultiplierConfig.Value = Mathf.Clamp(crouchSpeedMultiplierConfig.Value, 0f, 1f); sprintSpeedMultiplierConfig.Value = Mathf.Max(sprintSpeedMultiplierConfig.Value, 1f); limpSpeedMultiplierConfig.Value = Mathf.Clamp(limpSpeedMultiplierConfig.Value, 0f, 1f); TryRemoveOldConfigSettings(); } public static ConfigEntry<T> AddConfigEntry<T>(ConfigEntry<T> configEntry) { currentConfigEntries.Add(((ConfigEntryBase)configEntry).Definition.Key, (ConfigEntryBase)(object)configEntry); return configEntry; } public static void TryRemoveOldConfigSettings() { HashSet<string> hashSet = new HashSet<string>(); HashSet<string> hashSet2 = new HashSet<string>(); foreach (ConfigEntryBase value in currentConfigEntries.Values) { hashSet.Add(value.Definition.Section); hashSet2.Add(value.Definition.Key); } try { ConfigFile config = ((BaseUnityPlugin)Plugin.instance).Config; string configFilePath = config.ConfigFilePath; if (!File.Exists(configFilePath)) { return; } string text = File.ReadAllText(configFilePath); string[] array = File.ReadAllLines(configFilePath); string text2 = ""; for (int i = 0; i < array.Length; i++) { array[i] = array[i].Replace("\n", ""); if (array[i].Length <= 0) { continue; } if (array[i].StartsWith("[")) { if (text2 != "" && !hashSet.Contains(text2)) { text2 = "[" + text2 + "]"; int num = text.IndexOf(text2); int num2 = text.IndexOf(array[i]); text = text.Remove(num, num2 - num); } text2 = array[i].Replace("[", "").Replace("]", "").Trim(); } else { if (!(text2 != "")) { continue; } if (i <= array.Length - 4 && array[i].StartsWith("##")) { int j; for (j = 1; i + j < array.Length && array[i + j].Length > 3; j++) { } if (hashSet.Contains(text2)) { int num3 = array[i + j - 1].IndexOf("="); string item = array[i + j - 1].Substring(0, num3 - 1); if (!hashSet2.Contains(item)) { int num4 = text.IndexOf(array[i]); int num5 = text.IndexOf(array[i + j - 1]) + array[i + j - 1].Length; text = text.Remove(num4, num5 - num4); } } i += j - 1; } else if (array[i].Length > 3) { text = text.Replace(array[i], ""); } } } if (!hashSet.Contains(text2)) { text2 = "[" + text2 + "]"; int num6 = text.IndexOf(text2); text = text.Remove(num6, text.Length - num6); } while (text.Contains("\n\n\n")) { text = text.Replace("\n\n\n", "\n\n"); } File.WriteAllText(configFilePath, text); config.Reload(); } catch { } } } [Serializable] [HarmonyPatch] public class ConfigSync { public static ConfigSync instance; public static PlayerControllerB localPlayerController; public static bool isSynced; public float carryWeightPenaltyMultiplier = 1f; public float idleStaminaRegenMultiplier = 1f; public float walkStaminaRegenMultiplier = 1f; public float crouchStaminaRegenMultiplier = 1f; public float drunkStaminaRegenMultiplier = 1f; public float staminaRegenMultiplierInsideFactory = 1f; public float staminaRegenMultiplierOutsideFactory = 1f; public float sprintStaminaConsumptionMultiplier = 1f; public float jumpStaminaConsumptionMultiplier = 1f; public float drunkStaminaConsumptionMultiplier = 1f; public float staminaConsumptionMultiplierInsideFactory = 1f; public float staminaConsumptionMultiplierOutsideFactory = 1f; public float walkSpeedMultiplier = 1f; public float crouchSpeedMultiplier = 0.6666666f; public float sprintSpeedMultiplier = 2.25f; public float limpSpeedMultiplier = 0.2f; public float ladderClimbSpeedMultiplier = 1f; public float ladderSprintSpeedMultiplier = 1f; public float drunkSpeedMultiplier = 1f; public bool enableInstantSprinting = false; public float speedMultiplierInsideFactory = 1f; public float speedMultiplierOutsideFactory = 1f; public float jumpForceMultiplier = 1f; public float drunkJumpForceMultiplier = 1f; public static void BuildDefaultConfigSync() { instance = new ConfigSync(); } public static void BuildServerConfigSync() { instance = new ConfigSync(); instance.carryWeightPenaltyMultiplier = Mathf.Max(ConfigSettings.carryWeightPenaltyMultiplierConfig.Value, 0f); instance.idleStaminaRegenMultiplier = Mathf.Max(ConfigSettings.idleStaminaRegenMultiplierConfig.Value, 0f); instance.walkStaminaRegenMultiplier = Mathf.Max(ConfigSettings.walkStaminaRegenMultiplierConfig.Value, 0f); instance.crouchStaminaRegenMultiplier = Mathf.Max(ConfigSettings.crouchStaminaRegenMultiplierConfig.Value, 0f); instance.drunkStaminaRegenMultiplier = Mathf.Max(ConfigSettings.drunkStaminaRegenMultiplierConfig.Value, 0f); instance.staminaRegenMultiplierInsideFactory = Mathf.Max(ConfigSettings.staminaRegenMultiplierInsideFactoryConfig.Value, 0f); instance.staminaRegenMultiplierOutsideFactory = Mathf.Max(ConfigSettings.staminaRegenMultiplierOutsideFactoryConfig.Value, 0f); instance.sprintStaminaConsumptionMultiplier = Mathf.Max(ConfigSettings.sprintStaminaConsumptionMultiplierConfig.Value, 0f); instance.jumpStaminaConsumptionMultiplier = Mathf.Max(ConfigSettings.jumpStaminaConsumptionMultiplierConfig.Value, 0f); instance.drunkStaminaConsumptionMultiplier = Mathf.Max(ConfigSettings.drunkStaminaConsumptionMultiplierConfig.Value, 0f); instance.staminaConsumptionMultiplierInsideFactory = Mathf.Max(ConfigSettings.staminaConsumptionMultiplierInsideFactoryConfig.Value, 0f); instance.staminaConsumptionMultiplierOutsideFactory = Mathf.Max(ConfigSettings.staminaConsumptionMultiplierOutsideFactoryConfig.Value, 0f); instance.walkSpeedMultiplier = Mathf.Max(ConfigSettings.walkSpeedMultiplierConfig.Value, 0.1f); instance.crouchSpeedMultiplier = Mathf.Clamp(ConfigSettings.crouchSpeedMultiplierConfig.Value, 0f, 1f); instance.sprintSpeedMultiplier = Mathf.Max(ConfigSettings.sprintSpeedMultiplierConfig.Value, 1f); instance.limpSpeedMultiplier = Mathf.Clamp(ConfigSettings.limpSpeedMultiplierConfig.Value, 0f, 1f); instance.ladderClimbSpeedMultiplier = Mathf.Max(ConfigSettings.ladderClimbSpeedMultiplierConfig.Value, 0f); instance.ladderSprintSpeedMultiplier = Mathf.Max(ConfigSettings.ladderSprintSpeedMultiplierConfig.Value, 1f); instance.drunkSpeedMultiplier = Mathf.Max(ConfigSettings.drunkSpeedMultiplierConfig.Value, 0f); instance.enableInstantSprinting = ConfigSettings.enableInstantSprintingConfig.Value; instance.speedMultiplierInsideFactory = Mathf.Max(ConfigSettings.speedMultiplierInsideFactoryConfig.Value, 0f); instance.speedMultiplierOutsideFactory = Mathf.Max(ConfigSettings.speedMultiplierOutsideFactoryConfig.Value, 0f); instance.jumpForceMultiplier = Mathf.Max(ConfigSettings.jumpForceMultiplierConfig.Value, 0f); instance.drunkJumpForceMultiplier = Mathf.Max(ConfigSettings.drunkJumpForceMultiplierConfig.Value, 0f); } [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPostfix] public static void ResetValues() { isSynced = false; BuildDefaultConfigSync(); } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] public static void InitializeLocalPlayer(PlayerControllerB __instance) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown localPlayerController = __instance; if (NetworkManager.Singleton.IsServer) { BuildServerConfigSync(); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("BetterStamina-OnRequestConfigSync", new HandleNamedMessageDelegate(OnReceiveConfigSyncRequest)); OnLocalClientConfigSync(); } else { isSynced = false; NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("BetterStamina-OnReceiveConfigSync", new HandleNamedMessageDelegate(OnReceiveConfigSync)); RequestConfigSync(); } } public static void RequestConfigSync() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsClient) { Plugin.Log("Sending config sync request to server."); FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(4, (Allocator)2, -1); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BetterStamina-OnRequestConfigSync", 0uL, val, (NetworkDelivery)3); } else { Plugin.LogError("Failed to send config sync request."); } } public static void OnReceiveConfigSyncRequest(ulong clientId, FastBufferReader reader) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsServer) { Plugin.Log("Receiving config sync request from client with id: " + clientId + ". Sending config sync to client."); byte[] array = SerializeConfigToByteArray(instance); FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(array.Length + 4, (Allocator)2, -1); int num = array.Length; ((FastBufferWriter)(ref val)).WriteValueSafe<int>(ref num, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteBytesSafe(array, -1, 0); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BetterStamina-OnReceiveConfigSync", clientId, val, (NetworkDelivery)3); } } public static void OnReceiveConfigSync(ulong clientId, FastBufferReader reader) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) int num = default(int); ((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref num, default(ForPrimitives)); if (((FastBufferReader)(ref reader)).TryBeginRead(num)) { Plugin.Log("Receiving config sync from server."); byte[] data = new byte[num]; ((FastBufferReader)(ref reader)).ReadBytesSafe(ref data, num, 0); instance = DeserializeFromByteArray(data); OnLocalClientConfigSync(); } else { Plugin.LogError("Error receiving sync from server."); } } public static void OnLocalClientConfigSync() { isSynced = true; PlayerSpeedPatch.OnSyncedWithHost(); } public static byte[] SerializeConfigToByteArray(ConfigSync config) { BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream memoryStream = new MemoryStream(); binaryFormatter.Serialize(memoryStream, config); return memoryStream.ToArray(); } public static ConfigSync DeserializeFromByteArray(byte[] data) { MemoryStream serializationStream = new MemoryStream(data); BinaryFormatter binaryFormatter = new BinaryFormatter(); return (ConfigSync)binaryFormatter.Deserialize(serializationStream); } } }
BepInEx/plugins/plugins/BuyableShotgun/BuyableShotgun.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Collections; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("BuyableShotgun")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCopyright("Copyright © 2023 MegaPiggy")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+6ba547771daa1d82ce02c67222831d51d8608dcc")] [assembly: AssemblyProduct("BuyableShotgun")] [assembly: AssemblyTitle("BuyableShotgun")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BuyableShotgun { [BepInDependency("evaisa.lethallib", "0.13.2")] [BepInPlugin("MegaPiggy.BuyableShotgun", "Buyable Shotgun", "1.3.0")] public class BuyableShotgun : BaseUnityPlugin { public class ClonedItem : Item { public Item original; } internal class Unflagger : MonoBehaviour { public void Awake() { ((Object)((Component)this).gameObject).hideFlags = (HideFlags)0; } } [HarmonyPatch] internal static class Patches { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnRequestSync; public static HandleNamedMessageDelegate <1>__OnReceiveSync; } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] public static void ServerConnect() { //IL_00a9: 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) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown if (IsHost) { LoggerInstance.LogInfo((object)"Started hosting, using local settings"); CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager; object obj = <>O.<0>__OnRequestSync; if (obj == null) { HandleNamedMessageDelegate val = OnRequestSync; <>O.<0>__OnRequestSync = val; obj = (object)val; } customMessagingManager.RegisterNamedMessageHandler("BuyableShotgun_OnRequestConfigSync", (HandleNamedMessageDelegate)obj); UpdateShopItemPrice(); } else { LoggerInstance.LogInfo((object)"Connected to server, requesting settings"); CustomMessagingManager customMessagingManager2 = NetworkManager.Singleton.CustomMessagingManager; object obj2 = <>O.<1>__OnReceiveSync; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnReceiveSync; <>O.<1>__OnReceiveSync = val2; obj2 = (object)val2; } customMessagingManager2.RegisterNamedMessageHandler("BuyableShotgun_OnReceiveConfigSync", (HandleNamedMessageDelegate)obj2); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BuyableShotgun_OnRequestConfigSync", 0uL, new FastBufferWriter(0, (Allocator)2, -1), (NetworkDelivery)2); } } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Start() { LoggerInstance.LogWarning((object)"Game network manager start"); CloneShotgun(); } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] public static void ServerDisconnect() { LoggerInstance.LogInfo((object)"Server disconnect"); ShotgunPriceRemote = -1; } } private const string modGUID = "MegaPiggy.BuyableShotgun"; private const string modName = "Buyable Shotgun"; private const string modVersion = "1.3.0"; private readonly Harmony harmony = new Harmony("MegaPiggy.BuyableShotgun"); private static BuyableShotgun Instance; private static ConfigEntry<int> ShotgunPriceConfig; internal static int ShotgunPriceRemote = -1; private static Dictionary<string, TerminalNode> infoNodes = new Dictionary<string, TerminalNode>(); public static byte CurrentVersionByte = 1; private static ManualLogSource LoggerInstance => ((BaseUnityPlugin)Instance).Logger; public static List<Item> AllItems => Resources.FindObjectsOfTypeAll<Item>().Reverse().ToList(); public static Item Shotgun => ((IEnumerable<Item>)AllItems).FirstOrDefault((Func<Item, bool>)((Item item) => ((Object)item).name.Equals("Shotgun") && (Object)(object)item.spawnPrefab != (Object)null)); public static ClonedItem ShotgunClone { get; private set; } public static int ShotgunPriceLocal => ShotgunPriceConfig.Value; public static int ShotgunPrice => (ShotgunPriceRemote > -1) ? ShotgunPriceRemote : ShotgunPriceLocal; private static bool IsHost => NetworkManager.Singleton.IsHost; private static ulong LocalClientId => NetworkManager.Singleton.LocalClientId; private void Awake() { if ((Object)(object)Instance == (Object)null) { Object.DontDestroyOnLoad((Object)(object)this); Instance = this; } harmony.PatchAll(); ShotgunPriceConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Prices", "ShotgunPrice", 700, "Credits needed to buy shotgun"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Buyable Shotgun is loaded with version 1.3.0!"); } private static ClonedItem CloneNonScrap(Item original, int price) { ClonedItem clonedItem = ScriptableObject.CreateInstance<ClonedItem>(); Object.DontDestroyOnLoad((Object)(object)clonedItem); clonedItem.original = original; GameObject val = NetworkPrefabs.CloneNetworkPrefab(original.spawnPrefab, "Buyable" + ((Object)original).name); val.AddComponent<Unflagger>(); Object.DontDestroyOnLoad((Object)(object)val); CopyFields(original, (Item)(object)clonedItem); val.GetComponent<GrabbableObject>().itemProperties = (Item)(object)clonedItem; ((Item)clonedItem).spawnPrefab = val; ((Object)clonedItem).name = "Buyable" + ((Object)original).name; ((Item)clonedItem).creditsWorth = price; ((Item)clonedItem).isScrap = false; return clonedItem; } public static void CopyFields(Item source, Item destination) { FieldInfo[] fields = typeof(Item).GetFields(); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { fieldInfo.SetValue(destination, fieldInfo.GetValue(source)); } } private static TerminalNode CreateInfoNode(string name, string description) { if (infoNodes.ContainsKey(name)) { return infoNodes[name]; } TerminalNode val = ScriptableObject.CreateInstance<TerminalNode>(); Object.DontDestroyOnLoad((Object)(object)val); val.clearPreviousText = true; ((Object)val).name = name + "InfoNode"; val.displayText = description + "\n\n"; infoNodes.Add(name, val); return val; } private static void CloneShotgun() { if (!((Object)(object)Shotgun == (Object)null) && !((Object)(object)ShotgunClone != (Object)null)) { ShotgunClone = CloneNonScrap(Shotgun, ShotgunPrice); AddToShop(); } } private static void AddToShop() { ClonedItem shotgunClone = ShotgunClone; int shotgunPrice = ShotgunPrice; Items.RegisterShopItem((Item)(object)shotgunClone, (TerminalNode)null, (TerminalNode)null, CreateInfoNode("Shotgun", "Nutcracker's Shotgun. Can hold 2 shells. Recommended to keep safety on while not using or it might shoot randomly."), shotgunPrice); LoggerInstance.LogInfo((object)$"Shotgun added to Shop for {ShotgunPrice} credits"); } private static void UpdateShopItemPrice() { ((Item)ShotgunClone).creditsWorth = ShotgunPrice; Items.UpdateShopItemPrice((Item)(object)ShotgunClone, ShotgunPrice); LoggerInstance.LogInfo((object)$"Shotgun price updated to {ShotgunPrice} credits"); } public static void WriteData(FastBufferWriter writer) { ((FastBufferWriter)(ref writer)).WriteByte(CurrentVersionByte); ((FastBufferWriter)(ref writer)).WriteBytes(BitConverter.GetBytes(ShotgunPriceLocal), -1, 0); } public static void ReadData(FastBufferReader reader) { byte b = default(byte); ((FastBufferReader)(ref reader)).ReadByte(ref b); if (b == CurrentVersionByte) { byte[] value = new byte[4]; ((FastBufferReader)(ref reader)).ReadBytes(ref value, 4, 0); ShotgunPriceRemote = BitConverter.ToInt32(value, 0); UpdateShopItemPrice(); LoggerInstance.LogInfo((object)"Host config set successfully"); return; } throw new Exception("Invalid version byte"); } public static void OnRequestSync(ulong clientID, FastBufferReader reader) { //IL_0032: 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) if (!IsHost) { return; } LoggerInstance.LogInfo((object)("Sending config to client " + clientID)); FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(5, (Allocator)2, 5); try { WriteData(val); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BuyableShotgun_OnReceiveConfigSync", clientID, val, (NetworkDelivery)2); } catch (Exception arg) { LoggerInstance.LogError((object)$"Failed to send config: {arg}"); } finally { ((FastBufferWriter)(ref val)).Dispose(); } } public static void OnReceiveSync(ulong clientID, FastBufferReader reader) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) LoggerInstance.LogInfo((object)"Received config from host"); try { ReadData(reader); } catch (Exception arg) { LoggerInstance.LogError((object)$"Failed to receive config: {arg}"); ShotgunPriceRemote = -1; } } } }
BepInEx/plugins/plugins/BuyableShotgunShells/BuyableShotgunShells.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Collections; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("BuyableShotgunShells")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCopyright("Copyright © 2023 MegaPiggy")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+d6d2c0f918043d4e4353ef5c47682e34337a1e68")] [assembly: AssemblyProduct("BuyableShotgunShells")] [assembly: AssemblyTitle("BuyableShotgunShells")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BuyableShotgunShells { [BepInDependency("evaisa.lethallib", "0.13.2")] [BepInPlugin("MegaPiggy.BuyableShotgunShells", "Buyable Shotgun Shells", "1.3.0")] public class BuyableShotgunShells : BaseUnityPlugin { public class ClonedItem : Item { public Item original; } internal class Unflagger : MonoBehaviour { public void Awake() { ((Object)((Component)this).gameObject).hideFlags = (HideFlags)0; } } [HarmonyPatch] internal static class Patches { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnRequestSync; public static HandleNamedMessageDelegate <1>__OnReceiveSync; } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] public static void ServerConnect() { //IL_00a9: 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) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown if (IsHost) { LoggerInstance.LogInfo((object)"Started hosting, using local settings"); CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager; object obj = <>O.<0>__OnRequestSync; if (obj == null) { HandleNamedMessageDelegate val = OnRequestSync; <>O.<0>__OnRequestSync = val; obj = (object)val; } customMessagingManager.RegisterNamedMessageHandler("BuyableShotgunShells_OnRequestConfigSync", (HandleNamedMessageDelegate)obj); UpdateShopItemPrice(); } else { LoggerInstance.LogInfo((object)"Connected to server, requesting settings"); CustomMessagingManager customMessagingManager2 = NetworkManager.Singleton.CustomMessagingManager; object obj2 = <>O.<1>__OnReceiveSync; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnReceiveSync; <>O.<1>__OnReceiveSync = val2; obj2 = (object)val2; } customMessagingManager2.RegisterNamedMessageHandler("BuyableShotgunShells_OnReceiveConfigSync", (HandleNamedMessageDelegate)obj2); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BuyableShotgunShells_OnRequestConfigSync", 0uL, new FastBufferWriter(0, (Allocator)2, -1), (NetworkDelivery)2); } } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Start() { LoggerInstance.LogWarning((object)"Game network manager start"); CloneShells(); } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] public static void ServerDisconnect() { LoggerInstance.LogInfo((object)"Server disconnect"); ShellPriceRemote = -1; } } private const string modGUID = "MegaPiggy.BuyableShotgunShells"; private const string modName = "Buyable Shotgun Shells"; private const string modVersion = "1.3.0"; private readonly Harmony harmony = new Harmony("MegaPiggy.BuyableShotgunShells"); private static BuyableShotgunShells Instance; private static ConfigEntry<int> ShellPriceConfig; internal static int ShellPriceRemote = -1; private static Dictionary<string, TerminalNode> infoNodes = new Dictionary<string, TerminalNode>(); public static byte CurrentVersionByte = 1; private static ManualLogSource LoggerInstance => ((BaseUnityPlugin)Instance).Logger; public static List<Item> AllItems => Resources.FindObjectsOfTypeAll<Item>().Reverse().ToList(); public static Item ShotgunShell => ((IEnumerable<Item>)AllItems).FirstOrDefault((Func<Item, bool>)((Item item) => ((Object)item).name.Equals("GunAmmo") && (Object)(object)item.spawnPrefab != (Object)null)); public static ClonedItem ShotgunShellClone { get; private set; } public static int ShellPriceLocal => ShellPriceConfig.Value; public static int ShellPrice => (ShellPriceRemote > -1) ? ShellPriceRemote : ShellPriceLocal; private static bool IsHost => NetworkManager.Singleton.IsHost; private static ulong LocalClientId => NetworkManager.Singleton.LocalClientId; private void Awake() { if ((Object)(object)Instance == (Object)null) { Object.DontDestroyOnLoad((Object)(object)this); Instance = this; } harmony.PatchAll(); ShellPriceConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Prices", "ShotgunShellPrice", 20, "Credits needed to buy shotgun shells"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Buyable Shotgun Shells is loaded with version 1.3.0!"); } private static ClonedItem CloneNonScrap(Item original, int price) { ClonedItem clonedItem = ScriptableObject.CreateInstance<ClonedItem>(); Object.DontDestroyOnLoad((Object)(object)clonedItem); clonedItem.original = original; GameObject val = NetworkPrefabs.CloneNetworkPrefab(original.spawnPrefab, "Buyable" + ((Object)original).name); val.AddComponent<Unflagger>(); Object.DontDestroyOnLoad((Object)(object)val); CopyFields(original, (Item)(object)clonedItem); val.GetComponent<GrabbableObject>().itemProperties = (Item)(object)clonedItem; ((Item)clonedItem).spawnPrefab = val; ((Object)clonedItem).name = "Buyable" + ((Object)original).name; ((Item)clonedItem).creditsWorth = price; ((Item)clonedItem).isScrap = false; return clonedItem; } public static void CopyFields(Item source, Item destination) { FieldInfo[] fields = typeof(Item).GetFields(); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { fieldInfo.SetValue(destination, fieldInfo.GetValue(source)); } } private static TerminalNode CreateInfoNode(string name, string description) { if (infoNodes.ContainsKey(name)) { return infoNodes[name]; } TerminalNode val = ScriptableObject.CreateInstance<TerminalNode>(); val.clearPreviousText = true; ((Object)val).name = name + "InfoNode"; val.displayText = description + "\n\n"; infoNodes.Add(name, val); return val; } private static void CloneShells() { if (!((Object)(object)ShotgunShell == (Object)null) && !((Object)(object)ShotgunShellClone != (Object)null)) { ShotgunShellClone = CloneNonScrap(ShotgunShell, ShellPrice); ((Item)ShotgunShellClone).itemName = "Shells"; AddToShop(); } } private static void AddToShop() { ClonedItem shotgunShellClone = ShotgunShellClone; int shellPrice = ShellPrice; Items.RegisterShopItem((Item)(object)shotgunShellClone, (TerminalNode)null, (TerminalNode)null, CreateInfoNode("ShotgunShell", "Ammo for the Nutcracker's Shotgun."), shellPrice); LoggerInstance.LogInfo((object)$"Shotgun Shell added to Shop for {ShellPrice} credits"); } private static void UpdateShopItemPrice() { ((Item)ShotgunShellClone).creditsWorth = ShellPrice; Items.UpdateShopItemPrice((Item)(object)ShotgunShellClone, ShellPrice); LoggerInstance.LogInfo((object)$"Shotgun Shell price updated to {ShellPrice} credits"); } public static void WriteData(FastBufferWriter writer) { ((FastBufferWriter)(ref writer)).WriteByte(CurrentVersionByte); ((FastBufferWriter)(ref writer)).WriteBytes(BitConverter.GetBytes(ShellPriceLocal), -1, 0); } public static void ReadData(FastBufferReader reader) { byte b = default(byte); ((FastBufferReader)(ref reader)).ReadByte(ref b); if (b == CurrentVersionByte) { byte[] value = new byte[4]; ((FastBufferReader)(ref reader)).ReadBytes(ref value, 4, 0); ShellPriceRemote = BitConverter.ToInt32(value, 0); UpdateShopItemPrice(); LoggerInstance.LogInfo((object)"Host config set successfully"); return; } throw new Exception("Invalid version byte"); } public static void OnRequestSync(ulong clientID, FastBufferReader reader) { //IL_0032: 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) if (!IsHost) { return; } LoggerInstance.LogInfo((object)("Sending config to client " + clientID)); FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(5, (Allocator)2, 5); try { WriteData(val); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("BuyableShotgunShells_OnReceiveConfigSync", clientID, val, (NetworkDelivery)2); } catch (Exception arg) { LoggerInstance.LogError((object)$"Failed to send config: {arg}"); } finally { ((FastBufferWriter)(ref val)).Dispose(); } } public static void OnReceiveSync(ulong clientID, FastBufferReader reader) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) LoggerInstance.LogInfo((object)"Received config from host"); try { ReadData(reader); } catch (Exception arg) { LoggerInstance.LogError((object)$"Failed to receive config: {arg}"); ShellPriceRemote = -1; } } } }
BepInEx/plugins/plugins/CoilHeadStare.dll
Decompiled 2 months agousing System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using TDP.CoilHeadStare.Patch; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("CoilHeadStare")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("CoilHeadStare")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("9d96f0c2-6393-4d02-99d7-34538a0dad5c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace TDP.CoilHeadStare { [BepInPlugin("TDP.CoilHeadStare", "CoilHeadStare", "1.1.0")] public class ModBase : BaseUnityPlugin { private const string modGUID = "TDP.CoilHeadStare"; private const string modName = "CoilHeadStare"; private const string modVersion = "1.1.0"; private Harmony harmony; internal static ModBase instance; internal ManualLogSource mls; public static ConfigEntry<float> config_timeUntilStare; public static ConfigEntry<float> config_maxStareDistance; public static ConfigEntry<float> config_turnHeadSpeed; public static ConfigEntry<bool> config_shovelReact; private void Awake() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown if ((Object)(object)instance == (Object)null) { instance = this; } else { Object.Destroy((Object)(object)this); } ConfigFile(); harmony = new Harmony("TDP.CoilHeadStare"); harmony.PatchAll(typeof(CoilHeadPatch)); mls = Logger.CreateLogSource("TDP.CoilHeadStare"); mls.LogInfo((object)string.Format("{0} {1} loaded. (TUS={2}, MSD={3}, HTS={4}, SR={5})", "CoilHeadStare", "1.1.0", Stare.timeUntilStare, Stare.maxStareDistance, Stare.turnHeadSpeed, CoilHeadPatch.shovelReact)); } private void ConfigFile() { config_timeUntilStare = ((BaseUnityPlugin)this).Config.Bind<float>("CoilHeadStare", "Time Until Stare", 8f, "Time between moving and looking at closest player (in seconds)"); config_maxStareDistance = ((BaseUnityPlugin)this).Config.Bind<float>("CoilHeadStare", "Max Stare Distance", 6f, "Coilhead will only stare at players closer than this (for reference: coilhead's height is ca. 4)"); config_turnHeadSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("CoilHeadStare", "Head Turn Speed", 0.3f, "The speed at which the head turns towards the player"); config_shovelReact = ((BaseUnityPlugin)this).Config.Bind<bool>("CoilHeadStare", "Head Bounce on Shovel Hit", true, "Should the coilhead spring recoil when hit with a shovel (or with anything else)"); Stare.timeUntilStare = config_timeUntilStare.Value; Stare.maxStareDistance = config_maxStareDistance.Value; Stare.turnHeadSpeed = config_turnHeadSpeed.Value; CoilHeadPatch.shovelReact = config_shovelReact.Value; } } } namespace TDP.CoilHeadStare.Patch { internal class CoilHeadPatch { public static bool shovelReact; [HarmonyPatch(typeof(EnemyAI), "Start")] [HarmonyPostfix] [HarmonyPriority(200)] private static void StartPostFix(EnemyAI __instance) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown if (__instance is SpringManAI) { Debug.Log((object)"CoilHead found. Adding stare script."); Stare stare = ((Component)__instance).gameObject.AddComponent<Stare>(); stare.Initialize((SpringManAI)__instance); } } [HarmonyPatch(typeof(EnemyAI), "HitEnemy")] [HarmonyPrefix] public static void HitEnemyPreFix(EnemyAI __instance) { if (__instance is SpringManAI) { if ((Object)(object)__instance == (Object)null) { ModBase.instance.mls.LogError((object)"On player hit Coil Head: Coil Head instance is missing."); } else if ((Object)(object)__instance.creatureAnimator == (Object)null) { ModBase.instance.mls.LogError((object)"On player hit Coil Head: Coil Head animator is missing."); } else if (__instance.creatureAnimator.parameters.All((AnimatorControllerParameter x) => x.name == "springBoing")) { ModBase.instance.mls.LogError((object)"On player hit Coil Head: Coil Head animatorcontroller is missing the parameter \"springBoing\"."); } else if (shovelReact) { __instance.creatureAnimator.SetTrigger("springBoing"); } } } } public class Stare : MonoBehaviour { private SpringManAI coilHeadInstance; public static float timeUntilStare; public static float maxStareDistance; public static float turnHeadSpeed; public static bool keepRunningOnDeath; public const string headParentBone = "springBone.002"; private Transform head; private float timeSinceMoving; private bool isTurningHead; private PlayerControllerB stareTarget; public void Initialize(SpringManAI instance) { Debug.Log((object)"Initializing Stare on Coil Head."); coilHeadInstance = instance; if ((Object)(object)coilHeadInstance == (Object)null) { ModBase.instance.mls.LogError((object)"Coil Head instance missing. Harmony Patch failed?"); } List<Transform> list = FindChildren(((Component)coilHeadInstance).transform, "springBone.002"); if (list == null) { ModBase.instance.mls.LogError((object)"Search for head parent returned null. This should not be possible, something went wrong."); } else if (list.Count > 0) { if (list.Last().childCount > 0) { head = list.Last().GetChild(list.Last().childCount - 1); } else { ModBase.instance.mls.LogWarning((object)"Found head parent (springBone.002), but it has no child transforms. (Likely due to an incompatible reskin mod)"); } } else { ModBase.instance.mls.LogError((object)"Could not find head parent bone. Possibly missing or renamed? Head must be parented to \"springBone.002\"."); } if ((Object)(object)head == (Object)null) { ModBase.instance.mls.LogError((object)"Could not find head transform. Destroying script. (Coil Head should be unaffected by this)"); Object.Destroy((Object)(object)this); } else { ModBase.instance.mls.LogInfo((object)("Found head transform: " + ((Object)head).name)); } } private List<Transform> FindChildren(Transform parent, string name) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown List<Transform> list = new List<Transform>(); foreach (Transform item in parent) { Transform val = item; if (((Object)val).name == name) { list.Add(val); } else { list.AddRange(FindChildren(val, name)); } } return list; } private void Start() { if ((Object)(object)head != (Object)null) { ModBase.instance.mls.LogInfo((object)"Stare initialization successful. Note: If a reskin is being used and the head does not turn, it is most likely incompatible."); } else { ModBase.instance.mls.LogWarning((object)"Stare initialization unsuccessful. An error has probably occurred."); } } private void Update() { //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_0131: 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_01b7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)coilHeadInstance == (Object)null || (((EnemyAI)coilHeadInstance).isEnemyDead && !keepRunningOnDeath)) { isTurningHead = false; stareTarget = null; return; } if ((Object)(object)head == (Object)null) { ModBase.instance.mls.LogError((object)"Head transform missing. Destroying script."); Object.Destroy((Object)(object)this); return; } if (!isTurningHead) { stareTarget = ((EnemyAI)coilHeadInstance).GetClosestPlayer(false, false, false); } if (!((Object)(object)stareTarget == (Object)null)) { Vector3 val = ((Component)stareTarget.gameplayCamera).transform.position - head.position; float num = Vector3.Distance(head.position, ((Component)((EnemyAI)coilHeadInstance).GetClosestPlayer(false, false, false)).transform.position); if ((double)((EnemyAI)coilHeadInstance).creatureAnimator.GetFloat("walkSpeed") > 0.01 || num > maxStareDistance || Vector3.Angle(head.forward, val) < 5f) { timeSinceMoving = 0f; } else { timeSinceMoving += Time.deltaTime; } if (timeSinceMoving > timeUntilStare) { isTurningHead = true; } else { isTurningHead = false; } if (isTurningHead) { head.forward = Vector3.RotateTowards(head.forward, val, turnHeadSpeed * Time.deltaTime, 0f); } } } } }
BepInEx/plugins/plugins/com.doudgeorges.NoPenaltyOnGordion.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("doudgeorges")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Removes the penalty incurred from deaths on the Company moon.")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0+89a53e49ffe02c9149abf4512309cca1ffa23b32")] [assembly: AssemblyProduct("NoPenaltyOnGordion")] [assembly: AssemblyTitle("com.doudgeorges.NoPenaltyOnGordion")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace NoPenaltyOnGordion { [BepInPlugin("com.doudgeorges.NoPenaltyOnGordion", "NoPenaltyOnGordion", "1.1.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } public static ConfigEntry<string> PenaltyText { get; private set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; PenaltyText = ((BaseUnityPlugin)this).Config.Bind<string>("General", "PenaltyText", "(No penalty from deaths on the Company moon)", "Text displayed in the penalty HUD"); Patch(); Logger.LogInfo((object)"com.doudgeorges.NoPenaltyOnGordion v1.1.0 has loaded!"); } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("com.doudgeorges.NoPenaltyOnGordion"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "com.doudgeorges.NoPenaltyOnGordion"; public const string PLUGIN_NAME = "NoPenaltyOnGordion"; public const string PLUGIN_VERSION = "1.1.0"; } } namespace NoPenaltyOnGordion.Patches { [HarmonyPatch(typeof(HUDManager))] public class HUDManagerPatch { [HarmonyPatch("ApplyPenalty")] [HarmonyPrefix] private static bool ApplyPenaltyPrefix(HUDManager __instance, int playersDead, int bodiesInsured) { if (RoundManager.Instance.currentLevel.levelID == 3) { ((TMP_Text)__instance.statsUIElements.penaltyAddition).text = Plugin.PenaltyText.Value; ((TMP_Text)__instance.statsUIElements.penaltyTotal).text = "DUE: $0"; return false; } return true; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
BepInEx/plugins/plugins/com.spycibot.cozyimprovements.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using SpyciBot.LC.CozyImprovements.Improvements; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.spycibot.cozyimprovements")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("\r\n Enhance the experience inside the ship to create a more immersive, cozy, and accessible environment. v47 compatible.\r\n ")] [assembly: AssemblyFileVersion("1.2.2.0")] [assembly: AssemblyInformationalVersion("1.2.2+39da0e927e7ba9e69220c8a7b7ef50abc7f605fb")] [assembly: AssemblyProduct("Cozy Improvements")] [assembly: AssemblyTitle("com.spycibot.cozyimprovements")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SpyciBot.LC.CozyImprovements { public class Config { public ConfigEntry<bool> configStorageLights; public ConfigEntry<bool> configLightSwitchGlow; public ConfigEntry<bool> configTerminalGlow; public ConfigEntry<bool> configTerminalMonitorAlwaysOn; public ConfigEntry<bool> configChargeStationGlow; public ConfigEntry<bool> configBigDoorButtons; public ConfigEntry<bool> configEasyLaunchLever; public ConfigEntry<bool> configBigTeleporterButtons; public ConfigEntry<bool> configBigMonitorButtons; public Config(ConfigFile cfg) { configStorageLights = cfg.Bind<bool>("General", "StorageLightsEnabled", true, "Enables the Storage Lights System"); configLightSwitchGlow = cfg.Bind<bool>("General", "LightSwitchGlowEnabled", true, "Makes the LightSwitch glow in the dark"); configTerminalGlow = cfg.Bind<bool>("General", "TerminalGlowEnabled", true, "Makes the Terminal glow active all the time"); configTerminalMonitorAlwaysOn = cfg.Bind<bool>("General", "TerminalMonitorAlwaysOn", true, "Makes the Terminal screen active all the time; Will show the screen you left it on"); configChargeStationGlow = cfg.Bind<bool>("General", "ChargeStationGlowEnabled", true, "Makes the Charging Station glow with a yellow light"); configBigDoorButtons = cfg.Bind<bool>("General.Accessibility", "BigDoorButtonsEnabled", false, "Enlarges the door buttons so they're easier to press"); configEasyLaunchLever = cfg.Bind<bool>("General.Accessibility", "EasyLaunchLeverEnabled", true, "Enlarges the hitbox for the Launch Lever to cover more of the table so it's easier to pull"); configBigTeleporterButtons = cfg.Bind<bool>("General.Accessibility", "BigTeleporterButtonsEnabled", false, "Enlarges the teleporter buttons so they're easier to press"); configBigMonitorButtons = cfg.Bind<bool>("General.Accessibility", "BigMonitorButtonsEnabled", false, "Enlarges the Monitor buttons so they're easier to press"); } } [BepInPlugin("com.spycibot.cozyimprovements", "Cozy Improvements", "1.2.2")] [HarmonyPatch] public class CozyImprovements : BaseUnityPlugin { private static GameObject gameObject; private static Terminal TermInst; public static Config CozyConfig { get; internal set; } private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Cozy Improvements - com.spycibot.cozyimprovements - 1.2.2 is loaded!"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); CozyConfig = new Config(((BaseUnityPlugin)this).Config); } [HarmonyPatch(typeof(Terminal), "Start")] [HarmonyPostfix] private static void Postfix_Terminal_Start(Terminal __instance) { TermInst = __instance; if (CozyConfig.configTerminalMonitorAlwaysOn.Value) { TermInst.LoadNewNode(TermInst.terminalNodes.specialNodes[1]); } if (CozyConfig.configTerminalGlow.Value) { ((Behaviour)TermInst.terminalLight).enabled = true; } } [HarmonyPatch(typeof(Terminal), "waitUntilFrameEndToSetActive")] [HarmonyPrefix] private static void Prefix_Terminal_WaitUntilFrameEndToSetActive(Terminal __instance, ref bool active) { TermInst = __instance; if (CozyConfig.configTerminalMonitorAlwaysOn.Value) { active = true; } } [HarmonyPatch(typeof(Terminal), "SetTerminalInUseClientRpc")] [HarmonyPostfix] private static void Postfix_Terminal_SetTerminalInUseClientRpc(Terminal __instance, bool inUse) { TermInst = __instance; if (CozyConfig.configTerminalGlow.Value) { ((Behaviour)TermInst.terminalLight).enabled = true; } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerConnectedClientRpc")] [HarmonyPostfix] private static void PostfixOnPlayerConnectedClientRpc(StartOfRound __instance, ulong clientId, int connectedPlayers, ulong[] connectedPlayerIdsOrdered, int assignedPlayerObjectId, int serverMoneyAmount, int levelID, int profitQuota, int timeUntilDeadline, int quotaFulfilled, int randomSeed) { if (clientId == NetworkManager.Singleton.LocalClientId) { DoAllTheThings(); } } [HarmonyPatch(typeof(StartOfRound), "LoadUnlockables")] [HarmonyPostfix] private static void PostfixLoadUnlockables(StartOfRound __instance) { DoAllTheThings(); } private static void DoAllTheThings() { try { manageInteractables(); } catch (Exception arg) { Debug.LogError((object)$"Caught Exception in manageInteractables(): {arg}"); } try { manageStorageCupboard(); } catch (Exception arg2) { Debug.LogError((object)$"Caught Exception in manageStorageCupboard(): {arg2}"); } } private static void manageInteractables() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) _ = GameNetworkManager.Instance.localPlayerController; GameObject[] array = GameObject.FindGameObjectsWithTag("InteractTrigger"); for (int i = 0; i < array.Length; i++) { if (((Object)array[i]).name == "LightSwitch" && CozyConfig.configLightSwitchGlow.Value) { makeEmissive(array[i], new Color32((byte)182, (byte)240, (byte)150, (byte)102)); makeEmissive(((Component)array[i].transform.GetChild(0)).gameObject, new Color32((byte)241, (byte)80, (byte)80, (byte)10), 0.15f); } if (((Object)array[i]).name == "Trigger" && ((Object)((Component)array[i].transform.parent).gameObject).name == "ChargeStationTrigger" && CozyConfig.configChargeStationGlow.Value) { GameObject val = ((Component)array[i].transform.parent.parent).gameObject; GameObject val2 = new GameObject("ChargeStationLight"); Light obj = val2.AddComponent<Light>(); obj.type = (LightType)2; obj.color = Color32.op_Implicit(new Color32((byte)240, (byte)240, (byte)140, byte.MaxValue)); obj.intensity = 0.05f; obj.range = 0.3f; obj.shadows = (LightShadows)2; val2.layer = LayerMask.NameToLayer("Room"); val2.transform.localPosition = new Vector3(0.5f, 0f, 0f); val2.transform.SetParent(val.transform, false); } if (((Object)array[i]).name == "Cube (2)" && ((Object)((Component)array[i].transform.parent).gameObject).name.StartsWith("CameraMonitor") && CozyConfig.configBigMonitorButtons.Value) { Accessibility.adjustMonitorButtons(array[i].gameObject); } } } private static void makeEmissive(GameObject gameObject, Color32 glowColor, float brightness = 0.02f) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) MeshRenderer component = gameObject.GetComponent<MeshRenderer>(); Material material = ((Renderer)component).material; material.SetColor("_EmissiveColor", Color32.op_Implicit(glowColor) * brightness); ((Renderer)component).material = material; } private static void manageStorageCupboard() { PlaceableShipObject[] array = Object.FindObjectsOfType<PlaceableShipObject>(); for (int i = 0; i < array.Length; i++) { UnlockableItem obj = StartOfRound.Instance.unlockablesList.unlockables[array[i].unlockableID]; _ = obj.unlockableType; if (obj.unlockableName == "Cupboard") { gameObject = ((Component)array[i].parentObject).gameObject; break; } } if (!((Object)(object)gameObject == (Object)null) && CozyConfig.configStorageLights.Value) { spawnStorageLights(gameObject); } } private static void spawnStorageLights(GameObject storageCloset) { //IL_004f: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0108: 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_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) float num = -1.1175f; List<float> obj = new List<float> { 2.804f, 2.163f, 1.48f, 0.999f }; float num2 = 0.55f; float num3 = obj[0]; AttachLightToStorageCloset(storageCloset, new Vector3(num - num2, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num + num2, 0.4f, num3)); num3 = obj[1]; AttachLightToStorageCloset(storageCloset, new Vector3(num - num2, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num + num2, 0.4f, num3)); num3 = obj[2]; AttachLightToStorageCloset(storageCloset, new Vector3(num - num2, 0.4f, num3), 2f); AttachLightToStorageCloset(storageCloset, new Vector3(num, 0.4f, num3), 2f); AttachLightToStorageCloset(storageCloset, new Vector3(num + num2, 0.4f, num3), 2f); num3 = obj[3]; AttachLightToStorageCloset(storageCloset, new Vector3(num - num2, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num, 0.4f, num3)); AttachLightToStorageCloset(storageCloset, new Vector3(num + num2, 0.4f, num3)); } private static void AttachLightToStorageCloset(GameObject storageCloset, Vector3 lightPositionOffset, float intensity = 3f) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_003f: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("StorageClosetLight"); MeshFilter val2 = val.AddComponent<MeshFilter>(); MeshRenderer obj = val.AddComponent<MeshRenderer>(); GameObject val3 = GameObject.CreatePrimitive((PrimitiveType)0); val2.mesh = val3.GetComponent<MeshFilter>().mesh; Material val4 = new Material(Shader.Find("HDRP/Lit")); Color val5 = Color32.op_Implicit(new Color32((byte)249, (byte)240, (byte)202, byte.MaxValue)); val4.SetColor("_BaseColor", val5); float num = 1f; val4.SetColor("_EmissiveColor", val5 * num); ((Renderer)obj).material = val4; Object.DestroyImmediate((Object)(object)val3); Light obj2 = val.AddComponent<Light>(); obj2.type = (LightType)0; obj2.color = val5; obj2.intensity = intensity; obj2.range = 1.05f; obj2.spotAngle = 125f; obj2.shadows = (LightShadows)2; val.layer = LayerMask.NameToLayer("Room"); val.transform.localScale = new Vector3(0.125f, 0.125f, 0.04f); val.transform.localPosition = lightPositionOffset; val.transform.rotation = Quaternion.Euler(170f, 0f, 0f); val.transform.SetParent(storageCloset.transform, false); } private static string padString(string baseStr, char padChar, int width) { int totalWidth = (width - (baseStr.Length + 8)) / 2 + (baseStr.Length + 8); return (" " + baseStr + " ").PadLeft(totalWidth, padChar).PadRight(width, padChar); } private static void obviousDebug(string baseStr) { Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Debug.Log((object)padString(baseStr ?? "", '~', 65)); Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Debug.Log((object)"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); } } public static class PluginInfo { public const string PLUGIN_GUID = "com.spycibot.cozyimprovements"; public const string PLUGIN_NAME = "Cozy Improvements"; public const string PLUGIN_VERSION = "1.2.2"; } } namespace SpyciBot.LC.CozyImprovements.Improvements { [HarmonyPatch] public static class Accessibility { private static HangarShipDoor hangarShipDoor; [HarmonyPatch(typeof(StartMatchLever), "Start")] [HarmonyPostfix] private static void Postfix_StartMatchLever_Start(StartMatchLever __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (CozyImprovements.CozyConfig.configEasyLaunchLever.Value) { ((Component)__instance).transform.localScale = new Vector3(1.139f, 0.339f, 1.539f); ((Component)__instance).transform.localPosition = new Vector3(8.7938f, 1.479f, -7.0767f); ((Component)__instance).transform.GetChild(0).position = new Vector3(8.8353f, 0.2931f, -14.5767f); } } [HarmonyPatch(typeof(HangarShipDoor), "Start")] [HarmonyPostfix] private static void Postfix_HangarShipDoor_Start(HangarShipDoor __instance) { //IL_0043: 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_00ad: 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) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_014b: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) //IL_033b: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) if (!CozyImprovements.CozyConfig.configBigDoorButtons.Value) { return; } hangarShipDoor = __instance; GameObject gameObject = ((Component)__instance.hydraulicsDisplay.transform.parent).gameObject; gameObject.transform.localScale = new Vector3(-2f, -2f, -2f); gameObject.transform.localPosition = new Vector3(-5.2085f, 1.8882f, -8.823f); GameObject gameObject2 = ((Component)gameObject.transform.Find("StartButton")).gameObject; GameObject gameObject3 = ((Component)gameObject.transform.Find("StopButton")).gameObject; gameObject3.transform.localScale = new Vector3(-1.1986f, -0.1986f, -1.1986f); gameObject2.transform.localScale = gameObject3.transform.localScale; gameObject2.transform.GetChild(0).localPosition = gameObject3.transform.GetChild(0).localPosition; gameObject2.transform.GetChild(0).localScale = gameObject3.transform.GetChild(0).localScale; Material[] materials = ((Renderer)gameObject2.GetComponent<MeshRenderer>()).materials; for (int i = 0; i < materials.Length; i++) { if (((Object)materials[i]).name == "GreenButton (Instance)") { materials[i].SetColor("_EmissiveColor", Color32.op_Implicit(new Color32((byte)39, (byte)51, (byte)39, byte.MaxValue))); } if (((Object)materials[i]).name == "ButtonWhite (Instance)") { materials[i].SetColor("_EmissiveColor", Color32.op_Implicit(new Color32((byte)179, (byte)179, (byte)179, byte.MaxValue))); } } ((Renderer)gameObject2.GetComponent<MeshRenderer>()).materials = materials; Material[] materials2 = ((Renderer)gameObject3.GetComponent<MeshRenderer>()).materials; for (int j = 0; j < materials2.Length; j++) { if (((Object)materials2[j]).name == "RedButton (Instance)") { materials2[j].SetColor("_EmissiveColor", Color32.op_Implicit(new Color32((byte)64, (byte)24, (byte)24, byte.MaxValue))); } if (((Object)materials2[j]).name == "ButtonWhite (Instance)") { materials2[j].SetColor("_EmissiveColor", Color32.op_Implicit(new Color32((byte)179, (byte)179, (byte)179, byte.MaxValue))); } } ((Renderer)gameObject3.GetComponent<MeshRenderer>()).materials = materials2; Transform child = gameObject.transform.Find("StartButton").GetChild(0); Transform child2 = gameObject.transform.Find("StopButton").GetChild(0); ((Renderer)((Component)child).GetComponent<MeshRenderer>()).material.color = Color32.op_Implicit(new Color32((byte)39, byte.MaxValue, (byte)39, byte.MaxValue)); ((Renderer)((Component)child2).GetComponent<MeshRenderer>()).material.color = Color32.op_Implicit(new Color32(byte.MaxValue, (byte)24, (byte)24, byte.MaxValue)); Vector3 position = default(Vector3); ((Vector3)(ref position))..ctor(-3.7205f, 2.0504f, -16.3018f); Vector3 localScale = default(Vector3); ((Vector3)(ref localScale))..ctor(0.7393f, 0.4526f, 0.6202f); Vector3 localScale2 = default(Vector3); ((Vector3)(ref localScale2))..ctor(0.003493f, 0.000526f, 0.002202f); child.position = position; child.localScale = localScale; child2.position = position; child2.localScale = localScale2; } [HarmonyPatch(typeof(StartOfRound), "SetShipDoorsClosed")] [HarmonyPostfix] private static void Postfix_StartOfRound_SetShipDoorsClosed(StartOfRound __instance, bool closed) { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) if (CozyImprovements.CozyConfig.configBigDoorButtons.Value) { GameObject gameObject = ((Component)hangarShipDoor.hydraulicsDisplay.transform.parent).gameObject; Transform child = gameObject.transform.Find("StartButton").GetChild(0); Transform child2 = gameObject.transform.Find("StopButton").GetChild(0); Vector3 localScale = default(Vector3); ((Vector3)(ref localScale))..ctor(0.7393f, 0.4526f, 0.6202f); Vector3 localScale2 = default(Vector3); ((Vector3)(ref localScale2))..ctor(0.003493f, 0.000526f, 0.002202f); child.localScale = localScale; child2.localScale = localScale; if (closed) { child.localScale = localScale; child2.localScale = localScale2; } else { child2.localScale = localScale; child.localScale = localScale2; } } } [HarmonyPatch(typeof(ShipTeleporter), "Awake")] [HarmonyPostfix] private static void Postfix_ShipTeleporter_Awake(ShipTeleporter __instance) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (CozyImprovements.CozyConfig.configBigTeleporterButtons.Value) { ((Component)((Component)__instance.buttonTrigger).gameObject.transform.parent).gameObject.transform.localScale = Vector3.one * 3f; } } public static void adjustMonitorButtons(GameObject ButtonCube) { //IL_0038: 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) if (CozyImprovements.CozyConfig.configBigMonitorButtons.Value) { GameObject gameObject = ((Component)ButtonCube.transform.parent).gameObject; gameObject.transform.localScale = new Vector3(1.852f, 1.8475f, 1.852f); if (((Object)gameObject).name == "CameraMonitorSwitchButton") { gameObject.transform.localPosition = new Vector3(-0.28f, -1.807f, -0.29f); } } } } }
BepInEx/plugins/plugins/CrouchToStand.dll
Decompiled 2 months agousing System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("CrouchToStand")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("CrouchToStand")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("666C668E-9A5E-40B0-BA2F-6CD63B92BDAD")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: AssemblyVersion("1.0.0.0")] namespace CrouchToStand; [BepInPlugin("Mhz.CrouchToStand", "CrouchToStand", "1.0.0")] public class StandUp : BaseUnityPlugin { [HarmonyPatch(typeof(PlayerControllerB), "Jump_performed")] private class JumpPerformedPatch { private static void Prefix(PlayerControllerB __instance) { ((MonoBehaviour)__instance).StartCoroutine(PerformDelayedAction(__instance)); } } private static Harmony _harmony; private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown _harmony = new Harmony("Mhz.CrouchToStand"); _harmony.PatchAll(); } private static IEnumerator PerformDelayedAction(PlayerControllerB instance) { yield return null; if (instance.isCrouching) { instance.Crouch(false); } } }
BepInEx/plugins/plugins/DynamicDeadline1.2.2.dll
Decompiled 2 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DynamicDeadlineMod.Patches; using HarmonyLib; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("DynamicDeadlineMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DynamicDeadlineMod")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("78c98d39-8b11-4a2c-bccb-e32338f5bacf")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace DynamicDeadlineMod { [BepInPlugin("Haha.DynamicDeadline", "Dynamic Deadline", "1.2.2")] public class DynamicDeadlineMod : BaseUnityPlugin { private const string modGUID = "Haha.DynamicDeadline"; private const string modName = "Dynamic Deadline"; private const string modVersion = "1.2.2"; private readonly Harmony harmony = new Harmony("Haha.DynamicDeadline"); public static DynamicDeadlineMod Instance; internal static ConfigEntry<float> MinScrapValuePerDay; internal static ConfigEntry<bool> legacyCal; internal static ConfigEntry<float> legacyDailyValue; internal static ConfigEntry<bool> useMinMax; internal static ConfigEntry<float> setMinimumDays; internal static ConfigEntry<float> setMaximumDays; internal ManualLogSource mls; internal void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("Dynamic Deadline"); mls.LogInfo((object)"No more short deadlines for excessive quotas."); MinScrapValuePerDay = ((BaseUnityPlugin)this).Config.Bind<float>("Customizable Values", "Minimum Daily ScrapValue", 200f, "Set this value to the minimum scrap value you should achieve per day. This will ignore the calculation for daily scrap if it's below this number."); useMinMax = ((BaseUnityPlugin)this).Config.Bind<bool>("Customizable Values", "Use Custom Deadline Range", false, "Set to true if you want to use the custom minimum/maximum deadline range."); setMinimumDays = ((BaseUnityPlugin)this).Config.Bind<float>("Customizable Values", "Minimum Deadline", 3f, "If Use Custom Deadline Range is enabled, this is the minimum deadline you will have."); setMaximumDays = ((BaseUnityPlugin)this).Config.Bind<float>("Customizable Values", "Maximum Deadline", float.MaxValue, "If use Custom Deadline Range is enabled, this is the maximum deadline you will have."); legacyCal = ((BaseUnityPlugin)this).Config.Bind<bool>("Customizeable Values - Legacy", "Legacy Calculations", false, "Set to true if you want to use the deadline calculation from 1.1.0 prior."); legacyDailyValue = ((BaseUnityPlugin)this).Config.Bind<float>("Customizeable Values - Legacy", "Daily Scrap Value", 200f, "Set this number to the value of scrap you can reasonably achieve in a single day."); harmony.PatchAll(typeof(DynamicDeadlineMod)); harmony.PatchAll(typeof(ProfitQuotaPatch)); } } } namespace DynamicDeadlineMod.Patches { [HarmonyPatch(typeof(TimeOfDay), "SyncTimeClientRpc")] public class FixTheDeadline { [HarmonyPrefix] public static void DeadlineBroke() { string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName; float num; if (ES3.KeyExists("totalOfAverage")) { num = ES3.Load<float>("totalOfAverage", currentSaveFileName, 0f); } else { ES3.Save<float>("totalOfAverage", 0f, currentSaveFileName); num = ES3.Load<float>("totalOfAverage", currentSaveFileName, 0f); } if (num < DynamicDeadlineMod.MinScrapValuePerDay.Value * (float)TimeOfDay.Instance.timesFulfilledQuota) { num = DynamicDeadlineMod.MinScrapValuePerDay.Value * (float)TimeOfDay.Instance.timesFulfilledQuota; float num2 = num / (float)TimeOfDay.Instance.timesFulfilledQuota; float num3 = Mathf.Clamp(Mathf.Ceil((float)TimeOfDay.Instance.profitQuota / num2), 3f, float.MaxValue); ES3.Save<float>("totalOfAverage", num, currentSaveFileName); TimeOfDay.Instance.timeUntilDeadline = 700f * num3; ES3.Save<float>("previousDeadline", num3, currentSaveFileName); } } } [HarmonyPatch(typeof(GameNetworkManager), "ResetSavedGameValues")] public class ResetSavedValuesPatch { [HarmonyPrefix] public static void ResetSavedValues() { string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName; ES3.Save<float>("previousDeadline", 3f, currentSaveFileName); ES3.Save<float>("totalOfAverage", 0f, currentSaveFileName); } } [HarmonyPatch(typeof(TimeOfDay), "SetNewProfitQuota")] public class ProfitQuotaPatch { private static float quotaFulfilled; [HarmonyPrefix] public static void GetQuotaFulfilled() { quotaFulfilled = TimeOfDay.Instance.quotaFulfilled; } [HarmonyPostfix] private static void DynamicDeadline(TimeOfDay __instance) { string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName; bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost; float num = TimeOfDay.Instance.timesFulfilledQuota; float num2 = ((!DynamicDeadlineMod.useMinMax.Value) ? 3f : DynamicDeadlineMod.setMinimumDays.Value); float num3 = ((!DynamicDeadlineMod.useMinMax.Value) ? float.MaxValue : DynamicDeadlineMod.setMaximumDays.Value); float num4; if (ES3.KeyExists("previousDeadline")) { num4 = ES3.Load<float>("previousDeadline", currentSaveFileName, 3f); DynamicDeadlineMod.Instance.mls.LogInfo((object)$"Successfully loaded the previous totalOfAverage variable! totalofAverage is: {num4}"); } else { ES3.Save<float>("previousDeadline", 3f, currentSaveFileName); num4 = ES3.Load<float>("previousDeadline", currentSaveFileName, 3f); DynamicDeadlineMod.Instance.mls.LogInfo((object)"Could not load previousDeadline variable as it does not exist! Creating now!"); } float num5; if (ES3.KeyExists("totalOfAverage")) { num5 = ES3.Load<float>("totalOfAverage", currentSaveFileName, 0f); DynamicDeadlineMod.Instance.mls.LogInfo((object)$"Successfully loaded the previous totalOfAverage variable! totalofAverage is: {num5}"); } else { ES3.Save<float>("totalOfAverage", 0f, currentSaveFileName); num5 = ES3.Load<float>("totalOfAverage", currentSaveFileName, 0f); DynamicDeadlineMod.Instance.mls.LogInfo((object)"Could not load totalOfAverage variable as it does not exist! Creating now!"); } if (isHost && !DynamicDeadlineMod.legacyCal.Value) { float num6 = Mathf.Clamp(Mathf.Ceil(quotaFulfilled / num4), DynamicDeadlineMod.MinScrapValuePerDay.Value, 1000f); if (num5 == 0f && num != 0f) { num5 = DynamicDeadlineMod.MinScrapValuePerDay.Value * num - 1f; } float num7 = num5 / num; float num8 = Mathf.Clamp(Mathf.Ceil((float)__instance.profitQuota / num7), num2, num3); num5 += num6; __instance.timeUntilDeadline = __instance.totalTime * num8; DynamicDeadlineMod.Instance.mls.LogInfo((object)$"This person is the host, changing deadline. DailyValue registered as {num6}, new average is {num7}, and host is currently on their {num} run!"); TimeOfDay.Instance.SyncTimeClientRpc(__instance.globalTime, (int)__instance.timeUntilDeadline); DynamicDeadlineMod.Instance.mls.LogInfo((object)$"The new deadline is {num8} days."); num4 = num8; DynamicDeadlineMod.Instance.mls.LogInfo((object)$"Did the value get assigned properly? Previous deadline is {num4}"); ES3.Save<float>("previousDeadline", num4, currentSaveFileName); ES3.Save<float>("totalOfAverage", num5, currentSaveFileName); } else if (isHost && DynamicDeadlineMod.legacyCal.Value) { __instance.timeUntilDeadline = __instance.totalTime * Mathf.Clamp(Mathf.Ceil((float)__instance.profitQuota / DynamicDeadlineMod.legacyDailyValue.Value), num2, num3); DynamicDeadlineMod.Instance.mls.LogInfo((object)"This person is the host and using the legacy difficulty calculations. Changing deadline."); TimeOfDay.Instance.SyncTimeClientRpc(__instance.globalTime, (int)__instance.timeUntilDeadline); } else { DynamicDeadlineMod.Instance.mls.LogInfo((object)"This person is not the host. Will not change deadline or send rpc."); } } } }
BepInEx/plugins/plugins/EladsHUD.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using CustomHUD; using GameNetcodeStuff; using HarmonyLib; using Jotunn.Utils; using Microsoft.CodeAnalysis; using TMPro; using Unity.Netcode; using UnityEngine; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EladsHUD")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Custom HUD for lethal company :]")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0")] [assembly: AssemblyProduct("EladsHUD")] [assembly: AssemblyTitle("EladsHUD")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public enum PocketFlashlightOptions { Disabled, Vanilla, Separate } public enum StaminaTextOptions { Disabled, PercentageOnly, Full } internal class CustomHUD_Mono : MonoBehaviour { public static CustomHUD_Mono instance; [Header("Health")] public CanvasGroup healthGroup; public Image healthBar; public TextMeshProUGUI healthText; public TextMeshProUGUI healthText2; [Header("Stamina")] public CanvasGroup staminaGroup; public Image staminaBar; public Image staminaBarChangeFG; public TextMeshProUGUI staminaText; public TextMeshProUGUI carryText; [Header("Battery")] public CanvasGroup batteryGroup; public Image batteryBar; public TextMeshProUGUI batteryText; [Header("Flashlight")] public CanvasGroup flashlightGroup; public Image flashlightBar; public TextMeshProUGUI flashlightText; private Color staminaColor; private Color staminaWarnColor = new Color(255f, 0f, 0f); private float colorLerp; private int lastHealth = 100; private float lastHealthChange = 0f; private void Awake() { if ((Object)(object)instance != (Object)null) { throw new Exception("2 instances of CustomHUD_Mono!"); } instance = this; } private void Start() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) staminaColor = ((Graphic)staminaBar).color; } public void UpdateFromPlayer(PlayerControllerB player) { //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) lastHealthChange += Time.deltaTime; if (player.health < lastHealth) { Debug.Log((object)"o shit"); Debug.Log((object)player.health); Debug.Log((object)lastHealth); lastHealthChange = 0f; } lastHealth = player.health; int health = player.health; float sprintMeter = player.sprintMeter; float sprintTime = player.sprintTime; if ((double)sprintMeter < 0.3) { colorLerp = Mathf.Clamp01(colorLerp + Time.deltaTime * 8f); } else { colorLerp = Mathf.Clamp01(colorLerp - Time.deltaTime * 8f); } ((Graphic)staminaBar).color = Color.Lerp(staminaColor, staminaWarnColor, colorLerp); int num = Mathf.FloorToInt(sprintMeter * 100f); float num2 = CalculateStaminaOverTime(player); float num3 = num2 * 100f; if (Plugin.detailedStamina.Value != 0) { ((TMP_Text)staminaText).text = $"{num}<size=75%><voffset=1>%</voffset></size>"; } else { ((TMP_Text)staminaText).text = ""; } float num4 = Mathf.Sign(num2); float num5 = num4; if (num5 != -1f) { if (num5 != 0f) { if (num5 != 1f) { } staminaBar.fillAmount = sprintMeter; staminaBarChangeFG.fillAmount = 0f; if (Plugin.detailedStamina.Value == StaminaTextOptions.Full) { TextMeshProUGUI obj = staminaText; ((TMP_Text)obj).text = ((TMP_Text)obj).text + " | +" + num3.ToString("0.0") + "<size=75%>/sec</size>"; } } else { staminaBar.fillAmount = sprintMeter; staminaBarChangeFG.fillAmount = 0f; if (Plugin.detailedStamina.Value == StaminaTextOptions.Full) { TextMeshProUGUI obj2 = staminaText; ((TMP_Text)obj2).text = ((TMP_Text)obj2).text + " | +0.0<size=75%>/sec</size>"; } } } else { staminaBar.fillAmount = sprintMeter - Mathf.Abs(num2); ((Graphic)staminaBarChangeFG).color = Color.Lerp(Color.white, staminaWarnColor, colorLerp); staminaBarChangeFG.fillAmount = Mathf.Min(sprintMeter, Mathf.Abs(num2)); ((Transform)((Graphic)staminaBarChangeFG).rectTransform).localPosition = new Vector3(1f + 276f * Mathf.Max(0f, sprintMeter - Mathf.Abs(num2)) + 0.05f, 0f); if (Plugin.detailedStamina.Value == StaminaTextOptions.Full) { TextMeshProUGUI obj3 = staminaText; ((TMP_Text)obj3).text = ((TMP_Text)obj3).text + " | " + num3.ToString("0.0") + "<size=75%>/sec</size>"; } } float num6 = Mathf.RoundToInt(Mathf.Clamp(player.carryWeight - 1f, 0f, 100f) * 105f); if (Plugin.shouldDoKGConversion) { num6 *= 0.453592f; ((TMP_Text)carryText).text = $"{num6}<size=60%>kg</size>"; } else { ((TMP_Text)carryText).text = $"{num6}<size=60%>lb</size>"; } healthBar.fillAmount = (float)health / 100f; ((TMP_Text)healthText).text = health.ToString(); if ((Object)(object)healthText2 != (Object)null) { ((TMP_Text)healthText2).text = health.ToString(); } float value = Plugin.healthbarHideDelay.Value; healthGroup.alpha = (Plugin.autoHideHealthbar.Value ? Mathf.InverseLerp(value + 1f, value, lastHealthChange) : 1f); ((Component)flashlightGroup).gameObject.SetActive(UpdateFlashlight(player)); ((Component)batteryGroup).gameObject.SetActive(UpdateBattery(player)); } private bool UpdateFlashlight(PlayerControllerB player) { if (Plugin.pocketedFlashlightDisplayMode.Value != PocketFlashlightOptions.Separate) { return false; } if (!((Behaviour)player.helmetLight).enabled) { return false; } GrabbableObject pocketedFlashlight = player.pocketedFlashlight; if ((Object)(object)pocketedFlashlight == (Object)null) { return false; } if (!pocketedFlashlight.itemProperties.requiresBattery) { return false; } flashlightBar.fillAmount = pocketedFlashlight.insertedBattery.charge; int num = Mathf.CeilToInt(pocketedFlashlight.insertedBattery.charge * pocketedFlashlight.itemProperties.batteryUsage); ((TMP_Text)flashlightText).text = $"{Mathf.CeilToInt(pocketedFlashlight.insertedBattery.charge * 100f)}%"; if (!Plugin.displayTimeLeft.Value) { return true; } TextMeshProUGUI obj = flashlightText; ((TMP_Text)obj).text = ((TMP_Text)obj).text + string.Format(" <size=60%>{0}:{1}", num / 60, (num % 60).ToString("D2")); return true; } private bool UpdateBattery(PlayerControllerB player) { GrabbableObject val = player.currentlyHeldObjectServer; if ((Object)(object)val == (Object)null && Plugin.pocketedFlashlightDisplayMode.Value == PocketFlashlightOptions.Vanilla) { val = player.pocketedFlashlight; } if ((Object)(object)val == (Object)null) { return false; } if (!val.itemProperties.requiresBattery) { return false; } batteryBar.fillAmount = val.insertedBattery.charge; int num = (int)(val.insertedBattery.charge / val.itemProperties.batteryUsage); int num2 = Mathf.CeilToInt(val.insertedBattery.charge * val.itemProperties.batteryUsage); ((TMP_Text)batteryText).text = $"{Mathf.CeilToInt(val.insertedBattery.charge * 100f)}%"; if (!Plugin.displayTimeLeft.Value) { return true; } if (val.itemProperties.itemIsTrigger) { TextMeshProUGUI obj = batteryText; ((TMP_Text)obj).text = ((TMP_Text)obj).text + $" ({num} uses remaining)"; } else { TextMeshProUGUI obj2 = batteryText; ((TMP_Text)obj2).text = ((TMP_Text)obj2).text + string.Format(" ({0}:{1} remaining)", num2 / 60, (num2 % 60).ToString("D2")); } return true; } private float CalculateStaminaOverTime(PlayerControllerB player) { if (player.sprintMeter == 1f) { return 0f; } bool privateField = player.GetPrivateField<bool>("isWalking"); float sprintTime = player.sprintTime; float num = 1f; if ((double)player.drunkness > 0.019999999552965164) { num *= Mathf.Abs(StartOfRound.Instance.drunknessSpeedEffect.Evaluate(player.drunkness) - 1.25f); } return player.isSprinting ? (-1f / sprintTime * player.carryWeight * num) : ((player.isMovementHindered > 0 && privateField) ? (-1f / sprintTime * num * 0.5f) : ((!privateField) ? (1f / (sprintTime + 4f) * num) : (1f / (sprintTime + 9f) * num))); } } namespace EladsHUD { public static class PluginInfo { public const string PLUGIN_GUID = "EladsHUD"; public const string PLUGIN_NAME = "EladsHUD"; public const string PLUGIN_VERSION = "1.3.0"; } } namespace CustomHUD { [BepInPlugin("me.eladnlg.customhud", "Elads HUD", "1.2.3")] public class Plugin : BaseUnityPlugin { public static Plugin instance; public AssetBundle assets; public GameObject HUD; public static bool shouldDoKGConversion; internal static ConfigEntry<PocketFlashlightOptions> pocketedFlashlightDisplayMode; internal static ConfigEntry<StaminaTextOptions> detailedStamina; internal static ConfigEntry<bool> displayTimeLeft; internal static ConfigEntry<float> hudScale; internal static ConfigEntry<bool> autoHideHealthbar; internal static ConfigEntry<float> healthbarHideDelay; internal static ConfigEntry<bool> hidePlanetInfo; private void Awake() { //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown if ((Object)(object)instance != (Object)null) { throw new Exception("what the cuck??? more than 1 plugin instance."); } instance = this; hudScale = ((BaseUnityPlugin)this).Config.Bind<float>("General", "HUDScale", 1f, "The size of the HUD."); autoHideHealthbar = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HideHealthbarAutomatically", true, "Should the healthbar be hidden after not taking damage for a while."); healthbarHideDelay = ((BaseUnityPlugin)this).Config.Bind<float>("General", "HealthbarHideDelay", 4f, "The amount of time before the healthbar starts fading away."); pocketedFlashlightDisplayMode = ((BaseUnityPlugin)this).Config.Bind<PocketFlashlightOptions>("General", "FlashlightBattery", PocketFlashlightOptions.Separate, "How the flashlight battery is displayed whilst unequipped.\r\nDisabled - Flashlight battery will not be displayed.\r\nVanilla - Flashlight battery will be displayed when you don't have a battery-using item equipped.\r\nSeparate - Flashlight battery will be displayed using a dedicated panel. (recommended)"); detailedStamina = ((BaseUnityPlugin)this).Config.Bind<StaminaTextOptions>("General", "DetailedStamina", StaminaTextOptions.PercentageOnly, "What the stamina text should display.\r\nDisabled - The stamina text will be hidden.\r\nPercentageOnly - Only the percentage will be displayed. (recommended)\r\nFull - Both percentage and rate of gain/loss will be displayed."); displayTimeLeft = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DisplayTimeLeft", true, "Should the uses/time left for a battery-using item be displayed."); hidePlanetInfo = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HidePlanetInfo", false, "Should planet info be hidden. If modifying from an in-game menu, this requires you to rejoin the game."); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Elad's HUD is loaded!"); assets = AssetUtils.LoadAssetBundleFromResources("customhud", typeof(PlayerPatches).Assembly); HUD = assets.LoadAsset<GameObject>("PlayerInfo"); Harmony val = new Harmony("me.eladnlg.customhud"); val.PatchAll(Assembly.GetExecutingAssembly()); } private void Start() { ((BaseUnityPlugin)this).Logger.LogInfo((object)(Chainloader.PluginInfos.Count + " plugins loaded")); foreach (KeyValuePair<string, PluginInfo> pluginInfo in Chainloader.PluginInfos) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin GUID: " + pluginInfo.Value.Metadata.GUID)); } shouldDoKGConversion = Chainloader.PluginInfos.Any((KeyValuePair<string, PluginInfo> pair) => pair.Value.Metadata.GUID == "com.zduniusz.lethalcompany.lbtokg"); } } [HarmonyPatch(typeof(HUDManager))] public class HUDPatches { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake_Postfix(HUDManager __instance) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) HUDElement[] privateField = __instance.GetPrivateField<HUDElement[]>("HUDElements"); HUDElement val = privateField[2]; GameObject val2 = Object.Instantiate<GameObject>(Plugin.instance.HUD, ((Component)val.canvasGroup).transform.parent); val2.transform.localScale = Vector3.one * 0.75f * Plugin.hudScale.Value; val.canvasGroup.alpha = 0f; Transform val3 = ((Component)val.canvasGroup).transform.Find("CinematicGraphics"); if ((Object)(object)val3 != (Object)null && !Plugin.hidePlanetInfo.Value) { val3.SetParent(val2.transform.parent); } privateField[2].canvasGroup = val2.GetComponent<CanvasGroup>(); } } [HarmonyPatch(typeof(PlayerControllerB))] public static class PlayerPatches { [HarmonyPrefix] [HarmonyPatch("LateUpdate")] private static void LateUpdate_Prefix(PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).IsOwner && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject) && !((Object)(object)CustomHUD_Mono.instance == (Object)null)) { CustomHUD_Mono.instance.UpdateFromPlayer(__instance); } } } internal static class ReflectionUtils { public static T GetPrivateField<T>(this object obj, string field) { return (T)obj.GetType().GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj); } } } namespace Jotunn.Utils { public static class AssetUtils { public const char AssetBundlePathSeparator = '$'; public static Texture2D LoadTexture(string texturePath, bool relativePath = true) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown string text = texturePath; if (relativePath) { text = Path.Combine(Paths.PluginPath, texturePath); } if (!File.Exists(text)) { return null; } if (!text.EndsWith(".png") && !text.EndsWith(".jpg")) { throw new Exception("LoadTexture can only load png or jpg textures"); } byte[] array = File.ReadAllBytes(text); Texture2D val = new Texture2D(2, 2); val.LoadRawTextureData(array); return val; } public static Sprite LoadSpriteFromFile(string spritePath) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) Texture2D val = LoadTexture(spritePath); if ((Object)(object)val != (Object)null) { return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), default(Vector2), 100f); } return null; } public static AssetBundle LoadAssetBundle(string bundlePath) { string text = Path.Combine(Paths.PluginPath, bundlePath); if (!File.Exists(text)) { return null; } return AssetBundle.LoadFromFile(text); } public static AssetBundle LoadAssetBundleFromResources(string bundleName, Assembly resourceAssembly) { if (resourceAssembly == null) { throw new ArgumentNullException("Parameter resourceAssembly can not be null."); } string text = null; try { text = resourceAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(bundleName)); } catch (Exception) { } if (text == null) { Debug.LogError((object)("AssetBundle " + bundleName + " not found in assembly manifest")); return null; } AssetBundle result; using (Stream stream = resourceAssembly.GetManifestResourceStream(text)) { result = AssetBundle.LoadFromStream(stream); } return result; } public static string LoadText(string path) { string text = Path.Combine(Paths.PluginPath, path); if (!File.Exists(text)) { Debug.LogError((object)("Error, failed to load contents from non-existant path: $" + text)); return null; } return File.ReadAllText(text); } public static Sprite LoadSprite(string assetPath) { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) string text = Path.Combine(Paths.PluginPath, assetPath); if (!File.Exists(text)) { return null; } if (text.Contains('$'.ToString())) { string[] array = text.Split('$'); string text2 = array[0]; string text3 = array[1]; AssetBundle val = AssetBundle.LoadFromFile(text2); Sprite result = val.LoadAsset<Sprite>(text3); val.Unload(false); return result; } Texture2D val2 = LoadTexture(text, relativePath: false); if (!Object.op_Implicit((Object)(object)val2)) { return null; } return Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), Vector2.zero); } } }
BepInEx/plugins/plugins/FairGiants.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BlindGiants; using BlindGiants.Patches; using FairGiants; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Collections; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("FairGiants")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright (c) 2024 LegoMaster3650")] [assembly: AssemblyDescription("Makes forest keepers/giants fairer in lethal company.")] [assembly: AssemblyFileVersion("1.1.1")] [assembly: AssemblyInformationalVersion("1.1.1")] [assembly: AssemblyProduct("FairGiants")] [assembly: AssemblyTitle("FairGiants")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace FairGiants { [Serializable] public class ConfigSync { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnRequestSync; public static HandleNamedMessageDelegate <1>__OnRecieveSync; } public static bool Synced; public bool reduceVisionFog; public bool reduceVisionSnow; public int giantFogDivisor; public string snowyPlanets; public bool enhancedAntiCamp; public bool randomWander; public PatchApplyLevel stealthDecaysWhen; public float passiveStealthDecay; public ConfigSync() { reduceVisionFog = Config.file_reduceVisionFog.Value; reduceVisionSnow = Config.file_reduceVisionSnow.Value; giantFogDivisor = Config.file_giantFogDivisor.Value; snowyPlanets = Config.file_snowyPlanets.Value; enhancedAntiCamp = Config.file_enhancedAntiCamp.Value; randomWander = Config.file_randomWander.Value; stealthDecaysWhen = Config.file_stealthDecaysWhen.Value; passiveStealthDecay = Config.file_passiveStealthDecay.Value; } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] public static void Init() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown if (Synced) { return; } Plugin.Log("Syncing configs..."); if (NetworkManager.Singleton.IsHost) { Plugin.Log("Client is host, no need to sync configs!"); CustomMessagingManager customMessagingManager = NetworkManager.Singleton.CustomMessagingManager; object obj = <>O.<0>__OnRequestSync; if (obj == null) { HandleNamedMessageDelegate val = OnRequestSync; <>O.<0>__OnRequestSync = val; obj = (object)val; } customMessagingManager.RegisterNamedMessageHandler("FairGiants-OnRequestSync", (HandleNamedMessageDelegate)obj); Synced = true; } else { Plugin.Log("Requesting config sync"); CustomMessagingManager customMessagingManager2 = NetworkManager.Singleton.CustomMessagingManager; object obj2 = <>O.<1>__OnRecieveSync; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnRecieveSync; <>O.<1>__OnRecieveSync = val2; obj2 = (object)val2; } customMessagingManager2.RegisterNamedMessageHandler("FairGiants-OnRecieveSync", (HandleNamedMessageDelegate)obj2); RequestSync(); } } [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] [HarmonyPostfix] public static void Reset() { Synced = false; Config.Instance = Config.Default; Config.ConfigChanged(); } public static void RequestSync() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsClient) { FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(0, (Allocator)2, -1); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("FairGiants-OnRequestSync", 0uL, val, (NetworkDelivery)3); } } public static void OnRequestSync(ulong clientId, FastBufferReader reader) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsHost) { return; } Plugin.Log($"Client {clientId} requested config sync"); BinaryFormatter binaryFormatter = new BinaryFormatter(); using MemoryStream memoryStream = new MemoryStream(); try { binaryFormatter.Serialize(memoryStream, Config.Default); } catch (Exception arg) { Plugin.LogError($"Error serializing config: {arg}"); return; } byte[] array = memoryStream.ToArray(); FastBufferWriter val = new FastBufferWriter(array.Length + 4, (Allocator)2, -1); try { int num = array.Length; ((FastBufferWriter)(ref val)).WriteValueSafe<int>(ref num, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteBytesSafe(array, -1, 0); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("FairGiants-OnRecieveSync", clientId, val, (NetworkDelivery)3); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } public static void OnRecieveSync(ulong clientId, FastBufferReader reader) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsClient) { return; } Plugin.Log("Recieved config data from host."); if (!((FastBufferReader)(ref reader)).TryBeginRead(4)) { Plugin.LogError("Config sync failed: Could not read size of buffer"); return; } int num = default(int); ((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref num, default(ForPrimitives)); if (!((FastBufferReader)(ref reader)).TryBeginRead(num)) { Plugin.LogError("Config sync failed: Could not read buffer"); return; } byte[] buffer = new byte[num]; ((FastBufferReader)(ref reader)).ReadBytesSafe(ref buffer, num, 0); BinaryFormatter binaryFormatter = new BinaryFormatter(); using MemoryStream serializationStream = new MemoryStream(buffer); try { Config.Instance = (ConfigSync)binaryFormatter.Deserialize(serializationStream); } catch (Exception arg) { Plugin.LogError($"Error deserializing config: {arg}"); return; } Plugin.Log("Config values synced with host!"); Synced = true; Config.ConfigChanged(); } } public enum PatchApplyLevel { Never, Solo, Always } public static class PluginInfo { public const string PLUGIN_GUID = "FairGiants"; public const string PLUGIN_NAME = "FairGiants"; public const string PLUGIN_VERSION = "1.1.1"; } } namespace BlindGiants { public class Config { public static ConfigSync Default; public static ConfigSync Instance; public static ConfigEntry<bool> file_reduceVisionFog; public static ConfigEntry<bool> file_reduceVisionSnow; public static ConfigEntry<int> file_giantFogDivisor; public static ConfigEntry<string> file_snowyPlanets; public static string[] snowyPlanetsList = new string[3] { "Dine", "Rend", "Titan" }; public static ConfigEntry<bool> file_enhancedAntiCamp; public static ConfigEntry<bool> file_randomWander; public static ConfigEntry<PatchApplyLevel> file_stealthDecaysWhen; public static ConfigEntry<float> file_passiveStealthDecay; public static void Bind(ConfigFile config) { //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown file_reduceVisionFog = config.Bind<bool>("Vision", "ReduceVisionFog", true, "If true, divides giant sight range by GiantFogDivisor when a moon is foggy"); file_reduceVisionSnow = config.Bind<bool>("Vision", "ReduceVisionSnow", true, "If true, divides giant sight range by GiantFogDivisor when a moon is snowy"); file_giantFogDivisor = config.Bind<int>("Vision", "GiantFogDivisor", 3, "The amount to divide giant sight range by"); file_snowyPlanets = config.Bind<string>("Vision", "SnowyPlanets", "Dine,Rend,Titan", "Names of planets that should be considered snowy to giants. (Separate with commas, spaces around commas are allowed but will be ignored)"); file_enhancedAntiCamp = config.Bind<bool>("Ship", "EnhancedAntiCamp", true, "If true, fixes some issues with the base game's anti-camp when losing a player near the ship."); file_randomWander = config.Bind<bool>("Ship", "RandomWander", true, "If true, uses custom logic to wander to a random point away from the ship. If false, uses the vanilla point of the furthest point from the ship."); file_stealthDecaysWhen = config.Bind<PatchApplyLevel>("Aggro", "StealthDecaysWhen", PatchApplyLevel.Solo, "When to allow all stealth meters to passively decay when a giant sees no players."); file_passiveStealthDecay = config.Bind<float>("Aggro", "PassiveStealthDecay", 0.2f, new ConfigDescription("How much stealth decays each second when a giant sees no players. Vanilla decay is 0.33", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); Default = new ConfigSync(); Instance = new ConfigSync(); ConfigChanged(); config.SettingChanged += OnSettingChanged; } private static void OnSettingChanged(object sender, SettingChangedEventArgs e) { SetConfigChanged(); } private static void SetConfigChanged() { if (NetworkManager.Singleton.IsHost) { Instance = new ConfigSync(); } ConfigChanged(); } public static void ConfigChanged() { string[] array = Instance.snowyPlanets.Split(','); for (int i = 0; i < array.Length; i++) { array[i] = array[i].Trim(); } snowyPlanetsList = array; } public static bool IsSnowyPlanet(string name) { string[] array = snowyPlanetsList; foreach (string value in array) { if (name.Contains(value)) { return true; } } return false; } } [BepInPlugin("3650.FairGiants", "FairGiants", "1.0.0")] public class Plugin : BaseUnityPlugin { public const string pluginGuid = "3650.FairGiants"; public const string pluginName = "FairGiants"; public const string pluginVersion = "1.0.0"; private static Plugin Instance; private void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Instance == null) { Instance = this; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Patching giants..."); Harmony val = new Harmony("3650.FairGiants"); val.PatchAll(typeof(ForestGiantAIPatch)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Giants patched!"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading config..."); Config.Bind(((BaseUnityPlugin)this).Config); val.PatchAll(typeof(ConfigSync)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Config loaded!"); } public static void Log(string msg) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)msg); } public static void LogError(string msg) { ((BaseUnityPlugin)Instance).Logger.LogError((object)msg); } public static void LogDebug(string msg) { ((BaseUnityPlugin)Instance).Logger.LogDebug((object)msg); } } } namespace BlindGiants.Patches { [HarmonyPatch(typeof(ForestGiantAI))] public class ForestGiantAIPatch { [HarmonyPatch("LookForPlayers")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> SearchDistancePatch(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(true, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(EnemyAI), "GetAllPlayersInLineOfSight", (Type[])null, (Type[])null), (string)null) }).MatchBack(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null) }).Advance(1) .InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(ForestGiantAIPatch), "ClampRange", (Type[])null, (Type[])null)) }) .InstructionEnumeration(); } [HarmonyPatch("GiantSeePlayerEffect")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> FearDistancePatch(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(true, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(EnemyAI), "CheckLineOfSightForPosition", (Type[])null, (Type[])null), (string)null) }).MatchBack(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null) }).Advance(1) .InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(ForestGiantAIPatch), "ClampRange", (Type[])null, (Type[])null)) }) .InstructionEnumeration(); } public static int ClampRange(int range) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Invalid comparison between Unknown and I4 if ((!Config.Instance.reduceVisionFog || (int)TimeOfDay.Instance.currentLevelWeather != 3) && (!Config.Instance.reduceVisionSnow || !Config.IsSnowyPlanet(TimeOfDay.Instance.currentLevel.PlanetName))) { return range; } return range / Config.Instance.giantFogDivisor; } [HarmonyPatch("DoAIInterval")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> GiantRoamPatch(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(EnemyAI), "ChooseFarthestNodeFromPosition", (Type[])null, (Type[])null), (string)null) }).Advance(3).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[6] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(ForestGiantAIPatch), "LeaveShipPatch", (Type[])null, (Type[])null)), new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldloc_1, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(ForestGiantAIPatch), "ChooseFarNodeFromShip", (Type[])null, (Type[])null)), new CodeInstruction(OpCodes.Stloc_1, (object)null) }) .InstructionEnumeration(); } public static Vector3 ChooseFarNodeFromShip(ForestGiantAI ai, Vector3 farPosition) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) if (!Config.Instance.randomWander) { return farPosition; } Vector3 ship = StartOfRound.Instance.elevatorTransform.position; Random random = new Random(((EnemyAI)ai).RoundUpToNearestFive(((Component)ai).transform.position.x) + ((EnemyAI)ai).RoundUpToNearestFive(((Component)ai).transform.position.z)); IEnumerable<(GameObject, float)> source = from node in ((EnemyAI)ai).allAINodes select (node, Vector3.Distance(ship, node.transform.position)) into x where x.dist >= 102f orderby x.dist + (float)random.Next(-12, 12) descending select x; List<GameObject> list = new List<GameObject>(); foreach (GameObject item in source.Select<(GameObject, float), GameObject>(((GameObject node, float dist) x) => x.node)) { list.Add(item); } ((EnemyAI)ai).nodesTempArray = list.ToArray(); List<float> list2 = new List<float>(); foreach (float item2 in source.Select<(GameObject, float), float>(((GameObject node, float dist) x) => x.dist)) { list2.Add(item2); } float[] source2 = list2.ToArray(); if (((EnemyAI)ai).nodesTempArray.Length == 0) { return farPosition; } float num = 0.7f * source2.Sum() / (float)((EnemyAI)ai).nodesTempArray.Length + 0.3f * (source2.First() + source2.Last()); double num2 = (double)(Mathf.Clamp(((double)num < 152.5) ? (-0.8f * (num - 100f) + 50f) : (-0.125f * (num - 152.5f) + 8f), 1f, 50f) * (float)Mathf.Clamp(130 - ((EnemyAI)ai).nodesTempArray.Length, 50, 100)) * 0.0001; Vector3 result = farPosition; for (int i = 1; i < ((EnemyAI)ai).nodesTempArray.Length; i++) { if (random.NextDouble() < num2) { break; } if (!((EnemyAI)ai).PathIsIntersectedByLineOfSight(((EnemyAI)ai).nodesTempArray[i].transform.position, false, false, false)) { ((EnemyAI)ai).mostOptimalDistance = Vector3.Distance(ship, ((EnemyAI)ai).nodesTempArray[i].transform.position); result = ((EnemyAI)ai).nodesTempArray[i].transform.position; if (i >= ((EnemyAI)ai).nodesTempArray.Length - 1) { break; } } } return result; } public static void LeaveShipPatch(ForestGiantAI ai) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown if (Config.Instance.enhancedAntiCamp) { Plugin.Log("Roaming Away"); if (ai.roamPlanet == null) { ai.roamPlanet = new AISearchRoutine(); } ((EnemyAI)ai).StopSearch(ai.roamPlanet, true); ai.roamPlanet.searchWidth = 35f; } } [HarmonyPatch("FinishedCurrentSearchRoutine")] [HarmonyPrefix] public static void GiantFinishSearch(ForestGiantAI __instance) { if (Config.Instance.enhancedAntiCamp) { Plugin.LogDebug("Giant Finished a Search"); if (__instance.roamPlanet != null && __instance.roamPlanet.searchWidth < 200f) { __instance.roamPlanet.searchWidth = 200f; } } } [HarmonyPatch("LookForPlayers")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> AggroPatch(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).End().MatchBack(false, (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_R4, (object)0f, (string)null), new CodeMatch((OpCode?)OpCodes.Stfld, (object)AccessTools.Field(typeof(ForestGiantAI), "timeSpentStaring"), (string)null) }).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[2] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(ForestGiantAIPatch), "LowerAllAggro", (Type[])null, (Type[])null)) }) .InstructionEnumeration(); } public static void LowerAllAggro(ForestGiantAI ai) { if (((EnemyAI)ai).currentBehaviourStateIndex != 0 || Config.Instance.stealthDecaysWhen == PatchApplyLevel.Always || (Config.Instance.stealthDecaysWhen == PatchApplyLevel.Solo && StartOfRound.Instance.connectedPlayersAmount <= 0)) { for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { ai.playerStealthMeters[i] = Mathf.Clamp(ai.playerStealthMeters[i] - Time.deltaTime * Config.Instance.passiveStealthDecay, 0f, 1f); } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
BepInEx/plugins/plugins/Fixes/FireExitFlip.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("FireExitFlip")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("My first plugin")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("FireExitFlip")] [assembly: AssemblyTitle("FireExitFlip")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace FireExitFlip { [BepInPlugin("PC.FireExitFlip", "FireExitFlip", "1.0.0")] public class Plugin : BaseUnityPlugin { private Harmony _harmony; public static Plugin instance; private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin FireExitFlipped is loaded!"); instance = this; _harmony = new Harmony("MyFirstPlugin"); _harmony.PatchAll(); } } public static class PluginInfo { public const string PLUGIN_GUID = "FireExitFlip"; public const string PLUGIN_NAME = "FireExitFlip"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace FireExitFlip.Patches { [HarmonyPatch] internal class FireExitFlipPatcher { [HarmonyPatch(typeof(EntranceTeleport), "TeleportPlayer")] [HarmonyPostfix] public static void FlipPlayer(EntranceTeleport __instance) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (__instance.isEntranceToBuilding && __instance.entranceId > 0) { Transform thisPlayerBody = GameNetworkManager.Instance.localPlayerController.thisPlayerBody; thisPlayerBody.RotateAround(((Component)thisPlayerBody).transform.position, Vector3.up, 180f); } } } }
BepInEx/plugins/plugins/Fixes/LC_Optim.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("LC_Optim")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Source moment")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LC_Optim")] [assembly: AssemblyTitle("LC_Optim")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace LC_Optim; [BepInPlugin("mnc.fixcentipedelag", "FixCentipedeLag", "2023.12.7")] public class Plugin : BaseUnityPlugin { private Harmony thisHarmony; private static Dictionary<int, ulong> instanceMap = new Dictionary<int, ulong>(); private static ulong deadtimer = 100uL; private static ManualLogSource Log; private static ConfigEntry<bool> configShowDebug; private static void Debug(object data, LogLevel logLevel = 16) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (configShowDebug.Value) { Log.Log(logLevel, data); } } private void Awake() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown configShowDebug = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable debug printing", true, "Enabling this will show debug info in console, e.g. when a new centipede gets tracked or removed."); thisHarmony = new Harmony("mnc.fixcentipedelag"); thisHarmony.Patch((MethodBase)typeof(CentipedeAI).GetMethod("DoAIInterval"), new HarmonyMethod(typeof(Plugin), "RemoveLagCentipede", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Debug("Registered the patch method", (LogLevel)4); Log = ((BaseUnityPlugin)this).Logger; } public static void RemoveLagCentipede(CentipedeAI __instance) { if (((EnemyAI)__instance).TargetClosestPlayer(1.5f, false, 70f)) { return; } int instanceID = ((Object)__instance).GetInstanceID(); ulong num = (ulong)Time.frameCount; if (!instanceMap.ContainsKey(instanceID)) { instanceMap.Add(instanceID, num); Debug($"Tracked {instanceID}", (LogLevel)16); return; } ulong num2 = instanceMap[instanceID]; if (num - num2 <= deadtimer) { ((EnemyAI)__instance).KillEnemy(true); instanceMap.Remove(instanceID); Debug($"Removed centipede at {instanceID}", (LogLevel)16); } else { instanceMap[instanceID] = num; } } public void OnDestroy() { thisHarmony.UnpatchSelf(); } } internal class PluginMetadata { public const string PLUGIN_GUID = "mnc.fixcentipedelag"; public const string PLUGIN_NAME = "FixCentipedeLag"; public const string PLUGIN_VERSION = "2023.12.7"; } public static class MyPluginInfo { public const string PLUGIN_GUID = "LC_Optim"; public const string PLUGIN_NAME = "LC_Optim"; public const string PLUGIN_VERSION = "1.0.0"; }
BepInEx/plugins/plugins/Fixes/NameFix.dll
Decompiled 2 months agousing System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using GameNetcodeStuff; using HarmonyLib; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("NameFix")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("NameFix")] [assembly: AssemblyCopyright("Copyright © BlueAmulet 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("9a85f7c4-c974-4bff-b83a-5cbcde42b246")] [assembly: AssemblyFileVersion("1.0.1")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.1.0")] namespace NameFix { [BepInPlugin("BlueAmulet.NameFix", "NameFix", "1.0.1")] public class NameFix : BaseUnityPlugin { internal const string Name = "NameFix"; internal const string Author = "BlueAmulet"; internal const string ID = "BlueAmulet.NameFix"; internal const string Version = "1.0.1"; public void Awake() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) Harmony val = new Harmony("BlueAmulet.NameFix"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Applying Harmony patches"); val.PatchAll(Assembly.GetExecutingAssembly()); int num = 0; foreach (MethodBase patchedMethod in val.GetPatchedMethods()) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Patched " + patchedMethod.DeclaringType.Name + "." + patchedMethod.Name)); num++; } ((BaseUnityPlugin)this).Logger.LogInfo((object)(num + " patches applied")); } public static string NoPunctuation(string input) { return new string(input.Where((char c) => char.IsLetterOrDigit(c) || c == '_').ToArray()); } } } namespace NameFix.Patches { [HarmonyPatch] internal static class NameSanitizePatch { [HarmonyPrefix] [HarmonyPatch(typeof(PlayerControllerB), "NoPunctuation")] public static bool Prefix1(ref string __result, string input) { __result = NameFix.NoPunctuation(input); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(GameNetworkManager), "NoPunctuation")] public static bool Prefix2(ref string __result, string input) { __result = NameFix.NoPunctuation(input); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(StartOfRound), "NoPunctuation")] public static bool Prefix3(ref string __result, string input) { __result = NameFix.NoPunctuation(input); return false; } } }
BepInEx/plugins/plugins/Fixes/SignalTranslatorAligner.dll
Decompiled 2 months agousing System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("SignalTranslatorAligner")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("My first plugin")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0")] [assembly: AssemblyProduct("SignalTranslatorAligner")] [assembly: AssemblyTitle("SignalTranslatorAligner")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] namespace SignalTranslatorAligner; [HarmonyPatch(typeof(HUDManager), "DisplaySignalTranslatorMessage")] internal class DisplaySignalTranslatorMessage { private static void Prefix(ref bool __runOriginal, ref IEnumerator __result, Animator ___signalTranslatorAnimator, AudioSource ___UIAudio, TextMeshProUGUI ___signalTranslatorText, string signalMessage, int seed, SignalTranslator signalTranslator) { __runOriginal = false; Plugin.Instance.LogInfo("DisplaySignalTranslatorMessage hooked"); __result = ReplacedRoutine(); IEnumerator ReplacedRoutine() { Random signalMessageRandom = new Random(seed + StartOfRound.Instance.randomMapSeed); ___signalTranslatorAnimator.SetBool("transmitting", true); signalTranslator.localAudio.Play(); ___UIAudio.PlayOneShot(signalTranslator.startTransmissionSFX, 1f); string trimedMessage = signalMessage.Trim(); ((TMP_Text)___signalTranslatorText).text = "<#00000000>" + trimedMessage + "</color>"; yield return (object)new WaitForSeconds(1.21f); for (int i = 0; i <= trimedMessage.Length; i++) { if ((Object)(object)signalTranslator == (Object)null) { break; } if (!((Component)signalTranslator).gameObject.activeSelf) { break; } ___UIAudio.PlayOneShot(signalTranslator.typeTextClips[Random.Range(0, signalTranslator.typeTextClips.Length)]); string text = trimedMessage.Substring(0, i) + "<#00000000>" + trimedMessage.Substring(i, trimedMessage.Length - i) + "</color>"; ((TMP_Text)___signalTranslatorText).text = text; float num = Mathf.Min((float)signalMessageRandom.Next(-1, 4) * 0.5f, 0f); yield return (object)new WaitForSeconds(0.7f + num); } if ((Object)(object)signalTranslator != (Object)null) { ___UIAudio.PlayOneShot(signalTranslator.finishTypingSFX); signalTranslator.localAudio.Stop(); } yield return (object)new WaitForSeconds(0.5f); ___signalTranslatorAnimator.SetBool("transmitting", false); } } } [HarmonyPatch(typeof(HUDManager), "Awake")] internal class AwakePatch { private static void Postfix(TextMeshProUGUI ___signalTranslatorText) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0032: 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_005a: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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) Transform parent = ((TMP_Text)___signalTranslatorText).transform.GetParent(); RectTransform val = (RectTransform)parent.GetChild(1); RectTransform val2 = (RectTransform)parent.GetChild(2); val.anchorMin = new Vector2(0f, 0.5f); val.anchorMax = new Vector2(1f, 0.5f); val.sizeDelta = new Vector2(0f, val.sizeDelta.y); TextMeshProUGUI component = ((Component)val).GetComponent<TextMeshProUGUI>(); ((TMP_Text)component).margin = new Vector4(0f, 0f, val.anchoredPosition.x * 2f, 0f); ((TMP_Text)component).alignment = (TextAlignmentOptions)514; val2.anchorMin = new Vector2(0f, 0.5f); val2.anchorMax = new Vector2(1f, 0.5f); val2.sizeDelta = new Vector2(0f, val2.sizeDelta.y); TextMeshProUGUI component2 = ((Component)val2).GetComponent<TextMeshProUGUI>(); ((TMP_Text)component2).margin = new Vector4(0f, 0f, val2.anchoredPosition.x * 2f, 0f); ((TMP_Text)component2).alignment = (TextAlignmentOptions)514; ((TMP_Text)___signalTranslatorText).alignment = (TextAlignmentOptions)514; ((TMP_Text)___signalTranslatorText).rectTransform.anchorMin = new Vector2(0f, 0.5f); ((TMP_Text)___signalTranslatorText).rectTransform.anchorMax = new Vector2(1f, 0.5f); ((TMP_Text)___signalTranslatorText).rectTransform.anchoredPosition = new Vector2(0f, ((TMP_Text)___signalTranslatorText).rectTransform.anchoredPosition.y); ((TMP_Text)___signalTranslatorText).rectTransform.sizeDelta = new Vector2(0f, ((TMP_Text)___signalTranslatorText).rectTransform.sizeDelta.y); } } internal class PluginInfo { public const string GUID = "lekakid.lcsignaltranslatoraligner"; public const string Name = "SignalTranslatorAligner"; public const string Version = "1.0.0"; } [BepInPlugin("lekakid.lcsignaltranslatoraligner", "SignalTranslatorAligner", "1.0.0")] internal class Plugin : BaseUnityPlugin { public static Plugin Instance; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } public void LogInfo(string msg) { ((BaseUnityPlugin)this).Logger.LogInfo((object)msg); } public void LogWarning(string msg) { ((BaseUnityPlugin)this).Logger.LogWarning((object)msg); } public void LogError(string msg) { ((BaseUnityPlugin)this).Logger.LogError((object)msg); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "SignalTranslatorAligner"; public const string PLUGIN_NAME = "SignalTranslatorAligner"; public const string PLUGIN_VERSION = "1.1.0"; }
BepInEx/plugins/plugins/Fixes/SlimeTamingFix.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EliteMasterEric")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Fixes a bug that made Hygroderes unable to be tamed with Boomboxes.")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2+38f01b21fff41249851eaa3d5a7686cfd554bb79")] [assembly: AssemblyProduct("SlimeTamingFix")] [assembly: AssemblyTitle("SlimeTamingFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SlimeTamingFix { public static class PluginInfo { public const string PLUGIN_ID = "SlimeTamingFix"; public const string PLUGIN_NAME = "SlimeTamingFix"; public const string PLUGIN_VERSION = "1.0.2"; public const string PLUGIN_GUID = "com.elitemastereric.slimetamingfix"; } [BepInPlugin("com.elitemastereric.slimetamingfix", "SlimeTamingFix", "1.0.2")] public class Plugin : BaseUnityPlugin { public ManualLogSource PluginLogger; public static Plugin Instance { get; private set; } private void Awake() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown Instance = this; PluginLogger = ((BaseUnityPlugin)this).Logger; Harmony val = new Harmony("com.elitemastereric.slimetamingfix"); val.PatchAll(); PluginLogger.LogInfo((object)"Plugin SlimeTamingFix (com.elitemastereric.slimetamingfix) is loaded!"); } } } namespace SlimeTamingFix.Patch { [HarmonyPatch(typeof(BlobAI))] [HarmonyPatch("OnCollideWithPlayer")] internal class BlobAIOnCollideWithPlayerPatch { public static bool Prefix(BlobAI __instance) { float value = Traverse.Create((object)__instance).Field("tamedTimer").GetValue<float>(); float value2 = Traverse.Create((object)__instance).Field("angeredTimer").GetValue<float>(); if (value > 0f && value2 <= 0f) { return false; } return true; } } }
BepInEx/plugins/plugins/Fixes/SprintLadderFix.dll
Decompiled 2 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using SprintLadderFix.Patches; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("SprintLadderFix")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SprintLadderFix")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("cd8cad2b-a700-4306-b8a2-1eb833c9d281")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace SprintToggleFix { [BepInPlugin("MoonJuice.SprintLadderFix", "SprintLadderFix", "1.0.0")] public class SprintLadderFix : BaseUnityPlugin { private const string modGUID = "MoonJuice.SprintLadderFix"; private const string modName = "SprintLadderFix"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("MoonJuice.SprintLadderFix"); private static SprintLadderFix Instance; internal ManualLogSource mls; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("MoonJuice.SprintLadderFix"); mls.LogInfo((object)"SprintLadderFix loaded"); harmony.PatchAll(typeof(SprintLadderFix)); harmony.PatchAll(typeof(PlayerControllerBPatch)); } } } namespace SprintLadderFix.Patches { [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void sprintLadderFix(ref bool ___isClimbingLadder, ref bool ___isSprinting) { if (___isClimbingLadder) { ___isSprinting = false; } } } }
BepInEx/plugins/plugins/Fixes/StorageFix.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Microsoft.CodeAnalysis; using On; using StorageFix.Patch; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("StorageFix")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("My first plugin")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("StorageFix")] [assembly: AssemblyTitle("StorageFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace StorageFix { [BepInPlugin("Rocksnotch.StorageFix", "Storage Fix", "1.1.0")] public class Plugin : BaseUnityPlugin { private const string modName = "Storage Fix"; private const string modVersion = "1.1.0"; private const string modGUID = "Rocksnotch.StorageFix"; internal static Plugin Instance; public static ManualLogSource logSrc = Logger.CreateLogSource("Rocksnotch.StorageFix"); private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } StoragePatch.Init(); logSrc.LogInfo((object)"Plugin Rocksnotch.StorageFix is loaded!"); } } public static class PluginInfo { public const string PLUGIN_GUID = "StorageFix"; public const string PLUGIN_NAME = "StorageFix"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace StorageFix.Patch { internal class StoragePatch { [CompilerGenerated] private static class <>O { public static hook_LoadShipGrabbableItems <0>__LoadShipGrabbableItems; } private Dictionary<int, GrabbableObject> storageItems = new Dictionary<int, GrabbableObject>(); public static Vector3 shelfPlacementPos = Vector3.zero; public static NetworkObject storageCloset = null; public static GrabbableObject[] grabbableObjects = null; public static List<GrabbableObject> grabbableObjectsHigh = new List<GrabbableObject>(); public static bool loadStorage = true; public static void Init() { //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) //IL_001c: Expected O, but got Unknown object obj = <>O.<0>__LoadShipGrabbableItems; if (obj == null) { hook_LoadShipGrabbableItems val = LoadShipGrabbableItems; <>O.<0>__LoadShipGrabbableItems = val; obj = (object)val; } StartOfRound.LoadShipGrabbableItems += (hook_LoadShipGrabbableItems)obj; } public static void LoadShipGrabbableItems(orig_LoadShipGrabbableItems orig, StartOfRound self) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); grabbableObjects = Object.FindObjectsOfType<GrabbableObject>(); for (int i = 0; i < grabbableObjects.Length; i++) { if (((Component)grabbableObjects[i]).transform.localPosition.y > grabbableObjects[i].itemProperties.verticalOffset && !(((Object)((Component)grabbableObjects[i]).transform).name == "ClipboardManual") && !(((Object)((Component)grabbableObjects[i]).transform).name == "StickyNoteItem")) { grabbableObjects[i].itemProperties.itemSpawnsOnGround = false; grabbableObjectsHigh.Add(grabbableObjects[i]); } } FindStorageCloset(self); ((Component)storageCloset).transform.position = self.unlockablesList.unlockables[7].placedPosition; ((Component)storageCloset).transform.localEulerAngles = self.unlockablesList.unlockables[7].placedRotation; Plugin.logSrc.LogInfo((object)"Begin Listing Grabbable Objects that are above the vertical offset"); for (int j = 0; j < grabbableObjectsHigh.Count; j++) { Plugin.logSrc.LogInfo((object)$"Grabbable Object {((Object)((Component)grabbableObjectsHigh[j]).transform).name} is above the vertical offset at {((Component)grabbableObjectsHigh[j]).transform.localPosition.y} compared to offset of {grabbableObjectsHigh[j].itemProperties.verticalOffset}"); } for (int k = 0; k < grabbableObjectsHigh.Count; k++) { if (((Object)((Component)grabbableObjectsHigh[k]).transform).name == "ShovelItem(Clone)") { ((Component)grabbableObjectsHigh[k]).transform.rotation = ((Component)storageCloset).transform.rotation; ((Component)grabbableObjectsHigh[k]).transform.Rotate(0f, 90f, 0f); } else if (((Object)((Component)grabbableObjectsHigh[k]).transform).name == "WalkieTalkie(Clone)") { ((Component)grabbableObjectsHigh[k]).transform.rotation = ((Component)storageCloset).transform.rotation; ((Component)grabbableObjectsHigh[k]).transform.Rotate(0f, 90f, -90f); } else { ((Component)grabbableObjectsHigh[k]).transform.rotation = ((Component)storageCloset).transform.rotation; } } Array.Clear(grabbableObjects, 0, grabbableObjects.Length); grabbableObjectsHigh.Clear(); storageCloset = null; } public static void FindStorageCloset(StartOfRound self) { NetworkObject[] array = Object.FindObjectsOfType<NetworkObject>(); for (int i = 0; i < array.Length; i++) { if (((Object)((Component)array[i]).transform).name == "StorageCloset") { storageCloset = array[i]; break; } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
BepInEx/plugins/plugins/Fixes/WeedKillerFixes.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Logging; using HarmonyLib; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("WeedKillerFixes")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Fixes some major issues with weed killer")] [assembly: AssemblyFileVersion("1.1.2.0")] [assembly: AssemblyInformationalVersion("1.1.2+d8dc6bb9ea6ec4ac16c67ecf3d1f289afcc6f868")] [assembly: AssemblyProduct("WeedKillerFixes")] [assembly: AssemblyTitle("WeedKillerFixes")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace WeedKillerFixes { internal static class LobbyCompatibility { internal static void Init() { PluginHelper.RegisterPlugin("butterystancakes.lethalcompany.weedkillerfixes", Version.Parse("1.1.2"), (CompatibilityLevel)0, (VersionStrictness)0); } } [BepInPlugin("butterystancakes.lethalcompany.weedkillerfixes", "Weed Killer Fixes", "1.1.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal const string PLUGIN_GUID = "butterystancakes.lethalcompany.weedkillerfixes"; internal const string PLUGIN_NAME = "Weed Killer Fixes"; internal const string PLUGIN_VERSION = "1.1.2"; internal static ManualLogSource Logger; private const string GUID_LOBBY_COMPATIBILITY = "BMX.LobbyCompatibility"; private void Awake() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; if (Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility")) { Logger.LogInfo((object)"CROSS-COMPATIBILITY - Lobby Compatibility detected"); LobbyCompatibility.Init(); } new Harmony("butterystancakes.lethalcompany.weedkillerfixes").PatchAll(); Logger.LogInfo((object)"Weed Killer Fixes v1.1.2 loaded"); } } [HarmonyPatch] internal class WeedKillerFixesPatches { private static MoldSpreadManager moldSpreadManager; private static VehicleController vehicleController; private static readonly MethodInfo MOLD_SPREAD_MANAGER_INSTANCE = AccessTools.DeclaredPropertyGetter(typeof(WeedKillerFixesPatches), "MoldSpreadManager"); private static readonly FieldInfo VEHICLE_CONTROLLER_INSTANCE = AccessTools.Field(typeof(WeedKillerFixesPatches), "vehicleController"); private static MoldSpreadManager MoldSpreadManager { get { if ((Object)(object)moldSpreadManager == (Object)null) { moldSpreadManager = Object.FindAnyObjectByType<MoldSpreadManager>(); } return moldSpreadManager; } } [HarmonyPatch(typeof(SprayPaintItem), "TrySprayingWeedKillerBottle")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> SprayPaintItem_Trans_TrySprayingWeedKillerBottle(IEnumerable<CodeInstruction> instructions) { //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); MethodInfo methodInfo = AccessTools.Method(typeof(GameObject), "CompareTag", (Type[])null, (Type[])null); MethodInfo methodInfo2 = AccessTools.DeclaredPropertyGetter(typeof(Time), "deltaTime"); for (int i = 2; i < list.Count - 3; i++) { if (list[i].opcode == OpCodes.Call) { string text = list[i].operand.ToString(); if (text.Contains("Raycast") && list[i - 2].opcode == OpCodes.Ldc_I4) { list[i - 2].operand = (int)list[i - 2].operand & ~(1 << LayerMask.NameToLayer("Room")); Plugin.Logger.LogDebug((object)"Transpiler (SprayPaintItem.TrySprayingWeedKillerBottle): Simplify layer mask"); } else if ((MethodInfo)list[i].operand == methodInfo2) { list[i].opcode = OpCodes.Ldfld; list[i].operand = AccessTools.Field(typeof(SprayPaintItem), "sprayIntervalSpeed"); list.Insert(i, new CodeInstruction(OpCodes.Ldarg_0, (object)null)); Plugin.Logger.LogDebug((object)"Transpiler (SprayPaintItem.TrySprayingWeedKillerBottle): Fix addVehicleHPInterval time"); } else if (text.Contains("VehicleController")) { list[i].opcode = OpCodes.Ldsfld; list[i].operand = VEHICLE_CONTROLLER_INSTANCE; Plugin.Logger.LogDebug((object)"Transpiler (SprayPaintItem.TrySprayingWeedKillerBottle): Cache Cruiser script"); } } else if (list[i].opcode == OpCodes.Ldstr && (string)list[i].operand == "MoldSporeCollider" && list[i + 1].opcode == OpCodes.Callvirt && (MethodInfo)list[i + 1].operand == methodInfo) { list[i].operand = "MoldSpore"; Plugin.Logger.LogDebug((object)"Transpiler (SprayPaintItem.TrySprayingWeedKillerBottle): Fix wrong tag being checked"); } } return list; } [HarmonyPatch(typeof(SprayPaintItem), "KillWeedClientRpc")] [HarmonyPatch(typeof(SprayPaintItem), "LateUpdate")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> CacheMoldSpreadManager(IEnumerable<CodeInstruction> instructions, MethodBase __originalMethod) { List<CodeInstruction> list = instructions.ToList(); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Call) { string text = list[i].operand.ToString(); if (text.Contains("FindObjectOfType") && text.Contains("MoldSpreadManager")) { list[i].operand = MOLD_SPREAD_MANAGER_INSTANCE; Plugin.Logger.LogDebug((object)$"Transpiler ({__originalMethod.DeclaringType}.{__originalMethod.Name}): Cache weed script"); } } } return list; } [HarmonyPatch(typeof(VehicleController), "Awake")] [HarmonyPostfix] private static void VehicleController_Post_Awake(VehicleController __instance) { if ((Object)(object)vehicleController == (Object)null) { vehicleController = __instance; } } } public static class PluginInfo { public const string PLUGIN_GUID = "WeedKillerFixes"; public const string PLUGIN_NAME = "WeedKillerFixes"; public const string PLUGIN_VERSION = "1.1.2"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
BepInEx/plugins/plugins/ForestGiantMotionsense.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("TanmanG")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyCopyright("CC BY-NC-SA")] [assembly: AssemblyDescription("A Harmony patch to adjust Forest Giant AI to only detect motion.")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+884e96a4438d7ff5cff13942e224a52cc46655dc")] [assembly: AssemblyProduct("ForestGiantMotionsense")] [assembly: AssemblyTitle("ForestGiantMotionsense")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/TanmanG/LethalCompany_ForestGiantMotionsense")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ForestGiantMotionsense { [BepInPlugin("ForestGiantMotionsense", "ForestGiantMotionsense", "1.0.0")] public class FoGiMoSeMod : BaseUnityPlugin { private static ConfigEntry<float> _configMoveTime; private static FoGiMoSeMod _instance; private static bool _patchFailed; private void Awake() { _instance = this; _patchFailed = false; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading..."); _configMoveTime = ((BaseUnityPlugin)this).Config.Bind<float>("General", "TimeSinceMovingThreshold", 2.25f, "The amount of time the player must remain still before being invisible to a Forest Giant."); Harmony val = Harmony.CreateAndPatchAll(typeof(FoGiMoSeMod), (string)null); if (_patchFailed) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failure to find patch location, reverting!"); Harmony.UnpatchID(val.Id); } else { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded!"); } } [HarmonyPatch(typeof(ForestGiantAI), "LookForPlayers")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> MotionPatch(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Expected O, but got Unknown //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Expected O, but got Unknown //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Expected O, but got Unknown //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Expected O, but got Unknown //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); val.Start(); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[6] { new CodeMatch((OpCode?)OpCodes.Call, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldloc_S, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldelem_Ref, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_R4, (object)null, (string)null) }); if (val.Remaining == 0) { ((BaseUnityPlugin)_instance).Logger.LogFatal((object)"Could not find LookForPlayers time since moved code block to patch, flagging to abort!"); _patchFailed = true; } List<CodeInstruction> list = new List<CodeInstruction>(); for (int i = 0; i < 6; i++) { CodeInstruction item = new CodeInstruction(val.Instruction); list.Add(item); val.Advance(1); } list[list.Count - 1].operand = _configMoveTime.Value; list.Add(new CodeInstruction(OpCodes.Clt, (object)null)); val.Start(); val.MatchForward(true, (CodeMatch[])(object)new CodeMatch[7] { new CodeMatch((OpCode?)OpCodes.Ldloc_0, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Call, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldloc_S, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldelem_Ref, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Call, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Brfalse, (object)null, (string)null) }); if (val.Remaining == 0) { ((BaseUnityPlugin)_instance).Logger.LogFatal((object)"Could not find LookForPlayers IF condition to patch, flagging to abort!"); _patchFailed = true; return val.InstructionEnumeration(); } list.Add(new CodeInstruction(val.Instruction)); val.Advance(1); val.InsertAndAdvance((IEnumerable<CodeInstruction>)list); return val.InstructionEnumeration(); } private static IEnumerable<CodeInstruction> TimeSinceMovePatch(IEnumerable<CodeInstruction> instructions) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null).MatchForward(true, (CodeMatch[])(object)new CodeMatch[8] { new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Dup, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_I4_1, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Add, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Stfld, (object)null, (string)null) }); if (val.Remaining == 0) { ((BaseUnityPlugin)_instance).Logger.LogFatal((object)"Could not find UpdatePlayerPositionClientRPC patch location, flagging abort!"); _patchFailed = true; } val.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldc_R4, (object)0f), new CodeInstruction(OpCodes.Stfld, (object)AccessTools.Field(typeof(PlayerControllerB), "timeSincePlayerMoving")) }); return val.InstructionEnumeration(); } } public static class PluginInfo { public const string PLUGIN_GUID = "ForestGiantMotionsense"; public const string PLUGIN_NAME = "ForestGiantMotionsense"; public const string PLUGIN_VERSION = "1.0.0"; } }
BepInEx/plugins/plugins/HoldScanButton.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using HoldScanButton.Patches; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.InputSystem; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HoldScanButton")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A mod which allows you to hold the scan button instead of needing to spam it.")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+e176b95ccf205ccfcd919c056ec842f624ca0c1a")] [assembly: AssemblyProduct("HoldScanButton")] [assembly: AssemblyTitle("HoldScanButton")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [BepInPlugin("HoldScanButton", "HoldScanButton", "1.0.0")] public class HoldScanButtonPlugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("HoldScanButton"); public static HoldScanButtonPlugin Instance; internal ManualLogSource logger; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = Logger.CreateLogSource("HoldScanButton"); logger.LogInfo((object)"Plugin HoldScanButton has loaded!"); harmony.PatchAll(typeof(HoldScanButtonPatch)); } } internal static class LCMPluginInfo { public const string PLUGIN_GUID = "HoldScanButton"; public const string PLUGIN_NAME = "HoldScanButton"; public const string PLUGIN_VERSION = "1.0.0"; } namespace HoldScanButton.Patches { internal class HoldScanButtonPatch { private static CallbackContext pingContext; [HarmonyPatch(typeof(HUDManager), "Update")] [HarmonyPostfix] private static void UpdatePatch(HUDManager __instance) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan", false).IsPressed()) { __instance.PingScan_performed(pingContext); } } [HarmonyPatch(typeof(HUDManager), "PingScan_performed")] [HarmonyPrefix] private static void OnScan(HUDManager __instance, CallbackContext context) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) pingContext = context; } } }
BepInEx/plugins/plugins/HotbarPlus/HotbarPlus.dll
Decompiled 2 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using HotbarPlus.Compatibility; using HotbarPlus.Config; using HotbarPlus.Input; using HotbarPlus.Networking; using HotbarPlus.Patches; using LethalCompanyInputUtils.Api; using ReservedItemSlotCore; using ReservedItemSlotCore.Config; using ReservedItemSlotCore.Data; using TooManyEmotes; using TooManyEmotes.Patches; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; 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: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyTitle("HotbarPlus")] [assembly: AssemblyDescription("Mod made by flipf17.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("HotbarPlus")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("fab060f0-b006-42ea-ba6f-473f4850c587")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.0")] namespace HotbarPlus { [BepInPlugin("FlipMods.HotbarPlus", "HotbarPlus", "1.8.5")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static Plugin instance; private Harmony _harmony; private static ManualLogSource logger; internal static GameObject energyBarPrefab; internal static GameObject lightningIndicatorPrefab; private void Awake() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown instance = this; InitLogger(); ConfigSettings.BindConfigSettings(); Keybinds.InitKeybinds(); LoadUIAssets(); _harmony = new Harmony("HotbarPlus"); PatchAll(); Log("HotbarPlus loaded"); } private void LoadUIAssets() { try { string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)instance).Info.Location), "Assets/hotbarplus_assets"); AssetBundle val = AssetBundle.LoadFromFile(text); energyBarPrefab = val.LoadAsset<GameObject>("energy_bar"); lightningIndicatorPrefab = val.LoadAsset<GameObject>("lightning_indicator"); } catch { LogError("Failed to load UI assets from Asset Bundle."); } } private void PatchAll() { IEnumerable<Type> enumerable; try { enumerable = Assembly.GetExecutingAssembly().GetTypes(); } catch (ReflectionTypeLoadException ex) { enumerable = ex.Types.Where((Type t) => t != null); } foreach (Type item in enumerable) { _harmony.PatchAll(item); } } private void InitLogger() { try { logger = Logger.CreateLogSource(string.Format("{0}-{1}", "HotbarPlus", "1.8.5")); } catch { logger = ((BaseUnityPlugin)this).Logger; } } public static void Log(string message) { logger.LogInfo((object)message); } public static void LogError(string message) { logger.LogError((object)message); } public static void LogWarning(string message) { logger.LogWarning((object)message); } public static void LogVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogInfo((object)("[VERBOSE] " + message)); } } public static void LogErrorVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogError((object)("[VERBOSE] " + message)); } } public static void LogWarningVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogWarning((object)("[VERBOSE] " + message)); } } public static bool IsModLoaded(string guid) { return Chainloader.PluginInfos.ContainsKey(guid); } } public static class PluginInfo { public const string PLUGIN_GUID = "FlipMods.HotbarPlus"; public const string PLUGIN_NAME = "HotbarPlus"; public const string PLUGIN_VERSION = "1.8.5"; } [HarmonyPatch] internal static class SaveManager { [HarmonyPatch(typeof(StartOfRound), "ResetShip")] [HarmonyPostfix] private static void OnResetShip() { if (SyncManager.purchasedHotbarSlots > 0) { SyncManager.purchasedHotbarSlots = 0; SyncManager.OnUpdateHotbarSize(); } if (NetworkManager.Singleton.IsServer && SyncManager.purchasableHotbarSlots > 0) { ResetGameValues(); } } [HarmonyPatch(typeof(GameNetworkManager), "SaveGameValues")] [HarmonyPostfix] private static void OnSaveGameValues() { if (NetworkManager.Singleton.IsHost && StartOfRound.Instance.inShipPhase) { SaveGameValues(); } } internal static void SaveGameValues() { if (NetworkManager.Singleton.IsServer) { if (SyncManager.purchasableHotbarSlots > 0) { Plugin.LogWarning("Saving " + SyncManager.purchasedHotbarSlots + " purchased hotbar slots."); } ES3.Save<short>("HotbarPlus.PurchasedHotbarSlots", SyncManager.purchasedHotbarSlots, GameNetworkManager.Instance.currentSaveFileName); } } internal static void LoadGameValues() { if (NetworkManager.Singleton.IsServer) { short num = ES3.Load<short>("HotbarPlus.PurchasedHotbarSlots", GameNetworkManager.Instance.currentSaveFileName, (short)0); SyncManager.purchasedHotbarSlots = (short)Mathf.Clamp((int)num, 0, (int)(short)Mathf.Max((int)SyncManager.purchasableHotbarSlots, 0)); if (SyncManager.purchasableHotbarSlots > 0) { Plugin.LogWarning("Loaded " + SyncManager.purchasedHotbarSlots + " purchased hotbar slots."); } } } internal static void ResetGameValues() { if (NetworkManager.Singleton.IsServer) { if (SyncManager.purchasableHotbarSlots > 0) { Plugin.LogWarning("Resetting game values."); } ES3.DeleteKey("HotbarPlus.PurchasedHotbarSlots", GameNetworkManager.Instance.currentSaveFileName); } } } } namespace HotbarPlus.UI { internal class EnergyBarData { public GameObject gameObject; public Slider slider; public Image energyBarImage; public Transform transform => gameObject.transform; public RectTransform rectTransform { get { Transform obj = transform; return (RectTransform)(object)((obj is RectTransform) ? obj : null); } } public EnergyBarData(GameObject gameObject) { this.gameObject = gameObject; slider = gameObject.GetComponentInChildren<Slider>(); Transform obj = transform.Find("FillMask/Fill"); energyBarImage = ((obj != null) ? ((Component)obj).GetComponent<Image>() : null); if (!Object.op_Implicit((Object)(object)energyBarImage)) { Plugin.LogWarning("Failed to find image for energy bar. This is okay."); } } public void SetEnergyBarColor(Color color) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)energyBarImage)) { ((Graphic)energyBarImage).color = color; } } } [HarmonyPatch] internal static class EnergyBarManager { internal static Dictionary<Image, EnergyBarData> energyBarSlidersDict = new Dictionary<Image, EnergyBarData>(); public static Color energyBarColor = new Color(200f, 200f, 0f, 0.75f); private static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; [HarmonyPatch(typeof(HUDManager), "Awake")] [HarmonyPrefix] private static void Init(HUDManager __instance) { energyBarSlidersDict?.Clear(); } [HarmonyPatch(typeof(StartOfRound), "ResetShip")] [HarmonyPrefix] private static void OnResetShip() { ResetEnergyBars(); } [HarmonyPatch(typeof(PlayerControllerB), "SpawnPlayerAnimation")] [HarmonyPrefix] private static void OnPlayerRespawn(PlayerControllerB __instance) { if (!((Object)(object)__instance != (Object)(object)localPlayerController)) { ResetEnergyBars(); } } private static void ResetEnergyBars() { Plugin.Log("Resetting energy bars."); foreach (EnergyBarData value in energyBarSlidersDict.Values) { Object.DestroyImmediate((Object)(object)value.gameObject); } energyBarSlidersDict?.Clear(); } [HarmonyPatch(typeof(HUDManager), "Update")] [HarmonyPostfix] private static void UpdateEnergyBars(HUDManager __instance) { //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: 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_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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_0155: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)localPlayerController == (Object)null || __instance?.itemSlotIconFrames == null || localPlayerController.isPlayerDead) { return; } for (int i = 0; i < __instance.itemSlotIconFrames.Length; i++) { Image val = __instance.itemSlotIconFrames[i]; if (!Object.op_Implicit((Object)(object)val)) { continue; } GrabbableObject val2 = null; if (i >= 0 && i < localPlayerController.ItemSlots.Length) { val2 = localPlayerController.ItemSlots[i]; } if (!energyBarSlidersDict.TryGetValue(val, out var value)) { Transform obj = ((Component)val).transform.Find("EnergyBar"); GameObject val3 = ((obj != null) ? ((Component)obj).gameObject : null); if (!Object.op_Implicit((Object)(object)val3)) { val3 = Object.Instantiate<GameObject>(Plugin.energyBarPrefab); } ((Object)val3).name = "EnergyBar"; val3.transform.SetParent(((Component)val).transform); value = new EnergyBarData(val3); value.rectTransform.anchorMin = new Vector2(1f, 0.5f); value.rectTransform.anchorMax = new Vector2(1f, 0.5f); value.rectTransform.pivot = new Vector2(0.5f, 0.5f); value.SetEnergyBarColor(energyBarColor); energyBarSlidersDict.Add(val, value); } if (!Object.op_Implicit((Object)(object)value.gameObject)) { energyBarSlidersDict.Remove(val); continue; } float num = ((Graphic)val).rectTransform.sizeDelta.x / HUDPatcher.defaultItemFrameSize.x; ((Transform)value.rectTransform).localScale = Vector3.one / 36f * num; value.rectTransform.anchoredPosition3D = new Vector3(-4f * num, 0f, 0f); value.transform.localEulerAngles = new Vector3(0f, 0f, 90f); if (ConfigSettings.disableEnergyBarsConfig.Value || !Object.op_Implicit((Object)(object)val2) || !val2.itemProperties.requiresBattery || val2.insertedBattery == null || (ReservedItemSlots_Compat.Enabled && ((Object)val).name.ToLower().Contains("reserved") && ReservedItemSlots_Compat.ShouldDisableEnergyBarsReservedItemSlots())) { if (value.gameObject.activeSelf) { value.gameObject.SetActive(false); } } else { value.gameObject.SetActive(true); value.slider.value = Mathf.Clamp(val2.insertedBattery.charge, 0f, 1f); } } } } internal static class LightningIndicatorManager { private static Color warningIconColorHidden = new Color(1f, 1f, 1f, 0f); private static float iconScale = 0.85f; private static Image currentWarningIcon = null; private static float timeSetWarning = 0f; private static float updateTime = 0f; [HarmonyPatch(typeof(StormyWeather), "OnDisable")] [HarmonyPrefix] private static void OnStopStorm() { if (Object.op_Implicit((Object)(object)currentWarningIcon)) { ClearCurrentWarningIcon(); } } [HarmonyPatch(typeof(StormyWeather), "Update")] [HarmonyPostfix] private static void Update(ref GameObject ___setStaticToObject, ref GrabbableObject ___setStaticGrabbableObject) { //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: 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) if (!ConfigSettings.disableItemStaticWarningsConfig.Value && Object.op_Implicit((Object)(object)___setStaticToObject) && Object.op_Implicit((Object)(object)___setStaticGrabbableObject) && (Object)(object)___setStaticGrabbableObject.playerHeldBy == (Object)(object)StartOfRound.Instance.localPlayerController) { if (Time.time - updateTime > 0.1f) { updateTime = Time.time; Image val = null; for (int i = 0; i < StartOfRound.Instance.localPlayerController.ItemSlots.Length; i++) { GrabbableObject obj = StartOfRound.Instance.localPlayerController.ItemSlots[i]; GameObject val2 = ((obj != null) ? ((Component)obj).gameObject : null); if ((Object)(object)___setStaticToObject == (Object)(object)val2) { Image val3 = HUDManager.Instance.itemSlotIconFrames[i]; Transform obj2 = ((Component)val3).transform.Find("LightningWarningIcon"); val = ((obj2 != null) ? ((Component)obj2).GetComponent<Image>() : null); if (!Object.op_Implicit((Object)(object)val)) { GameObject obj3 = Object.Instantiate<GameObject>(Plugin.lightningIndicatorPrefab); val = ((obj3 != null) ? obj3.GetComponent<Image>() : null); ((Object)val).name = "LightningWarningIcon"; ((Component)val).transform.SetParent(((Component)val3).transform); ((Graphic)val).rectTransform.anchorMin = new Vector2(0.5f, 0.5f); ((Graphic)val).rectTransform.anchorMax = new Vector2(0.5f, 0.5f); ((Graphic)val).rectTransform.pivot = new Vector2(0.5f, 0.5f); float num = ((Graphic)val3).rectTransform.sizeDelta.x / HUDPatcher.defaultItemFrameSize.x * iconScale; ((Transform)((Graphic)val).rectTransform).localScale = Vector3.one / 36f * num; ((Graphic)val).rectTransform.anchoredPosition3D = new Vector3(0f, 0f, 0f); ((Component)val).transform.localEulerAngles = new Vector3(0f, 0f, 90f); } break; } } if (Object.op_Implicit((Object)(object)val)) { if ((Object)(object)currentWarningIcon != (Object)(object)val) { ClearCurrentWarningIcon(); SetCurrentWarningIcon(val); } } else if (Object.op_Implicit((Object)(object)currentWarningIcon)) { ClearCurrentWarningIcon(); } } } else if (Object.op_Implicit((Object)(object)currentWarningIcon)) { ClearCurrentWarningIcon(); } if (Object.op_Implicit((Object)(object)currentWarningIcon)) { ((Graphic)currentWarningIcon).color = new Color(1f, 1f, 1f, (Mathf.Sin((float)Math.PI * 2f * (Time.time - timeSetWarning - 0.25f)) + 1f) / 2f); } } private static void SetCurrentWarningIcon(Image warningIcon) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)currentWarningIcon) && (Object)(object)currentWarningIcon != (Object)(object)warningIcon) { ClearCurrentWarningIcon(); } if (Object.op_Implicit((Object)(object)warningIcon)) { currentWarningIcon = warningIcon; ((Graphic)warningIcon).color = new Color(1f, 1f, 1f, 0f); timeSetWarning = Time.time; } } private static void ClearCurrentWarningIcon() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)currentWarningIcon)) { ((Graphic)currentWarningIcon).color = warningIconColorHidden; currentWarningIcon = null; } } } } namespace HotbarPlus.Patches { [HarmonyPatch] public class HUDPatcher { internal static List<Image> mainItemSlotFrames = new List<Image>(); internal static List<Image> mainItemSlotIcons = new List<Image>(); private static int mainHotbarSize = 4; internal static float hotbarSlotSize = 40f; internal static Vector2 defaultItemFrameSize; internal static Vector2 defaultItemIconSize; internal static float defaultItemSlotPosY; internal static float currentOverrideHotbarSpacing; internal static float currentOverrideHotbarHudScale; [HarmonyPatch(typeof(HUDManager), "Awake")] [HarmonyPostfix] private static void Init(HUDManager __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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) mainItemSlotFrames.Clear(); mainItemSlotIcons.Clear(); mainHotbarSize = __instance.itemSlotIconFrames.Length; for (int i = 0; i < mainHotbarSize; i++) { mainItemSlotFrames.Add(__instance.itemSlotIconFrames[i]); mainItemSlotIcons.Add(__instance.itemSlotIcons[i]); } defaultItemFrameSize = ((Graphic)__instance.itemSlotIconFrames[0]).rectTransform.sizeDelta; defaultItemIconSize = ((Graphic)__instance.itemSlotIcons[0]).rectTransform.sizeDelta; defaultItemSlotPosY = ((Graphic)__instance.itemSlotIconFrames[0]).rectTransform.anchoredPosition.y; } public static void ResizeHotbarSlotsHUD() { //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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) List<Image> list = new List<Image>(HUDManager.Instance.itemSlotIconFrames); List<Image> list2 = new List<Image>(HUDManager.Instance.itemSlotIcons); float num = (hotbarSlotSize + (float)ConfigSettings.overrideHotbarSpacingConfig.Value) * ConfigSettings.overrideHotbarHudSizeConfig.Value; float num2 = defaultItemSlotPosY + 36f * ((ConfigSettings.overrideHotbarHudSizeConfig.Value - 1f) / 2f); Vector3 eulerAngles = ((Transform)((Graphic)list[0]).rectTransform).eulerAngles; Vector3 eulerAngles2 = ((Transform)((Graphic)list2[0]).rectTransform).eulerAngles; mainItemSlotFrames.Clear(); mainItemSlotIcons.Clear(); for (int i = 0; i < Mathf.Max((int)SyncManager.currentHotbarSize, mainHotbarSize); i++) { if (i >= SyncManager.currentHotbarSize) { Object.Destroy((Object)(object)list[SyncManager.currentHotbarSize]); Object.Destroy((Object)(object)list2[SyncManager.currentHotbarSize]); list.RemoveAt(SyncManager.currentHotbarSize); list2.RemoveAt(SyncManager.currentHotbarSize); continue; } if (i >= mainHotbarSize) { Image item = Object.Instantiate<Image>(list[0], ((Component)list[0]).transform.parent); list.Insert(i, item); ((Component)list[i]).transform.SetSiblingIndex(((Component)list[i - 1]).transform.GetSiblingIndex() + 1); Image component = ((Component)((Component)list[i]).transform.GetChild(0)).GetComponent<Image>(); component.sprite = null; ((Behaviour)component).enabled = false; list2.Insert(i, component); list[i].fillMethod = list[0].fillMethod; list[i].sprite = list[0].sprite; ((Graphic)list[i]).material = ((Graphic)list[0]).material; if (Plugin.IsModLoaded("xuxiaolan.hotbarrd")) { list[i].overrideSprite = list[0].overrideSprite; } } mainItemSlotFrames.Insert(i, list[i]); mainItemSlotIcons.Insert(i, list2[i]); ((Object)list[i]).name = $"Slot{i}"; ((Graphic)list[i]).rectTransform.anchoredPosition = Vector2.up * num2; ((Transform)((Graphic)list[i]).rectTransform).eulerAngles = eulerAngles; ((Object)list2[i]).name = "Icon"; ((Transform)((Graphic)list2[i]).rectTransform).eulerAngles = eulerAngles2; } mainHotbarSize = SyncManager.currentHotbarSize; HUDManager.Instance.itemSlotIconFrames = list.ToArray(); HUDManager.Instance.itemSlotIcons = list2.ToArray(); UpdateUI(); } internal static void UpdateUI() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) Image[] itemSlotIconFrames = HUDManager.Instance.itemSlotIconFrames; Image[] itemSlotIcons = HUDManager.Instance.itemSlotIcons; float num = (hotbarSlotSize + (float)ConfigSettings.overrideHotbarSpacingConfig.Value) * ConfigSettings.overrideHotbarHudSizeConfig.Value; float num2 = defaultItemSlotPosY + 36f * ((ConfigSettings.overrideHotbarHudSizeConfig.Value - 1f) / 2f); float num3 = num * (float)(mainHotbarSize - 1); float num4 = num3 / 2f; for (int i = 0; i < mainHotbarSize; i++) { float num5 = (float)i * num - num4; ((Graphic)itemSlotIconFrames[i]).rectTransform.anchoredPosition = new Vector2(num5, num2); ((Graphic)itemSlotIconFrames[i]).rectTransform.sizeDelta = defaultItemFrameSize * ConfigSettings.overrideHotbarHudSizeConfig.Value; ((Graphic)itemSlotIcons[i]).rectTransform.sizeDelta = defaultItemIconSize * ConfigSettings.overrideHotbarHudSizeConfig.Value; } currentOverrideHotbarSpacing = ConfigSettings.overrideHotbarSpacingConfig.Value; currentOverrideHotbarHudScale = ConfigSettings.overrideHotbarHudSizeConfig.Value; } [HarmonyPatch(typeof(HUDManager), "PingHUDElement")] [HarmonyPrefix] public static void OnPingHUDElement(HUDElement element, ref float startAlpha, ref float endAlpha, HUDManager __instance) { if (element != __instance.Inventory || endAlpha != 0.13f) { return; } if (startAlpha == 0.13f && StartOfRound.Instance.localPlayerController.twoHanded) { endAlpha = 1f; return; } endAlpha = Mathf.Clamp(ConfigSettings.overrideFadeHudAlphaConfig.Value, 0f, 1f); if (startAlpha == 0.13f) { startAlpha = endAlpha; } } [HarmonyPatch(typeof(QuickMenuManager), "CloseQuickMenu")] [HarmonyPrefix] public static void OnCloseQuickMenu() { if (ReservedItemSlots_Compat.Enabled || ConfigSettings.overrideHotbarHudSizeConfig.Value != currentOverrideHotbarHudScale || (float)ConfigSettings.overrideHotbarSpacingConfig.Value != currentOverrideHotbarSpacing) { ResizeHotbarSlotsHUD(); } } } [HarmonyPatch] public class PlayerPatcher { public static int vanillaHotbarSize = -1; public static int mainHotbarSize = -1; private static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPostfix] private static void ResetValues(StartOfRound __instance) { vanillaHotbarSize = -1; mainHotbarSize = vanillaHotbarSize; } [HarmonyPatch(typeof(PlayerControllerB), "Awake")] [HarmonyPostfix] private static void GetInitialHotbarSize(PlayerControllerB __instance) { if (vanillaHotbarSize == -1) { vanillaHotbarSize = __instance.ItemSlots.Length; mainHotbarSize = vanillaHotbarSize; } } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] private static void InitializeLocalPlayer(PlayerControllerB __instance) { ((Component)HUDManager.Instance.itemSlotIconFrames[Mathf.Max(__instance.currentItemSlot, 0)]).GetComponent<Animator>().SetBool("selectedSlot", true); HUDManager.Instance.PingHUDElement(HUDManager.Instance.Inventory, 0.1f, 0.13f, 0.13f); } public static void ResizeInventory() { int num = SyncManager.currentHotbarSize - mainHotbarSize; if (num == 0) { return; } Plugin.LogWarning("Resizing main hotbar to: " + SyncManager.currentHotbarSize + ". Previous: " + mainHotbarSize); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { List<GrabbableObject> list = new List<GrabbableObject>(val.ItemSlots); if (num > 0) { for (int j = 0; j < Mathf.Abs(num); j++) { list.Insert(mainHotbarSize, null); if (val.currentItemSlot >= mainHotbarSize) { val.currentItemSlot++; } } } else { for (int k = 0; k < Mathf.Abs(num); k++) { list.RemoveAt(SyncManager.currentHotbarSize); if (val.currentItemSlot >= SyncManager.currentHotbarSize) { val.currentItemSlot--; } } } val.ItemSlots = list.ToArray(); } mainHotbarSize = SyncManager.currentHotbarSize; } public static int CallGetNextItemSlot(PlayerControllerB __instance, bool forward, int index) { int currentItemSlot = __instance.currentItemSlot; __instance.currentItemSlot = index; MethodInfo method = ((object)__instance).GetType().GetMethod("NextItemSlot", BindingFlags.Instance | BindingFlags.NonPublic); index = (int)method.Invoke(__instance, new object[1] { forward }); __instance.currentItemSlot = currentItemSlot; return index; } public static void CallSwitchToItemSlot(PlayerControllerB __instance, int index, GrabbableObject fillSlotWithItem = null) { MethodInfo method = ((object)__instance).GetType().GetMethod("SwitchToItemSlot", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(__instance, new object[2] { index, fillSlotWithItem }); SetTimeSinceSwitchingSlots(__instance, 0f); } public static float GetTimeSinceSwitchingSlots(PlayerControllerB playerController) { return (float)Traverse.Create((object)playerController).Field("timeSinceSwitchingSlots").GetValue(); } public static void SetTimeSinceSwitchingSlots(PlayerControllerB playerController, float value) { Traverse.Create((object)playerController).Field("timeSinceSwitchingSlots").SetValue((object)value); } [HarmonyPatch(typeof(PlayerControllerB), "ScrollMouse_performed")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PatchSwitchItemInterval(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); if (!ConfigSettings.disableFasterHotbarSwappingConfig.Value && !GeneralImprovements_Compat.Enabled) { for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && (float)list[i].operand == 0.3f) { list[i].operand = ConfigSettings.minSwapItemInterval; break; } } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "ActivateItem_performed")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PatchActivateItemInterval(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); if (!ConfigSettings.disableFasterItemActivateConfig.Value && !GeneralImprovements_Compat.Enabled) { for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && (float)list[i].operand == 0.075f) { list[i].operand = ConfigSettings.minActivateItemInterval; break; } } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "Discard_performed")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PatchDiscardItemInterval(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); if (!ConfigSettings.disableFasterItemDroppingConfig.Value) { for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && (float)list[i].operand == 0.2f) { list[i].operand = ConfigSettings.minDiscardItemInterval; } } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "Interact_performed")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PatchInteractInterval(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); if (!GeneralImprovements_Compat.Enabled) { for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && (float)list[i].operand == 0.2f) { list[i].operand = ConfigSettings.minInteractInterval; break; } } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "PerformEmote")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PatchPerformEmoteInterval(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldc_R4 && (float)list[i].operand == 0.5f) { list[i].operand = ConfigSettings.minUseEmoteInterval; break; } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "ScrollMouse_performed")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> InvertHotbarScrollDirection(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); if (ConfigSettings.invertHotbarScrollDirectionConfig.Value) { for (int i = 1; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ble_Un && list[i - 1].opcode == OpCodes.Ldc_R4 && (float)list[i - 1].operand == 0f) { list[i].opcode = OpCodes.Bge_Un; break; } } } return list.AsEnumerable(); } [HarmonyPatch(typeof(PlayerControllerB), "DiscardHeldObject")] [HarmonyPrefix] private static void FixPlaceItemContainerFlags(PlayerControllerB __instance, ref bool ___throwingObject, bool placeObject = false) { if (placeObject && ConfigSettings.fixVanillaContainerDesyncBug.Value) { ___throwingObject = true; } } } [HarmonyPatch] public class QuickDrop { [CompilerGenerated] private sealed class <>c__DisplayClass8_0 { public PlayerControllerB __instance; public int oldSlot; internal bool <SwitchToItemSlotAfterDelay>b__0() { return (Object)(object)__instance.currentlyHeldObjectServer == (Object)null || __instance.currentItemSlot != oldSlot; } } [CompilerGenerated] private sealed class <SwitchToItemSlotAfterDelay>d__8 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PlayerControllerB __instance; public int slot; private <>c__DisplayClass8_0 <>8__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SwitchToItemSlotAfterDelay>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass8_0(); <>8__1.__instance = __instance; <>8__1.oldSlot = <>8__1.__instance.currentItemSlot; <>2__current = (object)new WaitUntil((Func<bool>)(() => (Object)(object)<>8__1.__instance.currentlyHeldObjectServer == (Object)null || <>8__1.__instance.currentItemSlot != <>8__1.oldSlot)); <>1__state = 1; return true; case 1: <>1__state = -1; if (<>8__1.__instance.currentItemSlot == <>8__1.oldSlot) { SyncManager.SwapHotbarSlot(slot); } else { Plugin.LogWarning("Failed to perform item quick drop. Current selected item slot was updated before drop animation could complete. (this is okay)"); } droppingItem = false; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static float timeDroppedItem; public static bool droppingItem = false; private static float timeLoggedPreventedItemSwap = 0f; private static HashSet<int> checkedSlots = new HashSet<int>(); public static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; [HarmonyPatch(typeof(PlayerControllerB), "DiscardHeldObject")] [HarmonyPostfix] private static void PerformQuickDiscard(PlayerControllerB __instance) { if (droppingItem || (Object)(object)__instance != (Object)(object)localPlayerController || !ConfigSettings.useItemQuickDropConfig.Value || !SyncManager.isSynced || (ReservedItemSlots_Compat.Enabled && ReservedItemSlots_Compat.IsItemSlotReserved(localPlayerController.currentItemSlot))) { return; } checkedSlots.Clear(); int num = -1; float num2 = 0f; int num3 = PlayerPatcher.CallGetNextItemSlot(__instance, forward: true, __instance.currentItemSlot); while (num3 != __instance.currentItemSlot && !checkedSlots.Contains(num3)) { checkedSlots.Add(num3); GrabbableObject val = __instance.ItemSlots[num3]; if ((Object)(object)val != (Object)null) { float num4 = 0f; if (val.itemProperties.isScrap) { num4 += 1f; if (!val.itemProperties.isDefensiveWeapon) { num4 += 1f; } } num4 = num4 * 100000f + val.itemProperties.weight; if (num4 > num2) { num2 = num4; num = num3; } } num3 = PlayerPatcher.CallGetNextItemSlot(__instance, forward: true, num3); } if (num >= 0 && num < __instance.ItemSlots.Length && num != __instance.currentItemSlot) { Plugin.LogVerbose("On discard item. Auto swapping to held item at slot: " + num + ". Prev slot: " + __instance.currentItemSlot); droppingItem = true; localPlayerController.playerBodyAnimator.SetBool("cancelGrab", false); PlayerPatcher.SetTimeSinceSwitchingSlots(__instance, 0f); __instance.playerBodyAnimator.ResetTrigger("SwitchHoldAnimation"); ((MonoBehaviour)__instance).StartCoroutine(SwitchToItemSlotAfterDelay(__instance, num)); } } [HarmonyPatch(typeof(PlayerControllerB), "DestroyItemInSlotAndSync")] [HarmonyPostfix] private static void PerformQuickDiscard(int itemSlot, PlayerControllerB __instance) { if ((Object)(object)__instance == (Object)(object)localPlayerController && itemSlot == __instance.currentItemSlot) { PerformQuickDiscard(__instance); } } [IteratorStateMachine(typeof(<SwitchToItemSlotAfterDelay>d__8))] private static IEnumerator SwitchToItemSlotAfterDelay(PlayerControllerB __instance, int slot) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SwitchToItemSlotAfterDelay>d__8(0) { __instance = __instance, slot = slot }; } [HarmonyPatch(typeof(PlayerControllerB), "ScrollMouse_performed")] [HarmonyPrefix] private static bool PreventItemSwappingDroppingItem(CallbackContext context, PlayerControllerB __instance) { if ((Object)(object)__instance == (Object)(object)localPlayerController && droppingItem) { float time = Time.time; if (time - timeLoggedPreventedItemSwap > 1f) { timeLoggedPreventedItemSwap = time; Plugin.LogWarningVerbose("Prevented item swap. Player is currently discarding an item? This should be fine, unless these logs are spamming."); } return false; } return true; } } [HarmonyPatch] internal static class TerminalPatcher { public static Terminal terminalInstance; public static bool initializedTerminalNodes; private static bool inHotbarPlusTerminalMenu; private static bool purchasingHotbarSlot; internal static int nextHotbarSlotPrice => SyncManager.purchasableHotbarSlotsPrice + SyncManager.purchasedHotbarSlots * SyncManager.purchasableHotbarSlotsPriceIncrease; [HarmonyPatch(typeof(Terminal), "Awake")] [HarmonyPrefix] public static void InitializeTerminal(Terminal __instance) { terminalInstance = __instance; initializedTerminalNodes = false; EditExistingTerminalNodes(); } [HarmonyPatch(typeof(Terminal), "BeginUsingTerminal")] [HarmonyPrefix] public static void OnBeginUsingTerminal(Terminal __instance) { if (!initializedTerminalNodes && SyncManager.isSynced) { EditExistingTerminalNodes(); } } public static void EditExistingTerminalNodes() { if (!SyncManager.isSynced) { return; } initializedTerminalNodes = true; if (SyncManager.purchasedHotbarSlots >= SyncManager.purchasableHotbarSlots) { return; } foreach (TerminalNode specialNode in terminalInstance.terminalNodes.specialNodes) { if (((Object)specialNode).name == "Start" && !specialNode.displayText.Contains("[HotbarPlus]")) { string text = "Type \"Help\" for a list of commands."; int num = specialNode.displayText.IndexOf(text); if (num != -1) { num += text.Length; string value = "\n\n[HotbarPlus]\nType \"HotbarPlus\" to buy additional hotbar slots."; specialNode.displayText = specialNode.displayText.Insert(num, value); } else { Plugin.LogError("Failed to add HotbarPlus tips to terminal. Maybe an update broke it?"); } } else if (((Object)specialNode).name == "HelpCommands" && !specialNode.displayText.Contains(">HOTBARPLUS")) { string value2 = "[numberOfItemsOnRoute]"; int num2 = specialNode.displayText.IndexOf(value2); if (num2 != -1) { string text2 = ">HOTBARPLUS\n"; text2 += "Purchase additional hotbar slots.\n\n"; specialNode.displayText = specialNode.displayText.Insert(num2, text2); } } } } [HarmonyPatch(typeof(Terminal), "ParsePlayerSentence")] [HarmonyPrefix] public static bool ParsePlayerSentence(ref TerminalNode __result, Terminal __instance) { if (__instance.screenText.text.Length <= 0) { inHotbarPlusTerminalMenu = false; purchasingHotbarSlot = false; return true; } string text = __instance.screenText.text.Substring(__instance.screenText.text.Length - __instance.textAdded).ToLower(); string[] array = text.Split(new char[1] { ' ' }); if (!SyncManager.isSynced) { if (text.StartsWith("hotbarplus")) { __result = BuildTerminalNodeHostDoesNotHaveMod(); return false; } return true; } if (purchasingHotbarSlot) { inHotbarPlusTerminalMenu = false; purchasingHotbarSlot = false; if ("confirm".StartsWith(text)) { if (SyncManager.purchasableHotbarSlots <= 0) { Plugin.LogWarning("Attempted to purchase additional hotbar slot while this is not enabled by the host."); __result = BuildTerminalNodePurchasingSlotsNotEnabled(); } else if (SyncManager.purchasedHotbarSlots >= SyncManager.purchasableHotbarSlots) { Plugin.LogWarning("Attempted to purchase additional hotbar slot while the maximum slots have already been purchased."); __result = BuildTerminalNodeMaxHotbarSlotsPurchased(); } else if (terminalInstance.groupCredits < nextHotbarSlotPrice) { Plugin.LogWarning("Attempted to purchase additional hotbar slot with insufficient credits. Current credits: " + terminalInstance.groupCredits + " Required credits: " + nextHotbarSlotPrice); __result = BuildTerminalNodeInsufficientFunds(); } else { Plugin.Log("Purchasing additional hotbar slot for " + nextHotbarSlotPrice + " credits. New num hotbar slots purchased: " + (SyncManager.purchasedHotbarSlots + 1)); Terminal obj = terminalInstance; obj.groupCredits -= nextHotbarSlotPrice; terminalInstance.BuyItemsServerRpc(new int[0], terminalInstance.groupCredits, terminalInstance.numberOfItemsInDropship); if (terminalInstance.groupCredits < nextHotbarSlotPrice + SyncManager.purchasableHotbarSlotsPriceIncrease && SyncManager.purchasedHotbarSlots + 1 < SyncManager.purchasableHotbarSlots) { inHotbarPlusTerminalMenu = true; } __result = BuildTerminalNodeOnPurchased(terminalInstance.groupCredits); SyncManager.SendPurchaseHotbarSlotToServer(SyncManager.purchasedHotbarSlots + 1); } } else { Plugin.Log("Canceling order."); __result = BuildCustomTerminalNode("Canceled order.\n\n"); } return false; } purchasingHotbarSlot = false; if (array.Length != 0 && (array[0] == "hotbarplus" || array[0] == "hotbar" || (inHotbarPlusTerminalMenu && ("buy".StartsWith(array[0]) || "purchase".StartsWith(array[0]))))) { if (array[0] == "hotbarplus" || array[0] == "hotbar") { if (array.Length == 1) { __result = BuildTerminalNodeHome(); inHotbarPlusTerminalMenu = true; return false; } if (!"buy".StartsWith(array[1]) && !"purchase".StartsWith(array[1])) { __result = BuildCustomTerminalNode("Invalid command. Type \"HotbarPlus\" to view the HotbarPlus terminal menu.\n\n"); return false; } } if (SyncManager.purchasableHotbarSlots <= 0) { Plugin.LogWarning("Attempted to purchase additional hotbar slot, but the host does not have this setting enabled."); __result = BuildTerminalNodePurchasingSlotsNotEnabled(); } else if (SyncManager.purchasedHotbarSlots >= SyncManager.purchasableHotbarSlots) { Plugin.LogWarning("Attempted to purchase additional hotbar slot while the maximum slots have already been purchased."); __result = BuildTerminalNodeMaxHotbarSlotsPurchased(); } else if (terminalInstance.groupCredits < nextHotbarSlotPrice) { Plugin.LogWarning("Attempted to purchase additional hotbar slot with insufficient credits. Current credits: " + terminalInstance.groupCredits + " Required credits: " + nextHotbarSlotPrice); __result = BuildTerminalNodeInsufficientFunds(); } else { Plugin.Log("Starting purchase on additional hotbar slot for " + nextHotbarSlotPrice + " credits."); __result = BuildTerminalNodeConfirmDenyPurchase(); purchasingHotbarSlot = true; } inHotbarPlusTerminalMenu = false; return false; } inHotbarPlusTerminalMenu = false; return true; } private static TerminalNode BuildTerminalNodeHome() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown TerminalNode val = new TerminalNode { displayText = "[HotbarPlus]\n\n", clearPreviousText = true, acceptAnything = false }; if (SyncManager.purchasableHotbarSlots <= 0) { val.displayText += "Additional hotbar slots cannot be purchased.\n\nHost does not have this setting enabled.\n\n"; } else if (SyncManager.purchasedHotbarSlots >= SyncManager.purchasableHotbarSlots) { val.displayText += "Additional hotbar slots cannot be purchased.\n\nMaximum purchasable slots has been reached.\n\n"; } else { val.displayText = val.displayText + "Purchase additional hotbar slot: $" + nextHotbarSlotPrice + "\n> PURCHASE\n\n"; } return val; } private static TerminalNode BuildTerminalNodeConfirmDenyPurchase() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown TerminalNode val = new TerminalNode { displayText = "You have requested to purchase an additional hotbar slot for $" + nextHotbarSlotPrice + " credits.\n\n", isConfirmationNode = true, acceptAnything = false, clearPreviousText = true }; val.displayText = val.displayText + "Credit balance: $" + terminalInstance.groupCredits + "\n"; TerminalNode val2 = val; val2.displayText = val2.displayText + "Current purchased hotbar slots: (" + SyncManager.purchasedHotbarSlots + "/" + SyncManager.purchasableHotbarSlots + ")\n\n"; val.displayText += "Please CONFIRM or DENY.\n\n"; return val; } private static TerminalNode BuildTerminalNodeOnPurchased(int newGroupCredits) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown TerminalNode val = new TerminalNode(); val.displayText = "You have successfully purchased an additional hotbar slot!\n\nNew main hotbar size: " + (SyncManager.currentHotbarSize + 1) + "\nNew credit balance: $" + newGroupCredits + "\n\n"; val.buyUnlockable = true; val.clearPreviousText = true; val.acceptAnything = false; val.playSyncedClip = 0; TerminalNode val2 = val; if (terminalInstance.groupCredits < nextHotbarSlotPrice + SyncManager.purchasableHotbarSlotsPriceIncrease && SyncManager.purchasedHotbarSlots + 1 < SyncManager.purchasableHotbarSlots) { val2.displayText = val2.displayText + "Purchase additional hotbar slot: $" + (nextHotbarSlotPrice + 1) + "\n> PURCHASE\n\n"; } return val2; } private static TerminalNode BuildTerminalNodePurchasingSlotsNotEnabled() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown return new TerminalNode { displayText = "Cannot purchase additional hotbar slots.\n\nHost does not have this setting enabled.\n\n", clearPreviousText = false, acceptAnything = false }; } private static TerminalNode BuildTerminalNodeMaxHotbarSlotsPurchased() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown return new TerminalNode { displayText = "Cannot purchase more hotbar slots.\n\nMaximum purchasable slots has been reached.\n\n", clearPreviousText = false, acceptAnything = false }; } private static TerminalNode BuildTerminalNodeInsufficientFunds() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown TerminalNode val = new TerminalNode(); val.displayText = "You cannot afford to purchase an additional hotbar slot.\n\nCredit balance is $" + terminalInstance.groupCredits + "\nAdditional hotbar slot price: " + nextHotbarSlotPrice + "\n\n"; val.clearPreviousText = true; val.acceptAnything = false; return val; } private static TerminalNode BuildTerminalNodeHostDoesNotHaveMod() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown return new TerminalNode { displayText = "You cannot use purchase additional hotbar slots until you have synced with the host.\n\nYou may also be seeing this because the host does not have this mod.\n\n", clearPreviousText = true, acceptAnything = false }; } private static TerminalNode BuildCustomTerminalNode(string displayText, bool clearPreviousText = false, bool acceptAnything = false, bool isConfirmationNode = false) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown return new TerminalNode { displayText = displayText, clearPreviousText = clearPreviousText, acceptAnything = false, isConfirmationNode = isConfirmationNode }; } } } namespace HotbarPlus.Networking { [HarmonyPatch] public class SyncManager { public static short hotbarSize; public static short purchasableHotbarSlots; public static short purchasableHotbarSlotsPrice; public static short purchasableHotbarSlotsPriceIncrease; public static short purchasedHotbarSlots; public static bool isSynced; private static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; public static short currentHotbarSize => (short)(hotbarSize + purchasedHotbarSlots); [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPostfix] private static void ResetValues() { isSynced = false; hotbarSize = (short)(int)((ConfigEntryBase)ConfigSettings.hotbarSizeConfig).DefaultValue; purchasableHotbarSlots = (short)(int)((ConfigEntryBase)ConfigSettings.purchasableHotbarSlotsConfig).DefaultValue; purchasableHotbarSlotsPrice = (short)(int)((ConfigEntryBase)ConfigSettings.purchasableHotbarSlotsPriceConfig).DefaultValue; purchasableHotbarSlotsPriceIncrease = (short)(int)((ConfigEntryBase)ConfigSettings.purchasableHotbarSlotsPriceIncreaseConfig).DefaultValue; purchasedHotbarSlots = 0; } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] private static void Init() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown isSynced = false; if (NetworkManager.Singleton.IsServer) { NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.OnRequestSyncServerRpc", new HandleNamedMessageDelegate(OnRequestSyncServerRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.OnPurchaseHotbarSlotServerRpc", new HandleNamedMessageDelegate(OnPurchaseHotbarSlotServerRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.RequestSyncHeldObjectsServerRpc", new HandleNamedMessageDelegate(RequestSyncHeldObjectsServerRpc)); hotbarSize = (short)Mathf.Max(ConfigSettings.hotbarSizeConfig.Value, 0); purchasableHotbarSlots = (short)Mathf.Max(ConfigSettings.purchasableHotbarSlotsConfig.Value, 0); purchasableHotbarSlotsPrice = (short)Mathf.Max(ConfigSettings.purchasableHotbarSlotsPriceConfig.Value, 1); purchasableHotbarSlotsPriceIncrease = (short)Mathf.Max(ConfigSettings.purchasableHotbarSlotsPriceIncreaseConfig.Value, 0); SaveManager.LoadGameValues(); OnSyncedWithServer(); } else if (NetworkManager.Singleton.IsClient) { NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.OnRequestSyncClientRpc", new HandleNamedMessageDelegate(OnRequestSyncClientRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.OnPurchaseHotbarSlotClientRpc", new HandleNamedMessageDelegate(OnPurchaseHotbarSlotClientRpc)); NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler("HotbarPlus.RequestSyncHeldObjectsClientRpc", new HandleNamedMessageDelegate(RequestSyncHeldObjectsClientRpc)); RequestSyncWithServer(); } } private static void RequestSyncWithServer() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) Plugin.Log("Requesting sync with server."); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("HotbarPlus.OnRequestSyncServerRpc", 0uL, new FastBufferWriter(0, (Allocator)2, -1), (NetworkDelivery)3); } private static void OnRequestSyncServerRpc(ulong clientId, FastBufferReader reader) { //IL_0042: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsServer) { Plugin.Log("Received request for sync from Client: " + clientId); FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(10, (Allocator)2, -1); ((FastBufferWriter)(ref val)).WriteValue<short>(ref hotbarSize, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteValue<short>(ref purchasableHotbarSlots, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteValue<short>(ref purchasableHotbarSlotsPrice, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteValue<short>(ref purchasableHotbarSlotsPriceIncrease, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteValue<short>(ref purchasedHotbarSlots, default(ForPrimitives)); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("HotbarPlus.OnRequestSyncClientRpc", clientId, val, (NetworkDelivery)3); } } private static void OnRequestSyncClientRpc(ulong clientId, FastBufferReader reader) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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) //IL_008a: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer) { ((FastBufferReader)(ref reader)).ReadValue<short>(ref hotbarSize, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasableHotbarSlots, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasableHotbarSlotsPrice, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasableHotbarSlotsPriceIncrease, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasedHotbarSlots, default(ForPrimitives)); Plugin.Log("Received sync from Server. Hotbar size: " + hotbarSize + " PurchasableHotbarSlots: " + purchasableHotbarSlots + " HotbarSlotsPrice: " + purchasableHotbarSlotsPrice + " HotbarSlotsPriceIncrease: " + purchasableHotbarSlotsPriceIncrease + " CurrentPurchasedHotbarSlots: " + purchasedHotbarSlots); OnSyncedWithServer(); } } private static void OnSyncedWithServer() { isSynced = true; PlayerPatcher.ResizeInventory(); HUDPatcher.ResizeHotbarSlotsHUD(); Keybinds.OnSetHotbarSize(); RequestSyncHeldObjects(); } internal static void OnUpdateHotbarSize() { Plugin.Log("Finished receiving OnUpdatePurchasedHotbarSlots update. New purchased hotbar slots: " + purchasedHotbarSlots); PlayerPatcher.ResizeInventory(); HUDPatcher.ResizeHotbarSlotsHUD(); Keybinds.OnSetHotbarSize(); } private static void RequestSyncHeldObjects() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer) { Plugin.Log("Requesting sync held objects from server."); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("HotbarPlus.RequestSyncHeldObjectsServerRpc", 0uL, new FastBufferWriter(0, (Allocator)2, -1), (NetworkDelivery)3); } } private static void RequestSyncHeldObjectsServerRpc(ulong clientId, FastBufferReader reader) { //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0240: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer) { return; } List<ushort> list = new List<ushort>(); List<short> list2 = new List<short>(); Dictionary<ushort, List<short>> dictionary = new Dictionary<ushort, List<short>>(); Dictionary<ushort, List<ulong>> dictionary2 = new Dictionary<ushort, List<ulong>>(); int num = 2; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { ushort num2 = (ushort)val.actualClientId; ushort num3 = (ushort)val.playerClientId; if (num2 == clientId || (num2 == 0 && (Object)(object)val != (Object)(object)localPlayerController)) { continue; } for (int j = 4; j < currentHotbarSize; j++) { GrabbableObject val2 = val.ItemSlots[j]; if ((Object)(object)val2 != (Object)null || j == val.currentItemSlot) { if (!dictionary.ContainsKey(num3)) { dictionary.Add(num3, new List<short>()); dictionary2.Add(num3, new List<ulong>()); } if ((Object)(object)val2 != (Object)null) { dictionary[num3].Add((short)j); dictionary2[num3].Add(((NetworkBehaviour)val2).NetworkObjectId); } } } if (dictionary.ContainsKey(num3) && (dictionary[num3].Count > 0 || (val.currentItemSlot >= 4 && val.currentItemSlot < currentHotbarSize))) { num += 2; num += 2; num += 2; num += 10 * dictionary[num3].Count; list.Add(num3); list2.Add((short)val.currentItemSlot); } } Plugin.Log("Receiving sync held objects request from client with id: " + clientId + ". " + list.Count + " players are currently holding items in extra item slots."); FastBufferWriter val3 = default(FastBufferWriter); ((FastBufferWriter)(ref val3))..ctor(num, (Allocator)2, -1); short num4 = (short)list.Count; ((FastBufferWriter)(ref val3)).WriteValue<short>(ref num4, default(ForPrimitives)); for (int k = 0; k < list.Count; k++) { ushort key = list[k]; short num5 = list2[k]; short num6 = (short)dictionary[key].Count; ((FastBufferWriter)(ref val3)).WriteValue<ushort>(ref key, default(ForPrimitives)); ((FastBufferWriter)(ref val3)).WriteValue<short>(ref num5, default(ForPrimitives)); ((FastBufferWriter)(ref val3)).WriteValue<short>(ref num6, default(ForPrimitives)); for (int l = 0; l < num6; l++) { short num7 = dictionary[key][l]; ulong num8 = dictionary2[key][l]; ((FastBufferWriter)(ref val3)).WriteValue<short>(ref num7, default(ForPrimitives)); ((FastBufferWriter)(ref val3)).WriteValue<ulong>(ref num8, default(ForPrimitives)); } } NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("HotbarPlus.RequestSyncHeldObjectsClientRpc", clientId, val3, (NetworkDelivery)4); } private static void RequestSyncHeldObjectsClientRpc(ulong clientId, FastBufferReader reader) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsClient || NetworkManager.Singleton.IsServer) { return; } short num = default(short); ((FastBufferReader)(ref reader)).ReadValue<short>(ref num, default(ForPrimitives)); Plugin.Log("Receiving sync held objects from server. Number of players already holding items in extra hotbar slots: " + num); ushort num2 = default(ushort); short num3 = default(short); short num4 = default(short); short num5 = default(short); ulong networkObjectId = default(ulong); for (int i = 0; i < num; i++) { ((FastBufferReader)(ref reader)).ReadValue<ushort>(ref num2, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref num3, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<short>(ref num4, default(ForPrimitives)); PlayerControllerB playerControllerByPlayerId = GetPlayerControllerByPlayerId(num2); if (playerControllerByPlayerId.currentItemSlot >= 0 && playerControllerByPlayerId.currentItemSlot < playerControllerByPlayerId.ItemSlots.Length && playerControllerByPlayerId.currentItemSlot != num3 && num3 >= 4) { GrabbableObject val = playerControllerByPlayerId.ItemSlots[playerControllerByPlayerId.currentItemSlot]; if ((Object)(object)val != (Object)null) { val.PocketItem(); } playerControllerByPlayerId.currentItemSlot = num3; } for (int j = 0; j < num4; j++) { ((FastBufferReader)(ref reader)).ReadValue<short>(ref num5, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValue<ulong>(ref networkObjectId, default(ForPrimitives)); GrabbableObject grabbableObjectByNetworkId = GetGrabbableObjectByNetworkId(networkObjectId); if ((Object)(object)grabbableObjectByNetworkId != (Object)null && Object.op_Implicit((Object)(object)playerControllerByPlayerId) && num5 >= 0) { grabbableObjectByNetworkId.isHeld = true; playerControllerByPlayerId.ItemSlots[num5] = grabbableObjectByNetworkId; grabbableObjectByNetworkId.parentObject = playerControllerByPlayerId.serverItemHolder; grabbableObjectByNetworkId.playerHeldBy = playerControllerByPlayerId; bool flag = num3 == num5; grabbableObjectByNetworkId.EnablePhysics(false); if (flag) { grabbableObjectByNetworkId.EquipItem(); playerControllerByPlayerId.currentlyHeldObjectServer = grabbableObjectByNetworkId; playerControllerByPlayerId.isHoldingObject = true; playerControllerByPlayerId.twoHanded = grabbableObjectByNetworkId.itemProperties.twoHanded; playerControllerByPlayerId.twoHandedAnimation = grabbableObjectByNetworkId.itemProperties.twoHandedAnimation; playerControllerByPlayerId.currentItemSlot = num5; } else { grabbableObjectByNetworkId.PocketItem(); } } } } } public static void SendPurchaseHotbarSlotToServer(int newAdditionalSlots) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(2, (Allocator)2, -1); Plugin.Log("Sending purchase hotbar slot update to server. New additional hotbar slots: " + newAdditionalSlots); short num = (short)newAdditionalSlots; ((FastBufferWriter)(ref val)).WriteValue<short>(ref num, default(ForPrimitives)); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("HotbarPlus.OnPurchaseHotbarSlotServerRpc", 0uL, val, (NetworkDelivery)3); } private static void OnPurchaseHotbarSlotServerRpc(ulong clientId, FastBufferReader reader) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (!NetworkManager.Singleton.IsServer) { return; } ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasedHotbarSlots, default(ForPrimitives)); if (NetworkManager.Singleton.IsClient) { if (clientId != localPlayerController.actualClientId) { Plugin.Log("Receiving on purchase additional hotbar slot update from client: " + clientId + ". New hotbar slots purchased: " + purchasedHotbarSlots); } OnUpdateHotbarSize(); } SendNewAdditionalHotbarSlotsToClients(purchasedHotbarSlots); } public static void SendNewAdditionalHotbarSlotsToClients(int newAdditionalSlots) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsServer) { FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(2, (Allocator)2, -1); short num = (short)newAdditionalSlots; ((FastBufferWriter)(ref val)).WriteValue<short>(ref num, default(ForPrimitives)); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll("HotbarPlus.OnPurchaseHotbarSlotClientRpc", val, (NetworkDelivery)3); } } private static void OnPurchaseHotbarSlotClientRpc(ulong clientId, FastBufferReader reader) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsClient && !NetworkManager.Singleton.IsServer) { ((FastBufferReader)(ref reader)).ReadValue<short>(ref purchasedHotbarSlots, default(ForPrimitives)); Plugin.Log("Receiving on purchase additional hotbar slot update from server. New hotbar slots purchased: " + purchasedHotbarSlots); OnUpdateHotbarSize(); } } private static void SendHotbarSlotChange(int hotbarSlot) { if (NetworkManager.Singleton.IsClient && hotbarSlot != localPlayerController.currentItemSlot) { Plugin.Log("Sending hotbar swap slot: " + hotbarSlot); int num = hotbarSlot - localPlayerController.currentItemSlot; bool flag = num > 0; for (int i = 0; i < Mathf.Abs(num); i++) { MethodInfo method = ((object)localPlayerController).GetType().GetMethod("SwitchItemSlotsServerRpc", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(localPlayerController, new object[1] { flag }); } } } public static void SwapHotbarSlot(int hotbarIndex) { if (hotbarIndex < currentHotbarSize) { SendHotbarSlotChange(hotbarIndex); CallSwitchToItemSlotMethod(localPlayerController, hotbarIndex); } } public static void CallSwitchToItemSlotMethod(PlayerControllerB playerController, int hotbarIndex) { if (hotbarIndex >= 0 && hotbarIndex < currentHotbarSize && playerController.currentItemSlot != hotbarIndex) { if ((Object)(object)playerController == (Object)(object)localPlayerController) { ShipBuildModeManager.Instance.CancelBuildMode(true); playerController.playerBodyAnimator.SetBool("GrabValidated", false); } MethodInfo method = ((object)playerController).GetType().GetMethod("SwitchToItemSlot", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(playerController, new object[2] { hotbarIndex, null }); PlayerPatcher.SetTimeSinceSwitchingSlots(playerController, 0f); if ((Object)(object)playerController.currentlyHeldObjectServer != (Object)null) { ((Component)playerController.currentlyHeldObjectServer).gameObject.GetComponent<AudioSource>().PlayOneShot(playerController.currentlyHeldObjectServer.itemProperties.grabSFX, 0.6f); } } } internal static PlayerControllerB GetPlayerControllerByClientId(ulong clientId) { for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[i]; if (val.actualClientId == clientId) { return val; } } return null; } internal static PlayerControllerB GetPlayerControllerByPlayerId(ulong playerId) { for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[i]; if (val.playerClientId == playerId) { return val; } } return null; } internal static GrabbableObject GetGrabbableObjectByNetworkId(ulong networkObjectId) { if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(networkObjectId, out var value)) { return ((Component)value).GetComponentInChildren<GrabbableObject>(); } return null; } } } namespace HotbarPlus.Input { internal class IngameKeybinds : LcInputActions { internal static IngameKeybinds Instance = new IngameKeybinds(); [InputAction("<Keyboard>/1", Name = "[HB+] Quick Slot 1")] public InputAction QuickHotbarSlotHotkey1 { get; set; } [InputAction("<Keyboard>/2", Name = "[HB+] Quick Slot 2")] public InputAction QuickHotbarSlotHotkey2 { get; set; } [InputAction("<Keyboard>/3", Name = "[HB+] Quick Slot 3")] public InputAction QuickHotbarSlotHotkey3 { get; set; } [InputAction("<Keyboard>/4", Name = "[HB+] Quick Slot 4")] public InputAction QuickHotbarSlotHotkey4 { get; set; } [InputAction("<Keyboard>/5", Name = "[HB+] Quick Slot 5")] public InputAction QuickHotbarSlotHotkey5 { get; set; } [InputAction("<Keyboard>/6", Name = "[HB+] Quick Slot 6")] public InputAction QuickHotbarSlotHotkey6 { get; set; } [InputAction("<Keyboard>/7", Name = "[HB+] Quick Slot 7")] public InputAction QuickHotbarSlotHotkey7 { get; set; } [InputAction("<Keyboard>/8", Name = "[HB+] Quick Slot 8")] public InputAction QuickHotbarSlotHotkey8 { get; set; } internal static InputActionAsset GetAsset() { return ((LcInputActions)Instance).Asset; } } internal class InputUtilsCompat { internal static InputActionAsset Asset => IngameKeybinds.GetAsset(); internal static bool Enabled => Plugin.IsModLoaded("com.rune580.LethalCompanyInputUtils"); public static InputAction QuickHotbarSlotHotkey1 => IngameKeybinds.Instance.QuickHotbarSlotHotkey1; public static InputAction QuickHotbarSlotHotkey2 => IngameKeybinds.Instance.QuickHotbarSlotHotkey2; public static InputAction QuickHotbarSlotHotkey3 => IngameKeybinds.Instance.QuickHotbarSlotHotkey3; public static InputAction QuickHotbarSlotHotkey4 => IngameKeybinds.Instance.QuickHotbarSlotHotkey4; public static InputAction QuickHotbarSlotHotkey5 => IngameKeybinds.Instance.QuickHotbarSlotHotkey5; public static InputAction QuickHotbarSlotHotkey6 => IngameKeybinds.Instance.QuickHotbarSlotHotkey6; public static InputAction QuickHotbarSlotHotkey7 => IngameKeybinds.Instance.QuickHotbarSlotHotkey7; public static InputAction QuickHotbarSlotHotkey8 => IngameKeybinds.Instance.QuickHotbarSlotHotkey8; } [HarmonyPatch] public class Keybinds { private static bool setHotbarSize; public static InputActionAsset Asset; public static InputActionMap ActionMap; public static InputAction quickHotbarSlotHotkey1; public static InputAction quickHotbarSlotHotkey2; public static InputAction quickHotbarSlotHotkey3; public static InputAction quickHotbarSlotHotkey4; public static InputAction quickHotbarSlotHotkey5; public static InputAction quickHotbarSlotHotkey6; public static InputAction quickHotbarSlotHotkey7; public static InputAction quickHotbarSlotHotkey8; private static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; public static void InitKeybinds() { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown setHotbarSize = false; if (ConfigSettings.useHotbarNumberHotkeysConfig.Value) { if (InputUtilsCompat.Enabled) { Asset = InputUtilsCompat.Asset; quickHotbarSlotHotkey1 = InputUtilsCompat.QuickHotbarSlotHotkey1; quickHotbarSlotHotkey2 = InputUtilsCompat.QuickHotbarSlotHotkey2; quickHotbarSlotHotkey3 = InputUtilsCompat.QuickHotbarSlotHotkey3; quickHotbarSlotHotkey4 = InputUtilsCompat.QuickHotbarSlotHotkey4; quickHotbarSlotHotkey5 = InputUtilsCompat.QuickHotbarSlotHotkey5; quickHotbarSlotHotkey6 = InputUtilsCompat.QuickHotbarSlotHotkey6; quickHotbarSlotHotkey7 = InputUtilsCompat.QuickHotbarSlotHotkey7; quickHotbarSlotHotkey8 = InputUtilsCompat.QuickHotbarSlotHotkey8; } else { Asset = ScriptableObject.CreateInstance<InputActionAsset>(); ActionMap = new InputActionMap("HotbarPlus"); InputActionSetupExtensions.AddActionMap(Asset, ActionMap); quickHotbarSlotHotkey1 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 1", (InputActionType)0, "<Keyboard>/1", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey2 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 2", (InputActionType)0, "<Keyboard>/2", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey3 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 3", (InputActionType)0, "<Keyboard>/3", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey4 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 4", (InputActionType)0, "<Keyboard>/4", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey5 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 5", (InputActionType)0, "<Keyboard>/5", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey6 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 6", (InputActionType)0, "<Keyboard>/6", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey7 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 7", (InputActionType)0, "<Keyboard>/7", "Press", (string)null, (string)null, (string)null); quickHotbarSlotHotkey8 = InputActionSetupExtensions.AddAction(ActionMap, "[HB+] Quick Slot 8", (InputActionType)0, "<Keyboard>/8", "Press", (string)null, (string)null, (string)null); } } } public static void OnSetHotbarSize() { setHotbarSize = true; } [HarmonyPatch(typeof(StartOfRound), "OnEnable")] [HarmonyPostfix] public static void OnEnable() { if (ConfigSettings.useHotbarNumberHotkeysConfig.Value) { Asset.Enable(); quickHotbarSlotHotkey1.performed += OnPressItemSlotHotkeyAction1; quickHotbarSlotHotkey2.performed += OnPressItemSlotHotkeyAction2; quickHotbarSlotHotkey3.performed += OnPressItemSlotHotkeyAction3; quickHotbarSlotHotkey4.performed += OnPressItemSlotHotkeyAction4; quickHotbarSlotHotkey5.performed += OnPressItemSlotHotkeyAction5; quickHotbarSlotHotkey6.performed += OnPressItemSlotHotkeyAction6; quickHotbarSlotHotkey7.performed += OnPressItemSlotHotkeyAction7; quickHotbarSlotHotkey8.performed += OnPressItemSlotHotkeyAction8; } } [HarmonyPatch(typeof(StartOfRound), "OnDisable")] [HarmonyPostfix] public static void OnDisable() { if (ConfigSettings.useHotbarNumberHotkeysConfig.Value) { Asset.Disable(); quickHotbarSlotHotkey1.performed -= OnPressItemSlotHotkeyAction1; quickHotbarSlotHotkey2.performed -= OnPressItemSlotHotkeyAction2; quickHotbarSlotHotkey3.performed -= OnPressItemSlotHotkeyAction3; quickHotbarSlotHotkey4.performed -= OnPressItemSlotHotkeyAction4; quickHotbarSlotHotkey5.performed -= OnPressItemSlotHotkeyAction5; quickHotbarSlotHotkey6.performed -= OnPressItemSlotHotkeyAction6; quickHotbarSlotHotkey7.performed -= OnPressItemSlotHotkeyAction7; quickHotbarSlotHotkey8.performed -= OnPressItemSlotHotkeyAction8; } } private static void OnPressItemSlotHotkeyAction1(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 0); } private static void OnPressItemSlotHotkeyAction2(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 1); } private static void OnPressItemSlotHotkeyAction3(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 2); } private static void OnPressItemSlotHotkeyAction4(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 3); } private static void OnPressItemSlotHotkeyAction5(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 4); } private static void OnPressItemSlotHotkeyAction6(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 5); } private static void OnPressItemSlotHotkeyAction7(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 6); } private static void OnPressItemSlotHotkeyAction8(CallbackContext context) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) OnPressItemSlotHotkeyAction(context, 7); } private static void OnPressItemSlotHotkeyAction(CallbackContext context, int slot) { if (!((Object)(object)localPlayerController == (Object)null) && ((NetworkBehaviour)localPlayerController).IsOwner && localPlayerController.isPlayerControlled && SyncManager.isSynced && ((CallbackContext)(ref context)).performed && ConfigSettings.useHotbarNumberHotkeysConfig.Value && setHotbarSize && slot >= 0 && slot < SyncManager.currentHotbarSize && !(bool)Traverse.Create((object)localPlayerController).Field("throwingObject").GetValue() && !localPlayerController.isTypingChat && !localPlayerController.inTerminalMenu && !localPlayerController.quickMenuManager.isMenuOpen && !localPlayerController.isPlayerDead && !localPlayerController.isGrabbingObjectAnimation && !localPlayerController.activatingItem && !localPlayerController.inSpecialInteractAnimation && !localPlayerController.twoHanded && !localPlayerController.jetpackControls && !localPlayerController.disablingJetpackControls && !(PlayerPatcher.GetTimeSinceSwitchingSlots(localPlayerController) < ((!ConfigSettings.disableFasterHotbarSwappingConfig.Value) ? ConfigSettings.minSwapItemInterval : 0.3f))) { SyncManager.SwapHotbarSlot(slot); } } } } namespace HotbarPlus.Config { public static class ConfigSettings { public static ConfigEntry<int> hotbarSizeConfig; public static ConfigEntry<int> purchasableHotbarSlotsConfig; public static ConfigEntry<int> purchasableHotbarSlotsPriceConfig; public static ConfigEntry<int> purchasableHotbarSlotsPriceIncreaseConfig; public static ConfigEntry<bool> useHotbarNumberHotkeysConfig; public static ConfigEntry<bool> invertHotbarScrollDirectionConfig; public static ConfigEntry<bool> useItemQuickDropConfig; public static ConfigEntry<bool> disableFasterHotbarSwappingConfig; public static ConfigEntry<bool> disableFasterItemDroppingConfig; public static ConfigEntry<bool> disableFasterItemActivateConfig; public static ConfigEntry<bool> applyFormattingToReservedItemSlotsConfig; public static ConfigEntry<bool> disableEnergyBarsConfig; public static ConfigEntry<bool> disableItemStaticWarningsConfig; public static ConfigEntry<int> overrideHotbarSpacingConfig; public static ConfigEntry<float> overrideFadeHudAlphaConfig; public static ConfigEntry<float> overrideHotbarHudSizeConfig; public static ConfigEntry<bool> fixVanillaContainerDesyncBug; public static ConfigEntry<bool> verboseLogs; public static Dictionary<string, ConfigEntryBase> currentConfigEntries = new Dictionary<string, ConfigEntryBase>(); public static float minSwapItemInterval = 0.05f; public static float minActivateItemInterval = 0.05f; public static float minDiscardItemInterval = 0.05f; public static float minInteractInterval = 0.05f; public static float minUseEmoteInterval = 0.25f; public static List<ConfigEntryBase> configEntries = new List<ConfigEntryBase>(); public static void BindConfigSettings() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Expected O, but got Unknown //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Expected O, but got Unknown //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Expected O, but got Unknown Plugin.Log("BindingConfigs"); hotbarSizeConfig = AddConfigEntry<int>(((BaseUnityPlugin)Plugin.instance).Config.Bind<int>("Server-side", "NumHotbarSlots", 4, new ConfigDescription("[Host only] The amount of hotbar slots player will have. This will sync with other clients who have the mod.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 20), Array.Empty<object>()))); purchasableHotbarSlotsConfig = AddConfigEntry<int>(((BaseUnityPlugin)Plugin.instance).Config.Bind<int>("Server-side", "PurchasableHotbarSlots", 0, new ConfigDescription("[Host only] The amount of hotbar slots that can be purchased", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 10), Array.Empty<object>()))); purchasableHotbarSlotsPriceConfig = AddConfigEntry<int>(((BaseUnityPlugin)Plugin.instance).Config.Bind<int>("Server-side", "PurchasableHotbarSlotsPrice", 200, "[Host only] The price of purchasing a hotbar slot.")); purchasableHotbarSlotsPriceIncreaseConfig = AddConfigEntry<int>(((BaseUnityPlugin)Plugin.instance).Config.Bind<int>("Server-side", "PurchasableHotbarSlotsPriceIncrease", 100, "[Host only] The price increase on hotbar slots after each purchase.")); useHotbarNumberHotkeysConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "UseHotbarNumberHotkeys", true, "Use the quick item selection numerical hotkeys.")); invertHotbarScrollDirectionConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "InvertHotbarScrollDirection", true, "Inverts the direction in which you scroll on the hotbar. Will not affect the terminal scrolling direction.")); useItemQuickDropConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "UseItemQuickDropConfig", true, "If enabled, dropping an item will automatically swap to the next item for easier chain dropping. This may not work if the host does not have the mod. This is for stability reasons, and to help reduce de-sync.")); disableFasterHotbarSwappingConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "UseDefaultItemSwapInterval", false, "If true, the interval (delay) between swapping items will not be reduced by this mod.")); disableFasterItemDroppingConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "UseDefaultItemDropInterval", false, "If true, the interval (delay) between dropping items will not be reduced by this mod.")); disableFasterItemActivateConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Client-side", "UseDefaultItemActivateInterval", false, "If true, the interval (delay) between activating items will not be reduced by this mod.")); disableEnergyBarsConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("UI", "DisableEnergyBars", false, "Disables/hides the energy bars for items in the HUD.")); disableItemStaticWarningsConfig = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("UI", "DisableItemStaticWarnings", false, "Disables the lightning indicator that appears over item slots of held metal items that are about to be struck with lightning.")); overrideHotbarSpacingConfig = AddConfigEntry<int>(((BaseUnityPlugin)Plugin.instance).Config.Bind<int>("UI", "OverrideHotbarHudSpacing", 10, new ConfigDescription("The spacing between each hotbar slot UI element.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()))); overrideHotbarHudSizeConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("UI", "OverrideHotbarHudSize", 1f, new ConfigDescription("Scales the hotbar slot HUD elements by a multiplier. HUD spacing/position should be scaled automatically.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 10f), Array.Empty<object>()))); overrideFadeHudAlphaConfig = AddConfigEntry<float>(((BaseUnityPlugin)Plugin.instance).Config.Bind<float>("UI", "OverrideFadeHudAlpha", 0.13f, new ConfigDescription("Sets the alpha for when the hotbar hud fades. Default = 0.13 | Fade completely: 0 | Never fade: 1", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()))); verboseLogs = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Other", "VerboseLogs", true, "If enabled, extra logs will be created for debugging. This may be useful for tracking down various issues.")); fixVanillaContainerDesyncBug = AddConfigEntry<bool>(((BaseUnityPlugin)Plugin.instance).Config.Bind<bool>("Other", "FixVanillaContainerDesyncBug", false, "Fixes vanilla bug that allows you to pick up items immediately after placing an item into a container. This bug can cause de-sync if a non-host client places an item into a storage container, and then immediately picks up the same item before the host acknowledge that they placed it in the first place.\nThis usually causes you to drop all of your items, and you usually won't be able to pick them up again.\nThis option will be enabled by default for all players soon.")); hotbarSizeConfig.Value = Mathf.Max(hotbarSizeConfig.Value, 0); purchasableHotbarSlotsConfig.Value = Mathf.Max(purchasableHotbarSlotsConfig.Value, 0); purchasableHotbarSlotsPriceConfig.Value = Mathf.Max(purchasableHotbarSlotsPriceConfig.Value, 1); purchasableHotbarSlotsPriceIncreaseConfig.Value = Mathf.Max(purchasableHotbarSlotsPriceIncreaseConfig.Value, 0); TryRemoveOldConfigSettings(); } public static ConfigEntry<T> AddConfigEntry<T>(ConfigEntry<T> configEntry) { currentConfigEntries.Add(((ConfigEntryBase)configEntry).Definition.Key, (ConfigEntryBase)(object)configEntry); return configEntry; } public static void TryRemoveOldConfigSettings() { HashSet<string> hashSet = new HashSet<string>(); HashSet<string> hashSet2 = new HashSet<string>(); foreach (ConfigEntryBase value in currentConfigEntries.Values) { hashSet.Add(value.Definition.Section); hashSet2.Add(value.Definition.Key); } try { ConfigFile config = ((BaseUnityPlugin)Plugin.instance).Config; string configFilePath = config.ConfigFilePath; if (!File.Exists(configFilePath)) { return; } string text = File.ReadAllText(configFilePath); string[] array = File.ReadAllLines(configFilePath); string text2 = ""; for (int i = 0; i < array.Length; i++) { array[i] = array[i].Replace("\n", ""); if (array[i].Length <= 0) { continue; } if (array[i].StartsWith("[")) { if (text2 != "" && !hashSet.Contains(text2)) { text2 = "[" + text2 + "]"; int num = text.IndexOf(text2); int num2 = text.IndexOf(array[i]); text = text.Remove(num, num2 - num); } text2 = array[i].Replace("[", "").Replace("]", "").Trim(); } else { if (!(text2 != "")) { continue; } if (i <= array.Length - 4 && array[i].StartsWith("##")) { int j; for (j = 1; i + j < array.Length && array[i + j].Length > 3; j++) { } if (hashSet.Contains(text2)) { int num3 = array[i + j - 1].IndexOf("="); string item = array[i + j - 1].Substring(0, num3 - 1); if (!hashSet2.Contains(item)) { int num4 = text.IndexOf(array[i]); int num5 = text.IndexOf(array[i + j - 1]) + array[i + j - 1].Length; text = text.Remove(num4, num5 - num4); } } i += j - 1; } else if (array[i].Length > 3) { text = text.Replace(array[i], ""); } } } if (!hashSet.Contains(text2)) { text2 = "[" + text2 + "]"; int num6 = text.IndexOf(text2); text = text.Remove(num6, text.Length - num6); } while (text.Contains("\n\n\n")) { text = text.Replace("\n\n\n", "\n\n"); } File.WriteAllText(configFilePath, text); config.Reload(); } catch { } } } } namespace HotbarPlus.Compatibility { internal static class GeneralImprovements_Compat { public static bool Enabled => Plugin.IsModLoaded("ShaosilGaming.GeneralImprovements"); } internal static class ReservedItemSlots_Compat { public static bool Enabled => Plugin.IsModLoaded("FlipMods.ReservedItemSlotCore"); public static bool IsToggledInReservedItemSlots() { if (!Enabled) { return false; } return ReservedHotbarManager.isToggledInReservedSlots; } public static bool IsItemSlotReserved(int index) { if (!Enabled) { return false; } return ReservedPlayerData.localPlayerData.IsReservedItemSlot(index); } public static bool ShouldDisableEnergyBarsReservedItemSlots() { if (!Enabled) { return false; } try { return ConfigSettings.disableHotbarPlusEnergyBars.Value; } catch { return false; } } } internal static class TooManyEmotes_Compat { public static bool Enabled => Plugin.IsModLoaded("FlipMods.TooManyEmotes"); public static bool IsLocalPlayerPerformingCustomEmote() { if ((Object)(object)EmoteControllerPlayer.emoteControllerLocal != (Object)null && ((EmoteController)EmoteControllerPlayer.emoteControllerLocal).IsPerformingCustomEmote()) { return true; } return false; } public static bool CanMoveWhileEmoting() { return ThirdPersonEmoteController.allowMovingWhileEmoting; } } }
BepInEx/plugins/plugins/Insanity/InsanityRemastered.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance; using DunGen.Graph; using GameNetcodeStuff; using HarmonyLib; using InsanityRemastered.General; using InsanityRemastered.Hallucinations; using InsanityRemastered.ModIntegration; using InsanityRemastered.Patches; using InsanityRemastered.Utilities; using InsanityRemasteredMod; using InsanityRemasteredMod.General; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("SanityRewrittenMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SanityRewrittenMod")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("023dcefc-0d1e-49d8-8d40-c74bd054370b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] public enum SanityLevel { Low, Medium, High, Max } public enum SceneNames { InitSceneLaunchOptions, MainMenu, SampleSceneRelay } namespace InsanityRemastered { [BepInPlugin("BudgetAirpods.InsanityRemastered", "Insanity Remastered", "1.1.1")] public class InsanityRemasteredBase : BaseUnityPlugin { public static InsanityRemasteredBase Instance; public const string modGUID = "BudgetAirpods.InsanityRemastered"; public const string modName = "Insanity Remastered"; public const string modVersion = "1.1.1"; private readonly Harmony harmony = new Harmony("BudgetAirpods.InsanityRemastered"); internal static GameObject SanityModObject; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } SceneManager.sceneLoaded += OnSceneLoaded; AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad; InsanityRemasteredLogger.Initialize("BudgetAirpods.InsanityRemastered"); InsanityRemasteredConfiguration.Initialize(((BaseUnityPlugin)this).Config); InsanityRemasteredConfiguration.ValidateSettings(); InsanityRemasteredContent.LoadContent(); harmony.PatchAll(); } private void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args) { ModIntegrator.BeginIntegrations(args.LoadedAssembly); } private void SetupModManager() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("Sanity Mod"); val.AddComponent<InsanityGameManager>(); val.AddComponent<InsanitySoundManager>(); ((Behaviour)val.AddComponent<HallucinationManager>()).enabled = false; SanityModObject = val; ((Object)SanityModObject).hideFlags = (HideFlags)61; } private void OnSceneLoaded(Scene level, LoadSceneMode loadEnum) { if (((Scene)(ref level)).name == SceneNames.SampleSceneRelay.ToString() && !SanityModObject.activeInHierarchy) { SanityModObject.SetActive(true); } if (((Scene)(ref level)).name == SceneNames.MainMenu.ToString()) { if (Object.op_Implicit((Object)(object)SanityModObject)) { InsanitySoundManager.Instance.StopModSounds(); ((Object)SanityModObject).hideFlags = (HideFlags)61; } else if (!Object.op_Implicit((Object)(object)SanityModObject)) { SetupModManager(); ((Object)SanityModObject).hideFlags = (HideFlags)61; } } } } public enum HallucinationType { Staring, Wandering, Approaching } internal class AnimationID { public const string PlayerWalking = "Walking"; public const string PlayerCrouching = "crouching"; public const string SpiderMoving = "moving"; public const string BrackenMoving = "sneak"; } } namespace InsanityRemastered.Utilities { [HarmonyPatch] internal class GameEvents { public static event Action<bool> OnEnterOrLeaveFacility; public static event Action OnGameStart; public static event Action OnLateGameStart; public static event Action OnGameEnd; public static event Action OnEnemySpawned; public static event Action OnShipLanded; public static event Action<GrabbableObject> OnItemSwitch; public static event Action OnPlayerJoin; public static event Action OnPlayerLeave; public static event Action OnPlayerDied; public static event Action<int> OnTakeDamage; public static event Action<EnemyAI> OnKillEnemy; [HarmonyPatch(typeof(EntranceTeleport), "TeleportPlayer")] [HarmonyPrefix] private static void OnEnterLeaveFacility(EntranceTeleport __instance) { GameEvents.OnEnterOrLeaveFacility?.Invoke(__instance.isEntranceToBuilding ? true : false); } [HarmonyPatch(typeof(RoundManager), "GenerateNewLevelClientRpc")] [HarmonyPostfix] private static void GameStart() { GameEvents.OnGameStart?.Invoke(); } [HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")] [HarmonyPostfix] private static void LateGameStart() { GameEvents.OnLateGameStart?.Invoke(); } [HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")] [HarmonyPostfix] private static void GameEnd() { GameEvents.OnGameEnd?.Invoke(); } [HarmonyPatch(typeof(StartOfRound), "OnShipLandedMiscEvents")] [HarmonyPostfix] private static void ShipLanded() { GameEvents.OnShipLanded?.Invoke(); } [HarmonyPatch(typeof(RoundManager), "SpawnEnemyGameObject")] [HarmonyPostfix] private static void SpawnEnemy() { GameEvents.OnEnemySpawned?.Invoke(); } [HarmonyPatch(typeof(StartOfRound), "OnClientDisconnect")] [HarmonyPostfix] private static void PlayerLeave() { GameEvents.OnPlayerLeave?.Invoke(); } [HarmonyPatch(typeof(PlayerControllerB), "SwitchToItemSlot")] [HarmonyPostfix] private static void SwitchItem(ref GrabbableObject ___currentlyHeldObjectServer) { if (___currentlyHeldObjectServer != null) { GameEvents.OnItemSwitch?.Invoke(___currentlyHeldObjectServer); } } [HarmonyPatch(typeof(PlayerControllerB), "KillPlayer")] [HarmonyPostfix] private static void OnPlayerDeath(ref PlayerControllerB __instance) { GameEvents.OnPlayerDied?.Invoke(); } [HarmonyPatch(typeof(PlayerControllerB), "DamagePlayer")] [HarmonyPostfix] private static void TakeDamage(int damageNumber) { GameEvents.OnTakeDamage?.Invoke(damageNumber); } [HarmonyPatch(typeof(EnemyAI), "KillEnemy")] [HarmonyPostfix] private static void KillEnemy(EnemyAI __instance) { GameEvents.OnKillEnemy?.Invoke(__instance); } } } namespace InsanityRemastered.Patches { [HarmonyPatch(typeof(FlashlightItem))] internal class ItemPatcher { private static float walkieRNGFrequency = 35f; private static float walkieRNGTimer; [HarmonyPatch(typeof(FlashlightItem))] [HarmonyPatch("SwitchFlashlight")] [HarmonyPostfix] private static void OnUse(bool on) { if (on) { PlayerPatcher.FlashlightOn = true; } else if (!on) { PlayerPatcher.FlashlightOn = false; } } [HarmonyPatch(typeof(GrabbableObject), "EquipItem")] [HarmonyPostfix] private static void SetControlTipForPills(ref GrabbableObject __instance) { if (((Object)__instance.itemProperties).name == "PillBottle") { HUDManager.Instance.ChangeControlTip(1, "Consume pills: [LMB]", false); } } [HarmonyPatch(typeof(WalkieTalkie), "Update")] [HarmonyPostfix] private static void WalkieEffects(ref WalkieTalkie __instance) { if (!GameNetworkManager.Instance.gameHasStarted || !PlayerPatcher.LocalPlayer.isInsideFactory || InsanityRemasteredConfiguration.disableWalkieTalkiesSkinwalker) { return; } walkieRNGTimer += Time.deltaTime; if (walkieRNGTimer > walkieRNGFrequency && ((GrabbableObject)__instance).isBeingUsed) { walkieRNGTimer = 0f; float num = Random.Range(0f, 1f); if (num <= 0.35f && SkinwalkerModIntegration.IsInstalled && InsanityGameManager.AreThereOtherPlayers) { __instance.thisAudio.PlayOneShot(SkinwalkerModIntegration.GetRandomClip()); } } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerPatcher { public static SanityLevel CurrentSanityLevel; public static int PlayersConnected; public static float InsanityLevel; private static GrabbableObject heldItem; public static PlayerControllerB LocalPlayer => GameNetworkManager.Instance.localPlayerController; public static bool FlashlightOn { get; set; } private static bool HoldingPills { get; set; } public static event Action OnInteractWithFakeItem; [HarmonyPatch("Awake")] [HarmonyPostfix] private static void _Awake(ref PlayerControllerB __instance) { InsanityRemastered_AI.OnHallucinationEnded += LoseSanity; GameEvents.OnItemSwitch += OnItemSwitch; } [HarmonyPatch(typeof(PlayerControllerB), "SetPlayerSanityLevel")] [HarmonyPrefix] private static bool PlayerInsanityPatch() { //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Invalid comparison between Unknown and I4 if (GameNetworkManager.Instance.gameHasStarted) { InsanityLevel = LocalPlayer.insanityLevel; if (StartOfRound.Instance.inShipPhase || !TimeOfDay.Instance.currentDayTimeStarted) { LocalPlayer.insanityLevel = 0f; return false; } if (LocalPlayer.isInsideFactory) { if (PlayersConnected > 1) { MultiplayerInsanity(); } else if (PlayersConnected == 1) { SoloInsanity(); } } else if ((int)TimeOfDay.Instance.dayMode <= 1) { LocalPlayer.insanitySpeedMultiplier = -0.2f; } if (InsanityGameManager.Instance.IsNearLightSource) { LocalPlayer.insanitySpeedMultiplier = -0.07f; } if (LocalPlayer.isInHangarShipRoom) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.sanityGainWhenInsideShip; } if (LocalPlayer.insanitySpeedMultiplier < 0f) { LocalPlayer.insanityLevel = Mathf.MoveTowards(LocalPlayer.insanityLevel, 0f, Time.deltaTime * (0f - LocalPlayer.insanitySpeedMultiplier)); return false; } if (LocalPlayer.insanityLevel > LocalPlayer.maxInsanityLevel) { LocalPlayer.insanityLevel = Mathf.MoveTowards(LocalPlayer.insanityLevel, LocalPlayer.maxInsanityLevel, Time.deltaTime * 2f); return false; } LocalPlayer.insanityLevel = Mathf.MoveTowards(LocalPlayer.insanityLevel, LocalPlayer.maxInsanityLevel, Time.deltaTime * LocalPlayer.insanitySpeedMultiplier); return false; } return false; } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPostfix] private static void _Update() { PlayersConnected = StartOfRound.Instance.connectedPlayersAmount + 1; PlayersConnected = Mathf.Clamp(PlayersConnected, 1, InsanityRemasteredConfiguration.maxPlayerCountForScalingInsanitySpeed); if (GameNetworkManager.Instance.gameHasStarted && LocalPlayer.isPlayerControlled && !LocalPlayer.isPlayerDead) { UpdateStatusEffects(); if (HallucinationManager.Instance.PanicAttackLevel >= 1f) { CurrentSanityLevel = SanityLevel.Max; } else if (LocalPlayer.insanityLevel >= 100f) { CurrentSanityLevel = SanityLevel.High; } else if (LocalPlayer.insanityLevel >= 50f) { CurrentSanityLevel = SanityLevel.Medium; } else if (LocalPlayer.insanityLevel <= 49f) { CurrentSanityLevel = SanityLevel.Low; } } } private static void UpdateStatusEffects() { if (HallucinationManager.slowness) { LocalPlayer.movementSpeed = Mathf.MoveTowards(LocalPlayer.movementSpeed, 2.3f, 5f * Time.deltaTime); } else if (!HallucinationManager.slowness && !LocalPlayer.isSprinting && !LocalPlayer.isCrouching) { LocalPlayer.movementSpeed = Mathf.MoveTowards(LocalPlayer.movementSpeed, 4.6f, 5f * Time.deltaTime); } if (HallucinationManager.reduceVision) { HUDManager.Instance.increaseHelmetCondensation = true; } } private static void SoloInsanity() { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenNotNearOthers; if (InsanityGameManager.Instance.LightsOff) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenLightsAreOut; } else if (HallucinationManager.Instance.PanicAttackLevel > 0f) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenPanicking; } if (FlashlightOn || AdvancedCompanyCompatibility.nightVision || (InsanityGameManager.Instance.IsPlayerTalking && LocalPlayer.isPlayerAlone)) { PlayerControllerB localPlayer = LocalPlayer; localPlayer.insanitySpeedMultiplier /= InsanityRemasteredConfiguration.sanityLossReductionWhenUsingFlashlights; } PlayerControllerB localPlayer2 = LocalPlayer; localPlayer2.insanitySpeedMultiplier *= InsanityRemasteredConfiguration.insanitySpeedScalingForSolo; LocalPlayer.isPlayerAlone = true; } private static void MultiplayerInsanity() { if (!InsanityGameManager.Instance.IsNearPlayers) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenNotNearOthers * Mathf.Log(Mathf.Sqrt((float)PlayersConnected)); if (InsanityGameManager.Instance.LightsOff) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenLightsAreOut * Mathf.Log(Mathf.Sqrt((float)PlayersConnected)); } else if (HallucinationManager.Instance.PanicAttackLevel > 0f) { LocalPlayer.insanitySpeedMultiplier = InsanityRemasteredConfiguration.lossWhenPanicking * Mathf.Log(Mathf.Sqrt((float)PlayersConnected)); } if (FlashlightOn || AdvancedCompanyCompatibility.nightVision || (InsanityGameManager.Instance.IsPlayerTalking && LocalPlayer.isPlayerAlone)) { PlayerControllerB localPlayer = LocalPlayer; localPlayer.insanitySpeedMultiplier /= InsanityRemasteredConfiguration.sanityLossReductionWhenUsingFlashlights * Mathf.Log(Mathf.Sqrt((float)PlayersConnected)); } LocalPlayer.isPlayerAlone = true; } else if (InsanityGameManager.Instance.IsNearPlayers && !InsanityGameManager.Instance.IsNearLightSource) { PlayerControllerB localPlayer2 = LocalPlayer; localPlayer2.insanitySpeedMultiplier *= (0f - InsanityRemasteredConfiguration.sanityGainWhenNearOthers) * Mathf.Log(Mathf.Sqrt((float)PlayersConnected)); LocalPlayer.isPlayerAlone = false; } } private static void OnItemSwitch(GrabbableObject item) { if (((Object)item.itemProperties).name == "PillBottle") { heldItem = item; HoldingPills = true; } else { HoldingPills = false; } } private static void LoseSanity(bool touched) { if (touched) { PlayerControllerB localPlayer = LocalPlayer; localPlayer.insanityLevel += 15f; LocalPlayer.JumpToFearLevel(1f, true); } } private static void OnHeardHallucinationSound() { if (CurrentSanityLevel >= SanityLevel.Medium) { PlayerControllerB localPlayer = LocalPlayer; localPlayer.insanityLevel += 5f; } } [HarmonyPatch(typeof(PlayerControllerB), "ActivateItem_performed")] [HarmonyPostfix] private static void _UseItem(PlayerControllerB __instance) { if (HoldingPills) { heldItem.DestroyObjectInHand(LocalPlayer); HoldingPills = false; LocalPlayer.insanityLevel = 0f; SoundManager.Instance.SetDiageticMixerSnapshot(0, 1f); } } [HarmonyPatch(typeof(PlayerControllerB), "Interact_performed")] [HarmonyPostfix] private static void InteractPatch(PlayerControllerB __instance) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)LocalPlayer.gameplayCamera).transform.position, ((Component)__instance.gameplayCamera).transform.forward); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, ref val2, __instance.grabDistance, 832) && ((Component)((RaycastHit)(ref val2)).collider).gameObject.layer != 8 && ((Component)((RaycastHit)(ref val2)).collider).tag == "PhysicsProp" && !LocalPlayer.twoHanded && !(__instance.sinkingValue > 0.73f)) { FakeItem component = ((Component)((Component)((RaycastHit)(ref val2)).collider).transform).gameObject.GetComponent<FakeItem>(); if (Object.op_Implicit((Object)(object)component)) { PlayerControllerB localPlayer = LocalPlayer; localPlayer.insanityLevel += 14f; LocalPlayer.JumpToFearLevel(0.4f, true); PlayerPatcher.OnInteractWithFakeItem?.Invoke(); } } } } } namespace InsanityRemastered.ModIntegration { public class AdvancedCompanyCompatibility { public static bool nightVision; private static void UnequipHeadLightUtility() { nightVision = false; } private static void HeadLightUtilityUse(bool on) { if (on) { nightVision = true; } else if (!on) { nightVision = false; } } } public class SkinwalkerModIntegration { private static List<AudioClip> skinwalkerClips = new List<AudioClip>(); public static bool IsInstalled { get; set; } private static void UpdateClips(ref List<AudioClip> ___cachedAudio) { skinwalkerClips = ___cachedAudio; } public static AudioClip GetRandomClip() { return skinwalkerClips[Random.Range(0, skinwalkerClips.Count)]; } private static void AddRecording(object recording) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown skinwalkerClips.Add((AudioClip)recording.GetType().GetField("clip").GetValue(recording)); } public static void ClearRecordings() { skinwalkerClips.Clear(); } } public class ModIntegrator { public static void BeginIntegrations(Assembly assembly) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Expected O, but got Unknown //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Expected O, but got Unknown //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Expected O, but got Unknown //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Expected O, but got Unknown //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Expected O, but got Unknown //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Expected O, but got Unknown //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Expected O, but got Unknown //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Expected O, but got Unknown //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: Expected O, but got Unknown if (InsanityRemasteredConfiguration.useExperimentalSkinwalkerVersion) { SkinwalkerModIntegration.IsInstalled = true; InsanityRemasteredLogger.Log("Skinwalker mod installed, starting integration."); Harmony val = new Harmony("skinwalker"); Type[] types = assembly.GetTypes(); for (int i = 0; i < types.Length; i++) { if (types[i].Name == "AudioAggregator") { MethodInfo method = types[i].GetMethod("AddAudioRecording", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); HarmonyMethod val2 = new HarmonyMethod(typeof(SkinwalkerModIntegration).GetMethod("AddRecording", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); val.Patch((MethodBase)method, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } } else if (assembly.FullName.StartsWith("SkinwalkerMod")) { SkinwalkerModIntegration.IsInstalled = true; InsanityRemasteredLogger.Log("Skinwalker mod installed, starting integration."); Harmony val3 = new Harmony("skinwalker"); Type[] types2 = assembly.GetTypes(); for (int j = 0; j < types2.Length; j++) { if (types2[j].Name == "SkinwalkerModPersistent") { MethodInfo method2 = types2[j].GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy); HarmonyMethod val4 = new HarmonyMethod(typeof(SkinwalkerModIntegration).GetMethod("UpdateClips", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); val3.Patch((MethodBase)method2, val4, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } } if (!assembly.FullName.StartsWith("AdvancedCompany")) { return; } InsanityRemasteredLogger.Log("AdvancedCompany mod installed, starting integration."); Harmony val5 = new Harmony("advancecompany "); Type[] types3 = assembly.GetTypes(); for (int k = 0; k < types3.Length; k++) { if (types3[k].Name == "NightVision" && types3[k].Namespace == "AdvancedCompany.Objects") { InsanityRemasteredLogger.Log("NightVision object found, starting method patching."); MethodInfo method3 = types3[k].GetMethod("SwitchFlashlight", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); MethodInfo method4 = types3[k].GetMethod("Unequipped", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); HarmonyMethod val6 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("HeadLightUtilityUse", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); HarmonyMethod val7 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("UnequipHeadLightUtility", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); val5.Patch((MethodBase)method3, val6, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val5.Patch((MethodBase)method4, val7, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } if (types3[k].Name == "HelmetLamp" && types3[k].Namespace == "AdvancedCompany.Objects") { InsanityRemasteredLogger.Log("Helmet Lamp object found, starting fix."); MethodInfo method5 = types3[k].GetMethod("SwitchFlashlight", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); MethodInfo method6 = types3[k].GetMethod("Unequipped", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); HarmonyMethod val8 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("HeadLightUtilityUse", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); HarmonyMethod val9 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("UnequipHeadLightUtility", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); val5.Patch((MethodBase)method5, val8, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val5.Patch((MethodBase)method6, val9, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } if (types3[k].Name == "TacticalHelmet" && types3[k].Namespace == "AdvancedCompany.Objects") { InsanityRemasteredLogger.Log("TacticalHelmet object found, starting fix."); MethodInfo method7 = types3[k].GetMethod("SwitchFlashlight", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); MethodInfo method8 = types3[k].GetMethod("Unequipped", BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy); HarmonyMethod val10 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("HeadLightUtilityUse", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); HarmonyMethod val11 = new HarmonyMethod(typeof(AdvancedCompanyCompatibility).GetMethod("UnequipHeadLightUtility", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)); val5.Patch((MethodBase)method7, val10, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val5.Patch((MethodBase)method8, val11, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } } } } namespace InsanityRemastered.Hallucinations { internal class InsanityRemastered_AI : MonoBehaviour { private float duration = 30f; private float agentStoppingDistance = 3f; private float durationTimer; private bool lookedAtFirstTime = true; protected bool wanderSpot = false; private bool setup = false; public HallucinationType hallucinationType; public HallucinationSpawnType hallucinationSpawnType = HallucinationSpawnType.NotLooking; protected AudioSource sfxSource; protected AudioClip[] sfx; protected GameObject[] aiNodes; protected Animator hallucinationAnimator; protected NavMeshAgent agent; protected PlayerControllerB localPlayer => GameNetworkManager.Instance.localPlayerController; protected float Duration { get { return duration; } set { duration = value; } } protected AudioClip[] SFX { get { return sfx; } set { sfx = value; } } public static event Action OnFailedToSpawn; public static event Action<bool> OnHallucinationEnded; public virtual void Start() { SetupVariables(); } public virtual void Spawn() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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_002b: Unknown result type (might be due to invalid IL or missing references) LoadAINodes(); Vector3 val = FindSpawnPosition(); if (!(val != Vector3.zero) || true) { ((Component)this).transform.position = val; wanderSpot = false; lookedAtFirstTime = true; ((Behaviour)agent).enabled = true; } else { InsanityRemastered_AI.OnFailedToSpawn?.Invoke(); PoolForLater(); } } public virtual bool HasLineOfSightToPosition(Transform eye, Vector3 pos, float width = 45f, int range = 60, float proximityAwareness = -1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(eye.position, pos) < (float)range && !Physics.Linecast(eye.position, pos, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) { Vector3 val = pos - eye.position; if (Vector3.Angle(eye.forward, val) < width || Vector3.Distance(((Component)this).transform.position, pos) < proximityAwareness) { return true; } } return false; } public virtual void LookingAtHallucination() { } public virtual void LookAtHallucinationFirstTime() { lookedAtFirstTime = false; localPlayer.JumpToFearLevel(0.4f, true); } public virtual void FinishHallucination(bool touched) { if (touched) { float num = Random.Range(0f, 1f); if (num <= 0.15f) { InsanitySoundManager.Instance.PlayJumpscare(); } InsanityRemastered_AI.OnHallucinationEnded?.Invoke(touched); } else if (!touched) { InsanityRemastered_AI.OnHallucinationEnded?.Invoke(touched); } PoolForLater(); } public virtual void Wander() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (!wanderSpot) { agent.SetDestination(RoundManager.Instance.GetRandomNavMeshPositionInRadius(aiNodes[Random.Range(0, aiNodes.Length)].transform.position, 12f, default(NavMeshHit))); wanderSpot = true; } if (Vector3.Distance(((Component)this).transform.position, agent.destination) <= agentStoppingDistance && wanderSpot) { PoolForLater(); InsanityRemastered_AI.OnHallucinationEnded?.Invoke(obj: false); } } public virtual void TimerTick() { durationTimer += Time.deltaTime; if (durationTimer > duration) { durationTimer = 0f; FinishHallucination(touched: false); } } public virtual void ChasePlayer() { //IL_000e: 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_0052: Unknown result type (might be due to invalid IL or missing references) TimerTick(); if (Vector3.Distance(((Component)this).transform.position, ((Component)localPlayer).transform.position) <= agentStoppingDistance) { FinishHallucination(touched: true); } agent.SetDestination(((Component)localPlayer).transform.position); } public virtual void PoolForLater() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) ((Behaviour)agent).enabled = false; ((Component)this).transform.position = Vector3.zero; ((Component)this).gameObject.SetActive(false); } private void LoadAINodes() { } public virtual void Update() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) if (localPlayer.HasLineOfSightToPosition(((Component)this).transform.position, 45f, 60, -1f)) { if (lookedAtFirstTime) { LookAtHallucinationFirstTime(); } LookingAtHallucination(); } } public virtual void SetupVariables() { if (!setup) { aiNodes = GameObject.FindGameObjectsWithTag("AINode"); agent = ((Component)this).GetComponent<NavMeshAgent>(); hallucinationAnimator = ((Component)this).GetComponentInChildren<Animator>(); sfxSource = ((Component)this).gameObject.AddComponent<AudioSource>(); sfxSource.spatialBlend = 1f; agent.angularSpeed = float.PositiveInfinity; agent.speed = 3f; agent.stoppingDistance = agentStoppingDistance; setup = true; agent.areaMask = StartOfRound.Instance.walkableSurfacesMask; } } private Vector3 FindSpawnPosition() { //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) if (hallucinationSpawnType == HallucinationSpawnType.NotLooking) { for (int i = 0; i < aiNodes.Length; i++) { if (!Physics.Linecast(((Component)localPlayer.gameplayCamera).transform.position, aiNodes[i].transform.position, StartOfRound.Instance.collidersAndRoomMaskAndDefault) && !localPlayer.HasLineOfSightToPosition(aiNodes[i].transform.position, 45f, 20, 8f)) { return aiNodes[i].transform.position; } } } return Vector3.zero; } private void OnEnable() { if (!setup) { SetupVariables(); setup = true; } else { Spawn(); } } } public enum HallucinationSpawnType { NotLooking, Visible } internal class FakeItem : MonoBehaviour { private float stayTimer = 50f; private void Update() { stayTimer -= Time.deltaTime; if (stayTimer <= 0f) { ((Component)this).gameObject.SetActive(false); } } private void Interaction() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) float num = Random.Range(0, 1); if (num <= 0.35f) { PlayerPatcher.LocalPlayer.DropBlood(default(Vector3), true, false); } else if (num <= 1E-05f) { PlayerPatcher.LocalPlayer.KillPlayer(Vector3.zero, true, (CauseOfDeath)0, 0); } InsanitySoundManager.Instance.PlayStinger(); ((Component)this).gameObject.SetActive(false); } private void OnEnable() { PlayerPatcher.OnInteractWithFakeItem += Interaction; } private void OnDisable() { PlayerPatcher.OnInteractWithFakeItem -= Interaction; } } internal class PlayerHallucination : InsanityRemastered_AI { private float stareTimer = 5f; private float waitTimeForNewWander = 5f; private float speakTimer = 3f; private float wanderTimer; private float stareDuration; private float speakDuration; private float rotationSpeed = 0.95f; private float footstepDistance = 1.5f; private int minWanderPoints = 3; private int maxWanderPoints = 5; private int currentFootstepSurfaceIndex; private List<Vector3> wanderPositions = new List<Vector3>(); private Vector3 lastStepPosition; private AudioSource footstepSource; private bool spoken; private bool seenPlayer; public static SkinnedMeshRenderer suitRenderer; private void StopAndStare() { //IL_003f: Unknown result type (might be due to invalid IL or missing references) sfxSource.Stop(); seenPlayer = true; hallucinationAnimator.SetBool("Walking", false); agent.isStopped = true; Stare(((Component)base.localPlayer).transform.position); if (SkinwalkerModIntegration.IsInstalled && InsanityGameManager.AreThereOtherPlayers && !spoken) { sfxSource.PlayOneShot(SkinwalkerModIntegration.GetRandomClip()); spoken = true; } stareDuration += Time.deltaTime; if (stareDuration > stareTimer) { agent.isStopped = false; ((Behaviour)hallucinationAnimator).enabled = true; hallucinationAnimator.SetBool("Walking", true); hallucinationType = HallucinationType.Approaching; } } private void Stare(Vector3 position) { //IL_0001: 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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) Quaternion val = Quaternion.LookRotation(position - ((Component)this).transform.position); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val, rotationSpeed * Time.deltaTime); } private void GenerateNewDestination() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) hallucinationAnimator.SetBool("Walking", true); Vector3 val = wanderPositions[Random.Range(0, wanderPositions.Count)]; wanderPositions.Remove(val); agent.SetDestination(val); agent.isStopped = false; wanderSpot = true; } private void ReachDestination() { if (wanderPositions.Count == 0) { FinishHallucination(touched: false); } hallucinationAnimator.SetBool("Walking", false); agent.isStopped = true; wanderTimer += Time.deltaTime; if (wanderTimer > waitTimeForNewWander) { wanderTimer = 0f; wanderSpot = false; } } private void GenerateWanderPoints() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (wanderPositions.Count > 0) { wanderPositions.Clear(); } int num = Random.Range(minWanderPoints, maxWanderPoints); for (int i = 0; i < num; i++) { wanderPositions.Add(RoundManager.Instance.GetRandomNavMeshPositionInRadius(((Component)this).transform.position, 20f, default(NavMeshHit))); } } private void PlayFootstepSound() { GetCurrentMaterialStandingOn(); int num = Random.Range(0, StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips.Length); footstepSource.pitch = Random.Range(0.93f, 1.07f); footstepSource.PlayOneShot(StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].clips[num], 5.5f); } private void GetCurrentMaterialStandingOn() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)this).transform.position + Vector3.up, -Vector3.up); RaycastHit val2 = default(RaycastHit); if (!Physics.Raycast(val, ref val2, 6f, StartOfRound.Instance.walkableSurfacesMask, (QueryTriggerInteraction)1) || ((Component)((RaycastHit)(ref val2)).collider).CompareTag(StartOfRound.Instance.footstepSurfaces[currentFootstepSurfaceIndex].surfaceTag)) { return; } for (int i = 0; i < StartOfRound.Instance.footstepSurfaces.Length; i++) { if (((Component)((RaycastHit)(ref val2)).collider).CompareTag(StartOfRound.Instance.footstepSurfaces[i].surfaceTag)) { currentFootstepSurfaceIndex = i; break; } } } private void Footstep() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(((Component)this).transform.position, lastStepPosition) > footstepDistance) { lastStepPosition = ((Component)this).transform.position; PlayFootstepSound(); } } private int GetRandomPlayerSuitID() { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[Random.Range(0, StartOfRound.Instance.allPlayerScripts.Length)]; if (val.isPlayerControlled) { return val.currentSuitID; } GetRandomPlayerSuitID(); return base.localPlayer.currentSuitID; } private void SetSuit(int id) { Material suitMaterial = StartOfRound.Instance.unlockablesList.unlockables[id].suitMaterial; ((Renderer)suitRenderer).material = suitMaterial; } public override void Start() { base.Start(); base.SFX = InsanityRemasteredContent.PlayerHallucinationSounds; hallucinationAnimator.runtimeAnimatorController = StartOfRound.Instance.localClientAnimatorController; footstepSource = ((Component)this).gameObject.AddComponent<AudioSource>(); footstepSource.spatialBlend = 1f; } public override void Update() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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) base.Update(); if (hallucinationType == HallucinationType.Wandering) { if (HasLineOfSightToPosition(((Component)this).transform, ((Component)base.localPlayer).transform.position, 45f, 45) || Vector3.Distance(((Component)this).transform.position, ((Component)base.localPlayer).transform.position) < 3f || seenPlayer) { StopAndStare(); } else { Wander(); } } else if (hallucinationType == HallucinationType.Approaching) { ChasePlayer(); } if (hallucinationType == HallucinationType.Staring) { Stare(((Component)base.localPlayer).transform.position); TimerTick(); } Footstep(); } public override void LookAtHallucinationFirstTime() { base.LookAtHallucinationFirstTime(); } public override void FinishHallucination(bool touched) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (touched) { float num = Random.Range(0f, 1f); if (num <= 0.15f) { base.localPlayer.DamagePlayer(Random.Range(1, 5), false, true, (CauseOfDeath)6, 0, false, default(Vector3)); return; } if (num <= 0.45f) { HallucinationManager.Instance.PanicAttack = true; } base.FinishHallucination(touched: true); } else { base.FinishHallucination(touched: false); } } public override void Wander() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (wanderPositions.Count != 0 && !wanderSpot) { GenerateNewDestination(); } if (Vector3.Distance(((Component)this).transform.position, agent.destination) <= agent.stoppingDistance && wanderSpot) { ReachDestination(); } } public override void Spawn() { base.Spawn(); seenPlayer = false; SetSuit(GetRandomPlayerSuitID()); hallucinationType = HallucinationType.Staring; if (PlayerPatcher.CurrentSanityLevel >= SanityLevel.Medium) { GenerateWanderPoints(); hallucinationType = HallucinationType.Wandering; } float num = Random.Range(0f, 1f); float num2 = Random.Range(0f, 1f); if (num >= 0.5f && SkinwalkerModIntegration.IsInstalled && InsanityGameManager.AreThereOtherPlayers) { sfxSource.clip = SkinwalkerModIntegration.GetRandomClip(); } else { sfxSource.clip = InsanitySoundManager.Instance.LoadFakePlayerSound(); } if (num2 > 0.25f) { HUDManager.Instance.DisplayTip("", InsanityRemasteredConfiguration.hallucinationTipTexts[0], true, false, "LC_Tip1"); } spoken = false; sfxSource.Play(); hallucinationAnimator.SetBool("Walking", false); stareDuration = 0f; } public override void SetupVariables() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) base.SetupVariables(); agent.obstacleAvoidanceType = (ObstacleAvoidanceType)0; suitRenderer = ((Component)this).GetComponentInChildren<SkinnedMeshRenderer>(false); base.Duration = 30f; hallucinationAnimator.runtimeAnimatorController = StartOfRound.Instance.localClientAnimatorController; hallucinationSpawnType = HallucinationSpawnType.NotLooking; lastStepPosition = ((Component)this).transform.position; } } } namespace InsanityRemastered.General { internal class HallucinationManager : MonoBehaviour { public static HallucinationManager Instance; private float droneRNGTimer; private float droneRNGFrequency = 60f; private float sanityRNGTimer; private float sanityRNGFrequency = 40f; private float slowdownTimer = 120f; private float panicAttackLevel; private bool panicAttack = false; public static bool slowness; public static bool reduceVision; private readonly Dictionary<string, SanityLevel> hallucinations = new Dictionary<string, SanityLevel> { { "AuditoryHallucination", SanityLevel.Low }, { "CrypticStatus", SanityLevel.Low }, { "CrypticMessage", SanityLevel.Low }, { "Fake Player", SanityLevel.Low }, { "Fake Item", SanityLevel.Medium }, { "Power loss", SanityLevel.High } }; private PlayerControllerB localPlayer => GameNetworkManager.Instance.localPlayerController; private SanityLevel SanityLevel => PlayerPatcher.CurrentSanityLevel; public bool PanicAttack { get { return panicAttack; } set { panicAttack = value; } } public float PanicAttackLevel { get { return panicAttackLevel; } set { panicAttackLevel = value; } } public float EffectTransition => slowdownTimer; public Dictionary<string, SanityLevel> Hallucinations => hallucinations; public static event Action<bool> OnPowerHallucination; public static event Action OnPlayerHallucinationStarted; public static event Action OnSpawnFakeItem; public static event Action OnSoundPlayed; public static event Action OnSanityRecovered; public static event Action OnExperiencePanicAttack; public static event Action OnUIHallucination; private void Start() { sanityRNGFrequency *= InsanityRemasteredConfiguration.rngCheckTimerMultiplier; } private void Awake() { Instance = this; } private void Update() { if (localPlayer.isPlayerControlled && !localPlayer.isPlayerDead && localPlayer.isInsideFactory && localPlayer.isPlayerControlled && !localPlayer.isPlayerDead) { sanityRNGTimer += Time.deltaTime; if (sanityRNGTimer > sanityRNGFrequency) { sanityRNGTimer = 0f; float num = Random.Range(0f, 1f); if (num <= 0.45f) { Hallucinate(GetRandomHallucination()); } } if (localPlayer.insanityLevel == localPlayer.maxInsanityLevel) { droneRNGTimer += Time.deltaTime; if (droneRNGTimer > droneRNGFrequency) { droneRNGTimer = 0f; float num2 = Random.Range(0f, 1f); if (num2 <= 0.45f) { InsanitySoundManager.Instance.PlayDrone(); if (panicAttackLevel == 1f && InsanityRemasteredConfiguration.panicAttacksEnabled) { PanicAttackSymptom(); } } } if (localPlayer.isInsideFactory && localPlayer.isPlayerAlone && !InsanityGameManager.Instance.IsNearLightSource) { HighSanityEffects(); } else { LessenPanicEffects(); } } } if (panicAttackLevel >= 0f) { LessenPanicEffects(); } if (!GameNetworkManager.Instance.gameHasStarted) { ResetPanicValues(); } } private void LessenPanicEffects() { if (PanicAttackLevel <= 0f) { ResetPanicValues(); } else if (GameNetworkManager.Instance.gameHasStarted && ((!localPlayer.isInsideFactory && panicAttackLevel >= 0f) || (localPlayer.isInsideFactory && !localPlayer.isPlayerAlone && panicAttackLevel >= 0f))) { panicAttackLevel = Mathf.MoveTowards(panicAttackLevel, 0f, 0.5f * Time.deltaTime); HallucinationEffects.LessenPanicEffects(); } } private void HighSanityEffects() { panicAttackLevel = Mathf.MoveTowards(panicAttackLevel, 1f, slowdownTimer * Time.deltaTime); HallucinationEffects.IncreasePanicEffects(); } public void ResetPanicValues() { SoundManager.Instance.SetDiageticMixerSnapshot(0, 1f); panicAttack = false; slowness = false; reduceVision = false; HallucinationManager.OnSanityRecovered?.Invoke(); } public void PanicAttackSymptom() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) panicAttack = true; localPlayer.JumpToFearLevel(0.55f, true); if (!InsanityRemasteredConfiguration.disablePanicAttackDebuffs) { switch (Random.Range(0, 2)) { case 0: slowness = true; break; case 1: reduceVision = true; break; case 2: if (InsanityRemasteredConfiguration.enableChanceToDieDuringPanicAttack) { localPlayer.KillPlayer(Vector3.zero, true, (CauseOfDeath)0, 0); } else { slowness = true; } break; } } HUDManager.Instance.DisplayTip("WARNING!", "Heartrate is at dangerous levels. Please seek help immediately.", true, false, "LC_Tip1"); HallucinationManager.OnExperiencePanicAttack?.Invoke(); } public void Hallucinate(string id) { InsanityRemasteredLogger.Log("Performing hallucination with ID: " + id); float num = Random.Range(0f, 1f); switch (id) { case "CrypticStatus": UpdateStatusEffect(); break; case "CrypticMessage": ShowHallucinationTip(); break; case "Fake Player": PlayerModelHallucination(InsanityGameManager.Instance.currentHallucinationModel); break; case "AuditoryHallucination": PlaySound(); break; case "Fake Item": SpawnFakeObject(); break; case "Power loss": LightHallucination(); break; } if (num <= 0.15f && hallucinations[id] >= SanityLevel.Medium) { Hallucinate(GetRandomHallucination()); } } public string GetRandomHallucination() { KeyValuePair<string, SanityLevel> keyValuePair = hallucinations.ElementAt(Random.Range(0, hallucinations.Count())); if (keyValuePair.Value <= SanityLevel) { return keyValuePair.Key; } GetRandomHallucination(); return "AuditoryHallucination"; } private void UpdateStatusEffect() { if (InsanityRemasteredConfiguration.enableHallucinationMessages) { string text = InsanityRemasteredConfiguration.statusEffectTexts[Random.Range(0, InsanityRemasteredConfiguration.statusEffectTexts.Count)]; HUDManager.Instance.DisplayStatusEffect(text); HallucinationManager.OnUIHallucination?.Invoke(); } } private void LightHallucination() { if (!InsanityRemasteredConfiguration.powerLossEventEnabled) { return; } if (!InsanityGameManager.Instance.LightsOff) { foreach (Animator allPoweredLightsAnimator in RoundManager.Instance.allPoweredLightsAnimators) { allPoweredLightsAnimator.SetBool("on", false); } PlayerPatcher.LocalPlayer.JumpToFearLevel(0.3f, true); HallucinationManager.OnPowerHallucination?.Invoke(obj: false); } else { if (!InsanityGameManager.Instance.LightsOff) { return; } foreach (Animator allPoweredLightsAnimator2 in RoundManager.Instance.allPoweredLightsAnimators) { allPoweredLightsAnimator2.SetBool("on", true); } HallucinationManager.OnPowerHallucination?.Invoke(obj: true); } } private void ShowHallucinationTip() { if (!InsanityRemasteredConfiguration.enableHallucinationMessages) { return; } string text = InsanityRemasteredConfiguration.hallucinationTipTexts[Random.Range(0, InsanityRemasteredConfiguration.hallucinationTipTexts.Count)]; if (text == InsanityRemasteredConfiguration.hallucinationTipTexts[1]) { float num = Random.Range(0f, 1f); if (num <= 0.35f) { ((MonoBehaviour)this).Invoke("LightHallucination", 3f); } } HallucinationManager.OnUIHallucination?.Invoke(); HUDManager.Instance.DisplayTip("", text, true, false, "LC_Tip1"); } private void PlayerModelHallucination(GameObject model) { if (InsanityRemasteredConfiguration.modelHallucinationsEnabled) { if (!model.activeInHierarchy) { model.SetActive(true); } HallucinationManager.OnPlayerHallucinationStarted?.Invoke(); } } private void PlaySound() { if (InsanityRemasteredConfiguration.auditoryHallucinationsEnabled) { InsanitySoundManager.Instance.PlayHallucinationSound(); } } private void SpawnFakeObject() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) if (InsanityRemasteredConfiguration.fakeItemsEnabled) { SpawnableItemWithRarity val = RoundManager.Instance.currentLevel.spawnableScrap[Random.Range(0, RoundManager.Instance.currentLevel.spawnableScrap.Count)]; Vector3 val2 = RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(((Component)PlayerPatcher.LocalPlayer).transform.position, 10f, default(NavMeshHit)) + Vector3.up * val.spawnableItem.verticalOffset; GameObject val3 = Object.Instantiate<GameObject>(val.spawnableItem.spawnPrefab, val2, Quaternion.identity); GrabbableObject component = val3.GetComponent<GrabbableObject>(); component.SetScrapValue(Random.Range(val.spawnableItem.minValue, val.spawnableItem.maxValue + 50)); val3.AddComponent<FakeItem>(); HallucinationManager.OnSpawnFakeItem?.Invoke(); } } } public class HallucinationID { public const string Observer = "Observer"; public const string CrypticStatusEffect = "CrypticStatus"; public const string Auditory = "AuditoryHallucination"; public const string CrypticMessage = "CrypticMessage"; public const string FakeItem = "Fake Item"; public const string FakePlayer = "Fake Player"; public const string PowerLoss = "Power loss"; } internal class InsanityGameManager : MonoBehaviour { public static InsanityGameManager Instance; private List<Light> bunkerLights = new List<Light>(); public GameObject currentHallucinationModel; private float deletionTimer; private float deletionFrequency = 10f; private PlayerControllerB LocalPlayer => GameNetworkManager.Instance.localPlayerController; public static DungeonFlow MapFlow => RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow; public static bool AreThereOtherPlayers => StartOfRound.Instance.connectedPlayersAmount > 0; public bool IsNearPlayers => NearOtherPlayers(); public bool IsNearLightSource => NearLightSource(); public bool IsPlayerTalking => PlayerTalking(); public bool LightsOff { get; private set; } public List<Light> BunkerLights => bunkerLights; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } GameEvents.OnGameEnd += OnRoundEnd; GameEvents.OnShipLanded += GameEvents_OnShipLanded; GameEvents.OnPlayerDied += GameEvents_OnPlayerDied; GameEvents.OnEnterOrLeaveFacility += OnEnterOrLeaveFacility; HallucinationManager.OnPowerHallucination += PowerHallucination; SceneManager.sceneLoaded += SceneLoaded; } private void GameEvents_OnShipLanded() { CacheLights(); } private void Update() { if (InsanityRemasteredConfiguration.useExperimentalSkinwalkerVersion && SkinwalkerModIntegration.IsInstalled) { deletionTimer += Time.deltaTime; if (deletionTimer > deletionFrequency) { deletionTimer = 0f; SkinwalkerModIntegration.ClearRecordings(); } } if (GameNetworkManager.Instance.gameHasStarted && RoundManager.Instance.powerOffPermanently) { LightsOff = true; } } private void PowerHallucination(bool on) { if (on) { LightsOff = false; } else if (!on) { LightsOff = true; } } private void SceneLoaded(Scene scene, LoadSceneMode arg1) { if (((Scene)(ref scene)).name == SceneNames.SampleSceneRelay.ToString()) { SavePlayerModel(); ((Behaviour)HallucinationManager.Instance).enabled = true; } else if (((Scene)(ref scene)).name == SceneNames.MainMenu.ToString() || ((Scene)(ref scene)).name == SceneNames.InitSceneLaunchOptions.ToString()) { ((Behaviour)HallucinationManager.Instance).enabled = false; } } private void GameEvents_OnPlayerDied() { InsanitySoundManager.Instance.StopModSounds(); HallucinationManager.Instance.ResetPanicValues(); } private void OnRoundEnd() { currentHallucinationModel.SetActive(false); LocalPlayer.insanityLevel = 0f; } private void OnEnterOrLeaveFacility(bool outside) { if (outside && Instance.LightsOff) { ResetLights(); } } public void ResetLights() { if (LightsOff) { HallucinationManager.Instance.Hallucinate("Power loss"); } } private bool NearOtherPlayers(PlayerControllerB playerScript = null, float checkRadius = 16f) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerScript == (Object)null) { playerScript = LocalPlayer; } ((Component)LocalPlayer).gameObject.layer = 0; bool result = Physics.CheckSphere(((Component)playerScript).transform.position, checkRadius, 8, (QueryTriggerInteraction)1); ((Component)LocalPlayer).gameObject.layer = 3; return result; } private bool PlayerTalking() { VoicePlayerState val = StartOfRound.Instance.voiceChatModule.FindPlayer(StartOfRound.Instance.voiceChatModule.LocalPlayerName); float num = Mathf.Clamp(val.Amplitude, 0f, 1f); return val.IsSpeaking && num > 0.85f; } private bool NearLightSource(float checkRadius = 10f) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < RoundManager.Instance.allPoweredLights.Count; i++) { float num = Vector3.Distance(((Component)RoundManager.Instance.allPoweredLights[i]).transform.position, ((Component)LocalPlayer).transform.position); if (num < checkRadius && RoundManager.Instance.allPoweredLightsAnimators[i].GetBool("on")) { return true; } } return false; } private void SavePlayerModel() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Expected O, but got Unknown GameObject val = Object.Instantiate<GameObject>(GameObject.Find("ScavengerModel")); foreach (Transform item in val.transform) { Transform val2 = item; if (((Object)val2).name == "LOD2" || ((Object)val2).name == "LOD3") { ((Component)val2).gameObject.SetActive(false); } if (((Object)val2).name == "LOD1") { ((Component)val2).gameObject.SetActive(true); } if (!(((Object)val2).name == "metarig")) { continue; } foreach (Transform item2 in ((Component)val2).transform) { Transform val3 = item2; if (((Object)val3).name == "ScavengerModelArmsOnly") { ((Component)val3).gameObject.SetActive(false); } if (((Object)val3).name == "CameraContainer") { ((Component)val3).gameObject.SetActive(false); } } } val.SetActive(false); val.AddComponent<PlayerHallucination>(); val.AddComponent<NavMeshAgent>(); val.GetComponent<LODGroup>().enabled = false; currentHallucinationModel = val; } private void CacheLights() { BunkerLights.Clear(); foreach (Light allPoweredLight in RoundManager.Instance.allPoweredLights) { if (!bunkerLights.Contains(allPoweredLight)) { bunkerLights.Add(allPoweredLight); } } } } internal class InsanitySoundManager : MonoBehaviour { public static InsanitySoundManager Instance; public AudioClip[] hallucinationEffects; public AudioClip[] drones; public AudioClip[] playerHallucinationSounds; public AudioClip[] vanillaSFX; public AudioClip[] stingers; public AudioSource hallucinationSource; private AudioSource droneSource; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } } private void Start() { hallucinationSource = ((Component)this).gameObject.AddComponent<AudioSource>(); hallucinationSource.spatialBlend = 0f; droneSource = ((Component)this).gameObject.AddComponent<AudioSource>(); droneSource.spatialBlend = 0f; droneSource.volume = InsanityRemasteredConfiguration.sfxVolume; CacheSFX(); } private void CacheSFX() { stingers = InsanityRemasteredContent.Stingers; vanillaSFX = InsanityRemasteredContent.LCGameSFX; drones = InsanityRemasteredContent.Drones; hallucinationEffects = InsanityRemasteredContent.AuditoryHallucinations; playerHallucinationSounds = InsanityRemasteredContent.PlayerHallucinationSounds; } public AudioClip LoadFakePlayerSound() { int num = Random.Range(0, playerHallucinationSounds.Length); if (Object.op_Implicit((Object)(object)playerHallucinationSounds[num]) && ((Object)playerHallucinationSounds[num]).name != "JumpScare") { return playerHallucinationSounds[num]; } return null; } public void PlayJumpscare() { AudioClip[] array = playerHallucinationSounds; foreach (AudioClip val in array) { if (((Object)val).name == "JumpScare") { hallucinationSource.clip = val; hallucinationSource.Play(); } } } public void PlayStinger(bool mono = true) { if (mono) { droneSource.clip = LoadStingerSound(); droneSource.Play(); } } public void PlayHallucinationSound() { float num = Random.Range(0f, 1f); if (num >= 0.5f && SkinwalkerModIntegration.IsInstalled && StartOfRound.Instance.connectedPlayersAmount > 0) { SoundManager.Instance.PlaySoundAroundLocalPlayer(SkinwalkerModIntegration.GetRandomClip(), 2.5f); } else if (InsanityRemasteredConfiguration.onlyUseVanillaSFX) { SoundManager.Instance.PlaySoundAroundLocalPlayer(vanillaSFX[Random.Range(0, vanillaSFX.Length)], 1.4f); } else { SoundManager.Instance.PlaySoundAroundLocalPlayer(LoadHallucinationSound(), 0.85f); } } public void PlayUISound(AudioClip sfx) { hallucinationSource.PlayOneShot(sfx, 0.8f); } public void PlayDrone() { if (!droneSource.isPlaying) { droneSource.clip = LoadDroneSound(); droneSource.Play(); } } public void StopModSounds() { hallucinationSource.Stop(); droneSource.Stop(); } public AudioClip LoadHallucinationSound() { float num = Random.Range(0f, 1f); if (num <= 0.4f) { int num2 = Random.Range(0, vanillaSFX.Length); if (Object.op_Implicit((Object)(object)vanillaSFX[num2])) { return vanillaSFX[num2]; } } else { int num3 = Random.Range(0, hallucinationEffects.Length); if (Object.op_Implicit((Object)(object)hallucinationEffects[num3])) { return hallucinationEffects[num3]; } } return null; } private AudioClip LoadStingerSound() { int num = Random.Range(0, stingers.Length); if (Object.op_Implicit((Object)(object)stingers[num])) { return stingers[num]; } return null; } private AudioClip LoadDroneSound() { int num = Random.Range(0, drones.Length); if (Object.op_Implicit((Object)(object)drones[num])) { return drones[num]; } return null; } } } namespace InsanityRemasteredMod { internal class InsanityRemasteredContent { internal static Material[] Materials { get; set; } internal static GameObject[] EnemyModels { get; set; } internal static Texture2D[] Textures { get; set; } internal static AudioClip[] AuditoryHallucinations { get; set; } internal static AudioClip[] Stingers { get; set; } internal static AudioClip[] PlayerHallucinationSounds { get; set; } internal static AudioClip[] LCGameSFX { get; set; } internal static AudioClip[] Drones { get; set; } private static string DataFolder => Path.GetFullPath(Paths.PluginPath); public static void LoadContent() { LoadSounds(); } public static GameObject GetEnemyModel(string name) { for (int i = 0; i < EnemyModels.Length; i++) { if (((Object)EnemyModels[i]).name == name) { return EnemyModels[i]; } } return null; } public static Material GetMaterial(string name) { for (int i = 0; i < EnemyModels.Length; i++) { if (((Object)Materials[i]).name == name) { InsanityRemasteredLogger.Log("Sucessfully loaded material: " + name); return Materials[i]; } } return null; } public static Texture2D GetTexture(string name) { for (int i = 0; i < EnemyModels.Length; i++) { if (((Object)Textures[i]).name == name) { InsanityRemasteredLogger.Log("Sucessfully loaded texture: " + name); return Textures[i]; } } return null; } private static void LoadEnemy() { string text = Path.Combine(DataFolder, "insanityremastered_enemies"); InsanityRemasteredLogger.Log(text); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { InsanityRemasteredLogger.Log("Failed to load enemies."); } EnemyModels = val.LoadAllAssets<GameObject>(); } private static void LoadMaterials() { string text = Path.Combine(DataFolder, "insanityremastered_materials"); AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { InsanityRemasteredLogger.Log("Failed to load materials."); } Materials = val.LoadAllAssets<Material>(); Textures = val.LoadAllAssets<Texture2D>(); EnemyModels = val.LoadAllAssets<GameObject>(); } private static void LoadSounds() { string text = Path.Combine(DataFolder, "soundresources_sfx"); string text2 = Path.Combine(DataFolder, "soundresources_stingers"); string text3 = Path.Combine(DataFolder, "soundresources_hallucination"); string text4 = Path.Combine(DataFolder, "soundresources_drones"); string text5 = Path.Combine(DataFolder, "soundresources_lc"); AssetBundle val = AssetBundle.LoadFromFile(text); AssetBundle val2 = AssetBundle.LoadFromFile(text2); AssetBundle val3 = AssetBundle.LoadFromFile(text3); AssetBundle val4 = AssetBundle.LoadFromFile(text4); AssetBundle val5 = AssetBundle.LoadFromFile(text5); if (val == null || val2 == null || val3 == null || text4 == null || text5 == null) { InsanityRemasteredLogger.LogError("Failed to load audio assets!"); return; } AuditoryHallucinations = val.LoadAllAssets<AudioClip>(); Stingers = val2.LoadAllAssets<AudioClip>(); PlayerHallucinationSounds = val3.LoadAllAssets<AudioClip>(); Drones = val4.LoadAllAssets<AudioClip>(); LCGameSFX = val5.LoadAllAssets<AudioClip>(); } } internal class InsanityRemasteredDebug { public static void QuickHotkeyTesting() { if (UnityInput.Current.GetKeyDown("f")) { SpawnFakePlayer(); } if (UnityInput.Current.GetKeyDown("v")) { HallucinationManager.Instance.Hallucinate("Power loss"); } } public static void SpawnFakePlayer() { HallucinationManager.Instance.PanicAttackLevel = 1f; PlayerPatcher.LocalPlayer.insanityLevel = 100f; HallucinationManager.Instance.Hallucinate("Fake Player"); } public static void SpawnItem(string itemName) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) foreach (Item items in StartOfRound.Instance.allItemsList.itemsList) { if (((Object)items).name == itemName) { GameObject val = Object.Instantiate<GameObject>(items.spawnPrefab, ((Component)PlayerPatcher.LocalPlayer).transform.position + ((Component)PlayerPatcher.LocalPlayer).transform.forward * 2f, ((Component)PlayerPatcher.LocalPlayer).transform.rotation, RoundManager.Instance.spawnedScrapContainer); GrabbableObject component = val.GetComponent<GrabbableObject>(); component.fallTime = 1f; component.scrapPersistedThroughRounds = false; component.grabbable = true; if (items.isScrap) { component.SetScrapValue(Random.Range(items.minValue, items.maxValue)); ((NetworkBehaviour)component).NetworkObject.Spawn(false); } } } } public static void SpawnObserver() { HallucinationManager.Instance.Hallucinate("Observer"); } } internal static class InsanityRemasteredLogger { internal static ManualLogSource logSource; public static void Initialize(string modGUID) { logSource = Logger.CreateLogSource(modGUID); } public static void Log(object message) { logSource.LogMessage(message); } public static void LogError(object message) { logSource.LogError(message); } public static void LogWarning(object message) { logSource.LogWarning(message); } } } namespace InsanityRemasteredMod.Patches { [HarmonyPatch] internal class HUDPatcher { private static bool hudOn; private static bool alreadyWarned; private static void ResetWarningFacility(bool outside) { if (outside) { alreadyWarned = false; } } private static void ResetWarning() { } [HarmonyPatch(typeof(HUDManager), "Awake")] [HarmonyPostfix] private static void _Awake() { HallucinationManager.OnUIHallucination += PlayUISFX; GameEvents.OnEnterOrLeaveFacility += ResetWarningFacility; GameEvents.OnGameEnd += ResetWarning; GameEvents.OnPlayerDied += ResetWarning; } [HarmonyPatch(typeof(HUDManager), "Update")] [HarmonyPostfix] private static void _Update() { if (UnityInput.Current.GetKeyDown((KeyCode)48)) { ToggleHUD(); } if (!alreadyWarned && PlayerPatcher.CurrentSanityLevel >= SanityLevel.Medium) { HUDManager.Instance.DisplayTip("WARNING!", "Heartrate level is above normal. Please exercise caution.", true, false, "LC_Tip1"); alreadyWarned = true; } if (!alreadyWarned && PlayerPatcher.CurrentSanityLevel >= SanityLevel.High) { HUDManager.Instance.DisplayTip("WARNING!", "Heartrate is . Please exercise caution.", true, false, "LC_Tip1"); alreadyWarned = true; } } private static void PlayUISFX() { InsanitySoundManager.Instance.PlayUISound(HUDManager.Instance.warningSFX[Random.Range(0, HUDManager.Instance.warningSFX.Length)]); } private static void ToggleHUD() { if (!hudOn) { HUDManager.Instance.HideHUD(true); hudOn = true; } else if (hudOn) { HUDManager.Instance.HideHUD(false); hudOn = false; } } } } namespace InsanityRemasteredMod.General { internal class InsanityRemasteredConfiguration { public static int maxPlayerCountForScalingInsanitySpeed; public static List<string> hallucinationTipTexts = new List<string> { "I'm always watching.", "behind you.", "You will never make it out of here.", "Did you see that?", "The company will never be satisfied. This is all pointless.", "you are the only one alive." }; public static List<string> statusEffectTexts = new List<string> { "WARNING:\n\nMultiple organ failures detected. Please lie down and hope it ends quick.", "SYSTEM ERROR:\n\nLife support power is dropping. Please return to your ship immediately.", "Unknown lifeform detected nearby." }; public static bool enableChanceToDieDuringPanicAttack { get; set; } public static bool auditoryHallucinationsEnabled { get; set; } public static bool modelHallucinationsEnabled { get; set; } public static bool fakeItemsEnabled { get; set; } public static bool powerLossEventEnabled { get; set; } public static bool panicAttacksEnabled { get; set; } public static bool disablePanicAttackEffects { get; set; } public static bool enableHallucinationMessages { get; set; } public static bool onlyUseVanillaSFX { get; set; } public static bool enableSanityLevelReminders { get; set; } public static bool useExperimentalSkinwalkerVersion { get; set; } public static bool disableLightProximity { get; set; } public static bool disableWalkieTalkiesSkinwalker { get; set; } public static bool disablePanicAttackDebuffs { get; set; } public static float sanityLossReductionWhenUsingFlashlights { get; set; } public static float sfxVolume { get; set; } public static float rngCheckTimerMultiplier { get; set; } public static float insanitySpeedScalingForSolo { get; set; } public static float lossWhenNotNearOthers { get; set; } public static float lossWhenLightsAreOut { get; set; } public static float lossWhenPanicking { get; set; } public static float lossWhenOutsideDuringSundown { get; set; } public static float sanityGainWhenInsideShip { get; set; } public static float sanityGainWhenNearOthers { get; set; } public static void Initialize(ConfigFile Config) { sfxVolume = Config.Bind<float>("SFX", "Stinger/Drone volume", 0.25f, "Sets the volume of the stinger and drone sounds. Max value is 1.").Value; panicAttacksEnabled = Config.Bind<bool>("General", "Able to experience a panic attack.", true, "Enables panic attacks.").Value; enableChanceToDieDuringPanicAttack = Config.Bind<bool>("General", "Able to die during panic attack.", false, "Enables the chance to die when having a panic attack.").Value; disablePanicAttackEffects = Config.Bind<bool>("General", "Disable panic attack effects.", false, "Disables the panic attack audio and visual effects.").Value; enableSanityLevelReminders = Config.Bind<bool>("General", "Notifications for sanity levels.", true, "Allows for notifications telling you your sanity level is increasing.").Value; disablePanicAttackDebuffs = Config.Bind<bool>("General", "Disable panic attack debuffs", false, "Disables all panic attack debuffs. (Slowness, cloudy vision)").Value; maxPlayerCountForScalingInsanitySpeed = Config.Bind<int>("Scaling", "Max player count for sanity loss scaling.", 5, "Sets the max amount of players to take into account when scaling sanity loss.").Value; insanitySpeedScalingForSolo = Config.Bind<float>("Scaling", "Solo insanity speed scaling", 0.85f, "Sets the insanity speed scaling value if playing solo.").Value; lossWhenLightsAreOut = Config.Bind<float>("Sanity Loss", "Sanity loss during lights out.", 0.21f, "Sets sanity loss during the lights out event.").Value; lossWhenNotNearOthers = Config.Bind<float>("Sanity Loss", "Sanity loss when not near others.", 0.16f, "Sets sanity loss when you are not near other players.").Value; lossWhenPanicking = Config.Bind<float>("Sanity Loss", "Sanity loss during a panic attack.", 1.26f, "Sets sanity loss during a panic attack.").Value; lossWhenOutsideDuringSundown = Config.Bind<float>("Sanity Loss", "Sanity loss during nighttime outside.", 0.2f, "Sets sanity loss when it's night and you are outside.").Value; sanityGainWhenInsideShip = Config.Bind<float>("Sanity Gain", "Sanity gain while inside ship", -0.55f, "Sets the sanity gain when inside the ship.").Value; sanityGainWhenNearOthers = Config.Bind<float>("Sanity Gain", "Sanity gain while near others", -0.26f, "Sets the sanity gain when near other players.").Value; disableLightProximity = Config.Bind<bool>("Sanity Gain", "Disable light detection", false, "Disables sanity regen when near a light source.").Value; enableHallucinationMessages = Config.Bind<bool>("Hallucinations", "Allow the game to randomly disply cryptic messages.", true, "Enables/Disables the random hallucination messages that can show when playing the game.").Value; auditoryHallucinationsEnabled = Config.Bind<bool>("Hallucinations", "Able to experience auditory hallucinations.", true, "Enables or Disables the ability to have auditory hallucinations.").Value; fakeItemsEnabled = Config.Bind<bool>("Hallucinations", "Fake items can spawn.", true, "Enables or Disables the chance for fake items to spawn").Value; modelHallucinationsEnabled = Config.Bind<bool>("Hallucinations", "Able to experience the model hallucination", true, "Enables or Disables the ability to experience the fake player or enemy model hallucination.").Value; powerLossEventEnabled = Config.Bind<bool>("Hallucinations", "Able to experience Lights off.", true, "Enables or disable the chance to experience the power shutoff event.").Value; disableWalkieTalkiesSkinwalker = Config.Bind<bool>("Hallucinations", "Disable walkies talkies skinwalker usage.", false, "Disables the feature where walkies play skinwalker clips.").Value; sanityLossReductionWhenUsingFlashlights = Config.Bind<float>("Misc", "Reduction when using flashlights.", 2f, "Sets the sanity loss reduction amount when using a flashlight").Value; rngCheckTimerMultiplier = Config.Bind<float>("Misc", "Multiplier for hallucination RNG check.", 1f, "A multiplier for the hallucination RNG timer. 2 means the timer will be twice as longer, 0.5 will be twice as shorter.").Value; onlyUseVanillaSFX = Config.Bind<bool>("Misc", "Only play vanilla sfx for sound hallucinations", false, "Only allow vanilla sounds to play when experiencing auditory hallucinations.").Value; useExperimentalSkinwalkerVersion = Config.Bind<bool>("Misc", "Use experimental version of skinwalker", false, "Allows IR to load the experimental version of Skinwalker.").Value; } public static void ValidateSettings() { if (sfxVolume > 1f) { sfxVolume = 1f; } if (maxPlayerCountForScalingInsanitySpeed <= 0) { maxPlayerCountForScalingInsanitySpeed = 1; } if (rngCheckTimerMultiplier <= 0f) { rngCheckTimerMultiplier = 1f; } } } internal class HallucinationEffects { private static float PanicLevel => HallucinationManager.Instance.PanicAttackLevel; private static float EffectTransitionTime => HallucinationManager.Instance.EffectTransition; private static PlayerControllerB localPlayer => GameNetworkManager.Instance.localPlayerController; public static void LessenPanicEffects() { if (GameNetworkManager.Instance.gameHasStarted && ((!localPlayer.isInsideFactory && PanicLevel >= 0f) || (localPlayer.isInsideFactory && !localPlayer.isPlayerAlone && PanicLevel >= 0f)) && !InsanityRemasteredConfiguration.disablePanicAttackEffects) { HUDManager.Instance.insanityScreenFilter.weight = Mathf.MoveTowards(HUDManager.Instance.insanityScreenFilter.weight, 0f, EffectTransitionTime - 100f * Time.deltaTime); SoundManager.Instance.SetDiageticMixerSnapshot(0, EffectTransitionTime - 100f); } } public static void IncreasePanicEffects() { if (!InsanityRemasteredConfiguration.disablePanicAttackEffects) { HUDManager.Instance.insanityScreenFilter.weight = Mathf.MoveTowards(HUDManager.Instance.insanityScreenFilter.weight, 0.5f, EffectTransitionTime * Time.deltaTime); SoundManager.Instance.SetDiageticMixerSnapshot(1, EffectTransitionTime); } } } }
BepInEx/plugins/plugins/IntroTweaks.dll
Decompiled 2 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using IntroTweaks.Data; using IntroTweaks.Utils; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] [assembly: AssemblyCompany("IntroTweaks")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Seamless skipping of Lethal Company intro/menu screens.")] [assembly: AssemblyFileVersion("1.5.0.0")] [assembly: AssemblyInformationalVersion("1.5.0+1cc26656336b53e5f702b9a100c6aad010cb99cd")] [assembly: AssemblyProduct("IntroTweaks")] [assembly: AssemblyTitle("IntroTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace IntroTweaks { [BepInPlugin("IntroTweaks", "IntroTweaks", "1.5.0")] public class Plugin : BaseUnityPlugin { internal static string SelectedMode; private const string GUID = "IntroTweaks"; private const string NAME = "IntroTweaks"; private const string VERSION = "1.5.0"; private Harmony patcher; private static bool menuLoaded; internal static ManualLogSource Logger { get; private set; } public static Config Config { get; private set; } public static bool ModInstalled(string name) { name = name.ToLower(); return Chainloader.PluginInfos.Values.Any((PluginInfo p) => p.Metadata.GUID.ToLower().Contains(name) || p.Metadata.Name.ToLower() == name); } private void Awake() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Config = new Config(((BaseUnityPlugin)this).Config); if (!PluginEnabled(logDisabled: true)) { return; } SceneManager.sceneLoaded += SceneLoaded; if (Config.SKIP_SPLASH_SCREENS.Value) { Task.Run((Action)SkipSplashScreen); } Config.InitBindings(); SelectedMode = Config.AUTO_SELECT_MODE.Value.ToLower(); try { patcher = new Harmony("IntroTweaks"); patcher.PatchAll(); Logger.LogInfo((object)"Plugin loaded."); } catch (Exception ex) { Logger.LogError((object)ex); } } public bool PluginEnabled(bool logDisabled = false) { bool value = Config.PLUGIN_ENABLED.Value; if (!value && logDisabled) { Logger.LogInfo((object)"IntroTweaks disabled globally."); } return value; } private void SkipSplashScreen() { Logger.LogDebug((object)"Skipping splash screens. Ew."); while (!menuLoaded) { SplashScreen.Stop((StopBehavior)0); } } private void SceneLoaded(Scene scene, LoadSceneMode _) { switch (((Scene)(ref scene)).name) { case "InitScene": case "InitSceneLaunchOptions": case "MainMenu": menuLoaded = true; break; } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "IntroTweaks"; public const string PLUGIN_NAME = "IntroTweaks"; public const string PLUGIN_VERSION = "1.5.0"; } } namespace IntroTweaks.Utils { internal class DisplayUtil { public static List<DisplayInfo> Displays { get; private set; } = new List<DisplayInfo>(); internal static void Move(int displayIndex) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) Screen.GetDisplayLayout(Displays); int num = Displays.IndexOf(Screen.mainWindowDisplayInfo); if (displayIndex != num) { MoveWindowAsync(displayIndex); } } private static async void MoveWindowAsync(int index) { await MoveWindowTask(index); } private static async Task MoveWindowTask(int index) { if (index >= Displays.Count) { await Task.CompletedTask; Plugin.Logger.LogDebug((object)"Display index out of bounds for current layout!"); return; } DisplayInfo val = Displays[index]; Vector2Int zero = Vector2Int.zero; if ((int)Screen.fullScreenMode != 3) { ((Vector2Int)(ref zero)).x = ((Vector2Int)(ref zero)).x + val.width / 2; ((Vector2Int)(ref zero)).y = ((Vector2Int)(ref zero)).y + val.height / 2; } AsyncOperation operation = Screen.MoveMainWindowTo(ref val, zero); while (operation.progress < 1f) { await Task.Yield(); } Plugin.Logger.LogDebug((object)("Game moved to display: " + Displays[index].name)); } } internal static class Extensions { internal static GameObject FindInParent(this GameObject obj, string name) { Transform parent = obj.transform.parent; try { return ((Component)parent.Find(name)).gameObject; } catch (Exception arg) { Plugin.Logger.LogError((object)$"Error finding '{name}' in: {((Object)parent).name}\n{arg}"); return null; } } internal static bool IsAbove(this Transform cur, Transform target) { //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) return cur.localPosition.y > target.localPosition.y; } internal static void ResetAnchoredPos(this RectTransform rect) { //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) rect.anchoredPosition = Vector2.zero; rect.anchoredPosition3D = Vector3.zero; } internal static void ResetPivot(this RectTransform rect) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rect.pivot = Vector2.zero; } internal static void ResetSizeDelta(this RectTransform rect) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rect.sizeDelta = Vector2.zero; } internal static void EditOffsets(this RectTransform rect, Vector2 max, Vector2 min) { //IL_0001: 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) rect.offsetMax = max; rect.offsetMin = min; } internal static void EditAnchors(this RectTransform rect, Vector2 max, Vector2 min) { //IL_0001: 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) rect.anchorMax = max; rect.anchorMin = min; } internal static void AnchorToBottomRight(this RectTransform rect) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) rect.ResetAnchoredPos(); rect.EditAnchors(new Vector2(1f, 0f), new Vector2(1f, 0f)); ((Transform)rect).localPosition = new Vector3(432f, -222f, 0f); ((Transform)rect).localRotation = Quaternion.identity; } internal static void AnchorToBottom(this RectTransform rect) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) rect.ResetSizeDelta(); rect.ResetAnchoredPos(); rect.EditAnchors(new Vector2(0.5f, 0f), new Vector2(0.5f, 0f)); rect.EditOffsets(new Vector2(0f, 0f), new Vector2(0f, 0f)); rect.RefreshPosition(); } internal static void RefreshPosition(this RectTransform rect) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) float value = Plugin.Config.VERSION_TEXT_OFFSET.Value; ((Transform)rect).localPosition = new Vector3(0f, -205f + value, 0f); ((Transform)rect).localRotation = Quaternion.identity; } internal static void SetLocalX(this RectTransform rect, float newX) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) ((Transform)rect).localPosition = new Vector3(newX, ((Transform)rect).localPosition.y, ((Transform)rect).localPosition.z); } internal static void FixScale(this Transform transform) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) transform.localScale = new Vector3(1.02f, 1.06f, 1.02f); } internal static float ClampedValue(this ConfigEntry<float> entry, float min, float max) { return Mathf.Clamp(entry.Value, min, max); } } } namespace IntroTweaks.Patches { [HarmonyPatch(typeof(InitializeGame))] internal class InitializeGamePatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void DisableBootAnimation(InitializeGame __instance) { int value = Plugin.Config.GAME_STARTUP_DISPLAY.Value; if (value >= 0) { DisplayUtil.Move(value); } if (Plugin.Config.SKIP_BOOT_ANIMATION.Value) { __instance.runBootUpScreen = false; __instance.bootUpAudio = null; __instance.bootUpAnimation = null; } } } [HarmonyPatch(typeof(MenuManager))] internal class MenuManagerPatch { internal static GameObject VersionNum = null; internal static Transform MenuContainer = null; internal static Transform MenuPanel = null; public static Color32 DARK_ORANGE = new Color32((byte)175, (byte)115, (byte)0, byte.MaxValue); private static MenuManager Instance; public static int realVer { get; internal set; } public static int gameVer { get; private set; } public static TextMeshProUGUI versionText { get; private set; } public static RectTransform versionTextRect { get; private set; } private static Config Cfg => Plugin.Config; [HarmonyPostfix] [HarmonyPatch("Start")] private static void Init(MenuManager __instance) { Instance = __instance; ((MonoBehaviour)Instance).StartCoroutine(PatchMenuDelayed()); } private static IEnumerator PatchMenuDelayed() { yield return (object)new WaitUntil((Func<bool>)(() => !GameNetworkManager.Instance.firstTimeInMenu)); GameObject obj = GameObject.Find("MenuContainer"); MenuContainer = ((obj != null) ? obj.transform : null); Transform menuContainer = MenuContainer; MenuPanel = ((menuContainer != null) ? menuContainer.Find("MainButtons") : null); Transform menuContainer2 = MenuContainer; object versionNum; if (menuContainer2 == null) { versionNum = null; } else { Transform obj2 = menuContainer2.Find("VersionNum"); versionNum = ((obj2 != null) ? ((Component)obj2).gameObject : null); } VersionNum = (GameObject)versionNum; PatchMenu(); } private static void PatchMenu() { Cfg.ALWAYS_SHORT_VERSION.SettingChanged += delegate { SetVersion(); }; Cfg.VERSION_TEXT_SIZE.SettingChanged += delegate { ((TMP_Text)versionText).fontSize = Cfg.VERSION_TEXT_SIZE.ClampedValue(10f, 40f); }; Cfg.VERSION_TEXT_OFFSET.SettingChanged += delegate { versionTextRect.RefreshPosition(); }; try { if (Cfg.FIX_MENU_PANELS.Value) { FixPanelAlignment(MenuPanel); FixPanelAlignment(MenuContainer.Find("LobbyHostSettings")); FixPanelAlignment(MenuContainer.Find("LobbyList")); FixPanelAlignment(MenuContainer.Find("LoadingScreen")); Plugin.Logger.LogDebug((object)"Fixed menu panel alignment."); } IEnumerable<GameObject> buttons = from b in ((Component)MenuPanel).GetComponentsInChildren<Button>(true) select ((Component)b).gameObject; if (Cfg.ALIGN_MENU_BUTTONS.Value) { AlignButtons(buttons); } if (Cfg.REMOVE_CREDITS_BUTTON.Value) { RemoveCreditsButton(buttons); } bool changeRenderMode = Cfg.FIX_MENU_CANVAS.Value; bool flag = Plugin.ModInstalled("AdvancedCompany"); bool flag2 = Plugin.ModInstalled("MoreCompany"); if (flag || flag2) { changeRenderMode = false; } if (Cfg.FIX_MORE_COMPANY.Value && flag2 && !flag) { string text = (FixMoreCompany() ? ". Edits have been made to its UI elements." : " but its UI elements do not exist!"); Plugin.Logger.LogDebug((object)("MoreCompany found" + text)); } TweakCanvasSettings(Instance.menuButtons, changeRenderMode); } catch (Exception arg) { Plugin.Logger.LogError((object)$"An error occurred patching the menu. SAJ.\n{arg}"); } if (Cfg.REMOVE_NEWS_PANEL.Value) { GameObject newsPanel = Instance.NewsPanel; if (newsPanel != null) { newsPanel.SetActive(false); } } if (Cfg.REMOVE_LAN_WARNING.Value) { GameObject lanWarningContainer = Instance.lanWarningContainer; if (lanWarningContainer != null) { lanWarningContainer.SetActive(false); } } if (Cfg.REMOVE_LAUNCHED_IN_LAN.Value) { TextMeshProUGUI launchedInLanModeText = Instance.launchedInLanModeText; GameObject val = ((launchedInLanModeText != null) ? ((Component)launchedInLanModeText).gameObject : null); if (Object.op_Implicit((Object)(object)val)) { val.SetActive(false); } } if (Cfg.AUTO_SELECT_HOST.Value) { Instance.ClickHostButton(); } } [HarmonyPostfix] [HarmonyPatch("Update")] private static void UpdatePatch(MenuManager __instance) { bool activeSelf = __instance.menuButtons.activeSelf; if ((Object)(object)versionText == (Object)null) { TryReplaceVersionText(); return; } ((TMP_Text)versionText).text = Cfg.VERSION_TEXT.Value.Replace("$VERSION", $"{gameVer}"); GameObject gameObject = ((Component)versionText).gameObject; if (!gameObject.activeSelf && activeSelf) { gameObject.SetActive(true); } } [HarmonyPrefix] [HarmonyPatch("ClickHostButton")] private static void DisableMenuOnHost() { Transform menuPanel = MenuPanel; if (menuPanel != null) { ((Component)menuPanel).gameObject.SetActive(false); } } private static bool FixMoreCompany() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("GlobalScale"); if (!Object.op_Implicit((Object)(object)val)) { return false; } GameObject gameObject = ((Component)val.transform.Find("CosmeticsScreen")).gameObject; val.GetComponentInParent<Canvas>().pixelPerfect = true; Transform transform = ((Component)gameObject.transform.Find("SpinAreaButton")).transform; transform.localScale = new Vector3(0.48f, 0.55f, 0.46f); transform.position = new Vector3(421.65f, 245.7f, 200f); RectTransform component = gameObject.FindInParent("ActivateButton").GetComponent<RectTransform>(); RectTransform component2 = ((Component)gameObject.transform.Find("ExitButton")).GetComponent<RectTransform>(); component.AnchorToBottomRight(); component2.AnchorToBottomRight(); ((Transform)component2).SetAsLastSibling(); ((Component)gameObject.transform.Find("CosmeticsHolderBorder")).transform.localScale = new Vector3(2.4f, 2.1f, 1f); Transform transform2 = ((Component)Instance.menuButtons.transform.Find("HeaderImage")).transform; transform2.localScale = new Vector3(4.9f, 4.9f, 4.9f); transform2.localPosition = new Vector3(transform2.localPosition.x, transform2.localPosition.y + 35f, 0f); return (Object)(object)val != (Object)null; } private static void RemoveCreditsButton(IEnumerable<GameObject> buttons) { //IL_007b: 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) buttons.First((GameObject b) => ((Object)b).name == "QuitButton"); GameObject creditsButton = buttons.First((GameObject b) => ((Object)b).name == "Credits"); creditsButton.SetActive(false); RectTransform creditsRect = creditsButton.GetComponent<RectTransform>(); Rect rect = creditsRect.rect; float creditsHeight = ((Rect)(ref rect)).height * 1.3f; CollectionExtensions.Do<GameObject>(buttons, (Action<GameObject>)delegate(GameObject obj) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)obj) && !((Object)(object)obj == (Object)(object)creditsButton)) { Transform transform = obj.transform; Vector3 localPosition = transform.localPosition; if (obj.transform.IsAbove((Transform)(object)creditsRect)) { transform.localPosition = new Vector3(localPosition.x, localPosition.y - creditsHeight, localPosition.z); } } }); Plugin.Logger.LogDebug((object)"Removed credits button."); } private static void AlignButtons(IEnumerable<GameObject> buttons) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) RectTransform component = buttons.First((GameObject b) => ((Object)b).name == "HostButton").GetComponent<RectTransform>(); component.SetLocalX(((Transform)component).localPosition.x + 15f); foreach (GameObject button in buttons) { if (!Object.op_Implicit((Object)(object)button)) { Plugin.Logger.LogDebug((object)("Could not align button " + ((Object)button).name)); continue; } RectTransform component2 = button.GetComponent<RectTransform>(); component2.sizeDelta = component.sizeDelta; ((Transform)component2).localPosition = new Vector3(((Transform)component).localPosition.x, ((Transform)component2).localPosition.y, ((Transform)component).localPosition.z); TextMeshProUGUI componentInChildren = button.GetComponentInChildren<TextMeshProUGUI>(true); ((TMP_Text)componentInChildren).transform.FixScale(); TweakTextSettings(componentInChildren); ((TMP_Text)componentInChildren).fontSize = 15f; ((TMP_Text)componentInChildren).wordSpacing = ((TMP_Text)componentInChildren).wordSpacing - 25f; RectTransform component3 = ((Component)componentInChildren).gameObject.GetComponent<RectTransform>(); component3.ResetAnchoredPos(); component3.EditOffsets(Vector2.zero, new Vector2(5f, 0f)); } Plugin.Logger.LogDebug((object)"Aligned menu buttons."); } internal static void TryReplaceVersionText() { if (Cfg.CUSTOM_VERSION_TEXT.Value && !((Object)(object)VersionNum == (Object)null) && !((Object)(object)MenuPanel == (Object)null)) { GameObject obj = Object.Instantiate<GameObject>(VersionNum, MenuPanel); ((Object)obj).name = "VersionNumberText"; versionText = InitTextMesh(obj.GetComponent<TextMeshProUGUI>()); versionTextRect = ((Component)versionText).gameObject.GetComponent<RectTransform>(); versionTextRect.AnchorToBottom(); VersionNum.SetActive(false); } } private static void SetVersion() { bool value = Cfg.ALWAYS_SHORT_VERSION.Value; int num = Math.Abs(GameNetworkManager.Instance.gameVersionNum); gameVer = (value ? realVer : ((num != realVer) ? num : realVer)); } private static TextMeshProUGUI InitTextMesh(TextMeshProUGUI tmp) { SetVersion(); ((TMP_Text)tmp).text = Cfg.VERSION_TEXT.Value; ((TMP_Text)tmp).fontSize = Cfg.VERSION_TEXT_SIZE.ClampedValue(10f, 40f); ((TMP_Text)tmp).alignment = (TextAlignmentOptions)514; TweakTextSettings(tmp); return tmp; } private static void TweakTextSettings(TextMeshProUGUI tmp, bool overflow = true, bool wordWrap = false) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (overflow) { ((TMP_Text)tmp).overflowMode = (TextOverflowModes)0; } ((TMP_Text)tmp).enableWordWrapping = wordWrap; ((TMP_Text)tmp).faceColor = DARK_ORANGE; } private static void TweakCanvasSettings(GameObject panel, bool changeRenderMode) { Canvas componentInParent = panel.GetComponentInParent<Canvas>(); componentInParent.pixelPerfect = true; if (changeRenderMode) { componentInParent.renderMode = (RenderMode)0; } } private static void FixPanelAlignment(Transform panel) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) RectTransform component = ((Component)panel).gameObject.GetComponent<RectTransform>(); component.ResetSizeDelta(); component.ResetAnchoredPos(); component.EditOffsets(new Vector2(-20f, -25f), new Vector2(20f, 25f)); panel.FixScale(); } } [HarmonyPatch(typeof(GameNetworkManager))] internal class NetworkManagerPatch { [HarmonyPrefix] [HarmonyPatch("Awake")] private static void SetRealVersion(GameNetworkManager __instance) { MenuManagerPatch.realVer = __instance.gameVersionNum; } } [HarmonyPatch(typeof(PreInitSceneScript))] internal class PreInitScenePatch { [HarmonyPostfix] [HarmonyPatch("Start")] private static void FinishedFirstLaunch() { IngamePlayerSettings instance = IngamePlayerSettings.Instance; if (instance != null) { instance.SetPlayerFinishedLaunchOptions(); } } [HarmonyPostfix] [HarmonyPatch("SkipToFinalSetting")] internal static void SkipToSelectedMode(PreInitSceneScript __instance, ref bool ___choseLaunchOption) { string selectedMode = Plugin.SelectedMode; if (!(selectedMode != "online") || !(selectedMode != "lan")) { CollectionExtensions.Do<GameObject>((IEnumerable<GameObject>)__instance.LaunchSettingsPanels, (Action<GameObject>)delegate(GameObject panel) { panel.SetActive(false); }); __instance.currentLaunchSettingPanel = 0; ((TMP_Text)__instance.headerText).text = ""; ((Component)__instance.blackTransition).gameObject.SetActive(false); __instance.continueButton.gameObject.SetActive(false); ___choseLaunchOption = true; __instance.mainAudio.PlayOneShot(__instance.selectSFX); SceneManager.LoadSceneAsync((Plugin.SelectedMode == "online") ? "InitScene" : "InitSceneLANMode", (LoadSceneMode)1); } } } [HarmonyPatch(typeof(StartMatchLever))] internal class StartMatchLeverPatch { [HarmonyPostfix] [HarmonyPatch("Start")] public static void StartMatch(StartMatchLever __instance) { if (Plugin.Config.AUTO_START_GAME.Value && !__instance.leverHasBeenPulled) { ((MonoBehaviour)__instance).StartCoroutine(PullLeverAnim(__instance)); } } private static IEnumerator PullLeverAnim(StartMatchLever instance) { yield return (object)new WaitForSeconds(Plugin.Config.AUTO_START_GAME_DELAY.Value); if (!instance.leverHasBeenPulled) { instance.leverAnimatorObject.SetBool("pullLever", true); instance.leverHasBeenPulled = true; instance.triggerScript.interactable = false; instance.PullLever(); } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPostfix] [HarmonyPatch("firstDayAnimation")] private static IEnumerator DisableFirstDaySFX(IEnumerator result, StartOfRound __instance) { while (result.MoveNext()) { yield return result.Current; } if (Plugin.Config.DISABLE_FIRST_DAY_SFX.Value) { StopSpeaker(__instance.speakerAudioSource); } } private static void StopSpeaker(AudioSource source) { if (source.isPlaying) { source.Stop(); } } } } namespace IntroTweaks.Data { public class Config { private readonly ConfigFile configFile; public ConfigEntry<bool> PLUGIN_ENABLED { get; private set; } public ConfigEntry<bool> SKIP_SPLASH_SCREENS { get; private set; } public ConfigEntry<bool> SKIP_BOOT_ANIMATION { get; private set; } public ConfigEntry<string> AUTO_SELECT_MODE { get; private set; } public ConfigEntry<bool> AUTO_SELECT_HOST { get; private set; } public ConfigEntry<bool> ALIGN_MENU_BUTTONS { get; private set; } public ConfigEntry<bool> FIX_MENU_CANVAS { get; private set; } public ConfigEntry<bool> FIX_MENU_PANELS { get; private set; } public ConfigEntry<bool> FIX_MORE_COMPANY { get; internal set; } public ConfigEntry<bool> REMOVE_LAN_WARNING { get; private set; } public ConfigEntry<bool> REMOVE_LAUNCHED_IN_LAN { get; private set; } public ConfigEntry<bool> REMOVE_NEWS_PANEL { get; private set; } public ConfigEntry<bool> REMOVE_CREDITS_BUTTON { get; private set; } public ConfigEntry<bool> CUSTOM_VERSION_TEXT { get; private set; } public ConfigEntry<string> VERSION_TEXT { get; private set; } public ConfigEntry<float> VERSION_TEXT_SIZE { get; private set; } public ConfigEntry<float> VERSION_TEXT_OFFSET { get; private set; } public ConfigEntry<bool> ALWAYS_SHORT_VERSION { get; private set; } public ConfigEntry<bool> AUTO_START_GAME { get; private set; } public ConfigEntry<float> AUTO_START_GAME_DELAY { get; private set; } public ConfigEntry<bool> DISABLE_FIRST_DAY_SFX { get; private set; } public ConfigEntry<int> GAME_STARTUP_DISPLAY { get; private set; } public Config(ConfigFile cfg) { configFile = cfg; PLUGIN_ENABLED = NewEntry("bEnabled", defaultVal: true, "Enable or disable the plugin globally."); SKIP_SPLASH_SCREENS = NewEntry(Category.INTRO_TWEAKS, "bSkipSplashScreens", defaultVal: true, "Skips those pesky Unity and Zeekers startup logos!"); } private ConfigEntry<T> NewEntry<T>(string key, T defaultVal, string desc) { return NewEntry(Category.GENERAL, key, defaultVal, desc); } private ConfigEntry<T> NewEntry<T>(Category category, string key, T defaultVal, string desc) { return configFile.Bind<T>(category.Value, key, defaultVal, desc); } public void InitBindings() { SKIP_BOOT_ANIMATION = NewEntry(Category.INTRO_TWEAKS, "bSkipBootAnimation", defaultVal: true, "If the loading animation (booting OS) should be skipped."); AUTO_SELECT_MODE = NewEntry(Category.INTRO_TWEAKS, "sAutoSelectMode", "OFF", "Which mode to automatically enter into after the splash screen.\nValid options: ONLINE, LAN, OFF"); AUTO_SELECT_HOST = NewEntry(Category.INTRO_TWEAKS, "bAutoSelectHost", defaultVal: false, "Whether the 'Host' button is automatically selected when the Online/LAN menu loads."); ALIGN_MENU_BUTTONS = NewEntry(Category.MENU_TWEAKS, "bAlignMenuButtons", defaultVal: true, "If the main menu buttons should align with each other."); FIX_MENU_CANVAS = NewEntry(Category.MENU_TWEAKS, "bFixMenuCanvas", defaultVal: false, "Whether the main menu canvas should have its settings corrected.\nMay cause overlapping issues, only enable it if you don't use other mods that edit the menu."); FIX_MENU_PANELS = NewEntry(Category.MENU_TWEAKS, "bFixMenuPanels", defaultVal: false, "The main menu panels (host, servers, loading screen) all have anchoring, offset and sizing issues.\nThis option helps solve them and improve the look of the menu.\n\nMAY BREAK SOME MODS."); FIX_MORE_COMPANY = NewEntry(Category.MENU_TWEAKS, "bFixMoreCompany", defaultVal: true, "Whether to apply fixes to MoreCompany UI elements.\nFixes include: button placement, header positioning & scaling of cosmetics border.\n\nPRONE TO INCOMPATIBILITIES! TURN THIS OFF IF YOU ENCOUNTER BREAKING BUGS."); REMOVE_LAN_WARNING = NewEntry(Category.MENU_TWEAKS, "bRemoveLanWarning", defaultVal: true, "Hides the warning popup when hosting a LAN session."); REMOVE_LAUNCHED_IN_LAN = NewEntry(Category.MENU_TWEAKS, "bRemoveLaunchedInLanText", defaultVal: true, "Hides the 'Launched in LAN mode' text below the Quit button."); REMOVE_NEWS_PANEL = NewEntry(Category.MENU_TWEAKS, "bRemoveNewsPanel", defaultVal: false, "Hides the panel that displays news such as game updates."); REMOVE_CREDITS_BUTTON = NewEntry(Category.MENU_TWEAKS, "bRemoveCreditsButton", defaultVal: true, "Hides the 'Credits' button on the main menu. The other buttons are automatically adjusted."); CUSTOM_VERSION_TEXT = NewEntry(Category.VERSION_TEXT, "bCustomVersionText", defaultVal: true, "Whether to replace the game's version text with a custom alternative."); VERSION_TEXT = NewEntry(Category.VERSION_TEXT, "sVersionText", "v$VERSION\n[MODDED]", "Replace the game's version text with this custom text in the main menu.\nTo insert the version number, use the $VERSION syntax. E.g. Ver69 would be Ver$VERSION"); VERSION_TEXT_SIZE = NewEntry(Category.VERSION_TEXT, "fVersionTextSize", 20f, "The font size of the version text. Min = 10, Max = 40."); VERSION_TEXT_OFFSET = NewEntry(Category.VERSION_TEXT, "fVersionTextOffset", 0f, "Use this option to adjust the Y position of the version text if it's out of place.\nFor example, when using 3 lines of text, a small positive value would move it back up."); ALWAYS_SHORT_VERSION = NewEntry(Category.VERSION_TEXT, "bAlwaysShortVersion", defaultVal: true, "If the custom version text should always show the short 'real' version.\nThis will ignore mods like LC_API and MoreCompany that change the game version."); AUTO_START_GAME = NewEntry(Category.MISC, "bAutoStartGame", defaultVal: false, "If enabled, the lever will be pulled automatically to begin the landing sequence."); AUTO_START_GAME_DELAY = NewEntry(Category.MISC, "fAutoStartGameDelay", 1.5f, "The delay before the lever is automatically pulled when bAutoStartGame is true.\nMinimum: 1 | Maximum: 30"); DISABLE_FIRST_DAY_SFX = NewEntry(Category.MISC, "bDisableFirstDaySFX", defaultVal: false, "Toggles the first day ship speaker SFX."); GAME_STARTUP_DISPLAY = NewEntry(Category.MISC, "iGameStartupDisplay", 0, "The index of the monitor to display the game on when starting.\nYou can find these indexes in your Windows display settings.\nDefaults to 0 (main monitor)."); } } public struct Category { public static Category GENERAL => new Category("0 >> General << 0"); public static Category INTRO_TWEAKS => new Category("1 >> Intro << 1"); public static Category MENU_TWEAKS => new Category("2 >> Main Menu << 2"); public static Category VERSION_TEXT => new Category("3 >> Custom Version Text << 3"); public static Category MISC => new Category("4 >> Miscellaneous << 4"); public string Value { get; private set; } public Category(string value) { Value = value; } } }
BepInEx/plugins/plugins/JetpackWarning.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Hamunii")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A Lethal Company Mod that adds a visual and audio indicator for when your jetpack is about to explode.")] [assembly: AssemblyFileVersion("2.2.0.0")] [assembly: AssemblyInformationalVersion("2.2.0")] [assembly: AssemblyProduct("JetpackWarning")] [assembly: AssemblyTitle("JetpackWarning")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace JetpackWarning { public static class Assets { public static string mainAssetBundleName = "jetpackAssets"; public static AssetBundle MainAssetBundle = null; private static string GetAssemblyName() { return Assembly.GetExecutingAssembly().FullName.Split(',')[0]; } public static void PopulateAssets() { if ((Object)(object)MainAssetBundle == (Object)null) { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetAssemblyName() + "." + mainAssetBundleName)) { MainAssetBundle = AssetBundle.LoadFromStream(stream); } } } } [BepInPlugin("JetpackWarning", "JetpackWarning", "2.2.0")] public class JetpackWarningPlugin : BaseUnityPlugin { public static Harmony _harmony; public static AudioClip jetpackCriticalBeep; public static GameObject meterContainer; public static GameObject meter; public static GameObject frame; public static GameObject warning; private void Awake() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin JetpackWarning is loaded!"); Assets.PopulateAssets(); _harmony = new Harmony("JetpackWarning"); _harmony.PatchAll(typeof(Patches)); SceneManager.sceneLoaded += OnSceneRelayLoaded; jetpackCriticalBeep = Assets.MainAssetBundle.LoadAsset<AudioClip>("JetpackCriticalBeep"); } private void OnSceneRelayLoaded(Scene scene, LoadSceneMode loadMode) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0052: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) if (((Scene)(ref scene)).name == "SampleSceneRelay") { GameObject val = GameObject.Find("IngamePlayerHUD"); meterContainer = new GameObject("jetpackMeterContainer"); meterContainer.AddComponent<CanvasGroup>(); RectTransform obj = meterContainer.AddComponent<RectTransform>(); ((Transform)obj).parent = val.transform; ((Transform)obj).localScale = Vector3.one; obj.anchoredPosition = Vector2.zero; ((Transform)obj).localPosition = Vector2.op_Implicit(new Vector2(50f, 0f)); obj.sizeDelta = Vector2.one; meter = AddImageToHUD("jetpackMeter", scene); frame = AddImageToHUD("jetpackMeterFrame", scene); warning = AddImageToHUD("jetpackMeterWarning", scene); GameObject[] array = (GameObject[])(object)new GameObject[3] { meter, frame, warning }; foreach (GameObject obj2 in array) { obj2.transform.parent = meterContainer.transform; obj2.transform.localPosition = Vector2.op_Implicit(Vector2.zero); } meter.GetComponent<Image>().type = (Type)3; meter.GetComponent<Image>().fillMethod = (FillMethod)1; Transform transform = warning.transform; transform.localPosition += new Vector3(30f, 0f); } } private GameObject AddImageToHUD(string imageName, Scene scene) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown Sprite val = Assets.MainAssetBundle.LoadAsset<Sprite>(imageName); GameObject val2 = new GameObject(imageName); SceneManager.MoveGameObjectToScene(val2, scene); GameObject val3 = GameObject.Find("IngamePlayerHUD"); RectTransform obj = val2.AddComponent<RectTransform>(); ((Transform)obj).parent = val3.transform; ((Transform)obj).localScale = Vector2.op_Implicit(Vector2.one); obj.anchoredPosition = Vector2.zero; ((Transform)obj).localPosition = Vector2.op_Implicit(Vector2.zero); Rect rect = val.rect; float num = ((Rect)(ref rect)).width / 2f; rect = val.rect; obj.sizeDelta = new Vector2(num, ((Rect)(ref rect)).height / 2f); val2.AddComponent<Image>().sprite = val; val2.AddComponent<CanvasRenderer>(); return val2; } } internal class Patches { private static bool playJetpackCritical = false; private static bool playingJetpackCritical = false; private static float criticalFill = 0.75f; [HarmonyPatch(typeof(PlayerControllerB), "LateUpdate")] [HarmonyPostfix] private static void PlayerControllerB_LateUpdate_Postfix(ref PlayerControllerB __instance) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_0206: 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_0212: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkBehaviour)__instance).IsOwner || (((NetworkBehaviour)__instance).IsServer && !__instance.isHostPlayerObject) || !__instance.isPlayerControlled || __instance.isPlayerDead) { return; } if (__instance.isHoldingObject && __instance.currentlyHeldObjectServer is JetpackItem) { JetpackItem val = (JetpackItem)__instance.currentlyHeldObjectServer; JetpackWarningPlugin.meterContainer.SetActive(true); Vector3 val2 = (Vector3)typeof(JetpackItem).GetField("forces", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(val); float num = (float)typeof(JetpackItem).GetField("jetpackPower", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(val); float num2 = ((!(num < 80f)) ? (0.5f - Mathf.Clamp(num / 20f - 4f, 0f, 1f) / 2f) : (Mathf.Clamp(num / 25f - 2.2f, 0f, 1f) / 2f)); if (((Vector3)(ref val2)).magnitude > 47f) { num2 = Mathf.Clamp(((Vector3)(ref val2)).magnitude / 3f - 15.6666f, 0f, 1f); } float num3 = ((((Vector3)(ref val2)).magnitude >= 0f) ? (((Vector3)(ref val2)).magnitude / 50f) : 0f); float num4 = Mathf.Lerp((((Vector3)(ref val2)).magnitude / 2f + num / 2.25f >= 0f) ? ((((Vector3)(ref val2)).magnitude / 2f + num / 2.25f) / 50f) : 0f, num3, num2); JetpackWarningPlugin.meter.GetComponent<Image>().fillAmount = num4; JetpackWarningPlugin.warning.SetActive(num4 > criticalFill); playJetpackCritical = num4 > criticalFill; Color color = Color.Lerp(new Color(1f, 0.82f, 0.405f, 1f), new Color(0.769f, 0.243f, 0.243f, 1f), num4); ((Graphic)JetpackWarningPlugin.meter.GetComponent<Image>()).color = color; ((Graphic)JetpackWarningPlugin.frame.GetComponent<Image>()).color = color; ((Graphic)JetpackWarningPlugin.warning.GetComponent<Image>()).color = color; if (playJetpackCritical) { if (!playingJetpackCritical) { playingJetpackCritical = true; val.jetpackBeepsAudio.clip = JetpackWarningPlugin.jetpackCriticalBeep; val.jetpackBeepsAudio.Play(); } } else { playingJetpackCritical = false; } } else { JetpackWarningPlugin.meterContainer.SetActive(false); } } [HarmonyPatch(typeof(JetpackItem), "SetJetpackAudios")] [HarmonyPrefix] private static bool JetpackItem_SetJetpackAudios_Prefix(ref bool ___jetpackActivated, ref AudioSource ___jetpackBeepsAudio) { return !playingJetpackCritical; } [HarmonyPatch(typeof(JetpackItem), "JetpackEffect")] [HarmonyPostfix] private static void JetpackItem_JetpackEffect_Postfix(ref bool __0, JetpackItem __instance) { if (__0 && playJetpackCritical) { playingJetpackCritical = true; __instance.jetpackBeepsAudio.clip = JetpackWarningPlugin.jetpackCriticalBeep; __instance.jetpackBeepsAudio.Play(); } } } public static class PluginInfo { public const string PLUGIN_GUID = "JetpackWarning"; public const string PLUGIN_NAME = "JetpackWarning"; public const string PLUGIN_VERSION = "2.2.0"; } }
BepInEx/plugins/plugins/LateCompanyV1.0.17.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] [assembly: AssemblyCompany("LateCompany")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+394f6e913ae93b8bc416d40547f3b1a710f49a92")] [assembly: AssemblyProduct("LateCompany")] [assembly: AssemblyTitle("LateCompany")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LateCompany { public static class PluginInfo { public const string GUID = "twig.latecompany"; public const string PrintName = "Late Company"; public const string Version = "1.0.17"; } [BepInPlugin("twig.latecompany", "Late Company", "1.0.17")] internal class Plugin : BaseUnityPlugin { public static bool LobbyJoinable = true; public void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown Harmony val = new Harmony("twig.latecompany"); val.PatchAll(typeof(Plugin).Assembly); ((BaseUnityPlugin)this).Logger.Log((LogLevel)16, (object)"Late Company loaded!"); } public static void SetLobbyJoinable(bool joinable) { LobbyJoinable = joinable; GameNetworkManager.Instance.SetLobbyJoinable(joinable); QuickMenuManager val = Object.FindObjectOfType<QuickMenuManager>(); if (Object.op_Implicit((Object)(object)val)) { val.inviteFriendsTextAlpha.alpha = (joinable ? 1f : 0.2f); } } } } namespace LateCompany.Patches { [HarmonyPatch(typeof(GameNetworkManager), "LeaveLobbyAtGameStart")] [HarmonyWrapSafe] internal static class LeaveLobbyAtGameStart_Patch { [HarmonyPrefix] private static bool Prefix() { return false; } } [HarmonyPatch(typeof(GameNetworkManager), "ConnectionApproval")] [HarmonyWrapSafe] internal static class ConnectionApproval_Patch { [HarmonyPostfix] private static void Postfix(ref ConnectionApprovalRequest request, ref ConnectionApprovalResponse response) { if (request.ClientNetworkId != NetworkManager.Singleton.LocalClientId && Plugin.LobbyJoinable && response.Reason == "Game has already started!") { response.Reason = ""; response.Approved = true; } } } [HarmonyPatch(typeof(QuickMenuManager), "DisableInviteFriendsButton")] internal static class DisableInviteFriendsButton_Patch { [HarmonyPrefix] private static bool Prefix() { return false; } } [HarmonyPatch(typeof(QuickMenuManager), "InviteFriendsButton")] internal static class InviteFriendsButton_Patch { [HarmonyPrefix] private static bool Prefix() { if (Plugin.LobbyJoinable && !GameNetworkManager.Instance.disableSteam) { GameNetworkManager.Instance.InviteFriendsUI(); } return false; } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerConnectedClientRpc")] [HarmonyWrapSafe] internal static class OnPlayerConnectedClientRpc_Patch { internal static void UpdateControlledState() { for (int i = 0; i < StartOfRound.Instance.connectedPlayersAmount + 1; i++) { if ((i == 0 || !((NetworkBehaviour)StartOfRound.Instance.allPlayerScripts[i]).IsOwnedByServer) && !StartOfRound.Instance.allPlayerScripts[i].isPlayerDead) { StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled = true; } } } [HarmonyTranspiler] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(); bool flag = false; bool flag2 = false; bool flag3 = false; foreach (CodeInstruction instruction in instructions) { if (!flag3) { if (!flag && instruction.opcode == OpCodes.Call && instruction.operand != null && instruction.operand.ToString() == "System.Collections.IEnumerator setPlayerToSpawnPosition(UnityEngine.Transform, UnityEngine.Vector3)") { flag = true; } else { if (flag && instruction.opcode == OpCodes.Ldc_I4_0) { flag2 = true; continue; } if (flag2 && instruction.opcode == OpCodes.Ldloc_0) { flag2 = false; flag3 = true; list.Add(new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(OnPlayerConnectedClientRpc_Patch), "UpdateControlledState", new Type[0], (Type[])null))); } } } if (!flag2) { list.Add(instruction); } } if (!flag3) { Debug.LogError((object)"Failed to transpile StartOfRound::OnPlayerConnectedClientRpc"); } return list.AsEnumerable(); } [HarmonyPostfix] private static void Postfix() { if (StartOfRound.Instance.connectedPlayersAmount + 1 >= StartOfRound.Instance.allPlayerScripts.Length) { Plugin.SetLobbyJoinable(joinable: false); } } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerDC")] [HarmonyWrapSafe] internal static class OnPlayerDC_Patch { [HarmonyPostfix] private static void Postfix(int playerObjectNumber) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) if (StartOfRound.Instance.inShipPhase) { Plugin.SetLobbyJoinable(joinable: true); } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerObjectNumber]; val.activatingItem = false; val.bleedingHeavily = false; val.clampLooking = false; val.criticallyInjured = false; val.Crouch(false); val.disableInteract = false; val.DisableJetpackControlsLocally(); val.disableLookInput = false; val.disableMoveInput = false; val.DisablePlayerModel(((Component)val).gameObject, true, true); val.disableSyncInAnimation = false; val.externalForceAutoFade = Vector3.zero; val.freeRotationInInteractAnimation = false; val.hasBeenCriticallyInjured = false; val.health = 100; ((Behaviour)val.helmetLight).enabled = false; val.holdingWalkieTalkie = false; val.inAnimationWithEnemy = null; val.inShockingMinigame = false; val.inSpecialInteractAnimation = false; val.inVehicleAnimation = false; val.isClimbingLadder = false; val.isSinking = false; val.isUnderwater = false; Animator mapRadarDotAnimator = val.mapRadarDotAnimator; if (mapRadarDotAnimator != null) { mapRadarDotAnimator.SetBool("dead", false); } Animator playerBodyAnimator = val.playerBodyAnimator; if (playerBodyAnimator != null) { playerBodyAnimator.SetBool("Limp", false); } val.ResetZAndXRotation(); val.sinkingValue = 0f; val.speakingToWalkieTalkie = false; AudioSource statusEffectAudio = val.statusEffectAudio; if (statusEffectAudio != null) { statusEffectAudio.Stop(); } ((Collider)val.thisController).enabled = true; ((Component)val).transform.SetParent(StartOfRound.Instance.playersContainer); val.twoHanded = false; val.voiceMuffledByEnemy = false; } } [HarmonyPatch(typeof(StartOfRound), "SetShipReadyToLand")] internal static class SetShipReadyToLand_Patch { [HarmonyPostfix] private static void Postfix() { if (StartOfRound.Instance.connectedPlayersAmount + 1 < StartOfRound.Instance.allPlayerScripts.Length) { Plugin.SetLobbyJoinable(joinable: true); } } } [HarmonyPatch(typeof(StartOfRound), "StartGame")] internal static class StartGame_Patch { [HarmonyPrefix] private static void Prefix() { Plugin.SetLobbyJoinable(joinable: false); } } }
BepInEx/plugins/plugins/LCAmmoCheck.dll
Decompiled 2 months agousing System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LCAmmoCheck")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Mod that allows you to check ammo in shotgun")] [assembly: AssemblyFileVersion("1.1.1.0")] [assembly: AssemblyInformationalVersion("1.1.1+09faa498f4a0e28be67bf9ce9655783d408c92ee")] [assembly: AssemblyProduct("LCAmmoCheck")] [assembly: AssemblyTitle("LCAmmoCheck")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace System.Runtime.Versioning { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiresPreviewFeaturesAttribute : Attribute { public string? Message { get; } public string? Url { get; set; } public RequiresPreviewFeaturesAttribute() { } public RequiresPreviewFeaturesAttribute(string? message) { Message = message; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CallerArgumentExpressionAttribute : Attribute { public string ParameterName { get; } public CallerArgumentExpressionAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CollectionBuilderAttribute : Attribute { public Type BuilderType { get; } public string MethodName { get; } public CollectionBuilderAttribute(Type builderType, string methodName) { BuilderType = builderType; MethodName = methodName; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CompilerFeatureRequiredAttribute : Attribute { public const string RefStructs = "RefStructs"; public const string RequiredMembers = "RequiredMembers"; public string FeatureName { get; } public bool IsOptional { get; set; } public CompilerFeatureRequiredAttribute(string featureName) { FeatureName = featureName; } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute { public string[] Arguments { get; } public InterpolatedStringHandlerArgumentAttribute(string argument) { Arguments = new string[1] { argument }; } public InterpolatedStringHandlerArgumentAttribute(params string[] arguments) { Arguments = arguments; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerAttribute : Attribute { } [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal static class IsExternalInit { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ModuleInitializerAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal sealed class RequiresLocationAttribute : Attribute { } [AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SkipLocalsInitAttribute : Attribute { } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ExperimentalAttribute : Attribute { public string DiagnosticId { get; } public string? UrlFormat { get; set; } public ExperimentalAttribute(string diagnosticId) { DiagnosticId = diagnosticId; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SetsRequiredMembersAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class StringSyntaxAttribute : Attribute { public const string CompositeFormat = "CompositeFormat"; public const string DateOnlyFormat = "DateOnlyFormat"; public const string DateTimeFormat = "DateTimeFormat"; public const string EnumFormat = "EnumFormat"; public const string GuidFormat = "GuidFormat"; public const string Json = "Json"; public const string NumericFormat = "NumericFormat"; public const string Regex = "Regex"; public const string TimeOnlyFormat = "TimeOnlyFormat"; public const string TimeSpanFormat = "TimeSpanFormat"; public const string Uri = "Uri"; public const string Xml = "Xml"; public string Syntax { get; } public object?[] Arguments { get; } public StringSyntaxAttribute(string syntax) { Syntax = syntax; Arguments = new object[0]; } public StringSyntaxAttribute(string syntax, params object?[] arguments) { Syntax = syntax; Arguments = arguments; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class UnscopedRefAttribute : Attribute { } } namespace LCAmmoCheck { [BepInPlugin("me.axd1x8a.lcammocheck", "LCAmmoCheck", "1.1.1")] public class LCAmmoCheckPlugin : BaseUnityPlugin { private static Harmony? harmony; public static LCAmmoCheckPlugin? Instance { get; private set; } public static AnimationClip? ShotgunInspectClip { get; private set; } public static AudioClip? ShotgunInspectSFX { get; private set; } private static void LoadAssetBundle() { AssetBundle obj = AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("LCAmmoCheck.lcammocheck")); ShotgunInspectClip = obj.LoadAsset<AnimationClip>("Assets/AnimationClip/ShotgunInspect.anim"); ShotgunInspectSFX = obj.LoadAsset<AudioClip>("Assets/AudioClip/ShotgunInspect.ogg"); AudioClip? shotgunInspectSFX = ShotgunInspectSFX; if (shotgunInspectSFX != null) { shotgunInspectSFX.LoadAudioData(); } obj.Unload(false); } public void Awake() { Instance = this; LoadAssetBundle(); harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "me.axd1x8a.lcammocheck"); ((BaseUnityPlugin)this).Logger.Log((LogLevel)8, (object)"LCAmmoCheck loaded!"); } public static void OnDestroy() { Harmony? obj = harmony; if (obj != null) { obj.UnpatchSelf(); } Instance = null; harmony = null; Debug.Log((object)"LCAmmoCheck unloaded!"); } } internal static class GeneratedPluginInfo { public const string Identifier = "me.axd1x8a.lcammocheck"; public const string Name = "LCAmmoCheck"; public const string Version = "1.1.1"; } } namespace LCAmmoCheck.Patches { [HarmonyPatch(typeof(ShotgunItem))] internal sealed class ShotgunItemPatch { private static readonly Dictionary<int, AnimationClip> originalClips = new Dictionary<int, AnimationClip>(); private static AnimatorOverrideController OverrideController(Animator animator) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown RuntimeAnimatorController runtimeAnimatorController = animator.runtimeAnimatorController; AnimatorOverrideController val = (AnimatorOverrideController)(object)((runtimeAnimatorController is AnimatorOverrideController) ? runtimeAnimatorController : null); if (val != null) { return val; } return (AnimatorOverrideController)(object)(animator.runtimeAnimatorController = (RuntimeAnimatorController)new AnimatorOverrideController(animator.runtimeAnimatorController)); } private static IEnumerator CheckAmmoAnimation(ShotgunItem s) { AnimatorOverrideController overrideController = OverrideController(((GrabbableObject)s).playerHeldBy.playerBodyAnimator); int playerAnimatorId = ((Object)((GrabbableObject)s).playerHeldBy.playerBodyAnimator).GetInstanceID(); originalClips[playerAnimatorId] = overrideController["ShotgunReloadOneShell"]; overrideController["ShotgunReloadOneShell"] = LCAmmoCheckPlugin.ShotgunInspectClip; s.isReloading = true; ((Renderer)s.shotgunShellLeft).enabled = s.shellsLoaded > 0; ((Renderer)s.shotgunShellRight).enabled = s.shellsLoaded > 1; ((GrabbableObject)s).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun", true); yield return (object)new WaitForSeconds(0.3f); s.gunAudio.PlayOneShot(LCAmmoCheckPlugin.ShotgunInspectSFX); s.gunAnimator.SetBool("Reloading", true); yield return (object)new WaitForSeconds(0.95f); yield return (object)new WaitForSeconds(0.95f); yield return (object)new WaitForSeconds(0.15f); s.gunAnimator.SetBool("Reloading", false); yield return (object)new WaitForSeconds(0.25f); ((GrabbableObject)s).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun", false); yield return (object)new WaitForSeconds(0.25f); originalClips.Remove(playerAnimatorId, out AnimationClip value); overrideController["ShotgunReloadOneShell"] = value; s.isReloading = false; } private static void CleanUp(Animator animator) { RuntimeAnimatorController runtimeAnimatorController = animator.runtimeAnimatorController; AnimatorOverrideController val = (AnimatorOverrideController)(object)((runtimeAnimatorController is AnimatorOverrideController) ? runtimeAnimatorController : null); if (val != null && originalClips.Remove(((Object)animator).GetInstanceID(), out AnimationClip value)) { val["ShotgunReloadOneShell"] = value; } } [HarmonyPrefix] [HarmonyPatch("StopUsingGun")] public static bool StopUsingGunPrefix(ShotgunItem __instance) { CleanUp((((GrabbableObject)__instance).playerHeldBy ?? __instance.previousPlayerHeldBy).playerBodyAnimator); return true; } [HarmonyPrefix] [HarmonyPatch("StartReloadGun")] public static bool StartReloadGunPrefix(ShotgunItem __instance) { if (!__instance.ReloadedGun() || __instance.shellsLoaded >= 2) { if (__instance.gunCoroutine != null) { ((MonoBehaviour)__instance).StopCoroutine(__instance.gunCoroutine); } __instance.gunCoroutine = ((MonoBehaviour)__instance).StartCoroutine(CheckAmmoAnimation(__instance)); return false; } return true; } [HarmonyPrefix] [HarmonyPatch("ItemInteractLeftRight")] public static bool ItemInteractLeftRightPrefix(ShotgunItem __instance, bool right) { if (!right) { return true; } if ((Object)(object)((RaycastHit)(ref ((GrabbableObject)__instance).playerHeldBy.hit)).collider != (Object)null && ((Component)((RaycastHit)(ref ((GrabbableObject)__instance).playerHeldBy.hit)).collider).tag == "InteractTrigger") { return false; } return true; } [HarmonyPrefix] [HarmonyPatch("Start")] public static bool StartPrefix(ShotgunItem __instance) { ((GrabbableObject)__instance).itemProperties.toolTips[1] = "Reload / Check ammo : [E]"; return true; } [HarmonyTranspiler] [HarmonyPatch(typeof(ShotgunItem), "StartReloadGun")] public static IEnumerable<CodeInstruction> StartReloadGunTranspiler(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Call && ((MethodInfo)list[i].operand).Name == "ReloadedGun") { list[i - 1].opcode = OpCodes.Nop; list[i].opcode = OpCodes.Ldc_I4_1; list[i].operand = null; break; } } return list.AsEnumerable(); } [HarmonyTranspiler] [HarmonyPatch(typeof(ShotgunItem), "ItemInteractLeftRight")] public static IEnumerable<CodeInstruction> ItemInteractLeftRightTranspiler(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Ldfld && list[i].operand.ToString().Contains("shellsLoaded")) { list[i + 1].opcode = OpCodes.Ldc_I4_3; break; } } return list.AsEnumerable(); } } }
BepInEx/plugins/plugins/LCBetterSaves.dll
Decompiled 2 months agousing System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using HarmonyLib; using LCBetterSaves; using LCBetterSaves.Properties; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.Events; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LCBetterSaves")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Better save files for Lethal Company")] [assembly: AssemblyFileVersion("1.7.3.0")] [assembly: AssemblyInformationalVersion("1.7.3+a2dc06eb8878819ddec7c1fd8cd6bac050c25d3c")] [assembly: AssemblyProduct("LCBetterSaves")] [assembly: AssemblyTitle("LCBetterSaves")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.7.3.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public class NewFileUISlot_BetterSaves : MonoBehaviour { public Animator buttonAnimator; public Button button; public bool isSelected; public void Awake() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown buttonAnimator = ((Component)this).GetComponent<Animator>(); button = ((Component)this).GetComponent<Button>(); ((UnityEvent)button.onClick).AddListener(new UnityAction(SetFileToThis)); } public void SetFileToThis() { string currentSaveFileName = "LCSaveFile" + Plugin.newSaveFileNum; GameNetworkManager.Instance.currentSaveFileName = currentSaveFileName; GameNetworkManager.Instance.saveFileNum = Plugin.newSaveFileNum; SetButtonColorForAllFileSlots(); isSelected = true; SetButtonColor(); } public void SetButtonColorForAllFileSlots() { SaveFileUISlot_BetterSaves[] array = Object.FindObjectsOfType<SaveFileUISlot_BetterSaves>(); SaveFileUISlot_BetterSaves[] array2 = array; foreach (SaveFileUISlot_BetterSaves saveFileUISlot_BetterSaves in array2) { saveFileUISlot_BetterSaves.SetButtonColor(); saveFileUISlot_BetterSaves.deleteButton.SetActive(false); saveFileUISlot_BetterSaves.renameButton.SetActive(false); } } public void SetButtonColor() { buttonAnimator.SetBool("isPressed", isSelected); } } public class SaveFileUISlot_BetterSaves : MonoBehaviour { public Animator buttonAnimator; public Button button; public TextMeshProUGUI fileStatsText; public int fileNum; public string fileString; public TextMeshProUGUI fileNotCompatibleAlert; public GameObject deleteButton; public GameObject renameButton; public void Awake() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown buttonAnimator = ((Component)this).GetComponent<Animator>(); button = ((Component)this).GetComponent<Button>(); ((UnityEvent)button.onClick).AddListener(new UnityAction(SetFileToThis)); fileStatsText = ((Component)((Component)this).transform.GetChild(2)).GetComponent<TextMeshProUGUI>(); fileNotCompatibleAlert = ((Component)((Component)this).transform.GetChild(4)).GetComponent<TextMeshProUGUI>(); deleteButton = ((Component)((Component)this).transform.GetChild(3)).gameObject; } public void Start() { UpdateStats(); } private void OnEnable() { if (!Object.FindObjectOfType<MenuManager>().filesCompatible[fileNum]) { ((Behaviour)fileNotCompatibleAlert).enabled = true; } } public void UpdateStats() { try { if (ES3.FileExists(fileString)) { int num = ES3.Load<int>("GroupCredits", fileString, 30); int num2 = ES3.Load<int>("Stats_DaysSpent", fileString, 0); ((TMP_Text)fileStatsText).text = $"${num}\nDays: {num2}"; } else { ((TMP_Text)fileStatsText).text = ""; } } catch (Exception ex) { Debug.LogError((object)("Error updating stats: " + ex.Message)); } } public void SetButtonColor() { buttonAnimator.SetBool("isPressed", GameNetworkManager.Instance.currentSaveFileName == fileString); } public void SetFileToThis() { Plugin.fileToModify = fileNum; GameNetworkManager.Instance.currentSaveFileName = fileString; GameNetworkManager.Instance.saveFileNum = fileNum; SetButtonColorForAllFileSlots(); } public void SetButtonColorForAllFileSlots() { SaveFileUISlot_BetterSaves[] array = Object.FindObjectsOfType<SaveFileUISlot_BetterSaves>(); SaveFileUISlot_BetterSaves[] array2 = array; foreach (SaveFileUISlot_BetterSaves saveFileUISlot_BetterSaves in array2) { saveFileUISlot_BetterSaves.SetButtonColor(); saveFileUISlot_BetterSaves.deleteButton.SetActive((Object)(object)saveFileUISlot_BetterSaves == (Object)(object)this); saveFileUISlot_BetterSaves.renameButton.SetActive((Object)(object)saveFileUISlot_BetterSaves == (Object)(object)this); } NewFileUISlot_BetterSaves newFileUISlot_BetterSaves = Object.FindObjectOfType<NewFileUISlot_BetterSaves>(); newFileUISlot_BetterSaves.isSelected = false; newFileUISlot_BetterSaves.SetButtonColor(); } } public class RenameFileButton_BetterSaves : MonoBehaviour { public void RenameFile() { string text = $"LCSaveFile{Plugin.fileToModify}"; string text2 = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/ServerNameField/Text Area/Text").GetComponent<TMP_Text>().text; if (ES3.FileExists(text)) { ES3.Save<string>("Alias_BetterSaves", text2, text); Debug.Log((object)("Granted alias " + text2 + " to file " + text)); } Plugin.RefreshNameFields(); } } public class DeleteFileButton_BetterSaves : MonoBehaviour { public int fileToDelete; public AudioClip deleteFileSFX; public TextMeshProUGUI deleteFileText; public void UpdateFileToDelete() { fileToDelete = Plugin.fileToModify; if (ES3.Load<string>("Alias_BetterSaves", $"LCSaveFile{fileToDelete}", "") != "") { ((TMP_Text)deleteFileText).text = "Do you want to delete file (" + ES3.Load<string>("Alias_BetterSaves", $"LCSaveFile{fileToDelete}", "") + ")?"; } else { ((TMP_Text)deleteFileText).text = $"Do you want to delete File {fileToDelete + 1}?"; } } public void DeleteFile() { string text = $"LCSaveFile{fileToDelete}"; if (ES3.FileExists(text)) { ES3.DeleteFile(text); Object.FindObjectOfType<MenuManager>().MenuAudio.PlayOneShot(deleteFileSFX); } SaveFileUISlot_BetterSaves[] array = Object.FindObjectsOfType<SaveFileUISlot_BetterSaves>(true); SaveFileUISlot_BetterSaves[] array2 = array; foreach (SaveFileUISlot_BetterSaves saveFileUISlot_BetterSaves in array2) { Debug.Log((object)$"Deleted {fileToDelete}"); if (saveFileUISlot_BetterSaves.fileNum == fileToDelete) { ((Behaviour)saveFileUISlot_BetterSaves.fileNotCompatibleAlert).enabled = false; Object.FindObjectOfType<MenuManager>().filesCompatible[fileToDelete] = true; if (ES3.FileExists($"LGU_{fileToDelete}.json")) { Debug.Log((object)("Deleting LGU file located at " + text)); ES3.DeleteFile($"LGU_{fileToDelete}.json"); } } } Plugin.InitializeBetterSaves(); } } namespace LCBetterSaves { [BepInPlugin("LCBetterSaves", "LCBetterSaves", "1.7.3")] public class Plugin : BaseUnityPlugin { private Harmony _harmony = new Harmony("BetterSaves"); public static int fileToModify = -1; public static int newSaveFileNum; public static Sprite renameSprite; public static MenuManager menuManager; public static AudioClip deleteFileSFX; public static TextMeshProUGUI deleteFileText; public static float buttonBaseY; public void Awake() { _harmony.PatchAll(typeof(Plugin)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin LCBetterSaves is loaded!"); } [HarmonyPatch(typeof(MenuManager), "Start")] public static void Postfix(MenuManager __instance) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) menuManager = __instance; if ((Object)(object)renameSprite == (Object)null) { AssetBundle val = AssetBundle.LoadFromMemory(Resources.lcbettersaves); Texture2D val2 = val.LoadAsset<Texture2D>("Assets/RenameSprite.png"); renameSprite = Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f)); } InitializeBetterSaves(); } public static void InitializeBetterSaves() { try { DestroyBetterSavesButtons(); DestroyOriginalSaveButtons(); UpdateTopText(); CreateModdedDeleteFileButton(); CreateBetterSaveButtons(); UpdateFilesPanelRect(CountSaveFiles() + 1); GameObject val = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File1"); val.SetActive(false); } catch (Exception ex) { Debug.LogError((object)("An error occurred during initialization: " + ex.Message)); } } public static void DestroyBetterSavesButtons() { try { SaveFileUISlot_BetterSaves[] array = Object.FindObjectsOfType<SaveFileUISlot_BetterSaves>(); foreach (SaveFileUISlot_BetterSaves saveFileUISlot_BetterSaves in array) { Object.Destroy((Object)(object)((Component)saveFileUISlot_BetterSaves).gameObject); } NewFileUISlot_BetterSaves[] array2 = Object.FindObjectsOfType<NewFileUISlot_BetterSaves>(); foreach (NewFileUISlot_BetterSaves newFileUISlot_BetterSaves in array2) { Object.Destroy((Object)(object)((Component)newFileUISlot_BetterSaves).gameObject); } } catch (Exception ex) { Debug.LogError((object)("Error occurred while destroying better saves buttons: " + ex.Message)); } } public static void UpdateTopText() { GameObject val = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/EnterAName"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Panel label not found."); } else { ((TMP_Text)val.GetComponent<TextMeshProUGUI>()).text = "BetterSaves"; } } public static void CreateModdedDeleteFileButton() { //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown GameObject val = GameObject.Find("Canvas/MenuContainer/DeleteFileConfirmation/Panel/Delete"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Delete file game object not found."); return; } if ((Object)(object)val.GetComponent<DeleteFileButton_BetterSaves>() != (Object)null) { Debug.LogWarning((object)"DeleteFileButton_BetterSaves component already exists on deleteFileGO"); return; } DeleteFileButton component = val.GetComponent<DeleteFileButton>(); if ((Object)(object)component == (Object)null) { Debug.LogError((object)"DeleteFileButton component not found on deleteFileGO"); return; } if ((Object)(object)deleteFileSFX == (Object)null) { deleteFileSFX = component.deleteFileSFX; } if ((Object)(object)deleteFileText == (Object)null) { deleteFileText = component.deleteFileText; } Object.Destroy((Object)(object)component); if ((Object)(object)val.GetComponent<DeleteFileButton_BetterSaves>() == (Object)null) { DeleteFileButton_BetterSaves deleteFileButton_BetterSaves = val.AddComponent<DeleteFileButton_BetterSaves>(); deleteFileButton_BetterSaves.deleteFileSFX = deleteFileSFX; deleteFileButton_BetterSaves.deleteFileText = deleteFileText; Button component2 = val.GetComponent<Button>(); if ((Object)(object)component2 != (Object)null) { ((UnityEventBase)component2.onClick).RemoveAllListeners(); ((UnityEvent)component2.onClick).AddListener(new UnityAction(deleteFileButton_BetterSaves.DeleteFile)); } else { Debug.LogError((object)"Button component not found on deleteFileGO"); } } else { Debug.LogWarning((object)"DeleteFileButton_BetterSaves component already exists on deleteFileGO"); } } public static void CreateBetterSaveButtons() { try { GameObject val = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File1"); val.SetActive(true); int numSaves = CountSaveFiles(); Debug.Log((object)("Positioning based on " + numSaves + " saves.")); NewFileUISlot_BetterSaves newFileUISlot_BetterSaves = CreateNewFileNode(numSaves); List<string> list = NormalizeFileNames(); newSaveFileNum = list.Count + 1; menuManager.filesCompatible = new bool[16]; for (int i = 0; i < menuManager.filesCompatible.Length; i++) { menuManager.filesCompatible[i] = true; } for (int j = 0; j < list.Count; j++) { CreateModdedSaveNode(int.Parse(list[j].Replace("LCSaveFile", "")), ((Component)newFileUISlot_BetterSaves).gameObject); } val.SetActive(false); } catch (Exception ex) { Debug.LogError((object)("Error occurred while refreshing save buttons: " + ex.Message)); } } public static NewFileUISlot_BetterSaves CreateNewFileNode(int numSaves) { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File1"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Original GameObject not found."); return null; } Transform parent = val.transform.parent; SaveFileUISlot component = val.GetComponent<SaveFileUISlot>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } GameObject val2 = Object.Instantiate<GameObject>(val, parent); ((Object)val2).name = "NewFile"; TMP_Text component2 = ((Component)val2.transform.GetChild(1)).GetComponent<TMP_Text>(); if ((Object)(object)component2 != (Object)null) { component2.text = "New File"; NewFileUISlot_BetterSaves newFileUISlot_BetterSaves = val2.AddComponent<NewFileUISlot_BetterSaves>(); if ((Object)(object)newFileUISlot_BetterSaves == (Object)null) { Debug.LogError((object)"Failed to add NewFileUISlot_BetterSaves component."); return null; } Transform child = val2.transform.GetChild(3); if ((Object)(object)child != (Object)null) { Object.Destroy((Object)(object)((Component)child).gameObject); try { RectTransform component3 = val2.GetComponent<RectTransform>(); if (!((Object)(object)component3 != (Object)null)) { Debug.LogError((object)"RectTransform component not found."); return null; } float x = component3.anchoredPosition.x; if (buttonBaseY == 0f) { buttonBaseY = component3.anchoredPosition.y - component3.sizeDelta.y * 1.75f; } float num = buttonBaseY + component3.sizeDelta.y * (float)(numSaves + 1) / 2f; component3.anchoredPosition = new Vector2(x, num); } catch (Exception ex) { Debug.LogError((object)("Error setting anchored position: " + ex.Message)); return null; } return newFileUISlot_BetterSaves; } Debug.LogError((object)"Delete button not found."); return null; } Debug.LogError((object)"Text component not found."); return null; } private static int CountSaveFiles() { int num = 0; string[] files = ES3.GetFiles(); foreach (string text in files) { if (ES3.FileExists(text) && Regex.IsMatch(text, "^LCSaveFile\\d+$")) { num++; } } return num; } public static void DestroyOriginalSaveButtons() { Object.Destroy((Object)(object)GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File2")); Object.Destroy((Object)(object)GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File3")); } public static List<string> NormalizeFileNames() { List<string> list = new List<string>(); List<string> list2 = new List<string>(); string text = "PH"; string format = "LGUTempFile{0}"; string format2 = "LGU_{0}.json"; string[] files = ES3.GetFiles(); foreach (string text2 in files) { if (ES3.FileExists(text2) && Regex.IsMatch(text2, "^LCSaveFile\\d+$")) { Debug.Log((object)("Found file: " + text2)); list.Add(text2); string text3 = string.Format(format2, text2.Substring("LCSaveFile".Length)); if (ES3.FileExists(text3)) { Debug.Log((object)("Found LGU file: " + text3)); list2.Add(text3); } else { list2.Add(text); } } } list.Sort(delegate(string a, string b) { int num3 = int.Parse(a.Substring("LCSaveFile".Length)); int value = int.Parse(b.Substring("LCSaveFile".Length)); return num3.CompareTo(value); }); int num = 1; foreach (string item in list) { string text4 = "TempFile" + num; ES3.RenameFile(item, text4); Debug.Log((object)("Renamed " + item + " to " + text4)); num++; } num = 1; foreach (string item2 in list2) { if (item2 == text) { num++; continue; } string text5 = string.Format(format, num.ToString()); ES3.RenameFile(item2, text5); Debug.Log((object)("Renamed " + item2 + " to " + text5)); num++; } int num2 = 1; List<string> list3 = new List<string>(); foreach (string item3 in list) { string text6 = "TempFile" + num2; string text7 = "LCSaveFile" + num2; if (ES3.FileExists(text6)) { ES3.RenameFile(text6, text7); list3.Add(text7); Debug.Log((object)("Renamed " + text6 + " to " + text7)); } else { Debug.Log((object)("Temporary file " + text6 + " not found. It might have been moved or deleted.")); } num2++; } num2 = 1; foreach (string item4 in list2) { string text8 = string.Format(format, num2.ToString()); string text9 = string.Format(format2, num2.ToString()); if (item4 == text) { num2++; continue; } if (ES3.FileExists(text8)) { ES3.RenameFile(text8, text9); list3.Add(text9); Debug.Log((object)("Renamed " + text8 + " to " + text9)); } else { Debug.Log((object)("Temporary file " + text8 + " not found. It might have been moved or deleted.")); } num2++; } return list3; } public static void CreateModdedSaveNode(int fileNum, GameObject newFileButton) { //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Expected O, but got Unknown //IL_0141: 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) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File1"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Original GameObject not found."); return; } Transform parent = val.transform.parent; GameObject val2 = Object.Instantiate<GameObject>(val, parent); ((Object)val2).name = "File" + fileNum + "_BetterSaves"; string text = ES3.Load<string>("Alias_BetterSaves", "LCSaveFile" + fileNum, ""); if (text == "") { ((Component)val2.transform.GetChild(1)).GetComponent<TMP_Text>().text = "File " + fileNum; } else { ((Component)val2.transform.GetChild(1)).GetComponent<TMP_Text>().text = text; } val2.AddComponent<SaveFileUISlot_BetterSaves>(); SaveFileUISlot_BetterSaves component = val2.GetComponent<SaveFileUISlot_BetterSaves>(); if ((Object)(object)component != (Object)null) { component.fileNum = fileNum; component.fileString = "LCSaveFile" + fileNum; RectTransform component2 = val2.GetComponent<RectTransform>(); if ((Object)(object)component2 != (Object)null) { float x = component2.anchoredPosition.x; float y = newFileButton.GetComponent<RectTransform>().anchoredPosition.y; float num = y - component2.sizeDelta.y * (float)fileNum; component2.anchoredPosition = new Vector2(x, num); } GameObject gameObject = ((Component)val2.transform.GetChild(3)).gameObject; DeleteFileButton_BetterSaves component3 = GameObject.Find("Canvas/MenuContainer/DeleteFileConfirmation/Panel/Delete").GetComponent<DeleteFileButton_BetterSaves>(); ((UnityEvent)gameObject.gameObject.GetComponent<Button>().onClick).AddListener(new UnityAction(component3.UpdateFileToDelete)); gameObject.SetActive(false); component.renameButton = CreateRenameFileButton(val2); } else { Debug.LogError((object)"SaveFileUISlot_BetterSaves component not found on the cloned GameObject."); Object.Destroy((Object)(object)val2); } } public static GameObject CreateRenameFileButton(GameObject fileNode) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) try { GameObject gameObject = ((Component)fileNode.transform.GetChild(3)).gameObject; GameObject val = Object.Instantiate<GameObject>(gameObject, fileNode.transform); ((Object)val).name = "RenameButton"; val.GetComponent<Image>().sprite = renameSprite; Button component = val.GetComponent<Button>(); component.onClick = new ButtonClickedEvent(); val.AddComponent<RenameFileButton_BetterSaves>(); RenameFileButton_BetterSaves component2 = val.GetComponent<RenameFileButton_BetterSaves>(); if ((Object)(object)component2 != (Object)null) { ((UnityEvent)component.onClick).AddListener(new UnityAction(component2.RenameFile)); } else { Debug.LogError((object)"RenameFileButton_BetterSaves component not found on renameButton"); } RectTransform component3 = val.GetComponent<RectTransform>(); if ((Object)(object)component3 != (Object)null) { float num = ((Transform)component3).localPosition.x + 20f; float y = ((Transform)component3).localPosition.y; ((Transform)component3).localPosition = Vector2.op_Implicit(new Vector2(num, y)); } val.SetActive(false); return val; } catch (Exception ex) { Debug.LogError((object)("Error occurred while creating rename file button: " + ex.Message)); return null; } } public static void UpdateFilesPanelRect(int numSaves) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) try { GameObject obj = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel"); RectTransform val = ((obj != null) ? obj.GetComponent<RectTransform>() : null); if ((Object)(object)val == (Object)null) { throw new Exception("Failed to find FilesPanel RectTransform."); } Vector2 sizeDelta = val.sizeDelta; GameObject obj2 = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/File1"); RectTransform val2 = ((obj2 != null) ? obj2.GetComponent<RectTransform>() : null); if ((Object)(object)val2 == (Object)null) { throw new Exception("Failed to find File1 RectTransform."); } float y = val2.sizeDelta.y; sizeDelta.y = y * (float)(numSaves + 3); val.sizeDelta = sizeDelta; GameObject val3 = GameObject.Find("Canvas/MenuContainer/LobbyHostSettings/FilesPanel/ChallengeMoonButton"); RectTransform component = val3.GetComponent<RectTransform>(); if ((Object)(object)component != (Object)null) { component.anchorMin = new Vector2(0.5f, 0.05f); component.anchorMax = new Vector2(0.5f, 0.05f); component.pivot = new Vector2(0.5f, 0.05f); component.anchoredPosition = new Vector2(0f, 0f); } } catch (Exception ex) { Debug.LogError((object)("Error occurred while updating files panel rect: " + ex.Message)); } } public static void RefreshNameFields() { SaveFileUISlot_BetterSaves[] array = Object.FindObjectsOfType<SaveFileUISlot_BetterSaves>(); SaveFileUISlot_BetterSaves[] array2 = array; foreach (SaveFileUISlot_BetterSaves saveFileUISlot_BetterSaves in array2) { string text = ES3.Load<string>("Alias_BetterSaves", saveFileUISlot_BetterSaves.fileString, ""); if (text == "") { ((Component)((Component)saveFileUISlot_BetterSaves).transform.GetChild(1)).GetComponent<TMP_Text>().text = "File " + (saveFileUISlot_BetterSaves.fileNum + 1); } else { ((Component)((Component)saveFileUISlot_BetterSaves).transform.GetChild(1)).GetComponent<TMP_Text>().text = text; } } } } public static class PluginInfo { public const string PLUGIN_GUID = "LCBetterSaves"; public const string PLUGIN_NAME = "LCBetterSaves"; public const string PLUGIN_VERSION = "1.7.3"; } } namespace LCBetterSaves.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] public class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] public static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("LCBetterSaves.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] public static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } public static byte[] lcbettersaves { get { object @object = ResourceManager.GetObject("lcbettersaves", resourceCulture); return (byte[])@object; } } internal Resources() { } } }
BepInEx/plugins/plugins/MoreSuits/MoreSuits.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("MoreSuits")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A mod that adds more suit options to Lethal Company")] [assembly: AssemblyFileVersion("1.4.5.0")] [assembly: AssemblyInformationalVersion("1.4.5")] [assembly: AssemblyProduct("MoreSuits")] [assembly: AssemblyTitle("MoreSuits")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.5.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MoreSuits { [BepInPlugin("x753.More_Suits", "More Suits", "1.4.5")] public class MoreSuitsMod : BaseUnityPlugin { [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("Start")] [HarmonyPrefix] private static void StartPatch(ref StartOfRound __instance) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_070a: Unknown result type (might be due to invalid IL or missing references) //IL_070f: Unknown result type (might be due to invalid IL or missing references) //IL_0715: Unknown result type (might be due to invalid IL or missing references) //IL_071a: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_047e: Expected O, but got Unknown //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Expected O, but got Unknown //IL_0626: 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_020b: Expected O, but got Unknown try { if (SuitsAdded) { return; } int count = __instance.unlockablesList.unlockables.Count; UnlockableItem val = new UnlockableItem(); int num = 0; for (int i = 0; i < __instance.unlockablesList.unlockables.Count; i++) { UnlockableItem val2 = __instance.unlockablesList.unlockables[i]; if (!((Object)(object)val2.suitMaterial != (Object)null) || !val2.alreadyUnlocked) { continue; } val = val2; List<string> list = Directory.GetDirectories(Paths.PluginPath, "moresuits", SearchOption.AllDirectories).ToList(); List<string> list2 = new List<string>(); List<string> list3 = new List<string>(); List<string> list4 = DisabledSuits.ToLower().Replace(".png", "").Split(',') .ToList(); List<string> list5 = new List<string>(); if (!LoadAllSuits) { foreach (string item2 in list) { if (File.Exists(Path.Combine(item2, "!less-suits.txt"))) { string[] collection = new string[9] { "glow", "kirby", "knuckles", "luigi", "mario", "minion", "skeleton", "slayer", "smile" }; list5.AddRange(collection); break; } } } foreach (string item3 in list) { if (item3 != "") { string[] files = Directory.GetFiles(item3, "*.png"); string[] files2 = Directory.GetFiles(item3, "*.matbundle"); list2.AddRange(files); list3.AddRange(files2); } } list3.Sort(); list2.Sort(); try { foreach (string item4 in list3) { Object[] array = AssetBundle.LoadFromFile(item4).LoadAllAssets(); foreach (Object val3 in array) { if (val3 is Material) { Material item = (Material)val3; customMaterials.Add(item); } } } } catch (Exception ex) { Debug.Log((object)("Something went wrong with More Suits! Could not load materials from asset bundle(s). Error: " + ex)); } foreach (string item5 in list2) { if (list4.Contains(Path.GetFileNameWithoutExtension(item5).ToLower())) { continue; } string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); if (list5.Contains(Path.GetFileNameWithoutExtension(item5).ToLower()) && item5.Contains(directoryName)) { continue; } UnlockableItem val4; Material val5; if (Path.GetFileNameWithoutExtension(item5).ToLower() == "default") { val4 = val; val5 = val4.suitMaterial; } else { val4 = JsonUtility.FromJson<UnlockableItem>(JsonUtility.ToJson((object)val)); val5 = Object.Instantiate<Material>(val4.suitMaterial); } byte[] array2 = File.ReadAllBytes(item5); Texture2D val6 = new Texture2D(2, 2); ImageConversion.LoadImage(val6, array2); val6.Apply(true, true); val5.mainTexture = (Texture)(object)val6; val4.unlockableName = Path.GetFileNameWithoutExtension(item5); try { string path = Path.Combine(Path.GetDirectoryName(item5), "advanced", val4.unlockableName + ".json"); string text = Path.Combine(Path.GetDirectoryName(Paths.ConfigPath), "config\\MoreSuitsConfig", val4.unlockableName + ".json"); if (File.Exists(text)) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Utilizing [ " + text + " ] for suit - " + val4.unlockableName + "!")); path = text; } if (File.Exists(path)) { string[] array3 = File.ReadAllLines(path); for (int j = 0; j < array3.Length; j++) { string[] array4 = array3[j].Trim().Split(':'); if (array4.Length != 2) { continue; } string text2 = array4[0].Trim('"', ' ', ','); string text3 = array4[1].Trim('"', ' ', ','); if (text3.Contains(".png")) { byte[] array5 = File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(item5), "advanced", text3)); Texture2D val7 = new Texture2D(2, 2); ImageConversion.LoadImage(val7, array5); val7.Apply(true, true); val5.SetTexture(text2, (Texture)(object)val7); continue; } if (text2 == "PRICE" && int.TryParse(text3, out var result)) { try { if (!UnlockAll) { val4 = AddToRotatingShop(val4, result, __instance.unlockablesList.unlockables.Count); } } catch (Exception ex2) { Debug.Log((object)("Something went wrong with More Suits! Could not add a suit to the rotating shop. Error: " + ex2)); } continue; } switch (text3) { case "KEYWORD": val5.EnableKeyword(text2); continue; case "DISABLEKEYWORD": val5.DisableKeyword(text2); continue; case "SHADERPASS": val5.SetShaderPassEnabled(text2, true); continue; case "DISABLESHADERPASS": val5.SetShaderPassEnabled(text2, false); continue; } float result2; Vector4 vector; if (text2 == "SHADER") { Shader shader = Shader.Find(text3); val5.shader = shader; } else if (text2 == "MATERIAL") { foreach (Material customMaterial in customMaterials) { if (((Object)customMaterial).name == text3) { val5 = Object.Instantiate<Material>(customMaterial); val5.mainTexture = (Texture)(object)val6; break; } } } else if (float.TryParse(text3, out result2)) { val5.SetFloat(text2, result2); } else if (TryParseVector4(text3, out vector)) { val5.SetVector(text2, vector); } } } } catch (Exception ex3) { Debug.Log((object)("Something went wrong with More Suits! Error: " + ex3)); } val4.suitMaterial = val5; if (val4.unlockableName.ToLower() != "default") { if (num == MaxSuits) { Debug.Log((object)"Attempted to add a suit, but you've already reached the max number of suits! Modify the config if you want more."); continue; } __instance.unlockablesList.unlockables.Add(val4); num++; } } SuitsAdded = true; break; } UnlockableItem val8 = JsonUtility.FromJson<UnlockableItem>(JsonUtility.ToJson((object)val)); val8.alreadyUnlocked = false; val8.hasBeenMoved = false; val8.placedPosition = Vector3.zero; val8.placedRotation = Vector3.zero; val8.unlockableType = 753; while (__instance.unlockablesList.unlockables.Count < count + MaxSuits) { __instance.unlockablesList.unlockables.Add(val8); } } catch (Exception ex4) { Debug.Log((object)("Something went wrong with More Suits! Error: " + ex4)); } } [HarmonyPatch("PositionSuitsOnRack")] [HarmonyPrefix] private static bool PositionSuitsOnRackPatch(ref StartOfRound __instance) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) List<UnlockableSuit> source = Object.FindObjectsOfType<UnlockableSuit>().ToList(); source = source.OrderBy((UnlockableSuit suit) => suit.syncedSuitID.Value).ToList(); int num = 0; foreach (UnlockableSuit item in source) { AutoParentToShip component = ((Component)item).gameObject.GetComponent<AutoParentToShip>(); component.overrideOffset = true; float num2 = 0.18f; if (MakeSuitsFitOnRack && source.Count > 13) { num2 /= (float)Math.Min(source.Count, 20) / 12f; } component.positionOffset = new Vector3(-2.45f, 2.75f, -8.41f) + __instance.rightmostSuitPosition.forward * num2 * (float)num; component.rotationOffset = new Vector3(0f, 90f, 0f); num++; } return false; } } private const string modGUID = "x753.More_Suits"; private const string modName = "More Suits"; private const string modVersion = "1.4.5"; private readonly Harmony harmony = new Harmony("x753.More_Suits"); private static MoreSuitsMod Instance; public static bool SuitsAdded = false; public static string DisabledSuits; public static bool LoadAllSuits; public static bool MakeSuitsFitOnRack; public static bool UnlockAll; public static int MaxSuits; public static List<Material> customMaterials = new List<Material>(); private static TerminalNode cancelPurchase; private static TerminalKeyword buyKeyword; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } DisabledSuits = ((BaseUnityPlugin)this).Config.Bind<string>("General", "Disabled Suit List", "UglySuit751.png,UglySuit752.png,UglySuit753.png", "Comma-separated list of suits that shouldn't be loaded").Value; LoadAllSuits = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Ignore !less-suits.txt", false, "If true, ignores the !less-suits.txt file and will attempt to load every suit, except those in the disabled list. This should be true if you're not worried about having too many suits.").Value; MakeSuitsFitOnRack = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Make Suits Fit on Rack", true, "If true, squishes the suits together so more can fit on the rack.").Value; UnlockAll = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Unlock All Suits", false, "If true, unlocks all custom suits that would normally be sold in the shop.").Value; MaxSuits = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Max Suits", 100, "The maximum number of suits to load. If you have more, some will be ignored.").Value; harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin More Suits is loaded!"); } private static UnlockableItem AddToRotatingShop(UnlockableItem newSuit, int price, int unlockableID) { //IL_0065: 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) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Expected O, but got Unknown //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Expected O, but got Unknown Terminal val = Object.FindObjectOfType<Terminal>(); for (int i = 0; i < val.terminalNodes.allKeywords.Length; i++) { if (((Object)val.terminalNodes.allKeywords[i]).name == "Buy") { buyKeyword = val.terminalNodes.allKeywords[i]; break; } } newSuit.alreadyUnlocked = false; newSuit.hasBeenMoved = false; newSuit.placedPosition = Vector3.zero; newSuit.placedRotation = Vector3.zero; newSuit.shopSelectionNode = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)newSuit.shopSelectionNode).name = newSuit.unlockableName + "SuitBuy1"; newSuit.shopSelectionNode.creatureName = newSuit.unlockableName + " suit"; newSuit.shopSelectionNode.displayText = "You have requested to order " + newSuit.unlockableName + " suits.\nTotal cost of item: [totalCost].\n\nPlease CONFIRM or DENY.\n\n"; newSuit.shopSelectionNode.clearPreviousText = true; newSuit.shopSelectionNode.shipUnlockableID = unlockableID; newSuit.shopSelectionNode.itemCost = price; newSuit.shopSelectionNode.overrideOptions = true; CompatibleNoun val2 = new CompatibleNoun(); val2.noun = ScriptableObject.CreateInstance<TerminalKeyword>(); val2.noun.word = "confirm"; val2.noun.isVerb = true; val2.result = ScriptableObject.CreateInstance<TerminalNode>(); ((Object)val2.result).name = newSuit.unlockableName + "SuitBuyConfirm"; val2.result.creatureName = ""; val2.result.displayText = "Ordered " + newSuit.unlockableName + " suits! Your new balance is [playerCredits].\n\n"; val2.result.clearPreviousText = true; val2.result.shipUnlockableID = unlockableID; val2.result.buyUnlockable = true; val2.result.itemCost = price; val2.result.terminalEvent = ""; CompatibleNoun val3 = new CompatibleNoun(); val3.noun = ScriptableObject.CreateInstance<TerminalKeyword>(); val3.noun.word = "deny"; val3.noun.isVerb = true; if ((Object)(object)cancelPurchase == (Object)null) { cancelPurchase = ScriptableObject.CreateInstance<TerminalNode>(); } val3.result = cancelPurchase; ((Object)val3.result).name = "MoreSuitsCancelPurchase"; val3.result.displayText = "Cancelled order.\n"; newSuit.shopSelectionNode.terminalOptions = (CompatibleNoun[])(object)new CompatibleNoun[2] { val2, val3 }; TerminalKeyword val4 = ScriptableObject.CreateInstance<TerminalKeyword>(); ((Object)val4).name = newSuit.unlockableName + "Suit"; val4.word = newSuit.unlockableName.ToLower() + " suit"; val4.defaultVerb = buyKeyword; CompatibleNoun val5 = new CompatibleNoun(); val5.noun = val4; val5.result = newSuit.shopSelectionNode; List<CompatibleNoun> list = buyKeyword.compatibleNouns.ToList(); list.Add(val5); buyKeyword.compatibleNouns = list.ToArray(); List<TerminalKeyword> list2 = val.terminalNodes.allKeywords.ToList(); list2.Add(val4); list2.Add(val2.noun); list2.Add(val3.noun); val.terminalNodes.allKeywords = list2.ToArray(); return newSuit; } public static bool TryParseVector4(string input, out Vector4 vector) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) vector = Vector4.zero; string[] array = input.Split(','); if (array.Length == 4 && float.TryParse(array[0], out var result) && float.TryParse(array[1], out var result2) && float.TryParse(array[2], out var result3) && float.TryParse(array[3], out var result4)) { vector = new Vector4(result, result2, result3, result4); return true; } return false; } } }
BepInEx/plugins/plugins/NameplateTweaks.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("NameplateTweaks")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Configurable client-side mod for player username billboards. Speaking indicators, better visibility, etc.")] [assembly: AssemblyFileVersion("1.0.6.0")] [assembly: AssemblyInformationalVersion("1.0.6+c97f76d05208be5c08fc6b88bca796c1fe5bcf02")] [assembly: AssemblyProduct("NameplateTweaks")] [assembly: AssemblyTitle("NameplateTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.6.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace NameplateTweaks { [BepInPlugin("taffyko.NameplateTweaks", "NameplateTweaks", "1.0.6")] public class Plugin : BaseUnityPlugin { public const string modGUID = "taffyko.NameplateTweaks"; public const string modName = "NameplateTweaks"; public const string modVersion = "1.0.6"; public static ConfigEntry<bool> ConfigEnableSpeakingIndicator; public static ConfigEntry<bool> ConfigVariableSpeakingIndicatorOpacity; public static ConfigEntry<bool> ConfigSpeakingIndicatorAlwaysVisible; public static ConfigEntry<bool> ConfigHideNameplates; public static ConfigEntry<float> ConfigNameplateScale; public static ConfigEntry<float> ConfigNameplateVisibilityDistance; public static ConfigEntry<bool> ConfigNameplateScaleWithDistance; public static ManualLogSource log; private readonly Harmony harmony = new Harmony("taffyko.NameplateTweaks"); public static Vector3? OriginalNameplateScale = new Vector3(-0.0025f, 0.0025f, 0.0025f); private void Awake() { log = Logger.CreateLogSource("NameplateTweaks"); log.LogInfo((object)"Loading taffyko.NameplateTweaks"); ConfigEnableSpeakingIndicator = ((BaseUnityPlugin)this).Config.Bind<bool>("Speaking Indicator", "EnableSpeakingIndicator", true, "Enable a voice-activity speaking indicator above player nameplates"); ConfigVariableSpeakingIndicatorOpacity = ((BaseUnityPlugin)this).Config.Bind<bool>("Speaking Indicator", "VariableSpeakingIndicatorOpacity", true, "Speaking indicator opacity changes depending on volume"); ConfigSpeakingIndicatorAlwaysVisible = ((BaseUnityPlugin)this).Config.Bind<bool>("Speaking Indicator", "SpeakingIndicatorAlwaysVisible", true, "Display speaking indicators even when the nameplate is hidden"); ConfigHideNameplates = ((BaseUnityPlugin)this).Config.Bind<bool>("Nameplate", "HideNameplates", false, "Do not show player nameplates at all"); ConfigNameplateScale = ((BaseUnityPlugin)this).Config.Bind<float>("Nameplate", "NameplateScale", 1.5f, "Nameplate size multiplier (1.0 is the vanilla size)"); ConfigNameplateVisibilityDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Nameplate", "NameplateVisibilityDistance", 20f, "Distance from the camera within which nameplates are visible (0.0 reverts to vanilla behavior). The length of the ship is ~20 units, for reference"); ConfigNameplateScaleWithDistance = ((BaseUnityPlugin)this).Config.Bind<bool>("Nameplate", "NameplateScaleWithDistance", false, "Scale nameplates so that they retain their apparent size as they get further away"); harmony.PatchAll(Assembly.GetExecutingAssembly()); } private void OnDestroy() { } } public class SpeakingIndicator : MonoBehaviour { public PlayerControllerB player; public Canvas canvas; public GameObject canvasItem; public CanvasGroup canvasItemAlpha; public static Dictionary<PlayerControllerB, SpeakingIndicator> speakingIndicators = new Dictionary<PlayerControllerB, SpeakingIndicator>(); private static Texture2D speakingIconTexture = null; public static Texture2D GetSpeakingIconTexture() { if ((Object)(object)speakingIconTexture != (Object)null) { return speakingIconTexture; } return GameObject.Find("PTTIcon").GetComponent<Image>().sprite.texture; } public static SpeakingIndicator GetSpeakingIndicator(PlayerControllerB player) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) speakingIndicators.TryGetValue(player, out var value); if ((Object)(object)value == (Object)null) { GameObject val = new GameObject("SpeakingIndicator"); val.SetActive(false); value = val.AddComponent<SpeakingIndicator>(); value.player = player; ((Component)value).transform.SetParent(((Component)player).transform, false); speakingIndicators.Add(player, value); val.SetActive(true); } return value; } public void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) canvasItem = new GameObject("SpeakingIndicatorCanvasItem"); canvasItem.transform.SetParent(player.usernameBillboard, false); canvasItem.AddComponent<CanvasRenderer>(); canvasItemAlpha = canvasItem.AddComponent<CanvasGroup>(); canvasItemAlpha.alpha = 0f; canvasItem.transform.localPosition = new Vector3(0f, 60f, 0f); canvasItem.AddComponent<Image>().sprite = Sprite.Create(GetSpeakingIconTexture(), new Rect(0f, 0f, 260f, 280f), new Vector2(130f, 140f), 100f); } private float lexp(float a, float b, float t) { return Mathf.Lerp(a, b, Mathf.Exp(0f - t)); } public void Update() { VoicePlayerState voicePlayerState = player.voicePlayerState; if (voicePlayerState != null) { float num = Mathf.Clamp(voicePlayerState.Amplitude * 35f, 0f, 1f); if (Plugin.ConfigVariableSpeakingIndicatorOpacity.Value) { if (num > 0.01f) { canvasItemAlpha.alpha = lexp(canvasItemAlpha.alpha, num, Time.deltaTime * 100f); } else { canvasItemAlpha.alpha = lexp(canvasItemAlpha.alpha, num, Time.deltaTime * 50f); } } else if (num > 0.05f) { canvasItemAlpha.alpha = 1f; } else if (num < 0.01f) { canvasItemAlpha.alpha = 0f; } } if (!Plugin.ConfigSpeakingIndicatorAlwaysVisible.Value) { canvasItemAlpha.alpha = Math.Min(canvasItemAlpha.alpha, player.usernameAlpha.alpha); } if (((NetworkBehaviour)player).IsOwner) { canvasItemAlpha.alpha = 0f; } if (!Plugin.ConfigEnableSpeakingIndicator.Value) { Object.Destroy((Object)(object)((Component)this).gameObject); } } public void OnDestroy() { speakingIndicators.Remove(player); Object.Destroy((Object)(object)canvasItem); } } [HarmonyPatch] public class Patches { [HarmonyPatch(typeof(HUDManager), "UpdateSpectateBoxSpeakerIcons")] [HarmonyPostfix] public static void UpdateSpectateBoxSpeakerIcons(HUDManager __instance, ref Dictionary<Animator, PlayerControllerB> ___spectatingPlayerBoxes) { foreach (var (val3, val4) in ___spectatingPlayerBoxes) { if (!((NetworkBehaviour)val4).IsOwner) { continue; } if (!(IngamePlayerSettings.Instance?.settings?.pushToTalk).GetValueOrDefault()) { break; } PlayerInput playerInput = IngamePlayerSettings.Instance.playerInput; bool? obj; if (playerInput == null) { obj = null; } else { InputActionAsset actions = playerInput.actions; if (actions == null) { obj = null; } else { InputAction obj2 = actions.FindAction("VoiceButton", false); obj = ((obj2 != null) ? new bool?(obj2.IsPressed()) : null); } } bool? flag = obj; bool valueOrDefault = flag.GetValueOrDefault(); val3.SetBool("speaking", valueOrDefault); break; } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPostfix] public static void PlayerUpdate(PlayerControllerB __instance) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) if (Plugin.ConfigEnableSpeakingIndicator.Value) { SpeakingIndicator.GetSpeakingIndicator(__instance); } __instance.usernameBillboard.position = new Vector3(__instance.playerGlobalHead.position.x, __instance.playerGlobalHead.position.y + 0.55f, __instance.playerGlobalHead.position.z); if (Plugin.ConfigHideNameplates.Value || (Object)(object)__instance == (Object)(object)StartOfRound.Instance?.localPlayerController) { __instance.usernameAlpha.alpha = 0f; __instance.usernameBillboard.localScale = Vector3.zero; } else if ((Object)(object)StartOfRound.Instance?.localPlayerController != (Object)null) { float num = Vector3.Distance(((Component)StartOfRound.Instance.localPlayerController.gameplayCamera).transform.position, __instance.usernameBillboard.position); if (num < Plugin.ConfigNameplateVisibilityDistance.Value) { __instance.usernameAlpha.alpha = 1f; ((Behaviour)__instance.usernameBillboardText).enabled = true; ((Component)__instance.usernameCanvas).gameObject.SetActive(true); } float num2 = 1f; if (Plugin.ConfigNameplateScaleWithDistance.Value) { num2 = 1f + Math.Max(0f, (num - 4f) * 0.11f); } __instance.usernameBillboard.localScale = Plugin.OriginalNameplateScale.Value * Plugin.ConfigNameplateScale.Value * num2; } } } public static class PluginInfo { public const string PLUGIN_GUID = "NameplateTweaks"; public const string PLUGIN_NAME = "NameplateTweaks"; public const string PLUGIN_VERSION = "1.0.6"; } }
BepInEx/plugins/plugins/PersistentPurchases.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.UIElements.Collections; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("PersistentPurchases")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Keeps bought ship objects after failing to meet quota")] [assembly: AssemblyFileVersion("1.1.1.0")] [assembly: AssemblyInformationalVersion("1.1.1")] [assembly: AssemblyProduct("PersistentPurchases")] [assembly: AssemblyTitle("PersistentPurchases")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace PersistentPurchases { [HarmonyPatch] public class Patches { [HarmonyPostfix] [HarmonyPatch(typeof(Terminal), "Start")] [HarmonyPriority(-23)] public static void generateConfig() { Plugin.setupConfig(StartOfRound.Instance.unlockablesList.unlockables); } [HarmonyPrefix] [HarmonyPatch(typeof(StartOfRound), "ResetShip")] public static void storeUnlocked(StartOfRound __instance, out List<Tuple<int, Vector3, Vector3>> __state) { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) Plugin.log.LogInfo((object)"Taking note of bought unlockables"); __state = new List<Tuple<int, Vector3, Vector3>>(); List<UnlockableItem> unlockables = __instance.unlockablesList.unlockables; for (int i = 0; i < unlockables.Count; i++) { Plugin.log.LogDebug((object)$"{unlockables[i].unlockableName} - unlocked({unlockables[i].hasBeenUnlockedByPlayer}) - should persist({Plugin.unlockableConfig[i].Value})"); if (unlockables[i].hasBeenUnlockedByPlayer && Plugin.unlockableConfig[i].Value) { __state.Add(Tuple.Create<int, Vector3, Vector3>(i, unlockables[i].placedPosition, unlockables[i].placedRotation)); } } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "ResetShip")] public static void loadUnlocked(StartOfRound __instance, List<Tuple<int, Vector3, Vector3>> __state) { //IL_00c5: Unknown result type (might be due to invalid IL or missing references) Plugin.log.LogInfo((object)"Rebuying unlockables"); foreach (Tuple<int, Vector3, Vector3> item in __state) { Plugin.log.LogDebug((object)__instance.unlockablesList.unlockables[item.Item1].unlockableName); UnlockableItem val = __instance.unlockablesList.unlockables[item.Item1]; __instance.BuyShipUnlockableServerRpc(item.Item1, TimeOfDay.Instance.quotaVariables.startingCredits); if (__instance.SpawnedShipUnlockables.ContainsKey(item.Item1)) { NetworkObject component = DictionaryExtensions.Get<int, GameObject>((IDictionary<int, GameObject>)__instance.SpawnedShipUnlockables, item.Item1, (GameObject)null).GetComponent<NetworkObject>(); if ((Object)(object)component != (Object)null) { ShipBuildModeManager.Instance.StoreObjectServerRpc(NetworkObjectReference.op_Implicit(component), 0); } else { Plugin.log.LogWarning((object)("Failed to find NetworkObject for " + val.unlockableName)); } } else { Plugin.log.LogWarning((object)("SpawnedShipUnlockables did not contain " + val.unlockableName)); } } } } [HarmonyPatch(typeof(GameNetworkManager), "ResetSavedGameValues")] public class RemoveUneccesaryAndAnnoyingReset { private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { Plugin.log.LogInfo((object)"Beginning patching of GameNetworkManager.ResetSavedGameValues"); List<CodeInstruction> list = new List<CodeInstruction>(instructions); bool flag = false; for (int i = 0; i < list.Count; i++) { if (CodeInstructionExtensions.Calls(list[i], typeof(GameNetworkManager).GetMethod("ResetUnlockablesListValues"))) { flag = true; list[i - 1].opcode = OpCodes.Nop; list[i].opcode = OpCodes.Nop; list[i].operand = null; break; } } if (flag) { Plugin.log.LogInfo((object)"Patched GameNetworkManager.ResetSavedGameValues"); } else { Plugin.log.LogError((object)"Failed to patch GameNetworkManager.ResetSavedGameValues!"); } return list.AsEnumerable(); } } [BepInPlugin("PersistentPurchases", "PersistentPurchases", "1.1.1")] public class Plugin : BaseUnityPlugin { public static ConfigEntry<bool> placeUnlockables; public static ManualLogSource log = new ManualLogSource("PersistentPurchases"); public static Harmony harmony = new Harmony("PersistentPurchases"); public static string[] knownFurniture = new string[19] { "Cozy lights", "Television", "Cupboard", "File Cabinet", "Toilet", "Shower", "Light switch", "Record player", "Table", "Bunkbeds", "Terminal", "Romantic table", "JackOLantern", "Welcome mat", "Goldfish", "Plushie pajama man", "SmallRug", "LargeRug", "FatalitiesSign" }; public static List<ConfigFile> despair = new List<ConfigFile>(); public static List<ConfigEntry<bool>> unlockableConfig = new List<ConfigEntry<bool>>(); private void Awake() { Logger.Sources.Add((ILogSource)(object)log); despair.Add(((BaseUnityPlugin)this).Config); harmony.PatchAll(typeof(Patches)); harmony.PatchAll(typeof(RemoveUneccesaryAndAnnoyingReset)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin PersistentPurchases is loaded!"); } public static void setupConfig(List<UnlockableItem> unlockables) { log.LogInfo((object)$"Registering {unlockables.Count} unlockables"); for (int i = 0; i < unlockables.Count; i++) { log.LogDebug((object)(unlockables[i].unlockableName ?? "")); unlockableConfig.Add(despair[0].Bind<bool>("Unlockables", unlockables[i].unlockableName, unlockables[i].unlockableType == 0 || knownFurniture.Contains(unlockables[i].unlockableName), (ConfigDescription)null)); } } } public static class PluginInfo { public const string PLUGIN_GUID = "PersistentPurchases"; public const string PLUGIN_NAME = "PersistentPurchases"; public const string PLUGIN_VERSION = "1.1.1"; } }
BepInEx/plugins/plugins/PushToMute.dll
Decompiled 2 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using PushToMute.Patches; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("PushToMute")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("PushToMute")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("faaa231e-a5f3-481d-a1d9-f1f5799855fc")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace PushToMute { [BepInPlugin("Baba.PushToMute", "PushToMute", "1.0.0")] public class PTMModBase : BaseUnityPlugin { private const string modGUID = "Baba.PushToMute"; private const string modName = "PushToMute"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("Baba.PushToMute"); private static PTMModBase Instance; internal ManualLogSource mls; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("Baba.PushToMute"); harmony.PatchAll(typeof(PTMModBase)); harmony.PatchAll(typeof(UpdatePatch)); harmony.PatchAll(typeof(InGamePlayerSettingsPatch)); mls.LogInfo((object)"Push To Mute successfully loaded!"); } } } namespace PushToMute.Patches { [HarmonyPatch(typeof(StartOfRound), "Update")] internal class UpdatePatch { private static void Postfix(StartOfRound __instance) { if ((Object)(object)__instance.voiceChatModule != (Object)null && !IngamePlayerSettings.Instance.settings.pushToTalk) { __instance.voiceChatModule.IsMuted = IngamePlayerSettings.Instance.playerInput.actions.FindAction("VoiceButton", false).IsPressed(); } } } [HarmonyPatch(typeof(IngamePlayerSettings))] internal class InGamePlayerSettingsPatch { [HarmonyPatch("SetMicPushToTalk")] [HarmonyPostfix] private static void SetMicPushToTalkPatch(IngamePlayerSettings __instance) { if (!__instance.unsavedSettings.pushToTalk) { __instance.SetSettingsOptionsText((SettingsOptionType)3, "MODE: Push to mute"); } } [HarmonyPatch("UpdateMicPushToTalkButton")] [HarmonyPostfix] private static void UpdateMicPushToTalkButtonPatch(IngamePlayerSettings __instance) { if (!__instance.settings.pushToTalk) { __instance.SetSettingsOptionsText((SettingsOptionType)3, "MODE: Push to mute"); } } } }
BepInEx/plugins/plugins/RushOfAdrenaline.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RushOfAdrenaline")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+43206f0475d7dae18e393eaa115cfd192399712f")] [assembly: AssemblyProduct("RushOfAdrenaline")] [assembly: AssemblyTitle("RushOfAdrenaline")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace RushOfAdrenaline { [BepInPlugin("Uprank.RushOfAdrenaline", "Rush of Adrenaline", "1.0.0.0")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("Uprank.RushOfAdrenaline"); private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin Uprank.RushOfAdrenaline is loaded!"); harmony.PatchAll(typeof(Plugin)); harmony.PatchAll(typeof(PlayerControllerBPatch)); } } public class PluginInfo { public const string PLUGIN_GUID = "Uprank.RushOfAdrenaline"; public const string PLUGIN_NAME = "Rush of Adrenaline"; public const string PLUGIN_VERSION = "1.0.0.0"; } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void AdjustSpeedBasedOnPanic(ref StartOfRound ___playersManager, ref float ___targetFOV, ref float ___sprintMultiplier) { if (___playersManager.fearLevel >= 0.4f) { ___sprintMultiplier = Mathf.Lerp(___sprintMultiplier, 1f + ___playersManager.fearLevel / 2f, Time.deltaTime * 0.25f); } } } }
BepInEx/plugins/plugins/SellTracker.dll
Decompiled 2 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("SellTracker")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SellTracker")] [assembly: AssemblyTitle("SellTracker")] [assembly: AssemblyVersion("1.0.0.0")] namespace SellTracker; [BepInPlugin("NutNutty.SellTracker", "Sell Tracker", "1.2.1")] public class SellTracker : BaseUnityPlugin { public ConfigEntry<string> SellTrackerColorConfig; public ConfigEntry<string> SellPercentageColorConfig; public static Color SellTrackerColor; public static Color SellPercentageColor; public void Awake() { //IL_007c: Unknown result type (might be due to invalid IL or missing references) SellTrackerColorConfig = ((BaseUnityPlugin)this).Config.Bind<string>("Colors", "SellTrackerColor", "#FF0000", "The hex color of the sell tracker text (use a site like https://htmlcolorcodes.com to generate a hex code)"); SellPercentageColorConfig = ((BaseUnityPlugin)this).Config.Bind<string>("Colors", "SellPercentageColor", "#FF0000", "The hex color of the sell percentage text (use a site like https://htmlcolorcodes.com to generate a hex code)"); ColorUtility.TryParseHtmlString(SellTrackerColorConfig.Value, ref SellTrackerColor); ColorUtility.TryParseHtmlString(SellPercentageColorConfig.Value, ref SellPercentageColor); new Harmony("SellTracker").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Sell Tracker plugin loaded!"); } } public class Patches { [HarmonyPatch(typeof(DisplayCompanyBuyingRate))] public class DisplayCompanyBuyingRatePatch { [HarmonyPrefix] [HarmonyPatch("Update")] public static bool OverwriteText(ref DisplayCompanyBuyingRate __instance) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) int num = TimeOfDay.Instance.quotaFulfilled + calculatedValue; ((TMP_Text)__instance.displayText).text = $"PROFIT QUOTA: {num}/{TimeOfDay.Instance.profitQuota}"; ((TMP_Text)__instance.displayText).color = SellTracker.SellTrackerColor; ((TMP_Text)__instance.displayText).fontSize = 28f; return false; } } [HarmonyPatch(typeof(DepositItemsDesk))] public class DepositItemsDeskPatch { [HarmonyPostfix] [HarmonyPatch("AddObjectToDeskClientRpc")] public static void FetchValue(ref DepositItemsDesk __instance) { if (!NetworkManager.Singleton.IsServer && NetworkManager.Singleton.IsClient) { object value = Traverse.Create((object)__instance).Field("lastObjectAddedToDesk").GetValue(); NetworkObject val = (NetworkObject)((value is NetworkObject) ? value : null); __instance.itemsOnCounter.Add(((Component)val).GetComponentInChildren<GrabbableObject>()); } int num = 0; for (int i = 0; i < __instance.itemsOnCounter.Count; i++) { if (__instance.itemsOnCounter[i].itemProperties.isScrap) { num += __instance.itemsOnCounter[i].scrapValue; } } calculatedValue = (int)((float)num * StartOfRound.Instance.companyBuyingRate); } [HarmonyPostfix] [HarmonyPatch("SellItemsClientRpc")] public static void ClearValue(ref DepositItemsDesk __instance) { if (!NetworkManager.Singleton.IsServer && NetworkManager.Singleton.IsClient) { __instance.itemsOnCounter.Clear(); } calculatedValue = 0; } [HarmonyPostfix] [HarmonyPatch("Start")] public static void CreateScreen() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) Scene sceneByName = SceneManager.GetSceneByName("CompanyBuilding"); if (((Scene)(ref sceneByName)).IsValid()) { GameObject val = Object.Instantiate<GameObject>(GameObject.Find("/Cube")); GameObject val2 = Object.Instantiate<GameObject>(GameObject.Find("/Canvas")); SceneManager.MoveGameObjectToScene(val, sceneByName); SceneManager.MoveGameObjectToScene(val2, sceneByName); Transform transform = val.transform; transform.position += new Vector3(0f, 0f, -3f); Transform transform2 = val2.transform; transform2.position += new Vector3(0f, 0f, -3f); Object.Destroy((Object)(object)val2.GetComponentInChildren<DisplayCompanyBuyingRate>()); TextMeshProUGUI componentInChildren = val2.GetComponentInChildren<TextMeshProUGUI>(); ((TMP_Text)componentInChildren).text = $"{Mathf.RoundToInt(StartOfRound.Instance.companyBuyingRate * 100f)}%"; ((TMP_Text)componentInChildren).color = SellTracker.SellPercentageColor; ((TMP_Text)componentInChildren).fontSize = 64.37f; } } } public static int calculatedValue; }
BepInEx/plugins/plugins/SellYourStuff.dll
Decompiled 2 months agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using SellYourStuff.Patches; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("SellYourStuff")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SellYourStuff")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("be25d89d-f866-45bd-808b-723b2d0aa1f8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace SellYourStuff { [BepInPlugin("Axeron.SellYourStuff", "SellYourStuff", "1.0.1.0")] public class SellYourStuffModBase : BaseUnityPlugin { private const string modGUID = "Axeron.SellYourStuff"; private const string modName = "SellYourStuff"; private const string modVersion = "1.0.1.0"; private readonly Harmony harmony = new Harmony("Axeron.SellYourStuff"); internal ManualLogSource mls; private static SellYourStuffModBase Instance; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("Axeron.SellYourStuff"); mls.LogInfo((object)"SellYourStuff plugin loaded. Version 1.0.1.0"); harmony.PatchAll(typeof(SellYourStuffModBase)); harmony.PatchAll(typeof(ItemPatch)); harmony.PatchAll(typeof(SellPatch)); } } } namespace SellYourStuff.Patches { internal class PatchableItemsList { protected static readonly List<string> PatchableItems = new List<string> { "Flashlight", "Extension ladder", "Lockpicker", "Jetpack", "Pro-flashlight", "TZP-Inhalant", "Stun grenade", "Boombox", "Spray paint", "Shovel", "Walkie-talkie", "Zap gun", "Radar-booster" }; } [HarmonyPatch(typeof(DepositItemsDesk))] internal class SellPatch : PatchableItemsList { [HarmonyPatch("PlaceItemOnCounter")] private static void Prefix(DepositItemsDesk __instance, [HarmonyArgument(0)] PlayerControllerB playerWhoTriggered) { if ((Object)(object)playerWhoTriggered != (Object)null) { GrabbableObject currentlyHeldObjectServer = playerWhoTriggered.currentlyHeldObjectServer; if ((Object)(object)currentlyHeldObjectServer != (Object)null && (Object)(object)currentlyHeldObjectServer.itemProperties != (Object)null && PatchableItemsList.PatchableItems.Contains(currentlyHeldObjectServer.itemProperties.itemName)) { currentlyHeldObjectServer.itemProperties.isScrap = true; } } } } [HarmonyPatch(typeof(GrabbableObject))] internal class ItemPatch : PatchableItemsList { private const int NodeType = 2; private const int MinRange = 3; private const int MaxRange = 12; private const int creatureScanId = -1; private const bool requiresLineOfSight = false; [HarmonyPatch("Start")] private static void Postfix(GrabbableObject __instance) { if ((Object)(object)__instance != (Object)null && (Object)(object)__instance.itemProperties != (Object)null && PatchableItemsList.PatchableItems.Contains(__instance.itemProperties.itemName)) { TryAddScanNode(__instance); __instance.itemProperties.isScrap = true; TrySetScrapValue(__instance); __instance.itemProperties.isScrap = false; } } private static void TrySetScrapValue(GrabbableObject __instance) { try { Terminal val = Object.FindObjectOfType<Terminal>(); for (int i = 0; i < Object.FindObjectOfType<Terminal>().buyableItemsList.Length; i++) { if (val.buyableItemsList[i].itemName == __instance.itemProperties.itemName) { int num = val.itemSalesPercentages[i]; __instance.SetScrapValue(__instance.itemProperties.creditsWorth * num / 200); } } } catch { Debug.LogError((object)"Item not found in the current terminal store or other error occured"); } } private static void TryAddScanNode(GrabbableObject __instance) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) try { object headerText = ((Component)__instance).gameObject.GetComponentInChildren<ScanNodeProperties>().headerText; } catch { GameObject gameObject = ((Component)Object.FindObjectOfType<ScanNodeProperties>()).gameObject; if ((Object)(object)gameObject != (Object)null) { GameObject val = Object.Instantiate<GameObject>(gameObject, ((Component)__instance).transform.position, Quaternion.Euler(Vector3.zero), ((Component)__instance).transform); ScanNodeProperties component = val.GetComponent<ScanNodeProperties>(); if ((Object)(object)component != (Object)null) { component.headerText = __instance.itemProperties.itemName; component.nodeType = 2; component.minRange = 3; component.maxRange = 12; component.requiresLineOfSight = false; component.creatureScanID = -1; } } else { Debug.LogError((object)"Couldn't create scanNode for object"); } } } } }
BepInEx/plugins/plugins/ShipDecorations.dll
Decompiled 2 months agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using ShipDecorations.Patches; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ShipDecorations")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ShipDecorations")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("752b4a5e-d779-490a-a540-e85dd73f2bd2")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace ShipDecorations { public static class ConfigSettings { public static ConfigEntry<bool> makeShipDecorationsFree; public static void BindConfigSettings() { } public static string GetDisplayName(string key) { key = key.Replace("<Keyboard>/", ""); key = key.Replace("<Mouse>/", ""); string text = key; text = text.Replace("leftAlt", "Alt"); text = text.Replace("rightAlt", "Alt"); text = text.Replace("leftCtrl", "Ctrl"); text = text.Replace("rightCtrl", "Ctrl"); text = text.Replace("leftShift", "Shift"); text = text.Replace("rightShift", "Shift"); text = text.Replace("leftButton", "LMB"); text = text.Replace("rightButton", "RMB"); return text.Replace("middleButton", "MMB"); } } [BepInPlugin("Sant.ShipDecorationsUnlock", "Unlock Ship Decorations", "1.0.0.0")] public class ShipDecorationsUnlockedModBase : BaseUnityPlugin { private const string modGUID = "Sant.ShipDecorationsUnlock"; private const string modName = "Unlock Ship Decorations"; private const string modVersion = "1.0.0.0"; private readonly Harmony harmony = new Harmony("Sant.ShipDecorationsUnlock"); public static ShipDecorationsUnlockedModBase instance; internal ManualLogSource mls; private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; } mls = Logger.CreateLogSource("Sant.ShipDecorationsUnlock"); mls.LogInfo((object)"The Ship Decorations Unlock mod has awaken"); harmony.PatchAll(typeof(ShipDecorationsUnlockedModBase)); harmony.PatchAll(typeof(ShipDecorationsUnlockedPatch)); } public static void Log(string message) { Log(message); } } } namespace ShipDecorations.Patches { [HarmonyPatch(typeof(Terminal))] internal class ShipDecorationsUnlockedPatch { [HarmonyPatch("RotateShipDecorSelection")] [HarmonyPostfix] private static void unlockAllShipDecorations(ref List<TerminalNode> ___ShipDecorSelection) { ___ShipDecorSelection.Clear(); List<TerminalNode> list = new List<TerminalNode>(); for (int i = 0; i < StartOfRound.Instance.unlockablesList.unlockables.Count; i++) { if ((Object)(object)StartOfRound.Instance.unlockablesList.unlockables[i].shopSelectionNode != (Object)null && !StartOfRound.Instance.unlockablesList.unlockables[i].alwaysInStock) { list.Add(StartOfRound.Instance.unlockablesList.unlockables[i].shopSelectionNode); } } for (int j = 0; j < list.Count; j++) { TerminalNode item = list[j]; ___ShipDecorSelection.Add(item); } } } }
BepInEx/plugins/plugins/ShootableMouthDogs.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("AgentRev")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+0eac58e2c712170b22b29352fe20cbcc1cec04b3")] [assembly: AssemblyProduct("ShootableMouthDogs")] [assembly: AssemblyTitle("ShootableMouthDogs")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ShootableMouthDogs { [BepInPlugin("ShootableMouthDogs", "ShootableMouthDogs", "1.0.0")] public class Plugin : BaseUnityPlugin { public void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin ShootableMouthDogs v1.0.0 loaded!"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } } [HarmonyPatch(typeof(Physics))] public static class PhysicsPatch { [HarmonyPatch("SphereCastNonAlloc")] [HarmonyPatch(new Type[] { typeof(Ray), typeof(float), typeof(RaycastHit[]), typeof(float), typeof(int), typeof(QueryTriggerInteraction) })] private static void Postfix(RaycastHit[] results, int layerMask, ref int __result) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) if ((layerMask & 0x80000) == 0) { return; } int num = 0; for (int i = 0; i < __result; i++) { Transform transform = ((RaycastHit)(ref results[i])).transform; if ((Object)(object)((transform != null) ? ((Component)transform).GetComponent<NavMeshAgent>() : null) == (Object)null) { if (i > num) { results[num] = results[i]; } num++; } } __result = num; } } public static class PluginInfo { public const string PLUGIN_GUID = "ShootableMouthDogs"; public const string PLUGIN_NAME = "ShootableMouthDogs"; public const string PLUGIN_VERSION = "1.0.0"; } }
BepInEx/plugins/plugins/Suit Saver.dll
Decompiled 2 months agousing System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using GameNetcodeStuff; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Suit Saver")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Suit Saver")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("cb7cfb30-b06e-4e41-9de7-03640e1662ea")] [assembly: AssemblyFileVersion("1.2.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: AssemblyVersion("1.0.0.0")] namespace SuitSaver { [BepInPlugin("Hexnet.lethalcompany.suitsaver", "Suit Saver", "1.2.1")] public class SuitSaver : BaseUnityPlugin { private const string modGUID = "Hexnet.lethalcompany.suitsaver"; private const string modName = "Suit Saver"; private const string modVersion = "1.2.1"; private readonly Harmony harmony = new Harmony("Hexnet.lethalcompany.suitsaver"); private void Awake() { harmony.PatchAll(); Debug.Log((object)"[SS]: Suit Saver loaded successfully!"); } } } namespace SuitSaver.Patches { [HarmonyPatch] internal class Patches { [HarmonyPatch(typeof(StartOfRound))] internal class StartPatch { private static bool ReloadSuit; [HarmonyPatch("playersFiredGameOver")] [HarmonyPrefix] private static void PurchasedSuitCheck() { string text = LoadFromFile(); if (text != "-1") { ReloadSuit = !IsPurchasedSuit(text); } } [HarmonyPatch("ResetShip")] [HarmonyPostfix] private static void ResetShipPatch() { if (!ReloadSuit) { string text = LoadFromFile(); if (text != "-1") { Debug.Log((object)("[SS]: Could not reload suit upon ship reset. Perhaps it's locked? (" + text + ")")); } } else { Debug.Log((object)"[SS]: Ship has been reset!"); Debug.Log((object)"[SS]: Reloading suit..."); LoadSuitFromFile(); ReloadSuit = false; } } } [HarmonyPatch(typeof(UnlockableSuit))] internal class SuitPatch { [HarmonyPatch("SwitchSuitClientRpc")] [HarmonyPostfix] private static void SyncSuit(ref UnlockableSuit __instance, int playerID) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; int num = (int)localPlayerController.playerClientId; if (playerID != num) { UnlockableSuit.SwitchSuitForPlayer(StartOfRound.Instance.allPlayerScripts[playerID], __instance.syncedSuitID.Value, true); } } [HarmonyPatch("SwitchSuitToThis")] [HarmonyPostfix] private static void EquipSuitPatch() { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; string unlockableName = StartOfRound.Instance.unlockablesList.unlockables[localPlayerController.currentSuitID].unlockableName; SaveToFile(unlockableName); Debug.Log((object)("[SS]: Successfully saved current suit. (" + unlockableName + ")")); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class JoinGamePatch { [HarmonyPatch("ConnectClientToPlayerObject")] [HarmonyPostfix] private static void LoadSuitPatch(ref PlayerControllerB __instance) { ((Component)GameNetworkManager.Instance.localPlayerController).gameObject.AddComponent<EquipAfterSyncPatch>(); } } internal class EquipAfterSyncPatch : MonoBehaviour { private void Start() { ((MonoBehaviour)this).StartCoroutine(LoadSuit()); } private IEnumerator LoadSuit() { Debug.Log((object)"[SS]: Waiting for suits to sync..."); string SavedSuit = LoadFromFile(); int success = -1; for (int i = 0; i < 3; i++) { success = LoadSuitStartup(SavedSuit); if (success <= 0) { if (success == 0) { Debug.Log((object)("[SS]: Failed to load saved suit. Perhaps it's locked? (" + SavedSuit + ")")); } break; } yield return (object)new WaitForSeconds(1f); } if (success == 1) { Debug.Log((object)("[SS]: Successfully loaded saved suit. (" + SavedSuit + ")")); } } } public static string SavePath = Application.persistentDataPath + "\\suitsaver.txt"; private static void SaveToFile(string suitName) { File.WriteAllText(SavePath, suitName); } private static string LoadFromFile() { if (File.Exists(SavePath)) { return File.ReadAllText(SavePath); } return "-1"; } private static UnlockableSuit GetSuitByName(string Name) { List<UnlockableItem> unlockables = StartOfRound.Instance.unlockablesList.unlockables; UnlockableSuit[] array = Resources.FindObjectsOfTypeAll<UnlockableSuit>(); foreach (UnlockableSuit val in array) { if (val.syncedSuitID.Value >= 0) { string unlockableName = unlockables[val.syncedSuitID.Value].unlockableName; if (unlockableName == Name) { return val; } } } return null; } private static bool IsPurchasedSuit(string Name) { List<UnlockableItem> unlockables = StartOfRound.Instance.unlockablesList.unlockables; UnlockableSuit[] array = Resources.FindObjectsOfTypeAll<UnlockableSuit>(); foreach (UnlockableSuit val in array) { if (val.syncedSuitID.Value >= 0) { UnlockableItem val2 = unlockables[val.syncedSuitID.Value]; string unlockableName = val2.unlockableName; if (unlockableName == Name) { return !val2.alreadyUnlocked && val2.hasBeenUnlockedByPlayer; } } } return false; } private static void LoadSuitFromFile() { string text = LoadFromFile(); PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (!(text == "-1")) { UnlockableSuit suitByName = GetSuitByName(text); if ((Object)(object)suitByName != (Object)null) { UnlockableSuit.SwitchSuitForPlayer(localPlayerController, suitByName.syncedSuitID.Value, false); suitByName.SwitchSuitServerRpc((int)localPlayerController.playerClientId); Debug.Log((object)("[SS]: Successfully loaded saved suit. (" + text + ")")); } else { Debug.Log((object)("[SS]: Failed to load saved suit. Perhaps it's locked? (" + text + ")")); } } } private static int LoadSuitStartup(string SavedSuit) { PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (SavedSuit == "-1") { return -1; } UnlockableSuit suitByName = GetSuitByName(SavedSuit); if ((Object)(object)suitByName != (Object)null) { UnlockableSuit.SwitchSuitForPlayer(localPlayerController, suitByName.syncedSuitID.Value, false); suitByName.SwitchSuitServerRpc((int)localPlayerController.playerClientId); return 1; } return 0; } } }
BepInEx/plugins/plugins/VanillaContentExpansion/VanillaContentExpansion.dll
Decompiled 2 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Unity.Netcode; using UnityEngine; using VanillaContentExpansion; using VanillaContentPlus; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("VanillaContentExpansion")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("VanillaContentExpansion")] [assembly: AssemblyTitle("VanillaContentExpansion")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace VanillaContentPlus { [BepInPlugin("bigmcnugget.vanillaContentExpansion", "Vanilla Content Expansion", "0.1.7")] public class Plugin : BaseUnityPlugin { private const string GUID = "bigmcnugget.vanillaContentExpansion"; private const string NAME = "Vanilla Content Expansion"; private const string VERSION = "0.1.7"; public static Plugin instance; public ConfigEntry<bool> AllowDebugLogs; public static AssetBundle scrapAssetBundle; public static string scrapListJson; public static AssetBundle monsterAssetBundle; public static ConfigFile mainConfig { get; internal set; } public static ConfigFile scrapConfig { get; internal set; } public static ConfigFile monsterConfig { get; internal set; } private void Awake() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown instance = this; mainConfig = new ConfigFile(Utility.CombinePaths(new string[2] { Paths.ConfigPath, "bigmcnugget.vanillaContentExpansion-main.cfg" }), true); AllowDebugLogs = mainConfig.Bind<bool>("Main", "Allow Debug Logs", true, "Allow printing logs to the console, really only needed for debug"); PrepareForPatching(); scrapAssetBundle = LoadAssetBundle("Scrap", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "customscrap")); scrapListJson = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "ScrapList.json"); scrapConfig = new ConfigFile(Utility.CombinePaths(new string[2] { Paths.ConfigPath, "bigmcnugget.vanillaContentExpansion-scrap.cfg" }), false); CustomScrap.Init(); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "bigmcnugget.vanillaContentExpansion"); } private static void PrepareForPatching() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); 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); } } } } private static AssetBundle LoadAssetBundle(string debugName, string path) { AssetBundle result = AssetBundle.LoadFromFile(path); instance.LogInfo("Loaded " + debugName + " Asset bundle from " + path); return result; } public void LogInfo(string message) { if (AllowDebugLogs.Value) { ((BaseUnityPlugin)this).Logger.LogInfo((object)message); } } public void LogWarning(string message) { ((BaseUnityPlugin)this).Logger.LogWarning((object)message); } } } namespace VanillaContentPlus.CustomBehaviour { public class FlipPhone : GrabbableObject { public AudioSource src; public AudioClip[] ringtones; public bool isPlaying; public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (((NetworkBehaviour)this).IsOwner && isPlaying) { } } [ServerRpc(RequireOwnership = false)] public void PlayServerRpc() { int i = Random.Range(0, ringtones.Length); PlayClientRpc(i); } [ClientRpc] public void PlayClientRpc(int i) { ((MonoBehaviour)this).StartCoroutine(PlayOneShotIEnum(i)); } public IEnumerator PlayOneShotIEnum(int i) { isPlaying = true; AudioClip clip = ringtones[i]; Debug.Log((object)("Phone item: Playing clip " + ((Object)clip).name)); src.PlayOneShot(clip); yield return (object)new WaitForSeconds(clip.length + 0.2f); isPlaying = false; } } } namespace VanillaContentExpansion { public class ChatterboxAI : EnemyAI { } public class CustomEnemy { public class CustomEnemyData { public string name; public string enemyPath; public int rarity; public LevelTypes levelFlags; public SpawnType spawnType; public string infoKeyword; public string infoNode; public bool enabled = true; private CustomEnemyConfig config; public CustomEnemyData(string name, string enemyPath, int rarity, LevelTypes levelFlags, SpawnType spawnType, string infoKeyword, string infoNode) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) this.name = name; this.enemyPath = enemyPath; this.rarity = rarity; this.levelFlags = levelFlags; this.spawnType = spawnType; this.infoKeyword = infoKeyword; this.infoNode = infoNode; config = new CustomEnemyConfig(name, rarity); enabled = config.ENABLED.Value; this.rarity = config.RARITY.Value; allMonsters.Add(this); } } public static List<CustomEnemyData> allMonsters = new List<CustomEnemyData>(); public static CustomEnemyData chatterbox = new CustomEnemyData("chatterbox", "Assets/content/enemies/chatterbox/data/chatterbox_enemy_type.asset", 1000, (LevelTypes)(-1), (SpawnType)0, null, ""); public static void Init() { foreach (CustomEnemyData allMonster in allMonsters) { RegisterCustomMonster(allMonster); } } private static void RegisterCustomMonster(CustomEnemyData monster) { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) Plugin.instance.LogInfo("Attempting To register Custom Monster: " + monster.name + " at " + monster.enemyPath); if (!monster.enabled) { Plugin.instance.LogInfo("Register Skipped" + monster.name + " Disabled in config"); return; } EnemyType val = Plugin.monsterAssetBundle.LoadAsset<EnemyType>(monster.enemyPath); if ((Object)(object)val == (Object)null) { Plugin.instance.LogWarning("!!!!!!!!!!!!!CANNOT FIND!!!!!!!!!!!!!!" + monster.name); return; } NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); Enemies.RegisterEnemy(val, monster.rarity, monster.levelFlags, monster.spawnType, (TerminalNode)null, (TerminalKeyword)null); Plugin.instance.LogInfo("Registered Custom Monster: " + monster.name); Plugin.instance.LogInfo("\n"); } } public class CustomEnemyConfig { public string name; public int rarity; public ConfigEntry<bool> ENABLED; public ConfigEntry<int> RARITY; public CustomEnemyConfig(string _name, int _defaultRarity) { name = _name; rarity = _defaultRarity; ENABLED = Plugin.monsterConfig.Bind<bool>(name, name + " Enabled", true, (ConfigDescription)null); RARITY = Plugin.monsterConfig.Bind<int>(name, name + " Rarity", rarity, ""); Plugin.instance.LogInfo(name + " Config Loaded: [ENABLED] " + ENABLED.Value + " | [RARITY] " + RARITY.Value); } } public class CustomScrap { public class CustomScrapItem { public string scrapName; public string path; public Dictionary<LevelTypes, int> moonWeights; public bool enabled; public int minValue; public int maxValue; public float itemWeight; private CustomScrapConfig config; public CustomScrapItem(string name, string path, int[] weights, int minValue, int maxValue, float weight) { scrapName = name; this.path = path; moonWeights = new Dictionary<LevelTypes, int> { { (LevelTypes)4, weights[0] }, { (LevelTypes)8, weights[1] }, { (LevelTypes)16, weights[2] }, { (LevelTypes)32, weights[3] }, { (LevelTypes)64, weights[4] }, { (LevelTypes)128, weights[5] }, { (LevelTypes)256, weights[6] }, { (LevelTypes)512, weights[7] }, { (LevelTypes)1024, weights[0] } }; this.minValue = minValue; this.maxValue = maxValue; itemWeight = weight; config = new CustomScrapConfig(scrapName, this); enabled = config.ENABLED.Value; this.minValue = config.valueMin.Value; this.maxValue = config.valueMax.Value; itemWeight = config.itemWeight.Value; } } public class CustomScrapConfig { public string name; public ConfigEntry<bool> ENABLED; public ConfigEntry<int> valueMin; public ConfigEntry<int> valueMax; public ConfigEntry<float> itemWeight; public CustomScrapConfig(string _name, CustomScrapItem item) { name = _name; ENABLED = Plugin.scrapConfig.Bind<bool>("SCRAP " + name, name + " Enabled", true, (ConfigDescription)null); valueMin = Plugin.scrapConfig.Bind<int>("SCRAP " + name, name + " Minimum Value", item.minValue, (ConfigDescription)null); valueMax = Plugin.scrapConfig.Bind<int>("SCRAP " + name, name + " Maximum Value", item.maxValue, (ConfigDescription)null); itemWeight = Plugin.scrapConfig.Bind<float>("SCRAP " + name, name + " Item Weight", item.itemWeight, (ConfigDescription)null); Plugin.instance.LogInfo(name + " Config Loaded: [ENABLED] " + ENABLED.Value); } } public class JsonRoot { [JsonProperty("SCRAP")] public JsonData[] scraplist { get; set; } } public class JsonData { [JsonProperty("name")] public string name; [JsonProperty("path")] public string path; [JsonProperty("weights")] public int[] weights; [JsonProperty("minValue")] public int minValue; [JsonProperty("maxValue")] public int maxValue; [JsonProperty("itemWeight")] public float itemWeight; } public static List<CustomScrapItem> allScrapItems = new List<CustomScrapItem>(); public static void Init() { ParseJsonList(); } private static void RegisterCustomScrapItem(CustomScrapItem scrap) { if (!scrap.enabled) { Plugin.instance.LogInfo("Register Skipped" + scrap.scrapName + " Disabled in config"); return; } Item val = Plugin.scrapAssetBundle.LoadAsset<Item>(scrap.path); if ((Object)(object)val == (Object)null) { Plugin.instance.LogWarning("!!!!!!!!!!!!!CANNOT FIND!!!!!!!!!!!!!!" + scrap.scrapName); return; } val.minValue = (int)((double)scrap.minValue * 2.5); val.maxValue = (int)((double)scrap.maxValue * 2.5); val.weight = scrap.itemWeight; NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Items.RegisterScrap(val, scrap.moonWeights, (Dictionary<string, int>)null); Plugin.instance.LogInfo("Succesfully Registered Scrap: " + scrap.scrapName); } private static void ParseJsonList() { StreamReader streamReader = new StreamReader(Plugin.scrapListJson); string text = streamReader.ReadToEnd(); JsonRoot jsonRoot = JsonConvert.DeserializeObject<JsonRoot>(text); int num = jsonRoot.scraplist.Length; for (int i = 0; i < num; i++) { JsonData jsonData = jsonRoot.scraplist[i]; CustomScrapItem scrap = new CustomScrapItem(jsonData.name, jsonData.path, jsonData.weights, jsonData.minValue, jsonData.maxValue, jsonData.itemWeight); RegisterCustomScrapItem(scrap); } } } } namespace VanillaContentExpansion.CustomBehaviour { public class AlarmClock { public Transform hHand; public Transform mHand; public Transform sHand; public AudioSource src; public AudioClip tick; public AudioClip alarm; } public class Lighter : GrabbableObject { private bool enabled; public AudioSource src; public AudioClip enabledSfx; public AudioClip disabledSfx; public Light pointLight; private float defaultlightRange = 5f; private Vector2 lightRangeRandom = new Vector2(4f, 8f); private float currentLightRange; private float defaultlightIntensity = 500f; private Vector2 lightIntensityRandom = new Vector2(125f, 150f); private float currentLightIntensity; private Vector2 flickerTimerRandom = new Vector2(0.01f, 0.15f); private float flickerTimer = 0.1f; public float fuel = 100f; private float fuelLeft; public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (((NetworkBehaviour)this).IsOwner) { ((Behaviour)pointLight).enabled = false; } } public void Toggle() { enabled = !enabled; if (enabled) { Debug.Log((object)"Lighter enabled"); src.PlayOneShot(enabledSfx); ((Behaviour)pointLight).enabled = true; } else { Debug.Log((object)"Lighter disabled"); src.PlayOneShot(disabledSfx); ((Behaviour)pointLight).enabled = false; pointLight.intensity = defaultlightIntensity; pointLight.range = defaultlightRange; } } public void Tick() { flickerTimer -= Time.deltaTime; if (flickerTimer <= 0f) { currentLightIntensity = Random.Range(lightIntensityRandom.x, lightIntensityRandom.y); currentLightRange = Random.Range(lightRangeRandom.x, lightRangeRandom.y); pointLight.intensity = currentLightIntensity; pointLight.range = currentLightRange; flickerTimer = Random.Range(flickerTimerRandom.x, flickerTimerRandom.y); } } public override void Update() { ((GrabbableObject)this).Update(); Tick(); } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); if (enabled) { Toggle(); } } } public class Missile : GrabbableObject { } public class PolaroidCamera : GrabbableObject { private bool canUse; public Light light; private float flashTimer; public AudioSource src; public AudioClip flashSFX; public AudioClip primedSFX; public override void Start() { ((GrabbableObject)this).Start(); ((Behaviour)light).enabled = false; canUse = true; } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!((NetworkBehaviour)this).IsOwner) { } } public IEnumerator Flash() { canUse = false; src.PlayOneShot(flashSFX); ((Behaviour)light).enabled = true; light.intensity = 10f; Light obj = light; obj.intensity += Time.deltaTime * 50000f; yield return (object)new WaitForSeconds(0.3f); ((Behaviour)light).enabled = false; light.intensity = 0f; yield return (object)new WaitForSeconds(3f); src.PlayOneShot(primedSFX); canUse = true; } } public class TrafficLight : GrabbableObject { private bool enabled = false; private bool switching; public Light[] lights; public AudioSource src; public AudioClip changeClickClip; private Vector2 timerRandom = new Vector2(5f, 20f); private float currentTimer = 0f; public override void Start() { ((GrabbableObject)this).Start(); Light[] array = lights; foreach (Light val in array) { ((Behaviour)val).enabled = false; } } public override void Update() { ((GrabbableObject)this).Update(); if (!enabled) { return; } currentTimer -= Time.deltaTime; if (currentTimer <= 0f && !switching) { Light[] array = lights; foreach (Light val in array) { ((Behaviour)val).enabled = false; } ((MonoBehaviour)this).StartCoroutine(ToggleLights()); } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); enabled = false; Light[] array = lights; foreach (Light val in array) { ((Behaviour)val).enabled = false; } } public override void EquipItem() { enabled = true; } private IEnumerator ToggleLights() { switching = true; yield return (object)new WaitForSeconds(0.75f); src.PlayOneShot(changeClickClip); int i = Random.Range(0, lights.Length); ((Behaviour)lights[i]).enabled = true; currentTimer = Random.Range(timerRandom.x, timerRandom.y); switching = false; } } }
BepInEx/plugins/plugins/VoiceHUD.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.UI; using VoiceHUD.Configuration; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("VoiceHUD")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Displays push-to-talk icon on voice activation")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1+f1e0a0cfa0a629002418c9e0aa3a753676e33192")] [assembly: AssemblyProduct("VoiceHUD")] [assembly: AssemblyTitle("VoiceHUD")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace VoiceHUD { [BepInPlugin("5Bit.VoiceHUD", "VoiceHUD", "1.0.4")] public class VoiceHUD : BaseUnityPlugin { private const string modGUID = "5Bit.VoiceHUD"; private const string modName = "VoiceHUD"; private const string modVersion = "1.0.4"; private readonly Harmony harmony = new Harmony("5Bit.VoiceHUD"); private static VoiceHUD Instance; internal static ManualLogSource mls; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("5Bit.VoiceHUD"); Config.Init(); harmony.PatchAll(); } } public static class PluginInfo { public const string PLUGIN_GUID = "VoiceHUD"; public const string PLUGIN_NAME = "VoiceHUD"; public const string PLUGIN_VERSION = "1.0.1"; } } namespace VoiceHUD.Patches { [HarmonyPatch(typeof(HUDManager))] internal class VoiceHUDPatch { private static Color Start = new Color(0f, 255f, 0f, 255f); private static Color Center = new Color(165f, 255f, 0f, 255f); private static Color End = new Color(255f, 0f, 0f, 255f); [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update() { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if (!IngamePlayerSettings.Instance.settings.micEnabled || IngamePlayerSettings.Instance.settings.pushToTalk || (Object)(object)StartOfRound.Instance.voiceChatModule == (Object)null) { return; } VoicePlayerState val = StartOfRound.Instance.voiceChatModule.FindPlayer(StartOfRound.Instance.voiceChatModule.LocalPlayerName); if (val.IsSpeaking) { float num = Mathf.Clamp(val.Amplitude * 35f, 0f, 1f); if (Config.ColorsEnabled) { ((Graphic)HUDManager.Instance.PTTIcon).color = GetColorByVolume(num * 100f); } ((Behaviour)HUDManager.Instance.PTTIcon).enabled = num > 0.01f; } } public static Color GetColorByVolume(float volume) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (volume < 20f) { return Start; } if (volume > 70f) { return End; } return Center; } } } namespace VoiceHUD.Configuration { internal static class Config { private const string CONFIG_FILE_NAME = "VoiceHUD.cfg"; private static ConfigFile config; private static ConfigEntry<bool> colorsEnabled; public static bool ColorsEnabled => colorsEnabled.Value; public static void Init() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown string text = Path.Combine(Paths.ConfigPath, "VoiceHUD.cfg"); config = new ConfigFile(text, true); colorsEnabled = config.Bind<bool>("Config", "Colors enabled", false, "Change icon color based on volume."); } } }
BepInEx/plugins/plugins/Yippee/YippeeMod.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using YippeeMod.Patches; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("YippeeMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("YippeeMod")] [assembly: AssemblyTitle("YippeeMod")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace YippeeMod { [BepInPlugin("sunnobunno.YippeeMod", "Yippee tbh mod", "1.2.4")] public class YippeeModBase : BaseUnityPlugin { private const string modGUID = "sunnobunno.YippeeMod"; private const string modName = "Yippee tbh mod"; private const string modVersion = "1.2.4"; private readonly Harmony harmony = new Harmony("sunnobunno.YippeeMod"); private static YippeeModBase? Instance; internal ManualLogSource? mls; internal static AudioClip[]? newSFX; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("sunnobunno.YippeeMod"); mls.LogInfo((object)"sunnobunno.YippeeMod is loading."); string location = ((BaseUnityPlugin)Instance).Info.Location; string text = "YippeeMod.dll"; string text2 = location.TrimEnd(text.ToCharArray()); string text3 = text2 + "yippeesound"; AssetBundle val = AssetBundle.LoadFromFile(text3); if ((Object)(object)val == (Object)null) { mls.LogError((object)"Failed to load audio assets!"); return; } newSFX = val.LoadAssetWithSubAssets<AudioClip>("assets/yippee-tbh.mp3"); harmony.PatchAll(typeof(HoarderBugPatch)); mls.LogInfo((object)"sunnobunno.YippeeMod is loaded. Yippee!!!"); } } } namespace YippeeMod.Patches { [HarmonyPatch(typeof(HoarderBugAI))] internal class HoarderBugPatch { [HarmonyPatch("Start")] [HarmonyPostfix] public static void hoarderBugAudioPatch(ref AudioClip[] ___chitterSFX) { AudioClip[] newSFX = YippeeModBase.newSFX; ___chitterSFX = newSFX; } } }