internal static void Postfix(CookingPotItem __instance)
 {
     if (!__instance.AttachedFireIsBurning() && WaterUtils.IsCookingItem(__instance))
     {
         __instance.PickUpCookedItem();
     }
 }
        internal void ApplyToCookingPot()
        {
            CookingPotItem cookingPot = this.GetComponent <CookingPotItem>();

            if (cookingPot == null)
            {
                MelonLoader.MelonLogger.LogError("CookingPotWaterSaveData applied to a non-cookingpotitem!");
            }
            else
            {
                cookingPot.m_CookingState           = this.cookingState;
                cookingPot.m_LitersSnowBeingMelted  = this.litersSnowBeingMelted;
                cookingPot.m_LitersWaterBeingBoiled = this.litersWaterBeingBoiled;
                cookingPot.m_MinutesUntilCooked     = this.minutesUntilCooked;
                cookingPot.m_MinutesUntilRuined     = this.minutesUntilRuined;
                if (cookingState == CookingPotItem.CookingState.Cooking)
                {
                    cookingPot.m_GrubMeshRenderer.sharedMaterials = cookingPot.m_BoilWaterPotMaterialsList;
                }
                else if (cookingState == CookingPotItem.CookingState.Ready)
                {
                    cookingPot.m_GrubMeshRenderer.sharedMaterials = cookingPot.m_BoilWaterReadyMaterialsList;
                }
            }
        }
 internal static void Prefix(CookingPotItem __instance, ref CookingPotItem.CookingState cookingState)         // circumvent the transformation to "ruined" after a long time period.
 {
     if (cookingState == CookingPotItem.CookingState.Cooking && !__instance.AttachedFireIsBurning() && WaterUtils.GetWaterAmount(__instance) > 0)
     {
         cookingState = __instance.GetCookingState();
     }
 }
 internal static void Prefix(CookingPotItem __instance, ref CookingPotItem.CookingState cookingState)
 {
     if (cookingState == CookingPotItem.CookingState.Cooking && !__instance.AttachedFireIsBurning() && WaterUtils.GetWaterAmount(__instance) > 0)
     {
         cookingState = __instance.GetCookingState();
     }
 }
Exemplo n.º 5
0
 public static void Postfix(CookingPotItem __instance, ref bool __result)
 {
     if (Settings.options.embersSystem && Settings.options.embersSystemNoCooking && __result && __instance.m_FireBeingUsed?.m_EmberTimer > 0)
     {
         __result = false;
     }
 }
        internal static bool Prefix(CookingPotItem __instance)
        {
            if (__instance.GetCookingState() == CookingPotItem.CookingState.Cooking)
            {
                return(true);
            }

            float waterAmount = WaterUtils.GetWaterAmount(__instance);

            if (waterAmount <= 0)
            {
                return(true);
            }

            bool potable = __instance.GetCookingState() == CookingPotItem.CookingState.Ready;

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

            WaterSupply waterSupply = gearItem.m_WaterSupply;

            if (waterSupply == null)
            {
                waterSupply            = gearItem.gameObject.AddComponent <WaterSupply>();
                gearItem.m_WaterSupply = waterSupply;
            }

            waterSupply.m_VolumeInLiters     = waterAmount;
            waterSupply.m_WaterQuality       = potable ? LiquidQuality.Potable : LiquidQuality.NonPotable;
            waterSupply.m_TimeToDrinkSeconds = GameManager.GetInventoryComponent().GetPotableWaterSupply().m_WaterSupply.m_TimeToDrinkSeconds;
            waterSupply.m_DrinkingAudio      = GameManager.GetInventoryComponent().GetPotableWaterSupply().m_WaterSupply.m_DrinkingAudio;

            GameManager.GetPlayerManagerComponent().UseInventoryItem(gearItem);

            return(false);
        }
        internal static void Postfix(Panel_Cooking __instance)
        {
            GearItem cookedItem = __instance.GetSelectedFood();

            if (cookedItem == null || cookedItem.m_Cookable == null)
            {
                return;
            }

            CookingPotItem cookingPotItem = __instance.m_CookingPotInteractedWith;

            if (cookingPotItem == null)
            {
                return;
            }

            if (cookedItem.m_Cookable.m_PotableWaterRequiredLiters <= 0)
            {
                return;
            }

            float litersRequired    = cookedItem.m_Cookable.m_PotableWaterRequiredLiters;
            float additionalMinutes = litersRequired * __instance.m_MinutesToMeltSnowPerLiter * cookingPotItem.GetTotalCookMultiplier();

            __instance.m_Label_CookedItemCookTime.text = GetCookingTime(cookedItem.m_Cookable.m_CookTimeMinutes * cookingPotItem.GetTotalCookMultiplier()) + " (+" + GetCookingTime(additionalMinutes) + " " + Localization.Get("GAMEPLAY_ButtonMelt") + ")";
        }
            private static void Prefix(GearItem __instance)
            {
                CookingPotItem cookingPot = __instance.m_CookingPotItem;

                if (cookingPot != null)
                {
                    ModComponentUtils.ComponentUtils.GetOrCreateComponent <CookingPotWaterSaveData>(__instance).GetFromCookingPot();
                }
            }
        internal static bool IsCookingItem(CookingPotItem cookingPotItem)
        {
            if (!cookingPotItem.IsCookingSomething())
            {
                return(false);
            }

            return(Traverse.Create(cookingPotItem).Field("m_GearItemBeingCooked").GetValue() != null);
        }
 internal static void Postfix(CookingPotItem __instance)
 {
     TrackExitPlaceMesh.isExecuting = false;
     // This is used to instantly pick up food from pot/ cans, when using right-click (It is bugged otherwise).
     // It is not allowed for meat -> !__instance.IsDummyPot().
     if (!__instance.AttachedFireIsBurning() && WaterUtils.IsCookingItem(__instance) && !__instance.IsDummyPot())
     {
         __instance.PickUpCookedItem();
     }
 }
