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);
1881 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
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);
1897 return g_Game.ConfigGetFloat( class_path +
" energy" );
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);
1912 return g_Game.ConfigGetFloat( class_path +
" water" );
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);
1927 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
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);
1943 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
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);
1958 return g_Game.ConfigGetInt( class_path +
" agents" );
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);
1973 return g_Game.ConfigGetInt( class_path +
" digestibility" );
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);
1988 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
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
2186 #ifndef NO_GUI
2188 {
2190
2193 }
2194 #endif
2195 #endif
2196 }
2197
2199 {
2200 #ifndef SERVER
2201 #ifndef NO_GUI
2203 {
2207 }
2208 #endif
2209 #endif
2210 }
2211
2213 {
2214 return false;
2215 }
2216
2218 {
2220 }
2221
2222 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2223 {
2225
2226 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2228 if ( hasRootAsPlayer )
2230
2231
2232
2233
2234
2235
2236
2238 {
2239
2241 {
2243 {
2247 break;
2248
2252 break;
2253
2257 break;
2258
2262 default:
2265 return;
2266 }
2267
2268
2269 }
2270
2272
2274 {
2276 {
2277
2279 {
2281 }
2283 {
2286 {
2288 }
2289 else
2290 {
2292 {
2294 }
2295 else
2296 {
2298 }
2299 }
2300 }
2301 }
2302 }
2303
2304 }
2306 {
2307
2309 {
2311 {
2315 break;
2316
2320 break;
2321
2325 break;
2326
2330 break;
2331
2334 default:
2337 return;
2338 }
2339 }
2340
2342
2344 {
2346 {
2347
2349 {
2351 }
2352 }
2353 }
2354 }
2356 {
2357
2359 {
2361 {
2365 break;
2366
2369 default:
2372 return;
2373 }
2374 }
2375
2377
2379 {
2381 {
2382
2384 {
2386 }
2387 }
2388 }
2389 }
2390 else
2391 {
2392
2394
2396 {
2399
2400 }
2401 else
2402 {
2404 {
2407 }
2408 }
2409 }
2410 }
2411
2413 {
2414 if (
g_Game.IsHeadlessOrDedicatedServer())
2415 return;
2416
2418 {
2420 GetInventory().GetCurrentInventoryLocation(invLoc);
2422 {
2424 if (ptcMgr)
2425 {
2430 }
2431 }
2432 }
2434 {
2436 {
2439 return;
2440 }
2441
2443 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2445 {
2448 }
2449 }
2450 }
2451
2452 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2453 {
2455 {
2460 }
2461
2462 super.GetDebugActions(outputList);
2463 }
2464
2466 {
2467 super.OnAction(action_id, player, ctx);
2468
2470 {
2471 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2472 {
2474 if (food_stage_prev <= 0)
2475 {
2477 }
2479 return true;
2480 }
2481 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2482 {
2485 {
2487 }
2489 return true;
2490 }
2491
2492 }
2493
2494 #ifdef DIAG_DEVELOPER
2495 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2496 {
2497 PrintNutritionsData();
2498 return true;
2499 }
2500 #endif
2501
2502 return false;
2503 }
2504
2506 {
2507 string debug_output;
2508
2509 debug_output = super.GetDebugText();
2510
2513
2514 return debug_output;
2515 }
2516
2517
2518
2519
2520
2522 {
2523 float ret = super.GetBaitEffectivity();
2524
2526 {
2527 ret *= 0.5;
2528 }
2529
2530 return ret;
2531 }
2532
2534 {
2536 }
2537
2539 {
2541 }
2542
2544 {
2546 }
2547
2548 #ifdef DIAG_DEVELOPER
2549 private void PrintNutritionsData()
2550 {
2551 string nutritionsData = "";
2552
2555
2557 if (profile)
2558 {
2559 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2561 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2565 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2567
2570
2571 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2573 }
2574
2575 nutritionsData += "-----\n";
2576
2578 }
2579 #endif
2580
2582
2585 {
2587 }
2588}
2589
2591{
2593};
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 RemoveAllAgentsExcept(int agent_to_keep)
override void InsertAgent(int agent, float count=1)
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.
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
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
vector GetPosition()
Get the world position of the Effect.
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.