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 SCPE;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
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("Medieval2Spookified")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Medieval2Spookified")]
[assembly: AssemblyTitle("Medieval2Spookified")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Medieval2Spookified;
[BepInPlugin("org.bepinex.plugins.Medieval2Spooky", "Medieval2Spooky", "1.1.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("Medieval2Spooky");
val.PatchAll();
GameObject val2 = new GameObject("Medieval2Spooky");
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)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
string name = ((Scene)(ref scene)).name;
if (!(name == "HalloweenMedievalFinal"))
{
return;
}
Scene activeScene = SceneManager.GetActiveScene();
if (!(((Scene)(ref activeScene)).name == "HalloweenMedievalFinal"))
{
return;
}
GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
foreach (GameObject val in rootGameObjects)
{
if ((Object)(object)val.GetComponentInChildren<PostProcessVolume>() != (Object)null)
{
Debug.LogError((object)"Setting fog for map");
Fog val2 = new Fog();
((ParameterOverride<Texture>)(object)val2.skyboxTex).value = null;
((ParameterOverride)val2.skyboxTex).overrideState = true;
((ParameterOverride<bool>)(object)val2.useSceneSettings).value = false;
((ParameterOverride)val2.useSceneSettings).overrideState = true;
((ParameterOverride<FogMode>)(object)val2.fogMode).value = (FogMode)2;
((ParameterOverride)val2.fogMode).overrideState = true;
((ParameterOverride<float>)(object)val2.globalDensity).value = 1f;
((ParameterOverride)val2.globalDensity).overrideState = true;
((ParameterOverride<float>)(object)val2.fogStartDistance).value = 70f;
((ParameterOverride)val2.fogStartDistance).overrideState = true;
((ParameterOverride<float>)(object)val2.fogEndDistance).value = 600f;
((ParameterOverride)val2.fogEndDistance).overrideState = true;
((ParameterOverride<FogColorSource>)(object)val2.colorSource).value = (FogColorSource)0;
((ParameterOverride)val2.colorSource).overrideState = true;
((ParameterOverride<float>)(object)val2.skyboxMipLevel).value = 0f;
((ParameterOverride)val2.skyboxMipLevel).overrideState = true;
((ParameterOverride<Color>)(object)val2.fogColor).value = new Color(0.233f, 0.251f, 0.311f, 1f);
((ParameterOverride)val2.fogColor).overrideState = true;
((ParameterOverride<Texture>)(object)val2.fogColorGradient).value = null;
((ParameterOverride)val2.fogColorGradient).overrideState = true;
((ParameterOverride<float>)(object)val2.gradientDistance).value = 1000f;
((ParameterOverride)val2.gradientDistance).overrideState = true;
((ParameterOverride<bool>)(object)val2.gradientUseFarClipPlane).value = true;
((ParameterOverride)val2.gradientUseFarClipPlane).overrideState = true;
((ParameterOverride<bool>)(object)val2.distanceFog).value = true;
((ParameterOverride)val2.distanceFog).overrideState = true;
((ParameterOverride<float>)(object)val2.distanceDensity).value = 1f;
((ParameterOverride)val2.distanceDensity).overrideState = true;
((ParameterOverride<bool>)(object)val2.useRadialDistance).value = false;
((ParameterOverride)val2.useRadialDistance).overrideState = false;
((ParameterOverride<float>)(object)val2.skyboxInfluence).value = 0.864f;
((ParameterOverride)val2.skyboxInfluence).overrideState = true;
((ParameterOverride<bool>)(object)val2.skyboxFade).value = false;
((ParameterOverride)val2.skyboxFade).overrideState = true;
((ParameterOverride<bool>)(object)val2.heightFog).value = true;
((ParameterOverride)val2.heightFog).overrideState = true;
((ParameterOverride<float>)(object)val2.height).value = 1.7f;
((ParameterOverride)val2.height).overrideState = true;
((ParameterOverride<float>)(object)val2.heightDensity).value = 15f;
((ParameterOverride)val2.heightDensity).overrideState = true;
((ParameterOverride<bool>)(object)val2.heightFogNoise).value = false;
((ParameterOverride)val2.heightFogNoise).overrideState = true;
((ParameterOverride<Texture>)(object)val2.heightNoiseTex).value = null;
((ParameterOverride)val2.heightNoiseTex).overrideState = true;
((ParameterOverride<float>)(object)val2.heightNoiseSize).value = 0.25f;
((ParameterOverride)val2.heightNoiseSize).overrideState = true;
((ParameterOverride<float>)(object)val2.heightNoiseStrength).value = 1f;
((ParameterOverride)val2.heightNoiseStrength).overrideState = true;
((ParameterOverride<float>)(object)val2.heightNoiseSpeed).value = 2f;
((ParameterOverride)val2.heightNoiseSpeed).overrideState = true;
((ParameterOverride<bool>)(object)val2.lightScattering).value = false;
((ParameterOverride)val2.lightScattering).overrideState = true;
((ParameterOverride<float>)(object)val2.scatterIntensity).value = 10f;
((ParameterOverride)val2.scatterIntensity).overrideState = true;
((ParameterOverride<float>)(object)val2.scatterThreshold).value = 1f;
((ParameterOverride)val2.scatterThreshold).overrideState = true;
((ParameterOverride<float>)(object)val2.scatterDiffusion).value = 10f;
((ParameterOverride)val2.scatterDiffusion).overrideState = true;
((ParameterOverride<float>)(object)val2.scatterSoftKnee).value = 0.5f;
((ParameterOverride)val2.scatterSoftKnee).overrideState = true;
val.GetComponentInChildren<PostProcessVolume>().sharedProfile.AddSettings((PostProcessEffectSettings)(object)val2);
}
Renderer[] componentsInChildren = val.GetComponentsInChildren<Renderer>(true);
if ((Object)(object)val.GetComponent<PirateWaterManager>() != (Object)null)
{
val.GetComponent<PirateWaterManager>().WaterMaterial.shader = Shader.Find(((Object)val.GetComponent<PirateWaterManager>().WaterMaterial.shader).name);
}
Renderer[] array = componentsInChildren;
foreach (Renderer val3 in array)
{
Material[] sharedMaterials = val3.sharedMaterials;
foreach (Material val4 in sharedMaterials)
{
if (!((Object)(object)val4 == (Object)null))
{
val4.shader = Shader.Find(((Object)val4.shader).name) ?? val4.shader;
}
}
if (Object.op_Implicit((Object)(object)((Component)val3).GetComponent<PiratePlacementTransparency>()))
{
((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.shader = Shader.Find(((Object)((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.shader).name) ?? ((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.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 == "medievalmap")
{
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 Medieval2Spookified Successfully!");
LoadStuff.LoadAssets(reload: false);
SceneLoadHandler.Init();
}
}