Exemplo n.º 11
0
        internal void Initialize()
        {
            if (this.cookingPotItem != null)
            {
                return;
            }

            this.cookingPotItem = this.GetComponent <CookingPotItem>();
            this.originalState  = this.cookingPotItem.GetCookingState();
            this.nextState      = originalState - 1;
        }
        internal static void Postfix(CookingPotItem __instance)
        {
            if (__instance.AttachedFireIsBurning())
            {
                return;
            }

            if (__instance.m_ParticlesSnowMelting.activeInHierarchy && WaterUtils.IsCooledDown(__instance))
            {
                Utils.SetActive(__instance.m_ParticlesSnowMelting, false);
            }
        }
Exemplo n.º 13
0
        private static void ConfigureCookingPot(ModComponent modComponent)
        {
            ModCookingPotComponent modCookingPotComponent = modComponent as ModCookingPotComponent;

            if (modCookingPotComponent == null)
            {
                return;
            }

            CookingPotItem cookingPotItem = ModUtils.GetOrCreateComponent <CookingPotItem>(modComponent);

            cookingPotItem.m_WaterCapacityLiters = modCookingPotComponent.Capacity;
            cookingPotItem.m_CanCookGrub         = modCookingPotComponent.CanCookGrub;
            cookingPotItem.m_CanCookLiquid       = modCookingPotComponent.CanCookLiquid;
            cookingPotItem.m_CanCookMeat         = modCookingPotComponent.CanCookMeat;
            cookingPotItem.m_CanOnlyWarmUpFood   = false;

            CookingPotItem template = ModUtils.GetItem <CookingPotItem>(modCookingPotComponent.Template, modComponent.name);

            cookingPotItem.m_BoilingTimeMultiplier                 = template.m_BoilingTimeMultiplier;
            cookingPotItem.m_BoilWaterPotMaterialsList             = template.m_BoilWaterPotMaterialsList;
            cookingPotItem.m_BoilWaterReadyMaterialsList           = template.m_BoilWaterReadyMaterialsList;
            cookingPotItem.m_ConditionPercentDamageFromBoilingDry  = template.m_ConditionPercentDamageFromBoilingDry;
            cookingPotItem.m_ConditionPercentDamageFromBurningFood = template.m_ConditionPercentDamageFromBurningFood;
            cookingPotItem.m_CookedCalorieMultiplier               = template.m_CookedCalorieMultiplier;
            cookingPotItem.m_CookingTimeMultiplier                 = template.m_CookingTimeMultiplier;
            cookingPotItem.m_GrubMeshType          = template.m_GrubMeshType;
            cookingPotItem.m_LampOilMultiplier     = template.m_LampOilMultiplier;
            cookingPotItem.m_MeltSnowMaterialsList = template.m_MeltSnowMaterialsList;
            cookingPotItem.m_NearFireWarmUpCookingTimeMultiplier = template.m_NearFireWarmUpCookingTimeMultiplier;
            cookingPotItem.m_NearFireWarmUpReadyTimeMultiplier   = template.m_NearFireWarmUpReadyTimeMultiplier;
            cookingPotItem.m_ParticlesItemCooking    = template.m_ParticlesItemCooking;
            cookingPotItem.m_ParticlesItemReady      = template.m_ParticlesItemReady;
            cookingPotItem.m_ParticlesItemRuined     = template.m_ParticlesItemRuined;
            cookingPotItem.m_ParticlesSnowMelting    = template.m_ParticlesSnowMelting;
            cookingPotItem.m_ParticlesWaterBoiling   = template.m_ParticlesWaterBoiling;
            cookingPotItem.m_ParticlesWaterReady     = template.m_ParticlesWaterReady;
            cookingPotItem.m_ParticlesWaterRuined    = template.m_ParticlesWaterRuined;
            cookingPotItem.m_ReadyTimeMultiplier     = template.m_ReadyTimeMultiplier;
            cookingPotItem.m_RuinedFoodMaterialsList = template.m_RuinedFoodMaterialsList;
            cookingPotItem.m_SnowMesh  = modCookingPotComponent.SnowMesh;
            cookingPotItem.m_WaterMesh = modCookingPotComponent.WaterMesh;

            GameObject grubMesh = UnityEngine.Object.Instantiate(template.m_GrubMeshFilter.gameObject, cookingPotItem.transform);

            cookingPotItem.m_GrubMeshFilter   = grubMesh.GetComponent <MeshFilter>();
            cookingPotItem.m_GrubMeshRenderer = grubMesh.GetComponent <MeshRenderer>();

            PlaceableItem placeableItem = ModUtils.GetOrCreateComponent <PlaceableItem>(modComponent);

            placeableItem.m_Range = template.GetComponent <PlaceableItem>()?.m_Range ?? 3;
        }
 internal static void Postfix(CookingPotItem __instance)
 {
     //Implementation.Log("CookingPotItem -- UpdateMeltingSnow");
     if (__instance.AttachedFireIsBurning())
     {
         return;
     }
     else if (__instance.m_LitersSnowBeingMelted > 0)
     {
         if (__instance.m_ParticlesSnowMelting.activeInHierarchy && WaterUtils.IsCooledDown(__instance))
         {
             Utils.SetActive(__instance.m_ParticlesSnowMelting, false);
         }
     }
 }
        internal static void Postfix(GearItem placedGearNew)
        {
            if (placedGearNew == null || placedGearNew.m_CookingPotItem == null || !placedGearNew.m_CookingPotItem.AttachedFireIsBurning())
            {
                return;
            }

            CookingPotItem       cookingPotItem       = placedGearNew.m_CookingPotItem;
            OverrideCookingState overrideCookingState = ModUtils.GetComponent <OverrideCookingState>(cookingPotItem);

            if (overrideCookingState?.ForceReady ?? false)
            {
                WaterUtils.SetElapsedCookingTimeForWater(cookingPotItem, WaterUtils.GetWaterAmount(cookingPotItem));
            }
        }
        internal void GetFromCookingPot()
        {
            CookingPotItem cookingPot = this.GetComponent <CookingPotItem>();

            if (cookingPot == null)
            {
                MelonLoader.MelonLogger.LogError("CookingPotWaterSaveData trying to get data from a non-cookingpotitem!");
            }
            else
            {
                this.cookingState           = cookingPot.m_CookingState;
                this.litersSnowBeingMelted  = cookingPot.m_LitersSnowBeingMelted;
                this.litersWaterBeingBoiled = cookingPot.m_LitersWaterBeingBoiled;
                this.minutesUntilCooked     = cookingPot.m_MinutesUntilCooked;
                this.minutesUntilRuined     = cookingPot.m_MinutesUntilRuined;
            }
        }
        public static void Execute()
        {
            Panel_Cooking  panel_Cooking  = InterfaceManager.m_Panel_Cooking;
            GearItem       cookedItem     = panel_Cooking.GetSelectedFood();
            CookingPotItem cookingPotItem = panel_Cooking.m_CookingPotInteractedWith;

            GearItem result = cookedItem.Drop(1, false, true);

            CookingModifier cookingModifier = ComponentUtils.GetOrCreateComponent <CookingModifier>(result);

            cookingModifier.additionalMinutes = result.m_Cookable.m_PotableWaterRequiredLiters * panel_Cooking.m_MinutesToMeltSnowPerLiter;
            cookingModifier.Apply();

            GameAudioManager.Play3DSound(result.m_Cookable.m_PutInPotAudio, cookingPotItem.gameObject);
            cookingPotItem.StartCooking(result);
            panel_Cooking.ExitCookingInterface();
        }
        internal static void Postfix(CookingPotItem __instance)
        {
            if (__instance.AttachedFireIsBurning())
            {
                return;
            }

            if ((__instance.m_ParticlesWaterBoiling.activeInHierarchy || __instance.m_ParticlesWaterReady.activeInHierarchy) && WaterUtils.IsCooledDown(__instance))
            {
                Utils.SetActive(__instance.m_ParticlesWaterReady, false);
                Utils.SetActive(__instance.m_ParticlesWaterBoiling, false);

                if (__instance.GetCookingState() == CookingPotItem.CookingState.Ready)
                {
                    ModUtils.GetOrCreateComponent <OverrideCookingState>(__instance).ForceReady = true;
                    WaterUtils.SetElapsedCookingTimeForWater(__instance, WaterUtils.GetWaterAmount(__instance));
                }
            }
        }
