1332{
1334
1342
1352
1354
1356 {
1358 {
1360
1362 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1363
1367 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1368 }
1369 }
1370
1372 {
1374
1376 }
1377
1379 {
1380 super.EEDelete(parent);
1381
1383
1386 }
1387
1389 {
1390 super.EEItemLocationChanged(oldLoc, newLoc);
1391
1394 {
1395 switch (oldLoc.GetParent().GetType())
1396 {
1397 case "FryingPan":
1398 case "Pot":
1399 case "Cauldron":
1400 case "SharpWoodenStick":
1402 break;
1403 }
1404
1407 {
1409 }
1410 }
1411
1412 if (oldLoc.IsValid())
1414
1417 }
1418
1420 {
1423 }
1424
1426 {
1429
1430 return true;
1431 }
1432
1434 {
1436 {
1438 }
1439 }
1440
1443 {
1444 int foodStageType;
1445
1447 if (foodStage)
1448 foodStageType = foodStage.GetFoodStageType();
1449
1454
1455 return agentsIn;
1456 }
1457
1458
1460 {
1461 return false;
1462 }
1463
1465 {
1466 return false;
1467 }
1468
1470 {
1472 {
1474 {
1477
1480
1481 default:
1482 return super.GetTemperatureFreezeTime();
1483 }
1484 }
1485
1486 return super.GetTemperatureFreezeTime();
1487 }
1488
1490 {
1492 {
1494 {
1497
1500
1501 default:
1502 return super.GetTemperatureThawTime();
1503 }
1504 }
1505
1506 return super.GetTemperatureThawTime();
1507 }
1508
1510 {
1512 }
1513
1514
1515
1516
1518 {
1519 SetSynchDirty();
1520 }
1521
1523 {
1524 super.OnVariablesSynchronized();
1525
1526
1527
1528
1530 {
1532 }
1533 else
1534 {
1536 }
1537
1540 }
1541
1542
1543
1544
1546 {
1549
1551 }
1552
1554 {
1555 string soundName = "";
1556
1559
1561 {
1563 }
1564 else
1565 {
1567 {
1569 {
1574 else
1575 soundName = "";
1576 break;
1577 }
1578
1580 {
1585 else
1586 soundName = "";
1587 break;
1588 }
1589
1591 {
1596 else
1597 soundName = "";
1598 break;
1599 }
1600
1601 default:
1602 soundName = "";
1603 break;
1604 }
1605
1607 {
1608 if (soundName == "")
1609 {
1611 }
1612 else
1613 {
1615 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1616 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1618 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1619 {
1621 }
1622 }
1623 }
1624 }
1625
1627 }
1628
1630 {
1633 }
1634
1635
1636
1637
1639 {
1640 super.OnStoreSave(ctx);
1641
1643 {
1645 }
1646
1647
1650 }
1651
1653 {
1654 if (!super.OnStoreLoad(ctx, version))
1655 return false;
1656
1658 {
1660 return false;
1661 }
1662
1663 if (version >= 115)
1664 {
1666 {
1668 return false;
1669 }
1671 {
1673 return false;
1674 }
1675 }
1676
1679
1680 return true;
1681 }
1682
1684 {
1685 super.AfterStoreLoad();
1686
1688 }
1689
1690
1692 {
1694 }
1695
1696
1698 {
1699 return false;
1700 }
1701
1703 {
1704 return false;
1705 }
1706
1708 {
1709 return false;
1710 }
1711
1713 {
1714 return false;
1715 }
1716
1717
1718
1719
1720
1722 {
1725 {
1726 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1727 }
1728 else if (classname != "" && food_stage)
1729 {
1730 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1731 }
1732 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1734
1735 }
1736
1738 {
1741 {
1743 }
1744 else if (classname != "" && food_stage)
1745 {
1746 return FoodStage.GetEnergy(null, food_stage, classname);
1747 }
1748 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1750 }
1751
1753 {
1756 {
1758 }
1759 else if (classname != "" && food_stage)
1760 {
1761 return FoodStage.GetWater(null, food_stage, classname);
1762 }
1763 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1765 }
1766
1768 {
1771 {
1772 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1773 }
1774 else if (classname != "" && food_stage)
1775 {
1776 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1777 }
1778 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1780
1781 }
1782
1784 {
1787 {
1788 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1789 }
1790 else if (classname != "" && food_stage)
1791 {
1792 return FoodStage.GetToxicity(null, food_stage, classname);
1793 }
1794 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1796 }
1797
1799 {
1802 {
1804 }
1805 else if (classname != "" && food_stage)
1806 {
1807 return FoodStage.GetAgents(null, food_stage, classname);
1808 }
1809 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1811 }
1812
1814 {
1817 {
1818 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1819 }
1820 else if (classname != "" && food_stage)
1821 {
1822 return FoodStage.GetDigestibility(null, food_stage, classname);
1823 }
1824 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1826 }
1827
1829 {
1832 {
1833 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1834 }
1835 else if (className != "" && foodStage)
1836 {
1837 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1838 }
1839 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1841 }
1842
1844 {
1854
1855 return profile;
1856 }
1857
1858
1859
1860
1862 {
1864 }
1865
1866
1868 {
1870 {
1872 }
1873
1874 return false;
1875 }
1876
1878 {
1880 {
1882 }
1883
1884 return false;
1885 }
1886
1888 {
1890 {
1892 }
1893
1894 return false;
1895 }
1896
1898 {
1900 {
1902 }
1903
1904 return false;
1905 }
1906
1908 {
1910 {
1912 }
1913
1914 return false;
1915 }
1916
1918 {
1920 {
1922 }
1923
1924 return false;
1925 }
1926
1927
1929 {
1931 }
1932
1934 {
1935 return GetFoodStage().GetNextFoodStageType( cooking_method );
1936 }
1937
1939 {
1940 return GetFoodStage().GetFoodStageName( food_stage_type );
1941 }
1942
1944 {
1945 return GetFoodStage().CanChangeToNewStage( cooking_method );
1946 }
1947
1948
1950 {
1951 if ( !source.GetFoodStage())
1952 return;
1957 }
1958
1961 {
1964 }
1965
1968 {
1969 switch (stageNew)
1970 {
1975 break;
1976
1979 break;
1980 }
1981 }
1982
1983
1984
1985
1986
1988 {
1990 }
1991
1993 {
1995
1996
1998 }
1999
2001 {
2003 {
2006 }
2007 }
2008
2009
2011 {
2013 if (player)
2014 {
2016 player.ServerReplaceItemInHandsWithNew(lambda);
2017 }
2018 else
2019 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2020 }
2021
2023 {
2025 }
2026
2028 {
2029 super.SetActions();
2030
2033 }
2034
2036 {
2037 #ifndef SERVER
2039 {
2041
2044 }
2045 #endif
2046 }
2047
2049 {
2050 #ifndef SERVER
2052 {
2056 }
2057 #endif
2058 }
2059
2061 {
2062 return false;
2063 }
2064
2066 {
2068 }
2069
2070 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2071 {
2073
2074 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2076 if ( hasRootAsPlayer )
2078
2079
2080
2081
2082
2083
2084
2086 {
2087
2089 {
2091 {
2095 break;
2096
2100 break;
2101
2105 break;
2106
2110 default:
2113 return;
2114 }
2115
2116
2117 }
2118
2120
2122 {
2124 {
2125
2127 {
2129 }
2131 {
2134 {
2136 }
2137 else
2138 {
2140 {
2142 }
2143 else
2144 {
2146 }
2147 }
2148 }
2149 }
2150 }
2151
2152 }
2154 {
2155
2157 {
2159 {
2163 break;
2164
2168 break;
2169
2173 break;
2174
2178 break;
2179
2182 default:
2185 return;
2186 }
2187 }
2188
2190
2192 {
2194 {
2195
2197 {
2199 }
2200 }
2201 }
2202 }
2204 {
2205
2207 {
2209 {
2213 break;
2214
2217 default:
2220 return;
2221 }
2222 }
2223
2225
2227 {
2229 {
2230
2232 {
2234 }
2235 }
2236 }
2237 }
2238 else
2239 {
2240
2242
2244 {
2247
2248 }
2249 else
2250 {
2252 {
2255 }
2256 }
2257 }
2258 }
2259
2261 {
2262 if (
GetGame().IsDedicatedServer())
2263 return;
2264
2266 {
2268 GetInventory().GetCurrentInventoryLocation(invLoc);
2270 {
2272 if (ptcMgr)
2273 {
2278 }
2279 }
2280 }
2282 {
2284 {
2287 return;
2288 }
2289
2291 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2293 {
2296 }
2297 }
2298 }
2299
2300 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2301 {
2303 {
2308 }
2309
2310 super.GetDebugActions(outputList);
2311 }
2312
2314 {
2315 super.OnAction(action_id, player, ctx);
2316
2318 {
2319 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2320 {
2322 if (food_stage_prev <= 0)
2323 {
2325 }
2327 return true;
2328 }
2329 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2330 {
2333 {
2335 }
2337 return true;
2338 }
2339
2340 }
2341
2342 #ifdef DIAG_DEVELOPER
2343 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2344 {
2345 PrintNutritionsData();
2346 return true;
2347 }
2348 #endif
2349
2350 return false;
2351 }
2352
2354 {
2355 string debug_output;
2356
2357 debug_output = super.GetDebugText();
2358
2361
2362 return debug_output;
2363 }
2364
2365
2366
2367
2368
2370 {
2371 float ret = super.GetBaitEffectivity();
2372
2374 {
2375 ret *= 0.5;
2376 }
2377
2378 return ret;
2379 }
2380
2382 {
2384 }
2385
2387 {
2389 }
2390
2392 {
2394 }
2395
2396 #ifdef DIAG_DEVELOPER
2397 private void PrintNutritionsData()
2398 {
2399 string nutritionsData = "";
2400
2403
2405 if (profile)
2406 {
2407 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2409 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2413 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2415
2418
2419 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2421 }
2422
2423 nutritionsData += "-----\n";
2424
2426 }
2427 #endif
2428
2430
2433 {
2435 }
2436}
2437
2439{
2441};
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.