1576{
1578
1586
1596
1598
1600 {
1602 {
1604
1606 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1607
1611 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1612 }
1613 }
1614
1616 {
1618
1620 }
1621
1623 {
1624 super.EEDelete(parent);
1625
1627
1630 }
1631
1633 {
1634 super.EEItemLocationChanged(oldLoc, newLoc);
1635
1638 {
1639 switch (oldLoc.GetParent().GetType())
1640 {
1641 case "FryingPan":
1642 case "Pot":
1643 case "Cauldron":
1644 case "SharpWoodenStick":
1646 break;
1647 }
1648
1651 {
1653 }
1654 }
1655
1656 if (oldLoc.IsValid())
1658
1661 }
1662
1664 {
1667 }
1668
1670 {
1673
1674 return true;
1675 }
1676
1678 {
1680 {
1682 }
1683 }
1684
1687 {
1688 int foodStageType;
1689
1691 if (foodStage)
1692 foodStageType = foodStage.GetFoodStageType();
1693
1698
1699 return agentsIn;
1700 }
1701
1702
1704 {
1705 return false;
1706 }
1707
1709 {
1710 return false;
1711 }
1712
1714 {
1716 {
1718 {
1721
1724
1725 default:
1726 return super.GetTemperatureFreezeTime();
1727 }
1728 }
1729
1730 return super.GetTemperatureFreezeTime();
1731 }
1732
1734 {
1736 {
1738 {
1741
1744
1745 default:
1746 return super.GetTemperatureThawTime();
1747 }
1748 }
1749
1750 return super.GetTemperatureThawTime();
1751 }
1752
1754 {
1756 }
1757
1758
1759
1760
1762 {
1763 SetSynchDirty();
1764 }
1765
1767 {
1768 super.OnVariablesSynchronized();
1769
1770
1771
1772
1774 {
1776 }
1777 else
1778 {
1780 }
1781
1784 }
1785
1786
1787
1788
1790 {
1793
1795 }
1796
1798 {
1799 string soundName = "";
1800
1803
1805 {
1807 }
1808 else
1809 {
1811 {
1813 {
1818 else
1819 soundName = "";
1820 break;
1821 }
1822
1824 {
1829 else
1830 soundName = "";
1831 break;
1832 }
1833
1835 {
1840 else
1841 soundName = "";
1842 break;
1843 }
1844
1845 default:
1846 soundName = "";
1847 break;
1848 }
1849
1851 {
1852 if (soundName == "")
1853 {
1855 }
1856 else
1857 {
1859 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1860 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1862 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1863 {
1865 }
1866 }
1867 }
1868 }
1869
1871 }
1872
1874 {
1877 }
1878
1879
1880
1881
1883 {
1884 super.OnStoreSave(ctx);
1885
1887 {
1889 }
1890
1891
1894 }
1895
1897 {
1898 if (!super.OnStoreLoad(ctx, version))
1899 return false;
1900
1902 {
1904 return false;
1905 }
1906
1907 if (version >= 115)
1908 {
1910 {
1912 return false;
1913 }
1915 {
1917 return false;
1918 }
1919 }
1920
1923
1924 return true;
1925 }
1926
1928 {
1929 super.AfterStoreLoad();
1930
1932 }
1933
1934
1936 {
1938 }
1939
1940
1942 {
1943 return false;
1944 }
1945
1947 {
1948 return false;
1949 }
1950
1952 {
1953 return false;
1954 }
1955
1957 {
1958 return false;
1959 }
1960
1961
1962
1963
1964
1966 {
1969 {
1970 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1971 }
1972 else if (classname != "" && food_stage)
1973 {
1974 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1975 }
1976 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1978
1979 }
1980
1982 {
1985 {
1987 }
1988 else if (classname != "" && food_stage)
1989 {
1990 return FoodStage.GetEnergy(null, food_stage, classname);
1991 }
1992 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1994 }
1995
1997 {
2000 {
2002 }
2003 else if (classname != "" && food_stage)
2004 {
2005 return FoodStage.GetWater(null, food_stage, classname);
2006 }
2007 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2009 }
2010
2012 {
2015 {
2016 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2017 }
2018 else if (classname != "" && food_stage)
2019 {
2020 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2021 }
2022 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2024
2025 }
2026
2028 {
2031 {
2032 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2033 }
2034 else if (classname != "" && food_stage)
2035 {
2036 return FoodStage.GetToxicity(null, food_stage, classname);
2037 }
2038 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2040 }
2041
2043 {
2046 {
2048 }
2049 else if (classname != "" && food_stage)
2050 {
2051 return FoodStage.GetAgents(null, food_stage, classname);
2052 }
2053 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2055 }
2056
2058 {
2061 {
2062 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2063 }
2064 else if (classname != "" && food_stage)
2065 {
2066 return FoodStage.GetDigestibility(null, food_stage, classname);
2067 }
2068 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2070 }
2071
2073 {
2076 {
2077 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2078 }
2079 else if (className != "" && foodStage)
2080 {
2081 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2082 }
2083 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2085 }
2086
2088 {
2098
2099 return profile;
2100 }
2101
2102
2103
2104
2106 {
2108 }
2109
2110
2112 {
2114 {
2116 }
2117
2118 return false;
2119 }
2120
2122 {
2124 {
2126 }
2127
2128 return false;
2129 }
2130
2132 {
2134 {
2136 }
2137
2138 return false;
2139 }
2140
2142 {
2144 {
2146 }
2147
2148 return false;
2149 }
2150
2152 {
2154 {
2156 }
2157
2158 return false;
2159 }
2160
2162 {
2164 {
2166 }
2167
2168 return false;
2169 }
2170
2171
2173 {
2175 }
2176
2178 {
2179 return GetFoodStage().GetNextFoodStageType( cooking_method );
2180 }
2181
2183 {
2184 return GetFoodStage().GetFoodStageName( food_stage_type );
2185 }
2186
2188 {
2189 return GetFoodStage().CanChangeToNewStage( cooking_method );
2190 }
2191
2192
2194 {
2195 if ( !source.GetFoodStage())
2196 return;
2201 }
2202
2205 {
2208 }
2209
2212 {
2213 switch (stageNew)
2214 {
2219 break;
2220
2223 break;
2224 }
2225 }
2226
2227
2228
2229
2230
2232 {
2234 }
2235
2237 {
2239
2240
2242 }
2243
2245 {
2247 {
2250 }
2251 }
2252
2253
2255 {
2257 if (player)
2258 {
2260 player.ServerReplaceItemInHandsWithNew(lambda);
2261 }
2262 else
2263 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2264 }
2265
2267 {
2269 }
2270
2272 {
2273 super.SetActions();
2274
2277 }
2278
2280 {
2281 #ifndef SERVER
2283 {
2285
2288 }
2289 #endif
2290 }
2291
2293 {
2294 #ifndef SERVER
2296 {
2300 }
2301 #endif
2302 }
2303
2305 {
2306 return false;
2307 }
2308
2310 {
2312 }
2313
2314 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2315 {
2317
2318 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2320 if ( hasRootAsPlayer )
2322
2323
2324
2325
2326
2327
2328
2330 {
2331
2333 {
2335 {
2339 break;
2340
2344 break;
2345
2349 break;
2350
2354 default:
2357 return;
2358 }
2359
2360
2361 }
2362
2364
2366 {
2368 {
2369
2371 {
2373 }
2375 {
2378 {
2380 }
2381 else
2382 {
2384 {
2386 }
2387 else
2388 {
2390 }
2391 }
2392 }
2393 }
2394 }
2395
2396 }
2398 {
2399
2401 {
2403 {
2407 break;
2408
2412 break;
2413
2417 break;
2418
2422 break;
2423
2426 default:
2429 return;
2430 }
2431 }
2432
2434
2436 {
2438 {
2439
2441 {
2443 }
2444 }
2445 }
2446 }
2448 {
2449
2451 {
2453 {
2457 break;
2458
2461 default:
2464 return;
2465 }
2466 }
2467
2469
2471 {
2473 {
2474
2476 {
2478 }
2479 }
2480 }
2481 }
2482 else
2483 {
2484
2486
2488 {
2491
2492 }
2493 else
2494 {
2496 {
2499 }
2500 }
2501 }
2502 }
2503
2505 {
2506 if (
GetGame().IsDedicatedServer())
2507 return;
2508
2510 {
2512 GetInventory().GetCurrentInventoryLocation(invLoc);
2514 {
2516 if (ptcMgr)
2517 {
2522 }
2523 }
2524 }
2526 {
2528 {
2531 return;
2532 }
2533
2535 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2537 {
2540 }
2541 }
2542 }
2543
2544 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2545 {
2546 super.GetDebugActions(outputList);
2547
2549 {
2553 }
2554 }
2555
2557 {
2558 super.OnAction(action_id, player, ctx);
2559
2561 {
2562 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2563 {
2565 if (food_stage_prev <= 0)
2566 {
2568 }
2570 return true;
2571 }
2572 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2573 {
2576 {
2578 }
2580 return true;
2581 }
2582
2583 }
2584
2585 #ifdef DIAG_DEVELOPER
2586 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2587 {
2588 PrintNutritionsData();
2589 return true;
2590 }
2591 #endif
2592
2593 return false;
2594 }
2595
2597 {
2598 string debug_output;
2599
2600 debug_output = super.GetDebugText();
2601
2604
2605 return debug_output;
2606 }
2607
2608
2609
2610
2611
2613 {
2614 float ret = super.GetBaitEffectivity();
2615
2617 {
2618 ret *= 0.5;
2619 }
2620
2621 return ret;
2622 }
2623
2625 {
2627 }
2628
2630 {
2632 }
2633
2635 {
2637 }
2638
2639 #ifdef DIAG_DEVELOPER
2640 private void PrintNutritionsData()
2641 {
2642 string nutritionsData = "";
2643
2646
2648 if (profile)
2649 {
2650 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2652 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2656 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2658
2661
2662 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2664 }
2665
2666 nutritionsData += "-----\n";
2667
2669 }
2670 #endif
2671
2673
2676 {
2678 }
2679}
2680
2682{
2684};
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.