1676{
1678
1686
1696
1698
1700 {
1702 {
1704
1706 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1707
1711 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1712 }
1713 }
1714
1716 {
1718
1720 }
1721
1723 {
1724 super.EEDelete(parent);
1725
1727
1730 }
1731
1733 {
1734 super.EEItemLocationChanged(oldLoc, newLoc);
1735
1738 {
1739 switch (oldLoc.GetParent().GetType())
1740 {
1741 case "FryingPan":
1742 case "Pot":
1743 case "Cauldron":
1744 case "SharpWoodenStick":
1746 break;
1747 }
1748
1751 {
1753 }
1754 }
1755
1756 if (oldLoc.IsValid())
1758
1761 }
1762
1764 {
1767 }
1768
1770 {
1773
1774 return true;
1775 }
1776
1778 {
1780 {
1782 }
1783 }
1784
1787 {
1788 int foodStageType;
1789
1791 if (foodStage)
1792 foodStageType = foodStage.GetFoodStageType();
1793
1798
1799 return agentsIn;
1800 }
1801
1802
1804 {
1805 return false;
1806 }
1807
1809 {
1810 return false;
1811 }
1812
1814 {
1816 {
1818 {
1821
1824
1825 default:
1826 return super.GetTemperatureFreezeTime();
1827 }
1828 }
1829
1830 return super.GetTemperatureFreezeTime();
1831 }
1832
1834 {
1836 {
1838 {
1841
1844
1845 default:
1846 return super.GetTemperatureThawTime();
1847 }
1848 }
1849
1850 return super.GetTemperatureThawTime();
1851 }
1852
1854 {
1856 }
1857
1858
1859
1860
1862 {
1863 SetSynchDirty();
1864 }
1865
1867 {
1868 super.OnVariablesSynchronized();
1869
1870
1871
1872
1874 {
1876 }
1877 else
1878 {
1880 }
1881
1884 }
1885
1886
1887
1888
1890 {
1893
1895 }
1896
1898 {
1899 string soundName = "";
1900
1903
1905 {
1907 }
1908 else
1909 {
1911 {
1913 {
1918 else
1919 soundName = "";
1920 break;
1921 }
1922
1924 {
1929 else
1930 soundName = "";
1931 break;
1932 }
1933
1935 {
1940 else
1941 soundName = "";
1942 break;
1943 }
1944
1945 default:
1946 soundName = "";
1947 break;
1948 }
1949
1951 {
1952 if (soundName == "")
1953 {
1955 }
1956 else
1957 {
1959 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1960 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1962 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1963 {
1965 }
1966 }
1967 }
1968 }
1969
1971 }
1972
1974 {
1977 }
1978
1979
1980
1981
1983 {
1984 super.OnStoreSave(ctx);
1985
1987 {
1989 }
1990
1991
1994 }
1995
1997 {
1998 if (!super.OnStoreLoad(ctx, version))
1999 return false;
2000
2002 {
2004 return false;
2005 }
2006
2007 if (version >= 115)
2008 {
2010 {
2012 return false;
2013 }
2015 {
2017 return false;
2018 }
2019 }
2020
2023
2024 return true;
2025 }
2026
2028 {
2029 super.AfterStoreLoad();
2030
2032 }
2033
2034
2036 {
2038 }
2039
2040
2042 {
2043 return false;
2044 }
2045
2047 {
2048 return false;
2049 }
2050
2052 {
2053 return false;
2054 }
2055
2057 {
2058 return false;
2059 }
2060
2061
2062
2063
2064
2066 {
2069 {
2070 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
2071 }
2072 else if (classname != "" && food_stage)
2073 {
2074 return FoodStage.GetFullnessIndex(null, food_stage, classname);
2075 }
2076 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
2078
2079 }
2080
2082 {
2085 {
2087 }
2088 else if (classname != "" && food_stage)
2089 {
2090 return FoodStage.GetEnergy(null, food_stage, classname);
2091 }
2092 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2094 }
2095
2097 {
2100 {
2102 }
2103 else if (classname != "" && food_stage)
2104 {
2105 return FoodStage.GetWater(null, food_stage, classname);
2106 }
2107 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2109 }
2110
2112 {
2115 {
2116 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2117 }
2118 else if (classname != "" && food_stage)
2119 {
2120 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2121 }
2122 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2124
2125 }
2126
2128 {
2131 {
2132 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2133 }
2134 else if (classname != "" && food_stage)
2135 {
2136 return FoodStage.GetToxicity(null, food_stage, classname);
2137 }
2138 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2140 }
2141
2143 {
2146 {
2148 }
2149 else if (classname != "" && food_stage)
2150 {
2151 return FoodStage.GetAgents(null, food_stage, classname);
2152 }
2153 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2155 }
2156
2158 {
2161 {
2162 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2163 }
2164 else if (classname != "" && food_stage)
2165 {
2166 return FoodStage.GetDigestibility(null, food_stage, classname);
2167 }
2168 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2170 }
2171
2173 {
2176 {
2177 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2178 }
2179 else if (className != "" && foodStage)
2180 {
2181 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2182 }
2183 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2185 }
2186
2188 {
2198
2199 return profile;
2200 }
2201
2202
2203
2204
2206 {
2208 }
2209
2210
2212 {
2214 {
2216 }
2217
2218 return false;
2219 }
2220
2222 {
2224 {
2226 }
2227
2228 return false;
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
2271
2273 {
2275 }
2276
2278 {
2279 return GetFoodStage().GetNextFoodStageType( cooking_method );
2280 }
2281
2283 {
2284 return GetFoodStage().GetFoodStageName( food_stage_type );
2285 }
2286
2288 {
2289 return GetFoodStage().CanChangeToNewStage( cooking_method );
2290 }
2291
2292
2294 {
2295 if ( !source.GetFoodStage())
2296 return;
2301 }
2302
2305 {
2308 }
2309
2312 {
2313 switch (stageNew)
2314 {
2319 break;
2320
2323 break;
2324 }
2325 }
2326
2327
2328
2329
2330
2332 {
2334 }
2335
2337 {
2339
2340
2342 }
2343
2345 {
2347 {
2350 }
2351 }
2352
2353
2355 {
2357 if (player)
2358 {
2360 player.ServerReplaceItemInHandsWithNew(lambda);
2361 }
2362 else
2363 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2364 }
2365
2367 {
2369 }
2370
2372 {
2373 super.SetActions();
2374
2377 }
2378
2380 {
2381 #ifndef SERVER
2383 {
2385
2388 }
2389 #endif
2390 }
2391
2393 {
2394 #ifndef SERVER
2396 {
2400 }
2401 #endif
2402 }
2403
2405 {
2406 return false;
2407 }
2408
2410 {
2412 }
2413
2414 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2415 {
2417
2418 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2420 if ( hasRootAsPlayer )
2422
2423
2424
2425
2426
2427
2428
2430 {
2431
2433 {
2435 {
2439 break;
2440
2444 break;
2445
2449 break;
2450
2454 default:
2457 return;
2458 }
2459
2460
2461 }
2462
2464
2466 {
2468 {
2469
2471 {
2473 }
2475 {
2478 {
2480 }
2481 else
2482 {
2484 {
2486 }
2487 else
2488 {
2490 }
2491 }
2492 }
2493 }
2494 }
2495
2496 }
2498 {
2499
2501 {
2503 {
2507 break;
2508
2512 break;
2513
2517 break;
2518
2522 break;
2523
2526 default:
2529 return;
2530 }
2531 }
2532
2534
2536 {
2538 {
2539
2541 {
2543 }
2544 }
2545 }
2546 }
2548 {
2549
2551 {
2553 {
2557 break;
2558
2561 default:
2564 return;
2565 }
2566 }
2567
2569
2571 {
2573 {
2574
2576 {
2578 }
2579 }
2580 }
2581 }
2582 else
2583 {
2584
2586
2588 {
2591
2592 }
2593 else
2594 {
2596 {
2599 }
2600 }
2601 }
2602 }
2603
2605 {
2606 if (
GetGame().IsDedicatedServer())
2607 return;
2608
2610 {
2612 GetInventory().GetCurrentInventoryLocation(invLoc);
2614 {
2616 if (ptcMgr)
2617 {
2622 }
2623 }
2624 }
2626 {
2628 {
2631 return;
2632 }
2633
2635 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2637 {
2640 }
2641 }
2642 }
2643
2644 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2645 {
2647 {
2652 }
2653
2654 super.GetDebugActions(outputList);
2655 }
2656
2658 {
2659 super.OnAction(action_id, player, ctx);
2660
2662 {
2663 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2664 {
2666 if (food_stage_prev <= 0)
2667 {
2669 }
2671 return true;
2672 }
2673 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2674 {
2677 {
2679 }
2681 return true;
2682 }
2683
2684 }
2685
2686 #ifdef DIAG_DEVELOPER
2687 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2688 {
2689 PrintNutritionsData();
2690 return true;
2691 }
2692 #endif
2693
2694 return false;
2695 }
2696
2698 {
2699 string debug_output;
2700
2701 debug_output = super.GetDebugText();
2702
2705
2706 return debug_output;
2707 }
2708
2709
2710
2711
2712
2714 {
2715 float ret = super.GetBaitEffectivity();
2716
2718 {
2719 ret *= 0.5;
2720 }
2721
2722 return ret;
2723 }
2724
2726 {
2728 }
2729
2731 {
2733 }
2734
2736 {
2738 }
2739
2740 #ifdef DIAG_DEVELOPER
2741 private void PrintNutritionsData()
2742 {
2743 string nutritionsData = "";
2744
2747
2749 if (profile)
2750 {
2751 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2753 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2757 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2759
2762
2763 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2765 }
2766
2767 nutritionsData += "-----\n";
2768
2770 }
2771 #endif
2772
2774
2777 {
2779 }
2780}
2781
2783{
2785};
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.