if no per FoodStage/Nutrition override is set, remove possible Food Poisoning to prevent double punishment from Bloody Hands
1220{
1222
1230
1240
1242
1244 {
1246 {
1248
1250 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1251
1255 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1256 }
1257 }
1258
1260 {
1262
1264 }
1265
1267 {
1268 super.EEDelete(parent);
1269
1271
1274 }
1275
1277 {
1278 super.EEItemLocationChanged(oldLoc, newLoc);
1279
1282 {
1283 switch (oldLoc.GetParent().GetType())
1284 {
1285 case "FryingPan":
1286 case "Pot":
1287 case "Cauldron":
1288 case "SharpWoodenStick":
1290 break;
1291 }
1292
1295 {
1297 }
1298 }
1299
1300 if (oldLoc.IsValid())
1302
1305 }
1306
1308 {
1311 }
1312
1314 {
1317
1318 return true;
1319 }
1320
1322 {
1324 {
1326 }
1327 }
1328
1331 {
1332 int foodStageType;
1333
1335 if (foodStage)
1336 foodStageType = foodStage.GetFoodStageType();
1337
1342
1343 return agentsIn;
1344 }
1345
1346
1348 {
1349 return false;
1350 }
1351
1353 {
1354 return false;
1355 }
1356
1358 {
1360 {
1362 {
1365
1368
1369 default:
1370 return super.GetTemperatureFreezeTime();
1371 }
1372 }
1373
1374 return super.GetTemperatureFreezeTime();
1375 }
1376
1378 {
1380 {
1382 {
1385
1388
1389 default:
1390 return super.GetTemperatureThawTime();
1391 }
1392 }
1393
1394 return super.GetTemperatureThawTime();
1395 }
1396
1398 {
1400 }
1401
1402
1403
1404
1406 {
1407 SetSynchDirty();
1408 }
1409
1411 {
1412 super.OnVariablesSynchronized();
1413
1414
1415
1416
1418 {
1420 }
1421 else
1422 {
1424 }
1425
1428 }
1429
1430
1431
1432
1434 {
1437
1439 }
1440
1442 {
1443 string soundName = "";
1444
1447
1449 {
1451 }
1452 else
1453 {
1455 {
1457 {
1462 else
1463 soundName = "";
1464 break;
1465 }
1466
1468 {
1473 else
1474 soundName = "";
1475 break;
1476 }
1477
1479 {
1484 else
1485 soundName = "";
1486 break;
1487 }
1488
1489 default:
1490 soundName = "";
1491 break;
1492 }
1493
1495 {
1496 if (soundName == "")
1497 {
1499 }
1500 else
1501 {
1503 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1504 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1506 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1507 {
1509 }
1510 }
1511 }
1512 }
1513
1515 }
1516
1518 {
1521 }
1522
1523
1524
1525
1527 {
1528 super.OnStoreSave(ctx);
1529
1531 {
1533 }
1534
1535
1538 }
1539
1541 {
1542 if (!super.OnStoreLoad(ctx, version))
1543 return false;
1544
1546 {
1548 return false;
1549 }
1550
1551 if (version >= 115)
1552 {
1554 {
1556 return false;
1557 }
1559 {
1561 return false;
1562 }
1563 }
1564
1567
1568 return true;
1569 }
1570
1572 {
1573 super.AfterStoreLoad();
1574
1576 }
1577
1578
1580 {
1582 }
1583
1584
1586 {
1587 return false;
1588 }
1589
1591 {
1592 return false;
1593 }
1594
1596 {
1597 return false;
1598 }
1599
1601 {
1602 return false;
1603 }
1604
1605
1606
1607
1608
1610 {
1613 {
1614 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1615 }
1616 else if (classname != "" && food_stage)
1617 {
1618 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1619 }
1620 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1622
1623 }
1624
1626 {
1629 {
1631 }
1632 else if (classname != "" && food_stage)
1633 {
1634 return FoodStage.GetEnergy(null, food_stage, classname);
1635 }
1636 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1638 }
1639
1641 {
1644 {
1646 }
1647 else if (classname != "" && food_stage)
1648 {
1649 return FoodStage.GetWater(null, food_stage, classname);
1650 }
1651 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1653 }
1654
1656 {
1659 {
1660 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1661 }
1662 else if (classname != "" && food_stage)
1663 {
1664 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1665 }
1666 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1668
1669 }
1670
1672 {
1675 {
1676 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1677 }
1678 else if (classname != "" && food_stage)
1679 {
1680 return FoodStage.GetToxicity(null, food_stage, classname);
1681 }
1682 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1684 }
1685
1687 {
1690 {
1692 }
1693 else if (classname != "" && food_stage)
1694 {
1695 return FoodStage.GetAgents(null, food_stage, classname);
1696 }
1697 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1699 }
1700
1702 {
1705 {
1706 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1707 }
1708 else if (classname != "" && food_stage)
1709 {
1710 return FoodStage.GetDigestibility(null, food_stage, classname);
1711 }
1712 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1714 }
1715
1717 {
1720 {
1721 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1722 }
1723 else if (className != "" && foodStage)
1724 {
1725 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1726 }
1727 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1729 }
1730
1732 {
1742
1743 return profile;
1744 }
1745
1746
1747
1748
1750 {
1752 }
1753
1754
1756 {
1758 {
1760 }
1761
1762 return false;
1763 }
1764
1766 {
1768 {
1770 }
1771
1772 return false;
1773 }
1774
1776 {
1778 {
1780 }
1781
1782 return false;
1783 }
1784
1786 {
1788 {
1790 }
1791
1792 return false;
1793 }
1794
1796 {
1798 {
1800 }
1801
1802 return false;
1803 }
1804
1806 {
1808 {
1810 }
1811
1812 return false;
1813 }
1814
1815
1817 {
1819 }
1820
1822 {
1823 return GetFoodStage().GetNextFoodStageType( cooking_method );
1824 }
1825
1827 {
1828 return GetFoodStage().GetFoodStageName( food_stage_type );
1829 }
1830
1832 {
1833 return GetFoodStage().CanChangeToNewStage( cooking_method );
1834 }
1835
1836
1838 {
1839 if ( !source.GetFoodStage())
1840 return;
1845 }
1846
1849 {
1852 }
1853
1856 {
1857 switch (stageNew)
1858 {
1863 break;
1864
1867 break;
1868 }
1869 }
1870
1871
1872
1873
1874
1876 {
1878 }
1879
1881 {
1883
1884
1886 }
1887
1889 {
1891 {
1894 }
1895 }
1896
1897
1899 {
1901 if (player)
1902 {
1904 player.ServerReplaceItemInHandsWithNew(lambda);
1905 }
1906 else
1907 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1908 }
1909
1911 {
1913 }
1914
1916 {
1917 super.SetActions();
1918
1921 }
1922
1924 {
1925 #ifndef SERVER
1927 {
1929
1932 }
1933 #endif
1934 }
1935
1937 {
1938 #ifndef SERVER
1940 {
1944 }
1945 #endif
1946 }
1947
1949 {
1950 return false;
1951 }
1952
1954 {
1956 }
1957
1958 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1959 {
1961
1962 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1964 if ( hasRootAsPlayer )
1966
1967
1968
1969
1970
1971
1972
1974 {
1975
1977 {
1979 {
1983 break;
1984
1988 break;
1989
1993 break;
1994
1998 default:
2001 return;
2002 }
2003
2004
2005 }
2006
2008
2010 {
2012 {
2013
2015 {
2017 }
2019 {
2022 {
2024 }
2025 else
2026 {
2028 {
2030 }
2031 else
2032 {
2034 }
2035 }
2036 }
2037 }
2038 }
2039
2040 }
2042 {
2043
2045 {
2047 {
2051 break;
2052
2056 break;
2057
2061 break;
2062
2066 break;
2067
2070 default:
2073 return;
2074 }
2075 }
2076
2078
2080 {
2082 {
2083
2085 {
2087 }
2088 }
2089 }
2090 }
2092 {
2093
2095 {
2097 {
2101 break;
2102
2105 default:
2108 return;
2109 }
2110 }
2111
2113
2115 {
2117 {
2118
2120 {
2122 }
2123 }
2124 }
2125 }
2126 else
2127 {
2128
2130
2132 {
2135
2136 }
2137 else
2138 {
2140 {
2143 }
2144 }
2145 }
2146 }
2147
2149 {
2150 if (
GetGame().IsDedicatedServer())
2151 return;
2152
2154 {
2156 GetInventory().GetCurrentInventoryLocation(invLoc);
2158 {
2160 if (ptcMgr)
2161 {
2166 }
2167 }
2168 }
2170 {
2172 {
2175 return;
2176 }
2177
2179 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2181 {
2184 }
2185 }
2186 }
2187
2188 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2189 {
2190 super.GetDebugActions(outputList);
2191
2193 {
2197 }
2198 }
2199
2201 {
2202 super.OnAction(action_id, player, ctx);
2203
2205 {
2206 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2207 {
2209 if (food_stage_prev <= 0)
2210 {
2212 }
2214 return true;
2215 }
2216 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2217 {
2220 {
2222 }
2224 return true;
2225 }
2226
2227 }
2228
2229 #ifdef DIAG_DEVELOPER
2230 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2231 {
2232 PrintNutritionsData();
2233 return true;
2234 }
2235 #endif
2236
2237 return false;
2238 }
2239
2241 {
2242 string debug_output;
2243
2244 debug_output = super.GetDebugText();
2245
2248
2249 return debug_output;
2250 }
2251
2252
2253
2254
2255
2257 {
2258 float ret = super.GetBaitEffectivity();
2259
2261 {
2262 ret *= 0.5;
2263 }
2264
2265 return ret;
2266 }
2267
2269 {
2271 }
2272
2274 {
2276 }
2277
2279 {
2281 }
2282
2283 #ifdef DIAG_DEVELOPER
2284 private void PrintNutritionsData()
2285 {
2286 string nutritionsData = "";
2287
2290
2292 if (profile)
2293 {
2294 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2296 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2300 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2302
2305
2306 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2308 }
2309
2310 nutritionsData += "-----\n";
2311
2313 }
2314 #endif
2315
2317
2320 {
2322 }
2323}
2324
2326{
2328};
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
AttachActionData ActionData ActionAttach()
void AddAction(typename actionName)
DamageType
exposed from C++ (do not change)
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.