1470{
1472
1480
1490
1492
1494 {
1496 {
1498
1500 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1501
1505 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1506 }
1507 }
1508
1510 {
1512
1514 }
1515
1517 {
1518 super.EEDelete(parent);
1519
1521
1524 }
1525
1527 {
1528 super.EEItemLocationChanged(oldLoc, newLoc);
1529
1532 {
1533 switch (oldLoc.GetParent().GetType())
1534 {
1535 case "FryingPan":
1536 case "Pot":
1537 case "Cauldron":
1538 case "SharpWoodenStick":
1540 break;
1541 }
1542
1545 {
1547 }
1548 }
1549
1550 if (oldLoc.IsValid())
1552
1555 }
1556
1558 {
1561 }
1562
1564 {
1567
1568 return true;
1569 }
1570
1572 {
1574 {
1576 }
1577 }
1578
1581 {
1582 int foodStageType;
1583
1585 if (foodStage)
1586 foodStageType = foodStage.GetFoodStageType();
1587
1592
1593 return agentsIn;
1594 }
1595
1596
1598 {
1599 return false;
1600 }
1601
1603 {
1604 return false;
1605 }
1606
1608 {
1610 {
1612 {
1615
1618
1619 default:
1620 return super.GetTemperatureFreezeTime();
1621 }
1622 }
1623
1624 return super.GetTemperatureFreezeTime();
1625 }
1626
1628 {
1630 {
1632 {
1635
1638
1639 default:
1640 return super.GetTemperatureThawTime();
1641 }
1642 }
1643
1644 return super.GetTemperatureThawTime();
1645 }
1646
1648 {
1650 }
1651
1652
1653
1654
1656 {
1657 SetSynchDirty();
1658 }
1659
1661 {
1662 super.OnVariablesSynchronized();
1663
1664
1665
1666
1668 {
1670 }
1671 else
1672 {
1674 }
1675
1678 }
1679
1680
1681
1682
1684 {
1687
1689 }
1690
1692 {
1693 string soundName = "";
1694
1697
1699 {
1701 }
1702 else
1703 {
1705 {
1707 {
1712 else
1713 soundName = "";
1714 break;
1715 }
1716
1718 {
1723 else
1724 soundName = "";
1725 break;
1726 }
1727
1729 {
1734 else
1735 soundName = "";
1736 break;
1737 }
1738
1739 default:
1740 soundName = "";
1741 break;
1742 }
1743
1745 {
1746 if (soundName == "")
1747 {
1749 }
1750 else
1751 {
1753 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1754 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1756 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1757 {
1759 }
1760 }
1761 }
1762 }
1763
1765 }
1766
1768 {
1771 }
1772
1773
1774
1775
1777 {
1778 super.OnStoreSave(ctx);
1779
1781 {
1783 }
1784
1785
1788 }
1789
1791 {
1792 if (!super.OnStoreLoad(ctx, version))
1793 return false;
1794
1796 {
1798 return false;
1799 }
1800
1801 if (version >= 115)
1802 {
1804 {
1806 return false;
1807 }
1809 {
1811 return false;
1812 }
1813 }
1814
1817
1818 return true;
1819 }
1820
1822 {
1823 super.AfterStoreLoad();
1824
1826 }
1827
1828
1830 {
1832 }
1833
1834
1836 {
1837 return false;
1838 }
1839
1841 {
1842 return false;
1843 }
1844
1846 {
1847 return false;
1848 }
1849
1851 {
1852 return false;
1853 }
1854
1855
1856
1857
1858
1860 {
1863 {
1864 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1865 }
1866 else if (classname != "" && food_stage)
1867 {
1868 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1869 }
1870 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1872
1873 }
1874
1876 {
1879 {
1881 }
1882 else if (classname != "" && food_stage)
1883 {
1884 return FoodStage.GetEnergy(null, food_stage, classname);
1885 }
1886 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1888 }
1889
1891 {
1894 {
1896 }
1897 else if (classname != "" && food_stage)
1898 {
1899 return FoodStage.GetWater(null, food_stage, classname);
1900 }
1901 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1903 }
1904
1906 {
1909 {
1910 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1911 }
1912 else if (classname != "" && food_stage)
1913 {
1914 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1915 }
1916 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1918
1919 }
1920
1922 {
1925 {
1926 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1927 }
1928 else if (classname != "" && food_stage)
1929 {
1930 return FoodStage.GetToxicity(null, food_stage, classname);
1931 }
1932 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1934 }
1935
1937 {
1940 {
1942 }
1943 else if (classname != "" && food_stage)
1944 {
1945 return FoodStage.GetAgents(null, food_stage, classname);
1946 }
1947 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1949 }
1950
1952 {
1955 {
1956 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1957 }
1958 else if (classname != "" && food_stage)
1959 {
1960 return FoodStage.GetDigestibility(null, food_stage, classname);
1961 }
1962 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1964 }
1965
1967 {
1970 {
1971 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1972 }
1973 else if (className != "" && foodStage)
1974 {
1975 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1976 }
1977 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1979 }
1980
1982 {
1992
1993 return profile;
1994 }
1995
1996
1997
1998
2000 {
2002 }
2003
2004
2006 {
2008 {
2010 }
2011
2012 return false;
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
2065
2067 {
2069 }
2070
2072 {
2073 return GetFoodStage().GetNextFoodStageType( cooking_method );
2074 }
2075
2077 {
2078 return GetFoodStage().GetFoodStageName( food_stage_type );
2079 }
2080
2082 {
2083 return GetFoodStage().CanChangeToNewStage( cooking_method );
2084 }
2085
2086
2088 {
2089 if ( !source.GetFoodStage())
2090 return;
2095 }
2096
2099 {
2102 }
2103
2106 {
2107 switch (stageNew)
2108 {
2113 break;
2114
2117 break;
2118 }
2119 }
2120
2121
2122
2123
2124
2126 {
2128 }
2129
2131 {
2133
2134
2136 }
2137
2139 {
2141 {
2144 }
2145 }
2146
2147
2149 {
2151 if (player)
2152 {
2154 player.ServerReplaceItemInHandsWithNew(lambda);
2155 }
2156 else
2157 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2158 }
2159
2161 {
2163 }
2164
2166 {
2167 super.SetActions();
2168
2171 }
2172
2174 {
2175 #ifndef SERVER
2177 {
2179
2182 }
2183 #endif
2184 }
2185
2187 {
2188 #ifndef SERVER
2190 {
2194 }
2195 #endif
2196 }
2197
2199 {
2200 return false;
2201 }
2202
2204 {
2206 }
2207
2208 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2209 {
2211
2212 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2214 if ( hasRootAsPlayer )
2216
2217
2218
2219
2220
2221
2222
2224 {
2225
2227 {
2229 {
2233 break;
2234
2238 break;
2239
2243 break;
2244
2248 default:
2251 return;
2252 }
2253
2254
2255 }
2256
2258
2260 {
2262 {
2263
2265 {
2267 }
2269 {
2272 {
2274 }
2275 else
2276 {
2278 {
2280 }
2281 else
2282 {
2284 }
2285 }
2286 }
2287 }
2288 }
2289
2290 }
2292 {
2293
2295 {
2297 {
2301 break;
2302
2306 break;
2307
2311 break;
2312
2316 break;
2317
2320 default:
2323 return;
2324 }
2325 }
2326
2328
2330 {
2332 {
2333
2335 {
2337 }
2338 }
2339 }
2340 }
2342 {
2343
2345 {
2347 {
2351 break;
2352
2355 default:
2358 return;
2359 }
2360 }
2361
2363
2365 {
2367 {
2368
2370 {
2372 }
2373 }
2374 }
2375 }
2376 else
2377 {
2378
2380
2382 {
2385
2386 }
2387 else
2388 {
2390 {
2393 }
2394 }
2395 }
2396 }
2397
2399 {
2400 if (
GetGame().IsDedicatedServer())
2401 return;
2402
2404 {
2406 GetInventory().GetCurrentInventoryLocation(invLoc);
2408 {
2410 if (ptcMgr)
2411 {
2416 }
2417 }
2418 }
2420 {
2422 {
2425 return;
2426 }
2427
2429 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2431 {
2434 }
2435 }
2436 }
2437
2438 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2439 {
2441 {
2446 }
2447
2448 super.GetDebugActions(outputList);
2449 }
2450
2452 {
2453 super.OnAction(action_id, player, ctx);
2454
2456 {
2457 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2458 {
2460 if (food_stage_prev <= 0)
2461 {
2463 }
2465 return true;
2466 }
2467 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2468 {
2471 {
2473 }
2475 return true;
2476 }
2477
2478 }
2479
2480 #ifdef DIAG_DEVELOPER
2481 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2482 {
2483 PrintNutritionsData();
2484 return true;
2485 }
2486 #endif
2487
2488 return false;
2489 }
2490
2492 {
2493 string debug_output;
2494
2495 debug_output = super.GetDebugText();
2496
2499
2500 return debug_output;
2501 }
2502
2503
2504
2505
2506
2508 {
2509 float ret = super.GetBaitEffectivity();
2510
2512 {
2513 ret *= 0.5;
2514 }
2515
2516 return ret;
2517 }
2518
2520 {
2522 }
2523
2525 {
2527 }
2528
2530 {
2532 }
2533
2534 #ifdef DIAG_DEVELOPER
2535 private void PrintNutritionsData()
2536 {
2537 string nutritionsData = "";
2538
2541
2543 if (profile)
2544 {
2545 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2547 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2551 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2553
2556
2557 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2559 }
2560
2561 nutritionsData += "-----\n";
2562
2564 }
2565 #endif
2566
2568
2571 {
2573 }
2574}
2575
2577{
2579};
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.