コード例 #1
0
 static void Postfix(FireStarterItem __instance)
 {
     if (__instance.name == "GEAR_Torch")
     {
         __instance.m_ConditionDegradeOnUse  = 100;
         __instance.m_ConsumeOnUse           = true;
         __instance.m_FireStartSkillModifier = 15;
     }
 }
コード例 #2
0
        public static void Configure(GameObject prefab)
        {
            ModAccelerantComponent modAccelerantComponent = ComponentUtils.GetComponent <ModAccelerantComponent>(prefab);

            if (modAccelerantComponent is null)
            {
                return;
            }

            FireStarterItem fireStarterItem = ComponentUtils.GetOrCreateComponent <FireStarterItem>(modAccelerantComponent);

            fireStarterItem.m_IsAccelerant = true;
            fireStarterItem.m_FireStartDurationModifier = modAccelerantComponent.DurationOffset;
            fireStarterItem.m_FireStartSkillModifier    = modAccelerantComponent.SuccessModifier;
            fireStarterItem.m_ConsumeOnUse = modAccelerantComponent.DestroyedOnUse;
        }
コード例 #3
0
        private static void ConfigureAccelerant(ModComponent modComponent)
        {
            ModAccelerantComponent modAccelerantComponent = ModUtils.GetComponent <ModAccelerantComponent>(modComponent);

            if (modAccelerantComponent == null)
            {
                return;
            }

            FireStarterItem fireStarterItem = ModUtils.GetOrCreateComponent <FireStarterItem>(modAccelerantComponent);

            fireStarterItem.m_IsAccelerant = true;
            fireStarterItem.m_FireStartDurationModifier = modAccelerantComponent.DurationOffset;
            fireStarterItem.m_FireStartSkillModifier    = modAccelerantComponent.SuccessModifier;
            fireStarterItem.m_ConsumeOnUse = modAccelerantComponent.DestroyedOnUse;
        }
コード例 #4
0
        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 = "";
            }
        }
コード例 #5
0
        // 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));
        }
コード例 #6
0
        private static int CompareFireStarters(GearItem item1, GearItem item2)
        {
            if (item1.m_TorchItem?.IsBurning() == true && item2.m_TorchItem?.IsBurning() != true)
            {
                return(-1);
            }

            if (item1.m_TorchItem?.IsBurning() != true && item2.m_TorchItem?.IsBurning() == true)
            {
                return(1);
            }

            if (item1.m_FlareItem?.IsBurning() == true && item2.m_FlareItem?.IsBurning() != true)
            {
                return(-1);
            }

            if (item1.m_FlareItem?.IsBurning() != true && item2.m_FlareItem?.IsBurning() == true)
            {
                return(1);
            }

            FireStarterItem fireStarter1 = item1.m_FireStarterItem;
            FireStarterItem fireStarter2 = item2.m_FireStarterItem;

            if (!fireStarter1.m_RequiresSunLight && fireStarter2.m_RequiresSunLight)
            {
                return(-1);
            }

            if (fireStarter1.m_RequiresSunLight && !fireStarter2.m_RequiresSunLight)
            {
                return(1);
            }

            int chanceComparison = fireStarter1.m_FireStartSkillModifier.CompareTo(fireStarter2.m_FireStartSkillModifier);

            if (chanceComparison != 0)
            {
                return(-chanceComparison);
            }

            return(item1.m_DisplayName.CompareTo(item2.m_DisplayName));
        }
コード例 #7
0
        internal static void Postfix(FireStarterItem starter, bool __result)
        {
            if (!__result)
            {
                return;
            }

            ModFireStarterComponent modFireStarterComponent = ModComponentUtils.ComponentUtils.GetComponent <ModFireStarterComponent>(starter);

            if (modFireStarterComponent is null || !modFireStarterComponent.RuinedAfterUse)
            {
                return;
            }

            GearItem gearItem = starter.GetComponent <GearItem>();

            if (gearItem != null)
            {
                gearItem.BreakOnUse();
            }
        }
コード例 #8
0
        internal static void Configure(ModComponent modComponent)
        {
            ModFireStarterComponent modFireStarterComponent = ModComponentUtils.ComponentUtils.GetComponent <ModFireStarterComponent>(modComponent);

            if (modFireStarterComponent is null)
            {
                return;
            }

            FireStarterItem fireStarterItem = ModComponentUtils.ComponentUtils.GetOrCreateComponent <FireStarterItem>(modFireStarterComponent);

            fireStarterItem.m_SecondsToIgniteTinder = modFireStarterComponent.SecondsToIgniteTinder;
            fireStarterItem.m_SecondsToIgniteTorch  = modFireStarterComponent.SecondsToIgniteTorch;

            fireStarterItem.m_FireStartSkillModifier = modFireStarterComponent.SuccessModifier;

            fireStarterItem.m_ConditionDegradeOnUse = Mapper.GetDecayPerStep(modFireStarterComponent.NumberOfUses, modComponent.MaxHP);
            fireStarterItem.m_ConsumeOnUse          = modFireStarterComponent.DestroyedOnUse;
            fireStarterItem.m_RequiresSunLight      = modFireStarterComponent.RequiresSunLight;
            fireStarterItem.m_OnUseSoundEvent       = modFireStarterComponent.OnUseSoundEvent;
        }
コード例 #9
0
        public static int CompareFireStartersIgniteChance(GearItem g1, GearItem g2)
        {
            FireStarterItem fireStarterItem1 = g1.GetComponent <FireStarterItem>();
            FireStarterItem fireStarterItem2 = g2.GetComponent <FireStarterItem>();

            if (fireStarterItem1.m_RequiresSunLight && !InterfaceManager.m_Panel_FireStart.HasDirectSunlight())
            {
                return(1); //g1 to the back
            }
            if (fireStarterItem2.m_RequiresSunLight && !InterfaceManager.m_Panel_FireStart.HasDirectSunlight())
            {
                return(-1); //g1 to the front
            }
            if (fireStarterItem1.m_FireStartSkillModifier < fireStarterItem2.m_FireStartSkillModifier)
            {
                return(1); //g1 to the back
            }
            else if (fireStarterItem1.m_FireStartSkillModifier > fireStarterItem2.m_FireStartSkillModifier)
            {
                return(-1); //g1 to the front
            }
            return(0);
        }
コード例 #10
0
        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);
        }