1515{
1517
1525
1535
1537
1539 {
1541 {
1543
1545 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1546
1550 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1551 }
1552 }
1553
1555 {
1557
1559 }
1560
1562 {
1563 super.EEDelete(parent);
1564
1566
1569 }
1570
1572 {
1573 super.EEItemLocationChanged(oldLoc, newLoc);
1574
1577 {
1578 switch (oldLoc.GetParent().GetType())
1579 {
1580 case "FryingPan":
1581 case "Pot":
1582 case "Cauldron":
1583 case "SharpWoodenStick":
1585 break;
1586 }
1587
1590 {
1592 }
1593 }
1594
1595 if (oldLoc.IsValid())
1597
1600 }
1601
1603 {
1606 }
1607
1609 {
1612
1613 return true;
1614 }
1615
1617 {
1619 {
1621 }
1622 }
1623
1626 {
1627 int foodStageType;
1628
1630 if (foodStage)
1631 foodStageType = foodStage.GetFoodStageType();
1632
1637
1638 return agentsIn;
1639 }
1640
1641
1643 {
1644 return false;
1645 }
1646
1648 {
1649 return false;
1650 }
1651
1653 {
1655 {
1657 {
1660
1663
1664 default:
1665 return super.GetTemperatureFreezeTime();
1666 }
1667 }
1668
1669 return super.GetTemperatureFreezeTime();
1670 }
1671
1673 {
1675 {
1677 {
1680
1683
1684 default:
1685 return super.GetTemperatureThawTime();
1686 }
1687 }
1688
1689 return super.GetTemperatureThawTime();
1690 }
1691
1693 {
1695 }
1696
1697
1698
1699
1701 {
1702 SetSynchDirty();
1703 }
1704
1706 {
1707 super.OnVariablesSynchronized();
1708
1709
1710
1711
1713 {
1715 }
1716 else
1717 {
1719 }
1720
1723 }
1724
1725
1726
1727
1729 {
1732
1734 }
1735
1737 {
1738 string soundName = "";
1739
1742
1744 {
1746 }
1747 else
1748 {
1750 {
1752 {
1757 else
1758 soundName = "";
1759 break;
1760 }
1761
1763 {
1768 else
1769 soundName = "";
1770 break;
1771 }
1772
1774 {
1779 else
1780 soundName = "";
1781 break;
1782 }
1783
1784 default:
1785 soundName = "";
1786 break;
1787 }
1788
1790 {
1791 if (soundName == "")
1792 {
1794 }
1795 else
1796 {
1798 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1799 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1801 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1802 {
1804 }
1805 }
1806 }
1807 }
1808
1810 }
1811
1813 {
1816 }
1817
1818
1819
1820
1822 {
1823 super.OnStoreSave(ctx);
1824
1826 {
1828 }
1829
1830
1833 }
1834
1836 {
1837 if (!super.OnStoreLoad(ctx, version))
1838 return false;
1839
1841 {
1843 return false;
1844 }
1845
1846 if (version >= 115)
1847 {
1849 {
1851 return false;
1852 }
1854 {
1856 return false;
1857 }
1858 }
1859
1862
1863 return true;
1864 }
1865
1867 {
1868 super.AfterStoreLoad();
1869
1871 }
1872
1873
1875 {
1877 }
1878
1879
1881 {
1882 return false;
1883 }
1884
1886 {
1887 return false;
1888 }
1889
1891 {
1892 return false;
1893 }
1894
1896 {
1897 return false;
1898 }
1899
1900
1901
1902
1903
1905 {
1908 {
1909 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1910 }
1911 else if (classname != "" && food_stage)
1912 {
1913 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1914 }
1915 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1917
1918 }
1919
1921 {
1924 {
1926 }
1927 else if (classname != "" && food_stage)
1928 {
1929 return FoodStage.GetEnergy(null, food_stage, classname);
1930 }
1931 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1933 }
1934
1936 {
1939 {
1941 }
1942 else if (classname != "" && food_stage)
1943 {
1944 return FoodStage.GetWater(null, food_stage, classname);
1945 }
1946 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1948 }
1949
1951 {
1954 {
1955 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1956 }
1957 else if (classname != "" && food_stage)
1958 {
1959 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1960 }
1961 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1963
1964 }
1965
1967 {
1970 {
1971 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1972 }
1973 else if (classname != "" && food_stage)
1974 {
1975 return FoodStage.GetToxicity(null, food_stage, classname);
1976 }
1977 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1979 }
1980
1982 {
1985 {
1987 }
1988 else if (classname != "" && food_stage)
1989 {
1990 return FoodStage.GetAgents(null, food_stage, classname);
1991 }
1992 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1994 }
1995
1997 {
2000 {
2001 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2002 }
2003 else if (classname != "" && food_stage)
2004 {
2005 return FoodStage.GetDigestibility(null, food_stage, classname);
2006 }
2007 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2009 }
2010
2012 {
2015 {
2016 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2017 }
2018 else if (className != "" && foodStage)
2019 {
2020 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2021 }
2022 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2024 }
2025
2027 {
2037
2038 return profile;
2039 }
2040
2041
2042
2043
2045 {
2047 }
2048
2049
2051 {
2053 {
2055 }
2056
2057 return false;
2058 }
2059
2061 {
2063 {
2065 }
2066
2067 return false;
2068 }
2069
2071 {
2073 {
2075 }
2076
2077 return false;
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
2110
2112 {
2114 }
2115
2117 {
2118 return GetFoodStage().GetNextFoodStageType( cooking_method );
2119 }
2120
2122 {
2123 return GetFoodStage().GetFoodStageName( food_stage_type );
2124 }
2125
2127 {
2128 return GetFoodStage().CanChangeToNewStage( cooking_method );
2129 }
2130
2131
2133 {
2134 if ( !source.GetFoodStage())
2135 return;
2140 }
2141
2144 {
2147 }
2148
2151 {
2152 switch (stageNew)
2153 {
2158 break;
2159
2162 break;
2163 }
2164 }
2165
2166
2167
2168
2169
2171 {
2173 }
2174
2176 {
2178
2179
2181 }
2182
2184 {
2186 {
2189 }
2190 }
2191
2192
2194 {
2196 if (player)
2197 {
2199 player.ServerReplaceItemInHandsWithNew(lambda);
2200 }
2201 else
2202 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2203 }
2204
2206 {
2208 }
2209
2211 {
2212 super.SetActions();
2213
2216 }
2217
2219 {
2220 #ifndef SERVER
2222 {
2224
2227 }
2228 #endif
2229 }
2230
2232 {
2233 #ifndef SERVER
2235 {
2239 }
2240 #endif
2241 }
2242
2244 {
2245 return false;
2246 }
2247
2249 {
2251 }
2252
2253 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2254 {
2256
2257 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2259 if ( hasRootAsPlayer )
2261
2262
2263
2264
2265
2266
2267
2269 {
2270
2272 {
2274 {
2278 break;
2279
2283 break;
2284
2288 break;
2289
2293 default:
2296 return;
2297 }
2298
2299
2300 }
2301
2303
2305 {
2307 {
2308
2310 {
2312 }
2314 {
2317 {
2319 }
2320 else
2321 {
2323 {
2325 }
2326 else
2327 {
2329 }
2330 }
2331 }
2332 }
2333 }
2334
2335 }
2337 {
2338
2340 {
2342 {
2346 break;
2347
2351 break;
2352
2356 break;
2357
2361 break;
2362
2365 default:
2368 return;
2369 }
2370 }
2371
2373
2375 {
2377 {
2378
2380 {
2382 }
2383 }
2384 }
2385 }
2387 {
2388
2390 {
2392 {
2396 break;
2397
2400 default:
2403 return;
2404 }
2405 }
2406
2408
2410 {
2412 {
2413
2415 {
2417 }
2418 }
2419 }
2420 }
2421 else
2422 {
2423
2425
2427 {
2430
2431 }
2432 else
2433 {
2435 {
2438 }
2439 }
2440 }
2441 }
2442
2444 {
2445 if (
GetGame().IsDedicatedServer())
2446 return;
2447
2449 {
2451 GetInventory().GetCurrentInventoryLocation(invLoc);
2453 {
2455 if (ptcMgr)
2456 {
2461 }
2462 }
2463 }
2465 {
2467 {
2470 return;
2471 }
2472
2474 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2476 {
2479 }
2480 }
2481 }
2482
2483 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2484 {
2485 super.GetDebugActions(outputList);
2486
2488 {
2492 }
2493 }
2494
2496 {
2497 super.OnAction(action_id, player, ctx);
2498
2500 {
2501 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2502 {
2504 if (food_stage_prev <= 0)
2505 {
2507 }
2509 return true;
2510 }
2511 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2512 {
2515 {
2517 }
2519 return true;
2520 }
2521
2522 }
2523
2524 #ifdef DIAG_DEVELOPER
2525 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2526 {
2527 PrintNutritionsData();
2528 return true;
2529 }
2530 #endif
2531
2532 return false;
2533 }
2534
2536 {
2537 string debug_output;
2538
2539 debug_output = super.GetDebugText();
2540
2543
2544 return debug_output;
2545 }
2546
2547
2548
2549
2550
2552 {
2553 float ret = super.GetBaitEffectivity();
2554
2556 {
2557 ret *= 0.5;
2558 }
2559
2560 return ret;
2561 }
2562
2564 {
2566 }
2567
2569 {
2571 }
2572
2574 {
2576 }
2577
2578 #ifdef DIAG_DEVELOPER
2579 private void PrintNutritionsData()
2580 {
2581 string nutritionsData = "";
2582
2585
2587 if (profile)
2588 {
2589 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2591 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2595 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2597
2600
2601 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2603 }
2604
2605 nutritionsData += "-----\n";
2606
2608 }
2609 #endif
2610
2612
2615 {
2617 }
2618}
2619
2621{
2623};
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.