1721{
1723
1731
1741
1743
1745 {
1747 {
1749
1751 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1752
1756 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1757 }
1758 }
1759
1761 {
1763
1765 }
1766
1768 {
1769 super.EEDelete(parent);
1770
1772
1775 }
1776
1778 {
1779 super.EEItemLocationChanged(oldLoc, newLoc);
1780
1783 {
1784 switch (oldLoc.GetParent().GetType())
1785 {
1786 case "FryingPan":
1787 case "Pot":
1788 case "Cauldron":
1789 case "SharpWoodenStick":
1791 break;
1792 }
1793
1796 {
1798 }
1799 }
1800
1801 if (oldLoc.IsValid())
1803
1806 }
1807
1809 {
1812 }
1813
1815 {
1818
1819 return true;
1820 }
1821
1823 {
1825 {
1827 }
1828 }
1829
1832 {
1833 int foodStageType;
1834
1836 if (foodStage)
1837 foodStageType = foodStage.GetFoodStageType();
1838
1843
1844 return agentsIn;
1845 }
1846
1847
1849 {
1850 return false;
1851 }
1852
1854 {
1855 return false;
1856 }
1857
1859 {
1861 {
1863 {
1866
1869
1870 default:
1871 return super.GetTemperatureFreezeTime();
1872 }
1873 }
1874
1875 return super.GetTemperatureFreezeTime();
1876 }
1877
1879 {
1881 {
1883 {
1886
1889
1890 default:
1891 return super.GetTemperatureThawTime();
1892 }
1893 }
1894
1895 return super.GetTemperatureThawTime();
1896 }
1897
1899 {
1901 }
1902
1903
1904
1905
1907 {
1908 SetSynchDirty();
1909 }
1910
1912 {
1913 super.OnVariablesSynchronized();
1914
1915
1916
1917
1919 {
1921 }
1922 else
1923 {
1925 }
1926
1929 }
1930
1931
1932
1933
1935 {
1938
1940 }
1941
1943 {
1944 string soundName = "";
1945
1948
1950 {
1952 }
1953 else
1954 {
1956 {
1958 {
1963 else
1964 soundName = "";
1965 break;
1966 }
1967
1969 {
1974 else
1975 soundName = "";
1976 break;
1977 }
1978
1980 {
1985 else
1986 soundName = "";
1987 break;
1988 }
1989
1990 default:
1991 soundName = "";
1992 break;
1993 }
1994
1996 {
1997 if (soundName == "")
1998 {
2000 }
2001 else
2002 {
2004 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
2005 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
2007 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
2008 {
2010 }
2011 }
2012 }
2013 }
2014
2016 }
2017
2019 {
2022 }
2023
2024
2025
2026
2028 {
2029 super.OnStoreSave(ctx);
2030
2032 {
2034 }
2035
2036
2039 }
2040
2042 {
2043 if (!super.OnStoreLoad(ctx, version))
2044 return false;
2045
2047 {
2049 return false;
2050 }
2051
2052 if (version >= 115)
2053 {
2055 {
2057 return false;
2058 }
2060 {
2062 return false;
2063 }
2064 }
2065
2068
2069 return true;
2070 }
2071
2073 {
2074 super.AfterStoreLoad();
2075
2077 }
2078
2079
2081 {
2083 }
2084
2085
2087 {
2088 return false;
2089 }
2090
2092 {
2093 return false;
2094 }
2095
2097 {
2098 return false;
2099 }
2100
2102 {
2103 return false;
2104 }
2105
2106
2107
2108
2109
2111 {
2114 {
2115 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2116 }
2117 else if (classname != "" && food_stage)
2118 {
2119 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2120 }
2121 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2122 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
2123
2124 }
2125
2127 {
2130 {
2132 }
2133 else if (classname != "" && food_stage)
2134 {
2135 return FoodStage.GetEnergy(null, food_stage, classname);
2136 }
2137 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2138 return g_Game.ConfigGetFloat( class_path +
" energy" );
2139 }
2140
2142 {
2145 {
2147 }
2148 else if (classname != "" && food_stage)
2149 {
2150 return FoodStage.GetWater(null, food_stage, classname);
2151 }
2152 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2153 return g_Game.ConfigGetFloat( class_path +
" water" );
2154 }
2155
2157 {
2160 {
2161 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2162 }
2163 else if (classname != "" && food_stage)
2164 {
2165 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2166 }
2167 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2168 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
2169
2170 }
2171
2173 {
2176 {
2177 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2178 }
2179 else if (classname != "" && food_stage)
2180 {
2181 return FoodStage.GetToxicity(null, food_stage, classname);
2182 }
2183 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2184 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
2185 }
2186
2188 {
2191 {
2193 }
2194 else if (classname != "" && food_stage)
2195 {
2196 return FoodStage.GetAgents(null, food_stage, classname);
2197 }
2198 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2199 return g_Game.ConfigGetInt( class_path +
" agents" );
2200 }
2201
2203 {
2206 {
2207 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2208 }
2209 else if (classname != "" && food_stage)
2210 {
2211 return FoodStage.GetDigestibility(null, food_stage, classname);
2212 }
2213 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2214 return g_Game.ConfigGetInt( class_path +
" digestibility" );
2215 }
2216
2218 {
2221 {
2222 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2223 }
2224 else if (className != "" && foodStage)
2225 {
2226 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2227 }
2228 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2229 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
2230 }
2231
2233 {
2243
2244 return profile;
2245 }
2246
2247
2248
2249
2251 {
2253 }
2254
2255
2257 {
2259 {
2261 }
2262
2263 return false;
2264 }
2265
2267 {
2269 {
2271 }
2272
2273 return false;
2274 }
2275
2277 {
2279 {
2281 }
2282
2283 return false;
2284 }
2285
2287 {
2289 {
2291 }
2292
2293 return false;
2294 }
2295
2297 {
2299 {
2301 }
2302
2303 return false;
2304 }
2305
2307 {
2309 {
2311 }
2312
2313 return false;
2314 }
2315
2316
2318 {
2320 }
2321
2323 {
2324 return GetFoodStage().GetNextFoodStageType( cooking_method );
2325 }
2326
2328 {
2329 return GetFoodStage().GetFoodStageName( food_stage_type );
2330 }
2331
2333 {
2334 return GetFoodStage().CanChangeToNewStage( cooking_method );
2335 }
2336
2337
2339 {
2340 if ( !source.GetFoodStage())
2341 return;
2346 }
2347
2350 {
2353 }
2354
2357 {
2358 switch (stageNew)
2359 {
2364 break;
2365
2368 break;
2369 }
2370 }
2371
2372
2373
2374
2375
2377 {
2379 }
2380
2382 {
2384
2385
2387 }
2388
2390 {
2392 {
2395 }
2396 }
2397
2398
2400 {
2402 if (player)
2403 {
2405 player.ServerReplaceItemInHandsWithNew(lambda);
2406 }
2407 else
2408 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2409 }
2410
2412 {
2414 }
2415
2417 {
2418 super.SetActions();
2419
2422 }
2423
2425 {
2426 #ifndef SERVER
2427 #ifndef NO_GUI
2429 {
2431
2434 }
2435 #endif
2436 #endif
2437 }
2438
2440 {
2441 #ifndef SERVER
2442 #ifndef NO_GUI
2444 {
2448 }
2449 #endif
2450 #endif
2451 }
2452
2454 {
2455 return false;
2456 }
2457
2459 {
2461 }
2462
2463 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2464 {
2466
2467 delta *= DayZGame.Cast(
g_Game).GetFoodDecayModifier();
2469 if ( hasRootAsPlayer )
2471
2472
2473
2474
2475
2476
2477
2479 {
2480
2482 {
2484 {
2488 break;
2489
2493 break;
2494
2498 break;
2499
2503 default:
2506 return;
2507 }
2508
2509
2510 }
2511
2513
2515 {
2517 {
2518
2520 {
2522 }
2524 {
2527 {
2529 }
2530 else
2531 {
2533 {
2535 }
2536 else
2537 {
2539 }
2540 }
2541 }
2542 }
2543 }
2544
2545 }
2547 {
2548
2550 {
2552 {
2556 break;
2557
2561 break;
2562
2566 break;
2567
2571 break;
2572
2575 default:
2578 return;
2579 }
2580 }
2581
2583
2585 {
2587 {
2588
2590 {
2592 }
2593 }
2594 }
2595 }
2597 {
2598
2600 {
2602 {
2606 break;
2607
2610 default:
2613 return;
2614 }
2615 }
2616
2618
2620 {
2622 {
2623
2625 {
2627 }
2628 }
2629 }
2630 }
2631 else
2632 {
2633
2635
2637 {
2640
2641 }
2642 else
2643 {
2645 {
2648 }
2649 }
2650 }
2651 }
2652
2654 {
2655 if (
g_Game.IsHeadlessOrDedicatedServer())
2656 return;
2657
2659 {
2661 GetInventory().GetCurrentInventoryLocation(invLoc);
2663 {
2665 if (ptcMgr)
2666 {
2671 }
2672 }
2673 }
2675 {
2677 {
2680 return;
2681 }
2682
2684 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2686 {
2689 }
2690 }
2691 }
2692
2693 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2694 {
2696 {
2701 }
2702
2703 super.GetDebugActions(outputList);
2704 }
2705
2707 {
2708 super.OnAction(action_id, player, ctx);
2709
2711 {
2712 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2713 {
2715 if (food_stage_prev <= 0)
2716 {
2718 }
2720 return true;
2721 }
2722 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2723 {
2726 {
2728 }
2730 return true;
2731 }
2732
2733 }
2734
2735 #ifdef DIAG_DEVELOPER
2736 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2737 {
2738 PrintNutritionsData();
2739 return true;
2740 }
2741 #endif
2742
2743 return false;
2744 }
2745
2747 {
2748 string debug_output;
2749
2750 debug_output = super.GetDebugText();
2751
2754
2755 return debug_output;
2756 }
2757
2758
2759
2760
2761
2763 {
2764 float ret = super.GetBaitEffectivity();
2765
2767 {
2768 ret *= 0.5;
2769 }
2770
2771 return ret;
2772 }
2773
2775 {
2777 }
2778
2780 {
2782 }
2783
2785 {
2787 }
2788
2789 #ifdef DIAG_DEVELOPER
2790 private void PrintNutritionsData()
2791 {
2792 string nutritionsData = "";
2793
2796
2798 if (profile)
2799 {
2800 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2802 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2806 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2808
2811
2812 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2814 }
2815
2816 nutritionsData += "-----\n";
2817
2819 }
2820 #endif
2821
2823
2826 {
2828 }
2829}
2830
2832{
2834};
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 RemoveAllAgentsExcept(int agent_to_keep)
override void InsertAgent(int agent, float count=1)
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.
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
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
vector GetPosition()
Get the world position of the Effect.
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.