Decompiled source of Early Caldera Trainers v2.0.0

plugins/EarlyCalderaTrainers.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
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 SideLoader;
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("OutwardModTemplate")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OutwardModTemplate")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c5450fe0-edcf-483f-b9ea-4b1ef9d36da7")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace EarlyCalderaTrainers;

[BepInPlugin("johbenji.earlycalderatrainers", "Early Caldera Trainers", "2.0.0")]
public class EarlyCalderaTrainersPlugin : BaseUnityPlugin
{
	public struct QuestObjectData
	{
		public string Path;

		public string QuestName;

		public QuestObjectData(string path, string questName)
		{
			Path = path;
			QuestName = questName;
		}
	}

	[CompilerGenerated]
	private sealed class <DelayTrainerVisibility>d__10 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public string path;

		public bool visible;

		public EarlyCalderaTrainersPlugin <>4__this;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <DelayTrainerVisibility>d__10(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>2__current = (object)new WaitForSeconds(1f);
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				<>4__this.ToggleTrainerVisibility(path, visible);
				return false;
			}
		}

		bool IEnumerator.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			return this.MoveNext();
		}

		[DebuggerHidden]
		void IEnumerator.Reset()
		{
			throw new NotSupportedException();
		}
	}

	public const string GUID = "johbenji.earlycalderatrainers";

	public const string NAME = "Early Caldera Trainers";

	public const string VERSION = "2.0.0";

	internal static ManualLogSource Log;

	public static ConfigEntry<bool> factionRewardConfig;

	private Dictionary<string, QuestObjectData> LocationTrainerDictionary = new Dictionary<string, QuestObjectData>();

	internal void Awake()
	{
		Log = ((BaseUnityPlugin)this).Logger;
		factionRewardConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Faction Reward", "Spawn Special Trainer For Faction Reward", true, "Spawns a trainer for the final faction reward in Caldera such as Infuse Mana once the Peacemaker Quest is completed.");
		SL.OnGameplayResumedAfterLoading += OnGameplayResumedAfterLoading;
		LocationTrainerDictionary.Add("Abrassar_Dungeon1", new QuestObjectData("Yan, Levantine Alchemist_johbenji-yan", "Faction_HeroicKingdom"));
		LocationTrainerDictionary.Add("Emercar_Dungeon6", new QuestObjectData("Anthony Berthelot, Krypteia Scholar_johbenji-AnthonyBerthelot", "Faction_BlueChamber"));
		LocationTrainerDictionary.Add("Harmattan", new QuestObjectData("Samantha Turnbull, Head Enchanter_johbenji-samanthaturnbull", "Faction_Sorobore"));
		LocationTrainerDictionary.Add("Monsoon", new QuestObjectData("Paul, Disciple_johbenji-paul", "Faction_HolyMission"));
	}

	internal void OnGameplayResumedAfterLoading()
	{
		string sceneName = AreaManager.Instance.CurrentArea.SceneName;
		if (LocationTrainerDictionary.ContainsKey(sceneName))
		{
			string path = LocationTrainerDictionary[sceneName].Path;
			string questName = LocationTrainerDictionary[sceneName].QuestName;
			if (!factionRewardConfig.Value)
			{
				((MonoBehaviour)this).StartCoroutine(DelayTrainerVisibility(path, visible: false));
			}
			else if (HasQuestEvent(questName) && HasQuestEvent("General_DoneQuest4"))
			{
				((MonoBehaviour)this).StartCoroutine(DelayTrainerVisibility(path, visible: true));
			}
			else
			{
				((MonoBehaviour)this).StartCoroutine(DelayTrainerVisibility(path, visible: false));
			}
		}
	}

	private bool HasQuestEvent(string questEventName)
	{
		QuestEventManager instance = QuestEventManager.Instance;
		int num = 0;
		IList<QuestEventData> currentQuestEvents = instance.CurrentQuestEvents;
		for (int i = 0; i < currentQuestEvents.Count; i++)
		{
			QuestEventData val = currentQuestEvents[i];
			if (val.Name == questEventName)
			{
				return true;
			}
		}
		return false;
	}

	[IteratorStateMachine(typeof(<DelayTrainerVisibility>d__10))]
	private IEnumerator DelayTrainerVisibility(string path, bool visible)
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <DelayTrainerVisibility>d__10(0)
		{
			<>4__this = this,
			path = path,
			visible = visible
		};
	}

	private void ToggleTrainerVisibility(string path, bool visible)
	{
		GameObject val = GameObject.Find(path);
		if ((Object)(object)val != (Object)null)
		{
			val.SetActive(visible);
		}
	}
}