自定义睡眠选项包括以下检查:夜晚、敌人、暴露、火焰和潮湿状态。
自定义睡眠选项包括以下检查:夜晚、敌人、暴露、火焰和潮湿状态。
使用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;
}
}
}
}