1412{
1414
1422
1432
1434
1436 {
1438 {
1440
1442 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1443
1447 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1448 }
1449 }
1450
1452 {
1454
1456 }
1457
1459 {
1460 super.EEDelete(parent);
1461
1463
1466 }
1467
1469 {
1470 super.EEItemLocationChanged(oldLoc, newLoc);
1471
1474 {
1475 switch (oldLoc.GetParent().GetType())
1476 {
1477 case "FryingPan":
1478 case "Pot":
1479 case "Cauldron":
1480 case "SharpWoodenStick":
1482 break;
1483 }
1484
1487 {
1489 }
1490 }
1491
1492 if (oldLoc.IsValid())
1494
1497 }
1498
1500 {
1503 }
1504
1506 {
1509
1510 return true;
1511 }
1512
1514 {
1516 {
1518 }
1519 }
1520
1523 {
1524 int foodStageType;
1525
1527 if (foodStage)
1528 foodStageType = foodStage.GetFoodStageType();
1529
1534
1535 return agentsIn;
1536 }
1537
1538
1540 {
1541 return false;
1542 }
1543
1545 {
1546 return false;
1547 }
1548
1550 {
1552 {
1554 {
1557
1560
1561 default:
1562 return super.GetTemperatureFreezeTime();
1563 }
1564 }
1565
1566 return super.GetTemperatureFreezeTime();
1567 }
1568
1570 {
1572 {
1574 {
1577
1580
1581 default:
1582 return super.GetTemperatureThawTime();
1583 }
1584 }
1585
1586 return super.GetTemperatureThawTime();
1587 }
1588
1590 {
1592 }
1593
1594
1595
1596
1598 {
1599 SetSynchDirty();
1600 }
1601
1603 {
1604 super.OnVariablesSynchronized();
1605
1606
1607
1608
1610 {
1612 }
1613 else
1614 {
1616 }
1617
1620 }
1621
1622
1623
1624
1626 {
1629
1631 }
1632
1634 {
1635 string soundName = "";
1636
1639
1641 {
1643 }
1644 else
1645 {
1647 {
1649 {
1654 else
1655 soundName = "";
1656 break;
1657 }
1658
1660 {
1665 else
1666 soundName = "";
1667 break;
1668 }
1669
1671 {
1676 else
1677 soundName = "";
1678 break;
1679 }
1680
1681 default:
1682 soundName = "";
1683 break;
1684 }
1685
1687 {
1688 if (soundName == "")
1689 {
1691 }
1692 else
1693 {
1695 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1696 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1698 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1699 {
1701 }
1702 }
1703 }
1704 }
1705
1707 }
1708
1710 {
1713 }
1714
1715
1716
1717
1719 {
1720 super.OnStoreSave(ctx);
1721
1723 {
1725 }
1726
1727
1730 }
1731
1733 {
1734 if (!super.OnStoreLoad(ctx, version))
1735 return false;
1736
1738 {
1740 return false;
1741 }
1742
1743 if (version >= 115)
1744 {
1746 {
1748 return false;
1749 }
1751 {
1753 return false;
1754 }
1755 }
1756
1759
1760 return true;
1761 }
1762
1764 {
1765 super.AfterStoreLoad();
1766
1768 }
1769
1770
1772 {
1774 }
1775
1776
1778 {
1779 return false;
1780 }
1781
1783 {
1784 return false;
1785 }
1786
1788 {
1789 return false;
1790 }
1791
1793 {
1794 return false;
1795 }
1796
1797
1798
1799
1800
1802 {
1805 {
1806 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1807 }
1808 else if (classname != "" && food_stage)
1809 {
1810 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1811 }
1812 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1813 return g_Game.ConfigGetFloat( class_path +
" fullnessIndex" );
1814
1815 }
1816
1818 {
1821 {
1823 }
1824 else if (classname != "" && food_stage)
1825 {
1826 return FoodStage.GetEnergy(null, food_stage, classname);
1827 }
1828 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1829 return g_Game.ConfigGetFloat( class_path +
" energy" );
1830 }
1831
1833 {
1836 {
1838 }
1839 else if (classname != "" && food_stage)
1840 {
1841 return FoodStage.GetWater(null, food_stage, classname);
1842 }
1843 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1844 return g_Game.ConfigGetFloat( class_path +
" water" );
1845 }
1846
1848 {
1851 {
1852 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1853 }
1854 else if (classname != "" && food_stage)
1855 {
1856 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1857 }
1858 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1859 return g_Game.ConfigGetFloat( class_path +
" nutritionalIndex" );
1860
1861 }
1862
1864 {
1867 {
1868 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1869 }
1870 else if (classname != "" && food_stage)
1871 {
1872 return FoodStage.GetToxicity(null, food_stage, classname);
1873 }
1874 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1875 return g_Game.ConfigGetFloat( class_path +
" toxicity" );
1876 }
1877
1879 {
1882 {
1884 }
1885 else if (classname != "" && food_stage)
1886 {
1887 return FoodStage.GetAgents(null, food_stage, classname);
1888 }
1889 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1890 return g_Game.ConfigGetInt( class_path +
" agents" );
1891 }
1892
1894 {
1897 {
1898 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1899 }
1900 else if (classname != "" && food_stage)
1901 {
1902 return FoodStage.GetDigestibility(null, food_stage, classname);
1903 }
1904 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1905 return g_Game.ConfigGetInt( class_path +
" digestibility" );
1906 }
1907
1909 {
1912 {
1913 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1914 }
1915 else if (className != "" && foodStage)
1916 {
1917 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1918 }
1919 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1920 return g_Game.ConfigGetInt(classPath +
" agentsPerDigest");
1921 }
1922
1924 {
1934
1935 return profile;
1936 }
1937
1938
1939
1940
1942 {
1944 }
1945
1946
1948 {
1950 {
1952 }
1953
1954 return false;
1955 }
1956
1958 {
1960 {
1962 }
1963
1964 return false;
1965 }
1966
1968 {
1970 {
1972 }
1973
1974 return false;
1975 }
1976
1978 {
1980 {
1982 }
1983
1984 return false;
1985 }
1986
1988 {
1990 {
1992 }
1993
1994 return false;
1995 }
1996
1998 {
2000 {
2002 }
2003
2004 return false;
2005 }
2006
2007
2009 {
2011 }
2012
2014 {
2015 return GetFoodStage().GetNextFoodStageType( cooking_method );
2016 }
2017
2019 {
2020 return GetFoodStage().GetFoodStageName( food_stage_type );
2021 }
2022
2024 {
2025 return GetFoodStage().CanChangeToNewStage( cooking_method );
2026 }
2027
2028
2030 {
2031 if ( !source.GetFoodStage())
2032 return;
2037 }
2038
2041 {
2044 }
2045
2048 {
2049 switch (stageNew)
2050 {
2055 break;
2056
2059 break;
2060 }
2061 }
2062
2063
2064
2065
2066
2068 {
2070 }
2071
2073 {
2075
2076
2078 }
2079
2081 {
2083 {
2086 }
2087 }
2088
2089
2091 {
2093 if (player)
2094 {
2096 player.ServerReplaceItemInHandsWithNew(lambda);
2097 }
2098 else
2099 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2100 }
2101
2103 {
2105 }
2106
2108 {
2109 super.SetActions();
2110
2113 }
2114
2116 {
2117 #ifndef SERVER
2118 #ifndef NO_GUI
2120 {
2122
2125 }
2126 #endif
2127 #endif
2128 }
2129
2131 {
2132 #ifndef SERVER
2133 #ifndef NO_GUI
2135 {
2139 }
2140 #endif
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(
g_Game).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 (
g_Game.IsHeadlessOrDedicatedServer())
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 {
2387 {
2392 }
2393
2394 super.GetDebugActions(outputList);
2395 }
2396
2398 {
2399 super.OnAction(action_id, player, ctx);
2400
2402 {
2403 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2404 {
2406 if (food_stage_prev <= 0)
2407 {
2409 }
2411 return true;
2412 }
2413 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2414 {
2417 {
2419 }
2421 return true;
2422 }
2423
2424 }
2425
2426 #ifdef DIAG_DEVELOPER
2427 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2428 {
2429 PrintNutritionsData();
2430 return true;
2431 }
2432 #endif
2433
2434 return false;
2435 }
2436
2438 {
2439 string debug_output;
2440
2441 debug_output = super.GetDebugText();
2442
2445
2446 return debug_output;
2447 }
2448
2449
2450
2451
2452
2454 {
2455 float ret = super.GetBaitEffectivity();
2456
2458 {
2459 ret *= 0.5;
2460 }
2461
2462 return ret;
2463 }
2464
2466 {
2468 }
2469
2471 {
2473 }
2474
2476 {
2478 }
2479
2480 #ifdef DIAG_DEVELOPER
2481 private void PrintNutritionsData()
2482 {
2483 string nutritionsData = "";
2484
2487
2489 if (profile)
2490 {
2491 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2493 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2497 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2499
2502
2503 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2505 }
2506
2507 nutritionsData += "-----\n";
2508
2510 }
2511 #endif
2512
2514
2517 {
2519 }
2520}
2521
2523{
2525};
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 RemoveAllAgentsExcept(int agent_to_keep)
override void InsertAgent(int agent, float count=1)
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.
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
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
vector GetPosition()
Get the world position of the Effect.
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.