1288{
1290
1298
1308
1310
1312 {
1314 {
1316
1318 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1319
1323 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1324 }
1325 }
1326
1328 {
1330
1332 }
1333
1335 {
1336 super.EEDelete(parent);
1337
1339
1342 }
1343
1345 {
1346 super.EEItemLocationChanged(oldLoc, newLoc);
1347
1350 {
1351 switch (oldLoc.GetParent().GetType())
1352 {
1353 case "FryingPan":
1354 case "Pot":
1355 case "Cauldron":
1356 case "SharpWoodenStick":
1358 break;
1359 }
1360
1363 {
1365 }
1366 }
1367
1368 if (oldLoc.IsValid())
1370
1373 }
1374
1376 {
1379 }
1380
1382 {
1385
1386 return true;
1387 }
1388
1390 {
1392 {
1394 }
1395 }
1396
1399 {
1400 int foodStageType;
1401
1403 if (foodStage)
1404 foodStageType = foodStage.GetFoodStageType();
1405
1410
1411 return agentsIn;
1412 }
1413
1414
1416 {
1417 return false;
1418 }
1419
1421 {
1422 return false;
1423 }
1424
1426 {
1428 {
1430 {
1433
1436
1437 default:
1438 return super.GetTemperatureFreezeTime();
1439 }
1440 }
1441
1442 return super.GetTemperatureFreezeTime();
1443 }
1444
1446 {
1448 {
1450 {
1453
1456
1457 default:
1458 return super.GetTemperatureThawTime();
1459 }
1460 }
1461
1462 return super.GetTemperatureThawTime();
1463 }
1464
1466 {
1468 }
1469
1470
1471
1472
1474 {
1475 SetSynchDirty();
1476 }
1477
1479 {
1480 super.OnVariablesSynchronized();
1481
1482
1483
1484
1486 {
1488 }
1489 else
1490 {
1492 }
1493
1496 }
1497
1498
1499
1500
1502 {
1505
1507 }
1508
1510 {
1511 string soundName = "";
1512
1515
1517 {
1519 }
1520 else
1521 {
1523 {
1525 {
1530 else
1531 soundName = "";
1532 break;
1533 }
1534
1536 {
1541 else
1542 soundName = "";
1543 break;
1544 }
1545
1547 {
1552 else
1553 soundName = "";
1554 break;
1555 }
1556
1557 default:
1558 soundName = "";
1559 break;
1560 }
1561
1563 {
1564 if (soundName == "")
1565 {
1567 }
1568 else
1569 {
1571 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1572 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1574 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1575 {
1577 }
1578 }
1579 }
1580 }
1581
1583 }
1584
1586 {
1589 }
1590
1591
1592
1593
1595 {
1596 super.OnStoreSave(ctx);
1597
1599 {
1601 }
1602
1603
1606 }
1607
1609 {
1610 if (!super.OnStoreLoad(ctx, version))
1611 return false;
1612
1614 {
1616 return false;
1617 }
1618
1619 if (version >= 115)
1620 {
1622 {
1624 return false;
1625 }
1627 {
1629 return false;
1630 }
1631 }
1632
1635
1636 return true;
1637 }
1638
1640 {
1641 super.AfterStoreLoad();
1642
1644 }
1645
1646
1648 {
1650 }
1651
1652
1654 {
1655 return false;
1656 }
1657
1659 {
1660 return false;
1661 }
1662
1664 {
1665 return false;
1666 }
1667
1669 {
1670 return false;
1671 }
1672
1673
1674
1675
1676
1678 {
1681 {
1682 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1683 }
1684 else if (classname != "" && food_stage)
1685 {
1686 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1687 }
1688 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1690
1691 }
1692
1694 {
1697 {
1699 }
1700 else if (classname != "" && food_stage)
1701 {
1702 return FoodStage.GetEnergy(null, food_stage, classname);
1703 }
1704 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1706 }
1707
1709 {
1712 {
1714 }
1715 else if (classname != "" && food_stage)
1716 {
1717 return FoodStage.GetWater(null, food_stage, classname);
1718 }
1719 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1721 }
1722
1724 {
1727 {
1728 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1729 }
1730 else if (classname != "" && food_stage)
1731 {
1732 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1733 }
1734 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1736
1737 }
1738
1740 {
1743 {
1744 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1745 }
1746 else if (classname != "" && food_stage)
1747 {
1748 return FoodStage.GetToxicity(null, food_stage, classname);
1749 }
1750 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1752 }
1753
1755 {
1758 {
1760 }
1761 else if (classname != "" && food_stage)
1762 {
1763 return FoodStage.GetAgents(null, food_stage, classname);
1764 }
1765 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1767 }
1768
1770 {
1773 {
1774 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1775 }
1776 else if (classname != "" && food_stage)
1777 {
1778 return FoodStage.GetDigestibility(null, food_stage, classname);
1779 }
1780 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1782 }
1783
1785 {
1788 {
1789 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1790 }
1791 else if (className != "" && foodStage)
1792 {
1793 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1794 }
1795 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1797 }
1798
1800 {
1810
1811 return profile;
1812 }
1813
1814
1815
1816
1818 {
1820 }
1821
1822
1824 {
1826 {
1828 }
1829
1830 return false;
1831 }
1832
1834 {
1836 {
1838 }
1839
1840 return false;
1841 }
1842
1844 {
1846 {
1848 }
1849
1850 return false;
1851 }
1852
1854 {
1856 {
1858 }
1859
1860 return false;
1861 }
1862
1864 {
1866 {
1868 }
1869
1870 return false;
1871 }
1872
1874 {
1876 {
1878 }
1879
1880 return false;
1881 }
1882
1883
1885 {
1887 }
1888
1890 {
1891 return GetFoodStage().GetNextFoodStageType( cooking_method );
1892 }
1893
1895 {
1896 return GetFoodStage().GetFoodStageName( food_stage_type );
1897 }
1898
1900 {
1901 return GetFoodStage().CanChangeToNewStage( cooking_method );
1902 }
1903
1904
1906 {
1907 if ( !source.GetFoodStage())
1908 return;
1913 }
1914
1917 {
1920 }
1921
1924 {
1925 switch (stageNew)
1926 {
1931 break;
1932
1935 break;
1936 }
1937 }
1938
1939
1940
1941
1942
1944 {
1946 }
1947
1949 {
1951
1952
1954 }
1955
1957 {
1959 {
1962 }
1963 }
1964
1965
1967 {
1969 if (player)
1970 {
1972 player.ServerReplaceItemInHandsWithNew(lambda);
1973 }
1974 else
1975 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1976 }
1977
1979 {
1981 }
1982
1984 {
1985 super.SetActions();
1986
1989 }
1990
1992 {
1993 #ifndef SERVER
1995 {
1997
2000 }
2001 #endif
2002 }
2003
2005 {
2006 #ifndef SERVER
2008 {
2012 }
2013 #endif
2014 }
2015
2017 {
2018 return false;
2019 }
2020
2022 {
2024 }
2025
2026 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2027 {
2029
2030 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2032 if ( hasRootAsPlayer )
2034
2035
2036
2037
2038
2039
2040
2042 {
2043
2045 {
2047 {
2051 break;
2052
2056 break;
2057
2061 break;
2062
2066 default:
2069 return;
2070 }
2071
2072
2073 }
2074
2076
2078 {
2080 {
2081
2083 {
2085 }
2087 {
2090 {
2092 }
2093 else
2094 {
2096 {
2098 }
2099 else
2100 {
2102 }
2103 }
2104 }
2105 }
2106 }
2107
2108 }
2110 {
2111
2113 {
2115 {
2119 break;
2120
2124 break;
2125
2129 break;
2130
2134 break;
2135
2138 default:
2141 return;
2142 }
2143 }
2144
2146
2148 {
2150 {
2151
2153 {
2155 }
2156 }
2157 }
2158 }
2160 {
2161
2163 {
2165 {
2169 break;
2170
2173 default:
2176 return;
2177 }
2178 }
2179
2181
2183 {
2185 {
2186
2188 {
2190 }
2191 }
2192 }
2193 }
2194 else
2195 {
2196
2198
2200 {
2203
2204 }
2205 else
2206 {
2208 {
2211 }
2212 }
2213 }
2214 }
2215
2217 {
2218 if (
GetGame().IsDedicatedServer())
2219 return;
2220
2222 {
2224 GetInventory().GetCurrentInventoryLocation(invLoc);
2226 {
2228 if (ptcMgr)
2229 {
2234 }
2235 }
2236 }
2238 {
2240 {
2243 return;
2244 }
2245
2247 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2249 {
2252 }
2253 }
2254 }
2255
2256 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2257 {
2259 {
2264 }
2265
2266 super.GetDebugActions(outputList);
2267 }
2268
2270 {
2271 super.OnAction(action_id, player, ctx);
2272
2274 {
2275 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2276 {
2278 if (food_stage_prev <= 0)
2279 {
2281 }
2283 return true;
2284 }
2285 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2286 {
2289 {
2291 }
2293 return true;
2294 }
2295
2296 }
2297
2298 #ifdef DIAG_DEVELOPER
2299 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2300 {
2301 PrintNutritionsData();
2302 return true;
2303 }
2304 #endif
2305
2306 return false;
2307 }
2308
2310 {
2311 string debug_output;
2312
2313 debug_output = super.GetDebugText();
2314
2317
2318 return debug_output;
2319 }
2320
2321
2322
2323
2324
2326 {
2327 float ret = super.GetBaitEffectivity();
2328
2330 {
2331 ret *= 0.5;
2332 }
2333
2334 return ret;
2335 }
2336
2338 {
2340 }
2341
2343 {
2345 }
2346
2348 {
2350 }
2351
2352 #ifdef DIAG_DEVELOPER
2353 private void PrintNutritionsData()
2354 {
2355 string nutritionsData = "";
2356
2359
2361 if (profile)
2362 {
2363 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2365 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2369 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2371
2374
2375 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2377 }
2378
2379 nutritionsData += "-----\n";
2380
2382 }
2383 #endif
2384
2386
2389 {
2391 }
2392}
2393
2395{
2397};
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.