1476{
1478
1486
1496
1498
1500 {
1502 {
1504
1506 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1507
1511 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1512 }
1513 }
1514
1516 {
1518
1520 }
1521
1523 {
1524 super.EEDelete(parent);
1525
1527
1530 }
1531
1533 {
1534 super.EEItemLocationChanged(oldLoc, newLoc);
1535
1538 {
1539 switch (oldLoc.GetParent().GetType())
1540 {
1541 case "FryingPan":
1542 case "Pot":
1543 case "Cauldron":
1544 case "SharpWoodenStick":
1546 break;
1547 }
1548
1551 {
1553 }
1554 }
1555
1556 if (oldLoc.IsValid())
1558
1561 }
1562
1564 {
1567 }
1568
1570 {
1573
1574 return true;
1575 }
1576
1578 {
1580 {
1582 }
1583 }
1584
1587 {
1588 int foodStageType;
1589
1591 if (foodStage)
1592 foodStageType = foodStage.GetFoodStageType();
1593
1598
1599 return agentsIn;
1600 }
1601
1602
1604 {
1605 return false;
1606 }
1607
1609 {
1610 return false;
1611 }
1612
1614 {
1616 {
1618 {
1621
1624
1625 default:
1626 return super.GetTemperatureFreezeTime();
1627 }
1628 }
1629
1630 return super.GetTemperatureFreezeTime();
1631 }
1632
1634 {
1636 {
1638 {
1641
1644
1645 default:
1646 return super.GetTemperatureThawTime();
1647 }
1648 }
1649
1650 return super.GetTemperatureThawTime();
1651 }
1652
1654 {
1656 }
1657
1658
1659
1660
1662 {
1663 SetSynchDirty();
1664 }
1665
1667 {
1668 super.OnVariablesSynchronized();
1669
1670
1671
1672
1674 {
1676 }
1677 else
1678 {
1680 }
1681
1684 }
1685
1686
1687
1688
1690 {
1693
1695 }
1696
1698 {
1699 string soundName = "";
1700
1703
1705 {
1707 }
1708 else
1709 {
1711 {
1713 {
1718 else
1719 soundName = "";
1720 break;
1721 }
1722
1724 {
1729 else
1730 soundName = "";
1731 break;
1732 }
1733
1735 {
1740 else
1741 soundName = "";
1742 break;
1743 }
1744
1745 default:
1746 soundName = "";
1747 break;
1748 }
1749
1751 {
1752 if (soundName == "")
1753 {
1755 }
1756 else
1757 {
1759 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1760 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1762 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1763 {
1765 }
1766 }
1767 }
1768 }
1769
1771 }
1772
1774 {
1777 }
1778
1779
1780
1781
1783 {
1784 super.OnStoreSave(ctx);
1785
1787 {
1789 }
1790
1791
1794 }
1795
1797 {
1798 if (!super.OnStoreLoad(ctx, version))
1799 return false;
1800
1802 {
1804 return false;
1805 }
1806
1807 if (version >= 115)
1808 {
1810 {
1812 return false;
1813 }
1815 {
1817 return false;
1818 }
1819 }
1820
1823
1824 return true;
1825 }
1826
1828 {
1829 super.AfterStoreLoad();
1830
1832 }
1833
1834
1836 {
1838 }
1839
1840
1842 {
1843 return false;
1844 }
1845
1847 {
1848 return false;
1849 }
1850
1852 {
1853 return false;
1854 }
1855
1857 {
1858 return false;
1859 }
1860
1861
1862
1863
1864
1866 {
1869 {
1870 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1871 }
1872 else if (classname != "" && food_stage)
1873 {
1874 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1875 }
1876 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1878
1879 }
1880
1882 {
1885 {
1887 }
1888 else if (classname != "" && food_stage)
1889 {
1890 return FoodStage.GetEnergy(null, food_stage, classname);
1891 }
1892 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1894 }
1895
1897 {
1900 {
1902 }
1903 else if (classname != "" && food_stage)
1904 {
1905 return FoodStage.GetWater(null, food_stage, classname);
1906 }
1907 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1909 }
1910
1912 {
1915 {
1916 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1917 }
1918 else if (classname != "" && food_stage)
1919 {
1920 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1921 }
1922 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1924
1925 }
1926
1928 {
1931 {
1932 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1933 }
1934 else if (classname != "" && food_stage)
1935 {
1936 return FoodStage.GetToxicity(null, food_stage, classname);
1937 }
1938 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1940 }
1941
1943 {
1946 {
1948 }
1949 else if (classname != "" && food_stage)
1950 {
1951 return FoodStage.GetAgents(null, food_stage, classname);
1952 }
1953 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1955 }
1956
1958 {
1961 {
1962 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1963 }
1964 else if (classname != "" && food_stage)
1965 {
1966 return FoodStage.GetDigestibility(null, food_stage, classname);
1967 }
1968 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1970 }
1971
1973 {
1976 {
1977 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1978 }
1979 else if (className != "" && foodStage)
1980 {
1981 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1982 }
1983 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1985 }
1986
1988 {
1998
1999 return profile;
2000 }
2001
2002
2003
2004
2006 {
2008 }
2009
2010
2012 {
2014 {
2016 }
2017
2018 return false;
2019 }
2020
2022 {
2024 {
2026 }
2027
2028 return false;
2029 }
2030
2032 {
2034 {
2036 }
2037
2038 return false;
2039 }
2040
2042 {
2044 {
2046 }
2047
2048 return false;
2049 }
2050
2052 {
2054 {
2056 }
2057
2058 return false;
2059 }
2060
2062 {
2064 {
2066 }
2067
2068 return false;
2069 }
2070
2071
2073 {
2075 }
2076
2078 {
2079 return GetFoodStage().GetNextFoodStageType( cooking_method );
2080 }
2081
2083 {
2084 return GetFoodStage().GetFoodStageName( food_stage_type );
2085 }
2086
2088 {
2089 return GetFoodStage().CanChangeToNewStage( cooking_method );
2090 }
2091
2092
2094 {
2095 if ( !source.GetFoodStage())
2096 return;
2101 }
2102
2105 {
2108 }
2109
2112 {
2113 switch (stageNew)
2114 {
2119 break;
2120
2123 break;
2124 }
2125 }
2126
2127
2128
2129
2130
2132 {
2134 }
2135
2137 {
2139
2140
2142 }
2143
2145 {
2147 {
2150 }
2151 }
2152
2153
2155 {
2157 if (player)
2158 {
2160 player.ServerReplaceItemInHandsWithNew(lambda);
2161 }
2162 else
2163 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2164 }
2165
2167 {
2169 }
2170
2172 {
2173 super.SetActions();
2174
2177 }
2178
2180 {
2181 #ifndef SERVER
2183 {
2185
2188 }
2189 #endif
2190 }
2191
2193 {
2194 #ifndef SERVER
2196 {
2200 }
2201 #endif
2202 }
2203
2205 {
2206 return false;
2207 }
2208
2210 {
2212 }
2213
2214 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2215 {
2217
2218 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2220 if ( hasRootAsPlayer )
2222
2223
2224
2225
2226
2227
2228
2230 {
2231
2233 {
2235 {
2239 break;
2240
2244 break;
2245
2249 break;
2250
2254 default:
2257 return;
2258 }
2259
2260
2261 }
2262
2264
2266 {
2268 {
2269
2271 {
2273 }
2275 {
2278 {
2280 }
2281 else
2282 {
2284 {
2286 }
2287 else
2288 {
2290 }
2291 }
2292 }
2293 }
2294 }
2295
2296 }
2298 {
2299
2301 {
2303 {
2307 break;
2308
2312 break;
2313
2317 break;
2318
2322 break;
2323
2326 default:
2329 return;
2330 }
2331 }
2332
2334
2336 {
2338 {
2339
2341 {
2343 }
2344 }
2345 }
2346 }
2348 {
2349
2351 {
2353 {
2357 break;
2358
2361 default:
2364 return;
2365 }
2366 }
2367
2369
2371 {
2373 {
2374
2376 {
2378 }
2379 }
2380 }
2381 }
2382 else
2383 {
2384
2386
2388 {
2391
2392 }
2393 else
2394 {
2396 {
2399 }
2400 }
2401 }
2402 }
2403
2405 {
2406 if (
GetGame().IsDedicatedServer())
2407 return;
2408
2410 {
2412 GetInventory().GetCurrentInventoryLocation(invLoc);
2414 {
2416 if (ptcMgr)
2417 {
2422 }
2423 }
2424 }
2426 {
2428 {
2431 return;
2432 }
2433
2435 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2437 {
2440 }
2441 }
2442 }
2443
2444 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2445 {
2447 {
2452 }
2453
2454 super.GetDebugActions(outputList);
2455 }
2456
2458 {
2459 super.OnAction(action_id, player, ctx);
2460
2462 {
2463 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2464 {
2466 if (food_stage_prev <= 0)
2467 {
2469 }
2471 return true;
2472 }
2473 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2474 {
2477 {
2479 }
2481 return true;
2482 }
2483
2484 }
2485
2486 #ifdef DIAG_DEVELOPER
2487 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2488 {
2489 PrintNutritionsData();
2490 return true;
2491 }
2492 #endif
2493
2494 return false;
2495 }
2496
2498 {
2499 string debug_output;
2500
2501 debug_output = super.GetDebugText();
2502
2505
2506 return debug_output;
2507 }
2508
2509
2510
2511
2512
2514 {
2515 float ret = super.GetBaitEffectivity();
2516
2518 {
2519 ret *= 0.5;
2520 }
2521
2522 return ret;
2523 }
2524
2526 {
2528 }
2529
2531 {
2533 }
2534
2536 {
2538 }
2539
2540 #ifdef DIAG_DEVELOPER
2541 private void PrintNutritionsData()
2542 {
2543 string nutritionsData = "";
2544
2547
2549 if (profile)
2550 {
2551 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2553 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2557 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2559
2562
2563 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2565 }
2566
2567 nutritionsData += "-----\n";
2568
2570 }
2571 #endif
2572
2574
2577 {
2579 }
2580}
2581
2583{
2585};
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.