1417{
1419
1427
1437
1439
1441 {
1443 {
1445
1447 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1448
1452 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1453 }
1454 }
1455
1457 {
1459
1461 }
1462
1464 {
1465 super.EEDelete(parent);
1466
1468
1471 }
1472
1474 {
1475 super.EEItemLocationChanged(oldLoc, newLoc);
1476
1479 {
1480 switch (oldLoc.GetParent().GetType())
1481 {
1482 case "FryingPan":
1483 case "Pot":
1484 case "Cauldron":
1485 case "SharpWoodenStick":
1487 break;
1488 }
1489
1492 {
1494 }
1495 }
1496
1497 if (oldLoc.IsValid())
1499
1502 }
1503
1505 {
1508 }
1509
1511 {
1514
1515 return true;
1516 }
1517
1519 {
1521 {
1523 }
1524 }
1525
1528 {
1529 int foodStageType;
1530
1532 if (foodStage)
1533 foodStageType = foodStage.GetFoodStageType();
1534
1539
1540 return agentsIn;
1541 }
1542
1543
1545 {
1546 return false;
1547 }
1548
1550 {
1551 return false;
1552 }
1553
1555 {
1557 {
1559 {
1562
1565
1566 default:
1567 return super.GetTemperatureFreezeTime();
1568 }
1569 }
1570
1571 return super.GetTemperatureFreezeTime();
1572 }
1573
1575 {
1577 {
1579 {
1582
1585
1586 default:
1587 return super.GetTemperatureThawTime();
1588 }
1589 }
1590
1591 return super.GetTemperatureThawTime();
1592 }
1593
1595 {
1597 }
1598
1599
1600
1601
1603 {
1604 SetSynchDirty();
1605 }
1606
1608 {
1609 super.OnVariablesSynchronized();
1610
1611
1612
1613
1615 {
1617 }
1618 else
1619 {
1621 }
1622
1625 }
1626
1627
1628
1629
1631 {
1634
1636 }
1637
1639 {
1640 string soundName = "";
1641
1644
1646 {
1648 }
1649 else
1650 {
1652 {
1654 {
1659 else
1660 soundName = "";
1661 break;
1662 }
1663
1665 {
1670 else
1671 soundName = "";
1672 break;
1673 }
1674
1676 {
1681 else
1682 soundName = "";
1683 break;
1684 }
1685
1686 default:
1687 soundName = "";
1688 break;
1689 }
1690
1692 {
1693 if (soundName == "")
1694 {
1696 }
1697 else
1698 {
1700 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1701 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1703 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1704 {
1706 }
1707 }
1708 }
1709 }
1710
1712 }
1713
1715 {
1718 }
1719
1720
1721
1722
1724 {
1725 super.OnStoreSave(ctx);
1726
1728 {
1730 }
1731
1732
1735 }
1736
1738 {
1739 if (!super.OnStoreLoad(ctx, version))
1740 return false;
1741
1743 {
1745 return false;
1746 }
1747
1748 if (version >= 115)
1749 {
1751 {
1753 return false;
1754 }
1756 {
1758 return false;
1759 }
1760 }
1761
1764
1765 return true;
1766 }
1767
1769 {
1770 super.AfterStoreLoad();
1771
1773 }
1774
1775
1777 {
1779 }
1780
1781
1783 {
1784 return false;
1785 }
1786
1788 {
1789 return false;
1790 }
1791
1793 {
1794 return false;
1795 }
1796
1798 {
1799 return false;
1800 }
1801
1802
1803
1804
1805
1807 {
1810 {
1811 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1812 }
1813 else if (classname != "" && food_stage)
1814 {
1815 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1816 }
1817 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1819
1820 }
1821
1823 {
1826 {
1828 }
1829 else if (classname != "" && food_stage)
1830 {
1831 return FoodStage.GetEnergy(null, food_stage, classname);
1832 }
1833 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1835 }
1836
1838 {
1841 {
1843 }
1844 else if (classname != "" && food_stage)
1845 {
1846 return FoodStage.GetWater(null, food_stage, classname);
1847 }
1848 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1850 }
1851
1853 {
1856 {
1857 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1858 }
1859 else if (classname != "" && food_stage)
1860 {
1861 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1862 }
1863 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1865
1866 }
1867
1869 {
1872 {
1873 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1874 }
1875 else if (classname != "" && food_stage)
1876 {
1877 return FoodStage.GetToxicity(null, food_stage, classname);
1878 }
1879 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1881 }
1882
1884 {
1887 {
1889 }
1890 else if (classname != "" && food_stage)
1891 {
1892 return FoodStage.GetAgents(null, food_stage, classname);
1893 }
1894 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1896 }
1897
1899 {
1902 {
1903 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1904 }
1905 else if (classname != "" && food_stage)
1906 {
1907 return FoodStage.GetDigestibility(null, food_stage, classname);
1908 }
1909 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1911 }
1912
1914 {
1917 {
1918 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1919 }
1920 else if (className != "" && foodStage)
1921 {
1922 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1923 }
1924 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1926 }
1927
1929 {
1939
1940 return profile;
1941 }
1942
1943
1944
1945
1947 {
1949 }
1950
1951
1953 {
1955 {
1957 }
1958
1959 return false;
1960 }
1961
1963 {
1965 {
1967 }
1968
1969 return false;
1970 }
1971
1973 {
1975 {
1977 }
1978
1979 return false;
1980 }
1981
1983 {
1985 {
1987 }
1988
1989 return false;
1990 }
1991
1993 {
1995 {
1997 }
1998
1999 return false;
2000 }
2001
2003 {
2005 {
2007 }
2008
2009 return false;
2010 }
2011
2012
2014 {
2016 }
2017
2019 {
2020 return GetFoodStage().GetNextFoodStageType( cooking_method );
2021 }
2022
2024 {
2025 return GetFoodStage().GetFoodStageName( food_stage_type );
2026 }
2027
2029 {
2030 return GetFoodStage().CanChangeToNewStage( cooking_method );
2031 }
2032
2033
2035 {
2036 if ( !source.GetFoodStage())
2037 return;
2042 }
2043
2046 {
2049 }
2050
2053 {
2054 switch (stageNew)
2055 {
2060 break;
2061
2064 break;
2065 }
2066 }
2067
2068
2069
2070
2071
2073 {
2075 }
2076
2078 {
2080
2081
2083 }
2084
2086 {
2088 {
2091 }
2092 }
2093
2094
2096 {
2098 if (player)
2099 {
2101 player.ServerReplaceItemInHandsWithNew(lambda);
2102 }
2103 else
2104 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2105 }
2106
2108 {
2110 }
2111
2113 {
2114 super.SetActions();
2115
2118 }
2119
2121 {
2122 #ifndef SERVER
2124 {
2126
2129 }
2130 #endif
2131 }
2132
2134 {
2135 #ifndef SERVER
2137 {
2141 }
2142 #endif
2143 }
2144
2146 {
2147 return false;
2148 }
2149
2151 {
2153 }
2154
2155 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2156 {
2158
2159 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2161 if ( hasRootAsPlayer )
2163
2164
2165
2166
2167
2168
2169
2171 {
2172
2174 {
2176 {
2180 break;
2181
2185 break;
2186
2190 break;
2191
2195 default:
2198 return;
2199 }
2200
2201
2202 }
2203
2205
2207 {
2209 {
2210
2212 {
2214 }
2216 {
2219 {
2221 }
2222 else
2223 {
2225 {
2227 }
2228 else
2229 {
2231 }
2232 }
2233 }
2234 }
2235 }
2236
2237 }
2239 {
2240
2242 {
2244 {
2248 break;
2249
2253 break;
2254
2258 break;
2259
2263 break;
2264
2267 default:
2270 return;
2271 }
2272 }
2273
2275
2277 {
2279 {
2280
2282 {
2284 }
2285 }
2286 }
2287 }
2289 {
2290
2292 {
2294 {
2298 break;
2299
2302 default:
2305 return;
2306 }
2307 }
2308
2310
2312 {
2314 {
2315
2317 {
2319 }
2320 }
2321 }
2322 }
2323 else
2324 {
2325
2327
2329 {
2332
2333 }
2334 else
2335 {
2337 {
2340 }
2341 }
2342 }
2343 }
2344
2346 {
2347 if (
GetGame().IsDedicatedServer())
2348 return;
2349
2351 {
2353 GetInventory().GetCurrentInventoryLocation(invLoc);
2355 {
2357 if (ptcMgr)
2358 {
2363 }
2364 }
2365 }
2367 {
2369 {
2372 return;
2373 }
2374
2376 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2378 {
2381 }
2382 }
2383 }
2384
2385 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2386 {
2388 {
2393 }
2394
2395 super.GetDebugActions(outputList);
2396 }
2397
2399 {
2400 super.OnAction(action_id, player, ctx);
2401
2403 {
2404 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2405 {
2407 if (food_stage_prev <= 0)
2408 {
2410 }
2412 return true;
2413 }
2414 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2415 {
2418 {
2420 }
2422 return true;
2423 }
2424
2425 }
2426
2427 #ifdef DIAG_DEVELOPER
2428 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2429 {
2430 PrintNutritionsData();
2431 return true;
2432 }
2433 #endif
2434
2435 return false;
2436 }
2437
2439 {
2440 string debug_output;
2441
2442 debug_output = super.GetDebugText();
2443
2446
2447 return debug_output;
2448 }
2449
2450
2451
2452
2453
2455 {
2456 float ret = super.GetBaitEffectivity();
2457
2459 {
2460 ret *= 0.5;
2461 }
2462
2463 return ret;
2464 }
2465
2467 {
2469 }
2470
2472 {
2474 }
2475
2477 {
2479 }
2480
2481 #ifdef DIAG_DEVELOPER
2482 private void PrintNutritionsData()
2483 {
2484 string nutritionsData = "";
2485
2488
2490 if (profile)
2491 {
2492 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2494 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2498 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2500
2503
2504 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2506 }
2507
2508 nutritionsData += "-----\n";
2509
2511 }
2512 #endif
2513
2515
2518 {
2520 }
2521}
2522
2524{
2526};
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.