1267{
1269
1277
1287
1289
1291 {
1293 {
1295
1297 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1298
1302 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1303 }
1304 }
1305
1307 {
1309
1311 }
1312
1314 {
1315 super.EEDelete(parent);
1316
1318
1321 }
1322
1324 {
1325 super.EEItemLocationChanged(oldLoc, newLoc);
1326
1329 {
1330 switch (oldLoc.GetParent().GetType())
1331 {
1332 case "FryingPan":
1333 case "Pot":
1334 case "Cauldron":
1335 case "SharpWoodenStick":
1337 break;
1338 }
1339
1342 {
1344 }
1345 }
1346
1347 if (oldLoc.IsValid())
1349
1352 }
1353
1355 {
1358 }
1359
1361 {
1364
1365 return true;
1366 }
1367
1369 {
1371 {
1373 }
1374 }
1375
1378 {
1379 int foodStageType;
1380
1382 if (foodStage)
1383 foodStageType = foodStage.GetFoodStageType();
1384
1389
1390 return agentsIn;
1391 }
1392
1393
1395 {
1396 return false;
1397 }
1398
1400 {
1401 return false;
1402 }
1403
1405 {
1407 {
1409 {
1412
1415
1416 default:
1417 return super.GetTemperatureFreezeTime();
1418 }
1419 }
1420
1421 return super.GetTemperatureFreezeTime();
1422 }
1423
1425 {
1427 {
1429 {
1432
1435
1436 default:
1437 return super.GetTemperatureThawTime();
1438 }
1439 }
1440
1441 return super.GetTemperatureThawTime();
1442 }
1443
1445 {
1447 }
1448
1449
1450
1451
1453 {
1454 SetSynchDirty();
1455 }
1456
1458 {
1459 super.OnVariablesSynchronized();
1460
1461
1462
1463
1465 {
1467 }
1468 else
1469 {
1471 }
1472
1475 }
1476
1477
1478
1479
1481 {
1484
1486 }
1487
1489 {
1490 string soundName = "";
1491
1494
1496 {
1498 }
1499 else
1500 {
1502 {
1504 {
1509 else
1510 soundName = "";
1511 break;
1512 }
1513
1515 {
1520 else
1521 soundName = "";
1522 break;
1523 }
1524
1526 {
1531 else
1532 soundName = "";
1533 break;
1534 }
1535
1536 default:
1537 soundName = "";
1538 break;
1539 }
1540
1542 {
1543 if (soundName == "")
1544 {
1546 }
1547 else
1548 {
1550 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1551 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1553 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1554 {
1556 }
1557 }
1558 }
1559 }
1560
1562 }
1563
1565 {
1568 }
1569
1570
1571
1572
1574 {
1575 super.OnStoreSave(ctx);
1576
1578 {
1580 }
1581
1582
1585 }
1586
1588 {
1589 if (!super.OnStoreLoad(ctx, version))
1590 return false;
1591
1593 {
1595 return false;
1596 }
1597
1598 if (version >= 115)
1599 {
1601 {
1603 return false;
1604 }
1606 {
1608 return false;
1609 }
1610 }
1611
1614
1615 return true;
1616 }
1617
1619 {
1620 super.AfterStoreLoad();
1621
1623 }
1624
1625
1627 {
1629 }
1630
1631
1633 {
1634 return false;
1635 }
1636
1638 {
1639 return false;
1640 }
1641
1643 {
1644 return false;
1645 }
1646
1648 {
1649 return false;
1650 }
1651
1652
1653
1654
1655
1657 {
1660 {
1661 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1662 }
1663 else if (classname != "" && food_stage)
1664 {
1665 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1666 }
1667 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1669
1670 }
1671
1673 {
1676 {
1678 }
1679 else if (classname != "" && food_stage)
1680 {
1681 return FoodStage.GetEnergy(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.GetWater(null, food_stage, classname);
1697 }
1698 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1700 }
1701
1703 {
1706 {
1707 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1708 }
1709 else if (classname != "" && food_stage)
1710 {
1711 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1712 }
1713 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1715
1716 }
1717
1719 {
1722 {
1723 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1724 }
1725 else if (classname != "" && food_stage)
1726 {
1727 return FoodStage.GetToxicity(null, food_stage, classname);
1728 }
1729 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1731 }
1732
1734 {
1737 {
1739 }
1740 else if (classname != "" && food_stage)
1741 {
1742 return FoodStage.GetAgents(null, food_stage, classname);
1743 }
1744 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1746 }
1747
1749 {
1752 {
1753 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1754 }
1755 else if (classname != "" && food_stage)
1756 {
1757 return FoodStage.GetDigestibility(null, food_stage, classname);
1758 }
1759 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1761 }
1762
1764 {
1767 {
1768 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1769 }
1770 else if (className != "" && foodStage)
1771 {
1772 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1773 }
1774 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1776 }
1777
1779 {
1789
1790 return profile;
1791 }
1792
1793
1794
1795
1797 {
1799 }
1800
1801
1803 {
1805 {
1807 }
1808
1809 return false;
1810 }
1811
1813 {
1815 {
1817 }
1818
1819 return false;
1820 }
1821
1823 {
1825 {
1827 }
1828
1829 return false;
1830 }
1831
1833 {
1835 {
1837 }
1838
1839 return false;
1840 }
1841
1843 {
1845 {
1847 }
1848
1849 return false;
1850 }
1851
1853 {
1855 {
1857 }
1858
1859 return false;
1860 }
1861
1862
1864 {
1866 }
1867
1869 {
1870 return GetFoodStage().GetNextFoodStageType( cooking_method );
1871 }
1872
1874 {
1875 return GetFoodStage().GetFoodStageName( food_stage_type );
1876 }
1877
1879 {
1880 return GetFoodStage().CanChangeToNewStage( cooking_method );
1881 }
1882
1883
1885 {
1886 if ( !source.GetFoodStage())
1887 return;
1892 }
1893
1896 {
1899 }
1900
1903 {
1904 switch (stageNew)
1905 {
1910 break;
1911
1914 break;
1915 }
1916 }
1917
1918
1919
1920
1921
1923 {
1925 }
1926
1928 {
1930
1931
1933 }
1934
1936 {
1938 {
1941 }
1942 }
1943
1944
1946 {
1948 if (player)
1949 {
1951 player.ServerReplaceItemInHandsWithNew(lambda);
1952 }
1953 else
1954 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1955 }
1956
1958 {
1960 }
1961
1963 {
1964 super.SetActions();
1965
1968 }
1969
1971 {
1972 #ifndef SERVER
1974 {
1976
1979 }
1980 #endif
1981 }
1982
1984 {
1985 #ifndef SERVER
1987 {
1991 }
1992 #endif
1993 }
1994
1996 {
1997 return false;
1998 }
1999
2001 {
2003 }
2004
2005 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2006 {
2008
2009 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2011 if ( hasRootAsPlayer )
2013
2014
2015
2016
2017
2018
2019
2021 {
2022
2024 {
2026 {
2030 break;
2031
2035 break;
2036
2040 break;
2041
2045 default:
2048 return;
2049 }
2050
2051
2052 }
2053
2055
2057 {
2059 {
2060
2062 {
2064 }
2066 {
2069 {
2071 }
2072 else
2073 {
2075 {
2077 }
2078 else
2079 {
2081 }
2082 }
2083 }
2084 }
2085 }
2086
2087 }
2089 {
2090
2092 {
2094 {
2098 break;
2099
2103 break;
2104
2108 break;
2109
2113 break;
2114
2117 default:
2120 return;
2121 }
2122 }
2123
2125
2127 {
2129 {
2130
2132 {
2134 }
2135 }
2136 }
2137 }
2139 {
2140
2142 {
2144 {
2148 break;
2149
2152 default:
2155 return;
2156 }
2157 }
2158
2160
2162 {
2164 {
2165
2167 {
2169 }
2170 }
2171 }
2172 }
2173 else
2174 {
2175
2177
2179 {
2182
2183 }
2184 else
2185 {
2187 {
2190 }
2191 }
2192 }
2193 }
2194
2196 {
2197 if (
GetGame().IsDedicatedServer())
2198 return;
2199
2201 {
2203 GetInventory().GetCurrentInventoryLocation(invLoc);
2205 {
2207 if (ptcMgr)
2208 {
2213 }
2214 }
2215 }
2217 {
2219 {
2222 return;
2223 }
2224
2226 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2228 {
2231 }
2232 }
2233 }
2234
2235 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2236 {
2237 super.GetDebugActions(outputList);
2238
2240 {
2244 }
2245 }
2246
2248 {
2249 super.OnAction(action_id, player, ctx);
2250
2252 {
2253 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2254 {
2256 if (food_stage_prev <= 0)
2257 {
2259 }
2261 return true;
2262 }
2263 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2264 {
2267 {
2269 }
2271 return true;
2272 }
2273
2274 }
2275
2276 #ifdef DIAG_DEVELOPER
2277 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2278 {
2279 PrintNutritionsData();
2280 return true;
2281 }
2282 #endif
2283
2284 return false;
2285 }
2286
2288 {
2289 string debug_output;
2290
2291 debug_output = super.GetDebugText();
2292
2295
2296 return debug_output;
2297 }
2298
2299
2300
2301
2302
2304 {
2305 float ret = super.GetBaitEffectivity();
2306
2308 {
2309 ret *= 0.5;
2310 }
2311
2312 return ret;
2313 }
2314
2316 {
2318 }
2319
2321 {
2323 }
2324
2326 {
2328 }
2329
2330 #ifdef DIAG_DEVELOPER
2331 private void PrintNutritionsData()
2332 {
2333 string nutritionsData = "";
2334
2337
2339 if (profile)
2340 {
2341 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2343 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2347 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2349
2352
2353 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2355 }
2356
2357 nutritionsData += "-----\n";
2358
2360 }
2361 #endif
2362
2364
2367 {
2369 }
2370}
2371
2373{
2375};
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.