1783{
1785
1793
1803
1805
1807 {
1809 {
1811
1813 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1814
1818 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1819 }
1820 }
1821
1823 {
1825
1827 }
1828
1830 {
1831 super.EEDelete(parent);
1832
1834
1837 }
1838
1840 {
1841 super.EEItemLocationChanged(oldLoc, newLoc);
1842
1845 {
1846 switch (oldLoc.GetParent().GetType())
1847 {
1848 case "FryingPan":
1849 case "Pot":
1850 case "Cauldron":
1851 case "SharpWoodenStick":
1853 break;
1854 }
1855
1858 {
1860 }
1861 }
1862
1863 if (oldLoc.IsValid())
1865
1868 }
1869
1871 {
1874 }
1875
1877 {
1880
1881 return true;
1882 }
1883
1885 {
1887 {
1889 }
1890 }
1891
1894 {
1895 int foodStageType;
1896
1898 if (foodStage)
1899 foodStageType = foodStage.GetFoodStageType();
1900
1905
1906 return agentsIn;
1907 }
1908
1909
1911 {
1912 return false;
1913 }
1914
1916 {
1917 return false;
1918 }
1919
1921 {
1923 {
1925 {
1928
1931
1932 default:
1933 return super.GetTemperatureFreezeTime();
1934 }
1935 }
1936
1937 return super.GetTemperatureFreezeTime();
1938 }
1939
1941 {
1943 {
1945 {
1948
1951
1952 default:
1953 return super.GetTemperatureThawTime();
1954 }
1955 }
1956
1957 return super.GetTemperatureThawTime();
1958 }
1959
1961 {
1963 }
1964
1965
1966
1967
1969 {
1970 SetSynchDirty();
1971 }
1972
1974 {
1975 super.OnVariablesSynchronized();
1976
1977
1978
1979
1981 {
1983 }
1984 else
1985 {
1987 }
1988
1991 }
1992
1993
1994
1995
1997 {
2000
2002 }
2003
2005 {
2006 string soundName = "";
2007
2010
2012 {
2014 }
2015 else
2016 {
2018 {
2020 {
2025 else
2026 soundName = "";
2027 break;
2028 }
2029
2031 {
2036 else
2037 soundName = "";
2038 break;
2039 }
2040
2042 {
2047 else
2048 soundName = "";
2049 break;
2050 }
2051
2052 default:
2053 soundName = "";
2054 break;
2055 }
2056
2058 {
2059 if (soundName == "")
2060 {
2062 }
2063 else
2064 {
2066 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2067 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2069 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2070 {
2072 }
2073 }
2074 }
2075 }
2076
2078 }
2079
2081 {
2084 }
2085
2086
2087
2088
2090 {
2091 super.OnStoreSave(ctx);
2092
2094 {
2096 }
2097
2098
2101 }
2102
2104 {
2105 if (!super.OnStoreLoad(ctx, version))
2106 return false;
2107
2109 {
2111 return false;
2112 }
2113
2114 if (version >= 115)
2115 {
2117 {
2119 return false;
2120 }
2122 {
2124 return false;
2125 }
2126 }
2127
2130
2131 return true;
2132 }
2133
2135 {
2136 super.AfterStoreLoad();
2137
2139 }
2140
2141
2143 {
2145 }
2146
2147
2149 {
2150 return false;
2151 }
2152
2154 {
2155 return false;
2156 }
2157
2159 {
2160 return false;
2161 }
2162
2164 {
2165 return false;
2166 }
2167
2168
2169
2170
2171
2173 {
2176 {
2177 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2178 }
2179 else if (classname != "" && food_stage)
2180 {
2181 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2182 }
2183 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2184 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
2185
2186 }
2187
2189 {
2192 {
2194 }
2195 else if (classname != "" && food_stage)
2196 {
2197 return FoodStage.GetEnergy(null, food_stage, classname);
2198 }
2199 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2200 return g_Game.ConfigGetFloat( class_path +
" energy" );
2201 }
2202
2204 {
2207 {
2209 }
2210 else if (classname != "" && food_stage)
2211 {
2212 return FoodStage.GetWater(null, food_stage, classname);
2213 }
2214 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2215 return g_Game.ConfigGetFloat( class_path +
" water" );
2216 }
2217
2219 {
2222 {
2223 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2224 }
2225 else if (classname != "" && food_stage)
2226 {
2227 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2228 }
2229 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2230 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
2231
2232 }
2233
2235 {
2238 {
2239 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2240 }
2241 else if (classname != "" && food_stage)
2242 {
2243 return FoodStage.GetToxicity(null, food_stage, classname);
2244 }
2245 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2246 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
2247 }
2248
2250 {
2253 {
2255 }
2256 else if (classname != "" && food_stage)
2257 {
2258 return FoodStage.GetAgents(null, food_stage, classname);
2259 }
2260 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2261 return g_Game.ConfigGetInt( class_path +
" agents" );
2262 }
2263
2265 {
2268 {
2269 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2270 }
2271 else if (classname != "" && food_stage)
2272 {
2273 return FoodStage.GetDigestibility(null, food_stage, classname);
2274 }
2275 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2276 return g_Game.ConfigGetInt( class_path +
" digestibility" );
2277 }
2278
2280 {
2283 {
2284 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2285 }
2286 else if (className != "" && foodStage)
2287 {
2288 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2289 }
2290 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2291 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
2292 }
2293
2295 {
2305
2306 return profile;
2307 }
2308
2309
2310
2311
2313 {
2315 }
2316
2317
2319 {
2321 {
2323 }
2324
2325 return false;
2326 }
2327
2329 {
2331 {
2333 }
2334
2335 return false;
2336 }
2337
2339 {
2341 {
2343 }
2344
2345 return false;
2346 }
2347
2349 {
2351 {
2353 }
2354
2355 return false;
2356 }
2357
2359 {
2361 {
2363 }
2364
2365 return false;
2366 }
2367
2369 {
2371 {
2373 }
2374
2375 return false;
2376 }
2377
2378
2380 {
2382 }
2383
2385 {
2386 return GetFoodStage().GetNextFoodStageType( cooking_method );
2387 }
2388
2390 {
2391 return GetFoodStage().GetFoodStageName( food_stage_type );
2392 }
2393
2395 {
2396 return GetFoodStage().CanChangeToNewStage( cooking_method );
2397 }
2398
2399
2401 {
2402 if ( !source.GetFoodStage())
2403 return;
2408 }
2409
2412 {
2415 }
2416
2419 {
2420 switch (stageNew)
2421 {
2426 break;
2427
2430 break;
2431 }
2432 }
2433
2434
2435
2436
2437
2439 {
2441 }
2442
2444 {
2446
2447
2449 }
2450
2452 {
2454 {
2457 }
2458 }
2459
2460
2462 {
2464 if (player)
2465 {
2467 player.ServerReplaceItemInHandsWithNew(lambda);
2468 }
2469 else
2470 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2471 }
2472
2474 {
2476 }
2477
2479 {
2480 super.SetActions();
2481
2484 }
2485
2487 {
2488 #ifndef SERVER
2489 #ifndef NO_GUI
2491 {
2493
2496 }
2497 #endif
2498 #endif
2499 }
2500
2502 {
2503 #ifndef SERVER
2504 #ifndef NO_GUI
2506 {
2510 }
2511 #endif
2512 #endif
2513 }
2514
2516 {
2517 return false;
2518 }
2519
2521 {
2523 }
2524
2525 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2526 {
2528
2529 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2531 if ( hasRootAsPlayer )
2533
2534
2535
2536
2537
2538
2539
2541 {
2542
2544 {
2546 {
2550 break;
2551
2555 break;
2556
2560 break;
2561
2565 default:
2568 return;
2569 }
2570
2571
2572 }
2573
2575
2577 {
2579 {
2580
2582 {
2584 }
2586 {
2589 {
2591 }
2592 else
2593 {
2595 {
2597 }
2598 else
2599 {
2601 }
2602 }
2603 }
2604 }
2605 }
2606
2607 }
2609 {
2610
2612 {
2614 {
2618 break;
2619
2623 break;
2624
2628 break;
2629
2633 break;
2634
2637 default:
2640 return;
2641 }
2642 }
2643
2645
2647 {
2649 {
2650
2652 {
2654 }
2655 }
2656 }
2657 }
2659 {
2660
2662 {
2664 {
2668 break;
2669
2672 default:
2675 return;
2676 }
2677 }
2678
2680
2682 {
2684 {
2685
2687 {
2689 }
2690 }
2691 }
2692 }
2693 else
2694 {
2695
2697
2699 {
2702
2703 }
2704 else
2705 {
2707 {
2710 }
2711 }
2712 }
2713 }
2714
2716 {
2717 if (
g_Game.IsHeadlessOrDedicatedServer())
2718 return;
2719
2721 {
2723 GetInventory().GetCurrentInventoryLocation(invLoc);
2725 {
2727 if (ptcMgr)
2728 {
2733 }
2734 }
2735 }
2737 {
2739 {
2742 return;
2743 }
2744
2746 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2748 {
2751 }
2752 }
2753 }
2754
2755 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2756 {
2758 {
2763 }
2764
2765 super.GetDebugActions(outputList);
2766 }
2767
2769 {
2770 super.OnAction(action_id, player, ctx);
2771
2773 {
2774 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2775 {
2777 if (food_stage_prev <= 0)
2778 {
2780 }
2782 return true;
2783 }
2784 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2785 {
2788 {
2790 }
2792 return true;
2793 }
2794
2795 }
2796
2797 #ifdef DIAG_DEVELOPER
2798 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2799 {
2800 PrintNutritionsData();
2801 return true;
2802 }
2803 #endif
2804
2805 return false;
2806 }
2807
2809 {
2810 string debug_output;
2811
2812 debug_output = super.GetDebugText();
2813
2816
2817 return debug_output;
2818 }
2819
2820
2821
2822
2823
2825 {
2826 float ret = super.GetBaitEffectivity();
2827
2829 {
2830 ret *= 0.5;
2831 }
2832
2833 return ret;
2834 }
2835
2837 {
2839 }
2840
2842 {
2844 }
2845
2847 {
2849 }
2850
2851 #ifdef DIAG_DEVELOPER
2852 private void PrintNutritionsData()
2853 {
2854 string nutritionsData = "";
2855
2858
2860 if (profile)
2861 {
2862 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2864 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2868 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2870
2873
2874 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2876 }
2877
2878 nutritionsData += "-----\n";
2879
2881 }
2882 #endif
2883
2885
2888 {
2890 }
2891}
2892
2894{
2896};
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 RemoveAllAgentsExcept(int agent_to_keep)
override void InsertAgent(int agent, float count=1)
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.
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
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
vector GetPosition()
Get the world position of the Effect.
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.