using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("AverageTierGabriel")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("yeae")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+0cf93a53ad8ef37019ccab94c858dda4fdb8eefa")]
[assembly: AssemblyProduct("AverageTierGabriel")]
[assembly: AssemblyTitle("AverageTierGabriel")]
[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;
}
}
}
public class DisableIt : MonoBehaviour
{
[SerializeField]
private string ToFindAndDisable;
private void OnTriggerEnter(Collider other)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
if (((Component)other).gameObject.CompareTag("Player"))
{
Object.Destroy((Object)(object)GameObject.Find(ToFindAndDisable));
}
}
}
namespace LowTierSisy
{
[BepInPlugin("ImNotSimon.AverageTierGabriel", "AverageTierGabriel", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public class UnityMainThreadDispatcher : MonoBehaviour
{
private static UnityMainThreadDispatcher _instance;
private readonly Queue<Action> _executionQueue = new Queue<Action>();
public static UnityMainThreadDispatcher Instance()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
if ((Object)(object)_instance == (Object)null)
{
GameObject val = new GameObject("UnityMainThreadDispatcher");
_instance = val.AddComponent<UnityMainThreadDispatcher>();
Object.DontDestroyOnLoad((Object)val);
}
return _instance;
}
public void Update()
{
while (_executionQueue.Count > 0)
{
_executionQueue.Dequeue()();
}
}
public void Enqueue(Action action)
{
lock (_executionQueue)
{
_executionQueue.Enqueue(action);
}
}
}
[HarmonyPatch(typeof(StockMapInfo), "Awake")]
internal class Patch00
{
private static void Postfix(StockMapInfo __instance)
{
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Expected O, but got Unknown
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
AudioSource[] array = Resources.FindObjectsOfTypeAll<AudioSource>();
foreach (AudioSource val in array)
{
if (!Object.op_Implicit((Object)(object)val.clip))
{
continue;
}
bool flag = false;
new List<SubtitleDataLine>();
if (((Object)val.clip).name == "gab_Behold")
{
Debug.Log((object)"Replacing gabe behold");
AudioClip val2 = (((Object)(object)GabBundle != (Object)null) ? GabBundle.LoadAsset<AudioClip>("gab_gtfo.mp3") : null);
if ((Object)(object)val2 != (Object)null)
{
val.clip = val2;
flag = true;
Debug.Log((object)"Audio clip 'gab_gtfo.mp3' loaded and replaced successfully.");
}
else
{
Debug.LogError((object)"Failed to load audio clip 'gab_gtfo.mp3' from AssetBundle.");
}
}
if (!flag)
{
continue;
}
SubtitledAudioSource val3 = ((Component)val).GetComponent<SubtitledAudioSource>();
if ((Object)(object)val3 == (Object)null)
{
val3 = ((Component)val).gameObject.AddComponent<SubtitledAudioSource>();
Debug.Log((object)"SubtitledAudioSource component was missing and has been added.");
}
if ((Object)(object)val3 != (Object)null)
{
SubtitleData val4 = new SubtitleData();
val4.lines = (SubtitleDataLine[])(object)new SubtitleDataLine[1] { MakeLine("Get the FUCK out of my palace!", 2f) };
SubtitleData value = val4;
Traverse obj = Traverse.Create((object)val3).Field("subtitles");
obj.SetValue((object)value);
object value2 = obj.GetValue();
SubtitleData val5 = (SubtitleData)((value2 is SubtitleData) ? value2 : null);
if (val5 != null && val5.lines.Length != 0)
{
Debug.Log((object)"Subtitles updated successfully.");
}
else
{
Debug.LogError((object)"Failed to update subtitles. SubtitleData is null or empty.");
}
}
else
{
Debug.LogError((object)"Failed to add or find SubtitledAudioSource component.");
}
Scene activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name == "f1aa2efdf8dccae45b1396aef397ed79")
{
WatchForGameObjectActivation("gab_Intro1");
}
}
}
}
public class GameObjectWatcher : MonoBehaviour
{
private static GameObjectWatcher _instance;
public static GameObjectWatcher Instance
{
get
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_instance == (Object)null)
{
_instance = Object.FindObjectOfType<GameObjectWatcher>();
if ((Object)(object)_instance == (Object)null)
{
_instance = new GameObject("GameObjectWatcher").AddComponent<GameObjectWatcher>();
}
}
return _instance;
}
}
public static IEnumerator WaitForActivation(string gameObjectName)
{
GameObject targetGameObject = GameObject.Find(gameObjectName);
if ((Object)(object)targetGameObject == (Object)null)
{
Debug.LogError((object)("GameObject with the name '" + gameObjectName + "' not found in the scene."));
yield break;
}
while (!targetGameObject.activeInHierarchy)
{
yield return null;
}
Debug.Log((object)("GameObject '" + gameObjectName + "' is now active."));
}
}
private static Harmony harmony;
internal static AssetBundle GabBundle;
private static bool prefabInstantiated;
private void Awake()
{
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Expected O, but got Unknown
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
Debug.Log((object)"MACHINE! (simon's gabriel mod starting)");
Assembly.GetExecutingAssembly();
string path = "averagetiergabriel";
string text = Path.Combine(ModPath(), path);
if (File.Exists(text))
{
GabBundle = AssetBundle.LoadFromFile(text);
if ((Object)(object)GabBundle == (Object)null)
{
Debug.LogError((object)"Failed to load AssetBundle. The bundle is null.");
}
else
{
Debug.Log((object)"AssetBundle loaded successfully.");
}
}
else
{
Debug.LogError((object)("AssetBundle file not found at path: " + text));
}
harmony = new Harmony("simon.Gabriel");
harmony.PatchAll();
new GameObject("GameObjectWatcher").AddComponent<GameObjectWatcher>();
SceneManager.sceneLoaded += OnSceneLoaded;
}
private void OnDestroy()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
prefabInstantiated = false;
Debug.Log((object)"Scene loaded. Prefab instantiation flag reset.");
}
public static async void WatchForGameObjectActivation(string gameObjectName)
{
await Task.Run(delegate
{
CheckForGameObjectActivation(gameObjectName);
});
}
private static void CheckForGameObjectActivation(string gameObjectName)
{
bool found = false;
while (!found)
{
UnityMainThreadDispatcher.Instance().Enqueue(delegate
{
GameObject val = GameObject.Find(gameObjectName);
if ((Object)(object)val != (Object)null && val.activeInHierarchy)
{
Debug.Log((object)("GameObject '" + gameObjectName + "' is now active."));
LoadAndInstantiatePrefab();
found = true;
}
});
Thread.Sleep(50);
}
}
private static void LoadAndInstantiatePrefab()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
if (!prefabInstantiated)
{
string text = "cowardice";
GameObject val = GabBundle.LoadAsset<GameObject>(text);
if ((Object)(object)val != (Object)null)
{
Object.Instantiate<GameObject>(val, val.transform.position, val.transform.rotation);
Debug.Log((object)$"{text} prefab instantiated successfully at {val.transform.position}.");
prefabInstantiated = true;
}
else
{
Debug.LogError((object)("Failed to load prefab '" + text + "' from AssetBundle."));
}
}
}
public static string ModPath()
{
return Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf(Path.DirectorySeparatorChar));
}
private static SubtitleDataLine MakeLine(string subtitle, float time)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
return new SubtitleDataLine
{
subtitle = subtitle,
time = time
};
}
}
}