1530{
1532
1540
1550
1552
1554 {
1556 {
1558
1560 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1561
1565 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1566 }
1567 }
1568
1570 {
1572
1574 }
1575
1577 {
1578 super.EEDelete(parent);
1579
1581
1584 }
1585
1587 {
1588 super.EEItemLocationChanged(oldLoc, newLoc);
1589
1592 {
1593 switch (oldLoc.GetParent().GetType())
1594 {
1595 case "FryingPan":
1596 case "Pot":
1597 case "Cauldron":
1598 case "SharpWoodenStick":
1600 break;
1601 }
1602
1605 {
1607 }
1608 }
1609
1610 if (oldLoc.IsValid())
1612
1615 }
1616
1618 {
1621 }
1622
1624 {
1627
1628 return true;
1629 }
1630
1632 {
1634 {
1636 }
1637 }
1638
1641 {
1642 int foodStageType;
1643
1645 if (foodStage)
1646 foodStageType = foodStage.GetFoodStageType();
1647
1652
1653 return agentsIn;
1654 }
1655
1656
1658 {
1659 return false;
1660 }
1661
1663 {
1664 return false;
1665 }
1666
1668 {
1670 {
1672 {
1675
1678
1679 default:
1680 return super.GetTemperatureFreezeTime();
1681 }
1682 }
1683
1684 return super.GetTemperatureFreezeTime();
1685 }
1686
1688 {
1690 {
1692 {
1695
1698
1699 default:
1700 return super.GetTemperatureThawTime();
1701 }
1702 }
1703
1704 return super.GetTemperatureThawTime();
1705 }
1706
1708 {
1710 }
1711
1712
1713
1714
1716 {
1717 SetSynchDirty();
1718 }
1719
1721 {
1722 super.OnVariablesSynchronized();
1723
1724
1725
1726
1728 {
1730 }
1731 else
1732 {
1734 }
1735
1738 }
1739
1740
1741
1742
1744 {
1747
1749 }
1750
1752 {
1753 string soundName = "";
1754
1757
1759 {
1761 }
1762 else
1763 {
1765 {
1767 {
1772 else
1773 soundName = "";
1774 break;
1775 }
1776
1778 {
1783 else
1784 soundName = "";
1785 break;
1786 }
1787
1789 {
1794 else
1795 soundName = "";
1796 break;
1797 }
1798
1799 default:
1800 soundName = "";
1801 break;
1802 }
1803
1805 {
1806 if (soundName == "")
1807 {
1809 }
1810 else
1811 {
1813 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1814 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1816 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1817 {
1819 }
1820 }
1821 }
1822 }
1823
1825 }
1826
1828 {
1831 }
1832
1833
1834
1835
1837 {
1838 super.OnStoreSave(ctx);
1839
1841 {
1843 }
1844
1845
1848 }
1849
1851 {
1852 if (!super.OnStoreLoad(ctx, version))
1853 return false;
1854
1856 {
1858 return false;
1859 }
1860
1861 if (version >= 115)
1862 {
1864 {
1866 return false;
1867 }
1869 {
1871 return false;
1872 }
1873 }
1874
1877
1878 return true;
1879 }
1880
1882 {
1883 super.AfterStoreLoad();
1884
1886 }
1887
1888
1890 {
1892 }
1893
1894
1896 {
1897 return false;
1898 }
1899
1901 {
1902 return false;
1903 }
1904
1906 {
1907 return false;
1908 }
1909
1911 {
1912 return false;
1913 }
1914
1915
1916
1917
1918
1920 {
1923 {
1924 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1925 }
1926 else if (classname != "" && food_stage)
1927 {
1928 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1929 }
1930 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1932
1933 }
1934
1936 {
1939 {
1941 }
1942 else if (classname != "" && food_stage)
1943 {
1944 return FoodStage.GetEnergy(null, food_stage, classname);
1945 }
1946 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1948 }
1949
1951 {
1954 {
1956 }
1957 else if (classname != "" && food_stage)
1958 {
1959 return FoodStage.GetWater(null, food_stage, classname);
1960 }
1961 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1963 }
1964
1966 {
1969 {
1970 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1971 }
1972 else if (classname != "" && food_stage)
1973 {
1974 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1975 }
1976 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1978
1979 }
1980
1982 {
1985 {
1986 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1987 }
1988 else if (classname != "" && food_stage)
1989 {
1990 return FoodStage.GetToxicity(null, food_stage, classname);
1991 }
1992 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1994 }
1995
1997 {
2000 {
2002 }
2003 else if (classname != "" && food_stage)
2004 {
2005 return FoodStage.GetAgents(null, food_stage, classname);
2006 }
2007 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2009 }
2010
2012 {
2015 {
2016 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
2017 }
2018 else if (classname != "" && food_stage)
2019 {
2020 return FoodStage.GetDigestibility(null, food_stage, classname);
2021 }
2022 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
2024 }
2025
2027 {
2030 {
2031 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2032 }
2033 else if (className != "" && foodStage)
2034 {
2035 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2036 }
2037 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2039 }
2040
2042 {
2052
2053 return profile;
2054 }
2055
2056
2057
2058
2060 {
2062 }
2063
2064
2066 {
2068 {
2070 }
2071
2072 return false;
2073 }
2074
2076 {
2078 {
2080 }
2081
2082 return false;
2083 }
2084
2086 {
2088 {
2090 }
2091
2092 return false;
2093 }
2094
2096 {
2098 {
2100 }
2101
2102 return false;
2103 }
2104
2106 {
2108 {
2110 }
2111
2112 return false;
2113 }
2114
2116 {
2118 {
2120 }
2121
2122 return false;
2123 }
2124
2125
2127 {
2129 }
2130
2132 {
2133 return GetFoodStage().GetNextFoodStageType( cooking_method );
2134 }
2135
2137 {
2138 return GetFoodStage().GetFoodStageName( food_stage_type );
2139 }
2140
2142 {
2143 return GetFoodStage().CanChangeToNewStage( cooking_method );
2144 }
2145
2146
2148 {
2149 if ( !source.GetFoodStage())
2150 return;
2155 }
2156
2159 {
2162 }
2163
2166 {
2167 switch (stageNew)
2168 {
2173 break;
2174
2177 break;
2178 }
2179 }
2180
2181
2182
2183
2184
2186 {
2188 }
2189
2191 {
2193
2194
2196 }
2197
2199 {
2201 {
2204 }
2205 }
2206
2207
2209 {
2211 if (player)
2212 {
2214 player.ServerReplaceItemInHandsWithNew(lambda);
2215 }
2216 else
2217 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2218 }
2219
2221 {
2223 }
2224
2226 {
2227 super.SetActions();
2228
2231 }
2232
2234 {
2235 #ifndef SERVER
2237 {
2239
2242 }
2243 #endif
2244 }
2245
2247 {
2248 #ifndef SERVER
2250 {
2254 }
2255 #endif
2256 }
2257
2259 {
2260 return false;
2261 }
2262
2264 {
2266 }
2267
2268 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2269 {
2271
2272 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2274 if ( hasRootAsPlayer )
2276
2277
2278
2279
2280
2281
2282
2284 {
2285
2287 {
2289 {
2293 break;
2294
2298 break;
2299
2303 break;
2304
2308 default:
2311 return;
2312 }
2313
2314
2315 }
2316
2318
2320 {
2322 {
2323
2325 {
2327 }
2329 {
2332 {
2334 }
2335 else
2336 {
2338 {
2340 }
2341 else
2342 {
2344 }
2345 }
2346 }
2347 }
2348 }
2349
2350 }
2352 {
2353
2355 {
2357 {
2361 break;
2362
2366 break;
2367
2371 break;
2372
2376 break;
2377
2380 default:
2383 return;
2384 }
2385 }
2386
2388
2390 {
2392 {
2393
2395 {
2397 }
2398 }
2399 }
2400 }
2402 {
2403
2405 {
2407 {
2411 break;
2412
2415 default:
2418 return;
2419 }
2420 }
2421
2423
2425 {
2427 {
2428
2430 {
2432 }
2433 }
2434 }
2435 }
2436 else
2437 {
2438
2440
2442 {
2445
2446 }
2447 else
2448 {
2450 {
2453 }
2454 }
2455 }
2456 }
2457
2459 {
2460 if (
GetGame().IsDedicatedServer())
2461 return;
2462
2464 {
2466 GetInventory().GetCurrentInventoryLocation(invLoc);
2468 {
2470 if (ptcMgr)
2471 {
2476 }
2477 }
2478 }
2480 {
2482 {
2485 return;
2486 }
2487
2489 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2491 {
2494 }
2495 }
2496 }
2497
2498 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2499 {
2500 super.GetDebugActions(outputList);
2501
2503 {
2507 }
2508 }
2509
2511 {
2512 super.OnAction(action_id, player, ctx);
2513
2515 {
2516 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2517 {
2519 if (food_stage_prev <= 0)
2520 {
2522 }
2524 return true;
2525 }
2526 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2527 {
2530 {
2532 }
2534 return true;
2535 }
2536
2537 }
2538
2539 #ifdef DIAG_DEVELOPER
2540 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2541 {
2542 PrintNutritionsData();
2543 return true;
2544 }
2545 #endif
2546
2547 return false;
2548 }
2549
2551 {
2552 string debug_output;
2553
2554 debug_output = super.GetDebugText();
2555
2558
2559 return debug_output;
2560 }
2561
2562
2563
2564
2565
2567 {
2568 float ret = super.GetBaitEffectivity();
2569
2571 {
2572 ret *= 0.5;
2573 }
2574
2575 return ret;
2576 }
2577
2579 {
2581 }
2582
2584 {
2586 }
2587
2589 {
2591 }
2592
2593 #ifdef DIAG_DEVELOPER
2594 private void PrintNutritionsData()
2595 {
2596 string nutritionsData = "";
2597
2600
2602 if (profile)
2603 {
2604 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2606 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2610 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2612
2615
2616 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2618 }
2619
2620 nutritionsData += "-----\n";
2621
2623 }
2624 #endif
2625
2627
2630 {
2632 }
2633}
2634
2636{
2638};
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.