1696{
1698
1706
1716
1718
1720 {
1722 {
1724
1726 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1727
1731 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1732 }
1733 }
1734
1736 {
1738
1740 }
1741
1743 {
1744 super.EEDelete(parent);
1745
1747
1750 }
1751
1753 {
1754 super.EEItemLocationChanged(oldLoc, newLoc);
1755
1758 {
1759 switch (oldLoc.GetParent().GetType())
1760 {
1761 case "FryingPan":
1762 case "Pot":
1763 case "Cauldron":
1764 case "SharpWoodenStick":
1766 break;
1767 }
1768
1771 {
1773 }
1774 }
1775
1776 if (oldLoc.IsValid())
1778
1781 }
1782
1784 {
1787 }
1788
1790 {
1793
1794 return true;
1795 }
1796
1798 {
1800 {
1802 }
1803 }
1804
1807 {
1808 int foodStageType;
1809
1811 if (foodStage)
1812 foodStageType = foodStage.GetFoodStageType();
1813
1818
1819 return agentsIn;
1820 }
1821
1822
1824 {
1825 return false;
1826 }
1827
1829 {
1830 return false;
1831 }
1832
1834 {
1836 {
1838 {
1841
1844
1845 default:
1846 return super.GetTemperatureFreezeTime();
1847 }
1848 }
1849
1850 return super.GetTemperatureFreezeTime();
1851 }
1852
1854 {
1856 {
1858 {
1861
1864
1865 default:
1866 return super.GetTemperatureThawTime();
1867 }
1868 }
1869
1870 return super.GetTemperatureThawTime();
1871 }
1872
1874 {
1876 }
1877
1878
1879
1880
1882 {
1883 SetSynchDirty();
1884 }
1885
1887 {
1888 super.OnVariablesSynchronized();
1889
1890
1891
1892
1894 {
1896 }
1897 else
1898 {
1900 }
1901
1904 }
1905
1906
1907
1908
1910 {
1913
1915 }
1916
1918 {
1919 string soundName = "";
1920
1923
1925 {
1927 }
1928 else
1929 {
1931 {
1933 {
1938 else
1939 soundName = "";
1940 break;
1941 }
1942
1944 {
1949 else
1950 soundName = "";
1951 break;
1952 }
1953
1955 {
1960 else
1961 soundName = "";
1962 break;
1963 }
1964
1965 default:
1966 soundName = "";
1967 break;
1968 }
1969
1971 {
1972 if (soundName == "")
1973 {
1975 }
1976 else
1977 {
1979 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1980 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1982 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1983 {
1985 }
1986 }
1987 }
1988 }
1989
1991 }
1992
1994 {
1997 }
1998
1999
2000
2001
2003 {
2004 super.OnStoreSave(ctx);
2005
2007 {
2009 }
2010
2011
2014 }
2015
2017 {
2018 if (!super.OnStoreLoad(ctx, version))
2019 return false;
2020
2022 {
2024 return false;
2025 }
2026
2027 if (version >= 115)
2028 {
2030 {
2032 return false;
2033 }
2035 {
2037 return false;
2038 }
2039 }
2040
2043
2044 return true;
2045 }
2046
2048 {
2049 super.AfterStoreLoad();
2050
2052 }
2053
2054
2056 {
2058 }
2059
2060
2062 {
2063 return false;
2064 }
2065
2067 {
2068 return false;
2069 }
2070
2072 {
2073 return false;
2074 }
2075
2077 {
2078 return false;
2079 }
2080
2081
2082
2083
2084
2086 {
2089 {
2090 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2091 }
2092 else if (classname != "" && food_stage)
2093 {
2094 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2095 }
2096 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2098
2099 }
2100
2102 {
2105 {
2107 }
2108 else if (classname != "" && food_stage)
2109 {
2110 return FoodStage.GetEnergy(null, food_stage, classname);
2111 }
2112 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2114 }
2115
2117 {
2120 {
2122 }
2123 else if (classname != "" && food_stage)
2124 {
2125 return FoodStage.GetWater(null, food_stage, classname);
2126 }
2127 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2129 }
2130
2132 {
2135 {
2136 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2137 }
2138 else if (classname != "" && food_stage)
2139 {
2140 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2141 }
2142 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2144
2145 }
2146
2148 {
2151 {
2152 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2153 }
2154 else if (classname != "" && food_stage)
2155 {
2156 return FoodStage.GetToxicity(null, food_stage, classname);
2157 }
2158 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2160 }
2161
2163 {
2166 {
2168 }
2169 else if (classname != "" && food_stage)
2170 {
2171 return FoodStage.GetAgents(null, food_stage, classname);
2172 }
2173 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2175 }
2176
2178 {
2181 {
2182 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2183 }
2184 else if (classname != "" && food_stage)
2185 {
2186 return FoodStage.GetDigestibility(null, food_stage, classname);
2187 }
2188 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2190 }
2191
2193 {
2196 {
2197 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2198 }
2199 else if (className != "" && foodStage)
2200 {
2201 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2202 }
2203 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2205 }
2206
2208 {
2218
2219 return profile;
2220 }
2221
2222
2223
2224
2226 {
2228 }
2229
2230
2232 {
2234 {
2236 }
2237
2238 return false;
2239 }
2240
2242 {
2244 {
2246 }
2247
2248 return false;
2249 }
2250
2252 {
2254 {
2256 }
2257
2258 return false;
2259 }
2260
2262 {
2264 {
2266 }
2267
2268 return false;
2269 }
2270
2272 {
2274 {
2276 }
2277
2278 return false;
2279 }
2280
2282 {
2284 {
2286 }
2287
2288 return false;
2289 }
2290
2291
2293 {
2295 }
2296
2298 {
2299 return GetFoodStage().GetNextFoodStageType( cooking_method );
2300 }
2301
2303 {
2304 return GetFoodStage().GetFoodStageName( food_stage_type );
2305 }
2306
2308 {
2309 return GetFoodStage().CanChangeToNewStage( cooking_method );
2310 }
2311
2312
2314 {
2315 if ( !source.GetFoodStage())
2316 return;
2321 }
2322
2325 {
2328 }
2329
2332 {
2333 switch (stageNew)
2334 {
2339 break;
2340
2343 break;
2344 }
2345 }
2346
2347
2348
2349
2350
2352 {
2354 }
2355
2357 {
2359
2360
2362 }
2363
2365 {
2367 {
2370 }
2371 }
2372
2373
2375 {
2377 if (player)
2378 {
2380 player.ServerReplaceItemInHandsWithNew(lambda);
2381 }
2382 else
2383 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2384 }
2385
2387 {
2389 }
2390
2392 {
2393 super.SetActions();
2394
2397 }
2398
2400 {
2401 #ifndef SERVER
2403 {
2405
2408 }
2409 #endif
2410 }
2411
2413 {
2414 #ifndef SERVER
2416 {
2420 }
2421 #endif
2422 }
2423
2425 {
2426 return false;
2427 }
2428
2430 {
2432 }
2433
2434 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2435 {
2437
2438 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2440 if ( hasRootAsPlayer )
2442
2443
2444
2445
2446
2447
2448
2450 {
2451
2453 {
2455 {
2459 break;
2460
2464 break;
2465
2469 break;
2470
2474 default:
2477 return;
2478 }
2479
2480
2481 }
2482
2484
2486 {
2488 {
2489
2491 {
2493 }
2495 {
2498 {
2500 }
2501 else
2502 {
2504 {
2506 }
2507 else
2508 {
2510 }
2511 }
2512 }
2513 }
2514 }
2515
2516 }
2518 {
2519
2521 {
2523 {
2527 break;
2528
2532 break;
2533
2537 break;
2538
2542 break;
2543
2546 default:
2549 return;
2550 }
2551 }
2552
2554
2556 {
2558 {
2559
2561 {
2563 }
2564 }
2565 }
2566 }
2568 {
2569
2571 {
2573 {
2577 break;
2578
2581 default:
2584 return;
2585 }
2586 }
2587
2589
2591 {
2593 {
2594
2596 {
2598 }
2599 }
2600 }
2601 }
2602 else
2603 {
2604
2606
2608 {
2611
2612 }
2613 else
2614 {
2616 {
2619 }
2620 }
2621 }
2622 }
2623
2625 {
2626 if (
GetGame().IsDedicatedServer())
2627 return;
2628
2630 {
2632 GetInventory().GetCurrentInventoryLocation(invLoc);
2634 {
2636 if (ptcMgr)
2637 {
2642 }
2643 }
2644 }
2646 {
2648 {
2651 return;
2652 }
2653
2655 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2657 {
2660 }
2661 }
2662 }
2663
2664 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2665 {
2667 {
2672 }
2673
2674 super.GetDebugActions(outputList);
2675 }
2676
2678 {
2679 super.OnAction(action_id, player, ctx);
2680
2682 {
2683 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2684 {
2686 if (food_stage_prev <= 0)
2687 {
2689 }
2691 return true;
2692 }
2693 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2694 {
2697 {
2699 }
2701 return true;
2702 }
2703
2704 }
2705
2706 #ifdef DIAG_DEVELOPER
2707 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2708 {
2709 PrintNutritionsData();
2710 return true;
2711 }
2712 #endif
2713
2714 return false;
2715 }
2716
2718 {
2719 string debug_output;
2720
2721 debug_output = super.GetDebugText();
2722
2725
2726 return debug_output;
2727 }
2728
2729
2730
2731
2732
2734 {
2735 float ret = super.GetBaitEffectivity();
2736
2738 {
2739 ret *= 0.5;
2740 }
2741
2742 return ret;
2743 }
2744
2746 {
2748 }
2749
2751 {
2753 }
2754
2756 {
2758 }
2759
2760 #ifdef DIAG_DEVELOPER
2761 private void PrintNutritionsData()
2762 {
2763 string nutritionsData = "";
2764
2767
2769 if (profile)
2770 {
2771 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2773 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2777 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2779
2782
2783 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2785 }
2786
2787 nutritionsData += "-----\n";
2788
2790 }
2791 #endif
2792
2794
2797 {
2799 }
2800}
2801
2803{
2805};
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.