The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of MoreScouts v0.3.1
MoreScouts.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 HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using TMPro; using UnityEngine; using Zorro.Core; [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("MoreScouts")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Mod for more Players in PEAK")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: AssemblyInformationalVersion("0.0.1+d9418b14b8b8eb650054a64c9650b262494901d5")] [assembly: AssemblyProduct("MoreScouts")] [assembly: AssemblyTitle("MoreScouts")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.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 MaxPlayersPatch { [BepInPlugin("com.coddingcat.maxplayerspatch", "Max Players Patch", "1.0.0")] public class MaxPlayersPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(Campfire), "Awake")] public static class Patch_Campfire_Awake_MarshmallowSpawner { private static readonly HashSet<Vector3> handledCampfires = new HashSet<Vector3>(); private static void Postfix(Campfire __instance) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_0051: 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) if (PhotonNetwork.IsMasterClient && PlayerHandler.GetAllPlayers().Count >= 5) { Vector3 position = ((Component)__instance).transform.position; if (!handledCampfires.Contains(position)) { handledCampfires.Add(position); Debug.Log((object)$"Spawning marshmallow for campfire at {position}"); SpawnMarshmallows(PlayerHandler.GetAllPlayers().Count - 4, position); } } } } private ConfigEntry<int> maxPlayersConfig; private void Awake() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown maxPlayersConfig = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MaxPlayers", 20, "Sets the maximum number of players allowed on the server."); Harmony val = new Harmony("com.coddingcat.maxplayerspatch"); val.PatchAll(); SetMaxPlayers(maxPlayersConfig.Value); } private static void SpawnMarshmallows(int number, Vector3 campfirePosition) { //IL_003c: 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_005b: Unknown result type (might be due to invalid IL or missing references) ItemDatabase instance = SingletonAsset<ItemDatabase>.Instance; if (!instance.itemLookup.TryGetValue(46, out var value)) { Debug.LogError((object)"Version is Incompatible to spawn marshmallows"); return; } float innerRadius = 1f; float outerRadius = 2f; List<Vector3> pointsAroundCampfire = GetPointsAroundCampfire(number, innerRadius, outerRadius, campfirePosition); foreach (Vector3 item in pointsAroundCampfire) { AddItemToWorld(value, item); } } private static void AddItemToWorld(Item item, Vector3 position) { //IL_001b: 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) if (PhotonNetwork.IsConnected) { PhotonNetwork.Instantiate("0_Items/" + ((Object)item).name, position, Quaternion.Euler(0f, Random.Range(0f, 360f), 0f), (byte)0, (object[])null); } } private static List<Vector3> GetPointsAroundCampfire(int numPoints, float innerRadius, float outerRadius, Vector3 campfirePosition) { //IL_004a: 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_0050: 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_0058: 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) List<Vector3> list = new List<Vector3>(); for (int i = 0; i < numPoints; i++) { float num = Mathf.Sqrt(Random.Range(innerRadius * innerRadius, outerRadius * outerRadius)); float num2 = Random.Range(0f, (float)Math.PI * 2f); float num3 = Mathf.Cos(num2) * num; float num4 = Mathf.Sin(num2) * num; Vector3 toGround = new Vector3(num3, 0f, num4) + campfirePosition; list.Add(SetToGround(toGround)); } return list; } private static Vector3 SetToGround(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_0010: Unknown result type (might be due to invalid IL or missing references) return HelperFunctions.GetGroundPos(position, (LayerType)2, 0f); } private void SetMaxPlayers(int newMax) { try { Type typeFromHandle = typeof(NetworkConnector); FieldInfo field = typeFromHandle.GetField("MAX_PLAYERS", BindingFlags.Static | BindingFlags.Public); if (field != null) { field.SetValue(null, newMax); ((BaseUnityPlugin)this).Logger.LogDebug((object)$"Player Cap Set to {newMax}"); } else { ((BaseUnityPlugin)this).Logger.LogError((object)"[MaxPlayersPatch] Patch Did Not Work - MAX_PLAYERS field not found."); } } catch (Exception arg) { ((BaseUnityPlugin)this).Logger.LogError((object)$"[MaxPlayersPatch] Error: {arg}"); } } } } namespace Lanx.NoHungerNearCampfire { [BepInPlugin("com.Lanx.nohungernearcampfire", "No Hunger Near Campfire", "1.0.0")] public class NoHungerPatchPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(Campfire), "Awake")] private class Campfire_Awake_Patch { private static void Postfix(Campfire __instance) { __instance.burnsFor = float.PositiveInfinity; __instance.beenBurningFor = 0f; } } [HarmonyPatch(typeof(CharacterAfflictions), "UpdateNormalStatuses")] private class Patch_UpdateNormalStatuses { private static readonly Dictionary<CharacterAfflictions, Character> characterCache = new Dictionary<CharacterAfflictions, Character>(); private static bool Prefix(CharacterAfflictions __instance) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) if (!characterCache.TryGetValue(__instance, out var value)) { value = ((Component)__instance).GetComponent<Character>(); if ((Object)(object)value != (Object)null) { characterCache[__instance] = value; } } if ((Object)(object)value == (Object)null || !value.IsLocal || value.data.dead) { return true; } Vector3 center = value.Center; foreach (Campfire item in campfireCache) { Vector3 val = ((Component)item).transform.position - center; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; float num = item.moraleBoostRadius * item.moraleBoostRadius; if (sqrMagnitude <= num) { return false; } } return true; } } private static List<Campfire> campfireCache = new List<Campfire>(); private static float nextCampfireScanTime = 0f; private const float campfireScanInterval = 2f; private void Update() { if (Time.time >= nextCampfireScanTime) { campfireCache = (from cf in Object.FindObjectsByType<Campfire>((FindObjectsSortMode)0) where (Object)(object)cf != (Object)null && ((Behaviour)cf).isActiveAndEnabled select cf).ToList(); nextCampfireScanTime = Time.time + 2f; } } private 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("com.Lanx.nohungerpatch"); val.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"No Hunger Near Campfire patch applied."); } } } namespace Lanx.MaxPlayerNamesPatch { [BepInPlugin("com.Lanx.maxplayersnamepatch", "Max Players Name Patch", "1.0.0")] public class MaxPlayerNamesPlugin : BaseUnityPlugin { private static GameObject playerNameUIPrefab; private static Dictionary<int, PlayerName> lanxCustomPlayerNames = new Dictionary<int, PlayerName>(); private 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("com.Lanx.maxplayersnamepatch"); val.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Lanx Max Player Name Patch initialized."); } private void Update() { //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_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_008e: 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) foreach (KeyValuePair<int, PlayerName> lanxCustomPlayerName in lanxCustomPlayerNames) { CharacterInteractible characterInteractable = lanxCustomPlayerName.Value.characterInteractable; if (!((Object)(object)characterInteractable == (Object)null)) { Camera value = Traverse.Create((object)MainCamera.instance).Field<Camera>("cam").Value; if (!((Object)(object)value == (Object)null)) { Vector3 val = ((Component)characterInteractable).transform.position + Vector3.up * 2f; ((Component)lanxCustomPlayerName.Value).transform.position = value.WorldToScreenPoint(val); } } } } [HarmonyPatch(typeof(UIPlayerNames), "Init")] [HarmonyPrefix] public static bool Init_Prefix(UIPlayerNames __instance, CharacterInteractible characterInteractable, ref int __result) { int instanceID = ((Object)characterInteractable).GetInstanceID(); if (lanxCustomPlayerNames.ContainsKey(instanceID)) { __result = instanceID; return false; } if ((Object)(object)playerNameUIPrefab == (Object)null) { FieldInfo field = typeof(UIPlayerNames).GetField("playerNameText", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field == null) { return true; } if (!(field.GetValue(__instance) is PlayerName[] array) || array.Length == 0) { return true; } playerNameUIPrefab = Object.Instantiate<GameObject>(((Component)array[0]).gameObject); playerNameUIPrefab.SetActive(false); } GameObject val = Object.Instantiate<GameObject>(playerNameUIPrefab, ((Component)__instance).transform); val.SetActive(true); PlayerName component = val.GetComponent<PlayerName>(); component.characterInteractable = characterInteractable; ((TMP_Text)component.text).text = characterInteractable.GetName(); lanxCustomPlayerNames[instanceID] = component; __result = instanceID; return false; } [HarmonyPatch(typeof(UIPlayerNames), "UpdateName")] [HarmonyPrefix] public static bool UpdateName_Prefix(UIPlayerNames __instance, int index, Vector3 position, bool visible, int speakingAmplitude) { //IL_0051: 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 (!lanxCustomPlayerNames.TryGetValue(index, out var value)) { return true; } Camera value2 = Traverse.Create((object)MainCamera.instance).Field<Camera>("cam").Value; if ((Object)(object)value2 == (Object)null) { return true; } ((Component)value).transform.position = value2.WorldToScreenPoint(position); if (visible) { ((Component)value).gameObject.SetActive(true); value.group.alpha = Mathf.MoveTowards(value.group.alpha, 1f, Time.deltaTime * 5f); if (Object.op_Implicit((Object)(object)value.characterInteractable) && AudioLevels.GetPlayerLevel(((MonoBehaviourPun)value.characterInteractable.character).photonView.OwnerActorNr) == 0f) { value.audioImage.sprite = __instance.mutedAudioSprite; } else if (speakingAmplitude > 0) { value.audioImage.sprite = __instance.audioSprites[Mathf.Clamp(speakingAmplitude, 0, __instance.audioSprites.Length - 1)]; value.audioImageTimeout = __instance.audioImageTimeoutMax; } else { PlayerName obj = value; obj.audioImageTimeout -= Time.deltaTime; if (value.audioImageTimeout <= 0f) { value.audioImage.sprite = __instance.audioSprites[0]; } } } else { value.group.alpha = Mathf.MoveTowards(value.group.alpha, 0f, Time.deltaTime * 5f); if (value.group.alpha < 0.01f) { ((Component)value).gameObject.SetActive(false); } } return false; } [HarmonyPatch(typeof(UIPlayerNames), "DisableName")] [HarmonyPrefix] public static bool DisableName_Prefix(UIPlayerNames __instance, int index) { if (lanxCustomPlayerNames.TryGetValue(index, out var value)) { ((Component)value).gameObject.SetActive(false); return false; } return true; } } }