1706{
1708
1716
1726
1728
1730 {
1732 {
1734
1736 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1737
1741 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1742 }
1743 }
1744
1746 {
1748
1750 }
1751
1753 {
1754 super.EEDelete(parent);
1755
1757
1760 }
1761
1763 {
1764 super.EEItemLocationChanged(oldLoc, newLoc);
1765
1768 {
1769 switch (oldLoc.GetParent().GetType())
1770 {
1771 case "FryingPan":
1772 case "Pot":
1773 case "Cauldron":
1774 case "SharpWoodenStick":
1776 break;
1777 }
1778
1781 {
1783 }
1784 }
1785
1786 if (oldLoc.IsValid())
1788
1791 }
1792
1794 {
1797 }
1798
1800 {
1803
1804 return true;
1805 }
1806
1808 {
1810 {
1812 }
1813 }
1814
1817 {
1818 int foodStageType;
1819
1821 if (foodStage)
1822 foodStageType = foodStage.GetFoodStageType();
1823
1828
1829 return agentsIn;
1830 }
1831
1832
1834 {
1835 return false;
1836 }
1837
1839 {
1840 return false;
1841 }
1842
1844 {
1846 {
1848 {
1851
1854
1855 default:
1856 return super.GetTemperatureFreezeTime();
1857 }
1858 }
1859
1860 return super.GetTemperatureFreezeTime();
1861 }
1862
1864 {
1866 {
1868 {
1871
1874
1875 default:
1876 return super.GetTemperatureThawTime();
1877 }
1878 }
1879
1880 return super.GetTemperatureThawTime();
1881 }
1882
1884 {
1886 }
1887
1888
1889
1890
1892 {
1893 SetSynchDirty();
1894 }
1895
1897 {
1898 super.OnVariablesSynchronized();
1899
1900
1901
1902
1904 {
1906 }
1907 else
1908 {
1910 }
1911
1914 }
1915
1916
1917
1918
1920 {
1923
1925 }
1926
1928 {
1929 string soundName = "";
1930
1933
1935 {
1937 }
1938 else
1939 {
1941 {
1943 {
1948 else
1949 soundName = "";
1950 break;
1951 }
1952
1954 {
1959 else
1960 soundName = "";
1961 break;
1962 }
1963
1965 {
1970 else
1971 soundName = "";
1972 break;
1973 }
1974
1975 default:
1976 soundName = "";
1977 break;
1978 }
1979
1981 {
1982 if (soundName == "")
1983 {
1985 }
1986 else
1987 {
1989 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1990 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1992 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1993 {
1995 }
1996 }
1997 }
1998 }
1999
2001 }
2002
2004 {
2007 }
2008
2009
2010
2011
2013 {
2014 super.OnStoreSave(ctx);
2015
2017 {
2019 }
2020
2021
2024 }
2025
2027 {
2028 if (!super.OnStoreLoad(ctx, version))
2029 return false;
2030
2032 {
2034 return false;
2035 }
2036
2037 if (version >= 115)
2038 {
2040 {
2042 return false;
2043 }
2045 {
2047 return false;
2048 }
2049 }
2050
2053
2054 return true;
2055 }
2056
2058 {
2059 super.AfterStoreLoad();
2060
2062 }
2063
2064
2066 {
2068 }
2069
2070
2072 {
2073 return false;
2074 }
2075
2077 {
2078 return false;
2079 }
2080
2082 {
2083 return false;
2084 }
2085
2087 {
2088 return false;
2089 }
2090
2091
2092
2093
2094
2096 {
2099 {
2100 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2101 }
2102 else if (classname != "" && food_stage)
2103 {
2104 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2105 }
2106 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2108
2109 }
2110
2112 {
2115 {
2117 }
2118 else if (classname != "" && food_stage)
2119 {
2120 return FoodStage.GetEnergy(null, food_stage, classname);
2121 }
2122 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2124 }
2125
2127 {
2130 {
2132 }
2133 else if (classname != "" && food_stage)
2134 {
2135 return FoodStage.GetWater(null, food_stage, classname);
2136 }
2137 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2139 }
2140
2142 {
2145 {
2146 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2147 }
2148 else if (classname != "" && food_stage)
2149 {
2150 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2151 }
2152 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2154
2155 }
2156
2158 {
2161 {
2162 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2163 }
2164 else if (classname != "" && food_stage)
2165 {
2166 return FoodStage.GetToxicity(null, food_stage, classname);
2167 }
2168 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2170 }
2171
2173 {
2176 {
2178 }
2179 else if (classname != "" && food_stage)
2180 {
2181 return FoodStage.GetAgents(null, food_stage, classname);
2182 }
2183 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2185 }
2186
2188 {
2191 {
2192 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2193 }
2194 else if (classname != "" && food_stage)
2195 {
2196 return FoodStage.GetDigestibility(null, food_stage, classname);
2197 }
2198 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2200 }
2201
2203 {
2206 {
2207 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2208 }
2209 else if (className != "" && foodStage)
2210 {
2211 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2212 }
2213 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2215 }
2216
2218 {
2228
2229 return profile;
2230 }
2231
2232
2233
2234
2236 {
2238 }
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
2292 {
2294 {
2296 }
2297
2298 return false;
2299 }
2300
2301
2303 {
2305 }
2306
2308 {
2309 return GetFoodStage().GetNextFoodStageType( cooking_method );
2310 }
2311
2313 {
2314 return GetFoodStage().GetFoodStageName( food_stage_type );
2315 }
2316
2318 {
2319 return GetFoodStage().CanChangeToNewStage( cooking_method );
2320 }
2321
2322
2324 {
2325 if ( !source.GetFoodStage())
2326 return;
2331 }
2332
2335 {
2338 }
2339
2342 {
2343 switch (stageNew)
2344 {
2349 break;
2350
2353 break;
2354 }
2355 }
2356
2357
2358
2359
2360
2362 {
2364 }
2365
2367 {
2369
2370
2372 }
2373
2375 {
2377 {
2380 }
2381 }
2382
2383
2385 {
2387 if (player)
2388 {
2390 player.ServerReplaceItemInHandsWithNew(lambda);
2391 }
2392 else
2393 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2394 }
2395
2397 {
2399 }
2400
2402 {
2403 super.SetActions();
2404
2407 }
2408
2410 {
2411 #ifndef SERVER
2413 {
2415
2418 }
2419 #endif
2420 }
2421
2423 {
2424 #ifndef SERVER
2426 {
2430 }
2431 #endif
2432 }
2433
2435 {
2436 return false;
2437 }
2438
2440 {
2442 }
2443
2444 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2445 {
2447
2448 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2450 if ( hasRootAsPlayer )
2452
2453
2454
2455
2456
2457
2458
2460 {
2461
2463 {
2465 {
2469 break;
2470
2474 break;
2475
2479 break;
2480
2484 default:
2487 return;
2488 }
2489
2490
2491 }
2492
2494
2496 {
2498 {
2499
2501 {
2503 }
2505 {
2508 {
2510 }
2511 else
2512 {
2514 {
2516 }
2517 else
2518 {
2520 }
2521 }
2522 }
2523 }
2524 }
2525
2526 }
2528 {
2529
2531 {
2533 {
2537 break;
2538
2542 break;
2543
2547 break;
2548
2552 break;
2553
2556 default:
2559 return;
2560 }
2561 }
2562
2564
2566 {
2568 {
2569
2571 {
2573 }
2574 }
2575 }
2576 }
2578 {
2579
2581 {
2583 {
2587 break;
2588
2591 default:
2594 return;
2595 }
2596 }
2597
2599
2601 {
2603 {
2604
2606 {
2608 }
2609 }
2610 }
2611 }
2612 else
2613 {
2614
2616
2618 {
2621
2622 }
2623 else
2624 {
2626 {
2629 }
2630 }
2631 }
2632 }
2633
2635 {
2636 if (
GetGame().IsDedicatedServer())
2637 return;
2638
2640 {
2642 GetInventory().GetCurrentInventoryLocation(invLoc);
2644 {
2646 if (ptcMgr)
2647 {
2652 }
2653 }
2654 }
2656 {
2658 {
2661 return;
2662 }
2663
2665 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2667 {
2670 }
2671 }
2672 }
2673
2674 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2675 {
2676 super.GetDebugActions(outputList);
2677
2679 {
2683 }
2684 }
2685
2687 {
2688 super.OnAction(action_id, player, ctx);
2689
2691 {
2692 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2693 {
2695 if (food_stage_prev <= 0)
2696 {
2698 }
2700 return true;
2701 }
2702 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2703 {
2706 {
2708 }
2710 return true;
2711 }
2712
2713 }
2714
2715 #ifdef DIAG_DEVELOPER
2716 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2717 {
2718 PrintNutritionsData();
2719 return true;
2720 }
2721 #endif
2722
2723 return false;
2724 }
2725
2727 {
2728 string debug_output;
2729
2730 debug_output = super.GetDebugText();
2731
2734
2735 return debug_output;
2736 }
2737
2738
2739
2740
2741
2743 {
2744 float ret = super.GetBaitEffectivity();
2745
2747 {
2748 ret *= 0.5;
2749 }
2750
2751 return ret;
2752 }
2753
2755 {
2757 }
2758
2760 {
2762 }
2763
2765 {
2767 }
2768
2769 #ifdef DIAG_DEVELOPER
2770 private void PrintNutritionsData()
2771 {
2772 string nutritionsData = "";
2773
2776
2778 if (profile)
2779 {
2780 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2782 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2786 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2788
2791
2792 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2794 }
2795
2796 nutritionsData += "-----\n";
2797
2799 }
2800 #endif
2801
2803
2806 {
2808 }
2809}
2810
2812{
2814};
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.