using System.Threading.Tasks; using BepInEx; using HarmonyLib; using BepInEx.Logging; using BepInEx.Configuration; using UnityEngine; using System.Reflection; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine.Networking; using System.Collections; using LethalLib.Modules; using LethalLevelLoader; using ScarletMansion.GamePatch; using ScarletMansion.ModPatch; using ScarletMansion.DunGenPatch; using ScarletMansion.GamePatch.Managers; namespace ScarletMansion { [BepInPlugin(modGUID, modName, modVersion)] [BepInDependency("imabatby.lethallevelloader", "1.2.0.1")] [BepInDependency("evaisa.lethallib", "0.13.2")] [BepInDependency(ModCompability.advancedCompanyGuid, BepInDependency.DependencyFlags.SoftDependency)] [BepInDependency(ModCompability.lethalConfigGuid, BepInDependency.DependencyFlags.SoftDependency)] [BepInDependency(ModCompability.facilityMeldownGuid, BepInDependency.DependencyFlags.SoftDependency)] [BepInDependency(ModCompability.reserveFlashlightGuid, BepInDependency.DependencyFlags.SoftDependency)] [BepInProcess("Lethal Company.exe")] public class Plugin : BaseUnityPlugin { public const string modGUID = "ImoutoSama.ScarletMansion"; private const string modName = "Scarlet Mansion"; private const string modVersion = "1.3.13"; public readonly Harmony harmony = new Harmony(modGUID); public static Plugin Instance {get; private set;} public static PluginConfig MyConfig { get; internal set; } public static ManualLogSource logger { get; internal set; } void Awake(){ if (Instance == null) Instance = this; logger = BepInEx.Logging.Logger.CreateLogSource(modGUID); logger.LogInfo($"Plugin {modName} has been added!"); MyConfig = new PluginConfig(Config); //MyConfig.SerializerTest(); ModCompability.GetActiveMods(); ModCompability.ActivateActiveMods(); //harmony.PatchAll(typeof(MenuManagerPatch)); harmony.PatchAll(typeof(InitPatch)); harmony.PatchAll(typeof(RoundManagerPatch)); harmony.PatchAll(typeof(LoadAssetsIntoLevelPatch)); harmony.PatchAll(typeof(EnemyVentPatch)); harmony.PatchAll(typeof(JesterAIPatch)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(DoorLockPatch)); harmony.PatchAll(typeof(ShotgunItemPatch)); harmony.PatchAll(typeof(ShovelPatch)); //harmony.PatchAll(typeof(OptimizePatch)); harmony.PatchAll(typeof(DoorwayConnectionPatch)); harmony.PatchAll(typeof(GeneratePathPatch)); harmony.PatchAll(typeof(PostProcessPatch)); harmony.PatchAll(typeof(PluginConfig)); SetupForNetcodePatcher(); Assets.LoadAssetBundle(); var dungeonMatchPropeties = ScriptableObject.CreateInstance(); dungeonMatchPropeties.authorNames.Add(new StringWithRarity("Alice", 10)); /* var itemLevelMatchProperties = ScriptableObject.CreateInstance(); foreach(var item in Assets.items){ item.stringWithRarity = new StringWithRarity("Alice", 0); itemLevelMatchProperties.authorNames.Add(item.stringWithRarity); } */ var sdmLevelMatchProperties = ScriptableObject.CreateInstance(); sdmLevelMatchProperties.planetNames.Add(new StringWithRarity("Dine", 300)); sdmLevelMatchProperties.planetNames.Add(new StringWithRarity("Rend", 300)); sdmLevelMatchProperties.planetNames.Add(new StringWithRarity("Titan", 69)); var extendedContent = new List(); var extendedDungeon = ScriptableObject.CreateInstance(); extendedDungeon.name = "Scarlet Devil Mansion"; extendedDungeon.DungeonName = "Scarlet Devil Mansion"; extendedDungeon.DungeonFlow = Assets.dungeon; extendedDungeon.FirstTimeDungeonAudio = Assets.entranceAudioClip; extendedDungeon.LevelMatchingProperties = sdmLevelMatchProperties; extendedDungeon.DynamicDungeonSizeMinMax = new Vector2(1f, 2f); extendedDungeon.DynamicDungeonSizeLerpRate = 0f; extendedDungeon.GenerateAutomaticConfigurationOptions = true; extendedContent.Add(extendedDungeon); // items /* foreach(var item in Assets.items){ var extendedItem = ScriptableObject.CreateInstance(); extendedItem.Item = item.item; extendedItem.DungeonMatchingProperties = dungeonMatchPropeties; //extendedItem.LevelMatchingProperties = itemLevelMatchProperties; extendedContent.Add(extendedItem); } */ var extendedMod = ExtendedMod.Create("Scarlet Devil Mansion", "Alice", extendedContent.ToArray()); PatchedContent.RegisterExtendedMod(extendedMod); // Assets.extendedMod = extendedMod; Assets.dungeonExtended = extendedDungeon; foreach(var i in Assets.scrapItems){ Items.RegisterScrap(i.item, 0, Levels.LevelTypes.None); NetworkPrefabs.RegisterNetworkPrefab(i.item.spawnPrefab); } extendedDungeon.dungeonEvents.onBeforeDungeonGenerate.AddListener(GeneratePathPatch.GeneratePatch); DoorwayManager.onMainEntranceTeleportSpawnedEvent.AddEvent("DoorwayCleanup", DoorwayManager.onMainEntranceTeleportSpawnedFunction); } void SetupForNetcodePatcher(){ var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var type in types) { //Debug.Log(type); var methods = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (var method in methods) { var attributes = method.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), false); if (attributes.Length > 0) { method.Invoke(null, null); } } } } } }