if no per FoodStage/Nutrition override is set, remove possible Food Poisoning to prevent double punishment from Bloody Hands
1221{
1223
1231
1241
1243
1245 {
1247 {
1249
1251 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1252
1256 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1257 }
1258 }
1259
1261 {
1263
1265 }
1266
1268 {
1269 super.EEDelete(parent);
1270
1272
1275 }
1276
1278 {
1279 super.EEItemLocationChanged(oldLoc, newLoc);
1280
1283 {
1284 switch (oldLoc.GetParent().GetType())
1285 {
1286 case "FryingPan":
1287 case "Pot":
1288 case "Cauldron":
1289 case "SharpWoodenStick":
1291 break;
1292 }
1293
1296 {
1298 }
1299 }
1300
1301 if (oldLoc.IsValid())
1303
1306 }
1307
1309 {
1312 }
1313
1315 {
1318
1319 return true;
1320 }
1321
1323 {
1325 {
1327 }
1328 }
1329
1332 {
1333 int foodStageType;
1334
1336 if (foodStage)
1337 foodStageType = foodStage.GetFoodStageType();
1338
1343
1344 return agentsIn;
1345 }
1346
1347
1349 {
1350 return false;
1351 }
1352
1354 {
1355 return false;
1356 }
1357
1359 {
1361 {
1363 {
1366
1369
1370 default:
1371 return super.GetTemperatureFreezeTime();
1372 }
1373 }
1374
1375 return super.GetTemperatureFreezeTime();
1376 }
1377
1379 {
1381 {
1383 {
1386
1389
1390 default:
1391 return super.GetTemperatureThawTime();
1392 }
1393 }
1394
1395 return super.GetTemperatureThawTime();
1396 }
1397
1399 {
1401 }
1402
1403
1404
1405
1407 {
1408 SetSynchDirty();
1409 }
1410
1412 {
1413 super.OnVariablesSynchronized();
1414
1415
1416
1417
1419 {
1421 }
1422 else
1423 {
1425 }
1426
1429 }
1430
1431
1432
1433
1435 {
1438
1440 }
1441
1443 {
1444 string soundName = "";
1445
1448
1450 {
1452 }
1453 else
1454 {
1456 {
1458 {
1463 else
1464 soundName = "";
1465 break;
1466 }
1467
1469 {
1474 else
1475 soundName = "";
1476 break;
1477 }
1478
1480 {
1485 else
1486 soundName = "";
1487 break;
1488 }
1489
1490 default:
1491 soundName = "";
1492 break;
1493 }
1494
1496 {
1497 if (soundName == "")
1498 {
1500 }
1501 else
1502 {
1504 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1505 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1507 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1508 {
1510 }
1511 }
1512 }
1513 }
1514
1516 }
1517
1519 {
1522 }
1523
1524
1525
1526
1528 {
1529 super.OnStoreSave(ctx);
1530
1532 {
1534 }
1535
1536
1539 }
1540
1542 {
1543 if (!super.OnStoreLoad(ctx, version))
1544 return false;
1545
1547 {
1549 return false;
1550 }
1551
1552 if (version >= 115)
1553 {
1555 {
1557 return false;
1558 }
1560 {
1562 return false;
1563 }
1564 }
1565
1568
1569 return true;
1570 }
1571
1573 {
1574 super.AfterStoreLoad();
1575
1577 }
1578
1579
1581 {
1583 }
1584
1585
1587 {
1588 return false;
1589 }
1590
1592 {
1593 return false;
1594 }
1595
1597 {
1598 return false;
1599 }
1600
1602 {
1603 return false;
1604 }
1605
1606
1607
1608
1609
1611 {
1614 {
1615 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1616 }
1617 else if (classname != "" && food_stage)
1618 {
1619 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1620 }
1621 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1623
1624 }
1625
1627 {
1630 {
1632 }
1633 else if (classname != "" && food_stage)
1634 {
1635 return FoodStage.GetEnergy(null, food_stage, classname);
1636 }
1637 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1639 }
1640
1642 {
1645 {
1647 }
1648 else if (classname != "" && food_stage)
1649 {
1650 return FoodStage.GetWater(null, food_stage, classname);
1651 }
1652 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1654 }
1655
1657 {
1660 {
1661 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1662 }
1663 else if (classname != "" && food_stage)
1664 {
1665 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1666 }
1667 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1669
1670 }
1671
1673 {
1676 {
1677 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1678 }
1679 else if (classname != "" && food_stage)
1680 {
1681 return FoodStage.GetToxicity(null, food_stage, classname);
1682 }
1683 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1685 }
1686
1688 {
1691 {
1693 }
1694 else if (classname != "" && food_stage)
1695 {
1696 return FoodStage.GetAgents(null, food_stage, classname);
1697 }
1698 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1700 }
1701
1703 {
1706 {
1707 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1708 }
1709 else if (classname != "" && food_stage)
1710 {
1711 return FoodStage.GetDigestibility(null, food_stage, classname);
1712 }
1713 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1715 }
1716
1718 {
1721 {
1722 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1723 }
1724 else if (className != "" && foodStage)
1725 {
1726 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1727 }
1728 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1730 }
1731
1733 {
1743
1744 return profile;
1745 }
1746
1747
1748
1749
1751 {
1753 }
1754
1755
1757 {
1759 {
1761 }
1762
1763 return false;
1764 }
1765
1767 {
1769 {
1771 }
1772
1773 return false;
1774 }
1775
1777 {
1779 {
1781 }
1782
1783 return false;
1784 }
1785
1787 {
1789 {
1791 }
1792
1793 return false;
1794 }
1795
1797 {
1799 {
1801 }
1802
1803 return false;
1804 }
1805
1807 {
1809 {
1811 }
1812
1813 return false;
1814 }
1815
1816
1818 {
1820 }
1821
1823 {
1824 return GetFoodStage().GetNextFoodStageType( cooking_method );
1825 }
1826
1828 {
1829 return GetFoodStage().GetFoodStageName( food_stage_type );
1830 }
1831
1833 {
1834 return GetFoodStage().CanChangeToNewStage( cooking_method );
1835 }
1836
1837
1839 {
1840 if ( !source.GetFoodStage())
1841 return;
1846 }
1847
1850 {
1853 }
1854
1857 {
1858 switch (stageNew)
1859 {
1864 break;
1865
1868 break;
1869 }
1870 }
1871
1872
1873
1874
1875
1877 {
1879 }
1880
1882 {
1884
1885
1887 }
1888
1890 {
1892 {
1895 }
1896 }
1897
1898
1900 {
1902 if (player)
1903 {
1905 player.ServerReplaceItemInHandsWithNew(lambda);
1906 }
1907 else
1908 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1909 }
1910
1912 {
1914 }
1915
1917 {
1918 super.SetActions();
1919
1922 }
1923
1925 {
1926 #ifndef SERVER
1928 {
1930
1933 }
1934 #endif
1935 }
1936
1938 {
1939 #ifndef SERVER
1941 {
1945 }
1946 #endif
1947 }
1948
1950 {
1951 return false;
1952 }
1953
1955 {
1957 }
1958
1959 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1960 {
1962
1963 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1965 if ( hasRootAsPlayer )
1967
1968
1969
1970
1971
1972
1973
1975 {
1976
1978 {
1980 {
1984 break;
1985
1989 break;
1990
1994 break;
1995
1999 default:
2002 return;
2003 }
2004
2005
2006 }
2007
2009
2011 {
2013 {
2014
2016 {
2018 }
2020 {
2023 {
2025 }
2026 else
2027 {
2029 {
2031 }
2032 else
2033 {
2035 }
2036 }
2037 }
2038 }
2039 }
2040
2041 }
2043 {
2044
2046 {
2048 {
2052 break;
2053
2057 break;
2058
2062 break;
2063
2067 break;
2068
2071 default:
2074 return;
2075 }
2076 }
2077
2079
2081 {
2083 {
2084
2086 {
2088 }
2089 }
2090 }
2091 }
2093 {
2094
2096 {
2098 {
2102 break;
2103
2106 default:
2109 return;
2110 }
2111 }
2112
2114
2116 {
2118 {
2119
2121 {
2123 }
2124 }
2125 }
2126 }
2127 else
2128 {
2129
2131
2133 {
2136
2137 }
2138 else
2139 {
2141 {
2144 }
2145 }
2146 }
2147 }
2148
2150 {
2151 if (
GetGame().IsDedicatedServer())
2152 return;
2153
2155 {
2157 GetInventory().GetCurrentInventoryLocation(invLoc);
2159 {
2161 if (ptcMgr)
2162 {
2167 }
2168 }
2169 }
2171 {
2173 {
2176 return;
2177 }
2178
2180 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2182 {
2185 }
2186 }
2187 }
2188
2189 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2190 {
2192 {
2197 }
2198
2199 super.GetDebugActions(outputList);
2200 }
2201
2203 {
2204 super.OnAction(action_id, player, ctx);
2205
2207 {
2208 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2209 {
2211 if (food_stage_prev <= 0)
2212 {
2214 }
2216 return true;
2217 }
2218 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2219 {
2222 {
2224 }
2226 return true;
2227 }
2228
2229 }
2230
2231 #ifdef DIAG_DEVELOPER
2232 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2233 {
2234 PrintNutritionsData();
2235 return true;
2236 }
2237 #endif
2238
2239 return false;
2240 }
2241
2243 {
2244 string debug_output;
2245
2246 debug_output = super.GetDebugText();
2247
2250
2251 return debug_output;
2252 }
2253
2254
2255
2256
2257
2259 {
2260 float ret = super.GetBaitEffectivity();
2261
2263 {
2264 ret *= 0.5;
2265 }
2266
2267 return ret;
2268 }
2269
2271 {
2273 }
2274
2276 {
2278 }
2279
2281 {
2283 }
2284
2285 #ifdef DIAG_DEVELOPER
2286 private void PrintNutritionsData()
2287 {
2288 string nutritionsData = "";
2289
2292
2294 if (profile)
2295 {
2296 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2298 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2302 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2304
2307
2308 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2310 }
2311
2312 nutritionsData += "-----\n";
2313
2315 }
2316 #endif
2317
2319
2322 {
2324 }
2325}
2326
2328{
2330};
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
AttachActionData ActionData ActionAttach()
void AddAction(typename actionName)
DamageType
exposed from C++ (do not change)
AbstractWave m_SoundPlaying
EConsumptionPenaltyContext
void ReplaceEdibleWithNew(string typeName)
ref FoodStage m_FoodStage
static float GetFoodWater(ItemBase item, string classname="", int food_stage=0)
override bool CanBeCooked()
override string GetDebugText()
override void AfterStoreLoad()
void OnFoodStageChange(FoodStageType stageOld, FoodStageType stageNew)
called on server
override void OnVariablesSynchronized()
const string SOUND_BURNING_DONE
bool CanChangeToNewStage(CookingMethodType cooking_method)
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
override bool CanItemOverheat()
override float GetBaitEffectivity()
override FoodStage GetFoodStage()
override void SetActions()
override float GetTemperatureFreezeTime()
const string DIRECT_COOKING_SLOT_NAME
FoodStageType GetNextFoodStageType(CookingMethodType cooking_method)
void ChangeFoodStage(FoodStageType new_food_stage_type)
void OnConsume(float amount, PlayerBase consumer)
static float GetFoodNutritionalIndex(ItemBase item, string classname="", int food_stage=0)
SoundOnVehicle m_SoundCooking
static float GetFoodToxicity(ItemBase item, string classname="", int food_stage=0)
void UpdateVisualsEx(bool forced=false)
const string SOUND_BAKING_DONE
static NutritionalProfile GetNutritionalProfile(ItemBase item, string classname="", int food_stage=0)
int FilterAgents(int agentsIn)
Filter agents from the item (override on higher implementations)
override void EEDelete(EntityAI parent)
FoodStageType m_LastDecayStage
override bool CanBeCookedOnStick()
FoodStageType GetLastDecayStage()
string GetFoodStageName(FoodStageType food_stage_type)
override float GetTemperatureThawTime()
void UpdateVaporParticle()
static float GetFoodDigestibility(ItemBase item, string classname="", int food_stage=0)
void TransferFoodStage(notnull Edible_Base source)
override void ProcessDecay(float delta, bool hasRootAsPlayer)
const string SOUND_DRYING_START
void SetCookingTime(float time)
void SoundCookingStart(string sound_name)
const string SOUND_BAKING_START
static float GetFoodTotalVolume(ItemBase item, string classname="", int food_stage=0)
const string SOUND_DRYING_DONE
void HandleFoodStageChangeAgents(FoodStageType stageOld, FoodStageType stageNew)
removes select agents on foodstage transitions
Edible_Base ItemBase ReplaceEdibleWithNewLambda(EntityAI old_item, string new_item_type, PlayerBase player)
bool Consume(float amount, PlayerBase consumer)
EffectSound m_SoundEffectCooking
DEPRECATED.
override bool OnStoreLoad(ParamsReadContext ctx, int version)
FoodStageType GetFoodStageType()
override bool CanProcessDecay()
ParticleSource m_HotVaporParticle
void MakeSoundsOnClient(bool soundstate, CookingMethodType cookingMethod=CookingMethodType.NONE)
static int GetFoodAgents(ItemBase item, string classname="", int food_stage=0)
override bool IsMushroom()
static float GetFoodEnergy(ItemBase item, string classname="", int food_stage=0)
static float GetAgentsPerDigest(ItemBase item, string className="", int foodStage=0)
const string SOUND_BOILING_DONE
int GetConsumptionPenaltyContext()
const string SOUND_BOILING_START
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
CookingMethodType m_CookedByMethod
override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc)
override void OnStoreSave(ParamsWriteContext ctx)
override bool CanHaveTemperature()
InventoryLocationType
types of Inventory Location
override void InsertAgent(int agent, float count=1)
override void RemoveAllAgentsExcept(int agent_to_keep)
bool AddQuantity(float value, bool destroy_config=true, bool destroy_forced=false)
add item quantity[related to varQuantity... config entry], destroy_config = true > if the quantity re...
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
ParticleAutoDestroyFlags
Flags to pass to ParticleSource.SetParticleAutoDestroyFlags.
proto native float ConfigGetFloat(string path)
Get float value from config on path.
proto native int ConfigGetInt(string path)
Get int value from config on path.
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
override FoodStage GetFoodStage()
Wrapper class for managing sound through SEffectManager.
proto native int GetType()
returns type of InventoryLocation
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
static const int ITEM_HOT_VAPOR
Entity which has the particle instance as an ObjectComponent.
static const float CONSUMPTION_DAMAGE_PER_BITE
static const float CONSUMPTION_DAMAGE_TEMP_THRESHOLD
static EffectSound PlaySound(string sound_set, vector position, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound.
Manager class for managing Effect (EffectParticle, EffectSound)
proto bool Write(void value_out)
proto bool Read(void value_in)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Serializer ParamsReadContext
proto native CGame GetGame()
Serializer ParamsWriteContext
void Error(string err)
Messagebox with error message.
const float DECAY_FOOD_BAKED_FRVG
const float DECAY_FOOD_CAN_OPEN
const float DECAY_FOOD_RAW_FRVG
const int DECAY_TIMER_RANDOM_PERCENTAGE
const int DECAY_FOOD_FRVG_DRIED_CHANCE
const float DECAY_FOOD_RAW_MEAT
const float DECAY_FOOD_BAKED_MEAT
const float DECAY_FOOD_BOILED_MEAT
const float DECAY_FOOD_BOILED_FRVG
const float DECAY_FOOD_DRIED_MEAT
const float DECAY_FOOD_RAW_CORPSE
const float DECAY_RATE_ON_PLAYER
static const float TEMPERATURE_THAW_TIME_COEF_BURNED
static const float TEMPERATURE_FREEZE_TIME_COEF_BURNED
static const float TEMPERATURE_THAW_TIME_COEF_DRIED
static const float TEMPERATURE_FREEZE_TIME_COEF_DRIED
const int STATE_HOT_LVL_TWO
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
const int SAT_DEBUG_ACTION
class JsonUndergroundAreaTriggerData GetPosition
bool Contains(string sample)
Returns true if sample is substring of string.
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.