1469{
1471
1479
1489
1491
1493 {
1495 {
1497
1499 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1500
1504 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1505 }
1506 }
1507
1509 {
1511
1513 }
1514
1516 {
1517 super.EEDelete(parent);
1518
1520
1523 }
1524
1526 {
1527 super.EEItemLocationChanged(oldLoc, newLoc);
1528
1531 {
1532 switch (oldLoc.GetParent().GetType())
1533 {
1534 case "FryingPan":
1535 case "Pot":
1536 case "Cauldron":
1537 case "SharpWoodenStick":
1539 break;
1540 }
1541
1544 {
1546 }
1547 }
1548
1549 if (oldLoc.IsValid())
1551
1554 }
1555
1557 {
1560 }
1561
1563 {
1566
1567 return true;
1568 }
1569
1571 {
1573 {
1575 }
1576 }
1577
1580 {
1581 int foodStageType;
1582
1584 if (foodStage)
1585 foodStageType = foodStage.GetFoodStageType();
1586
1591
1592 return agentsIn;
1593 }
1594
1595
1597 {
1598 return false;
1599 }
1600
1602 {
1603 return false;
1604 }
1605
1607 {
1609 {
1611 {
1614
1617
1618 default:
1619 return super.GetTemperatureFreezeTime();
1620 }
1621 }
1622
1623 return super.GetTemperatureFreezeTime();
1624 }
1625
1627 {
1629 {
1631 {
1634
1637
1638 default:
1639 return super.GetTemperatureThawTime();
1640 }
1641 }
1642
1643 return super.GetTemperatureThawTime();
1644 }
1645
1647 {
1649 }
1650
1651
1652
1653
1655 {
1656 SetSynchDirty();
1657 }
1658
1660 {
1661 super.OnVariablesSynchronized();
1662
1663
1664
1665
1667 {
1669 }
1670 else
1671 {
1673 }
1674
1677 }
1678
1679
1680
1681
1683 {
1686
1688 }
1689
1691 {
1692 string soundName = "";
1693
1696
1698 {
1700 }
1701 else
1702 {
1704 {
1706 {
1711 else
1712 soundName = "";
1713 break;
1714 }
1715
1717 {
1722 else
1723 soundName = "";
1724 break;
1725 }
1726
1728 {
1733 else
1734 soundName = "";
1735 break;
1736 }
1737
1738 default:
1739 soundName = "";
1740 break;
1741 }
1742
1744 {
1745 if (soundName == "")
1746 {
1748 }
1749 else
1750 {
1752 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1753 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1755 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1756 {
1758 }
1759 }
1760 }
1761 }
1762
1764 }
1765
1767 {
1770 }
1771
1772
1773
1774
1776 {
1777 super.OnStoreSave(ctx);
1778
1780 {
1782 }
1783
1784
1787 }
1788
1790 {
1791 if (!super.OnStoreLoad(ctx, version))
1792 return false;
1793
1795 {
1797 return false;
1798 }
1799
1800 if (version >= 115)
1801 {
1803 {
1805 return false;
1806 }
1808 {
1810 return false;
1811 }
1812 }
1813
1816
1817 return true;
1818 }
1819
1821 {
1822 super.AfterStoreLoad();
1823
1825 }
1826
1827
1829 {
1831 }
1832
1833
1835 {
1836 return false;
1837 }
1838
1840 {
1841 return false;
1842 }
1843
1845 {
1846 return false;
1847 }
1848
1850 {
1851 return false;
1852 }
1853
1854
1855
1856
1857
1859 {
1862 {
1863 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1864 }
1865 else if (classname != "" && food_stage)
1866 {
1867 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1868 }
1869 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1871
1872 }
1873
1875 {
1878 {
1880 }
1881 else if (classname != "" && food_stage)
1882 {
1883 return FoodStage.GetEnergy(null, food_stage, classname);
1884 }
1885 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1887 }
1888
1890 {
1893 {
1895 }
1896 else if (classname != "" && food_stage)
1897 {
1898 return FoodStage.GetWater(null, food_stage, classname);
1899 }
1900 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1902 }
1903
1905 {
1908 {
1909 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1910 }
1911 else if (classname != "" && food_stage)
1912 {
1913 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1914 }
1915 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1917
1918 }
1919
1921 {
1924 {
1925 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1926 }
1927 else if (classname != "" && food_stage)
1928 {
1929 return FoodStage.GetToxicity(null, food_stage, classname);
1930 }
1931 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1933 }
1934
1936 {
1939 {
1941 }
1942 else if (classname != "" && food_stage)
1943 {
1944 return FoodStage.GetAgents(null, food_stage, classname);
1945 }
1946 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1948 }
1949
1951 {
1954 {
1955 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1956 }
1957 else if (classname != "" && food_stage)
1958 {
1959 return FoodStage.GetDigestibility(null, food_stage, classname);
1960 }
1961 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1963 }
1964
1966 {
1969 {
1970 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1971 }
1972 else if (className != "" && foodStage)
1973 {
1974 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1975 }
1976 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1978 }
1979
1981 {
1991
1992 return profile;
1993 }
1994
1995
1996
1997
1999 {
2001 }
2002
2003
2005 {
2007 {
2009 }
2010
2011 return false;
2012 }
2013
2015 {
2017 {
2019 }
2020
2021 return false;
2022 }
2023
2025 {
2027 {
2029 }
2030
2031 return false;
2032 }
2033
2035 {
2037 {
2039 }
2040
2041 return false;
2042 }
2043
2045 {
2047 {
2049 }
2050
2051 return false;
2052 }
2053
2055 {
2057 {
2059 }
2060
2061 return false;
2062 }
2063
2064
2066 {
2068 }
2069
2071 {
2072 return GetFoodStage().GetNextFoodStageType( cooking_method );
2073 }
2074
2076 {
2077 return GetFoodStage().GetFoodStageName( food_stage_type );
2078 }
2079
2081 {
2082 return GetFoodStage().CanChangeToNewStage( cooking_method );
2083 }
2084
2085
2087 {
2088 if ( !source.GetFoodStage())
2089 return;
2094 }
2095
2098 {
2101 }
2102
2105 {
2106 switch (stageNew)
2107 {
2112 break;
2113
2116 break;
2117 }
2118 }
2119
2120
2121
2122
2123
2125 {
2127 }
2128
2130 {
2132
2133
2135 }
2136
2138 {
2140 {
2143 }
2144 }
2145
2146
2148 {
2150 if (player)
2151 {
2153 player.ServerReplaceItemInHandsWithNew(lambda);
2154 }
2155 else
2156 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2157 }
2158
2160 {
2162 }
2163
2165 {
2166 super.SetActions();
2167
2170 }
2171
2173 {
2174 #ifndef SERVER
2176 {
2178
2181 }
2182 #endif
2183 }
2184
2186 {
2187 #ifndef SERVER
2189 {
2193 }
2194 #endif
2195 }
2196
2198 {
2199 return false;
2200 }
2201
2203 {
2205 }
2206
2207 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2208 {
2210
2211 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2213 if ( hasRootAsPlayer )
2215
2216
2217
2218
2219
2220
2221
2223 {
2224
2226 {
2228 {
2232 break;
2233
2237 break;
2238
2242 break;
2243
2247 default:
2250 return;
2251 }
2252
2253
2254 }
2255
2257
2259 {
2261 {
2262
2264 {
2266 }
2268 {
2271 {
2273 }
2274 else
2275 {
2277 {
2279 }
2280 else
2281 {
2283 }
2284 }
2285 }
2286 }
2287 }
2288
2289 }
2291 {
2292
2294 {
2296 {
2300 break;
2301
2305 break;
2306
2310 break;
2311
2315 break;
2316
2319 default:
2322 return;
2323 }
2324 }
2325
2327
2329 {
2331 {
2332
2334 {
2336 }
2337 }
2338 }
2339 }
2341 {
2342
2344 {
2346 {
2350 break;
2351
2354 default:
2357 return;
2358 }
2359 }
2360
2362
2364 {
2366 {
2367
2369 {
2371 }
2372 }
2373 }
2374 }
2375 else
2376 {
2377
2379
2381 {
2384
2385 }
2386 else
2387 {
2389 {
2392 }
2393 }
2394 }
2395 }
2396
2398 {
2399 if (
GetGame().IsDedicatedServer())
2400 return;
2401
2403 {
2405 GetInventory().GetCurrentInventoryLocation(invLoc);
2407 {
2409 if (ptcMgr)
2410 {
2415 }
2416 }
2417 }
2419 {
2421 {
2424 return;
2425 }
2426
2428 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2430 {
2433 }
2434 }
2435 }
2436
2437 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2438 {
2439 super.GetDebugActions(outputList);
2440
2442 {
2446 }
2447 }
2448
2450 {
2451 super.OnAction(action_id, player, ctx);
2452
2454 {
2455 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2456 {
2458 if (food_stage_prev <= 0)
2459 {
2461 }
2463 return true;
2464 }
2465 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2466 {
2469 {
2471 }
2473 return true;
2474 }
2475
2476 }
2477
2478 #ifdef DIAG_DEVELOPER
2479 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2480 {
2481 PrintNutritionsData();
2482 return true;
2483 }
2484 #endif
2485
2486 return false;
2487 }
2488
2490 {
2491 string debug_output;
2492
2493 debug_output = super.GetDebugText();
2494
2497
2498 return debug_output;
2499 }
2500
2501
2502
2503
2504
2506 {
2507 float ret = super.GetBaitEffectivity();
2508
2510 {
2511 ret *= 0.5;
2512 }
2513
2514 return ret;
2515 }
2516
2518 {
2520 }
2521
2523 {
2525 }
2526
2528 {
2530 }
2531
2532 #ifdef DIAG_DEVELOPER
2533 private void PrintNutritionsData()
2534 {
2535 string nutritionsData = "";
2536
2539
2541 if (profile)
2542 {
2543 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2545 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2549 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2551
2554
2555 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2557 }
2558
2559 nutritionsData += "-----\n";
2560
2562 }
2563 #endif
2564
2566
2569 {
2571 }
2572}
2573
2575{
2577};
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.