1805{
1807
1815
1825
1827
1829 {
1831 {
1833
1835 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1836
1840 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1841 }
1842 }
1843
1845 {
1847
1849 }
1850
1852 {
1853 super.EEDelete(parent);
1854
1856
1859 }
1860
1862 {
1863 super.EEItemLocationChanged(oldLoc, newLoc);
1864
1867 {
1868 switch (oldLoc.GetParent().GetType())
1869 {
1870 case "FryingPan":
1871 case "Pot":
1872 case "Cauldron":
1873 case "SharpWoodenStick":
1875 break;
1876 }
1877
1880 {
1882 }
1883 }
1884
1885 if (oldLoc.IsValid())
1887
1890 }
1891
1893 {
1896 }
1897
1899 {
1902
1903 return true;
1904 }
1905
1907 {
1909 {
1911 }
1912 }
1913
1916 {
1917 int foodStageType;
1918
1920 if (foodStage)
1921 foodStageType = foodStage.GetFoodStageType();
1922
1927
1928 return agentsIn;
1929 }
1930
1931
1933 {
1934 return false;
1935 }
1936
1938 {
1939 return false;
1940 }
1941
1943 {
1945 {
1947 {
1950
1953
1954 default:
1955 return super.GetTemperatureFreezeTime();
1956 }
1957 }
1958
1959 return super.GetTemperatureFreezeTime();
1960 }
1961
1963 {
1965 {
1967 {
1970
1973
1974 default:
1975 return super.GetTemperatureThawTime();
1976 }
1977 }
1978
1979 return super.GetTemperatureThawTime();
1980 }
1981
1983 {
1985 }
1986
1987
1988
1989
1991 {
1992 SetSynchDirty();
1993 }
1994
1996 {
1997 super.OnVariablesSynchronized();
1998
1999
2000
2001
2003 {
2005 }
2006 else
2007 {
2009 }
2010
2013 }
2014
2015
2016
2017
2019 {
2022
2024 }
2025
2027 {
2028 string soundName = "";
2029
2032
2034 {
2036 }
2037 else
2038 {
2040 {
2042 {
2047 else
2048 soundName = "";
2049 break;
2050 }
2051
2053 {
2058 else
2059 soundName = "";
2060 break;
2061 }
2062
2064 {
2069 else
2070 soundName = "";
2071 break;
2072 }
2073
2074 default:
2075 soundName = "";
2076 break;
2077 }
2078
2080 {
2081 if (soundName == "")
2082 {
2084 }
2085 else
2086 {
2088 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2089 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2091 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2092 {
2094 }
2095 }
2096 }
2097 }
2098
2100 }
2101
2103 {
2106 }
2107
2108
2109
2110
2112 {
2113 super.OnStoreSave(ctx);
2114
2116 {
2118 }
2119
2120
2123 }
2124
2126 {
2127 if (!super.OnStoreLoad(ctx, version))
2128 return false;
2129
2131 {
2133 return false;
2134 }
2135
2136 if (version >= 115)
2137 {
2139 {
2141 return false;
2142 }
2144 {
2146 return false;
2147 }
2148 }
2149
2152
2153 return true;
2154 }
2155
2157 {
2158 super.AfterStoreLoad();
2159
2161 }
2162
2163
2165 {
2167 }
2168
2169
2171 {
2172 return false;
2173 }
2174
2176 {
2177 return false;
2178 }
2179
2181 {
2182 return false;
2183 }
2184
2186 {
2187 return false;
2188 }
2189
2190
2191
2192
2193
2195 {
2198 {
2199 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2200 }
2201 else if (classname != "" && food_stage)
2202 {
2203 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2204 }
2205 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2207
2208 }
2209
2211 {
2214 {
2216 }
2217 else if (classname != "" && food_stage)
2218 {
2219 return FoodStage.GetEnergy(null, food_stage, classname);
2220 }
2221 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2223 }
2224
2226 {
2229 {
2231 }
2232 else if (classname != "" && food_stage)
2233 {
2234 return FoodStage.GetWater(null, food_stage, classname);
2235 }
2236 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2238 }
2239
2241 {
2244 {
2245 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2246 }
2247 else if (classname != "" && food_stage)
2248 {
2249 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2250 }
2251 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2253
2254 }
2255
2257 {
2260 {
2261 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2262 }
2263 else if (classname != "" && food_stage)
2264 {
2265 return FoodStage.GetToxicity(null, food_stage, classname);
2266 }
2267 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2269 }
2270
2272 {
2275 {
2277 }
2278 else if (classname != "" && food_stage)
2279 {
2280 return FoodStage.GetAgents(null, food_stage, classname);
2281 }
2282 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2284 }
2285
2287 {
2290 {
2291 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2292 }
2293 else if (classname != "" && food_stage)
2294 {
2295 return FoodStage.GetDigestibility(null, food_stage, classname);
2296 }
2297 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2299 }
2300
2302 {
2305 {
2306 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2307 }
2308 else if (className != "" && foodStage)
2309 {
2310 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2311 }
2312 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2314 }
2315
2317 {
2327
2328 return profile;
2329 }
2330
2331
2332
2333
2335 {
2337 }
2338
2339
2341 {
2343 {
2345 }
2346
2347 return false;
2348 }
2349
2351 {
2353 {
2355 }
2356
2357 return false;
2358 }
2359
2361 {
2363 {
2365 }
2366
2367 return false;
2368 }
2369
2371 {
2373 {
2375 }
2376
2377 return false;
2378 }
2379
2381 {
2383 {
2385 }
2386
2387 return false;
2388 }
2389
2391 {
2393 {
2395 }
2396
2397 return false;
2398 }
2399
2400
2402 {
2404 }
2405
2407 {
2408 return GetFoodStage().GetNextFoodStageType( cooking_method );
2409 }
2410
2412 {
2413 return GetFoodStage().GetFoodStageName( food_stage_type );
2414 }
2415
2417 {
2418 return GetFoodStage().CanChangeToNewStage( cooking_method );
2419 }
2420
2421
2423 {
2424 if ( !source.GetFoodStage())
2425 return;
2430 }
2431
2434 {
2437 }
2438
2441 {
2442 switch (stageNew)
2443 {
2448 break;
2449
2452 break;
2453 }
2454 }
2455
2456
2457
2458
2459
2461 {
2463 }
2464
2466 {
2468
2469
2471 }
2472
2474 {
2476 {
2479 }
2480 }
2481
2482
2484 {
2486 if (player)
2487 {
2489 player.ServerReplaceItemInHandsWithNew(lambda);
2490 }
2491 else
2492 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2493 }
2494
2496 {
2498 }
2499
2501 {
2502 super.SetActions();
2503
2506 }
2507
2509 {
2510 #ifndef SERVER
2512 {
2514
2517 }
2518 #endif
2519 }
2520
2522 {
2523 #ifndef SERVER
2525 {
2529 }
2530 #endif
2531 }
2532
2534 {
2535 return false;
2536 }
2537
2539 {
2541 }
2542
2543 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2544 {
2546
2547 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2549 if ( hasRootAsPlayer )
2551
2552
2553
2554
2555
2556
2557
2559 {
2560
2562 {
2564 {
2568 break;
2569
2573 break;
2574
2578 break;
2579
2583 default:
2586 return;
2587 }
2588
2589
2590 }
2591
2593
2595 {
2597 {
2598
2600 {
2602 }
2604 {
2607 {
2609 }
2610 else
2611 {
2613 {
2615 }
2616 else
2617 {
2619 }
2620 }
2621 }
2622 }
2623 }
2624
2625 }
2627 {
2628
2630 {
2632 {
2636 break;
2637
2641 break;
2642
2646 break;
2647
2651 break;
2652
2655 default:
2658 return;
2659 }
2660 }
2661
2663
2665 {
2667 {
2668
2670 {
2672 }
2673 }
2674 }
2675 }
2677 {
2678
2680 {
2682 {
2686 break;
2687
2690 default:
2693 return;
2694 }
2695 }
2696
2698
2700 {
2702 {
2703
2705 {
2707 }
2708 }
2709 }
2710 }
2711 else
2712 {
2713
2715
2717 {
2720
2721 }
2722 else
2723 {
2725 {
2728 }
2729 }
2730 }
2731 }
2732
2734 {
2735 if (
GetGame().IsDedicatedServer())
2736 return;
2737
2739 {
2741 GetInventory().GetCurrentInventoryLocation(invLoc);
2743 {
2745 if (ptcMgr)
2746 {
2751 }
2752 }
2753 }
2755 {
2757 {
2760 return;
2761 }
2762
2764 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2766 {
2769 }
2770 }
2771 }
2772
2773 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2774 {
2775 super.GetDebugActions(outputList);
2776
2778 {
2782 }
2783 }
2784
2786 {
2787 super.OnAction(action_id, player, ctx);
2788
2790 {
2791 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2792 {
2794 if (food_stage_prev <= 0)
2795 {
2797 }
2799 return true;
2800 }
2801 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2802 {
2805 {
2807 }
2809 return true;
2810 }
2811
2812 }
2813
2814 #ifdef DIAG_DEVELOPER
2815 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2816 {
2817 PrintNutritionsData();
2818 return true;
2819 }
2820 #endif
2821
2822 return false;
2823 }
2824
2826 {
2827 string debug_output;
2828
2829 debug_output = super.GetDebugText();
2830
2833
2834 return debug_output;
2835 }
2836
2837
2838
2839
2840
2842 {
2843 float ret = super.GetBaitEffectivity();
2844
2846 {
2847 ret *= 0.5;
2848 }
2849
2850 return ret;
2851 }
2852
2854 {
2856 }
2857
2859 {
2861 }
2862
2864 {
2866 }
2867
2868 #ifdef DIAG_DEVELOPER
2869 private void PrintNutritionsData()
2870 {
2871 string nutritionsData = "";
2872
2875
2877 if (profile)
2878 {
2879 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2881 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2885 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2887
2890
2891 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2893 }
2894
2895 nutritionsData += "-----\n";
2896
2898 }
2899 #endif
2900
2902
2905 {
2907 }
2908}
2909
2911{
2913};
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.