1248{
1250
1258
1268
1270
1272 {
1274 {
1276
1278 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1279
1283 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1284 }
1285 }
1286
1288 {
1290
1292 }
1293
1295 {
1296 super.EEDelete(parent);
1297
1299
1302 }
1303
1305 {
1306 super.EEItemLocationChanged(oldLoc, newLoc);
1307
1310 {
1311 switch (oldLoc.GetParent().GetType())
1312 {
1313 case "FryingPan":
1314 case "Pot":
1315 case "Cauldron":
1316 case "SharpWoodenStick":
1318 break;
1319 }
1320
1323 {
1325 }
1326 }
1327
1328 if (oldLoc.IsValid())
1330
1333 }
1334
1336 {
1339 }
1340
1342 {
1345
1346 return true;
1347 }
1348
1350 {
1352 {
1354 }
1355 }
1356
1359 {
1360 int foodStageType;
1361
1363 if (foodStage)
1364 foodStageType = foodStage.GetFoodStageType();
1365
1370
1371 return agentsIn;
1372 }
1373
1374
1376 {
1377 return false;
1378 }
1379
1381 {
1382 return false;
1383 }
1384
1386 {
1388 {
1390 {
1393
1396
1397 default:
1398 return super.GetTemperatureFreezeTime();
1399 }
1400 }
1401
1402 return super.GetTemperatureFreezeTime();
1403 }
1404
1406 {
1408 {
1410 {
1413
1416
1417 default:
1418 return super.GetTemperatureThawTime();
1419 }
1420 }
1421
1422 return super.GetTemperatureThawTime();
1423 }
1424
1426 {
1428 }
1429
1430
1431
1432
1434 {
1435 SetSynchDirty();
1436 }
1437
1439 {
1440 super.OnVariablesSynchronized();
1441
1442
1443
1444
1446 {
1448 }
1449 else
1450 {
1452 }
1453
1456 }
1457
1458
1459
1460
1462 {
1465
1467 }
1468
1470 {
1471 string soundName = "";
1472
1475
1477 {
1479 }
1480 else
1481 {
1483 {
1485 {
1490 else
1491 soundName = "";
1492 break;
1493 }
1494
1496 {
1501 else
1502 soundName = "";
1503 break;
1504 }
1505
1507 {
1512 else
1513 soundName = "";
1514 break;
1515 }
1516
1517 default:
1518 soundName = "";
1519 break;
1520 }
1521
1523 {
1524 if (soundName == "")
1525 {
1527 }
1528 else
1529 {
1531 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1532 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1534 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1535 {
1537 }
1538 }
1539 }
1540 }
1541
1543 }
1544
1546 {
1549 }
1550
1551
1552
1553
1555 {
1556 super.OnStoreSave(ctx);
1557
1559 {
1561 }
1562
1563
1566 }
1567
1569 {
1570 if (!super.OnStoreLoad(ctx, version))
1571 return false;
1572
1574 {
1576 return false;
1577 }
1578
1579 if (version >= 115)
1580 {
1582 {
1584 return false;
1585 }
1587 {
1589 return false;
1590 }
1591 }
1592
1595
1596 return true;
1597 }
1598
1600 {
1601 super.AfterStoreLoad();
1602
1604 }
1605
1606
1608 {
1610 }
1611
1612
1614 {
1615 return false;
1616 }
1617
1619 {
1620 return false;
1621 }
1622
1624 {
1625 return false;
1626 }
1627
1629 {
1630 return false;
1631 }
1632
1633
1634
1635
1636
1638 {
1641 {
1642 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1643 }
1644 else if (classname != "" && food_stage)
1645 {
1646 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1647 }
1648 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1650
1651 }
1652
1654 {
1657 {
1659 }
1660 else if (classname != "" && food_stage)
1661 {
1662 return FoodStage.GetEnergy(null, food_stage, classname);
1663 }
1664 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1666 }
1667
1669 {
1672 {
1674 }
1675 else if (classname != "" && food_stage)
1676 {
1677 return FoodStage.GetWater(null, food_stage, classname);
1678 }
1679 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1681 }
1682
1684 {
1687 {
1688 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1689 }
1690 else if (classname != "" && food_stage)
1691 {
1692 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1693 }
1694 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1696
1697 }
1698
1700 {
1703 {
1704 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1705 }
1706 else if (classname != "" && food_stage)
1707 {
1708 return FoodStage.GetToxicity(null, food_stage, classname);
1709 }
1710 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1712 }
1713
1715 {
1718 {
1720 }
1721 else if (classname != "" && food_stage)
1722 {
1723 return FoodStage.GetAgents(null, food_stage, classname);
1724 }
1725 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1727 }
1728
1730 {
1733 {
1734 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1735 }
1736 else if (classname != "" && food_stage)
1737 {
1738 return FoodStage.GetDigestibility(null, food_stage, classname);
1739 }
1740 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1742 }
1743
1745 {
1748 {
1749 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1750 }
1751 else if (className != "" && foodStage)
1752 {
1753 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1754 }
1755 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1757 }
1758
1760 {
1770
1771 return profile;
1772 }
1773
1774
1775
1776
1778 {
1780 }
1781
1782
1784 {
1786 {
1788 }
1789
1790 return false;
1791 }
1792
1794 {
1796 {
1798 }
1799
1800 return false;
1801 }
1802
1804 {
1806 {
1808 }
1809
1810 return false;
1811 }
1812
1814 {
1816 {
1818 }
1819
1820 return false;
1821 }
1822
1824 {
1826 {
1828 }
1829
1830 return false;
1831 }
1832
1834 {
1836 {
1838 }
1839
1840 return false;
1841 }
1842
1843
1845 {
1847 }
1848
1850 {
1851 return GetFoodStage().GetNextFoodStageType( cooking_method );
1852 }
1853
1855 {
1856 return GetFoodStage().GetFoodStageName( food_stage_type );
1857 }
1858
1860 {
1861 return GetFoodStage().CanChangeToNewStage( cooking_method );
1862 }
1863
1864
1866 {
1867 if ( !source.GetFoodStage())
1868 return;
1873 }
1874
1877 {
1880 }
1881
1884 {
1885 switch (stageNew)
1886 {
1891 break;
1892
1895 break;
1896 }
1897 }
1898
1899
1900
1901
1902
1904 {
1906 }
1907
1909 {
1911
1912
1914 }
1915
1917 {
1919 {
1922 }
1923 }
1924
1925
1927 {
1929 if (player)
1930 {
1932 player.ServerReplaceItemInHandsWithNew(lambda);
1933 }
1934 else
1935 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1936 }
1937
1939 {
1941 }
1942
1944 {
1945 super.SetActions();
1946
1949 }
1950
1952 {
1953 #ifndef SERVER
1955 {
1957
1960 }
1961 #endif
1962 }
1963
1965 {
1966 #ifndef SERVER
1968 {
1972 }
1973 #endif
1974 }
1975
1977 {
1978 return false;
1979 }
1980
1982 {
1984 }
1985
1986 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1987 {
1989
1990 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1992 if ( hasRootAsPlayer )
1994
1995
1996
1997
1998
1999
2000
2002 {
2003
2005 {
2007 {
2011 break;
2012
2016 break;
2017
2021 break;
2022
2026 default:
2029 return;
2030 }
2031
2032
2033 }
2034
2036
2038 {
2040 {
2041
2043 {
2045 }
2047 {
2050 {
2052 }
2053 else
2054 {
2056 {
2058 }
2059 else
2060 {
2062 }
2063 }
2064 }
2065 }
2066 }
2067
2068 }
2070 {
2071
2073 {
2075 {
2079 break;
2080
2084 break;
2085
2089 break;
2090
2094 break;
2095
2098 default:
2101 return;
2102 }
2103 }
2104
2106
2108 {
2110 {
2111
2113 {
2115 }
2116 }
2117 }
2118 }
2120 {
2121
2123 {
2125 {
2129 break;
2130
2133 default:
2136 return;
2137 }
2138 }
2139
2141
2143 {
2145 {
2146
2148 {
2150 }
2151 }
2152 }
2153 }
2154 else
2155 {
2156
2158
2160 {
2163
2164 }
2165 else
2166 {
2168 {
2171 }
2172 }
2173 }
2174 }
2175
2177 {
2178 if (
GetGame().IsDedicatedServer())
2179 return;
2180
2182 {
2184 GetInventory().GetCurrentInventoryLocation(invLoc);
2186 {
2188 if (ptcMgr)
2189 {
2194 }
2195 }
2196 }
2198 {
2200 {
2203 return;
2204 }
2205
2207 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2209 {
2212 }
2213 }
2214 }
2215
2216 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2217 {
2219 {
2224 }
2225
2226 super.GetDebugActions(outputList);
2227 }
2228
2230 {
2231 super.OnAction(action_id, player, ctx);
2232
2234 {
2235 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2236 {
2238 if (food_stage_prev <= 0)
2239 {
2241 }
2243 return true;
2244 }
2245 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2246 {
2249 {
2251 }
2253 return true;
2254 }
2255
2256 }
2257
2258 #ifdef DIAG_DEVELOPER
2259 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2260 {
2261 PrintNutritionsData();
2262 return true;
2263 }
2264 #endif
2265
2266 return false;
2267 }
2268
2270 {
2271 string debug_output;
2272
2273 debug_output = super.GetDebugText();
2274
2277
2278 return debug_output;
2279 }
2280
2281
2282
2283
2284
2286 {
2287 float ret = super.GetBaitEffectivity();
2288
2290 {
2291 ret *= 0.5;
2292 }
2293
2294 return ret;
2295 }
2296
2298 {
2300 }
2301
2303 {
2305 }
2306
2308 {
2310 }
2311
2312 #ifdef DIAG_DEVELOPER
2313 private void PrintNutritionsData()
2314 {
2315 string nutritionsData = "";
2316
2319
2321 if (profile)
2322 {
2323 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2325 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2329 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2331
2334
2335 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2337 }
2338
2339 nutritionsData += "-----\n";
2340
2342 }
2343 #endif
2344
2346
2349 {
2351 }
2352}
2353
2355{
2357};
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.