Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of REPORoles Classic v2.2.3
RepoRoles_Classic.dll
Decompiled 4 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.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 System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using MenuLib; using MenuLib.MonoBehaviors; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using R.E.P.O.Roles; using R.E.P.O.Roles.patches; using REPOLib; using REPOLib.Modules; using Repo_Roles; using TMPro; using Unity.VisualScripting; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("REPO Roles Classic")] [assembly: AssemblyDescription("REPO Roles Mod for R.E.P.O.! Originally developed by KingRobin72, updated by R3 Labs.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("KingRobin72, R3Labs")] [assembly: AssemblyProduct("REPO Roles Classic")] [assembly: AssemblyCopyright("")] [assembly: ComVisible(false)] [assembly: Guid("b55829e7-8346-4258-b5db-23566f7af06b")] [assembly: AssemblyFileVersion("2.2.3")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.2.3.0")] [module: UnverifiableCode] 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 R.E.P.O.Roles { public class ClassManager { private Random rnd = new Random(); public int chosenRoleId; private StrengthManager strManager = new StrengthManager(); public string chosenRole; public int roleAmount = 10; public RepoRoles repoRoles = new RepoRoles(); public ReaperManager rMan; public readonly Harmony harmonyPatcher = new Harmony("patches.reporoles.mod"); public static int stackKills; public static bool isTank; public static bool isScout; private string[] roleNames = new string[11] { "Random", "Runner", "Tank", "Gambler", "Strongman", "Ranged Looter", "Athletic", "Mage", "Reaper", "Scout", "Regular" }; public int genGamblerEffectNr() { return rnd.Next(0, 5); } public object[] genGamblerEffects() { string[] array = new string[5] { "You walk faster", "You have more stamina", "You have more health", "You\u00b4re stronger", "You jump higher" }; string[] array2 = new string[5] { "you walk slower", "you have less stamina", "you have less health", "you\u00b4re weaker", "you don\u00b4t jump as high" }; int num = genGamblerEffectNr(); int num2 = genGamblerEffectNr(); while (num == num2) { num = genGamblerEffectNr(); num2 = genGamblerEffectNr(); } string text = array[num]; string text2 = array2[num2]; string text3 = RepoRoles.customRoleDecGambler.Value + " " + text + " but " + text2 + "!"; return new object[3] { text3, num, num2 }; } public void assignRoleFromConfig(PlayerController __instance) { string value = RepoRoles.savedRole.Value; if (value == "" || value == "Random") { chosenRoleId = rnd.Next(1, roleAmount + 1); RepoRoles.Logger.LogInfo((object)"Rolling random role..."); } else { chosenRoleId = Array.IndexOf(roleNames, value); } assignRole(chosenRoleId, __instance); } private void modifyStrength(string steamID, float newStrength) { if (!SemiFunc.IsMultiplayer()) { PlayerAvatar.instance.physGrabber.grabStrength = newStrength; return; } PunManager.instance.photonView.RPC("setStrengthRPC", (RpcTarget)0, new object[2] { steamID, newStrength }); } private void setHealth(string steamID, int maxHealth, int health) { if (!SemiFunc.IsMultiplayer()) { PlayerAvatar.instance.playerHealth.health = health; PlayerAvatar.instance.playerHealth.maxHealth = maxHealth; return; } PunManager.instance.photonView.RPC("setHealthRPC", (RpcTarget)0, new object[3] { steamID, maxHealth, health }); } public void setReaperStatus(string steamID, bool isReaper) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown if (!SemiFunc.IsMultiplayer()) { ((Component)PlayerAvatar.instance).GetComponent<ReaperManager>().isReaper = isReaper; } else if ((Object)PlayerAvatar.instance.photonView != (Object)null && !((Object)(object)RunManager.instance == (Object)null) && !((Object)(object)RunManager.instance.levelCurrent == (Object)null) && RunManager.instance.levels.Contains(RunManager.instance.levelCurrent) && (Object)(object)PlayerAvatar.instance != (Object)null && (Object)(object)PlayerAvatar.instance.photonView != (Object)null) { PlayerAvatar.instance.photonView.RPC("setReaperStatusRPC", (RpcTarget)0, new object[2] { steamID, isReaper }); RepoRoles.Logger.LogInfo((object)$"[CsMr] setReaperStatus: sent RPC for {steamID}, setTo={isReaper}"); } } public void assignRole(int roleId, PlayerController __instance) { //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_04f9: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Unknown result type (might be due to invalid IL or missing references) //IL_0941: Unknown result type (might be due to invalid IL or missing references) //IL_0946: Unknown result type (might be due to invalid IL or missing references) //IL_0964: Unknown result type (might be due to invalid IL or missing references) //IL_0996: Unknown result type (might be due to invalid IL or missing references) //IL_099b: Unknown result type (might be due to invalid IL or missing references) //IL_0a81: Unknown result type (might be due to invalid IL or missing references) //IL_0a86: Unknown result type (might be due to invalid IL or missing references) //IL_0aa4: Unknown result type (might be due to invalid IL or missing references) //IL_0ad6: Unknown result type (might be due to invalid IL or missing references) //IL_0adb: Unknown result type (might be due to invalid IL or missing references) //IL_0bc4: Unknown result type (might be due to invalid IL or missing references) //IL_0bc9: Unknown result type (might be due to invalid IL or missing references) //IL_0be7: Unknown result type (might be due to invalid IL or missing references) //IL_0c0a: Unknown result type (might be due to invalid IL or missing references) //IL_0c0f: Unknown result type (might be due to invalid IL or missing references) //IL_0eed: Unknown result type (might be due to invalid IL or missing references) //IL_0ef2: Unknown result type (might be due to invalid IL or missing references) //IL_0f10: Unknown result type (might be due to invalid IL or missing references) //IL_0f42: Unknown result type (might be due to invalid IL or missing references) //IL_0f47: Unknown result type (might be due to invalid IL or missing references) //IL_1031: Unknown result type (might be due to invalid IL or missing references) //IL_1036: Unknown result type (might be due to invalid IL or missing references) //IL_1059: Unknown result type (might be due to invalid IL or missing references) //IL_1081: Unknown result type (might be due to invalid IL or missing references) //IL_10b3: Unknown result type (might be due to invalid IL or missing references) //IL_10b8: Unknown result type (might be due to invalid IL or missing references) //IL_118b: Unknown result type (might be due to invalid IL or missing references) //IL_1190: Unknown result type (might be due to invalid IL or missing references) //IL_11ae: Unknown result type (might be due to invalid IL or missing references) //IL_11d1: Unknown result type (might be due to invalid IL or missing references) //IL_11d6: Unknown result type (might be due to invalid IL or missing references) //IL_0d57: Unknown result type (might be due to invalid IL or missing references) //IL_0d5c: Unknown result type (might be due to invalid IL or missing references) //IL_0d88: Unknown result type (might be due to invalid IL or missing references) //IL_0da7: Unknown result type (might be due to invalid IL or missing references) //IL_0ddd: Unknown result type (might be due to invalid IL or missing references) //IL_0de2: Unknown result type (might be due to invalid IL or missing references) //IL_07cc: Unknown result type (might be due to invalid IL or missing references) //IL_07d1: Unknown result type (might be due to invalid IL or missing references) //IL_07ea: Unknown result type (might be due to invalid IL or missing references) //IL_07ef: Unknown result type (might be due to invalid IL or missing references) //IL_0813: Unknown result type (might be due to invalid IL or missing references) RepoRoles.Update_ManaRegeneration(); RepoRoles.Update_ScoutCooldown(); float moveSpeed = __instance.MoveSpeed; float sprintSpeed = __instance.SprintSpeed; float crouchSpeed = __instance.CrouchSpeed; float jumpForce = __instance.JumpForce; float energyStart = __instance.EnergyStart; float energyCurrent = __instance.EnergyCurrent; float grabStrength = PlayerAvatar.instance.physGrabber.grabStrength; float grabRange = PlayerAvatar.instance.physGrabber.grabRange; int num = (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(PlayerAvatar.instance.playerHealth); int num2 = (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth); if ((Object)((Component)PlayerAvatar.instance).GetComponent<ReaperManager>() != (Object)null) { rMan = ((Component)PlayerAvatar.instance).GetComponent<ReaperManager>(); } else { RepoRoles.Logger.LogError((object)"Failed to get Reaper Manager! Please contact the mod developer about this."); } string text = SemiFunc.PlayerGetName(PlayerAvatar.instance); string text2 = SemiFunc.PlayerGetSteamID(PlayerAvatar.instance); stackKills = 0; guiManager.isMage = false; isTank = false; setReaperStatus(PlayerController.instance.playerSteamID, isReaper: false); isScout = false; if (!SemiFunc.RunIsLevel() || SemiFunc.RunIsShop()) { return; } if (!RepoRoles.enableRunner.Value && !RepoRoles.enableTank.Value && !RepoRoles.enableGambler.Value && !RepoRoles.enableStrongman.Value && !RepoRoles.enableRL.Value && !RepoRoles.enableAthletic.Value && !RepoRoles.enableMage.Value && !RepoRoles.enableReaper.Value && !RepoRoles.enableScout.Value && !RepoRoles.enableRegular.Value) { RepoRoles.Logger.LogError((object)"WARNING! You disabled all roles in the config file. You will not get any roles until you change it back."); return; } if (RepoRoles.showGUIAtStart.Value) { guiManager.showGUI = true; } else { guiManager.showGUI = false; } harmonyPatcher.PatchAll(typeof(PunManagerPatch)); if (roleId <= 0) { RepoRoles.Logger.LogWarning((object)"Unable to find RoleId! Please contact the mod developer."); return; } switch (roleId) { case 1: if (!RepoRoles.enableRunner.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogInfo((object)("Assigning role " + RepoRoles.customRoleNameRunner.Value + ".")); __instance.CrouchSpeed = crouchSpeed * 1.5f; __instance.MoveSpeed = moveSpeed * 1.5f; __instance.SprintSpeed = sprintSpeed * 1.5f; __instance.EnergyStart = energyStart * 1.5f; __instance.EnergyCurrent = energyCurrent * 1.5f; RepoRoles.GUIinstance.text = RepoRoles.customRoleNameRunner.Value; RepoRoles.GUIinstance.color = new Color(0.973f, 1f, 0.196f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecRunner.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0.973f, 1f, 0.196f); break; case 2: if (!RepoRoles.enableTank.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogInfo((object)("Assigning role " + RepoRoles.customRoleNameTank.Value + ".")); setHealth(PlayerController.instance.playerSteamID, num * 2, num2 * 2); __instance.CrouchSpeed = crouchSpeed * 0.9f; __instance.MoveSpeed = moveSpeed * 0.9f; __instance.SprintSpeed = sprintSpeed * 0.9f; isTank = true; RepoRoles.GUIinstance.text = RepoRoles.customRoleNameTank.Value; RepoRoles.GUIinstance.color = Color.gray; RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecTank.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = Color.gray; break; case 3: { if (!RepoRoles.enableGambler.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogInfo((object)("Assigning role " + RepoRoles.customRoleNameGambler.Value + ".")); object[] array = genGamblerEffects(); if ((int)array[1] == 0) { __instance.CrouchSpeed = crouchSpeed * 1.3f; __instance.MoveSpeed = moveSpeed * 1.3f; __instance.SprintSpeed = sprintSpeed * 1.3f; } else if ((int)array[1] == 1) { __instance.EnergyStart = energyStart * 1.8f; __instance.EnergyCurrent = energyCurrent * 1.8f; } else if ((int)array[1] == 2) { setHealth(PlayerController.instance.playerSteamID, (int)((double)num * 1.8), (int)((double)num2 * 1.8)); } else if ((int)array[1] == 3) { modifyStrength(PlayerController.instance.playerSteamID, grabStrength * 1.3f); } else if ((int)array[1] == 4) { __instance.JumpForce = jumpForce * 1.5f; } if ((int)array[2] == 0) { __instance.CrouchSpeed = crouchSpeed * 0.8f; __instance.MoveSpeed = moveSpeed * 0.8f; __instance.SprintSpeed = sprintSpeed * 0.8f; } else if ((int)array[2] == 1) { __instance.EnergyStart = energyStart * 0.8f; __instance.EnergyCurrent = energyCurrent * 0.8f; } else if ((int)array[2] == 2) { setHealth(PlayerController.instance.playerSteamID, (int)((double)num * 0.8), (int)((double)num2 * 0.8)); } else if ((int)array[2] == 3) { modifyStrength(PlayerController.instance.playerSteamID, grabStrength * 0.8f); } else if ((int)array[2] == 4) { __instance.JumpForce = jumpForce * 0.7f; } RepoRoles.GUIinstance.text = RepoRoles.customRoleNameGambler.Value; RepoRoles.GUIinstance.color = new Color(0.576f, 0f, 0.831f); RepoRoles.GUIinstance.descColor = new Color(0.576f, 0f, 0.831f); RepoRoles.GUIinstance.descText = array[0]?.ToString() + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; break; } case 4: if (!RepoRoles.enableStrongman.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameStrongman.Value + ".")); RepoRoles.Logger.LogInfo((object)("Strength before: " + grabStrength)); modifyStrength(PlayerController.instance.playerSteamID, grabStrength * 1.5f + 0.5f); RepoRoles.Logger.LogInfo((object)("Strength after: " + PhysGrabber.instance.grabStrength)); RepoRoles.GUIinstance.text = RepoRoles.customRoleNameStrongman.Value; RepoRoles.GUIinstance.color = new Color(0.761f, 0.055f, 0.055f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecStrongman.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0.761f, 0.055f, 0.055f); break; case 5: if (!RepoRoles.enableRL.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameRL.Value + ".")); PlayerAvatar.instance.physGrabber.grabRange = grabRange * 2.5f; modifyStrength(PlayerController.instance.playerSteamID, grabStrength * 1.2f); RepoRoles.GUIinstance.text = RepoRoles.customRoleNameRL.Value; RepoRoles.GUIinstance.color = new Color(0.592f, 0.969f, 0.663f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecRL.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0.592f, 0.969f, 0.663f); break; case 6: if (!RepoRoles.enableAthletic.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameAthletic.Value + ".")); modifyStrength(PlayerController.instance.playerSteamID, grabStrength * 1.4f); __instance.EnergyStart = energyStart + 20f; __instance.EnergyCurrent = energyCurrent + 20f; __instance.JumpForce = jumpForce + 3f; RepoRoles.GUIinstance.text = RepoRoles.customRoleNameAthletic.Value; RepoRoles.GUIinstance.color = Color.white; RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecAthletic.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = Color.white; break; case 7: if (!RepoRoles.enableMage.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameMage.Value + ".")); guiManager.isMage = true; guiManager.aviableMana = 8; guiManager.manaTicks = 0; ManaHelper.CreateUI(); if ((Object)(object)RepoRoles.GUIinstance != (Object)null) { RepoRoles.GUIinstance.UpdateManaDisplay(); } if ((double)num2 * 0.5 > 0.0) { setHealth(PlayerController.instance.playerSteamID, (int)((double)num * 0.5), (int)((double)num2 * 0.5)); } else { setHealth(PlayerController.instance.playerSteamID, (int)((double)num * 0.5), num2); } RepoRoles.GUIinstance.text = RepoRoles.customRoleNameMage.Value; RepoRoles.GUIinstance.color = new Color(0f, 0.384f, 1f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecMage.Value + "\nPress " + ((object)RepoRoles.showSpellsKey.Value).ToString() + " to see all your spells and press " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0f, 0.384f, 1f); break; case 8: if (!RepoRoles.enableReaper.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameReaper.Value + ".")); harmonyPatcher.PatchAll(typeof(ReaperPatch)); setReaperStatus(PlayerController.instance.playerSteamID, isReaper: true); setHealth(PlayerController.instance.playerSteamID, (int)((double)num * 1.5), (int)((double)num2 * 1.5)); RepoRoles.GUIinstance.text = RepoRoles.customRoleNameReaper.Value; RepoRoles.GUIinstance.color = new Color(0.141f, 0.6f, 0.502f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecReaper.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0.141f, 0.6f, 0.502f); break; case 9: if (!RepoRoles.enableScout.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameScout.Value + ".")); isScout = true; __instance.EnergyStart = energyStart * 2f; __instance.EnergyCurrent = energyCurrent * 2f; __instance.sprintRechargeAmount *= 2f; RepoRoles.GUIinstance.text = RepoRoles.customRoleNameScout.Value; RepoRoles.GUIinstance.color = new Color(0.902f, 0.733f, 0.11f); RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecScout.Value.Replace("[G]", "[" + ((object)RepoRoles.scoutKey.Value).ToString() + "]") + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = new Color(0.902f, 0.733f, 0.11f); break; case 10: if (!RepoRoles.enableRegular.Value) { assignRole(rnd.Next(1, roleAmount + 1), PlayerController.instance); RepoRoles.Logger.LogInfo((object)"You got assigned a new random role because this one was disabled."); break; } guiManager.ResetManaUI(); RepoRoles.Logger.LogInfo((object)"Resetting Mana UI."); RepoRoles.Logger.LogMessage((object)("Assigning role " + RepoRoles.customRoleNameRegular.Value + ".")); __instance.CrouchSpeed = crouchSpeed; __instance.MoveSpeed = moveSpeed; __instance.SprintSpeed = sprintSpeed; __instance.JumpForce = jumpForce; __instance.EnergyStart = energyStart; __instance.EnergyCurrent = energyCurrent; RepoRoles.GUIinstance.text = RepoRoles.customRoleNameRegular.Value; RepoRoles.GUIinstance.color = Color.white; RepoRoles.GUIinstance.descText = RepoRoles.customRoleDecRegular.Value + "\nPress " + ((object)RepoRoles.toggleKey.Value).ToString() + " to continue"; RepoRoles.GUIinstance.descColor = Color.white; break; } } } [HarmonyPatch(typeof(EnemyHealth))] internal static class EnemyHealthPatch { private static readonly Dictionary<int, float> processed = new Dictionary<int, float>(); private const float processedExpiry = 3f; [HarmonyPrefix] [HarmonyPatch("Hurt")] public static void Hurt_Prefix(EnemyHealth __instance, int _damage, Vector3 _hurtDirection) { if (!SemiFunc.IsMultiplayer()) { return; } if (processed.Count > 0) { float time = Time.time; List<int> list = new List<int>(processed.Keys); foreach (int item in list) { if (time - processed[item] > 3f) { processed.Remove(item); } } } if ((Object)(object)__instance == (Object)null || __instance.dead) { return; } int healthCurrent = __instance.healthCurrent; int num = healthCurrent - _damage; if (num > 0) { return; } PhotonView component = ((Component)__instance).GetComponent<PhotonView>(); int num2 = (((Object)(object)component != (Object)null) ? component.ViewID : 0); if (num2 != 0 && processed.ContainsKey(num2)) { return; } if (num2 != 0) { processed[num2] = Time.time; } string text = (((Object)(object)PlayerController.instance != (Object)null) ? PlayerController.instance.playerSteamID : string.Empty); if (PhotonNetwork.IsMasterClient) { string[] masterReapers = ReaperEventListener.GetMasterReapers(); RepoRoles.Logger.LogInfo((object)$"[EnHlPch] Master detected lethal hit by {text} pv={num2}"); if (masterReapers != null && masterReapers.Length != 0) { ReaperEvents.RaiseApplyBuffs(text, masterReapers); } } else { RepoRoles.Logger.LogInfo((object)$"[EnHlPch] Client detected lethal hit by {text} pv={num2}, requesting master"); ReaperEvents.RaiseRequestApplyBuffs(text); } } [HarmonyPostfix] [HarmonyPatch("DeathImpulseRPC")] public static void DeathImpulseRPC_Postfix(EnemyHealth __instance) { if (SemiFunc.IsMultiplayer() || (Object)(object)__instance == (Object)null || !__instance.dead) { return; } string text = (((Object)(object)PlayerController.instance != (Object)null) ? PlayerController.instance.playerSteamID : string.Empty); RepoRoles.Logger.LogInfo((object)("[EnHlPch] Singleplayer enemy death detected by " + text)); foreach (PlayerAvatar item in SemiFunc.PlayerGetAll()) { if (!((Object)(object)item == (Object)null)) { ReaperManager component = ((Component)item).GetComponent<ReaperManager>(); if ((Object)(object)component != (Object)null && component.isReaper) { component.ApplyReaperStats(item); component.kills = 0; component.enemyDeathTimer = 50; RepoRoles.Logger.LogInfo((object)("[EnHlPch] Applied singleplayer buff to " + item.steamID)); } } } } } [HarmonyPatch(typeof(PlayerAvatar))] internal static class PlayerAvatarPatch { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake_Postfix(PlayerAvatar __instance) { if (!Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent<ReaperManager>())) { ((Component)__instance).gameObject.AddComponent<ReaperManager>(); RepoRoles.Logger.LogInfo((object)("[PrArPch]: Added ReaperManager to avatar steamID=" + __instance.steamID + " pv=" + (((Object)(object)__instance.photonView != (Object)null) ? __instance.photonView.ViewID.ToString() : "null"))); } else { RepoRoles.Logger.LogInfo((object)("[PrArPch]: avatar already has ReaperManager steamID=" + __instance.steamID + " pv=" + (((Object)(object)__instance.photonView != (Object)null) ? __instance.photonView.ViewID.ToString() : "null"))); } ReaperEventListener.Ensure(); } } internal class ReaperEventListener : MonoBehaviourPunCallbacks, IOnEventCallback { private static bool _created; private static readonly HashSet<string> masterReapers = new HashSet<string>(); public static void Ensure() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!_created) { _created = true; GameObject val = new GameObject("RepoRoles_ReaperEventListener"); Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent<ReaperEventListener>(); RepoRoles.Logger.LogInfo((object)"ReaperEventListener created!"); } } public static string[] GetMasterReapers() { lock (masterReapers) { string[] array = new string[masterReapers.Count]; masterReapers.CopyTo(array); return array; } } private void OnEnable() { PhotonNetwork.AddCallbackTarget((object)this); } private void OnDisable() { PhotonNetwork.RemoveCallbackTarget((object)this); } public override void OnJoinedRoom() { lock (masterReapers) { masterReapers.Clear(); } RepoRoles.Logger.LogInfo((object)"[RpEsLr] OnJoinedRoom: cleared master registry"); } public override void OnLeftRoom() { lock (masterReapers) { masterReapers.Clear(); } RepoRoles.Logger.LogInfo((object)"[RpEsLr] OnLeftRoom: cleared master registry"); } public override void OnMasterClientSwitched(Player newMasterClient) { lock (masterReapers) { masterReapers.Clear(); } RepoRoles.Logger.LogInfo((object)"[RpEsLr] OnMasterClientSwitched: cleared master registry (will repopulate by status events)"); } public void OnEvent(EventData photonEvent) { if (photonEvent.Code == 151) { if (!(photonEvent.CustomData is object[] array) || array.Length < 2) { return; } string text = array[0] as string; if (string.IsNullOrEmpty(text)) { return; } bool flag = false; if (array[1] is bool flag2) { flag = flag2; } else if (array[1] is byte b) { flag = b != 0; } else { object obj = array[1]; if (!(obj is int)) { return; } int num = (int)obj; if (1 == 0) { return; } flag = num != 0; } if (!PhotonNetwork.IsMasterClient) { return; } lock (masterReapers) { if (flag) { if (masterReapers.Add(text)) { RepoRoles.Logger.LogInfo((object)("[RpEsLr] Master: Registered reaper " + text)); } } else if (masterReapers.Remove(text)) { RepoRoles.Logger.LogInfo((object)("[RpEsLr] Master: Unregistered reaper " + text)); } return; } } if (photonEvent.Code == 152) { if (PhotonNetwork.IsMasterClient) { string text2 = string.Empty; if (photonEvent.CustomData is object[] array2 && array2.Length != 0) { text2 = (array2[0] as string) ?? string.Empty; } string[] array3; lock (masterReapers) { array3 = new string[masterReapers.Count]; masterReapers.CopyTo(array3); } RepoRoles.Logger.LogInfo((object)$"[RpEsLr] Master: received EV_REQUEST_REAPER_BUFFS for killer={text2} reapersCount={array3.Length}"); if (array3.Length != 0) { ReaperEvents.RaiseApplyBuffs(text2, array3); } else { RepoRoles.Logger.LogInfo((object)"[RpEsLr] Master: no reapers registered - nothing to broadcast"); } } } else { if (photonEvent.Code != 150) { return; } try { if (!(photonEvent.CustomData is object[] array4) || array4.Length < 2) { return; } string arg = (array4[0] as string) ?? string.Empty; if (!(array4[1] is string[] array5)) { return; } string[] array6 = array5; RepoRoles.Logger.LogInfo((object)$"[RpEsLr] giveReaperStatsRPC: received via event from killer={arg} reapersCount={array6.Length}"); string[] array7 = array6; foreach (string text3 in array7) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(text3); if ((Object)(object)val == (Object)null) { RepoRoles.Logger.LogWarning((object)("[RpEsLr] giveReaperStatsRPC: cannot find avatar for steamID=" + text3 + " on this client")); continue; } ReaperManager component = ((Component)val).GetComponent<ReaperManager>(); if ((Object)(object)component == (Object)null) { RepoRoles.Logger.LogWarning((object)("[RpEsLr] giveReaperStatsRPC: avatar " + text3 + " has no ReaperManager on this client")); continue; } int num2 = (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(val.playerHealth); if (num2 <= 0) { RepoRoles.Logger.LogInfo((object)$"[RpEsLr] giveReaperStatsRPC: avatar {text3} is dead (health={num2}) - skipping"); continue; } if (component.enemyDeathTimer > 0) { RepoRoles.Logger.LogInfo((object)$"[RpEsLr] giveReaperStatsRPC: avatar {text3} in cooldown (enemyDeathTimer={component.enemyDeathTimer}) - skipping"); continue; } int num3 = (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(val.playerHealth); int num4 = num2; int num5 = num3 + 5; AccessTools.Field(typeof(PlayerHealth), "maxHealth").SetValue(val.playerHealth, num5); if (num4 + 30 > num5) { val.playerHealth.Heal(num5 - num4, true); } else { val.playerHealth.Heal(30, true); } component.kills = 0; component.enemyDeathTimer = 50; RepoRoles.Logger.LogInfo((object)string.Format("[RpEsLr] giveReaperStatsRPC: Applied buff to {0} (health {1} -> {2}, max {3} -> {4})", text3, num4, (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(val.playerHealth), num3, num5)); } } catch (Exception arg2) { RepoRoles.Logger.LogError((object)$"[RpEsLr]: Event handler exception: {arg2}"); } } } } internal static class ReaperEvents { public const byte EV_APPLY_REAPER_BUFFS = 150; public const byte EV_REAPER_STATUS_CHANGE = 151; public const byte EV_REQUEST_REAPER_BUFFS = 152; public static void RaiseApplyBuffs(string killerSteamID, string[] reaperSteamIDs) { //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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_0072: 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_0083: 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) if (reaperSteamIDs != null && reaperSteamIDs.Length != 0) { if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom) { RepoRoles.Logger.LogWarning((object)("[RpEs] RaiseApplyBuffs: Not in room - cannot raise event (killer='" + killerSteamID + "')")); return; } object[] array = new object[2] { killerSteamID ?? string.Empty, reaperSteamIDs }; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)1 }; SendOptions val2 = default(SendOptions); ((SendOptions)(ref val2)).Reliability = true; SendOptions val3 = val2; PhotonNetwork.RaiseEvent((byte)150, (object)array, val, val3); RepoRoles.Logger.LogInfo((object)string.Format("[RpEs] Master: Raised EV_APPLY_REAPER_BUFFS for {0} reapers (killer='{1}')", reaperSteamIDs.Length, killerSteamID ?? "unknown")); } } public static void RaiseReaperStatusChange(string steamID, bool isReaper) { //IL_005b: 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_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) if (!string.IsNullOrEmpty(steamID)) { if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom) { RepoRoles.Logger.LogWarning((object)$"[RpEs] RaiseReaperStatusChange: Not in room - skipping for {steamID} -> {isReaper}"); return; } object[] array = new object[2] { steamID, isReaper }; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)2 }; SendOptions val2 = default(SendOptions); ((SendOptions)(ref val2)).Reliability = true; SendOptions val3 = val2; PhotonNetwork.RaiseEvent((byte)151, (object)array, val, val3); RepoRoles.Logger.LogInfo((object)$"[RpEs] Raised EV_REAPER_STATUS_CHANGE for {steamID} -> {isReaper}"); } } public static void RaiseRequestApplyBuffs(string killerSteamID) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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: Expected O, but got Unknown //IL_005d: 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_006e: 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) if (string.IsNullOrEmpty(killerSteamID)) { killerSteamID = string.Empty; } if (!PhotonNetwork.IsConnected || !PhotonNetwork.InRoom) { RepoRoles.Logger.LogWarning((object)("[RpEs] RaiseRequestApplyBuffs: Not in room - skipping request for killer=" + killerSteamID)); return; } object[] array = new object[1] { killerSteamID }; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)2 }; SendOptions val2 = default(SendOptions); ((SendOptions)(ref val2)).Reliability = true; SendOptions val3 = val2; PhotonNetwork.RaiseEvent((byte)152, (object)array, val, val3); RepoRoles.Logger.LogInfo((object)("[RpEs] Raised EV_REQUEST_REAPER_BUFFS for killer=" + killerSteamID)); } } public class ReaperManager : MonoBehaviourPun { public bool isReaper; public int kills; public int enemyDeathTimer = 0; private void Start() { ReaperEventListener.Ensure(); } private void OnDestroy() { try { if ((Object)(object)((MonoBehaviourPun)this).photonView != (Object)null && ((MonoBehaviourPun)this).photonView.IsMine && ((MonoBehaviourPun)this).photonView.ViewID != 0) { PhotonNetwork.RemoveRPCs(((MonoBehaviourPun)this).photonView); } } catch (Exception arg) { RepoRoles.Logger.LogWarning((object)$"[RpMr] OnDestroy: RemoveRPCs exception: {arg}"); } } [PunRPC] public void setReaperStatusRPC(string steamID, bool isReaper) { if ((Object)(object)RunManager.instance == (Object)null || (Object)(object)RunManager.instance.levelCurrent == (Object)null) { RepoRoles.Logger.LogWarning((object)("[RpMr] setReaperStatusRPC: RunManager/level null - ignoring for " + steamID)); return; } if (!RunManager.instance.levels.Contains(RunManager.instance.levelCurrent)) { RepoRoles.Logger.LogInfo((object)("[RpMr] setReaperStatusRPC: not a runlevel - ignoring for " + steamID)); return; } PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(steamID); if ((Object)(object)val != (Object)null) { ReaperManager component = ((Component)val).GetComponent<ReaperManager>(); if ((Object)(object)component != (Object)null && component.isReaper != isReaper) { RepoRoles.Logger.LogInfo((object)$"[RpMr] setReaperStatusRPC: received for {steamID}, setTo={isReaper}"); component.isReaper = isReaper; RepoRoles.Logger.LogInfo((object)$"[RpMr] setReaperStatusRPC: Applied isReaper={isReaper} to avatar steamID={steamID}"); } } if (PhotonNetwork.IsConnected && PhotonNetwork.InRoom) { ReaperEvents.RaiseReaperStatusChange(steamID, isReaper); } else { RepoRoles.Logger.LogWarning((object)("[RpMr] setReaperStatusRPC: Not in room/connected - not notifying master for " + steamID)); } } public void OnEnemyKilled(PlayerAvatar killerAvatar) { if ((Object)(object)killerAvatar == (Object)null) { return; } string steamID = killerAvatar.steamID; if (PhotonNetwork.IsMasterClient) { string[] masterReapers = ReaperEventListener.GetMasterReapers(); RepoRoles.Logger.LogInfo((object)$"[RpMr] Master local kill: broadcasting buffs for {masterReapers.Length} reapers (killer={steamID})"); if (masterReapers.Length != 0) { ReaperEvents.RaiseApplyBuffs(steamID, masterReapers); } } else { ReaperEvents.RaiseRequestApplyBuffs(steamID); RepoRoles.Logger.LogInfo((object)("[RpMr] Client requested master to apply buffs for killer=" + steamID)); } } internal void ApplyReaperStats(PlayerAvatar avatar) { if (!((Object)(object)avatar == (Object)null)) { int num = (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(avatar.playerHealth); int num2 = (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(avatar.playerHealth); int num3 = num2 + 5; AccessTools.Field(typeof(PlayerHealth), "maxHealth").SetValue(avatar.playerHealth, num3); if (num + 30 > num3) { avatar.playerHealth.Heal(num3 - num, true); } else { avatar.playerHealth.Heal(30, true); } RepoRoles.Logger.LogInfo((object)string.Format("[RpMr] ApplyReaperStats: applied local buff to {0} (health {1} -> {2}, max {3} -> {4})", avatar.steamID, num, (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(avatar.playerHealth), num2, num3)); } } private void Update() { if (enemyDeathTimer > 0) { enemyDeathTimer--; } } } [HarmonyPatch(typeof(EnemyHealth))] internal static class ReaperPatch { [HarmonyPatch("Death")] [HarmonyPrefix] public static void PrefixMethod() { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(PlayerController.instance.playerSteamID); if (!((Object)(object)val == (Object)null)) { ReaperManager component = ((Component)val).GetComponent<ReaperManager>(); if ((Object)(object)component != (Object)null) { component.kills++; } if ((Object)(object)component != (Object)null) { component.OnEnemyKilled(val); return; } ReaperEvents.RaiseRequestApplyBuffs(val.steamID); RepoRoles.Logger.LogWarning((object)("[RpPch] PrefixMethod: killer had no ReaperManager, sent request for killer=" + val.steamID)); } } } public class ReaperSyncManager : MonoBehaviourPunCallbacks { public override void OnPlayerEnteredRoom(Player newPlayer) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(PlayerController.instance.playerSteamID); ReaperManager component = ((Component)val).GetComponent<ReaperManager>(); if ((Object)(object)component != (Object)null && component.isReaper && SemiFunc.IsMasterClientOrSingleplayer()) { RepoRoles.Logger.LogWarning((object)("Sending late-joiner Reaper status RPC to " + newPlayer.NickName)); ((MonoBehaviourPun)component).photonView.RPC("setReaperStatusRPC", newPlayer, new object[2] { PlayerController.instance.playerSteamID, true }); } } } [HarmonyPatch(typeof(TruckScreenText))] internal static class Sender { private static bool hasRanOnce; public static ClassManager manager = new ClassManager(); [HarmonyPatch("ArrowPointAtGoalLogic")] [HarmonyPrefix] private static void PrefixMethod() { if (!hasRanOnce && !SemiFunc.RunIsShop()) { manager.assignRoleFromConfig(PlayerController.instance); RepoRoles.Logger.LogInfo((object)"Successfully rolled role!"); hasRanOnce = true; } } [HarmonyPatch("Start")] [HarmonyPrefix] private static void StartPrefix() { hasRanOnce = false; } } } namespace R.E.P.O.Roles.patches { public class guiManager : MonoBehaviour { private bool lastManaPosition = true; public static bool showGUI = true; public static bool isMage = false; private static bool showSpells = false; private bool isDead = false; public string text; public Color color = Color.white; public string descText; public Color descColor = Color.white; private Texture2D _backgroundTexture; public static Texture2D manaTexture; public static Font customFont; private static AssetBundle fontBundle; public static int aviableMana = 0; public static int manaRegenRate = 0; public int speedTicker = 0; public static int manaTicks = 0; public bool speedActive; private float multiSpeed = 1.4f; private float crouchSpeedBefore; private float moveSpeedBefore; private float sprintSpeedBefore; private int overchargeMulti = 1; private bool isOvercharged = false; private int overchargeTicker = 0; private bool jumpActive = false; private float jumpOriginal; private int jumpTicker = 0; private int neededJumpTicker = 1800; private int neededSpeedTicker = 1800; private int manaUsageTicker = 0; private bool showManaUsage = false; private Texture2D textureRunner; private string manaUsageText = "Used x (- y Mana)"; private bool fontLoaded = false; private bool RunnerTextureLoaded = false; private int passiveTankRegenTicker = 0; public static AssetBundle LoadAssetBundle(string name) { AssetBundle val = null; string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); return AssetBundle.LoadFromFile(text); } public static Texture2D LoadBottleTextureFromFile() { AssetBundle val = LoadAssetBundle("REPORoles_assets1"); Texture2D result = val.LoadAsset<Texture2D>("emptyBottle.png"); val.Unload(false); return result; } public static Texture2D LoadFullBottleTextureFromFile() { AssetBundle val = LoadAssetBundle("REPORoles_assets1"); Texture2D result = val.LoadAsset<Texture2D>("filledBottle.png"); val.Unload(false); return result; } public static Texture2D LoadTextureByName(string bundleName, string assetName) { AssetBundle val = LoadAssetBundle(bundleName); Texture2D result = val.LoadAsset<Texture2D>(assetName); val.Unload(false); return result; } public static void loadFont() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown if ((Object)fontBundle == (Object)null) { fontBundle = LoadAssetBundle("REPORoles_assets1"); customFont = fontBundle.LoadAsset<Font>("font.ttf"); } if ((Object)fontBundle == (Object)null) { RepoRoles.Logger.LogError((object)"Missing Assets: Put the assets file next to the dll in your plugins folder. If this does not fix it contact us on our discord (see thunderstore description or README)"); } fontBundle.Unload(false); } private void Start() { _backgroundTexture = LoadBottleTextureFromFile(); _backgroundTexture.Apply(); manaTexture = LoadFullBottleTextureFromFile(); manaTexture.Apply(); } private void OnGUI() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_0082: 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: Expected O, but got Unknown //IL_00b3: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0175: 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_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Expected O, but got Unknown //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Expected O, but got Unknown //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_03a6: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_0454: Unknown result type (might be due to invalid IL or missing references) //IL_045a: Expected O, but got Unknown //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Expected O, but got Unknown //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Expected O, but got Unknown //IL_0522: Unknown result type (might be due to invalid IL or missing references) //IL_0545: Unknown result type (might be due to invalid IL or missing references) //IL_054c: Expected O, but got Unknown //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_058e: Unknown result type (might be due to invalid IL or missing references) //IL_05b4: Unknown result type (might be due to invalid IL or missing references) //IL_05da: Unknown result type (might be due to invalid IL or missing references) //IL_0600: Unknown result type (might be due to invalid IL or missing references) //IL_0629: Unknown result type (might be due to invalid IL or missing references) //IL_0652: Unknown result type (might be due to invalid IL or missing references) //IL_067b: Unknown result type (might be due to invalid IL or missing references) //IL_06a4: Unknown result type (might be due to invalid IL or missing references) //IL_06c7: Unknown result type (might be due to invalid IL or missing references) //IL_0707: Unknown result type (might be due to invalid IL or missing references) //IL_0712: Expected O, but got Unknown //IL_073f: Unknown result type (might be due to invalid IL or missing references) //IL_0766: Unknown result type (might be due to invalid IL or missing references) //IL_0787: Unknown result type (might be due to invalid IL or missing references) //IL_07ae: Unknown result type (might be due to invalid IL or missing references) //IL_07d5: Unknown result type (might be due to invalid IL or missing references) //IL_07fc: Unknown result type (might be due to invalid IL or missing references) //IL_0823: Unknown result type (might be due to invalid IL or missing references) //IL_084a: Unknown result type (might be due to invalid IL or missing references) //IL_0883: Unknown result type (might be due to invalid IL or missing references) //IL_0a66: Unknown result type (might be due to invalid IL or missing references) //IL_0a6b: Unknown result type (might be due to invalid IL or missing references) //IL_0a8a: Unknown result type (might be due to invalid IL or missing references) //IL_0a8f: Unknown result type (might be due to invalid IL or missing references) //IL_0aae: Unknown result type (might be due to invalid IL or missing references) //IL_0ab3: Unknown result type (might be due to invalid IL or missing references) //IL_0ad2: Unknown result type (might be due to invalid IL or missing references) //IL_0ad7: Unknown result type (might be due to invalid IL or missing references) //IL_0af7: Unknown result type (might be due to invalid IL or missing references) //IL_0afc: Unknown result type (might be due to invalid IL or missing references) //IL_0b55: Unknown result type (might be due to invalid IL or missing references) //IL_0b5c: Expected O, but got Unknown //IL_0b8f: Unknown result type (might be due to invalid IL or missing references) //IL_0b96: Expected O, but got Unknown //IL_0ba1: Unknown result type (might be due to invalid IL or missing references) //IL_0ba8: Expected O, but got Unknown //IL_0baf: Unknown result type (might be due to invalid IL or missing references) //IL_0bbc: Unknown result type (might be due to invalid IL or missing references) //IL_0bc3: Expected O, but got Unknown //IL_0bca: Unknown result type (might be due to invalid IL or missing references) //IL_0c5c: Unknown result type (might be due to invalid IL or missing references) //IL_0c68: Expected O, but got Unknown //IL_0cbd: Unknown result type (might be due to invalid IL or missing references) //IL_0cc9: Expected O, but got Unknown //IL_0d8d: Unknown result type (might be due to invalid IL or missing references) //IL_0dbb: Unknown result type (might be due to invalid IL or missing references) //IL_0de9: Unknown result type (might be due to invalid IL or missing references) //IL_0e17: Unknown result type (might be due to invalid IL or missing references) //IL_0e45: Unknown result type (might be due to invalid IL or missing references) //IL_0e73: Unknown result type (might be due to invalid IL or missing references) //IL_0ea1: Unknown result type (might be due to invalid IL or missing references) //IL_0ecf: Unknown result type (might be due to invalid IL or missing references) //IL_0ee0: Unknown result type (might be due to invalid IL or missing references) //IL_0ee7: Expected O, but got Unknown //IL_0efd: Unknown result type (might be due to invalid IL or missing references) //IL_0f0a: Unknown result type (might be due to invalid IL or missing references) //IL_0f11: Expected O, but got Unknown //IL_0f27: Unknown result type (might be due to invalid IL or missing references) //IL_0f32: Unknown result type (might be due to invalid IL or missing references) //IL_0f3e: Unknown result type (might be due to invalid IL or missing references) //IL_08bd: Unknown result type (might be due to invalid IL or missing references) //IL_08f1: Unknown result type (might be due to invalid IL or missing references) //IL_092b: Unknown result type (might be due to invalid IL or missing references) //IL_0965: Unknown result type (might be due to invalid IL or missing references) //IL_099f: Unknown result type (might be due to invalid IL or missing references) //IL_09d9: Unknown result type (might be due to invalid IL or missing references) //IL_0a13: Unknown result type (might be due to invalid IL or missing references) float num = Screen.width / 2 - 100; float num2 = Screen.height / 2 - 60; if (!fontLoaded) { loadFont(); fontLoaded = true; } if (SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop() && showGUI) { GUIStyle val = new GUIStyle(); val.fontSize = 60; val.fontStyle = (FontStyle)1; val.richText = true; val.normal.textColor = color; val.alignment = (TextAnchor)4; val.font = customFont; GUIStyle val2 = new GUIStyle(val); val2.normal.textColor = Color.black; val2.alignment = (TextAnchor)4; val2.font = customFont; float num3 = 2f; GUI.Label(new Rect(num - num3, num2, 200f, 50f), this.text, val2); GUI.Label(new Rect(num + num3, num2, 200f, 50f), this.text, val2); GUI.Label(new Rect(num, num2 - num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num, num2 + num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num - num3, num2 - num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num - num3, num2 + num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num + num3, num2 - num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num + num3, num2 + num3, 200f, 50f), this.text, val2); GUI.Label(new Rect(num, num2, 200f, 50f), this.text, val); float num4 = Screen.width / 2 - 100; float num5 = Screen.height / 2 + 40; GUIStyle val3 = new GUIStyle(); val3.fontSize = 40; val3.fontStyle = (FontStyle)1; val3.richText = true; val3.normal.textColor = color; val3.alignment = (TextAnchor)4; val3.font = customFont; GUIStyle val4 = new GUIStyle(val3); val4.normal.textColor = Color.black; val4.alignment = (TextAnchor)4; val4.font = customFont; float num6 = 2f; GUI.Label(new Rect(num4 - num6, num5, 200f, 50f), descText, val4); GUI.Label(new Rect(num4 + num6, num5, 200f, 50f), descText, val4); GUI.Label(new Rect(num4, num5 - num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4, num5 + num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4 - num6, num5 - num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4 - num6, num5 + num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4 + num6, num5 - num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4 + num6, num5 + num6, 200f, 50f), descText, val4); GUI.Label(new Rect(num4, num5, 200f, 50f), descText, val3); } if (!isMage || !SemiFunc.RunIsLevel() || SemiFunc.RunIsShop() || (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) <= 0) { return; } GUIStyle val5 = new GUIStyle(); val5.alignment = (TextAnchor)1; val5.normal.background = manaTexture; val5.font = customFont; GUIStyle val6 = new GUIStyle(); val6.alignment = (TextAnchor)1; val6.normal.background = _backgroundTexture; val6.font = customFont; if (showManaUsage && SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop() && isMage) { int num7 = Screen.width / 2 - 100; int num8 = Screen.height - 125; GUIStyle val7 = new GUIStyle(); val7.fontSize = 20; val7.fontStyle = (FontStyle)1; val7.richText = true; val7.normal.textColor = new Color(0f, 0.384f, 1f); val7.alignment = (TextAnchor)4; val7.font = customFont; GUIStyle val8 = new GUIStyle(val7); val8.normal.textColor = Color.black; val8.alignment = (TextAnchor)4; val8.font = customFont; float num9 = 1.5f; GUI.Label(new Rect((float)num7 - num9, (float)num8, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7 + num9, (float)num8, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7, (float)num8 - num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7, (float)num8 + num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7 - num9, (float)num8 - num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7 - num9, (float)num8 + num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7 + num9, (float)num8 - num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7 + num9, (float)num8 + num9, 200f, 50f), manaUsageText, val8); GUI.Label(new Rect((float)num7, (float)num8, 200f, 50f), manaUsageText, val7); } if (SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop() && isMage && RepoRoles.mageTopManaBool) { if ((Object)ManaHelper.val == (Object)null) { ManaHelper.val = GameObject.Find("Energy"); } GUI.Box(new Rect(num - 100f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num - 50f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num + 50f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num + 100f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num + 150f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num + 200f, 50f, 50f, 50f), GUIContent.none, val6); GUI.Box(new Rect(num + 250f, 50f, 50f, 50f), GUIContent.none, val6); if (aviableMana >= 1) { GUI.Box(new Rect(num - 100f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 2) { GUI.Box(new Rect(num - 50f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 3) { GUI.Box(new Rect(num, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 4) { GUI.Box(new Rect(num + 50f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 5) { GUI.Box(new Rect(num + 100f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 6) { GUI.Box(new Rect(num + 150f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 7) { GUI.Box(new Rect(num + 200f, 50f, 50f, 50f), GUIContent.none, val5); } if (aviableMana >= 8) { GUI.Box(new Rect(num + 250f, 50f, 50f, 50f), GUIContent.none, val5); } } if (showSpells && SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop()) { string text = "SPELLS"; string[] obj = new string[11] { "[", null, null, null, null, null, null, null, null, null, null }; KeyCode value = RepoRoles.healKey.Value; obj[1] = ((object)(KeyCode)(ref value)).ToString(); obj[2] = "] Heal yourself for 5 health (1 Mana)\n["; value = RepoRoles.staminaKey.Value; obj[3] = ((object)(KeyCode)(ref value)).ToString(); obj[4] = "] Regenerate your stamina to full (3 Mana)\n["; value = RepoRoles.speedKey.Value; obj[5] = ((object)(KeyCode)(ref value)).ToString(); obj[6] = "] Become faster for 30 seconds (2 Mana)\n["; value = RepoRoles.overchargeKey.Value; obj[7] = ((object)(KeyCode)(ref value)).ToString(); obj[8] = "] Boost the effectivity of spells used in the next 20 seconds (3 Mana)\n["; value = RepoRoles.jumpKey.Value; obj[9] = ((object)(KeyCode)(ref value)).ToString(); obj[10] = "] Jump higher for 30 seconds (2 Mana)"; string text2 = string.Concat(obj); float num10 = (float)Screen.width * 0.5f; float num11 = (float)Screen.height * 0.5f; float num12 = Mathf.Clamp((float)Screen.width * 0.6f, 260f, 1200f); GUIStyle val9 = new GUIStyle(); val9.richText = true; val9.wordWrap = true; val9.alignment = (TextAnchor)4; val9.font = customFont; val9.fontStyle = (FontStyle)1; GUIStyle val10 = new GUIStyle(val9); val10.wordWrap = true; GUIStyle val11 = new GUIStyle(val9); val11.normal.textColor = Color.black; GUIStyle val12 = new GUIStyle(val10); val12.normal.textColor = Color.black; int maxSize2 = Mathf.Clamp(Mathf.RoundToInt((float)Screen.height * 0.09f), 24, 120); int maxSize3 = Mathf.Clamp(Mathf.RoundToInt((float)Screen.height * 0.045f), 14, 72); int num13 = 16; int num14 = 12; float maxAllowedHeight2 = (float)Screen.height - 60f; int num15 = GetFittingFontSize(text, val9, num12, maxSize2, num13, maxAllowedHeight2); num15 = (val11.fontSize = (val9.fontSize = Mathf.Max(num13, num15 + 4))); float num18 = val9.CalcHeight(new GUIContent(text), num12); float maxAllowedHeight3 = Mathf.Max(60f, (float)Screen.height - num18 - 80f); int num19 = GetFittingFontSize(text2, val10, num12, maxSize3, num14, maxAllowedHeight3); num19 = (val10.fontSize = Mathf.Max(num14, num19 + 4)); val12.fontSize = num19; float num21 = val10.CalcHeight(new GUIContent(text2), num12); float num22 = Mathf.Clamp(Mathf.RoundToInt((float)num15 * 0.25f), 4, 14); float num23 = num18 + num22 + num21; Rect val13 = default(Rect); ((Rect)(ref val13))..ctor(num10 - num12 * 0.5f, num11 - num23 * 0.5f, num12, num23); Rect val14 = default(Rect); ((Rect)(ref val14))..ctor(((Rect)(ref val13)).x, ((Rect)(ref val13)).y, ((Rect)(ref val13)).width, num18); Rect val15 = default(Rect); ((Rect)(ref val15))..ctor(((Rect)(ref val13)).x, ((Rect)(ref val13)).y + num18 + num22, ((Rect)(ref val13)).width, num21); float num24 = Mathf.Clamp((float)Screen.height * 0.0025f, 1f, 3f); GUI.Label(new Rect(((Rect)(ref val14)).x - num24, ((Rect)(ref val14)).y, ((Rect)(ref val14)).width, ((Rect)(ref val14)).height), text, val11); GUI.Label(new Rect(((Rect)(ref val14)).x + num24, ((Rect)(ref val14)).y, ((Rect)(ref val14)).width, ((Rect)(ref val14)).height), text, val11); GUI.Label(new Rect(((Rect)(ref val14)).x, ((Rect)(ref val14)).y - num24, ((Rect)(ref val14)).width, ((Rect)(ref val14)).height), text, val11); GUI.Label(new Rect(((Rect)(ref val14)).x, ((Rect)(ref val14)).y + num24, ((Rect)(ref val14)).width, ((Rect)(ref val14)).height), text, val11); GUI.Label(new Rect(((Rect)(ref val15)).x - num24, ((Rect)(ref val15)).y, ((Rect)(ref val15)).width, ((Rect)(ref val15)).height), text2, val12); GUI.Label(new Rect(((Rect)(ref val15)).x + num24, ((Rect)(ref val15)).y, ((Rect)(ref val15)).width, ((Rect)(ref val15)).height), text2, val12); GUI.Label(new Rect(((Rect)(ref val15)).x, ((Rect)(ref val15)).y - num24, ((Rect)(ref val15)).width, ((Rect)(ref val15)).height), text2, val12); GUI.Label(new Rect(((Rect)(ref val15)).x, ((Rect)(ref val15)).y + num24, ((Rect)(ref val15)).width, ((Rect)(ref val15)).height), text2, val12); GUIStyle val16 = new GUIStyle(val9); val16.normal.textColor = new Color(0f, 0.384f, 1f); GUIStyle val17 = new GUIStyle(val10); val17.normal.textColor = new Color(0f, 0.384f, 1f); GUI.Label(val14, text, val16); GUI.Label(val15, text2, val17); } static int GetFittingFontSize(string s, GUIStyle style, float width, int maxSize, int minSize, float maxAllowedHeight) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown for (int num25 = maxSize; num25 >= minSize; num25--) { style.fontSize = num25; float num26 = style.CalcHeight(new GUIContent(s), width); if (num26 <= maxAllowedHeight) { return num25; } } return minSize; } } public void InitializeMageDisplay() { if (isMage) { if ((Object)(object)ManaHelper.val2 != (Object)null) { Object.Destroy((Object)(object)ManaHelper.val2); ManaHelper.val2 = null; ManaHelper.manaUI = null; } lastManaPosition = !RepoRoles.mageTopManaBool; UpdateManaDisplay(); if (!RepoRoles.mageTopManaBool && (Object)(object)ManaHelper.manaUI != (Object)null) { ManaHelper.manaUI.SetMana(aviableMana, 8f); } } } public static void ResetManaUI() { if ((Object)(object)ManaHelper.val2 != (Object)null) { Object.Destroy((Object)(object)ManaHelper.val2); ManaHelper.val2 = null; } ManaHelper.manaUI = null; } public void UpdateManaDisplay() { if (isMage) { if ((Object)(object)ManaHelper.val2 == (Object)null) { ManaHelper.CreateUI(); } if (RepoRoles.mageTopManaBool) { ManaHelper.ShowUI(show: false); return; } ManaHelper.ShowUI(show: true); ManaHelper.UpdateManaValue(); } } private void updateMana() { if (isMage && !RepoRoles.mageTopManaBool) { ManaHelper.UpdateManaValue(); } } private void Update() { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_0553: Unknown result type (might be due to invalid IL or missing references) //IL_0616: Unknown result type (might be due to invalid IL or missing references) if (isMage && lastManaPosition != RepoRoles.mageTopManaBool) { UpdateManaDisplay(); lastManaPosition = RepoRoles.mageTopManaBool; } if (SemiFunc.RunIsLevel() && (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) <= 0) { isDead = true; } if (!SemiFunc.RunIsLevel()) { isMage = false; if (Sender.manager != null && (Object)PlayerAvatar.instance != (Object)null) { Sender.manager.setReaperStatus(PlayerController.instance.playerSteamID, isReaper: false); } ClassManager.isTank = false; isDead = false; } if (!RepoRoles.afterDeathNewRole) { isDead = false; } if (isDead && (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) > 0 && RepoRoles.afterDeathNewRole) { Sender.manager.assignRoleFromConfig(PlayerController.instance); RepoRoles.Logger.LogInfo((object)"Assigning new role on respawn!"); isDead = false; } if (Input.GetKeyDown(RepoRoles.toggleKey.Value) && !ChatManager.instance.chatActive) { showGUI = !showGUI; } if ((int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) > 0 && isMage && !ChatManager.instance.chatActive) { if (Input.GetKeyDown(RepoRoles.showSpellsKey.Value)) { showSpells = !showSpells; } if (Input.GetKeyDown(RepoRoles.healKey.Value)) { if ((int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) + 5 * overchargeMulti < (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(PlayerAvatar.instance.playerHealth)) { if (aviableMana >= 1) { PlayerAvatar.instance.playerHealth.Heal(5 * overchargeMulti, true); aviableMana--; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Heal (-1 Mana)"; UpdateManaDisplay(); } } else if ((int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth) != (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(PlayerAvatar.instance.playerHealth) && aviableMana >= 1) { PlayerAvatar.instance.playerHealth.Heal((int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(PlayerAvatar.instance.playerHealth) - (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth), true); aviableMana--; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Heal (-1 Mana)"; UpdateManaDisplay(); } } if (Input.GetKeyDown(RepoRoles.speedKey.Value) && !speedActive) { crouchSpeedBefore = PlayerController.instance.CrouchSpeed; moveSpeedBefore = PlayerController.instance.MoveSpeed; sprintSpeedBefore = PlayerController.instance.SprintSpeed; if (aviableMana >= 2) { speedTicker = 0; speedActive = true; PlayerController.instance.CrouchSpeed = crouchSpeedBefore * multiSpeed; PlayerController.instance.MoveSpeed = moveSpeedBefore * multiSpeed; PlayerController.instance.SprintSpeed = sprintSpeedBefore * multiSpeed; aviableMana -= 2; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Speed (-2 Mana)"; UpdateManaDisplay(); if (isOvercharged) { neededSpeedTicker = 3600; } else { neededSpeedTicker = 1800; } } } if (Input.GetKeyDown(RepoRoles.overchargeKey.Value) && !isOvercharged && aviableMana >= 3) { aviableMana -= 3; isOvercharged = true; overchargeMulti = 2; overchargeTicker = 0; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Overcharge (-3 Mana)"; UpdateManaDisplay(); } if (Input.GetKeyDown(RepoRoles.jumpKey.Value) && !jumpActive) { jumpOriginal = PlayerController.instance.JumpForce; if (aviableMana >= 2) { jumpTicker = 0; jumpActive = true; PlayerController.instance.JumpForce = jumpOriginal + 3f; aviableMana -= 2; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Jump Boost (-2 Mana)"; UpdateManaDisplay(); if (isOvercharged) { neededJumpTicker = 3600; } else { neededJumpTicker = 1800; } } } if (Input.GetKeyDown(RepoRoles.staminaKey.Value) && PlayerController.instance.EnergyCurrent < PlayerController.instance.EnergyStart && aviableMana >= 3) { PlayerController.instance.EnergyCurrent = PlayerController.instance.EnergyStart; aviableMana -= 3; showManaUsage = true; manaUsageTicker = 0; manaUsageText = "Used Stamina Refill (-3 Mana)"; UpdateManaDisplay(); } } if (speedActive && speedTicker >= neededSpeedTicker) { PlayerController.instance.CrouchSpeed = crouchSpeedBefore; PlayerController.instance.MoveSpeed = moveSpeedBefore; PlayerController.instance.SprintSpeed = sprintSpeedBefore; speedActive = false; } if (jumpActive && jumpTicker >= neededJumpTicker) { PlayerController.instance.JumpForce = jumpOriginal; jumpActive = false; } if (!isMage && (Object)(object)ManaHelper.val2 != (Object)null) { Object.Destroy((Object)(object)ManaHelper.val2); ManaHelper.val2 = null; ManaHelper.manaUI = null; } } private void setHealth(string steamID, int maxHealth, int health) { if (!SemiFunc.IsMultiplayer()) { PlayerAvatar.instance.playerHealth.health = health; PlayerAvatar.instance.playerHealth.maxHealth = maxHealth; return; } PunManager.instance.photonView.RPC("setHealthRPC", (RpcTarget)0, new object[3] { steamID, maxHealth, health }); } private void FixedUpdate() { if (passiveTankRegenTicker < 250 && ClassManager.isTank && SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop() && !isDead) { passiveTankRegenTicker++; } if (passiveTankRegenTicker >= 250 && SemiFunc.RunIsLevel() && !SemiFunc.RunIsShop() && ClassManager.isTank) { passiveTankRegenTicker = 0; int num = (int)AccessTools.Field(typeof(PlayerHealth), "maxHealth").GetValue(PlayerAvatar.instance.playerHealth); int num2 = (int)AccessTools.Field(typeof(PlayerHealth), "health").GetValue(PlayerAvatar.instance.playerHealth); if (num2 < num) { setHealth(PlayerController.instance.playerSteamID, num, num2 + 1); } } if (overchargeTicker >= 1200) { isOvercharged = false; overchargeMulti = 1; } if (isOvercharged) { overchargeTicker++; } manaUsageTicker++; speedTicker++; jumpTicker++; if (manaUsageTicker >= 420) { showManaUsage = false; } if (aviableMana < 8) { manaTicks++; } if (manaTicks >= 1300 - manaRegenRate * 120 && isMage && aviableMana < 8) { aviableMana++; manaTicks = 0; UpdateManaDisplay(); } } } public class HealthManager : MonoBehaviour { internal PhotonView photonView; private void Start() { photonView = ((Component)this).GetComponent<PhotonView>(); } [PunRPC] internal void setHealthRPC(string steamID, int maxHealth, int health) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(steamID); if ((Object)(object)val != (Object)null) { val.playerHealth.maxHealth = maxHealth; val.playerHealth.health = health; } } } public class ManaHelper : MonoBehaviour { public static GameObject val; public static GameObject val2; public static ManaUI manaUI; public static void CreateUI() { //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)val2 != (Object)null) { return; } ManaHelper.val = GameObject.Find("Energy"); if ((Object)(object)ManaHelper.val == (Object)null) { RepoRoles.Logger.LogError((object)"Could not find base 'Energy' UI. Mana UI cannot be created."); return; } val2 = Object.Instantiate<GameObject>(ManaHelper.val, ManaHelper.val.transform.parent); if ((Object)(object)val2 == (Object)null) { RepoRoles.Logger.LogError((object)"Failed to instantiate Mana UI."); return; } ((Object)val2).name = "Mana"; Transform transform = val2.transform; transform.localPosition -= new Vector3(0f, 33f, 0f); RemoveProblematicComponents(val2); TextMeshProUGUI[] componentsInChildren = val2.GetComponentsInChildren<TextMeshProUGUI>(true); foreach (TextMeshProUGUI val in componentsInChildren) { if ((Object)(object)val != (Object)null) { ((Graphic)val).color = new Color(0f, 0.384f, 1f); } } SetManaIcon(val2); manaUI = val2.AddComponent<ManaUI>(); val2.SetActive(false); RepoRoles.Logger.LogInfo((object)"Mana UI created successfully"); } private static void RemoveProblematicComponents(GameObject uiObject) { EnergyUI component = uiObject.GetComponent<EnergyUI>(); if ((Object)(object)component != (Object)null) { Object.DestroyImmediate((Object)(object)component); } SemiUI component2 = uiObject.GetComponent<SemiUI>(); if ((Object)(object)component2 != (Object)null) { Object.DestroyImmediate((Object)(object)component2); } } private static void SetManaIcon(GameObject uiObject) { //IL_002d: 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_0066: Unknown result type (might be due to invalid IL or missing references) Texture2D manaTexture = guiManager.manaTexture; if (!((Object)(object)manaTexture == (Object)null)) { Sprite sprite = Sprite.Create(manaTexture, new Rect(0f, 0f, (float)((Texture)manaTexture).width, (float)((Texture)manaTexture).height), new Vector2(0.5f, 0.5f)); Image componentInChildren = uiObject.GetComponentInChildren<Image>(true); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.sprite = sprite; ((Graphic)componentInChildren).color = Color.white; } } } public static void ShowUI(bool show) { if ((Object)(object)val2 != (Object)null) { val2.SetActive(show); } } public static void UpdateManaValue() { if ((Object)(object)manaUI != (Object)null && guiManager.isMage) { manaUI.SetMana(guiManager.aviableMana, 8f); } } } public class ManaUI : MonoBehaviour { public TextMeshProUGUI textMana; public TextMeshProUGUI textManaMax; public static ManaUI instance; private RectTransform rectTransform; private Image manaImage; private void Start() { instance = this; rectTransform = ((Component)this).GetComponent<RectTransform>(); textMana = ((Component)this).GetComponentInChildren<TextMeshProUGUI>(); Transform val = ((Component)this).transform.Find("EnergyMax"); if ((Object)(object)val != (Object)null) { textManaMax = ((Component)val).GetComponent<TextMeshProUGUI>(); } else { TextMeshProUGUI[] componentsInChildren = ((Component)this).GetComponentsInChildren<TextMeshProUGUI>(); if (componentsInChildren.Length > 1) { textManaMax = componentsInChildren[1]; } } manaImage = ((Component)this).GetComponentInChildren<Image>(); if (guiManager.isMage) { SetMana(guiManager.aviableMana, 8f); } RepoRoles.Logger.LogInfo((object)"ManaUI initialized successfully"); } private void Update() { if (guiManager.isMage && (Object)(object)textMana != (Object)null) { ((TMP_Text)textMana).text = Mathf.Ceil((float)guiManager.aviableMana).ToString(); } } public void SetMana(float mana, float maxMana) { if ((Object)(object)textMana == (Object)null || (Object)(object)textManaMax == (Object)null) { textMana = ((Component)this).GetComponentInChildren<TextMeshProUGUI>(); Transform val = ((Component)this).transform.Find("EnergyMax"); if ((Object)(object)val != (Object)null) { textManaMax = ((Component)val).GetComponent<TextMeshProUGUI>(); } } if ((Object)(object)textMana != (Object)null) { ((TMP_Text)textMana).text = Mathf.Ceil(mana).ToString(); } if ((Object)(object)textManaMax != (Object)null) { ((TMP_Text)textManaMax).text = $"<b>/</b>{Mathf.Ceil(maxMana)}"; } } } [HarmonyPatch(typeof(ShopManager))] public static class ShopManagerPatch { [HarmonyPatch("GetAllItemsFromStatsManager")] [HarmonyPostfix] private static void GetAllItemsFromStatsManagerPostfix(ShopManager __instance) { try { if (!SemiFunc.IsMultiplayer() || SemiFunc.IsMasterClientOrSingleplayer()) { RepoRoles.Logger.LogInfo((object)$"ShopManagerPatch: Filtering upgrades (Master: {SemiFunc.IsMasterClientOrSingleplayer()})"); List<Item> allValidUpgrades = GetAllValidUpgrades(__instance); FilterAndMaintainUpgradeCount(__instance.potentialItemUpgrades, allValidUpgrades); __instance.potentialItems.RemoveAll((Item item) => (Object)(object)item != (Object)null && item.itemName != null && IsDisabledUpgrade(item)); } } catch (Exception arg) { RepoRoles.Logger.LogError((object)$"Error in ShopManager patch: {arg}"); } } private static List<Item> GetAllValidUpgrades(ShopManager shopManager) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 List<Item> list = new List<Item>(); foreach (Item item in shopManager.potentialItems.Concat(shopManager.potentialItemUpgrades)) { if (!((Object)(object)item == (Object)null) && item.itemName != null && (int)item.itemType == 3 && !IsDisabledUpgrade(item)) { list.Add(item); } } return list.Distinct().ToList(); } private static void FilterAndMaintainUpgradeCount(List<Item> upgradeList, List<Item> validUpgradesPool) { if (upgradeList == null) { return; } List<Item> list = new List<Item>(); foreach (Item upgrade in upgradeList) { if ((Object)(object)upgrade == (Object)null || upgrade.itemName == null) { list.Add(upgrade); } else if (IsDisabledUpgrade(upgrade)) { if (validUpgradesPool.Count > 0) { int index = Random.Range(0, validUpgradesPool.Count); list.Add(validUpgradesPool[index]); RepoRoles.Logger.LogInfo((object)("Replaced " + upgrade.itemName + " with " + validUpgradesPool[index].itemName)); } } else { list.Add(upgrade); } } upgradeList.Clear(); upgradeList.AddRange(list); } private static bool IsDisabledUpgrade(Item item) { if ((Object)(object)item == (Object)null || item.itemName == null) { return false; } bool flag = item.itemName.Contains("Mana Regeneration Upgrade"); bool flag2 = item.itemName.Contains("Scout Cooldown Upgrade"); if (!flag && !flag2) { return false; } if (!RepoRoles.enableRoleUpgrades.Value) { return true; } if (flag && !RepoRoles.enableMage.Value) { return true; } if (flag2 && !RepoRoles.enableScout.Value) { return true; } return false; } } [HarmonyPatch(typeof(StatsManager))] internal static class StatsManagerPatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void StatsPrefix(StatsManager __instance) { __instance.dictionaryOfDictionaries.Add("playerUpgradeManaRegeneration", new Dictionary<string, int>()); __instance.dictionaryOfDictionaries.Add("playerUpgradeScoutCooldownReduction", new Dictionary<string, int>()); } } public class StrengthManager : MonoBehaviour { internal PhotonView photonView; private void Start() { photonView = ((Component)this).GetComponent<PhotonView>(); } [PunRPC] internal void setStrengthRPC(string steamID, float newStrength) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(steamID); if ((Object)(object)val != (Object)null) { val.physGrabber.grabStrength = newStrength; } } } public class Upgrader : MonoBehaviour { public ItemToggle _itemToggle; private void Start() { _itemToggle = ((Component)this).GetComponent<ItemToggle>(); } public static void UpdateStat(int amount, string steamId, string stat) { Dictionary<string, int> dictionary = StatsManager.instance.dictionaryOfDictionaries[stat]; if (!dictionary.ContainsKey(steamId)) { dictionary[steamId] = 0; } dictionary[steamId] += amount; } public static int GetStat(string steamId, string upgradeName) { Dictionary<string, int> dictionary = StatsManager.instance.dictionaryOfDictionaries[upgradeName]; int value; return dictionary.TryGetValue(steamId, out value) ? value : 0; } public void upgradeManaRegen() { string steamId = SemiFunc.PlayerGetSteamID(SemiFunc.PlayerAvatarGetFromPhotonID(_itemToggle.playerTogglePhotonID)); RepoRoles.Logger.LogInfo((object)("Your Mana Regen before: " + GetStat(steamId, "playerUpgradeManaRegeneration"))); UpdateStat(1, steamId, "playerUpgradeManaRegeneration"); RepoRoles.Update_ManaRegeneration(); RepoRoles.Logger.LogInfo((object)("Your Mana Regen after: " + GetStat(steamId, "playerUpgradeManaRegeneration"))); } public void upgradeScoutCooldown() { string steamId = SemiFunc.PlayerGetSteamID(SemiFunc.PlayerAvatarGetFromPhotonID(_itemToggle.playerTogglePhotonID)); RepoRoles.Logger.LogInfo((object)("Your Scout Cooldown Upgrades before: " + GetStat(steamId, "playerUpgradeScoutCooldownReduction"))); UpdateStat(1, steamId, "playerUpgradeScoutCooldownReduction"); RepoRoles.Update_ScoutCooldown(); RepoRoles.Logger.LogInfo((object)("Your Scout Cooldown Upgrades after: " + GetStat(steamId, "playerUpgradeScoutCooldownReduction"))); } } } namespace Repo_Roles { public static class MyPluginInfo { public const string PLUGIN_GUID = "R3Labs.Repo_Roles.Classic"; public const string PLUGIN_NAME = "REPO Roles Classic"; public const string PLUGIN_VERSION = "2.2.3"; } [HarmonyPatch(typeof(PunManager))] internal static class PunManagerPatch { [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(PunManager __instance) { if ((Object)(object)ComponentHolderProtocol.GetComponent<StrengthManager>((Object)(object)__instance) == (Object)null) { ComponentHolderProtocol.AddComponent<StrengthManager>((Object)(object)__instance); } if ((Object)(object)ComponentHolderProtocol.GetComponent<HealthManager>((Object)(object)__instance) == (Object)null) { ComponentHolderProtocol.AddComponent<HealthManager>((Object)(object)__instance); } if ((Object)(object)ComponentHolderProtocol.GetComponent<ScoutMarker>((Object)(object)__instance) == (Object)null) { ComponentHolderProtocol.AddComponent<ScoutMarker>((Object)(object)__instance); } } } [BepInPlugin("R3Labs.Repo_Roles.Classic", "REPO Roles Classic", "2.2.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class RepoRoles : BaseUnityPlugin { public readonly Harmony harmony = new Harmony("Repo_Roles"); public static Font newFont; public static guiManager GUIinstance; public static ConfigEntry<KeyCode> toggleKey; public static ConfigEntry<KeyCode> showSpellsKey; public static ConfigEntry<KeyCode> healKey; public static ConfigEntry<KeyCode> speedKey; public static ConfigEntry<KeyCode> overchargeKey; public static ConfigEntry<KeyCode> jumpKey; public static ConfigEntry<KeyCode> staminaKey; public static ConfigEntry<KeyCode> scoutKey; public static ConfigEntry<string> customRoleNameRunner; public static ConfigEntry<string> customRoleNameTank; public static ConfigEntry<string> customRoleNameGambler; public static ConfigEntry<string> customRoleNameStrongman; public static ConfigEntry<string> customRoleNameRL; public static ConfigEntry<string> customRoleNameAthletic; public static ConfigEntry<string> customRoleNameMage; public static ConfigEntry<string> customRoleNameReaper; public static ConfigEntry<string> customRoleNameScout; public static ConfigEntry<string> customRoleNameRegular; public static ConfigEntry<string> customRoleDecRunner; public static ConfigEntry<string> customRoleDecTank; public static ConfigEntry<string> customRoleDecGambler; public static ConfigEntry<string> customRoleDecStrongman; public static ConfigEntry<string> customRoleDecRL; public static ConfigEntry<string> customRoleDecAthletic; public static ConfigEntry<string> customRoleDecMage; public static ConfigEntry<string> customRoleDecReaper; public static ConfigEntry<string> customRoleDecScout; public static ConfigEntry<string> customRoleDecRegular; public static ConfigEntry<string> savedRole; public static ConfigEntry<bool> enableRoleUpgrades; public static ConfigEntry<bool> assignRoleAfterRevive; public static ConfigEntry<bool> mageTopManaConf; public static ConfigEntry<bool> showGUIAtStart; public ConfigDefinition showGUIAtStartDef = new ConfigDefinition("GUI", "Show GUI when being assigned a role"); public ConfigDefinition mageTopManaDef = new ConfigDefinition("Role", "Place where mana is shown"); public ConfigDefinition def = new ConfigDefinition("GUI", "GUI Toggle Key"); public ConfigDefinition scoutButtonDef = new ConfigDefinition("GUI", "Activate Scout Ability"); public ConfigDefinition customRoleNameRunnerDef = new ConfigDefinition("Role Names", "Runner Name"); public ConfigDefinition customRoleNameTankDef = new ConfigDefinition("Role Names", "Tank Name"); public ConfigDefinition customRoleNameGamblerDef = new ConfigDefinition("Role Names", "Gambler Name"); public ConfigDefinition customRoleNameStrongmanDef = new ConfigDefinition("Role Names", "Strongman Name"); public ConfigDefinition customRoleNameRLDef = new ConfigDefinition("Role Names", "Ranged Looter Name"); public ConfigDefinition customRoleNameAthleticDef = new ConfigDefinition("Role Names", "Athletic Name"); public ConfigDefinition customRoleNameMageDef = new ConfigDefinition("Role Names", "Mage Name"); public ConfigDefinition customRoleNameReaperDef = new ConfigDefinition("Role Names", "Reaper Name"); public ConfigDefinition customRoleNameScoutDef = new ConfigDefinition("Role Names", "Scout Name"); public ConfigDefinition customRoleNameRegularDef = new ConfigDefinition("Role Names", "Regular Name"); public ConfigDefinition customRoleDesRunnerDef = new ConfigDefinition("Role Descriptions", "Runner Description"); public ConfigDefinition customRoleDesTankDef = new ConfigDefinition("Role Descriptions", "Tank Description"); public ConfigDefinition customRoleDesGamblerDef = new ConfigDefinition("Role Descriptions", "Gambler Description"); public ConfigDefinition customRoleDesStrongmanDef = new ConfigDefinition("Role Descriptions", "Strongman Description"); public ConfigDefinition customRoleDesRLDef = new ConfigDefinition("Role Descriptions", "Ranged Looter Description"); public ConfigDefinition customRoleDesAthleticDef = new ConfigDefinition("Role Descriptions", "Athletic Description"); public ConfigDefinition customRoleDesMageDef = new ConfigDefinition("Role Descriptions", "Mage Description"); public ConfigDefinition customRoleDesReaperDef = new ConfigDefinition("Role Descriptions", "Reaper Description"); public ConfigDefinition customRoleDesScoutDef = new ConfigDefinition("Role Descriptions", "Scout Description"); public ConfigDefinition customRoleDesRegularDef = new ConfigDefinition("Role Descriptions", "Regular Description"); public ConfigDefinition showSpellsDef = new ConfigDefinition("Mage", "Show Spells"); public ConfigDefinition healDef = new ConfigDefinition("Mage", "Healing Spell"); public ConfigDefinition speedDef = new ConfigDefinition("Mage", "Speed Spell"); public ConfigDefinition overchargeDef = new ConfigDefinition("Mage", "Overcharge Spell"); public ConfigDefinition jumpDef = new ConfigDefinition("Mage", "Jump Boost Spell"); public ConfigDefinition staminaDef = new ConfigDefinition("Mage", "Stamina Refill Spell"); public ConfigDefinition roleUpgrades = new ConfigDefinition("Upgrades", "Enable Role Upgrades in Shop"); public ConfigDefinition selectedRoleDef = new ConfigDefinition("Role", "Your selected role"); public ConfigDefinition afterDeathRoleDef = new ConfigDefinition("Role", "Reaasign roles after being revived"); public static ConfigEntry<bool> enableRunner; public static ConfigEntry<bool> enableTank; public static ConfigEntry<bool> enableGambler; public static ConfigEntry<bool> enableStrongman; public static ConfigEntry<bool> enableRL; public static ConfigEntry<bool> enableAthletic; public static ConfigEntry<bool> enableMage; public static ConfigEntry<bool> enableReaper; public static ConfigEntry<bool> enableScout; public static ConfigEntry<bool> enableRegular; public ConfigDefinition enableRunnerDef = new ConfigDefinition("Role", "Enable Runner"); public ConfigDefinition enableTankDef = new ConfigDefinition("Role", "Enable Tank"); public ConfigDefinition enableGamblerDef = new ConfigDefinition("Role", "Enable Gambler"); public ConfigDefinition enableStrongmanDef = new ConfigDefinition("Role", "Enable Strongman"); public ConfigDefinition enableRLDef = new ConfigDefinition("Role", "Enable Ranged Looter"); public ConfigDefinition enableAthleticDef = new ConfigDefinition("Role", "Enable Athletic"); public ConfigDefinition enableMageDef = new ConfigDefinition("Role", "Enable Mage"); public ConfigDefinition enableReaperDef = new ConfigDefinition("Role", "Enable Reaper"); public ConfigDefinition enableScoutDef = new ConfigDefinition("Role", "Enable Scout"); public ConfigDefinition enableRegularDef = new ConfigDefinition("Role", "Enable Regular"); private REPOSlider slider; private REPOPopupPage configPage; private REPOButton buttonOpen; private REPOButton buttonOpenLobby; private REPOButton buttonClose; private REPOToggle afterDeathRoleToggle; private REPOToggle mageTopMana; public static bool afterDeathNewRole = false; public static bool mageTopManaBool; public static string chosenRoleName = "Random"; public static RepoRoles Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } public void sliderConf(string a) { savedRole.Value = a; chosenRoleName = a; } public void aDRC(bool a) { assignRoleAfterRevive.Value = a; afterDeathNewRole = a; } public void mageManaFunc(bool a) { mageTopManaConf.Value = a; mageTopManaBool = a; ((BaseUnityPlugin)this).Config.Save(); if (guiManager.isMage && (Object)(object)GUIinstance != (Object)null) { GUIinstance.UpdateManaDisplay(); } } public static string getPath() { return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "REPORoles_assets2"); } private void Awake() { //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Expected O, but got Unknown //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown Instance = this; Logger = ((BaseUnityPlugin)this).Logger; savedRole = ((BaseUnityPlugin)this).Config.Bind<string>(selectedRoleDef, "Random", (ConfigDescription)null); assignRoleAfterRevive = ((BaseUnityPlugin)this).Config.Bind<bool>(afterDeathRoleDef, false, (ConfigDescription)null); mageTopManaConf = ((BaseUnityPlugin)this).Config.Bind<bool>(mageTopManaDef, true, (ConfigDescription)null); mageTopManaBool = mageTopManaConf.Value; showGUIAtStart = ((BaseUnityPlugin)this).Config.Bind<bool>(showGUIAtStartDef, true, (ConfigDescription)null); enableRoleUpgrades = ((BaseUnityPlugin)this).Config.Bind<bool>(roleUpgrades, true, (ConfigDescription)null); enableRunner = ((BaseUnityPlugin)this).Config.Bind<bool>(enableRunnerDef, true, (ConfigDescription)null); enableTank = ((BaseUnityPlugin)this).Config.Bind<bool>(enableTankDef, true, (ConfigDescription)null); enableGambler = ((BaseUnityPlugin)this).Config.Bind<bool>(enableGamblerDef, true, (ConfigDescription)null); enableStrongman = ((BaseUnityPlugin)this).Config.Bind<bool>(enableStrongmanDef, true, (ConfigDescription)null); enableRL = ((BaseUnityPlugin)this).Config.Bind<bool>(enableRLDef, true, (ConfigDescription)null); enableAthletic = ((BaseUnityPlugin)this).Config.Bind<bool>(enableAthleticDef, true, (ConfigDescription)null); enableMage = ((BaseUnityPlugin)this).Config.Bind<bool>(enableMageDef, true, (ConfigDescription)null); enableReaper = ((BaseUnityPlugin)this).Config.Bind<bool>(enableReaperDef, true, (ConfigDescription)null); enableScout = ((BaseUnityPlugin)this).Config.Bind<bool>(enableScoutDef, true, (ConfigDescription)null); enableRegular = ((BaseUnityPlugin)this).Config.Bind<bool>(enableRegularDef, true, (ConfigDescription)null); MenuAPI.AddElementToSettingsMenu((BuilderDelegate)delegate(Transform parent) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_004d: 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_007d: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown if ((Object)configPage == (Object)null) { configPage = MenuAPI.CreateREPOPopupPage("REPORoles Classic", (PresetSide)0, true, true, 1.5f); } buttonOpen = MenuAPI.CreateREPOButton("REPORoles Classic Config", (Action)delegate { configPage.OpenPage(false); }, parent, new Vector2(500f, 10f)); configPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if ((Object)slider == (Object)null) { slider = MenuAPI.CreateREPOSlider("REPORoles Classic", "Choose your role", (Action<string>)delegate(string s) { sliderConf(s); }, scrollView, new string[11] { "Random", "Runner", "Tank", "Gambler", "Strongman", "Ranged Looter", "Athletic", "Mage", "Reaper", "Scout", "Regular" }, savedRole.Value, new Vector2(0f, 0f), "", "", (BarBehavior)0); } return ((REPOElement)slider).rectTransform; }, 0f, 0f); configPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) if ((Object)afterDeathRoleToggle == (Object)null) { afterDeathRoleToggle = MenuAPI.CreateREPOToggle("Reassign role on respawn", (Action<bool>)delegate(bool b) { aDRC(b);