Exemplo n.º 19
0
        private static void CheckFoodItem(SkillsManager skillsManager, SkillType skillType, int numPoints,
                                          SkillsManager.PointAssignmentMode mode, CookingPotItem pot)
        {
            GearItem itemBeingCooked = Traverse.Create(pot).Field("m_GearItemBeingCooked").GetValue <GearItem>();

            if (itemBeingCooked && itemBeingCooked.IsWornOut())
            {
                return;                 // No skill points for cooking ruined items
            }
            else if (itemBeingCooked && itemBeingCooked.m_FoodItem)
            {
                FoodItem food = itemBeingCooked.m_FoodItem;
                if (food.m_IsMeat && food.m_IsRawMeat && food.m_CaloriesRemaining < MIN_SIZE * food.m_CaloriesTotal)
                {
                    return;                     // No skill points if the piece of meat being cooked is too small
                }
            }

            skillsManager.IncrementPointsAndNotify(skillType, numPoints, mode);
        }
        public override void Deserialize(string data)
        {
            ForceReady = false;
            bool.TryParse(data, out ForceReady);

            if (!ForceReady)
            {
                return;
            }

            CookingPotItem cookingPotItem = this.GetComponent <CookingPotItem>();

            if (cookingPotItem == null)
            {
                return;
            }

            Traverse.Create(cookingPotItem).Method("SetCookingState", new System.Type[] { typeof(CookingPotItem.CookingState) }).GetValue(CookingPotItem.CookingState.Ready);
            cookingPotItem.m_GrubMeshRenderer.sharedMaterials = cookingPotItem.m_BoilWaterReadyMaterialsList;
        }
