using System;
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 BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Unity.AI.Navigation;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TonightWeDine")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Changes the layout of Dine's exterior.")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: AssemblyInformationalVersion("1.0.2+be052c04676427ad77a675481d56cdf0a5a0110f")]
[assembly: AssemblyProduct("TonightWeDine")]
[assembly: AssemblyTitle("TonightWeDine")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.2.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 TonightWeDine
{
internal class TonightWeDineConfig
{
internal enum DineLayoutEnum
{
V60 = -1,
V50,
Hybrid
}
internal static ConfigEntry<DineLayoutEnum> dineLayout;
public static void Bind(ConfigFile config)
{
dineLayout = config.Bind<DineLayoutEnum>("7-Dine", "Layout", DineLayoutEnum.V50, "Dine's Exterior Layout\n\nV60 = V60's exterior\n\nV50 = V50's exterior\n\nHybrid = V50's exterior with V49's entrances");
}
}
[BepInPlugin("TonightWeDine", "TonightWeDine", "1.0.2")]
public class Plugin : BaseUnityPlugin
{
private readonly Harmony harmony = new Harmony("TonightWeDine");
public static Plugin Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin TonightWeDine is loaded!");
TonightWeDineConfig.Bind(((BaseUnityPlugin)this).Config);
Assets.LoadAssets();
harmony.PatchAll(typeof(DineOverridePatch));
if (Chainloader.PluginInfos.ContainsKey("butterystancakes.lethalcompany.chameleon"))
{
harmony.PatchAll(typeof(ChameleonFancyDoorPatch));
}
SceneManager.sceneUnloaded += delegate
{
DineOverride.executed = false;
DineOverride.fancyExecuted = false;
};
}
public static void Log(string msg)
{
((BaseUnityPlugin)Instance).Logger.LogInfo((object)msg);
}
public static void LogError(string msg)
{
((BaseUnityPlugin)Instance).Logger.LogError((object)msg);
}
public static void LogDebug(string msg)
{
((BaseUnityPlugin)Instance).Logger.LogDebug((object)msg);
}
}
internal class DineOverridePatch
{
[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
[HarmonyPriority(900)]
[HarmonyPostfix]
private static void FinishGeneratingNewLevel_DineOverridePatch()
{
if (((Object)StartOfRound.Instance.currentLevel).name == "DineLevel" && !DineOverride.executed)
{
DineOverride.executed = true;
if (TonightWeDineConfig.dineLayout.Value >= TonightWeDineConfig.DineLayoutEnum.V50)
{
Plugin.LogDebug("Dine's layout is \"" + TonightWeDineConfig.dineLayout.Value.ToString() + "\"");
DineOverride.DineSceneOverride((int)TonightWeDineConfig.dineLayout.Value);
}
Plugin.LogDebug("Fixing Dine's pits");
DineOverride.DineFixes();
}
}
}
internal class ChameleonFancyDoorPatch
{
[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
[HarmonyPriority(300)]
[HarmonyPostfix]
private static void FancyDoorsPatch()
{
if (((Object)StartOfRound.Instance.currentLevel).name == "DineLevel" && TonightWeDineConfig.dineLayout.Value >= TonightWeDineConfig.DineLayoutEnum.V50 && !DineOverride.fancyExecuted)
{
DineOverride.fancyExecuted = true;
DineOverride.FancyDoorOverride();
}
}
}
internal static class Assets
{
internal static AssetBundle assetBundle;
internal static Mesh newSurfaceMesh;
internal static Mesh metalWallMesh;
internal static GameObject treeNearFire;
internal static GameObject leavesNearFire;
internal static void LoadAssets()
{
try
{
assetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "tonightwedine"));
newSurfaceMesh = assetBundle.LoadAsset<Mesh>("DineHybridTerrain");
metalWallMesh = assetBundle.LoadAsset<Mesh>("Cube.001_0");
treeNearFire = assetBundle.LoadAsset<GameObject>("NearFireTree");
leavesNearFire = assetBundle.LoadAsset<GameObject>("NearFireLeaves");
assetBundle.Unload(false);
}
catch
{
Plugin.LogError("Failed to load mod assets!");
}
}
}
internal static class DineOverride
{
internal static bool executed;
internal static bool fancyExecuted;
internal static void DineSceneOverride(int dineVersion)
{
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0409: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_0446: Unknown result type (might be due to invalid IL or missing references)
//IL_0461: Unknown result type (might be due to invalid IL or missing references)
//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
//IL_0309: Unknown result type (might be due to invalid IL or missing references)
//IL_032c: Unknown result type (might be due to invalid IL or missing references)
//IL_034b: Unknown result type (might be due to invalid IL or missing references)
//IL_049e: Unknown result type (might be due to invalid IL or missing references)
//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
//IL_036e: Unknown result type (might be due to invalid IL or missing references)
//IL_038d: Unknown result type (might be due to invalid IL or missing references)
//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0516: Unknown result type (might be due to invalid IL or missing references)
//IL_0553: Unknown result type (might be due to invalid IL or missing references)
//IL_0573: Unknown result type (might be due to invalid IL or missing references)
//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
//IL_060d: Unknown result type (might be due to invalid IL or missing references)
//IL_062d: Unknown result type (might be due to invalid IL or missing references)
//IL_066a: Unknown result type (might be due to invalid IL or missing references)
//IL_068a: Unknown result type (might be due to invalid IL or missing references)
//IL_06c7: Unknown result type (might be due to invalid IL or missing references)
//IL_06e7: Unknown result type (might be due to invalid IL or missing references)
//IL_0702: Unknown result type (might be due to invalid IL or missing references)
if (dineVersion < 0)
{
return;
}
GameObject obj = GameObject.Find("/Environment/NeonLightsSingle");
if (obj != null)
{
obj.SetActive(false);
}
GameObject obj2 = GameObject.Find("/Environment/Map/CementFacility1/Cube.002");
Transform val = ((obj2 != null) ? obj2.transform : null);
GameObject obj3 = GameObject.Find("/Environment/FireExitDoorContainer/FireExitDoor");
Transform val2 = ((obj3 != null) ? obj3.transform : null);
GameObject obj4 = GameObject.Find("/Environment/Teleports/EntranceTeleportB");
Transform val3 = ((obj4 != null) ? obj4.transform : null);
switch (dineVersion)
{
case 0:
if ((Object)(object)val != (Object)null)
{
val.localPosition = new Vector3(21.48f, 1.69f, 54.77f);
val.localRotation = new Quaternion(0.043608133f, -0.70601994f, -0.7056099f, -0.04182105f);
val.localScale = new Vector3(0.6834142f, 0.8991681f, 0.6834142f);
}
if ((Object)(object)val2 != (Object)null)
{
val2.localPosition = new Vector3(-73.69555f, 9.62243f, 48.685997f);
val2.localRotation = new Quaternion(0f, 0.85768974f, 0f, -0.51416767f);
}
if ((Object)(object)val3 != (Object)null)
{
val3.localPosition = new Vector3(137.39407f, -15.564064f, 46.236385f);
val3.localRotation = new Quaternion(0f, 0.9981922f, 0f, 0.06010294f);
val3.localScale = new Vector3(1.9334757f, 3.462273f, 0.5321793f);
}
break;
case 1:
{
GameObject val4 = GameObject.Find("/Environment/NewDineTerrainCutdown");
if ((Object)(object)val4 != (Object)null)
{
val4.GetComponent<MeshFilter>().mesh = Assets.newSurfaceMesh;
val4.GetComponent<MeshCollider>().sharedMesh = Assets.newSurfaceMesh;
}
GameObject obj5 = GameObject.Find("/Environment/ReverbTriggers (1)/WindTriggers");
Transform val5 = ((obj5 != null) ? obj5.transform : null);
GameObject val6 = GameObject.Find("/Environment/ReverbTriggers (1)/WindTriggers/shipWindTrigger2");
if ((Object)(object)val6 != (Object)null && (Object)(object)val5 != (Object)null)
{
GameObject obj6 = Object.Instantiate<GameObject>(val6, val5);
obj6.transform.localPosition = new Vector3(-193.03427f, 7.074562f, -83.64745f);
obj6.transform.localRotation = new Quaternion(0f, 0f, 0f, 1f);
obj6.transform.localScale = new Vector3(12.9657545f, 6.9007154f, 11.519966f);
}
if ((Object)(object)RoundManager.Instance.mapPropsContainer == (Object)null)
{
RoundManager.Instance.mapPropsContainer = GameObject.FindGameObjectWithTag("MapPropsContainer");
}
if ((Object)(object)RoundManager.Instance.mapPropsContainer != (Object)null)
{
Object.Instantiate<GameObject>(Assets.treeNearFire, RoundManager.Instance.mapPropsContainer.transform);
Object.Instantiate<GameObject>(Assets.leavesNearFire, RoundManager.Instance.mapPropsContainer.transform);
}
if ((Object)(object)val != (Object)null)
{
val.localPosition = new Vector3(-15.267663f, 5.13949f, 29.441992f);
val.localRotation = new Quaternion(-0.2334155f, -0.66771203f, -0.66668123f, 0.23497672f);
val.localScale = new Vector3(0.5241794f, 0.64612794f, 0.4780146f);
}
if ((Object)(object)val2 != (Object)null)
{
val2.localPosition = new Vector3(-218.79054f, 32.197186f, -177.6566f);
val2.localRotation = new Quaternion(0f, 0.5992887f, 0f, -0.800533f);
}
if ((Object)(object)val3 != (Object)null)
{
val3.localPosition = new Vector3(-28.067f, 1.4099998f, -70.185f);
val3.localRotation = new Quaternion(0f, 0.94372284f, 0f, -0.33073732f);
val3.localScale = new Vector3(1.9334757f, 3.462273f, 0.5321793f);
}
break;
}
}
GameObject val7 = GameObject.Find("/Environment/Map/Cube.001 (16)");
if ((Object)(object)val7 != (Object)null)
{
val7.GetComponent<MeshFilter>().mesh = Assets.metalWallMesh;
val7.transform.localPosition = new Vector3(179.3406f, -20.249994f, -22.0728f);
val7.transform.localScale = new Vector3(1f, 1.4000261f, 1.1451999f);
}
GameObject obj7 = GameObject.Find("/Environment/Map/Cube.001 (8)");
BoxCollider val8 = ((obj7 != null) ? obj7.GetComponent<BoxCollider>() : null);
if ((Object)(object)val8 != (Object)null)
{
val8.center = new Vector3(-0.14010677f, -2.7291498f, -0.26022604f);
val8.size = new Vector3(0.53314275f, 6.8050165f, 4.480085f);
}
GameObject obj8 = GameObject.Find("/Environment/Map/Cube.001 (4)");
BoxCollider val9 = ((obj8 != null) ? obj8.GetComponent<BoxCollider>() : null);
if ((Object)(object)val9 != (Object)null)
{
val9.center = new Vector3(-0.14010829f, -1.0517684f, -0.26022604f);
val9.size = new Vector3(0.53314275f, 10.159763f, 4.480085f);
}
GameObject obj9 = GameObject.Find("/Environment/Plane");
Transform val10 = ((obj9 != null) ? obj9.transform : null);
if ((Object)(object)val10 != (Object)null)
{
val10.localPosition = new Vector3(178.84203f, -20.405f, -16.50813f);
val10.localRotation = new Quaternion(0.5249201f, -0.4737709f, -0.4737702f, -0.52492076f);
}
GameObject obj10 = GameObject.Find("/Environment/SteelDoorFake");
Transform val11 = ((obj10 != null) ? obj10.transform : null);
if ((Object)(object)val11 != (Object)null)
{
val11.localPosition = new Vector3(178.729f, -20.34f, -15.17f);
val11.localRotation = new Quaternion(0.038197827f, -0.7060744f, -0.70607436f, -0.03819688f);
}
GameObject obj11 = GameObject.Find("/Environment/SteelDoorFake (1)");
Transform val12 = ((obj11 != null) ? obj11.transform : null);
if ((Object)(object)val12 != (Object)null)
{
val12.localPosition = new Vector3(179.06046f, -20.340002f, -18.119337f);
val12.localRotation = new Quaternion(0.03954247f, -0.7060007f, -0.706f, -0.039542507f);
}
GameObject obj12 = GameObject.Find("/Environment/DoorFrame (1)");
Transform val13 = ((obj12 != null) ? obj12.transform : null);
if ((Object)(object)val13 != (Object)null)
{
val13.localPosition = new Vector3(178.902f, -23.807f, -16.656f);
val13.localRotation = new Quaternion(0.03933583f, -0.7060121f, -0.70601153f, -0.03933586f);
}
GameObject obj13 = GameObject.Find("/Environment/Teleports/EntranceTeleportA");
Transform val14 = ((obj13 != null) ? obj13.transform : null);
if ((Object)(object)val14 != (Object)null)
{
val14.localPosition = new Vector3(178.67831f, -21.2327f, -16.662853f);
val14.localRotation = new Quaternion(0f, 0.99843365f, 0f, 0.055948973f);
}
GameObject obj14 = GameObject.Find("/Environment/ScanNodes/ScanNode");
Transform val15 = ((obj14 != null) ? obj14.transform : null);
if ((Object)(object)val15 != (Object)null)
{
val15.localPosition = new Vector3(175.7f, -24.01f, -19.5f);
val15.localRotation = new Quaternion(0.7071068f, -0.7071068f, -2.43634E-06f, 2.43634E-06f);
val15.localScale = new Vector3(9.139909f, 138.73448f, 4.0328393f);
}
GameObject val16 = GameObject.Find("/Environment");
if ((Object)(object)val16 != (Object)null)
{
val16.GetComponent<NavMeshSurface>().RemoveData();
val16.GetComponent<NavMeshSurface>().BuildNavMesh();
}
}
internal static void FancyDoorOverride()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = GameObject.Find("/Environment/MapPropsContainer/WideDoorFrame(Clone)");
Transform val = ((obj != null) ? obj.transform : null);
if ((Object)(object)val != (Object)null)
{
Plugin.LogDebug("Found Chameleon's fancy door, moving them");
((Component)val).transform.position = new Vector3(-156.553f, -15.126f, 12.155f);
((Component)val).transform.rotation = new Quaternion(-0.70618117f, -0.036169115f, -0.036169115f, 0.70618117f);
}
}
internal static void DineFixes()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = GameObject.Find("/Environment/Map/KillTrigger (1)");
Transform val = ((obj != null) ? obj.transform : null);
if ((Object)(object)val != (Object)null)
{
val.localScale = new Vector3(349.60406f, 0.69064f, 181.3727f);
}
GameObject obj2 = GameObject.Find("/Environment/Map/KillTrigger (4)");
Transform val2 = ((obj2 != null) ? obj2.transform : null);
if ((Object)(object)val2 != (Object)null)
{
val2.localScale = new Vector3(42.223473f, 0.69064f, 81.23343f);
}
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "TonightWeDine";
public const string PLUGIN_NAME = "TonightWeDine";
public const string PLUGIN_VERSION = "1.0.2";
}
}