Decompiled source of AtOEndless v1.0.0

BepInEx/plugins/com.corgan.AtOEndless.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
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: AssemblyCompany("com.corgan.AtOEndless")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("AtOEndless")]
[assembly: AssemblyTitle("com.corgan.AtOEndless")]
[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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace AtOEndless
{
	[HarmonyPatch]
	public class AtOEndless
	{
		public static bool refreshed = false;

		public static Dictionary<Zone, List<string>> RemoveRequirementsByZone = new Dictionary<Zone, List<string>>
		{
			{
				(Zone)0,
				new List<string>(1) { "treasurehuntii" }
			},
			{
				(Zone)3,
				new List<string>(1) { "darkdeal" }
			},
			{
				(Zone)1,
				new List<string>(5) { "armblowtorch", "armchargedrod", "armcoolingengine", "armdisclauncher", "armsmallcannon" }
			},
			{
				(Zone)2,
				new List<string>()
			},
			{
				(Zone)12,
				new List<string>(3) { "ulmininportal", "ulminindown", "riftulmi61" }
			},
			{
				(Zone)14,
				new List<string>(5) { "sahtidown", "sahtipolizonevent", "dreadroom", "dreadup", "dreadmastcannon" }
			},
			{
				(Zone)4,
				new List<string>()
			}
		};

		public static Dictionary<Zone, List<string>> AddRequirementsByZone = new Dictionary<Zone, List<string>>
		{
			{
				(Zone)0,
				new List<string>(6) { "crossroadnorth", "crossroadsouth", "caravannopay", "fungamemill", "riftsen47", "riftsen48" }
			},
			{
				(Zone)3,
				new List<string>(3) { "boatfaenlor", "riftfaen42", "riftfaen43" }
			},
			{
				(Zone)1,
				new List<string>(4) { "lavacascade", "goblinnorth", "riftvelka39", "riftvelka40" }
			},
			{
				(Zone)2,
				new List<string>(5) { "boatup", "boatcenter", "boatdown", "riftaqua46", "riftaqua47" }
			},
			{
				(Zone)12,
				new List<string>(3) { "ulmininup", "riftulmi60", "riftulmi61" }
			},
			{
				(Zone)14,
				new List<string>(5) { "sahtiup", "dreaddown", "sahtipolizon", "riftsahti67", "riftsahti68" }
			},
			{
				(Zone)4,
				new List<string>(4) { "voidnorth", "voidnorthpass", "voidsouth", "voidsouthpass" }
			}
		};

		public static string[] zoneStartNodes = new string[7] { "sen_0", "faen_0", "aqua_0", "velka_0", "ulmin_0", "sahti_0", "voidlow_0" };

		[HarmonyPrefix]
		[HarmonyPatch(typeof(Node), "OnMouseUp")]
		public static void OnMouseUp(ref Node __instance)
		{
			if (Functions.ClickedThisTransform(((Component)__instance).transform) && !AlertManager.Instance.IsActive() && !GameManager.Instance.IsTutorialActive() && !SettingsManager.Instance.IsActive() && !DamageMeterManager.Instance.IsActive() && (!Object.op_Implicit((Object)(object)MapManager.Instance) || !MapManager.Instance.IsCharacterUnlock()) && (!Object.op_Implicit((Object)(object)MapManager.Instance) || (!MapManager.Instance.IsCorruptionOver() && !MapManager.Instance.IsConflictOver())) && (!Object.op_Implicit((Object)(object)MapManager.Instance) || !MapManager.Instance.selectedNode) && !Object.op_Implicit((Object)(object)EventManager.Instance))
			{
				GameManager.Instance.SetCursorPlain();
				MapManager.Instance.HidePopup();
				MapManager.Instance.PlayerSelectedNode(__instance, false);
				GameManager.Instance.PlayAudio(AudioManager.Instance.soundButtonClick, 0f, 0f);
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(Node), "AssignNode")]
		public static void AssignNodePre(ref AtOManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Node), "AssignNode")]
		public static void AssignNodePost(ref Node __instance, string[][] __state)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
				AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(AtOManager), "GetTownTier")]
		public static void GetTownTier(ref AtOManager __instance, ref int ___townTier, ref int __result)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				__result = Math.Min(___townTier, 3);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(AtOManager), "GetActNumberForText")]
		public static void GetActNumberForText(ref AtOManager __instance, ref int ___townTier, ref int __result)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				__result = ___townTier + 1;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(MapManager), "Awake")]
		public static void Awake(ref MapManager __instance)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Expected O, but got Unknown
			if (refreshed)
			{
				return;
			}
			foreach (GameObject map in __instance.mapList)
			{
				foreach (Transform item in map.transform)
				{
					Transform val = item;
					if (!(((Object)((Component)val).gameObject).name == "Nodes"))
					{
						continue;
					}
					foreach (Transform item2 in val)
					{
						Transform val2 = item2;
						GameObject gameObject = ((Component)val2).gameObject;
						Node component = gameObject.GetComponent<Node>();
						((Component)component).GetComponent<Node>().nodeData = Globals.Instance.GetNodeData(component.nodeData.NodeId);
					}
				}
			}
			refreshed = true;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Globals), "CreateGameContent")]
		public static void CreateGameContent(ref Globals __instance, ref Dictionary<string, EventData> ____Events, ref Dictionary<string, NodeData> ____NodeDataSource, ref Dictionary<string, CombatData> ____CombatDataSource, ref Dictionary<string, CinematicData> ____Cinematics)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge() && ____Events.TryGetValue("e_sen34_a", out var value))
			{
				EventReplyData val = value.Replys.First();
				EventReplyData val2 = val.ShallowCopy();
				EventReplyData val3 = val.ShallowCopy();
				EventReplyData val4 = val.ShallowCopy();
				EventReplyData val5 = val.ShallowCopy();
				EventReplyData val6 = val.ShallowCopy();
				EventReplyData val7 = val.ShallowCopy();
				EventReplyData val8 = val.ShallowCopy();
				val2.ReplyActionText = (EventAction)0;
				val2.ReplyText = "You are thrust into a portal of unknown color";
				val2.SsRequirementUnlock = null;
				val2.SsNodeTravel = __instance.GetNodeData("sen_0");
				val3.ReplyActionText = (EventAction)0;
				val3.ReplyText = "You are thrust into a portal of unknown color";
				val3.SsRequirementUnlock = null;
				val3.SsNodeTravel = __instance.GetNodeData("faen_0");
				val4.ReplyActionText = (EventAction)0;
				val4.ReplyText = "You are thrust into a portal of unknown color";
				val4.SsRequirementUnlock = null;
				val4.SsNodeTravel = __instance.GetNodeData("aqua_0");
				val6.ReplyActionText = (EventAction)0;
				val6.ReplyText = "You are thrust into a portal of unknown color";
				val6.SsRequirementUnlock = null;
				val6.SsNodeTravel = __instance.GetNodeData("velka_0");
				val5.ReplyActionText = (EventAction)0;
				val5.ReplyText = "You are thrust into a portal of unknown color";
				val5.SsRequirementUnlock = null;
				val5.SsNodeTravel = __instance.GetNodeData("ulmin_0");
				val7.RequirementSku = "2511580";
				val7.ReplyActionText = (EventAction)0;
				val7.ReplyText = "You are thrust into a portal of unknown color";
				val7.SsRequirementUnlock = null;
				val7.SsNodeTravel = __instance.GetNodeData("sahti_0");
				val7.RequirementSku = "3185630";
				val8.ReplyActionText = (EventAction)0;
				val8.ReplyText = "You are thrust into a portal of unknown color";
				val8.SsRequirementUnlock = null;
				val8.SsNodeTravel = __instance.GetNodeData("voidlow_0");
				EventData val9 = Object.Instantiate<EventData>(value);
				EventData val10 = Object.Instantiate<EventData>(value);
				EventData val11 = Object.Instantiate<EventData>(value);
				EventData val12 = Object.Instantiate<EventData>(value);
				EventData val13 = Object.Instantiate<EventData>(value);
				EventData val14 = Object.Instantiate<EventData>(value);
				EventData val15 = Object.Instantiate<EventData>(value);
				val9.EventName = "Endless Obelisk";
				val9.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val9.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val9.EventId = "e_endless_sen";
				val9.Replys = (EventReplyData[])(object)new EventReplyData[6] { val3, val4, val6, val5, val7, val8 };
				val9.ReplyRandom = 1;
				val9.Init();
				val10.EventName = "Endless Obelisk";
				val10.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val10.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val10.EventId = "e_endless_faen";
				val10.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val4, val6, val5, val7, val8 };
				val10.ReplyRandom = 1;
				val10.Init();
				val11.EventName = "Endless Obelisk";
				val11.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val11.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val11.EventId = "e_endless_aqua";
				val11.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val3, val6, val5, val7, val8 };
				val11.ReplyRandom = 1;
				val11.Init();
				val12.EventName = "Endless Obelisk";
				val12.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val12.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val12.EventId = "e_endless_velka";
				val12.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val3, val4, val5, val7, val8 };
				val12.ReplyRandom = 1;
				val12.Init();
				val13.EventName = "Endless Obelisk";
				val13.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val13.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val13.EventId = "e_endless_ulmin";
				val13.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val3, val4, val6, val7, val8 };
				val13.ReplyRandom = 1;
				val13.Init();
				val14.EventName = "Endless Obelisk";
				val14.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val14.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val14.EventId = "e_endless_sahti";
				val14.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val3, val4, val6, val5, val8 };
				val14.ReplyRandom = 1;
				val14.Init();
				val15.EventName = "Endless Obelisk";
				val15.Description = "Ahhhhhhhhhhhhhhhhhhhh!";
				val15.DescriptionAction = "AHHHHHHHHHHHHHHHH!";
				val15.EventId = "e_endless_void";
				val15.Replys = (EventReplyData[])(object)new EventReplyData[6] { val2, val3, val4, val6, val5, val7 };
				val15.ReplyRandom = 1;
				val15.Init();
				____Events.Add(val9.EventId.ToLower(), val9);
				____Events.Add(val10.EventId.ToLower(), val10);
				____Events.Add(val11.EventId.ToLower(), val11);
				____Events.Add(val13.EventId.ToLower(), val13);
				____Events.Add(val12.EventId.ToLower(), val12);
				____Events.Add(val14.EventId.ToLower(), val14);
				____Events.Add(val15.EventId.ToLower(), val15);
				if (____NodeDataSource.TryGetValue("sen_34", out var value2))
				{
					value2.NodeEvent = (EventData[])(object)new EventData[1] { val9 };
					____NodeDataSource["sen_34"] = value2;
				}
				if (____NodeDataSource.TryGetValue("faen_39", out var value3))
				{
					value3.NodeEvent = (EventData[])(object)new EventData[1] { val9 };
					____NodeDataSource["faen_39"] = value3;
				}
				if (____NodeDataSource.TryGetValue("aqua_36", out var value4))
				{
					value4.NodeEvent = (EventData[])(object)new EventData[1] { val11 };
					____NodeDataSource["aqua_36"] = value4;
				}
				if (____NodeDataSource.TryGetValue("velka_33", out var value5))
				{
					value5.NodeEvent = (EventData[])(object)new EventData[1] { val12 };
					____NodeDataSource["velka_33"] = value5;
				}
				if (____NodeDataSource.TryGetValue("ulmin_40", out var value6))
				{
					value6.NodeEvent = (EventData[])(object)new EventData[1] { val13 };
					____NodeDataSource["ulmin_40"] = value6;
				}
				if (____NodeDataSource.TryGetValue("sahti_63", out var value7))
				{
					value7.NodeEvent = (EventData[])(object)new EventData[1] { val14 };
					____NodeDataSource["sahti_63"] = value7;
				}
				if (____CombatDataSource.TryGetValue("evoidhigh_13b", out var value8))
				{
					value8.EventData = val15;
					____CombatDataSource["evoidhigh_13b"] = value8;
				}
				if (____Cinematics.TryGetValue("endgame", out var value9))
				{
					value9.CinematicEndAdventure = false;
					____Cinematics["endgame"] = value9;
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(EventManager), "CloseEvent")]
		public static void CloseEvent(ref EventManager __instance, ref NodeData ___destinationNode, ref EventData ___currentEvent)
		{
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge() || !((Object)(object)___destinationNode != (Object)null) || (!(___currentEvent.EventId == "e_endless_sen") && !(___currentEvent.EventId == "e_endless_faen") && !(___currentEvent.EventId == "e_endless_aqua") && !(___currentEvent.EventId == "e_endless_ulmin") && !(___currentEvent.EventId == "e_endless_velka") && !(___currentEvent.EventId == "e_endless_sahti") && !(___currentEvent.EventId == "e_endless_void")))
			{
				return;
			}
			AtOManager.Instance.SetTownTier(AtOManager.Instance.GetActNumberForText(""));
			AtOManager.Instance.SetGameId(string.Format("{0}+{1}", AtOManager.Instance.GetGameId().Split("+", StringSplitOptions.RemoveEmptyEntries).First(), AtOManager.Instance.GetActNumberForText("")));
			AtOManager.Instance.gameNodeAssigned.Clear();
			if (RemoveRequirementsByZone.TryGetValue(AtOManager.Instance.GetMapZone(___destinationNode.NodeId), out var value))
			{
				foreach (string item in value)
				{
					AtOManager.Instance.RemovePlayerRequirement(Globals.Instance.GetRequirementData(item), "");
				}
			}
			if (!AddRequirementsByZone.TryGetValue(AtOManager.Instance.GetMapZone(___destinationNode.NodeId), out var value2))
			{
				return;
			}
			foreach (string item2 in value2)
			{
				AtOManager.Instance.AddPlayerRequirement(Globals.Instance.GetRequirementData(item2), true);
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(AtOManager), "UpgradeTownTier")]
		public static bool UpgradeTownTier(ref AtOManager __instance, ref int ___townTier)
		{
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge())
			{
				return true;
			}
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(NPC), "InitData")]
		public static void InitDataPre(ref NPC __instance)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge() && (Object)(object)((Character)__instance).NpcData != (Object)null && AtOManager.Instance.GetActNumberForText("") >= 3 && (Object)(object)((Character)__instance).NpcData.UpgradedMob != (Object)null)
			{
				((Character)__instance).NpcData = ((Character)__instance).NpcData.UpgradedMob;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(NPC), "InitData")]
		public static void InitDataPost(ref NPC __instance)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Invalid comparison between Unknown and I4
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Invalid comparison between Unknown and I4
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				int num = AtOManager.Instance.GetActNumberForText("") - 1;
				if (num >= 1 && (int)AtOManager.Instance.GetMapZone(AtOManager.Instance.currentMapNode) == 0)
				{
					NPC obj = __instance;
					int hp = (((Character)__instance).HpCurrent = Functions.FuncRoundToInt((float)((Character)__instance).Hp + (float)((Character)__instance).Hp * 3f));
					((Character)obj).Hp = hp;
					NPC obj2 = __instance;
					((Character)obj2).Speed = ((Character)obj2).Speed + 2;
				}
				if (num >= 4 && (int)AtOManager.Instance.GetMapZone(AtOManager.Instance.currentMapNode) != 4 && (int)AtOManager.Instance.GetMapZone(AtOManager.Instance.currentMapNode) != 5)
				{
					NPC obj3 = __instance;
					int hp = (((Character)__instance).HpCurrent = Functions.FuncRoundToInt((float)((Character)__instance).Hp + (float)((Character)__instance).Hp * 0.5f));
					((Character)obj3).Hp = hp;
					NPC obj4 = __instance;
					((Character)obj4).Speed = ((Character)obj4).Speed + 1;
				}
				if (num >= 4)
				{
					NPC obj5 = __instance;
					int hp = (((Character)__instance).HpCurrent = Functions.FuncRoundToInt((float)((Character)__instance).Hp + (float)((Character)__instance).Hp * (0.5f * (float)(num - 3))));
					((Character)obj5).Hp = hp;
					NPC obj6 = __instance;
					((Character)obj6).Speed = ((Character)obj6).Speed + (num - 3);
				}
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(Character), "GetAuraCurseQuantityModification")]
		public static void GetAuraCurseQuantityModification(ref Character __instance, ref int __result, string id, CardClass CC, ref bool ___isHero)
		{
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge() || ___isHero)
			{
				return;
			}
			switch (id)
			{
			default:
				if (!(id == "fatigue"))
				{
					break;
				}
				goto case "doom";
			case "doom":
			case "paralyze":
			case "invulnerable":
			case "stress":
				__result = 0;
				break;
			}
			int num = AtOManager.Instance.GetActNumberForText("") - 1;
			if (num >= 4)
			{
				__result = Mathf.FloorToInt((float)__result * (1f + 0.25f * (float)(num - 3)));
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameData), "FillData")]
		public static void FillData(ref GameData __instance, ref int ___townTier)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				___townTier = AtOManager.Instance.GetActNumberForText("") - 1;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(AtOManager), "SetCurrentNode")]
		public static void SetCurrentNodePre(ref AtOManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(AtOManager), "SetCurrentNode")]
		public static void SetCurrentNodePost(ref AtOManager __instance, string[][] __state)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
				AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(AtOManager), "ReAssignNodeByRequeriment")]
		public static void ReAssignNodeByRequerimentPre(ref AtOManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(AtOManager), "ReAssignNodeByRequeriment")]
		public static void ReAssignNodeByRequerimentPost(ref AtOManager __instance, string[][] __state)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
				AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(MapManager), "DrawNodes")]
		public static void DrawNodesPre(ref MapManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(MapManager), "DrawNodes")]
		public static void DrawNodesPost(ref MapManager __instance, string[][] __state, ref Dictionary<string, Node> ___mapNode)
		{
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge())
			{
				return;
			}
			AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
			AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			for (int i = 0; i < AtOManager.Instance.mapVisitedNodes.Count; i++)
			{
				if (AtOManager.Instance.mapVisitedNodes[i] != "" && ___mapNode.ContainsKey(AtOManager.Instance.mapVisitedNodes[i]))
				{
					___mapNode[AtOManager.Instance.mapVisitedNodes[i]].SetVisited();
				}
				if (zoneStartNodes.Contains(AtOManager.Instance.mapVisitedNodes[i]))
				{
					break;
				}
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(MapManager), "GetMapNodesCo")]
		public static void GetMapNodesCoPre(ref MapManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(MapManager), "GetMapNodesCo")]
		public static void GetMapNodesCoPost(ref MapManager __instance, string[][] __state)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
				AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(MapManager), "AssignGameNodes")]
		public static void AssignGameNodesPre(ref MapManager __instance, out string[][] __state)
		{
			__state = new string[2][]
			{
				AtOManager.Instance.mapVisitedNodes.ToArray(),
				AtOManager.Instance.mapVisitedNodesAction.ToArray()
			};
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.Clear();
				AtOManager.Instance.mapVisitedNodesAction.Clear();
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(MapManager), "AssignGameNodes")]
		public static void AssignGameNodesPost(ref MapManager __instance, string[][] __state)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				AtOManager.Instance.mapVisitedNodes.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[0]).ToArray()));
				AtOManager.Instance.mapVisitedNodesAction.AddRange(new <>z__ReadOnlyArray<string>(new ReadOnlySpan<string>(__state[1]).ToArray()));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(CinematicManager), "DoCinematic")]
		public static bool DoCinematicPre(ref CinematicManager __instance, ref CinematicData ___cinematicData)
		{
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge())
			{
				return true;
			}
			if (AtOManager.Instance.CinematicId == "intro" && AtOManager.Instance.GetActNumberForText("") > 1)
			{
				GameManager.Instance.ChangeScene("Map");
				return false;
			}
			return true;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(AtOManager), "FinishGame")]
		public static bool FinishGame(ref AtOManager __instance, ref CombatData ___currentCombatData)
		{
			if (GameManager.Instance.IsObeliskChallenge() || GameManager.Instance.IsWeeklyChallenge())
			{
				return true;
			}
			if (___currentCombatData.CombatId == "evoidhigh_13b")
			{
				return false;
			}
			return true;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(MapManager), "SetPositionInCurrentNode")]
		public static void SetPositionInCurrentNode(ref MapManager __instance, ref bool __result)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge() && !__result && AtOManager.Instance.currentMapNode == "voidhigh_13" && AtOManager.Instance.bossesKilledName.Any((string s) => s.StartsWith("archonnihr", StringComparison.OrdinalIgnoreCase)))
			{
				CombatData currentCombatData = AtOManager.Instance.GetCurrentCombatData();
				CombatData combatData = Globals.Instance.GetCombatData((currentCombatData != null) ? currentCombatData.CombatId : null);
				if ((Object)(object)currentCombatData != (Object)(object)combatData)
				{
					AtOManager.Instance.SetCombatData(combatData);
				}
				__result = true;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(IntroNewGameManager), "DoIntro")]
		public static void DoIntro(ref IntroNewGameManager __instance)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				__instance.title.text = __instance.title.text.Replace(string.Format(Texts.Instance.GetText("actNumber", ""), AtOManager.Instance.GetTownTier() + 2), string.Format(Texts.Instance.GetText("actNumber", ""), AtOManager.Instance.GetActNumberForText("")));
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(MenuSaveButton), "SetGameData")]
		public static void SetGameData(ref MenuSaveButton __instance, GameData _gameData)
		{
			if (!GameManager.Instance.IsObeliskChallenge() && !GameManager.Instance.IsWeeklyChallenge())
			{
				__instance.descriptionText.text = __instance.descriptionText.text.Replace(string.Format(Texts.Instance.GetText("actNumber", ""), Math.Min(4, _gameData.TownTier + 1)), string.Format(Texts.Instance.GetText("actNumber", ""), _gameData.TownTier + 1));
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetScore")]
		public static bool SetScore()
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetObeliskScore")]
		public static bool SetObeliskScore()
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetSingularityScore")]
		public static bool SetSingularityScore()
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(SteamManager), "SetWeeklyScore")]
		public static bool SetWeeklyScore()
		{
			return false;
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(MatchManager), "CastCardAction")]
		public static void CastCardAction(MatchManager __instance, ref CardData _cardActive, Transform targetTransformCast, ref CardItem theCardItem, string _uniqueCastId, bool _automatic, ref CardData _card, int _cardIterationTotal, int _cardSpecialValueGlobal)
		{
			if (!_automatic)
			{
				if (theCardItem.CardData.KillPet)
				{
					theCardItem.CardData.KillPet = false;
				}
			}
			else if ((Object)(object)_cardActive == (Object)null && (Object)(object)_card != (Object)null)
			{
				if (_card.KillPet)
				{
					_card.KillPet = false;
				}
			}
			else if (_cardActive.KillPet)
			{
				_cardActive.KillPet = false;
			}
		}
	}
	[BepInPlugin("com.corgan.AtOEndless", "AtOEndless", "1.0.0")]
	[BepInProcess("AcrossTheObelisk.exe")]
	public class Plugin : BaseUnityPlugin
	{
		internal int ModDate = int.Parse(DateTime.Today.ToString("yyyyMMdd"));

		private readonly Harmony harmony = new Harmony("com.corgan.AtOEndless");

		internal static ManualLogSource Log;

		public static string debugBase = "com.corgan.AtOEndless ";

		private void Awake()
		{
			Log = ((BaseUnityPlugin)this).Logger;
			Log.LogInfo((object)"com.corgan.AtOEndless 1.0.0 has loaded!");
			LogDebug("Excuting Patches");
			harmony.PatchAll();
		}

		internal static void LogDebug(string msg)
		{
			Log.LogDebug((object)(debugBase + msg));
		}

		internal static void LogInfo(string msg)
		{
			Log.LogInfo((object)(debugBase + msg));
		}

		internal static void LogError(string msg)
		{
			Log.LogError((object)(debugBase + msg));
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "com.corgan.AtOEndless";

		public const string PLUGIN_NAME = "AtOEndless";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
[CompilerGenerated]
internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T>
{
	int ICollection.Count => _items.Length;

	bool ICollection.IsSynchronized => false;

	object ICollection.SyncRoot => this;

	object IList.this[int index]
	{
		get
		{
			return _items[index];
		}
		set
		{
			throw new NotSupportedException();
		}
	}

	bool IList.IsFixedSize => true;

	bool IList.IsReadOnly => true;

	int IReadOnlyCollection<T>.Count => _items.Length;

	T IReadOnlyList<T>.this[int index] => _items[index];

	int ICollection<T>.Count => _items.Length;

	bool ICollection<T>.IsReadOnly => true;

	T IList<T>.this[int index]
	{
		get
		{
			return _items[index];
		}
		set
		{
			throw new NotSupportedException();
		}
	}

	public <>z__ReadOnlyArray(T[] items)
	{
		_items = items;
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return ((IEnumerable)_items).GetEnumerator();
	}

	void ICollection.CopyTo(Array array, int index)
	{
		((ICollection)_items).CopyTo(array, index);
	}

	int IList.Add(object value)
	{
		throw new NotSupportedException();
	}

	void IList.Clear()
	{
		throw new NotSupportedException();
	}

	bool IList.Contains(object value)
	{
		return ((IList)_items).Contains(value);
	}

	int IList.IndexOf(object value)
	{
		return ((IList)_items).IndexOf(value);
	}

	void IList.Insert(int index, object value)
	{
		throw new NotSupportedException();
	}

	void IList.Remove(object value)
	{
		throw new NotSupportedException();
	}

	void IList.RemoveAt(int index)
	{
		throw new NotSupportedException();
	}

	IEnumerator<T> IEnumerable<T>.GetEnumerator()
	{
		return ((IEnumerable<T>)_items).GetEnumerator();
	}

	void ICollection<T>.Add(T item)
	{
		throw new NotSupportedException();
	}

	void ICollection<T>.Clear()
	{
		throw new NotSupportedException();
	}

	bool ICollection<T>.Contains(T item)
	{
		return ((ICollection<T>)_items).Contains(item);
	}

	void ICollection<T>.CopyTo(T[] array, int arrayIndex)
	{
		((ICollection<T>)_items).CopyTo(array, arrayIndex);
	}

	bool ICollection<T>.Remove(T item)
	{
		throw new NotSupportedException();
	}

	int IList<T>.IndexOf(T item)
	{
		return ((IList<T>)_items).IndexOf(item);
	}

	void IList<T>.Insert(int index, T item)
	{
		throw new NotSupportedException();
	}

	void IList<T>.RemoveAt(int index)
	{
		throw new NotSupportedException();
	}
}