Exemplo n.º 21
0
        internal static bool Prefix(CookingPotItem __instance)
        {
            float waterAmount = __instance.m_LitersWaterBeingBoiled;

            if (Water.IsNone(waterAmount))             //only applies with water
            {
                return(true);
            }
            float waterVolumeToDrink = GameManager.GetPlayerManagerComponent().CalculateWaterVolumeToDrink(waterAmount);

            if (Water.IsNone(waterVolumeToDrink))             // Not thirsty.
            {
                HUDMessage.AddMessage(Localization.Get("GAMEPLAY_Youarenotthirsty"));
                GameAudioManager.PlayGUIError();
                return(false);
            }
            bool is_ready = __instance.GetCookingState() == CookingPotItem.CookingState.Ready;
            bool is_not_ready_and_no_fire = __instance.GetCookingState() == CookingPotItem.CookingState.Cooking && !__instance.AttachedFireIsBurning();

            if (is_ready || is_not_ready_and_no_fire)             //patch applies if ready or if still cooking but no fire.
            {
                DrinkFromPot.cookingPot = __instance;

                DrinkFromPot.OnDrink();

                if (Water.IsNone(__instance.m_LitersWaterBeingBoiled))
                {
                    return(true);
                }
                else
                {
                    GameManager.GetPlayerManagerComponent().ExitInspectGearMode(false);
                    return(false);
                }
            }
            return(true);
        }
 internal static void Postfix(CookingPotItem __instance)
 {
     Water.AdjustWaterToWaterSupply();
 }
 internal static void SetWaterAmount(CookingPotItem cookingPotItem, float value)
 {
     System.Reflection.FieldInfo fieldInfo = AccessTools.Field(typeof(CookingPotItem), "m_LitersWaterBeingBoiled");
     fieldInfo.SetValue(cookingPotItem, value);
 }
 internal static void Postfix(CookingPotItem __instance)
 {
     ModUtils.GetOrCreateComponent <OverrideCookingState>(__instance).ForceReady = false;
 }
