1621{
1623
1631
1641
1643
1645 {
1647 {
1649
1651 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1652
1656 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1657 }
1658 }
1659
1661 {
1663
1665 }
1666
1668 {
1669 super.EEDelete(parent);
1670
1672
1675 }
1676
1678 {
1679 super.EEItemLocationChanged(oldLoc, newLoc);
1680
1683 {
1684 switch (oldLoc.GetParent().GetType())
1685 {
1686 case "FryingPan":
1687 case "Pot":
1688 case "Cauldron":
1689 case "SharpWoodenStick":
1691 break;
1692 }
1693
1696 {
1698 }
1699 }
1700
1701 if (oldLoc.IsValid())
1703
1706 }
1707
1709 {
1712 }
1713
1715 {
1718
1719 return true;
1720 }
1721
1723 {
1725 {
1727 }
1728 }
1729
1732 {
1733 int foodStageType;
1734
1736 if (foodStage)
1737 foodStageType = foodStage.GetFoodStageType();
1738
1743
1744 return agentsIn;
1745 }
1746
1747
1749 {
1750 return false;
1751 }
1752
1754 {
1755 return false;
1756 }
1757
1759 {
1761 {
1763 {
1766
1769
1770 default:
1771 return super.GetTemperatureFreezeTime();
1772 }
1773 }
1774
1775 return super.GetTemperatureFreezeTime();
1776 }
1777
1779 {
1781 {
1783 {
1786
1789
1790 default:
1791 return super.GetTemperatureThawTime();
1792 }
1793 }
1794
1795 return super.GetTemperatureThawTime();
1796 }
1797
1799 {
1801 }
1802
1803
1804
1805
1807 {
1808 SetSynchDirty();
1809 }
1810
1812 {
1813 super.OnVariablesSynchronized();
1814
1815
1816
1817
1819 {
1821 }
1822 else
1823 {
1825 }
1826
1829 }
1830
1831
1832
1833
1835 {
1838
1840 }
1841
1843 {
1844 string soundName = "";
1845
1848
1850 {
1852 }
1853 else
1854 {
1856 {
1858 {
1863 else
1864 soundName = "";
1865 break;
1866 }
1867
1869 {
1874 else
1875 soundName = "";
1876 break;
1877 }
1878
1880 {
1885 else
1886 soundName = "";
1887 break;
1888 }
1889
1890 default:
1891 soundName = "";
1892 break;
1893 }
1894
1896 {
1897 if (soundName == "")
1898 {
1900 }
1901 else
1902 {
1904 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1905 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1907 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1908 {
1910 }
1911 }
1912 }
1913 }
1914
1916 }
1917
1919 {
1922 }
1923
1924
1925
1926
1928 {
1929 super.OnStoreSave(ctx);
1930
1932 {
1934 }
1935
1936
1939 }
1940
1942 {
1943 if (!super.OnStoreLoad(ctx, version))
1944 return false;
1945
1947 {
1949 return false;
1950 }
1951
1952 if (version >= 115)
1953 {
1955 {
1957 return false;
1958 }
1960 {
1962 return false;
1963 }
1964 }
1965
1968
1969 return true;
1970 }
1971
1973 {
1974 super.AfterStoreLoad();
1975
1977 }
1978
1979
1981 {
1983 }
1984
1985
1987 {
1988 return false;
1989 }
1990
1992 {
1993 return false;
1994 }
1995
1997 {
1998 return false;
1999 }
2000
2002 {
2003 return false;
2004 }
2005
2006
2007
2008
2009
2011 {
2014 {
2015 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2016 }
2017 else if (classname != "" && food_stage)
2018 {
2019 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2020 }
2021 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2023
2024 }
2025
2027 {
2030 {
2032 }
2033 else if (classname != "" && food_stage)
2034 {
2035 return FoodStage.GetEnergy(null, food_stage, classname);
2036 }
2037 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2039 }
2040
2042 {
2045 {
2047 }
2048 else if (classname != "" && food_stage)
2049 {
2050 return FoodStage.GetWater(null, food_stage, classname);
2051 }
2052 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2054 }
2055
2057 {
2060 {
2061 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2062 }
2063 else if (classname != "" && food_stage)
2064 {
2065 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2066 }
2067 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2069
2070 }
2071
2073 {
2076 {
2077 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2078 }
2079 else if (classname != "" && food_stage)
2080 {
2081 return FoodStage.GetToxicity(null, food_stage, classname);
2082 }
2083 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2085 }
2086
2088 {
2091 {
2093 }
2094 else if (classname != "" && food_stage)
2095 {
2096 return FoodStage.GetAgents(null, food_stage, classname);
2097 }
2098 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2100 }
2101
2103 {
2106 {
2107 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2108 }
2109 else if (classname != "" && food_stage)
2110 {
2111 return FoodStage.GetDigestibility(null, food_stage, classname);
2112 }
2113 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2115 }
2116
2118 {
2121 {
2122 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2123 }
2124 else if (className != "" && foodStage)
2125 {
2126 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2127 }
2128 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2130 }
2131
2133 {
2143
2144 return profile;
2145 }
2146
2147
2148
2149
2151 {
2153 }
2154
2155
2157 {
2159 {
2161 }
2162
2163 return false;
2164 }
2165
2167 {
2169 {
2171 }
2172
2173 return false;
2174 }
2175
2177 {
2179 {
2181 }
2182
2183 return false;
2184 }
2185
2187 {
2189 {
2191 }
2192
2193 return false;
2194 }
2195
2197 {
2199 {
2201 }
2202
2203 return false;
2204 }
2205
2207 {
2209 {
2211 }
2212
2213 return false;
2214 }
2215
2216
2218 {
2220 }
2221
2223 {
2224 return GetFoodStage().GetNextFoodStageType( cooking_method );
2225 }
2226
2228 {
2229 return GetFoodStage().GetFoodStageName( food_stage_type );
2230 }
2231
2233 {
2234 return GetFoodStage().CanChangeToNewStage( cooking_method );
2235 }
2236
2237
2239 {
2240 if ( !source.GetFoodStage())
2241 return;
2246 }
2247
2250 {
2253 }
2254
2257 {
2258 switch (stageNew)
2259 {
2264 break;
2265
2268 break;
2269 }
2270 }
2271
2272
2273
2274
2275
2277 {
2279 }
2280
2282 {
2284
2285
2287 }
2288
2290 {
2292 {
2295 }
2296 }
2297
2298
2300 {
2302 if (player)
2303 {
2305 player.ServerReplaceItemInHandsWithNew(lambda);
2306 }
2307 else
2308 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2309 }
2310
2312 {
2314 }
2315
2317 {
2318 super.SetActions();
2319
2322 }
2323
2325 {
2326 #ifndef SERVER
2328 {
2330
2333 }
2334 #endif
2335 }
2336
2338 {
2339 #ifndef SERVER
2341 {
2345 }
2346 #endif
2347 }
2348
2350 {
2351 return false;
2352 }
2353
2355 {
2357 }
2358
2359 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2360 {
2362
2363 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2365 if ( hasRootAsPlayer )
2367
2368
2369
2370
2371
2372
2373
2375 {
2376
2378 {
2380 {
2384 break;
2385
2389 break;
2390
2394 break;
2395
2399 default:
2402 return;
2403 }
2404
2405
2406 }
2407
2409
2411 {
2413 {
2414
2416 {
2418 }
2420 {
2423 {
2425 }
2426 else
2427 {
2429 {
2431 }
2432 else
2433 {
2435 }
2436 }
2437 }
2438 }
2439 }
2440
2441 }
2443 {
2444
2446 {
2448 {
2452 break;
2453
2457 break;
2458
2462 break;
2463
2467 break;
2468
2471 default:
2474 return;
2475 }
2476 }
2477
2479
2481 {
2483 {
2484
2486 {
2488 }
2489 }
2490 }
2491 }
2493 {
2494
2496 {
2498 {
2502 break;
2503
2506 default:
2509 return;
2510 }
2511 }
2512
2514
2516 {
2518 {
2519
2521 {
2523 }
2524 }
2525 }
2526 }
2527 else
2528 {
2529
2531
2533 {
2536
2537 }
2538 else
2539 {
2541 {
2544 }
2545 }
2546 }
2547 }
2548
2550 {
2551 if (
GetGame().IsDedicatedServer())
2552 return;
2553
2555 {
2557 GetInventory().GetCurrentInventoryLocation(invLoc);
2559 {
2561 if (ptcMgr)
2562 {
2567 }
2568 }
2569 }
2571 {
2573 {
2576 return;
2577 }
2578
2580 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2582 {
2585 }
2586 }
2587 }
2588
2589 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2590 {
2591 super.GetDebugActions(outputList);
2592
2594 {
2598 }
2599 }
2600
2602 {
2603 super.OnAction(action_id, player, ctx);
2604
2606 {
2607 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2608 {
2610 if (food_stage_prev <= 0)
2611 {
2613 }
2615 return true;
2616 }
2617 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2618 {
2621 {
2623 }
2625 return true;
2626 }
2627
2628 }
2629
2630 #ifdef DIAG_DEVELOPER
2631 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2632 {
2633 PrintNutritionsData();
2634 return true;
2635 }
2636 #endif
2637
2638 return false;
2639 }
2640
2642 {
2643 string debug_output;
2644
2645 debug_output = super.GetDebugText();
2646
2649
2650 return debug_output;
2651 }
2652
2653
2654
2655
2656
2658 {
2659 float ret = super.GetBaitEffectivity();
2660
2662 {
2663 ret *= 0.5;
2664 }
2665
2666 return ret;
2667 }
2668
2670 {
2672 }
2673
2675 {
2677 }
2678
2680 {
2682 }
2683
2684 #ifdef DIAG_DEVELOPER
2685 private void PrintNutritionsData()
2686 {
2687 string nutritionsData = "";
2688
2691
2693 if (profile)
2694 {
2695 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2697 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2701 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2703
2706
2707 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2709 }
2710
2711 nutritionsData += "-----\n";
2712
2714 }
2715 #endif
2716
2718
2721 {
2723 }
2724}
2725
2727{
2729};
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.