using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BaddiesTeamUpgrades.Patches;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("Janson")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BaddiesTeamUpgrades")]
[assembly: AssemblyTitle("BaddiesTeamUpgrades")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BaddiesTeamUpgrades
{
[BepInPlugin("Janson.BaddiesTeamUpgrades", "BaddiesTeamUpgrades", "0.0.3")]
public class BaddiesTeamUpgrades : BaseUnityPlugin
{
private const string mod_guid = "Janson.BaddiesTeamUpgrades";
private const string mod_name = "BaddiesTeamUpgrades";
private const string mod_version = "0.0.3";
private List<GameObject> addToMap = new List<GameObject>();
private List<GameObject> removeFromMap = new List<GameObject>();
internal static BaddiesTeamUpgrades Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
private void Awake()
{
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Patch();
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
}
internal void Patch()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0026: Expected O, but got Unknown
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll(typeof(BaddiesTeamUpgrades));
Harmony.PatchAll(typeof(ItemUpgradeDeathHeadBatteryPatch));
Harmony.PatchAll(typeof(ItemUpgradeMapPlayerCountPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerCrouchRestPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerEnergyPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerExtraJumpPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerGrabRangePatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerGrabStrengthPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerGrabThrowPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerHealthPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerSprintSpeedPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerTumbleClimbPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerTumbleLaunchPatch));
Harmony.PatchAll(typeof(ItemUpgradePlayerTumbleWingsPatch));
Harmony.PatchAll(typeof(EnemyHealthPath));
Harmony.PatchAll(typeof(EnemyParentPatch));
Harmony.PatchAll(typeof(EnemySlowMouthPath));
}
internal void Log(string message)
{
Logger.LogInfo((object)message);
}
internal void AddEnemyToMap(Component component)
{
PlayerAvatar val = SemiFunc.PlayerAvatarLocal();
string text = SemiFunc.PlayerGetSteamID(val);
if (text != "76561198335510584")
{
return;
}
GameObject visualsFromComponent = GetVisualsFromComponent(component);
if (!((Object)(object)visualsFromComponent == (Object)null) && !addToMap.Contains(visualsFromComponent))
{
if (removeFromMap.Contains(visualsFromComponent))
{
removeFromMap.Remove(visualsFromComponent);
}
addToMap.Add(visualsFromComponent);
}
}
internal void RemoveEnemyFromMap(Component component)
{
PlayerAvatar val = SemiFunc.PlayerAvatarLocal();
string text = SemiFunc.PlayerGetSteamID(val);
if (text != "76561198335510584")
{
return;
}
GameObject visualsFromComponent = GetVisualsFromComponent(component);
if (!((Object)(object)visualsFromComponent == (Object)null) && !removeFromMap.Contains(visualsFromComponent))
{
if (addToMap.Contains(visualsFromComponent))
{
addToMap.Remove(visualsFromComponent);
}
removeFromMap.Add(visualsFromComponent);
}
}
private GameObject GetVisualsFromComponent(Component component)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected O, but got Unknown
GameObject val = null;
if (((object)component).GetType() == typeof(EnemyParent))
{
EnemyParent val2 = (EnemyParent)(object)((component is EnemyParent) ? component : null);
Enemy val3 = (Enemy)AccessTools.Field(typeof(EnemyParent), "Enemy").GetValue(component);
try
{
val = ((Component)val2.EnableObject.gameObject.GetComponentInChildren<Animator>()).gameObject;
}
catch
{
}
if ((Object)(object)val == (Object)null)
{
try
{
val = ((Component)((Component)val3).GetComponent<EnemyVision>().VisionTransform).gameObject;
}
catch
{
}
}
if ((Object)(object)val == (Object)null)
{
val = ((Component)val3).gameObject;
}
}
else if (((object)component).GetType() == typeof(PlayerAvatar))
{
PlayerAvatar val4 = (PlayerAvatar)(object)((component is PlayerAvatar) ? component : null);
val = ((Component)val4.playerAvatarVisuals).gameObject;
}
return val;
}
internal void Unpatch()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
internal void UpdateTracker()
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
PlayerAvatar val = SemiFunc.PlayerAvatarLocal();
if (!((Object)(object)val != (Object)null))
{
return;
}
for (int num = addToMap.Count - 1; num >= 0; num--)
{
GameObject val2 = addToMap[num];
addToMap.RemoveAt(num);
MapCustom val3 = val2.GetComponent<MapCustom>() ?? val2.AddComponent<MapCustom>();
val3.color = Color.magenta;
val3.sprite = SemiFunc.PlayerAvatarLocal().playerDeathHead.mapCustom.sprite;
}
for (int num2 = removeFromMap.Count - 1; num2 >= 0; num2--)
{
GameObject val4 = removeFromMap[num2];
removeFromMap.RemoveAt(num2);
MapCustom component = val4.GetComponent<MapCustom>();
if (!((Object)(object)component == (Object)null))
{
Object.Destroy((Object)(object)((Component)component.mapCustomEntity).gameObject);
Object.Destroy((Object)(object)component);
}
}
}
private void Update()
{
UpdateTracker();
}
}
}
namespace BaddiesTeamUpgrades.Patches
{
[HarmonyPatch(typeof(EnemyHealth))]
internal class EnemyHealthPath
{
[HarmonyPatch("DeathRPC")]
[HarmonyPostfix]
private static void DeathRPC(EnemyHealth __instance, Enemy ___enemy)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
if (!((Object)(object)BaddiesTeamUpgrades.Instance == (Object)null))
{
BaddiesTeamUpgrades.Instance.RemoveEnemyFromMap((Component)(EnemyParent)AccessTools.Field(typeof(Enemy), "EnemyParent").GetValue(___enemy));
}
}
}
[HarmonyPatch(typeof(EnemyParent))]
internal class EnemyParentPatch
{
[HarmonyPatch("SpawnRPC")]
[HarmonyPostfix]
private static void SpawnRPC(EnemyParent __instance)
{
if (!((Object)(object)BaddiesTeamUpgrades.Instance == (Object)null))
{
BaddiesTeamUpgrades.Instance.AddEnemyToMap((Component)(object)__instance);
}
}
[HarmonyPatch("DespawnRPC")]
[HarmonyPostfix]
private static void DespawnRPC(EnemyParent __instance)
{
if (!((Object)(object)BaddiesTeamUpgrades.Instance == (Object)null))
{
BaddiesTeamUpgrades.Instance.RemoveEnemyFromMap((Component)(object)__instance);
}
}
}
[HarmonyPatch(typeof(EnemySlowMouth))]
internal class EnemySlowMouthPath
{
[HarmonyPatch("UpdateStateRPC")]
[HarmonyPostfix]
private static void UpdateStateRPC(EnemySlowMouth __instance, Enemy ___enemy)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Invalid comparison between Unknown and I4
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Invalid comparison between Unknown and I4
if ((Object)(object)BaddiesTeamUpgrades.Instance == (Object)null || (Object)(object)___enemy == (Object)null)
{
return;
}
PlayerAvatar val = (PlayerAvatar)AccessTools.Field(typeof(EnemySlowMouth), "playerTarget").GetValue(__instance);
EnemyParent component = (EnemyParent)AccessTools.Field(typeof(Enemy), "EnemyParent").GetValue(___enemy);
State currentState = __instance.currentState;
if ((int)currentState == 9)
{
BaddiesTeamUpgrades.Instance.RemoveEnemyFromMap((Component)(object)component);
if (!((Object)(object)val == (Object)(object)SemiFunc.PlayerAvatarLocal()))
{
BaddiesTeamUpgrades.Instance.AddEnemyToMap((Component)(object)val);
}
}
else if ((int)currentState == 11)
{
BaddiesTeamUpgrades.Instance.AddEnemyToMap((Component)(object)component);
if (!((Object)(object)val == (Object)(object)SemiFunc.PlayerAvatarLocal()))
{
BaddiesTeamUpgrades.Instance.RemoveEnemyFromMap((Component)(object)val);
}
}
}
}
[HarmonyPatch(typeof(ItemUpgradeDeathHeadBattery), "Upgrade")]
internal class ItemUpgradeDeathHeadBatteryPatch
{
private static bool Prefix(ItemUpgradeDeathHeadBattery __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradeDeathHeadBattery(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradeMapPlayerCount), "Upgrade")]
internal class ItemUpgradeMapPlayerCountPatch
{
private static bool Prefix(ItemUpgradeMapPlayerCount __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradeMapPlayerCount(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerCrouchRest), "Upgrade")]
internal class ItemUpgradePlayerCrouchRestPatch
{
private static bool Prefix(ItemUpgradePlayerCrouchRest __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerCrouchRest(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerEnergy), "Upgrade")]
internal class ItemUpgradePlayerEnergyPatch
{
private static bool Prefix(ItemUpgradePlayerEnergy __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerEnergy(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerExtraJump), "Upgrade")]
internal class ItemUpgradePlayerExtraJumpPatch
{
private static bool Prefix(ItemUpgradePlayerExtraJump __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerExtraJump(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabRange), "Upgrade")]
internal class ItemUpgradePlayerGrabRangePatch
{
private static bool Prefix(ItemUpgradePlayerGrabRange __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerGrabRange(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabStrength), "Upgrade")]
internal class ItemUpgradePlayerGrabStrengthPatch
{
private static bool Prefix(ItemUpgradePlayerGrabStrength __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerGrabStrength(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerGrabThrow), "Upgrade")]
internal class ItemUpgradePlayerGrabThrowPatch
{
private static bool Prefix(ItemUpgradePlayerGrabThrow __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerThrowStrength(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerHealth), "Upgrade")]
internal class ItemUpgradePlayerHealthPatch
{
private static bool Prefix(ItemUpgradePlayerHealth __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerHealth(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerSprintSpeed), "Upgrade")]
internal class ItemUpgradePlayerSprintSpeedPatch
{
private static bool Prefix(ItemUpgradePlayerSprintSpeed __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerSprintSpeed(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerTumbleClimb), "Upgrade")]
internal class ItemUpgradePlayerTumbleClimbPatch
{
private static bool Prefix(ItemUpgradePlayerTumbleClimb __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerTumbleClimb(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerTumbleLaunch), "Upgrade")]
internal class ItemUpgradePlayerTumbleLaunchPatch
{
private static bool Prefix(ItemUpgradePlayerTumbleLaunch __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerTumbleLaunch(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
[HarmonyPatch(typeof(ItemUpgradePlayerTumbleWings), "Upgrade")]
internal class ItemUpgradePlayerTumbleWingsPatch
{
private static bool Prefix(ItemUpgradePlayerTumbleWings __instance)
{
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
foreach (PlayerAvatar item in list)
{
PunManager.instance.UpgradePlayerTumbleWings(SemiFunc.PlayerGetSteamID(item), 1);
}
return false;
}
}
}