1480{
1482
1490
1500
1502
1504 {
1506 {
1508
1510 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1511
1515 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1516 }
1517 }
1518
1520 {
1522
1524 }
1525
1527 {
1528 super.EEDelete(parent);
1529
1531
1534 }
1535
1537 {
1538 super.EEItemLocationChanged(oldLoc, newLoc);
1539
1542 {
1543 switch (oldLoc.GetParent().GetType())
1544 {
1545 case "FryingPan":
1546 case "Pot":
1547 case "Cauldron":
1548 case "SharpWoodenStick":
1550 break;
1551 }
1552
1555 {
1557 }
1558 }
1559
1560 if (oldLoc.IsValid())
1562
1565 }
1566
1568 {
1571 }
1572
1574 {
1577
1578 return true;
1579 }
1580
1582 {
1584 {
1586 }
1587 }
1588
1591 {
1592 int foodStageType;
1593
1595 if (foodStage)
1596 foodStageType = foodStage.GetFoodStageType();
1597
1602
1603 return agentsIn;
1604 }
1605
1606
1608 {
1609 return false;
1610 }
1611
1613 {
1614 return false;
1615 }
1616
1618 {
1620 {
1622 {
1625
1628
1629 default:
1630 return super.GetTemperatureFreezeTime();
1631 }
1632 }
1633
1634 return super.GetTemperatureFreezeTime();
1635 }
1636
1638 {
1640 {
1642 {
1645
1648
1649 default:
1650 return super.GetTemperatureThawTime();
1651 }
1652 }
1653
1654 return super.GetTemperatureThawTime();
1655 }
1656
1658 {
1660 }
1661
1662
1663
1664
1666 {
1667 SetSynchDirty();
1668 }
1669
1671 {
1672 super.OnVariablesSynchronized();
1673
1674
1675
1676
1678 {
1680 }
1681 else
1682 {
1684 }
1685
1688 }
1689
1690
1691
1692
1694 {
1697
1699 }
1700
1702 {
1703 string soundName = "";
1704
1707
1709 {
1711 }
1712 else
1713 {
1715 {
1717 {
1722 else
1723 soundName = "";
1724 break;
1725 }
1726
1728 {
1733 else
1734 soundName = "";
1735 break;
1736 }
1737
1739 {
1744 else
1745 soundName = "";
1746 break;
1747 }
1748
1749 default:
1750 soundName = "";
1751 break;
1752 }
1753
1755 {
1756 if (soundName == "")
1757 {
1759 }
1760 else
1761 {
1763 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1764 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1766 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1767 {
1769 }
1770 }
1771 }
1772 }
1773
1775 }
1776
1778 {
1781 }
1782
1783
1784
1785
1787 {
1788 super.OnStoreSave(ctx);
1789
1791 {
1793 }
1794
1795
1798 }
1799
1801 {
1802 if (!super.OnStoreLoad(ctx, version))
1803 return false;
1804
1806 {
1808 return false;
1809 }
1810
1811 if (version >= 115)
1812 {
1814 {
1816 return false;
1817 }
1819 {
1821 return false;
1822 }
1823 }
1824
1827
1828 return true;
1829 }
1830
1832 {
1833 super.AfterStoreLoad();
1834
1836 }
1837
1838
1840 {
1842 }
1843
1844
1846 {
1847 return false;
1848 }
1849
1851 {
1852 return false;
1853 }
1854
1856 {
1857 return false;
1858 }
1859
1861 {
1862 return false;
1863 }
1864
1865
1866
1867
1868
1870 {
1873 {
1874 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1875 }
1876 else if (classname != "" && food_stage)
1877 {
1878 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1879 }
1880 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1882
1883 }
1884
1886 {
1889 {
1891 }
1892 else if (classname != "" && food_stage)
1893 {
1894 return FoodStage.GetEnergy(null, food_stage, classname);
1895 }
1896 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1898 }
1899
1901 {
1904 {
1906 }
1907 else if (classname != "" && food_stage)
1908 {
1909 return FoodStage.GetWater(null, food_stage, classname);
1910 }
1911 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1913 }
1914
1916 {
1919 {
1920 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1921 }
1922 else if (classname != "" && food_stage)
1923 {
1924 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1925 }
1926 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1928
1929 }
1930
1932 {
1935 {
1936 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1937 }
1938 else if (classname != "" && food_stage)
1939 {
1940 return FoodStage.GetToxicity(null, food_stage, classname);
1941 }
1942 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1944 }
1945
1947 {
1950 {
1952 }
1953 else if (classname != "" && food_stage)
1954 {
1955 return FoodStage.GetAgents(null, food_stage, classname);
1956 }
1957 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1959 }
1960
1962 {
1965 {
1966 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1967 }
1968 else if (classname != "" && food_stage)
1969 {
1970 return FoodStage.GetDigestibility(null, food_stage, classname);
1971 }
1972 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1974 }
1975
1977 {
1980 {
1981 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1982 }
1983 else if (className != "" && foodStage)
1984 {
1985 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1986 }
1987 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1989 }
1990
1992 {
2002
2003 return profile;
2004 }
2005
2006
2007
2008
2010 {
2012 }
2013
2014
2016 {
2018 {
2020 }
2021
2022 return false;
2023 }
2024
2026 {
2028 {
2030 }
2031
2032 return false;
2033 }
2034
2036 {
2038 {
2040 }
2041
2042 return false;
2043 }
2044
2046 {
2048 {
2050 }
2051
2052 return false;
2053 }
2054
2056 {
2058 {
2060 }
2061
2062 return false;
2063 }
2064
2066 {
2068 {
2070 }
2071
2072 return false;
2073 }
2074
2075
2077 {
2079 }
2080
2082 {
2083 return GetFoodStage().GetNextFoodStageType( cooking_method );
2084 }
2085
2087 {
2088 return GetFoodStage().GetFoodStageName( food_stage_type );
2089 }
2090
2092 {
2093 return GetFoodStage().CanChangeToNewStage( cooking_method );
2094 }
2095
2096
2098 {
2099 if ( !source.GetFoodStage())
2100 return;
2105 }
2106
2109 {
2112 }
2113
2116 {
2117 switch (stageNew)
2118 {
2123 break;
2124
2127 break;
2128 }
2129 }
2130
2131
2132
2133
2134
2136 {
2138 }
2139
2141 {
2143
2144
2146 }
2147
2149 {
2151 {
2154 }
2155 }
2156
2157
2159 {
2161 if (player)
2162 {
2164 player.ServerReplaceItemInHandsWithNew(lambda);
2165 }
2166 else
2167 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2168 }
2169
2171 {
2173 }
2174
2176 {
2177 super.SetActions();
2178
2181 }
2182
2184 {
2185 #ifndef SERVER
2187 {
2189
2192 }
2193 #endif
2194 }
2195
2197 {
2198 #ifndef SERVER
2200 {
2204 }
2205 #endif
2206 }
2207
2209 {
2210 return false;
2211 }
2212
2214 {
2216 }
2217
2218 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2219 {
2221
2222 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2224 if ( hasRootAsPlayer )
2226
2227
2228
2229
2230
2231
2232
2234 {
2235
2237 {
2239 {
2243 break;
2244
2248 break;
2249
2253 break;
2254
2258 default:
2261 return;
2262 }
2263
2264
2265 }
2266
2268
2270 {
2272 {
2273
2275 {
2277 }
2279 {
2282 {
2284 }
2285 else
2286 {
2288 {
2290 }
2291 else
2292 {
2294 }
2295 }
2296 }
2297 }
2298 }
2299
2300 }
2302 {
2303
2305 {
2307 {
2311 break;
2312
2316 break;
2317
2321 break;
2322
2326 break;
2327
2330 default:
2333 return;
2334 }
2335 }
2336
2338
2340 {
2342 {
2343
2345 {
2347 }
2348 }
2349 }
2350 }
2352 {
2353
2355 {
2357 {
2361 break;
2362
2365 default:
2368 return;
2369 }
2370 }
2371
2373
2375 {
2377 {
2378
2380 {
2382 }
2383 }
2384 }
2385 }
2386 else
2387 {
2388
2390
2392 {
2395
2396 }
2397 else
2398 {
2400 {
2403 }
2404 }
2405 }
2406 }
2407
2409 {
2410 if (
GetGame().IsDedicatedServer())
2411 return;
2412
2414 {
2416 GetInventory().GetCurrentInventoryLocation(invLoc);
2418 {
2420 if (ptcMgr)
2421 {
2426 }
2427 }
2428 }
2430 {
2432 {
2435 return;
2436 }
2437
2439 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2441 {
2444 }
2445 }
2446 }
2447
2448 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2449 {
2450 super.GetDebugActions(outputList);
2451
2453 {
2457 }
2458 }
2459
2461 {
2462 super.OnAction(action_id, player, ctx);
2463
2465 {
2466 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2467 {
2469 if (food_stage_prev <= 0)
2470 {
2472 }
2474 return true;
2475 }
2476 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2477 {
2480 {
2482 }
2484 return true;
2485 }
2486
2487 }
2488
2489 #ifdef DIAG_DEVELOPER
2490 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2491 {
2492 PrintNutritionsData();
2493 return true;
2494 }
2495 #endif
2496
2497 return false;
2498 }
2499
2501 {
2502 string debug_output;
2503
2504 debug_output = super.GetDebugText();
2505
2508
2509 return debug_output;
2510 }
2511
2512
2513
2514
2515
2517 {
2518 float ret = super.GetBaitEffectivity();
2519
2521 {
2522 ret *= 0.5;
2523 }
2524
2525 return ret;
2526 }
2527
2529 {
2531 }
2532
2534 {
2536 }
2537
2539 {
2541 }
2542
2543 #ifdef DIAG_DEVELOPER
2544 private void PrintNutritionsData()
2545 {
2546 string nutritionsData = "";
2547
2550
2552 if (profile)
2553 {
2554 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2556 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2560 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2562
2565
2566 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2568 }
2569
2570 nutritionsData += "-----\n";
2571
2573 }
2574 #endif
2575
2577
2580 {
2582 }
2583}
2584
2586{
2588};
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.