1827{
1829
1837
1847
1849
1851 {
1853 {
1855
1857 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1858
1862 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1863 }
1864 }
1865
1867 {
1869
1871 }
1872
1874 {
1875 super.EEDelete(parent);
1876
1878
1881 }
1882
1884 {
1885 super.EEItemLocationChanged(oldLoc, newLoc);
1886
1889 {
1890 switch (oldLoc.GetParent().GetType())
1891 {
1892 case "FryingPan":
1893 case "Pot":
1894 case "Cauldron":
1895 case "SharpWoodenStick":
1897 break;
1898 }
1899
1902 {
1904 }
1905 }
1906
1907 if (oldLoc.IsValid())
1909
1912 }
1913
1915 {
1918 }
1919
1921 {
1924
1925 return true;
1926 }
1927
1929 {
1931 {
1933 }
1934 }
1935
1938 {
1939 int foodStageType;
1940
1942 if (foodStage)
1943 foodStageType = foodStage.GetFoodStageType();
1944
1949
1950 return agentsIn;
1951 }
1952
1953
1955 {
1956 return false;
1957 }
1958
1960 {
1961 return false;
1962 }
1963
1965 {
1967 {
1969 {
1972
1975
1976 default:
1977 return super.GetTemperatureFreezeTime();
1978 }
1979 }
1980
1981 return super.GetTemperatureFreezeTime();
1982 }
1983
1985 {
1987 {
1989 {
1992
1995
1996 default:
1997 return super.GetTemperatureThawTime();
1998 }
1999 }
2000
2001 return super.GetTemperatureThawTime();
2002 }
2003
2005 {
2007 }
2008
2009
2010
2011
2013 {
2014 SetSynchDirty();
2015 }
2016
2018 {
2019 super.OnVariablesSynchronized();
2020
2021
2022
2023
2025 {
2027 }
2028 else
2029 {
2031 }
2032
2035 }
2036
2037
2038
2039
2041 {
2044
2046 }
2047
2049 {
2050 string soundName = "";
2051
2054
2056 {
2058 }
2059 else
2060 {
2062 {
2064 {
2069 else
2070 soundName = "";
2071 break;
2072 }
2073
2075 {
2080 else
2081 soundName = "";
2082 break;
2083 }
2084
2086 {
2091 else
2092 soundName = "";
2093 break;
2094 }
2095
2096 default:
2097 soundName = "";
2098 break;
2099 }
2100
2102 {
2103 if (soundName == "")
2104 {
2106 }
2107 else
2108 {
2110 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2111 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2113 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2114 {
2116 }
2117 }
2118 }
2119 }
2120
2122 }
2123
2125 {
2128 }
2129
2130
2131
2132
2134 {
2135 super.OnStoreSave(ctx);
2136
2138 {
2140 }
2141
2142
2145 }
2146
2148 {
2149 if (!super.OnStoreLoad(ctx, version))
2150 return false;
2151
2153 {
2155 return false;
2156 }
2157
2158 if (version >= 115)
2159 {
2161 {
2163 return false;
2164 }
2166 {
2168 return false;
2169 }
2170 }
2171
2174
2175 return true;
2176 }
2177
2179 {
2180 super.AfterStoreLoad();
2181
2183 }
2184
2185
2187 {
2189 }
2190
2191
2193 {
2194 return false;
2195 }
2196
2198 {
2199 return false;
2200 }
2201
2203 {
2204 return false;
2205 }
2206
2208 {
2209 return false;
2210 }
2211
2212
2213
2214
2215
2217 {
2220 {
2221 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2222 }
2223 else if (classname != "" && food_stage)
2224 {
2225 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2226 }
2227 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2229
2230 }
2231
2233 {
2236 {
2238 }
2239 else if (classname != "" && food_stage)
2240 {
2241 return FoodStage.GetEnergy(null, food_stage, classname);
2242 }
2243 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2245 }
2246
2248 {
2251 {
2253 }
2254 else if (classname != "" && food_stage)
2255 {
2256 return FoodStage.GetWater(null, food_stage, classname);
2257 }
2258 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2260 }
2261
2263 {
2266 {
2267 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2268 }
2269 else if (classname != "" && food_stage)
2270 {
2271 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2272 }
2273 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2275
2276 }
2277
2279 {
2282 {
2283 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2284 }
2285 else if (classname != "" && food_stage)
2286 {
2287 return FoodStage.GetToxicity(null, food_stage, classname);
2288 }
2289 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2291 }
2292
2294 {
2297 {
2299 }
2300 else if (classname != "" && food_stage)
2301 {
2302 return FoodStage.GetAgents(null, food_stage, classname);
2303 }
2304 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2306 }
2307
2309 {
2312 {
2313 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2314 }
2315 else if (classname != "" && food_stage)
2316 {
2317 return FoodStage.GetDigestibility(null, food_stage, classname);
2318 }
2319 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2321 }
2322
2324 {
2327 {
2328 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2329 }
2330 else if (className != "" && foodStage)
2331 {
2332 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2333 }
2334 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2336 }
2337
2339 {
2349
2350 return profile;
2351 }
2352
2353
2354
2355
2357 {
2359 }
2360
2361
2363 {
2365 {
2367 }
2368
2369 return false;
2370 }
2371
2373 {
2375 {
2377 }
2378
2379 return false;
2380 }
2381
2383 {
2385 {
2387 }
2388
2389 return false;
2390 }
2391
2393 {
2395 {
2397 }
2398
2399 return false;
2400 }
2401
2403 {
2405 {
2407 }
2408
2409 return false;
2410 }
2411
2413 {
2415 {
2417 }
2418
2419 return false;
2420 }
2421
2422
2424 {
2426 }
2427
2429 {
2430 return GetFoodStage().GetNextFoodStageType( cooking_method );
2431 }
2432
2434 {
2435 return GetFoodStage().GetFoodStageName( food_stage_type );
2436 }
2437
2439 {
2440 return GetFoodStage().CanChangeToNewStage( cooking_method );
2441 }
2442
2443
2445 {
2446 if ( !source.GetFoodStage())
2447 return;
2452 }
2453
2456 {
2459 }
2460
2463 {
2464 switch (stageNew)
2465 {
2470 break;
2471
2474 break;
2475 }
2476 }
2477
2478
2479
2480
2481
2483 {
2485 }
2486
2488 {
2490
2491
2493 }
2494
2496 {
2498 {
2501 }
2502 }
2503
2504
2506 {
2508 if (player)
2509 {
2511 player.ServerReplaceItemInHandsWithNew(lambda);
2512 }
2513 else
2514 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2515 }
2516
2518 {
2520 }
2521
2523 {
2524 super.SetActions();
2525
2528 }
2529
2531 {
2532 #ifndef SERVER
2534 {
2536
2539 }
2540 #endif
2541 }
2542
2544 {
2545 #ifndef SERVER
2547 {
2551 }
2552 #endif
2553 }
2554
2556 {
2557 return false;
2558 }
2559
2561 {
2563 }
2564
2565 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2566 {
2568
2569 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2571 if ( hasRootAsPlayer )
2573
2574
2575
2576
2577
2578
2579
2581 {
2582
2584 {
2586 {
2590 break;
2591
2595 break;
2596
2600 break;
2601
2605 default:
2608 return;
2609 }
2610
2611
2612 }
2613
2615
2617 {
2619 {
2620
2622 {
2624 }
2626 {
2629 {
2631 }
2632 else
2633 {
2635 {
2637 }
2638 else
2639 {
2641 }
2642 }
2643 }
2644 }
2645 }
2646
2647 }
2649 {
2650
2652 {
2654 {
2658 break;
2659
2663 break;
2664
2668 break;
2669
2673 break;
2674
2677 default:
2680 return;
2681 }
2682 }
2683
2685
2687 {
2689 {
2690
2692 {
2694 }
2695 }
2696 }
2697 }
2699 {
2700
2702 {
2704 {
2708 break;
2709
2712 default:
2715 return;
2716 }
2717 }
2718
2720
2722 {
2724 {
2725
2727 {
2729 }
2730 }
2731 }
2732 }
2733 else
2734 {
2735
2737
2739 {
2742
2743 }
2744 else
2745 {
2747 {
2750 }
2751 }
2752 }
2753 }
2754
2756 {
2757 if (
GetGame().IsDedicatedServer())
2758 return;
2759
2761 {
2763 GetInventory().GetCurrentInventoryLocation(invLoc);
2765 {
2767 if (ptcMgr)
2768 {
2773 }
2774 }
2775 }
2777 {
2779 {
2782 return;
2783 }
2784
2786 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2788 {
2791 }
2792 }
2793 }
2794
2795 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2796 {
2798 {
2803 }
2804
2805 super.GetDebugActions(outputList);
2806 }
2807
2809 {
2810 super.OnAction(action_id, player, ctx);
2811
2813 {
2814 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2815 {
2817 if (food_stage_prev <= 0)
2818 {
2820 }
2822 return true;
2823 }
2824 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2825 {
2828 {
2830 }
2832 return true;
2833 }
2834
2835 }
2836
2837 #ifdef DIAG_DEVELOPER
2838 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2839 {
2840 PrintNutritionsData();
2841 return true;
2842 }
2843 #endif
2844
2845 return false;
2846 }
2847
2849 {
2850 string debug_output;
2851
2852 debug_output = super.GetDebugText();
2853
2856
2857 return debug_output;
2858 }
2859
2860
2861
2862
2863
2865 {
2866 float ret = super.GetBaitEffectivity();
2867
2869 {
2870 ret *= 0.5;
2871 }
2872
2873 return ret;
2874 }
2875
2877 {
2879 }
2880
2882 {
2884 }
2885
2887 {
2889 }
2890
2891 #ifdef DIAG_DEVELOPER
2892 private void PrintNutritionsData()
2893 {
2894 string nutritionsData = "";
2895
2898
2900 if (profile)
2901 {
2902 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2904 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2908 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2910
2913
2914 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2916 }
2917
2918 nutritionsData += "-----\n";
2919
2921 }
2922 #endif
2923
2925
2928 {
2930 }
2931}
2932
2934{
2936};
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.