1499{
1501
1509
1519
1521
1523 {
1525 {
1527
1529 RegisterNetSyncVariableFloat("m_FoodStage.m_CookingTime", 0, 600, 0);
1530
1534 RegisterNetSyncVariableBool("m_MakeCookingSounds");
1535 }
1536 }
1537
1539 {
1541
1543 }
1544
1546 {
1547 super.EEDelete(parent);
1548
1550
1553 }
1554
1556 {
1557 super.EEItemLocationChanged(oldLoc, newLoc);
1558
1561 {
1562 switch (oldLoc.GetParent().GetType())
1563 {
1564 case "FryingPan":
1565 case "Pot":
1566 case "Cauldron":
1567 case "SharpWoodenStick":
1569 break;
1570 }
1571
1574 {
1576 }
1577 }
1578
1579 if (oldLoc.IsValid())
1581
1584 }
1585
1587 {
1590 }
1591
1593 {
1596
1597 return true;
1598 }
1599
1601 {
1603 {
1605 }
1606 }
1607
1610 {
1611 int foodStageType;
1612
1614 if (foodStage)
1615 foodStageType = foodStage.GetFoodStageType();
1616
1621
1622 return agentsIn;
1623 }
1624
1625
1627 {
1628 return false;
1629 }
1630
1632 {
1633 return false;
1634 }
1635
1637 {
1639 {
1641 {
1644
1647
1648 default:
1649 return super.GetTemperatureFreezeTime();
1650 }
1651 }
1652
1653 return super.GetTemperatureFreezeTime();
1654 }
1655
1657 {
1659 {
1661 {
1664
1667
1668 default:
1669 return super.GetTemperatureThawTime();
1670 }
1671 }
1672
1673 return super.GetTemperatureThawTime();
1674 }
1675
1677 {
1679 }
1680
1681
1682
1683
1685 {
1686 SetSynchDirty();
1687 }
1688
1690 {
1691 super.OnVariablesSynchronized();
1692
1693
1694
1695
1697 {
1699 }
1700 else
1701 {
1703 }
1704
1707 }
1708
1709
1710
1711
1713 {
1716
1718 }
1719
1721 {
1722 string soundName = "";
1723
1726
1728 {
1730 }
1731 else
1732 {
1734 {
1736 {
1741 else
1742 soundName = "";
1743 break;
1744 }
1745
1747 {
1752 else
1753 soundName = "";
1754 break;
1755 }
1756
1758 {
1763 else
1764 soundName = "";
1765 break;
1766 }
1767
1768 default:
1769 soundName = "";
1770 break;
1771 }
1772
1774 {
1775 if (soundName == "")
1776 {
1778 }
1779 else
1780 {
1782 nextStageProperties = FoodStage.GetAllCookingPropertiesForStage(nextFoodStage, null,
GetType());
1783 float nextStageTime = nextStageProperties.Get(eCookingPropertyIndices.COOK_TIME);
1785 if (progress01 > Cooking.BURNING_WARNING_THRESHOLD)
1786 {
1788 }
1789 }
1790 }
1791 }
1792
1794 }
1795
1797 {
1800 }
1801
1802
1803
1804
1806 {
1807 super.OnStoreSave(ctx);
1808
1810 {
1812 }
1813
1814
1817 }
1818
1820 {
1821 if (!super.OnStoreLoad(ctx, version))
1822 return false;
1823
1825 {
1827 return false;
1828 }
1829
1830 if (version >= 115)
1831 {
1833 {
1835 return false;
1836 }
1838 {
1840 return false;
1841 }
1842 }
1843
1846
1847 return true;
1848 }
1849
1851 {
1852 super.AfterStoreLoad();
1853
1855 }
1856
1857
1859 {
1861 }
1862
1863
1865 {
1866 return false;
1867 }
1868
1870 {
1871 return false;
1872 }
1873
1875 {
1876 return false;
1877 }
1878
1880 {
1881 return false;
1882 }
1883
1884
1885
1886
1887
1889 {
1892 {
1893 return FoodStage.GetFullnessIndex(food_item.
GetFoodStage());
1894 }
1895 else if (classname != "" && food_stage)
1896 {
1897 return FoodStage.GetFullnessIndex(null, food_stage, classname);
1898 }
1899 string class_path = string.Format("cfgVehicles %1 Nutrition", classname);
1901
1902 }
1903
1905 {
1908 {
1910 }
1911 else if (classname != "" && food_stage)
1912 {
1913 return FoodStage.GetEnergy(null, food_stage, classname);
1914 }
1915 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1917 }
1918
1920 {
1923 {
1925 }
1926 else if (classname != "" && food_stage)
1927 {
1928 return FoodStage.GetWater(null, food_stage, classname);
1929 }
1930 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1932 }
1933
1935 {
1938 {
1939 return FoodStage.GetNutritionalIndex(food_item.
GetFoodStage());
1940 }
1941 else if (classname != "" && food_stage)
1942 {
1943 return FoodStage.GetNutritionalIndex(null, food_stage, classname);
1944 }
1945 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1947
1948 }
1949
1951 {
1954 {
1955 return FoodStage.GetToxicity(food_item.
GetFoodStage());
1956 }
1957 else if (classname != "" && food_stage)
1958 {
1959 return FoodStage.GetToxicity(null, food_stage, classname);
1960 }
1961 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1963 }
1964
1966 {
1969 {
1971 }
1972 else if (classname != "" && food_stage)
1973 {
1974 return FoodStage.GetAgents(null, food_stage, classname);
1975 }
1976 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1978 }
1979
1981 {
1984 {
1985 return FoodStage.GetDigestibility(food_item.
GetFoodStage());
1986 }
1987 else if (classname != "" && food_stage)
1988 {
1989 return FoodStage.GetDigestibility(null, food_stage, classname);
1990 }
1991 string class_path =
string.
Format(
"cfgVehicles %1 Nutrition", classname);
1993 }
1994
1996 {
1999 {
2000 return FoodStage.GetAgentsPerDigest(foodItem.
GetFoodStage());
2001 }
2002 else if (className != "" && foodStage)
2003 {
2004 return FoodStage.GetAgentsPerDigest(null, foodStage, className);
2005 }
2006 string classPath = string.Format("cfgVehicles %1 Nutrition", className);
2008 }
2009
2011 {
2021
2022 return profile;
2023 }
2024
2025
2026
2027
2029 {
2031 }
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
2065 {
2067 {
2069 }
2070
2071 return false;
2072 }
2073
2075 {
2077 {
2079 }
2080
2081 return false;
2082 }
2083
2085 {
2087 {
2089 }
2090
2091 return false;
2092 }
2093
2094
2096 {
2098 }
2099
2101 {
2102 return GetFoodStage().GetNextFoodStageType( cooking_method );
2103 }
2104
2106 {
2107 return GetFoodStage().GetFoodStageName( food_stage_type );
2108 }
2109
2111 {
2112 return GetFoodStage().CanChangeToNewStage( cooking_method );
2113 }
2114
2115
2117 {
2118 if ( !source.GetFoodStage())
2119 return;
2124 }
2125
2128 {
2131 }
2132
2135 {
2136 switch (stageNew)
2137 {
2142 break;
2143
2146 break;
2147 }
2148 }
2149
2150
2151
2152
2153
2155 {
2157 }
2158
2160 {
2162
2163
2165 }
2166
2168 {
2170 {
2173 }
2174 }
2175
2176
2178 {
2180 if (player)
2181 {
2183 player.ServerReplaceItemInHandsWithNew(lambda);
2184 }
2185 else
2186 Error(
"ReplaceEdibleWithNew - cannot use edible without player");
2187 }
2188
2190 {
2192 }
2193
2195 {
2196 super.SetActions();
2197
2200 }
2201
2203 {
2204 #ifndef SERVER
2206 {
2208
2211 }
2212 #endif
2213 }
2214
2216 {
2217 #ifndef SERVER
2219 {
2223 }
2224 #endif
2225 }
2226
2228 {
2229 return false;
2230 }
2231
2233 {
2235 }
2236
2237 override void ProcessDecay(
float delta,
bool hasRootAsPlayer )
2238 {
2240
2241 delta *= DayZGame.Cast(
GetGame()).GetFoodDecayModifier();
2243 if ( hasRootAsPlayer )
2245
2246
2247
2248
2249
2250
2251
2253 {
2254
2256 {
2258 {
2262 break;
2263
2267 break;
2268
2272 break;
2273
2277 default:
2280 return;
2281 }
2282
2283
2284 }
2285
2287
2289 {
2291 {
2292
2294 {
2296 }
2298 {
2301 {
2303 }
2304 else
2305 {
2307 {
2309 }
2310 else
2311 {
2313 }
2314 }
2315 }
2316 }
2317 }
2318
2319 }
2321 {
2322
2324 {
2326 {
2330 break;
2331
2335 break;
2336
2340 break;
2341
2345 break;
2346
2349 default:
2352 return;
2353 }
2354 }
2355
2357
2359 {
2361 {
2362
2364 {
2366 }
2367 }
2368 }
2369 }
2371 {
2372
2374 {
2376 {
2380 break;
2381
2384 default:
2387 return;
2388 }
2389 }
2390
2392
2394 {
2396 {
2397
2399 {
2401 }
2402 }
2403 }
2404 }
2405 else
2406 {
2407
2409
2411 {
2414
2415 }
2416 else
2417 {
2419 {
2422 }
2423 }
2424 }
2425 }
2426
2428 {
2429 if (
GetGame().IsDedicatedServer())
2430 return;
2431
2433 {
2435 GetInventory().GetCurrentInventoryLocation(invLoc);
2437 {
2439 if (ptcMgr)
2440 {
2445 }
2446 }
2447 }
2449 {
2451 {
2454 return;
2455 }
2456
2458 GetInventory().GetCurrentInventoryLocation(inventoryLoc);
2460 {
2463 }
2464 }
2465 }
2466
2467 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
2468 {
2469 super.GetDebugActions(outputList);
2470
2472 {
2476 }
2477 }
2478
2480 {
2481 super.OnAction(action_id, player, ctx);
2482
2484 {
2485 if ( action_id ==
EActions.FOOD_STAGE_PREV )
2486 {
2488 if (food_stage_prev <= 0)
2489 {
2491 }
2493 return true;
2494 }
2495 else if ( action_id ==
EActions.FOOD_STAGE_NEXT )
2496 {
2499 {
2501 }
2503 return true;
2504 }
2505
2506 }
2507
2508 #ifdef DIAG_DEVELOPER
2509 if (action_id ==
EActions.FOOD_NUTRITIONS_DATA)
2510 {
2511 PrintNutritionsData();
2512 return true;
2513 }
2514 #endif
2515
2516 return false;
2517 }
2518
2520 {
2521 string debug_output;
2522
2523 debug_output = super.GetDebugText();
2524
2527
2528 return debug_output;
2529 }
2530
2531
2532
2533
2534
2536 {
2537 float ret = super.GetBaitEffectivity();
2538
2540 {
2541 ret *= 0.5;
2542 }
2543
2544 return ret;
2545 }
2546
2548 {
2550 }
2551
2553 {
2555 }
2556
2558 {
2560 }
2561
2562 #ifdef DIAG_DEVELOPER
2563 private void PrintNutritionsData()
2564 {
2565 string nutritionsData = "";
2566
2569
2571 if (profile)
2572 {
2573 nutritionsData =
string.
Format(
"Item: %1\n\n",
this);
2575 nutritionsData +=
string.
Format(
"Energy: %1\n", profile.
m_Energy);
2579 nutritionsData +=
string.
Format(
"Toxicity (obsolete): %1\n", profile.
m_Toxicity);
2581
2584
2585 nutritionsData +=
string.
Format(
"Agents: %1\n", profile.
m_Agents);
2587 }
2588
2589 nutritionsData += "-----\n";
2590
2592 }
2593 #endif
2594
2596
2599 {
2601 }
2602}
2603
2605{
2607};
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.