Exemplo n.º 25
0
        void Update()
        {
            if (fire.GetFireState() == FireState.Off)
            {
                "AutoCook.Update: fire isn't lit, aborting".logDbg();
                Destroy(this);
                return;
            }

            CookingPotItem pot = null;

            if (gearPlacePoint.m_PlacedGear)
            {
                if (!gearPlacePoint.m_PlacedGear.name.Contains("CookingPot"))                 // GEAR_CookingPot or GEAR_CookingPotDummy
                {
                    "AutoCook.Update: gear in place point isn't a cooking pot, aborting".logDbg();
                    Destroy(this);
                    return;
                }

                pot = gearPlacePoint.m_PlacedGear.GetComponent <CookingPotItem>();

                if (pot.m_LitersSnowBeingMelted > 0f || pot.m_LitersWaterBeingBoiled > 0f)                 // if we started with water in pot
                {
                    if (pot.m_CookingState == CookingPotItem.CookingState.Cooking || pot.m_LitersWaterBeingBoiled == 0f)
                    {
                        return;
                    }
                    "AutoCook.Update: picking up boiled water".logDbg();
                    pot.PickUpCookedItem();
                }

                if (pot.m_GearItemBeingCooked)
                {
                    if (pot.GetCookingState() == CookingPotItem.CookingState.Cooking)
                    {
                        return;
                    }
                    $"AutoCook.Update: picking up cooked item {pot.m_GearItemBeingCooked.name}".logDbg();
                    pot.PickUpCookedItem();
                }
            }

            var item = getRawFood(!cookMeatToo);

            if (!item)
            {
                return;
            }
            $"AutoCook.Update: start cooking {item.name}".logDbg();
            item.m_Cookable.m_DoNotCookWhenDropped = true;

            if (pot)
            {
                pot.StartCooking(item);
            }
            else
            {
                gearPlacePoint.DropAndPlaceItem(item);
            }

            item.m_Cookable.m_DoNotCookWhenDropped = false;
        }
        internal static void SetElapsedCookingTimeForWater(CookingPotItem cookingPotItem, float waterLiters)
        {
            float hours = waterLiters * InterfaceManager.m_Panel_Cooking.m_MinutesToBoilWaterPerLiter * cookingPotItem.GetTotalBoilMultiplier() / 60f;

            SetElapsedCookingTime(cookingPotItem, hours);
        }
        internal static void Postfix(CookingPotItem __instance)
        {
            Water.AdjustWaterToWaterSupply();

            ModUtils.GetOrCreateComponent <OverrideCookingState>(__instance).ForceReady = false;
        }
 internal static void SetElapsedCookingTime(CookingPotItem cookingPotItem, float hours)
 {
     Traverse.Create(cookingPotItem).Field("m_CookingElapsedHours").SetValue(hours);
 }
 internal static bool IsCooledDown(CookingPotItem cookingPotItem)
 {
     return(Traverse.Create(cookingPotItem).Field("m_GracePeriodElapsedHours").GetValue <float>() * 60.0 > (double)InterfaceManager.m_Panel_Cooking.m_MinutesGraceTimeInterruptedCooking);
 }
 internal static float GetWaterAmount(CookingPotItem cookingPotItem)
 {
     System.Reflection.FieldInfo fieldInfo = AccessTools.Field(typeof(CookingPotItem), "m_LitersWaterBeingBoiled");
     return((float)fieldInfo.GetValue(cookingPotItem));
 }