1789{
1791
1799
1809
1811
1813 {
1815 {
1817
1819 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1820
1824 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1825 }
1826 }
1827
1829 {
1831
1833 }
1834
1836 {
1837 super.EEDelete(parent);
1838
1840
1843 }
1844
1846 {
1847 super.EEItemLocationChanged(oldLoc, newLoc);
1848
1851 {
1852 switch (oldLoc.GetParent().GetType())
1853 {
1854 case "FryingPan":
1855 case "Pot":
1856 case "Cauldron":
1857 case "SharpWoodenStick":
1859 break;
1860 }
1861
1864 {
1866 }
1867 }
1868
1869 if (oldLoc.IsValid())
1871
1874 }
1875
1877 {
1880 }
1881
1883 {
1886
1887 return true;
1888 }
1889
1891 {
1893 {
1895 }
1896 }
1897
1900 {
1901 int foodStageType;
1902
1904 if (foodStage)
1905 foodStageType = foodStage.GetFoodStageType();
1906
1911
1912 return agentsIn;
1913 }
1914
1915
1917 {
1918 return false;
1919 }
1920
1922 {
1923 return false;
1924 }
1925
1927 {
1929 {
1931 {
1934
1937
1938 default:
1939 return super.GetTemperatureFreezeTime();
1940 }
1941 }
1942
1943 return super.GetTemperatureFreezeTime();
1944 }
1945
1947 {
1949 {
1951 {
1954
1957
1958 default:
1959 return super.GetTemperatureThawTime();
1960 }
1961 }
1962
1963 return super.GetTemperatureThawTime();
1964 }
1965
1967 {
1969 }
1970
1971
1972
1973
1975 {
1976 SetSynchDirty();
1977 }
1978
1980 {
1981 super.OnVariablesSynchronized();
1982
1983
1984
1985
1987 {
1989 }
1990 else
1991 {
1993 }
1994
1997 }
1998
1999
2000
2001
2003 {
2006
2008 }
2009
2011 {
2012 string soundName = "";
2013
2016
2018 {
2020 }
2021 else
2022 {
2024 {
2026 {
2031 else
2032 soundName = "";
2033 break;
2034 }
2035
2037 {
2042 else
2043 soundName = "";
2044 break;
2045 }
2046
2048 {
2053 else
2054 soundName = "";
2055 break;
2056 }
2057
2058 default:
2059 soundName = "";
2060 break;
2061 }
2062
2064 {
2065 if (soundName == "")
2066 {
2068 }
2069 else
2070 {
2072 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2073 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2075 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2076 {
2078 }
2079 }
2080 }
2081 }
2082
2084 }
2085
2087 {
2090 }
2091
2092
2093
2094
2096 {
2097 super.OnStoreSave(ctx);
2098
2100 {
2102 }
2103
2104
2107 }
2108
2110 {
2111 if (!super.OnStoreLoad(ctx, version))
2112 return false;
2113
2115 {
2117 return false;
2118 }
2119
2120 if (version >= 115)
2121 {
2123 {
2125 return false;
2126 }
2128 {
2130 return false;
2131 }
2132 }
2133
2136
2137 return true;
2138 }
2139
2141 {
2142 super.AfterStoreLoad();
2143
2145 }
2146
2147
2149 {
2151 }
2152
2153
2155 {
2156 return false;
2157 }
2158
2160 {
2161 return false;
2162 }
2163
2165 {
2166 return false;
2167 }
2168
2170 {
2171 return false;
2172 }
2173
2174
2175
2176
2177
2179 {
2182 {
2183 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2184 }
2185 else if (classname != "" && food_stage)
2186 {
2187 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2188 }
2189 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2191
2192 }
2193
2195 {
2198 {
2200 }
2201 else if (classname != "" && food_stage)
2202 {
2203 return FoodStage.GetEnergy(null, food_stage, classname);
2204 }
2205 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2207 }
2208
2210 {
2213 {
2215 }
2216 else if (classname != "" && food_stage)
2217 {
2218 return FoodStage.GetWater(null, food_stage, classname);
2219 }
2220 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2222 }
2223
2225 {
2228 {
2229 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2230 }
2231 else if (classname != "" && food_stage)
2232 {
2233 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2234 }
2235 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2237
2238 }
2239
2241 {
2244 {
2245 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2246 }
2247 else if (classname != "" && food_stage)
2248 {
2249 return FoodStage.GetToxicity(null, food_stage, classname);
2250 }
2251 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2253 }
2254
2256 {
2259 {
2261 }
2262 else if (classname != "" && food_stage)
2263 {
2264 return FoodStage.GetAgents(null, food_stage, classname);
2265 }
2266 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2268 }
2269
2271 {
2274 {
2275 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2276 }
2277 else if (classname != "" && food_stage)
2278 {
2279 return FoodStage.GetDigestibility(null, food_stage, classname);
2280 }
2281 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2283 }
2284
2286 {
2289 {
2290 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2291 }
2292 else if (className != "" && foodStage)
2293 {
2294 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2295 }
2296 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2298 }
2299
2301 {
2311
2312 return profile;
2313 }
2314
2315
2316
2317
2319 {
2321 }
2322
2323
2325 {
2327 {
2329 }
2330
2331 return false;
2332 }
2333
2335 {
2337 {
2339 }
2340
2341 return false;
2342 }
2343
2345 {
2347 {
2349 }
2350
2351 return false;
2352 }
2353
2355 {
2357 {
2359 }
2360
2361 return false;
2362 }
2363
2365 {
2367 {
2369 }
2370
2371 return false;
2372 }
2373
2375 {
2377 {
2379 }
2380
2381 return false;
2382 }
2383
2384
2386 {
2388 }
2389
2391 {
2392 return GetFoodStage().GetNextFoodStageType( cooking_method );
2393 }
2394
2396 {
2397 return GetFoodStage().GetFoodStageName( food_stage_type );
2398 }
2399
2401 {
2402 return GetFoodStage().CanChangeToNewStage( cooking_method );
2403 }
2404
2405
2407 {
2408 if ( !source.GetFoodStage())
2409 return;
2414 }
2415
2418 {
2421 }
2422
2425 {
2426 switch (stageNew)
2427 {
2432 break;
2433
2436 break;
2437 }
2438 }
2439
2440
2441
2442
2443
2445 {
2447 }
2448
2450 {
2452
2453
2455 }
2456
2458 {
2460 {
2463 }
2464 }
2465
2466
2468 {
2470 if (player)
2471 {
2473 player.ServerReplaceItemInHandsWithNew(lambda);
2474 }
2475 else
2476 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2477 }
2478
2480 {
2482 }
2483
2485 {
2486 super.SetActions();
2487
2490 }
2491
2493 {
2494 #ifndef SERVER
2496 {
2498
2501 }
2502 #endif
2503 }
2504
2506 {
2507 #ifndef SERVER
2509 {
2513 }
2514 #endif
2515 }
2516
2518 {
2519 return false;
2520 }
2521
2523 {
2525 }
2526
2527 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2528 {
2530
2531 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2533 if ( hasRootAsPlayer )
2535
2536
2537
2538
2539
2540
2541
2543 {
2544
2546 {
2548 {
2552 break;
2553
2557 break;
2558
2562 break;
2563
2567 default:
2570 return;
2571 }
2572
2573
2574 }
2575
2577
2579 {
2581 {
2582
2584 {
2586 }
2588 {
2591 {
2593 }
2594 else
2595 {
2597 {
2599 }
2600 else
2601 {
2603 }
2604 }
2605 }
2606 }
2607 }
2608
2609 }
2611 {
2612
2614 {
2616 {
2620 break;
2621
2625 break;
2626
2630 break;
2631
2635 break;
2636
2639 default:
2642 return;
2643 }
2644 }
2645
2647
2649 {
2651 {
2652
2654 {
2656 }
2657 }
2658 }
2659 }
2661 {
2662
2664 {
2666 {
2670 break;
2671
2674 default:
2677 return;
2678 }
2679 }
2680
2682
2684 {
2686 {
2687
2689 {
2691 }
2692 }
2693 }
2694 }
2695 else
2696 {
2697
2699
2701 {
2704
2705 }
2706 else
2707 {
2709 {
2712 }
2713 }
2714 }
2715 }
2716
2718 {
2719 if (
GetGame().IsDedicatedServer())
2720 return;
2721
2723 {
2725 GetInventory().GetCurrentInventoryLocation(invLoc);
2727 {
2729 if (ptcMgr)
2730 {
2735 }
2736 }
2737 }
2739 {
2741 {
2744 return;
2745 }
2746
2748 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2750 {
2753 }
2754 }
2755 }
2756
2757 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2758 {
2760 {
2765 }
2766
2767 super.GetDebugActions(outputList);
2768 }
2769
2771 {
2772 super.OnAction(action_id, player, ctx);
2773
2775 {
2776 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2777 {
2779 if (food_stage_prev <= 0)
2780 {
2782 }
2784 return true;
2785 }
2786 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2787 {
2790 {
2792 }
2794 return true;
2795 }
2796
2797 }
2798
2799 #ifdef DIAG_DEVELOPER
2800 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2801 {
2802 PrintNutritionsData();
2803 return true;
2804 }
2805 #endif
2806
2807 return false;
2808 }
2809
2811 {
2812 string debug_output;
2813
2814 debug_output = super.GetDebugText();
2815
2818
2819 return debug_output;
2820 }
2821
2822
2823
2824
2825
2827 {
2828 float ret = super.GetBaitEffectivity();
2829
2831 {
2832 ret *= 0.5;
2833 }
2834
2835 return ret;
2836 }
2837
2839 {
2841 }
2842
2844 {
2846 }
2847
2849 {
2851 }
2852
2853 #ifdef DIAG_DEVELOPER
2854 private void PrintNutritionsData()
2855 {
2856 string nutritionsData = "";
2857
2860
2862 if (profile)
2863 {
2864 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2866 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2870 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2872
2875
2876 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2878 }
2879
2880 nutritionsData += "-----\n";
2881
2883 }
2884 #endif
2885
2887
2890 {
2892 }
2893}
2894
2896{
2898};
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.