internal static void Configure(ModComponent modComponent) { ModBedComponent modBedComponent = modComponent as ModBedComponent; if (modBedComponent == null) { return; } Bed bed = ModUtils.GetOrCreateComponent <Bed>(modBedComponent); bed.m_ConditionPercentGainPerHour = modBedComponent.ConditionGainPerHour; bed.m_UinterruptedRestPercentGainPerHour = modBedComponent.AdditionalConditionGainPerHour; bed.m_WarmthBonusCelsius = modBedComponent.WarmthBonusCelsius; bed.m_PercentChanceReduceBearAttackWhenSleeping = modBedComponent.BearAttackModifier; bed.m_PercentChanceReduceWolfAttackWhenSleeping = modBedComponent.WolfAttackModifier; bed.m_OpenAudio = ModUtils.DefaultIfEmpty(modBedComponent.OpenAudio, "PLAY_SNDGENSLEEPINGBAGCLOSE"); bed.m_CloseAudio = ModUtils.DefaultIfEmpty(modBedComponent.CloseAudio, "PLAY_SNDGENSLEEPINGBAGOPEN"); bed.m_BedRollMesh = modBedComponent.PackedMesh ?? modBedComponent.gameObject; bed.m_BedRollMesh.layer = vp_Layer.Gear; bed.m_BedRollPlacedMesh = modBedComponent.UsableMesh ?? modBedComponent.gameObject; bed.m_BedRollPlacedMesh.layer = vp_Layer.Gear; bed.SetState(BedRollState.Rolled); DegradeOnUse degradeOnUse = ModUtils.GetOrCreateComponent <DegradeOnUse>(modBedComponent); degradeOnUse.m_DegradeHP = Mathf.Max(degradeOnUse.m_DegradeHP, modBedComponent.DegradePerHour); PlaceableItem placeableItem = ModUtils.GetOrCreateComponent <PlaceableItem>(modBedComponent); placeableItem.m_Range = 4; }
private static void ConfigureIceFishingHole(ModToolComponent modToolComponent) { if (!modToolComponent.IceFishingHole) { return; } IceFishingHoleClearItem iceFishingHoleClearItem = ModUtils.GetOrCreateComponent <IceFishingHoleClearItem>(modToolComponent); iceFishingHoleClearItem.m_BreakIceAudio = ModUtils.DefaultIfEmpty(modToolComponent.IceFishingHoleAudio, "Play_IceBreakingChopping"); iceFishingHoleClearItem.m_HPDecreaseToClear = modToolComponent.IceFishingHoleDegradeOnUse; iceFishingHoleClearItem.m_NumGameMinutesToClear = modToolComponent.IceFishingHoleMinutes; }
internal static void Configure(ModComponent modComponent) { ModCookableComponent modCookableComponent = modComponent as ModCookableComponent; if (modCookableComponent == null || !modCookableComponent.Cooking) { return; } Cookable cookable = ModUtils.GetOrCreateComponent <Cookable>(modCookableComponent); cookable.m_CookableType = ModUtils.TranslateEnumValue <Cookable.CookableType, CookableType>(modCookableComponent.type); cookable.m_CookTimeMinutes = modCookableComponent.CookingMinutes; cookable.m_ReadyTimeMinutes = modCookableComponent.BurntMinutes; cookable.m_NumUnitsRequired = modCookableComponent.CookingUnitsRequired; cookable.m_PotableWaterRequiredLiters = modCookableComponent.CookingWaterRequired; cookable.m_WarmUpNearFireRange = 1.5f; cookable.m_CookAudio = ModUtils.DefaultIfEmpty(modCookableComponent.CookingAudio, GetDefaultCookAudio(modCookableComponent)); cookable.m_PutInPotAudio = ModUtils.DefaultIfEmpty(modCookableComponent.StartCookingAudio, GetDefaultStartCookingAudio(modCookableComponent)); Cookable template = ModUtils.GetComponent <Cookable>(Resources.Load <GameObject>("GEAR_PinnacleCanPeaches")); cookable.m_MeshPotStyle = template?.m_MeshPotStyle; cookable.m_MeshCanStyle = template?.m_MeshCanStyle; cookable.m_LiquidMeshRenderer = template?.m_LiquidMeshRenderer; // either just heat or convert, but not both if (modCookableComponent.CookingResult == null) { // no conversion, just heating FoodItem foodItem = ModUtils.GetComponent <FoodItem>(modCookableComponent); if (foodItem != null) { foodItem.m_HeatedWhenCooked = true; } } else { // no heating, but instead convert the item when cooking completes GearItem cookedGearItem = modCookableComponent.CookingResult.GetComponent <GearItem>(); if (cookedGearItem == null) { // not mapped yet, do it now Mapper.Map(modCookableComponent.CookingResult); cookedGearItem = modCookableComponent.CookingResult.GetComponent <GearItem>(); } cookable.m_CookedPrefab = cookedGearItem ?? throw new ArgumentException("CookingResult does not map to GearItem for prefab " + modCookableComponent.name); } }
private static void ConfigureForceLock(ModToolComponent modToolComponent) { if (!modToolComponent.ForceLocks) { return; } ForceLockItem forceLockItem = ModUtils.GetOrCreateComponent <ForceLockItem>(modToolComponent); forceLockItem.m_ForceLockAudio = ModUtils.DefaultIfEmpty(modToolComponent.ForceLockAudio, "PLAY_LOCKERPRYOPEN1"); forceLockItem.m_LocalizedProgressText = new LocalizedString() { m_LocalizationID = "GAMEPLAY_Forcing" }; AddAlternativeTool(modToolComponent, "GEAR_Prybar"); }