static bool Prefix(Panel_FireStart __instance, Campfire ___m_CampFireInstance, FireStarterItem ___m_KeroseneAccelerant, FireManager ___m_FireManager, bool skipResearchItemCheck = false) { var traverseInstance = Traverse.Create(__instance); traverseInstance.Field("m_FireManager").SetValue(GameManager.GetFireManagerComponent()); var selectedFireStarter = traverseInstance.Method("GetSelectedFireStarter").GetValue <FireStarterItem>(); var selectedTinder = traverseInstance.Method("GetSelectedTinder").GetValue <FuelSourceItem>(); var selectedFuelSource = traverseInstance.Method("GetSelectedFuelSource").GetValue <FuelSourceItem>(); var selectedAccelerant = traverseInstance.Method("GetSelectedAccelerant").GetValue <FireStarterItem>(); if (___m_CampFireInstance && ___m_CampFireInstance.TooWindyToStart()) { GameAudioManager.PlayGUIError(); HUDMessage.AddMessage(Localization.Get("GAMEPLAY_Itstoowindytostartafirethere"), false); return(false); } if (selectedFireStarter == null || (GameManager.GetSkillFireStarting().TinderRequired() && selectedTinder == null) || selectedFuelSource == null) { GameAudioManager.PlayGUIError(); HUDMessage.AddMessage(Localization.Get("GAMEPLAY_Insufficientmaterialstocreatefire"), false); return(false); } if (selectedFireStarter.m_RequiresSunLight && !traverseInstance.Method("HasDirectSunlight").GetValue <bool>()) { GameAudioManager.PlayGUIError(); HUDMessage.AddMessage(Localization.Get("GAMEPLAY_Magnifyinglensrequiresdirectsunlight"), false); return(false); } if (!skipResearchItemCheck) { ResearchItem component = selectedFuelSource.GetComponent <ResearchItem>(); if (component != null && !component.IsResearchComplete()) { Panel_Confirmation.CallbackDelegate forceBurnResearchItem = () => traverseInstance.Method("ForceBurnResearchItem").GetValue(); InterfaceManager.m_Panel_Confirmation.ShowBurnResearchNotification(forceBurnResearchItem); return(false); } } if (selectedAccelerant != null && selectedAccelerant == ___m_KeroseneAccelerant) { GameManager.GetPlayerManagerComponent().DeductLiquidFromInventory(GameManager.GetFireManagerComponent().m_KeroseneLitersAccelerant, GearLiquidTypeEnum.Kerosene); } float percentChanceSuccess = TinderHelper.CalculateFireStartSuccess(selectedFireStarter, selectedTinder, selectedFuelSource, selectedAccelerant); ___m_FireManager.PlayerStartFire(___m_CampFireInstance, selectedFireStarter, selectedTinder, selectedFuelSource, selectedAccelerant, percentChanceSuccess); __instance.Enable(false); GameAudioManager.PlayGuiConfirm(); return(false); }
static bool Prefix(Panel_FireStart __instance) { var traverseInstance = Traverse.Create(__instance); traverseInstance.Field("m_FireManager").SetValue(GameManager.GetFireManagerComponent()); var selectedFireStarter = traverseInstance.Method("GetSelectedFireStarter").GetValue <FireStarterItem>(); var selectedTinder = traverseInstance.Method("GetSelectedTinder").GetValue <FuelSourceItem>(); var selectedFuelSource = traverseInstance.Method("GetSelectedFuelSource").GetValue <FuelSourceItem>(); var selectedAccelerant = traverseInstance.Method("GetSelectedAccelerant").GetValue <FireStarterItem>(); float num = TinderHelper.CalculateFireStartSuccess(selectedFireStarter, selectedTinder, selectedFuelSource, selectedAccelerant); if (selectedFireStarter.m_RequiresSunLight && !traverseInstance.Method("HasDirectSunlight").GetValue <bool>()) { num = 0f; } __instance.m_Label_ChanceSuccess.text = num.ToString("F0") + "%"; return(false); }