1416{
1418
1426
1436
1438
1440 {
1442 {
1444
1446 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1447
1451 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1452 }
1453 }
1454
1456 {
1458
1460 }
1461
1463 {
1464 super.EEDelete(parent);
1465
1467
1470 }
1471
1473 {
1474 super.EEItemLocationChanged(oldLoc, newLoc);
1475
1478 {
1479 switch (oldLoc.GetParent().GetType())
1480 {
1481 case "FryingPan":
1482 case "Pot":
1483 case "Cauldron":
1484 case "SharpWoodenStick":
1486 break;
1487 }
1488
1491 {
1493 }
1494 }
1495
1496 if (oldLoc.IsValid())
1498
1501 }
1502
1504 {
1507 }
1508
1510 {
1513
1514 return true;
1515 }
1516
1518 {
1520 {
1522 }
1523 }
1524
1527 {
1528 int foodStageType;
1529
1531 if (foodStage)
1532 foodStageType = foodStage.GetFoodStageType();
1533
1538
1539 return agentsIn;
1540 }
1541
1542
1544 {
1545 return false;
1546 }
1547
1549 {
1550 return false;
1551 }
1552
1554 {
1556 {
1558 {
1561
1564
1565 default:
1566 return super.GetTemperatureFreezeTime();
1567 }
1568 }
1569
1570 return super.GetTemperatureFreezeTime();
1571 }
1572
1574 {
1576 {
1578 {
1581
1584
1585 default:
1586 return super.GetTemperatureThawTime();
1587 }
1588 }
1589
1590 return super.GetTemperatureThawTime();
1591 }
1592
1594 {
1596 }
1597
1598
1599
1600
1602 {
1603 SetSynchDirty();
1604 }
1605
1607 {
1608 super.OnVariablesSynchronized();
1609
1610
1611
1612
1614 {
1616 }
1617 else
1618 {
1620 }
1621
1624 }
1625
1626
1627
1628
1630 {
1633
1635 }
1636
1638 {
1639 string soundName = "";
1640
1643
1645 {
1647 }
1648 else
1649 {
1651 {
1653 {
1658 else
1659 soundName = "";
1660 break;
1661 }
1662
1664 {
1669 else
1670 soundName = "";
1671 break;
1672 }
1673
1675 {
1680 else
1681 soundName = "";
1682 break;
1683 }
1684
1685 default:
1686 soundName = "";
1687 break;
1688 }
1689
1691 {
1692 if (soundName == "")
1693 {
1695 }
1696 else
1697 {
1699 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1700 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1702 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1703 {
1705 }
1706 }
1707 }
1708 }
1709
1711 }
1712
1714 {
1717 }
1718
1719
1720
1721
1723 {
1724 super.OnStoreSave(ctx);
1725
1727 {
1729 }
1730
1731
1734 }
1735
1737 {
1738 if (!super.OnStoreLoad(ctx, version))
1739 return false;
1740
1742 {
1744 return false;
1745 }
1746
1747 if (version >= 115)
1748 {
1750 {
1752 return false;
1753 }
1755 {
1757 return false;
1758 }
1759 }
1760
1763
1764 return true;
1765 }
1766
1768 {
1769 super.AfterStoreLoad();
1770
1772 }
1773
1774
1776 {
1778 }
1779
1780
1782 {
1783 return false;
1784 }
1785
1787 {
1788 return false;
1789 }
1790
1792 {
1793 return false;
1794 }
1795
1797 {
1798 return false;
1799 }
1800
1801
1802
1803
1804
1806 {
1809 {
1810 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1811 }
1812 else if (classname != "" && food_stage)
1813 {
1814 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1815 }
1816 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1818
1819 }
1820
1822 {
1825 {
1827 }
1828 else if (classname != "" && food_stage)
1829 {
1830 return FoodStage.GetEnergy(null, food_stage, classname);
1831 }
1832 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1834 }
1835
1837 {
1840 {
1842 }
1843 else if (classname != "" && food_stage)
1844 {
1845 return FoodStage.GetWater(null, food_stage, classname);
1846 }
1847 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1849 }
1850
1852 {
1855 {
1856 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1857 }
1858 else if (classname != "" && food_stage)
1859 {
1860 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1861 }
1862 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1864
1865 }
1866
1868 {
1871 {
1872 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1873 }
1874 else if (classname != "" && food_stage)
1875 {
1876 return FoodStage.GetToxicity(null, food_stage, classname);
1877 }
1878 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1880 }
1881
1883 {
1886 {
1888 }
1889 else if (classname != "" && food_stage)
1890 {
1891 return FoodStage.GetAgents(null, food_stage, classname);
1892 }
1893 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1895 }
1896
1898 {
1901 {
1902 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1903 }
1904 else if (classname != "" && food_stage)
1905 {
1906 return FoodStage.GetDigestibility(null, food_stage, classname);
1907 }
1908 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1910 }
1911
1913 {
1916 {
1917 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1918 }
1919 else if (className != "" && foodStage)
1920 {
1921 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1922 }
1923 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1925 }
1926
1928 {
1938
1939 return profile;
1940 }
1941
1942
1943
1944
1946 {
1948 }
1949
1950
1952 {
1954 {
1956 }
1957
1958 return false;
1959 }
1960
1962 {
1964 {
1966 }
1967
1968 return false;
1969 }
1970
1972 {
1974 {
1976 }
1977
1978 return false;
1979 }
1980
1982 {
1984 {
1986 }
1987
1988 return false;
1989 }
1990
1992 {
1994 {
1996 }
1997
1998 return false;
1999 }
2000
2002 {
2004 {
2006 }
2007
2008 return false;
2009 }
2010
2011
2013 {
2015 }
2016
2018 {
2019 return GetFoodStage().GetNextFoodStageType( cooking_method );
2020 }
2021
2023 {
2024 return GetFoodStage().GetFoodStageName( food_stage_type );
2025 }
2026
2028 {
2029 return GetFoodStage().CanChangeToNewStage( cooking_method );
2030 }
2031
2032
2034 {
2035 if ( !source.GetFoodStage())
2036 return;
2041 }
2042
2045 {
2048 }
2049
2052 {
2053 switch (stageNew)
2054 {
2059 break;
2060
2063 break;
2064 }
2065 }
2066
2067
2068
2069
2070
2072 {
2074 }
2075
2077 {
2079
2080
2082 }
2083
2085 {
2087 {
2090 }
2091 }
2092
2093
2095 {
2097 if (player)
2098 {
2100 player.ServerReplaceItemInHandsWithNew(lambda);
2101 }
2102 else
2103 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2104 }
2105
2107 {
2109 }
2110
2112 {
2113 super.SetActions();
2114
2117 }
2118
2120 {
2121 #ifndef SERVER
2123 {
2125
2128 }
2129 #endif
2130 }
2131
2133 {
2134 #ifndef SERVER
2136 {
2140 }
2141 #endif
2142 }
2143
2145 {
2146 return false;
2147 }
2148
2150 {
2152 }
2153
2154 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2155 {
2157
2158 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2160 if ( hasRootAsPlayer )
2162
2163
2164
2165
2166
2167
2168
2170 {
2171
2173 {
2175 {
2179 break;
2180
2184 break;
2185
2189 break;
2190
2194 default:
2197 return;
2198 }
2199
2200
2201 }
2202
2204
2206 {
2208 {
2209
2211 {
2213 }
2215 {
2218 {
2220 }
2221 else
2222 {
2224 {
2226 }
2227 else
2228 {
2230 }
2231 }
2232 }
2233 }
2234 }
2235
2236 }
2238 {
2239
2241 {
2243 {
2247 break;
2248
2252 break;
2253
2257 break;
2258
2262 break;
2263
2266 default:
2269 return;
2270 }
2271 }
2272
2274
2276 {
2278 {
2279
2281 {
2283 }
2284 }
2285 }
2286 }
2288 {
2289
2291 {
2293 {
2297 break;
2298
2301 default:
2304 return;
2305 }
2306 }
2307
2309
2311 {
2313 {
2314
2316 {
2318 }
2319 }
2320 }
2321 }
2322 else
2323 {
2324
2326
2328 {
2331
2332 }
2333 else
2334 {
2336 {
2339 }
2340 }
2341 }
2342 }
2343
2345 {
2346 if (
GetGame().IsDedicatedServer())
2347 return;
2348
2350 {
2352 GetInventory().GetCurrentInventoryLocation(invLoc);
2354 {
2356 if (ptcMgr)
2357 {
2362 }
2363 }
2364 }
2366 {
2368 {
2371 return;
2372 }
2373
2375 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2377 {
2380 }
2381 }
2382 }
2383
2384 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2385 {
2386 super.GetDebugActions(outputList);
2387
2389 {
2393 }
2394 }
2395
2397 {
2398 super.OnAction(action_id, player, ctx);
2399
2401 {
2402 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2403 {
2405 if (food_stage_prev <= 0)
2406 {
2408 }
2410 return true;
2411 }
2412 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2413 {
2416 {
2418 }
2420 return true;
2421 }
2422
2423 }
2424
2425 #ifdef DIAG_DEVELOPER
2426 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2427 {
2428 PrintNutritionsData();
2429 return true;
2430 }
2431 #endif
2432
2433 return false;
2434 }
2435
2437 {
2438 string debug_output;
2439
2440 debug_output = super.GetDebugText();
2441
2444
2445 return debug_output;
2446 }
2447
2448
2449
2450
2451
2453 {
2454 float ret = super.GetBaitEffectivity();
2455
2457 {
2458 ret *= 0.5;
2459 }
2460
2461 return ret;
2462 }
2463
2465 {
2467 }
2468
2470 {
2472 }
2473
2475 {
2477 }
2478
2479 #ifdef DIAG_DEVELOPER
2480 private void PrintNutritionsData()
2481 {
2482 string nutritionsData = "";
2483
2486
2488 if (profile)
2489 {
2490 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2492 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2496 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2498
2501
2502 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2504 }
2505
2506 nutritionsData += "-----\n";
2507
2509 }
2510 #endif
2511
2513
2516 {
2518 }
2519}
2520
2522{
2524};
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.