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);