1843{
1845
1853
1863
1865
1867 {
1869 {
1871
1873 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1874
1878 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1879 }
1880 }
1881
1883 {
1885
1887 }
1888
1890 {
1891 super.EEDelete(parent);
1892
1894
1897 }
1898
1900 {
1901 super.EEItemLocationChanged(oldLoc, newLoc);
1902
1905 {
1906 switch (oldLoc.GetParent().GetType())
1907 {
1908 case "FryingPan":
1909 case "Pot":
1910 case "Cauldron":
1911 case "SharpWoodenStick":
1913 break;
1914 }
1915
1918 {
1920 }
1921 }
1922
1923 if (oldLoc.IsValid())
1925
1928 }
1929
1931 {
1934 }
1935
1937 {
1940
1941 return true;
1942 }
1943
1945 {
1947 {
1949 }
1950 }
1951
1954 {
1955 int foodStageType;
1956
1958 if (foodStage)
1959 foodStageType = foodStage.GetFoodStageType();
1960
1965
1966 return agentsIn;
1967 }
1968
1969
1971 {
1972 return false;
1973 }
1974
1976 {
1977 return false;
1978 }
1979
1981 {
1983 {
1985 {
1988
1991
1992 default:
1993 return super.GetTemperatureFreezeTime();
1994 }
1995 }
1996
1997 return super.GetTemperatureFreezeTime();
1998 }
1999
2001 {
2003 {
2005 {
2008
2011
2012 default:
2013 return super.GetTemperatureThawTime();
2014 }
2015 }
2016
2017 return super.GetTemperatureThawTime();
2018 }
2019
2021 {
2023 }
2024
2025
2026
2027
2029 {
2030 SetSynchDirty();
2031 }
2032
2034 {
2035 super.OnVariablesSynchronized();
2036
2037
2038
2039
2041 {
2043 }
2044 else
2045 {
2047 }
2048
2051 }
2052
2053
2054
2055
2057 {
2060
2062 }
2063
2065 {
2066 string soundName = "";
2067
2070
2072 {
2074 }
2075 else
2076 {
2078 {
2080 {
2085 else
2086 soundName = "";
2087 break;
2088 }
2089
2091 {
2096 else
2097 soundName = "";
2098 break;
2099 }
2100
2102 {
2107 else
2108 soundName = "";
2109 break;
2110 }
2111
2112 default:
2113 soundName = "";
2114 break;
2115 }
2116
2118 {
2119 if (soundName == "")
2120 {
2122 }
2123 else
2124 {
2126 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2127 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2129 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2130 {
2132 }
2133 }
2134 }
2135 }
2136
2138 }
2139
2141 {
2144 }
2145
2146
2147
2148
2150 {
2151 super.OnStoreSave(ctx);
2152
2154 {
2156 }
2157
2158
2161 }
2162
2164 {
2165 if (!super.OnStoreLoad(ctx, version))
2166 return false;
2167
2169 {
2171 return false;
2172 }
2173
2174 if (version >= 115)
2175 {
2177 {
2179 return false;
2180 }
2182 {
2184 return false;
2185 }
2186 }
2187
2190
2191 return true;
2192 }
2193
2195 {
2196 super.AfterStoreLoad();
2197
2199 }
2200
2201
2203 {
2205 }
2206
2207
2209 {
2210 return false;
2211 }
2212
2214 {
2215 return false;
2216 }
2217
2219 {
2220 return false;
2221 }
2222
2224 {
2225 return false;
2226 }
2227
2228
2229
2230
2231
2233 {
2236 {
2237 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2238 }
2239 else if (classname != "" && food_stage)
2240 {
2241 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2242 }
2243 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2245
2246 }
2247
2249 {
2252 {
2254 }
2255 else if (classname != "" && food_stage)
2256 {
2257 return FoodStage.GetEnergy(null, food_stage, classname);
2258 }
2259 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2261 }
2262
2264 {
2267 {
2269 }
2270 else if (classname != "" && food_stage)
2271 {
2272 return FoodStage.GetWater(null, food_stage, classname);
2273 }
2274 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2276 }
2277
2279 {
2282 {
2283 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2284 }
2285 else if (classname != "" && food_stage)
2286 {
2287 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2288 }
2289 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2291
2292 }
2293
2295 {
2298 {
2299 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2300 }
2301 else if (classname != "" && food_stage)
2302 {
2303 return FoodStage.GetToxicity(null, food_stage, classname);
2304 }
2305 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2307 }
2308
2310 {
2313 {
2315 }
2316 else if (classname != "" && food_stage)
2317 {
2318 return FoodStage.GetAgents(null, food_stage, classname);
2319 }
2320 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2322 }
2323
2325 {
2328 {
2329 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2330 }
2331 else if (classname != "" && food_stage)
2332 {
2333 return FoodStage.GetDigestibility(null, food_stage, classname);
2334 }
2335 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2337 }
2338
2340 {
2343 {
2344 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2345 }
2346 else if (className != "" && foodStage)
2347 {
2348 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2349 }
2350 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2352 }
2353
2355 {
2365
2366 return profile;
2367 }
2368
2369
2370
2371
2373 {
2375 }
2376
2377
2379 {
2381 {
2383 }
2384
2385 return false;
2386 }
2387
2389 {
2391 {
2393 }
2394
2395 return false;
2396 }
2397
2399 {
2401 {
2403 }
2404
2405 return false;
2406 }
2407
2409 {
2411 {
2413 }
2414
2415 return false;
2416 }
2417
2419 {
2421 {
2423 }
2424
2425 return false;
2426 }
2427
2429 {
2431 {
2433 }
2434
2435 return false;
2436 }
2437
2438
2440 {
2442 }
2443
2445 {
2446 return GetFoodStage().GetNextFoodStageType( cooking_method );
2447 }
2448
2450 {
2451 return GetFoodStage().GetFoodStageName( food_stage_type );
2452 }
2453
2455 {
2456 return GetFoodStage().CanChangeToNewStage( cooking_method );
2457 }
2458
2459
2461 {
2462 if ( !source.GetFoodStage())
2463 return;
2468 }
2469
2472 {
2475 }
2476
2479 {
2480 switch (stageNew)
2481 {
2486 break;
2487
2490 break;
2491 }
2492 }
2493
2494
2495
2496
2497
2499 {
2501 }
2502
2504 {
2506
2507
2509 }
2510
2512 {
2514 {
2517 }
2518 }
2519
2520
2522 {
2524 if (player)
2525 {
2527 player.ServerReplaceItemInHandsWithNew(lambda);
2528 }
2529 else
2530 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2531 }
2532
2534 {
2536 }
2537
2539 {
2540 super.SetActions();
2541
2544 }
2545
2547 {
2548 #ifndef SERVER
2550 {
2552
2555 }
2556 #endif
2557 }
2558
2560 {
2561 #ifndef SERVER
2563 {
2567 }
2568 #endif
2569 }
2570
2572 {
2573 return false;
2574 }
2575
2577 {
2579 }
2580
2581 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2582 {
2584
2585 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2587 if ( hasRootAsPlayer )
2589
2590
2591
2592
2593
2594
2595
2597 {
2598
2600 {
2602 {
2606 break;
2607
2611 break;
2612
2616 break;
2617
2621 default:
2624 return;
2625 }
2626
2627
2628 }
2629
2631
2633 {
2635 {
2636
2638 {
2640 }
2642 {
2645 {
2647 }
2648 else
2649 {
2651 {
2653 }
2654 else
2655 {
2657 }
2658 }
2659 }
2660 }
2661 }
2662
2663 }
2665 {
2666
2668 {
2670 {
2674 break;
2675
2679 break;
2680
2684 break;
2685
2689 break;
2690
2693 default:
2696 return;
2697 }
2698 }
2699
2701
2703 {
2705 {
2706
2708 {
2710 }
2711 }
2712 }
2713 }
2715 {
2716
2718 {
2720 {
2724 break;
2725
2728 default:
2731 return;
2732 }
2733 }
2734
2736
2738 {
2740 {
2741
2743 {
2745 }
2746 }
2747 }
2748 }
2749 else
2750 {
2751
2753
2755 {
2758
2759 }
2760 else
2761 {
2763 {
2766 }
2767 }
2768 }
2769 }
2770
2772 {
2773 if (
GetGame().IsDedicatedServer())
2774 return;
2775
2777 {
2779 GetInventory().GetCurrentInventoryLocation(invLoc);
2781 {
2783 if (ptcMgr)
2784 {
2789 }
2790 }
2791 }
2793 {
2795 {
2798 return;
2799 }
2800
2802 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2804 {
2807 }
2808 }
2809 }
2810
2811 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2812 {
2813 super.GetDebugActions(outputList);
2814
2816 {
2820 }
2821 }
2822
2824 {
2825 super.OnAction(action_id, player, ctx);
2826
2828 {
2829 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2830 {
2832 if (food_stage_prev <= 0)
2833 {
2835 }
2837 return true;
2838 }
2839 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2840 {
2843 {
2845 }
2847 return true;
2848 }
2849
2850 }
2851
2852 #ifdef DIAG_DEVELOPER
2853 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2854 {
2855 PrintNutritionsData();
2856 return true;
2857 }
2858 #endif
2859
2860 return false;
2861 }
2862
2864 {
2865 string debug_output;
2866
2867 debug_output = super.GetDebugText();
2868
2871
2872 return debug_output;
2873 }
2874
2875
2876
2877
2878
2880 {
2881 float ret = super.GetBaitEffectivity();
2882
2884 {
2885 ret *= 0.5;
2886 }
2887
2888 return ret;
2889 }
2890
2892 {
2894 }
2895
2897 {
2899 }
2900
2902 {
2904 }
2905
2906 #ifdef DIAG_DEVELOPER
2907 private void PrintNutritionsData()
2908 {
2909 string nutritionsData = "";
2910
2913
2915 if (profile)
2916 {
2917 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2919 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2923 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2925
2928
2929 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2931 }
2932
2933 nutritionsData += "-----\n";
2934
2936 }
2937 #endif
2938
2940
2943 {
2945 }
2946}
2947
2949{
2951};
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.