using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Jotunn;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("CycleForsakenPower")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CycleForsakenPower")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
namespace CycleForsakenPower
{
[BepInPlugin("sephalon.CycleForsakenPower", "CycleForsakenPower", "1.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[HarmonyPatch]
internal class CycleForsakenPower : BaseUnityPlugin
{
public struct BossInfo
{
public string m_bossName;
public string m_bossDefeatedGlobalKey;
public string m_powerID;
}
public const string PluginGUID = "sephalon.CycleForsakenPower";
public const string PluginName = "CycleForsakenPower";
public const string PluginVersion = "1.0.0";
private static KeyboardShortcut cycleShortcut = new KeyboardShortcut((KeyCode)289, Array.Empty<KeyCode>());
public static List<BossInfo> BossInfoList = new List<BossInfo>();
public void Awake()
{
AddBossInfo("Eikthyr", "GP_Eikthyr", "defeated_eikthyr");
AddBossInfo("The Elder", "GP_TheElder", "defeated_gdking");
AddBossInfo("Bonemass", "GP_Bonemass", "defeated_bonemass");
AddBossInfo("Moder", "GP_Moder", "defeated_dragon");
AddBossInfo("Yagluth", "GP_Yagluth", "defeated_goblinking");
AddBossInfo("The Queen", "GP_Queen", "defeated_queen");
AddBossInfo("Fader", "GP_Fader", "defeated_fader");
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "sephalon.CycleForsakenPower");
}
public static void AddBossInfo(string name, string powerID, string key)
{
BossInfo item = default(BossInfo);
item.m_bossName = name;
item.m_bossDefeatedGlobalKey = key;
item.m_powerID = powerID;
BossInfoList.Add(item);
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Player), "Update")]
private static void Update_Postfix_Player(ref Player __instance)
{
if (IsLocalPlayer(in __instance) && ((KeyboardShortcut)(ref cycleShortcut)).IsDown() && ((Character)__instance).TakeInput())
{
Logger.LogInfo((object)"F8");
string text = Player.m_localPlayer.GetGuardianPowerName();
if (text == null)
{
text = "none";
}
AdvanceFrom(text);
}
}
public static void AdvanceFrom(string currentPowerID)
{
bool flag = false;
foreach (BossInfo bossInfo in BossInfoList)
{
if (ZoneSystem.instance.GetGlobalKey(bossInfo.m_bossDefeatedGlobalKey))
{
flag = true;
break;
}
}
if (!flag)
{
MessagePlayer("You have not defeated any bosses, so you cannot cycle Forsaken powers");
return;
}
bool flag2 = false;
if (currentPowerID.Equals("none"))
{
flag2 = true;
}
foreach (BossInfo bossInfo2 in BossInfoList)
{
if (flag2 && ZoneSystem.instance.GetGlobalKey(bossInfo2.m_bossDefeatedGlobalKey))
{
Player.m_localPlayer.SetGuardianPower(bossInfo2.m_powerID);
MessagePlayer(bossInfo2.m_bossName + " power selected");
return;
}
if (bossInfo2.m_powerID.Equals(currentPowerID))
{
flag2 = true;
}
}
foreach (BossInfo bossInfo3 in BossInfoList)
{
if (ZoneSystem.instance.GetGlobalKey(bossInfo3.m_bossDefeatedGlobalKey))
{
Player.m_localPlayer.SetGuardianPower(bossInfo3.m_powerID);
MessagePlayer(bossInfo3.m_bossName + " power selected");
return;
}
}
Logger.LogInfo((object)("Cycle Forsaken power didn't work. Current power = " + currentPowerID));
}
public static void MessagePlayer(string msg)
{
((Character)Player.m_localPlayer).Message((MessageType)2, msg, 0, (Sprite)null);
}
public static bool IsLocalPlayer(in Player player)
{
if (Object.op_Implicit((Object)(object)Player.m_localPlayer))
{
return (Object)(object)player == (Object)(object)Player.m_localPlayer;
}
return false;
}
}
}
namespace CycleForsakenPower.Properties
{
[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[DebuggerNonUserCode]
[CompilerGenerated]
internal class Resources
{
private static ResourceManager resourceMan;
private static CultureInfo resourceCulture;
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static ResourceManager ResourceManager
{
get
{
if (resourceMan == null)
{
resourceMan = new ResourceManager("CycleForsakenPower.Properties.Resources", typeof(Resources).Assembly);
}
return resourceMan;
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
internal static CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
internal Resources()
{
}
}
}