1243{
1245
1253
1263
1265
1267 {
1269 {
1271
1273 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1274
1278 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1279 }
1280 }
1281
1283 {
1285
1287 }
1288
1290 {
1291 super.EEDelete(parent);
1292
1294
1297 }
1298
1300 {
1301 super.EEItemLocationChanged(oldLoc, newLoc);
1302
1305 {
1306 switch (oldLoc.GetParent().GetType())
1307 {
1308 case "FryingPan":
1309 case "Pot":
1310 case "Cauldron":
1311 case "SharpWoodenStick":
1313 break;
1314 }
1315
1318 {
1320 }
1321 }
1322
1323 if (oldLoc.IsValid())
1325
1328 }
1329
1331 {
1334 }
1335
1337 {
1340
1341 return true;
1342 }
1343
1345 {
1347 {
1349 }
1350 }
1351
1354 {
1355 int foodStageType;
1356
1358 if (foodStage)
1359 foodStageType = foodStage.GetFoodStageType();
1360
1365
1366 return agentsIn;
1367 }
1368
1369
1371 {
1372 return false;
1373 }
1374
1376 {
1377 return false;
1378 }
1379
1381 {
1383 {
1385 {
1388
1391
1392 default:
1393 return super.GetTemperatureFreezeTime();
1394 }
1395 }
1396
1397 return super.GetTemperatureFreezeTime();
1398 }
1399
1401 {
1403 {
1405 {
1408
1411
1412 default:
1413 return super.GetTemperatureThawTime();
1414 }
1415 }
1416
1417 return super.GetTemperatureThawTime();
1418 }
1419
1421 {
1423 }
1424
1425
1426
1427
1429 {
1430 SetSynchDirty();
1431 }
1432
1434 {
1435 super.OnVariablesSynchronized();
1436
1437
1438
1439
1441 {
1443 }
1444 else
1445 {
1447 }
1448
1451 }
1452
1453
1454
1455
1457 {
1460
1462 }
1463
1465 {
1466 string soundName = "";
1467
1470
1472 {
1474 }
1475 else
1476 {
1478 {
1480 {
1485 else
1486 soundName = "";
1487 break;
1488 }
1489
1491 {
1496 else
1497 soundName = "";
1498 break;
1499 }
1500
1502 {
1507 else
1508 soundName = "";
1509 break;
1510 }
1511
1512 default:
1513 soundName = "";
1514 break;
1515 }
1516
1518 {
1519 if (soundName == "")
1520 {
1522 }
1523 else
1524 {
1526 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1527 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1529 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1530 {
1532 }
1533 }
1534 }
1535 }
1536
1538 }
1539
1541 {
1544 }
1545
1546
1547
1548
1550 {
1551 super.OnStoreSave(ctx);
1552
1554 {
1556 }
1557
1558
1561 }
1562
1564 {
1565 if (!super.OnStoreLoad(ctx, version))
1566 return false;
1567
1569 {
1571 return false;
1572 }
1573
1574 if (version >= 115)
1575 {
1577 {
1579 return false;
1580 }
1582 {
1584 return false;
1585 }
1586 }
1587
1590
1591 return true;
1592 }
1593
1595 {
1596 super.AfterStoreLoad();
1597
1599 }
1600
1601
1603 {
1605 }
1606
1607
1609 {
1610 return false;
1611 }
1612
1614 {
1615 return false;
1616 }
1617
1619 {
1620 return false;
1621 }
1622
1624 {
1625 return false;
1626 }
1627
1628
1629
1630
1631
1633 {
1636 {
1637 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1638 }
1639 else if (classname != "" && food_stage)
1640 {
1641 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1642 }
1643 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1645
1646 }
1647
1649 {
1652 {
1654 }
1655 else if (classname != "" && food_stage)
1656 {
1657 return FoodStage.GetEnergy(null, food_stage, classname);
1658 }
1659 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1661 }
1662
1664 {
1667 {
1669 }
1670 else if (classname != "" && food_stage)
1671 {
1672 return FoodStage.GetWater(null, food_stage, classname);
1673 }
1674 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1676 }
1677
1679 {
1682 {
1683 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1684 }
1685 else if (classname != "" && food_stage)
1686 {
1687 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1688 }
1689 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1691
1692 }
1693
1695 {
1698 {
1699 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1700 }
1701 else if (classname != "" && food_stage)
1702 {
1703 return FoodStage.GetToxicity(null, food_stage, classname);
1704 }
1705 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1707 }
1708
1710 {
1713 {
1715 }
1716 else if (classname != "" && food_stage)
1717 {
1718 return FoodStage.GetAgents(null, food_stage, classname);
1719 }
1720 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1722 }
1723
1725 {
1728 {
1729 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1730 }
1731 else if (classname != "" && food_stage)
1732 {
1733 return FoodStage.GetDigestibility(null, food_stage, classname);
1734 }
1735 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1737 }
1738
1740 {
1743 {
1744 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1745 }
1746 else if (className != "" && foodStage)
1747 {
1748 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1749 }
1750 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1752 }
1753
1755 {
1765
1766 return profile;
1767 }
1768
1769
1770
1771
1773 {
1775 }
1776
1777
1779 {
1781 {
1783 }
1784
1785 return false;
1786 }
1787
1789 {
1791 {
1793 }
1794
1795 return false;
1796 }
1797
1799 {
1801 {
1803 }
1804
1805 return false;
1806 }
1807
1809 {
1811 {
1813 }
1814
1815 return false;
1816 }
1817
1819 {
1821 {
1823 }
1824
1825 return false;
1826 }
1827
1829 {
1831 {
1833 }
1834
1835 return false;
1836 }
1837
1838
1840 {
1842 }
1843
1845 {
1846 return GetFoodStage().GetNextFoodStageType( cooking_method );
1847 }
1848
1850 {
1851 return GetFoodStage().GetFoodStageName( food_stage_type );
1852 }
1853
1855 {
1856 return GetFoodStage().CanChangeToNewStage( cooking_method );
1857 }
1858
1859
1861 {
1862 if ( !source.GetFoodStage())
1863 return;
1868 }
1869
1872 {
1875 }
1876
1879 {
1880 switch (stageNew)
1881 {
1886 break;
1887
1890 break;
1891 }
1892 }
1893
1894
1895
1896
1897
1899 {
1901 }
1902
1904 {
1906
1907
1909 }
1910
1912 {
1914 {
1917 }
1918 }
1919
1920
1922 {
1924 if (player)
1925 {
1927 player.ServerReplaceItemInHandsWithNew(lambda);
1928 }
1929 else
1930 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1931 }
1932
1934 {
1936 }
1937
1939 {
1940 super.SetActions();
1941
1944 }
1945
1947 {
1948 #ifndef SERVER
1950 {
1952
1955 }
1956 #endif
1957 }
1958
1960 {
1961 #ifndef SERVER
1963 {
1967 }
1968 #endif
1969 }
1970
1972 {
1973 return false;
1974 }
1975
1977 {
1979 }
1980
1981 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1982 {
1984
1985 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1987 if ( hasRootAsPlayer )
1989
1990
1991
1992
1993
1994
1995
1997 {
1998
2000 {
2002 {
2006 break;
2007
2011 break;
2012
2016 break;
2017
2021 default:
2024 return;
2025 }
2026
2027
2028 }
2029
2031
2033 {
2035 {
2036
2038 {
2040 }
2042 {
2045 {
2047 }
2048 else
2049 {
2051 {
2053 }
2054 else
2055 {
2057 }
2058 }
2059 }
2060 }
2061 }
2062
2063 }
2065 {
2066
2068 {
2070 {
2074 break;
2075
2079 break;
2080
2084 break;
2085
2089 break;
2090
2093 default:
2096 return;
2097 }
2098 }
2099
2101
2103 {
2105 {
2106
2108 {
2110 }
2111 }
2112 }
2113 }
2115 {
2116
2118 {
2120 {
2124 break;
2125
2128 default:
2131 return;
2132 }
2133 }
2134
2136
2138 {
2140 {
2141
2143 {
2145 }
2146 }
2147 }
2148 }
2149 else
2150 {
2151
2153
2155 {
2158
2159 }
2160 else
2161 {
2163 {
2166 }
2167 }
2168 }
2169 }
2170
2172 {
2173 if (
GetGame().IsDedicatedServer())
2174 return;
2175
2177 {
2179 GetInventory().GetCurrentInventoryLocation(invLoc);
2181 {
2183 if (ptcMgr)
2184 {
2189 }
2190 }
2191 }
2193 {
2195 {
2198 return;
2199 }
2200
2202 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2204 {
2207 }
2208 }
2209 }
2210
2211 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2212 {
2214 {
2219 }
2220
2221 super.GetDebugActions(outputList);
2222 }
2223
2225 {
2226 super.OnAction(action_id, player, ctx);
2227
2229 {
2230 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2231 {
2233 if (food_stage_prev <= 0)
2234 {
2236 }
2238 return true;
2239 }
2240 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2241 {
2244 {
2246 }
2248 return true;
2249 }
2250
2251 }
2252
2253 #ifdef DIAG_DEVELOPER
2254 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2255 {
2256 PrintNutritionsData();
2257 return true;
2258 }
2259 #endif
2260
2261 return false;
2262 }
2263
2265 {
2266 string debug_output;
2267
2268 debug_output = super.GetDebugText();
2269
2272
2273 return debug_output;
2274 }
2275
2276
2277
2278
2279
2281 {
2282 float ret = super.GetBaitEffectivity();
2283
2285 {
2286 ret *= 0.5;
2287 }
2288
2289 return ret;
2290 }
2291
2293 {
2295 }
2296
2298 {
2300 }
2301
2303 {
2305 }
2306
2307 #ifdef DIAG_DEVELOPER
2308 private void PrintNutritionsData()
2309 {
2310 string nutritionsData = "";
2311
2314
2316 if (profile)
2317 {
2318 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2320 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2324 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2326
2329
2330 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2332 }
2333
2334 nutritionsData += "-----\n";
2335
2337 }
2338 #endif
2339
2341
2344 {
2346 }
2347}
2348
2350{
2352};
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.