1545{
1547
1555
1565
1567
1569 {
1571 {
1573
1575 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1576
1580 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1581 }
1582 }
1583
1585 {
1587
1589 }
1590
1592 {
1593 super.EEDelete(parent);
1594
1596
1599 }
1600
1602 {
1603 super.EEItemLocationChanged(oldLoc, newLoc);
1604
1607 {
1608 switch (oldLoc.GetParent().GetType())
1609 {
1610 case "FryingPan":
1611 case "Pot":
1612 case "Cauldron":
1613 case "SharpWoodenStick":
1615 break;
1616 }
1617
1620 {
1622 }
1623 }
1624
1625 if (oldLoc.IsValid())
1627
1630 }
1631
1633 {
1636 }
1637
1639 {
1642
1643 return true;
1644 }
1645
1647 {
1649 {
1651 }
1652 }
1653
1656 {
1657 int foodStageType;
1658
1660 if (foodStage)
1661 foodStageType = foodStage.GetFoodStageType();
1662
1667
1668 return agentsIn;
1669 }
1670
1671
1673 {
1674 return false;
1675 }
1676
1678 {
1679 return false;
1680 }
1681
1683 {
1685 {
1687 {
1690
1693
1694 default:
1695 return super.GetTemperatureFreezeTime();
1696 }
1697 }
1698
1699 return super.GetTemperatureFreezeTime();
1700 }
1701
1703 {
1705 {
1707 {
1710
1713
1714 default:
1715 return super.GetTemperatureThawTime();
1716 }
1717 }
1718
1719 return super.GetTemperatureThawTime();
1720 }
1721
1723 {
1725 }
1726
1727
1728
1729
1731 {
1732 SetSynchDirty();
1733 }
1734
1736 {
1737 super.OnVariablesSynchronized();
1738
1739
1740
1741
1743 {
1745 }
1746 else
1747 {
1749 }
1750
1753 }
1754
1755
1756
1757
1759 {
1762
1764 }
1765
1767 {
1768 string soundName = "";
1769
1772
1774 {
1776 }
1777 else
1778 {
1780 {
1782 {
1787 else
1788 soundName = "";
1789 break;
1790 }
1791
1793 {
1798 else
1799 soundName = "";
1800 break;
1801 }
1802
1804 {
1809 else
1810 soundName = "";
1811 break;
1812 }
1813
1814 default:
1815 soundName = "";
1816 break;
1817 }
1818
1820 {
1821 if (soundName == "")
1822 {
1824 }
1825 else
1826 {
1828 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1829 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1831 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1832 {
1834 }
1835 }
1836 }
1837 }
1838
1840 }
1841
1843 {
1846 }
1847
1848
1849
1850
1852 {
1853 super.OnStoreSave(ctx);
1854
1856 {
1858 }
1859
1860
1863 }
1864
1866 {
1867 if (!super.OnStoreLoad(ctx, version))
1868 return false;
1869
1871 {
1873 return false;
1874 }
1875
1876 if (version >= 115)
1877 {
1879 {
1881 return false;
1882 }
1884 {
1886 return false;
1887 }
1888 }
1889
1892
1893 return true;
1894 }
1895
1897 {
1898 super.AfterStoreLoad();
1899
1901 }
1902
1903
1905 {
1907 }
1908
1909
1911 {
1912 return false;
1913 }
1914
1916 {
1917 return false;
1918 }
1919
1921 {
1922 return false;
1923 }
1924
1926 {
1927 return false;
1928 }
1929
1930
1931
1932
1933
1935 {
1938 {
1939 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1940 }
1941 else if (classname != "" && food_stage)
1942 {
1943 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1944 }
1945 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1947
1948 }
1949
1951 {
1954 {
1956 }
1957 else if (classname != "" && food_stage)
1958 {
1959 return FoodStage.GetEnergy(null, food_stage, classname);
1960 }
1961 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1963 }
1964
1966 {
1969 {
1971 }
1972 else if (classname != "" && food_stage)
1973 {
1974 return FoodStage.GetWater(null, food_stage, classname);
1975 }
1976 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1978 }
1979
1981 {
1984 {
1985 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1986 }
1987 else if (classname != "" && food_stage)
1988 {
1989 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1990 }
1991 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1993
1994 }
1995
1997 {
2000 {
2001 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2002 }
2003 else if (classname != "" && food_stage)
2004 {
2005 return FoodStage.GetToxicity(null, food_stage, classname);
2006 }
2007 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2009 }
2010
2012 {
2015 {
2017 }
2018 else if (classname != "" && food_stage)
2019 {
2020 return FoodStage.GetAgents(null, food_stage, classname);
2021 }
2022 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2024 }
2025
2027 {
2030 {
2031 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2032 }
2033 else if (classname != "" && food_stage)
2034 {
2035 return FoodStage.GetDigestibility(null, food_stage, classname);
2036 }
2037 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2039 }
2040
2042 {
2045 {
2046 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2047 }
2048 else if (className != "" && foodStage)
2049 {
2050 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2051 }
2052 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2054 }
2055
2057 {
2067
2068 return profile;
2069 }
2070
2071
2072
2073
2075 {
2077 }
2078
2079
2081 {
2083 {
2085 }
2086
2087 return false;
2088 }
2089
2091 {
2093 {
2095 }
2096
2097 return false;
2098 }
2099
2101 {
2103 {
2105 }
2106
2107 return false;
2108 }
2109
2111 {
2113 {
2115 }
2116
2117 return false;
2118 }
2119
2121 {
2123 {
2125 }
2126
2127 return false;
2128 }
2129
2131 {
2133 {
2135 }
2136
2137 return false;
2138 }
2139
2140
2142 {
2144 }
2145
2147 {
2148 return GetFoodStage().GetNextFoodStageType( cooking_method );
2149 }
2150
2152 {
2153 return GetFoodStage().GetFoodStageName( food_stage_type );
2154 }
2155
2157 {
2158 return GetFoodStage().CanChangeToNewStage( cooking_method );
2159 }
2160
2161
2163 {
2164 if ( !source.GetFoodStage())
2165 return;
2170 }
2171
2174 {
2177 }
2178
2181 {
2182 switch (stageNew)
2183 {
2188 break;
2189
2192 break;
2193 }
2194 }
2195
2196
2197
2198
2199
2201 {
2203 }
2204
2206 {
2208
2209
2211 }
2212
2214 {
2216 {
2219 }
2220 }
2221
2222
2224 {
2226 if (player)
2227 {
2229 player.ServerReplaceItemInHandsWithNew(lambda);
2230 }
2231 else
2232 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2233 }
2234
2236 {
2238 }
2239
2241 {
2242 super.SetActions();
2243
2246 }
2247
2249 {
2250 #ifndef SERVER
2252 {
2254
2257 }
2258 #endif
2259 }
2260
2262 {
2263 #ifndef SERVER
2265 {
2269 }
2270 #endif
2271 }
2272
2274 {
2275 return false;
2276 }
2277
2279 {
2281 }
2282
2283 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2284 {
2286
2287 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2289 if ( hasRootAsPlayer )
2291
2292
2293
2294
2295
2296
2297
2299 {
2300
2302 {
2304 {
2308 break;
2309
2313 break;
2314
2318 break;
2319
2323 default:
2326 return;
2327 }
2328
2329
2330 }
2331
2333
2335 {
2337 {
2338
2340 {
2342 }
2344 {
2347 {
2349 }
2350 else
2351 {
2353 {
2355 }
2356 else
2357 {
2359 }
2360 }
2361 }
2362 }
2363 }
2364
2365 }
2367 {
2368
2370 {
2372 {
2376 break;
2377
2381 break;
2382
2386 break;
2387
2391 break;
2392
2395 default:
2398 return;
2399 }
2400 }
2401
2403
2405 {
2407 {
2408
2410 {
2412 }
2413 }
2414 }
2415 }
2417 {
2418
2420 {
2422 {
2426 break;
2427
2430 default:
2433 return;
2434 }
2435 }
2436
2438
2440 {
2442 {
2443
2445 {
2447 }
2448 }
2449 }
2450 }
2451 else
2452 {
2453
2455
2457 {
2460
2461 }
2462 else
2463 {
2465 {
2468 }
2469 }
2470 }
2471 }
2472
2474 {
2475 if (
GetGame().IsDedicatedServer())
2476 return;
2477
2479 {
2481 GetInventory().GetCurrentInventoryLocation(invLoc);
2483 {
2485 if (ptcMgr)
2486 {
2491 }
2492 }
2493 }
2495 {
2497 {
2500 return;
2501 }
2502
2504 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2506 {
2509 }
2510 }
2511 }
2512
2513 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2514 {
2515 super.GetDebugActions(outputList);
2516
2518 {
2522 }
2523 }
2524
2526 {
2527 super.OnAction(action_id, player, ctx);
2528
2530 {
2531 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2532 {
2534 if (food_stage_prev <= 0)
2535 {
2537 }
2539 return true;
2540 }
2541 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2542 {
2545 {
2547 }
2549 return true;
2550 }
2551
2552 }
2553
2554 #ifdef DIAG_DEVELOPER
2555 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2556 {
2557 PrintNutritionsData();
2558 return true;
2559 }
2560 #endif
2561
2562 return false;
2563 }
2564
2566 {
2567 string debug_output;
2568
2569 debug_output = super.GetDebugText();
2570
2573
2574 return debug_output;
2575 }
2576
2577
2578
2579
2580
2582 {
2583 float ret = super.GetBaitEffectivity();
2584
2586 {
2587 ret *= 0.5;
2588 }
2589
2590 return ret;
2591 }
2592
2594 {
2596 }
2597
2599 {
2601 }
2602
2604 {
2606 }
2607
2608 #ifdef DIAG_DEVELOPER
2609 private void PrintNutritionsData()
2610 {
2611 string nutritionsData = "";
2612
2615
2617 if (profile)
2618 {
2619 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2621 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2625 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2627
2630
2631 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2633 }
2634
2635 nutritionsData += "-----\n";
2636
2638 }
2639 #endif
2640
2642
2645 {
2647 }
2648}
2649
2651{
2653};
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.