1844{
1846
1854
1864
1866
1868 {
1870 {
1872
1874 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1875
1879 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1880 }
1881 }
1882
1884 {
1886
1888 }
1889
1891 {
1892 super.EEDelete(parent);
1893
1895
1898 }
1899
1901 {
1902 super.EEItemLocationChanged(oldLoc, newLoc);
1903
1906 {
1907 switch (oldLoc.GetParent().GetType())
1908 {
1909 case "FryingPan":
1910 case "Pot":
1911 case "Cauldron":
1912 case "SharpWoodenStick":
1914 break;
1915 }
1916
1919 {
1921 }
1922 }
1923
1924 if (oldLoc.IsValid())
1926
1929 }
1930
1932 {
1935 }
1936
1938 {
1941
1942 return true;
1943 }
1944
1946 {
1948 {
1950 }
1951 }
1952
1955 {
1956 int foodStageType;
1957
1959 if (foodStage)
1960 foodStageType = foodStage.GetFoodStageType();
1961
1966
1967 return agentsIn;
1968 }
1969
1970
1972 {
1973 return false;
1974 }
1975
1977 {
1978 return false;
1979 }
1980
1982 {
1984 {
1986 {
1989
1992
1993 default:
1994 return super.GetTemperatureFreezeTime();
1995 }
1996 }
1997
1998 return super.GetTemperatureFreezeTime();
1999 }
2000
2002 {
2004 {
2006 {
2009
2012
2013 default:
2014 return super.GetTemperatureThawTime();
2015 }
2016 }
2017
2018 return super.GetTemperatureThawTime();
2019 }
2020
2022 {
2024 }
2025
2026
2027
2028
2030 {
2031 SetSynchDirty();
2032 }
2033
2035 {
2036 super.OnVariablesSynchronized();
2037
2038
2039
2040
2042 {
2044 }
2045 else
2046 {
2048 }
2049
2052 }
2053
2054
2055
2056
2058 {
2061
2063 }
2064
2066 {
2067 string soundName = "";
2068
2071
2073 {
2075 }
2076 else
2077 {
2079 {
2081 {
2086 else
2087 soundName = "";
2088 break;
2089 }
2090
2092 {
2097 else
2098 soundName = "";
2099 break;
2100 }
2101
2103 {
2108 else
2109 soundName = "";
2110 break;
2111 }
2112
2113 default:
2114 soundName = "";
2115 break;
2116 }
2117
2119 {
2120 if (soundName == "")
2121 {
2123 }
2124 else
2125 {
2127 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2128 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2130 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2131 {
2133 }
2134 }
2135 }
2136 }
2137
2139 }
2140
2142 {
2145 }
2146
2147
2148
2149
2151 {
2152 super.OnStoreSave(ctx);
2153
2155 {
2157 }
2158
2159
2162 }
2163
2165 {
2166 if (!super.OnStoreLoad(ctx, version))
2167 return false;
2168
2170 {
2172 return false;
2173 }
2174
2175 if (version >= 115)
2176 {
2178 {
2180 return false;
2181 }
2183 {
2185 return false;
2186 }
2187 }
2188
2191
2192 return true;
2193 }
2194
2196 {
2197 super.AfterStoreLoad();
2198
2200 }
2201
2202
2204 {
2206 }
2207
2208
2210 {
2211 return false;
2212 }
2213
2215 {
2216 return false;
2217 }
2218
2220 {
2221 return false;
2222 }
2223
2225 {
2226 return false;
2227 }
2228
2229
2230
2231
2232
2234 {
2237 {
2238 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2239 }
2240 else if (classname != "" && food_stage)
2241 {
2242 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2243 }
2244 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2246
2247 }
2248
2250 {
2253 {
2255 }
2256 else if (classname != "" && food_stage)
2257 {
2258 return FoodStage.GetEnergy(null, food_stage, classname);
2259 }
2260 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2262 }
2263
2265 {
2268 {
2270 }
2271 else if (classname != "" && food_stage)
2272 {
2273 return FoodStage.GetWater(null, food_stage, classname);
2274 }
2275 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2277 }
2278
2280 {
2283 {
2284 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2285 }
2286 else if (classname != "" && food_stage)
2287 {
2288 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2289 }
2290 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2292
2293 }
2294
2296 {
2299 {
2300 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2301 }
2302 else if (classname != "" && food_stage)
2303 {
2304 return FoodStage.GetToxicity(null, food_stage, classname);
2305 }
2306 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2308 }
2309
2311 {
2314 {
2316 }
2317 else if (classname != "" && food_stage)
2318 {
2319 return FoodStage.GetAgents(null, food_stage, classname);
2320 }
2321 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2323 }
2324
2326 {
2329 {
2330 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2331 }
2332 else if (classname != "" && food_stage)
2333 {
2334 return FoodStage.GetDigestibility(null, food_stage, classname);
2335 }
2336 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2338 }
2339
2341 {
2344 {
2345 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2346 }
2347 else if (className != "" && foodStage)
2348 {
2349 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2350 }
2351 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2353 }
2354
2356 {
2366
2367 return profile;
2368 }
2369
2370
2371
2372
2374 {
2376 }
2377
2378
2380 {
2382 {
2384 }
2385
2386 return false;
2387 }
2388
2390 {
2392 {
2394 }
2395
2396 return false;
2397 }
2398
2400 {
2402 {
2404 }
2405
2406 return false;
2407 }
2408
2410 {
2412 {
2414 }
2415
2416 return false;
2417 }
2418
2420 {
2422 {
2424 }
2425
2426 return false;
2427 }
2428
2430 {
2432 {
2434 }
2435
2436 return false;
2437 }
2438
2439
2441 {
2443 }
2444
2446 {
2447 return GetFoodStage().GetNextFoodStageType( cooking_method );
2448 }
2449
2451 {
2452 return GetFoodStage().GetFoodStageName( food_stage_type );
2453 }
2454
2456 {
2457 return GetFoodStage().CanChangeToNewStage( cooking_method );
2458 }
2459
2460
2462 {
2463 if ( !source.GetFoodStage())
2464 return;
2469 }
2470
2473 {
2476 }
2477
2480 {
2481 switch (stageNew)
2482 {
2487 break;
2488
2491 break;
2492 }
2493 }
2494
2495
2496
2497
2498
2500 {
2502 }
2503
2505 {
2507
2508
2510 }
2511
2513 {
2515 {
2518 }
2519 }
2520
2521
2523 {
2525 if (player)
2526 {
2528 player.ServerReplaceItemInHandsWithNew(lambda);
2529 }
2530 else
2531 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2532 }
2533
2535 {
2537 }
2538
2540 {
2541 super.SetActions();
2542
2545 }
2546
2548 {
2549 #ifndef SERVER
2551 {
2553
2556 }
2557 #endif
2558 }
2559
2561 {
2562 #ifndef SERVER
2564 {
2568 }
2569 #endif
2570 }
2571
2573 {
2574 return false;
2575 }
2576
2578 {
2580 }
2581
2582 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2583 {
2585
2586 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2588 if ( hasRootAsPlayer )
2590
2591
2592
2593
2594
2595
2596
2598 {
2599
2601 {
2603 {
2607 break;
2608
2612 break;
2613
2617 break;
2618
2622 default:
2625 return;
2626 }
2627
2628
2629 }
2630
2632
2634 {
2636 {
2637
2639 {
2641 }
2643 {
2646 {
2648 }
2649 else
2650 {
2652 {
2654 }
2655 else
2656 {
2658 }
2659 }
2660 }
2661 }
2662 }
2663
2664 }
2666 {
2667
2669 {
2671 {
2675 break;
2676
2680 break;
2681
2685 break;
2686
2690 break;
2691
2694 default:
2697 return;
2698 }
2699 }
2700
2702
2704 {
2706 {
2707
2709 {
2711 }
2712 }
2713 }
2714 }
2716 {
2717
2719 {
2721 {
2725 break;
2726
2729 default:
2732 return;
2733 }
2734 }
2735
2737
2739 {
2741 {
2742
2744 {
2746 }
2747 }
2748 }
2749 }
2750 else
2751 {
2752
2754
2756 {
2759
2760 }
2761 else
2762 {
2764 {
2767 }
2768 }
2769 }
2770 }
2771
2773 {
2774 if (
GetGame().IsDedicatedServer())
2775 return;
2776
2778 {
2780 GetInventory().GetCurrentInventoryLocation(invLoc);
2782 {
2784 if (ptcMgr)
2785 {
2790 }
2791 }
2792 }
2794 {
2796 {
2799 return;
2800 }
2801
2803 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2805 {
2808 }
2809 }
2810 }
2811
2812 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2813 {
2815 {
2820 }
2821
2822 super.GetDebugActions(outputList);
2823 }
2824
2826 {
2827 super.OnAction(action_id, player, ctx);
2828
2830 {
2831 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2832 {
2834 if (food_stage_prev <= 0)
2835 {
2837 }
2839 return true;
2840 }
2841 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2842 {
2845 {
2847 }
2849 return true;
2850 }
2851
2852 }
2853
2854 #ifdef DIAG_DEVELOPER
2855 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2856 {
2857 PrintNutritionsData();
2858 return true;
2859 }
2860 #endif
2861
2862 return false;
2863 }
2864
2866 {
2867 string debug_output;
2868
2869 debug_output = super.GetDebugText();
2870
2873
2874 return debug_output;
2875 }
2876
2877
2878
2879
2880
2882 {
2883 float ret = super.GetBaitEffectivity();
2884
2886 {
2887 ret *= 0.5;
2888 }
2889
2890 return ret;
2891 }
2892
2894 {
2896 }
2897
2899 {
2901 }
2902
2904 {
2906 }
2907
2908 #ifdef DIAG_DEVELOPER
2909 private void PrintNutritionsData()
2910 {
2911 string nutritionsData = "";
2912
2915
2917 if (profile)
2918 {
2919 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2921 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2925 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2927
2930
2931 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2933 }
2934
2935 nutritionsData += "-----\n";
2936
2938 }
2939 #endif
2940
2942
2945 {
2947 }
2948}
2949
2951{
2953};
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.