1485{
1487
1495
1505
1507
1509 {
1511 {
1513
1515 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1516
1520 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1521 }
1522 }
1523
1525 {
1527
1529 }
1530
1532 {
1533 super.EEDelete(parent);
1534
1536
1539 }
1540
1542 {
1543 super.EEItemLocationChanged(oldLoc, newLoc);
1544
1547 {
1548 switch (oldLoc.GetParent().GetType())
1549 {
1550 case "FryingPan":
1551 case "Pot":
1552 case "Cauldron":
1553 case "SharpWoodenStick":
1555 break;
1556 }
1557
1560 {
1562 }
1563 }
1564
1565 if (oldLoc.IsValid())
1567
1570 }
1571
1573 {
1576 }
1577
1579 {
1582
1583 return true;
1584 }
1585
1587 {
1589 {
1591 }
1592 }
1593
1596 {
1597 int foodStageType;
1598
1600 if (foodStage)
1601 foodStageType = foodStage.GetFoodStageType();
1602
1607
1608 return agentsIn;
1609 }
1610
1611
1613 {
1614 return false;
1615 }
1616
1618 {
1619 return false;
1620 }
1621
1623 {
1625 {
1627 {
1630
1633
1634 default:
1635 return super.GetTemperatureFreezeTime();
1636 }
1637 }
1638
1639 return super.GetTemperatureFreezeTime();
1640 }
1641
1643 {
1645 {
1647 {
1650
1653
1654 default:
1655 return super.GetTemperatureThawTime();
1656 }
1657 }
1658
1659 return super.GetTemperatureThawTime();
1660 }
1661
1663 {
1665 }
1666
1667
1668
1669
1671 {
1672 SetSynchDirty();
1673 }
1674
1676 {
1677 super.OnVariablesSynchronized();
1678
1679
1680
1681
1683 {
1685 }
1686 else
1687 {
1689 }
1690
1693 }
1694
1695
1696
1697
1699 {
1702
1704 }
1705
1707 {
1708 string soundName = "";
1709
1712
1714 {
1716 }
1717 else
1718 {
1720 {
1722 {
1727 else
1728 soundName = "";
1729 break;
1730 }
1731
1733 {
1738 else
1739 soundName = "";
1740 break;
1741 }
1742
1744 {
1749 else
1750 soundName = "";
1751 break;
1752 }
1753
1754 default:
1755 soundName = "";
1756 break;
1757 }
1758
1760 {
1761 if (soundName == "")
1762 {
1764 }
1765 else
1766 {
1768 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1769 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1771 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1772 {
1774 }
1775 }
1776 }
1777 }
1778
1780 }
1781
1783 {
1786 }
1787
1788
1789
1790
1792 {
1793 super.OnStoreSave(ctx);
1794
1796 {
1798 }
1799
1800
1803 }
1804
1806 {
1807 if (!super.OnStoreLoad(ctx, version))
1808 return false;
1809
1811 {
1813 return false;
1814 }
1815
1816 if (version >= 115)
1817 {
1819 {
1821 return false;
1822 }
1824 {
1826 return false;
1827 }
1828 }
1829
1832
1833 return true;
1834 }
1835
1837 {
1838 super.AfterStoreLoad();
1839
1841 }
1842
1843
1845 {
1847 }
1848
1849
1851 {
1852 return false;
1853 }
1854
1856 {
1857 return false;
1858 }
1859
1861 {
1862 return false;
1863 }
1864
1866 {
1867 return false;
1868 }
1869
1870
1871
1872
1873
1875 {
1878 {
1879 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1880 }
1881 else if (classname != "" && food_stage)
1882 {
1883 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1884 }
1885 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1887
1888 }
1889
1891 {
1894 {
1896 }
1897 else if (classname != "" && food_stage)
1898 {
1899 return FoodStage.GetEnergy(null, food_stage, classname);
1900 }
1901 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1903 }
1904
1906 {
1909 {
1911 }
1912 else if (classname != "" && food_stage)
1913 {
1914 return FoodStage.GetWater(null, food_stage, classname);
1915 }
1916 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1918 }
1919
1921 {
1924 {
1925 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1926 }
1927 else if (classname != "" && food_stage)
1928 {
1929 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1930 }
1931 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1933
1934 }
1935
1937 {
1940 {
1941 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1942 }
1943 else if (classname != "" && food_stage)
1944 {
1945 return FoodStage.GetToxicity(null, food_stage, classname);
1946 }
1947 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1949 }
1950
1952 {
1955 {
1957 }
1958 else if (classname != "" && food_stage)
1959 {
1960 return FoodStage.GetAgents(null, food_stage, classname);
1961 }
1962 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1964 }
1965
1967 {
1970 {
1971 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1972 }
1973 else if (classname != "" && food_stage)
1974 {
1975 return FoodStage.GetDigestibility(null, food_stage, classname);
1976 }
1977 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1979 }
1980
1982 {
1985 {
1986 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1987 }
1988 else if (className != "" && foodStage)
1989 {
1990 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1991 }
1992 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1994 }
1995
1997 {
2007
2008 return profile;
2009 }
2010
2011
2012
2013
2015 {
2017 }
2018
2019
2021 {
2023 {
2025 }
2026
2027 return false;
2028 }
2029
2031 {
2033 {
2035 }
2036
2037 return false;
2038 }
2039
2041 {
2043 {
2045 }
2046
2047 return false;
2048 }
2049
2051 {
2053 {
2055 }
2056
2057 return false;
2058 }
2059
2061 {
2063 {
2065 }
2066
2067 return false;
2068 }
2069
2071 {
2073 {
2075 }
2076
2077 return false;
2078 }
2079
2080
2082 {
2084 }
2085
2087 {
2088 return GetFoodStage().GetNextFoodStageType( cooking_method );
2089 }
2090
2092 {
2093 return GetFoodStage().GetFoodStageName( food_stage_type );
2094 }
2095
2097 {
2098 return GetFoodStage().CanChangeToNewStage( cooking_method );
2099 }
2100
2101
2103 {
2104 if ( !source.GetFoodStage())
2105 return;
2110 }
2111
2114 {
2117 }
2118
2121 {
2122 switch (stageNew)
2123 {
2128 break;
2129
2132 break;
2133 }
2134 }
2135
2136
2137
2138
2139
2141 {
2143 }
2144
2146 {
2148
2149
2151 }
2152
2154 {
2156 {
2159 }
2160 }
2161
2162
2164 {
2166 if (player)
2167 {
2169 player.ServerReplaceItemInHandsWithNew(lambda);
2170 }
2171 else
2172 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2173 }
2174
2176 {
2178 }
2179
2181 {
2182 super.SetActions();
2183
2186 }
2187
2189 {
2190 #ifndef SERVER
2192 {
2194
2197 }
2198 #endif
2199 }
2200
2202 {
2203 #ifndef SERVER
2205 {
2209 }
2210 #endif
2211 }
2212
2214 {
2215 return false;
2216 }
2217
2219 {
2221 }
2222
2223 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2224 {
2226
2227 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2229 if ( hasRootAsPlayer )
2231
2232
2233
2234
2235
2236
2237
2239 {
2240
2242 {
2244 {
2248 break;
2249
2253 break;
2254
2258 break;
2259
2263 default:
2266 return;
2267 }
2268
2269
2270 }
2271
2273
2275 {
2277 {
2278
2280 {
2282 }
2284 {
2287 {
2289 }
2290 else
2291 {
2293 {
2295 }
2296 else
2297 {
2299 }
2300 }
2301 }
2302 }
2303 }
2304
2305 }
2307 {
2308
2310 {
2312 {
2316 break;
2317
2321 break;
2322
2326 break;
2327
2331 break;
2332
2335 default:
2338 return;
2339 }
2340 }
2341
2343
2345 {
2347 {
2348
2350 {
2352 }
2353 }
2354 }
2355 }
2357 {
2358
2360 {
2362 {
2366 break;
2367
2370 default:
2373 return;
2374 }
2375 }
2376
2378
2380 {
2382 {
2383
2385 {
2387 }
2388 }
2389 }
2390 }
2391 else
2392 {
2393
2395
2397 {
2400
2401 }
2402 else
2403 {
2405 {
2408 }
2409 }
2410 }
2411 }
2412
2414 {
2415 if (
GetGame().IsDedicatedServer())
2416 return;
2417
2419 {
2421 GetInventory().GetCurrentInventoryLocation(invLoc);
2423 {
2425 if (ptcMgr)
2426 {
2431 }
2432 }
2433 }
2435 {
2437 {
2440 return;
2441 }
2442
2444 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2446 {
2449 }
2450 }
2451 }
2452
2453 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2454 {
2455 super.GetDebugActions(outputList);
2456
2458 {
2462 }
2463 }
2464
2466 {
2467 super.OnAction(action_id, player, ctx);
2468
2470 {
2471 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2472 {
2474 if (food_stage_prev <= 0)
2475 {
2477 }
2479 return true;
2480 }
2481 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2482 {
2485 {
2487 }
2489 return true;
2490 }
2491
2492 }
2493
2494 #ifdef DIAG_DEVELOPER
2495 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2496 {
2497 PrintNutritionsData();
2498 return true;
2499 }
2500 #endif
2501
2502 return false;
2503 }
2504
2506 {
2507 string debug_output;
2508
2509 debug_output = super.GetDebugText();
2510
2513
2514 return debug_output;
2515 }
2516
2517
2518
2519
2520
2522 {
2523 float ret = super.GetBaitEffectivity();
2524
2526 {
2527 ret *= 0.5;
2528 }
2529
2530 return ret;
2531 }
2532
2534 {
2536 }
2537
2539 {
2541 }
2542
2544 {
2546 }
2547
2548 #ifdef DIAG_DEVELOPER
2549 private void PrintNutritionsData()
2550 {
2551 string nutritionsData = "";
2552
2555
2557 if (profile)
2558 {
2559 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2561 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2565 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2567
2570
2571 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2573 }
2574
2575 nutritionsData += "-----\n";
2576
2578 }
2579 #endif
2580
2582
2585 {
2587 }
2588}
2589
2591{
2593};
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.