1150{
1152
1160
1170
1172
1174 {
1176 {
1178
1180 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1181
1185 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1186 }
1187 }
1188
1190 {
1192
1194 }
1195
1197 {
1198 super.EEDelete(parent);
1199
1201
1204 }
1205
1207 {
1208 super.EEItemLocationChanged(oldLoc, newLoc);
1209
1212 {
1213 switch (oldLoc.GetParent().GetType())
1214 {
1215 case "FryingPan":
1216 case "Pot":
1217 case "Cauldron":
1218 case "SharpWoodenStick":
1220 break;
1221 }
1222
1225 {
1227 }
1228 }
1229
1230 if (oldLoc.IsValid())
1232
1235 }
1236
1238 {
1241 }
1242
1244 {
1247
1248 return true;
1249 }
1250
1252 {
1254 {
1256 }
1257 }
1258
1261 {
1262 int foodStageType;
1263
1265 if (foodStage)
1266 foodStageType = foodStage.GetFoodStageType();
1267
1272
1273 return agentsIn;
1274 }
1275
1276
1278 {
1279 return false;
1280 }
1281
1283 {
1284 return false;
1285 }
1286
1288 {
1290 {
1292 {
1295
1298
1299 default:
1300 return super.GetTemperatureFreezeTime();
1301 }
1302 }
1303
1304 return super.GetTemperatureFreezeTime();
1305 }
1306
1308 {
1310 {
1312 {
1315
1318
1319 default:
1320 return super.GetTemperatureThawTime();
1321 }
1322 }
1323
1324 return super.GetTemperatureThawTime();
1325 }
1326
1328 {
1330 }
1331
1332
1333
1334
1336 {
1337 SetSynchDirty();
1338 }
1339
1341 {
1342 super.OnVariablesSynchronized();
1343
1344
1345
1346
1348 {
1350 }
1351 else
1352 {
1354 }
1355
1358 }
1359
1360
1361
1362
1364 {
1367
1369 }
1370
1372 {
1373 string soundName = "";
1374
1377
1379 {
1381 }
1382 else
1383 {
1385 {
1387 {
1392 else
1393 soundName = "";
1394 break;
1395 }
1396
1398 {
1403 else
1404 soundName = "";
1405 break;
1406 }
1407
1409 {
1414 else
1415 soundName = "";
1416 break;
1417 }
1418
1419 default:
1420 soundName = "";
1421 break;
1422 }
1423
1425 {
1426 if (soundName == "")
1427 {
1429 }
1430 else
1431 {
1433 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1434 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1436 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1437 {
1439 }
1440 }
1441 }
1442 }
1443
1445 }
1446
1448 {
1451 }
1452
1453
1454
1455
1457 {
1458 super.OnStoreSave(ctx);
1459
1461 {
1463 }
1464
1465
1468 }
1469
1471 {
1472 if (!super.OnStoreLoad(ctx, version))
1473 return false;
1474
1476 {
1478 return false;
1479 }
1480
1481 if (version >= 115)
1482 {
1484 {
1486 return false;
1487 }
1489 {
1491 return false;
1492 }
1493 }
1494
1497
1498 return true;
1499 }
1500
1502 {
1503 super.AfterStoreLoad();
1504
1506 }
1507
1508
1510 {
1512 }
1513
1514
1516 {
1517 return false;
1518 }
1519
1521 {
1522 return false;
1523 }
1524
1526 {
1527 return false;
1528 }
1529
1531 {
1532 return false;
1533 }
1534
1535
1536
1537
1538
1540 {
1543 {
1544 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1545 }
1546 else if (classname != "" && food_stage)
1547 {
1548 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1549 }
1550 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1552
1553 }
1554
1556 {
1559 {
1561 }
1562 else if (classname != "" && food_stage)
1563 {
1564 return FoodStage.GetEnergy(null, food_stage, classname);
1565 }
1566 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1568 }
1569
1571 {
1574 {
1576 }
1577 else if (classname != "" && food_stage)
1578 {
1579 return FoodStage.GetWater(null, food_stage, classname);
1580 }
1581 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1583 }
1584
1586 {
1589 {
1590 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1591 }
1592 else if (classname != "" && food_stage)
1593 {
1594 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1595 }
1596 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1598
1599 }
1600
1602 {
1605 {
1606 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1607 }
1608 else if (classname != "" && food_stage)
1609 {
1610 return FoodStage.GetToxicity(null, food_stage, classname);
1611 }
1612 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1614 }
1615
1617 {
1620 {
1622 }
1623 else if (classname != "" && food_stage)
1624 {
1625 return FoodStage.GetAgents(null, food_stage, classname);
1626 }
1627 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1629 }
1630
1632 {
1635 {
1636 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1637 }
1638 else if (classname != "" && food_stage)
1639 {
1640 return FoodStage.GetDigestibility(null, food_stage, classname);
1641 }
1642 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1644 }
1645
1647 {
1650 {
1651 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1652 }
1653 else if (className != "" && foodStage)
1654 {
1655 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1656 }
1657 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1659 }
1660
1662 {
1672
1673 return profile;
1674 }
1675
1676
1677
1678
1680 {
1682 }
1683
1684
1686 {
1688 {
1690 }
1691
1692 return false;
1693 }
1694
1696 {
1698 {
1700 }
1701
1702 return false;
1703 }
1704
1706 {
1708 {
1710 }
1711
1712 return false;
1713 }
1714
1716 {
1718 {
1720 }
1721
1722 return false;
1723 }
1724
1726 {
1728 {
1730 }
1731
1732 return false;
1733 }
1734
1736 {
1738 {
1740 }
1741
1742 return false;
1743 }
1744
1745
1747 {
1749 }
1750
1752 {
1753 return GetFoodStage().GetNextFoodStageType( cooking_method );
1754 }
1755
1757 {
1758 return GetFoodStage().GetFoodStageName( food_stage_type );
1759 }
1760
1762 {
1763 return GetFoodStage().CanChangeToNewStage( cooking_method );
1764 }
1765
1766
1768 {
1769 if ( !source.GetFoodStage())
1770 return;
1775 }
1776
1779 {
1782 }
1783
1786 {
1787 switch (stageNew)
1788 {
1793 break;
1794
1797 break;
1798 }
1799 }
1800
1801
1802
1803
1804
1806 {
1808 }
1809
1811 {
1813
1814
1816 }
1817
1819 {
1821 {
1824 }
1825 }
1826
1827
1829 {
1831 if (player)
1832 {
1834 player.ServerReplaceItemInHandsWithNew(lambda);
1835 }
1836 else
1837 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1838 }
1839
1841 {
1843 }
1844
1846 {
1847 super.SetActions();
1848
1851 }
1852
1854 {
1855 #ifndef SERVER
1857 {
1859
1862 }
1863 #endif
1864 }
1865
1867 {
1868 #ifndef SERVER
1870 {
1874 }
1875 #endif
1876 }
1877
1879 {
1880 return false;
1881 }
1882
1884 {
1886 }
1887
1888 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1889 {
1891
1892 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1894 if ( hasRootAsPlayer )
1896
1897
1898
1899
1900
1901
1902
1904 {
1905
1907 {
1909 {
1913 break;
1914
1918 break;
1919
1923 break;
1924
1928 default:
1931 return;
1932 }
1933
1934
1935 }
1936
1938
1940 {
1942 {
1943
1945 {
1947 }
1949 {
1952 {
1954 }
1955 else
1956 {
1958 {
1960 }
1961 else
1962 {
1964 }
1965 }
1966 }
1967 }
1968 }
1969
1970 }
1972 {
1973
1975 {
1977 {
1981 break;
1982
1986 break;
1987
1991 break;
1992
1996 break;
1997
2000 default:
2003 return;
2004 }
2005 }
2006
2008
2010 {
2012 {
2013
2015 {
2017 }
2018 }
2019 }
2020 }
2022 {
2023
2025 {
2027 {
2031 break;
2032
2035 default:
2038 return;
2039 }
2040 }
2041
2043
2045 {
2047 {
2048
2050 {
2052 }
2053 }
2054 }
2055 }
2056 else
2057 {
2058
2060
2062 {
2065
2066 }
2067 else
2068 {
2070 {
2073 }
2074 }
2075 }
2076 }
2077
2079 {
2080 if (
GetGame().IsDedicatedServer())
2081 return;
2082
2084 {
2086 GetInventory().GetCurrentInventoryLocation(invLoc);
2088 {
2090 if (ptcMgr)
2091 {
2096 }
2097 }
2098 }
2100 {
2102 {
2105 return;
2106 }
2107
2109 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2111 {
2114 }
2115 }
2116 }
2117
2118 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2119 {
2121 {
2126 }
2127
2128 super.GetDebugActions(outputList);
2129 }
2130
2132 {
2133 super.OnAction(action_id, player, ctx);
2134
2136 {
2137 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2138 {
2140 if (food_stage_prev <= 0)
2141 {
2143 }
2145 return true;
2146 }
2147 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2148 {
2151 {
2153 }
2155 return true;
2156 }
2157
2158 }
2159
2160 #ifdef DIAG_DEVELOPER
2161 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2162 {
2163 PrintNutritionsData();
2164 return true;
2165 }
2166 #endif
2167
2168 return false;
2169 }
2170
2172 {
2173 string debug_output;
2174
2175 debug_output = super.GetDebugText();
2176
2179
2180 return debug_output;
2181 }
2182
2183
2184
2185
2186
2188 {
2189 float ret = super.GetBaitEffectivity();
2190
2192 {
2193 ret *= 0.5;
2194 }
2195
2196 return ret;
2197 }
2198
2200 {
2202 }
2203
2205 {
2207 }
2208
2210 {
2212 }
2213
2214 #ifdef DIAG_DEVELOPER
2215 private void PrintNutritionsData()
2216 {
2217 string nutritionsData = "";
2218
2221
2223 if (profile)
2224 {
2225 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2227 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2231 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2233
2236
2237 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2239 }
2240
2241 nutritionsData += "-----\n";
2242
2244 }
2245 #endif
2246
2248
2251 {
2253 }
2254}
2255
2257{
2259};
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.