예제 #1
0
            static void Postfix(CookingStation __instance, ZNetView ___m_nview)
            {
                if (!modEnabled.Value || !___m_nview.IsValid() || !___m_nview.IsOwner() || !EffectArea.IsPointInsideArea(__instance.transform.position, EffectArea.Type.Burning, 0.25f))
                {
                    return;
                }
                for (int i = 0; i < __instance.m_slots.Length; i++)
                {
                    string itemName = ___m_nview.GetZDO().GetString("slot" + i, "");

                    float num = ___m_nview.GetZDO().GetFloat("slot" + i, 0f);
                    if (itemName != "" && itemName != __instance.m_overCookedItem.name && itemName != null)
                    {
                        CookingStation.ItemConversion itemConversion = Traverse.Create(__instance).Method("GetItemConversion", new object[] { itemName }).GetValue <CookingStation.ItemConversion>();
                        if (num > itemConversion.m_cookTime && itemName == itemConversion.m_to.name)
                        {
                            if (autoPop.Value)
                            {
                                Traverse.Create(__instance).Method("SpawnItem", new object[] { itemName }).GetValue();
                                ___m_nview.GetZDO().Set("slot" + i, "");
                                ___m_nview.GetZDO().Set("slot" + i, 0f);
                                ___m_nview.InvokeRPC(ZNetView.Everybody, "SetSlotVisual", new object[] { i, "" });
                            }
                            else if (preventBurning.Value)
                            {
                                ___m_nview.GetZDO().Set("slot" + i, itemConversion.m_cookTime);
                            }
                        }
                    }
                }
            }
예제 #2
0
 // Token: 0x06000CC5 RID: 3269 RVA: 0x0005B8A0 File Offset: 0x00059AA0
 private bool IsItemDone(string itemName)
 {
     if (itemName == this.m_overCookedItem.name)
     {
         return(true);
     }
     CookingStation.ItemConversion itemConversion = this.GetItemConversion(itemName);
     return(itemConversion != null && itemName == itemConversion.m_to.name);
 }
예제 #3
0
        /// <summary>
        ///     Turns the CookingConversionConfig into a Valheim CookingStation.ItemConversion item.
        /// </summary>
        /// <returns>The Valheim CookingStation.ItemConversion</returns>
        public CookingStation.ItemConversion GetItemConversion()
        {
            CookingStation.ItemConversion conv = new CookingStation.ItemConversion()
            {
                m_cookTime = CookTime,
                m_from     = Mock <ItemDrop> .Create(FromItem),
                m_to       = Mock <ItemDrop> .Create(ToItem),
            };

            return(conv);
        }
예제 #4
0
            static void Postfix(CookingStation __instance, ZNetView ___m_nview)
            {
                Traverse traverse = Traverse.Create(__instance);

                if (!modEnabled.Value || !___m_nview.IsValid() || !___m_nview.IsOwner() || (__instance.m_requireFire && !traverse.Method("IsFireLit").GetValue <bool>()) || (__instance.m_useFuel && traverse.Method("GetFuel").GetValue <float>() <= 0f))
                {
                    return;
                }

                //Dbgl($"Updating {__instance.name}");
                for (int i = 0; i < __instance.m_slots.Length; i++)
                {
                    string itemName   = ___m_nview.GetZDO().GetString("slot" + i, "");
                    float  cookedTime = ___m_nview.GetZDO().GetFloat("slot" + i, 0f);
                    int    status     = ___m_nview.GetZDO().GetInt("slotstatus" + i, 0);

                    if (itemName == "")
                    {
                        continue;
                    }

                    CookingStation.ItemConversion itemConversion = traverse.Method("GetItemConversion", new object[] { itemName }).GetValue <CookingStation.ItemConversion>();
                    //Dbgl($"Updating slot {i} {cookedTime}/{itemConversion.m_cookTime} {status}");

                    if (itemName != "" && status != 2)
                    {
                        //Dbgl($"Updating slot {i} {itemName} {cookedTime}");
                        if (itemConversion != null && cookedTime > itemConversion.m_cookTime && itemName == itemConversion.m_to.name)
                        {
                            if (autoPop.Value)
                            {
                                Dbgl($"Popping {__instance.name} slot {i} {itemName}");
                                Traverse.Create(__instance).Method("SpawnItem", new object[] { itemName, i, __instance.m_slots[i].position }).GetValue();
                                ___m_nview.GetZDO().Set("slot" + i, "");
                                ___m_nview.GetZDO().Set("slot" + i, 0f);
                                ___m_nview.InvokeRPC(ZNetView.Everybody, "SetSlotVisual", new object[] { i, "" });
                            }
                            else if (preventBurning.Value)
                            {
                                ___m_nview.GetZDO().Set("slot" + i, itemConversion.m_cookTime);
                            }
                        }
                    }
                }
            }
