diff --git a/MimicsPatch/ScarletMansionMimicsPatch/Patch.cs b/MimicsPatch/ScarletMansionMimicsPatch/Patch.cs index 94b9b6a..aa08e2e 100644 --- a/MimicsPatch/ScarletMansionMimicsPatch/Patch.cs +++ b/MimicsPatch/ScarletMansionMimicsPatch/Patch.cs @@ -25,10 +25,21 @@ namespace ScarletMansionMimicsPatch { public static void Activate() { MimicsAPI.GetAPI().RegisterMimicEventHandler(new Patch.SDMMimicEventHandler()); - //Mimics.Mimics.InteriorWhitelist.Add(); + AddToWhiteList("sdmFoyer"); + AddToWhiteList("sdmBasement"); + + Plugin.logger.LogError(string.Join(", ", Mimics.Mimics.InteriorWhitelist)); + Plugin.Instance.harmony.PatchAll(typeof(Patch)); } + private static void AddToWhiteList(string dungeonName){ + dungeonName = dungeonName.ToLower().Trim(); + if (!Mimics.Mimics.InteriorWhitelist.Contains(dungeonName)){ + Mimics.Mimics.InteriorWhitelist.Add(dungeonName); + } + } + public class SDMMimicEventHandler : MimicEventHandler { @@ -73,6 +84,11 @@ namespace ScarletMansionMimicsPatch { [HarmonyPatch("Mimics.Mimics+RoundManagerPatch, Mimics", "SetExitIDsPatch")] public static void SetExitIDsPatchPrefix(){ colorBlindModeLastValue = Mimics.Mimics.ColorBlindMode; + + var whitelist = string.Join(", ", Mimics.Mimics.InteriorWhitelist); + // Plugin.logger.LogError(); + //var + //Plugin.logger.LogError(string.Join(", ", Mimics.Mimics.InteriorWhitelist)); } [HarmonyPostfix] diff --git a/ScarletMansion/ScarletMansion/Configs/ConfigManager.cs b/ScarletMansion/ScarletMansion/Configs/ConfigManager.cs index 65f59e7..7a5affc 100644 --- a/ScarletMansion/ScarletMansion/Configs/ConfigManager.cs +++ b/ScarletMansion/ScarletMansion/Configs/ConfigManager.cs @@ -101,8 +101,6 @@ namespace ScarletMansion.Configs { logger.LogDebug("Successfully synced config with host."); } - [HarmonyPatch(typeof(GameNetcodeStuff.PlayerControllerB), "ConnectClientToPlayerObject")] - [HarmonyPostfix] public static void InitializeLocalPlayer(){ if (IsHost){ MessageManager.RegisterNamedMessageHandler(GetRequestMessage, OnRequestSync); @@ -115,11 +113,6 @@ namespace ScarletMansion.Configs { RequestSync(); } - [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] - [HarmonyPostfix] - public static void PlayerLeave(){ - RevertSync(); - } public override string ToString() { var variables = typeof(T).GetFields(BindingFlags.Public | BindingFlags.Instance); diff --git a/ScarletMansion/ScarletMansion/Configs/ConfigPatch.cs b/ScarletMansion/ScarletMansion/Configs/ConfigPatch.cs new file mode 100644 index 0000000..15dd50e --- /dev/null +++ b/ScarletMansion/ScarletMansion/Configs/ConfigPatch.cs @@ -0,0 +1,30 @@ +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace ScarletMansion.Configs +{ + public class ConfigPatch { + + [HarmonyPatch(typeof(GameNetcodeStuff.PlayerControllerB), "ConnectClientToPlayerObject")] + [HarmonyPostfix] + public static void InitializeLocalPlayerPatch(){ + ConfigMain.InitializeLocalPlayer(); + ConfigDungeonFoyer.InitializeLocalPlayer(); + ConfigDungeonBasement.InitializeLocalPlayer(); + } + + [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] + [HarmonyPostfix] + public static void PlayerLeavePatch(){ + ConfigMain.RevertSync(); + ConfigDungeonFoyer.RevertSync(); + ConfigDungeonBasement.RevertSync(); + } + + } +} diff --git a/ScarletMansion/ScarletMansion/GamePatch/InitPatch.cs b/ScarletMansion/ScarletMansion/GamePatch/InitPatch.cs index c2e729b..51dfb9b 100644 --- a/ScarletMansion/ScarletMansion/GamePatch/InitPatch.cs +++ b/ScarletMansion/ScarletMansion/GamePatch/InitPatch.cs @@ -79,7 +79,9 @@ namespace ScarletMansion.GamePatch { [HarmonyPatch(typeof(RoundManager), "Start")] [HarmonyPostfix] public static void RoundManagerStartPatch(ref RoundManager __instance) { - MyOwnCoroutine.AddCoroutine(UpdateNetworkConfig(__instance)); + MyOwnCoroutine.AddCoroutine(UpdateConfigMain()); + MyOwnCoroutine.AddCoroutine(UpdateConfigDungeon(ConfigDungeonFoyer.Instance)); + MyOwnCoroutine.AddCoroutine(UpdateConfigDungeon(ConfigDungeonBasement.Instance)); } public static bool GameReadNullCheck(object target, string targetString, string error) { @@ -368,8 +370,8 @@ namespace ScarletMansion.GamePatch { } - private static IEnumerator UpdateNetworkConfig(RoundManager roundManager){ - while(ConfigMain.Synced == false || ConfigDungeonFoyer.Synced == false){ + private static IEnumerator UpdateConfigMain(){ + while(ConfigMain.Synced == false){ yield return null; } @@ -377,13 +379,20 @@ namespace ScarletMansion.GamePatch { scrap.UpdateItemValue(); } - ConfigDungeonFoyer.Instance.dungeon.Length = ConfigDungeonFoyer.Instance.mainPathLengthValue.GetDungenIntRange(); + Plugin.logger.LogDebug("Config Main updated"); + } - ConfigDungeonFoyer.Instance.dungeonExtended.OverrideKeyPrefab = Assets.key.GetConfigItemEntry().enabled ? - Assets.key.item.spawnPrefab : - typeof(DungeonLoader).GetField("defaultKeyPrefab", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null) as GameObject; + private static IEnumerator UpdateConfigDungeon(ConfigDungeon instance) where T: ConfigDungeon{ + while(instance.SyncedLocal == false){ + yield return null; + } - Plugin.logger.LogDebug("Set networked config values"); + var defaultKeyPrefab = typeof(DungeonLoader).GetField("defaultKeyPrefab", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null) as GameObject; + + instance.dungeon.Length = instance.mainPathLengthValue.GetDungenIntRange(); + instance.dungeonExtended.OverrideKeyPrefab = Assets.key.GetConfigItemEntry().enabled ? Assets.key.item.spawnPrefab : defaultKeyPrefab; + + Plugin.logger.LogDebug($"Config {typeof(T)} updated"); } } diff --git a/ScarletMansion/ScarletMansion/Plugin.cs b/ScarletMansion/ScarletMansion/Plugin.cs index bb7c61b..2bb2754 100644 --- a/ScarletMansion/ScarletMansion/Plugin.cs +++ b/ScarletMansion/ScarletMansion/Plugin.cs @@ -23,9 +23,9 @@ namespace ScarletMansion { [BepInPlugin(modGUID, modName, modVersion)] - [BepInDependency("imabatby.lethallevelloader", "1.3.13")] + [BepInDependency("imabatby.lethallevelloader", "1.4.0")] [BepInDependency("evaisa.lethallib", "0.13.2")] - [BepInDependency("dev.ladyalice.dungenplus", "1.3.3")] + [BepInDependency("dev.ladyalice.dungenplus", "1.3.4")] [BepInDependency("dev.ladyalice.scarletmansion.foyer")] [BepInDependency("dev.ladyalice.scarletmansion.basement")] //[BepInDependency(ModCompability.advancedCompanyGuid, BepInDependency.DependencyFlags.SoftDependency)] @@ -37,7 +37,7 @@ namespace ScarletMansion { public class Plugin : BaseUnityPlugin { public const string modGUID = "dev.ladyalice.scarletmansion"; private const string modName = "Scarlet Devil Mansion"; - private const string modVersion = "2.1.1"; + private const string modVersion = "2.2.0"; public readonly Harmony harmony = new Harmony(modGUID); @@ -82,9 +82,7 @@ namespace ScarletMansion { harmony.PatchAll(typeof(GeneratePathPatch)); - harmony.PatchAll(typeof(ConfigMain)); - harmony.PatchAll(typeof(ConfigDungeonFoyer)); - harmony.PatchAll(typeof(ConfigDungeonBasement)); + harmony.PatchAll(typeof(ConfigPatch)); SetupForNetcodePatcher(); diff --git a/ScarletMansion/ScarletMansion/ScarletMansion.csproj b/ScarletMansion/ScarletMansion/ScarletMansion.csproj index 7381ee8..47deec1 100644 --- a/ScarletMansion/ScarletMansion/ScarletMansion.csproj +++ b/ScarletMansion/ScarletMansion/ScarletMansion.csproj @@ -163,6 +163,7 @@ + diff --git a/ScarletMansion/ScarletMansion/SyncedInstance.cs b/ScarletMansion/ScarletMansion/SyncedInstance.cs index 868a3b4..e2904be 100644 --- a/ScarletMansion/ScarletMansion/SyncedInstance.cs +++ b/ScarletMansion/ScarletMansion/SyncedInstance.cs @@ -28,6 +28,8 @@ namespace ScarletMansion { public static bool Synced { get; internal set; } + public bool SyncedLocal => Synced; + protected void InitInstance(T instance) { Default = instance; Instance = instance;