internal static float GetModifiedFireStartSkillModifier(FuelSourceItem fs) { if (fs.name.Contains("GEAR_NewsprintRoll")) { return(Settings.options.tinderBonusNewsprintRoll); } if (fs.name.Contains("GEAR_PaperStack")) { return(Settings.options.tinderBonusPaper); } if (fs.name.Contains("GEAR_Newsprint")) { return(Settings.options.tinderBonusNewsprint); } if (fs.name.Contains("GEAR_CashBundle")) { return(Settings.options.tinderBonusCash); } if (fs.name.Contains("GEAR_BarkTinder")) { return(Settings.options.tinderBonusBark); } if (fs.name.Contains("GEAR_Tinder")) { return(Settings.options.tinderBonusPlug); } if (fs.name.Contains("GEAR_CattailTinder")) { return(Settings.options.tinderBonusCattail); } MelonLogger.LogWarning("MISSING TINDER " + fs.name); return(0); }
private static void Prefix(FuelSourceItem tinder, ref float percentChanceSuccess) { if (Settings.options.tinderMatters && tinder) { percentChanceSuccess += FireAddons.GetModifiedFireStartSkillModifier(tinder); percentChanceSuccess = Mathf.Clamp(percentChanceSuccess, 0f, 100f); } }
private static bool Prefix(FuelSourceItem __instance, float normalizedCondition, ref float __result) { GearItem component = __instance.GetComponent <GearItem>(); if (!component) { return(false); } __result = Fire_RV.getModifiedDuration(component); return(false); }
private static void Postfix(Panel_FireStart __instance) { if (Settings.options.tinderMatters) { __instance.m_FireManager = GameManager.GetFireManagerComponent(); FuelSourceItem tinder = __instance.GetSelectedTinder(); if (tinder) { float num = float.Parse(__instance.m_Label_ChanceSuccess.text.Replace("%", "")); num += FireAddons.GetModifiedFireStartSkillModifier(tinder); num = Mathf.Clamp(num, 0f, 100f); __instance.m_Label_ChanceSuccess.text = num.ToString("F0") + "%"; } } }
internal static void SaveLastUsedFireRessources(Panel_FireStart instance) { FireStarterItem fireStarter = instance.GetSelectedFireStarter(); FuelSourceItem tinder = instance.GetSelectedTinder(); FuelSourceItem fuel = instance.GetSelectedFuelSource(); FireStarterItem accelerant = instance.GetSelectedAccelerant(); if (fireStarter) { var fireStarterGi = fireStarter.GetComponent <GearItem>(); if (!fireStarterGi.m_TorchItem && !fireStarterGi.m_FlareItem) { LastFireStarterID = fireStarterGi.m_InstanceID; LastFireStarterName = fireStarterGi.m_GearName; } } else { LastFireStarterID = -1; LastFireStarterName = ""; } if (tinder) { LastTinderName = tinder.GetComponent <GearItem>().m_GearName; } else { LastTinderName = ""; } if (fuel) { LastFuelName = fuel.GetComponent <GearItem>().m_GearName; } else { LastFuelName = ""; } if (accelerant) { LastAccelerantName = accelerant.GetComponent <GearItem>().m_GearName; } else { LastAccelerantName = ""; } }
private static void ConfigureBurnable(ModComponent modComponent) { ModBurnableComponent modBurnableComponent = ModUtils.GetComponent <ModBurnableComponent>(modComponent); if (modBurnableComponent == null) { return; } FuelSourceItem fuelSourceItem = ModUtils.GetOrCreateComponent <FuelSourceItem>(modComponent); fuelSourceItem.m_BurnDurationHours = modBurnableComponent.BurningMinutes / 60f; fuelSourceItem.m_FireAgeMinutesBeforeAdding = modBurnableComponent.BurningMinutesBeforeAllowedToAdd; fuelSourceItem.m_FireStartSkillModifier = modBurnableComponent.SuccessModifier; fuelSourceItem.m_HeatIncrease = modBurnableComponent.TempIncrease; fuelSourceItem.m_HeatInnerRadius = 2.5f; fuelSourceItem.m_HeatOuterRadius = 6f; }
// COPY of CalclateFireStartSuccess with tinder added public static float CalculateFireStartSuccess(FireStarterItem starter, FuelSourceItem tinder, FuelSourceItem fuel, FireStarterItem accelerant) { if (starter == null || fuel == null) { return(0f); } float successChance = GameManager.GetSkillFireStarting().GetBaseChanceSuccess(); successChance += starter.m_FireStartSkillModifier; // successChance += tinder.m_FireStartSkillModifier; // old values successChance += GetModifiedFireStartSkillModifier(tinder); successChance += fuel.m_FireStartSkillModifier; if (accelerant) { successChance += accelerant.m_FireStartSkillModifier; } return(Mathf.Clamp(successChance, 0f, 100f)); }
private static void Postfix(Panel_FeedFire __instance) { Inventory inventoryComponent = GameManager.GetInventoryComponent(); foreach (GearItemObject item in inventoryComponent.m_Items) { GearItem gearItem = item; if ((bool)gearItem) { FuelSourceItem fuelSourceItem = gearItem.m_FuelSourceItem; if ((bool)fuelSourceItem) { if (FireAddons.IsNamedTinder(gearItem)) { gearItem.m_FuelSourceItem.m_IsTinder = true; } } } } }
private static void Prefix(Panel_FeedFire __instance) { Inventory inventoryComponent = GameManager.GetInventoryComponent(); foreach (GearItemObject item in inventoryComponent.m_Items) { GearItem gearItem = item; if ((bool)gearItem) { FuelSourceItem fuelSourceItem = gearItem.m_FuelSourceItem; if ((bool)fuelSourceItem) { if (Settings.options.embersSystem && (gearItem.name.ToLower().Contains("recycledcan") || gearItem.name.ToLower().Contains("cookingpot"))) { FireAddons.ModifyWater(gearItem, false); } } } } }
public static float GetModifiedFireStartSkillModifier(FuelSourceItem __instance) { var settings = TinderMattersSettings.Instance; if (__instance == null) // No tinder at all (level 3+) { return(settings.ModifierNoTinder); } if (__instance.name == "GEAR_NewsprintRoll") { return(settings.ModifierNewsprintRoll); } if (__instance.name == "GEAR_PaperStack") { return(settings.ModifierPaperStack); } if (__instance.name == "GEAR_Newsprint") { return(settings.ModifierNewsprint); } if (__instance.name == "GEAR_CashBundle") { return(settings.ModifierCashBundle); } if (__instance.name == "GEAR_BarkTinder") { return(settings.ModifierBirchBark); } if (__instance.name == "GEAR_Tinder") { return(settings.ModifierTinderPlug); } if (__instance.name == "GEAR_CattailTinder") { return(settings.ModifierCattailHead); } Debug.LogWarning("[TinderMatters] MISSING TINDER " + __instance.name); return(0); }
public static void Configure(GameObject prefab) { ModTinderComponent modBurnableComponent = ComponentUtils.GetComponent <ModTinderComponent>(prefab); if (modBurnableComponent is null) { return; } FuelSourceItem fuelSourceItem = ComponentUtils.GetOrCreateComponent <FuelSourceItem>(modBurnableComponent); fuelSourceItem.m_BurnDurationHours = 0.02f; fuelSourceItem.m_FireAgeMinutesBeforeAdding = 0; fuelSourceItem.m_FireStartSkillModifier = modBurnableComponent.SuccessModifier; fuelSourceItem.m_HeatIncrease = 5; fuelSourceItem.m_HeatInnerRadius = 2.5f; fuelSourceItem.m_HeatOuterRadius = 6f; fuelSourceItem.m_FireStartDurationModifier = modBurnableComponent.DurationOffset; fuelSourceItem.m_IsWet = false; fuelSourceItem.m_IsTinder = true; fuelSourceItem.m_IsBurntInFireTracked = false; }
private static bool Prefix(Fire __instance, FuelSourceItem fuel, bool maskTempIncrease, ref float ___m_FuelHeatIncrease, ref float ___m_ElapsedOnTODSeconds, ref float ___m_ElapsedOnTODSecondsUnmodified, ref float ___m_MaxOnTODSeconds, FireState ___m_FireState) { GearItem component = fuel.GetComponent <GearItem>(); if (!component) { return(false); } //Fire_RV.PrintHierarchy(__instance.gameObject); __instance.m_HeatSource.TurnOn(); __instance.m_HeatSource.m_MaskTempIncrease = maskTempIncrease; __instance.m_HeatSource.m_MaxTempIncrease += Fire_RV.getModifiedHeatIncrease(component); __instance.m_HeatSource.m_MaxTempIncreaseInnerRadius = fuel.m_HeatInnerRadius; float outradscale = (float)AccessTools.Method(typeof(Fire), "GetFireOuterRadiusScale").Invoke(__instance, null); HeatReservoir reservoir = Fire_RV.GetHeatReservoir(Utils.GetGuidFromGameObject(__instance.gameObject)); if (reservoir == null) { __instance.m_HeatSource.m_MaxTempIncreaseOuterRadius = fuel.m_HeatOuterRadius * outradscale; } else { __instance.m_HeatSource.m_MaxTempIncreaseOuterRadius = fuel.m_HeatOuterRadius * outradscale + reservoir.heatingsize; } if (__instance.m_FX) { __instance.m_FX.TriggerStage(___m_FireState, true, true); } ___m_FuelHeatIncrease = __instance.m_HeatSource.m_MaxTempIncrease; ___m_ElapsedOnTODSeconds = 0f; ___m_ElapsedOnTODSecondsUnmodified = 0f; ___m_MaxOnTODSeconds = Fire_RV.getStoveDurationModifier(__instance.gameObject) * Fire_RV.getModifiedDuration(component) * 60f * 60f; return(false); }
private static void Postfix(Panel_FeedFire __instance, ref List <GearItem> ___m_FuelSourcesList) { Inventory inventoryComponent = GameManager.GetInventoryComponent(); foreach (GearItemObject item in inventoryComponent.m_Items) { GearItem gearItem = item; if ((bool)gearItem) { FuelSourceItem fuelSourceItem = gearItem.m_FuelSourceItem; if ((bool)fuelSourceItem) { foreach (string tinder in Lists.tinderitems) { if (gearItem.name == tinder) { gearItem.m_FuelSourceItem.m_IsTinder = true; } } } } } }
private static bool Prefix(Panel_FeedFire __instance, Fire ___m_Fire, GameObject ___m_FireContainer, GearItem ___m_ResearchItemToBurn) { if ((bool)AccessTools.Method(typeof(Panel_FeedFire), "ProgressBarIsActive").Invoke(__instance, null)) { GameAudioManager.PlayGUIError(); return(false); } GearItem selectedFuelSource = (GearItem)AccessTools.Method(typeof(Panel_FeedFire), "GetSelectedFuelSource").Invoke(__instance, null); if (selectedFuelSource == null) { GameAudioManager.PlayGUIError(); return(false); } FuelSourceItem fuelSourceItem = selectedFuelSource.m_FuelSourceItem; if (fuelSourceItem == null) { GameAudioManager.PlayGUIError(); return(false); } if (!___m_FireContainer) { GameAudioManager.PlayGUIError(); return(false); } if (!___m_Fire) { return(false); } if (___m_Fire.FireShouldBlowOutFromWind()) { HUDMessage.AddMessage(Localization.Get("GAMEPLAY_TooWindyToAddFuel"), false); GameAudioManager.PlayGUIError(); return(false); } bool flag = true; if ((bool)AccessTools.Method(typeof(Panel_FeedFire), "FireInForge").Invoke(__instance, null) && fuelSourceItem.m_FireAgeMinutesBeforeAdding > 0f) { flag = false; } flag = false; //allow any duration of fire if (flag) { float num = fuelSourceItem.GetModifiedBurnDurationHours(selectedFuelSource.GetNormalizedCondition()) * 60f; float num2 = ___m_Fire.GetRemainingLifeTimeSeconds() / 60f; float num3 = (num + num2) / 60f; if (num3 > GameManager.GetFireManagerComponent().m_MaxDurationHoursOfFire) { GameAudioManager.PlayGUIError(); HUDMessage.AddMessage(Localization.Get("GAMEPLAY_CannotAddMoreFuel"), false); return(false); } } int num4 = Mathf.RoundToInt(fuelSourceItem.m_FireAgeMinutesBeforeAdding - ___m_Fire.GetUnmodifiedMinutesBurning() - 10); if (num4 >= 1) { string text = Localization.Get("GAMEPLAY_BurnTimeNeededForCoal"); text = text.Replace("{minutes}", num4.ToString()); HUDMessage.AddMessage(text, false); GameAudioManager.PlayGUIError(); return(false); } if (selectedFuelSource.m_ResearchItem && !selectedFuelSource.m_ResearchItem.IsResearchComplete()) { ___m_ResearchItemToBurn = selectedFuelSource; InterfaceManager.m_Panel_Confirmation.ShowBurnResearchNotification(() => { AccessTools.Method(typeof(Panel_FeedFire), "ForceBurnResearchItem", null, null).Invoke(__instance, null); }); return(false); } if (selectedFuelSource == GameManager.GetPlayerManagerComponent().m_ItemInHands) { GameManager.GetPlayerManagerComponent().UnequipItemInHandsSkipAnimation(); } if (selectedFuelSource == GameManager.GetPlayerManagerComponent().m_PickupGearItem) { GameManager.GetPlayerManagerComponent().ResetPickup(); } GameAudioManager.PlaySound(__instance.m_FeedFireAudio, InterfaceManager.GetSoundEmitter()); ___m_Fire.AddFuel(selectedFuelSource, (bool)AccessTools.Method(typeof(Panel_FeedFire), "FireInForge").Invoke(__instance, null)); GameManager.GetPlayerManagerComponent().ConsumeUnitFromInventory(fuelSourceItem.gameObject); return(false); }