예제 #5
0
 // Token: 0x06000CBF RID: 3263 RVA: 0x0005B4F4 File Offset: 0x000596F4
 private void UpdateCooking()
 {
     if (!this.m_nview.IsValid())
     {
         return;
     }
     if (this.m_nview.IsOwner() && this.IsFireLit())
     {
         for (int i = 0; i < this.m_slots.Length; i++)
         {
             string text;
             float  num;
             this.GetSlot(i, out text, out num);
             if (text != "" && text != this.m_overCookedItem.name)
             {
                 CookingStation.ItemConversion itemConversion = this.GetItemConversion(text);
                 if (text == null)
                 {
                     this.SetSlot(i, "", 0f);
                 }
                 else
                 {
                     num += 1f;
                     if (num > itemConversion.m_cookTime * 2f)
                     {
                         this.m_overcookedEffect.Create(this.m_slots[i].position, Quaternion.identity, null, 1f);
                         this.SetSlot(i, this.m_overCookedItem.name, num);
                     }
                     else if (num > itemConversion.m_cookTime && text == itemConversion.m_from.name)
                     {
                         this.m_doneEffect.Create(this.m_slots[i].position, Quaternion.identity, null, 1f);
                         this.SetSlot(i, itemConversion.m_to.name, num);
                     }
                     else
                     {
                         this.SetSlot(i, text, num);
                     }
                 }
             }
         }
     }
     this.UpdateVisual();
 }
예제 #6
0
        public static bool PatchCookingStation(CookingStation cookingStation, ref string hoverText)
        {
            if (cookingStation.m_nview.IsOwner() && cookingStation.IsFireLit())
            {
                string cookingItems = "";
                int    items        = 0;

                for (int i = 0; i < cookingStation.m_slots.Length; i++)
                {
                    cookingStation.GetSlot(i, out string text, out float num);
                    if (text != "" && text != cookingStation.m_overCookedItem.name)
                    {
                        CookingStation.ItemConversion itemConversion = cookingStation.GetItemConversion(text);
                        if (text != null)
                        {
                            items++;
                            if (num > itemConversion.m_cookTime) // Item overCooking
                            {
                                string time = Main.timeLeftStyleCookingStation.Value == 1 ? $"{num / (itemConversion.m_cookTime * 2f):P0}" : Helpers.TimeString(itemConversion.m_cookTime * 2f - num);
                                cookingItems += $"\n{cookingStation.m_overCookedItem.GetHoverName()}: <color={overCookColor}>{time}</color>";
                            }
                            else
                            {
                                string time = Main.timeLeftStyleCookingStation.Value == 1 ? $"{num / itemConversion.m_cookTime:P0}" : Helpers.TimeString(itemConversion.m_cookTime - num);
                                cookingItems += $"\n{itemConversion.m_to.GetHoverName()}: {time}";
                            }
                        }
                    }
                }
                if (items > 0)
                {
                    hoverText = items >= cookingStation.m_slots.Length ?
                                Localization.instance.Localize($"{cookingStation.m_name}{cookingItems}") :
                                Localization.instance.Localize($"{cookingStation.m_name}\n{_cookItem}\n{_selectItem}{cookingItems}");
                    return(false); // Overwrite games default string
                }
            }
            return(true);
        }
예제 #7
0
        private static void AddNewCookingRecipes()
        {
            if (myCookingRecipes.Count > 0)
            {
                foreach (var cr in myCookingRecipes)
                {
                    var cookingStation = MyReferences.listOfCookingStations[cr.cookingStationName.GetStableHashCode()];
                    if (cookingStation != null)
                    {
                        CookingStation.ItemConversion recipe = new CookingStation.ItemConversion();
                        recipe.m_cookTime = cr.cookingTime;


                        recipe.m_from = cr.GetFromItemDrop();

                        recipe.m_to = cr.GetToItemDrop();
                        //if (!cookingStation.m_conversion.Contains(recipe))
                        cookingStation.m_conversion.RemoveAll(c => c.m_from.gameObject.name == recipe.m_from.gameObject.name);
                        cookingStation.m_conversion.Add(recipe);
                    }
                }
            }
        }