1490{
1492
1500
1510
1512
1514 {
1516 {
1518
1520 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1521
1525 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1526 }
1527 }
1528
1530 {
1532
1534 }
1535
1537 {
1538 super.EEDelete(parent);
1539
1541
1544 }
1545
1547 {
1548 super.EEItemLocationChanged(oldLoc, newLoc);
1549
1552 {
1553 switch (oldLoc.GetParent().GetType())
1554 {
1555 case "FryingPan":
1556 case "Pot":
1557 case "Cauldron":
1558 case "SharpWoodenStick":
1560 break;
1561 }
1562
1565 {
1567 }
1568 }
1569
1570 if (oldLoc.IsValid())
1572
1575 }
1576
1578 {
1581 }
1582
1584 {
1587
1588 return true;
1589 }
1590
1592 {
1594 {
1596 }
1597 }
1598
1601 {
1602 int foodStageType;
1603
1605 if (foodStage)
1606 foodStageType = foodStage.GetFoodStageType();
1607
1612
1613 return agentsIn;
1614 }
1615
1616
1618 {
1619 return false;
1620 }
1621
1623 {
1624 return false;
1625 }
1626
1628 {
1630 {
1632 {
1635
1638
1639 default:
1640 return super.GetTemperatureFreezeTime();
1641 }
1642 }
1643
1644 return super.GetTemperatureFreezeTime();
1645 }
1646
1648 {
1650 {
1652 {
1655
1658
1659 default:
1660 return super.GetTemperatureThawTime();
1661 }
1662 }
1663
1664 return super.GetTemperatureThawTime();
1665 }
1666
1668 {
1670 }
1671
1672
1673
1674
1676 {
1677 SetSynchDirty();
1678 }
1679
1681 {
1682 super.OnVariablesSynchronized();
1683
1684
1685
1686
1688 {
1690 }
1691 else
1692 {
1694 }
1695
1698 }
1699
1700
1701
1702
1704 {
1707
1709 }
1710
1712 {
1713 string soundName = "";
1714
1717
1719 {
1721 }
1722 else
1723 {
1725 {
1727 {
1732 else
1733 soundName = "";
1734 break;
1735 }
1736
1738 {
1743 else
1744 soundName = "";
1745 break;
1746 }
1747
1749 {
1754 else
1755 soundName = "";
1756 break;
1757 }
1758
1759 default:
1760 soundName = "";
1761 break;
1762 }
1763
1765 {
1766 if (soundName == "")
1767 {
1769 }
1770 else
1771 {
1773 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1774 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1776 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1777 {
1779 }
1780 }
1781 }
1782 }
1783
1785 }
1786
1788 {
1791 }
1792
1793
1794
1795
1797 {
1798 super.OnStoreSave(ctx);
1799
1801 {
1803 }
1804
1805
1808 }
1809
1811 {
1812 if (!super.OnStoreLoad(ctx, version))
1813 return false;
1814
1816 {
1818 return false;
1819 }
1820
1821 if (version >= 115)
1822 {
1824 {
1826 return false;
1827 }
1829 {
1831 return false;
1832 }
1833 }
1834
1837
1838 return true;
1839 }
1840
1842 {
1843 super.AfterStoreLoad();
1844
1846 }
1847
1848
1850 {
1852 }
1853
1854
1856 {
1857 return false;
1858 }
1859
1861 {
1862 return false;
1863 }
1864
1866 {
1867 return false;
1868 }
1869
1871 {
1872 return false;
1873 }
1874
1875
1876
1877
1878
1880 {
1883 {
1884 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1885 }
1886 else if (classname != "" && food_stage)
1887 {
1888 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1889 }
1890 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1892
1893 }
1894
1896 {
1899 {
1901 }
1902 else if (classname != "" && food_stage)
1903 {
1904 return FoodStage.GetEnergy(null, food_stage, classname);
1905 }
1906 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1908 }
1909
1911 {
1914 {
1916 }
1917 else if (classname != "" && food_stage)
1918 {
1919 return FoodStage.GetWater(null, food_stage, classname);
1920 }
1921 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1923 }
1924
1926 {
1929 {
1930 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1931 }
1932 else if (classname != "" && food_stage)
1933 {
1934 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1935 }
1936 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1938
1939 }
1940
1942 {
1945 {
1946 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1947 }
1948 else if (classname != "" && food_stage)
1949 {
1950 return FoodStage.GetToxicity(null, food_stage, classname);
1951 }
1952 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1954 }
1955
1957 {
1960 {
1962 }
1963 else if (classname != "" && food_stage)
1964 {
1965 return FoodStage.GetAgents(null, food_stage, classname);
1966 }
1967 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1969 }
1970
1972 {
1975 {
1976 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1977 }
1978 else if (classname != "" && food_stage)
1979 {
1980 return FoodStage.GetDigestibility(null, food_stage, classname);
1981 }
1982 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1984 }
1985
1987 {
1990 {
1991 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
1992 }
1993 else if (className != "" && foodStage)
1994 {
1995 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
1996 }
1997 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
1999 }
2000
2002 {
2012
2013 return profile;
2014 }
2015
2016
2017
2018
2020 {
2022 }
2023
2024
2026 {
2028 {
2030 }
2031
2032 return false;
2033 }
2034
2036 {
2038 {
2040 }
2041
2042 return false;
2043 }
2044
2046 {
2048 {
2050 }
2051
2052 return false;
2053 }
2054
2056 {
2058 {
2060 }
2061
2062 return false;
2063 }
2064
2066 {
2068 {
2070 }
2071
2072 return false;
2073 }
2074
2076 {
2078 {
2080 }
2081
2082 return false;
2083 }
2084
2085
2087 {
2089 }
2090
2092 {
2093 return GetFoodStage().GetNextFoodStageType( cooking_method );
2094 }
2095
2097 {
2098 return GetFoodStage().GetFoodStageName( food_stage_type );
2099 }
2100
2102 {
2103 return GetFoodStage().CanChangeToNewStage( cooking_method );
2104 }
2105
2106
2108 {
2109 if ( !source.GetFoodStage())
2110 return;
2115 }
2116
2119 {
2122 }
2123
2126 {
2127 switch (stageNew)
2128 {
2133 break;
2134
2137 break;
2138 }
2139 }
2140
2141
2142
2143
2144
2146 {
2148 }
2149
2151 {
2153
2154
2156 }
2157
2159 {
2161 {
2164 }
2165 }
2166
2167
2169 {
2171 if (player)
2172 {
2174 player.ServerReplaceItemInHandsWithNew(lambda);
2175 }
2176 else
2177 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2178 }
2179
2181 {
2183 }
2184
2186 {
2187 super.SetActions();
2188
2191 }
2192
2194 {
2195 #ifndef SERVER
2197 {
2199
2202 }
2203 #endif
2204 }
2205
2207 {
2208 #ifndef SERVER
2210 {
2214 }
2215 #endif
2216 }
2217
2219 {
2220 return false;
2221 }
2222
2224 {
2226 }
2227
2228 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2229 {
2231
2232 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2234 if ( hasRootAsPlayer )
2236
2237
2238
2239
2240
2241
2242
2244 {
2245
2247 {
2249 {
2253 break;
2254
2258 break;
2259
2263 break;
2264
2268 default:
2271 return;
2272 }
2273
2274
2275 }
2276
2278
2280 {
2282 {
2283
2285 {
2287 }
2289 {
2292 {
2294 }
2295 else
2296 {
2298 {
2300 }
2301 else
2302 {
2304 }
2305 }
2306 }
2307 }
2308 }
2309
2310 }
2312 {
2313
2315 {
2317 {
2321 break;
2322
2326 break;
2327
2331 break;
2332
2336 break;
2337
2340 default:
2343 return;
2344 }
2345 }
2346
2348
2350 {
2352 {
2353
2355 {
2357 }
2358 }
2359 }
2360 }
2362 {
2363
2365 {
2367 {
2371 break;
2372
2375 default:
2378 return;
2379 }
2380 }
2381
2383
2385 {
2387 {
2388
2390 {
2392 }
2393 }
2394 }
2395 }
2396 else
2397 {
2398
2400
2402 {
2405
2406 }
2407 else
2408 {
2410 {
2413 }
2414 }
2415 }
2416 }
2417
2419 {
2420 if (
GetGame().IsDedicatedServer())
2421 return;
2422
2424 {
2426 GetInventory().GetCurrentInventoryLocation(invLoc);
2428 {
2430 if (ptcMgr)
2431 {
2436 }
2437 }
2438 }
2440 {
2442 {
2445 return;
2446 }
2447
2449 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2451 {
2454 }
2455 }
2456 }
2457
2458 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2459 {
2460 super.GetDebugActions(outputList);
2461
2463 {
2467 }
2468 }
2469
2471 {
2472 super.OnAction(action_id, player, ctx);
2473
2475 {
2476 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2477 {
2479 if (food_stage_prev <= 0)
2480 {
2482 }
2484 return true;
2485 }
2486 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2487 {
2490 {
2492 }
2494 return true;
2495 }
2496
2497 }
2498
2499 #ifdef DIAG_DEVELOPER
2500 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2501 {
2502 PrintNutritionsData();
2503 return true;
2504 }
2505 #endif
2506
2507 return false;
2508 }
2509
2511 {
2512 string debug_output;
2513
2514 debug_output = super.GetDebugText();
2515
2518
2519 return debug_output;
2520 }
2521
2522
2523
2524
2525
2527 {
2528 float ret = super.GetBaitEffectivity();
2529
2531 {
2532 ret *= 0.5;
2533 }
2534
2535 return ret;
2536 }
2537
2539 {
2541 }
2542
2544 {
2546 }
2547
2549 {
2551 }
2552
2553 #ifdef DIAG_DEVELOPER
2554 private void PrintNutritionsData()
2555 {
2556 string nutritionsData = "";
2557
2560
2562 if (profile)
2563 {
2564 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2566 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2570 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2572
2575
2576 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2578 }
2579
2580 nutritionsData += "-----\n";
2581
2583 }
2584 #endif
2585
2587
2590 {
2592 }
2593}
2594
2596{
2598};
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.