1801{
1803
1811
1821
1823
1825 {
1827 {
1829
1831 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1832
1836 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1837 }
1838 }
1839
1841 {
1843
1845 }
1846
1848 {
1849 super.EEDelete(parent);
1850
1852
1855 }
1856
1858 {
1859 super.EEItemLocationChanged(oldLoc, newLoc);
1860
1863 {
1864 switch (oldLoc.GetParent().GetType())
1865 {
1866 case "FryingPan":
1867 case "Pot":
1868 case "Cauldron":
1869 case "SharpWoodenStick":
1871 break;
1872 }
1873
1876 {
1878 }
1879 }
1880
1881 if (oldLoc.IsValid())
1883
1886 }
1887
1889 {
1892 }
1893
1895 {
1898
1899 return true;
1900 }
1901
1903 {
1905 {
1907 }
1908 }
1909
1912 {
1913 int foodStageType;
1914
1916 if (foodStage)
1917 foodStageType = foodStage.GetFoodStageType();
1918
1923
1924 return agentsIn;
1925 }
1926
1927
1929 {
1930 return false;
1931 }
1932
1934 {
1935 return false;
1936 }
1937
1939 {
1941 {
1943 {
1946
1949
1950 default:
1951 return super.GetTemperatureFreezeTime();
1952 }
1953 }
1954
1955 return super.GetTemperatureFreezeTime();
1956 }
1957
1959 {
1961 {
1963 {
1966
1969
1970 default:
1971 return super.GetTemperatureThawTime();
1972 }
1973 }
1974
1975 return super.GetTemperatureThawTime();
1976 }
1977
1979 {
1981 }
1982
1983
1984
1985
1987 {
1988 SetSynchDirty();
1989 }
1990
1992 {
1993 super.OnVariablesSynchronized();
1994
1995
1996
1997
1999 {
2001 }
2002 else
2003 {
2005 }
2006
2009 }
2010
2011
2012
2013
2015 {
2018
2020 }
2021
2023 {
2024 string soundName = "";
2025
2028
2030 {
2032 }
2033 else
2034 {
2036 {
2038 {
2043 else
2044 soundName = "";
2045 break;
2046 }
2047
2049 {
2054 else
2055 soundName = "";
2056 break;
2057 }
2058
2060 {
2065 else
2066 soundName = "";
2067 break;
2068 }
2069
2070 default:
2071 soundName = "";
2072 break;
2073 }
2074
2076 {
2077 if (soundName == "")
2078 {
2080 }
2081 else
2082 {
2084 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2085 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2087 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2088 {
2090 }
2091 }
2092 }
2093 }
2094
2096 }
2097
2099 {
2102 }
2103
2104
2105
2106
2108 {
2109 super.OnStoreSave(ctx);
2110
2112 {
2114 }
2115
2116
2119 }
2120
2122 {
2123 if (!super.OnStoreLoad(ctx, version))
2124 return false;
2125
2127 {
2129 return false;
2130 }
2131
2132 if (version >= 115)
2133 {
2135 {
2137 return false;
2138 }
2140 {
2142 return false;
2143 }
2144 }
2145
2148
2149 return true;
2150 }
2151
2153 {
2154 super.AfterStoreLoad();
2155
2157 }
2158
2159
2161 {
2163 }
2164
2165
2167 {
2168 return false;
2169 }
2170
2172 {
2173 return false;
2174 }
2175
2177 {
2178 return false;
2179 }
2180
2182 {
2183 return false;
2184 }
2185
2186
2187
2188
2189
2191 {
2194 {
2195 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2196 }
2197 else if (classname != "" && food_stage)
2198 {
2199 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2200 }
2201 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2203
2204 }
2205
2207 {
2210 {
2212 }
2213 else if (classname != "" && food_stage)
2214 {
2215 return FoodStage.GetEnergy(null, food_stage, classname);
2216 }
2217 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2219 }
2220
2222 {
2225 {
2227 }
2228 else if (classname != "" && food_stage)
2229 {
2230 return FoodStage.GetWater(null, food_stage, classname);
2231 }
2232 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2234 }
2235
2237 {
2240 {
2241 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2242 }
2243 else if (classname != "" && food_stage)
2244 {
2245 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2246 }
2247 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2249
2250 }
2251
2253 {
2256 {
2257 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2258 }
2259 else if (classname != "" && food_stage)
2260 {
2261 return FoodStage.GetToxicity(null, food_stage, classname);
2262 }
2263 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2265 }
2266
2268 {
2271 {
2273 }
2274 else if (classname != "" && food_stage)
2275 {
2276 return FoodStage.GetAgents(null, food_stage, classname);
2277 }
2278 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2280 }
2281
2283 {
2286 {
2287 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2288 }
2289 else if (classname != "" && food_stage)
2290 {
2291 return FoodStage.GetDigestibility(null, food_stage, classname);
2292 }
2293 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2295 }
2296
2298 {
2301 {
2302 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2303 }
2304 else if (className != "" && foodStage)
2305 {
2306 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2307 }
2308 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2310 }
2311
2313 {
2323
2324 return profile;
2325 }
2326
2327
2328
2329
2331 {
2333 }
2334
2335
2337 {
2339 {
2341 }
2342
2343 return false;
2344 }
2345
2347 {
2349 {
2351 }
2352
2353 return false;
2354 }
2355
2357 {
2359 {
2361 }
2362
2363 return false;
2364 }
2365
2367 {
2369 {
2371 }
2372
2373 return false;
2374 }
2375
2377 {
2379 {
2381 }
2382
2383 return false;
2384 }
2385
2387 {
2389 {
2391 }
2392
2393 return false;
2394 }
2395
2396
2398 {
2400 }
2401
2403 {
2404 return GetFoodStage().GetNextFoodStageType( cooking_method );
2405 }
2406
2408 {
2409 return GetFoodStage().GetFoodStageName( food_stage_type );
2410 }
2411
2413 {
2414 return GetFoodStage().CanChangeToNewStage( cooking_method );
2415 }
2416
2417
2419 {
2420 if ( !source.GetFoodStage())
2421 return;
2426 }
2427
2430 {
2433 }
2434
2437 {
2438 switch (stageNew)
2439 {
2444 break;
2445
2448 break;
2449 }
2450 }
2451
2452
2453
2454
2455
2457 {
2459 }
2460
2462 {
2464
2465
2467 }
2468
2470 {
2472 {
2475 }
2476 }
2477
2478
2480 {
2482 if (player)
2483 {
2485 player.ServerReplaceItemInHandsWithNew(lambda);
2486 }
2487 else
2488 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2489 }
2490
2492 {
2494 }
2495
2497 {
2498 super.SetActions();
2499
2502 }
2503
2505 {
2506 #ifndef SERVER
2508 {
2510
2513 }
2514 #endif
2515 }
2516
2518 {
2519 #ifndef SERVER
2521 {
2525 }
2526 #endif
2527 }
2528
2530 {
2531 return false;
2532 }
2533
2535 {
2537 }
2538
2539 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2540 {
2542
2543 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2545 if ( hasRootAsPlayer )
2547
2548
2549
2550
2551
2552
2553
2555 {
2556
2558 {
2560 {
2564 break;
2565
2569 break;
2570
2574 break;
2575
2579 default:
2582 return;
2583 }
2584
2585
2586 }
2587
2589
2591 {
2593 {
2594
2596 {
2598 }
2600 {
2603 {
2605 }
2606 else
2607 {
2609 {
2611 }
2612 else
2613 {
2615 }
2616 }
2617 }
2618 }
2619 }
2620
2621 }
2623 {
2624
2626 {
2628 {
2632 break;
2633
2637 break;
2638
2642 break;
2643
2647 break;
2648
2651 default:
2654 return;
2655 }
2656 }
2657
2659
2661 {
2663 {
2664
2666 {
2668 }
2669 }
2670 }
2671 }
2673 {
2674
2676 {
2678 {
2682 break;
2683
2686 default:
2689 return;
2690 }
2691 }
2692
2694
2696 {
2698 {
2699
2701 {
2703 }
2704 }
2705 }
2706 }
2707 else
2708 {
2709
2711
2713 {
2716
2717 }
2718 else
2719 {
2721 {
2724 }
2725 }
2726 }
2727 }
2728
2730 {
2731 if (
GetGame().IsDedicatedServer())
2732 return;
2733
2735 {
2737 GetInventory().GetCurrentInventoryLocation(invLoc);
2739 {
2741 if (ptcMgr)
2742 {
2747 }
2748 }
2749 }
2751 {
2753 {
2756 return;
2757 }
2758
2760 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2762 {
2765 }
2766 }
2767 }
2768
2769 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2770 {
2772 {
2777 }
2778
2779 super.GetDebugActions(outputList);
2780 }
2781
2783 {
2784 super.OnAction(action_id, player, ctx);
2785
2787 {
2788 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2789 {
2791 if (food_stage_prev <= 0)
2792 {
2794 }
2796 return true;
2797 }
2798 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2799 {
2802 {
2804 }
2806 return true;
2807 }
2808
2809 }
2810
2811 #ifdef DIAG_DEVELOPER
2812 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2813 {
2814 PrintNutritionsData();
2815 return true;
2816 }
2817 #endif
2818
2819 return false;
2820 }
2821
2823 {
2824 string debug_output;
2825
2826 debug_output = super.GetDebugText();
2827
2830
2831 return debug_output;
2832 }
2833
2834
2835
2836
2837
2839 {
2840 float ret = super.GetBaitEffectivity();
2841
2843 {
2844 ret *= 0.5;
2845 }
2846
2847 return ret;
2848 }
2849
2851 {
2853 }
2854
2856 {
2858 }
2859
2861 {
2863 }
2864
2865 #ifdef DIAG_DEVELOPER
2866 private void PrintNutritionsData()
2867 {
2868 string nutritionsData = "";
2869
2872
2874 if (profile)
2875 {
2876 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2878 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2882 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2884
2887
2888 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2890 }
2891
2892 nutritionsData += "-----\n";
2893
2895 }
2896 #endif
2897
2899
2902 {
2904 }
2905}
2906
2908{
2910};
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.