1839{
1841
1849
1859
1861
1863 {
1865 {
1867
1869 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1870
1874 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1875 }
1876 }
1877
1879 {
1881
1883 }
1884
1886 {
1887 super.EEDelete(parent);
1888
1890
1893 }
1894
1896 {
1897 super.EEItemLocationChanged(oldLoc, newLoc);
1898
1901 {
1902 switch (oldLoc.GetParent().GetType())
1903 {
1904 case "FryingPan":
1905 case "Pot":
1906 case "Cauldron":
1907 case "SharpWoodenStick":
1909 break;
1910 }
1911
1914 {
1916 }
1917 }
1918
1919 if (oldLoc.IsValid())
1921
1924 }
1925
1927 {
1930 }
1931
1933 {
1936
1937 return true;
1938 }
1939
1941 {
1943 {
1945 }
1946 }
1947
1950 {
1951 int foodStageType;
1952
1954 if (foodStage)
1955 foodStageType = foodStage.GetFoodStageType();
1956
1961
1962 return agentsIn;
1963 }
1964
1965
1967 {
1968 return false;
1969 }
1970
1972 {
1973 return false;
1974 }
1975
1977 {
1979 {
1981 {
1984
1987
1988 default:
1989 return super.GetTemperatureFreezeTime();
1990 }
1991 }
1992
1993 return super.GetTemperatureFreezeTime();
1994 }
1995
1997 {
1999 {
2001 {
2004
2007
2008 default:
2009 return super.GetTemperatureThawTime();
2010 }
2011 }
2012
2013 return super.GetTemperatureThawTime();
2014 }
2015
2017 {
2019 }
2020
2021
2022
2023
2025 {
2026 SetSynchDirty();
2027 }
2028
2030 {
2031 super.OnVariablesSynchronized();
2032
2033
2034
2035
2037 {
2039 }
2040 else
2041 {
2043 }
2044
2047 }
2048
2049
2050
2051
2053 {
2056
2058 }
2059
2061 {
2062 string soundName = "";
2063
2066
2068 {
2070 }
2071 else
2072 {
2074 {
2076 {
2081 else
2082 soundName = "";
2083 break;
2084 }
2085
2087 {
2092 else
2093 soundName = "";
2094 break;
2095 }
2096
2098 {
2103 else
2104 soundName = "";
2105 break;
2106 }
2107
2108 default:
2109 soundName = "";
2110 break;
2111 }
2112
2114 {
2115 if (soundName == "")
2116 {
2118 }
2119 else
2120 {
2122 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2123 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2125 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2126 {
2128 }
2129 }
2130 }
2131 }
2132
2134 }
2135
2137 {
2140 }
2141
2142
2143
2144
2146 {
2147 super.OnStoreSave(ctx);
2148
2150 {
2152 }
2153
2154
2157 }
2158
2160 {
2161 if (!super.OnStoreLoad(ctx, version))
2162 return false;
2163
2165 {
2167 return false;
2168 }
2169
2170 if (version >= 115)
2171 {
2173 {
2175 return false;
2176 }
2178 {
2180 return false;
2181 }
2182 }
2183
2186
2187 return true;
2188 }
2189
2191 {
2192 super.AfterStoreLoad();
2193
2195 }
2196
2197
2199 {
2201 }
2202
2203
2205 {
2206 return false;
2207 }
2208
2210 {
2211 return false;
2212 }
2213
2215 {
2216 return false;
2217 }
2218
2220 {
2221 return false;
2222 }
2223
2224
2225
2226
2227
2229 {
2232 {
2233 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2234 }
2235 else if (classname != "" && food_stage)
2236 {
2237 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2238 }
2239 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2241
2242 }
2243
2245 {
2248 {
2250 }
2251 else if (classname != "" && food_stage)
2252 {
2253 return FoodStage.GetEnergy(null, food_stage, classname);
2254 }
2255 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2257 }
2258
2260 {
2263 {
2265 }
2266 else if (classname != "" && food_stage)
2267 {
2268 return FoodStage.GetWater(null, food_stage, classname);
2269 }
2270 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2272 }
2273
2275 {
2278 {
2279 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2280 }
2281 else if (classname != "" && food_stage)
2282 {
2283 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2284 }
2285 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2287
2288 }
2289
2291 {
2294 {
2295 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2296 }
2297 else if (classname != "" && food_stage)
2298 {
2299 return FoodStage.GetToxicity(null, food_stage, classname);
2300 }
2301 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2303 }
2304
2306 {
2309 {
2311 }
2312 else if (classname != "" && food_stage)
2313 {
2314 return FoodStage.GetAgents(null, food_stage, classname);
2315 }
2316 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2318 }
2319
2321 {
2324 {
2325 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2326 }
2327 else if (classname != "" && food_stage)
2328 {
2329 return FoodStage.GetDigestibility(null, food_stage, classname);
2330 }
2331 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2333 }
2334
2336 {
2339 {
2340 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2341 }
2342 else if (className != "" && foodStage)
2343 {
2344 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2345 }
2346 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2348 }
2349
2351 {
2361
2362 return profile;
2363 }
2364
2365
2366
2367
2369 {
2371 }
2372
2373
2375 {
2377 {
2379 }
2380
2381 return false;
2382 }
2383
2385 {
2387 {
2389 }
2390
2391 return false;
2392 }
2393
2395 {
2397 {
2399 }
2400
2401 return false;
2402 }
2403
2405 {
2407 {
2409 }
2410
2411 return false;
2412 }
2413
2415 {
2417 {
2419 }
2420
2421 return false;
2422 }
2423
2425 {
2427 {
2429 }
2430
2431 return false;
2432 }
2433
2434
2436 {
2438 }
2439
2441 {
2442 return GetFoodStage().GetNextFoodStageType( cooking_method );
2443 }
2444
2446 {
2447 return GetFoodStage().GetFoodStageName( food_stage_type );
2448 }
2449
2451 {
2452 return GetFoodStage().CanChangeToNewStage( cooking_method );
2453 }
2454
2455
2457 {
2458 if ( !source.GetFoodStage())
2459 return;
2464 }
2465
2468 {
2471 }
2472
2475 {
2476 switch (stageNew)
2477 {
2482 break;
2483
2486 break;
2487 }
2488 }
2489
2490
2491
2492
2493
2495 {
2497 }
2498
2500 {
2502
2503
2505 }
2506
2508 {
2510 {
2513 }
2514 }
2515
2516
2518 {
2520 if (player)
2521 {
2523 player.ServerReplaceItemInHandsWithNew(lambda);
2524 }
2525 else
2526 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2527 }
2528
2530 {
2532 }
2533
2535 {
2536 super.SetActions();
2537
2540 }
2541
2543 {
2544 #ifndef SERVER
2546 {
2548
2551 }
2552 #endif
2553 }
2554
2556 {
2557 #ifndef SERVER
2559 {
2563 }
2564 #endif
2565 }
2566
2568 {
2569 return false;
2570 }
2571
2573 {
2575 }
2576
2577 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2578 {
2580
2581 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2583 if ( hasRootAsPlayer )
2585
2586
2587
2588
2589
2590
2591
2593 {
2594
2596 {
2598 {
2602 break;
2603
2607 break;
2608
2612 break;
2613
2617 default:
2620 return;
2621 }
2622
2623
2624 }
2625
2627
2629 {
2631 {
2632
2634 {
2636 }
2638 {
2641 {
2643 }
2644 else
2645 {
2647 {
2649 }
2650 else
2651 {
2653 }
2654 }
2655 }
2656 }
2657 }
2658
2659 }
2661 {
2662
2664 {
2666 {
2670 break;
2671
2675 break;
2676
2680 break;
2681
2685 break;
2686
2689 default:
2692 return;
2693 }
2694 }
2695
2697
2699 {
2701 {
2702
2704 {
2706 }
2707 }
2708 }
2709 }
2711 {
2712
2714 {
2716 {
2720 break;
2721
2724 default:
2727 return;
2728 }
2729 }
2730
2732
2734 {
2736 {
2737
2739 {
2741 }
2742 }
2743 }
2744 }
2745 else
2746 {
2747
2749
2751 {
2754
2755 }
2756 else
2757 {
2759 {
2762 }
2763 }
2764 }
2765 }
2766
2768 {
2769 if (
GetGame().IsDedicatedServer())
2770 return;
2771
2773 {
2775 GetInventory().GetCurrentInventoryLocation(invLoc);
2777 {
2779 if (ptcMgr)
2780 {
2785 }
2786 }
2787 }
2789 {
2791 {
2794 return;
2795 }
2796
2798 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2800 {
2803 }
2804 }
2805 }
2806
2807 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2808 {
2810 {
2815 }
2816
2817 super.GetDebugActions(outputList);
2818 }
2819
2821 {
2822 super.OnAction(action_id, player, ctx);
2823
2825 {
2826 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2827 {
2829 if (food_stage_prev <= 0)
2830 {
2832 }
2834 return true;
2835 }
2836 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2837 {
2840 {
2842 }
2844 return true;
2845 }
2846
2847 }
2848
2849 #ifdef DIAG_DEVELOPER
2850 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2851 {
2852 PrintNutritionsData();
2853 return true;
2854 }
2855 #endif
2856
2857 return false;
2858 }
2859
2861 {
2862 string debug_output;
2863
2864 debug_output = super.GetDebugText();
2865
2868
2869 return debug_output;
2870 }
2871
2872
2873
2874
2875
2877 {
2878 float ret = super.GetBaitEffectivity();
2879
2881 {
2882 ret *= 0.5;
2883 }
2884
2885 return ret;
2886 }
2887
2889 {
2891 }
2892
2894 {
2896 }
2897
2899 {
2901 }
2902
2903 #ifdef DIAG_DEVELOPER
2904 private void PrintNutritionsData()
2905 {
2906 string nutritionsData = "";
2907
2910
2912 if (profile)
2913 {
2914 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2916 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2920 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2922
2925
2926 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2928 }
2929
2930 nutritionsData += "-----\n";
2931
2933 }
2934 #endif
2935
2937
2940 {
2942 }
2943}
2944
2946{
2948};
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.