1779{
1781
1789
1799
1801
1803 {
1805 {
1807
1809 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1810
1814 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1815 }
1816 }
1817
1819 {
1821
1823 }
1824
1826 {
1827 super.EEDelete(parent);
1828
1830
1833 }
1834
1836 {
1837 super.EEItemLocationChanged(oldLoc, newLoc);
1838
1841 {
1842 switch (oldLoc.GetParent().GetType())
1843 {
1844 case "FryingPan":
1845 case "Pot":
1846 case "Cauldron":
1847 case "SharpWoodenStick":
1849 break;
1850 }
1851
1854 {
1856 }
1857 }
1858
1859 if (oldLoc.IsValid())
1861
1864 }
1865
1867 {
1870 }
1871
1873 {
1876
1877 return true;
1878 }
1879
1881 {
1883 {
1885 }
1886 }
1887
1890 {
1891 int foodStageType;
1892
1894 if (foodStage)
1895 foodStageType = foodStage.GetFoodStageType();
1896
1901
1902 return agentsIn;
1903 }
1904
1905
1907 {
1908 return false;
1909 }
1910
1912 {
1913 return false;
1914 }
1915
1917 {
1919 {
1921 {
1924
1927
1928 default:
1929 return super.GetTemperatureFreezeTime();
1930 }
1931 }
1932
1933 return super.GetTemperatureFreezeTime();
1934 }
1935
1937 {
1939 {
1941 {
1944
1947
1948 default:
1949 return super.GetTemperatureThawTime();
1950 }
1951 }
1952
1953 return super.GetTemperatureThawTime();
1954 }
1955
1957 {
1959 }
1960
1961
1962
1963
1965 {
1966 SetSynchDirty();
1967 }
1968
1970 {
1971 super.OnVariablesSynchronized();
1972
1973
1974
1975
1977 {
1979 }
1980 else
1981 {
1983 }
1984
1987 }
1988
1989
1990
1991
1993 {
1996
1998 }
1999
2001 {
2002 string soundName = "";
2003
2006
2008 {
2010 }
2011 else
2012 {
2014 {
2016 {
2021 else
2022 soundName = "";
2023 break;
2024 }
2025
2027 {
2032 else
2033 soundName = "";
2034 break;
2035 }
2036
2038 {
2043 else
2044 soundName = "";
2045 break;
2046 }
2047
2048 default:
2049 soundName = "";
2050 break;
2051 }
2052
2054 {
2055 if (soundName == "")
2056 {
2058 }
2059 else
2060 {
2062 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2063 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2065 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2066 {
2068 }
2069 }
2070 }
2071 }
2072
2074 }
2075
2077 {
2080 }
2081
2082
2083
2084
2086 {
2087 super.OnStoreSave(ctx);
2088
2090 {
2092 }
2093
2094
2097 }
2098
2100 {
2101 if (!super.OnStoreLoad(ctx, version))
2102 return false;
2103
2105 {
2107 return false;
2108 }
2109
2110 if (version >= 115)
2111 {
2113 {
2115 return false;
2116 }
2118 {
2120 return false;
2121 }
2122 }
2123
2126
2127 return true;
2128 }
2129
2131 {
2132 super.AfterStoreLoad();
2133
2135 }
2136
2137
2139 {
2141 }
2142
2143
2145 {
2146 return false;
2147 }
2148
2150 {
2151 return false;
2152 }
2153
2155 {
2156 return false;
2157 }
2158
2160 {
2161 return false;
2162 }
2163
2164
2165
2166
2167
2169 {
2172 {
2173 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2174 }
2175 else if (classname != "" && food_stage)
2176 {
2177 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2178 }
2179 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2181
2182 }
2183
2185 {
2188 {
2190 }
2191 else if (classname != "" && food_stage)
2192 {
2193 return FoodStage.GetEnergy(null, food_stage, classname);
2194 }
2195 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2197 }
2198
2200 {
2203 {
2205 }
2206 else if (classname != "" && food_stage)
2207 {
2208 return FoodStage.GetWater(null, food_stage, classname);
2209 }
2210 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2212 }
2213
2215 {
2218 {
2219 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2220 }
2221 else if (classname != "" && food_stage)
2222 {
2223 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2224 }
2225 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2227
2228 }
2229
2231 {
2234 {
2235 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2236 }
2237 else if (classname != "" && food_stage)
2238 {
2239 return FoodStage.GetToxicity(null, food_stage, classname);
2240 }
2241 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2243 }
2244
2246 {
2249 {
2251 }
2252 else if (classname != "" && food_stage)
2253 {
2254 return FoodStage.GetAgents(null, food_stage, classname);
2255 }
2256 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2258 }
2259
2261 {
2264 {
2265 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2266 }
2267 else if (classname != "" && food_stage)
2268 {
2269 return FoodStage.GetDigestibility(null, food_stage, classname);
2270 }
2271 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2273 }
2274
2276 {
2279 {
2280 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2281 }
2282 else if (className != "" && foodStage)
2283 {
2284 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2285 }
2286 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2288 }
2289
2291 {
2301
2302 return profile;
2303 }
2304
2305
2306
2307
2309 {
2311 }
2312
2313
2315 {
2317 {
2319 }
2320
2321 return false;
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
2374
2376 {
2378 }
2379
2381 {
2382 return GetFoodStage().GetNextFoodStageType( cooking_method );
2383 }
2384
2386 {
2387 return GetFoodStage().GetFoodStageName( food_stage_type );
2388 }
2389
2391 {
2392 return GetFoodStage().CanChangeToNewStage( cooking_method );
2393 }
2394
2395
2397 {
2398 if ( !source.GetFoodStage())
2399 return;
2404 }
2405
2408 {
2411 }
2412
2415 {
2416 switch (stageNew)
2417 {
2422 break;
2423
2426 break;
2427 }
2428 }
2429
2430
2431
2432
2433
2435 {
2437 }
2438
2440 {
2442
2443
2445 }
2446
2448 {
2450 {
2453 }
2454 }
2455
2456
2458 {
2460 if (player)
2461 {
2463 player.ServerReplaceItemInHandsWithNew(lambda);
2464 }
2465 else
2466 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2467 }
2468
2470 {
2472 }
2473
2475 {
2476 super.SetActions();
2477
2480 }
2481
2483 {
2484 #ifndef SERVER
2486 {
2488
2491 }
2492 #endif
2493 }
2494
2496 {
2497 #ifndef SERVER
2499 {
2503 }
2504 #endif
2505 }
2506
2508 {
2509 return false;
2510 }
2511
2513 {
2515 }
2516
2517 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2518 {
2520
2521 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2523 if ( hasRootAsPlayer )
2525
2526
2527
2528
2529
2530
2531
2533 {
2534
2536 {
2538 {
2542 break;
2543
2547 break;
2548
2552 break;
2553
2557 default:
2560 return;
2561 }
2562
2563
2564 }
2565
2567
2569 {
2571 {
2572
2574 {
2576 }
2578 {
2581 {
2583 }
2584 else
2585 {
2587 {
2589 }
2590 else
2591 {
2593 }
2594 }
2595 }
2596 }
2597 }
2598
2599 }
2601 {
2602
2604 {
2606 {
2610 break;
2611
2615 break;
2616
2620 break;
2621
2625 break;
2626
2629 default:
2632 return;
2633 }
2634 }
2635
2637
2639 {
2641 {
2642
2644 {
2646 }
2647 }
2648 }
2649 }
2651 {
2652
2654 {
2656 {
2660 break;
2661
2664 default:
2667 return;
2668 }
2669 }
2670
2672
2674 {
2676 {
2677
2679 {
2681 }
2682 }
2683 }
2684 }
2685 else
2686 {
2687
2689
2691 {
2694
2695 }
2696 else
2697 {
2699 {
2702 }
2703 }
2704 }
2705 }
2706
2708 {
2709 if (
GetGame().IsDedicatedServer())
2710 return;
2711
2713 {
2715 GetInventory().GetCurrentInventoryLocation(invLoc);
2717 {
2719 if (ptcMgr)
2720 {
2725 }
2726 }
2727 }
2729 {
2731 {
2734 return;
2735 }
2736
2738 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2740 {
2743 }
2744 }
2745 }
2746
2747 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2748 {
2750 {
2755 }
2756
2757 super.GetDebugActions(outputList);
2758 }
2759
2761 {
2762 super.OnAction(action_id, player, ctx);
2763
2765 {
2766 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2767 {
2769 if (food_stage_prev <= 0)
2770 {
2772 }
2774 return true;
2775 }
2776 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2777 {
2780 {
2782 }
2784 return true;
2785 }
2786
2787 }
2788
2789 #ifdef DIAG_DEVELOPER
2790 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2791 {
2792 PrintNutritionsData();
2793 return true;
2794 }
2795 #endif
2796
2797 return false;
2798 }
2799
2801 {
2802 string debug_output;
2803
2804 debug_output = super.GetDebugText();
2805
2808
2809 return debug_output;
2810 }
2811
2812
2813
2814
2815
2817 {
2818 float ret = super.GetBaitEffectivity();
2819
2821 {
2822 ret *= 0.5;
2823 }
2824
2825 return ret;
2826 }
2827
2829 {
2831 }
2832
2834 {
2836 }
2837
2839 {
2841 }
2842
2843 #ifdef DIAG_DEVELOPER
2844 private void PrintNutritionsData()
2845 {
2846 string nutritionsData = "";
2847
2850
2852 if (profile)
2853 {
2854 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2856 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2860 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2862
2865
2866 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2868 }
2869
2870 nutritionsData += "-----\n";
2871
2873 }
2874 #endif
2875
2877
2880 {
2882 }
2883}
2884
2886{
2888};
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.