1592{
1594
1602
1612
1614
1616 {
1618 {
1620
1622 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1623
1627 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1628 }
1629 }
1630
1632 {
1634
1636 }
1637
1639 {
1640 super.EEDelete(parent);
1641
1643
1646 }
1647
1649 {
1650 super.EEItemLocationChanged(oldLoc, newLoc);
1651
1654 {
1655 switch (oldLoc.GetParent().GetType())
1656 {
1657 case "FryingPan":
1658 case "Pot":
1659 case "Cauldron":
1660 case "SharpWoodenStick":
1662 break;
1663 }
1664
1667 {
1669 }
1670 }
1671
1672 if (oldLoc.IsValid())
1674
1677 }
1678
1680 {
1683 }
1684
1686 {
1689
1690 return true;
1691 }
1692
1694 {
1696 {
1698 }
1699 }
1700
1703 {
1704 int foodStageType;
1705
1707 if (foodStage)
1708 foodStageType = foodStage.GetFoodStageType();
1709
1714
1715 return agentsIn;
1716 }
1717
1718
1720 {
1721 return false;
1722 }
1723
1725 {
1726 return false;
1727 }
1728
1730 {
1732 {
1734 {
1737
1740
1741 default:
1742 return super.GetTemperatureFreezeTime();
1743 }
1744 }
1745
1746 return super.GetTemperatureFreezeTime();
1747 }
1748
1750 {
1752 {
1754 {
1757
1760
1761 default:
1762 return super.GetTemperatureThawTime();
1763 }
1764 }
1765
1766 return super.GetTemperatureThawTime();
1767 }
1768
1770 {
1772 }
1773
1774
1775
1776
1778 {
1779 SetSynchDirty();
1780 }
1781
1783 {
1784 super.OnVariablesSynchronized();
1785
1786
1787
1788
1790 {
1792 }
1793 else
1794 {
1796 }
1797
1800 }
1801
1802
1803
1804
1806 {
1809
1811 }
1812
1814 {
1815 string soundName = "";
1816
1819
1821 {
1823 }
1824 else
1825 {
1827 {
1829 {
1834 else
1835 soundName = "";
1836 break;
1837 }
1838
1840 {
1845 else
1846 soundName = "";
1847 break;
1848 }
1849
1851 {
1856 else
1857 soundName = "";
1858 break;
1859 }
1860
1861 default:
1862 soundName = "";
1863 break;
1864 }
1865
1867 {
1868 if (soundName == "")
1869 {
1871 }
1872 else
1873 {
1875 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1876 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1878 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1879 {
1881 }
1882 }
1883 }
1884 }
1885
1887 }
1888
1890 {
1893 }
1894
1895
1896
1897
1899 {
1900 super.OnStoreSave(ctx);
1901
1903 {
1905 }
1906
1907
1910 }
1911
1913 {
1914 if (!super.OnStoreLoad(ctx, version))
1915 return false;
1916
1918 {
1920 return false;
1921 }
1922
1923 if (version >= 115)
1924 {
1926 {
1928 return false;
1929 }
1931 {
1933 return false;
1934 }
1935 }
1936
1939
1940 return true;
1941 }
1942
1944 {
1945 super.AfterStoreLoad();
1946
1948 }
1949
1950
1952 {
1954 }
1955
1956
1958 {
1959 return false;
1960 }
1961
1963 {
1964 return false;
1965 }
1966
1968 {
1969 return false;
1970 }
1971
1973 {
1974 return false;
1975 }
1976
1977
1978
1979
1980
1982 {
1985 {
1986 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1987 }
1988 else if (classname != "" && food_stage)
1989 {
1990 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1991 }
1992 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1994
1995 }
1996
1998 {
2001 {
2003 }
2004 else if (classname != "" && food_stage)
2005 {
2006 return FoodStage.GetEnergy(null, food_stage, classname);
2007 }
2008 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2010 }
2011
2013 {
2016 {
2018 }
2019 else if (classname != "" && food_stage)
2020 {
2021 return FoodStage.GetWater(null, food_stage, classname);
2022 }
2023 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2025 }
2026
2028 {
2031 {
2032 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
2033 }
2034 else if (classname != "" && food_stage)
2035 {
2036 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
2037 }
2038 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2040
2041 }
2042
2044 {
2047 {
2048 return FoodStage.GetToxicity(food_item.
GetFoodStage());
2049 }
2050 else if (classname != "" && food_stage)
2051 {
2052 return FoodStage.GetToxicity(null, food_stage, classname);
2053 }
2054 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2056 }
2057
2059 {
2062 {
2064 }
2065 else if (classname != "" && food_stage)
2066 {
2067 return FoodStage.GetAgents(null, food_stage, classname);
2068 }
2069 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2071 }
2072
2074 {
2077 {
2078 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2079 }
2080 else if (classname != "" && food_stage)
2081 {
2082 return FoodStage.GetDigestibility(null, food_stage, classname);
2083 }
2084 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2086 }
2087
2089 {
2092 {
2093 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2094 }
2095 else if (className != "" && foodStage)
2096 {
2097 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2098 }
2099 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2101 }
2102
2104 {
2114
2115 return profile;
2116 }
2117
2118
2119
2120
2122 {
2124 }
2125
2126
2128 {
2130 {
2132 }
2133
2134 return false;
2135 }
2136
2138 {
2140 {
2142 }
2143
2144 return false;
2145 }
2146
2148 {
2150 {
2152 }
2153
2154 return false;
2155 }
2156
2158 {
2160 {
2162 }
2163
2164 return false;
2165 }
2166
2168 {
2170 {
2172 }
2173
2174 return false;
2175 }
2176
2178 {
2180 {
2182 }
2183
2184 return false;
2185 }
2186
2187
2189 {
2191 }
2192
2194 {
2195 return GetFoodStage().GetNextFoodStageType( cooking_method );
2196 }
2197
2199 {
2200 return GetFoodStage().GetFoodStageName( food_stage_type );
2201 }
2202
2204 {
2205 return GetFoodStage().CanChangeToNewStage( cooking_method );
2206 }
2207
2208
2210 {
2211 if ( !source.GetFoodStage())
2212 return;
2217 }
2218
2221 {
2224 }
2225
2228 {
2229 switch (stageNew)
2230 {
2235 break;
2236
2239 break;
2240 }
2241 }
2242
2243
2244
2245
2246
2248 {
2250 }
2251
2253 {
2255
2256
2258 }
2259
2261 {
2263 {
2266 }
2267 }
2268
2269
2271 {
2273 if (player)
2274 {
2276 player.ServerReplaceItemInHandsWithNew(lambda);
2277 }
2278 else
2279 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2280 }
2281
2283 {
2285 }
2286
2288 {
2289 super.SetActions();
2290
2293 }
2294
2296 {
2297 #ifndef SERVER
2299 {
2301
2304 }
2305 #endif
2306 }
2307
2309 {
2310 #ifndef SERVER
2312 {
2316 }
2317 #endif
2318 }
2319
2321 {
2322 return false;
2323 }
2324
2326 {
2328 }
2329
2330 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2331 {
2333
2334 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2336 if ( hasRootAsPlayer )
2338
2339
2340
2341
2342
2343
2344
2346 {
2347
2349 {
2351 {
2355 break;
2356
2360 break;
2361
2365 break;
2366
2370 default:
2373 return;
2374 }
2375
2376
2377 }
2378
2380
2382 {
2384 {
2385
2387 {
2389 }
2391 {
2394 {
2396 }
2397 else
2398 {
2400 {
2402 }
2403 else
2404 {
2406 }
2407 }
2408 }
2409 }
2410 }
2411
2412 }
2414 {
2415
2417 {
2419 {
2423 break;
2424
2428 break;
2429
2433 break;
2434
2438 break;
2439
2442 default:
2445 return;
2446 }
2447 }
2448
2450
2452 {
2454 {
2455
2457 {
2459 }
2460 }
2461 }
2462 }
2464 {
2465
2467 {
2469 {
2473 break;
2474
2477 default:
2480 return;
2481 }
2482 }
2483
2485
2487 {
2489 {
2490
2492 {
2494 }
2495 }
2496 }
2497 }
2498 else
2499 {
2500
2502
2504 {
2507
2508 }
2509 else
2510 {
2512 {
2515 }
2516 }
2517 }
2518 }
2519
2521 {
2522 if (
GetGame().IsDedicatedServer())
2523 return;
2524
2526 {
2528 GetInventory().GetCurrentInventoryLocation(invLoc);
2530 {
2532 if (ptcMgr)
2533 {
2538 }
2539 }
2540 }
2542 {
2544 {
2547 return;
2548 }
2549
2551 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2553 {
2556 }
2557 }
2558 }
2559
2560 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2561 {
2563 {
2568 }
2569
2570 super.GetDebugActions(outputList);
2571 }
2572
2574 {
2575 super.OnAction(action_id, player, ctx);
2576
2578 {
2579 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2580 {
2582 if (food_stage_prev <= 0)
2583 {
2585 }
2587 return true;
2588 }
2589 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2590 {
2593 {
2595 }
2597 return true;
2598 }
2599
2600 }
2601
2602 #ifdef DIAG_DEVELOPER
2603 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2604 {
2605 PrintNutritionsData();
2606 return true;
2607 }
2608 #endif
2609
2610 return false;
2611 }
2612
2614 {
2615 string debug_output;
2616
2617 debug_output = super.GetDebugText();
2618
2621
2622 return debug_output;
2623 }
2624
2625
2626
2627
2628
2630 {
2631 float ret = super.GetBaitEffectivity();
2632
2634 {
2635 ret *= 0.5;
2636 }
2637
2638 return ret;
2639 }
2640
2642 {
2644 }
2645
2647 {
2649 }
2650
2652 {
2654 }
2655
2656 #ifdef DIAG_DEVELOPER
2657 private void PrintNutritionsData()
2658 {
2659 string nutritionsData = "";
2660
2663
2665 if (profile)
2666 {
2667 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2669 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2673 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2675
2678
2679 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2681 }
2682
2683 nutritionsData += "-----\n";
2684
2686 }
2687 #endif
2688
2690
2693 {
2695 }
2696}
2697
2699{
2701};
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.