-
Notifications
You must be signed in to change notification settings - Fork 0
/
Meals.cs
85 lines (71 loc) · 3.75 KB
/
Meals.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System.Collections.Generic;
using UnityEngine;
using ValheimLib;
using ValheimLib.ODB;
using System.Linq;
using System;
namespace JustAnotherCookingSkill.Meals
{
internal static class Cooking
{
// "tasty", "deliciously", "divine"
public static string[] qualityPrefixes = { ""/** default quality **/, "well", "tasty", "deliciously", "divine" };
private static List<string> affectedFood = new List<string> {
// cooking station
"CookedMeat", "CookedLoxMeat", "SerpentMeatCooked", "FishCooked", "NeckTailGrilled",
// cauldron
"QueensJam", "BloodPudding", "Bread", "FishWraps", "LoxPie", "Sausages", "CarrotSoup", "TurnipStew", "SerpentStew",
// Jams by RandyKnapp
"RaspberryJam", "HoneyRaspberryJam", "BlueberryJam", "HoneyBlueberryJam", "CloudberryJam", "HoneyCloudberryJam", "KingsJam", "NordicJam",
// TEST
"NonExistingItemToTestItsOkay"
};
internal static void Init()
{
ObjectDBHelper.OnAfterInit += registerPrefabs;
}
private static void registerPrefabs()
{
foreach (string foodName in affectedFood)
{
// we skip default value(0)
for (int index = 1; index < qualityPrefixes.Length; index++)
{
// check for base prefab existance
ItemDrop basePrefab = Prefab.Cache.GetPrefab<ItemDrop>(foodName);
if (basePrefab == null)
{
Log.LogInfo($"No prefab registered for meal: {foodName}");
continue;
}
string qualityPrefix = qualityPrefixes[index];
// skipping default quality mostly, cuz those items are already exists,
// but modyfing to match the rest
string qualifiedPrefabName = foodName + "_" + qualityPrefix;
Log.LogInfo($"trying to make clone named: {qualifiedPrefabName}");
// create new quality items
GameObject clonedBasePrefabObject = basePrefab.gameObject.InstantiateClone(qualifiedPrefabName);
CustomItem newMealItem = new CustomItem(clonedBasePrefabObject, fixReference: true);
newMealItem.ItemDrop.m_itemData.m_shared.m_name = $"${qualifiedPrefabName}";
Log.LogInfo($"newMealItem named: {newMealItem.ItemDrop.m_itemData.m_shared.m_name}");
// setting quality representation for food
newMealItem.ItemDrop.m_itemData.m_quality = index;
newMealItem.ItemDrop.m_itemData.m_shared.m_maxQuality = qualityPrefixes.Length;
// increase/decrease stats
float baseFoodHealth = newMealItem.ItemDrop.m_itemData.m_shared.m_food;
newMealItem.ItemDrop.m_itemData.m_shared.m_food =
(int)Math.Round(baseFoodHealth * ((100f + (index * JustAnotherCookingSkill.foodIncreasePerQuality.Value) - 20) / 100f));
float baseFoodStamina = newMealItem.ItemDrop.m_itemData.m_shared.m_foodStamina;
newMealItem.ItemDrop.m_itemData.m_shared.m_foodStamina =
(int)Math.Round(baseFoodStamina * ((100f + (index * JustAnotherCookingSkill.foodIncreasePerQuality.Value) - 20) / 100f));
// increase regen for better quality items
if (index > 2)
{
newMealItem.ItemDrop.m_itemData.m_shared.m_foodRegen += index - 2;
}
ObjectDBHelper.Add(newMealItem);
}
}
}
}
}