1407{
1409
1417
1427
1429
1431 {
1433 {
1435
1437 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1438
1442 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1443 }
1444 }
1445
1447 {
1449
1451 }
1452
1454 {
1455 super.EEDelete(parent);
1456
1458
1461 }
1462
1464 {
1465 super.EEItemLocationChanged(oldLoc, newLoc);
1466
1469 {
1470 switch (oldLoc.GetParent().GetType())
1471 {
1472 case "FryingPan":
1473 case "Pot":
1474 case "Cauldron":
1475 case "SharpWoodenStick":
1477 break;
1478 }
1479
1482 {
1484 }
1485 }
1486
1487 if (oldLoc.IsValid())
1489
1492 }
1493
1495 {
1498 }
1499
1501 {
1504
1505 return true;
1506 }
1507
1509 {
1511 {
1513 }
1514 }
1515
1518 {
1519 int foodStageType;
1520
1522 if (foodStage)
1523 foodStageType = foodStage.GetFoodStageType();
1524
1529
1530 return agentsIn;
1531 }
1532
1533
1535 {
1536 return false;
1537 }
1538
1540 {
1541 return false;
1542 }
1543
1545 {
1547 {
1549 {
1552
1555
1556 default:
1557 return super.GetTemperatureFreezeTime();
1558 }
1559 }
1560
1561 return super.GetTemperatureFreezeTime();
1562 }
1563
1565 {
1567 {
1569 {
1572
1575
1576 default:
1577 return super.GetTemperatureThawTime();
1578 }
1579 }
1580
1581 return super.GetTemperatureThawTime();
1582 }
1583
1585 {
1587 }
1588
1589
1590
1591
1593 {
1594 SetSynchDirty();
1595 }
1596
1598 {
1599 super.OnVariablesSynchronized();
1600
1601
1602
1603
1605 {
1607 }
1608 else
1609 {
1611 }
1612
1615 }
1616
1617
1618
1619
1621 {
1624
1626 }
1627
1629 {
1630 string soundName = "";
1631
1634
1636 {
1638 }
1639 else
1640 {
1642 {
1644 {
1649 else
1650 soundName = "";
1651 break;
1652 }
1653
1655 {
1660 else
1661 soundName = "";
1662 break;
1663 }
1664
1666 {
1671 else
1672 soundName = "";
1673 break;
1674 }
1675
1676 default:
1677 soundName = "";
1678 break;
1679 }
1680
1682 {
1683 if (soundName == "")
1684 {
1686 }
1687 else
1688 {
1690 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1691 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1693 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1694 {
1696 }
1697 }
1698 }
1699 }
1700
1702 }
1703
1705 {
1708 }
1709
1710
1711
1712
1714 {
1715 super.OnStoreSave(ctx);
1716
1718 {
1720 }
1721
1722
1725 }
1726
1728 {
1729 if (!super.OnStoreLoad(ctx, version))
1730 return false;
1731
1733 {
1735 return false;
1736 }
1737
1738 if (version >= 115)
1739 {
1741 {
1743 return false;
1744 }
1746 {
1748 return false;
1749 }
1750 }
1751
1754
1755 return true;
1756 }
1757
1759 {
1760 super.AfterStoreLoad();
1761
1763 }
1764
1765
1767 {
1769 }
1770
1771
1773 {
1774 return false;
1775 }
1776
1778 {
1779 return false;
1780 }
1781
1783 {
1784 return false;
1785 }
1786
1788 {
1789 return false;
1790 }
1791
1792
1793
1794
1795
1797 {
1800 {
1801 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1802 }
1803 else if (classname != "" && food_stage)
1804 {
1805 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1806 }
1807 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1809
1810 }
1811
1813 {
1816 {
1818 }
1819 else if (classname != "" && food_stage)
1820 {
1821 return FoodStage.GetEnergy(null, food_stage, classname);
1822 }
1823 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1825 }
1826
1828 {
1831 {
1833 }
1834 else if (classname != "" && food_stage)
1835 {
1836 return FoodStage.GetWater(null, food_stage, classname);
1837 }
1838 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1840 }
1841
1843 {
1846 {
1847 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1848 }
1849 else if (classname != "" && food_stage)
1850 {
1851 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1852 }
1853 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1855
1856 }
1857
1859 {
1862 {
1863 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1864 }
1865 else if (classname != "" && food_stage)
1866 {
1867 return FoodStage.GetToxicity(null, food_stage, classname);
1868 }
1869 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1871 }
1872
1874 {
1877 {
1879 }
1880 else if (classname != "" && food_stage)
1881 {
1882 return FoodStage.GetAgents(null, food_stage, classname);
1883 }
1884 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1886 }
1887
1889 {
1892 {
1893 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1894 }
1895 else if (classname != "" && food_stage)
1896 {
1897 return FoodStage.GetDigestibility(null, food_stage, classname);
1898 }
1899 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1901 }
1902
1904 {
1907 {
1908 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1909 }
1910 else if (className != "" && foodStage)
1911 {
1912 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1913 }
1914 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1916 }
1917
1919 {
1929
1930 return profile;
1931 }
1932
1933
1934
1935
1937 {
1939 }
1940
1941
1943 {
1945 {
1947 }
1948
1949 return false;
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
2002
2004 {
2006 }
2007
2009 {
2010 return GetFoodStage().GetNextFoodStageType( cooking_method );
2011 }
2012
2014 {
2015 return GetFoodStage().GetFoodStageName( food_stage_type );
2016 }
2017
2019 {
2020 return GetFoodStage().CanChangeToNewStage( cooking_method );
2021 }
2022
2023
2025 {
2026 if ( !source.GetFoodStage())
2027 return;
2032 }
2033
2036 {
2039 }
2040
2043 {
2044 switch (stageNew)
2045 {
2050 break;
2051
2054 break;
2055 }
2056 }
2057
2058
2059
2060
2061
2063 {
2065 }
2066
2068 {
2070
2071
2073 }
2074
2076 {
2078 {
2081 }
2082 }
2083
2084
2086 {
2088 if (player)
2089 {
2091 player.ServerReplaceItemInHandsWithNew(lambda);
2092 }
2093 else
2094 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2095 }
2096
2098 {
2100 }
2101
2103 {
2104 super.SetActions();
2105
2108 }
2109
2111 {
2112 #ifndef SERVER
2114 {
2116
2119 }
2120 #endif
2121 }
2122
2124 {
2125 #ifndef SERVER
2127 {
2131 }
2132 #endif
2133 }
2134
2136 {
2137 return false;
2138 }
2139
2141 {
2143 }
2144
2145 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2146 {
2148
2149 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2151 if ( hasRootAsPlayer )
2153
2154
2155
2156
2157
2158
2159
2161 {
2162
2164 {
2166 {
2170 break;
2171
2175 break;
2176
2180 break;
2181
2185 default:
2188 return;
2189 }
2190
2191
2192 }
2193
2195
2197 {
2199 {
2200
2202 {
2204 }
2206 {
2209 {
2211 }
2212 else
2213 {
2215 {
2217 }
2218 else
2219 {
2221 }
2222 }
2223 }
2224 }
2225 }
2226
2227 }
2229 {
2230
2232 {
2234 {
2238 break;
2239
2243 break;
2244
2248 break;
2249
2253 break;
2254
2257 default:
2260 return;
2261 }
2262 }
2263
2265
2267 {
2269 {
2270
2272 {
2274 }
2275 }
2276 }
2277 }
2279 {
2280
2282 {
2284 {
2288 break;
2289
2292 default:
2295 return;
2296 }
2297 }
2298
2300
2302 {
2304 {
2305
2307 {
2309 }
2310 }
2311 }
2312 }
2313 else
2314 {
2315
2317
2319 {
2322
2323 }
2324 else
2325 {
2327 {
2330 }
2331 }
2332 }
2333 }
2334
2336 {
2337 if (
GetGame().IsDedicatedServer())
2338 return;
2339
2341 {
2343 GetInventory().GetCurrentInventoryLocation(invLoc);
2345 {
2347 if (ptcMgr)
2348 {
2353 }
2354 }
2355 }
2357 {
2359 {
2362 return;
2363 }
2364
2366 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2368 {
2371 }
2372 }
2373 }
2374
2375 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2376 {
2377 super.GetDebugActions(outputList);
2378
2380 {
2384 }
2385 }
2386
2388 {
2389 super.OnAction(action_id, player, ctx);
2390
2392 {
2393 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2394 {
2396 if (food_stage_prev <= 0)
2397 {
2399 }
2401 return true;
2402 }
2403 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2404 {
2407 {
2409 }
2411 return true;
2412 }
2413
2414 }
2415
2416 #ifdef DIAG_DEVELOPER
2417 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2418 {
2419 PrintNutritionsData();
2420 return true;
2421 }
2422 #endif
2423
2424 return false;
2425 }
2426
2428 {
2429 string debug_output;
2430
2431 debug_output = super.GetDebugText();
2432
2435
2436 return debug_output;
2437 }
2438
2439
2440
2441
2442
2444 {
2445 float ret = super.GetBaitEffectivity();
2446
2448 {
2449 ret *= 0.5;
2450 }
2451
2452 return ret;
2453 }
2454
2456 {
2458 }
2459
2461 {
2463 }
2464
2466 {
2468 }
2469
2470 #ifdef DIAG_DEVELOPER
2471 private void PrintNutritionsData()
2472 {
2473 string nutritionsData = "";
2474
2477
2479 if (profile)
2480 {
2481 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2483 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2487 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2489
2492
2493 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2495 }
2496
2497 nutritionsData += "-----\n";
2498
2500 }
2501 #endif
2502
2504
2507 {
2509 }
2510}
2511
2513{
2515};
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.