using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using REPOTeamBoosters;
using REPOTeamBoosters.Patches;
using TeamUpgrades.Configuration;
using TeamUpgrades.Helpers;
using TeamUpgrades.Patches;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("TeamUpgrades")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TeamUpgrades")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("ef74d5e5-8fe6-4b6a-86ed-0e29e12695bb")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace REPOTeamBoosters
{
[BepInPlugin("EvilCheetah.REPO.TeamBoosters", "Team Boosters", "1.1.4")]
public class TeamBoostersBase : BaseUnityPlugin
{
private const string mod_guid = "EvilCheetah.REPO.TeamBoosters";
private const string mod_name = "Team Boosters";
private const string mod_version = "1.1.4";
public static TeamBoostersBase instance;
private readonly Harmony harmony = new Harmony("EvilCheetah.REPO.TeamBoosters");
public ManualLogSource mls;
private void Awake()
{
if ((Object)(object)instance == (Object)null)
{
instance = this;
}
mls = Logger.CreateLogSource("EvilCheetah.REPO.TeamBoosters");
harmony.PatchAll(typeof(TeamBoostersBase));
Configuration.Init(((BaseUnityPlugin)this).Config);
(ConfigEntry<bool>, Action, string)[] array = new(ConfigEntry<bool>, Action, string)[9]
{
(Configuration.EnableItemUpgradeMapPlayerCountPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradeMapPlayerCountPatch));
}, "Map Player Count Upgrade"),
(Configuration.EnableItemUpgradePlayerEnergyPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerEnergyPatch));
}, "Player Energy Upgrade"),
(Configuration.EnableItemUpgradePlayerExtraJumpPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerExtraJumpPatch));
}, "Player Extra Jump Upgrade"),
(Configuration.EnableItemUpgradePlayerGrabRangePatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerGrabRangePatch));
}, "Player Grab Range Upgrade"),
(Configuration.EnableItemUpgradePlayerGrabStrengthPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerGrabStrengthPatch));
}, "Player Grab Strength Upgrade"),
(Configuration.EnableItemUpgradePlayerGrabThrowPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerGrabThrowPatch));
}, "Player Grab Throw Upgrade"),
(Configuration.EnableItemUpgradePlayerHealthPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerHealthPatch));
}, "Player Health Upgrade"),
(Configuration.EnableItemUpgradePlayerSprintSpeedPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerSprintSpeedPatch));
}, "Player Sprint Speed Upgrade"),
(Configuration.EnableItemUpgradePlayerTumbleLaunchPatch, delegate
{
harmony.PatchAll(typeof(ItemUpgradePlayerTumbleLaunchPatch));
}, "Player Thumle Lauch Upgrade")
};
(ConfigEntry<bool>, Action, string)[] array2 = array;
for (int i = 0; i < array2.Length; i++)
{
var (val, action, text) = array2[i];
if (val.Value)
{
action();
mls.LogInfo((object)(text + " patch is applied"));
}
}
mls.LogInfo((object)"Team Boosters mod has been activated");
}
}
}
namespace REPOTeamBoosters.Patches
{
[HarmonyPatch(typeof(ItemUpgradeMapPlayerCount), "Upgrade")]
internal class ItemUpgradeMapPlayerCountPatch
{
private static bool Prefix(ItemUpgradeMapPlayerCount __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradeMapPlayerCount(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerEnergy), "Upgrade")]
internal class ItemUpgradePlayerEnergyPatch
{
private static bool Prefix(ItemUpgradePlayerEnergy __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerEnergy(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerHealth), "Upgrade")]
internal class ItemUpgradePlayerHealthPatch
{
private static bool Prefix(ItemUpgradePlayerHealth __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerHealth(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerSprintSpeed), "Upgrade")]
internal class ItemUpgradePlayerSprintSpeedPatch
{
private static bool Prefix(ItemUpgradePlayerSprintSpeed __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerSprintSpeed(allPlayerRollResult);
}
return false;
}
}
}
namespace TeamUpgrades.Patches
{
[HarmonyPatch(typeof(ItemUpgradePlayerExtraJump), "Upgrade")]
internal class ItemUpgradePlayerExtraJumpPatch
{
private static bool Prefix(ItemUpgradePlayerExtraJump __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerExtraJump(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabRange), "Upgrade")]
internal class ItemUpgradePlayerGrabRangePatch
{
private static bool Prefix(ItemUpgradePlayerGrabRange __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerGrabRange(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabStrength), "Upgrade")]
internal class ItemUpgradePlayerGrabStrengthPatch
{
private static bool Prefix(ItemUpgradePlayerGrabStrength __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerGrabStrength(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabThrow), "Upgrade")]
internal class ItemUpgradePlayerGrabThrowPatch
{
private static bool Prefix(ItemUpgradePlayerGrabThrow __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerThrowStrength(allPlayerRollResult);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerTumbleLaunch), "Upgrade")]
internal class ItemUpgradePlayerTumbleLaunchPatch
{
private static bool Prefix(ItemUpgradePlayerTumbleLaunch __instance)
{
object value = Traverse.Create((object)__instance).Field("itemToggle").GetValue();
int value2 = Traverse.Create(value).Field("playerTogglePhotonID").GetValue<int>();
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(value2);
string initiatorSteamId = SemiFunc.PlayerGetSteamID(val);
foreach (string allPlayerRollResult in ItemUpgradeChance.GetAllPlayerRollResults(initiatorSteamId))
{
PunManager.instance.UpgradePlayerTumbleLaunch(allPlayerRollResult);
}
return false;
}
}
}
namespace TeamUpgrades.Helpers
{
internal class ItemUpgradeChance
{
private static readonly Random RandomInstance = new Random();
public static IEnumerable<string> GetAllPlayerRollResults(string initiatorSteamId = null)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
List<string> list2 = new List<string>();
double num = TeamUpgrades.Configuration.Configuration.UpgradeRandomChance.Value;
foreach (PlayerAvatar item in list)
{
string text = SemiFunc.PlayerGetSteamID(item);
string text2 = SemiFunc.PlayerGetName(item);
if (text == initiatorSteamId)
{
TeamBoostersBase.instance.mls.LogInfo((object)("Player: " + text2 + "[" + text + "] is initiator - automatic success"));
list2.Add(text);
continue;
}
double num2 = RandomInstance.NextDouble();
TeamBoostersBase.instance.mls.LogInfo((object)$"Player: {text2}[{text}] Rolled {num2}, Success: {num2 <= num}");
if (num2 <= num)
{
list2.Add(text);
}
}
if (initiatorSteamId != null && !list2.Contains(initiatorSteamId))
{
list2.Add(initiatorSteamId);
TeamBoostersBase.instance.mls.LogInfo((object)("Initiator [" + initiatorSteamId + "] not found in players list but added anyway"));
}
if (list2.Count == 0 && list.Count > 0)
{
int index = RandomInstance.Next(list.Count);
PlayerAvatar val = list[index];
string text3 = SemiFunc.PlayerGetSteamID(val);
string text4 = SemiFunc.PlayerGetName(val);
list2.Add(text3);
TeamBoostersBase.instance.mls.LogInfo((object)("No players in roll results, fallback selected: " + text4 + "[" + text3 + "]"));
}
return list2;
}
}
}
namespace TeamUpgrades.Configuration
{
internal class Configuration
{
public static ConfigEntry<bool> EnableItemUpgradeMapPlayerCountPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerEnergyPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerExtraJumpPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerGrabRangePatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerGrabStrengthPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerGrabThrowPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerHealthPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerSprintSpeedPatch;
public static ConfigEntry<bool> EnableItemUpgradePlayerTumbleLaunchPatch;
public static ConfigEntry<float> UpgradeRandomChance;
public static void Init(ConfigFile config)
{
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Expected O, but got Unknown
EnableItemUpgradeMapPlayerCountPatch = config.Bind<bool>("General", "EnableUpgradeMapPlayer", true, "Enables Team Upgrades for Map Player Count Upgrade");
EnableItemUpgradePlayerEnergyPatch = config.Bind<bool>("General", "EnableUpgradePlayerEnergy", true, "Enables Team Upgrades for Player Energy Upgrade");
EnableItemUpgradePlayerExtraJumpPatch = config.Bind<bool>("General", "EnableUpgradePlayerExtraJump", true, "Enables Team Upgrades for Player Extra Jump Upgrade");
EnableItemUpgradePlayerGrabRangePatch = config.Bind<bool>("General", "EnableUpgradePlayerGrabRange", true, "Enables Team Upgrades for Player Grab Range Upgrade");
EnableItemUpgradePlayerGrabStrengthPatch = config.Bind<bool>("General", "EnableUpgradePlayerGrabStrength", true, "Enables Team Upgrades for Player Grab Strength Upgrade");
EnableItemUpgradePlayerGrabThrowPatch = config.Bind<bool>("General", "EnableUpgradePlayerGrabThrow", true, "Enables Team Upgrades for Player Grab Throw Upgrade");
EnableItemUpgradePlayerHealthPatch = config.Bind<bool>("General", "EnableUpgradePlayerHealth", true, "Enables Team Upgrades for Player Health Upgrade");
EnableItemUpgradePlayerSprintSpeedPatch = config.Bind<bool>("General", "EnableUpgradePlayerSprintSpeed", true, "Enables Team Upgrades for Player Sprint Speed Upgrade");
EnableItemUpgradePlayerTumbleLaunchPatch = config.Bind<bool>("General", "EnableUpgradePlayerTumbleLaunch", true, "Enables Team Upgrades for Player Tumble Launch Upgrade");
UpgradeRandomChance = config.Bind<float>("General", "UpgradeRandomChance", 0.25f, new ConfigDescription("Chance of each person receiving the upgrade, the consumer will be random too", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>()));
}
}
}