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); } } } } }
// 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); }
/// <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); }
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); } } } } }
// 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(); }
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); }
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); } } } }