using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using DM;
using HarmonyLib;
using Landfall.TABS;
using UnityEngine;
using UnityEngine.SceneManagement;
[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("WesternHoliday")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("WesternHoliday")]
[assembly: AssemblyTitle("WesternHoliday")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace WesternHoliday;
[BepInPlugin("org.bepinex.plugins.WesternHoliday", "WesternHoliday", "1.0.0")]
internal class Loader : BaseUnityPlugin
{
private void Awake()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Expected O, but got Unknown
Harmony val = new Harmony("WesternHoliday");
val.PatchAll();
GameObject val2 = new GameObject("WesternHoliday");
Object.DontDestroyOnLoad((Object)(object)val2);
val2.AddComponent<LoadStuff>();
val2.AddComponent<Main>();
}
}
public static class SceneLoadHandler
{
public static void Init()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
private static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
string name = ((Scene)(ref scene)).name;
if (!(name == "WesternHoliday"))
{
return;
}
Scene activeScene = SceneManager.GetActiveScene();
if (!(((Scene)(ref activeScene)).name == "WesternHoliday"))
{
return;
}
GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
foreach (GameObject val in rootGameObjects)
{
if (!(name == "WesternHoliday"))
{
continue;
}
Renderer[] componentsInChildren = val.GetComponentsInChildren<Renderer>(true);
Renderer[] array = componentsInChildren;
foreach (Renderer val2 in array)
{
Material[] sharedMaterials = val2.sharedMaterials;
foreach (Material val3 in sharedMaterials)
{
if (!((Object)(object)val3 == (Object)null))
{
val3.shader = Shader.Find(((Object)val3.shader).name) ?? val3.shader;
}
}
}
}
}
}
public class LoadStuff : MonoBehaviour
{
public static void LoadAssets(bool reload)
{
//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
LandfallContentDatabase landfallContentDatabase = ContentDatabase.Instance().LandfallContentDatabase;
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string[] files = Directory.GetFiles(directoryName, "*.ab", SearchOption.TopDirectoryOnly);
if (files.Length == 0)
{
Debug.LogError((object)"No .ab files found in current directory!");
return;
}
string[] array = files;
foreach (string text in array)
{
AssetBundle val = AssetBundle.LoadFromFile(text);
string text2 = Path.GetFileNameWithoutExtension(text).ToLower();
if (text2 == "westernholidaymap")
{
continue;
}
List<MapAsset> list = val.LoadAllAssets<MapAsset>().ToList();
Dictionary<DatabaseID, Object> dictionary = (Dictionary<DatabaseID, Object>)typeof(AssetLoader).GetField("m_nonStreamableAssets", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ContentDatabase.Instance().AssetLoader);
if (list.Count <= 0)
{
continue;
}
MapAsset[] array2 = (MapAsset[])typeof(LandfallContentDatabase).GetField("m_orderedMapAssets", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase);
Dictionary<DatabaseID, int> dictionary2 = new Dictionary<DatabaseID, int>();
List<MapAsset> list2 = new List<MapAsset>();
for (int j = 0; j < array2.Count(); j++)
{
list2.Add(array2[j]);
}
foreach (MapAsset item in list)
{
if ((Object)(object)item != (Object)null)
{
list2.Add(item);
item.m_mapIndex = list2.Count();
}
}
foreach (MapAsset item2 in list2)
{
dictionary2.Add(item2.Entity.GUID, list2.IndexOf(item2));
}
typeof(LandfallContentDatabase).GetField("m_orderedMapAssets", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, list2.ToArray());
typeof(LandfallContentDatabase).GetField("m_mapAssetIndexLookup", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, dictionary2);
}
}
}
public class Main : MonoBehaviour
{
public void Awake()
{
Debug.Log((object)"Loaded WesternHoliday Successfully!");
LoadStuff.LoadAssets(reload: false);
SceneLoadHandler.Init();
}
}