睡眠选项

创作者: aiTookMyJob
已更新:2024-03-06 13:36:48
3KB

关于此 MOD

自定义睡眠选项包括以下检查:夜晚、敌人、暴露、火焰和潮湿状态。
自定义睡眠选项包括以下检查:夜晚、敌人、暴露、火焰和潮湿状态。

使用BepInEx;
使用BepInEx配置
使用 HarmonyLib;
使用 System.Reflection;
使用Unity引擎;

睡眠选项命名空间
{
    [BepInPlugin("innocreator.sleepoptions", "睡眠选项", "1.0")]
    [BepInProcess("valheim.exe")]
    公开类 睡眠选项 : 基础Unity插件
    {
        public static ConfigEntry<bool> showDebugMessages;
        public static ConfigEntry<bool> sleepCheckNight;
        public static ConfigEntry<bool> sleepCheckEnemies;
        public static ConfigEntry<bool> sleepCheckExposure;
        public static ConfigEntry<bool> sleepCheckFire;
        public static ConfigEntry<bool> sleepCheckWet;
        私有只读的 Harmony harmony = new Harmony("innocreator.sleepoptions");

        觉醒
        {
            showDebugMessages = Config.Bind<bool>("General", "showDebugMessages", false, "显示脚本调试消息。");
            sleepCheckNight = Config.Bind<bool>("Options", "sleepCheckNight", false, "禁用床的夜间检查。");
            sleepCheckEnemies = Config.Bind<bool>("Options", "sleepCheckEnemies", true, "禁用床的敌人检查。");
            sleepCheckExposure = Config.Bind<bool>("Options", "sleepCheckExposure", true, "禁用床铺的暴露检查。");
            sleepCheckFire = Config.Bind<bool>("Options", "sleepCheckFire", true, "禁用床的FIRE检查。");
            sleepCheckWet = Config.Bind<bool>("Options", "sleepCheckWet", true, "禁用床铺的WET检查。");
            和谐.补丁全部();
        }
    
        [和谐补丁(typeof(床), nameof(床.交互))]
        睡眠选项_交互
        {
            static bool Prefix(Bed __instance, Humanoid human, bool repeat, bool alt)
            {
                如果(显示调试信息.值)
                    调试.输出(“innoCreator 交互”);
                MethodInfo methodIsNightInfo = typeof(EnvMan).GetMethod("IsNight", BindingFlags.Public | BindingFlags.Instance);
                MethodInfo methodCheckEnemiesInfo = typeof(Bed).GetMethod("CheckEnemies", BindingFlags.NonPublic | BindingFlags.Instance);
                MethodInfo methodCheckExposureInfo = typeof(Bed).GetMethod("CheckExposure", BindingFlags.NonPublic | BindingFlags.Instance);
                MethodInfo methodCheckFireInfo = typeof(Bed).GetMethod("CheckFire", BindingFlags.NonPublic | BindingFlags.Instance);
                MethodInfo methodCheckWetInfo = typeof(Bed).GetMethod("CheckWet", BindingFlags.NonPublic | BindingFlags.Instance);
                玩家 playerOneReference = human as 玩家;

                EnvMan envManInstance = EnvMan.instance;
                bool returnIsNightValue = (bool)methodIsNightInfo.Invoke(envManInstance, null);
                如果(!sleepCheckNight.Value)
                {
                    如果(showDebugMessages.Value)
                        Debug.Log("innoCreator 夜间检查已启用");
                    如果(!returnIsNightValue)
                    {
                        如果(showDebugMessages.Value)
                            Debug.Log("innoCreator 必须到夜晚才能睡觉");
                        返回 false;
                    }
                }
                如果(睡眠检查敌人.值 && 睡眠检查暴露.值 && 睡眠检查着火.值 && 睡眠检查潮湿.值)
                {
                    如果 (showDebugMessages.Value)
                        Debug.Log("innoCreator 全部为真");
                    playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!sleepCheckEnemies.Value && sleepCheckExposure.Value && sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Enemies is false");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((bool)returnCheckEnemiesValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.Value && !sleepCheckExposure.Value && sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator 曝光为 false");
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)returnCheckExposureValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.Value && sleepCheckExposure.Value && !sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Fire 为 false");
                    对象 returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((bool)returnCheckFireValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.值 && sleepCheckExposure.值 && sleepCheckFire.值 && !sleepCheckWet.值)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Wet is false");
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((bool)returnCheckWetValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.值 且 sleepCheckExposure.值 且 !sleepCheckFire.值 且 !sleepCheckWet.值)
                {
                    如果(showDebugMessages.Value)
                        Debug.Log("innoCreator 的敌人和暴露都为真");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 && (布尔)返回检查暴露值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.Value && !sleepCheckExposure.Value && sleepCheckFire.Value && !sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Enemies and Fire are true");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 && (布尔)返回检查火焰值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.Value && !sleepCheckExposure.Value && !sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator 敌人和潮湿为真");
                    对象 returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 && (布尔)返回检查潮湿值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!睡眠检查敌人。值 且 睡眠检查暴露。值 且 睡眠检查火焰。值 且 !睡眠检查潮湿。值)
                {
                    如果(showDebugMessages.Value)
                        Debug.Log("innoCreator Exposure and Fire are true");
                    对象 returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((bool)returnCheckExposureValue && (bool)returnCheckFireValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!sleepCheckEnemies.Value && sleepCheckExposure.Value && !sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator 曝光和湿度为真");
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((bool)returnCheckExposureValue && (bool)returnCheckWetValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!sleepCheckEnemies.Value && !sleepCheckExposure.Value && sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Fire和Wet均为true");
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查开火值 && (布尔)返回检查潮湿值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(sleepCheckEnemies.Value && !sleepCheckExposure.Value && !sleepCheckFire.Value && !sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Enemies is true");
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((布尔)返回检查暴露值 && (布尔)返回检查火焰值 && (布尔)返回检查潮湿值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!sleepCheckEnemies.Value && sleepCheckExposure.Value && !sleepCheckFire.Value && !sleepCheckWet.Value)
                {
                    如果 (showDebugMessages.Value)
                        Debug.Log("innoCreator曝光为真");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 && (布尔)返回检查火焰值 && (布尔)返回检查潮湿值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!睡眠检查敌人.值 且 !睡眠检查暴露.值 且 睡眠检查火焰.值 且 !睡眠检查潮湿.值)
                {
                    如果(showDebugMessages.Value)
                        Debug.Log("innoCreator Fire is true");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 &&(布尔)返回检查暴露值 &&(布尔)返回检查潮湿值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则如果(!sleepCheckEnemies.Value && !sleepCheckExposure.Value && !sleepCheckFire.Value && sleepCheckWet.Value)
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator Wet is true");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果((布尔)返回检查敌人值 && (布尔)返回检查暴露值 && (布尔)返回检查火焰值)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                否则
                {
                    如果(显示调试信息.值)
                        Debug.Log("innoCreator 全部为 false");
                    object returnCheckEnemiesValue = methodCheckEnemiesInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckExposureValue = methodCheckExposureInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckFireValue = methodCheckFireInfo.Invoke(__instance, new object[] { playerOneReference });
                    object returnCheckWetValue = methodCheckWetInfo.Invoke(__instance, new object[] { playerOneReference });
                    如果 ((bool)returnCheckEnemiesValue && (bool)returnCheckExposureValue && (bool)returnCheckFireValue && (bool)returnCheckWetValue)
                        playerOneReference.AttachStart(__instance.m_spawnPoint, __instance.gameObject, hideWeapons: true, isBed: true, onShip: false, "attach_bed", new Vector3(0f, 0.5f, 0f));
                }
                返回 false;
            }
        }
    }
}

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!