1765{
1767
1775
1785
1787
1789 {
1791 {
1793
1795 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1796
1800 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1801 }
1802 }
1803
1805 {
1807
1809 }
1810
1812 {
1813 super.EEDelete(parent);
1814
1816
1819 }
1820
1822 {
1823 super.EEItemLocationChanged(oldLoc, newLoc);
1824
1827 {
1828 switch (oldLoc.GetParent().GetType())
1829 {
1830 case "FryingPan":
1831 case "Pot":
1832 case "Cauldron":
1833 case "SharpWoodenStick":
1835 break;
1836 }
1837
1840 {
1842 }
1843 }
1844
1845 if (oldLoc.IsValid())
1847
1850 }
1851
1853 {
1856 }
1857
1859 {
1862
1863 return true;
1864 }
1865
1867 {
1869 {
1871 }
1872 }
1873
1876 {
1877 int foodStageType;
1878
1880 if (foodStage)
1881 foodStageType = foodStage.GetFoodStageType();
1882
1887
1888 return agentsIn;
1889 }
1890
1891
1893 {
1894 return false;
1895 }
1896
1898 {
1899 return false;
1900 }
1901
1903 {
1905 {
1907 {
1910
1913
1914 default:
1915 return super.GetTemperatureFreezeTime();
1916 }
1917 }
1918
1919 return super.GetTemperatureFreezeTime();
1920 }
1921
1923 {
1925 {
1927 {
1930
1933
1934 default:
1935 return super.GetTemperatureThawTime();
1936 }
1937 }
1938
1939 return super.GetTemperatureThawTime();
1940 }
1941
1943 {
1945 }
1946
1947
1948
1949
1951 {
1952 SetSynchDirty();
1953 }
1954
1956 {
1957 super.OnVariablesSynchronized();
1958
1959
1960
1961
1963 {
1965 }
1966 else
1967 {
1969 }
1970
1973 }
1974
1975
1976
1977
1979 {
1982
1984 }
1985
1987 {
1988 string soundName = "";
1989
1992
1994 {
1996 }
1997 else
1998 {
2000 {
2002 {
2007 else
2008 soundName = "";
2009 break;
2010 }
2011
2013 {
2018 else
2019 soundName = "";
2020 break;
2021 }
2022
2024 {
2029 else
2030 soundName = "";
2031 break;
2032 }
2033
2034 default:
2035 soundName = "";
2036 break;
2037 }
2038
2040 {
2041 if (soundName == "")
2042 {
2044 }
2045 else
2046 {
2048 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2049 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2051 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2052 {
2054 }
2055 }
2056 }
2057 }
2058
2060 }
2061
2063 {
2066 }
2067
2068
2069
2070
2072 {
2073 super.OnStoreSave(ctx);
2074
2076 {
2078 }
2079
2080
2083 }
2084
2086 {
2087 if (!super.OnStoreLoad(ctx, version))
2088 return false;
2089
2091 {
2093 return false;
2094 }
2095
2096 if (version >= 115)
2097 {
2099 {
2101 return false;
2102 }
2104 {
2106 return false;
2107 }
2108 }
2109
2112
2113 return true;
2114 }
2115
2117 {
2118 super.AfterStoreLoad();
2119
2121 }
2122
2123
2125 {
2127 }
2128
2129
2131 {
2132 return false;
2133 }
2134
2136 {
2137 return false;
2138 }
2139
2141 {
2142 return false;
2143 }
2144
2146 {
2147 return false;
2148 }
2149
2150
2151
2152
2153
2155 {
2158 {
2159 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2160 }
2161 else if (classname != "" && food_stage)
2162 {
2163 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2164 }
2165 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2167
2168 }
2169
2171 {
2174 {
2176 }
2177 else if (classname != "" && food_stage)
2178 {
2179 return FoodStage.GetEnergy(null, food_stage, classname);
2180 }
2181 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2183 }
2184
2186 {
2189 {
2191 }
2192 else if (classname != "" && food_stage)
2193 {
2194 return FoodStage.GetWater(null, food_stage, classname);
2195 }
2196 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2198 }
2199
2201 {
2204 {
2205 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2206 }
2207 else if (classname != "" && food_stage)
2208 {
2209 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2210 }
2211 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2213
2214 }
2215
2217 {
2220 {
2221 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2222 }
2223 else if (classname != "" && food_stage)
2224 {
2225 return FoodStage.GetToxicity(null, food_stage, classname);
2226 }
2227 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2229 }
2230
2232 {
2235 {
2237 }
2238 else if (classname != "" && food_stage)
2239 {
2240 return FoodStage.GetAgents(null, food_stage, classname);
2241 }
2242 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2244 }
2245
2247 {
2250 {
2251 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2252 }
2253 else if (classname != "" && food_stage)
2254 {
2255 return FoodStage.GetDigestibility(null, food_stage, classname);
2256 }
2257 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2259 }
2260
2262 {
2265 {
2266 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2267 }
2268 else if (className != "" && foodStage)
2269 {
2270 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2271 }
2272 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2274 }
2275
2277 {
2287
2288 return profile;
2289 }
2290
2291
2292
2293
2295 {
2297 }
2298
2299
2301 {
2303 {
2305 }
2306
2307 return false;
2308 }
2309
2311 {
2313 {
2315 }
2316
2317 return false;
2318 }
2319
2321 {
2323 {
2325 }
2326
2327 return false;
2328 }
2329
2331 {
2333 {
2335 }
2336
2337 return false;
2338 }
2339
2341 {
2343 {
2345 }
2346
2347 return false;
2348 }
2349
2351 {
2353 {
2355 }
2356
2357 return false;
2358 }
2359
2360
2362 {
2364 }
2365
2367 {
2368 return GetFoodStage().GetNextFoodStageType( cooking_method );
2369 }
2370
2372 {
2373 return GetFoodStage().GetFoodStageName( food_stage_type );
2374 }
2375
2377 {
2378 return GetFoodStage().CanChangeToNewStage( cooking_method );
2379 }
2380
2381
2383 {
2384 if ( !source.GetFoodStage())
2385 return;
2390 }
2391
2394 {
2397 }
2398
2401 {
2402 switch (stageNew)
2403 {
2408 break;
2409
2412 break;
2413 }
2414 }
2415
2416
2417
2418
2419
2421 {
2423 }
2424
2426 {
2428
2429
2431 }
2432
2434 {
2436 {
2439 }
2440 }
2441
2442
2444 {
2446 if (player)
2447 {
2449 player.ServerReplaceItemInHandsWithNew(lambda);
2450 }
2451 else
2452 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2453 }
2454
2456 {
2458 }
2459
2461 {
2462 super.SetActions();
2463
2466 }
2467
2469 {
2470 #ifndef SERVER
2472 {
2474
2477 }
2478 #endif
2479 }
2480
2482 {
2483 #ifndef SERVER
2485 {
2489 }
2490 #endif
2491 }
2492
2494 {
2495 return false;
2496 }
2497
2499 {
2501 }
2502
2503 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2504 {
2506
2507 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2509 if ( hasRootAsPlayer )
2511
2512
2513
2514
2515
2516
2517
2519 {
2520
2522 {
2524 {
2528 break;
2529
2533 break;
2534
2538 break;
2539
2543 default:
2546 return;
2547 }
2548
2549
2550 }
2551
2553
2555 {
2557 {
2558
2560 {
2562 }
2564 {
2567 {
2569 }
2570 else
2571 {
2573 {
2575 }
2576 else
2577 {
2579 }
2580 }
2581 }
2582 }
2583 }
2584
2585 }
2587 {
2588
2590 {
2592 {
2596 break;
2597
2601 break;
2602
2606 break;
2607
2611 break;
2612
2615 default:
2618 return;
2619 }
2620 }
2621
2623
2625 {
2627 {
2628
2630 {
2632 }
2633 }
2634 }
2635 }
2637 {
2638
2640 {
2642 {
2646 break;
2647
2650 default:
2653 return;
2654 }
2655 }
2656
2658
2660 {
2662 {
2663
2665 {
2667 }
2668 }
2669 }
2670 }
2671 else
2672 {
2673
2675
2677 {
2680
2681 }
2682 else
2683 {
2685 {
2688 }
2689 }
2690 }
2691 }
2692
2694 {
2695 if (
GetGame().IsDedicatedServer())
2696 return;
2697
2699 {
2701 GetInventory().GetCurrentInventoryLocation(invLoc);
2703 {
2705 if (ptcMgr)
2706 {
2711 }
2712 }
2713 }
2715 {
2717 {
2720 return;
2721 }
2722
2724 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2726 {
2729 }
2730 }
2731 }
2732
2733 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2734 {
2735 super.GetDebugActions(outputList);
2736
2738 {
2742 }
2743 }
2744
2746 {
2747 super.OnAction(action_id, player, ctx);
2748
2750 {
2751 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2752 {
2754 if (food_stage_prev <= 0)
2755 {
2757 }
2759 return true;
2760 }
2761 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2762 {
2765 {
2767 }
2769 return true;
2770 }
2771
2772 }
2773
2774 #ifdef DIAG_DEVELOPER
2775 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2776 {
2777 PrintNutritionsData();
2778 return true;
2779 }
2780 #endif
2781
2782 return false;
2783 }
2784
2786 {
2787 string debug_output;
2788
2789 debug_output = super.GetDebugText();
2790
2793
2794 return debug_output;
2795 }
2796
2797
2798
2799
2800
2802 {
2803 float ret = super.GetBaitEffectivity();
2804
2806 {
2807 ret *= 0.5;
2808 }
2809
2810 return ret;
2811 }
2812
2814 {
2816 }
2817
2819 {
2821 }
2822
2824 {
2826 }
2827
2828 #ifdef DIAG_DEVELOPER
2829 private void PrintNutritionsData()
2830 {
2831 string nutritionsData = "";
2832
2835
2837 if (profile)
2838 {
2839 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2841 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2845 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2847
2850
2851 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2853 }
2854
2855 nutritionsData += "-----\n";
2856
2858 }
2859 #endif
2860
2862
2865 {
2867 }
2868}
2869
2871{
2873};
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.