1711{
1713
1721
1731
1733
1735 {
1737 {
1739
1741 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1742
1746 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1747 }
1748 }
1749
1751 {
1753
1755 }
1756
1758 {
1759 super.EEDelete(parent);
1760
1762
1765 }
1766
1768 {
1769 super.EEItemLocationChanged(oldLoc, newLoc);
1770
1773 {
1774 switch (oldLoc.GetParent().GetType())
1775 {
1776 case "FryingPan":
1777 case "Pot":
1778 case "Cauldron":
1779 case "SharpWoodenStick":
1781 break;
1782 }
1783
1786 {
1788 }
1789 }
1790
1791 if (oldLoc.IsValid())
1793
1796 }
1797
1799 {
1802 }
1803
1805 {
1808
1809 return true;
1810 }
1811
1813 {
1815 {
1817 }
1818 }
1819
1822 {
1823 int foodStageType;
1824
1826 if (foodStage)
1827 foodStageType = foodStage.GetFoodStageType();
1828
1833
1834 return agentsIn;
1835 }
1836
1837
1839 {
1840 return false;
1841 }
1842
1844 {
1845 return false;
1846 }
1847
1849 {
1851 {
1853 {
1856
1859
1860 default:
1861 return super.GetTemperatureFreezeTime();
1862 }
1863 }
1864
1865 return super.GetTemperatureFreezeTime();
1866 }
1867
1869 {
1871 {
1873 {
1876
1879
1880 default:
1881 return super.GetTemperatureThawTime();
1882 }
1883 }
1884
1885 return super.GetTemperatureThawTime();
1886 }
1887
1889 {
1891 }
1892
1893
1894
1895
1897 {
1898 SetSynchDirty();
1899 }
1900
1902 {
1903 super.OnVariablesSynchronized();
1904
1905
1906
1907
1909 {
1911 }
1912 else
1913 {
1915 }
1916
1919 }
1920
1921
1922
1923
1925 {
1928
1930 }
1931
1933 {
1934 string soundName = "";
1935
1938
1940 {
1942 }
1943 else
1944 {
1946 {
1948 {
1953 else
1954 soundName = "";
1955 break;
1956 }
1957
1959 {
1964 else
1965 soundName = "";
1966 break;
1967 }
1968
1970 {
1975 else
1976 soundName = "";
1977 break;
1978 }
1979
1980 default:
1981 soundName = "";
1982 break;
1983 }
1984
1986 {
1987 if (soundName == "")
1988 {
1990 }
1991 else
1992 {
1994 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1995 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1997 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1998 {
2000 }
2001 }
2002 }
2003 }
2004
2006 }
2007
2009 {
2012 }
2013
2014
2015
2016
2018 {
2019 super.OnStoreSave(ctx);
2020
2022 {
2024 }
2025
2026
2029 }
2030
2032 {
2033 if (!super.OnStoreLoad(ctx, version))
2034 return false;
2035
2037 {
2039 return false;
2040 }
2041
2042 if (version >= 115)
2043 {
2045 {
2047 return false;
2048 }
2050 {
2052 return false;
2053 }
2054 }
2055
2058
2059 return true;
2060 }
2061
2063 {
2064 super.AfterStoreLoad();
2065
2067 }
2068
2069
2071 {
2073 }
2074
2075
2077 {
2078 return false;
2079 }
2080
2082 {
2083 return false;
2084 }
2085
2087 {
2088 return false;
2089 }
2090
2092 {
2093 return false;
2094 }
2095
2096
2097
2098
2099
2101 {
2104 {
2105 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2106 }
2107 else if (classname != "" && food_stage)
2108 {
2109 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2110 }
2111 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2113
2114 }
2115
2117 {
2120 {
2122 }
2123 else if (classname != "" && food_stage)
2124 {
2125 return FoodStage.GetEnergy(null, food_stage, classname);
2126 }
2127 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2129 }
2130
2132 {
2135 {
2137 }
2138 else if (classname != "" && food_stage)
2139 {
2140 return FoodStage.GetWater(null, food_stage, classname);
2141 }
2142 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2144 }
2145
2147 {
2150 {
2151 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2152 }
2153 else if (classname != "" && food_stage)
2154 {
2155 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2156 }
2157 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2159
2160 }
2161
2163 {
2166 {
2167 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2168 }
2169 else if (classname != "" && food_stage)
2170 {
2171 return FoodStage.GetToxicity(null, food_stage, classname);
2172 }
2173 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2175 }
2176
2178 {
2181 {
2183 }
2184 else if (classname != "" && food_stage)
2185 {
2186 return FoodStage.GetAgents(null, food_stage, classname);
2187 }
2188 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2190 }
2191
2193 {
2196 {
2197 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2198 }
2199 else if (classname != "" && food_stage)
2200 {
2201 return FoodStage.GetDigestibility(null, food_stage, classname);
2202 }
2203 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2205 }
2206
2208 {
2211 {
2212 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2213 }
2214 else if (className != "" && foodStage)
2215 {
2216 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2217 }
2218 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2220 }
2221
2223 {
2233
2234 return profile;
2235 }
2236
2237
2238
2239
2241 {
2243 }
2244
2245
2247 {
2249 {
2251 }
2252
2253 return false;
2254 }
2255
2257 {
2259 {
2261 }
2262
2263 return false;
2264 }
2265
2267 {
2269 {
2271 }
2272
2273 return false;
2274 }
2275
2277 {
2279 {
2281 }
2282
2283 return false;
2284 }
2285
2287 {
2289 {
2291 }
2292
2293 return false;
2294 }
2295
2297 {
2299 {
2301 }
2302
2303 return false;
2304 }
2305
2306
2308 {
2310 }
2311
2313 {
2314 return GetFoodStage().GetNextFoodStageType( cooking_method );
2315 }
2316
2318 {
2319 return GetFoodStage().GetFoodStageName( food_stage_type );
2320 }
2321
2323 {
2324 return GetFoodStage().CanChangeToNewStage( cooking_method );
2325 }
2326
2327
2329 {
2330 if ( !source.GetFoodStage())
2331 return;
2336 }
2337
2340 {
2343 }
2344
2347 {
2348 switch (stageNew)
2349 {
2354 break;
2355
2358 break;
2359 }
2360 }
2361
2362
2363
2364
2365
2367 {
2369 }
2370
2372 {
2374
2375
2377 }
2378
2380 {
2382 {
2385 }
2386 }
2387
2388
2390 {
2392 if (player)
2393 {
2395 player.ServerReplaceItemInHandsWithNew(lambda);
2396 }
2397 else
2398 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2399 }
2400
2402 {
2404 }
2405
2407 {
2408 super.SetActions();
2409
2412 }
2413
2415 {
2416 #ifndef SERVER
2418 {
2420
2423 }
2424 #endif
2425 }
2426
2428 {
2429 #ifndef SERVER
2431 {
2435 }
2436 #endif
2437 }
2438
2440 {
2441 return false;
2442 }
2443
2445 {
2447 }
2448
2449 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2450 {
2452
2453 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2455 if ( hasRootAsPlayer )
2457
2458
2459
2460
2461
2462
2463
2465 {
2466
2468 {
2470 {
2474 break;
2475
2479 break;
2480
2484 break;
2485
2489 default:
2492 return;
2493 }
2494
2495
2496 }
2497
2499
2501 {
2503 {
2504
2506 {
2508 }
2510 {
2513 {
2515 }
2516 else
2517 {
2519 {
2521 }
2522 else
2523 {
2525 }
2526 }
2527 }
2528 }
2529 }
2530
2531 }
2533 {
2534
2536 {
2538 {
2542 break;
2543
2547 break;
2548
2552 break;
2553
2557 break;
2558
2561 default:
2564 return;
2565 }
2566 }
2567
2569
2571 {
2573 {
2574
2576 {
2578 }
2579 }
2580 }
2581 }
2583 {
2584
2586 {
2588 {
2592 break;
2593
2596 default:
2599 return;
2600 }
2601 }
2602
2604
2606 {
2608 {
2609
2611 {
2613 }
2614 }
2615 }
2616 }
2617 else
2618 {
2619
2621
2623 {
2626
2627 }
2628 else
2629 {
2631 {
2634 }
2635 }
2636 }
2637 }
2638
2640 {
2641 if (
GetGame().IsDedicatedServer())
2642 return;
2643
2645 {
2647 GetInventory().GetCurrentInventoryLocation(invLoc);
2649 {
2651 if (ptcMgr)
2652 {
2657 }
2658 }
2659 }
2661 {
2663 {
2666 return;
2667 }
2668
2670 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2672 {
2675 }
2676 }
2677 }
2678
2679 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2680 {
2681 super.GetDebugActions(outputList);
2682
2684 {
2688 }
2689 }
2690
2692 {
2693 super.OnAction(action_id, player, ctx);
2694
2696 {
2697 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2698 {
2700 if (food_stage_prev <= 0)
2701 {
2703 }
2705 return true;
2706 }
2707 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2708 {
2711 {
2713 }
2715 return true;
2716 }
2717
2718 }
2719
2720 #ifdef DIAG_DEVELOPER
2721 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2722 {
2723 PrintNutritionsData();
2724 return true;
2725 }
2726 #endif
2727
2728 return false;
2729 }
2730
2732 {
2733 string debug_output;
2734
2735 debug_output = super.GetDebugText();
2736
2739
2740 return debug_output;
2741 }
2742
2743
2744
2745
2746
2748 {
2749 float ret = super.GetBaitEffectivity();
2750
2752 {
2753 ret *= 0.5;
2754 }
2755
2756 return ret;
2757 }
2758
2760 {
2762 }
2763
2765 {
2767 }
2768
2770 {
2772 }
2773
2774 #ifdef DIAG_DEVELOPER
2775 private void PrintNutritionsData()
2776 {
2777 string nutritionsData = "";
2778
2781
2783 if (profile)
2784 {
2785 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2787 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2791 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2793
2796
2797 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2799 }
2800
2801 nutritionsData += "-----\n";
2802
2804 }
2805 #endif
2806
2808
2811 {
2813 }
2814}
2815
2817{
2819};
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.