1242{
1244
1252
1262
1264
1266 {
1268 {
1270
1272 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1273
1277 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1278 }
1279 }
1280
1282 {
1284
1286 }
1287
1289 {
1290 super.EEDelete(parent);
1291
1293
1296 }
1297
1299 {
1300 super.EEItemLocationChanged(oldLoc, newLoc);
1301
1304 {
1305 switch (oldLoc.GetParent().GetType())
1306 {
1307 case "FryingPan":
1308 case "Pot":
1309 case "Cauldron":
1310 case "SharpWoodenStick":
1312 break;
1313 }
1314
1317 {
1319 }
1320 }
1321
1322 if (oldLoc.IsValid())
1324
1327 }
1328
1330 {
1333 }
1334
1336 {
1339
1340 return true;
1341 }
1342
1344 {
1346 {
1348 }
1349 }
1350
1353 {
1354 int foodStageType;
1355
1357 if (foodStage)
1358 foodStageType = foodStage.GetFoodStageType();
1359
1364
1365 return agentsIn;
1366 }
1367
1368
1370 {
1371 return false;
1372 }
1373
1375 {
1376 return false;
1377 }
1378
1380 {
1382 {
1384 {
1387
1390
1391 default:
1392 return super.GetTemperatureFreezeTime();
1393 }
1394 }
1395
1396 return super.GetTemperatureFreezeTime();
1397 }
1398
1400 {
1402 {
1404 {
1407
1410
1411 default:
1412 return super.GetTemperatureThawTime();
1413 }
1414 }
1415
1416 return super.GetTemperatureThawTime();
1417 }
1418
1420 {
1422 }
1423
1424
1425
1426
1428 {
1429 SetSynchDirty();
1430 }
1431
1433 {
1434 super.OnVariablesSynchronized();
1435
1436
1437
1438
1440 {
1442 }
1443 else
1444 {
1446 }
1447
1450 }
1451
1452
1453
1454
1456 {
1459
1461 }
1462
1464 {
1465 string soundName = "";
1466
1469
1471 {
1473 }
1474 else
1475 {
1477 {
1479 {
1484 else
1485 soundName = "";
1486 break;
1487 }
1488
1490 {
1495 else
1496 soundName = "";
1497 break;
1498 }
1499
1501 {
1506 else
1507 soundName = "";
1508 break;
1509 }
1510
1511 default:
1512 soundName = "";
1513 break;
1514 }
1515
1517 {
1518 if (soundName == "")
1519 {
1521 }
1522 else
1523 {
1525 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1526 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1528 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1529 {
1531 }
1532 }
1533 }
1534 }
1535
1537 }
1538
1540 {
1543 }
1544
1545
1546
1547
1549 {
1550 super.OnStoreSave(ctx);
1551
1553 {
1555 }
1556
1557
1560 }
1561
1563 {
1564 if (!super.OnStoreLoad(ctx, version))
1565 return false;
1566
1568 {
1570 return false;
1571 }
1572
1573 if (version >= 115)
1574 {
1576 {
1578 return false;
1579 }
1581 {
1583 return false;
1584 }
1585 }
1586
1589
1590 return true;
1591 }
1592
1594 {
1595 super.AfterStoreLoad();
1596
1598 }
1599
1600
1602 {
1604 }
1605
1606
1608 {
1609 return false;
1610 }
1611
1613 {
1614 return false;
1615 }
1616
1618 {
1619 return false;
1620 }
1621
1623 {
1624 return false;
1625 }
1626
1627
1628
1629
1630
1632 {
1635 {
1636 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1637 }
1638 else if (classname != "" && food_stage)
1639 {
1640 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1641 }
1642 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1644
1645 }
1646
1648 {
1651 {
1653 }
1654 else if (classname != "" && food_stage)
1655 {
1656 return FoodStage.GetEnergy(null, food_stage, classname);
1657 }
1658 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1660 }
1661
1663 {
1666 {
1668 }
1669 else if (classname != "" && food_stage)
1670 {
1671 return FoodStage.GetWater(null, food_stage, classname);
1672 }
1673 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1675 }
1676
1678 {
1681 {
1682 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1683 }
1684 else if (classname != "" && food_stage)
1685 {
1686 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1687 }
1688 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1690
1691 }
1692
1694 {
1697 {
1698 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1699 }
1700 else if (classname != "" && food_stage)
1701 {
1702 return FoodStage.GetToxicity(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.GetAgents(null, food_stage, classname);
1718 }
1719 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1721 }
1722
1724 {
1727 {
1728 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1729 }
1730 else if (classname != "" && food_stage)
1731 {
1732 return FoodStage.GetDigestibility(null, food_stage, classname);
1733 }
1734 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1736 }
1737
1739 {
1742 {
1743 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1744 }
1745 else if (className != "" && foodStage)
1746 {
1747 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1748 }
1749 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1751 }
1752
1754 {
1764
1765 return profile;
1766 }
1767
1768
1769
1770
1772 {
1774 }
1775
1776
1778 {
1780 {
1782 }
1783
1784 return false;
1785 }
1786
1788 {
1790 {
1792 }
1793
1794 return false;
1795 }
1796
1798 {
1800 {
1802 }
1803
1804 return false;
1805 }
1806
1808 {
1810 {
1812 }
1813
1814 return false;
1815 }
1816
1818 {
1820 {
1822 }
1823
1824 return false;
1825 }
1826
1828 {
1830 {
1832 }
1833
1834 return false;
1835 }
1836
1837
1839 {
1841 }
1842
1844 {
1845 return GetFoodStage().GetNextFoodStageType( cooking_method );
1846 }
1847
1849 {
1850 return GetFoodStage().GetFoodStageName( food_stage_type );
1851 }
1852
1854 {
1855 return GetFoodStage().CanChangeToNewStage( cooking_method );
1856 }
1857
1858
1860 {
1861 if ( !source.GetFoodStage())
1862 return;
1867 }
1868
1871 {
1874 }
1875
1878 {
1879 switch (stageNew)
1880 {
1885 break;
1886
1889 break;
1890 }
1891 }
1892
1893
1894
1895
1896
1898 {
1900 }
1901
1903 {
1905
1906
1908 }
1909
1911 {
1913 {
1916 }
1917 }
1918
1919
1921 {
1923 if (player)
1924 {
1926 player.ServerReplaceItemInHandsWithNew(lambda);
1927 }
1928 else
1929 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
1930 }
1931
1933 {
1935 }
1936
1938 {
1939 super.SetActions();
1940
1943 }
1944
1946 {
1947 #ifndef SERVER
1949 {
1951
1954 }
1955 #endif
1956 }
1957
1959 {
1960 #ifndef SERVER
1962 {
1966 }
1967 #endif
1968 }
1969
1971 {
1972 return false;
1973 }
1974
1976 {
1978 }
1979
1980 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
1981 {
1983
1984 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
1986 if ( hasRootAsPlayer )
1988
1989
1990
1991
1992
1993
1994
1996 {
1997
1999 {
2001 {
2005 break;
2006
2010 break;
2011
2015 break;
2016
2020 default:
2023 return;
2024 }
2025
2026
2027 }
2028
2030
2032 {
2034 {
2035
2037 {
2039 }
2041 {
2044 {
2046 }
2047 else
2048 {
2050 {
2052 }
2053 else
2054 {
2056 }
2057 }
2058 }
2059 }
2060 }
2061
2062 }
2064 {
2065
2067 {
2069 {
2073 break;
2074
2078 break;
2079
2083 break;
2084
2088 break;
2089
2092 default:
2095 return;
2096 }
2097 }
2098
2100
2102 {
2104 {
2105
2107 {
2109 }
2110 }
2111 }
2112 }
2114 {
2115
2117 {
2119 {
2123 break;
2124
2127 default:
2130 return;
2131 }
2132 }
2133
2135
2137 {
2139 {
2140
2142 {
2144 }
2145 }
2146 }
2147 }
2148 else
2149 {
2150
2152
2154 {
2157
2158 }
2159 else
2160 {
2162 {
2165 }
2166 }
2167 }
2168 }
2169
2171 {
2172 if (
GetGame().IsDedicatedServer())
2173 return;
2174
2176 {
2178 GetInventory().GetCurrentInventoryLocation(invLoc);
2180 {
2182 if (ptcMgr)
2183 {
2188 }
2189 }
2190 }
2192 {
2194 {
2197 return;
2198 }
2199
2201 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2203 {
2206 }
2207 }
2208 }
2209
2210 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2211 {
2212 super.GetDebugActions(outputList);
2213
2215 {
2219 }
2220 }
2221
2223 {
2224 super.OnAction(action_id, player, ctx);
2225
2227 {
2228 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2229 {
2231 if (food_stage_prev <= 0)
2232 {
2234 }
2236 return true;
2237 }
2238 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2239 {
2242 {
2244 }
2246 return true;
2247 }
2248
2249 }
2250
2251 #ifdef DIAG_DEVELOPER
2252 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2253 {
2254 PrintNutritionsData();
2255 return true;
2256 }
2257 #endif
2258
2259 return false;
2260 }
2261
2263 {
2264 string debug_output;
2265
2266 debug_output = super.GetDebugText();
2267
2270
2271 return debug_output;
2272 }
2273
2274
2275
2276
2277
2279 {
2280 float ret = super.GetBaitEffectivity();
2281
2283 {
2284 ret *= 0.5;
2285 }
2286
2287 return ret;
2288 }
2289
2291 {
2293 }
2294
2296 {
2298 }
2299
2301 {
2303 }
2304
2305 #ifdef DIAG_DEVELOPER
2306 private void PrintNutritionsData()
2307 {
2308 string nutritionsData = "";
2309
2312
2314 if (profile)
2315 {
2316 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2318 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2322 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2324
2327
2328 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2330 }
2331
2332 nutritionsData += "-----\n";
2333
2335 }
2336 #endif
2337
2339
2342 {
2344 }
2345}
2346
2348{
2350};
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.